commit f99f6731a2240bf9d85677ae502bfb8914ee35f3 Author: root Date: Sun Oct 8 17:44:34 2023 +0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..4d57428 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +dat/ +wz/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100755 index 0000000..1c2fda5 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100755 index 0000000..78b9a83 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Z:\ \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100755 index 0000000..bf2fdcc --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100755 index 0000000..e2e88af --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100755 index 0000000..a468a99 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100755 index 0000000..6992610 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100755 index 0000000..da69a0d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100755 index 0000000..dea57e3 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Chat.txt b/Chat.txt new file mode 100755 index 0000000..e69de29 diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..30bd36e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM maven:3.8.1-openjdk-17 AS build +COPY pom.xml /home/app/pom.xml +COPY src /home/app/src +RUN --mount=type=cache,target=/root/.m2 mvn -f /home/app/pom.xml clean package -Dmaven.test.skip + +FROM openjdk:17-alpine +COPY wz /usr/local/maple/wz +COPY dat /usr/local/maple/dat +COPY scripts /usr/local/maple/scripts +COPY resources /usr/local/maple/resources +COPY src /usr/local/maple/src +COPY properties /usr/local/maple/properties +COPY --from=build /home/app/bin/maplestory-2.13.1-jar-with-dependencies.jar /usr/local/maple/maplestory-2.13.1-jar-with-dependencies.jar +EXPOSE 8484 +EXPOSE 8483 +WORKDIR /usr/local/maple +ENTRYPOINT ["java","-cp","/usr/local/maple/maplestory-2.13.1-jar-with-dependencies.jar","net.swordie.ms.Server"] diff --git a/ErrorCodes.txt b/ErrorCodes.txt new file mode 100755 index 0000000..4db7a40 --- /dev/null +++ b/ErrorCodes.txt @@ -0,0 +1,134 @@ + +------------------------ 2022-02-24 21:23:23 ------------------------ +Exception log: [REMOTE_MELEE_ATTACK], 790/0x316 | 02 00 00 00 02 FA 09 01 00 00 01 00 00 00 5C 78 D7 00 00 00 00 00 00 00 00 00 00 00 B3 03 01 00 00 00 00 00 01 02 00 00 00 00 00 9F 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 E2 7C 29 C8 01 00 00 00 01 6C D8 C3 0D 01 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 75 85 83 4A 01 00 00 00 00 D0 00 9B 9B 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 8A 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A AA D7 FC 01 00 00 00 00 D5 96 A7 67 01 00 00 00 00 F4 91 F8 12 02 00 00 00 01 AB AF B1 97 01 00 00 00 00 2C 93 94 C6 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 99 DF DB 57 01 00 00 00 01 8C FA 17 49 02 00 00 00 66 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 03 C2 49 DC 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 01 FA 55 AB 7C 01 00 00 00 70 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 0B 54 02 00 00 00 01 C4 7C F7 56 01 00 00 00 01 6A 15 07 0F 01 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 AE 2D EB E1 01 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 4B A6 EA 76 01 00 00 00 00 17 F1 84 35 01 00 00 00 90 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 84 0F 9B 86 01 00 00 00 00 00 E4 0B 54 02 00 00 00 00 FE FC 3B 8B 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 F3 77 74 95 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 35 FB 21 0F 02 00 00 00 8C 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 C4 88 D0 44 01 00 00 00 01 00 E4 0B 54 02 00 00 00 01 40 C2 31 F1 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 77 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B3 98 B6 AB 01 00 00 00 00 78 3F 1E 69 01 00 00 00 00 00 E4 0B 54 02 00 00 00 01 92 45 4D E9 01 00 00 00 00 C4 5C EB 33 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 E5 2F AF F7 01 00 00 00 00 36 F0 CD 17 02 00 00 00 00 D2 B8 AD 0C 01 00 00 00 8F 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 61 BF DB 01 00 00 00 00 F8 35 12 29 02 00 00 00 01 B9 F6 28 4A 01 00 00 00 01 25 86 B1 54 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 9B 38 1F 11 01 00 00 00 A5 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7D 8E F7 3C 02 00 00 00 00 BF 2F 76 8C 01 00 00 00 00 8E 20 DB 67 01 00 00 00 00 68 17 4F 83 01 00 00 00 00 00 E4 0B 54 02 00 00 00 01 BD B9 9A A7 01 00 00 00 01 BC 7C DE 06 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 5D 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 0B 54 02 00 00 00 00 DB 5D 76 BA 01 00 00 00 01 FB 78 B8 21 02 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 F3 CA 88 41 01 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 5E 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 BC A6 8C FE 01 00 00 00 01 00 E4 0B 54 02 00 00 00 01 E0 A2 16 20 01 00 00 00 01 A9 33 72 A1 01 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 27 0C D0 54 01 00 00 00 00 C0 3E 6B F7 00 00 00 00 7F 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 4B DA 4D 15 01 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 07 35 27 01 01 00 00 00 00 00 E4 0B 54 02 00 00 00 01 A5 EC 6B 16 01 00 00 00 01 2C FD 1B F6 00 00 00 00 01 00 E4 0B 54 02 00 00 00 8E 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 B3 97 93 10 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 69 43 17 1F 02 00 00 00 72 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 E4 0B 54 02 00 00 00 00 84 3F C9 38 02 00 00 00 01 D1 48 B0 FA 01 00 00 00 01 00 E4 0B 54 02 00 00 00 00 B0 AB EE 6B 01 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 59 0D 79 9C 01 00 00 00 01 66 14 B5 51 02 00 00 00 81 43 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 00 FA 5B E2 8A 01 00 00 00 00 51 F4 DA 15 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 00 E4 0B 54 02 00 00 00 00 00 E4 0B 54 02 00 00 00 01 B6 FD 63 25 01 00 00 00 01 00 E4 0B 54 02 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:1650] 45 c3 37 c5 16 03 02 00 00 00 02 fa 09 01 00 00 01 00 00 00 5c 78 d7 00 00 00 00 00 00 00 00 00 00 00 b3 03 01 00 00 00 00 00 01 02 00 00 00 00 00 9f 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 e2 7c 29 c8 01 00 00 00 01 6c d8 c3 0d 01 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 75 85 83 4a 01 00 00 00 00 d0 00 9b 9b 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 8a 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a aa d7 fc 01 00 00 00 00 d5 96 a7 67 01 00 00 00 00 f4 91 f8 12 02 00 00 00 01 ab af b1 97 01 00 00 00 00 2c 93 94 c6 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 99 df db 57 01 00 00 00 01 8c fa 17 49 02 00 00 00 66 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 03 c2 49 dc 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 01 fa 55 ab 7c 01 00 00 00 70 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e4 0b 54 02 00 00 00 01 c4 7c f7 56 01 00 00 00 01 6a 15 07 0f 01 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 ae 2d eb e1 01 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 4b a6 ea 76 01 00 00 00 00 17 f1 84 35 01 00 00 00 90 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 84 0f 9b 86 01 00 00 00 00 00 e4 0b 54 02 00 00 00 00 fe fc 3b 8b 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 f3 77 74 95 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 35 fb 21 0f 02 00 00 00 8c 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 c4 88 d0 44 01 00 00 00 01 00 e4 0b 54 02 00 00 00 01 40 c2 31 f1 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 77 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b3 98 b6 ab 01 00 00 00 00 78 3f 1e 69 01 00 00 00 00 00 e4 0b 54 02 00 00 00 01 92 45 4d e9 01 00 00 00 00 c4 5c eb 33 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 e5 2f af f7 01 00 00 00 00 36 f0 cd 17 02 00 00 00 00 d2 b8 ad 0c 01 00 00 00 8f 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 61 bf db 01 00 00 00 00 f8 35 12 29 02 00 00 00 01 b9 f6 28 4a 01 00 00 00 01 25 86 b1 54 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 9b 38 1f 11 01 00 00 00 a5 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7d 8e f7 3c 02 00 00 00 00 bf 2f 76 8c 01 00 00 00 00 8e 20 db 67 01 00 00 00 00 68 17 4f 83 01 00 00 00 00 00 e4 0b 54 02 00 00 00 01 bd b9 9a a7 01 00 00 00 01 bc 7c de 06 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 5d 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e4 0b 54 02 00 00 00 00 db 5d 76 ba 01 00 00 00 01 fb 78 b8 21 02 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 f3 ca 88 41 01 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 5e 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 bc a6 8c fe 01 00 00 00 01 00 e4 0b 54 02 00 00 00 01 e0 a2 16 20 01 00 00 00 01 a9 33 72 a1 01 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 27 0c d0 54 01 00 00 00 00 c0 3e 6b f7 00 00 00 00 7f 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 4b da 4d 15 01 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 07 35 27 01 01 00 00 00 00 00 e4 0b 54 02 00 00 00 01 a5 ec 6b 16 01 00 00 00 01 2c fd 1b f6 00 00 00 00 01 00 e4 0b 54 02 00 00 00 8e 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 b3 97 93 10 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 69 43 17 1f 02 00 00 00 72 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 e4 0b 54 02 00 00 00 00 84 3f c9 38 02 00 00 00 01 d1 48 b0 fa 01 00 00 00 01 00 e4 0b 54 02 00 00 00 00 b0 ab ee 6b 01 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 59 0d 79 9c 01 00 00 00 01 66 14 b5 51 02 00 00 00 81 43 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 00 fa 5b e2 8a 01 00 00 00 00 51 f4 da 15 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 00 e4 0b 54 02 00 00 00 00 00 e4 0b 54 02 00 00 00 01 b6 fd 63 25 01 00 00 00 01 00 e4 0b 54 02 00 00 00 + + +------------------------ 2022-02-24 22:18:13 ------------------------ +Exception log: [FIELD_ATTACK_REMOVE_BY_KEY], 1990/0x7C6 | 9D 45 0F 00 + Full String: Invalid Decoding +PacketDump : [DataLen:6] d2 18 d4 18 c6 07 9d 45 0f 00 + + +------------------------ 2022-02-26 18:47:51 ------------------------ +Exception log: [REMOTE_MELEE_ATTACK], 790/0x316 | 02 00 00 00 02 0A 09 01 00 00 01 00 00 00 5C 78 D7 00 00 00 00 00 00 00 00 00 00 00 B3 03 01 00 00 00 00 00 01 02 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:45] 58 88 75 88 16 03 02 00 00 00 02 0a 09 01 00 00 01 00 00 00 5c 78 d7 00 00 00 00 00 00 00 00 00 00 00 b3 03 01 00 00 00 00 00 01 02 00 00 00 00 00 + + +------------------------ 2022-02-26 20:53:07 ------------------------ +Exception log: [SHOP_RESULT], 1725/0x6BD | 0B 00 00 00 00 FC 58 89 00 00 00 00 00 00 00 00 00 01 00 00 00 00 42 01 01 00 00 00 57 51 0F + Full String: Invalid Decoding +PacketDump : [DataLen:33] 97 6d b6 6d bd 06 0b 00 00 00 00 fc 58 89 00 00 00 00 00 00 00 00 00 01 00 00 00 00 42 01 01 00 00 00 57 51 0f + + +------------------------ 2022-02-26 22:37:35 ------------------------ +Exception log: [FIELD_ATTACK_REMOVE_BY_KEY], 1990/0x7C6 | C8 42 0F 00 + Full String: Invalid Decoding +PacketDump : [DataLen:6] f2 c4 f4 c4 c6 07 c8 42 0f 00 + + +------------------------ 2022-02-26 22:47:09 ------------------------ +Exception log: [FIELD_ATTACK_REMOVE_BY_KEY], 1990/0x7C6 | C8 42 0F 00 + Full String: Invalid Decoding +PacketDump : [DataLen:6] 91 84 97 84 c6 07 c8 42 0f 00 + + +------------------------ 2022-02-26 23:14:45 ------------------------ +Exception log: [SHOP_RESULT], 1725/0x6BD | 0B 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:7] 84 bb 83 bb bd 06 0b 00 00 00 00 + + +------------------------ 2022-02-27 05:05:55 ------------------------ +Exception log: [FIELD_ATTACK_REMOVE_BY_KEY], 1990/0x7C6 | 5B 42 0F 00 + Full String: Invalid Decoding +PacketDump : [DataLen:6] ce f0 c8 f0 c6 07 5b 42 0f 00 + + +------------------------ 2022-02-27 09:09:30 ------------------------ +Exception log: [PARTY_MEMBER_CANDIDATE_RESULT], 142/0x8E | 02 24 00 00 00 06 00 6D 78 72 76 78 6E B2 01 01 00 86 00 00 00 00 34 00 00 00 06 00 43 72 61 79 6F 6E 70 00 00 00 79 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:45] b9 3e 94 3e 8e 00 02 24 00 00 00 06 00 6d 78 72 76 78 6e b2 01 01 00 86 00 00 00 00 34 00 00 00 06 00 43 72 61 79 6f 6e 70 00 00 00 79 00 00 00 00 + + +------------------------ 2022-02-27 13:31:01 ------------------------ +Exception log: [SHOP_RESULT], 1725/0x6BD | 0B 00 00 00 00 FC 58 89 00 00 00 00 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:19] 5f c9 4c c9 bd 06 0b 00 00 00 00 fc 58 89 00 00 00 00 00 00 00 00 00 + + +------------------------ 2022-02-27 20:27:45 ------------------------ +Exception log: [FIELD_ATTACK_REMOVE_BY_KEY], 1990/0x7C6 | D0 48 0F 00 + Full String: Invalid Decoding +PacketDump : [DataLen:6] 39 70 3f 70 c6 07 d0 48 0f 00 + + +------------------------ 2022-02-27 20:42:18 ------------------------ +Exception log: [PARTY_MEMBER_CANDIDATE_RESULT], 142/0x8E | 03 1F 00 00 00 04 00 53 63 61 72 B2 01 01 00 04 01 00 00 00 26 00 00 00 08 00 44 65 63 65 6D 62 65 72 27 0C 00 00 1F 00 00 00 00 02 00 00 00 05 00 4E 69 67 68 74 0C 19 00 00 09 01 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:65] 59 99 18 99 8e 00 03 1f 00 00 00 04 00 53 63 61 72 b2 01 01 00 04 01 00 00 00 26 00 00 00 08 00 44 65 63 65 6d 62 65 72 27 0c 00 00 1f 00 00 00 00 02 00 00 00 05 00 4e 69 67 68 74 0c 19 00 00 09 01 00 00 00 + + +------------------------ 2022-02-27 20:59:05 ------------------------ +Exception log: [TEMPORARY_STAT_SET], 94/0x5E | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 2F 24 D8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 20 4E 00 00 00 00 00 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:178] 74 46 c6 46 5e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 2f 24 d8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 20 4e 00 00 00 00 00 00 00 00 00 00 + +Contained stat PoseTypeContained stat MMPCutR +------------------------ 2022-02-28 01:06:04 ------------------------ +Exception log: [SHOP_RESULT], 1725/0x6BD | 0B 00 00 00 00 E4 6D + Full String: Invalid Decoding +PacketDump : [DataLen:9] 1c a4 15 a4 bd 06 0b 00 00 00 00 e4 6d + + +------------------------ 2022-03-01 20:49:31 ------------------------ +Exception log: [FUNC_KEY_MAPPED_MAN_INIT], 1952/0x7A0 | 00 00 00 00 00 00 04 2E 00 00 00 04 0A 00 00 00 04 0C 00 00 00 04 0D 00 00 00 04 12 00 00 00 04 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 08 00 00 00 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1B 00 00 00 04 1E 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0E 00 00 00 04 0F 00 00 00 00 00 00 00 00 05 34 00 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0B 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1A 00 00 00 04 10 00 00 00 04 16 00 00 00 01 11 3D 42 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1F 00 00 00 04 1D 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2F 00 00 00 01 0A 3D 42 00 00 00 00 00 00 01 2E 24 D8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 4A 04 2E 00 00 00 00 00 00 01 DB C7 41 00 01 FA 15 42 00 02 85 84 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:448] 84 0d 44 0c a0 07 00 00 00 00 00 00 04 2e 00 00 00 04 0a 00 00 00 04 0c 00 00 00 04 0d 00 00 00 04 12 00 00 00 04 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 08 00 00 00 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1b 00 00 00 04 1e 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0e 00 00 00 04 0f 00 00 00 00 00 00 00 00 05 34 00 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0b 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1a 00 00 00 04 10 00 00 00 04 16 00 00 00 01 11 3d 42 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1f 00 00 00 04 1d 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2f 00 00 00 01 0a 3d 42 00 00 00 00 00 00 01 2e 24 d8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 4a 04 2e 00 00 00 00 00 00 01 db c7 41 00 01 fa 15 42 00 02 85 84 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + +------------------------ 2022-03-01 23:11:14 ------------------------ +Exception log: [FUNC_KEY_MAPPED_MAN_INIT], 1952/0x7A0 | 00 00 00 00 00 00 04 2E 00 00 00 04 0A 00 00 00 04 0C 00 00 00 04 0D 00 00 00 04 12 00 00 00 04 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 08 00 00 00 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1B 00 00 00 04 1E 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0E 00 00 00 04 0F 00 00 00 00 00 00 00 00 05 34 00 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0B 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1A 00 00 00 04 10 00 00 00 04 16 00 00 00 01 11 3D 42 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1F 00 00 00 04 1D 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2F 00 00 00 01 0A 3D 42 00 00 00 00 00 00 01 2E 24 D8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 4A 04 2E 00 00 00 00 00 00 01 DB C7 41 00 01 FA 15 42 00 02 85 84 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:448] 84 0d 44 0c a0 07 00 00 00 00 00 00 04 2e 00 00 00 04 0a 00 00 00 04 0c 00 00 00 04 0d 00 00 00 04 12 00 00 00 04 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 08 00 00 00 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1b 00 00 00 04 1e 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0e 00 00 00 04 0f 00 00 00 00 00 00 00 00 05 34 00 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0b 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1a 00 00 00 04 10 00 00 00 04 16 00 00 00 01 11 3d 42 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1f 00 00 00 04 1d 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2f 00 00 00 01 0a 3d 42 00 00 00 00 00 00 01 2e 24 d8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 4a 04 2e 00 00 00 00 00 00 01 db c7 41 00 01 fa 15 42 00 02 85 84 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + +------------------------ 2022-03-01 23:12:52 ------------------------ +Exception log: [FUNC_KEY_MAPPED_MAN_INIT], 1952/0x7A0 | 00 00 00 00 00 00 04 2E 00 00 00 04 0A 00 00 00 04 0C 00 00 00 04 0D 00 00 00 04 12 00 00 00 04 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 08 00 00 00 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1B 00 00 00 04 1E 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0E 00 00 00 04 0F 00 00 00 00 00 00 00 00 05 34 00 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0B 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1A 00 00 00 04 10 00 00 00 04 16 00 00 00 01 11 3D 42 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1F 00 00 00 04 1D 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2F 00 00 00 01 0A 3D 42 00 00 00 00 00 00 01 2E 24 D8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 4A 04 2E 00 00 00 00 00 00 01 DB C7 41 00 01 FA 15 42 00 02 85 84 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:448] 84 0d 44 0c a0 07 00 00 00 00 00 00 04 2e 00 00 00 04 0a 00 00 00 04 0c 00 00 00 04 0d 00 00 00 04 12 00 00 00 04 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 08 00 00 00 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1b 00 00 00 04 1e 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0e 00 00 00 04 0f 00 00 00 00 00 00 00 00 05 34 00 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0b 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1a 00 00 00 04 10 00 00 00 04 16 00 00 00 01 11 3d 42 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1f 00 00 00 04 1d 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2f 00 00 00 01 0a 3d 42 00 00 00 00 00 00 01 2e 24 d8 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 4a 04 2e 00 00 00 00 00 00 01 db c7 41 00 01 fa 15 42 00 02 85 84 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + +------------------------ 2022-03-03 22:14:29 ------------------------ +Exception log: [FUNC_KEY_MAPPED_MAN_INIT], 1952/0x7A0 | 00 00 00 00 00 00 04 2E 00 00 00 01 6D B1 A9 00 01 9B 07 11 09 01 68 B1 A9 00 04 12 00 00 00 04 17 00 00 00 02 87 2A 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 E9 54 25 02 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1B 00 00 00 04 1E 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0E 00 00 00 04 0F 00 00 00 00 00 00 00 00 01 A8 29 27 02 05 34 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0B 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1A 00 00 00 04 10 00 00 00 04 16 00 00 00 01 71 88 1E 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1F 00 00 00 04 1D 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2F 00 00 00 01 EB AA E1 03 00 00 00 00 00 01 1E 24 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 6C B1 A9 00 00 00 00 00 00 01 3A 4B D8 17 01 F3 AA E1 03 01 76 B1 A9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:448] 70 4b b0 4a a0 07 00 00 00 00 00 00 04 2e 00 00 00 01 6d b1 a9 00 01 9b 07 11 09 01 68 b1 a9 00 04 12 00 00 00 04 17 00 00 00 02 87 2a 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 e9 54 25 02 04 05 00 00 00 04 00 00 00 00 04 04 00 00 00 04 1b 00 00 00 04 1e 00 00 00 04 27 00 00 00 04 01 00 00 00 04 29 00 00 00 04 13 00 00 00 04 0e 00 00 00 04 0f 00 00 00 00 00 00 00 00 01 a8 29 27 02 05 34 00 00 00 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 04 11 00 00 00 04 0b 00 00 00 00 00 00 00 00 04 03 00 00 00 04 14 00 00 00 04 1a 00 00 00 04 10 00 00 00 04 16 00 00 00 01 71 88 1e 00 04 09 00 00 00 05 32 00 00 00 05 33 00 00 00 04 06 00 00 00 04 1f 00 00 00 04 1d 00 00 00 00 00 00 00 00 04 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 35 00 00 00 05 36 00 00 00 00 00 00 00 00 06 64 00 00 00 06 65 00 00 00 06 66 00 00 00 00 00 00 00 00 06 67 00 00 00 06 68 00 00 00 06 69 00 00 00 06 6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 2f 00 00 00 01 eb aa e1 03 00 00 00 00 00 01 1e 24 4e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 6c b1 a9 00 00 00 00 00 00 01 3a 4b d8 17 01 f3 aa e1 03 01 76 b1 a9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + +------------------------ 2022-03-14 21:52:45 ------------------------ +Exception log: [TEMPORARY_STAT_SET], 94/0x5E | 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 00 3F 88 93 03 00 00 00 00 28 00 3F 88 93 03 00 00 00 00 BC 02 3F 88 93 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C4 E4 0B 03 00 00 00 00 F2 1A A5 AB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + Full String: Invalid Decoding +PacketDump : [DataLen:222] 00 8f de 8f 5e 00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 00 3f 88 93 03 00 00 00 00 28 00 3f 88 93 03 00 00 00 00 bc 02 3f 88 93 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 c4 e4 0b 03 00 00 00 00 f2 1a a5 ab 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +Contained stat IndieArcaneForceContained stat ComboDrainContained stat IncEffectMPPotion +------------------------ 2022-03-23 16:10:55 ------------------------ +Exception log: [null], -4098/0xEFFE | EF BF DE EF 21 47 46 72 59 EF EF FE BF EF ED DF EF EF EF EF FC DF EF EF F2 02 1F 2F 23 22 F0 6F 56 F0 05 EF EF EF EF EF EF EF EF EF EF EF EF EF EF EF + Full String: 207_1 + [ Name: , Job: -1, Field: -1, World: -1, Channel: -1 ] +ZException (error code : -2147467259 (Unspecified error)) source() +==== 2022/3/23 22:07:56.005 ============================== + + +------------------------ 2022-03-23 23:27:12 ------------------------ +Exception log: [SET_FIELD], 531/0x213 | 45 00 00 00 A4 01 00 00 39 05 00 00 FF 7F 00 00 1D 00 6C 6F 6C 20 79 6F 75 20 67 61 79 20 77 68 79 20 79 6F 75 20 68 61 63 6B 20 74 68 6F 3F + Full String: Invalid Decoding +PacketDump : [DataLen:49] aa a7 9b a7 13 02 45 00 00 00 a4 01 00 00 39 05 00 00 ff 7f 00 00 1d 00 6c 6f 6c 20 79 6f 75 20 67 61 79 20 77 68 79 20 79 6f 75 20 68 61 63 6b 20 74 68 6f 3f + + +------------------------ 2022-03-23 23:29:45 ------------------------ +Exception log: [SET_FIELD], 531/0x213 | 45 00 00 00 A4 01 00 00 39 05 00 00 FF 7F 00 00 1D 00 6C 6F 6C 20 79 6F 75 20 67 61 79 20 77 68 79 20 79 6F 75 20 68 61 63 6B 20 74 68 6F 3F + Full String: Invalid Decoding +PacketDump : [DataLen:49] 33 20 02 20 13 02 45 00 00 00 a4 01 00 00 39 05 00 00 ff 7f 00 00 1d 00 6c 6f 6c 20 79 6f 75 20 67 61 79 20 77 68 79 20 79 6f 75 20 68 61 63 6b 20 74 68 6f 3f + diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..e94778f --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,7 @@ +Copyright © 2018 The Swordie Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100755 index 0000000..30e93bf --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +#A server emulator for Maplestory. \ No newline at end of file diff --git a/bin/classes/hibernate.cfg.xml b/bin/classes/hibernate.cfg.xml new file mode 100755 index 0000000..b54ec78 --- /dev/null +++ b/bin/classes/hibernate.cfg.xml @@ -0,0 +1,44 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + + com.mysql.jdbc.Driver + + + + jdbc:mysql://127.0.0.1:3306/v206?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC + + + + root + + + + wusuc2i7mmicpoi9 + + + + true + + + + false + + + + true + + + + true + + + + + \ No newline at end of file diff --git a/bin/classes/log4j.properties b/bin/classes/log4j.properties new file mode 100755 index 0000000..25db09a --- /dev/null +++ b/bin/classes/log4j.properties @@ -0,0 +1,19 @@ +log4j.rootLogger=DEBUG,stdout +log4j.logger.com.endeca=INFO +# Logger for crawl metrics +log4j.logger.com.endeca.itl.web.metrics=INFO + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=[%p] %m%n + +# add a FileAppender to the logger fout +log4j.appender.fout=org.apache.log4j.FileAppender +# create a log file +log4j.appender.fout.File=root.log +log4j.appender.fout.layout=org.apache.log4j.PatternLayout +# use a more detailed message pattern +log4j.appender.fout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n +# library logging only for errors +log4j.logger.org.hibernate=error +log4j.logger.io.netty=error diff --git a/bin/classes/net/swordie/ms/Server$ShutDownTask.class b/bin/classes/net/swordie/ms/Server$ShutDownTask.class new file mode 100755 index 0000000..eb3a2f3 Binary files /dev/null and b/bin/classes/net/swordie/ms/Server$ShutDownTask.class differ diff --git a/bin/classes/net/swordie/ms/Server.class b/bin/classes/net/swordie/ms/Server.class new file mode 100755 index 0000000..fb720cc Binary files /dev/null and b/bin/classes/net/swordie/ms/Server.class differ diff --git a/bin/classes/net/swordie/ms/ServerConfig.class b/bin/classes/net/swordie/ms/ServerConfig.class new file mode 100755 index 0000000..ba93b3a Binary files /dev/null and b/bin/classes/net/swordie/ms/ServerConfig.class differ diff --git a/bin/classes/net/swordie/ms/ServerConstants.class b/bin/classes/net/swordie/ms/ServerConstants.class new file mode 100755 index 0000000..513456e Binary files /dev/null and b/bin/classes/net/swordie/ms/ServerConstants.class differ diff --git a/bin/classes/net/swordie/ms/ServerStatus.class b/bin/classes/net/swordie/ms/ServerStatus.class new file mode 100755 index 0000000..e8225b4 Binary files /dev/null and b/bin/classes/net/swordie/ms/ServerStatus.class differ diff --git a/bin/classes/net/swordie/ms/client/Account.class b/bin/classes/net/swordie/ms/client/Account.class new file mode 100755 index 0000000..e3dd237 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/Account.class differ diff --git a/bin/classes/net/swordie/ms/client/Client.class b/bin/classes/net/swordie/ms/client/Client.class new file mode 100755 index 0000000..a66f405 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/Client.class differ diff --git a/bin/classes/net/swordie/ms/client/LinkSkill.class b/bin/classes/net/swordie/ms/client/LinkSkill.class new file mode 100755 index 0000000..dadbdbc Binary files /dev/null and b/bin/classes/net/swordie/ms/client/LinkSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/User.class b/bin/classes/net/swordie/ms/client/User.class new file mode 100755 index 0000000..4cf1a82 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/User.class differ diff --git a/bin/classes/net/swordie/ms/client/alliance/Alliance.class b/bin/classes/net/swordie/ms/client/alliance/Alliance.class new file mode 100755 index 0000000..2ccb353 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/alliance/Alliance.class differ diff --git a/bin/classes/net/swordie/ms/client/alliance/AllianceResult$1.class b/bin/classes/net/swordie/ms/client/alliance/AllianceResult$1.class new file mode 100755 index 0000000..e009e5b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/alliance/AllianceResult$1.class differ diff --git a/bin/classes/net/swordie/ms/client/alliance/AllianceResult.class b/bin/classes/net/swordie/ms/client/alliance/AllianceResult.class new file mode 100755 index 0000000..3a69a9d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/alliance/AllianceResult.class differ diff --git a/bin/classes/net/swordie/ms/client/anticheat/Offense$Type.class b/bin/classes/net/swordie/ms/client/anticheat/Offense$Type.class new file mode 100755 index 0000000..4e50efe Binary files /dev/null and b/bin/classes/net/swordie/ms/client/anticheat/Offense$Type.class differ diff --git a/bin/classes/net/swordie/ms/client/anticheat/Offense.class b/bin/classes/net/swordie/ms/client/anticheat/Offense.class new file mode 100755 index 0000000..c8a76b3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/anticheat/Offense.class differ diff --git a/bin/classes/net/swordie/ms/client/anticheat/OffenseManager.class b/bin/classes/net/swordie/ms/client/anticheat/OffenseManager.class new file mode 100755 index 0000000..bd79aad Binary files /dev/null and b/bin/classes/net/swordie/ms/client/anticheat/OffenseManager.class differ diff --git a/bin/classes/net/swordie/ms/client/character/BroadcastMsg$1.class b/bin/classes/net/swordie/ms/client/character/BroadcastMsg$1.class new file mode 100755 index 0000000..73cae21 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/BroadcastMsg$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/BroadcastMsg.class b/bin/classes/net/swordie/ms/client/character/BroadcastMsg.class new file mode 100755 index 0000000..e2ddd9a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/BroadcastMsg.class differ diff --git a/bin/classes/net/swordie/ms/client/character/Char$1.class b/bin/classes/net/swordie/ms/client/character/Char$1.class new file mode 100755 index 0000000..938fc6e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/Char$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/Char.class b/bin/classes/net/swordie/ms/client/character/Char.class new file mode 100755 index 0000000..81b9d25 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/Char.class differ diff --git a/bin/classes/net/swordie/ms/client/character/CharacterStat.class b/bin/classes/net/swordie/ms/client/character/CharacterStat.class new file mode 100755 index 0000000..c43dbfc Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/CharacterStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/CoupleRecord.class b/bin/classes/net/swordie/ms/client/character/CoupleRecord.class new file mode 100755 index 0000000..3bae5ab Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/CoupleRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/character/EventCoolDown.class b/bin/classes/net/swordie/ms/client/character/EventCoolDown.class new file mode 100755 index 0000000..b5f7ce2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/EventCoolDown.class differ diff --git a/bin/classes/net/swordie/ms/client/character/ExtendSP.class b/bin/classes/net/swordie/ms/client/character/ExtendSP.class new file mode 100755 index 0000000..96f84f3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/ExtendSP.class differ diff --git a/bin/classes/net/swordie/ms/client/character/FarmPotential.class b/bin/classes/net/swordie/ms/client/character/FarmPotential.class new file mode 100755 index 0000000..cf11dea Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/FarmPotential.class differ diff --git a/bin/classes/net/swordie/ms/client/character/HyperTPRock.class b/bin/classes/net/swordie/ms/client/character/HyperTPRock.class new file mode 100755 index 0000000..840e8b5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/HyperTPRock.class differ diff --git a/bin/classes/net/swordie/ms/client/character/ItemPot.class b/bin/classes/net/swordie/ms/client/character/ItemPot.class new file mode 100755 index 0000000..9fe082f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/ItemPot.class differ diff --git a/bin/classes/net/swordie/ms/client/character/LikePoint.class b/bin/classes/net/swordie/ms/client/character/LikePoint.class new file mode 100755 index 0000000..dac2856 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/LikePoint.class differ diff --git a/bin/classes/net/swordie/ms/client/character/Macro.class b/bin/classes/net/swordie/ms/client/character/Macro.class new file mode 100755 index 0000000..2ca95a4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/Macro.class differ diff --git a/bin/classes/net/swordie/ms/client/character/MarriageRecord.class b/bin/classes/net/swordie/ms/client/character/MarriageRecord.class new file mode 100755 index 0000000..5cc38a3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/MarriageRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/character/MiniGameRecord.class b/bin/classes/net/swordie/ms/client/character/MiniGameRecord.class new file mode 100755 index 0000000..c87a296 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/MiniGameRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/character/MiniRoom.class b/bin/classes/net/swordie/ms/client/character/MiniRoom.class new file mode 100755 index 0000000..1643078 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/MiniRoom.class differ diff --git a/bin/classes/net/swordie/ms/client/character/MonsterCollection.class b/bin/classes/net/swordie/ms/client/character/MonsterCollection.class new file mode 100755 index 0000000..d9700d7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/MonsterCollection.class differ diff --git a/bin/classes/net/swordie/ms/client/character/MonsterCollectionExploration.class b/bin/classes/net/swordie/ms/client/character/MonsterCollectionExploration.class new file mode 100755 index 0000000..8575da7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/MonsterCollectionExploration.class differ diff --git a/bin/classes/net/swordie/ms/client/character/MonsterCollectionReward.class b/bin/classes/net/swordie/ms/client/character/MonsterCollectionReward.class new file mode 100755 index 0000000..23879d7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/MonsterCollectionReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/MonsterPark.class b/bin/classes/net/swordie/ms/client/character/MonsterPark.class new file mode 100755 index 0000000..1a1057e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/MonsterPark.class differ diff --git a/bin/classes/net/swordie/ms/client/character/NonCombatStatDayLimit.class b/bin/classes/net/swordie/ms/client/character/NonCombatStatDayLimit.class new file mode 100755 index 0000000..0f7fcc5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/NonCombatStatDayLimit.class differ diff --git a/bin/classes/net/swordie/ms/client/character/PortableChair.class b/bin/classes/net/swordie/ms/client/character/PortableChair.class new file mode 100755 index 0000000..6ef06c4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/PortableChair.class differ diff --git a/bin/classes/net/swordie/ms/client/character/Ranking.class b/bin/classes/net/swordie/ms/client/character/Ranking.class new file mode 100755 index 0000000..a18015e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/Ranking.class differ diff --git a/bin/classes/net/swordie/ms/client/character/RunnerGameRecord.class b/bin/classes/net/swordie/ms/client/character/RunnerGameRecord.class new file mode 100755 index 0000000..f44c935 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/RunnerGameRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/character/SPSet.class b/bin/classes/net/swordie/ms/client/character/SPSet.class new file mode 100755 index 0000000..9d4b286 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/SPSet.class differ diff --git a/bin/classes/net/swordie/ms/client/character/TradeRoom.class b/bin/classes/net/swordie/ms/client/character/TradeRoom.class new file mode 100755 index 0000000..ea8e4a5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/TradeRoom.class differ diff --git a/bin/classes/net/swordie/ms/client/character/avatar/AvatarData.class b/bin/classes/net/swordie/ms/client/character/avatar/AvatarData.class new file mode 100755 index 0000000..135a489 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/avatar/AvatarData.class differ diff --git a/bin/classes/net/swordie/ms/client/character/avatar/AvatarLook.class b/bin/classes/net/swordie/ms/client/character/avatar/AvatarLook.class new file mode 100755 index 0000000..b519d87 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/avatar/AvatarLook.class differ diff --git a/bin/classes/net/swordie/ms/client/character/avatar/BeautyAlbum.class b/bin/classes/net/swordie/ms/client/character/avatar/BeautyAlbum.class new file mode 100755 index 0000000..22173cc Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/avatar/BeautyAlbum.class differ diff --git a/bin/classes/net/swordie/ms/client/character/b2body/B2Body.class b/bin/classes/net/swordie/ms/client/character/b2body/B2Body.class new file mode 100755 index 0000000..5e6ab25 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/b2body/B2Body.class differ diff --git a/bin/classes/net/swordie/ms/client/character/cards/CharacterCard.class b/bin/classes/net/swordie/ms/client/character/cards/CharacterCard.class new file mode 100755 index 0000000..e6fb77d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/cards/CharacterCard.class differ diff --git a/bin/classes/net/swordie/ms/client/character/cards/MonsterBookInfo.class b/bin/classes/net/swordie/ms/client/character/cards/MonsterBookInfo.class new file mode 100755 index 0000000..7256652 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/cards/MonsterBookInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommand.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommand.class new file mode 100755 index 0000000..2b79532 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommand.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$AmountOnline.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$AmountOnline.class new file mode 100755 index 0000000..00c3988 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$AmountOnline.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Ap.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Ap.class new file mode 100755 index 0000000..8b6ef3d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Ap.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ArcherEquips.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ArcherEquips.class new file mode 100755 index 0000000..4439bb3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ArcherEquips.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Atom.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Atom.class new file mode 100755 index 0000000..d0636d6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Atom.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Ban.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Ban.class new file mode 100755 index 0000000..b2be56e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Ban.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BannerNotice.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BannerNotice.class new file mode 100755 index 0000000..034eb5e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BannerNotice.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BossCd.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BossCd.class new file mode 100755 index 0000000..35c9165 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BossCd.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BroadcastMessage.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BroadcastMessage.class new file mode 100755 index 0000000..c9f25ca Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BroadcastMessage.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BypassSkillCD.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BypassSkillCD.class new file mode 100755 index 0000000..bfbe2a6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$BypassSkillCD.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckGift.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckGift.class new file mode 100755 index 0000000..24fe9fa Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckGift.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckId.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckId.class new file mode 100755 index 0000000..7f78201 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckId.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckNXValue.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckNXValue.class new file mode 100755 index 0000000..b41f4e0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CheckNXValue.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ChrPosition.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ChrPosition.class new file mode 100755 index 0000000..e311fcb Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ChrPosition.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ClearDrops.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ClearDrops.class new file mode 100755 index 0000000..b692161 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ClearDrops.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ClearInv.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ClearInv.class new file mode 100755 index 0000000..2f33635 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ClearInv.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CloseUI.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CloseUI.class new file mode 100755 index 0000000..852cef2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CloseUI.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CompleteQuest.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CompleteQuest.class new file mode 100755 index 0000000..362eefe Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CompleteQuest.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CtsCom.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CtsCom.class new file mode 100755 index 0000000..bf8184b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CtsCom.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CurrentHp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CurrentHp.class new file mode 100755 index 0000000..7649f2d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CurrentHp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CurrentMp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CurrentMp.class new file mode 100755 index 0000000..f6f6007 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$CurrentMp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DebugMode.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DebugMode.class new file mode 100755 index 0000000..bf7d45d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DebugMode.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Dispose.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Dispose.class new file mode 100755 index 0000000..670826d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Dispose.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Done.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Done.class new file mode 100755 index 0000000..4d3b6dd Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Done.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DpCommand.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DpCommand.class new file mode 100755 index 0000000..159d9d6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DpCommand.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DropItem.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DropItem.class new file mode 100755 index 0000000..c4bbbd4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$DropItem.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$EnterSkillInfoMode.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$EnterSkillInfoMode.class new file mode 100755 index 0000000..dcb8928 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$EnterSkillInfoMode.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$EquipInfo.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$EquipInfo.class new file mode 100755 index 0000000..3acabde Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$EquipInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FindPlayer.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FindPlayer.class new file mode 100755 index 0000000..b605e42 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FindPlayer.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FindPortal.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FindPortal.class new file mode 100755 index 0000000..3a6e261 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FindPortal.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ForceChase.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ForceChase.class new file mode 100755 index 0000000..c71f837 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ForceChase.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FromHex.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FromHex.class new file mode 100755 index 0000000..e3e505d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FromHex.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FromHexBE.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FromHexBE.class new file mode 100755 index 0000000..a9c64a6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$FromHexBE.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetItem.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetItem.class new file mode 100755 index 0000000..a7325f5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetItem.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetNPCs.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetNPCs.class new file mode 100755 index 0000000..0eaa669 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetNPCs.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetPhantomStolenSkills.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetPhantomStolenSkills.class new file mode 100755 index 0000000..241ddd7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetPhantomStolenSkills.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetProjectiles.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetProjectiles.class new file mode 100755 index 0000000..81ea673 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetProjectiles.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetSkill.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetSkill.class new file mode 100755 index 0000000..eda2b27 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GetSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GiftBox.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GiftBox.class new file mode 100755 index 0000000..bfd503e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GiftBox.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GoTo.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GoTo.class new file mode 100755 index 0000000..0dcea91 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$GoTo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Godmode.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Godmode.class new file mode 100755 index 0000000..589f6d6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Godmode.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Heal.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Heal.class new file mode 100755 index 0000000..c13afb2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Heal.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Help.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Help.class new file mode 100755 index 0000000..2a75919 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Help.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Hide.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Hide.class new file mode 100755 index 0000000..512aedc Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Hide.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Hp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Hp.class new file mode 100755 index 0000000..55d75e6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Hp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$HyperTP.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$HyperTP.class new file mode 100755 index 0000000..a325085 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$HyperTP.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Job.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Job.class new file mode 100755 index 0000000..5defce4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Job.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$KillMobs.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$KillMobs.class new file mode 100755 index 0000000..0ece50c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$KillMobs.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LD.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LD.class new file mode 100755 index 0000000..3138a4a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LD.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Level.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Level.class new file mode 100755 index 0000000..2def68e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Level.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LevelUntil.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LevelUntil.class new file mode 100755 index 0000000..d8afb07 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LevelUntil.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LookUpReactor.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LookUpReactor.class new file mode 100755 index 0000000..af17087 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$LookUpReactor.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Lookup.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Lookup.class new file mode 100755 index 0000000..cb0a751 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Lookup.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MageEquips.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MageEquips.class new file mode 100755 index 0000000..77edc89 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MageEquips.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MaxSkills.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MaxSkills.class new file mode 100755 index 0000000..1547d18 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MaxSkills.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mesos.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mesos.class new file mode 100755 index 0000000..00d7803 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mesos.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobController.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobController.class new file mode 100755 index 0000000..e0b275b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobController.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobInfo.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobInfo.class new file mode 100755 index 0000000..8d68ce0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobStatTest.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobStatTest.class new file mode 100755 index 0000000..77c7465 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$MobStatTest.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Morph.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Morph.class new file mode 100755 index 0000000..c20f604 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Morph.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mount.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mount.class new file mode 100755 index 0000000..1841545 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mount.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mp.class new file mode 100755 index 0000000..0750dd2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Mp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NPC.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NPC.class new file mode 100755 index 0000000..4bbab56 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NPC.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NearestPortal.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NearestPortal.class new file mode 100755 index 0000000..2f07005 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NearestPortal.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NpcInfo.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NpcInfo.class new file mode 100755 index 0000000..1de140c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NpcInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NxCommand.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NxCommand.class new file mode 100755 index 0000000..45dc2dd Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$NxCommand.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$OpenUI.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$OpenUI.class new file mode 100755 index 0000000..c285555 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$OpenUI.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$PNPC.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$PNPC.class new file mode 100755 index 0000000..de19e24 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$PNPC.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$PirateEquips.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$PirateEquips.class new file mode 100755 index 0000000..9a61312 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$PirateEquips.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Players.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Players.class new file mode 100755 index 0000000..3036e33 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Players.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ProItem.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ProItem.class new file mode 100755 index 0000000..88e4a5f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ProItem.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ReloadCS.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ReloadCS.class new file mode 100755 index 0000000..45ddcd1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ReloadCS.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoteEnterFieldTest.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoteEnterFieldTest.class new file mode 100755 index 0000000..1505b0c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoteEnterFieldTest.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveDrops.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveDrops.class new file mode 100755 index 0000000..e0f7487 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveDrops.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveGift.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveGift.class new file mode 100755 index 0000000..1c2b70b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveGift.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveQuest.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveQuest.class new file mode 100755 index 0000000..7c918b3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RemoveQuest.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RotateCamera.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RotateCamera.class new file mode 100755 index 0000000..e8fa72b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$RotateCamera.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SaveMap.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SaveMap.class new file mode 100755 index 0000000..f5a8e60 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SaveMap.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SendQRValue.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SendQRValue.class new file mode 100755 index 0000000..1260a3c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SendQRValue.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetArcaneForce.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetArcaneForce.class new file mode 100755 index 0000000..fef71cf Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetArcaneForce.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetBonusPotential.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetBonusPotential.class new file mode 100755 index 0000000..aa28099 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetBonusPotential.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetController.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetController.class new file mode 100755 index 0000000..ae902f2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetController.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetCurrentHp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetCurrentHp.class new file mode 100755 index 0000000..b6c6463 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetCurrentHp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetCurrentMp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetCurrentMp.class new file mode 100755 index 0000000..987abf8 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetCurrentMp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetDamageSkin.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetDamageSkin.class new file mode 100755 index 0000000..4ec92fe Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetDamageSkin.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetFlame.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetFlame.class new file mode 100755 index 0000000..da79c14 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetFlame.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetFlames.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetFlames.class new file mode 100755 index 0000000..9206143 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetFlames.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetGuildStat.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetGuildStat.class new file mode 100755 index 0000000..f39511e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetGuildStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetHonor.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetHonor.class new file mode 100755 index 0000000..0375c38 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetHonor.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetMap.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetMap.class new file mode 100755 index 0000000..72c1826 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetMap.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetPortal.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetPortal.class new file mode 100755 index 0000000..a8dfc89 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetPortal.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetPotential.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetPotential.class new file mode 100755 index 0000000..18f0c1c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetPotential.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetStat.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetStat.class new file mode 100755 index 0000000..c55bfe4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$SetStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Shop.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Shop.class new file mode 100755 index 0000000..6048c7f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Shop.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowBuffs.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowBuffs.class new file mode 100755 index 0000000..2ffcfd4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowBuffs.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowDamageCalc.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowDamageCalc.class new file mode 100755 index 0000000..50e2ba4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowDamageCalc.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowFootholds.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowFootholds.class new file mode 100755 index 0000000..1819e51 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowFootholds.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowInvInfo.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowInvInfo.class new file mode 100755 index 0000000..24d056f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ShowInvInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Sp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Sp.class new file mode 100755 index 0000000..f66e5ad Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Sp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Spawn.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Spawn.class new file mode 100755 index 0000000..f02a8a7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Spawn.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StarForceEquip.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StarForceEquip.class new file mode 100755 index 0000000..e9c9d82 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StarForceEquip.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StartQuest.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StartQuest.class new file mode 100755 index 0000000..ec5cae3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StartQuest.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StartScriptTest.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StartScriptTest.class new file mode 100755 index 0000000..f974941 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StartScriptTest.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Stats.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Stats.class new file mode 100755 index 0000000..8fc6a69 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Stats.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StealSkillList.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StealSkillList.class new file mode 100755 index 0000000..ac90cce Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$StealSkillList.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Teleport.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Teleport.class new file mode 100755 index 0000000..1f82a7b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$Teleport.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestAffectedArea.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestAffectedArea.class new file mode 100755 index 0000000..e25812e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestAffectedArea.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestCTS.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestCTS.class new file mode 100755 index 0000000..425fd03 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestCTS.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestDrop.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestDrop.class new file mode 100755 index 0000000..6567c75 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestDrop.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestGift.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestGift.class new file mode 100755 index 0000000..f7cb1d3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestGift.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestPacket.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestPacket.class new file mode 100755 index 0000000..bbdb5e1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestPacket.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestParty.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestParty.class new file mode 100755 index 0000000..9434767 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestParty.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestTempStat.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestTempStat.class new file mode 100755 index 0000000..1929b46 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$TestTempStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ThiefEquips.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ThiefEquips.class new file mode 100755 index 0000000..aa92267 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ThiefEquips.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ToHex.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ToHex.class new file mode 100755 index 0000000..70b8639 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ToHex.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ToggleDamageCap.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ToggleDamageCap.class new file mode 100755 index 0000000..7dd2c0d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$ToggleDamageCap.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$UseBonusSkill.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$UseBonusSkill.class new file mode 100755 index 0000000..2d185ed Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$UseBonusSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$UseRandAreaSkill.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$UseRandAreaSkill.class new file mode 100755 index 0000000..feb760e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$UseRandAreaSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$V.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$V.class new file mode 100755 index 0000000..53a8481 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$V.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$VpCommand.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$VpCommand.class new file mode 100755 index 0000000..0497153 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$VpCommand.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarpHere.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarpHere.class new file mode 100755 index 0000000..1f1d5eb Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarpHere.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarpToPlayer.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarpToPlayer.class new file mode 100755 index 0000000..aec0107 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarpToPlayer.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarriorEquips.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarriorEquips.class new file mode 100755 index 0000000..aa6ddfd Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$WarriorEquips.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$dc.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$dc.class new file mode 100755 index 0000000..6da4ce8 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$dc.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$giveNx.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$giveNx.class new file mode 100755 index 0000000..323600d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$giveNx.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$givedp.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$givedp.class new file mode 100755 index 0000000..94c040d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$givedp.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$maplepoints.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$maplepoints.class new file mode 100755 index 0000000..8d51382 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$maplepoints.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$maxskills2.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$maxskills2.class new file mode 100755 index 0000000..61af557 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$maxskills2.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$setPierce.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$setPierce.class new file mode 100755 index 0000000..3533b7b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands$setPierce.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/AdminCommands.class b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands.class new file mode 100755 index 0000000..f5b8771 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/AdminCommands.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/Command.class b/bin/classes/net/swordie/ms/client/character/commands/Command.class new file mode 100755 index 0000000..0987903 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/Command.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/ICommand.class b/bin/classes/net/swordie/ms/client/character/commands/ICommand.class new file mode 100755 index 0000000..1922cbe Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/ICommand.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommand.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommand.class new file mode 100755 index 0000000..3c6ae0d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommand.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$FifthJob.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$FifthJob.class new file mode 100755 index 0000000..bad23e8 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$FifthJob.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$Help.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$Help.class new file mode 100755 index 0000000..828a008 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$Help.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$Instance.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$Instance.class new file mode 100755 index 0000000..3248ad4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$Instance.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$MobInfo.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$MobInfo.class new file mode 100755 index 0000000..6a3bfff Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$MobInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$OpenNodestone.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$OpenNodestone.class new file mode 100755 index 0000000..2244213 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$OpenNodestone.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$SellItem.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$SellItem.class new file mode 100755 index 0000000..18bb67a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$SellItem.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$check.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$check.class new file mode 100755 index 0000000..3a017dc Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$check.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$jobAdvance.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$jobAdvance.class new file mode 100755 index 0000000..b630f4c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$jobAdvance.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$marvel.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$marvel.class new file mode 100755 index 0000000..1e413a0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$marvel.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$save.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$save.class new file mode 100755 index 0000000..a15af32 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands$save.class differ diff --git a/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands.class b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands.class new file mode 100755 index 0000000..a2c14c3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/commands/PlayerCommands.class differ diff --git a/bin/classes/net/swordie/ms/client/character/damage/DamageCalc$1.class b/bin/classes/net/swordie/ms/client/character/damage/DamageCalc$1.class new file mode 100755 index 0000000..01d4f44 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/damage/DamageCalc$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/damage/DamageCalc.class b/bin/classes/net/swordie/ms/client/character/damage/DamageCalc.class new file mode 100755 index 0000000..5577354 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/damage/DamageCalc.class differ diff --git a/bin/classes/net/swordie/ms/client/character/damage/DamageSkinSaveData.class b/bin/classes/net/swordie/ms/client/character/damage/DamageSkinSaveData.class new file mode 100755 index 0000000..7ca9b5b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/damage/DamageSkinSaveData.class differ diff --git a/bin/classes/net/swordie/ms/client/character/damage/DamageSkinType.class b/bin/classes/net/swordie/ms/client/character/damage/DamageSkinType.class new file mode 100755 index 0000000..30e0d58 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/damage/DamageSkinType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/damage/Rand32.class b/bin/classes/net/swordie/ms/client/character/damage/Rand32.class new file mode 100755 index 0000000..831ac58 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/damage/Rand32.class differ diff --git a/bin/classes/net/swordie/ms/client/character/info/ExpIncreaseInfo.class b/bin/classes/net/swordie/ms/client/character/info/ExpIncreaseInfo.class new file mode 100755 index 0000000..922b3c6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/info/ExpIncreaseInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/info/FarmUserInfo.class b/bin/classes/net/swordie/ms/client/character/info/FarmUserInfo.class new file mode 100755 index 0000000..ae75275 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/info/FarmUserInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/info/FreezeHotEventInfo.class b/bin/classes/net/swordie/ms/client/character/info/FreezeHotEventInfo.class new file mode 100755 index 0000000..d16f13f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/info/FreezeHotEventInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/info/HitInfo.class b/bin/classes/net/swordie/ms/client/character/info/HitInfo.class new file mode 100755 index 0000000..3936e8a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/info/HitInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/info/ZeroInfo.class b/bin/classes/net/swordie/ms/client/character/info/ZeroInfo.class new file mode 100755 index 0000000..c83e23c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/info/ZeroInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/BodyPart.class b/bin/classes/net/swordie/ms/client/character/items/BodyPart.class new file mode 100755 index 0000000..a26cbad Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/BodyPart.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/BossSoul.class b/bin/classes/net/swordie/ms/client/character/items/BossSoul.class new file mode 100755 index 0000000..4da84f4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/BossSoul.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/DressUpInfo.class b/bin/classes/net/swordie/ms/client/character/items/DressUpInfo.class new file mode 100755 index 0000000..b92b70c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/DressUpInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/Equip$1.class b/bin/classes/net/swordie/ms/client/character/items/Equip$1.class new file mode 100755 index 0000000..f4aebd1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/Equip$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/Equip.class b/bin/classes/net/swordie/ms/client/character/items/Equip.class new file mode 100755 index 0000000..6248f60 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/Equip.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/EquipAttribute.class b/bin/classes/net/swordie/ms/client/character/items/EquipAttribute.class new file mode 100755 index 0000000..325a5ae Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/EquipAttribute.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/EquipPrefix.class b/bin/classes/net/swordie/ms/client/character/items/EquipPrefix.class new file mode 100755 index 0000000..f78bf88 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/EquipPrefix.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/EquipSpecialAttribute.class b/bin/classes/net/swordie/ms/client/character/items/EquipSpecialAttribute.class new file mode 100755 index 0000000..59b0b8d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/EquipSpecialAttribute.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ExpConsumeItem.class b/bin/classes/net/swordie/ms/client/character/items/ExpConsumeItem.class new file mode 100755 index 0000000..fc686eb Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ExpConsumeItem.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/HotTimeReward.class b/bin/classes/net/swordie/ms/client/character/items/HotTimeReward.class new file mode 100755 index 0000000..ed5d905 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/HotTimeReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/Inventory.class b/bin/classes/net/swordie/ms/client/character/items/Inventory.class new file mode 100755 index 0000000..3391bf0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/Inventory.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/Item$Type.class b/bin/classes/net/swordie/ms/client/character/items/Item$Type.class new file mode 100755 index 0000000..3b1a9a2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/Item$Type.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/Item.class b/bin/classes/net/swordie/ms/client/character/items/Item.class new file mode 100755 index 0000000..9a9b18e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/Item.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ItemBuffs$1.class b/bin/classes/net/swordie/ms/client/character/items/ItemBuffs$1.class new file mode 100755 index 0000000..d7ef391 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ItemBuffs$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ItemBuffs.class b/bin/classes/net/swordie/ms/client/character/items/ItemBuffs.class new file mode 100755 index 0000000..da80264 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ItemBuffs.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ItemOption$ItemOptionType.class b/bin/classes/net/swordie/ms/client/character/items/ItemOption$ItemOptionType.class new file mode 100755 index 0000000..8090cbd Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ItemOption$ItemOptionType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ItemOption.class b/bin/classes/net/swordie/ms/client/character/items/ItemOption.class new file mode 100755 index 0000000..43dfc76 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ItemOption.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ItemPotSlot.class b/bin/classes/net/swordie/ms/client/character/items/ItemPotSlot.class new file mode 100755 index 0000000..be2afd2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ItemPotSlot.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ItemSkill.class b/bin/classes/net/swordie/ms/client/character/items/ItemSkill.class new file mode 100755 index 0000000..408f2ed Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ItemSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ItemState.class b/bin/classes/net/swordie/ms/client/character/items/ItemState.class new file mode 100755 index 0000000..d20566e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ItemState.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/MemorialCubeInfo.class b/bin/classes/net/swordie/ms/client/character/items/MemorialCubeInfo.class new file mode 100755 index 0000000..c0d4f3a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/MemorialCubeInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/PetItem.class b/bin/classes/net/swordie/ms/client/character/items/PetItem.class new file mode 100755 index 0000000..85ec467 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/PetItem.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/RequiredJob.class b/bin/classes/net/swordie/ms/client/character/items/RequiredJob.class new file mode 100755 index 0000000..6681cf1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/RequiredJob.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ScrollUpgradeInfo$1.class b/bin/classes/net/swordie/ms/client/character/items/ScrollUpgradeInfo$1.class new file mode 100755 index 0000000..b950267 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ScrollUpgradeInfo$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/items/ScrollUpgradeInfo.class b/bin/classes/net/swordie/ms/client/character/items/ScrollUpgradeInfo.class new file mode 100755 index 0000000..aacadc0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/items/ScrollUpgradeInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/keys/FuncKeyMap.class b/bin/classes/net/swordie/ms/client/character/keys/FuncKeyMap.class new file mode 100755 index 0000000..e2fa9cb Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/keys/FuncKeyMap.class differ diff --git a/bin/classes/net/swordie/ms/client/character/keys/Keymapping.class b/bin/classes/net/swordie/ms/client/character/keys/Keymapping.class new file mode 100755 index 0000000..7129825 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/keys/Keymapping.class differ diff --git a/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleLadder.class b/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleLadder.class new file mode 100755 index 0000000..aa3b83a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleLadder.class differ diff --git a/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleMobInfo.class b/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleMobInfo.class new file mode 100755 index 0000000..96a77ff Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleMobInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleRankInfo.class b/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleRankInfo.class new file mode 100755 index 0000000..e7a5cd4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/monsterbattle/MonsterBattleRankInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/potential/CharacterPotential.class b/bin/classes/net/swordie/ms/client/character/potential/CharacterPotential.class new file mode 100755 index 0000000..a9464c8 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/potential/CharacterPotential.class differ diff --git a/bin/classes/net/swordie/ms/client/character/potential/CharacterPotentialMan.class b/bin/classes/net/swordie/ms/client/character/potential/CharacterPotentialMan.class new file mode 100755 index 0000000..8be2f52 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/potential/CharacterPotentialMan.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/Quest.class b/bin/classes/net/swordie/ms/client/character/quest/Quest.class new file mode 100755 index 0000000..0c15a44 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/Quest.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/QuestEx.class b/bin/classes/net/swordie/ms/client/character/quest/QuestEx.class new file mode 100755 index 0000000..eb71cb1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/QuestEx.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/QuestManager.class b/bin/classes/net/swordie/ms/client/character/quest/QuestManager.class new file mode 100755 index 0000000..442cf95 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/QuestManager.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressItemRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressItemRequirement.class new file mode 100755 index 0000000..890884a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressItemRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressLevelRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressLevelRequirement.class new file mode 100755 index 0000000..691bb23 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressLevelRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressMobRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressMobRequirement.class new file mode 100755 index 0000000..2920ae9 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressMobRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressMoneyRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressMoneyRequirement.class new file mode 100755 index 0000000..8939262 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressMoneyRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirement.class new file mode 100755 index 0000000..0860232 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirementType$1.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirementType$1.class new file mode 100755 index 0000000..4afd1b5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirementType$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirementType.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirementType.class new file mode 100755 index 0000000..8edd89e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestProgressRequirementType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/progress/QuestValueRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestValueRequirement.class new file mode 100755 index 0000000..e6df26c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/progress/QuestValueRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartCompletionRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartCompletionRequirement.class new file mode 100755 index 0000000..b791831 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartCompletionRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartItemRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartItemRequirement.class new file mode 100755 index 0000000..65e3163 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartItemRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartJobRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartJobRequirement.class new file mode 100755 index 0000000..425cace Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartJobRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMarriageRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMarriageRequirement.class new file mode 100755 index 0000000..961b4d3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMarriageRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMaxLevelRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMaxLevelRequirement.class new file mode 100755 index 0000000..2acb7c0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMaxLevelRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMinStatRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMinStatRequirement.class new file mode 100755 index 0000000..f5d86f0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartMinStatRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirement.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirement.class new file mode 100755 index 0000000..73d3ec5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirement.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirementType$1.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirementType$1.class new file mode 100755 index 0000000..fa75db2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirementType$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirementType.class b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirementType.class new file mode 100755 index 0000000..f8b2310 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/requirement/QuestStartRequirementType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestBuffItemReward.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestBuffItemReward.class new file mode 100755 index 0000000..9dface7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestBuffItemReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestExpReward.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestExpReward.class new file mode 100755 index 0000000..b476dfd Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestExpReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestItemReward.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestItemReward.class new file mode 100755 index 0000000..933c2b3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestItemReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestMoneyReward.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestMoneyReward.class new file mode 100755 index 0000000..06d7b1a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestMoneyReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestPopReward.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestPopReward.class new file mode 100755 index 0000000..8b8fdc4 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestPopReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestReward.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestReward.class new file mode 100755 index 0000000..a652283 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestReward.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestRewardType$1.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestRewardType$1.class new file mode 100755 index 0000000..f0bb120 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestRewardType$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/quest/reward/QuestRewardType.class b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestRewardType.class new file mode 100755 index 0000000..3f4785e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/quest/reward/QuestRewardType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/runestones/RuneStone$1.class b/bin/classes/net/swordie/ms/client/character/runestones/RuneStone$1.class new file mode 100755 index 0000000..5b5ae76 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/runestones/RuneStone$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/runestones/RuneStone$EventType.class b/bin/classes/net/swordie/ms/client/character/runestones/RuneStone$EventType.class new file mode 100755 index 0000000..18a662c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/runestones/RuneStone$EventType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/runestones/RuneStone.class b/bin/classes/net/swordie/ms/client/character/runestones/RuneStone.class new file mode 100755 index 0000000..dbfaf79 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/runestones/RuneStone.class differ diff --git a/bin/classes/net/swordie/ms/client/character/runestones/RuneStoneAckType.class b/bin/classes/net/swordie/ms/client/character/runestones/RuneStoneAckType.class new file mode 100755 index 0000000..8b4438d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/runestones/RuneStoneAckType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/scene/EffectInfo.class b/bin/classes/net/swordie/ms/client/character/scene/EffectInfo.class new file mode 100755 index 0000000..aacd0e6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/scene/EffectInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/scene/Scene$1.class b/bin/classes/net/swordie/ms/client/character/scene/Scene$1.class new file mode 100755 index 0000000..70186db Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/scene/Scene$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/scene/Scene.class b/bin/classes/net/swordie/ms/client/character/scene/Scene.class new file mode 100755 index 0000000..603b10a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/scene/Scene.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/ChosenSkill.class b/bin/classes/net/swordie/ms/client/character/skills/ChosenSkill.class new file mode 100755 index 0000000..e56f323 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/ChosenSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/Core.class b/bin/classes/net/swordie/ms/client/character/skills/Core.class new file mode 100755 index 0000000..bdf04a7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/Core.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/ForceAtom$1.class b/bin/classes/net/swordie/ms/client/character/skills/ForceAtom$1.class new file mode 100755 index 0000000..9090e3e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/ForceAtom$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/ForceAtom.class b/bin/classes/net/swordie/ms/client/character/skills/ForceAtom.class new file mode 100755 index 0000000..eb7ecd3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/ForceAtom.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/GuidedBullet.class b/bin/classes/net/swordie/ms/client/character/skills/GuidedBullet.class new file mode 100755 index 0000000..ab4830f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/GuidedBullet.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/LarknessManager$LarknessType.class b/bin/classes/net/swordie/ms/client/character/skills/LarknessManager$LarknessType.class new file mode 100755 index 0000000..102e8af Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/LarknessManager$LarknessType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/LarknessManager.class b/bin/classes/net/swordie/ms/client/character/skills/LarknessManager.class new file mode 100755 index 0000000..4bb18f1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/LarknessManager.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/MatrixRecord.class b/bin/classes/net/swordie/ms/client/character/skills/MatrixRecord.class new file mode 100755 index 0000000..a1ace94 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/MatrixRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/Option.class b/bin/classes/net/swordie/ms/client/character/skills/Option.class new file mode 100755 index 0000000..badec8c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/Option.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/PartyBooster.class b/bin/classes/net/swordie/ms/client/character/skills/PartyBooster.class new file mode 100755 index 0000000..b7f8e50 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/PartyBooster.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/ProcessType.class b/bin/classes/net/swordie/ms/client/character/skills/ProcessType.class new file mode 100755 index 0000000..c87e105 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/ProcessType.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/PsychicArea.class b/bin/classes/net/swordie/ms/client/character/skills/PsychicArea.class new file mode 100755 index 0000000..92cb508 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/PsychicArea.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/PsychicLockBall.class b/bin/classes/net/swordie/ms/client/character/skills/PsychicLockBall.class new file mode 100755 index 0000000..470ce78 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/PsychicLockBall.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/ShootObject.class b/bin/classes/net/swordie/ms/client/character/skills/ShootObject.class new file mode 100755 index 0000000..83d712c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/ShootObject.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/Skill.class b/bin/classes/net/swordie/ms/client/character/skills/Skill.class new file mode 100755 index 0000000..a4e6adb Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/Skill.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/SkillStat$1.class b/bin/classes/net/swordie/ms/client/character/skills/SkillStat$1.class new file mode 100755 index 0000000..05e5a8f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/SkillStat$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/SkillStat.class b/bin/classes/net/swordie/ms/client/character/skills/SkillStat.class new file mode 100755 index 0000000..0c0075e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/SkillStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/StolenSkill.class b/bin/classes/net/swordie/ms/client/character/skills/StolenSkill.class new file mode 100755 index 0000000..05ff720 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/StolenSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/StopForceAtom.class b/bin/classes/net/swordie/ms/client/character/skills/StopForceAtom.class new file mode 100755 index 0000000..ec47b10 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/StopForceAtom.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/TownPortal.class b/bin/classes/net/swordie/ms/client/character/skills/TownPortal.class new file mode 100755 index 0000000..ca76138 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/TownPortal.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/info/AttackInfo.class b/bin/classes/net/swordie/ms/client/character/skills/info/AttackInfo.class new file mode 100755 index 0000000..5db1404 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/info/AttackInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/info/ForceAtomInfo.class b/bin/classes/net/swordie/ms/client/character/skills/info/ForceAtomInfo.class new file mode 100755 index 0000000..197f7ea Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/info/ForceAtomInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/info/MobAttackInfo.class b/bin/classes/net/swordie/ms/client/character/skills/info/MobAttackInfo.class new file mode 100755 index 0000000..69120c1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/info/MobAttackInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/info/SkillInfo$1.class b/bin/classes/net/swordie/ms/client/character/skills/info/SkillInfo$1.class new file mode 100755 index 0000000..1200231 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/info/SkillInfo$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/info/SkillInfo.class b/bin/classes/net/swordie/ms/client/character/skills/info/SkillInfo.class new file mode 100755 index 0000000..5ef9cb6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/info/SkillInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/info/SkillUseInfo.class b/bin/classes/net/swordie/ms/client/character/skills/info/SkillUseInfo.class new file mode 100755 index 0000000..59fd014 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/info/SkillUseInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/info/ToBaseStat.class b/bin/classes/net/swordie/ms/client/character/skills/info/ToBaseStat.class new file mode 100755 index 0000000..32f9cad Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/info/ToBaseStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/temp/CharacterTemporaryStat$1.class b/bin/classes/net/swordie/ms/client/character/skills/temp/CharacterTemporaryStat$1.class new file mode 100755 index 0000000..2078d76 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/temp/CharacterTemporaryStat$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/temp/CharacterTemporaryStat.class b/bin/classes/net/swordie/ms/client/character/skills/temp/CharacterTemporaryStat.class new file mode 100755 index 0000000..fb97f05 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/temp/CharacterTemporaryStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatBase.class b/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatBase.class new file mode 100755 index 0000000..5a83d74 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatBase.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatManager$1.class b/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatManager$1.class new file mode 100755 index 0000000..22db99a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatManager$1.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatManager.class b/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatManager.class new file mode 100755 index 0000000..0222c68 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/temp/TemporaryStatManager.class differ diff --git a/bin/classes/net/swordie/ms/client/character/skills/temp/TwoStateTemporaryStat.class b/bin/classes/net/swordie/ms/client/character/skills/temp/TwoStateTemporaryStat.class new file mode 100755 index 0000000..cf23c13 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/skills/temp/TwoStateTemporaryStat.class differ diff --git a/bin/classes/net/swordie/ms/client/character/union/Union.class b/bin/classes/net/swordie/ms/client/character/union/Union.class new file mode 100755 index 0000000..0a8c894 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/union/Union.class differ diff --git a/bin/classes/net/swordie/ms/client/character/union/UnionBoard.class b/bin/classes/net/swordie/ms/client/character/union/UnionBoard.class new file mode 100755 index 0000000..c9f9af6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/union/UnionBoard.class differ diff --git a/bin/classes/net/swordie/ms/client/character/union/UnionMember.class b/bin/classes/net/swordie/ms/client/character/union/UnionMember.class new file mode 100755 index 0000000..c41fce6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/character/union/UnionMember.class differ diff --git a/bin/classes/net/swordie/ms/client/friend/Friend.class b/bin/classes/net/swordie/ms/client/friend/Friend.class new file mode 100755 index 0000000..ddf5b02 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/friend/Friend.class differ diff --git a/bin/classes/net/swordie/ms/client/friend/FriendFlag.class b/bin/classes/net/swordie/ms/client/friend/FriendFlag.class new file mode 100755 index 0000000..fc7a13a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/friend/FriendFlag.class differ diff --git a/bin/classes/net/swordie/ms/client/friend/FriendRecord.class b/bin/classes/net/swordie/ms/client/friend/FriendRecord.class new file mode 100755 index 0000000..94b6855 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/friend/FriendRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/friend/FriendType.class b/bin/classes/net/swordie/ms/client/friend/FriendType.class new file mode 100755 index 0000000..c13fa83 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/friend/FriendType.class differ diff --git a/bin/classes/net/swordie/ms/client/friend/FriendshipRingRecord.class b/bin/classes/net/swordie/ms/client/friend/FriendshipRingRecord.class new file mode 100755 index 0000000..012c1f8 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/friend/FriendshipRingRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/friend/result/FriendResult$1.class b/bin/classes/net/swordie/ms/client/friend/result/FriendResult$1.class new file mode 100755 index 0000000..8db3798 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/friend/result/FriendResult$1.class differ diff --git a/bin/classes/net/swordie/ms/client/friend/result/FriendResult.class b/bin/classes/net/swordie/ms/client/friend/result/FriendResult.class new file mode 100755 index 0000000..85a38fa Binary files /dev/null and b/bin/classes/net/swordie/ms/client/friend/result/FriendResult.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/Guild.class b/bin/classes/net/swordie/ms/client/guild/Guild.class new file mode 100755 index 0000000..cfe08f1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/Guild.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/GuildMember.class b/bin/classes/net/swordie/ms/client/guild/GuildMember.class new file mode 100755 index 0000000..4ab74aa Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/GuildMember.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/GuildRequestor.class b/bin/classes/net/swordie/ms/client/guild/GuildRequestor.class new file mode 100755 index 0000000..07e090a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/GuildRequestor.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/GuildSkill.class b/bin/classes/net/swordie/ms/client/guild/GuildSkill.class new file mode 100755 index 0000000..19a2d2a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/GuildSkill.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/bbs/BBSRecord.class b/bin/classes/net/swordie/ms/client/guild/bbs/BBSRecord.class new file mode 100755 index 0000000..4fbda58 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/bbs/BBSRecord.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/bbs/BBSReply.class b/bin/classes/net/swordie/ms/client/guild/bbs/BBSReply.class new file mode 100755 index 0000000..63f65d9 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/bbs/BBSReply.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSPacket$1.class b/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSPacket$1.class new file mode 100755 index 0000000..2a78980 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSPacket$1.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSPacket.class b/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSPacket.class new file mode 100755 index 0000000..4a96dea Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSPacket.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSType.class b/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSType.class new file mode 100755 index 0000000..2c5c42a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/bbs/GuildBBSType.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/result/GuildResult$1.class b/bin/classes/net/swordie/ms/client/guild/result/GuildResult$1.class new file mode 100755 index 0000000..e6d2c7b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/result/GuildResult$1.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/result/GuildResult.class b/bin/classes/net/swordie/ms/client/guild/result/GuildResult.class new file mode 100755 index 0000000..1af658f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/result/GuildResult.class differ diff --git a/bin/classes/net/swordie/ms/client/guild/result/GuildType.class b/bin/classes/net/swordie/ms/client/guild/result/GuildType.class new file mode 100755 index 0000000..55e5116 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/guild/result/GuildType.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/Job$1.class b/bin/classes/net/swordie/ms/client/jobs/Job$1.class new file mode 100755 index 0000000..b02ce88 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/Job$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/Job$2.class b/bin/classes/net/swordie/ms/client/jobs/Job$2.class new file mode 100755 index 0000000..83fdc7d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/Job$2.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/Job.class b/bin/classes/net/swordie/ms/client/jobs/Job.class new file mode 100755 index 0000000..0bbe0e1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/Job.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/JobManager.class b/bin/classes/net/swordie/ms/client/jobs/JobManager.class new file mode 100755 index 0000000..9f457db Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/JobManager.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/Zero.class b/bin/classes/net/swordie/ms/client/jobs/Zero.class new file mode 100755 index 0000000..09ba86e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/Zero.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/BeastTamer$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/BeastTamer$1.class new file mode 100755 index 0000000..f6f1306 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/BeastTamer$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/BeastTamer.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/BeastTamer.class new file mode 100755 index 0000000..bc8b4e5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/BeastTamer.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/Beginner.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/Beginner.class new file mode 100755 index 0000000..7aa3c54 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/Beginner.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/Kinesis.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/Kinesis.class new file mode 100755 index 0000000..8cb7182 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/Kinesis.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/PinkBean.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/PinkBean.class new file mode 100755 index 0000000..1f18a40 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/PinkBean.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Archer.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Archer.class new file mode 100755 index 0000000..3b24d21 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Archer.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster$QCType.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster$QCType.class new file mode 100755 index 0000000..7d232d9 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster$QCType.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster$QuiverCartridge.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster$QuiverCartridge.class new file mode 100755 index 0000000..a88003b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster$QuiverCartridge.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster.class new file mode 100755 index 0000000..d59fcda Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/BowMaster.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Marksman.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Marksman.class new file mode 100755 index 0000000..e06cb2f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Marksman.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder$1.class new file mode 100755 index 0000000..1019b00 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder$EmblemType.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder$EmblemType.class new file mode 100755 index 0000000..fbe3eb2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder$EmblemType.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder.class new file mode 100755 index 0000000..30e61f0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/archer/Pathfinder.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Bishop$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Bishop$1.class new file mode 100755 index 0000000..bfe0f86 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Bishop$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Bishop.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Bishop.class new file mode 100755 index 0000000..4e1773d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Bishop.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/FirePoison$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/FirePoison$1.class new file mode 100755 index 0000000..551ae2b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/FirePoison$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/FirePoison.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/FirePoison.class new file mode 100755 index 0000000..22cb58b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/FirePoison.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/IceLightning$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/IceLightning$1.class new file mode 100755 index 0000000..9c54b14 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/IceLightning$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/IceLightning.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/IceLightning.class new file mode 100755 index 0000000..804b419 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/IceLightning.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Magician.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Magician.class new file mode 100755 index 0000000..7ac9459 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/magician/Magician.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Buccaneer.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Buccaneer.class new file mode 100755 index 0000000..a4a4ae3 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Buccaneer.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Cannonneer$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Cannonneer$1.class new file mode 100755 index 0000000..3eec378 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Cannonneer$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Cannonneer.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Cannonneer.class new file mode 100755 index 0000000..143dd8a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Cannonneer.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Corsair.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Corsair.class new file mode 100755 index 0000000..8c63cbb Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Corsair.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Jett$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Jett$1.class new file mode 100755 index 0000000..5dbdc39 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Jett$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Jett.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Jett.class new file mode 100755 index 0000000..e8c5506 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Jett.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Pirate.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Pirate.class new file mode 100755 index 0000000..1c8e9b0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/pirate/Pirate.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/BladeMaster.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/BladeMaster.class new file mode 100755 index 0000000..c85ff36 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/BladeMaster.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/NightLord.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/NightLord.class new file mode 100755 index 0000000..c95a1b9 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/NightLord.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/Shadower.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/Shadower.class new file mode 100755 index 0000000..d3cfdd5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/Shadower.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/Thief.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/Thief.class new file mode 100755 index 0000000..46bb547 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/thief/Thief.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/DarkKnight.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/DarkKnight.class new file mode 100755 index 0000000..a467516 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/DarkKnight.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Hero.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Hero.class new file mode 100755 index 0000000..f7cc673 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Hero.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Paladin$1.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Paladin$1.class new file mode 100755 index 0000000..f3d8367 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Paladin$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Paladin.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Paladin.class new file mode 100755 index 0000000..6c6bc0f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Paladin.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Warrior.class b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Warrior.class new file mode 100755 index 0000000..f200bb2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/adventurer/warrior/Warrior.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/BlazeWizard.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/BlazeWizard.class new file mode 100755 index 0000000..7c06715 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/BlazeWizard.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/DawnWarrior.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/DawnWarrior.class new file mode 100755 index 0000000..3ccda7a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/DawnWarrior.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/Mihile$1.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/Mihile$1.class new file mode 100755 index 0000000..e52e46e Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/Mihile$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/Mihile.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/Mihile.class new file mode 100755 index 0000000..25475c9 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/Mihile.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/NightWalker.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/NightWalker.class new file mode 100755 index 0000000..71bf437 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/NightWalker.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/Noblesse.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/Noblesse.class new file mode 100755 index 0000000..114f7b5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/Noblesse.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/ThunderBreaker.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/ThunderBreaker.class new file mode 100755 index 0000000..0a675bc Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/ThunderBreaker.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/cygnus/WindArcher.class b/bin/classes/net/swordie/ms/client/jobs/cygnus/WindArcher.class new file mode 100755 index 0000000..2e0148c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/cygnus/WindArcher.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/flora/Ark$1.class b/bin/classes/net/swordie/ms/client/jobs/flora/Ark$1.class new file mode 100755 index 0000000..2b89f70 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/flora/Ark$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/flora/Ark$2.class b/bin/classes/net/swordie/ms/client/jobs/flora/Ark$2.class new file mode 100755 index 0000000..03b0139 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/flora/Ark$2.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/flora/Ark$SpellChargeType.class b/bin/classes/net/swordie/ms/client/jobs/flora/Ark$SpellChargeType.class new file mode 100755 index 0000000..4befe36 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/flora/Ark$SpellChargeType.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/flora/Ark.class b/bin/classes/net/swordie/ms/client/jobs/flora/Ark.class new file mode 100755 index 0000000..c1ea949 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/flora/Ark.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/flora/Illium$1.class b/bin/classes/net/swordie/ms/client/jobs/flora/Illium$1.class new file mode 100755 index 0000000..20daa1b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/flora/Illium$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/flora/Illium.class b/bin/classes/net/swordie/ms/client/jobs/flora/Illium.class new file mode 100755 index 0000000..70e15f2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/flora/Illium.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Aran.class b/bin/classes/net/swordie/ms/client/jobs/legend/Aran.class new file mode 100755 index 0000000..90fa67d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Aran.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Evan.class b/bin/classes/net/swordie/ms/client/jobs/legend/Evan.class new file mode 100755 index 0000000..b1ea321 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Evan.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Legend.class b/bin/classes/net/swordie/ms/client/jobs/legend/Legend.class new file mode 100755 index 0000000..09a40ba Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Legend.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Luminous.class b/bin/classes/net/swordie/ms/client/jobs/legend/Luminous.class new file mode 100755 index 0000000..25cb63c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Luminous.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Mercedes.class b/bin/classes/net/swordie/ms/client/jobs/legend/Mercedes.class new file mode 100755 index 0000000..1ab4ca0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Mercedes.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Phantom$1.class b/bin/classes/net/swordie/ms/client/jobs/legend/Phantom$1.class new file mode 100755 index 0000000..a6be10b Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Phantom$1.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Phantom.class b/bin/classes/net/swordie/ms/client/jobs/legend/Phantom.class new file mode 100755 index 0000000..8241578 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Phantom.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/legend/Shade.class b/bin/classes/net/swordie/ms/client/jobs/legend/Shade.class new file mode 100755 index 0000000..1ddb4c0 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/legend/Shade.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/nova/AngelicBuster$MightMascotSkillTypes.class b/bin/classes/net/swordie/ms/client/jobs/nova/AngelicBuster$MightMascotSkillTypes.class new file mode 100755 index 0000000..c601594 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/nova/AngelicBuster$MightMascotSkillTypes.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/nova/AngelicBuster.class b/bin/classes/net/swordie/ms/client/jobs/nova/AngelicBuster.class new file mode 100755 index 0000000..976afc1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/nova/AngelicBuster.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/nova/Cadena.class b/bin/classes/net/swordie/ms/client/jobs/nova/Cadena.class new file mode 100755 index 0000000..1422f72 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/nova/Cadena.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/nova/Kaiser.class b/bin/classes/net/swordie/ms/client/jobs/nova/Kaiser.class new file mode 100755 index 0000000..d793cc2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/nova/Kaiser.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/BattleMage.class b/bin/classes/net/swordie/ms/client/jobs/resistance/BattleMage.class new file mode 100755 index 0000000..a2f615c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/BattleMage.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/Blaster.class b/bin/classes/net/swordie/ms/client/jobs/resistance/Blaster.class new file mode 100755 index 0000000..4b93385 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/Blaster.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/Citizen.class b/bin/classes/net/swordie/ms/client/jobs/resistance/Citizen.class new file mode 100755 index 0000000..b3d2d70 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/Citizen.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/Mechanic.class b/bin/classes/net/swordie/ms/client/jobs/resistance/Mechanic.class new file mode 100755 index 0000000..2c82f6f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/Mechanic.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/OpenGate.class b/bin/classes/net/swordie/ms/client/jobs/resistance/OpenGate.class new file mode 100755 index 0000000..943c2d6 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/OpenGate.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/WildHunter.class b/bin/classes/net/swordie/ms/client/jobs/resistance/WildHunter.class new file mode 100755 index 0000000..91abda1 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/WildHunter.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/WildHunterInfo.class b/bin/classes/net/swordie/ms/client/jobs/resistance/WildHunterInfo.class new file mode 100755 index 0000000..5a8776d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/WildHunterInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/Xenon.class b/bin/classes/net/swordie/ms/client/jobs/resistance/Xenon.class new file mode 100755 index 0000000..657356a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/Xenon.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/demon/Demon.class b/bin/classes/net/swordie/ms/client/jobs/resistance/demon/Demon.class new file mode 100755 index 0000000..d581065 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/demon/Demon.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/demon/DemonAvenger.class b/bin/classes/net/swordie/ms/client/jobs/resistance/demon/DemonAvenger.class new file mode 100755 index 0000000..c103127 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/demon/DemonAvenger.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/resistance/demon/DemonSlayer.class b/bin/classes/net/swordie/ms/client/jobs/resistance/demon/DemonSlayer.class new file mode 100755 index 0000000..12a4a68 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/resistance/demon/DemonSlayer.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/sengoku/Hayato.class b/bin/classes/net/swordie/ms/client/jobs/sengoku/Hayato.class new file mode 100755 index 0000000..77f758f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/sengoku/Hayato.class differ diff --git a/bin/classes/net/swordie/ms/client/jobs/sengoku/Kanna.class b/bin/classes/net/swordie/ms/client/jobs/sengoku/Kanna.class new file mode 100755 index 0000000..1b1cfb7 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/jobs/sengoku/Kanna.class differ diff --git a/bin/classes/net/swordie/ms/client/party/Party.class b/bin/classes/net/swordie/ms/client/party/Party.class new file mode 100755 index 0000000..7fc1d8d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/party/Party.class differ diff --git a/bin/classes/net/swordie/ms/client/party/PartyDamageInfo.class b/bin/classes/net/swordie/ms/client/party/PartyDamageInfo.class new file mode 100755 index 0000000..5ef6422 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/party/PartyDamageInfo.class differ diff --git a/bin/classes/net/swordie/ms/client/party/PartyMember.class b/bin/classes/net/swordie/ms/client/party/PartyMember.class new file mode 100755 index 0000000..786adc2 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/party/PartyMember.class differ diff --git a/bin/classes/net/swordie/ms/client/party/PartyResult$1.class b/bin/classes/net/swordie/ms/client/party/PartyResult$1.class new file mode 100755 index 0000000..d1a90d9 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/party/PartyResult$1.class differ diff --git a/bin/classes/net/swordie/ms/client/party/PartyResult.class b/bin/classes/net/swordie/ms/client/party/PartyResult.class new file mode 100755 index 0000000..4e3611f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/party/PartyResult.class differ diff --git a/bin/classes/net/swordie/ms/client/party/PartyType.class b/bin/classes/net/swordie/ms/client/party/PartyType.class new file mode 100755 index 0000000..778b262 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/party/PartyType.class differ diff --git a/bin/classes/net/swordie/ms/client/party/TownPortal.class b/bin/classes/net/swordie/ms/client/party/TownPortal.class new file mode 100755 index 0000000..cbc73a8 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/party/TownPortal.class differ diff --git a/bin/classes/net/swordie/ms/client/trunk/Trunk.class b/bin/classes/net/swordie/ms/client/trunk/Trunk.class new file mode 100755 index 0000000..f3ac55c Binary files /dev/null and b/bin/classes/net/swordie/ms/client/trunk/Trunk.class differ diff --git a/bin/classes/net/swordie/ms/client/trunk/TrunkDlg.class b/bin/classes/net/swordie/ms/client/trunk/TrunkDlg.class new file mode 100755 index 0000000..b1abd6f Binary files /dev/null and b/bin/classes/net/swordie/ms/client/trunk/TrunkDlg.class differ diff --git a/bin/classes/net/swordie/ms/client/trunk/TrunkMsg.class b/bin/classes/net/swordie/ms/client/trunk/TrunkMsg.class new file mode 100755 index 0000000..f00082d Binary files /dev/null and b/bin/classes/net/swordie/ms/client/trunk/TrunkMsg.class differ diff --git a/bin/classes/net/swordie/ms/client/trunk/TrunkOpen.class b/bin/classes/net/swordie/ms/client/trunk/TrunkOpen.class new file mode 100755 index 0000000..4e765c5 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/trunk/TrunkOpen.class differ diff --git a/bin/classes/net/swordie/ms/client/trunk/TrunkType.class b/bin/classes/net/swordie/ms/client/trunk/TrunkType.class new file mode 100755 index 0000000..feb253a Binary files /dev/null and b/bin/classes/net/swordie/ms/client/trunk/TrunkType.class differ diff --git a/bin/classes/net/swordie/ms/client/trunk/TrunkUpdate.class b/bin/classes/net/swordie/ms/client/trunk/TrunkUpdate.class new file mode 100755 index 0000000..9d06899 Binary files /dev/null and b/bin/classes/net/swordie/ms/client/trunk/TrunkUpdate.class differ diff --git a/bin/classes/net/swordie/ms/connection/ByteBufOutPacket.class b/bin/classes/net/swordie/ms/connection/ByteBufOutPacket.class new file mode 100755 index 0000000..79af6a5 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/ByteBufOutPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/Encodable.class b/bin/classes/net/swordie/ms/connection/Encodable.class new file mode 100755 index 0000000..cb8f8c4 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/Encodable.class differ diff --git a/bin/classes/net/swordie/ms/connection/InPacket.class b/bin/classes/net/swordie/ms/connection/InPacket.class new file mode 100755 index 0000000..9b310f1 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/InPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/OutPacket.class b/bin/classes/net/swordie/ms/connection/OutPacket.class new file mode 100755 index 0000000..751dee7 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/OutPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/Packet.class b/bin/classes/net/swordie/ms/connection/Packet.class new file mode 100755 index 0000000..3482b8e Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/Packet.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiAcceptor$1.class b/bin/classes/net/swordie/ms/connection/api/ApiAcceptor$1.class new file mode 100755 index 0000000..f962fbe Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiAcceptor$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiAcceptor.class b/bin/classes/net/swordie/ms/connection/api/ApiAcceptor.class new file mode 100755 index 0000000..38f5beb Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiAcceptor.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiDecoder.class b/bin/classes/net/swordie/ms/connection/api/ApiDecoder.class new file mode 100755 index 0000000..057d4b0 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiDecoder.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiEncoder.class b/bin/classes/net/swordie/ms/connection/api/ApiEncoder.class new file mode 100755 index 0000000..ee34197 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiEncoder.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiHandler$1.class b/bin/classes/net/swordie/ms/connection/api/ApiHandler$1.class new file mode 100755 index 0000000..137b4ae Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiHandler.class b/bin/classes/net/swordie/ms/connection/api/ApiHandler.class new file mode 100755 index 0000000..900b381 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiHandler.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiInHeader.class b/bin/classes/net/swordie/ms/connection/api/ApiInHeader.class new file mode 100755 index 0000000..3eafa66 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiInHeader.class differ diff --git a/bin/classes/net/swordie/ms/connection/api/ApiOutHeader.class b/bin/classes/net/swordie/ms/connection/api/ApiOutHeader.class new file mode 100755 index 0000000..2b004a9 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/api/ApiOutHeader.class differ diff --git a/bin/classes/net/swordie/ms/connection/crypto/AES.class b/bin/classes/net/swordie/ms/connection/crypto/AES.class new file mode 100755 index 0000000..2599cee Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/crypto/AES.class differ diff --git a/bin/classes/net/swordie/ms/connection/crypto/BitTools.class b/bin/classes/net/swordie/ms/connection/crypto/BitTools.class new file mode 100755 index 0000000..6263934 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/crypto/BitTools.class differ diff --git a/bin/classes/net/swordie/ms/connection/crypto/MapleCrypto.class b/bin/classes/net/swordie/ms/connection/crypto/MapleCrypto.class new file mode 100755 index 0000000..0caafe0 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/crypto/MapleCrypto.class differ diff --git a/bin/classes/net/swordie/ms/connection/crypto/TripleDESCipher.class b/bin/classes/net/swordie/ms/connection/crypto/TripleDESCipher.class new file mode 100755 index 0000000..f0769f4 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/crypto/TripleDESCipher.class differ diff --git a/bin/classes/net/swordie/ms/connection/db/DatabaseException.class b/bin/classes/net/swordie/ms/connection/db/DatabaseException.class new file mode 100755 index 0000000..305b6c8 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/db/DatabaseException.class differ diff --git a/bin/classes/net/swordie/ms/connection/db/DatabaseManager.class b/bin/classes/net/swordie/ms/connection/db/DatabaseManager.class new file mode 100755 index 0000000..5e0746d Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/db/DatabaseManager.class differ diff --git a/bin/classes/net/swordie/ms/connection/db/converters/FileTimeConverter.class b/bin/classes/net/swordie/ms/connection/db/converters/FileTimeConverter.class new file mode 100755 index 0000000..d3b11da Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/db/converters/FileTimeConverter.class differ diff --git a/bin/classes/net/swordie/ms/connection/db/converters/InlinedIntArrayConverter.class b/bin/classes/net/swordie/ms/connection/db/converters/InlinedIntArrayConverter.class new file mode 100755 index 0000000..f00e696 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/db/converters/InlinedIntArrayConverter.class differ diff --git a/bin/classes/net/swordie/ms/connection/db/converters/InlinedIntMapConverter.class b/bin/classes/net/swordie/ms/connection/db/converters/InlinedIntMapConverter.class new file mode 100755 index 0000000..04b9375 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/db/converters/InlinedIntMapConverter.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/ChannelAcceptor$1.class b/bin/classes/net/swordie/ms/connection/netty/ChannelAcceptor$1.class new file mode 100755 index 0000000..8841ff6 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/ChannelAcceptor$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/ChannelAcceptor.class b/bin/classes/net/swordie/ms/connection/netty/ChannelAcceptor.class new file mode 100755 index 0000000..0d86d4c Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/ChannelAcceptor.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/ChannelHandler.class b/bin/classes/net/swordie/ms/connection/netty/ChannelHandler.class new file mode 100755 index 0000000..202f5bc Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/ChannelHandler.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/ChatAcceptor$1.class b/bin/classes/net/swordie/ms/connection/netty/ChatAcceptor$1.class new file mode 100755 index 0000000..5e779c4 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/ChatAcceptor$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/ChatAcceptor.class b/bin/classes/net/swordie/ms/connection/netty/ChatAcceptor.class new file mode 100755 index 0000000..2aa9df4 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/ChatAcceptor.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/LoginAcceptor$1.class b/bin/classes/net/swordie/ms/connection/netty/LoginAcceptor$1.class new file mode 100755 index 0000000..7909f28 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/LoginAcceptor$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/LoginAcceptor.class b/bin/classes/net/swordie/ms/connection/netty/LoginAcceptor.class new file mode 100755 index 0000000..c995bea Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/LoginAcceptor.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/NettyClient.class b/bin/classes/net/swordie/ms/connection/netty/NettyClient.class new file mode 100755 index 0000000..68b8f9d Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/NettyClient.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/PacketDecoder.class b/bin/classes/net/swordie/ms/connection/netty/PacketDecoder.class new file mode 100755 index 0000000..e528594 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/PacketDecoder.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/PacketEncoder.class b/bin/classes/net/swordie/ms/connection/netty/PacketEncoder.class new file mode 100755 index 0000000..d9f53bd Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/PacketEncoder.class differ diff --git a/bin/classes/net/swordie/ms/connection/netty/PacketHandler.class b/bin/classes/net/swordie/ms/connection/netty/PacketHandler.class new file mode 100755 index 0000000..f778d07 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/netty/PacketHandler.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/AndroidPacket.class b/bin/classes/net/swordie/ms/connection/packet/AndroidPacket.class new file mode 100755 index 0000000..0f38a64 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/AndroidPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/ApiResponse.class b/bin/classes/net/swordie/ms/connection/packet/ApiResponse.class new file mode 100755 index 0000000..e4018e3 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/ApiResponse.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/BattleRecordMan.class b/bin/classes/net/swordie/ms/connection/packet/BattleRecordMan.class new file mode 100755 index 0000000..a85fb28 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/BattleRecordMan.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/CCashShop.class b/bin/classes/net/swordie/ms/connection/packet/CCashShop.class new file mode 100755 index 0000000..24ef327 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/CCashShop.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/CFamiliar.class b/bin/classes/net/swordie/ms/connection/packet/CFamiliar.class new file mode 100755 index 0000000..7972cb3 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/CFamiliar.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/CUIHandler.class b/bin/classes/net/swordie/ms/connection/packet/CUIHandler.class new file mode 100755 index 0000000..83b845a Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/CUIHandler.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/ChatSocket.class b/bin/classes/net/swordie/ms/connection/packet/ChatSocket.class new file mode 100755 index 0000000..02e3c93 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/ChatSocket.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/DemianFieldPacket.class b/bin/classes/net/swordie/ms/connection/packet/DemianFieldPacket.class new file mode 100755 index 0000000..f885a5e Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/DemianFieldPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/DragonPool.class b/bin/classes/net/swordie/ms/connection/packet/DragonPool.class new file mode 100755 index 0000000..04b7f80 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/DragonPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/DropPool$1.class b/bin/classes/net/swordie/ms/connection/packet/DropPool$1.class new file mode 100755 index 0000000..354401a Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/DropPool$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/DropPool.class b/bin/classes/net/swordie/ms/connection/packet/DropPool.class new file mode 100755 index 0000000..0d20ebb Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/DropPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/Effect$1.class b/bin/classes/net/swordie/ms/connection/packet/Effect$1.class new file mode 100755 index 0000000..4e5c790 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/Effect$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/Effect.class b/bin/classes/net/swordie/ms/connection/packet/Effect.class new file mode 100755 index 0000000..64cc220 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/Effect.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/FieldAttackObjPool.class b/bin/classes/net/swordie/ms/connection/packet/FieldAttackObjPool.class new file mode 100755 index 0000000..8e94178 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/FieldAttackObjPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/FieldPacket$1.class b/bin/classes/net/swordie/ms/connection/packet/FieldPacket$1.class new file mode 100755 index 0000000..77f4ed8 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/FieldPacket$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/FieldPacket.class b/bin/classes/net/swordie/ms/connection/packet/FieldPacket.class new file mode 100755 index 0000000..9bbfdc0 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/FieldPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/GachaponDlg.class b/bin/classes/net/swordie/ms/connection/packet/GachaponDlg.class new file mode 100755 index 0000000..705f0b0 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/GachaponDlg.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/InGameDirectionEvent$1.class b/bin/classes/net/swordie/ms/connection/packet/InGameDirectionEvent$1.class new file mode 100755 index 0000000..a0b2fec Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/InGameDirectionEvent$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/InGameDirectionEvent.class b/bin/classes/net/swordie/ms/connection/packet/InGameDirectionEvent.class new file mode 100755 index 0000000..9e5f77e Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/InGameDirectionEvent.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/ItemOperation.class b/bin/classes/net/swordie/ms/connection/packet/ItemOperation.class new file mode 100755 index 0000000..40351b6 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/ItemOperation.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/Login.class b/bin/classes/net/swordie/ms/connection/packet/Login.class new file mode 100755 index 0000000..e881d8d Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/Login.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/MapLoadable.class b/bin/classes/net/swordie/ms/connection/packet/MapLoadable.class new file mode 100755 index 0000000..14605b6 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/MapLoadable.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/MiniroomPacket.class b/bin/classes/net/swordie/ms/connection/packet/MiniroomPacket.class new file mode 100755 index 0000000..60b6c0e Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/MiniroomPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/MobPool.class b/bin/classes/net/swordie/ms/connection/packet/MobPool.class new file mode 100755 index 0000000..1a84559 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/MobPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/MobSkillAttackInfo.class b/bin/classes/net/swordie/ms/connection/packet/MobSkillAttackInfo.class new file mode 100755 index 0000000..27d6105 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/MobSkillAttackInfo.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/NpcPool.class b/bin/classes/net/swordie/ms/connection/packet/NpcPool.class new file mode 100755 index 0000000..91abefe Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/NpcPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/QuickMoveInfo.class b/bin/classes/net/swordie/ms/connection/packet/QuickMoveInfo.class new file mode 100755 index 0000000..9ef5364 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/QuickMoveInfo.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/RandomPortal$Type.class b/bin/classes/net/swordie/ms/connection/packet/RandomPortal$Type.class new file mode 100755 index 0000000..87c2b97 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/RandomPortal$Type.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/RandomPortal.class b/bin/classes/net/swordie/ms/connection/packet/RandomPortal.class new file mode 100755 index 0000000..92bfebe Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/RandomPortal.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/RandomPortalPool.class b/bin/classes/net/swordie/ms/connection/packet/RandomPortalPool.class new file mode 100755 index 0000000..bd67b9c Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/RandomPortalPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/ReactorPool.class b/bin/classes/net/swordie/ms/connection/packet/ReactorPool.class new file mode 100755 index 0000000..a1f3e87 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/ReactorPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/ScriptMan$1.class b/bin/classes/net/swordie/ms/connection/packet/ScriptMan$1.class new file mode 100755 index 0000000..215662a Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/ScriptMan$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/ScriptMan.class b/bin/classes/net/swordie/ms/connection/packet/ScriptMan.class new file mode 100755 index 0000000..a54827b Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/ScriptMan.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/ShopDlg.class b/bin/classes/net/swordie/ms/connection/packet/ShopDlg.class new file mode 100755 index 0000000..646084e Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/ShopDlg.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/Stage.class b/bin/classes/net/swordie/ms/connection/packet/Stage.class new file mode 100755 index 0000000..9067c0f Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/Stage.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/Summoned.class b/bin/classes/net/swordie/ms/connection/packet/Summoned.class new file mode 100755 index 0000000..0e7a3ca Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/Summoned.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/UserLocal$1.class b/bin/classes/net/swordie/ms/connection/packet/UserLocal$1.class new file mode 100755 index 0000000..f07831f Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/UserLocal$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/UserLocal.class b/bin/classes/net/swordie/ms/connection/packet/UserLocal.class new file mode 100755 index 0000000..33e47c8 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/UserLocal.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/UserPacket.class b/bin/classes/net/swordie/ms/connection/packet/UserPacket.class new file mode 100755 index 0000000..2ee2640 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/UserPacket.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/UserPool.class b/bin/classes/net/swordie/ms/connection/packet/UserPool.class new file mode 100755 index 0000000..198b630 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/UserPool.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/UserRemote.class b/bin/classes/net/swordie/ms/connection/packet/UserRemote.class new file mode 100755 index 0000000..c482b47 Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/UserRemote.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/WvsContext$1.class b/bin/classes/net/swordie/ms/connection/packet/WvsContext$1.class new file mode 100755 index 0000000..8f6892e Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/WvsContext$1.class differ diff --git a/bin/classes/net/swordie/ms/connection/packet/WvsContext.class b/bin/classes/net/swordie/ms/connection/packet/WvsContext.class new file mode 100755 index 0000000..fb6753b Binary files /dev/null and b/bin/classes/net/swordie/ms/connection/packet/WvsContext.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$1$1.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$1$1.class new file mode 100755 index 0000000..32c5822 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$1$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$1$2.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$1$2.class new file mode 100755 index 0000000..ce6dcf9 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$1$2.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$1$3.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$1$3.class new file mode 100755 index 0000000..f5c5387 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$1$3.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$1.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$1.class new file mode 100755 index 0000000..68ba864 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$2$1.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$2$1.class new file mode 100755 index 0000000..9e77c32 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$2$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$2.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$2.class new file mode 100755 index 0000000..edfa6c7 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$2.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$3$1.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$3$1.class new file mode 100755 index 0000000..8586ceb Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$3$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$3.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$3.class new file mode 100755 index 0000000..1a3a5d9 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$3.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$4$1.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$4$1.class new file mode 100755 index 0000000..ea3b345 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$4$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1$4.class b/bin/classes/net/swordie/ms/constants/BossConstants$1$4.class new file mode 100755 index 0000000..a9468c4 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1$4.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$1.class b/bin/classes/net/swordie/ms/constants/BossConstants$1.class new file mode 100755 index 0000000..080130e Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants$2.class b/bin/classes/net/swordie/ms/constants/BossConstants$2.class new file mode 100755 index 0000000..691e8f5 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants$2.class differ diff --git a/bin/classes/net/swordie/ms/constants/BossConstants.class b/bin/classes/net/swordie/ms/constants/BossConstants.class new file mode 100755 index 0000000..34d938f Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/BossConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/CustomConstants.class b/bin/classes/net/swordie/ms/constants/CustomConstants.class new file mode 100755 index 0000000..5a45051 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/CustomConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/FieldConstants.class b/bin/classes/net/swordie/ms/constants/FieldConstants.class new file mode 100755 index 0000000..c169833 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/FieldConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/GameConstants$1.class b/bin/classes/net/swordie/ms/constants/GameConstants$1.class new file mode 100755 index 0000000..d2e4024 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/GameConstants$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/GameConstants$UnionChucMultiplier.class b/bin/classes/net/swordie/ms/constants/GameConstants$UnionChucMultiplier.class new file mode 100755 index 0000000..bfc5805 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/GameConstants$UnionChucMultiplier.class differ diff --git a/bin/classes/net/swordie/ms/constants/GameConstants.class b/bin/classes/net/swordie/ms/constants/GameConstants.class new file mode 100755 index 0000000..d0b2878 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/GameConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/ItemConstants$1.class b/bin/classes/net/swordie/ms/constants/ItemConstants$1.class new file mode 100755 index 0000000..d9f077c Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/ItemConstants$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/ItemConstants.class b/bin/classes/net/swordie/ms/constants/ItemConstants.class new file mode 100755 index 0000000..f3e1bcf Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/ItemConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/JobConstants$1.class b/bin/classes/net/swordie/ms/constants/JobConstants$1.class new file mode 100755 index 0000000..cbc6f04 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/JobConstants$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/JobConstants$JobEnum.class b/bin/classes/net/swordie/ms/constants/JobConstants$JobEnum.class new file mode 100755 index 0000000..b54f5a5 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/JobConstants$JobEnum.class differ diff --git a/bin/classes/net/swordie/ms/constants/JobConstants$LoginJob$JobFlag.class b/bin/classes/net/swordie/ms/constants/JobConstants$LoginJob$JobFlag.class new file mode 100755 index 0000000..923a6d1 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/JobConstants$LoginJob$JobFlag.class differ diff --git a/bin/classes/net/swordie/ms/constants/JobConstants$LoginJob.class b/bin/classes/net/swordie/ms/constants/JobConstants$LoginJob.class new file mode 100755 index 0000000..d34ad43 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/JobConstants$LoginJob.class differ diff --git a/bin/classes/net/swordie/ms/constants/JobConstants.class b/bin/classes/net/swordie/ms/constants/JobConstants.class new file mode 100755 index 0000000..eba3b24 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/JobConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/MobConstants.class b/bin/classes/net/swordie/ms/constants/MobConstants.class new file mode 100755 index 0000000..1f85c3c Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/MobConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/MonsterCollectionGroup.class b/bin/classes/net/swordie/ms/constants/MonsterCollectionGroup.class new file mode 100755 index 0000000..397559a Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/MonsterCollectionGroup.class differ diff --git a/bin/classes/net/swordie/ms/constants/MonsterCollectionRegion.class b/bin/classes/net/swordie/ms/constants/MonsterCollectionRegion.class new file mode 100755 index 0000000..b3e0b5a Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/MonsterCollectionRegion.class differ diff --git a/bin/classes/net/swordie/ms/constants/MonsterCollectionSession.class b/bin/classes/net/swordie/ms/constants/MonsterCollectionSession.class new file mode 100755 index 0000000..6ab0874 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/MonsterCollectionSession.class differ diff --git a/bin/classes/net/swordie/ms/constants/QuestConstants.class b/bin/classes/net/swordie/ms/constants/QuestConstants.class new file mode 100755 index 0000000..06485b1 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/QuestConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/SkillChanges$1.class b/bin/classes/net/swordie/ms/constants/SkillChanges$1.class new file mode 100755 index 0000000..e01677c Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/SkillChanges$1.class differ diff --git a/bin/classes/net/swordie/ms/constants/SkillChanges$2.class b/bin/classes/net/swordie/ms/constants/SkillChanges$2.class new file mode 100755 index 0000000..2607384 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/SkillChanges$2.class differ diff --git a/bin/classes/net/swordie/ms/constants/SkillChanges$3.class b/bin/classes/net/swordie/ms/constants/SkillChanges$3.class new file mode 100755 index 0000000..83bdc2e Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/SkillChanges$3.class differ diff --git a/bin/classes/net/swordie/ms/constants/SkillChanges$4.class b/bin/classes/net/swordie/ms/constants/SkillChanges$4.class new file mode 100755 index 0000000..7ce26ef Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/SkillChanges$4.class differ diff --git a/bin/classes/net/swordie/ms/constants/SkillChanges$5.class b/bin/classes/net/swordie/ms/constants/SkillChanges$5.class new file mode 100755 index 0000000..b4628c7 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/SkillChanges$5.class differ diff --git a/bin/classes/net/swordie/ms/constants/SkillChanges.class b/bin/classes/net/swordie/ms/constants/SkillChanges.class new file mode 100755 index 0000000..83f1445 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/SkillChanges.class differ diff --git a/bin/classes/net/swordie/ms/constants/SkillConstants.class b/bin/classes/net/swordie/ms/constants/SkillConstants.class new file mode 100755 index 0000000..b70c5e0 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/SkillConstants.class differ diff --git a/bin/classes/net/swordie/ms/constants/WzConstants.class b/bin/classes/net/swordie/ms/constants/WzConstants.class new file mode 100755 index 0000000..8bda246 Binary files /dev/null and b/bin/classes/net/swordie/ms/constants/WzConstants.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Author.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Author.class new file mode 100755 index 0000000..3db2087 Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Author.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Field.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Field.class new file mode 100755 index 0000000..38cd056 Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Field.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Footer.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Footer.class new file mode 100755 index 0000000..d848d10 Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Footer.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Image.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Image.class new file mode 100755 index 0000000..2a1d058 Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Image.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Thumbnail.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Thumbnail.class new file mode 100755 index 0000000..0324b67 Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject$Thumbnail.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject.class new file mode 100755 index 0000000..acbac71 Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook$EmbedObject.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook$JSONObject.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook$JSONObject.class new file mode 100755 index 0000000..8cdc55d Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook$JSONObject.class differ diff --git a/bin/classes/net/swordie/ms/discord/DiscordWebhook.class b/bin/classes/net/swordie/ms/discord/DiscordWebhook.class new file mode 100755 index 0000000..a184a19 Binary files /dev/null and b/bin/classes/net/swordie/ms/discord/DiscordWebhook.class differ diff --git a/bin/classes/net/swordie/ms/enums/AccountCreateResult.class b/bin/classes/net/swordie/ms/enums/AccountCreateResult.class new file mode 100755 index 0000000..601615b Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AccountCreateResult.class differ diff --git a/bin/classes/net/swordie/ms/enums/AccountType.class b/bin/classes/net/swordie/ms/enums/AccountType.class new file mode 100755 index 0000000..0014d5a Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AccountType.class differ diff --git a/bin/classes/net/swordie/ms/enums/AchievementType.class b/bin/classes/net/swordie/ms/enums/AchievementType.class new file mode 100755 index 0000000..fc8cfc4 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AchievementType.class differ diff --git a/bin/classes/net/swordie/ms/enums/AllianceType.class b/bin/classes/net/swordie/ms/enums/AllianceType.class new file mode 100755 index 0000000..7a9fcd5 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AllianceType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ApiTokenResultType.class b/bin/classes/net/swordie/ms/enums/ApiTokenResultType.class new file mode 100755 index 0000000..b816be9 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ApiTokenResultType.class differ diff --git a/bin/classes/net/swordie/ms/enums/AssistType.class b/bin/classes/net/swordie/ms/enums/AssistType.class new file mode 100755 index 0000000..6e56637 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AssistType.class differ diff --git a/bin/classes/net/swordie/ms/enums/AttackIndex.class b/bin/classes/net/swordie/ms/enums/AttackIndex.class new file mode 100755 index 0000000..0c8c1da Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AttackIndex.class differ diff --git a/bin/classes/net/swordie/ms/enums/AuctionResultCode.class b/bin/classes/net/swordie/ms/enums/AuctionResultCode.class new file mode 100755 index 0000000..cfbd23b Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AuctionResultCode.class differ diff --git a/bin/classes/net/swordie/ms/enums/AuctionState.class b/bin/classes/net/swordie/ms/enums/AuctionState.class new file mode 100755 index 0000000..c933bf3 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AuctionState.class differ diff --git a/bin/classes/net/swordie/ms/enums/AvatarModifiedMask.class b/bin/classes/net/swordie/ms/enums/AvatarModifiedMask.class new file mode 100755 index 0000000..d8ed0d7 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/AvatarModifiedMask.class differ diff --git a/bin/classes/net/swordie/ms/enums/BaseStat$1.class b/bin/classes/net/swordie/ms/enums/BaseStat$1.class new file mode 100755 index 0000000..0ca55e9 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/BaseStat$1.class differ diff --git a/bin/classes/net/swordie/ms/enums/BaseStat.class b/bin/classes/net/swordie/ms/enums/BaseStat.class new file mode 100755 index 0000000..987bb84 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/BaseStat.class differ diff --git a/bin/classes/net/swordie/ms/enums/BeastTamerBeasts.class b/bin/classes/net/swordie/ms/enums/BeastTamerBeasts.class new file mode 100755 index 0000000..92878af Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/BeastTamerBeasts.class differ diff --git a/bin/classes/net/swordie/ms/enums/BossMatchingType.class b/bin/classes/net/swordie/ms/enums/BossMatchingType.class new file mode 100755 index 0000000..37464b4 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/BossMatchingType.class differ diff --git a/bin/classes/net/swordie/ms/enums/BroadcastMsgType$1.class b/bin/classes/net/swordie/ms/enums/BroadcastMsgType$1.class new file mode 100755 index 0000000..63c282e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/BroadcastMsgType$1.class differ diff --git a/bin/classes/net/swordie/ms/enums/BroadcastMsgType.class b/bin/classes/net/swordie/ms/enums/BroadcastMsgType.class new file mode 100755 index 0000000..f067c8e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/BroadcastMsgType.class differ diff --git a/bin/classes/net/swordie/ms/enums/CashItemType.class b/bin/classes/net/swordie/ms/enums/CashItemType.class new file mode 100755 index 0000000..4d2737c Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CashItemType.class differ diff --git a/bin/classes/net/swordie/ms/enums/CashShopActionType.class b/bin/classes/net/swordie/ms/enums/CashShopActionType.class new file mode 100755 index 0000000..4f81628 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CashShopActionType.class differ diff --git a/bin/classes/net/swordie/ms/enums/CashShopInfoType.class b/bin/classes/net/swordie/ms/enums/CashShopInfoType.class new file mode 100755 index 0000000..53b34e0 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CashShopInfoType.class differ diff --git a/bin/classes/net/swordie/ms/enums/CharNameResult.class b/bin/classes/net/swordie/ms/enums/CharNameResult.class new file mode 100755 index 0000000..cff90aa Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CharNameResult.class differ diff --git a/bin/classes/net/swordie/ms/enums/CharPotGrade.class b/bin/classes/net/swordie/ms/enums/CharPotGrade.class new file mode 100755 index 0000000..c9b60cf Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CharPotGrade.class differ diff --git a/bin/classes/net/swordie/ms/enums/CharSelectType.class b/bin/classes/net/swordie/ms/enums/CharSelectType.class new file mode 100755 index 0000000..37e6581 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CharSelectType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ChatType.class b/bin/classes/net/swordie/ms/enums/ChatType.class new file mode 100755 index 0000000..35cf9e3 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ChatType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ChatUserType.class b/bin/classes/net/swordie/ms/enums/ChatUserType.class new file mode 100755 index 0000000..7d9b29e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ChatUserType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ClockType.class b/bin/classes/net/swordie/ms/enums/ClockType.class new file mode 100755 index 0000000..dd75d9b Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ClockType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ClothingStats.class b/bin/classes/net/swordie/ms/enums/ClothingStats.class new file mode 100755 index 0000000..d0c6d52 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ClothingStats.class differ diff --git a/bin/classes/net/swordie/ms/enums/CustomFUEFieldScripts.class b/bin/classes/net/swordie/ms/enums/CustomFUEFieldScripts.class new file mode 100755 index 0000000..cea70d5 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CustomFUEFieldScripts.class differ diff --git a/bin/classes/net/swordie/ms/enums/CustomFieldScripts.class b/bin/classes/net/swordie/ms/enums/CustomFieldScripts.class new file mode 100755 index 0000000..97e58dd Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/CustomFieldScripts.class differ diff --git a/bin/classes/net/swordie/ms/enums/DBChar.class b/bin/classes/net/swordie/ms/enums/DBChar.class new file mode 100755 index 0000000..55f2706 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DBChar.class differ diff --git a/bin/classes/net/swordie/ms/enums/DimensionalMirrorType.class b/bin/classes/net/swordie/ms/enums/DimensionalMirrorType.class new file mode 100755 index 0000000..dfeff8b Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DimensionalMirrorType.class differ diff --git a/bin/classes/net/swordie/ms/enums/DimensionalPortalTownType.class b/bin/classes/net/swordie/ms/enums/DimensionalPortalTownType.class new file mode 100755 index 0000000..0cf43c2 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DimensionalPortalTownType.class differ diff --git a/bin/classes/net/swordie/ms/enums/DimensionalPortalType.class b/bin/classes/net/swordie/ms/enums/DimensionalPortalType.class new file mode 100755 index 0000000..a245278 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DimensionalPortalType.class differ diff --git a/bin/classes/net/swordie/ms/enums/DropEnterType.class b/bin/classes/net/swordie/ms/enums/DropEnterType.class new file mode 100755 index 0000000..9424347 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DropEnterType.class differ diff --git a/bin/classes/net/swordie/ms/enums/DropLeaveType.class b/bin/classes/net/swordie/ms/enums/DropLeaveType.class new file mode 100755 index 0000000..5a9ca39 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DropLeaveType.class differ diff --git a/bin/classes/net/swordie/ms/enums/DropMotionType.class b/bin/classes/net/swordie/ms/enums/DropMotionType.class new file mode 100755 index 0000000..7ec41c9 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DropMotionType.class differ diff --git a/bin/classes/net/swordie/ms/enums/DropType.class b/bin/classes/net/swordie/ms/enums/DropType.class new file mode 100755 index 0000000..1bd792b Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/DropType.class differ diff --git a/bin/classes/net/swordie/ms/enums/EliteState.class b/bin/classes/net/swordie/ms/enums/EliteState.class new file mode 100755 index 0000000..6662488 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/EliteState.class differ diff --git a/bin/classes/net/swordie/ms/enums/EnchantStat$1.class b/bin/classes/net/swordie/ms/enums/EnchantStat$1.class new file mode 100755 index 0000000..c5ac08e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/EnchantStat$1.class differ diff --git a/bin/classes/net/swordie/ms/enums/EnchantStat.class b/bin/classes/net/swordie/ms/enums/EnchantStat.class new file mode 100755 index 0000000..b5bede7 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/EnchantStat.class differ diff --git a/bin/classes/net/swordie/ms/enums/EnterType.class b/bin/classes/net/swordie/ms/enums/EnterType.class new file mode 100755 index 0000000..0c14d01 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/EnterType.class differ diff --git a/bin/classes/net/swordie/ms/enums/EquipBaseStat.class b/bin/classes/net/swordie/ms/enums/EquipBaseStat.class new file mode 100755 index 0000000..2539e3d Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/EquipBaseStat.class differ diff --git a/bin/classes/net/swordie/ms/enums/EquipmentEnchantType.class b/bin/classes/net/swordie/ms/enums/EquipmentEnchantType.class new file mode 100755 index 0000000..a13d358 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/EquipmentEnchantType.class differ diff --git a/bin/classes/net/swordie/ms/enums/EventType.class b/bin/classes/net/swordie/ms/enums/EventType.class new file mode 100755 index 0000000..ee0dd1e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/EventType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ExpIncreaseInfoFlags.class b/bin/classes/net/swordie/ms/enums/ExpIncreaseInfoFlags.class new file mode 100755 index 0000000..bab7c3f Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ExpIncreaseInfoFlags.class differ diff --git a/bin/classes/net/swordie/ms/enums/FieldOption.class b/bin/classes/net/swordie/ms/enums/FieldOption.class new file mode 100755 index 0000000..4d5da4d Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/FieldOption.class differ diff --git a/bin/classes/net/swordie/ms/enums/FieldType.class b/bin/classes/net/swordie/ms/enums/FieldType.class new file mode 100755 index 0000000..9c57bc5 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/FieldType.class differ diff --git a/bin/classes/net/swordie/ms/enums/FlameStat.class b/bin/classes/net/swordie/ms/enums/FlameStat.class new file mode 100755 index 0000000..c5dc43d Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/FlameStat.class differ diff --git a/bin/classes/net/swordie/ms/enums/ForceAtomEnum$1.class b/bin/classes/net/swordie/ms/enums/ForceAtomEnum$1.class new file mode 100755 index 0000000..64fd9c8 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ForceAtomEnum$1.class differ diff --git a/bin/classes/net/swordie/ms/enums/ForceAtomEnum.class b/bin/classes/net/swordie/ms/enums/ForceAtomEnum.class new file mode 100755 index 0000000..1d77d7f Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ForceAtomEnum.class differ diff --git a/bin/classes/net/swordie/ms/enums/ForcedInputType.class b/bin/classes/net/swordie/ms/enums/ForcedInputType.class new file mode 100755 index 0000000..4a76e12 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ForcedInputType.class differ diff --git a/bin/classes/net/swordie/ms/enums/GoldHammerResult.class b/bin/classes/net/swordie/ms/enums/GoldHammerResult.class new file mode 100755 index 0000000..3a7a114 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/GoldHammerResult.class differ diff --git a/bin/classes/net/swordie/ms/enums/GroupMessageType.class b/bin/classes/net/swordie/ms/enums/GroupMessageType.class new file mode 100755 index 0000000..771afe4 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/GroupMessageType.class differ diff --git a/bin/classes/net/swordie/ms/enums/HotTimeRewardResult.class b/bin/classes/net/swordie/ms/enums/HotTimeRewardResult.class new file mode 100755 index 0000000..2033965 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/HotTimeRewardResult.class differ diff --git a/bin/classes/net/swordie/ms/enums/HotTimeRewardSendType.class b/bin/classes/net/swordie/ms/enums/HotTimeRewardSendType.class new file mode 100755 index 0000000..fcd3a15 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/HotTimeRewardSendType.class differ diff --git a/bin/classes/net/swordie/ms/enums/HotTimeRewardType.class b/bin/classes/net/swordie/ms/enums/HotTimeRewardType.class new file mode 100755 index 0000000..fe7b30e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/HotTimeRewardType.class differ diff --git a/bin/classes/net/swordie/ms/enums/InGameDirectionAsk.class b/bin/classes/net/swordie/ms/enums/InGameDirectionAsk.class new file mode 100755 index 0000000..922caa7 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/InGameDirectionAsk.class differ diff --git a/bin/classes/net/swordie/ms/enums/InGameDirectionEventType.class b/bin/classes/net/swordie/ms/enums/InGameDirectionEventType.class new file mode 100755 index 0000000..9d69bc8 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/InGameDirectionEventType.class differ diff --git a/bin/classes/net/swordie/ms/enums/InstanceTableType.class b/bin/classes/net/swordie/ms/enums/InstanceTableType.class new file mode 100755 index 0000000..b4a28e0 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/InstanceTableType.class differ diff --git a/bin/classes/net/swordie/ms/enums/InvType.class b/bin/classes/net/swordie/ms/enums/InvType.class new file mode 100755 index 0000000..cd4767b Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/InvType.class differ diff --git a/bin/classes/net/swordie/ms/enums/InventoryOperation.class b/bin/classes/net/swordie/ms/enums/InventoryOperation.class new file mode 100755 index 0000000..3493b02 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/InventoryOperation.class differ diff --git a/bin/classes/net/swordie/ms/enums/ItemGrade$1.class b/bin/classes/net/swordie/ms/enums/ItemGrade$1.class new file mode 100755 index 0000000..cf4ecad Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ItemGrade$1.class differ diff --git a/bin/classes/net/swordie/ms/enums/ItemGrade.class b/bin/classes/net/swordie/ms/enums/ItemGrade.class new file mode 100755 index 0000000..c2b576d Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ItemGrade.class differ diff --git a/bin/classes/net/swordie/ms/enums/ItemJob.class b/bin/classes/net/swordie/ms/enums/ItemJob.class new file mode 100755 index 0000000..281ed10 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ItemJob.class differ diff --git a/bin/classes/net/swordie/ms/enums/ItemOptionType.class b/bin/classes/net/swordie/ms/enums/ItemOptionType.class new file mode 100755 index 0000000..90e972c Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ItemOptionType.class differ diff --git a/bin/classes/net/swordie/ms/enums/LeaveType.class b/bin/classes/net/swordie/ms/enums/LeaveType.class new file mode 100755 index 0000000..1151fd9 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/LeaveType.class differ diff --git a/bin/classes/net/swordie/ms/enums/LegionType.class b/bin/classes/net/swordie/ms/enums/LegionType.class new file mode 100755 index 0000000..aff35bd Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/LegionType.class differ diff --git a/bin/classes/net/swordie/ms/enums/LinkSkillResult.class b/bin/classes/net/swordie/ms/enums/LinkSkillResult.class new file mode 100755 index 0000000..162a48f Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/LinkSkillResult.class differ diff --git a/bin/classes/net/swordie/ms/enums/LinkedSkillResultType.class b/bin/classes/net/swordie/ms/enums/LinkedSkillResultType.class new file mode 100755 index 0000000..bb87ba4 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/LinkedSkillResultType.class differ diff --git a/bin/classes/net/swordie/ms/enums/LoginState.class b/bin/classes/net/swordie/ms/enums/LoginState.class new file mode 100755 index 0000000..82941f0 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/LoginState.class differ diff --git a/bin/classes/net/swordie/ms/enums/LoginType.class b/bin/classes/net/swordie/ms/enums/LoginType.class new file mode 100755 index 0000000..2f14d1c Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/LoginType.class differ diff --git a/bin/classes/net/swordie/ms/enums/MakingSkillResult.class b/bin/classes/net/swordie/ms/enums/MakingSkillResult.class new file mode 100755 index 0000000..6ec7386 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MakingSkillResult.class differ diff --git a/bin/classes/net/swordie/ms/enums/MapTransferType.class b/bin/classes/net/swordie/ms/enums/MapTransferType.class new file mode 100755 index 0000000..ed91237 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MapTransferType.class differ diff --git a/bin/classes/net/swordie/ms/enums/MatrixUpdateRequest.class b/bin/classes/net/swordie/ms/enums/MatrixUpdateRequest.class new file mode 100755 index 0000000..5c83b9e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MatrixUpdateRequest.class differ diff --git a/bin/classes/net/swordie/ms/enums/MedalReissueResultType.class b/bin/classes/net/swordie/ms/enums/MedalReissueResultType.class new file mode 100755 index 0000000..99543cc Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MedalReissueResultType.class differ diff --git a/bin/classes/net/swordie/ms/enums/MessageType.class b/bin/classes/net/swordie/ms/enums/MessageType.class new file mode 100755 index 0000000..1f7383c Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MessageType.class differ diff --git a/bin/classes/net/swordie/ms/enums/MiniRoomType.class b/bin/classes/net/swordie/ms/enums/MiniRoomType.class new file mode 100755 index 0000000..7a67c3d Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MiniRoomType.class differ diff --git a/bin/classes/net/swordie/ms/enums/MobCastingBarSkillType.class b/bin/classes/net/swordie/ms/enums/MobCastingBarSkillType.class new file mode 100755 index 0000000..7836eae Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MobCastingBarSkillType.class differ diff --git a/bin/classes/net/swordie/ms/enums/MonsterCollectionResultType.class b/bin/classes/net/swordie/ms/enums/MonsterCollectionResultType.class new file mode 100755 index 0000000..ddaa955 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MonsterCollectionResultType.class differ diff --git a/bin/classes/net/swordie/ms/enums/MoveAbility.class b/bin/classes/net/swordie/ms/enums/MoveAbility.class new file mode 100755 index 0000000..2e5a770 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/MoveAbility.class differ diff --git a/bin/classes/net/swordie/ms/enums/ObtacleAtomCreateType.class b/bin/classes/net/swordie/ms/enums/ObtacleAtomCreateType.class new file mode 100755 index 0000000..2c74f3c Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ObtacleAtomCreateType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ObtacleAtomEnum.class b/bin/classes/net/swordie/ms/enums/ObtacleAtomEnum.class new file mode 100755 index 0000000..da0b5fd Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ObtacleAtomEnum.class differ diff --git a/bin/classes/net/swordie/ms/enums/PetRemoveReason.class b/bin/classes/net/swordie/ms/enums/PetRemoveReason.class new file mode 100755 index 0000000..f5901a1 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/PetRemoveReason.class differ diff --git a/bin/classes/net/swordie/ms/enums/PicStatus.class b/bin/classes/net/swordie/ms/enums/PicStatus.class new file mode 100755 index 0000000..532d960 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/PicStatus.class differ diff --git a/bin/classes/net/swordie/ms/enums/PopularityResultType.class b/bin/classes/net/swordie/ms/enums/PopularityResultType.class new file mode 100755 index 0000000..371013c Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/PopularityResultType.class differ diff --git a/bin/classes/net/swordie/ms/enums/PotentialResetType.class b/bin/classes/net/swordie/ms/enums/PotentialResetType.class new file mode 100755 index 0000000..8b10e0c Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/PotentialResetType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ProgressMessageColourType.class b/bin/classes/net/swordie/ms/enums/ProgressMessageColourType.class new file mode 100755 index 0000000..d442ca3 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ProgressMessageColourType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ProgressMessageFontType.class b/bin/classes/net/swordie/ms/enums/ProgressMessageFontType.class new file mode 100755 index 0000000..52c5c2e Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ProgressMessageFontType.class differ diff --git a/bin/classes/net/swordie/ms/enums/QuestStatus.class b/bin/classes/net/swordie/ms/enums/QuestStatus.class new file mode 100755 index 0000000..2f249d8 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/QuestStatus.class differ diff --git a/bin/classes/net/swordie/ms/enums/QuestType.class b/bin/classes/net/swordie/ms/enums/QuestType.class new file mode 100755 index 0000000..c06b196 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/QuestType.class differ diff --git a/bin/classes/net/swordie/ms/enums/QuickMoveType.class b/bin/classes/net/swordie/ms/enums/QuickMoveType.class new file mode 100755 index 0000000..8678aec Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/QuickMoveType.class differ diff --git a/bin/classes/net/swordie/ms/enums/RandomMissionType.class b/bin/classes/net/swordie/ms/enums/RandomMissionType.class new file mode 100755 index 0000000..7aa87e9 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/RandomMissionType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ReviveType.class b/bin/classes/net/swordie/ms/enums/ReviveType.class new file mode 100755 index 0000000..e7f54b5 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ReviveType.class differ diff --git a/bin/classes/net/swordie/ms/enums/RoomLeaveType.class b/bin/classes/net/swordie/ms/enums/RoomLeaveType.class new file mode 100755 index 0000000..091b1db Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/RoomLeaveType.class differ diff --git a/bin/classes/net/swordie/ms/enums/RuneType.class b/bin/classes/net/swordie/ms/enums/RuneType.class new file mode 100755 index 0000000..36388b0 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/RuneType.class differ diff --git a/bin/classes/net/swordie/ms/enums/SceneType.class b/bin/classes/net/swordie/ms/enums/SceneType.class new file mode 100755 index 0000000..1f8d8ff Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/SceneType.class differ diff --git a/bin/classes/net/swordie/ms/enums/ScrollStat$1.class b/bin/classes/net/swordie/ms/enums/ScrollStat$1.class new file mode 100755 index 0000000..6bb2549 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ScrollStat$1.class differ diff --git a/bin/classes/net/swordie/ms/enums/ScrollStat.class b/bin/classes/net/swordie/ms/enums/ScrollStat.class new file mode 100755 index 0000000..8d2dc77 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/ScrollStat.class differ diff --git a/bin/classes/net/swordie/ms/enums/SendTypeFromClient.class b/bin/classes/net/swordie/ms/enums/SendTypeFromClient.class new file mode 100755 index 0000000..dd2c6ce Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/SendTypeFromClient.class differ diff --git a/bin/classes/net/swordie/ms/enums/SkillType.class b/bin/classes/net/swordie/ms/enums/SkillType.class new file mode 100755 index 0000000..bc82df4 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/SkillType.class differ diff --git a/bin/classes/net/swordie/ms/enums/SoulType.class b/bin/classes/net/swordie/ms/enums/SoulType.class new file mode 100755 index 0000000..e506146 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/SoulType.class differ diff --git a/bin/classes/net/swordie/ms/enums/SpecStat.class b/bin/classes/net/swordie/ms/enums/SpecStat.class new file mode 100755 index 0000000..09c536f Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/SpecStat.class differ diff --git a/bin/classes/net/swordie/ms/enums/SpellTraceScrollType.class b/bin/classes/net/swordie/ms/enums/SpellTraceScrollType.class new file mode 100755 index 0000000..701e7b6 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/SpellTraceScrollType.class differ diff --git a/bin/classes/net/swordie/ms/enums/Stat.class b/bin/classes/net/swordie/ms/enums/Stat.class new file mode 100755 index 0000000..8c99b11 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/Stat.class differ diff --git a/bin/classes/net/swordie/ms/enums/StealMemoryType.class b/bin/classes/net/swordie/ms/enums/StealMemoryType.class new file mode 100755 index 0000000..67b4a77 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/StealMemoryType.class differ diff --git a/bin/classes/net/swordie/ms/enums/StylishKillType.class b/bin/classes/net/swordie/ms/enums/StylishKillType.class new file mode 100755 index 0000000..8b29817 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/StylishKillType.class differ diff --git a/bin/classes/net/swordie/ms/enums/TSIndex$1.class b/bin/classes/net/swordie/ms/enums/TSIndex$1.class new file mode 100755 index 0000000..5d9b498 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/TSIndex$1.class differ diff --git a/bin/classes/net/swordie/ms/enums/TSIndex.class b/bin/classes/net/swordie/ms/enums/TSIndex.class new file mode 100755 index 0000000..f337bdf Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/TSIndex.class differ diff --git a/bin/classes/net/swordie/ms/enums/TabIndex.class b/bin/classes/net/swordie/ms/enums/TabIndex.class new file mode 100755 index 0000000..167d55f Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/TabIndex.class differ diff --git a/bin/classes/net/swordie/ms/enums/TextEffectType.class b/bin/classes/net/swordie/ms/enums/TextEffectType.class new file mode 100755 index 0000000..3f6fe09 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/TextEffectType.class differ diff --git a/bin/classes/net/swordie/ms/enums/UIType.class b/bin/classes/net/swordie/ms/enums/UIType.class new file mode 100755 index 0000000..1512310 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/UIType.class differ diff --git a/bin/classes/net/swordie/ms/enums/UiScript.class b/bin/classes/net/swordie/ms/enums/UiScript.class new file mode 100755 index 0000000..fa897fa Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/UiScript.class differ diff --git a/bin/classes/net/swordie/ms/enums/UserEffectType.class b/bin/classes/net/swordie/ms/enums/UserEffectType.class new file mode 100755 index 0000000..9244629 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/UserEffectType.class differ diff --git a/bin/classes/net/swordie/ms/enums/WeaponType.class b/bin/classes/net/swordie/ms/enums/WeaponType.class new file mode 100755 index 0000000..2fd57dc Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/WeaponType.class differ diff --git a/bin/classes/net/swordie/ms/enums/WeatherEffNoticeType.class b/bin/classes/net/swordie/ms/enums/WeatherEffNoticeType.class new file mode 100755 index 0000000..76a1435 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/WeatherEffNoticeType.class differ diff --git a/bin/classes/net/swordie/ms/enums/WorldId.class b/bin/classes/net/swordie/ms/enums/WorldId.class new file mode 100755 index 0000000..11c3b36 Binary files /dev/null and b/bin/classes/net/swordie/ms/enums/WorldId.class differ diff --git a/bin/classes/net/swordie/ms/handlers/ApiRequestHandler.class b/bin/classes/net/swordie/ms/handlers/ApiRequestHandler.class new file mode 100755 index 0000000..4214f95 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/ApiRequestHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/CashShopHandler$1.class b/bin/classes/net/swordie/ms/handlers/CashShopHandler$1.class new file mode 100755 index 0000000..af626ee Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/CashShopHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/CashShopHandler.class b/bin/classes/net/swordie/ms/handlers/CashShopHandler.class new file mode 100755 index 0000000..6818795 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/CashShopHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor$LogOnExceptionCallable.class b/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor$LogOnExceptionCallable.class new file mode 100755 index 0000000..4a35ef9 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor$LogOnExceptionCallable.class differ diff --git a/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor$LogOnExceptionRunnable.class b/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor$LogOnExceptionRunnable.class new file mode 100755 index 0000000..c2bc1e7 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor$LogOnExceptionRunnable.class differ diff --git a/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor.class b/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor.class new file mode 100755 index 0000000..60796fc Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/CatchingScheduledThreadPoolExecutor.class differ diff --git a/bin/classes/net/swordie/ms/handlers/ClientSocket.class b/bin/classes/net/swordie/ms/handlers/ClientSocket.class new file mode 100755 index 0000000..cef922f Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/ClientSocket.class differ diff --git a/bin/classes/net/swordie/ms/handlers/EventManager.class b/bin/classes/net/swordie/ms/handlers/EventManager.class new file mode 100755 index 0000000..a469995 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/EventManager.class differ diff --git a/bin/classes/net/swordie/ms/handlers/FieldHandler.class b/bin/classes/net/swordie/ms/handlers/FieldHandler.class new file mode 100755 index 0000000..6da18f2 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/FieldHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/Handler.class b/bin/classes/net/swordie/ms/handlers/Handler.class new file mode 100755 index 0000000..20edad2 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/Handler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/LoginHandler.class b/bin/classes/net/swordie/ms/handlers/LoginHandler.class new file mode 100755 index 0000000..74cf700 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/LoginHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/PsychicLock.class b/bin/classes/net/swordie/ms/handlers/PsychicLock.class new file mode 100755 index 0000000..83736bb Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/PsychicLock.class differ diff --git a/bin/classes/net/swordie/ms/handlers/header/InHeader.class b/bin/classes/net/swordie/ms/handlers/header/InHeader.class new file mode 100755 index 0000000..a494b43 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/header/InHeader.class differ diff --git a/bin/classes/net/swordie/ms/handlers/header/OutHeader.class b/bin/classes/net/swordie/ms/handlers/header/OutHeader.class new file mode 100755 index 0000000..b9a2fbc Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/header/OutHeader.class differ diff --git a/bin/classes/net/swordie/ms/handlers/item/InventoryHandler.class b/bin/classes/net/swordie/ms/handlers/item/InventoryHandler.class new file mode 100755 index 0000000..43283f5 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/item/InventoryHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/item/ItemHandler$1.class b/bin/classes/net/swordie/ms/handlers/item/ItemHandler$1.class new file mode 100755 index 0000000..4e83455 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/item/ItemHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/item/ItemHandler$2.class b/bin/classes/net/swordie/ms/handlers/item/ItemHandler$2.class new file mode 100755 index 0000000..5eb2c24 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/item/ItemHandler$2.class differ diff --git a/bin/classes/net/swordie/ms/handlers/item/ItemHandler.class b/bin/classes/net/swordie/ms/handlers/item/ItemHandler.class new file mode 100755 index 0000000..2dc5ff2 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/item/ItemHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/item/ItemUpgradeHandler.class b/bin/classes/net/swordie/ms/handlers/item/ItemUpgradeHandler.class new file mode 100755 index 0000000..2816f82 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/item/ItemUpgradeHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/AffectedAreaHandler.class b/bin/classes/net/swordie/ms/handlers/life/AffectedAreaHandler.class new file mode 100755 index 0000000..b8384e6 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/AffectedAreaHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/AndroidHandler.class b/bin/classes/net/swordie/ms/handlers/life/AndroidHandler.class new file mode 100755 index 0000000..c043b7d Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/AndroidHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/DragonHandler.class b/bin/classes/net/swordie/ms/handlers/life/DragonHandler.class new file mode 100755 index 0000000..54a0d1d Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/DragonHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/DropHandler.class b/bin/classes/net/swordie/ms/handlers/life/DropHandler.class new file mode 100755 index 0000000..b4d505f Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/DropHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/FamiliarHandler.class b/bin/classes/net/swordie/ms/handlers/life/FamiliarHandler.class new file mode 100755 index 0000000..e6f6572 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/FamiliarHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/MobHandler.class b/bin/classes/net/swordie/ms/handlers/life/MobHandler.class new file mode 100755 index 0000000..08094fd Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/MobHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/NpcHandler$1.class b/bin/classes/net/swordie/ms/handlers/life/NpcHandler$1.class new file mode 100755 index 0000000..5266fc3 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/NpcHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/NpcHandler.class b/bin/classes/net/swordie/ms/handlers/life/NpcHandler.class new file mode 100755 index 0000000..e0352b7 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/NpcHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/PetHandler.class b/bin/classes/net/swordie/ms/handlers/life/PetHandler.class new file mode 100755 index 0000000..e810e61 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/PetHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/ReactorHandler.class b/bin/classes/net/swordie/ms/handlers/life/ReactorHandler.class new file mode 100755 index 0000000..8d00c18 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/ReactorHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/life/SummonedHandler.class b/bin/classes/net/swordie/ms/handlers/life/SummonedHandler.class new file mode 100755 index 0000000..dffa70d Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/life/SummonedHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/script/QuestHandler$1.class b/bin/classes/net/swordie/ms/handlers/script/QuestHandler$1.class new file mode 100755 index 0000000..1c557ce Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/script/QuestHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/script/QuestHandler.class b/bin/classes/net/swordie/ms/handlers/script/QuestHandler.class new file mode 100755 index 0000000..f5be53c Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/script/QuestHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/script/ScriptHandler$1.class b/bin/classes/net/swordie/ms/handlers/script/ScriptHandler$1.class new file mode 100755 index 0000000..67531dc Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/script/ScriptHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/script/ScriptHandler.class b/bin/classes/net/swordie/ms/handlers/script/ScriptHandler.class new file mode 100755 index 0000000..9bb670a Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/script/ScriptHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/AuctionHandler$1.class b/bin/classes/net/swordie/ms/handlers/social/AuctionHandler$1.class new file mode 100755 index 0000000..bc2b872 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/AuctionHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/AuctionHandler.class b/bin/classes/net/swordie/ms/handlers/social/AuctionHandler.class new file mode 100755 index 0000000..277f443 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/AuctionHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/BossMatchingHandler.class b/bin/classes/net/swordie/ms/handlers/social/BossMatchingHandler.class new file mode 100755 index 0000000..157e93e Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/BossMatchingHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/ChatHandler.class b/bin/classes/net/swordie/ms/handlers/social/ChatHandler.class new file mode 100755 index 0000000..ef63b5d Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/ChatHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/FriendHandler$1.class b/bin/classes/net/swordie/ms/handlers/social/FriendHandler$1.class new file mode 100755 index 0000000..3831689 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/FriendHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/FriendHandler.class b/bin/classes/net/swordie/ms/handlers/social/FriendHandler.class new file mode 100755 index 0000000..801dc5a Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/FriendHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/GuildHandler$1.class b/bin/classes/net/swordie/ms/handlers/social/GuildHandler$1.class new file mode 100755 index 0000000..a2a2f94 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/GuildHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/GuildHandler.class b/bin/classes/net/swordie/ms/handlers/social/GuildHandler.class new file mode 100755 index 0000000..15a2334 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/GuildHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/PartyHandler$1.class b/bin/classes/net/swordie/ms/handlers/social/PartyHandler$1.class new file mode 100755 index 0000000..bf3397f Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/PartyHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/PartyHandler.class b/bin/classes/net/swordie/ms/handlers/social/PartyHandler.class new file mode 100755 index 0000000..8bc457d Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/PartyHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/RoomHandler$1.class b/bin/classes/net/swordie/ms/handlers/social/RoomHandler$1.class new file mode 100755 index 0000000..46b4d07 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/RoomHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/social/RoomHandler.class b/bin/classes/net/swordie/ms/handlers/social/RoomHandler.class new file mode 100755 index 0000000..8d3907d Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/social/RoomHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/AttackHandler$1.class b/bin/classes/net/swordie/ms/handlers/user/AttackHandler$1.class new file mode 100755 index 0000000..20b0cf5 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/AttackHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/AttackHandler.class b/bin/classes/net/swordie/ms/handlers/user/AttackHandler.class new file mode 100755 index 0000000..2f4a84e Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/AttackHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/JobSkillHandler.class b/bin/classes/net/swordie/ms/handlers/user/JobSkillHandler.class new file mode 100755 index 0000000..85f6cc4 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/JobSkillHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/MacroHandler.class b/bin/classes/net/swordie/ms/handlers/user/MacroHandler.class new file mode 100755 index 0000000..8973c46 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/MacroHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/MigrationHandler$1.class b/bin/classes/net/swordie/ms/handlers/user/MigrationHandler$1.class new file mode 100755 index 0000000..c7295ac Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/MigrationHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/MigrationHandler.class b/bin/classes/net/swordie/ms/handlers/user/MigrationHandler.class new file mode 100755 index 0000000..00abec5 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/MigrationHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/SkillHandler$1.class b/bin/classes/net/swordie/ms/handlers/user/SkillHandler$1.class new file mode 100755 index 0000000..fd9f38d Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/SkillHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/SkillHandler.class b/bin/classes/net/swordie/ms/handlers/user/SkillHandler.class new file mode 100755 index 0000000..bdfe9cc Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/SkillHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/UnionHandler.class b/bin/classes/net/swordie/ms/handlers/user/UnionHandler.class new file mode 100755 index 0000000..e6bb2c4 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/UnionHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/UserHandler$1.class b/bin/classes/net/swordie/ms/handlers/user/UserHandler$1.class new file mode 100755 index 0000000..8594f1c Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/UserHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/UserHandler.class b/bin/classes/net/swordie/ms/handlers/user/UserHandler.class new file mode 100755 index 0000000..65e12ce Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/UserHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/UserStatHandler$1.class b/bin/classes/net/swordie/ms/handlers/user/UserStatHandler$1.class new file mode 100755 index 0000000..60d3390 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/UserStatHandler$1.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/UserStatHandler.class b/bin/classes/net/swordie/ms/handlers/user/UserStatHandler.class new file mode 100755 index 0000000..73cd8d5 Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/UserStatHandler.class differ diff --git a/bin/classes/net/swordie/ms/handlers/user/ZeroUIHandler.class b/bin/classes/net/swordie/ms/handlers/user/ZeroUIHandler.class new file mode 100755 index 0000000..24b856e Binary files /dev/null and b/bin/classes/net/swordie/ms/handlers/user/ZeroUIHandler.class differ diff --git a/bin/classes/net/swordie/ms/life/AffectedArea.class b/bin/classes/net/swordie/ms/life/AffectedArea.class new file mode 100755 index 0000000..02bd027 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/AffectedArea.class differ diff --git a/bin/classes/net/swordie/ms/life/Android.class b/bin/classes/net/swordie/ms/life/Android.class new file mode 100755 index 0000000..91c23b8 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/Android.class differ diff --git a/bin/classes/net/swordie/ms/life/DeathType.class b/bin/classes/net/swordie/ms/life/DeathType.class new file mode 100755 index 0000000..ce6bea1 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/DeathType.class differ diff --git a/bin/classes/net/swordie/ms/life/Dragon.class b/bin/classes/net/swordie/ms/life/Dragon.class new file mode 100755 index 0000000..83480fd Binary files /dev/null and b/bin/classes/net/swordie/ms/life/Dragon.class differ diff --git a/bin/classes/net/swordie/ms/life/Familiar.class b/bin/classes/net/swordie/ms/life/Familiar.class new file mode 100755 index 0000000..3ea52ca Binary files /dev/null and b/bin/classes/net/swordie/ms/life/Familiar.class differ diff --git a/bin/classes/net/swordie/ms/life/FieldAttackObj.class b/bin/classes/net/swordie/ms/life/FieldAttackObj.class new file mode 100755 index 0000000..3eefa70 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/FieldAttackObj.class differ diff --git a/bin/classes/net/swordie/ms/life/Life.class b/bin/classes/net/swordie/ms/life/Life.class new file mode 100755 index 0000000..531e142 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/Life.class differ diff --git a/bin/classes/net/swordie/ms/life/Reactor.class b/bin/classes/net/swordie/ms/life/Reactor.class new file mode 100755 index 0000000..0ad164f Binary files /dev/null and b/bin/classes/net/swordie/ms/life/Reactor.class differ diff --git a/bin/classes/net/swordie/ms/life/Summon.class b/bin/classes/net/swordie/ms/life/Summon.class new file mode 100755 index 0000000..69a9466 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/Summon.class differ diff --git a/bin/classes/net/swordie/ms/life/Wreckage.class b/bin/classes/net/swordie/ms/life/Wreckage.class new file mode 100755 index 0000000..6338418 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/Wreckage.class differ diff --git a/bin/classes/net/swordie/ms/life/drop/Drop.class b/bin/classes/net/swordie/ms/life/drop/Drop.class new file mode 100755 index 0000000..79c88a0 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/drop/Drop.class differ diff --git a/bin/classes/net/swordie/ms/life/drop/DropInfo.class b/bin/classes/net/swordie/ms/life/drop/DropInfo.class new file mode 100755 index 0000000..e089845 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/drop/DropInfo.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/EscortDest.class b/bin/classes/net/swordie/ms/life/mob/EscortDest.class new file mode 100755 index 0000000..4bc6d92 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/EscortDest.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/ForcedMobStat.class b/bin/classes/net/swordie/ms/life/mob/ForcedMobStat.class new file mode 100755 index 0000000..67dc3c8 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/ForcedMobStat.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/Mob.class b/bin/classes/net/swordie/ms/life/mob/Mob.class new file mode 100755 index 0000000..d2179b0 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/Mob.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/MobStat$1.class b/bin/classes/net/swordie/ms/life/mob/MobStat$1.class new file mode 100755 index 0000000..c76dd51 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/MobStat$1.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/MobStat.class b/bin/classes/net/swordie/ms/life/mob/MobStat.class new file mode 100755 index 0000000..556b1c2 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/MobStat.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/MobTemporaryStat.class b/bin/classes/net/swordie/ms/life/mob/MobTemporaryStat.class new file mode 100755 index 0000000..380a198 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/MobTemporaryStat.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/Demian.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/Demian.class new file mode 100755 index 0000000..a9c0b93 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/Demian.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/DemianStigma.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/DemianStigma.class new file mode 100755 index 0000000..fe4e819 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/DemianStigma.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/DemianStigmaIncinerateObject.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/DemianStigmaIncinerateObject.class new file mode 100755 index 0000000..edb80a4 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/DemianStigmaIncinerateObject.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/StigmaDeliveryType.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/StigmaDeliveryType.class new file mode 100755 index 0000000..bce7945 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/stigma/StigmaDeliveryType.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSword.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSword.class new file mode 100755 index 0000000..240c37d Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSword.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordNode.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordNode.class new file mode 100755 index 0000000..ec02bd9 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordNode.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordNodeType.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordNodeType.class new file mode 100755 index 0000000..3932021 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordNodeType.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath$1.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath$1.class new file mode 100755 index 0000000..9519149 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath$1.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath$2.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath$2.class new file mode 100755 index 0000000..34a2876 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath$2.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath.class new file mode 100755 index 0000000..4168496 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPath.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPathIdx.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPathIdx.class new file mode 100755 index 0000000..8d11138 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordPathIdx.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordType.class b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordType.class new file mode 100755 index 0000000..9a9237c Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/boss/demian/sword/DemianFlyingSwordType.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/BurnedInfo.class b/bin/classes/net/swordie/ms/life/mob/skill/BurnedInfo.class new file mode 100755 index 0000000..cd65247 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/BurnedInfo.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/MobSkill$1.class b/bin/classes/net/swordie/ms/life/mob/skill/MobSkill$1.class new file mode 100755 index 0000000..3cf0637 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/MobSkill$1.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/MobSkill$2.class b/bin/classes/net/swordie/ms/life/mob/skill/MobSkill$2.class new file mode 100755 index 0000000..a3d6407 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/MobSkill$2.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/MobSkill.class b/bin/classes/net/swordie/ms/life/mob/skill/MobSkill.class new file mode 100755 index 0000000..94b5d2a Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/MobSkill.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/MobSkillID$1.class b/bin/classes/net/swordie/ms/life/mob/skill/MobSkillID$1.class new file mode 100755 index 0000000..8d7d61c Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/MobSkillID$1.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/MobSkillID.class b/bin/classes/net/swordie/ms/life/mob/skill/MobSkillID.class new file mode 100755 index 0000000..3d5dd33 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/MobSkillID.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/MobSkillStat.class b/bin/classes/net/swordie/ms/life/mob/skill/MobSkillStat.class new file mode 100755 index 0000000..240e46d Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/MobSkillStat.class differ diff --git a/bin/classes/net/swordie/ms/life/mob/skill/ShootingMoveStat.class b/bin/classes/net/swordie/ms/life/mob/skill/ShootingMoveStat.class new file mode 100755 index 0000000..2094309 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/mob/skill/ShootingMoveStat.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovePathAttribute.class b/bin/classes/net/swordie/ms/life/movement/MovePathAttribute.class new file mode 100755 index 0000000..6c3be0e Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovePathAttribute.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/Movement.class b/bin/classes/net/swordie/ms/life/movement/Movement.class new file mode 100755 index 0000000..3ee579d Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/Movement.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementAction.class b/bin/classes/net/swordie/ms/life/movement/MovementAction.class new file mode 100755 index 0000000..d97fd69 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementAction.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementAngle.class b/bin/classes/net/swordie/ms/life/movement/MovementAngle.class new file mode 100755 index 0000000..a3f81fd Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementAngle.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementBase.class b/bin/classes/net/swordie/ms/life/movement/MovementBase.class new file mode 100755 index 0000000..f46b329 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementBase.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementFlyingBlock.class b/bin/classes/net/swordie/ms/life/movement/MovementFlyingBlock.class new file mode 100755 index 0000000..65461de Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementFlyingBlock.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementInfo.class b/bin/classes/net/swordie/ms/life/movement/MovementInfo.class new file mode 100755 index 0000000..4eba062 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementInfo.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementJump.class b/bin/classes/net/swordie/ms/life/movement/MovementJump.class new file mode 100755 index 0000000..ac7f94e Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementJump.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementNew1.class b/bin/classes/net/swordie/ms/life/movement/MovementNew1.class new file mode 100755 index 0000000..13fcf8b Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementNew1.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementNormal.class b/bin/classes/net/swordie/ms/life/movement/MovementNormal.class new file mode 100755 index 0000000..0b0259b Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementNormal.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementOffsetX.class b/bin/classes/net/swordie/ms/life/movement/MovementOffsetX.class new file mode 100755 index 0000000..9f355f9 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementOffsetX.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementStartFallDown.class b/bin/classes/net/swordie/ms/life/movement/MovementStartFallDown.class new file mode 100755 index 0000000..d999c45 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementStartFallDown.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementStatChange.class b/bin/classes/net/swordie/ms/life/movement/MovementStatChange.class new file mode 100755 index 0000000..c7fee67 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementStatChange.class differ diff --git a/bin/classes/net/swordie/ms/life/movement/MovementTeleport.class b/bin/classes/net/swordie/ms/life/movement/MovementTeleport.class new file mode 100755 index 0000000..c4faccb Binary files /dev/null and b/bin/classes/net/swordie/ms/life/movement/MovementTeleport.class differ diff --git a/bin/classes/net/swordie/ms/life/npc/Npc.class b/bin/classes/net/swordie/ms/life/npc/Npc.class new file mode 100755 index 0000000..b1ba3c9 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/npc/Npc.class differ diff --git a/bin/classes/net/swordie/ms/life/npc/NpcMessageType$ResponseType.class b/bin/classes/net/swordie/ms/life/npc/NpcMessageType$ResponseType.class new file mode 100755 index 0000000..9e3e9c1 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/npc/NpcMessageType$ResponseType.class differ diff --git a/bin/classes/net/swordie/ms/life/npc/NpcMessageType.class b/bin/classes/net/swordie/ms/life/npc/NpcMessageType.class new file mode 100755 index 0000000..c508c8d Binary files /dev/null and b/bin/classes/net/swordie/ms/life/npc/NpcMessageType.class differ diff --git a/bin/classes/net/swordie/ms/life/npc/NpcScriptInfo$Param.class b/bin/classes/net/swordie/ms/life/npc/NpcScriptInfo$Param.class new file mode 100755 index 0000000..537b540 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/npc/NpcScriptInfo$Param.class differ diff --git a/bin/classes/net/swordie/ms/life/npc/NpcScriptInfo.class b/bin/classes/net/swordie/ms/life/npc/NpcScriptInfo.class new file mode 100755 index 0000000..e074680 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/npc/NpcScriptInfo.class differ diff --git a/bin/classes/net/swordie/ms/life/npc/ScreenInfo.class b/bin/classes/net/swordie/ms/life/npc/ScreenInfo.class new file mode 100755 index 0000000..e2df261 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/npc/ScreenInfo.class differ diff --git a/bin/classes/net/swordie/ms/life/pet/Pet.class b/bin/classes/net/swordie/ms/life/pet/Pet.class new file mode 100755 index 0000000..eba9353 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/pet/Pet.class differ diff --git a/bin/classes/net/swordie/ms/life/pet/PetSkill.class b/bin/classes/net/swordie/ms/life/pet/PetSkill.class new file mode 100755 index 0000000..f6dabb0 Binary files /dev/null and b/bin/classes/net/swordie/ms/life/pet/PetSkill.class differ diff --git a/bin/classes/net/swordie/ms/loaders/DatSerializable.class b/bin/classes/net/swordie/ms/loaders/DatSerializable.class new file mode 100755 index 0000000..2dce931 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/DatSerializable.class differ diff --git a/bin/classes/net/swordie/ms/loaders/DataClasses.class b/bin/classes/net/swordie/ms/loaders/DataClasses.class new file mode 100755 index 0000000..39d752d Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/DataClasses.class differ diff --git a/bin/classes/net/swordie/ms/loaders/DressingRoom$DressingRoomType.class b/bin/classes/net/swordie/ms/loaders/DressingRoom$DressingRoomType.class new file mode 100755 index 0000000..9f4bd26 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/DressingRoom$DressingRoomType.class differ diff --git a/bin/classes/net/swordie/ms/loaders/DressingRoom.class b/bin/classes/net/swordie/ms/loaders/DressingRoom.class new file mode 100755 index 0000000..d108ca1 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/DressingRoom.class differ diff --git a/bin/classes/net/swordie/ms/loaders/DropData.class b/bin/classes/net/swordie/ms/loaders/DropData.class new file mode 100755 index 0000000..d109767 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/DropData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/EffectData.class b/bin/classes/net/swordie/ms/loaders/EffectData.class new file mode 100755 index 0000000..43b82b3 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/EffectData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/EtcData.class b/bin/classes/net/swordie/ms/loaders/EtcData.class new file mode 100755 index 0000000..7211af0 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/EtcData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/FieldData.class b/bin/classes/net/swordie/ms/loaders/FieldData.class new file mode 100755 index 0000000..a583590 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/FieldData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/ItemData.class b/bin/classes/net/swordie/ms/loaders/ItemData.class new file mode 100755 index 0000000..141a548 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/ItemData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/MobData.class b/bin/classes/net/swordie/ms/loaders/MobData.class new file mode 100755 index 0000000..ec10833 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/MobData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/MonsterCollectionData.class b/bin/classes/net/swordie/ms/loaders/MonsterCollectionData.class new file mode 100755 index 0000000..56bed93 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/MonsterCollectionData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/NpcData.class b/bin/classes/net/swordie/ms/loaders/NpcData.class new file mode 100755 index 0000000..39770c2 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/NpcData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/QuestData.class b/bin/classes/net/swordie/ms/loaders/QuestData.class new file mode 100755 index 0000000..c70515a Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/QuestData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/ReactorData.class b/bin/classes/net/swordie/ms/loaders/ReactorData.class new file mode 100755 index 0000000..a66b0f2 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/ReactorData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/SkillData.class b/bin/classes/net/swordie/ms/loaders/SkillData.class new file mode 100755 index 0000000..a9a5c2f Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/SkillData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/StringData.class b/bin/classes/net/swordie/ms/loaders/StringData.class new file mode 100755 index 0000000..d163766 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/StringData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/StyleRoom$StyleRoomType.class b/bin/classes/net/swordie/ms/loaders/StyleRoom$StyleRoomType.class new file mode 100755 index 0000000..ae651e7 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/StyleRoom$StyleRoomType.class differ diff --git a/bin/classes/net/swordie/ms/loaders/StyleRoom.class b/bin/classes/net/swordie/ms/loaders/StyleRoom.class new file mode 100755 index 0000000..9c770bb Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/StyleRoom.class differ diff --git a/bin/classes/net/swordie/ms/loaders/VCoreData.class b/bin/classes/net/swordie/ms/loaders/VCoreData.class new file mode 100755 index 0000000..0da8624 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/VCoreData.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/AndroidInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/AndroidInfo.class new file mode 100755 index 0000000..fc3ce96 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/AndroidInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/Cosmetic.class b/bin/classes/net/swordie/ms/loaders/containerclasses/Cosmetic.class new file mode 100755 index 0000000..b74fac1 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/Cosmetic.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/EquipDrop.class b/bin/classes/net/swordie/ms/loaders/containerclasses/EquipDrop.class new file mode 100755 index 0000000..daef1e0 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/EquipDrop.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/ItemInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/ItemInfo.class new file mode 100755 index 0000000..775b2d9 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/ItemInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/ItemRewardInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/ItemRewardInfo.class new file mode 100755 index 0000000..468c8b4 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/ItemRewardInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/ItemSet.class b/bin/classes/net/swordie/ms/loaders/containerclasses/ItemSet.class new file mode 100755 index 0000000..3f149b3 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/ItemSet.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/MakingSkillRecipe$TargetElem.class b/bin/classes/net/swordie/ms/loaders/containerclasses/MakingSkillRecipe$TargetElem.class new file mode 100755 index 0000000..2259196 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/MakingSkillRecipe$TargetElem.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/MakingSkillRecipe.class b/bin/classes/net/swordie/ms/loaders/containerclasses/MakingSkillRecipe.class new file mode 100755 index 0000000..f5658b3 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/MakingSkillRecipe.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/MobSkillInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/MobSkillInfo.class new file mode 100755 index 0000000..a5532dd Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/MobSkillInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionGroupRewardInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionGroupRewardInfo.class new file mode 100755 index 0000000..cd18a31 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionGroupRewardInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionMobInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionMobInfo.class new file mode 100755 index 0000000..7d6ecc9 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionMobInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionSessionRewardInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionSessionRewardInfo.class new file mode 100755 index 0000000..d51a9f7 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/MonsterCollectionSessionRewardInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/PetInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/PetInfo.class new file mode 100755 index 0000000..8568e5f Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/PetInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/QuestInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/QuestInfo.class new file mode 100755 index 0000000..373a70b Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/QuestInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/ReactorInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/ReactorInfo.class new file mode 100755 index 0000000..7dd8f8e Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/ReactorInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/SkillStringInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/SkillStringInfo.class new file mode 100755 index 0000000..556496c Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/SkillStringInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/VCoreInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/VCoreInfo.class new file mode 100755 index 0000000..fff68e4 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/VCoreInfo.class differ diff --git a/bin/classes/net/swordie/ms/loaders/containerclasses/VNodeInfo.class b/bin/classes/net/swordie/ms/loaders/containerclasses/VNodeInfo.class new file mode 100755 index 0000000..4a40dc5 Binary files /dev/null and b/bin/classes/net/swordie/ms/loaders/containerclasses/VNodeInfo.class differ diff --git a/bin/classes/net/swordie/ms/scripts/FieldTransferInfo.class b/bin/classes/net/swordie/ms/scripts/FieldTransferInfo.class new file mode 100755 index 0000000..d991aae Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/FieldTransferInfo.class differ diff --git a/bin/classes/net/swordie/ms/scripts/ScriptInfo.class b/bin/classes/net/swordie/ms/scripts/ScriptInfo.class new file mode 100755 index 0000000..3115308 Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/ScriptInfo.class differ diff --git a/bin/classes/net/swordie/ms/scripts/ScriptManager.class b/bin/classes/net/swordie/ms/scripts/ScriptManager.class new file mode 100755 index 0000000..58a2e0c Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/ScriptManager.class differ diff --git a/bin/classes/net/swordie/ms/scripts/ScriptManagerImpl$1.class b/bin/classes/net/swordie/ms/scripts/ScriptManagerImpl$1.class new file mode 100755 index 0000000..cd6ec5b Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/ScriptManagerImpl$1.class differ diff --git a/bin/classes/net/swordie/ms/scripts/ScriptManagerImpl.class b/bin/classes/net/swordie/ms/scripts/ScriptManagerImpl.class new file mode 100755 index 0000000..902a462 Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/ScriptManagerImpl.class differ diff --git a/bin/classes/net/swordie/ms/scripts/ScriptMemory.class b/bin/classes/net/swordie/ms/scripts/ScriptMemory.class new file mode 100755 index 0000000..4b49012 Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/ScriptMemory.class differ diff --git a/bin/classes/net/swordie/ms/scripts/ScriptType.class b/bin/classes/net/swordie/ms/scripts/ScriptType.class new file mode 100755 index 0000000..db8a5df Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/ScriptType.class differ diff --git a/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptMaker$1.class b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptMaker$1.class new file mode 100755 index 0000000..583952e Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptMaker$1.class differ diff --git a/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptMaker.class b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptMaker.class new file mode 100755 index 0000000..a2e7eef Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptMaker.class differ diff --git a/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptPacketParser$1.class b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptPacketParser$1.class new file mode 100755 index 0000000..664c5ba Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptPacketParser$1.class differ diff --git a/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptPacketParser.class b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptPacketParser.class new file mode 100755 index 0000000..412d27b Binary files /dev/null and b/bin/classes/net/swordie/ms/scripts/scriptMaker/ScriptPacketParser.class differ diff --git a/bin/classes/net/swordie/ms/util/AntiMacro$AntiMacroResultType.class b/bin/classes/net/swordie/ms/util/AntiMacro$AntiMacroResultType.class new file mode 100755 index 0000000..cb29426 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/AntiMacro$AntiMacroResultType.class differ diff --git a/bin/classes/net/swordie/ms/util/AntiMacro$AntiMacroType.class b/bin/classes/net/swordie/ms/util/AntiMacro$AntiMacroType.class new file mode 100755 index 0000000..2a27bee Binary files /dev/null and b/bin/classes/net/swordie/ms/util/AntiMacro$AntiMacroType.class differ diff --git a/bin/classes/net/swordie/ms/util/AntiMacro.class b/bin/classes/net/swordie/ms/util/AntiMacro.class new file mode 100755 index 0000000..27741ed Binary files /dev/null and b/bin/classes/net/swordie/ms/util/AntiMacro.class differ diff --git a/bin/classes/net/swordie/ms/util/FileTime$Type.class b/bin/classes/net/swordie/ms/util/FileTime$Type.class new file mode 100755 index 0000000..670c908 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/FileTime$Type.class differ diff --git a/bin/classes/net/swordie/ms/util/FileTime.class b/bin/classes/net/swordie/ms/util/FileTime.class new file mode 100755 index 0000000..1f24b3e Binary files /dev/null and b/bin/classes/net/swordie/ms/util/FileTime.class differ diff --git a/bin/classes/net/swordie/ms/util/FileoutputUtil.class b/bin/classes/net/swordie/ms/util/FileoutputUtil.class new file mode 100755 index 0000000..f34f957 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/FileoutputUtil.class differ diff --git a/bin/classes/net/swordie/ms/util/HeapDumper.class b/bin/classes/net/swordie/ms/util/HeapDumper.class new file mode 100755 index 0000000..0ae7d82 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/HeapDumper.class differ diff --git a/bin/classes/net/swordie/ms/util/IntegerValue.class b/bin/classes/net/swordie/ms/util/IntegerValue.class new file mode 100755 index 0000000..7568598 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/IntegerValue.class differ diff --git a/bin/classes/net/swordie/ms/util/Loader.class b/bin/classes/net/swordie/ms/util/Loader.class new file mode 100755 index 0000000..7692f81 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/Loader.class differ diff --git a/bin/classes/net/swordie/ms/util/MetaProgramming.class b/bin/classes/net/swordie/ms/util/MetaProgramming.class new file mode 100755 index 0000000..4dae8f7 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/MetaProgramming.class differ diff --git a/bin/classes/net/swordie/ms/util/Position.class b/bin/classes/net/swordie/ms/util/Position.class new file mode 100755 index 0000000..3e377d8 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/Position.class differ diff --git a/bin/classes/net/swordie/ms/util/Randomizer.class b/bin/classes/net/swordie/ms/util/Randomizer.class new file mode 100755 index 0000000..413e75a Binary files /dev/null and b/bin/classes/net/swordie/ms/util/Randomizer.class differ diff --git a/bin/classes/net/swordie/ms/util/Rect.class b/bin/classes/net/swordie/ms/util/Rect.class new file mode 100755 index 0000000..c9f2bb5 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/Rect.class differ diff --git a/bin/classes/net/swordie/ms/util/Saver.class b/bin/classes/net/swordie/ms/util/Saver.class new file mode 100755 index 0000000..501162a Binary files /dev/null and b/bin/classes/net/swordie/ms/util/Saver.class differ diff --git a/bin/classes/net/swordie/ms/util/SharkPropertyMaker.class b/bin/classes/net/swordie/ms/util/SharkPropertyMaker.class new file mode 100755 index 0000000..0e955b7 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/SharkPropertyMaker.class differ diff --git a/bin/classes/net/swordie/ms/util/StringUtil.class b/bin/classes/net/swordie/ms/util/StringUtil.class new file mode 100755 index 0000000..dc799a7 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/StringUtil.class differ diff --git a/bin/classes/net/swordie/ms/util/SystemTime.class b/bin/classes/net/swordie/ms/util/SystemTime.class new file mode 100755 index 0000000..688fbbc Binary files /dev/null and b/bin/classes/net/swordie/ms/util/SystemTime.class differ diff --git a/bin/classes/net/swordie/ms/util/Util.class b/bin/classes/net/swordie/ms/util/Util.class new file mode 100755 index 0000000..64a562a Binary files /dev/null and b/bin/classes/net/swordie/ms/util/Util.class differ diff --git a/bin/classes/net/swordie/ms/util/XMLApi.class b/bin/classes/net/swordie/ms/util/XMLApi.class new file mode 100755 index 0000000..6d7943a Binary files /dev/null and b/bin/classes/net/swordie/ms/util/XMLApi.class differ diff --git a/bin/classes/net/swordie/ms/util/container/Triple.class b/bin/classes/net/swordie/ms/util/container/Triple.class new file mode 100755 index 0000000..5df5aad Binary files /dev/null and b/bin/classes/net/swordie/ms/util/container/Triple.class differ diff --git a/bin/classes/net/swordie/ms/util/container/Tuple.class b/bin/classes/net/swordie/ms/util/container/Tuple.class new file mode 100755 index 0000000..55885f4 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/container/Tuple.class differ diff --git a/bin/classes/net/swordie/ms/util/dsl/SWEntity.class b/bin/classes/net/swordie/ms/util/dsl/SWEntity.class new file mode 100755 index 0000000..c19ebe2 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/dsl/SWEntity.class differ diff --git a/bin/classes/net/swordie/ms/util/dsl/SWParser.class b/bin/classes/net/swordie/ms/util/dsl/SWParser.class new file mode 100755 index 0000000..ff432d3 Binary files /dev/null and b/bin/classes/net/swordie/ms/util/dsl/SWParser.class differ diff --git a/bin/classes/net/swordie/ms/world/Channel.class b/bin/classes/net/swordie/ms/world/Channel.class new file mode 100755 index 0000000..7ae5464 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/Channel.class differ diff --git a/bin/classes/net/swordie/ms/world/World.class b/bin/classes/net/swordie/ms/world/World.class new file mode 100755 index 0000000..a0ae877 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/World.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionEnum.class b/bin/classes/net/swordie/ms/world/auction/AuctionEnum.class new file mode 100755 index 0000000..1405560 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionEnum.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionInvType$1.class b/bin/classes/net/swordie/ms/world/auction/AuctionInvType$1.class new file mode 100755 index 0000000..3a69d3a Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionInvType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionInvType.class b/bin/classes/net/swordie/ms/world/auction/AuctionInvType.class new file mode 100755 index 0000000..89b20cf Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionInvType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionItem.class b/bin/classes/net/swordie/ms/world/auction/AuctionItem.class new file mode 100755 index 0000000..26a6155 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionItem.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionPotType$1.class b/bin/classes/net/swordie/ms/world/auction/AuctionPotType$1.class new file mode 100755 index 0000000..5b131ce Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionPotType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionPotType.class b/bin/classes/net/swordie/ms/world/auction/AuctionPotType.class new file mode 100755 index 0000000..31b3bca Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionPotType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionResult$1.class b/bin/classes/net/swordie/ms/world/auction/AuctionResult$1.class new file mode 100755 index 0000000..350da6f Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionResult$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionResult.class b/bin/classes/net/swordie/ms/world/auction/AuctionResult.class new file mode 100755 index 0000000..3aa9827 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionResult.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/AuctionType.class b/bin/classes/net/swordie/ms/world/auction/AuctionType.class new file mode 100755 index 0000000..8b741bc Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/AuctionType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionAccType$1.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionAccType$1.class new file mode 100755 index 0000000..3720239 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionAccType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionAccType.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionAccType.class new file mode 100755 index 0000000..638d26c Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionAccType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorFirstType$1.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorFirstType$1.class new file mode 100755 index 0000000..2155f3d Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorFirstType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorFirstType.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorFirstType.class new file mode 100755 index 0000000..06ca51d Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorFirstType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorType$1.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorType$1.class new file mode 100755 index 0000000..d319e4c Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorType.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorType.class new file mode 100755 index 0000000..c20e9d2 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionArmorType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionEtcArmorType$1.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionEtcArmorType$1.class new file mode 100755 index 0000000..c605233 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionEtcArmorType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/armor/AuctionEtcArmorType.class b/bin/classes/net/swordie/ms/world/auction/armor/AuctionEtcArmorType.class new file mode 100755 index 0000000..2f55a52 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/armor/AuctionEtcArmorType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionBeautyType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionBeautyType.class new file mode 100755 index 0000000..f250ca0 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionBeautyType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionBoostType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionBoostType.class new file mode 100755 index 0000000..c41d9da Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionBoostType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashEtcType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashEtcType.class new file mode 100755 index 0000000..aab404a Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashEtcType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashType$1.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashType$1.class new file mode 100755 index 0000000..6fa1e73 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashType.class new file mode 100755 index 0000000..57d7f44 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionCashType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionGameType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionGameType.class new file mode 100755 index 0000000..7f02471 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionGameType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionLabelType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionLabelType.class new file mode 100755 index 0000000..e1206b1 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionLabelType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionOutfitType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionOutfitType.class new file mode 100755 index 0000000..1c2d7bb Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionOutfitType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/cash/AuctionPetType.class b/bin/classes/net/swordie/ms/world/auction/cash/AuctionPetType.class new file mode 100755 index 0000000..44cde02 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/cash/AuctionPetType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/etc/AuctionChairType.class b/bin/classes/net/swordie/ms/world/auction/etc/AuctionChairType.class new file mode 100755 index 0000000..8c68344 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/etc/AuctionChairType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/etc/AuctionEtcType$1.class b/bin/classes/net/swordie/ms/world/auction/etc/AuctionEtcType$1.class new file mode 100755 index 0000000..93e1e58 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/etc/AuctionEtcType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/etc/AuctionEtcType.class b/bin/classes/net/swordie/ms/world/auction/etc/AuctionEtcType.class new file mode 100755 index 0000000..2df0e7b Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/etc/AuctionEtcType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/etc/AuctionProfessionType.class b/bin/classes/net/swordie/ms/world/auction/etc/AuctionProfessionType.class new file mode 100755 index 0000000..e1ff2de Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/etc/AuctionProfessionType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionAlchemyType.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionAlchemyType.class new file mode 100755 index 0000000..10925f4 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionAlchemyType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionConsumeEtcType.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionConsumeEtcType.class new file mode 100755 index 0000000..7347e86 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionConsumeEtcType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionRecipeType.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionRecipeType.class new file mode 100755 index 0000000..0055818 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionRecipeType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionRecoveryType.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionRecoveryType.class new file mode 100755 index 0000000..5db93b8 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionRecoveryType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionScrollType.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionScrollType.class new file mode 100755 index 0000000..2230eae Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionScrollType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionSkillBookType.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionSkillBookType.class new file mode 100755 index 0000000..073aa59 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionSkillBookType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionUseType$1.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionUseType$1.class new file mode 100755 index 0000000..7e26442 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionUseType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/use/AuctionUseType.class b/bin/classes/net/swordie/ms/world/auction/use/AuctionUseType.class new file mode 100755 index 0000000..ce9b7cb Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/use/AuctionUseType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionOneHandedWeaponType$1.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionOneHandedWeaponType$1.class new file mode 100755 index 0000000..f5746ce Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionOneHandedWeaponType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionOneHandedWeaponType.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionOneHandedWeaponType.class new file mode 100755 index 0000000..45d1181 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionOneHandedWeaponType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionSecondaryType$1.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionSecondaryType$1.class new file mode 100755 index 0000000..0e5bf09 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionSecondaryType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionSecondaryType.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionSecondaryType.class new file mode 100755 index 0000000..7590bbe Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionSecondaryType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionTwoHandedWeaponType$1.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionTwoHandedWeaponType$1.class new file mode 100755 index 0000000..2a8ecc9 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionTwoHandedWeaponType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionTwoHandedWeaponType.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionTwoHandedWeaponType.class new file mode 100755 index 0000000..37a225b Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionTwoHandedWeaponType.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionWeaponFirstType$1.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionWeaponFirstType$1.class new file mode 100755 index 0000000..9be95a3 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionWeaponFirstType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/auction/weapon/AuctionWeaponFirstType.class b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionWeaponFirstType.class new file mode 100755 index 0000000..f23664f Binary files /dev/null and b/bin/classes/net/swordie/ms/world/auction/weapon/AuctionWeaponFirstType.class differ diff --git a/bin/classes/net/swordie/ms/world/event/BossType$1.class b/bin/classes/net/swordie/ms/world/event/BossType$1.class new file mode 100755 index 0000000..159d451 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/event/BossType$1.class differ diff --git a/bin/classes/net/swordie/ms/world/event/BossType.class b/bin/classes/net/swordie/ms/world/event/BossType.class new file mode 100755 index 0000000..fc3506f Binary files /dev/null and b/bin/classes/net/swordie/ms/world/event/BossType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/Clock$1.class b/bin/classes/net/swordie/ms/world/field/Clock$1.class new file mode 100755 index 0000000..63447ea Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/Clock$1.class differ diff --git a/bin/classes/net/swordie/ms/world/field/Clock.class b/bin/classes/net/swordie/ms/world/field/Clock.class new file mode 100755 index 0000000..9f674de Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/Clock.class differ diff --git a/bin/classes/net/swordie/ms/world/field/ClockPacket$1.class b/bin/classes/net/swordie/ms/world/field/ClockPacket$1.class new file mode 100755 index 0000000..5b84926 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/ClockPacket$1.class differ diff --git a/bin/classes/net/swordie/ms/world/field/ClockPacket.class b/bin/classes/net/swordie/ms/world/field/ClockPacket.class new file mode 100755 index 0000000..0c77400 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/ClockPacket.class differ diff --git a/bin/classes/net/swordie/ms/world/field/Field.class b/bin/classes/net/swordie/ms/world/field/Field.class new file mode 100755 index 0000000..933523f Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/Field.class differ diff --git a/bin/classes/net/swordie/ms/world/field/FieldCustom.class b/bin/classes/net/swordie/ms/world/field/FieldCustom.class new file mode 100755 index 0000000..700a0ff Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/FieldCustom.class differ diff --git a/bin/classes/net/swordie/ms/world/field/FieldInstanceType.class b/bin/classes/net/swordie/ms/world/field/FieldInstanceType.class new file mode 100755 index 0000000..e587c24 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/FieldInstanceType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/Foothold.class b/bin/classes/net/swordie/ms/world/field/Foothold.class new file mode 100755 index 0000000..e30910c Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/Foothold.class differ diff --git a/bin/classes/net/swordie/ms/world/field/Instance.class b/bin/classes/net/swordie/ms/world/field/Instance.class new file mode 100755 index 0000000..d34cf52 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/Instance.class differ diff --git a/bin/classes/net/swordie/ms/world/field/MapTaggedObject.class b/bin/classes/net/swordie/ms/world/field/MapTaggedObject.class new file mode 100755 index 0000000..e4b3947 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/MapTaggedObject.class differ diff --git a/bin/classes/net/swordie/ms/world/field/MobGen.class b/bin/classes/net/swordie/ms/world/field/MobGen.class new file mode 100755 index 0000000..7125abb Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/MobGen.class differ diff --git a/bin/classes/net/swordie/ms/world/field/Portal.class b/bin/classes/net/swordie/ms/world/field/Portal.class new file mode 100755 index 0000000..c519b2f Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/Portal.class differ diff --git a/bin/classes/net/swordie/ms/world/field/PortalType.class b/bin/classes/net/swordie/ms/world/field/PortalType.class new file mode 100755 index 0000000..5c9cf75 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/PortalType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/bosses/gollux/FallingCatcher.class b/bin/classes/net/swordie/ms/world/field/bosses/gollux/FallingCatcher.class new file mode 100755 index 0000000..6fa68f0 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/bosses/gollux/FallingCatcher.class differ diff --git a/bin/classes/net/swordie/ms/world/field/bosses/gollux/GolluxMiniMapFieldClearType.class b/bin/classes/net/swordie/ms/world/field/bosses/gollux/GolluxMiniMapFieldClearType.class new file mode 100755 index 0000000..b082cdb Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/bosses/gollux/GolluxMiniMapFieldClearType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/bosses/lucid/Butterfly.class b/bin/classes/net/swordie/ms/world/field/bosses/lucid/Butterfly.class new file mode 100755 index 0000000..f025cb0 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/bosses/lucid/Butterfly.class differ diff --git a/bin/classes/net/swordie/ms/world/field/bosses/lucid/ButterflyActionType.class b/bin/classes/net/swordie/ms/world/field/bosses/lucid/ButterflyActionType.class new file mode 100755 index 0000000..6b7fc38 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/bosses/lucid/ButterflyActionType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/bosses/lucid/ButterflyType.class b/bin/classes/net/swordie/ms/world/field/bosses/lucid/ButterflyType.class new file mode 100755 index 0000000..999da47 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/bosses/lucid/ButterflyType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/bosses/lucid/FairyDust.class b/bin/classes/net/swordie/ms/world/field/bosses/lucid/FairyDust.class new file mode 100755 index 0000000..cba297b Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/bosses/lucid/FairyDust.class differ diff --git a/bin/classes/net/swordie/ms/world/field/bosses/lucid/LucidSkillType.class b/bin/classes/net/swordie/ms/world/field/bosses/lucid/LucidSkillType.class new file mode 100755 index 0000000..b42e056 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/bosses/lucid/LucidSkillType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffect$1.class b/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffect$1.class new file mode 100755 index 0000000..cefa386 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffect$1.class differ diff --git a/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffect.class b/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffect.class new file mode 100755 index 0000000..40266ec Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffect.class differ diff --git a/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffectType.class b/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffectType.class new file mode 100755 index 0000000..52a647c Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/fieldeffect/FieldEffectType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/fieldeffect/GreyFieldType.class b/bin/classes/net/swordie/ms/world/field/fieldeffect/GreyFieldType.class new file mode 100755 index 0000000..9aa0c70 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/fieldeffect/GreyFieldType.class differ diff --git a/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleAtomInfo.class b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleAtomInfo.class new file mode 100755 index 0000000..6389a25 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleAtomInfo.class differ diff --git a/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleDiagonalInfo.class b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleDiagonalInfo.class new file mode 100755 index 0000000..45df6d5 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleDiagonalInfo.class differ diff --git a/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleInRowInfo.class b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleInRowInfo.class new file mode 100755 index 0000000..837df47 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleInRowInfo.class differ diff --git a/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleRadianInfo.class b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleRadianInfo.class new file mode 100755 index 0000000..9777252 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/field/obtacleatom/ObtacleRadianInfo.class differ diff --git a/bin/classes/net/swordie/ms/world/gach/GachaponConstants.class b/bin/classes/net/swordie/ms/world/gach/GachaponConstants.class new file mode 100755 index 0000000..7e716fe Binary files /dev/null and b/bin/classes/net/swordie/ms/world/gach/GachaponConstants.class differ diff --git a/bin/classes/net/swordie/ms/world/gach/GachaponInfo$GachItem.class b/bin/classes/net/swordie/ms/world/gach/GachaponInfo$GachItem.class new file mode 100755 index 0000000..0ea6cee Binary files /dev/null and b/bin/classes/net/swordie/ms/world/gach/GachaponInfo$GachItem.class differ diff --git a/bin/classes/net/swordie/ms/world/gach/GachaponInfo.class b/bin/classes/net/swordie/ms/world/gach/GachaponInfo.class new file mode 100755 index 0000000..846be80 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/gach/GachaponInfo.class differ diff --git a/bin/classes/net/swordie/ms/world/gach/GachaponManager.class b/bin/classes/net/swordie/ms/world/gach/GachaponManager.class new file mode 100755 index 0000000..0c82828 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/gach/GachaponManager.class differ diff --git a/bin/classes/net/swordie/ms/world/gach/result/GachaponDlgType.class b/bin/classes/net/swordie/ms/world/gach/result/GachaponDlgType.class new file mode 100755 index 0000000..543eb32 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/gach/result/GachaponDlgType.class differ diff --git a/bin/classes/net/swordie/ms/world/gach/result/GachaponResult.class b/bin/classes/net/swordie/ms/world/gach/result/GachaponResult.class new file mode 100755 index 0000000..c7882f4 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/gach/result/GachaponResult.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/BuyLimitInfo.class b/bin/classes/net/swordie/ms/world/shop/BuyLimitInfo.class new file mode 100755 index 0000000..380b8bb Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/BuyLimitInfo.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/NpcShopDlg.class b/bin/classes/net/swordie/ms/world/shop/NpcShopDlg.class new file mode 100755 index 0000000..1637a63 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/NpcShopDlg.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/NpcShopItem.class b/bin/classes/net/swordie/ms/world/shop/NpcShopItem.class new file mode 100755 index 0000000..c1fb660 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/NpcShopItem.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/ShopRequestType.class b/bin/classes/net/swordie/ms/world/shop/ShopRequestType.class new file mode 100755 index 0000000..5a7358a Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/ShopRequestType.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/ShopTabIndex.class b/bin/classes/net/swordie/ms/world/shop/ShopTabIndex.class new file mode 100755 index 0000000..79c936f Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/ShopTabIndex.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/cashshop/CashItemInfo.class b/bin/classes/net/swordie/ms/world/shop/cashshop/CashItemInfo.class new file mode 100755 index 0000000..0c72f25 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/cashshop/CashItemInfo.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/cashshop/CashShop.class b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShop.class new file mode 100755 index 0000000..b46f5db Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShop.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopCategory$Flag.class b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopCategory$Flag.class new file mode 100755 index 0000000..6db504e Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopCategory$Flag.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopCategory.class b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopCategory.class new file mode 100755 index 0000000..bbca617 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopCategory.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopItem$CashShopItemFlag.class b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopItem$CashShopItemFlag.class new file mode 100755 index 0000000..38313a5 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopItem$CashShopItemFlag.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopItem.class b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopItem.class new file mode 100755 index 0000000..5f26d95 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/cashshop/CashShopItem.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/result/ShopResult$1.class b/bin/classes/net/swordie/ms/world/shop/result/ShopResult$1.class new file mode 100755 index 0000000..7c6f448 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/result/ShopResult$1.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/result/ShopResult.class b/bin/classes/net/swordie/ms/world/shop/result/ShopResult.class new file mode 100755 index 0000000..110d9ee Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/result/ShopResult.class differ diff --git a/bin/classes/net/swordie/ms/world/shop/result/ShopResultType.class b/bin/classes/net/swordie/ms/world/shop/result/ShopResultType.class new file mode 100755 index 0000000..5113995 Binary files /dev/null and b/bin/classes/net/swordie/ms/world/shop/result/ShopResultType.class differ diff --git a/config.properties b/config.properties new file mode 100755 index 0000000..1309d86 --- /dev/null +++ b/config.properties @@ -0,0 +1 @@ +# To be used in the future \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100755 index 0000000..f3001f0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,137 @@ + + 4.0.0 + 2.13.1 + SwordieMS + net.swordie + maplestory + + + 17 + 17 + --enable-preview + UTF-8 + + + + ${project.basedir}/bin + ${project.build.directory}/classes + + + + src/main/java + + **/*.java + + + + + + + maven-assembly-plugin + 3.3.0 + + + + net.swordie.ms.Server + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 17 + --enable-preview + 17 + 17 + + + + + + + + mysql + mysql-connector-java + 5.1.39 + + + io.netty + netty-all + 4.1.72.Final + compile + + + + javax.xml.bind + jaxb-api + 2.3.1 + + + com.sun.xml.bind + jaxb-impl + 2.3.2 + + + org.glassfish.jaxb + jaxb-runtime + 2.3.2 + + + javax.activation + activation + 1.1.1 + + + + org.hibernate + hibernate-core + 5.6.3.Final + + + + org.python + jython-standalone + 2.7.2 + + + + log4j + log4j + 1.2.17 + + + + org.mindrot + jbcrypt + 0.4 + + + + com.google.guava + guava + 26.0-jre + + + org.openjdk.nashorn + nashorn-core + 15.3 + + + + diff --git a/properties/CP_207-1.properties b/properties/CP_207-1.properties new file mode 100755 index 0000000..68d2d02 --- /dev/null +++ b/properties/CP_207-1.properties @@ -0,0 +1,952 @@ +PONG = 150 +CONNECT_CHAT = 1 +REDISPLAY_SERVER_LIST = 7 +GUILD_CHAT = 19 +FRIEND_CHAT = 20 +GUEST_LOGIN = 22 +TOS = 29 +VIEW_SERVER_LIST = 33 +VIEW_REGISTER_PIC = 50 +VIEW_SELECT_PIC = 53 +CLIENT_FAILED = 57 +PART_TIME_JOB = 59 +CHARACTER_CARD = 60 +ENABLE_LV50_CHAR = 61 +CREATE_LV50_CHAR = 62 +ENABLE_SPECIAL_CREATION = 62 +CREATE_SPECIAL_CHAR = 65 +DUMMY_CODE = 100 +BEGIN_SOCKET = 101 +SECURITY_PACKET = 102 +PERMISSION_REQUEST = 103 +LOGIN_BASIC_INFO = 104 +CHECK_LOGIN_AUTH_INFO = 105 +VIEW_CHANNEL_REQUEST = 106 +SELECT_WORLD = 107 +CHECK_SPW_REQUEST = 108 +CHAR_SELECT = 109 +CHECK_SPW_EXIST_REQUEST = 110 +MIGRATE_IN = 111 +SELECT_CHARACTER = 112 +SELECT_GO_TO_STAR_PLANET = 113 +SELECT_ACCOUNT = 114 +WORLD_INFO_REQUEST = 115 +WORLD_INFO_FOR_SHINING_REQUEST = 116 +CHECK_DUPLICATE_ID = 117 +LOGOUT_WORLD = 118 +PERMISSION_REQUEST_FAKE = 119 +CHECK_LOGIN_AUTH_INFO_FAKE = 120 +CREATE_MAPLE_ACCOUNT_FAKE = 121 +SELECT_ACCOUNT_FAKE = 122 +SELECT_WORLD_FAKE = 123 +SELECT_CHARACTER_FAKE = 124 +CREATE_NEW_CHARACTER_FAKE = 125 +CREATE_NEW_CHARACTER = 126 +DELETE_CHARACTER = 130 +RESERVED_DELETE_CHARACTER_CONFIRM = 131 +RESERVED_DELETE_CHARACTER_CANCEL = 132 +RENAME_CHARACTER = 133 +EXCEPTION_LOG = 134 +PRIVATE_SERVER_PACKET = 135 +RESET_LOGIN_STATE_ON_CHECK_OTP = 136 +CHANGE_SPW_REQUEST = 137 +CHECK_SOW_REQUEST_FAKE = 138 +CHECK_OTP_REQUEST = 139 +CHECK_DELETE_CHARACTER_OTP = 140 +CHECK_OTP_FOR_WEB_LAUNCHING_REQUEST = 141 +CREATE_SECURITY_HANDLE = 142 +ALBA_REQUEST = 143 +UPDATE_CHARACTER_CARD_REQUEST = 144 +ALIVE_ACK = 153 +CLIENT_ERROR = 155 +APPLY_HOTFIX = 158 +SERVER_STATUS_REQUEST = 159 +WVS_SET_UP_STEP = 160 +WVS_CRASH_CALLBACK = 161 +WORLD_LIST_REQUEST = 163 +CHAR_POSITION_CHANGE = 168 +WORLD_STATUS_REQUEST = 176 +USE_AUTH_SERVER = 183 +AUTH_FAILURE = 187 +CHAR_SELECT_NO_PIC = 189 +CHANGE_PIC_REQUEST = 190 +UNK200_193 = 195 +B_E_G_I_N__U_S_E_R = 198 +USER_TRANSFER_FIELD_REQUEST = 199 +USER_TRANSFER_CHANNEL_REQUEST = 200 +USER_TRANSFER_TO_HUB_REQUEST = 201 +WORLD_TRANSFER_REQUEST = 202 +WORLD_TRANSFER_SHINNING_STAR_REQUEST = 203 +USER_MIGRATE_TO_CASH_SHOP_REQUEST = 205 +USER_MIGRATE_AUCTION_REQUEST = 206 +USER_MIGRATE_TO_MONSTER_FARM = 207 +USER_MIGRATE_TO_MONSTER_FARM_BY_INVITE_ITEM = 208 +USER_TRANSFER_ASWAN_REQUEST = 209 +USER_TRANSFER_ASWAN_READY_REQUEST = 210 +ASWAN_RETIRE_REQUEST = 211 +USER_REQUEST_PV_P_STATUS = 212 +USER_MIGRATE_TO_PVE_REQUEST = 212 +USER_MOVE = 213 +USER_SIT_REQUEST = 214 +USER_PORTABLE_CHAIR_SIT_REQUEST = 215 +USER_EMOTICON_ITEM_USE_REQUEST = 216 +USER_DANCE_STOP_REQUEST = 217 +USER_MELEE_ATTACK = 218 +USER_SHOOT_ATTACK = 219 +USER_MAGIC_ATTACK = 220 +USER_BODY_ATTACK = 221 +USER_AREA_DOT_ATTACK = 222 +USER_MOVING_SHOOT_ATTACK_PREPARE = 223 +USER_HIT = 225 +USER_CHAT = 226 +USER_ITEM_LINKED_CHAT = 227 +USER_A_D_BOARD_CLOSE = 228 +USER_EMOTION = 229 +ANDROID_EMOTION = 230 +USER_ACTIVATE_EFFECT_ITEM = 231 +USER_MONKEY_EFFECT_ITEM = 232 +USER_ACTIVATE_NICK_ITEM = 233 +USER_ACTIVATE_DAMAGE_SKIN = 234 +USER_ACTIVATE_DAMAGE_SKIN__PREMIUM = 235 +USER_DAMAGE_SKIN_SAVE_REQUEST = 236 +USER_DEFAULT_WING_ITEM = 237 +USER_KAISER_TRANSFORM_WING = 238 +USER_KAISER_TRANSFORM_TAIL = 239 +USER_UPGRADE_TOMB_EFFECT = 240 +USER_BAN_MAP_BY_MOB = 241 +USER_MONSTER_BOOK_SET_COVER = 242 +USER_SELECT_NPC = 243 +USER_REMOTE_SHOP_OPEN_REQUEST = 244 +USER_SCRIPT_MESSAGE_ANSWER = 245 +USER_SHOP_REQUEST = 246 +USER_TRUNK_REQUEST = 247 +USER_ENTRUSTED_SHOP_REQUEST = 248 +USER_STORE_BANK_REQUEST = 249 +USER_PARCEL_REQUEST = 250 +USER_EFFECT_LOCAL = 251 +USER_SPECIAL_EFFECT_LOCAL = 252 +USER_FINAL_ATTACK_REQUEST = 253 +USER_CREATE_AREA_DOT_REQUEST = 254 +USER_CREATE_HOLIDOM_REQUEST = 255 +REQ_MAKING_SKILL_EFF = 256 +SHOP_SCANNER_REQUEST = 257 +SHOP_LINK_REQUEST = 258 +AUCTION_REQUEST = 259 +AUCTION_LEAVE_REQUEST = 260 +ADMIN_SHOP_REQUEST = 261 +USER_GATHER_ITEM_REQUEST = 262 +USER_SORT_ITEM_REQUEST = 263 +USER_CHANGE_SLOT_POSITION_REQUEST = 264 +USER_TEXT_EQUIP_INFO = 265 +USER_POP_OR_PUSH_BAG_ITEM_TO_INVEN = 17 +USER_BAG_TO_BAG_ITEM = 267 +USER_POUR_IN_BAG_TO_BAG = 268 +USER_STAT_CHANGE_ITEM_USE_REQUEST = 269 +USER_STAT_CHANGE_ITEM_CANCEL_REQUEST = 270 +USER_STAT_CHANGE_BY_PORTABLE_CHAIR_REQUEST = 271 +USER_MOB_SUMMON_ITEM_USE_REQUEST = 272 +USER_PET_FOOD_ITEM_USE_REQUEST = 273 +USER_TAMING_MOB_FOOD_ITEM_USE_REQUEST = 274 +USER_SCRIPT_ITEM_USE_REQUEST = 275 +USER_RECIPE_OPEN_ITEM_USE_REQUEST = 276 +USER_CONSUME_CASH_ITEM_USE_REQUEST = 277 +USER_ADDITIONAL_SLOT_EXTEND_ITEM_USE_REQUEST = 278 +USER_CASH_PET_PICK_UP_ON_OFF_REQUEST = 279 +USER_CASH_PET_SKILL_SETTING_REQUEST = 280 +USER_OPTION_CHANGE_REQUEST = 281 +USER_DESTROY_PET_ITEM_REQUEST = 282 +USER_BRIDLE_ITEM_USE_REQUEST = 283 +USER_SKILL_LEARN_ITEM_USE_REQUEST = 284 +USER_SKILL_RESET_ITEM_USE_REQUEST = 285 +USER_ABILITY_RESET_ITEM_USE_REQUEST = 286 +USER_ABILITY_CHANGE_ITEM_USE_REQUEST = 287 +USER_EXP_CONSUME_ITEM_USE_REQUEST = 288 +USER_MONSTER_LIFE_INVITE_ITEM_USE_REQUEST = 289 +USER_EXP_ITEM_GET_REQUEST = 290 +USER_CHAR_SLOT_INC_ITEM_USE_REQUEST = 291 +USER_CHAR_RENAME_ITEM_USE_REQUEST = 292 +USER_KAISER_COLOR_CHANGE_ITEM_USE_REQUEST = 293 +USER_SHOP_SCANNER_ITEM_USE_REQUEST = 294 +USER_MAP_TRANSFER_ITEM_USE_REQUEST = 295 +USER_PORTAL_SCROLL_USE_REQUEST = 296 +USER_FIELD_TRANSFER_REQUEST = 297 +USER_UPGRADE_ITEM_USE_REQUEST = 298 +USER_UPGRADE_ASSIST_ITEM_USE_REQUEST = 299 +USER_HYPER_UPGRADE_ITEM_USE_REQUEST = 300 +USER_EX_ITEM_UPGRADE_ITEM_USE_REQUEST = 301 +USER_KARMA_CONSUME_ITEM_USE_REQUEST = 302 +USER_EVENT_UPGRADE_ITEM_USE_REQUEST = 303 +USER_ITEM_OPTION_UPGRADE_ITEM_USE_REQUEST = 306 +USER_ADDITIONAL_OPT_UPGRADE_ITEM_USE_REQUEST = 307 +USER_ITEM_SLOT_EXTEND_ITEM_USE_REQUEST = 308 +USER_WEAPON_TEMP_ITEM_OPTION_REQUEST = 309 +USER_ITEM_SKILL_SOCKET_UPGRADE_ITEM_USE_REQUEST = 310 +USER_ITEM_SKILL_OPTION_UPGRADE_ITEM_USE_REQUEST = 311 +USER_FREE_MIRACLE_CUBE_ITEM_USE_REQUEST = 312 +USER_EQUIPMENT_ENCHANT_WITH_SINGLE_UI_REQUEST = 314 +USER_UI_OPEN_ITEM_USE_REQUEST = 315 +USER_BAG_ITEM_USE_REQUEST = 316 +USER_ARCANE_SYMBOL_MERGE_REQUEST = 317 +USER_ITEM_RELEASE_REQUEST = 320 +USER_MEMORIAL_CUBE_OPTION_REQUEST = 321 +USER_USE_NAVI_FLYING_SKILL_REQUEST = 322 +USER_TOADS_HAMMER_REQUEST = 324 +USER_TOADS_HAMMER_HELP_REQUEST = 325 +USER_CHANGE_SOUL_COLLECTION_REQUEST = 326 +USER_SELECT_SOUL_SKILL_UP_REQUEST = 327 +USER_ABILITY_UP_REQUEST = 329 +USER_ABILITY_MASS_UP_REQUEST = 330 +USER_DOT_HEAL = 331 +USER_CHANGE_STAT_REQUEST = 332 +USER_CHANGE_STAT_REQUEST_BY_ITEM_OPTION = 333 +SET_SON_OF_LINKED_SKILL_REQUEST = 334 +UNLINK_SKILL_REQUEST = 335 +LINK_SKILL_REQUEST = 336 +USER_SKILL_UP_REQUEST = 337 +USER_SKILL_USE_REQUEST = 338 +USER_SKILL_CANCEL_REQUEST = 339 +USER_SKILL_PREPARE_STOP = 340 +USER_SKILL_PREPARE_START = 341 +USER_SKILL_KEYDOWN_CHARGE_REQUEST = 343 +USER_DROP_MONEY_REQUEST = 344 +USER_GIVE_POPULARITY_REQUEST = 345 +USER_PARTY_REQUEST = 346 +USER_CHARACTER_INFO_REQUEST = 347 +USER_ACTIVATE_PET_REQUEST = 348 +USER_REGISTER_PET_AUTO_BUFF_REQUEST = 349 +USER_TEMPORARY_STAT_UPDATE_REQUEST = 350 +USER_PORTAL_SCRIPT_REQUEST = 351 +USER_PORTAL_TELEPORT_REQUEST = 352 +USER_CALLING_TELEPORT_REQUEST = 354 +USER_MAP_TRANSFER_REQUEST = 355 +USER_ANTI_MACRO_ITEM_USE_REQUEST = 356 +USER_ANTI_MACRO_SKILL_USE_REQUEST = 357 +USER_ANTI_MACRO_REFRESH_REQUEST = 358 +USER_CLAIM_REQUEST = 359 +USER_QUEST_REQUEST = 360 +USER_MEDAL_REISSUE_REQUEST = 361 +USER_CALC_DAMAGE_STAT_SET_REQUEST = 362 +USER_B2_BODY_REQUEST = 363 +USER_THROW_GRENADE = 364 +USER_DESTROY_GRENADE = 365 +USER_CREATE_AURA_BY_GRENADE = 366 +USER_SET_MOVE_GRENADE = 367 +USER_MACRO_SYS_DATA_MODIFIED = 368 +USER_SELECT_NPC_ITEM_USE_REQUEST = 369 +USER_LOTTERY_ITEM_USE_REQUEST = 370 +USER_ROULETTE_START_REQUEST = 371 +USER_ROULETTE_RESULT_REQUEST = 372 +USER_ITEM_MAKE_REQUEST = 373 +USER_REPAIR_DURABILITY_ALL = 374 +USER_REPAIR_DURABILITY = 375 +USER_QUEST_RECORD_SET_STATE = 376 +USER_CLIENT_TIMER_END_REQUEST = 377 +USER_CLIENT_RESOLUTION_RESULT = 378 +USER_FOLLOW_CHARACTER_REQUEST = 379 +USER_FOLLOW_CHARACTER_WITHDRAW = 380 +USER_SELECT_PQ_REWARD = 381 +USER_REQUEST_PQ_REWARD = 382 +SET_PASSENGER_RESULT = 382 +USER_REQUEST_INSTANCE_TABLE = 383 +USER_REQUEST_CREATE_ITEM_POT = 384 +USER_REQUEST_REMOVE_ITEM_POT = 385 +USER_REQUEST_INC_ITEM_POT_LIFE_SATIETY = 386 +USER_REQUEST_CURE_ITEM_POT_LIFE_SICK = 387 +USER_REQUEST_COMPLATE_TO_ITEM_POT = 388 +USER_REQUEST_RESPAWN = 389 +USER_CONSUME_HAIR_ITEM_USE_REQUEST = 390 +USER_FORCE_ATOM_COLLISION = 393 +USER_DEBUFF_OBJ_COLLISION = 394 +USER_UPDATE_LAPIDIFICATION = 395 +USER_UPDATE_PARTY_BUFF_AREA = 396 +USER_REQUEST_CHARACTER_POTENTIAL_SKILL_RAND_SET = 399 +USER_REQUEST_CHARACTER_POTENTIAL_SKILL_RAND_SET_UI = 400 +USER_REQUEST_OCCUMPATION_DATA = 401 +USER_REQUEST_ASWAN_TIME_TABLE_CLIENT_INIT = 402 +USER_PROTECT_BUFF_DIE_ITEM_REQUEST = 403 +USER_PROTECT_BUFF_DIE_MAPLE_POINT_REQUEST = 404 +USER_PROTECT_EXP_DIE_MAPLE_POINT_REQUEST = 405 +USER_KEY_DOWN_AREA_MOVING = 406 +USER_CHECK_WEDDING_EX_REQUEST = 407 +USER_CATCH_DEBUFF_COLLISION = 408 +USER_AFFECTED_AREA_CREATED = 409 +USER_AFFECTED_AREA_REMOVED = 410 +USER_DAZZLE_HIT = 411 +USER_MESO_EXCHANGE_REQUEST = 412 +ZERO_TAG = 413 +ZERO_SHARE_CASH_EQUIP_PART = 414 +ZERO_LAST_ASSIST_STATE = 415 +USER_SHOOT_ATTACK_IN_FPS = 416 +USER_LUCKY_ITEM_USE_REQUEST = 417 +USER_MOB_MOVE_ABILITY_CHANGE = 418 +USER_DRAGON_ACTION = 420 +USER_DRAGON_BREATH_EARTH_EFFECT = 421 +USER_RENAME_REQUEST = 422 +GROUP_MESSAGE = 428 +ITEM_LINKED_GROUP_MESSAGE = 429 +FIELD_UNIVERSE_MESSAGE = 430 +WHISPER = 431 +MESSENGER = 432 +MINI_ROOM = 433 +PARTY_REQUEST = 436 +PARTY_RESULT = 437 +PARTY_INVITABLE_SET = 438 +EXPEDITION_REQUEST = 439 +PARTY_ADVER_REQUEST = 440 +URSUS_PARTY_REQUEST = 441 +GUILD_REQUEST = 442 +GUILD_RESULT = 443 +GUILD_JOIN_REQUEST = 444 +GUILD_JOIN_CANCEL_REQUEST = 445 +GUILD_JOIN_ACCEPT = 446 +GUILD_JOIN_REJECT = 447 +GUILD_CONTENT_RANK_REQUEST = 448 +TOWER_RANK_REQUEST = 449 +ADMIN = 450 +LOG = 451 +FRIEND_REQUEST = 452 +STAR_PLANET_POINT_REQUEST = 453 +LOAD_ACCOUNT_ID_OF_CHARACTER_FRIEND_REQUEST = 454 +MEMO_REQUEST = 455 +MEMO_FLAG_REQUEST = 456 +ENTER_TOWN_PORTAL_REQUEST = 458 +ENTER_RANDOM_PORTAL_REQUEST = 459 +ENTER_OPEN_GATE_REQUEST = 460 +SLIDE_REQUEST = 461 +FUNC_KEY_MAPPED_MODIFIED = 462 +R_P_S_GAME = 463 +G_S_R_P_S_GAME = 464 +STAR_PLANET__G_S_R_P_S_GAME = 465 +G_S_R_P_S_FORCE_SELECT = 466 +MARRIAGE_REQUEST = 467 +WEDDING_WISH_LIST_REQUEST = 468 +GUEST_BLESS = 469 +BOOBY_TRAP_ALERT = 470 +STALK_BEGIN = 471 +ALLIANCE_REQUEST = 472 +ALLIANCE_RESULT = 473 +TALK_TO_TUTOR = 474 +TALK_TO_PARTNER = 475 +USER_SWITCH_R_P = 476 +REQUEST_INC_COMBO = 477 +REQUEST_DEC_COMBO = 478 +REQUEST_SET_BLESS_OF_DARKNESS = 479 +DEMON_BLOOD_SPILL_REQUEST = 481 +XENON_CORE_OVERLOAD = 482 +REQUEST_SET_HP_BASE_DAMAGE = 483 +MOB_CRC_KEY_CHANGED_REPLY = 484 +MOB_CRC_DATA_RESULT = 485 +MAKING_SKILL_REQUEST = 486 +BROADCAST_EFFECT_TO_SPLIT = 487 +BROADCAST_ONE_TIME_ACTION_TO_SPLIT = 488 +BROADCAST_AFFECTED_EFFECT_TO_SPLIT = 489 +DEBUG_ONLY_COMMAND = 490 +MICRO_BUFF_END_TIME = 491 +REQUEST_SESSION_VALUE = 492 +USER_TRANSFER_FREE_MARKET_REQUEST = 493 +USER_REQUEST_SET_STEAL_SKILL_SLOT = 494 +USER_REQUEST_STEAL_SKILL_MEMORY = 495 +USER_REQUEST_STEAL_SKILL_LIST = 496 +USER_REQUEST_STEAL_SKILL = 497 +RECALL_SUMMON = 498 +REWARD_MOB_LIST_REQUEST = 501 +USER_LV_UP_GUIDE_NOTICE = 502 +RESET_CROSS_HUNTER_ALERT = 503 +CROSS_HUNTER_COMPLETE_REQUEST = 504 +CROSS_HUNTER_SHOP_REQUEST = 505 +USER_EQUIP_SLOT_LEVEL_MINUS_ITEM_USE_REQUEST = 506 +BOARD_GAME_REQUEST = 507 +USER_REQUEST_FLYING_SWORD_START = 508 +BINGO_REQUEST = 512 +BINGO_CASSANDRA_REQUEST = 513 +ACTION_BAR_REQUEST = 514 +USER_HYPER_SKILL_UP_REQUEST = 515 +USER_HYPER_SKILL_RESET_REQUEST = 516 +USER_HYPER_STAT_SKILL_UP_REQUEST = 517 +USER_HYPER_STAT_SKILL_RESET_REQUEST = 518 +USER_SET_DRESS_CHANGED_REQUEST = 519 +ENTRY_RECORD_REQUEST = 520 +SET_MAX_GAUGE = 521 +USER_RETURN_EFFECT_RESPONSE = 522 +GET_SERVER_TIME = 523 +GET_CHARACTER_POSITION = 524 +USER_REQUEST_CHANGE_MOB_ZONE_STATE = 525 +EVOLVING_REQUEST = 526 +USER_MIXER_REQUEST = 527 +SUMMON_EVENT_REWARD = 528 +MYSTIC_FIELD_MOVE = 529 +YUT_GAME_REQUEST = 530 +USER_JEWEL_CRAFT_REQUEST = 531 +VALUE_PACK_REQUEST = 532 +REQUEST_RELOGIN_COOKIE = 533 +WAIT_QUEUE_REQUEST = 534 +CHECK_TRICK_OR_TREAT_REQUEST = 535 +MONSTER_FARM_MIGRATE_OUT_REQUEST = 536 +HALLOWEEN_CANDY_RANKING_REQUEST = 537 +GET_REWARD_REQUEST = 538 +MAPLE_STYLE_BONUS_REQUEST = 539 +MAPLE_STYLE_ADVICE_REQUEST = 540 +MAPLE_STYLE_SET_SCORE_REQUEST = 541 +MENTORING = 541 +GET_LOTTERY_RESULT = 542 +ROOT_ABYSS_ENTER_REQUEST = 543 +USER_SET_ITEM_ACTION = 544 +USER_SET_BITS_CASE = 545 +USER_SET_BITS_SLOT = 546 +USER_ANTI_MACRO_QUESTION_RESULT = 547 +USER_PINKBEAN_ROLLING = 548 +USER_QUICK_MOVE_SCRIPT = 547 +TIME_GATE_REQUEST = 546 +USER_SELECT_ANDROID = 547 +USER_COMPLETE_NPC_SPEECH = 548 +USER_COMPLETE_ANOTHER_USER_CHECK = 549 +USER_COMPLETE_COMBO_KILL_COUNT_CHECK = 550 +USER_COMPLETE_MULTI_KILL_COUNT_CHECK = 551 +USER_COMPLETE_MULTI_KILL_CHECK = 552 +USER_DAMAGE_FALLING_CHECK = 553 +USER_COMPLETE_PERSONAL_SHOP_BUY_CHECK = 554 +USER_DAILY_COMMITMENT_CHECK = 555 +USER_MOB_DROP_MESO_PICKUP = 555 +USER_BREAK_TIME_FIELD_ENTER = 556 +USER_RUN_ACT_QUEST = 567 +JOURNAL_AVATAR_REQUEST = 568 +REQUEST_EVENT_LIST = 569 +USER_SIGN_REQUEST = 570 +ADD_ATTACK_RESET = 571 +SET_EVENT_NAME_TAG = 572 +USER_AFFECTED_AREA_REMOVE_BY_TIME = 573 +REQUEST_FREE_CHANGE_JOB = 574 +LIBRARY_START_SCRIPT = 575 +CHANNEL_USER_COUNT_REQUEST = 576 +UN_URSUS_SELECTED_SKILL_LIST = 577 +SOUL_DUNGEON_SYS = 578 +USER_COORDINATION_CONTEST_REQUEST = 579 +USER_SOUL_EFFECT_REQUEST = 580 +USER_SPIN_OFF_NEW_MODIFY_REQUEST = 581 +BLACK_LIST = 582 +SKILL_HELPER_POPUP = 583 +BLOCKBUSTER = 584 +M_TALK_OFFLINE_ACCOUNT_FRIENDS_NAME_REQUEST = 585 +CHARACTER_BURNING = 586 +UPDATE_CHARACTER_SELECT_LIST = 586 +DIRECT_GO_TO_FIELD = 586 +TRY_REGISTER_TELEPORT = 586 +USER_TOWER_CHAIR_SETTING = 587 +UNION_REQUEST = 592 +END_OVER_HEAT = 587 +BULLET_BARRAGE_DURATION_EXTENSION_REQUEST = 588 +TRADE_KING_SHOP_INFO_REQ = 589 +KEY_DOWN_SKILL_COST = 603 +MATRIX_UPDATE_REQUEST = 607 +MOD_SPECTRA_ENERGY = 610 +USER_REVIVE_REQUEST = 611 +GREATER_DARK_SERVANT_SWAP_REQUEST = 612 +INHUMAN_SPEED_FORCE_ATOM_REQUEST = 614 +CRYSTAL_SKILL_REQUEST = 616 +B_E_G_I_N__P_E_T = 628 +PET_MOVE = 629 +PET_ACTION = 630 +PET_INTERACTION_REQUEST = 631 +PET_DROP_PICK_UP_REQUEST = 632 +PET_STAT_CHANGE_ITEM_USE_REQUEST = 633 +PET_UPDATE_EXCEPTION_LIST_REQUEST = 634 +PET_FOOD_ITEM_USE_REQUEST = 635 +PET_OPEN_SHOP = 636 +E_N_D__P_E_T = 637 +B_E_G_I_N__S_K_I_L_L_P_E_T = 638 +SKILL_PET_MOVE = 639 +SKILL_PET_ACTION = 640 +SKILL_PET_STATE = 641 +SKILL_PET_DROP_PICK_UP_REQUEST = 642 +SKILL_PET_UPDATE_EXCEPTION_LIST_REQUEST = 643 +E_N_D__S_K_I_L_L_P_E_T = 644 +B_E_G_I_N__S_U_M_M_O_N_E_D = 645 +SUMMONED_MOVE = 646 +SUMMONED_ATTACK = 647 +SUMMONED_HIT = 648 +SUMMONED_SKILL = 649 +SUMMONED_REMOVE = 650 +SUMMONED_ATTACK_PV_P = 651 +SUMMONED_ACTION = 652 +SUMMONED_ASSIST_ATTACK_DONE = 655 +SUMMONED_SKILL_ATTACK = 659 +E_N_D__S_U_M_M_O_N_E_D = 661 +B_E_G_I_N__D_R_A_G_O_N = 662 +DRAGON_MOVE = 663 +DRAGON_GLIDE = 664 +E_N_D__D_R_A_G_O_N = 665 +B_E_G_I_N__A_N_D_R_O_I_D = 666 +ANDROID_MOVE = 667 +ANDROID_ACTISET = 668 +E_N_D__A_N_D_R_O_I_D = 669 +B_E_G_I_N__F_O_X_M_A_N = 670 +FOX_MAN_MOVE = 671 +FOX_MAN_ACTION_SET_USE_REQUEST = 672 +E_N_D__F_O_X_M_A_N = 673 +QUICKSLOT_KEY_MAPPED_MODIFIED = 673 +PASSIVE_SKILL_INFO_UPDATE = 674 +UPDATE_CLIENT_ENVIRONMENT = 675 +DIRECTION_NODE_COLLISION = 679 +USER_LASER_INFO_FOR_REMOTE = 680 +RETURN_TELEPORT_DEBUFF = 681 +CHECK_PROCESS = 682 +MEMO_IN_GAME_REQUEST = 682 +EGO_EQUIP_GAUGE_COMPLETE_RETURN = 683 +EGO_EQUIP_CREATE_UPGRADE_ITEM = 684 +EGO_EQUIP_CREATE_UPGRADE_ITEM_COST_REQUEST = 685 +EGO_EQUIP_TALK_REQUEST = 686 +EGO_EQUIP_CHECK_UPDATE_ITEM_REQUEST = 687 +INHERITANCE_INFO_REQUEST = 688 +INHERITANCE_UPGRADE_REQUEST = 689 +MIRROR_READING_SELECT_BOOK_REQUEST = 690 +LIKE_POINT = 691 +USER10TH_STREAMING_URL_REQUEST = 692 +USER_UPDATE_MAPLE_TV_SHOW_TIME = 693 +REDUCE_DOT_DAMAGE_BASE_BUFF_REQUEST = 694 +MIRROR_STUDY_COMPLETE = 695 +REQUEST_ARROW_PLATTER_OBJ = 697 +USER_TIME_EVENT_UI_OPEN_REQUEST = 698 +USER_TIME_EVENT_RESULT_REQUEST = 699 +USER_TIME_EVENT_COMPLETE_REQUEST = 700 +USER_TIME_EVENT_PASSED_TIME_SET = 701 +INVASION_SETTING_REQUEST = 702 +USER_FIELD_ATTACK_OBJ_REQUEST_BOARDING = 703 +USER_FIELD_ATTACK_OBJ_REQUEST_GET_OFF = 704 +MONSTER_BATTLE = 705 +UI_SCRIPT_REQUEST = 727 +BOSS_ARENA_MATCH_REQUEST = 728 +BOSS_ARENA_MIGRATE_REQUEST = 706 +MOB_USER_CONTROL_SKILL_Q_PUSH = 707 +MOB_USER_CONTROL_SKILL_Q_POP = 708 +MOB_USER_CONTROL_SKILL_FORCED_Q_POP = 709 +PARTY_QUEST_RANKING_REQUEST = 710 +ATTENDANCE_EVENT = 711 +ATTENDANCE_EVENT_REWARD_REQ = 712 +UI_ATTENDANCE_GHOST_CHANGE_REQ = 713 +EVENT_UI_REQ = 714 +ATTENDANCE_EVENT_SELECT_REWARD = 715 +USER_SET_CUSTOMIZE_EFFECT = 717 +USER_CUSTOMIZE_EFFECT_ITEM_MODIFY = 718 +USER_GROWTH_HELPER_REQUEST = 719 +USER_CONTENTS_MAP_REQUEST = 722 +USER_TIMER_REQ = 723 +USER_MANNEQUIN = 724 +USER_BUFFER_FLY_REQ = 725 +USER_NON_TARGET_FORCE_ATOM_ATTACK = 726 +USER_RUN_SCRIPT = 727 +CHECK_BOSS_PARTY_BY_SCRIPT = 728 +SET_GO_TO_SHINE_CITY_WAIT_FIELD = 729 +SET_STAR_PLANET_MINI_GAME_CUSTOMIZING_OPTION = 730 +STAR_PLANET_TREND_SHOP_SET_AVATAR = 731 +STAR_PLANET_TREND_SHOP_RESTORE_AVATAR = 732 +STAR_PLANET_REQUEST = 733 +STAR_PLANET_MATCHING_REENTRANCE = 734 +STAR_PLANET_RESULT_UI_EXIT_SCRIPT = 735 +MOVE_TO_URSUS_WAITING_FIELD = 736 +MONSTER_COLLECTION_COMPLETE_REWARD_REQ = 737 +MONSTER_COLLECTION_EXPLORE_REQ = 738 +UNION_RAID_RETREAT = 739 +PLAT_FORMAR_ENTER_REQUEST = 740 +STIGMA_DELIVERY_REQUEST = 741 +B_E_G_I_N__E_V_E_N_T__G_R_O_U_P = 742 +INVITATION_ACCEPT_USER = 743 +INVITATION_CANCEL_USER = 744 +EVENT_GROUP_LEAVE = 745 +B_E_G_I_N__E_V_E_N_T__G_R_O_U_P__P_A_C_K_E_T = 746 +E_N_D__E_V_E_N_T__G_R_O_U_P__P_A_C_K_E_T = 747 +E_N_D__E_V_E_N_T__G_R_O_U_P = 748 +B_E_G_I_N__E_V_E_N_T__R_A_N_K_I_N_G = 749 +EVENT_RANKING_OPEN = 750 +EVENT_RANKING_HELP = 751 +E_N_D__E_V_E_N_T__R_A_N_K_I_N_G = 752 +B_E_G_I_N__A_F_R_E_E_C_A_T_V = 753 +AFREECA_TV_BROAD_START = 754 +AFREECA_TV_BROAD_STOP = 755 +E_N_D__A_F_R_E_E_C_A_T_V = 756 +USER_SURVEY_REQUEST = 773 +NPS_INFO = 774 +USER_FLAME_ORB_REQUEST = 775 +USER__SAD_RESULT_UI__CLOSE = 776 +FREE_LOOK_CHANGE_REQUEST = 777 +FREE_LOOK_CHANGE_UI_OPEN_FAILED = 778 +USER_SMART_PHONE_CALL_REQUEST = 779 +USER_JAGUAR_CHANGE_REQUEST = 780 +FPS_LOG = 781 +PACKET_MODIFY_LOG = 782 +BATTLE_USER_AVATAR_SELECT = 783 +BATTLE_USER_ATTACK = 784 +BATTLE_USER_ATTACK_EXPIRE = 785 +BATTLE_USER_ATTACK_POSITION = 786 +BATTLE_USER_HIT = 787 +BATTLE_USER_HIT_BY_MOB = 788 +BATTLE_STAT_CORE_REQUEST = 789 +BATTLE_USER_ALIVE = 790 +USER_CONTENTS_BOOK_REQUEST = 791 +PERFORMANCE_CLIENT_LOGIN = 792 +PERFORMANCE_CLIENT_IN_FIELD = 793 +PING_CHECK_REQUEST__CLIENT_TO_GAME = 794 +PING__CLIENT_TO_GAME = 795 +PLANT_POT_CLICK = 796 +RANDOM_MISSION_REQUEST = 797 +ITEM_COLLECTION_SET_FLAG = 798 +ITEM_COLLECTION_CHECK_COMPLETE = 799 +SELF_STAT_CHANGE_REQUEST = 800 +CASH_BUFF_EVENT_CANCEL = 801 +CREATE_PSYCHIC_LOCK = 808 +RESET_PATH_PSYCHIC_LOCK = 809 +RELEASE_PSYCHIC_LOCK = 810 +RESERVE_DAMAGE_PSYCHIC_LOCK = 811 +CREATE_KINESIS_PSYCHIC_AREA = 812 +DO_ACTIVE_PSYCHIC_AREA = 813 +DEBUFF_PSYCHIC_AREA = 814 +RELEASE_PSYCHIC_AREA = 815 +PSYCHIC_OVER_REQUEST = 816 +DEC_PSYCHIC_POINT_REQUEST = 817 +TOUCH_ME_END_REQUEST = 818 +BITE_ATTACK_RESPONSE = 819 +SAVE_URSUS_SKILL = 820 +GET_SAVED_URSUS_SKILL = 821 +URSUS_SHOP_REQUEST = 822 +URSUS_PARTY_MEMBER_LIST = 822 +USER_KEY_DOWN_STEP_REQUEST = 823 +DAILY_GIFT_REQUEST = 824 +SKILL_COMMAND_LOCK_ARAN = 825 +SKILL_COMMAND_LOCK_ARK = 826 +BEAST_FORM_WING_OFF = 827 +RESET_AIR_HIT_COUNT_REQUEST = 828 +RW_ACTION_CANCEL = 833 +RELEASE_RW_GRAB = 834 +DIMENSIONAL_MIRROR_WARP_REQUEST = 835 +RW_CLEAR_CURRENT_ATTACK_REQUEST = 836 +RW_MULTI_CHARGE_CANCEL_REQUEST = 837 +FUNCTION_FOOTHOLD_MAN = 838 +SHOOT_OBJECT_CREATE_REQUEST = 840 +SHOOT_OBJECT_EXPLODE_REQUEST = 843 +LOADED_DICE_SELECTION_RESULT = 847 +SERPENT_VORTEX_INCREMENT_REQUEST = 848 +UNION_ASSIGN_REQUEST = 852 +SPOTLIGHT_STACK_REQUEST = 851 +UNION_PRESET_CHANGE = 856 +UNION_PRESET_INFO_REQUEST = 857 +ACHIEVEMENT_REQUEST = 865 +USER_TELEPORT_ROCK_ALLOWED_SETTING_REQUEST = 871 +INCREASE_SKILL_STACK_REQUEST = 882 +DIVINE_ECHO_EXPIRE_REQUEST = 883 +DIMENSIONAL_SWORD_CHANGE = 884 +INFERNO_SPHERE_FEATHER_COUNT = 885 +MONSTER_BOOK_MOB_INFO = 917 +GACHAPON_REQUEST = 919 +NEBULITE_INSERT_REQUEST = 914 +SOCKET_CREATE_REQUEST = 915 +FAMILIAR_ADD_REQUEST = 924 +FAMILIAR_SPAWN_REQUEST = 925 +FAMILIAR_RENAME_REQUEST = 926 +BEAST_TAMER_REGROUP_REQUEST = 895 +GUILD_BBS = 937 +SURPRISE_BOX = 945 +FAMILIAR_MOVE = 988 +FAMILIAR_ACTION = 989 +FAMILIAR_ATTACK = 990 +FAMILIAR_SKILL = 991 +SLASH_COMMAND = 1023 +E_N_D__U_S_E_R = 1014 +B_E_G_I_N__F_I_E_L_D = 1014 +B_E_G_I_N__L_I_F_E_P_O_O_L = 1007 +B_E_G_I_N__M_O_B = 1022 +MOB_MOVE = 1023 +MOB_APPLY_CTRL = 1024 +MOB_DROP_PICK_UP_REQUEST = 1025 +MOB_HIT_BY_OBSTACLE = 1026 +MOB_HIT_BY_OBSTACLE_ATOM = 1027 +MOB_HIT_BY_MOB = 1028 +MOB_SELF_DESTRUCT = 1029 +MOB_SELF_DESTRUCT_COLLISION_GROUP = 1030 +MOB_ATTACK_MOB = 1032 +MOB_SKILL_DELAY_END = 1033 +MOB_TIME_BOMB_END = 1034 +MOB_ESCORT_COLLISION = 1035 +MOB_REQUEST_ESCORT_INFO = 1036 +MOB_ESCORT_STOP_END_REQUEST = 1037 +MOB_AREA_ATTACK_DISEASE = 1038 +MOB_EXPLOSION_START = 1039 +MOB_LIFTING_END = 1040 +MOB_UPDATE_FIXED_MOVE_DIR = 1041 +MOB_CREATE_FIRE_WALK = 1042 +MOB_AFTER_DEAD_REQUEST = 1043 +MOB_DAMAGE_SHARE_INFO = 1044 +MOB_CREATE_AFFECTED_AREA = 1045 +MOB_DOWN_RESPONSE = 1046 +E_N_D__M_O_B = 1047 +B_E_G_I_N__N_P_C = 1058 +NPC_MOVE = 1059 +NPC_SPECIAL_ACTION = 1060 +E_N_D__N_P_C = 1061 +E_N_D__L_I_F_E_P_O_O_L = 1062 +B_E_G_I_N__D_R_O_P_P_O_O_L = 1063 +DROP_PICK_UP_REQUEST = 1064 +E_N_D__D_R_O_P_P_O_O_L = 1065 +B_E_G_I_N__R_E_A_C_T_O_R_P_O_O_L = 1065 +REACTOR_HIT = 1066 +REACTOR_CLICK = 1067 +REACTOR_RECT_IN_MOB = 1068 +REACTOR_UNK203_1047 = 1069 +REACTOR_KEY = 1070 +E_N_D__R_E_A_C_T_O_R_P_O_O_L = 1071 +B_E_G_I_N__F_I_S_H_I_N_G_Z_O_N_E_P_O_O_L = 1072 +FISHING_INFO = 1073 +FISHING_END = 1074 +E_N_D__F_I_S_H_I_N_G_Z_O_N_E_P_O_O_L = 1075 +B_E_G_I_N__P_E_R_S_O_N_A_L__O_B_J_E_C_T = 1076 +DECOMPOSER_REQUEST = 1077 +E_N_D__P_E_R_S_O_N_A_L__O_B_J_E_C_T = 1078 +B_E_G_I_N__E_V_E_N_T__F_I_E_L_D = 1079 +EVENT_START = 1080 +SNOW_BALL_HIT = 1081 +SNOW_BALL_TOUCH = 1082 +COCONUT_HIT = 1083 +TOURNAMENT_MATCH_TABLE = 1084 +PULLEY_HIT = 1085 +E_N_D__E_V_E_N_T__F_I_E_L_D = 1086 +B_E_G_I_N__M_O_N_S_T_E_R__C_A_R_N_I_V_A_L__F_I_E_L_D = 1087 +M_CARNIVAL_REQUEST = 1088 +E_N_D__M_O_N_S_T_E_R__C_A_R_N_I_V_A_L__F_I_E_L_D = 1089 +B_E_G_I_N__D_E_F_E_N_S_E__F_I_E_L_D = 1090 +DEFENSE_GAME_REQUEST = 1091 +E_N_D__D_E_F_E_N_S_E__F_I_E_L_D = 1092 +C_O_N_T_I_S_T_A_T_E = 1105 +B_E_G_I_N__P_A_R_T_Y__M_A_T_C_H = 1106 +INVITE_PARTY_MATCH = 1110 +CANCEL_INVITE_PARTY_MATCH = 1111 +PARTY_MEMBER_CANDIDATE_REQUEST = 1112 +URSUS_PARTY_MEMBER_CANDIDATE_REQUEST = 1113 +PARTY_CANDIDATE_REQUEST = 1114 +INTRUSION_FRIEND_CANDIDATE_REQUEST = 1115 +INTRUSION_LOBBY_CANDIDATE_REQUEST = 1116 +END_PARTY_MATCH = 1117 +REQUEST_FOOT_HOLD_MOVE = 1118 +GATHER_END_NOTICE = 1120 +ACT_CHANGE_REACTOR_USE_REQUST = 1121 +USER_ANTI_MACRO_BOMB_REQUEST = 1122 +MAKE_ENTER_FIELD_PACKET_FOR_QUICK_MOVE = 1123 +RUNE_STONE_USE_REQ = 1124 +RUNE_STONE_SKILL_REQ = 1119 +OBSTACLE_ATOM_COLLISION = 1127 +TIMER_GAUGE_TIMEOUT = 1128 +FALLING_CATCHER_HACK_CHECK = 1129 +COOK_GAME_REQUEST = 1130 +FPS_MODE_EXIT_REQUEST = 1131 +MAKE_ENTER_FIELD_PACKET_FOR_MIRROR_DUNGEON = 1132 +LEAVE_MIRROR_DUNGEON = 1133 +PEACEMAKER_TRAVEL_CONTACT_COUNT = 1134 +PEACEMAKER_EXPLOSION_CONTACT_COUNT = 1135 +ILLIUM_RESONANCE_LINK = 1139 +B_E_G_I_N__R_H_Y_T_H_M_G_A_M_E = 1131 +RHYTHM_GAME_HIT_NOTE = 1132 +RHYTHM_GAME_START_REGION = 1133 +RHYTHM_GAME_NPC_ACTION_REQUEST = 1138 +E_N_D__R_H_Y_T_H_M_G_A_M_E = 1140 +B_E_G_I_N__M_O_U_N_T_A_I_N_R_I_D_I_N_G = 1141 +MOUNTAIN_RIDING_HP_INFO = 1142 +MOUNTAIN_RIDING_MOB_INFO = 1143 +E_N_D__M_O_U_N_T_A_I_N_R_I_D_I_N_G = 1144 +B_E_G_I_N__P_I_R_A_N_H_A = 1145 +PIRANHA_INFO = 1146 +PIRANHA_DIE = 1147 +PIRANHA_DAMAGE = 1148 +PIRANHA_PREPARE = 1149 +E_N_D__P_I_R_A_N_H_A = 1150 +B_E_G_I_N__R_O_B_B_I_N_S = 1151 +ROBBINS__INC_BOMB = 1152 +ROBBINS__DEC_BOMB = 1153 +ROBBINS__TOSS_BOMB = 1154 +E_N_D__R_O_B_B_I_N_S = 1155 +B_E_G_I_N__F_A_L_L_I_N_G_S_T_O_N_E = 1156 +FALLING_STONE_INFO = 1157 +FALLING_STONE_HP_INFO = 1158 +FALLING_STONE_PREPARE = 1159 +E_N_D__F_A_L_L_I_N_G_S_T_O_N_E = 1160 +B_E_G_I_N__B_A_T_T_L_E_F_I_E_L_D = 1161 +BATTLE_FIELD_DAMAGE = 1162 +BATTLE_FIELD_SHEEP_REVIVAL_REQ = 1163 +BATTLE_FIELD_SHEEP_REVIVE = 1164 +E_N_D__B_A_T_T_L_E_F_I_E_L_D = 1165 +B_E_G_I_N__B_O_S_S_A_R_E_N_A = 1166 +BOSS_ARENA_SELECT_BOSS = 1167 +BOSS_ARENA_SELECT_SKILL = 1168 +BOSS_ARENA_SELECT_DIFFICULTY = 1169 +BOSS_ARENA_SELECT_CONFIRM = 1170 +E_N_D__B_O_S_S_A_R_E_N_A = 1171 +B_E_G_I_N__C_A_T_A_P_U_L_T = 1172 +CATAPULT__UPGRADE_SKILL = 1173 +E_N_D__C_A_T_A_P_U_L_T = 1174 +FIELD_ATTACK_OBJ_PUSH_ACT = 1175 +FIELD_RESPAWN = 1176 +B_E_G_I_N__S_O_U_L__D_U_N_G_E_O_N = 1177 +SOUL_ITEM_USE = 1178 +SOUL_ITEM_USE_VOTE = 1179 +SOUL_DUNGEON_SUMM_SOUL_BOSS = 1180 +E_N_D__S_O_U_L__D_U_N_G_E_O_N = 1181 +B_E_G_I_N__S_P_A_C_E_M_O_O_N_R_A_B_B_I_T = 1182 +SPACE_MOON_RABBIT_HIT_EFF = 1183 +SPACE_MOON_RABBIT_DAMAGE = 1184 +E_N_D__S_P_A_C_E_M_O_O_N_R_A_B_B_I_T = 1185 +B_E_G_I_N__H_U_N_D_R_E_D_B_I_N_G_O = 1186 +H_BINGO_CHECK_NUMBER = 1187 +H_BINGO_CHECK_BINGO = 1188 +E_N_D__H_U_N_D_R_E_D_B_I_N_G_O = 1189 +B_E_G_I_N__T_Y_P_I_N_G_G_A_M_E = 1190 +TYPING_GAME_CHECK_MSG = 1191 +TYPING_GAME_WORD_MOB_ATTACK = 1192 +TYPING_GAME_LEVEL_SELECT = 1193 +TYPING_GAME_SKILL_ATTACK = 1194 +TYPING_GAME_FIELD_OUT = 1195 +E_N_D__T_Y_P_I_N_G_G_A_M_E = 1196 +B_E_G_I_N__H_U_N_D_R_E_D_O_X_Q_UI_Z = 1197 +H_OX_QUIZ_SELECTED = 1198 +E_N_D__H_U_N_D_R_E_D_O_X_Q_UI_Z = 1199 +B_E_G_I_N__S_T_A_R_P_L_A_N_E_T_R_P_S = 1200 +S_P_RPS_GAME_USER_SELECT = 1201 +S_P_RPS_GAME_ANSWER = 1202 +S_P_RPS_GAME_LEAVE = 1203 +E_N_D__S_T_A_R_P_L_A_N_E_T_R_P_S = 1204 +B_E_G_I_N__S_I_D_E_S_C_R_O_L_L_F_L_Y_S_H_O_O_T_I_N_G = 1205 +SSFS_HIT_USER = 1206 +SSFS_LETHAL_ATTACK = 1207 +SSFS_EXIT = 1208 +E_N_D__S_I_D_E_S_C_R_O_L_L_F_L_Y_S_H_O_O_T_I_N_G = 1209 +B_E_G_I_N__F_I_E_L_D_S_T_A_T_E = 1210 +STAR_PLANET__H_BINGO_CHECK_NUMBER = 1211 +STAR_PLANET__H_BINGO_CHECK_BINGO = 1212 +STAR_PLANET__H_BINGO_SEND_NUMBER = 1213 +STAR_PLANET__H_RPS_SELECTED = 1214 +STAR_PLANET__GROUP_DANCE_SELECTED = 1215 +STAR_PLANET__GROUP_DANCE_CANCEL = 1216 +E_N_D__F_I_E_L_D_S_T_A_T_E = 1217 +B_E_G_I_N__M_O_M_E_N_T_S_W_I_M_A_R_E_A = 1218 +MOMENT_SWIM_AREA__WATER_LEVEL = 1219 +E_N_D__M_O_M_E_N_T_S_W_I_M_A_R_E_A = 1220 +B_E_G_I_N__G_H_O_S_T_P_A_R_K = 1221 +GHOST_PARK_USE_RUNE_REQ = 1222 +GHOST_PARK_RUNE_HEAL_REQ = 1223 +GHOST_PARK_HIT_BULLET = 1224 +E_N_D__G_H_O_S_T_P_A_R_K = 1225 +B_E_G_I_N__F_I_E_L_D__U_R_U_S = 1226 +URSUS_SAVE_DEADLY_USER = 1227 +E_N_D__F_I_E_L_D__U_R_U_S = 1228 +FIELD_SKILL_USE_REQUEST = 1229 +FIELD_WEATHER__MSG = 1230 +FIELD_STAT_Q_R_EX_DAY = 1231 +B_E_G_I_N__P_O_L_O_F_R_I_T_O_B_O_U_N_T_Y_H_U_N_T_I_N_G = 1232 +POLO_FRITO_BOUNTY_HUNTING_REQUEST = 1233 +E_N_D__P_O_L_O_F_R_I_T_O_B_O_U_N_T_Y_H_U_N_T_I_N_G = 1234 +B_E_G_I_N__P_O_L_O_F_R_I_T_O_T_O_W_N_D_E_F_E_N_S_E = 1235 +POLO_FRITO_TOWN_DEFENSE_REQUEST = 1236 +E_N_D__P_O_L_O_F_R_I_T_O_T_O_W_N_D_E_F_E_N_S_E = 1237 +B_E_G_I_N__P_O_L_O_F_R_I_T_O_C_O_U_R_T_S_H_I_P_D_A_N_C_E = 1238 +POLO_FRITO_COURTSHIP_DANCE_RESULT = 1239 +E_N_D__P_O_L_O_F_R_I_T_O_C_O_U_R_T_S_H_I_P_D_A_N_C_E = 1240 +B_E_G_I_N__B_O_S_S__D_E_M_I_A_N__F_L_Y_I_N_G_S_W_O_R_D = 1241 +DEMIAN_OBJECT_MAKE_ENTER_ACK = 1245 +DEMIAN_OBJECT_NODE_END = 1246 +DEMIAN_OBJECT_ERR__RECREATE = 1247 +E_N_D__B_O_S_S__D_E_M_I_A_N__F_L_Y_I_N_G_S_W_O_R_D = 1248 +E_N_D__F_I_E_L_D = 1249 +CHECK_S_P_W_CREATE_NEW_CHARACTER = 1261 +SET_S_P_W = 1262 +B_E_G_I_N__B_L_A_C_K__M_A_G_E = 1329 +BLACK_MAGE_ORB_HIT = 1329 +E_N_D__B_L_A_C_K__M_A_G_E = 1330 +GOLLUX_MINI_MAP_LEAVE_REQUEST = 1334 +B_E_G_I_N__C_A_S_H_S_H_O_P = 1379 +CASH_SHOP_CHARGE_PARAM_REQUEST = 1380 +CASH_SHOP_QUERY_CASH_REQUEST = 1381 +CASH_SHOP_CASH_ITEM_REQUEST = 1382 +CASH_SHOP_CHECK_COUPON_REQUEST = 1383 +CASH_SHOP_MEMBER_SHOP_REQUEST = 1385 +CASH_SHOP_GIFT_MATE_INFO_REQUEST = 1386 +CASH_SHOP_SEARCH_LOG = 1387 +CASH_SHOP_COODINATION_REQUEST = 1388 +CASH_SHOP_CHECK_MILEAGE_REQUEST = 1389 +CASH_SHOP_NAVER_USAGE_INFO_REQUEST = 1390 +M_V_P__DAILY_PACK__REQUEST = 1391 +M_V_P__SPECIAL_PACK__REQUEST = 1392 +CASH_SHOP_ACTION = 1395 +CASH_SHOP_BUTTON_PRESS = 1396 +E_N_D__C_A_S_H_S_H_O_P = 1397 +B_E_G_I_N__R_A_I_S_E = 1398 +RAISE_REFRESH = 1399 +RAISE_UI_STATE = 1400 +RAISE_INC_EXP = 1401 +RAISE_ADD_PIECE = 1402 +E_N_D__R_A_I_S_E = 1403 +SEND_MATE_MAIL = 1404 +REQUEST_GUILD_BOARD_AUTH_KEY = 1405 +REQUEST_CONSULT_AUTH_KEY = 1406 +REQUEST_CLASS_COMPETITION_AUTH_KEY = 1407 +REQUEST_WEB_BOARD_AUTH_KEY = 1408 +IRBOX_EVENT = 1409 +B_E_G_I_N__I_T_E_M_U_P_G_R_A_D_E = 1413 +GOLD_HAMMER_REQUEST = 1414 +GOLD_HAMMER_COMPLETE = 1415 +E_N_D__I_T_E_M_U_P_G_R_A_D_E = 1416 +B_E_G_I_N__B_A_T_T_L_E_R_E_C_O_R_D = 1418 +BATTLE_RECORD_ON_OFF_REQUEST = 1419 +BATTLE_RECORD_SKILL_DAMAGE_LOG = 1420 +E_N_D__B_A_T_T_L_E_R_E_C_O_R_D = 1421 +B_E_G_I_N__F_A_R_M = 1421 +INSERT_FARM_OBJECT = 1422 +DELETE_FARM_OBJECT = 1423 +INSERT_FARM_TILE = 1424 +DELETE_FARM_TILE = 1425 +TRANSFER_FARM_FIELD = 1426 +BUY_FARM_OBJECT = 1427 +SEL_FARM_OBJECT = 1428 +MY_HOUSE_UPGRADE = 1428 +FARM_ADMIN_COMMAND = 1429 +REQUEST_QUEST_COMPLETE = 1430 +CHECK_FARM_NAME = 1431 +REQUEST_INTERACT_OBJECT = 1432 +REQUEST_CONSUME_OBJECT = 1433 +REQUEST_CLICK_NPC = 1434 +REQUEST_RANDOM_FARM = 1435 +REQUEST_FARM_VISIT = 1436 +REQUEST_ADD_FARM_FRIEND = 1437 +FARM_IN_GAME_FRIEND_REQUEST = 1438 +REQUEST_DELETE_FARM_FRIEND = 1439 +REQUEST_ADD_BLACK_LIST = 1440 +REQUEST_DELETE_BLACK_LIST = 1441 +REQUEST_FARM_INFO_UI = 1442 +CHECK_FARM_NAME_BY_CONSUME = 1443 +REQUEST_AUTO_HARVEST = 1444 +REQUEST_SOUL_RECHARGE = 1445 +REQUEST_TRANSFER_FARM_BY_NAME = 1446 +MY_FARM_MONSTER_REQUEST = 1447 +FARM_MONSTER_COMBINE = 1448 +FARM_MONSTER_SET_NAME_REQUEST = 1449 +FARM_MONSTER_CARE = 1450 +FARM_MONSTER_PLAY = 1451 +FARM_MONSTER_RELEASE = 1452 +FARM_MONSTER_SEARCH_REQUEST = 1453 +FARM_MONSTER_POS_RECODE = 1454 +FARM_MONSTER_LOCKER_REQUEST = 1455 +FARM_MONSTER_LIFE_EXTEND = 1456 +PHOTO_UPDATE = 1457 +PHOTO_GET_REQUEST = 1458 +MY_HOME_SEND_NOTICE_REQUEST = 1459 +MY_HOME_LOAD_MAIN_LOG_REQUEST = 1460 +MY_HOME_DELETE_LOG_REQUEST = 1461 +FARM_WHISPER = 1462 +FARM_GROUP_MESSAGE = 1463 +REQUEST_FARM_FRIEND_RECOMMEND = 1464 +FARM_REQUEST_IN_GAME_INFO_SET = 1465 +FARM_REQUEST_IN_GAME_INFO_MOD = 1466 +REQUEST_FARM_FRIEND_INFO = 1467 +REQUEST_FARM_TODAY = 1468 +REQUEST_FIRST_ENTER_REWARD = 1469 +CHECK_ADMIN_ACCOUNT_LOG = 1470 +E_N_D__F_A_R_M = 1471 +CHARACTER_LIST_REQUEST = 1472 +COPY_CHARACTER_TO_TEST_REQUEST = 1473 +REWARD_REQUEST = 1481 +VORAGE_REQUEST = 1483 +NO = 1450 diff --git a/properties/LP_207-1.properties b/properties/LP_207-1.properties new file mode 100755 index 0000000..d139a89 --- /dev/null +++ b/properties/LP_207-1.properties @@ -0,0 +1,1509 @@ +CHECK_PASSWORD_RESULT = 0 +WORLD_INFORMATION = 1 +LATEST_CONNECTED_WORLD = 2 +RECOMMENDED_WORLD_MESSAGE = 3 +SET_CLIENT_KEY = 4 +SET_PHYSICAL_WORLD_ID = 5 +SELECT_WORLD_BUTTON = 6 +SELECT_WORLD_RESULT = 7 +SELECT_CHARACTER_RESULT = 8 +ACCOUNT_INFO_RESULT = 9 +CREATE_MAPLE_ACCOUNT_RESULT = 10 +CHECK_DUPLICATED_ID_RESULT = 11 +CREATE_NEW_CHARACTER_RESULT = 12 +DELETE_CHARACTER_RESULT = 13 +RESERVED_DELETE_CHARACTER_RESULT = 14 +RESERVED_DELETE_CHARACTER_CANCEL_RESULT = 15 +SET_CHARACTER_ID = 16 +MIGRATE_COMMAND = 17 +ALIVE_REQ = 18 +PING_CHECK_RESULT = 20 +AUTH_CODE_CHANGED = 21 +AUTH_MESSAGE = 22 +SECURITY_PACKET = 23 +PRIVATE_SERVER_PACKET = 25 +CHANGE_SPW_RESULT = 26 +ALBA_RESULT = 31 +ILLEGAL_PROGRAM = 35 +SET_AUTO_SELECTED_WORLD = 36 +WORLD_INFO_FOR_SHINING_RESULT = 37 +HOTFIX = 40 +OPCODE_ENCRYPTION = 41 +IDK_BUT_CRASHES = 42 +SERVER_STATUS = 54 +TRY_AGAIN = 55 +FREEZE_CLIENT_ON_BLACK_SCREEN = 56 +SPW_SET_RESULT = 58 +SPW_DESET_RESULT = 59 +AUTH_SERVER = 60 +AUTH_INFO_REQUEST = 62 +INCORRECT_PIC = 63 +CHAT_LOGIN_RESULT = 2 +CHAT_LOGOUT_RESULT = 12 +CHAT_ALIVE_REQ = 14 +CHAT_ENTER_GUILD_CHAT_ROOM_RESULT = 16 +CHAT_GUILD_CHAT_MESSAGE = 19 +CHAT_FRIEND_CHAT_MESSAGE = 20 +CHAT_BLOCK_GUILD_FRIEND_CHAT = 29 +SET_BACK_EFFECT = 72 +SET_MAP_TAGGED_OBJECT_VISISBLE = 73 +SET_MAP_TAGGED_OBJECT_SMOOTH_VISIBLE = 74 +SET_MAP_TAGGED_OBJECT_ANIMATION = 75 +SET_MAP_OBJECT_ANIMATION = 76 +SET_MAP_OBJECT_VISIBLE = 77 +SET_MAP_OBJECT_MOVE = 78 +SET_MAP_OBJECT_CREATE_LAYER = 79 +SET_SPINE_BACK_EFFECT = 80 +SET_SPINE_OBJECT_EFFECT = 81 +CREATE_SPINE_RECT_EVENT = 82 +REMOVE_SPINE_RECT_EVENT = 83 +SPINE_RE_ADD_BACK_EVENT = 84 +SPINE_RE_ADD_OBJECT_EVENT = 85 +CREATE_CAMERA_CTRL_ZONE = 86 +REMOVE_CAMERA_CTRL_ZONE = 87 +UNK69 = 88 +RELOAD_BACK = 89 +INVENTORY_OPERATION = 92 +INVENTORY_GROW = 93 +STAT_CHANGED = 94 +TEMPORARY_STAT_SET = 95 +TEMPORARY_STAT_RESET = 96 +UNK205_98 = 97 +FORCED_STAT_SET = 98 +FORCED_STAT_RESET = 99 +CHANGE_SKILL_RECORD_RESULT = 100 +CHANGE_STEAL_MEMORY_RESULT = 101 +USER_DAMAGE_ON_FALLING_CHECK = 102 +PERSONAL_SHOP_BUY_CHECK = 103 +MOB_DROP_MESO_PICKUP = 104 +BREAK_TIME_FIELD_ENTER = 105 +RUNE_ACT_SUCCESS = 106 +RESULT_STEAL_SKILL_LIST = 107 +SKILL_USE_RESULT = 108 +EXCL_REQUEST = 109 +GIVE_POPULARITY_RESULT = 110 +MESSAGE = 111 +MEMO_RESULT = 112 +MAP_TRANSFER_RESULT = 113 +UNK203_111 = 114 +ANTI_MACRO_RESULT = 115 +ANTI_MACRO_BOMB_RESULT = 116 +UNK_200_113 = 117 +UNK_200_114 = 119 +UNK_200_115 = 120 +UNK_203_117 = 121 +CLAIM_RESULT = 123 +SET_CLAIM_SVR_AVAILABLE_TIME = 124 +CLAIM_SVR_STATUS_CHANGED = 125 +UNK203_122 = 126 +STAR_PLANET_USER_COUNT = 127 +SET_TAMING_MOB_INFO = 128 +QUEST_CLEAR = 129 +ENTRUSTED_SHOP_CHECK_RESULT = 130 +SKILL_LEARN_ITEM_RESULT = 131 +SKILL_RESET_ITEM_RESULT = 132 +ABILITY_RESET_ITEM_RESULT = 133 +EXP_CONSUME_ITEM_RESULT = 134 +EXP_ITEM_GET_RESULT = 135 +CHAR_SLOT_INC_RESULT = 136 +GATHER_ITEM_RESULT = 137 +SORT_ITEM_RESULT = 138 +CHARACTER_INFO = 141 +PARTY_RESULT = 142 +PARTY_MEMBER_CANDIDATE_RESULT = 143 +URSUS_PARTY_MEMBER_CANDIDATE_RESULT = 144 +PARTY_CANDIDATE_RESULT = 145 +URSUS_PARTY_RESULT = 146 +INTRUSION_FRIEND_CANDIDATE_RESULT = 147 +INTRUSION_LOBBY_CANDIDATE_RESULT = 148 +EXPEDITION_RESULT = 150 +FRIEND_RESULT = 151 +GUILD_REQUEST = 153 +GUILD_RESULT = 154 +ALLIANCE_RESULT = 155 +TOWN_PORTAL = 156 +BROADCAST_MSG = 157 +INCUBATOR_RESULT = 158 +INCUBATOR_HOT_ITEM_RESULT = 159 +SHOP_SCANNER_RESULT = 160 +SHOP_LINK_RESULT = 161 +MARRIAGE_REQUEST = 162 +MARRIAGE_RESULT = 163 +WEDDING_GIFT_RESULT = 164 +UNK200_158 = 165 +NOTIFY_MARRIED_PARTNER_MAP_TRANSFER = 166 +CASH_PET_FOOD_RESULT = 167 +CASH_PET_PICK_UP_ON_OFF_RESULT = 168 +CASH_PET_SKILL_SETTING_RESULT = 169 +CASH_LOOK_CHANGE_RESULT = 170 +CASH_PET_DYEING_RESULT = 171 +SET_WEEK_EVENT_MESSAGE = 172 +SET_POTION_DISCOUNT_RATE = 173 +BRIDLE_MOB_CATCH_FAIL = 174 +IMITATED_NPC_RESULT = 175 +IMITATED_NPC_DATA = 177 +MONSTER_BOOK_SET_CARD = 178 +MONSTER_BOOK_SET_COVER = 179 +HOUR_CHANGED = 180 +MINIMAP_ON_OFF = 181 +CONSULT_AUTH_KEY_UPDATE = 182 +CLASS_COMPETITION_AUTH_KEY_UPDATE = 183 +WEB_BOARD_AUTH_KEY_UPDATE = 184 +SESSION_VALUE = 185 +PARTY_VALUE = 186 +FIELD_SET_VARIABLE = 187 +FIELD_VALUE = 188 +BONUS_EXP_RATE_CHANGED = 189 +NOTIFY_LEVEL_UP = 190 +NOTIFY_WEDDING = 191 +NOTIFY_JOB_CHANGE = 192 +SET_BUY_EQUIP_EXT = 193 +SET_PASSENGER_REQUEST = 194 +SCRIPT_PROGRESS_MESSAGE_BY_SOUL = 195 +SCRIPT_PROGRESS_MESSAGE = 196 +SCRIPT_PROGRESS_ITEM_MESSAGE = 197 +STATIC_SCREEN_MESSAGE = 198 +OFF_STATIC_SCREEN_MESSAGE = 199 +WEATHER_EFFECT_NOTICE = 200 +WEATHER_EFFECT_NOTICE_Y = 201 +PROGRESS_MESSAGE_FONT = 203 +DATA_CRC_CHECK_FAILED = 204 +SHOW_SLOT_MESSAGE = 205 +WILD_HUNTER_INFO = 206 +ZERO_INFO = 207 +ZERO_WP = 208 +ZERO_INFO_SUB_HP = 209 +UI_OPEN = 210 +CLEAR_ANNOUNCED_QUEST = 211 +RESULT_INSTANCE_TABLE = 212 +COOL_TIME_SET = 213 +ITEM_POT_CHANGE = 214 +SET_ITEM_COOL_TIME = 215 +SET_AD_DISPLAY_INFO = 216 +SET_AD_DISPLAY_STATUS = 217 +SET_SON_OF_LINKED_SKILL_RESULT = 218 +LINK_SKILL_RESULT = 219 +UNLINKED_SKILL_INFO = 220 +LINKED_SKILL_INFO = 221 +SET_MAPLE_STYLE_INFO = 222 +SET_BUY_LIMIT_COUNT = 223 +RESET_BUY_LIMIT_COUNT = 224 +UNK_200_218 = 225 +UNK_200_219 = 226 +UPDATE_UI_EVENT_LIST_INFO = 227 +DOJANG_RANKING_RESULT = 228 +SHUTDOWN_MESSAGE = 231 +RESULT_SET_STEAL_SKILL = 232 +SLASH_COMMAND = 233 +START_NAVIGATION = 234 +UNK205_234 = 235 +FUNCKEY_SET_BY_SCRIPT = 236 +CHARACTER_POTENTIAL_SET = 237 +CHARACTER_POTENTIAL_RESET = 238 +CHARACTER_HONOR_EXP = 239 +READY_FOR_RESPAWN = 240 +READY_FOR_RESPAWN_BY_POINT = 241 +OPEN_READY_FOR_RESPAWN_UI = 242 +CHARACTER_HONOR_GIFT = 243 +CROSS_HUNTER_COMPLETE_RESULT = 244 +CROSS_HUNTER_SHOP_RESULT = 245 +UNK_218 = 246 +SET_CASH_ITEM_NOTICE = 247 +SET_SPECIAL_CASH_ITEM = 248 +SHOW_EVENT_NOTICE = 249 +BOARD_GAME_RESULT = 250 +YUT_GAME_RESULT = 251 +VALUE_PACK_RESULT = 252 +NAVI_FLYING_RESULT = 253 +SET_EXCL_REQUEST_SENT = 254 +CHECK_WEDDING_EX_RESULT = 255 +BINGO_RESULT = 256 +BINGO_CASSANDRA_RESULT = 257 +UPDATE_VIP_GRADE = 258 +MESO_RANGER_RESULT = 259 +SET_MAPLE_POINT = 260 +SET_MIRACLE_TIME_INFO = 262 +HYPER_SKILL_RESET_RESULT = 263 +GET_SERVER_TIME = 264 +GET_CHARACTER_POSITION = 265 +UNK_200_259 = 267 +UNK_200_260 = 268 +RETURN_EFFECT_CONFIRM = 269 +RETURN_EFFECT_MODIFIED = 270 +WHITE_ADDITIONAL_CUBE_RESULT = 271 +BLACK_CUBE_RESULT = 272 +MEMORIAL_CUBE_RESULT = 273 +MEMORIAL_CUBE_MODIFIED = 274 +DRESS_UP_INFO_MODIFIED = 277 +UNK_200_270 = 278 +RESET_STATE_FOR_OFF_SKILL = 279 +SET_OFF_STATE_FOR_OFF_SKILL = 280 +ISSUE_RELOGIN_COOKIE = 281 +AVATAR_PACK_TEST = 282 +EVOLVING_RESULT = 283 +ACTION_BAR_RESULT = 284 +GUILD_SEARCH_RESULT = 286 +HALLOWEEN_CANDY_RANKING_RESULT = 288 +GET_REWARD_RESULT = 289 +MENTORING = 290 +GET_LOTTERY_RESULT = 291 +CHECK_PROCESS_RESULT = 292 +COMPLETE_NPC_SPEECH_SUCCESS = 293 +COMPLETE_SPECIAL_CHECK_SUCCESS = 294 +SET_ACCOUNT_INFO = 295 +SET_GACHAPON_FEVER_TIME_INFO = 296 +AVATAR_MEGAPHONE_RES = 297 +SET_AVATAR_MEGAPHONE = 298 +CLEAR_AVATAR_MEGAPHONE = 299 +REQUEST_EVENT_LIST = 300 +LIKE_POINT = 301 +SIGN_ERROR_ACK = 302 +ASK_AFTER_ERROR_ACK = 303 +EVENT_NAME_TAG = 304 +ACQUIRE_EVENT_NAME_TAG = 305 +JOB_FREE_CHANGE_RESULT = 306 +EVENT_LOTTERY_OPEN = 307 +EVENT_LOTTERY_RESULT = 308 +UNK_200_309 = 317 +SCREEN_MSG = 318 +LIMIT_GOODS_NOTICE_RESULT = 319 +MONSTER_BATTLE_SYSTEM_RESULT = 320 +MONSTER_BATTLE_COMBAT_RESULT = 321 +UNIVERSE_BOSS_IMPOSSIBLE = 323 +CASH_SHOP_PREVIEW_INFO = 324 +CHANGE_SOUL_COLLECTION_RESULT = 325 +SELECT_SOUL_COLLECTION_RESULT = 326 +MASTER_PIECE_REWARD = 325 +PENDANT_SLOT_INC_RESULT = 326 +BOSS_ARENA_MATCH_SUCCESS = 327 +BOSS_ARENA_MATCH_FAIL = 328 +BOSS_ARENA_MATCH_REQUEST_DONE = 329 +USER_SOUL_MATCHING = 330 +CATAPULT_UPGRADE_SKILL = 331 +CATAPULT_RESET_SKILL = 332 +PARTY_QUEST_RANKING_RESULT = 333 +SET_COORDINATION_CONTEST_INFO = 334 +WORLD_TRANSFER_RESULT = 335 +TRUNK_SLOT_INC_RESULT = 336 +ELITE_MOB_WMI = 337 +RANDOM_PORTAL_NOTICE = 338 +UNK_200_332 = 339 +UNK_200_333 = 340 +EQUIPMENT_ENCHANT = 341 +TOP_TOWER_RANK_RESULT = 342 +FRIEND_TOWER_RANK_RESULT = 343 +TOWER_RESULT_UI_OPEN = 344 +MANNEQUIN_RESULT = 345 +UNK_200_338 = 346 +UNK_200_339 = 347 +IRON_BOX_PACKET = 348 +CREATE_KOREAN_JUMPING_GAME = 349 +CREATE_SWING_GAME = 340 +UPDATE_MAPLE_TV_SHOW_TIME = 351 +RETURN_TO_TITLE = 352 +RETURN_TO_CHARACTER_SELECT = 353 +FLAME_WIZARD_FLAME_WALK_EFFECT = 354 +FLAME_WIZARD_FLARE_BLINK = 355 +SUMMONED_AVATAR_SYNC = 356 +CASH_SHOP_EVENT_INFO = 357 +BLACK_LIST = 358 +OPEN_UI_TEST = 359 +SWITCH_BLACK_LIST_VIEW = 360 +SCROLL_UPGRADE_FEVER_TIME = 361 +TEXT_EQUIP_INFO = 362 +TEXT_EQUIP_UI_OPEN = 363 +UI_STAR_PLANET_MINI_GAME_RESULT = 364 +UI_STAR_PLANET_TREND_SHOP = 365 +UI_STAR_PLANET_MINI_GAME_QUEUE = 366 +STAR_PLANET_ROUND_INFO = 368 +STAR_PLANET_RESULT = 369 +UNK203_365 = 370 +UNK203_366 = 371 +UNK203_367 = 372 +UNK203_368 = 373 +UNK203_369 = 374 +BACK_SPEED_CTRL = 375 +SET_MAZE_AREA = 376 +CHARACTER_BURNING = 377 +BATTLE_STAT_CORE_INFO = 378 +BATTLE_STAT_CORE_ACK = 379 +GACHAPON_TEST_RESULT = 380 +MASTER_PIECE_TEST_RESULT = 381 +ROYAL_STYLE_TEST_RESULT = 382 +BEAUTY_COUPON_TEST_RESULT = 383 +LUNA_CRYSTAL_TEST_RESULT = 384 +NICK_SKILL_EXPIRED = 385 +RANDOM_MISSION_RESULT = 386 +ON_12TH_TREASURE_RESULT = 387 +ON_12TH_TREASURE_BUFF = 388 +ITEM_COLLECTION_RESULT = 389 +CHECK_COLLECTION_COMPLETE_RESULT = 390 +ITEM_COLLECTION_LIST = 391 +RECEIVE_TOADS_HAMMER_REQUEST_RESULT = 392 +RECEIVE_HYPER_STAT_SKILL_RESET_RESULT = 393 +GET_SAVED_URSUS_SKILL = 394 +INVENTORY_OPERATION_RESULT = 395 +SET_ROLE_PLAYING_CHARACTER_INFO = 396 +MVP_ALARM = 397 +MONSTER_COLLECTION_RESULT = 398 +TOWER_CHAIR_SETTING_RESULT = 399 +NEED_CLIENT_RESPONSE = 400 +CHARACTER_MODIFIED = 401 +UNK_364 = 402 +TRADE_KING_SHOP_ITEM = 403 +TRADE_KING_SHOP_RES = 404 +PLATFORMAR_ENTER_RESULT = 405 +PLATFORMAR_OXYZEN = 406 +UNK203_402 = 407 +RECYCLE_ITEM = 408 +UNK203_404 = 409 +MATRIX_UPDATE = 410 +NODE_STONE_OPEN_RESULT = 411 +NODE_ENHANCE_RESULT = 412 +NODE_DISASSEMBLE_RESULT = 413 +NODE_CRAFT_RESULT = 414 +NODE_VANISHED = 415 +AUCTION_MESSAGE = 416 +UNK203_412 = 417 +UNK203_413 = 418 +UNK203_414 = 419 +INAPPROPRIATE_BAN_MSG = 420 +OPEN_CHUCHU_SHOP = 421 +RESET_CHUCHU_INVENTORY = 422 +RESET_CHUCHU_INVENTORY_2 = 423 +UNK203_419 = 424 +UNK203_420 = 425 +UNK203_421 = 426 +UNION_ASSIGN_RESULT = 427 +UNK203_423 = 428 +UNK203_424 = 429 +UNION_PRESET_INFO_RESULT = 430 +UNK203_426 = 431 +UNK203_427 = 432 +UNK203_428 = 433 +UNK203_429 = 434 +UNK_203_430 = 435 +UNK203_431 = 436 +UNK203_432 = 437 +UNK203_433 = 438 +COMBAT_POWER_MSG = 439 +UNK203_434 = 439 +UNK203_435 = 440 +UNK203_436 = 441 +UNK203_437 = 442 +CREATE_INGAME_CHAR_RESULT = 443 +UNK203_439 = 444 +UNK203_440 = 445 +TRAINEE_INFO = 446 +UNK203_442 = 465 +UNK203_443 = 467 +UNK203_444 = 468 +UNK203_445 = 469 +UNK203_446 = 470 +POTION_POT_RESULT = 471 +UNK203_449 = 473 +USER_REPORT_RESULT = 474 +TRADE_MESO_LIMIT_REACHED = 476 +UNK203_453 = 477 +GUILD_BBS_RESULT = 478 +UNK203_455 = 479 +UNK203_456 = 480 +UNK203_457 = 481 +UNK203_458 = 482 +UNK203_459 = 483 +CRUSADER_MEDAL_FAIL = 484 +UNK203_461 = 485 +UNK203_462 = 486 +REDUCE_POTIONS_PRICE_BY_EQUIP = 487 +UNK205_488 = 489 +TRANSFER_REQUEST_RESULT = 490 +PERSONAL_SHOP_SHUTDOWN_BY_GM_MSG = 491 +HACK_BLOCK_MSG = 492 +PREMIUM_SILVER_BOX_RESULT = 493 +NEW_YEAR_CARD_SEND_RESULT = 494 +GIFT_BLESSING_RESULT = 495 +CREW_RESULT = 497 +TRANSFORM_POTION = 498 +CANCEL_REQUEST_RESULT = 499 +MAPLE_TEAM_LETTER = 500 +UNK203_477 = 501 +PAM_SONG_INTERVENE = 502 +RELOAD_MAP = 503 +SUMMON_SKILL_RESULT = 507 +UNK203_485 = 508 +UNK203_486 = 509 +UNK203_487 = 510 +MAGIC_GACHAPON_WHEEL_MSG = 511 +SOME_REWARD = 512 +ACCEPT_SOME_QUEST = 513 +UNK203_491 = 514 +UNK203_492 = 515 +UNK203_493 = 516 +UNK203_494 = 517 +UNK203_495 = 518 +UNK203_496 = 519 +UNK203_499 = 522 +UNK203_500 = 523 +UNK203_501 = 524 +UNK203_502 = 525 +UNK203_503 = 526 +UNK203_504 = 527 +UNK203_505 = 528 +UNK203_506 = 529 +UNK203_507 = 530 +MACRO_SYS_DATA_INIT = 531 +SET_FIELD = 532 +SET_FARM_FIELD = 533 +SET_AUCTION_HOUSE_FIELD = 534 +SET_CASH_SHOP = 536 +TRANSFER_FIELD_REQ_IGNORED = 537 +TRANSFER_CHANNEL_REQ_IGNORED = 538 +TRANSFER_PVP_REQ_IGNORED = 539 +FIELD_SPECIFIC_DATA = 540 +GROUP_MESSAGE = 541 +ITEM_LINKED_GROUP_MESSAGE = 542 +FIELD_UNIVERSE_MESSAGE = 543 +WHISPER = 544 +SUMMON_ITEM_INAVAILABLE = 545 +FIELD_EFFECT = 546 +WHISPER_SPOUSE = 547 +UNK_517 = 548 +UNK_518 = 549 +UNK_519 = 550 +UNK_520 = 551 +UNK_521 = 552 +UNK_522 = 553 +BLOW_WEATHER = 554 +PLAY_JUKE_BOX = 555 +ADMIN_RESULT = 556 +QUIZ = 557 +FIELD_SET_DESC = 558 +CLOCK = 559 +SET_QUEST_CLEAR = 562 +SET_QUEST_TIME = 563 +SET_OBJECT_STATE = 564 +QUICKSLOT_INIT = 572 +FOOT_HOLD_MOVE = 573 +CORRECT_FOOT_HOLD_MOVE = 574 +UNK_544 = 575 +UNK_545 = 576 +STALK_RESULT = 576 +FOOT_HOLD_APPEAR = 577 +DESTROY = 578 +SMART_MOB_NOTICE = 580 +CHANGE_PHASE = 581 +CHANGE_MOB_ZONE = 582 +PV_P_MIGRATE_INFO_RESULT = 584 +CUR_NODE_EVENT_END = 585 +CREATE_FORCE_ATOM = 586 +CREATE_ARK_FORCE_ATOM = 587 +UNK200_557 = 588 +GUIDE_FORCE_ATOM = 589 +SET_ACHIEVE_RATE = 590 +SET_QUICK_MOVE_INFO = 591 +CREATE_OBSTACLE = 592 +UNK_562 = 593 +CLEAR_OBSTACLE = 594 +UNK_510 = 595 +B2_FOOT_HOLD_CREATE = 596 +DEBUFF_OBJ_ON = 597 +CREATE_FALLING_CATCHER = 598 +CHASE_EFFECT_SET = 599 +MESO_EXCHANGE_RESULT = 600 +SET_MIRROR_DUNGEON_INFO = 601 +SET_INTRUSION = 602 +CANNOT_DROP = 603 +FOOT_HOLD_OFF = 604 +LADDER_ROPE_OFF = 605 +MOMENT_AREA_OFF = 606 +MOMENT_AREA_OFF_ALL = 607 +CHAT_INDUCE_CLIENT_CONNECT = 608 +COORDINATION_CONTEST_PACKET = 609 +ELITE_STATE = 610 +PLAY_SOUND = 611 +STACK_EVENT_GAUGE = 612 +SET_UNION_FIELD = 613 +STAR_PLANET_BURNING_TIME_INFO = 616 +UNK_585 = 617 +UNK_586 = 618 +UNK_587 = 619 +UNK_588 = 620 +PUBLIC_SHARE_STATE = 621 +FUNCTION_TEMP_BLOCK = 622 +UI_STATUS_BAR_PACKET = 623 +FIELD_SKILL_DELAY = 624 +UNK_593 = 625 +UNK_594 = 626 +UNK_595 = 627 +WEATHER_PACKET_ADD = 628 +WEATHER_PACKET_REMOVE = 629 +WEATHER_PACKET_MSG = 630 +ADD_WRECKAGE = 631 +DEL_WRECKAGE = 632 +CREATE_MIRROR_IMAGE = 633 +FUNCTION_FOOTHOLD_MAN = 634 +UNK_543 = 635 +GROUP_CHAIR_INVITATION_RESULT = 636 +UNK_606 = 638 +UNK_608 = 639 +UNK_612 = 644 +UNK205_644 = 645 +UNK205_646 = 647 +UNK205_647 = 648 +UNK205_648 = 649 +UNK205_650 = 651 +MASSACRE_INC_GAUGE = 622 +FIELD_KILL_COUNT = 576 +USER_ENTER_FIELD = 652 +USER_LEAVE_FIELD = 653 +CHAT = 654 +ITEM_LINKED_CHAT = 655 +AD_BOARD = 656 +MINI_ROOM_BALLOON = 657 +SET_CONSUME_ITEM_EFFECT = 658 +SHOW_ITEM_UPGRADE_EFFECT = 659 +SHOW_ITEM_SKILL_SOCKET_UPGRADE_EFFECT = 661 +SHOW_ITEM_SKILL_OPTION_UPGRADE_EFFECT = 662 +SHOW_ITEM_RELEASE_EFFECT = 663 +SHOW_ITEM_UNRELEASE_EFFECT = 664 +SHOW_ITEM_LUCKY_ITEM_EFFECT = 665 +SHOW_ITEM_MEMORIAL_EFFECT = 666 +SHOW_ITEM_ADDITIONAL_UN_RELEASE_EFFECT = 667 +SHOW_ITEM_ADDITIONAL_SLOT_EXTEND_EFFECT = 668 +SHOW_ITEM_FIRE_WORKS_EFFECT = 669 +SHOW_ITEM_OPTION_CHANGE_EFFECT = 670 +RED_CUBE_RESULT = 671 +BONUS_CUBE_RESULT = 672 +HIT_BY_USER = 673 +DOT_BY_USER = 674 +RESET_ALL_DOT = 675 +DAMAGE_BY_USER = 676 +TESLA_TRIANGLE = 677 +FOLLOW_CHARACTER = 678 +SHOW_PQ_REWARD = 679 +SET_ONE_TIME_ACTION = 680 +MAKING_SKILL_RESULT = 681 +SET_MAKING_MEISTER_SKILL_EFF = 682 +GATHER_RESULT = 683 +USER_EXPLODE = 684 +USER_HIT_BY_COUNTER = 685 +PYRAMID_LETHAL_ATTACK = 686 +MIXER_RESULT = 687 +WAIT_QUEUE_RESPONSE = 688 +CATEGORY_EVENT_NAME_TAG = 689 +DRAW_EVENT_NAME_TAGS = 690 +SET_DAMAGE_SKIN = 691 +SET_PREMIUM_DAMAGE_SKIN = 692 +UNK205_692 = 693 +SET_SOUL_EFFECT = 694 +SIT_RESULT = 695 +STAR_PLANET_POINT_INFO = 696 +STAR_PLANET_AVATAR_LOOK_SET = 697 +TOSSED_BY_MOB_SKILL = 698 +BATTLE_ATTACK_HIT = 699 +BATTLE_USER_HIT_BY_MOB = 700 +UNK205_700 = 701 +FREEZE_HOT_EVENT_INFO = 702 +EVENT_BEST_FRIEND_INFO = 703 +SET_REPEAT_ONE_TIME_ACTION = 704 +SET_REPLACE_MOVE_ACTION = 705 +IN_GAME_CUBE_RESULT = 706 +UNK_667 = 707 +UNK_668 = 708 +SET_ACTIVE_EMOTICON_ITEM = 709 +CREATE_PSYCHIC_LOCK = 711 +RECREATE_PATH_PSYCHIC_LOCK = 712 +RELEASE_PSYCHIC_LOCK = 713 +RELEASE_PSYCHIC_LOCK_MOB = 714 +CREATE_PSYCHIC_AREA = 715 +RELEASE_PSYCHIC_AREA = 716 +RW_ZERO_BUNKER_MOB_BIND = 717 +BEAST_FORM_WING_OFF = 718 +SKILL_ON_OFF_EFFECT = 719 +UNK_680 = 720 +ADD_MESO_CHAIR_COUNT = 721 +REFRESH_NAME_TAG_MARK = 722 +UNK_683 = 723 +SPIRIT_FLOW_INFO = 724 +UNK_685 = 725 +STIGMA_EFFECT = 726 +SHOOT_OBJECT_EXPLODE_RESULT = 727 +UNK_688 = 728 +UNK_689 = 729 +UNK_690 = 730 +UNK_691 = 731 +UNK205_730 = 732 +PET_ACTIVATED = 735 +PET_MOVE = 736 +PET_ACTION = 737 +PET_ACTION_SPEAK = 738 +PET_NAME_CHANGED = 739 +PET_LOAD_EXCEPTION_LIST = 740 +PET_HUE_CHANGED = 741 +PET_MODIFIED = 742 +PET_ACTION_COMMAND = 743 +PET_UKNOWN = 744 +DRAGON_CREATED = 745 +DRAGON_MOVE = 746 +DRAGON_REMOVE = 747 +DRAGON_REMOVE_RP_CHAR = 748 +ANDROID_CREATED = 749 +ANDROID_MOVE = 750 +ANDROID_ACTION_SET = 751 +ANDROID_MODIFIED = 752 +ANDROID_REMOVED = 753 +FOX_MAN_ENTER_FIELD = 754 +FOX_MAN_MOVE = 755 +FOX_MAN_EXCL_RESULT = 756 +FOX_MAN_SHOW_CHANGE_EFFECT = 757 +FOX_MAN_MODIFIED = 758 +FOX_MAN_LEAVE_FIELD = 759 +SKILL_PET_MOVE = 761 +SKILL_PET_ACTION = 762 +SKILL_PET_STATE = 763 +SKILL_PET_CREATED = 766 +GACHAPON_EFFECT = 769 +REMOTE_CHAT = 769 +REMOTE_ITEM_LINKED_CHAT = 770 +UNK_730 = 771 +UNK_731 = 772 +UNK_732 = 773 +UNK_733 = 774 +UNK_734 = 775 +UNK_736 = 777 +UNK_737 = 778 +FAMILIAR_ENTER_FIELD = 779 +FAMILIAR_MOVE = 780 +FAMILIAR_HIT = 781 +FAMILIAR_ATTACK = 782 +FAMILIAR_RENAME = 783 +FAMILIAR_TRANSFER_FIELD = 784 +FAMILIAR_UPDATE_INFO = 785 +REMOTE_MOVE = 790 +REMOTE_MELEE_ATTACK = 791 +REMOTE_SHOOT_ATTACK = 792 +REMOTE_MAGIC_ATTACK = 793 +REMOTE_BODY_ATTACK = 794 +REMOTE_SKILL_PREPARE = 795 +REMOTE_MOVING_SHOOT_ATTACK_PREPARE = 796 +REMOTE_SKILL_CANCEL = 797 +REMOTE_HIT = 798 +REMOTE_EMOTION = 799 +REMOTE_ANDROID_EMOTION = 800 +REMOTE_SET_ACTIVE_EFFECT_ITEM = 801 +REMOTE_SET_MONKEY_EFFECT_ITEM = 802 +REMOTE_SET_ACTIVE_NICK_ITEM = 803 +REMOTE_SET_DEFAULT_WING_ITEM = 804 +REMOTE_SET_KAISER_TRANSFORM_ITEM = 805 +REMOTE_SET_CUSTOM_RIDING = 806 +REMOTE_SHOW_UPGRADE_TOMB_EFFECT = 807 +REMOTE_SET_ACTIVE_PORTABLE_CHAIR = 808 +REMOTE_AVATAR_MODIFIED = 809 +REMOTE_EFFECT = 810 +REMOTE_SET_TEMPORARY_STAT = 811 +REMOTE_RESET_TEMPORARY_STAT = 812 +REMOTE_RECEIVE_HP = 813 +REMOTE_GUILD_NAME_CHANGED = 814 +REMOTE_GUILD_MARK_CHANGED = 815 +REMOTE_PVP_TEAM_CHANGED = 816 +REMOTE_GATHER_ACTION_SET = 817 +REMOTE_UPDATE_PVP_HP_TAG = 818 +REMOTE_DRAGON_GLIDE = 819 +REMOTE_KEY_DOWN_AREA_MOVE_PATH = 820 +REMOTE_LASER_INFO_FOR_REMOTE = 821 +REMOTE_KAISER_COLOR_OR_MORPH_CHANGE = 822 +REMOTE_DESTROY_GRENADE = 823 +REMOTE_SET_ITEM_ACTION = 824 +REMOTE_ZERO_TAG = 825 +REMOTE_INTRUSION = 826 +REMOTE_ZERO_LAST_ASSIST_STATE = 827 +REMOTE_SET_MOVE_GRENADE = 828 +REMOTE_UNK_788 = 829 +REMOTE_SET_CUSTOMIZE_EFFECT = 830 +REMOTE_RUNE_STONE_ACTION = 831 +REMOTE_KINESIS_PSYCHIC_ENERGY_SHIELD_EFFECT = 832 +REMOTE_DRAGON_ACTION = 833 +REMOTE_DRAGON_BREATH_EARTH_EFFECT = 834 +REMOTE_RELEASE_RW_GRAB = 835 +REMOTE_RW_MULTI_CHARGE_CANCEL_REQUEST = 836 +REMOTE_SCOUTER_MAX_DAMAGE_UPDATE = 837 +REMOTE_STIGMA_DELIVERY_RESPONSE = 838 +REMOTE_SHOOT_OBJECT = 839 +REMOTE_UNK_729 = 840 +REMOTE_UNK_800 = 841 +REMOTE_UNK_801 = 842 +REMOTE_UNK_802 = 843 +REMOTE_THROW_GRENADE = 845 +EMOTION = 846 +ANDROID_EMOTION = 847 +EFFECT = 848 +TELEPORT = 849 +MESO_GIVE_SUCCEEDED = 851 +MESO_GIVE_FAILED = 852 +QUEST_RESULT = 853 +NOTIFY_HP_DEC_BY_FIELD = 854 +USER_PET_SKILL_CHANGED = 855 +BALLOON_MSG = 856 +PLAY_EVENT_SOUND = 857 +PLAY_MINIGAME_SOUND = 858 +MAKER_RESULT = 859 +OPEN_CLASS_COMPETITION_PAGE = 861 +OPEN_UI = 862 +CLOSE_UI = 863 +OPEN_UI_WITH_OPTION = 864 +SET_DIRECTION_MODE = 865 +SET_IN_GAME_DIRECTION_MODE = 866 +SET_STAND_ALONE_MODE = 867 +HIRE_TUTOR = 868 +TUTOR_MSG = 869 +HIRE_TUTOR_BY_ID = 870 +SET_PARTNER = 871 +UNK_831 = 872 +SET_PARTNER_ACTION = 873 +SET_PARTNER_FORCE_FLIP = 874 +SWITCH_RP = 875 +MOD_COMBO_RESPONSE = 876 +INC_COMBO_RESPONSE_BY_COMBO_RECHARGE = 877 +RADIO_SCHEDULE = 878 +OPEN_SKILL_GUIDE = 879 +NOTICE_MSG = 880 +CHAT_MSG = 881 +SET_UTIL_DLG = 882 +BUFFZONE_EFFECT = 883 +TIME_BOMB_ATTACK = 884 +EXPLOSION_ATTACK = 885 +PASSIVE_MOVE = 886 +FOLLOW_CHARACTER_FAILED = 887 +SET_NEXT_SHOOT_EX_JABLIN = 888 +RESULT = 889 +GATHER_REQUEST_RESULT = 890 +RUNE_STONE_USE_ACK = 891 +BAG_ITEM_USE_RESULT = 892 +RANDOM_TELEPORT_KEY = 893 +SET_GAGE_POINT = 894 +IN_GAME_DIRECTION_EVENT = 896 +MEDAL_REISSUE_RESULT = 897 +DODGE_SKILL_READY = 898 +REMOVE_MICRO_BUFF_SKILL = 899 +VIDEO_BY_SCRIPT = 900 +UNK_779 = 901 +REWARD_MOB_LIST_RESULT = 902 +INC_JUDGEMENT_STACK_RESPONSE = 903 +INC_CHARM_BY_CASH_PR_MSG = 904 +SET_BUFF_PROTECTOR = 905 +INC_LARKNESS_RESPONSE = 906 +DETONATE_BOMB = 907 +AGGRO_RANK_INFO_NAME = 908 +DEATH_COUNT_INFO = 909 +DEATH_COUNT_INFO_2 = 910 +SET_DRESS_CHANGED = 911 +SERVER_ACK_MOB_ZONE_STATE_CHANGE = 912 +RANDOM_EMOTION = 915 +SET_FLIP_THE_COIN_ENABLED = 916 +TRICK_OR_TREAT_RESULT = 917 +GIANT_PET_BUFF = 918 +B2_BODY_RESULT = 919 +B2_BODY_RESULT_NEW = 920 +SET_DEAD = 921 +OPEN_UI_DEAD = 922 +EXPIRED_NOTICE = 923 +DO_LOTTERY_UI = 924 +ROULETTE_START = 925 +SIT_TIME_CAPSULE = 926 +SIT_DUMMY_PORTABLE_CHAIR = 927 +GO_MONSTER_FARM = 928 +MONSTER_LIFE_INVITE_ITEM_RESULT = 929 +PHOTO_GET_RESULT = 930 +FINAL_ATTACK_REQUEST = 931 +SET_GUN = 932 +SET_AMMO = 933 +CREATE_GUN = 934 +CLEAR_GUN = 935 +RESULT_SHOOT_ATTACK_IN_FPS_MODE = 936 +MIRROR_DUNGEON_ENTER_FAIL = 937 +MIRROR_DUNGEON_UNIT_CLEARED = 938 +REGISTER_MIRROR_DUNGEON_BOSS = 939 +MIRROR_DUNGEON_RECORD = 940 +OPEN_URL = 941 +ZERO_COMBAT_RECOVERY = 942 +MIRROR_STUDY_UI_OPEN = 943 +SKILL_COOLTIME_REDUCE = 944 +MIRROR_READING_UI_OPEN = 945 +USER_CTRL_MOB_SKILL_Q_PUSH = 946 +ZERO_LEVEL_UP_ALARM = 947 +USER_CTRL_MOB_SKILL_Q_POP = 948 +USER_CTRL_MOB_SKILL_FAIL = 949 +FORCE_SUMMONED_REMOVE = 950 +USER_RESPAWN = 951 +USER_CTRL_MOB_SKILL_FORCED_POP = 952 +IS_UNIVERSE = 953 +PORTAL_GROUP = 954 +SET_MOVABLE = 955 +USER_CTRL_MOB_SKILL_PUSH_COOL_TIME = 956 +MOVE_PARTICLE_EFF = 957 +DO_ACTIVE_EVENT_SKILL_BY_SCRIPT = 958 +SET_STATUSBAR_JOB_NAME_BLUR = 959 +RUNE_STONE_SKILL_ACK = 960 +RESET_RUNE_STONE_ACTION = 961 +MOVE_TO_CONTENTS_CANNOT_MIGRATE = 962 +UNK_921 = 963 +PLAY_AMBIENT_SOUND = 964 +STOP_AMBIENT_SOUND = 965 +FLAME_WIZARD_ELEMENT_FLAME_SUMMON = 966 +CAMERA_MODE = 967 +SPOTLIGHT_TO_CHARACTER = 968 +BOSS_PARTY_CHECK_DONE = 969 +FREE_LOOK_CHANGE_UI_OPEN = 970 +FREE_LOOK_CHANGE_SUCCESS = 971 +GRAY_BACKGROUND = 972 +GET_NPC_CURRENT_ACTION = 973 +CAMERA_ROTATION = 974 +CAMERA_SWITCH = 975 +NETWORK = 976 +USER_SET_FIELD_FLOATING = 977 +ADD_POPUP_SAY = 978 +REMOVE_POPUP_SAY = 979 +JAGUAR_SKILL = 980 +ACTION_LAYER_RELMOVE = 981 +UNK_940 = 982 +SEND_CLIENT_RESOLUTION = 983 +USER_BONUS_ATTACK_REQUEST = 984 +USER_RAND_AREA_ATTACK_REQUEST = 985 +USER_EXTRA_ATTACK_REQUEST = 986 +JAGUAR_ACTIVE = 987 +SKILL_COOLTIME_SET_M = 988 +UNK205_988 = 989 +SET_CARRY_REACTOR_INFO = 990 +REACTOR_SKILL_USE_REQUEST = 991 +OPEN_BATTLE_PVP_CHAMP_SELECT_UI = 992 +BATTLE_PVP_ITEM_DROP_SOUND = 993 +SET_MESO_COUNT_BY_SCRIPT = 994 +PLANT_POT_CLICK_RESULT = 995 +PLANT_POT_EFFECT = 996 +UNK205_996 = 997 +DAMAGE = 998 +ROYAL_GUARD_ATTACK = 999 +DO_ACTIVE_PSYCHIC_AREA = 1000 +ENTER_FIELD_PSYCHIC_INFO = 1001 +LEAVE_FIELD_PSYCHIC_INFO = 1002 +TOUCH_ME_STATE_RESULT = 1003 +FIELD_SCORE_UPDATE = 1004 +URSUS_REUSLT_UI_OPEN = 1005 +SET_NO_MORE_LIFE = 1006 +SOME_DECODE4 = 1007 +UNK_881 = 1008 +BONUS_ATTACK_DELAY_REQUEST = 1009 +CREATE_AREA_DOT_INFO = 1010 +UNK_883 = 1011 +UNK200_969 = 1012 +SET_SLOW_DOWN = 1013 +REGISTER_EXTRA_SKILL = 1014 +RES_WARRIOR_LIFT_MOB_INFO = 1015 +USER_RENAME_RESULT = 1016 +DAMAGE_SKIN_SAVE_RESULT = 1017 +UNK203_987 = 1018 +STIGMA_REMAIN_TIME = 1019 +BURNING_RESULT = 1020 +UNK203_990 = 1021 +SHOOT_OBJECT_CREATED = 1022 +LIGHTNING_UNION_SUB_ATTACK = 1023 +GIANT_SHADOW_SPEAR_ATTACK = 1024 +TELEPORT_SOMEWHERE = 1025 +UNK202_987 = 1026 +UNK202_988 = 1027 +GREATER_DARK_SERVANT_SWAP_RESULT = 1028 +SKILL_REQUEST_REQUEST = 1029 +ACE_IN_THE_HOLE_FINISHER = 1030 +TIDE_OF_BATTLE = 1031 +UNK203_1002 = 1033 +CADENA_VOID_STRIKE_REQUEST = 1034 +USER_WEATHER_EFFECT = 1035 +PINK_BEAN_DECREASE = 1036 +UNK203_1006 = 1037 +UNK203_1007 = 1038 +MEDAL_OBTAIN = 1039 +UNK203_1009 = 1040 +VERTICAL_JUMP = 1041 +UNK203_1011 = 1042 +UNK203_1012 = 1043 +UNK203_1013 = 1044 +UNK203_1014 = 1045 +UNK203_1015 = 1046 +UNK205_1046 = 1047 +DISCOVERY_SKILL = 1048 +UNK203_1017 = 1049 +UNK203_1018 = 1050 +STOP_NO_MOVEMENT_KEY_DOWN_SKILL_REQUEST = 1051 +ALLIANCE_SKILL_RESULT = 1052 +UNK203_1022 = 1053 +BLACK_MAGE_DEATHCOUNT_MAP_EFFECT = 1054 +UNK203_1024 = 1055 +UNK205_1055 = 1056 +UNK205_1056 = 1057 +UNK205_1057 = 1058 +UNK205_1058 = 1059 +UNK205_1060 = 1060 +RANDOM_MESO_SACK_SUCCEED = 1062 +RANDOM_MESO_SACK_FAIL = 1063 +REGISTER_FADE_IN_OUT_ANIMATION = 1064 +UNK203_1028 = 1065 +UNK203_1029 = 1066 +UNK203_1030 = 1067 +SET_CASH_SHOP_2 = 1068 +EVENT_LEVELUP_CHECKPOINT = 1069 +UNK203_1033 = 1070 +SHOW_QUEST_MESSENGER = 1071 +UNK203_1035 = 1072 +UNK203_1036 = 1073 +UNK203_1037 = 1074 +MOUNT_RESULT = 1075 +DEMOUNT_RESULT = 1076 +FAMILIAR_ADD_RESULT = 1077 +FAMILIAR_INVALID_NAME = 1078 +UNK203_1042 = 1079 +UNK203_1043 = 1080 +UNK203_1044 = 1081 +UNK203_1045 = 1082 +GUARDIANS_BLESSING_RESULT = 1083 +UNK203_1047 = 1084 +UNK203_1048 = 1085 +UNK203_1049 = 1086 +SET_CAMERA_ON_POSITION = 1087 +UNK203_1051 = 1088 +CREATE_NAVIGATION = 1089 +UNK205_1089 = 1090 +DISPLAY_LOCATION = 1091 +UNK203_1055 = 1092 +RED_LEAF_INFO = 1093 +UNK203_1057 = 1094 +UNK203_1058 = 1095 +UNK203_1059 = 1096 +PUSH = 1097 +HARVEST_RESULT = 1098 +OPEN_EGG_HATCH = 1099 +MOD_HAYATO_COMBO = 1100 +UNK203_1064 = 1101 +SPECIAL_SIT_RESULT = 1102 +UNK203_1066 = 1103 +UNK203_1067 = 1104 +UNK203_1068 = 1105 +UNK203_1069 = 1106 +CHARACTER_DATA_LOG = 1107 +UNK203_1071 = 1108 +UNK203_1072 = 1109 +UNK203_1073 = 1110 +UNK203_1074 = 1111 +UNK203_1076 = 1113 +UNK203_1077 = 1114 +UNK203_1078 = 1115 +UNK203_1079 = 1116 +UNK203_1080 = 1117 +UNK203_1081 = 1118 +MONAD_REWARD = 1119 +UNK203_1083 = 1120 +UNK203_1085 = 1122 +SKILL_COOLTIME_SET = 1123 +SUMMONED_CREATED = 1125 +SUMMONED_REMOVED = 1126 +SUMMONED_MOVE = 1127 +SUMMONED_ATTACK = 1128 +SUMMONED_ATTACK_PVP = 1129 +SUMMONED_SET_REFERENCE = 1130 +SUMMONED_SKILL = 1131 +SUMMONED_SKILL_PVP = 1133 +SUMMONED_UPDATE_HP_TAG = 1134 +SUMMONED_ATTACK_DONE = 1135 +SUMMONED_SET_RESIST = 1136 +SUMMONED_ACTION_CHANGE = 1137 +SUMMONED_ASSIST_ATTACK_REQUEST = 1138 +SUMMONED_SUMMON_ATTACK_ACTIVE = 1139 +SUMMONED_BEHOLDER_REVENGE_ATTACK = 1140 +SUMMONED_UNK1057 = 1141 +SUMMONED_STATE_CHANGED = 1142 +SUMMONED_UNK1059 = 1143 +SUMMONED_REPOSITION_SUMMON = 1144 +SUMMONED_ASSIST_SPECIAL_ATTACK_REQUEST = 1145 +SUMMONED_EFFECT = 1146 +SUMMONED_SUMMON_USE_SPECIFIED_SKILL = 1147 +SUMMONED_UPGRADE_STAGE = 1148 +SUMMONED_UNK1065 = 1149 +SUMMONED_GRAVITY_CRUSH_DAMAGE = 1150 +SUMMONED_GRAVITY_CRUSH_MAX_DAMAGE = 1151 +SUMMONED_JETT_SUMMON = 1152 +SUMMONED_SPIRIT_DOMAIN_STATE = 1153 +SUMMONED_HIT = 1154 +MOB_ENTER_FIELD = 1155 +MOB_LEAVE_FIELD = 1156 +MOB_CHANGE_CONTROLLER = 1157 +MOB_SET_AFTER_ATTACK = 1158 +MOB_BLOCK_ATTACK = 1159 +MOB_UNK200_1108 = 1161 +MOB_CRC_KEY_CHANGED = 1174 +MOB_MOVE = 1162 +MOB_CTRL_ACK = 1163 +MOB_STAT_SET = 1165 +MOB_STAT_RESET = 1167 +MOB_SUSPEND_RESET = 1167 +MOB_AFFECTED = 1168 +MOB_DAMAGED = 1169 +MOB_DAMAGED_BY_SKILL = 1170 +MOB_SPECIAL_EFFECT_BY_SKILL = 1172 +MOB_CRC_DATA_REQUEST = 1173 +MOB_HP_INDICATOR = 1176 +MOB_CATCH_EFFECT = 1177 +MOB_STEAL_EFFECT = 1178 +MOB_EFFECT_BY_ITEM = 1179 +MOB_SPEAKING = 1180 +MOB_MESSAGING = 1181 +MOB_SKILL_DELAY = 1182 +ESCORT_FULL_PATH = 1183 +ESCORT_STOP_END_PERMISSION = 1184 +ESCORT_STOP_BY_SCRIPT = 1185 +ESCORT_STOP_SAY = 1186 +ESCORT_RETURN_BEFORE = 1187 +MOB_NEXT_ATTACK = 1188 +MOB_UNK204_1151 = 1189 +MOB_UNK204_1152 = 1190 +MOB_UNK204_1153 = 1191 +MOB_TELEPORT_REQUEST = 1192 +MOB_FORCED_ACTION = 1193 +MOB_FORCED_SKILL_ACTION = 1194 +UNK205_1194 = 1195 +UNK205_1195 = 1196 +MOB_TIME_RESIST = 1197 +MOB_ON_EKILL_DAMAGE = 1198 +MOB_ATTACK_BLOCK = 1199 +MOB_ATTACK_PRIORITY = 1200 +MOB_ATTACK_TIME_INFO = 1201 +MOB_DAMAGE_SHARE_INFO_TO_LOCAL = 1202 +MOB_DAMAGE_SHARE_INFO_TO_REMOTE = 1203 +MOB_BREAK_DOWN_TIME_ZONE_TIME_OUT = 1204 +MOB_MOVE_AREA_SET = 1205 +MOB_DO_SKILL_BY_HIT = 1206 +MOB_CASTING_BAR_SKILL = 1207 +MOB_FLY_TARGET = 1208 +MOB_BOUNCE_ATTACK_SKILL = 1209 +MOB_AREA_INSTALL_BY_HIT = 1210 +MOB_LTRB_DAMAGE_SKILL = 1211 +MOB_SUMMON_SUB_BODY = 1212 +MOB_LASER_CONTROL = 1213 +UNK205_1213 = 1214 +UNK205_1214 = 1215 +UNK205_1215 = 1216 +MOB_SCALE = 1217 +UNK205_1217 = 1218 +UNK205_1218 = 1219 +MOB_FORCE_CHASE = 1220 +MOB_HANG_OVER_REQUEST = 1221 +MOB_HANG_OVER_RELEASE_REQUEST = 1222 +MOB_DEAD_FPS_MODE = 1223 +MOB_AIR_HIT = 1224 +MOB_DEMIAN_DELAYED_ATTACK_CREATE = 1225 +MOB_REGISTER_REL_MOB_ZONE = 1226 +MOB_UNREGISTER_REL_MOB_ZONE = 1227 +MOB_NEXT_TARGET_FROM_SVR = 1228 +MOB_BURNED_INFO_REMOVE = 1229 +MOB_SPECIAL_SELECTED_EFFECT_BY_SKILL = 1237 +MOB_ATTACKED_BY_MOB = 1255 +MINION_ENTER_FIELD = 1193 +MINION_LEAVE_FIELD = 1194 +MINION_CHANGE_CONTROLLER = 1195 +MINION_GEN_BEYOND_SPLIT = 1196 +NPC_ENTER_FIELD = 1257 +NPC_LEAVE_FIELD = 1258 +NPC_ENTER_FIELD_FOR_QUICK_MOVE = 1259 +NPC_CHANGE_CONTROLLER = 1260 +NPC_IMITATE_DATA = 341 +NPC_UPDATE_LIMITED_DISABLE_INFO = 343 +SET_NPC_SCRIPT = 1277 +NPC_MOVE = 1264 +NPC_UPDATE_LIMITED_INFO = 1265 +NPC_SET_QUIZ_SCORE = 1266 +NPC_SET_QUIZ_SCORE_ANI = 1267 +NPC_SET_FORCE_MOVE = 1287 +NPC_SET_FORCE_FLIP = 1269 +NPC_SET_EMOTION = 1270 +NPC_SET_CHARACTER_BASE_ACTION = 1271 +NPC_VIEW_OR_HIDE = 1272 +NPC_PRESENT_ITEM_SET = 1273 +NPC_PRESENT_TIME_SET = 1274 +NPC_RESET_SPECIAL_ACTION = 1275 +NPC_SET_SCREEN_INFO = 1276 +NPC_LOCAL_NPC_REPEAT_EFFECT = 1277 +NPC_SET_NOTICE_BOARD_INFO = 1278 +NPC_UNK200_1222 = 1279 +NPC_UNK200_1223 = 1280 +NPC_UNK200_1224 = 1281 +NPC_SET_SPECIAL_ACTION = 1282 +MOMENT_SWIM_AREA_SET_WATER_LEVEL = 1276 +EMPLOYEE_ENTER_FIELD = 1285 +EMPLOYEE_LEAVE_FIELD = 1286 +EMPLOYEE_MINI_ROOM_BALLOON = 1287 +UNK203_1246 = 1288 +UNK203_1247 = 1289 +UNK203_1248 = 1290 +UNK203_1249 = 1291 +UNK203_1250 = 1292 +DROP_ENTER_FIELD = 1293 +DROP_LEAVE_FIELD = 1295 +CREATE_MESSAGE_BOX_FAILED = 1296 +MESSAGE_BOX_ENTER_FIELD = 1297 +MESSAGE_BOX_LEAVE_FIELD = 1298 +AFFECTED_AREA_CREATED = 1299 +INSTALLED_AREA_FIRE = 1300 +AFFECTED_AREA_REMOVED = 1301 +TOWN_PORTAL_CREATED = 1302 +TOWN_PORTAL_REMOVED = 1303 +RANDOM_PORTAL_CREATED = 1304 +RANDOM_PORTAL_TRY_ENTER_REQUEST = 1305 +RANDOM_PORTAL_REMOVED = 1306 +OPEN_GATE_CREATED = 1307 +OPEN_GATE_CLOSE = 1308 +OPEN_GATE_REMOVED = 1309 +REACTOR_CHANGE_STATE = 1310 +REACTOR_IDK = 1311 +REACTOR_ENTER_FIELD = 1312 +REACTOR_RESET_STATE = 1313 +REACTOR_OWNER_INFO = 1314 +REACTOR_REMOVE = 1315 +REACTOR_IDK2 = 1316 +REACTOR_UNK200_1259 = 1317 +REACTOR_UNK202_1266 = 1318 +REACTOR_UNK202_1267 = 1319 +REACTOR_LEAVE_FIELD = 1320 +FISHING_INFO = 1321 +FISHING_REWARD = 1322 +FISHING_ZONE_INFO = 1323 +DECOMPOSER_ENTER_FIELD = 1324 +DECOMPOSER_LEAVE_FIELD = 1325 +UNK203_1284 = 1326 +UNK203_1285 = 1327 +UNK203_1286 = 1328 +UNK203_1287 = 1329 +GUILD_BOSS_HEALER_MOVE = 1332 +GUILD_BOSS_PULLEY_STATE_CHANGE = 1333 +MONSTER_CARNIVAL_CARNIVAL_ENTER = 1283 +MONSTER_CARNIVAL_PERSONAL_CP = 1284 +MONSTER_CARNIVAL_TEAM_CSCORE = 1285 +MONSTER_CARNIVAL_SPELL_COOLTIME = 1286 +MONSTER_CARNIVAL_RESULT_SUCCESS = 1287 +MONSTER_CARNIVAL_RESULT_FAIL = 1288 +MONSTER_CARNIVAL_DEATH = 1289 +MONSTER_CARNIVAL_MEMBER_OUT = 1290 +MONSTER_CARNIVAL_SHOW_GAME_RESULT = 1291 +MONSTER_CARNIVAL_UPDATE_RANK_INFO = 1292 +ARIANT_ARENA_SHOW_RESULT = 682 +ARIANT_ARENA_USER_SCORE = 1293 +DEFENSE_WAVE = 1312 +DEFENSE_LIFE = 1313 +DEFENSE_POINT = 1314 +DEFENSE_SCORE_RANK = 1315 +DEFENSE_RESULT = 1316 +MULTI_STAGE_SET_STAGE = 1331 +MULTI_STAGE_SET_MONSTER_GAUGE = 1332 +PIRANHA_INIT = 1353 +PIRANHA_INFO = 1354 +BOSS_ARENA_FIELD_STATE_CHANGE = 1369 +BOSS_ARENA_CURRENT_TEAM_INFO = 1370 +BOSS_ARENA_SELECTED_TEAM_INFO = 1371 +BOSS_ARENA_SELECT_OPPONENT_SELECT_BOSS = 1372 +BOSS_ARENA_SELECT_OPPONENT_CONFIRM = 1373 +BOSS_ARENA_SCORE = 1378 +BOSS_ARENA_RESULT_INFO = 1379 +BOSS_ARENA_FADE_IN_OUT = 1381 +BOSS_ARENA_SUMMON_HEAD_GEAR = 1382 +BOSS_ARENA_BOSS_INFO = 1383 +BOSS_ARENA_USER_HP_CHANGED = 1384 +BONUS_REWARD_BOARD_FAO = 1396 +TWELFTH_THREASURE_UPDATE_GAME_INFO = 1401 +TWELFTH_THREASURE_FIELD_STATE_CHANGE = 1402 +FIELD_ON_RANK_CREATE = 1405 +FIELD_RANK_SET_USERNAME = 1406 +FIELD_RANK_NOTIFY_DATA = 1407 +FIELD_FADE_OBJECT_INFO = 1447 +RUNE_STONE_CLEAR_AND_ALL_REGISTER = 1448 +RUNE_STONE_DISAPPEAR = 1449 +RUNE_STONE_APPEAR = 1450 +STAR_PLANET_SCREEN_WORLD_EVENT = 1452 +FIELD_STATE_CREATE = 1453 +FIELD_STATE_REMOVE = 1454 +CHASER_MOVE = 1455 +UNK203_1427 = 1469 +UNK203_1437 = 1479 +UNK203_1438 = 1480 +UNK203_1570 = 1612 +UNK203_1571 = 1613 +DEMIAN_STIGMA_INCINERATE_OBJECT_PACKET = 1470 +DEMIAN_STIGMA_OBJECT_EFFECT = 1471 +DEMIAN_FLYING_SWORD_CREATE = 1472 +DEMIAN_FLYING_SWORD_MAKE_ENTER_REQUEST = 1473 +DEMIAN_FLYING_SWORD_MAKE_ENTER_INFO = 1474 +DEMIAN_FLYING_SWORD_NODE = 1475 +DEMIAN_FLYING_SWORD_TARGET = 1476 +DEMIAN_CORRUPTION_CHANGE = 1477 +LUCID_BUTTERFLY_CREATED = 1482 +LUCID_BUTTERFLY_ACTION = 1483 +LUCID_DRAGON_CREATED = 1485 +DO_LUCID_SKILL = 1486 +LUCID_PHASE_2_STAINED_GLASS_ON_OFF = 1487 +LUCID_PHASE_2_STAINED_GLASS_BREAK = 1488 +LUCID_STATUE_STATE_CHANGE = 1489 +LUCID_PHASE_2_SET_FLYING_MODE = 1490 +LUCID_PHASE_2_WELCOME_BARRAGE = 1491 +LUCID_UNK_200_1431 = 1492 +UNION_RAID_DAMAGE = 1494 +UNION_RAID_COIN = 1495 +UNION_RAID_BOSS_UPDATE = 1496 +COMPLETE_RUNE = 1458 +INHERITANCE = 1809 +BINGO_ENTER_GAME = 1416 +BINGO_HOST_NUMBER = 1417 +BINGO_HOST_NUMBER_READY = 1418 +BINGO_ADD_RANK = 1419 +BINGO_REMOVE_RANK = 1420 +BINGO_FINISH_RANK = 1421 +BINGO_CHECK_NUMBER_ACK = 1422 +BINGO_GAME_STATE = 1423 +GACH_OPEN = 1507 +GACH_RESULT = 1508 +HORNTAIL_TIMER = 1521 +ZAKUM_TIMER = 1522 +ZAKUM_TIMER2 = 1601 +COORDINATION_RUNWAY_AVATAR = 1560 +STORE_BANK_GET_ALL_RESULT = 1573 +STORE_BANK_RESULT = 1574 +ADMIN_SHOP_RESULT = 1575 +ADMIN_SHOP_COMMODITY = 1576 +GHOST_PARK_RUNE_USE_ACK = 1590 +GHOST_PARK_RUNE_APPEAR = 1591 +GHOST_PARK_RUNE_DISAPPEAR = 1592 +GHOST_PARK_KILLED_MOB_BONUS_EXP_RATE_INFO = 1593 +GHOST_PARK_CURSE_LEVEL_EXP_RATE = 1594 +GHOST_PARK_HOMING_BULLET_CREATE = 1595 +SCRIPT_MESSAGE = 1724 +SHOP_OPEN = 1725 +SHOP_RESULT = 1726 +TRUNK_DLG = 1751 +RPS_GAME_DLG = 1754 +GO_STOP_RPS_GAME_DLG = 1755 +STAR_PLANET_GO_STOP_RPS_DLG = 1756 +UI_MESSENGER = 1757 +MINI_ROOM_BASE_DLG = 1758 +UNK_1444 = 1759 +SET_CASH_SHOP_INITIAL_ITEM = 1760 +TRY_MIGRATE_CASH_SHOP = 1761 +UNK1447 = 1762 +PARCEL_DLG = 1778 +CASH_SHOP = 1811 +CASH_SHOP_QUERY_CASH_RESULT = 1812 +CASH_SHOP_CASH_ITEM_RESULT = 1813 +CASH_SHOP_PURCHASE_EXP_CHANGED = 1814 +CASH_SHOP_CHAR_STAT_CHANGED = 1816 +CASH_SHOP_IDK1 = 1818 +CASH_SHOP_MVP_ITEM_GIVE_RESULT = 1820 +CASH_SHOP_REWARD_PT_UPDATE = 1821 +CASH_SHOP_CHARGE_MILEAGE_NOTICE = 1822 +CASH_SHOP_IDK2 = 1823 +CASH_SHOP_IDK3 = 1824 +CASH_SHOP_IDK4 = 1826 +CASH_SHOP_IDK5 = 1827 +CASH_SHOP_IDK6 = 1828 +CASH_SHOP_IDK7 = 1829 +CASH_SHOP_IDK8 = 1830 +CASH_SHOP_IDK9 = 1831 +CASH_SHOP_IDK10 = 1834 +CASH_SHOP_IDK11 = 1835 +CASH_SHOP_IDK16 = 1836 +CASH_SHOP_GIFT = 1837 +CASH_SHOP_INFO = 1838 +CASH_SHOP_ACTION = 1839 +CASH_SHOP_IDK12 = 1841 +CASH_SHOP_IDK13 = 1843 +CASH_SHOP_IDK14 = 1844 +CASH_SHOP_IDK15 = 1845 +REGISTER_BATTLE_USER = 1815 +DELETE_USER = 1816 +BATTLE_USER_INFO = 1817 +VALID_BATTLE_USER = 1818 +JOB_SELECT_RESULT = 1819 +CHAMP_SELECT_TIMER = 1820 +BATTLE_USER_RESPAWN_UI = 1821 +BATTLE_PVP_POINT_EFFECT = 1822 +SET_BATTLE_ATTACK = 1825 +SET_BATTLE_ATTACK_EXPIRE = 1826 +SET_BATTLE_ATTACK_POSITION = 1827 +NEXT_BATTLE_ATTACK = 1828 +REPEAT_BATTLE_ATTACK = 1829 +SET_TEMPORARY_SKILL_SET = 1832 +USED_TEMPORARY_SKILL = 1833 +VALIDATE_TEMPORARY_SKILL = 1834 +VALIDATE_TEMPORARY_SKILL_SET = 1835 +RESET_COOLTIME_SKILL_SET = 1836 +AUCTION_RESULT = 1849 +UNK204_1799 = 1850 +ATTENDANCE_EVENT_INFO = 1852 +UNK200_1779 = 1853 +ARK_FISHING_INFO = 1854 +UNK200_1781 = 1855 +UNK200_1782 = 1856 +UNK200_1783 = 1857 +CLEAR_RESULT = 1859 +UNK200_1786 = 1860 +UNK200_1787 = 1861 +UNK200_1788 = 1862 +UNK200_1789 = 1863 +UNK200_1790 = 1864 +JIGSAW_PUZZLE = 1865 +DISGUISE = 1866 +SOME_GIFT_THING = 1867 +DIMENSIONAL_MIRROR = 1868 +UNK200_1795 = 1869 +UNION_RESULT = 1870 +ARCANE_SYMBOL_ENHANCE = 1871 +PARTICIPATION_EVENT = 1872 +UNK200_1799 = 1873 +STAR_STAMP_CLAIM_NOTE = 1874 +DREAM_DEFENDER_RANKING = 1875 +UNION_RANKING = 1876 +UNK200_1803 = 1877 +ONLY_SEALED_RUNE_MSG = 1878 +UNK200_1806 = 1880 +UNION_COIN = 1881 +FISHING_CATCH = 1882 +UNK200_1809 = 1883 +UNK200_1810 = 1884 +ALLIANCE_RANK_UNLOCK_MSG = 1885 +UNK200_1812 = 1886 +UNK200_1813 = 1887 +REWARD_CLAIMED_FAIL = 1888 +REWARD_CLAIMED_SUCCESS = 1889 +UNK200_1816 = 1890 +OPEN_DAILY_QUEST_BOARD = 1891 +UNK200_1818 = 1892 +UNK200_1819 = 1893 +UNK200_1820 = 1894 +UNK200_1821 = 1895 +UNK200_1822 = 1896 +UNK200_1823 = 1897 +UNK200_1824 = 1898 +UNK200_1825 = 1899 +UNK200_1826 = 1900 +UNK200_1827 = 1901 +UNK205_1901 = 1902 +UNK205_1902 = 1903 +UNK205_1903 = 1904 +UNK205_1904 = 1905 +OZ_BUY_RESULT = 1906 +UNK202_1847 = 1917 +UNK202_1848 = 1918 +UNK202_1849 = 1919 +UNK202_1850 = 1920 +UNK202_1851 = 1921 +UNK202_1857 = 1927 +UNK202_1858 = 1928 +UNK202_1859 = 1929 +UNK202_1860 = 1930 +UNK202_1861 = 1931 +UNK202_1862 = 1932 +FUNC_KEY_MAPPED_MAN_INIT = 1953 +PET_CONSUME_ITEM_INIT = 1954 +PET_CONSUME_MP_ITEM = 1955 +PET_CONSUME_UNK = 1956 +GOLD_HAMMER_ITEM_UPGRADE_RESULT = 1973 +GOLD_HAMMER_ITEM_UPGRADE_REQUEST = 1976 +UNK205_1976 = 1977 +UNK205_1977 = 1978 +UNK205_1978 = 1979 +FIELD_ATTACK_CREATE = 1989 +FIELD_ATTACK_REMOVE_BY_KEY = 1990 +FIELD_ATTACK_REMOVE_LIST = 1991 +FIELD_ATTACK_REMOVE_ALL = 1992 +UNK_200_1900 = 1993 +FIELD_ATTACK_SET_ATTACK = 1995 +FIELD_ATTACK_RESULT_BOARD = 1996 +FIELD_ATTACK_RESULT_GET_OFF = 1197 +FIELD_ATTACK_PUSH_ACT = 1998 +UNK_203_1930 = 1999 +FIELD_ATTACK_INFO = 2000 +DOT_DAMAGE_INFO = 2002 +KILL_DAMAGE_INFO = 2003 +BATTLE_DAMAGE_INFO = 2004 +SERVER_ON_CALC_REQUEST_RESULT = 2005 +AGGRO_MONITORING_INFO = 2006 +SKILL_DAMAGE_LOG = 2007 +SOCKET_CREATE_RESULT = 2011 +INVITATION_INFO = 2010 +INVITATION = 2011 +INVITATION_FAIL = 2012 +INVITATION_ACCEPT = 2013 +EVENT_GROUP_INFO = 2014 +EVENT_GROUP_PACKET = 2015 +OPEN_UI_STAR_PLANET = 2020 +REGISTER_ACK_STAR_PLANET = 2021 +UNREGISTER_ACK_STAR_PLANET = 2022 +WAIT_ASSENT_STAR_PLANET = 2023 +TRANSFER_STAR_PLANET = 2024 +ERROR_STAR_PLANET = 2025 +RUN_MATCHING_INVITATION = 2028 +REGISTER_INVITATION_ACK = 2029 +END_INVITATION = 2030 +UNK204_1942 = 2009 +UNK204_1975 = 2042 +UNK204_1976 = 2043 +UNK204_1977 = 2044 +UNK204_1978 = 2045 +UNK204_1979 = 2046 +UNK204_1980 = 2047 +UNK204_1981 = 2048 +UNK204_1983 = 2050 +UNK204_1984 = 2051 +UNK204_1985 = 2052 +UNK204_1986 = 2053 +UNK204_1987 = 2054 +FARM_LEVEL_UP = 2055 +UNK204_1989 = 2056 +UNK204_1990 = 2057 +UNK204_1991 = 2058 +UNK204_1992 = 2059 +UNK204_1993 = 2060 +UNK204_1994 = 2061 +UNK204_1995 = 2062 +UNK204_1996 = 2063 +UNK204_1997 = 2064 +UNK204_1998 = 2065 +UNK204_1999 = 2066 +UNK204_2000 = 2067 +UNK204_2001 = 2068 +UNK204_2002 = 2069 +UNK204_2003 = 2070 +UNK204_2004 = 2071 +UNK204_2005 = 2072 +UNK204_2006 = 2073 +UNK204_2007 = 2074 +UNK204_2008 = 2075 +UNK204_2009 = 2076 +UNK204_2010 = 2077 +UNK204_2012 = 2078 +UNK204_2014 = 2081 +UNK204_2015 = 2082 +UNK204_2016 = 2083 +UNK204_2017 = 2084 +UNK204_2018 = 2085 +UNK204_2019 = 2086 +UNK204_2022 = 2089 +UNK204_2023 = 2090 +UNK204_2024 = 2091 +UNK204_2025 = 2092 +UNK204_2026 = 2093 +UNK204_2027 = 2094 +UNK204_2028 = 2095 +UNK204_2029 = 2096 +UNK204_2030 = 2097 +UNK204_2036 = 2103 +GOLLUX_MINI_MAP = 2104 +GOLLUX_PORTAL_OPEN = 2105 +UNK204_2039 = 2106 +UNK204_2040 = 2107 +UNK204_2041 = 2108 +UNK204_2042 = 2109 +NO = 9999 diff --git a/resources/Data.wz b/resources/Data.wz new file mode 100755 index 0000000..af1f024 Binary files /dev/null and b/resources/Data.wz differ diff --git a/resources/Data2.wz b/resources/Data2.wz new file mode 100755 index 0000000..af1f024 Binary files /dev/null and b/resources/Data2.wz differ diff --git a/resources/ItemHandler v213.java b/resources/ItemHandler v213.java new file mode 100755 index 0000000..066b486 --- /dev/null +++ b/resources/ItemHandler v213.java @@ -0,0 +1,1397 @@ +package net.dev213.ms.handlers.item; + +import database.data.CharacterPotentialData; +import net.dev213.ms.Server; +import net.dev213.ms.client.Account; +import net.dev213.ms.client.Client; +import net.dev213.ms.client.character.BroadcastMsg; +import net.dev213.ms.client.character.Char; +import net.dev213.ms.client.character.ExtendSP; +import net.dev213.ms.client.character.avatar.BeautyAlbum; +import net.dev213.ms.client.character.items.*; +import net.dev213.ms.client.character.potential.CharacterPotential; +import net.dev213.ms.client.character.potential.CharacterPotentialMan; +import net.dev213.ms.client.character.quest.Quest; +import net.dev213.ms.client.character.skills.Option; +import net.dev213.ms.client.character.skills.Skill; +import net.dev213.ms.client.character.skills.temp.CharacterTemporaryStat; +import net.dev213.ms.client.character.skills.temp.TemporaryStatManager; +import net.dev213.ms.connection.InPacket; +import net.dev213.ms.connection.packet.*; +import net.dev213.ms.constants.*; +import net.dev213.ms.enums.*; +import net.dev213.ms.handlers.Handler; +import net.dev213.ms.handlers.header.InHeader; +import net.dev213.ms.life.pet.Pet; +import net.dev213.ms.life.pet.PetSkill; +import net.dev213.ms.loaders.FieldData; +import net.dev213.ms.loaders.ItemData; +import net.dev213.ms.loaders.SkillData; +import net.dev213.ms.loaders.StringData; +import net.dev213.ms.loaders.containerclasses.ItemInfo; +import net.dev213.ms.loaders.containerclasses.MakingSkillRecipe; +import net.dev213.ms.scripts.ScriptType; +import net.dev213.ms.util.Position; +import net.dev213.ms.util.Util; +import net.dev213.ms.world.World; +import net.dev213.ms.world.field.Field; +import net.dev213.ms.world.field.Portal; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.text.NumberFormat; +import java.util.*; + +import static net.dev213.ms.enums.ChatType.*; +import static net.dev213.ms.enums.EquipBaseStat.iuc; +import static net.dev213.ms.enums.EquipBaseStat.tuc; +import static net.dev213.ms.enums.InvType.*; +import static net.dev213.ms.enums.InventoryOperation.Move; + +public class ItemHandler { + + private static final Logger log = LogManager.getLogger(ItemHandler.class); + + @Handler(op = InHeader.USER_PORTAL_SCROLL_USE_REQUEST) + public static void handleUserPortalScrollUseRequest(Client c, InPacket inPacket) { + Char chr = c.getChr(); + Field field = chr.getField(); + if ((field.getFieldLimit() & FieldOption.PortalScrollLimit.getVal()) > 0 || !field.isChannelField()) { + chr.chatMessage("You may not use a return scroll in this map."); + chr.dispose(); + return; + } + c.verifyTick(inPacket); + short slot = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + + Item item = chr.getConsumeInventory().getItemBySlot(slot); + + if (item == null || item.getItemId() != itemID || item.getQuantity() < 1 || !chr.isInValidState()) { + chr.dispose("You cannot use this return scroll right now."); + return; + } + + ItemInfo ii = ItemData.getItemInfoByID(itemID); + Field toField; + + if (itemID != 2030000) { + toField = chr.getOrCreateFieldByCurrentInstanceType(ii.getMoveTo()); + } else { + toField = chr.getOrCreateFieldByCurrentInstanceType(field.getReturnMap()); + } + Portal portal = toField.getDefaultPortal(); + chr.warp(toField, portal); + chr.consumeItem(itemID, 1); + } + + + @Handler(op = InHeader.USER_STAT_CHANGE_ITEM_CANCEL_REQUEST) + public static void handleUserStatChangeItemCancelRequest(Char chr, InPacket inPacket) { + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + int itemID = inPacket.decodeInt(); + tsm.removeStatsBySkill(itemID); + tsm.sendResetStatPacket(); + } + + @Handler(op = InHeader.USER_SKILL_RESET_ITEM_USE_REQUEST) + public static void handleUserResetSP(Char chr, InPacket inPacket) { + if (inPacket != null) { + chr.getClient().verifyTick(inPacket); + short slot = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + Item item = chr.getConsumeInventory().getItemBySlot(slot); + if (item == null || itemID != item.getItemId() || itemID / 10 != 250000) { + chr.write(WvsContext.resetItemResult(true, chr.getId(), false, true)); + return; + } + chr.consumeItem(item); + } + short jobID = chr.getJob(); + List skills = new ArrayList<>(); + List jobs = SkillConstants.getSkillRootFromJob(jobID); + ExtendSP extendSP = JobConstants.isExtendSpJob(jobID) ? chr.getAvatarData().getCharacterStat().getExtendSP() : null; + int sp = 0; + for (int job : jobs) { + if (JobConstants.isBeginnerJob((short) job)) { + continue; + } + for (Skill skill : SkillData.getSkillsByJob((short) job)) { + Skill curSkill = chr.getSkill(skill.getSkillId()); + if (curSkill != null && SkillData.getSkillInfoById(skill.getSkillId()).getHyper() == 0) { + sp += curSkill.getCurrentLevel(); + curSkill.setCurrentLevel(0); + skills.add(curSkill); + chr.addSkill(curSkill); + } + } + if (extendSP != null) { + byte jobLevel = (byte) JobConstants.getJobLevelDetail((short) job); + extendSP.setSpToJobLevel(jobLevel, extendSP.getSpByJobLevel(jobLevel) + sp); + sp = 0; + } + } + if (extendSP != null) { + chr.write(WvsContext.statChanged(Collections.singletonMap(Stat.sp, extendSP))); + } else { + chr.setStatAndSendPacket(Stat.sp, chr.getStat(Stat.sp) + sp); + } + if (!skills.isEmpty()) { + chr.write(WvsContext.changeSkillRecordResult(skills, true, false, false, false)); + } + chr.write(WvsContext.resetItemResult(true, chr.getId(), true, true)); + } + + @Handler(op = InHeader.USER_ABILITY_RESET_ITEM_USE_REQUEST) + public static void handleUserResetAP(Char chr, InPacket inPacket) { + if (inPacket != null) { + chr.getClient().verifyTick(inPacket); + short slot = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + Item item = chr.getConsumeInventory().getItemBySlot(slot); + if (item == null || itemID != item.getItemId() || itemID / 10 != 250100) { + chr.write(WvsContext.resetItemResult(true, chr.getId(), false, false)); + return; + } + chr.consumeItem(item); + } + int ap = chr.getStat(Stat.ap); + ap += chr.getStat(Stat.str) - 4; + ap += chr.getStat(Stat.dex) - 4; + ap += chr.getStat(Stat.inte) - 4; + ap += chr.getStat(Stat.luk) - 4; + chr.setStat(Stat.str, 4); + chr.setStat(Stat.dex, 4); + chr.setStat(Stat.inte, 4); + chr.setStat(Stat.luk, 4); + chr.setStat(Stat.ap, ap); + Map stats = Map.of(Stat.str, (short) 4, Stat.dex, (short) 4, Stat.inte, (short) 4, Stat.luk, (short) 4, Stat.ap, (short) ap); + chr.write(WvsContext.statChanged(stats)); + chr.write(WvsContext.resetItemResult(true, chr.getId(), true, false)); + } + + @Handler(op = InHeader.USER_CONSUME_CASH_ITEM_USE_REQUEST) + public static void handleUserConsumeCashItemUseRequest(Client c, InPacket inPacket) { + Char chr = c.getChr(); + Inventory cashInv = chr.getInventoryByType(InvType.CASH); + c.verifyTick(inPacket); + short pos = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + Item item = cashInv.getItemBySlot(pos); + ItemInfo itemInfo = ItemData.getItemInfoByID(itemID); + BeautyAlbum album = chr.getBeautyAlbum(); + Item cube; + int cubeCount; + if (item == null || item.getItemId() != itemID) { + return; + } + if (itemID / 10000 == 553) { + // Reward items + if (itemID % 10000 < 3000) { + Object reward; + if (itemInfo != null && (reward = itemInfo.getRandomReward()) != null) { + if (reward instanceof Item) { + chr.addItemToInventory((Item) reward); + } else if (reward instanceof Integer && (int) reward != 0) { + chr.addMoney((int) reward); + } else { + chr.chatMessage("Oh, you're unlucky."); // should not happen + } + } else { + chr.chatMessage("Oh, you're unlucky."); + } + } else if (itemID == 5534000) { // Tim's Secret lab + short ePos = (short) inPacket.decodeInt(); + InvType invType = ePos < 0 ? EQUIPPED : EQUIP; + Equip equip = (Equip) chr.getInventoryByType(invType).getItemBySlot(ePos); + if (equip == null) { + chr.dispose("Could not find equip."); + return; + } else if (!ItemConstants.canEquipHavePotential(equip)) { + chr.dispose("You cannot use Tim's Secret Lab on this item."); + return; + } + equip.setHiddenOptionBase(ItemGrade.HiddenRare.getVal(), 100); + c.write(FieldPacket.showItemUpgradeEffect(chr.getId(), true, false, itemID, equip.getItemId(), false)); + equip.updateToChar(chr); + } + } else if (itemID / 10000 == 539) { + // Avatar Megaphones + List lineList = new ArrayList<>(); + for (int i = 0; i < 4; i++) { + String line = inPacket.decodeString(); + lineList.add(line); + } + boolean whisperIcon = inPacket.decodeByte() != 0; + World world = c.getWorld(); + world.broadcastPacket(WvsContext.setAvatarMegaphone(chr, itemID, lineList, whisperIcon)); + + } else if (itemID / 10000 == 519) { + // Pet Skill Items + long sn = inPacket.decodeLong(); + PetSkill ps = ItemConstants.getPetSkillFromID(itemID); + if (ps == null) { + chr.chatMessage(String.format("Unhandled pet skill item %d", itemID)); + return; + } + Item pi = chr.getCashInventory().getItemBySN(sn); + if (!(pi instanceof PetItem)) { + chr.chatMessage("Could not find that pet."); + return; + } + boolean add = itemID < 5191000; // add property doesn't include the "Slimming Medicine" + PetItem petItem = (PetItem) pi; + if (add) { + petItem.addPetSkill(ps); + } else { + petItem.removePetSkill(ps); + } + petItem.updateToChar(chr); + } else if (ItemConstants.isMiuMiuMerchant(itemID)) { + + chr.getScriptManager().openShop(9090000); + + } else if (ItemConstants.isPortableStorage(itemID)) { + + chr.getScriptManager().openTrunk(1022005); + } else if (itemID / 10000 == 512) { // Weather Items + chr.getField().blowWeather(itemID, inPacket.decodeString(), 10, null); + int stateChangeItem = itemInfo.getStateChangeItem(); + if (stateChangeItem != 0 && !ItemData.getItemInfoByID(stateChangeItem).getSpecStats().isEmpty()) { + chr.getField().getChars().forEach(it -> ItemBuffs.giveItemBuffsFromItemID(it, it.getTemporaryStatManager(), stateChangeItem)); + } + } else { + + Equip medal = (Equip) chr.getEquippedInventory().getFirstItemByBodyPart(BodyPart.Medal); + int medalInt = 0; + if (medal != null) { + medalInt = (medal.getAnvilId() == 0 ? medal.getItemId() : medal.getAnvilId()); // Check for Anvilled medal + } + String medalString = (medalInt == 0 ? "" : String.format("<%s> ", StringData.getItemStringById(medalInt))); + + switch (itemID) { + case ItemConstants.HYPER_TELEPORT_ROCK: // Hyper Teleport Rock + short type = inPacket.decodeShort(); + if (type == 0 || type == 1) { + int fieldId = inPacket.decodeInt(); + Field field = chr.getOrCreateFieldByCurrentInstanceType(fieldId); + if (field == null || (chr.getField().getFieldLimit() & FieldOption.TeleportItemLimit.getVal()) > 0 || + !FieldData.getWorldMapFields().contains(fieldId)) { + chr.chatMessage("You may not warp to that map, as you cannot teleport from your current map."); + chr.dispose(); + return; + } + chr.setInstance(null); + chr.warp(field); + } else { + String targetName = inPacket.decodeString(); + int worldID = chr.getClient().getChannelInstance().getWorldId().getVal(); + World world = Server.getInstance().getWorldById(worldID); + Char targetChr = world.getCharByName(targetName); + + // Target doesn't exist or target char is not a regular player + if (targetChr == null || targetChr.getAccount().getAccountType().getVal() >= 1) { + chr.chatMessage(String.format("%s is not online.", targetName)); + chr.dispose(); + return; + } + + Position targetPosition = targetChr.getPosition(); + + Field targetField = targetChr.getField(); + if (targetField == null || (targetField.getFieldLimit() & FieldOption.TeleportItemLimit.getVal()) > 0) { + chr.chatMessage("You may not warp to that map, as the targeted map cannot be teleported to."); + chr.dispose(); + return; + } + // Target is in an instanced Map + if (targetChr.getInstance() != null) { + chr.chatMessage(String.format("cannot find %s", targetName)); + // Change channels & warp & teleport + } else if (targetChr.getClient().getChannel() != c.getChannel()) { + chr.setInstance(null); + chr.chatMessage(String.format("cannot find %s on this channel", targetName)); + //chr.changeChannelAndWarp(targetChr.getClient().getChannel(), fieldId); // Makes you warp to player without being in the same CH + return; + // warp & teleport + } else if (targetChr.getFieldID() != chr.getFieldID()) { + chr.setInstance(null); + chr.warp(targetField); + chr.write(FieldPacket.teleport(targetPosition, chr)); + // teleport + } else { + chr.write(FieldPacket.teleport(targetPosition, chr)); + } + } + break; + case 5170000: + int petID = inPacket.decodeInt(); + inPacket.decodeInt(); //?? + String petName1 = inPacket.decodeString(); + + Pet petid = chr.getPetById(petID); + + if (petName1.length() > 13) { + chr.chatMessage("no"); + chr.dispose(); + return; + } + + if (petid != null) { + petid.setName(petName1); + petid.getItem().setName(petName1); + int idx = petid.getIdx(); + chr.write(UserLocal.petNameChange(chr, idx, petName1)); + } + break; + case ItemConstants.OCCULT_CUBE: + case ItemConstants.RED_CUBE: // Red Cube + case ItemConstants.BLACK_CUBE: // Black cube + cube = chr.getCashInventory().getItemByItemID(itemID); + cubeCount = cube.getQuantity(); + cubeCount--; + + short ePos = (short) inPacket.decodeInt(); + InvType invType = ePos < 0 ? EQUIPPED : EQUIP; + Equip equip = (Equip) chr.getInventoryByType(invType).getItemBySlot(ePos); + if (equip == null) { + chr.chatMessage(SystemNotice, "Could not find equip."); + chr.dispose(); + return; + } else if (equip.getBaseGrade() < ItemGrade.Rare.getVal()) { + String msg = String.format("Character %d tried to use cube (id %d) an equip without a potential (id %d)", chr.getId(), itemID, equip.getItemId()); + chr.getOffenseManager().addOffense(msg); + chr.dispose(); + return; + } else if (itemID == ItemConstants.OCCULT_CUBE && equip.getBaseGrade() > ItemGrade.Epic.getVal()) { + chr.chatMessage(SystemNotice, "You may only use this on Rare or Epic Items!"); + chr.dispose(); + return; + } + short hiddenValue = ItemGrade.getHiddenGradeByVal(equip.getBaseGrade()).getVal(); + int tierUpChance = ItemConstants.getTierUpChance(itemID, hiddenValue); + boolean tierUp = tierUpChance > 0 && Util.succeedProp(tierUpChance); + if (tierUp && (itemID != ItemConstants.OCCULT_CUBE || equip.getBaseGrade() != ItemGrade.Epic.getVal())) { + hiddenValue++; + } + if (itemID == ItemConstants.RED_CUBE) { + equip.setHiddenOptionBase(hiddenValue, 0); + equip.releaseOptions(false); + chr.getField().broadcastPacket(UserPacket.showItemMemorialEffect(chr.getId(), true, itemID, ePos, pos)); + c.write(FieldPacket.redCubeResult(chr.getId(), tierUp, itemID, ePos, equip, cubeCount)); +// c.write(FieldPacket.showItemReleaseEffect(chr.getId(), ePos, false)); + equip.updateToChar(chr); + if (invType == EQUIPPED) { + chr.recalcStats(equip.getBaseStatFlag()); + } + } else { + if (chr.getMemorialCubeInfo() == null) { + chr.setMemorialCubeInfo(new MemorialCubeInfo(equip.deepCopy(), itemID)); + } + Equip newEquip = chr.getMemorialCubeInfo().getEquip(); + newEquip.setHiddenOptionBase(hiddenValue, 0); + newEquip.releaseOptions(false); + chr.getField().broadcastPacket(UserPacket.showItemMemorialEffect(chr.getId(), true, itemID, ePos, pos)); + c.write(WvsContext.blackCubeResult(equip, chr.getMemorialCubeInfo(), cubeCount)); + } + break; + case ItemConstants.VIOLET_CUBE: // Violet cube + ePos = (short) inPacket.decodeInt(); + invType = ePos < 0 ? EQUIPPED : EQUIP; + equip = (Equip) chr.getInventoryByType(invType).getItemBySlot(ePos); + if (equip == null) { + chr.chatMessage(SystemNotice, "Could not find equip."); + chr.dispose(); + return; + } + long number = equip.getId(); + Equip copy = equip.deepCopy(); + if (copy.getBaseGrade() < ItemGrade.Rare.getVal()) { + String msg = String.format("Character %d tried to use cube (id %d) an equip without a potential (id %d)", chr.getId(), itemID, equip.getItemId()); + chr.getOffenseManager().addOffense(msg); + chr.dispose(); + return; + } else if (chr.getMoney() < 36000) { // TODO: correct cost by level + c.write(WvsContext.broadcastMsg(BroadcastMsg.popUpMessage("You do not have enough mesos."))); + c.write(CUIHandler.violetCubeResult(0, 1, 0, Collections.emptyList())); + return; + } + byte line = (byte) Arrays.stream(copy.getOptionBase()).filter(option -> option > 0).count(); + if (line <= 1) { + chr.chatMessage(SystemNotice, "You cannot use Violet Cube on this item."); + c.write(CUIHandler.violetCubeResult(0, 1, line, Collections.emptyList())); + return; + } + short optionGrade = ItemGrade.getHiddenGradeByVal(copy.getBaseGrade()).getVal(); + tierUpChance = ItemConstants.getTierUpChance(itemID, optionGrade); + if (tierUpChance > 0 && Util.succeedProp(tierUpChance)) { + optionGrade++; + } + copy.setItemState(optionGrade); + List options = new ArrayList<>(line * 2); + for (byte i = 0; i < line * 2; i++) { + options.add(copy.getRandomOption(false, i % 3)); // ensure 2 of 4/6 options are higher rank + } + Quest quest = chr.getQuestManager().getOrCreateQuestById(QuestConstants.VIOLET_CUBE_INFO); + quest.setProperty("o", options.toString().replace("[", "").replace("]", "").replace(" ", "")); + quest.setProperty("n", String.valueOf(number)); + quest.setProperty("p", ePos); + quest.setProperty("c", line); + quest.setProperty("i", copy.getItemId()); + quest.setProperty("og", optionGrade); + chr.write(WvsContext.questRecordExMessage(quest)); + chr.deductMoney(36000); // TODO: correct cost by level + c.write(FieldPacket.showItemUnReleaseEffect(chr.getId(), true, itemID, 0, copy.getItemId())); + c.write(CUIHandler.violetCubeResult(0, 0, line, options)); + chr.chatMessage(options.toString()); + break; + case ItemConstants.BONUS_POT_CUBE: // Bonus Potential Cube + case ItemConstants.SPECIAL_BONUS_POT_CUBE: // [Special] Bonus Potential Cube + case ItemConstants.WHITE_BONUS_POT_CUBE: // White Bonus Potential Cube + cube = chr.getCashInventory().getItemByItemID(itemID); + cubeCount = cube.getQuantity(); + cubeCount--; + + if (c.getWorld().isReboot()) { + chr.getOffenseManager().addOffense(String.format("Character %d attempted to use a bonus potential cube in reboot world.", chr.getId())); + chr.dispose(); + return; + } + ePos = (short) inPacket.decodeInt(); + invType = ePos < 0 ? EQUIPPED : EQUIP; + equip = (Equip) chr.getInventoryByType(invType).getItemBySlot(ePos); + if (equip == null) { + chr.chatMessage(SystemNotice, "Could not find equip."); + chr.dispose(); + return; + } else if (equip.getBonusGrade() < ItemGrade.Rare.getVal()) { + chr.getOffenseManager().addOffense(String.format("Character %d tried to use cube (id %d) an equip without a potential (id %d)", chr.getId(), itemID, equip.getItemId())); + chr.dispose(); + return; + } + hiddenValue = ItemGrade.getHiddenGradeByVal(equip.getBonusGrade()).getVal(); + tierUpChance = ItemConstants.getTierUpChance(itemID, hiddenValue); + tierUp = tierUpChance > 0 && Util.succeedProp(tierUpChance); + if (tierUp) { + hiddenValue++; + } + if (itemID != ItemConstants.WHITE_BONUS_POT_CUBE) { + equip.setHiddenOptionBonus(hiddenValue, 0); + equip.releaseOptions(true); + chr.getField().broadcastPacket(UserPacket.showItemMemorialEffect(chr.getId(), true, itemID, ePos, pos)); + c.write(FieldPacket.bonusCubeResult(chr.getId(), tierUp, itemID, ePos, equip, cubeCount)); +// c.write(FieldPacket.showItemReleaseEffect(chr.getId(), ePos, true)); + equip.updateToChar(chr); + if (invType == EQUIPPED) { + chr.recalcStats(equip.getBaseStatFlag()); + } + } else { + if (chr.getMemorialCubeInfo() == null) { + chr.setMemorialCubeInfo(new MemorialCubeInfo(equip.deepCopy(), itemID)); + } + Equip newEquip = chr.getMemorialCubeInfo().getEquip(); + newEquip.setHiddenOptionBonus(hiddenValue, 0); + newEquip.releaseOptions(true); + chr.getField().broadcastPacket(UserPacket.showItemMemorialEffect(chr.getId(), true, itemID, ePos, pos)); + c.write(WvsContext.whiteCubeResult(equip, chr.getMemorialCubeInfo(), cubeCount)); + } + break; + case 5520001: // Platinum Scissors of Karma + inPacket.decodeInt(); // 1 + ePos = (short) inPacket.decodeInt(); + equip = (Equip) chr.getEquipInventory().getItemBySlot(ePos); + if (equip == null) { + chr.chatMessage("Could not find equip."); + chr.dispose(); + return; + } else if (equip.hasAttribute(EquipAttribute.Locked) + || !equip.hasAttribute(EquipAttribute.Untradable) + || equip.hasAttribute(EquipAttribute.UntradableAfterTransaction) + || equip.getCuttable() == 0) { + chr.chatMessage("You cannot use Scissors of Karma on this equip."); + chr.dispose(); + return; + } + equip.addAttribute(EquipAttribute.UntradableAfterTransaction); + equip.setTradeBlock(false); + equip.setEquipTradeBlock(true); + //equip.setCuttable((short) 0); + equip.updateToChar(chr); + break; + case 5750001: // Nebulite Diffuser + ePos = inPacket.decodeShort(); + equip = (Equip) chr.getEquipInventory().getItemBySlot(ePos); + if (equip == null || equip.getSocket(0) == 0 || equip.getSocket(0) == ItemConstants.EMPTY_SOCKET_ID) { + chr.chatMessage("That item currently does not have an active socket."); + chr.dispose(); + return; + } + equip.setSocket(0, ItemConstants.EMPTY_SOCKET_ID); + equip.updateToChar(chr); + break; + case 5072000: // Super Megaphone + String text = inPacket.decodeString(); + boolean whisperIcon = inPacket.decodeByte() != 0; + World world = chr.getClient().getWorld(); + BroadcastMsg smega = BroadcastMsg.megaphone( + String.format("%s%s : %s", medalString, chr.getName(), text), + (byte) chr.getClient().getChannelInstance().getChannelId(), whisperIcon, chr); + world.broadcastPacket(WvsContext.broadcastMsg(smega)); + break; + case 5076000: // Item Megaphone + text = inPacket.decodeString(); + whisperIcon = inPacket.decodeByte() != 0; + boolean eqpSelected = inPacket.decodeByte() != 0; + invType = EQUIP; + int itemPosition = 0; + if (eqpSelected) { + invType = InvType.getInvTypeByVal(inPacket.decodeInt()); + itemPosition = inPacket.decodeInt(); + if (invType == EQUIP && itemPosition < 0) { + invType = EQUIPPED; + } + } + Item broadcastedItem = chr.getInventoryByType(invType).getItemBySlot(itemPosition); + + world = chr.getClient().getWorld(); + smega = BroadcastMsg.itemMegaphone(String.format("%s%s : %s", medalString, chr.getName(), text), + (byte) chr.getClient().getChannelInstance().getChannelId(), whisperIcon, eqpSelected, + broadcastedItem, chr); + world.broadcastPacket(WvsContext.broadcastMsg(smega)); + break; + case 5077000: // Triple Megaphone + byte stringListSize = inPacket.decodeByte(); + List stringList = new ArrayList<>(); + for (int i = 0; i < stringListSize; i++) { + stringList.add(String.format("%s%s : %s", medalString, chr.getName(), inPacket.decodeString())); + } + whisperIcon = inPacket.decodeByte() != 0; + + world = chr.getClient().getWorld(); + smega = BroadcastMsg.tripleMegaphone(stringList, + (byte) chr.getClient().getChannelInstance().getChannelId(), whisperIcon, chr); + world.broadcastPacket(WvsContext.broadcastMsg(smega)); + break; + case 5062400: // Fusion anvil + case 5062402: // Medal Fusion anvil + case 5062405: // Fusion anvil + int appearancePos = inPacket.decodeInt(); + int functionPos = inPacket.decodeInt(); + Inventory inv = chr.getEquipInventory(); + Equip appearance = (Equip) inv.getItemBySlot(appearancePos); + Equip function = (Equip) inv.getItemBySlot(functionPos); + if (appearance == null || function == null) { + chr.dispose("Could not find equip."); + return; + } else if (appearance.getItemId() / 10000 != function.getItemId() / 10000) { + chr.dispose("Fusion only works on equipment of the same type. Please check the item you want to Fuse."); + return; + } else if (itemID == 5062402 && !ItemConstants.isMedal(appearance.getItemId())) { + chr.dispose("Medal Fusion Anvil only works on medals."); + return; + } else if (itemID != 5062402 && ItemConstants.isMedal(appearance.getItemId())) { + chr.dispose("Fusion Anvil doesn't work on medals."); + return; + } + if (appearance.getItemId() / 10000 == function.getItemId() / 10000) { + function.setOption(6, appearance.getItemId() % 10000, false); + } + function.updateToChar(chr); + break; + //These are semi buggy + case 5155000: //Elf to Human | anyone to Elf + if (chr.getCarta() == 1) { + chr.setCarta(0); + } else { + chr.setCarta(1); + } + break; + case 5155004: //Illium to Human | anyone to Illium + if (chr.getCarta() == 2) { + chr.setCarta(0); + } else { + chr.setCarta(2); + } + break; + case 5155005: //Ark to Human | anyone to Ark + if (chr.getCarta() == 3) { + chr.setCarta(0); + } else { + chr.setCarta(3); + } + break; + case 5068300: //Random Pet Box + int[] pets = new int[]{ + 5002106, 5002107, 5002108, 5000921, 5000922, 5000923, 5002076, 5002077, 5002078, 5002057, 5002058, 5002059, 5000954, 5000955, 5000956, 5002048, 5002049, 5002050, 5002045, 5002046, 5002047, + 5000960, 5000961, 5000962, 5002066, 5002067, 5002068, 5002030, 5002031, 5002032, 5002040, 5002039, 5002036, 5002037, 5002038, 5002033, 5002034, 5002035, 5002028, 5002029, 5002021, 5002022, + 5002023, 5002017, 5002011, 5002012, 5002013, 5002003, 5002004, 5002005, 5000997, 5000998, 5000999, 5000979, 5000980, 5000981, 5000977, 5000794, 5000973, 5000972, 5000971, 5000970, 5000964, + 5000965, 5000966, 5000967, 5000968, 5000969, 5000909, 5000910, 5000911, 5000942, 5000943, 5000944, 5000939, 5000933, 5000934, 5000935, 5000915, 5000916, 5000917, 5000912, 5000913, 5000914, + 5000906, 5000907, 5000908, 5000900, 5000901, 5000902, 5000846, 5000847, 5000848, 5000836, 5000835, 5000822, 5000823, 5000824, 5000812, 5000813, 5000814, 5000798, 5000793, 5000794, 5000796, + 5000762, 5000763, 5000764, 5000696, 5000633, 5000634, 5000635, 5000565, 5000566, 5000567, 5000460, 5000461, 5000462, 5000677, 5000678, 5000443, 5000444, 5000445, 5000647, 5000648, 5000649, + 5000636, 5000637, 5000638, 5000637, 5000638, 5000536, 5000537, 5000538, 5000456, 5000457, 5000458, 5000499, 5000405, 5000406, 5000407, 5000402, 5000403, 5000404, 5000385, 5000386, 5000387, + 5000368, 5000341, 5000316 + }; + Random pet = new Random(); + int randomIndex = pet.nextInt(pets.length); + int getRandomPet = pets[randomIndex]; + String petName = StringData.getItemStringById(getRandomPet); + if (chr.canHold(getRandomPet, 1)) { + String worldTxt = (chr.getName() + " just got a cute " + petName + " from the Wisp's Wondrous Wonderberry"); + chr.getWorld().broadcastPacket(UserLocal.chatMsg(MiracleTime, worldTxt)); + chr.addItemToInventory(getRandomPet, 1); + } else { + chr.chatMessage("Make room in your cash Inventory!"); + } + break; + case 5222058: + int[] chairs = new int[]{3018427, 3018425, 3018424, 3018416, 3018390, 3018389, 3018370, 3018369, 3018365, 3018358}; + Random chair = new Random(); + int randomcIndex = chair.nextInt(chairs.length); + int getRandomChair = chairs[randomcIndex]; + String chairName = StringData.getItemStringById(getRandomChair); + if (chr.canHold(getRandomChair, 1)) { + String worldTxt = (chr.getName() + " just got a " + chairName + " from the Chair Box"); + chr.getWorld().broadcastPacket(UserLocal.chatMsg(MiracleTime, worldTxt)); + chr.addItemToInventory(getRandomChair, 1); + } else { + chr.chatMessage("Make room in your SetUp Inventory!"); + } + break; + case 5062800: // Miracle Circulator + case 5062801: + CharacterPotentialMan cpm = chr.getPotentialMan(); + if (cpm.getGrade() == 0) { + chr.dispose("You cannot use Miracle Circulator in your current state."); + return; + } + byte grade = cpm.getGrade(); + // update grades + if (grade < CharPotGrade.Legendary.ordinal() && Util.succeedProp(GameConstants.BASE_CHAR_POT_UP_RATE)) { + grade++; + } + MiracleCirculatorInfo mci = new MiracleCirculatorInfo(itemID, item.getId()); + List potentials = CharacterPotentialMan.generateRandomPotential(3, grade, false, null); + potentials.sort(Comparator.comparingInt(CharacterPotentialData::getKey)); + for (CharacterPotential cp : potentials) { + mci.getPotentials().add(cp); + chr.chatMessage("Key:" + cp.getKey() + " Grade:" + cp.getGrade() + " SkillID:" + cp.getSkillID() + + "(" + StringData.getSkillStringById(cp.getSkillID()).getName() + ") SLV:" + cp.getSlv()); + } + chr.setMiracleCirculatorInfo(mci); + c.write(WvsContext.miracleCirculatorResult(mci, pos)); + break; + case 5570000: + inPacket.decodeInt(); // use hammer? useless though + ePos = (short) inPacket.decodeInt(); // equip slot + invType = ePos < 0 ? EQUIPPED : EQUIP; + equip = (Equip) chr.getInventoryByType(invType).getItemBySlot(ePos); + if (equip == null) { + chr.write(WvsContext.viciousHammerItemUpgradeResult(192, 1, 0)); + return; + } + short maxHammers = ItemConstants.MAX_HAMMER_SLOTS; + Equip defaultEquip = ItemData.getEquipById(equip.getItemId()); + if (defaultEquip.isHasIUCMax()) { + maxHammers = defaultEquip.getIUCMax(); + } + if (equip.getIuc() >= maxHammers) { + chr.write(WvsContext.viciousHammerItemUpgradeResult(192, 2, 0)); + chr.getOffenseManager().addOffense(String.format("Character %d tried to use Vicious's Hammer an invalid equip (id %d)", + chr.getId(), equip.getItemId())); + return; + } + if (!ItemConstants.canEquipGoldHammer(equip)) { + chr.write(WvsContext.viciousHammerItemUpgradeResult(192, 3, 0)); + chr.getOffenseManager().addOffense(String.format("Character %d tried to use Vicious' Hammer on an invalid equip (id %d)", + chr.getId(), equip.getItemId())); + return; + } + equip.addStat(iuc, 1); // +1 hammer used + equip.addStat(tuc, 1); // +1 upgrades available + equip.updateToChar(chr); + chr.write(WvsContext.viciousHammerItemUpgradeResult(190, 0, equip.getIuc())); + break; + case 5050100: // AP Reset Scroll + handleUserResetAP(chr, null); + break; + case 5051001: // SP Reset Scroll + handleUserResetSP(chr, null); + break; + case 5064000: // Shielding Ward (reg 12 stars) + case 5064003: // Superior Shielding Ward (reg 7 stars) + case 5064100: // Shield Scroll + case 5064300: // Guardian Scroll + case 5064400: // Return Scroll + case 5068100: // Pet Shield Scroll + ePos = inPacket.decodeShort(); + inPacket.decodeByte(); + invType = ePos < 0 ? EQUIPPED : EQUIP; + equip = (Equip) chr.getInventoryByType(invType).getItemBySlot(ePos); + if (equip == null) { + chr.dispose("Could not find equip."); + return; + } else if (itemID == 5064000 && equip.getChuc() >= 12 // TODO: superior item check + || itemID == 5064003 && equip.getChuc() >= 7 + || itemID == 5068100 && equip.getItemId() / 10000 != EquipPrefix.PetWear.getVal()) { + chr.dispose("You cannot use this scroll on this item."); + return; + } + switch (itemID % 10000 / 100) { + case 40 -> equip.addAttribute(EquipAttribute.ProtectionScroll); + case 41, 81 -> equip.addAttribute(EquipAttribute.UpgradeCountProtection); + case 43 -> equip.addAttribute(EquipAttribute.ScrollProtection); + case 44 -> equip.addAttribute(EquipAttribute.ReturnScroll); + // TODO: add actual effects on server side + } + chr.chatMessage("The scroll effect is not implemented yet."); + equip.updateToChar(chr); + break; + case 5553000: + if (album.getHairSlot() < 50) { + album.setHairSlot(album.getHairSlot() + 1); + chr.write(UserLocal.beautyAlbumActions((byte) 0x5, 30000, album.getHairSlot(), album)); + } + break; + case 5552000: + if (album.getFaceSlot() < 50) { + album.setFaceSlot(album.getFaceSlot() + 1); + chr.write(UserLocal.beautyAlbumActions((byte) 0x5, 20000, album.getFaceSlot(), album)); + } + break; + default: + chr.chatMessage(Mob, String.format("Cash item %d is not implemented, notify Taiga pls.", itemID)); + return; + } + } + if (itemID != 5040004 && itemID / 10000 != 545) { // TP Rocks and Portable Stores / Storages + chr.consumeItem(item); + } + chr.dispose(); + } + + + @Handler(op = InHeader.USER_ARCANE_SYMBOL_MERGE_REQUEST) + public static void handleUserArcaneSymbolMergeRequest(Char chr, InPacket inPacket) { + int type = inPacket.decodeInt(); + int fromPos = inPacket.decodeInt(); + switch (type) { + case 0: + // merge + Equip fromEq = (Equip) chr.getEquipInventory().getItemBySlot(fromPos); + Equip toEq = (Equip) chr.getEquippedInventory().getItemByItemID(fromEq == null ? 0 : fromEq.getItemId()); + if (fromEq == null || toEq == null || fromEq.getItemId() != toEq.getItemId() || !ItemConstants.isArcaneSymbol(toEq.getItemId())) { + chr.chatMessage("Could not find one of the symbols."); + return; + } + if (toEq.getSymbolExp() >= ItemConstants.getRequiredSymbolExp(toEq.getSymbolLevel())) { + chr.chatMessage("Your symbol already is at max exp."); + return; + } + chr.consumeItem(fromEq); + toEq.setSymbolExp(Math.min(toEq.getSymbolExp() + fromEq.getSymbolExp(), ItemConstants.getRequiredSymbolExp(toEq.getSymbolLevel()))); + toEq.updateToChar(chr); + break; + case 1: + // enhance + Equip symbol = (Equip) chr.getEquippedInventory().getItemBySlot(fromPos); + int reqSymbolExp = ItemConstants.getRequiredSymbolExp(symbol.getLevel()); + if (symbol == null || !ItemConstants.isArcaneSymbol(symbol.getItemId()) + || symbol.getSymbolLevel() >= ItemConstants.MAX_ARCANE_SYMBOL_LEVEL + || symbol.getSymbolExp() < reqSymbolExp) { + chr.chatMessage("Could not find symbol."); + return; + } + long cost = ItemConstants.getSymbolMoneyReqByLevel(symbol.getSymbolLevel()); + if (cost > chr.getMoney()) { + chr.chatMessage("You do not have enough mesos to level up your symbol."); + return; + } + chr.deductMoney(cost); + symbol.setSymbolLevel((short) (symbol.getSymbolLevel() + 1)); + symbol.addSymbolExp(-reqSymbolExp); + symbol.initSymbolStats(symbol.getSymbolLevel(), chr.getJob()); + symbol.updateToChar(chr); + chr.recalcStats(symbol.getBaseStatFlag()); + break; + case 2: + // mass merge + int itemId = fromPos; + toEq = (Equip) chr.getEquippedInventory().getItemByItemID(itemId); + if (!(toEq instanceof Equip) || !ItemConstants.isArcaneSymbol(itemId)) { + chr.chatMessage("Could not find an arcane symbol to transfer to."); + return; + } + if (toEq.hasSymbolExpForLevelUp()) { + chr.chatMessage("First level your symbol before trying to add more symbols onto it."); + return; + } + Set matchingSymbols = new HashSet<>(); + for (Item item : chr.getEquipInventory().getItems()) { + if (item.getItemId() == toEq.getItemId()) { + matchingSymbols.add((Equip) item); + } + } + for (Equip eqSymbol : matchingSymbols) { + chr.consumeItem(eqSymbol); + toEq.addSymbolExp(eqSymbol.getTotalSymbolExp()); + if (toEq.hasSymbolExpForLevelUp()) { + break; + } + } + toEq.updateToChar(chr); + break; + } + } + + + @Handler(op = InHeader.USER_STAT_CHANGE_ITEM_USE_REQUEST) + public static void handleUserStatChangeItemUseRequest(Client c, InPacket inPacket) { + Char chr = c.getChr(); + Field field = chr.getField(); + if ((field.getFieldLimit() & FieldOption.StatChangeItemConsumeLimit.getVal()) > 0) { + chr.dispose(); + return; + } + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + c.verifyTick(inPacket); + short slot = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + Item item = chr.getConsumeInventory().getItemBySlot(slot); + if (item == null || item.getItemId() != itemID || !chr.isInValidState()) { + chr.dispose(); + return; + } + chr.useStatChangeItem(item, true); + if (field.getConsumeItemCoolTime() > 0) { + chr.write(UserLocal.consumeItemCooltime()); + } + } + + + @Handler(op = InHeader.USER_SCRIPT_ITEM_USE_REQUEST) + public static void handleUserScriptItemUseRequest(Client c, InPacket inPacket) { + c.verifyTick(inPacket); + short slot = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + int quant = inPacket.decodeInt(); + Char chr = c.getChr(); + Item item = chr.getConsumeInventory().getItemBySlot(slot); + if (item == null || item.getItemId() != itemID) { + item = chr.getCashInventory().getItemBySlot(slot); + } + if (item == null || item.getItemId() != itemID || quant < 0 || !chr.isInValidState()) { + chr.dispose(); + return; + } + String script = String.valueOf(itemID); + ItemInfo ii = ItemData.getItemInfoByID(itemID); + if (ii.getScript() != null && !"".equals(ii.getScript())) { + script = ii.getScript(); + } + if (item.getItemId() == ItemConstants.GAGAGUCCI) { + int qid = QuestConstants.PVAC_DATA; + if (chr.getRecordFromQuestEx(qid, "vac") == 0) { + chr.setQuestRecordEx(qid, "vac", 1); + chr.chatMessage("Pvac has been enabled"); + } else { + chr.setQuestRecordEx(qid, "vac", 0); + chr.chatMessage("Pvac has been disabled"); + } + chr.dispose(); + return; + } + + chr.getScriptManager().startScript(itemID, script, ScriptType.Item); + chr.dispose(); + } + + + @Handler(op = InHeader.USER_EQUIPMENT_ENCHANT_WITH_SINGLE_UI_REQUEST) + public static void handleUserEquipmentEnchantWithSingleUIRequest(Client c, InPacket inPacket) { + byte equipmentEnchantType = inPacket.decodeByte(); + + Char chr = c.getChr(); + EquipmentEnchantType eeType = EquipmentEnchantType.getByVal(equipmentEnchantType); + + if (eeType == null) { + log.error(String.format("Unknown enchant UI request %d", equipmentEnchantType)); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + + switch (eeType) { + case ScrollUpgradeRequest: + c.verifyTick(inPacket); + short pos = inPacket.decodeShort(); + int scrollID = inPacket.decodeInt(); + Inventory inv = pos < 0 ? chr.getEquippedInventory() : chr.getEquipInventory(); + pos = (short) Math.abs(pos); + Equip equip = (Equip) inv.getItemBySlot(pos); + if (equip == null || equip.hasSpecialAttribute(EquipSpecialAttribute.Vestige)) { + chr.getOffenseManager().addOffense(String.format("Character %d tried to enchant a non-scrollable equip (pos %d, itemid %d).", + chr.getId(), pos, equip == null ? 0 : equip.getItemId())); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + Equip prevEquip = equip.deepCopy(); + List suis = ItemConstants.getScrollUpgradeInfosByEquip(equip); + if (scrollID < 0 || scrollID >= suis.size()) { + chr.getOffenseManager().addOffense(String.format("Characer %d tried to spell trace scroll with an invalid scoll ID (%d, " + + "itemID %d).", chr.getId(), scrollID, equip.getItemId())); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + ScrollUpgradeInfo sui = suis.get(scrollID); + if (equip.getBaseStat(tuc) <= 0 && sui.getType() == SpellTraceScrollType.Normal) { + chr.getOffenseManager().addOffense(String.format("Character %d tried to enchant a non-scrollable equip (pos %d, itemid %d).", + chr.getId(), pos, equip.getItemId())); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + chr.consumeItem(ItemConstants.SPELL_TRACE_ID, sui.getCost()); + boolean success = sui.applyTo(equip); + equip.recalcEnchantmentStats(); + String desc = success ? "Your item has been upgraded." : "Your upgrade has failed."; + chr.write(FieldPacket.showScrollUpgradeResult(false, success ? 1 : 0, desc, prevEquip, equip)); + equip.updateToChar(chr); + if (pos < 0) { + chr.recalcStats(equip.getBaseStatFlag()); + } + suis = ItemConstants.getScrollUpgradeInfosByEquip(equip); + c.write(FieldPacket.scrollUpgradeDisplay(false, suis)); + break; + case HyperUpgradeResult: + c.verifyTick(inPacket); + int eqpPos = inPacket.decodeShort(); + boolean extraChanceFromMiniGame = inPacket.decodeByte() != 0; + equip = (Equip) chr.getEquipInventory().getItemBySlot(eqpPos); + if (extraChanceFromMiniGame) { + inPacket.decodeInt(); + } + inPacket.decodeInt(); + inPacket.decodeInt(); + boolean safeGuard = inPacket.decodeByte() != 0; + boolean equippedInv = eqpPos < 0; + inv = equippedInv ? chr.getEquippedInventory() : chr.getEquipInventory(); + equip = (Equip) inv.getItemBySlot(Math.abs(eqpPos)); + if (equip == null) { + chr.chatMessage("Could not find the given equip."); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + if (!ItemConstants.isUpgradable(equip.getItemId()) + || (equip.getBaseStat(tuc) != 0 && !c.getWorld().isReboot()) + || chr.getEquipInventory().getEmptySlots() == 0 + || equip.getChuc() >= GameConstants.getMaxStars(equip) + || equip.hasSpecialAttribute(EquipSpecialAttribute.Vestige)) { + chr.chatMessage("Equipment cannot be enhanced."); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + long cost = GameConstants.getEnchantmentMesoCost(equip.getrLevel() + equip.getiIncReq(), equip.getChuc(), equip.isSuperiorEqp()); + if (chr.getMoney() < cost) { + chr.chatMessage("Mesos required: " + NumberFormat.getNumberInstance(Locale.US).format(cost)); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + Equip oldEquip = equip.deepCopy(); + int successProp = GameConstants.getEnchantmentSuccessRate(equip); + if (extraChanceFromMiniGame) { + successProp *= 1.045; + } + int destroyProp = safeGuard && equip.canSafeguardHyperUpgrade() ? 0 : GameConstants.getEnchantmentDestroyRate(equip); + if (equippedInv && destroyProp > 0 && chr.getEquipInventory().getEmptySlots() == 0) { + c.write(WvsContext.broadcastMsg(BroadcastMsg.popUpMessage("You do not have enough space in your " + + "equip inventory in case your item gets destroyed."))); + return; + } + success = Util.succeedProp(successProp, 1000); + boolean boom = false; + boolean canDegrade = equip.isSuperiorEqp() ? equip.getChuc() > 0 : equip.getChuc() > 5 && equip.getChuc() % 5 != 0; + if (success) { + equip.setChuc((short) (equip.getChuc() + 1)); + equip.setDropStreak(0); + } else if (Util.succeedProp(destroyProp, 1000)) { + equip.setChuc((short) 0); + equip.makeVestige(); + boom = true; + if (equippedInv) { + chr.unequip(equip); + equip.setBagIndex(chr.getEquipInventory().getFirstOpenSlot()); + equip.updateToChar(chr); + c.write(WvsContext.inventoryOperation(true, false, Move, (short) eqpPos, (short) equip.getBagIndex(), 0, equip)); + } + if (!equip.isSuperiorEqp()) { + equip.setChuc((short) Math.min(12, equip.getChuc())); + } else { + equip.setChuc((short) 0); + } + } else if (canDegrade) { + equip.setChuc((short) (equip.getChuc() - 1)); + equip.setDropStreak(equip.getDropStreak() + 1); + } + chr.deductMoney(cost); + equip.recalcEnchantmentStats(); + oldEquip.recalcEnchantmentStats(); + equip.updateToChar(chr); + if (equippedInv) { + chr.recalcStats(equip.getBaseStatFlag()); + } + c.write(FieldPacket.showUpgradeResult(oldEquip, equip, success, boom, canDegrade)); + chr.dispose(); + break; + case TransmissionResult: + c.verifyTick(inPacket); + short toPos = inPacket.decodeShort(); + short fromPos = inPacket.decodeShort(); + Equip fromEq = (Equip) chr.getEquipInventory().getItemBySlot(fromPos); + Equip toEq = (Equip) chr.getEquipInventory().getItemBySlot(toPos); + if (fromEq == null || toEq == null || fromEq.getItemId() != toEq.getItemId() + || !fromEq.hasSpecialAttribute(EquipSpecialAttribute.Vestige)) { + log.error(String.format("Equip transmission failed: from = %s, to = %s", fromEq, toEq)); + c.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + fromEq.removeVestige(); + fromEq.setChuc((short) 0); + chr.consumeItem(toEq); + fromEq.updateToChar(chr); + c.write(FieldPacket.showTranmissionResult(fromEq, toEq)); + break; + case ScrollUpgradeDisplay: + int ePos = inPacket.decodeInt(); + inv = ePos < 0 ? chr.getEquippedInventory() : chr.getEquipInventory(); + ePos = Math.abs(ePos); + equip = (Equip) inv.getItemBySlot(ePos); + if (c.getWorld().isReboot()) { + chr.getOffenseManager().addOffense(String.format("Character %d attempted to scroll in reboot world (pos %d, itemid %d).", + chr.getId(), ePos, equip == null ? 0 : equip.getItemId())); + chr.dispose(); + return; + } + if (equip == null || equip.hasSpecialAttribute(EquipSpecialAttribute.Vestige) || !ItemConstants.isUpgradable(equip.getItemId())) { + chr.getOffenseManager().addOffense(String.format("Character %d tried to scroll a non-scrollable equip (pos %d, itemid %d).", + chr.getId(), ePos, equip == null ? 0 : equip.getItemId())); + chr.dispose(); + return; + } + suis = ItemConstants.getScrollUpgradeInfosByEquip(equip); + c.write(FieldPacket.scrollUpgradeDisplay(false, suis)); + break; + /*case ScrollTimerEffective: + break;*/ + case HyperUpgradeDisplay: + ePos = inPacket.decodeInt(); + safeGuard = inPacket.decodeByte() != 0; + inv = ePos < 0 ? chr.getEquippedInventory() : chr.getEquipInventory(); + ePos = Math.abs(ePos); + equip = (Equip) inv.getItemBySlot(ePos); + if (equip == null || equip.hasSpecialAttribute(EquipSpecialAttribute.Vestige) || !ItemConstants.isUpgradable(equip.getItemId())) { + chr.getOffenseManager().addOffense(String.format("Character %d tried to enchant a non-enchantable equip (pos %d, itemid %d).", + chr.getId(), ePos, equip == null ? 0 : equip.getItemId())); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + return; + } + cost = GameConstants.getEnchantmentMesoCost(equip.getrLevel() + equip.getiIncReq(), equip.getChuc(), equip.isSuperiorEqp()); + destroyProp = GameConstants.getEnchantmentDestroyRate(equip); + if (safeGuard && equip.canSafeguardHyperUpgrade()) { + cost *= 2; + } + c.write(FieldPacket.hyperUpgradeDisplay(equip, equip.isSuperiorEqp() ? equip.getChuc() > 0 : equip.getChuc() > 5 && equip.getChuc() % 5 != 0, + cost, 0, 0, GameConstants.getEnchantmentSuccessRate(equip), 0, + destroyProp, 0, equip.getDropStreak() >= 2)); + break; + case MiniGameDisplay: + c.write(FieldPacket.miniGameDisplay(eeType)); + break; + //case ShowScrollUpgradeResult: + case ScrollTimerEffective: + case ShowHyperUpgradeResult: + break; + /* + case ShowScrollVestigeCompensationResult: + case ShowTransmissionResult: + case ShowUnknownFailResult: + break;*/ + default: + log.debug("Unhandled Equipment Enchant Type: " + eeType); + chr.write(FieldPacket.showUnknownEnchantFailResult((byte) 0)); + break; + } + } + + @Handler(op = InHeader.USER_SKILL_LEARN_ITEM_USE_REQUEST) + public static void handleUserLearnItemUseRequest(Client c, InPacket inPacket) { + c.verifyTick(inPacket); + short pos = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + Char chr = c.getChr(); + + ItemInfo ii = ItemData.getItemInfoByID(itemID); + Item item = chr.getConsumeInventory().getItemBySlot(pos); + + if (ii == null || !chr.hasItem(itemID) || item == null || item.getItemId() != itemID || !chr.isInValidState()) { + chr.chatMessage("Could not find that item."); + return; + } + + int masterLevel = ii.getMasterLv(); + int reqSkillLv = ii.getReqSkillLv(); + int skillid = 0; + Map vals = ii.getScrollStats(); + int chance = vals.getOrDefault(ScrollStat.success, 100); + + for (int skill : ii.getSkills()) { + if (chr.hasSkill(skill)) { + skillid = skill; + break; + } + } + Skill skill = chr.getSkill(skillid); + if (skill == null) { + chr.chatMessage(Notice2, "An error has occured. Mastery Book ID: " + itemID + ", skill ID: " + skillid + "."); + chr.dispose(); + return; + } + if (skillid == 0 || (skill.getMasterLevel() >= masterLevel) || skill.getCurrentLevel() < reqSkillLv) { + chr.chatMessage(SystemNotice, "You cannot use this Mastery Book."); + chr.dispose(); + return; + } + + if (skill.getCurrentLevel() > reqSkillLv && skill.getMasterLevel() < masterLevel) { + chr.chatMessage(Mob, "Success Chance: " + chance + "%."); + chr.consumeItem(itemID, 1); + if (Util.succeedProp(chance)) { + skill.setMasterLevel(masterLevel); + chr.addSkill(skill); + chr.write(WvsContext.changeSkillRecordResult(skill)); + chr.chatMessage(Notice2, "[Mastery Book] Item id: " + itemID + " set Skill id: " + skillid + "'s Master Level to: " + masterLevel + "."); + } else { + chr.chatMessage(Notice2, "[Mastery Book] Item id: " + itemID + " was used, however it was unsuccessful."); + } + } + chr.dispose(); + } + + + @Handler(op = InHeader.SOCKET_CREATE_REQUEST) + public static void handleSocketCreateRequest(Client c, InPacket inPacket) { + Char chr = c.getChr(); + c.verifyTick(inPacket); + short uPos = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + short ePos = inPacket.decodeShort(); + Item item = chr.getConsumeInventory().getItemBySlot(uPos); + Equip equip = (Equip) chr.getEquipInventory().getItemBySlot(ePos); + if (equip == null || item == null || item.getItemId() != itemID) { + log.error("Unknown equip or mismatching use items."); + return; + } + int success = 0; + if (equip.getSocket(0) == ItemConstants.INACTIVE_SOCKET && ItemConstants.canEquipHavePotential(equip)) { + chr.consumeItem(item); + equip.setSocket(0, ItemConstants.EMPTY_SOCKET_ID); + } else { + success = 1; + } + c.write(FieldPacket.socketCreateResult(success)); + equip.updateToChar(chr); + } + + @Handler(op = InHeader.SOCKET_CREATE_RESULT) + public static void handleSocketCreateResult(Client c, InPacket inPacket) { + c.write(FieldPacket.socketCreateResult(inPacket.decodeInt() + 2)); + } + + @Handler(op = InHeader.NEBULITE_INSERT_REQUEST) + public static void handleNebuliteInsertRequest(Client c, InPacket inPacket) { + Char chr = c.getChr(); + c.verifyTick(inPacket); + short nebPos = inPacket.decodeShort(); + int nebID = inPacket.decodeInt(); + Item item = chr.getInstallInventory().getItemBySlot(nebPos); + short ePos = inPacket.decodeShort(); + Equip equip = (Equip) chr.getEquipInventory().getItemBySlot(ePos); + if (item == null || equip == null || item.getItemId() != nebID || !ItemConstants.isNebulite(item.getItemId())) { + log.error("Nebulite or equip was not found when inserting."); + chr.dispose(); + return; + } + if (equip.getSocket(0) != ItemConstants.EMPTY_SOCKET_ID) { + log.error("Tried to Nebulite an item without an empty socket."); + chr.chatMessage("You can only insert a Nebulite into empty socket slots."); + chr.dispose(); + return; + } + if (!ItemConstants.nebuliteFitsEquip(equip, item)) { + chr.getOffenseManager().addOffense(String.format("Character %d attempted to use a nebulite (%d) that doesn't fit an equip (%d).", chr.getId(), item.getItemId(), equip.getItemId())); + chr.chatMessage("The nebulite cannot be mounted on this equip."); + chr.dispose(); + return; + } + chr.consumeItem(item); + equip.setSocket(0, nebID % ItemConstants.NEBULITE_BASE_ID); + equip.updateToChar(chr); + } + + @Handler(op = InHeader.USER_ITEM_SKILL_SOCKET_UPGRADE_ITEM_USE_REQUEST) + public static void handleUserItemSkillSocketUpdateItemUseRequest(Client c, InPacket inPacket) { + Char chr = c.getChr(); + c.verifyTick(inPacket); + short uPos = inPacket.decodeShort(); + short ePos = inPacket.decodeShort(); + Item item = chr.getConsumeInventory().getItemBySlot(uPos); + Equip equip = (Equip) chr.getEquipInventory().getItemBySlot(ePos); + if (item == null || equip == null || !ItemConstants.isWeapon(equip.getItemId()) + || !ItemConstants.isSoulEnchanter(item.getItemId()) || equip.getrLevel() + equip.getiIncReq() < ItemConstants.MIN_LEVEL_FOR_SOUL_SOCKET) { + chr.dispose(); + return; + } + int successProp = ItemData.getItemInfoByID(item.getItemId()).getScrollStats().get(ScrollStat.success); + boolean success = Util.succeedProp(successProp); + if (success) { + equip.setSoulSocketId((short) (item.getItemId() % ItemConstants.SOUL_ENCHANTER_BASE_ID)); + equip.updateToChar(chr); + } + chr.getField().broadcastPacket(UserPacket.showItemSkillSocketUpgradeEffect(chr.getId(), success)); + chr.consumeItem(item); + } + + @Handler(op = InHeader.USER_ITEM_SKILL_OPTION_UPGRADE_ITEM_USE_REQUEST) + public static void handleUserItemSkillOptionUpdateItemUseRequest(Client c, InPacket inPacket) { + Char chr = c.getChr(); + c.verifyTick(inPacket); + short uPos = inPacket.decodeShort(); + short ePos = inPacket.decodeShort(); + Item item = chr.getConsumeInventory().getItemBySlot(uPos); + Equip equip = (Equip) chr.getEquipInventory().getItemBySlot(ePos); + if (item == null || equip == null || !ItemConstants.isWeapon(equip.getItemId()) + || !ItemConstants.isSoul(item.getItemId()) || equip.getSoulSocketId() == 0) { + chr.dispose(); + return; + } + equip.setSoulOptionId((short) (1 + item.getItemId() % ItemConstants.SOUL_ITEM_BASE_ID)); + short option = ItemConstants.getSoulOptionFromSoul(item.getItemId()); //Currently does nothing + if (option == 0) { + option = (short) ItemConstants.getRandomSoulOption(); + } + equip.setSoulOption(option); + equip.updateToChar(chr); + chr.consumeItem(item); + chr.getField().broadcastPacket(UserPacket.showItemSkillOptionUpgradeEffect(chr.getId(), true, false, ePos, uPos)); + } + + @Handler(op = InHeader.USER_WEAPON_TEMP_ITEM_OPTION_REQUEST) + public static void handleUserWeaponTempItemOptionRequest(Char chr, InPacket inPacket) { + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + if (tsm.hasStat(CharacterTemporaryStat.SoulMP) + && tsm.getOption(CharacterTemporaryStat.SoulMP).nOption >= ItemConstants.MAX_SOUL_CAPACITY) { + Option o = new Option(); + o.nOption = tsm.getOption(CharacterTemporaryStat.SoulMP).nOption; + o.xOption = tsm.getOption(CharacterTemporaryStat.SoulMP).xOption; + o.rOption = ItemConstants.getSoulSkillFromSoulID( + ((Equip) chr.getEquippedItemByBodyPart(BodyPart.Weapon)).getSoulOptionId() + ); + tsm.putCharacterStatValue(CharacterTemporaryStat.FullSoulMP, o); + tsm.sendSetStatPacket(); + } + chr.dispose(); + } + + @Handler(op = InHeader.USER_PROTECT_BUFF_DIE_ITEM_REQUEST) + public static void handleUserProtectBuffDieItemRequest(Char chr, InPacket inPacket) { + chr.getClient().verifyTick(inPacket); + boolean used = inPacket.decodeByte() != 0; + if (used) { + // grabs the first one from the list of buffItems + Item buffProtector = chr.getBuffProtectorItem(); + if (buffProtector != null) { + chr.setBuffProtector(true); + chr.consumeItem(buffProtector); + chr.write(UserLocal.setBuffProtector(buffProtector.getItemId(), true)); + } else { + chr.getOffenseManager().addOffense(String.format("Character id %d tried to use a buff without having the appropriate item.", chr.getId())); + } + } + } + + @Handler(op = InHeader.USER_DEFAULT_WING_ITEM) + public static void handleUserDefaultWingItem(Char chr, InPacket inPacket) { + int wingItem = inPacket.decodeInt(); + if (wingItem == 5010093) { // AB + chr.getAvatarData().getCharacterStat().setWingItem(wingItem); + chr.getField().broadcastPacket(UserRemote.setDefaultWingItem(chr)); + } + } + + @Handler(op = InHeader.USER_RECIPE_OPEN_ITEM_USE_REQUEST) + public static void handleUserRecipeOpenItemUseRequest(Char chr, InPacket inPacket) { + chr.getClient().verifyTick(inPacket); + short pos = inPacket.decodeShort();// // nPOS + int itemID = inPacket.decodeInt();// nItemID + + Item item = chr.getInventoryByType(CONSUME).getItemBySlot(pos); + if (item == null || item.getItemId() != itemID || !chr.isInValidState()) { + chr.dispose(); + return; + } + if (chr != null && chr.getHP() > 0 && ItemConstants.isRecipeOpenItem(itemID)) { + ItemInfo recipe = ItemData.getItemInfoByID(itemID); + if (recipe != null) { + int recipeID = recipe.getSpecStats().getOrDefault(SpecStat.recipe, 0); + int reqSkillLevel = recipe.getSpecStats().getOrDefault(SpecStat.reqSkillLevel, 0); + MakingSkillRecipe msr = SkillData.getRecipeById(recipeID); + if (msr != null && msr.isNeedOpenItem()) { + if (chr.getSkillLevel(msr.getReqSkillID()) < reqSkillLevel || chr.getSkillLevel(recipeID) > 0) { + return; + } + chr.addSkill(recipeID, 1, 1); + } + } + } + } + + @Handler(op = InHeader.USER_ACTIVATE_NICK_ITEM) + public static void handleUserActivateNickItem(Client c, InPacket inPacket) { + Char chr = c.getChr(); + int nickItem = inPacket.decodeInt(); + if (nickItem == 0 || nickItem / 10000 == 370 && chr.hasItem(nickItem)) { + chr.setActiveNickItemID(nickItem); + chr.getField().broadcastPacket(UserRemote.setActiveNickItem(chr, null), chr); + } + } + + @Handler(op = InHeader.USER_CHAR_SLOT_INC_ITEM_USE_REQUEST) + public static void addChrSlot(Client c, InPacket inPacket) { + Account user = c.getAccount(); + int currentSlots = user.getCharacterSlots(); + user.setCharacterSlots(currentSlots + 1); + } + + @Handler(op = InHeader.USER_LOTTERY_ITEM_USE_REQUEST) + public static void handleUserLotteryItemUseRequest(Char chr, InPacket inPacket) { + short pos = inPacket.decodeShort(); + int itemID = inPacket.decodeInt(); + inPacket.decodeByte(); // bSendForUI + inPacket.decodeByte(); // bLogStart + inPacket.decodeInt(); // 1 + Item item; + ItemInfo itemInfo; + if (itemID / 1000 != 2028 || (item = chr.getConsumeInventory().getItemBySlot(pos)) == null + || itemID != item.getItemId() || ((itemInfo = ItemData.getItemInfoByID(itemID)) == null)) { + chr.dispose("Not found."); + return; + } + Object reward = itemInfo.getRandomReward(); + if (reward instanceof Item) { + chr.addItemToInventory((Item) reward); + } else if (reward instanceof Integer && (int) reward != 0) { + chr.addMoney((int) reward); + } else { + chr.chatMessage("Oh, you're unlucky."); // should not happen + } + chr.consumeItem(item); + chr.dispose(); + } +} diff --git a/resources/antimacro_fonts/AmaticSC.ttf b/resources/antimacro_fonts/AmaticSC.ttf new file mode 100755 index 0000000..fc4c362 Binary files /dev/null and b/resources/antimacro_fonts/AmaticSC.ttf differ diff --git a/resources/antimacro_fonts/Audiowide.ttf b/resources/antimacro_fonts/Audiowide.ttf new file mode 100755 index 0000000..8b50bed Binary files /dev/null and b/resources/antimacro_fonts/Audiowide.ttf differ diff --git a/resources/antimacro_fonts/Caveat.ttf b/resources/antimacro_fonts/Caveat.ttf new file mode 100755 index 0000000..8c97eaf Binary files /dev/null and b/resources/antimacro_fonts/Caveat.ttf differ diff --git a/resources/antimacro_fonts/CoveredByYourGrace.ttf b/resources/antimacro_fonts/CoveredByYourGrace.ttf new file mode 100755 index 0000000..3bbbee8 Binary files /dev/null and b/resources/antimacro_fonts/CoveredByYourGrace.ttf differ diff --git a/resources/antimacro_fonts/Rajdhani.ttf b/resources/antimacro_fonts/Rajdhani.ttf new file mode 100755 index 0000000..1015ce5 Binary files /dev/null and b/resources/antimacro_fonts/Rajdhani.ttf differ diff --git a/resources/antimacro_fonts/Srisakdi.ttf b/resources/antimacro_fonts/Srisakdi.ttf new file mode 100755 index 0000000..34dc3fb Binary files /dev/null and b/resources/antimacro_fonts/Srisakdi.ttf differ diff --git a/resources/consume_2435163.py b/resources/consume_2435163.py new file mode 100755 index 0000000..c2112e7 --- /dev/null +++ b/resources/consume_2435163.py @@ -0,0 +1,672 @@ +import random + +items = [ + 3015022, + 2431965, # Basic Damage Skin + 2433271, # Basic Damage Skin + 2438159, # Basic Damage Skin + 2438872, # Basic Damage Skin + 2438871, # Basic Damage Skin + 2431966, # Digitized Damage Skin + 2432084, # Digitized Damage Skin + 2433260, # Digitized Damage Skin + 2434239, # Digitized Damage Skin + 2435172, # Digitized Damage Skin + 2438160, # Digitized Damage Skin + 2431967, # Kritias Damaged Skin + 2438161, # Kritias Damage Skin + 2432131, # Party Quest Damage Skin + 2437009, # Party Quest Damage Skin + 2438162, # Party Quest Damage Skin + 2432153, # Hard-Hitting Damage Skin + 2432638, # Hard-hitting Damage Skin + 2432659, # Hard-hitting Damage Skin + 2433261, # Hard-Hitting Damage Skin + 2436688, # Hard-hitting Damage Skin + 2438163, # Hard-hitting Damage Skin + 2432154, # Sweet Tea Cake Damage Skin + 2432637, # Sweet Tea Cake Damage Skin + 2432658, # Sweet Tea Cake Damage Skin + 2433264, # Sweet Tea Cake Damage Skin + 2435045, # Sweet Tea Cake Damage Skin + 2436100, # Sweet Tea Cake Damage Skin + 2438164, # Sweet Tea Cake Damage Skin + 2438165, # Club Henesys Damage Skin + 2432207, # Club Henesys' damage Skin, + 2432354, # Merry Christmas Damage Skin + 2434975, # Merry Christmas Damage Skin + 2432355, # Snowflake Damage Skin + 2432972, # Snowflake Damage Skin + 2434976, # Snowflake Damage Skin + 2435173, # Snowflake Damage Skin + 2438167, # Snowflake Damage Skin + 2432465, # Alicia's Damage Skin + 2438168, # Alicia's Damage Skin + 2432479, # Dorothy's Damage Skin + 2438169, # Dorothy's Damage Skin + 2432526, # Keyboard Warrior Damage Skin + 2432639, # Keyboard Warrior Damage Skin + 2432660, # Keyboard Warrior Damage Skin + 2433262, # Keyboard Warrior Damage Skin + 2435174, # Keyboard Warrior Damage Skin + 2436038, # Keyboard Warrior Damage Skin + 2438170, # Keyboard Warrior Damage Skin + 2432532, # Gentle Springtime Breeze Damage Skin + 2435102, # Gentle Springtime Breeze Damage Skin + 2435478, # Gentle Springtime Breeze Damage Skin + 2438171, # Gentle Springtime Breeze Damage Skin + 2433107, # Damage Skin - Springtime Breeze + 2432592, # Singles Army Damage Skin + 2433263, # Singles Army Damage Skin + 2438172, # Singles Army Damage Skin + 2433160, # Lonely Single Damage Skin + 2432640, # Reminiscence Damage Skin + 2432661, # Reminiscence Damage Skin + 2433265, # Reminiscence Damage Skin + 2435175, # Reminiscence Damage Skin + 2438173, # Reminiscence Damage Skin + 2438461, # Reminiscence Damage Skin + 2432710, # Orange Mushroom Damage Skin + 2433266, # Orange Mushroom Damage Skin + 2433919, # Orange Mushroom Damage Skin + 2435170, # Orange Mushroom Damage Skin + 2436035, # Orange Mushroom Damage Skin + 2438174, # Orange Mushroom Damage Skin + 2432836, # Crown Damage Skin + 2434980, # Crown Damage Skin + 2435176, # Crown Damage Skin + 2438175, # Crown Damage Skin + 2432973, # Monotone Damage Skin + 2433158, # Monotone Damage Skin + 2433897, # Monotone Damage Skin + 2435177, # Monotone Damage Skin + 2435834, # Monotone Damage Skin + 2438176, # Monotone Damage Skin + 2433063, # Star Planet Damage Skin + 2435510, # Star Planet Damage Skin + 2438177, # Star Planet Damage Skin + 2439572, # Star Planet Damage Skin + 2433456, # Hangul Day Damage Skin + 2438179, # Hangul Day Damage Skin + 2433715, # Striped Damage Skin + 2434979, # Striped Damage Skin + 2435024, # Striped Damage Skin + 2435571, # Striped Damage Skin + 2436101, # Striped Damage Skin + 2438181, # Striped Damage Skin + 2433804, # Couples Army Damage Skin + 2435101, # Couples Army Damage Skin + 2435168, # Couples Army Damage Skin + 2438182, # Couples Army Damage Skin + 2433913, # Yeti and Pepe Damage Skin + 2435025, # Yeti and Pepe Damage Skin + 2436036, # Yeti and Pepe Damage Skin + 2438184, # Yeti and Pepe Damage Skin + 2433980, # Slime and Mushroom Damage Skin + 2434741, # Slime and Mushroom Damage Skin + 2435026, # Slime and Mushroom Damage Skin + 2437527, # Slime and Mushroom Damage Skin + 2438185, # Slime and Mushroom Damage Skin + 2433981, # Pink Bean Damage Skin + 2434742, # Pink Bean Damage Skin + 2438186, # Pink Bean Damage Skin + 2438421, # Pink Bean Damage Skin + 2434248, # Rainbow Boom Damage Skin + 2435027, # Rainbow Boom Damage Skin + 2435117, # Rainbow Boom Damage Skin + 2435477, # Rainbow Boom Damage Skin + 2438188, # Rainbow Boom Damage Skin + 2433362, # Night Sky Damage Skin + 2433666, # Mashmellow Damage Skin + 2434274, # Marshmallow Damage Skin + 2435029, # Marshmallow Damage Skin + 2435490, # Marshmallow Damage Skin + 2438190, # Marshmallow Damage Skin + 2434289, # Mu Lung Dojo Damage Skin + 2438191, # Mu Lung Dojo Damage Skin + 2434390, # Teddy Damage Skin + 2436099, # Teddy Damage Skin + 2437712, # Teddy Damage Skin + 2438192, # Teddy Ursus Damage Skin + 2434391, # Mighty Ursus Damage Skin + 2436034, # Mighty Ursus Damage Skin + 2438193, # Mighty Ursus Damage Skin + 2438194, # Scorching Heat Damage Skin + 5680395, # Scorching Heat Damage Skin + 2434528, # USA Damage Skin + 2438195, # USA Damage Skin + 2434529, # Churro Damage Skin + 2438196, # Churro Damage Skin + 2434530, # Singapore Night Damage Skin + 2438197, # Singapore Night Damage Skin + 2438198, # Scribbler Damage Skin + 2436531, # Scribbler Damage Skin + 2434546, # Scribbler Damage Skin + 2433571, # Scribble Crush Damage Skin + 2434374, # Autumn Festival Full Moon Damage Skin + 2434574, # Full Moon Damage Skin + 2438199, # Full Moon Damage Skin + 2434575, # Sunny Damage Skin + 2435171, # Sunny Damage Skin + 2435727, # Sunny Damage Skin + 2438200, # Sunny Damage Skin + 2432804, # Princess No Damage Skin + 2434654, # Murgoth Damage Skin + 2435325, # Murgoth Damage Skin + 2437727, # Murgoth Damage Skin + 2438202, # Murgoth Damage Skin + 2435326, # Nine-Tailed Fox Damage Skin + 2432749, # Zombie Damage Skin, + 2434710, # MVP Special Damage Skin + 2438205, # MVP Special Damage Skin + 2434824, # Monster Park Damage Skin + 2438207, # Monster Park Damage Skin + 2436041, # Heroes Phantom Damage Skin + 2435665, # Heroes Phantom Damage Skin + 2435043, # Heroes Phantom Damage Skin + 2438211, # Heroes Phantom Damage Skin + 2436042, # Heroes Mercedes Damage Skin + 2435666, # Heroes Mercedes Damage Skin + 2435044, # Heroes Mercedes Damage Skin + 2438212, # Heroes Mercedes Damage Skin + 2435046, # Fireworks Damage Skin + 2436097, # Fireworks Damage Skin + 2437710, # Fireworks Damage Skin + 2434499, # Autumn Festival Fireworks Damage Skin + 2435047, # Heart Balloon Damage Skin + 2435140, # Neon Sign Damage Skin + 2435836, # Neon Sign Damage Skin + 2438215, # Neon Sign Damage Skin + 2435141, # Freeze Tag Damage Skin + 2437244, # Freeze Tag Damage Skin + 2438216, # Freeze Tag Damage Skin + 2435179, # Candy Damage Skin + 2436096, # Candy Damage Skin + 2438217, # Candy Damage Skin + 2435162, # Antique Gold Damage Skin + 2435157, # Calligraphy Damage Skin + 2436098, # Calligraphy Damage Skin + 2438219, # Calligraphy Damage Skin + 2435158, # Explosion Damage Skin + 2435835, # Explosion Damage Skin + 2438220, # Explosion Damage Skin + 2435159, # Snow-wing Damage Skin + 2436687, # Snow-wing Damage Skin + 2438221, # Snow-wing Damage Skin + 2435160, # Miho Damage Skin + 2436044, # Miho Damage Skin + 2438222, # Miho Damage Skin + 2435182, # Musical Score Damage Skin + 2435725, # Musical Score Damage Skin + 2438224, # Musical Score Damage Skin + 2433709, # Moon Bunny Damage Skin + 2434081, # Moon Bunny Damage Skin + 2435166, # Moon Bunny Damage Skin + 2435850, # Moon Bunny Damage Skin + 2438225, # Moon Bunny Damage Skin + 2435184, # Forest of Tenacity Damage Skin + 2438226, # Forest of Tenacity Damage Skin + 2435222, # Festival Tortoise Damage Skin + 2436530, # Festival Tortoise Damage Skin + 2438227, # Festival Tortoise Damage Skin + 2438228, # April Fools' Damage Skin + 2435293, # April Fools' Damage Skin + 2438229, # Blackheart Day Damage Skin + 2435313, # Blackheart Day Damage Skin + 2438233, # Sparkling April Fools' Damage Skin + 2435473, # Bubble April Fools' Damage Skin + 2435331, # Bubble April Fools' Damage Skin + 2438231, # Retro April Fools' Damage Skin + 2435332, # Retro April Fools' Damage Skin + 2438232, # Monochrome April Fools' Damage Skin + 2435849, # Monochrome April Fools' Damage Skin + 2435333, # Monochrome April Fools' Damage Skin + 2435334, # Sparkling April Fools' Damage Skin + 2435474, # Sparkling April Fools' Damage Skin + 2435316, # Haste Damage Skin + 2438234, # Haste Damage Skin + 2438235, # 12th Anniversary Maple Leaf Damage Skin + 2435408, # 12th Anniversary Maple Leaf Damage Skin + 2438759, # 12th Anniversary Damage Skin + 2435427, # Cyber Damage Skin + 2438236, # Cyber Damage Skin + 2435428, # Cosmic Damage Skin + 2435839, # Cosmic Damage Skin + 2438237, # Cosmic Damage Skin + 2438238, # Choco Donut Damage Skin + 2435429, # Choco Donut Damage Skin + 2438240, # Monster Balloon Damage Skin + 2435456, # Lovely Damage Skin, + 2435461, # Balloon Damage Skin + 2435493, # Monster Balloon Damage Skin + 2438241, # Bubble April Fools' Damage Skin + 2438242, # Sparkling April Fools' Damage Skin + 2435424, # Henesys Damage Skin + 2438243, # Henesys Damage Skin + 2435959, # Henesys Damage Skin + 2435958, # Leafre Damage Skin + 2435425, # Leafre Damage Skin + 2438244, # Leafre Damage Skin + 2435431, # Algebraic Damage Skin + 2438245, # Algebraic Damage Skin + 2435430, # Blue Flame Damage Skin + 2438246, # Blue Flame Damage Skin + 2438761, # Blue Flame Damage Skin + 2435432, # Purple Damage Skin + 2438247, # Purple Damage Skin + 2435433, # Nanopixel Damage Skin + 2438248, # Nanopixel Damage Skin + 2435521, # Crystal Damage Skin + 2435523, # Chocolate Damage Skin + 2435524, # Spark Damage Skin + 2436561, # Spark Damage Skin + 2438249, # Royal Damage Skin + 2435538, # Royal Damage Skin + 2435832, # Chrome Damage Skin (Ver. 1) + 2438250, # Chrome Damage Skin (Ver. 1) + 2435833, # Neon Lights Damage Skin + 2436360, # Neon Lights Damage Skin + 2438251, # Neon Lights Damage Skin + 2438252, # Spades Damage Skin + 2435840, # Gilded Damage Skin + 2438253, # Gilded Damage Skin + 2435841, # Batty Damage Skin + 2438254, # Batty Damage Skin + 2438255, # Monochrome April Fools' Damage Skin + 2435972, # Vanishing Journey Damage Skin + 2438256, # Vanishing Journey Damage Skin + 2436023, # Chu Chu Damage Skin + 2438257, # Chu Chu Damage Skin + 2436024, # Lachelein Damage Skin + 2438258, # Lachelein Damage Skin + 2436026, # Poison Flame Damage Skin + 2438259, # Poison Flame Damage Skin + 2436027, # Blue Shock Damage Skin + 2438260, # Blue Shock Damage Skin + 2436028, # Music Power Damage Skin + 2438261, # Music Power Damage Skin + 2436029, # Collage Power Damage Skin + 2436045, # Starlight Aurora Damage Skin + 2438263, # Starlight Aurora Damage Skin + 2436085, # Chestnut Damage Skin + 2437709, # Chestnut Damage Skin + 2438264, # Chestnut Damage Skin + 2438265, # Twilight Damage Skin + 2436083, # Twilight Damage Skin + 2437707, # Twilight Damage Skin + 2438266, # Unyielding Fury Damage Skin + 2436084, # Unyielding Fury Damage Skin + 2437708, # Unyielding Fury Damage Skin + 2436103, # Gilded Moonlight Damage Skin + 2438158, # Gilded Moonlight Damage Skin + 2438267, # Gilded Moonlight Damage Skin + 2438268, # Hangul Day Traditional Damage Skin + 2436131, # Hangul Day Traditional Damage Skin + 2438269, # Gingko Leaf Damage Skin + 2436140, # Gingko Leaf Damage Skin + 2438270, # Detective Damage Skin + 2436206, # Detective Damage Skin + 2436182, # Silly Ghost Damage Skin + 2436212, # Hallowkitty Damage Skin + 2437851, # Hallowkitty Damage Skin + 2438272, # Pew Pew Damage Skin + 2436268, # Steamed Bun Damage Skin + 2436258, # Relic Damage Skin + 2438274, # Relic Damage Skin + 2438275, # Hieroglyph Damage Skin + 2436259, # Hieroglyph Damage Skin + 2438276, # Breakthrough Damage Skin + 2436400, # Breakthrough Damage Skin + 2438283, # Mecha Damage Skin + 2436560, # Mecha Damage Skin + 2438284, # Foamy Friends Damage Skin + 2436578, # Foamy Friends Damage Skin + 2437767, # Foamy Friends Damage Skin + 2438285, # Magpie's Feather Damage Skin + 2436611, # Magpie's Feather Damage Skin + 2438286, # Persimmon Tree Damage Skin + 2436596, # Crystalline Damage Skin + 2436679, # Arcana Damage Skin + 2438287, # Arcana Damage Skin + 2438288, # Imperial Damage Skin + 2436680, # Imperial Damage Skin + 2438289, # Fafnir Damage Skin + 2436681, # Fafnir Damage Skin + 2436682, # AbsoLab Damage Skin + 2438290, # AbsoLab Damage Skin + 2438293, # Honeybee Damage Skin + 2436785, # Honeybee Damage Skin + 2438294, # Evolution Damage Skin + 2436810, # Evolution Damage Skin + 2436951, # Constellation Damage Skin + 2438295, # Constellation Damage Skin + 2437768, # Constellation Damage Skin + 2438296, # Extraterrestrial Damage Skin + 2436952, # Extraterrestrial Damage Skin + 2438297, # Frozen Treat Damage Skin + 2436953, # Frozen Treat Damage Skin + 2438298, # Solar Eclipse Damage Skin + 2437022, # Solar Eclipse Damage Skin + 2437769, # Solar Eclipse Damage Skin + 2438299, # Prism Damage Skin + 2437023, # Prism Damage Skin + 2437024, # Starry Sky Damage Skin + 2438300, # Starry Sky Damage Skin + 2438301, # Party Quest Damage Skin + 2438302, # Cadena Damage Skin + 2437164, # Cadena Damage Skin + 2438032, # Cadena Damage Skin + 2438925, # Cadena Damage Skin + 2438303, # Black Rose Damage Skin + 2437238, # Black Rose Damage Skin + 2438306, # Stormcloud Damage Skin + 2437495, # Stormcloud Damage Skin + 2438307, # Drizzly Damage Skin + 2437496, # Rainfall Damage Skin + 2438308, # Luxe Damage Skin + 2438309, # Palm Frond Damage Skin + 2437515, # Palm Frond Damage Skin + 2438310, # Illium Damage Skin + 2437482, # Illium Damage Skin + 2438926, # Illium Damage Skin + 2438311, # Lightning Damage Skin + 2437691, # Lightning Damage Skin + 2438604, # Lightning Damage Skin + 2438312, # MapleStory Damage Skin + 2437716, # MapleStory Damage Skin (KR) + 2438313, # Rice Cake Damage Skin + 2437735, # Rice Cake Damage Skin + 2438314, # Popcorn Damage Skin + 2437736, # Popcorn Damage Skin + 2438315, # Pew Pew Damage Skin (Ver. 2) + 2437854, # Pew Pew Damage Skin (Ver. 2) + 2437877, # Master Crimson Damage Skin + 2438143, # Transcendent of Time Damage Skin + 2438144, # Superstar Damage Skin + 2438352, # Ark Damage Skin + 2438353, # Ark Damage Skin + 2438924, # Ark Damage Skin + 2438378, # Woof Woof Damage Skin + 2438379, # Heartthrob Damage Skin + 2438413, # Discovery Damage Skin + 2438414, # Discovery Damage Skin + 2438415, # Esfera Damage Skin + 2438416, # Esfera Damage Skin + 2438417, # Heavenly Damage Skin + 2438418, # Heavenly Damage Skin + 2438419, # Hybrid Damage Skin + 2438420, # Hybrid Damage Skin + 2438460, # Red Circuit Damage Skin + 2438485, # Red Circuit Damage Skin + 2438491, # Choco Bonbon Damage Skin + 2438492, # Choco Bonbon Damage Skin + 2438529, # Twelve Branches Damage Skin + 2438530, # Twelve Branches Damage Skin + 2438637, # Doodle Damage Skin + 2438676, # Soccer Uniform Damage Skin + 2438713, # Soccer Uniform Damage Skin + 2438881, # Monster Damage Skin + 2438880, # Monster Damage Skin + 2438884, # 14th Street Damage Skin + 2438885, # 14th Street Damage Skin + 2439256, # Shinsoo Damage Skin + 2439298, # Shinsoo Damage Skin + 2439264, # Foggy Damage Skin + 2439265, # Foggy Damage Skin + 2439336, # Foggy Damage Skin + 2439337, # Foggy Damage Skin + 2439277, # Alliance Damage Skin + 2439338, # Alliance Damage Skin + 2439381, # Master Stellar Damage Skin + 2439392, # Labyrinth Flame Damage Skin + 2439393, # Labyrinth Flame Damage Skin + 2439394, # Labyrinth Flame Damage Skin + 2439395, # Labyrinth Flame Damage Skin + 2439407, # Living Chain Damage Skin + 2439408, # Living Chain Damage Skin + 2439616, # Challenge Damage Skin, Season 1 + 2439617, # Challenge Damage Skin, Season 1 + 2439652, # Harvest Damage Skin + 2439665, # Harvest Damage Skin + 2439683, # Hangul Day Damage Skin (KR) + 2439684, # Hangul Day Damage Skin (KR) + 2439685, # Hangul Day Traditional Damage Skin (KR) + 2439686, # Hangul Day Traditional Damage Skin (KR) + 2439769, # Hallowkitty Damage Skin V2 + 2439768, # Hallowkitty Damage Skin V2 + 2439925, # Detective Yettson and Peplock Damage Skin + 2439926, # Detective Yettson and Peplock Damage Skin + 2439927, # Pew Pew Damage Skin (Ver. 3) + 2439928, # Pew Pew Damage Skin (Ver. 3) + 2432591, # Cherry Blossoms Damage Skin + + 2436133, # Chick Damage Skin + 2436645, # Intense Damage Skin + 2436132, # Illumination Damage Skin + 2436644, # Color Pop Damage Skin (30 Day) + 2436134, # Item has no name + 2436646, # Intense Damage Skin (30 Day) + 2436643, # Color Pop Damage Skin + 2436653, # Reverse Damage Skin + 2436652, # Ink Damage Skin (30 Day) + 2436655, # Neon Easter Egg Damage Skin + 2437167, # Note Damage Skin (30 Day) + 2436654, # Reverse Damage Skin (30 Day) + 2437166, # Note Damage Skin + 2434601, # Invisible Damage Skin + 2436136, # 'Magical' Bottle for Souls + 2436651, # Ink Damage Skin + 2433588, # Chinese Spring Fireworks Damage Skin + 2436657, # Watercolor Damage Skin + 2437169, # Crayon Damage Skin (30 Day) + 2436656, # Neon Easter Egg Damage Skin (30 Day) + 2437168, # Crayon Damage Skin + 2436658, # Watercolor Damage Skin (30 Day) + 2433081, # Halloween Damage Skin + 2434619, # Nine-Tailed Fox Damage Skin + 2438661, # Mustache Damage Skin + 2630153, # Coral Reef Damage Skin + 3801113, # Item has no name + 2630156, # Shimmerlight Damage Skin + 2438659, # Stamp Damage Skin + 2438671, # High Noon Damage Skin + 2433038, # 분필 �?�미지스킨 + 2434570, # Tot's Damage Skin + 2439700, # Black Damage Skin + 2439697, # 3D Effect Damage Skin + 2434663, # Donut Damage Skin + 2434662, # Jelly Bean Damage Skin + 2434147, # Irena's Band Damage Skin + 2434157, # Damien's Band Damage Skin + 2434664, # Soft Serve Damage Skin + 2436721, # Sheep Damage Skin + 2439805, # Golden Tinsel Damage Skin + 2435196, # Crow Damage Skin + 2435193, # Krakian Damage Skin + 2439800, # Jolly Holiday Damage Skin + 2435195, # Corrupted Magician Damage Skin + 2435194, # Crimson Knight Damage Skin + 2437701, # Kaleidoscope Damage Skin (30 Day) + 2437700, # Kaleidoscope Damage Skin + 2437703, # Winter Night Skin (30 Day) + 2433113, # Chinese Marshmallow Damage Skin + 2435673, # Cygnus Water Warrior Damage Skin + 2435674, # Resistance Water Warrior Damage Skin + 2433184, # Wicked Witch Damage Skin + 2630304, # Rock Spirit Damage Skin + 2433214, # Noise Damage Skin + 2436229, # Cozy Christmas Damage Skin (30 Day) + 2436741, # Chinese Text Damage Skin (30 Day) + 2436228, # Lucid Butterfly Damage Skin + 2436740, # Japanese Kanji Character Damage Skin + 2436743, # Chinese Text Damage Skin (30 Day) + 2436230, # Cozy Christmas Damage Skin + 2436742, # Chinese Text Damage Skin + 2436227, # Lucid Butterfly Damage Skin (30 Day) + 2435213, # Antellion Damage Skin + 2436749, # Knife Wound Damage Skin (30 Day) + 2436748, # Knife Wound Damage Skin + 2436745, # Chinese Text Damage Skin (30 Day) + 2436744, # Chinese Text Damage Skin + 2436747, # Roman Numeral Damage Skin (30 Day) + 2436746, # Roman Numeral Damage Skin + 2437269, # Maple Damage Skin (30 Day) + 2437268, # Maple Damage Skin + 2437271, # Embroidery Damage Skin (30 Day) + 2437270, # Embroidery Damage Skin + 2630301, # Bunny Blossom Damage Skin + 2433183, # Super Spooky Damage Skin + 2433182, # Jack o' Lantern Damage Skin + 2437274, # Dice Master Damage Skin + 2433252, # Dragon's Fire Damage Skin + 2436832, # aa + 2437856, # Frigid Ice Damage Skin + 2433251, # Violetta's Charming Damage Skin + 2433775, # Orchid Damage Skin + 2433269, # Golden Damage Skin + 2433268, # Zombie Damage Skin + 2630393, # 모멘텀 �?�미지스킨 (보존용) + 2433270, # Jett Damage Skin + 2433777, # Black Heaven Damage Skin + 2433776, # Lotus Damage Skin + 2433267, # Blood Damage Skin + 2630390, # 빙고 �?�미지스킨 (보존용) + 2439373, # Bitty Baby Feet Damage Skin + 2436300, # Sweetheart Choco Damage Skin + 2438348, # Baseball Jacket Damage Skin + 2436808, # Aspire Industries Damage Skin + 2438347, # Tweed Damage Skin + 2433236, # Chalk Damage Skin + 2439894, # Lunar New Year Damage Skin + 2439376, # Pink Princess Damage Skin + 2436831, # Petal Damage Skin + 2436830, # Gifts of the Ryuul Damage Skin + 2439897, # Valentine Damage Skin + 2435802, # Dragon Fireworks Damage Skin + 2433829, # White Heaven Rain Damage Skin + 2433828, # White Heaven Sun Damage Skin + 2433831, # White Heaven Snow Damage Skin + 2433830, # White Heaven Rainbow Damage Skin + 2432803, # Princess No Damage Skin (30-Days) + 2435374, # Monkey Damage Skin + 2433833, # White Heaven Wind Damage Skin + 2433832, # White Heaven Lightning Damage Skin + 2434868, # Christmas Lights Damage Skin + 2435380, # Math Symbol Damage Skin + 2434871, # Chess Damage Skin + 2435382, # Secret Question Mark Damage Skin + 2434877, # Secret Damage Skin_Special Character + 2434873, # Secret Damage Skin_Music + 2435335, # Candles Damage Skin + 2434817, # Cube Damage Skin + 2434818, # One Winter Night Damage Skin + 2435336, # Cupcakes Damage Skin + 2438929, # Droplet Damage Skin + 2438931, # 14th Anniversary Damage Skin + 2438930, # Gummy Bear Damage Skin + 2439442, # Custom Puppy Damage Skin + 2439523, # 8-Bit Damage Skin + 2433901, # Beasts of Fury Damage Skin + 2435949, # Too Spooky Damage Skin + 2433900, # Night Sky Damage Skin + 2435948, # Halloween Town Damage Skin + 2437484, # Custom Kitty Damage Skin + 2433903, # Lovely Damage Skin\r\n + 2435951, # Item has no name + 2433902, # Beasts of Fury Damage Skin + 2435950, # Floofy Bichon Damage Skin + 2435957, # Snow Monster Damage Skin + 2435956, # War of Roses Damage Skin + 2433905, # Heart Balloon Damage Skin + 2435953, # Item has no name + 2437489, # Ribbon Damage Skin (30 Day) + 2433904, # Dried Out Damage Skin + 2435952, # Item has no name + 2437488, # Ribbon Damage Skin + 2433907, # Antique Fantasy Damage Skin\r\n + 2435955, # Wandering Soul Damage Skin + 2437491, # Acorn Damage Skin (30 Day) + 2433906, # Scribble Crush Damage Skin + 2435954, # Masque's Puzzle Damage Skin + 2437490, # Acorn Damage Skin + 2436477, # XOXO Damage Skin (30 Day) + 2436476, # Full of Stars Damage Skin + 2436479, # Full of Stars Damage Skin (30 Day) + 2439551, # Devil Font Damage Skin + 2436478, # Full of Hearts Damage Skin (30 Day) + 2436984, # Treasures of Eluna Damage Skin + 2436475, # Full of Hearts Damage Skin + 2436474, # XOXO Damage Skin + 2436986, # Item has no name + 2438469, # Skull Damage Skin + 2435908, # Item has no name + 2434375, # Bonfire Damage Skin + 2438471, # Valentine's Day Damage Skin + 2435905, # Cat Paw Damage Skin + 2435907, # Item has no name + 2438467, # Graffiti Damage Skin + 2435906, # Cat Face Damage Skin + 2438477, # Pastel Easter Egg Damage Skin + 2438473, # White Chocolate Damage Skin + 2433883, # Earth Day Damage Skin + 2435489, # Sheriff Damage Skin + 2435488, # Lingling Damage Skin + 3801003, # Item has no name + 2435511, # Remnant of the Goddess Damage Skin + 3800993, # Item has no name + 2437052, # Tropical Sunset Damage Skin (30 Day) + 2437049, # Summer Sands Damage Skin + 2437051, # Tropical Sunset Damage Skin + 2437050, # Summer Sands Damage Skin (30 Day) + 2439554, # Trick or Treat Damage Skin + 2437524, # Snow Crystal Damage Skin (30 Day) + 2437521, # Christmas Cane Damage Skin + 2437523, # Snow Crystal Damage Skin + 2437522, # Christmas Cane Damage Skin (30 Day) + 2435487, # Nene Damage Skin + 2435486, # TuTu Damage Skin + 2434533, # Blood Damage Skin + 2434534, # Zombie Damage Skin + 2435565, # Heroes Aran Damage Skin + 2435567, # Heroes Evan Damage Skin + 2435566, # Heroes Luminous Damage Skin + 2439157, # Abrup's Snowstorm Damage Skin + 2434545, # Hayato Damage Skin + 2434544, # Kanna Damage Skin + 2435568, # Heroes Shade Damage Skin + 2439164, # Fembris Damage Skin + 2438655, # Golden Damage Skin + 2439167, # Frostflail Yeti + 2436089, # Highlighter Damage Skin + 2438085, # Hong Bao Damage Skin + 2438596, # Cake Icing Damage Skin + 2438087, # Vengeful Nyen Damage Skin + 2438086, # Nyen Damage Skin + 2438592, # Round 'n' Round Damage Skin + 2438594, # Garden Damage Skin + 2438089, # Red-Orange Damage Skin + 2438088, # Zodiac Dog Damage Skin + 2434004, # Alishan Damage Skin + 2435543, # Epic Lulz Damage Skin + 2435542, # Item has no name + 2436563, # Rocket Damage Skin + 2435549, # Item has no name + 2435548, # Item has no name + 2439132, # Popsicle Damage Skin + 2435545, # Summer Damage Skin + 2439129, # Summer Sea Damage Skin + 2435544, # Item has no name + 2435546, # Blaster Damage Skin + +] + + +#question = sm.sendAskYesNo("#eWould you like to receive a #rrandom Damage Skin?") +randitem = random.choice(items) +#if question and sm.canHold(randitem): +if sm.canHold(randitem): + sm.giveItem(randitem) + sm.consumeItem(2435163) +else: + sm.sendNext("#e#dYour inventory is full.") + diff --git a/resources/consume_2437025.py b/resources/consume_2437025.py new file mode 100755 index 0000000..7659d9c --- /dev/null +++ b/resources/consume_2437025.py @@ -0,0 +1,1883 @@ +import random + +items = [ + 3015022, + 3015023, + 3015020, + 3015021, + 3015018, + 3015019, + 3015016, + 3015017, + 3015014, + 3015015, + 3015012, + 3015013, + 3015010, + 3015011, + 3015008, + 3015038, + 3015039, + 3015036, + 3015034, + 3015032, + 3015033, + 3015030, + 3015031, + 3015028, + 3015029, + 3015026, + 3015027, + 3015024, + 3015025, + 3015004, + 3015005, + 3015002, + 3015003, + 3015000, + 3015001, + 3015082, + 3015083, + 3015081, + 3015074, + 3015075, + 3015072, + 3015073, + 3015102, + 3015103, + 3015096, + 3015094, + 3015095, + 3015092, + 3015090, + 3015091, + 3015088, + 3015089, + 3015054, + 3015055, + 3015052, + 3015053, + 3015050, + 3015051, + 3015048, + 3015049, + 3015044, + 3015045, + 3015042, + 3015043, + 3015040, + 3015041, + 3015070, + 3015071, + 3015068, + 3015069, + 3015066, + 3015067, + 3015064, + 3015065, + 3015062, + 3015063, + 3015060, + 3015061, + 3015058, + 3015059, + 3015056, + 3015144, + 3015166, + 3015167, + 3015164, + 3015165, + 3015162, + 3015163, + 3015160, + 3015161, + 3015159, + 3015156, + 3015157, + 3015154, + 3015155, + 3015152, + 3015118, + 3015119, + 3015116, + 3015117, + 3015114, + 3015115, + 3015112, + 3015111, + 3015108, + 3015109, + 3015107, + 3015104, + 3015105, + 3015130, + 3015131, + 3015128, + 3015129, + 3015126, + 3015127, + 3015125, + 3015122, + 3015120, + 3015214, + 3015215, + 3015212, + 3015213, + 3015210, + 3015208, + 3015209, + 3015206, + 3015207, + 3015204, + 3015205, + 3015202, + 3015203, + 3015200, + 3015201, + 3015224, + 3015225, + 3015223, + 3015220, + 3015218, + 3015219, + 3015216, + 3015217, + 3015182, + 3015183, + 3015180, + 3015181, + 3015178, + 3015174, + 3015175, + 3015172, + 3015173, + 3015170, + 3015171, + 3015168, + 3015169, + 3015198, + 3015199, + 3015196, + 3015195, + 3015192, + 3015193, + 3015190, + 3015191, + 3015188, + 3015189, + 3015186, + 3015187, + 3015184, + 3015185, + 3015278, + 3015279, + 3015276, + 3015277, + 3015272, + 3015270, + 3015271, + 3015268, + 3015269, + 3015266, + 3015267, + 3015264, + 3015265, + 3015295, + 3015292, + 3015293, + 3015290, + 3015291, + 3015288, + 3015289, + 3015286, + 3015287, + 3015284, + 3015285, + 3015283, + 3015246, + 3015247, + 3015244, + 3015245, + 3015243, + 3015240, + 3015241, + 3015238, + 3015239, + 3015236, + 3015237, + 3015234, + 3015235, + 3015263, + 3015254, + 3015255, + 3015253, + 3015250, + 3015251, + 3015248, + 3015249, + 3015342, + 3015343, + 3015340, + 3015341, + 3015338, + 3015339, + 3015332, + 3015333, + 3015330, + 3015331, + 3015328, + 3015329, + 3015358, + 3015359, + 3015356, + 3015357, + 3015354, + 3015355, + 3015350, + 3015348, + 3015349, + 3015346, + 3015347, + 3015344, + 3015310, + 3015311, + 3015309, + 3015306, + 3015304, + 3015305, + 3015302, + 3015303, + 3015300, + 3015301, + 3015298, + 3015299, + 3015296, + 3015297, + 3015326, + 3015327, + 3015325, + 3015314, + 3015315, + 3015312, + 3015404, + 3015405, + 3015398, + 3015399, + 3015396, + 3015397, + 3015394, + 3015392, + 3015422, + 3015423, + 3015420, + 3015421, + 3015418, + 3015416, + 3015417, + 3015414, + 3015412, + 3015413, + 3015410, + 3015411, + 3015408, + 3015409, + 3015374, + 3015375, + 3015372, + 3015370, + 3015371, + 3015368, + 3015369, + 3015366, + 3015367, + 3015364, + 3015365, + 3015362, + 3015363, + 3015360, + 3015361, + 3015390, + 3015391, + 3015388, + 3015389, + 3015387, + 3015378, + 3015379, + 3015376, + 3015377, + 3015470, + 3015471, + 3015468, + 3015469, + 3015466, + 3015467, + 3015464, + 3015465, + 3015460, + 3015458, + 3015459, + 3015482, + 3015481, + 3015476, + 3015474, + 3015475, + 3015472, + 3015473, + 3015438, + 3015436, + 3015437, + 3015434, + 3015435, + 3015432, + 3015433, + 3015431, + 3015429, + 3015452, + 3015453, + 3015450, + 3015448, + 3015449, + 3015446, + 3015447, + 3015444, + 3015445, + 3015440, + 3015526, + 3015524, + 3015525, + 3015522, + 3015523, + 3015520, + 3015521, + 3015550, + 3015551, + 3015548, + 3015549, + 3015547, + 3015544, + 3015545, + 3015542, + 3015543, + 3015540, + 3015541, + 3015538, + 3015539, + 3015502, + 3015503, + 3015500, + 3015501, + 3015498, + 3015499, + 3015496, + 3015497, + 3015518, + 3015516, + 3015517, + 3015514, + 3015512, + 3015513, + 3015510, + 3015511, + 3015508, + 3015509, + 3015506, + 3015507, + 3015504, + 3015505, + 3015598, + 3015599, + 3015596, + 3015597, + 3015594, + 3015595, + 3015592, + 3015593, + 3015590, + 3015591, + 3015588, + 3015589, + 3015586, + 3015587, + 3015614, + 3015615, + 3015612, + 3015613, + 3015610, + 3015611, + 3015608, + 3015609, + 3015606, + 3015607, + 3015604, + 3015605, + 3015602, + 3015603, + 3015600, + 3015566, + 3015567, + 3015564, + 3015565, + 3015562, + 3015560, + 3015561, + 3015558, + 3015559, + 3015556, + 3015557, + 3015554, + 3015555, + 3015552, + 3015553, + 3015582, + 3015583, + 3015580, + 3015581, + 3015579, + 3015572, + 3015573, + 3015570, + 3015571, + 3015568, + 3015569, + 3015662, + 3015663, + 3015660, + 3015661, + 3015658, + 3015659, + 3015654, + 3015652, + 3015653, + 3015650, + 3015651, + 3015648, + 3015649, + 3015676, + 3015674, + 3015675, + 3015672, + 3015673, + 3015670, + 3015671, + 3015668, + 3015669, + 3015666, + 3015667, + 3015664, + 3015665, + 3015630, + 3015631, + 3015628, + 3015629, + 3015627, + 3015622, + 3015618, + 3015616, + 3015617, + 3015646, + 3015647, + 3015644, + 3015645, + 3015642, + 3015643, + 3015640, + 3015641, + 3015638, + 3015639, + 3015636, + 3015637, + 3015635, + 3015632, + 3015633, + 3015722, + 3015721, + 3015716, + 3015717, + 3015714, + 3015715, + 3015712, + 3015713, + 3015742, + 3015743, + 3015738, + 3015739, + 3015694, + 3015695, + 3015692, + 3015693, + 3015690, + 3015691, + 3015688, + 3015689, + 3015687, + 3015710, + 3015711, + 3015708, + 3015706, + 3015707, + 3015704, + 3015705, + 3015702, + 3015703, + 3015700, + 3015701, + 3015698, + 3015699, + 3015696, + 3015697, + 3015790, + 3015791, + 3015788, + 3015789, + 3015786, + 3015787, + 3015776, + 3015777, + 3015806, + 3015807, + 3015804, + 3015805, + 3015802, + 3015803, + 3015800, + 3015801, + 3015798, + 3015799, + 3015796, + 3015797, + 3015794, + 3015795, + 3015792, + 3015793, + 3015758, + 3015759, + 3015756, + 3015757, + 3015754, + 3015755, + 3015752, + 3015753, + 3015750, + 3015748, + 3015749, + 3015747, + 3015744, + 3015745, + 3015774, + 3015775, + 3015772, + 3015773, + 3015770, + 3015771, + 3015768, + 3015769, + 3015766, + 3015767, + 3015764, + 3015762, + 3015763, + 3015761, + 3015850, + 3015848, + 3015849, + 3015846, + 3015847, + 3015844, + 3015845, + 3015842, + 3015840, + 3015841, + 3015866, + 3015867, + 3015864, + 3015865, + 3015862, + 3015863, + 3015860, + 3015861, + 3015858, + 3015859, + 3015856, + 3015857, + 3015822, + 3015823, + 3015821, + 3015818, + 3015819, + 3015816, + 3015817, + 3015814, + 3015815, + 3015812, + 3015813, + 3015810, + 3015811, + 3015838, + 3015839, + 3015836, + 3015837, + 3015834, + 3015835, + 3015832, + 3015833, + 3015826, + 3015827, + 3015824, + 3015825, + 3015918, + 3015919, + 3015916, + 3015917, + 3015915, + 3015913, + 3015906, + 3015907, + 3015904, + 3015934, + 3015935, + 3015932, + 3015933, + 3015930, + 3015931, + 3015928, + 3015929, + 3015926, + 3015927, + 3015924, + 3015925, + 3015922, + 3015923, + 3015920, + 3015921, + 3015886, + 3015887, + 3015884, + 3015885, + 3015882, + 3015883, + 3015880, + 3015881, + 3015878, + 3015876, + 3015877, + 3015874, + 3015873, + 3015902, + 3015903, + 3015900, + 3015901, + 3015898, + 3015899, + 3015896, + 3015897, + 3015894, + 3015895, + 3015890, + 3015891, + 3015888, + 3015889, + 3015978, + 3015979, + 3015976, + 3015977, + 3015974, + 3015975, + 3015972, + 3015973, + 3015970, + 3015971, + 3015968, + 3015969, + 3015998, + 3015999, + 3015996, + 3015997, + 3015994, + 3015995, + 3015993, + 3015991, + 3015948, + 3015944, + 3015942, + 3015943, + 3015940, + 3015941, + 3015938, + 3015939, + 3015936, + 3015937, + 3015967, + 3015962, + 3015961, + 3015958, + 3015959, + 3015956, + 3015957, + 3015955, + 3015953, + 3016100, + 3016101, + 3016206, + 3016207, + 3016204, + 3016205, + 3016202, + 3016203, + 3016200, + 3016218, + 3016219, + 3016216, + 3016217, + 3016215, + 3016213, + 3016210, + 3016208, + 3016209, + 3017006, + 3017007, + 3017004, + 3017005, + 3017002, + 3017003, + 3017000, + 3017001, + 3017022, + 3017023, + 3017020, + 3017021, + 3017018, + 3017019, + 3017016, + 3017017, + 3017014, + 3017015, + 3017012, + 3017013, + 3017010, + 3017011, + 3017008, + 3017009, + 3017070, + 3017071, + 3017068, + 3017069, + 3017066, + 3017067, + 3017064, + 3017065, + 3017062, + 3017063, + 3017060, + 3017061, + 3017058, + 3017059, + 3017056, + 3017057, + 3017072, + 3017073, + 3017038, + 3017039, + 3017036, + 3017037, + 3017034, + 3017035, + 3017032, + 3017033, + 3017030, + 3017031, + 3017028, + 3017029, + 3017027, + 3017024, + 3017025, + 3017054, + 3017055, + 3017052, + 3017053, + 3017050, + 3017051, + 3017048, + 3017049, + 3017046, + 3017047, + 3017044, + 3017045, + 3017042, + 3017043, + 3017040, + 3017041, + 3018026, + 3018027, + 3018024, + 3018025, + 3018022, + 3018023, + 3018020, + 3018021, + 3018018, + 3018019, + 3018017, + 3018046, + 3018044, + 3018045, + 3018042, + 3018043, + 3018038, + 3018039, + 3018036, + 3018037, + 3018034, + 3018035, + 3018015, + 3018013, + 3018010, + 3018011, + 3018008, + 3018009, + 3018006, + 3018007, + 3018004, + 3018005, + 3018002, + 3018003, + 3018000, + 3018001, + 3018094, + 3018095, + 3018093, + 3018090, + 3018091, + 3018089, + 3018086, + 3018087, + 3018084, + 3018085, + 3018083, + 3018080, + 3018111, + 3018108, + 3018109, + 3018106, + 3018107, + 3018104, + 3018105, + 3018102, + 3018103, + 3018100, + 3018101, + 3018098, + 3018096, + 3018097, + 3018062, + 3018060, + 3018061, + 3018058, + 3018059, + 3018056, + 3018057, + 3018054, + 3018055, + 3018052, + 3018053, + 3018050, + 3018051, + 3018049, + 3018078, + 3018079, + 3018076, + 3018074, + 3018075, + 3018070, + 3018071, + 3018066, + 3018067, + 3018064, + 3018065, + 3018152, + 3018153, + 3018150, + 3018151, + 3018149, + 3018146, + 3018144, + 3018145, + 3018174, + 3018175, + 3018172, + 3018173, + 3018171, + 3018167, + 3018126, + 3018127, + 3018122, + 3018123, + 3018120, + 3018121, + 3018118, + 3018119, + 3018116, + 3018117, + 3018114, + 3018115, + 3018112, + 3018113, + 3018142, + 3018143, + 3018140, + 3018141, + 3018138, + 3018139, + 3018136, + 3018137, + 3018134, + 3018135, + 3018132, + 3018133, + 3018130, + 3018131, + 3018129, + 3018222, + 3018223, + 3018221, + 3018219, + 3018216, + 3018214, + 3018212, + 3018213, + 3018210, + 3018211, + 3018209, + 3018238, + 3018239, + 3018236, + 3018232, + 3018230, + 3018231, + 3018228, + 3018229, + 3018226, + 3018227, + 3018224, + 3018225, + 3018186, + 3018187, + 3018184, + 3018185, + 3018182, + 3018183, + 3018181, + 3018178, + 3018179, + 3018176, + 3018177, + 3018200, + 3018201, + 3018199, + 3018196, + 3018197, + 3018195, + 3018286, + 3018285, + 3018282, + 3018283, + 3018280, + 3018281, + 3018278, + 3018279, + 3018277, + 3018272, + 3018302, + 3018303, + 3018300, + 3018301, + 3018298, + 3018299, + 3018297, + 3018294, + 3018292, + 3018293, + 3018291, + 3018250, + 3018251, + 3018248, + 3018246, + 3018247, + 3018244, + 3018245, + 3018242, + 3018243, + 3018240, + 3018241, + 3018270, + 3018268, + 3018266, + 3018267, + 3018264, + 3018265, + 3018258, + 3018259, + 3018256, + 3018257, + 3018344, + 3018339, + 3018364, + 3018365, + 3018363, + 3018360, + 3018361, + 3018358, + 3018318, + 3018319, + 3018316, + 3018317, + 3018314, + 3018315, + 3018313, + 3018310, + 3018311, + 3018308, + 3018309, + 3018306, + 3018307, + 3018305, + 3018334, + 3018335, + 3018332, + 3018324, + 3018325, + 3018322, + 3018323, + 3018320, + 3018321, + 3018370, + 3018368, + 3018369, + 3018390, + 3018389, + 3010029, + 3010028, + 3010031, + 3010030, + 3010025, + 3010024, + 3010026, + 3010021, + 3010020, + 3010023, + 3010022, + 3010017, + 3010016, + 3010019, + 3010018, + 3010045, + 3010044, + 3010047, + 3010046, + 3010041, + 3010040, + 3010043, + 3010036, + 3010033, + 3010032, + 3010035, + 3010034, + 3010013, + 3010012, + 3010015, + 3010014, + 3010009, + 3010008, + 3010011, + 3010010, + 3010005, + 3010004, + 3010007, + 3010006, + 3010001, + 3010000, + 3010003, + 3010002, + 3010093, + 3010092, + 3010095, + 3010094, + 3010085, + 3010084, + 3010086, + 3010081, + 3010080, + 3010083, + 3010082, + 3010109, + 3010108, + 3010111, + 3010110, + 3010105, + 3010104, + 3010107, + 3010106, + 3010101, + 3010100, + 3010103, + 3010102, + 3010097, + 3010096, + 3010099, + 3010098, + 3010061, + 3010060, + 3010063, + 3010062, + 3010057, + 3010056, + 3010058, + 3010053, + 3010052, + 3010055, + 3010054, + 3010049, + 3010048, + 3010051, + 3010050, + 3010077, + 3010079, + 3010078, + 3010073, + 3010072, + 3010075, + 3010074, + 3010069, + 3010068, + 3010071, + 3010065, + 3010064, + 3010067, + 3010066, + 3010157, + 3010156, + 3010152, + 3010155, + 3010154, + 3010149, + 3010148, + 3010151, + 3010145, + 3010144, + 3010146, + 3010173, + 3010172, + 3010175, + 3010174, + 3010169, + 3010168, + 3010171, + 3010170, + 3010164, + 3010166, + 3010161, + 3010162, + 3010125, + 3010124, + 3010127, + 3010126, + 3010121, + 3010120, + 3010123, + 3010122, + 3010117, + 3010116, + 3010119, + 3010118, + 3010113, + 3010112, + 3010115, + 3010114, + 3010141, + 3010140, + 3010143, + 3010142, + 3010137, + 3010136, + 3010139, + 3010138, + 3010133, + 3010132, + 3010135, + 3010134, + 3010129, + 3010128, + 3010131, + 3010130, + 3010220, + 3010222, + 3010216, + 3010219, + 3010218, + 3010213, + 3010212, + 3010215, + 3010214, + 3010208, + 3010211, + 3010237, + 3010236, + 3010239, + 3010238, + 3010233, + 3010232, + 3010235, + 3010234, + 3010229, + 3010228, + 3010231, + 3010230, + 3010225, + 3010224, + 3010227, + 3010226, + 3010189, + 3010188, + 3010191, + 3010185, + 3010184, + 3010186, + 3010181, + 3010180, + 3010183, + 3010182, + 3010177, + 3010179, + 3010178, + 3010205, + 3010207, + 3010206, + 3010201, + 3010200, + 3010203, + 3010202, + 3010197, + 3010196, + 3010193, + 3010192, + 3010195, + 3010194, + 3010285, + 3010284, + 3010287, + 3010286, + 3010281, + 3010283, + 3010282, + 3010277, + 3010276, + 3010279, + 3010278, + 3010273, + 3010272, + 3010275, + 3010274, + 3010301, + 3010302, + 3010297, + 3010296, + 3010299, + 3010298, + 3010289, + 3010288, + 3010290, + 3010253, + 3010252, + 3010255, + 3010254, + 3010249, + 3010248, + 3010251, + 3010250, + 3010245, + 3010244, + 3010247, + 3010246, + 3010241, + 3010240, + 3010243, + 3010242, + 3010269, + 3010268, + 3010271, + 3010270, + 3010264, + 3010267, + 3010266, + 3010261, + 3010260, + 3010263, + 3010262, + 3010257, + 3010256, + 3010259, + 3010258, + 3010349, + 3010348, + 3010351, + 3010350, + 3010345, + 3010344, + 3010347, + 3010346, + 3010341, + 3010340, + 3010343, + 3010342, + 3010337, + 3010336, + 3010339, + 3010338, + 3010365, + 3010364, + 3010360, + 3010357, + 3010359, + 3010358, + 3010353, + 3010352, + 3010355, + 3010354, + 3010317, + 3010316, + 3010319, + 3010318, + 3010313, + 3010315, + 3010314, + 3010308, + 3010311, + 3010304, + 3010307, + 3010306, + 3010333, + 3010332, + 3010335, + 3010334, + 3010329, + 3010328, + 3010331, + 3010330, + 3010325, + 3010324, + 3010327, + 3010326, + 3010321, + 3010320, + 3010323, + 3010322, + 3010412, + 3010410, + 3010405, + 3010404, + 3010406, + 3010403, + 3010402, + 3010429, + 3010431, + 3010430, + 3010425, + 3010424, + 3010427, + 3010421, + 3010423, + 3010422, + 3010417, + 3010416, + 3010419, + 3010381, + 3010380, + 3010383, + 3010382, + 3010377, + 3010376, + 3010379, + 3010378, + 3010373, + 3010372, + 3010375, + 3010374, + 3010369, + 3010368, + 3010371, + 3010370, + 3010397, + 3010396, + 3010399, + 3010398, + 3010393, + 3010392, + 3010395, + 3010394, + 3010389, + 3010388, + 3010391, + 3010390, + 3010385, + 3010384, + 3010387, + 3010386, + 3010473, + 3010472, + 3010471, + 3010465, + 3010464, + 3010467, + 3010466, + 3010493, + 3010492, + 3010495, + 3010494, + 3010491, + 3010490, + 3010445, + 3010444, + 3010447, + 3010446, + 3010441, + 3010440, + 3010443, + 3010442, + 3010437, + 3010436, + 3010439, + 3010438, + 3010433, + 3010432, + 3010435, + 3010434, + 3010462, + 3010457, + 3010459, + 3010458, + 3010452, + 3010455, + 3010454, + 3010449, + 3010448, + 3010451, + 3010450, + 3010541, + 3010540, + 3010543, + 3010542, + 3010537, + 3010536, + 3010539, + 3010538, + 3010533, + 3010532, + 3010535, + 3010534, + 3010529, + 3010531, + 3010530, + 3010557, + 3010556, + 3010559, + 3010558, + 3010553, + 3010552, + 3010555, + 3010554, + 3010549, + 3010548, + 3010551, + 3010550, + 3010545, + 3010544, + 3010547, + 3010546, + 3010511, + 3010505, + 3010504, + 3010506, + 3010501, + 3010500, + 3010503, + 3010502, + 3010499, + 3010525, + 3010524, + 3010527, + 3010526, + 3010521, + 3010520, + 3010523, + 3010522, + 3010517, + 3010516, + 3010519, + 3010518, + 3010513, + 3010512, + 3010515, + 3010514, + 3010607, + 3010606, + 3010601, + 3010600, + 3010602, + 3010597, + 3010596, + 3010598, + 3010593, + 3010592, + 3010595, + 3010620, + 3010623, + 3010622, + 3010613, + 3010612, + 3010615, + 3010609, + 3010608, + 3010611, + 3010610, + 3010573, + 3010572, + 3010575, + 3010574, + 3010569, + 3010568, + 3010571, + 3010570, + 3010565, + 3010564, + 3010567, + 3010566, + 3010561, + 3010560, + 3010563, + 3010562, + 3010589, + 3010591, + 3010590, + 3010585, + 3010584, + 3010587, + 3010581, + 3010580, + 3010583, + 3010582, + 3010577, + 3010576, + 3010579, + 3010578, + 3010670, + 3010661, + 3010663, + 3010662, + 3010656, + 3010659, + 3010685, + 3010687, + 3010686, + 3010681, + 3010680, + 3010683, + 3010682, + 3010677, + 3010676, + 3010679, + 3010678, + 3010673, + 3010672, + 3010675, + 3010674, + 3010637, + 3010636, + 3010639, + 3010638, + 3010635, + 3010634, + 3010631, + 3010624, + 3010653, + 3010652, + 3010655, + 3010654, + 3010651, + 3010644, + 3010641, + 3010640, + 3010643, + 3010642, + 3010733, + 3010732, + 3010735, + 3010734, + 3010728, + 3010725, + 3010724, + 3010727, + 3010726, + 3010721, + 3010720, + 3010723, + 3010722, + 3010749, + 3010748, + 3010751, + 3010750, + 3010744, + 3010747, + 3010743, + 3010742, + 3010737, + 3010736, + 3010738, + 3010700, + 3010703, + 3010702, + 3010697, + 3010699, + 3010698, + 3010693, + 3010692, + 3010695, + 3010694, + 3010688, + 3010691, + 3010690, + 3010719, + 3010708, + 3010705, + 3010704, + 3010707, + 3010706, + 3010797, + 3010798, + 3010795, + 3010785, + 3010784, + 3010787, + 3010786, + 3010812, + 3010815, + 3010814, + 3010809, + 3010808, + 3010811, + 3010810, + 3010804, + 3010807, + 3010801, + 3010800, + 3010803, + 3010802, + 3010765, + 3010764, + 3010767, + 3010766, + 3010761, + 3010760, + 3010763, + 3010762, + 3010757, + 3010756, + 3010758, + 3010752, + 3010755, + 3010754, + 3010783, + 3010769, + 3010768, + 3010861, + 3010860, + 3010863, + 3010862, + 3010857, + 3010856, + 3010859, + 3010858, + 3010853, + 3010852, + 3010855, + 3010854, + 3010849, + 3010848, + 3010851, + 3010850, + 3010878, + 3010873, + 3010872, + 3010875, + 3010874, + 3010869, + 3010868, + 3010871, + 3010870, + 3010865, + 3010864, + 3010867, + 3010829, + 3010828, + 3010831, + 3010830, + 3010825, + 3010824, + 3010827, + 3010826, + 3010821, + 3010820, + 3010823, + 3010822, + 3010817, + 3010816, + 3010819, + 3010818, + 3010844, + 3010841, + 3010840, + 3010843, + 3010842, + 3010837, + 3010836, + 3010839, + 3010838, + 3010833, + 3010832, + 3010835, + 3010834, + 3010925, + 3010924, + 3010927, + 3010926, + 3010941, + 3010943, + 3010942, + 3010937, + 3010939, + 3010938, + 3010933, + 3010932, + 3010934, + 3010929, + 3010928, + 3010931, + 3010930, + 3010893, + 3010892, + 3010894, + 3010889, + 3010888, + 3010891, + 3010890, + 3010885, + 3010884, + 3010887, + 3010886, + 3010881, + 3010880, + 3010883, + 3010882, + 3010985, + 3010984, + 3010987, + 3010986, + 3010981, + 3010980, + 3010983, + 3010982, + 3010976, + 3010979, + 3010978, + 3011000, + 3010999, + 3010957, + 3010956, + 3010959, + 3010958, + 3010953, + 3010948, + 3010945, + 3010947, + 3010946, + 3010973, + 3010972, + 3010974, + 3010969, + 3010968, + 3010971, + 3010970, + 3010965, + 3010964, + 3010967, + 3010966, + 3010961, + 3010960, + 3010962, + 3012015, + 3012009, + 3012008, + 3012011, + 3012010, + 3012005, + 3012007, + 3012006, + 3012001, + 3012000, + 3012003, + 3012002, + 3012029, + 3012028, + 3012031, + 3012030, + 3012026, + 3012021, + 3012020, + 3012017, + 3012018, + 3012036, + 3012032, + 3012034, + 3013005, + 3013001, + 3013000, + 3013002, + 3013009, + 3013008, + 3014013, + 3014015, + 3014014, + 3014009, + 3014011, + 3014010, + 3014005, + 3014004, + 3014006, + 3014001, + 3014000, + 3014003, + 3014002, + 3014029, + 3014028, + 3014030, + 3014024, + 3014027, + 3014026, + 3014021, + 3014020, + 3014023, + 3014022, + 3014017, + 3014016, + 3014019, + 3014018 +] + + +#question = sm.sendAskYesNo("#eWould you like to receive a #rrandom Chair?") +randitem = random.choice(items) +#if question and sm.canHold(randitem): +if sm.canHold(randitem): + sm.giveItem(randitem) + sm.consumeItem(2437025) +else: + sm.sendNext("#e#dYour inventory is full or you don't have enough NX.") + diff --git a/resources/mountsFromItem.txt b/resources/mountsFromItem.txt new file mode 100755 index 0000000..bc66c81 --- /dev/null +++ b/resources/mountsFromItem.txt @@ -0,0 +1,523 @@ +2431797 80001046 +2430272 80001047 +2430339 80001047 +2430340 80001047 +2431505 80001047 +2432030 80001049 +2430266 80001050 +2430360 80001050 +2430361 80001050 +2430145 80001052 +2430354 80001054 +2430355 80001054 +2430508 80001054 +2436067 80001054 +2430356 80001055 +2430357 80001055 +2430521 80001055 +2431914 80001055 +2430358 80001056 +2430359 80001056 +2430507 80001056 +2430315 80001058 +2430316 80001058 +2432218 80001058 +2430317 80001059 +2430319 80001060 +2430320 80001060 +2430293 80001066 +2430294 80001066 +2430295 80001067 +2430296 80001067 +2430297 80001068 +2430298 80001068 +2431799 80001068 +2430299 80001069 +2430300 80001069 +2430301 80001070 +2430302 80001070 +2430303 80001071 +2430304 80001071 +2432108 80001071 +2430091 80001072 +2430305 80001072 +2430306 80001072 +2430050 80001073 +2430259 80001073 +2430307 80001073 +2430308 80001073 +2430717 80001073 +2433459 80001073 +2430309 80001074 +2430310 80001074 +2430136 80001076 +2430271 80001076 +2430311 80001076 +2430312 80001076 +2431504 80001076 +2430313 80001077 +2430314 80001077 +2432751 80001077 +2432752 80001077 +2430335 80001111 +2430336 80001111 +2432735 80001112 +2432736 80001112 +2433097 80001121 +2430876 80001166 +2430877 80001166 +2430878 80001166 +2430323 80001109 +2431473 80001257 +2432381 80001257 +2431474 80001258 +2432382 80001258 +2431733 80001277 +2431745 80001277 +2431733 80001278 +2431745 80001278 +2431764 80001289 +2431765 80001290 +2431764 80001294 +2431765 80001295 +2210092 80001208 +2431123 80001208 +2432242 80001208 +2435216 80001208 +2433682 80001230 +2431797 80001300 +2431797 80001301 +2430297 80001302 +2430298 80001302 +2431799 80001302 +2430297 80001303 +2430298 80001303 +2431799 80001303 +2431856 80001304 +2430317 80001310 +2430319 80001311 +2430320 80001311 +2430335 80001319 +2430336 80001319 +2431898 80001324 +2435782 80001324 +2431898 80001325 +2435782 80001325 +2431915 80001327 +2431915 80001328 +2432007 80001345 +2432008 80001345 +2432839 80001345 +2432030 80001347 +2432135 80001348 +2432078 80001353 +2432078 80001354 +2432085 80001355 +2432085 80001356 +2432135 80001397 +2432151 80001400 +2432151 80001401 +2432309 80001404 +2434132 80001404 +2210092 80001411 +2431123 80001411 +2432242 80001411 +2435216 80001411 +2210092 80001412 +2431123 80001412 +2432242 80001412 +2435216 80001412 +2430315 80001413 +2430316 80001413 +2432218 80001413 +2430315 80001414 +2430316 80001414 +2432218 80001414 +2432291 80001419 +2432291 80001420 +2432293 80001421 +2432293 80001422 +2432295 80001423 +2432295 80001424 +2432328 80001435 +2432347 80001440 +2434914 80001440 +2434925 80001440 +2432348 80001441 +2434915 80001441 +2434926 80001441 +2432349 80001442 +2434918 80001442 +2434927 80001442 +2432350 80001443 +2434923 80001443 +2436310 80001443 +2432351 80001444 +2434924 80001444 +2434928 80001444 +2432359 80001445 +2432359 80001446 +2432361 80001447 +2432361 80001448 +2431490 80001452 +2432418 80001453 +2432431 80001480 +2432432 80001480 +2432431 80001481 +2432432 80001481 +2430299 80001482 +2430300 80001482 +2430299 80001483 +2430300 80001483 +2432449 80001484 +2432450 80001484 +2432449 80001485 +2432450 80001485 +2432552 80001492 +2432167 80001403 +2433128 80001403 +2432580 80001503 +2432581 80001503 +2432580 80001504 +2432581 80001504 +2432582 80001506 +2432583 80001506 +2435583 80001507 +2432498 80001508 +2432499 80001508 +2432498 80001509 +2432499 80001509 +2022455 80001510 +2432500 80001510 +2432501 80001510 +2022455 80001511 +2432500 80001511 +2432501 80001511 +2432635 80001517 +2432653 80001533 +2432653 80001534 +2432735 80001550 +2432736 80001550 +2432735 80001551 +2432736 80001551 +2432733 80001552 +2432733 80001553 +2430313 80001554 +2430314 80001554 +2432751 80001554 +2432752 80001554 +2430313 80001555 +2430314 80001555 +2432751 80001555 +2432752 80001555 +2432806 80001557 +2432807 80001557 +2432806 80001558 +2432807 80001558 +2432994 80001561 +2432995 80001562 +2432996 80001563 +2432997 80001564 +2432998 80001565 +2432999 80001566 +2433000 80001567 +2433001 80001568 +2433002 80001569 +2433003 80001570 +2433003 80001571 +2433003 80001572 +2434728 80001592 +2433498 80001630 +2433499 80001630 +2433500 80001631 +2433501 80001631 +2433498 80001639 +2433499 80001639 +2433500 80001640 +2433501 80001640 +2430050 80001643 +2430259 80001643 +2430307 80001643 +2430308 80001643 +2430717 80001643 +2433459 80001643 +2431422 80001644 +2431426 80001645 +2431542 80001645 +2433461 80001645 +2434581 80001645 +2433498 80001671 +2433499 80001671 +2433498 80001672 +2433499 80001672 +2433500 80001673 +2433501 80001673 +2433500 80001674 +2433501 80001674 +2433658 80001703 +2433659 80001703 +2433735 80001707 +2433734 80001708 +2433736 80001708 +2433735 80001709 +2433734 80001710 +2433736 80001710 +2433809 80001711 +2433810 80001711 +2433809 80001712 +2433810 80001712 +2433811 80001713 +2433812 80001713 +2433811 80001714 +2433812 80001714 +2433946 80001764 +2433947 80001764 +2433946 80001765 +2433947 80001765 +2433948 80001766 +2433949 80001766 +2433948 80001767 +2433949 80001767 +2434025 80001774 +2434078 80001776 +2434078 80001777 +2434080 80001778 +2434080 80001779 +2432653 80001782 +2433809 80001783 +2433810 80001783 +2434275 80001784 +2434276 80001784 +2434275 80001785 +2434276 80001785 +2434277 80001786 +2434277 80001787 +2434379 80001790 +2434380 80001790 +2434379 80001791 +2434380 80001791 +2434377 80001792 +2434377 80001793 +2434515 80001811 +2434516 80001811 +2434515 80001812 +2434516 80001812 +2434517 80001813 +2434518 80001813 +2434517 80001814 +2434518 80001814 +2434526 80001867 +2434527 80001868 +2434580 80001870 +2431426 80001871 +2431542 80001871 +2433461 80001871 +2434581 80001871 +2431415 80001872 +2432379 80001872 +2434582 80001872 +2435784 80001872 +2435791 80001872 +2434649 80001918 +2434650 80001918 +2434649 80001919 +2434650 80001919 +2434674 80001920 +2436314 80001920 +2436315 80001920 +2434728 80001933 +2434761 80001934 +2433733 80001935 +2434762 80001935 +2432007 80011098 +2432008 80011098 +2432839 80011098 +2432821 80011094 +2433053 80011127 +2434078 80011128 +2433168 80011134 +2433169 80011135 +2433170 80011136 +2433198 80011137 +2433511 80011148 +2434241 80011148 +2433733 80011157 +2434762 80011157 +2020002 80011139 +2433292 80011139 +2481004 80011139 +2020002 80011142 +2433292 80011142 +2481004 80011142 +2434234 80011234 +2435214 80011234 +2431424 80011257 +2431528 80011257 +2432414 80011257 +2434235 80011236 +2434236 80011237 +2432347 80011281 +2434914 80011281 +2434925 80011281 +2432348 80011282 +2434915 80011282 +2434926 80011282 +2432349 80011283 +2434918 80011283 +2434927 80011283 +2432351 80011284 +2434924 80011284 +2434928 80011284 +2434618 80011263 +2433097 80011342 +2210092 80011343 +2431123 80011343 +2432242 80011343 +2435216 80011343 +2432167 80011344 +2433128 80011344 +2430264 80011345 +2430550 80011345 +2431496 80011345 +2431498 80011350 +2431498 80011351 +2435375 80011352 +2435376 80011352 +2435375 80011353 +2435376 80011353 +2431797 80011356 +2434660 80011270 +2434603 80011262 +2435553 80011357 +2435554 80011357 +2435785 80011357 +2435553 80011358 +2435554 80011358 +2435785 80011358 +2435555 80011359 +2435556 80011359 +2435786 80011359 +2436188 80011359 +2435555 80011360 +2435556 80011360 +2435786 80011360 +2436188 80011360 +2431353 80011403 +2431456 80011403 +2431457 80011403 +2432380 80011403 +2433460 80011403 +2433924 80011403 +2435781 80011403 +2435789 80011403 +2431267 80011404 +2431268 80011404 +2432377 80011404 +2435783 80011404 +2435790 80011404 +2435729 80011395 +2435730 80011396 +2435731 80011397 +2435732 80011398 +2435946 80011405 +2435947 80011406 +2432135 80011411 +2433734 80011412 +2433736 80011412 +2433735 80011413 +2430354 80011414 +2430355 80011414 +2430508 80011414 +2436067 80011414 +2430264 80011415 +2430550 80011415 +2431496 80011415 +2433097 80011416 +2432167 80011417 +2433128 80011417 +2432309 80011418 +2434132 80011418 +2430073 80001045 +2430117 80001045 +2430076 80001048 +2430118 80001048 +2430137 80001051 +2430367 80001057 +2430258 80001057 +2430325 80001061 +2430326 80001061 +2430341 80001062 +2430342 80001062 +2430080 80001064 +2430101 80001065 +2430324 80001078 +2430345 80001078 +2430147 80001053 +2430148 80001053 +2430135 80001088 +2430201 80001114 +2430202 80001114 +2430203 80001114 +2430666 80001127 +2430667 80001127 +2430750 80001153 +2430751 80001153 +2430922 80001182 +2432451 80001292 +2430555 80001225 +2430556 80001225 +2430557 80001225 +2430228 80001326 +2432015 80001333 +2432006 80001331 +2432003 80001331 +2433006 80001336 +2430875 80001338 +2430876 80001338 +2430877 80001338 +2432527 80001490 +2432528 80001491 +2434525 80001866 +2434735 80001921 +2434736 80001921 +2434737 80001923 +2434738 80001923 +2434967 80001942 +2434968 80001942 +2435112 80001950 +2435113 80001951 +2435114 80001952 +2435089 80001956 +2435090 80001956 +2435091 80001958 +2435092 80001958 +2435202 80001975 +2435203 80001975 +2435204 80001977 +2435205 80001977 +2433060 80011129 +2433293 80011140 +2434536 80011256 +2435377 80011354 +2435378 80011354 +2431362 80011156 +2439909 80002660 +2439906 80011758 +2439804 80011744 +2439372 80011707 +2435967 80002225 +2435965 80002224 +2435295 80001980 +2435297 80001982 +2435372 80011350 +2435722 80001997 +2630768 80011850 +2630160 80011772 +2630585 80011844 +2630578 80011825 +2630700 80001921 +2630503 80011821 +2630387 80002713 +2630386 80002712 +2630279 80002702 +2630261 80002699 diff --git a/resources/random damage skins.py b/resources/random damage skins.py new file mode 100755 index 0000000..272f72c --- /dev/null +++ b/resources/random damage skins.py @@ -0,0 +1,655 @@ + 2431965, # Basic Damage Skin + 2433271, # Basic Damage Skin + 2438159, # Basic Damage Skin + 2438872, # Basic Damage Skin + 2438871, # Basic Damage Skin + 2431966, # Digitized Damage Skin + 2432084, # Digitized Damage Skin + 2433260, # Digitized Damage Skin + 2434239, # Digitized Damage Skin + 2435172, # Digitized Damage Skin + 2438160, # Digitized Damage Skin + 2431967, # Kritias Damaged Skin + 2438161, # Kritias Damage Skin + 2432131, # Party Quest Damage Skin + 2437009, # Party Quest Damage Skin + 2438162, # Party Quest Damage Skin + 2432153, # Hard-Hitting Damage Skin + 2432638, # Hard-hitting Damage Skin + 2432659, # Hard-hitting Damage Skin + 2433261, # Hard-Hitting Damage Skin + 2436688, # Hard-hitting Damage Skin + 2438163, # Hard-hitting Damage Skin + 2432154, # Sweet Tea Cake Damage Skin + 2432637, # Sweet Tea Cake Damage Skin + 2432658, # Sweet Tea Cake Damage Skin + 2433264, # Sweet Tea Cake Damage Skin + 2435045, # Sweet Tea Cake Damage Skin + 2436100, # Sweet Tea Cake Damage Skin + 2438164, # Sweet Tea Cake Damage Skin + 2438165, # Club Henesys Damage Skin + 2432207, # Club Henesys' damage Skin, + 2432354, # Merry Christmas Damage Skin + 2434975, # Merry Christmas Damage Skin + 2432355, # Snowflake Damage Skin + 2432972, # Snowflake Damage Skin + 2434976, # Snowflake Damage Skin + 2435173, # Snowflake Damage Skin + 2438167, # Snowflake Damage Skin + 2432465, # Alicia's Damage Skin + 2438168, # Alicia's Damage Skin + 2432479, # Dorothy's Damage Skin + 2438169, # Dorothy's Damage Skin + 2432526, # Keyboard Warrior Damage Skin + 2432639, # Keyboard Warrior Damage Skin + 2432660, # Keyboard Warrior Damage Skin + 2433262, # Keyboard Warrior Damage Skin + 2435174, # Keyboard Warrior Damage Skin + 2436038, # Keyboard Warrior Damage Skin + 2438170, # Keyboard Warrior Damage Skin + 2432532, # Gentle Springtime Breeze Damage Skin + 2435102, # Gentle Springtime Breeze Damage Skin + 2435478, # Gentle Springtime Breeze Damage Skin + 2438171, # Gentle Springtime Breeze Damage Skin + 2433107, # Damage Skin - Springtime Breeze + 2432592, # Singles Army Damage Skin + 2433263, # Singles Army Damage Skin + 2438172, # Singles Army Damage Skin + 2433160, # Lonely Single Damage Skin + 2432640, # Reminiscence Damage Skin + 2432661, # Reminiscence Damage Skin + 2433265, # Reminiscence Damage Skin + 2435175, # Reminiscence Damage Skin + 2438173, # Reminiscence Damage Skin + 2438461, # Reminiscence Damage Skin + 2432710, # Orange Mushroom Damage Skin + 2433266, # Orange Mushroom Damage Skin + 2433919, # Orange Mushroom Damage Skin + 2435170, # Orange Mushroom Damage Skin + 2436035, # Orange Mushroom Damage Skin + 2438174, # Orange Mushroom Damage Skin + 2432836, # Crown Damage Skin + 2434980, # Crown Damage Skin + 2435176, # Crown Damage Skin + 2438175, # Crown Damage Skin + 2432973, # Monotone Damage Skin + 2433158, # Monotone Damage Skin + 2433897, # Monotone Damage Skin + 2435177, # Monotone Damage Skin + 2435834, # Monotone Damage Skin + 2438176, # Monotone Damage Skin + 2433063, # Star Planet Damage Skin + 2435510, # Star Planet Damage Skin + 2438177, # Star Planet Damage Skin + 2439572, # Star Planet Damage Skin + 2433456, # Hangul Day Damage Skin + 2438179, # Hangul Day Damage Skin + 2433715, # Striped Damage Skin + 2434979, # Striped Damage Skin + 2435024, # Striped Damage Skin + 2435571, # Striped Damage Skin + 2436101, # Striped Damage Skin + 2438181, # Striped Damage Skin + 2433804, # Couples Army Damage Skin + 2435101, # Couples Army Damage Skin + 2435168, # Couples Army Damage Skin + 2438182, # Couples Army Damage Skin + 2433913, # Yeti and Pepe Damage Skin + 2435025, # Yeti and Pepe Damage Skin + 2436036, # Yeti and Pepe Damage Skin + 2438184, # Yeti and Pepe Damage Skin + 2433980, # Slime and Mushroom Damage Skin + 2434741, # Slime and Mushroom Damage Skin + 2435026, # Slime and Mushroom Damage Skin + 2437527, # Slime and Mushroom Damage Skin + 2438185, # Slime and Mushroom Damage Skin + 2433981, # Pink Bean Damage Skin + 2434742, # Pink Bean Damage Skin + 2438186, # Pink Bean Damage Skin + 2438421, # Pink Bean Damage Skin + 2434248, # Rainbow Boom Damage Skin + 2435027, # Rainbow Boom Damage Skin + 2435117, # Rainbow Boom Damage Skin + 2435477, # Rainbow Boom Damage Skin + 2438188, # Rainbow Boom Damage Skin + 2433362, # Night Sky Damage Skin + 2433666, # Mashmellow Damage Skin + 2434274, # Marshmallow Damage Skin + 2435029, # Marshmallow Damage Skin + 2435490, # Marshmallow Damage Skin + 2438190, # Marshmallow Damage Skin + 2434289, # Mu Lung Dojo Damage Skin + 2438191, # Mu Lung Dojo Damage Skin + 2434390, # Teddy Damage Skin + 2436099, # Teddy Damage Skin + 2437712, # Teddy Damage Skin + 2438192, # Teddy Ursus Damage Skin + 2434391, # Mighty Ursus Damage Skin + 2436034, # Mighty Ursus Damage Skin + 2438193, # Mighty Ursus Damage Skin + 2438194, # Scorching Heat Damage Skin + 5680395, # Scorching Heat Damage Skin + 2434528, # USA Damage Skin + 2438195, # USA Damage Skin + 2434529, # Churro Damage Skin + 2438196, # Churro Damage Skin + 2434530, # Singapore Night Damage Skin + 2438197, # Singapore Night Damage Skin + 2438198, # Scribbler Damage Skin + 2436531, # Scribbler Damage Skin + 2434546, # Scribbler Damage Skin + 2433571, # Scribble Crush Damage Skin + 2434374, # Autumn Festival Full Moon Damage Skin + 2434574, # Full Moon Damage Skin + 2438199, # Full Moon Damage Skin + 2434575, # Sunny Damage Skin + 2435171, # Sunny Damage Skin + 2435727, # Sunny Damage Skin + 2438200, # Sunny Damage Skin + 2432804, # Princess No Damage Skin + 2434654, # Murgoth Damage Skin + 2435325, # Murgoth Damage Skin + 2437727, # Murgoth Damage Skin + 2438202, # Murgoth Damage Skin + 2435326, # Nine-Tailed Fox Damage Skin + 2432749, # Zombie Damage Skin, + 2434710, # MVP Special Damage Skin + 2438205, # MVP Special Damage Skin + 2434824, # Monster Park Damage Skin + 2438207, # Monster Park Damage Skin + 2436041, # Heroes Phantom Damage Skin + 2435665, # Heroes Phantom Damage Skin + 2435043, # Heroes Phantom Damage Skin + 2438211, # Heroes Phantom Damage Skin + 2436042, # Heroes Mercedes Damage Skin + 2435666, # Heroes Mercedes Damage Skin + 2435044, # Heroes Mercedes Damage Skin + 2438212, # Heroes Mercedes Damage Skin + 2435046, # Fireworks Damage Skin + 2436097, # Fireworks Damage Skin + 2437710, # Fireworks Damage Skin + 2434499, # Autumn Festival Fireworks Damage Skin + 2435047, # Heart Balloon Damage Skin + 2435140, # Neon Sign Damage Skin + 2435836, # Neon Sign Damage Skin + 2438215, # Neon Sign Damage Skin + 2435141, # Freeze Tag Damage Skin + 2437244, # Freeze Tag Damage Skin + 2438216, # Freeze Tag Damage Skin + 2435179, # Candy Damage Skin + 2436096, # Candy Damage Skin + 2438217, # Candy Damage Skin + 2435162, # Antique Gold Damage Skin + 2435157, # Calligraphy Damage Skin + 2436098, # Calligraphy Damage Skin + 2438219, # Calligraphy Damage Skin + 2435158, # Explosion Damage Skin + 2435835, # Explosion Damage Skin + 2438220, # Explosion Damage Skin + 2435159, # Snow-wing Damage Skin + 2436687, # Snow-wing Damage Skin + 2438221, # Snow-wing Damage Skin + 2435160, # Miho Damage Skin + 2436044, # Miho Damage Skin + 2438222, # Miho Damage Skin + 2435182, # Musical Score Damage Skin + 2435725, # Musical Score Damage Skin + 2438224, # Musical Score Damage Skin + 2433709, # Moon Bunny Damage Skin + 2434081, # Moon Bunny Damage Skin + 2435166, # Moon Bunny Damage Skin + 2435850, # Moon Bunny Damage Skin + 2438225, # Moon Bunny Damage Skin + 2435184, # Forest of Tenacity Damage Skin + 2438226, # Forest of Tenacity Damage Skin + 2435222, # Festival Tortoise Damage Skin + 2436530, # Festival Tortoise Damage Skin + 2438227, # Festival Tortoise Damage Skin + 2438228, # April Fools' Damage Skin + 2435293, # April Fools' Damage Skin + 2438229, # Blackheart Day Damage Skin + 2435313, # Blackheart Day Damage Skin + 2438233, # Sparkling April Fools' Damage Skin + 2435473, # Bubble April Fools' Damage Skin + 2435331, # Bubble April Fools' Damage Skin + 2438231, # Retro April Fools' Damage Skin + 2435332, # Retro April Fools' Damage Skin + 2438232, # Monochrome April Fools' Damage Skin + 2435849, # Monochrome April Fools' Damage Skin + 2435333, # Monochrome April Fools' Damage Skin + 2435334, # Sparkling April Fools' Damage Skin + 2435474, # Sparkling April Fools' Damage Skin + 2435316, # Haste Damage Skin + 2438234, # Haste Damage Skin + 2438235, # 12th Anniversary Maple Leaf Damage Skin + 2435408, # 12th Anniversary Maple Leaf Damage Skin + 2438759, # 12th Anniversary Damage Skin + 2435427, # Cyber Damage Skin + 2438236, # Cyber Damage Skin + 2435428, # Cosmic Damage Skin + 2435839, # Cosmic Damage Skin + 2438237, # Cosmic Damage Skin + 2438238, # Choco Donut Damage Skin + 2435429, # Choco Donut Damage Skin + 2438240, # Monster Balloon Damage Skin + 2435456, # Lovely Damage Skin, + 2435461, # Balloon Damage Skin + 2435493, # Monster Balloon Damage Skin + 2438241, # Bubble April Fools' Damage Skin + 2438242, # Sparkling April Fools' Damage Skin + 2435424, # Henesys Damage Skin + 2438243, # Henesys Damage Skin + 2435959, # Henesys Damage Skin + 2435958, # Leafre Damage Skin + 2435425, # Leafre Damage Skin + 2438244, # Leafre Damage Skin + 2435431, # Algebraic Damage Skin + 2438245, # Algebraic Damage Skin + 2435430, # Blue Flame Damage Skin + 2438246, # Blue Flame Damage Skin + 2438761, # Blue Flame Damage Skin + 2435432, # Purple Damage Skin + 2438247, # Purple Damage Skin + 2435433, # Nanopixel Damage Skin + 2438248, # Nanopixel Damage Skin + 2435521, # Crystal Damage Skin + 2435523, # Chocolate Damage Skin + 2435524, # Spark Damage Skin + 2436561, # Spark Damage Skin + 2438249, # Royal Damage Skin + 2435538, # Royal Damage Skin + 2435832, # Chrome Damage Skin (Ver. 1) + 2438250, # Chrome Damage Skin (Ver. 1) + 2435833, # Neon Lights Damage Skin + 2436360, # Neon Lights Damage Skin + 2438251, # Neon Lights Damage Skin + 2438252, # Spades Damage Skin + 2435840, # Gilded Damage Skin + 2438253, # Gilded Damage Skin + 2435841, # Batty Damage Skin + 2438254, # Batty Damage Skin + 2438255, # Monochrome April Fools' Damage Skin + 2435972, # Vanishing Journey Damage Skin + 2438256, # Vanishing Journey Damage Skin + 2436023, # Chu Chu Damage Skin + 2438257, # Chu Chu Damage Skin + 2436024, # Lachelein Damage Skin + 2438258, # Lachelein Damage Skin + 2436026, # Poison Flame Damage Skin + 2438259, # Poison Flame Damage Skin + 2436027, # Blue Shock Damage Skin + 2438260, # Blue Shock Damage Skin + 2436028, # Music Power Damage Skin + 2438261, # Music Power Damage Skin + 2436029, # Collage Power Damage Skin + 2436045, # Starlight Aurora Damage Skin + 2438263, # Starlight Aurora Damage Skin + 2436085, # Chestnut Damage Skin + 2437709, # Chestnut Damage Skin + 2438264, # Chestnut Damage Skin + 2438265, # Twilight Damage Skin + 2436083, # Twilight Damage Skin + 2437707, # Twilight Damage Skin + 2438266, # Unyielding Fury Damage Skin + 2436084, # Unyielding Fury Damage Skin + 2437708, # Unyielding Fury Damage Skin + 2436103, # Gilded Moonlight Damage Skin + 2438158, # Gilded Moonlight Damage Skin + 2438267, # Gilded Moonlight Damage Skin + 2438268, # Hangul Day Traditional Damage Skin + 2436131, # Hangul Day Traditional Damage Skin + 2438269, # Gingko Leaf Damage Skin + 2436140, # Gingko Leaf Damage Skin + 2438270, # Detective Damage Skin + 2436206, # Detective Damage Skin + 2436182, # Silly Ghost Damage Skin + 2436212, # Hallowkitty Damage Skin + 2437851, # Hallowkitty Damage Skin + 2438272, # Pew Pew Damage Skin + 2436268, # Steamed Bun Damage Skin + 2436258, # Relic Damage Skin + 2438274, # Relic Damage Skin + 2438275, # Hieroglyph Damage Skin + 2436259, # Hieroglyph Damage Skin + 2438276, # Breakthrough Damage Skin + 2436400, # Breakthrough Damage Skin + 2438283, # Mecha Damage Skin + 2436560, # Mecha Damage Skin + 2438284, # Foamy Friends Damage Skin + 2436578, # Foamy Friends Damage Skin + 2437767, # Foamy Friends Damage Skin + 2438285, # Magpie's Feather Damage Skin + 2436611, # Magpie's Feather Damage Skin + 2438286, # Persimmon Tree Damage Skin + 2436596, # Crystalline Damage Skin + 2436679, # Arcana Damage Skin + 2438287, # Arcana Damage Skin + 2438288, # Imperial Damage Skin + 2436680, # Imperial Damage Skin + 2438289, # Fafnir Damage Skin + 2436681, # Fafnir Damage Skin + 2436682, # AbsoLab Damage Skin + 2438290, # AbsoLab Damage Skin + 2438293, # Honeybee Damage Skin + 2436785, # Honeybee Damage Skin + 2438294, # Evolution Damage Skin + 2436810, # Evolution Damage Skin + 2436951, # Constellation Damage Skin + 2438295, # Constellation Damage Skin + 2437768, # Constellation Damage Skin + 2438296, # Extraterrestrial Damage Skin + 2436952, # Extraterrestrial Damage Skin + 2438297, # Frozen Treat Damage Skin + 2436953, # Frozen Treat Damage Skin + 2438298, # Solar Eclipse Damage Skin + 2437022, # Solar Eclipse Damage Skin + 2437769, # Solar Eclipse Damage Skin + 2438299, # Prism Damage Skin + 2437023, # Prism Damage Skin + 2437024, # Starry Sky Damage Skin + 2438300, # Starry Sky Damage Skin + 2438301, # Party Quest Damage Skin + 2438302, # Cadena Damage Skin + 2437164, # Cadena Damage Skin + 2438032, # Cadena Damage Skin + 2438925, # Cadena Damage Skin + 2438303, # Black Rose Damage Skin + 2437238, # Black Rose Damage Skin + 2438306, # Stormcloud Damage Skin + 2437495, # Stormcloud Damage Skin + 2438307, # Drizzly Damage Skin + 2437496, # Rainfall Damage Skin + 2438308, # Luxe Damage Skin + 2438309, # Palm Frond Damage Skin + 2437515, # Palm Frond Damage Skin + 2438310, # Illium Damage Skin + 2437482, # Illium Damage Skin + 2438926, # Illium Damage Skin + 2438311, # Lightning Damage Skin + 2437691, # Lightning Damage Skin + 2438604, # Lightning Damage Skin + 2438312, # MapleStory Damage Skin + 2437716, # MapleStory Damage Skin (KR) + 2438313, # Rice Cake Damage Skin + 2437735, # Rice Cake Damage Skin + 2438314, # Popcorn Damage Skin + 2437736, # Popcorn Damage Skin + 2438315, # Pew Pew Damage Skin (Ver. 2) + 2437854, # Pew Pew Damage Skin (Ver. 2) + 2437877, # Master Crimson Damage Skin + 2438143, # Transcendent of Time Damage Skin + 2438144, # Superstar Damage Skin + 2438352, # Ark Damage Skin + 2438353, # Ark Damage Skin + 2438924, # Ark Damage Skin + 2438378, # Woof Woof Damage Skin + 2438379, # Heartthrob Damage Skin + 2438413, # Discovery Damage Skin + 2438414, # Discovery Damage Skin + 2438415, # Esfera Damage Skin + 2438416, # Esfera Damage Skin + 2438417, # Heavenly Damage Skin + 2438418, # Heavenly Damage Skin + 2438419, # Hybrid Damage Skin + 2438420, # Hybrid Damage Skin + 2438460, # Red Circuit Damage Skin + 2438485, # Red Circuit Damage Skin + 2438491, # Choco Bonbon Damage Skin + 2438492, # Choco Bonbon Damage Skin + 2438529, # Twelve Branches Damage Skin + 2438530, # Twelve Branches Damage Skin + 2438637, # Doodle Damage Skin + 2438676, # Soccer Uniform Damage Skin + 2438713, # Soccer Uniform Damage Skin + 2438881, # Monster Damage Skin + 2438880, # Monster Damage Skin + 2438884, # 14th Street Damage Skin + 2438885, # 14th Street Damage Skin + 2439256, # Shinsoo Damage Skin + 2439298, # Shinsoo Damage Skin + 2439264, # Foggy Damage Skin + 2439265, # Foggy Damage Skin + 2439336, # Foggy Damage Skin + 2439337, # Foggy Damage Skin + 2439277, # Alliance Damage Skin + 2439338, # Alliance Damage Skin + 2439381, # Master Stellar Damage Skin + 2439392, # Labyrinth Flame Damage Skin + 2439393, # Labyrinth Flame Damage Skin + 2439394, # Labyrinth Flame Damage Skin + 2439395, # Labyrinth Flame Damage Skin + 2439407, # Living Chain Damage Skin + 2439408, # Living Chain Damage Skin + 2439616, # Challenge Damage Skin, Season 1 + 2439617, # Challenge Damage Skin, Season 1 + 2439652, # Harvest Damage Skin + 2439665, # Harvest Damage Skin + 2439683, # Hangul Day Damage Skin (KR) + 2439684, # Hangul Day Damage Skin (KR) + 2439685, # Hangul Day Traditional Damage Skin (KR) + 2439686, # Hangul Day Traditional Damage Skin (KR) + 2439769, # Hallowkitty Damage Skin V2 + 2439768, # Hallowkitty Damage Skin V2 + 2439925, # Detective Yettson and Peplock Damage Skin + 2439926, # Detective Yettson and Peplock Damage Skin + 2439927, # Pew Pew Damage Skin (Ver. 3) + 2439928, # Pew Pew Damage Skin (Ver. 3) + 2432591, # Cherry Blossoms Damage Skin + + 2436133, # Chick Damage Skin + 2436645, # Intense Damage Skin + 2436132, # Illumination Damage Skin + 2436644, # Color Pop Damage Skin (30 Day) + 2436134, # Item has no name + 2436646, # Intense Damage Skin (30 Day) + 2436643, # Color Pop Damage Skin + 2436653, # Reverse Damage Skin + 2436652, # Ink Damage Skin (30 Day) + 2436655, # Neon Easter Egg Damage Skin + 2437167, # Note Damage Skin (30 Day) + 2436654, # Reverse Damage Skin (30 Day) + 2437166, # Note Damage Skin + 2434601, # Invisible Damage Skin + 2436136, # 'Magical' Bottle for Souls + 2436651, # Ink Damage Skin + 2433588, # Chinese Spring Fireworks Damage Skin + 2436657, # Watercolor Damage Skin + 2437169, # Crayon Damage Skin (30 Day) + 2436656, # Neon Easter Egg Damage Skin (30 Day) + 2437168, # Crayon Damage Skin + 2436658, # Watercolor Damage Skin (30 Day) + 2433081, # Halloween Damage Skin + 2434619, # Nine-Tailed Fox Damage Skin + 2438661, # Mustache Damage Skin + 2630153, # Coral Reef Damage Skin + 3801113, # Item has no name + 2630156, # Shimmerlight Damage Skin + 2438659, # Stamp Damage Skin + 2438671, # High Noon Damage Skin + 2433038, # 분필 �?�미지스킨 + 2434570, # Tot's Damage Skin + 2439700, # Black Damage Skin + 2439697, # 3D Effect Damage Skin + 2434663, # Donut Damage Skin + 2434662, # Jelly Bean Damage Skin + 2434147, # Irena's Band Damage Skin + 2434157, # Damien's Band Damage Skin + 2434664, # Soft Serve Damage Skin + 2436721, # Sheep Damage Skin + 2439805, # Golden Tinsel Damage Skin + 2435196, # Crow Damage Skin + 2435193, # Krakian Damage Skin + 2439800, # Jolly Holiday Damage Skin + 2435195, # Corrupted Magician Damage Skin + 2435194, # Crimson Knight Damage Skin + 2437701, # Kaleidoscope Damage Skin (30 Day) + 2437700, # Kaleidoscope Damage Skin + 2437703, # Winter Night Skin (30 Day) + 2433113, # Chinese Marshmallow Damage Skin + 2435673, # Cygnus Water Warrior Damage Skin + 2435674, # Resistance Water Warrior Damage Skin + 2433184, # Wicked Witch Damage Skin + 2630304, # Rock Spirit Damage Skin + 2433214, # Noise Damage Skin + 2436229, # Cozy Christmas Damage Skin (30 Day) + 2436741, # Chinese Text Damage Skin (30 Day) + 2436228, # Lucid Butterfly Damage Skin + 2436740, # Japanese Kanji Character Damage Skin + 2436743, # Chinese Text Damage Skin (30 Day) + 2436230, # Cozy Christmas Damage Skin + 2436742, # Chinese Text Damage Skin + 2436227, # Lucid Butterfly Damage Skin (30 Day) + 2435213, # Antellion Damage Skin + 2436749, # Knife Wound Damage Skin (30 Day) + 2436748, # Knife Wound Damage Skin + 2436745, # Chinese Text Damage Skin (30 Day) + 2436744, # Chinese Text Damage Skin + 2436747, # Roman Numeral Damage Skin (30 Day) + 2436746, # Roman Numeral Damage Skin + 2437269, # Maple Damage Skin (30 Day) + 2437268, # Maple Damage Skin + 2437271, # Embroidery Damage Skin (30 Day) + 2437270, # Embroidery Damage Skin + 2630301, # Bunny Blossom Damage Skin + 2433183, # Super Spooky Damage Skin + 2433182, # Jack o' Lantern Damage Skin + 2437274, # Dice Master Damage Skin + 2433252, # Dragon's Fire Damage Skin + 2436832, # aa + 2437856, # Frigid Ice Damage Skin + 2433251, # Violetta's Charming Damage Skin + 2433775, # Orchid Damage Skin + 2433269, # Golden Damage Skin + 2433268, # Zombie Damage Skin + 2630393, # 모멘텀 �?�미지스킨 (보존용) + 2433270, # Jett Damage Skin + 2433777, # Black Heaven Damage Skin + 2433776, # Lotus Damage Skin + 2433267, # Blood Damage Skin + 2630390, # 빙고 �?�미지스킨 (보존용) + 2439373, # Bitty Baby Feet Damage Skin + 2436300, # Sweetheart Choco Damage Skin + 2438348, # Baseball Jacket Damage Skin + 2436808, # Aspire Industries Damage Skin + 2438347, # Tweed Damage Skin + 2433236, # Chalk Damage Skin + 2439894, # Lunar New Year Damage Skin + 2439376, # Pink Princess Damage Skin + 2436831, # Petal Damage Skin + 2436830, # Gifts of the Ryuul Damage Skin + 2439897, # Valentine Damage Skin + 2435802, # Dragon Fireworks Damage Skin + 2433829, # White Heaven Rain Damage Skin + 2433828, # White Heaven Sun Damage Skin + 2433831, # White Heaven Snow Damage Skin + 2433830, # White Heaven Rainbow Damage Skin + 2432803, # Princess No Damage Skin (30-Days) + 2435374, # Monkey Damage Skin + 2433833, # White Heaven Wind Damage Skin + 2433832, # White Heaven Lightning Damage Skin + 2434868, # Christmas Lights Damage Skin + 2435380, # Math Symbol Damage Skin + 2434871, # Chess Damage Skin + 2435382, # Secret Question Mark Damage Skin + 2434877, # Secret Damage Skin_Special Character + 2434873, # Secret Damage Skin_Music + 2435335, # Candles Damage Skin + 2434817, # Cube Damage Skin + 2434818, # One Winter Night Damage Skin + 2435336, # Cupcakes Damage Skin + 2438929, # Droplet Damage Skin + 2438931, # 14th Anniversary Damage Skin + 2438930, # Gummy Bear Damage Skin + 2439442, # Custom Puppy Damage Skin + 2439523, # 8-Bit Damage Skin + 2433901, # Beasts of Fury Damage Skin + 2435949, # Too Spooky Damage Skin + 2433900, # Night Sky Damage Skin + 2435948, # Halloween Town Damage Skin + 2437484, # Custom Kitty Damage Skin + 2433903, # Lovely Damage Skin\r\n + 2435951, # Item has no name + 2433902, # Beasts of Fury Damage Skin + 2435950, # Floofy Bichon Damage Skin + 2435957, # Snow Monster Damage Skin + 2435956, # War of Roses Damage Skin + 2433905, # Heart Balloon Damage Skin + 2435953, # Item has no name + 2437489, # Ribbon Damage Skin (30 Day) + 2433904, # Dried Out Damage Skin + 2435952, # Item has no name + 2437488, # Ribbon Damage Skin + 2433907, # Antique Fantasy Damage Skin\r\n + 2435955, # Wandering Soul Damage Skin + 2437491, # Acorn Damage Skin (30 Day) + 2433906, # Scribble Crush Damage Skin + 2435954, # Masque's Puzzle Damage Skin + 2437490, # Acorn Damage Skin + 2436477, # XOXO Damage Skin (30 Day) + 2436476, # Full of Stars Damage Skin + 2436479, # Full of Stars Damage Skin (30 Day) + 2439551, # Devil Font Damage Skin + 2436478, # Full of Hearts Damage Skin (30 Day) + 2436984, # Treasures of Eluna Damage Skin + 2436475, # Full of Hearts Damage Skin + 2436474, # XOXO Damage Skin + 2436986, # Item has no name + 2438469, # Skull Damage Skin + 2435908, # Item has no name + 2434375, # Bonfire Damage Skin + 2438471, # Valentine's Day Damage Skin + 2435905, # Cat Paw Damage Skin + 2435907, # Item has no name + 2438467, # Graffiti Damage Skin + 2435906, # Cat Face Damage Skin + 2438477, # Pastel Easter Egg Damage Skin + 2438473, # White Chocolate Damage Skin + 2433883, # Earth Day Damage Skin + 2435489, # Sheriff Damage Skin + 2435488, # Lingling Damage Skin + 3801003, # Item has no name + 2435511, # Remnant of the Goddess Damage Skin + 3800993, # Item has no name + 2437052, # Tropical Sunset Damage Skin (30 Day) + 2437049, # Summer Sands Damage Skin + 2437051, # Tropical Sunset Damage Skin + 2437050, # Summer Sands Damage Skin (30 Day) + 2439554, # Trick or Treat Damage Skin + 2437524, # Snow Crystal Damage Skin (30 Day) + 2437521, # Christmas Cane Damage Skin + 2437523, # Snow Crystal Damage Skin + 2437522, # Christmas Cane Damage Skin (30 Day) + 2435487, # Nene Damage Skin + 2435486, # TuTu Damage Skin + 2434533, # Blood Damage Skin + 2434534, # Zombie Damage Skin + 2435565, # Heroes Aran Damage Skin + 2435567, # Heroes Evan Damage Skin + 2435566, # Heroes Luminous Damage Skin + 2439157, # Abrup's Snowstorm Damage Skin + 2434545, # Hayato Damage Skin + 2434544, # Kanna Damage Skin + 2435568, # Heroes Shade Damage Skin + 2439164, # Fembris Damage Skin + 2438655, # Golden Damage Skin + 2439167, # Frostflail Yeti + 2436089, # Highlighter Damage Skin + 2438085, # Hong Bao Damage Skin + 2438596, # Cake Icing Damage Skin + 2438087, # Vengeful Nyen Damage Skin + 2438086, # Nyen Damage Skin + 2438592, # Round 'n' Round Damage Skin + 2438594, # Garden Damage Skin + 2438089, # Red-Orange Damage Skin + 2438088, # Zodiac Dog Damage Skin + 2434004, # Alishan Damage Skin + 2435543, # Epic Lulz Damage Skin + 2435542, # Item has no name + 2436563, # Rocket Damage Skin + 2435549, # Item has no name + 2435548, # Item has no name + 2439132, # Popsicle Damage Skin + 2435545, # Summer Damage Skin + 2439129, # Summer Sea Damage Skin + 2435544, # Item has no name + 2435546, # Blaster Damage Skin \ No newline at end of file diff --git a/resources/shops.sw b/resources/shops.sw new file mode 100755 index 0000000..3710330 --- /dev/null +++ b/resources/shops.sw @@ -0,0 +1,19411 @@ +// important here is that all starting curly bracers are attached to the name of the scope +//1011000{ +// id 101100; // dit ook +// everything tw o ai jaidan; +// item1{ +// id 4310057; +// price 91827; +// } +//} + +1011100{ + red_potion{ + loc 0; + tabindex 1; + id 2000000; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2000001; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2000002; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2000003; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2000006; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2001515; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2001516; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2001517; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2001519; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2001520; + price 500; + } + apple{ + loc 10; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 11; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 12; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 13; + tabindex 1; + id 2001534; + price 100; + } + lemon{ + loc 14; + tabindex 1; + id 2001535; + price 310; + } + chocolate{ + loc 15; + tabindex 1; + id 2020028; + price 3000; + } + return_scroll_-_nearest_town{ + loc 16; + tabindex 1; + id 2030000; + price 400; + } + return_scroll_to_henesys{ + loc 17; + tabindex 1; + id 2030004; + price 500; + } + arrow_for_bow{ + loc 18; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 19; + tabindex 1; + id 2061000; + price 1; + } + antidote{ + loc 20; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 21; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 22; + tabindex 1; + id 2050002; + price 300; + } + subi_throwing-stars{ + loc 23; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 24; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +1011101{ + long_sword{ + loc 0; + tabindex 2; + id 1302007; + price 3000; + } + sabre{ + loc 1; + tabindex 3; + id 1302005; + price 6000; + } + viking_sword{ + loc 2; + tabindex 1; + id 1302002; + price 10000; + } + machete{ + loc 3; + tabindex 1; + id 1302006; + price 10000; + } + eloon{ + loc 4; + tabindex 1; + id 1302003; + price 20000; + } + gladius{ + loc 5; + tabindex 1; + id 1302008; + price 40000; + } + field_dagger{ + loc 6; + tabindex 1; + id 1332006; + price 7000; + } + coconut_knife{ + loc 7; + tabindex 1; + id 1332008; + price 10000; + } + iron_dagger{ + loc 8; + tabindex 1; + id 1332010; + price 22000; + } + battle_axe{ + loc 9; + tabindex 1; + id 1312001; + price 6000; + } + misthil_axe{ + loc 10; + tabindex 1; + id 1312003; + price 20000; + } + fireman's_axe{ + loc 11; + tabindex 1; + id 1312005; + price 40000; + } + mace{ + loc 12; + tabindex 1; + id 1322000; + price 6000; + } + iron_mace{ + loc 13; + tabindex 1; + id 1322002; + price 10000; + } + fusion_mace{ + loc 14; + tabindex 1; + id 1322004; + price 22000; + } + war_hammer{ + loc 15; + tabindex 1; + id 1322014; + price 40000; + } + wooden_sword{ + loc 16; + tabindex 1; + id 1402001; + price 3000; + } + two-handed_sword{ + loc 17; + tabindex 1; + id 1402000; + price 12000; + } + broadsword{ + loc 18; + tabindex 1; + id 1402008; + price 22000; + } + metal_axe{ + loc 19; + tabindex 1; + id 1412001; + price 3000; + } + iron_axe{ + loc 20; + tabindex 1; + id 1412012; + price 10000; + } + two-handed_axe{ + loc 21; + tabindex 1; + id 1412000; + price 22000; + } + blue_axe{ + loc 22; + tabindex 1; + id 1412006; + price 45000; + } + heavy_mace{ + loc 23; + tabindex 1; + id 1422002; + price 6000; + } + square_hammer{ + loc 24; + tabindex 1; + id 1422003; + price 10000; + } + pickaxe{ + loc 25; + tabindex 1; + id 1422006; + price 10000; + } + fork_on_a_stick{ + loc 26; + tabindex 1; + id 1432001; + price 7000; + } + pole_arm{ + loc 27; + tabindex 1; + id 1442079; + price 3000; + } + iron_ball{ + loc 28; + tabindex 1; + id 1442006; + price 8000; + } + studded_polearm{ + loc 29; + tabindex 1; + id 1442007; + price 12000; + } + wooden_wand{ + loc 30; + tabindex 1; + id 1372005; + price 2000; + } + hardwood_wand{ + loc 31; + tabindex 1; + id 1372006; + price 5000; + } + metal_wand{ + loc 32; + tabindex 1; + id 1372002; + price 9000; + } + ice_wand{ + loc 33; + tabindex 1; + id 1372004; + price 18000; + } + mithril_wand{ + loc 34; + tabindex 1; + id 1372003; + price 38000; + } + wooden_staff{ + loc 35; + tabindex 1; + id 1382000; + price 3000; + } + sapphire_staff{ + loc 36; + tabindex 1; + id 1382003; + price 6000; + } + emerald_staff{ + loc 37; + tabindex 1; + id 1382005; + price 6000; + } + old_wooden_staff{ + loc 38; + tabindex 1; + id 1382004; + price 10000; + } + wizard_staff{ + loc 39; + tabindex 1; + id 1382002; + price 20000; + } + iron_mace{ + loc 40; + tabindex 1; + id 1322002; + price 10000; + } + war_bow{ + loc 41; + tabindex 1; + id 1452002; + price 3000; + } + composite_bow{ + loc 42; + tabindex 1; + id 1452003; + price 6000; + } + hunter's_bow{ + loc 43; + tabindex 1; + id 1452001; + price 10000; + } + battle_bow{ + loc 44; + tabindex 1; + id 1452000; + price 20000; + } + crossbow{ + loc 45; + tabindex 1; + id 1462001; + price 4000; + } + battle_crossbow{ + loc 46; + tabindex 1; + id 1462002; + price 8000; + } + balanche{ + loc 47; + tabindex 1; + id 1462003; + price 12000; + } + mountain_crossbow{ + loc 48; + tabindex 1; + id 1462000; + price 30000; + } + triangular_zamadar{ + loc 49; + tabindex 1; + id 1332000; + price 4000; + } + triple-tipped_zamadar{ + loc 50; + tabindex 1; + id 1332002; + price 8000; + } + coconut_knife{ + loc 51; + tabindex 1; + id 1332008; + price 10000; + } + stinger{ + loc 52; + tabindex 1; + id 1332013; + price 15000; + } + iron_dagger{ + loc 53; + tabindex 1; + id 1332010; + price 22000; + } + forked_dagger{ + loc 54; + tabindex 1; + id 1332004; + price 38000; + } + reef_claw{ + loc 55; + tabindex 1; + id 1332012; + price 40000; + } + cass{ + loc 56; + tabindex 1; + id 1332009; + price 42000; + } + plunger{ + loc 57; + tabindex 1; + id 1322009; + price 20000; + } + garnier{ + loc 58; + tabindex 1; + id 1472000; + price 3000; + } + champion_katara{ + loc 59; + tabindex 1; + id 1342000; + price 10000; + } + guardian_katara{ + loc 60; + tabindex 1; + id 1342001; + price 42000; + } + pistol{ + loc 61; + tabindex 1; + id 1492000; + price 3000; + } + dellinger_special{ + loc 62; + tabindex 1; + id 1492001; + price 6000; + } + the_negotiator{ + loc 63; + tabindex 1; + id 1492002; + price 10000; + } + golden_hook{ + loc 64; + tabindex 1; + id 1492003; + price 22000; + } + cold_mind{ + loc 65; + tabindex 1; + id 1492004; + price 50000; + } + steel_knuckler{ + loc 66; + tabindex 1; + id 1482000; + price 3000; + } + leather_arms{ + loc 67; + tabindex 1; + id 1482001; + price 6000; + } + double_tail_knuckler{ + loc 68; + tabindex 1; + id 1482002; + price 10000; + } + norman_grip{ + loc 69; + tabindex 1; + id 1482003; + price 20000; + } + prime_hands{ + loc 70; + tabindex 1; + id 1482004; + price 52000; + } + monkey_wrench{ + loc 71; + tabindex 1; + id 1422004; + price 20000; + } + janitor's_mop{ + loc 72; + tabindex 1; + id 1442004; + price 24000; + } + leather_purse{ + loc 73; + tabindex 1; + id 1322007; + price 6000; + } + hard_briefcase{ + loc 74; + tabindex 1; + id 1322008; + price 12000; + } + wooden_mallet{ + loc 75; + tabindex 1; + id 1422000; + price 3000; + } + spear{ + loc 76; + tabindex 1; + id 1432000; + price 3000; + } + brown_skullcap{ + loc 77; + tabindex 1; + id 1002008; + price 500; + } + old_wisconsin{ + loc 78; + tabindex 1; + id 1002033; + price 3000; + } + red_baseball_cap{ + loc 79; + tabindex 1; + id 1002012; + price 3000; + } + black_baseball_cap{ + loc 80; + tabindex 1; + id 1002060; + price 3000; + } + yellow_baseball_cap{ + loc 81; + tabindex 1; + id 1002061; + price 3000; + } + red_feather_hat{ + loc 82; + tabindex 1; + id 1002112; + price 4000; + } + blue_feather_hat{ + loc 83; + tabindex 1; + id 1002113; + price 4000; + } + green_feather_hat{ + loc 84; + tabindex 1; + id 1002114; + price 4000; + } + black_feather_hat{ + loc 85; + tabindex 1; + id 1002115; + price 4000; + } + brown_feather_hat{ + loc 86; + tabindex 1; + id 1002116; + price 4000; + } + red_robin_hat{ + loc 87; + tabindex 1; + id 1002117; + price 12000; + } + blue_robin_hat{ + loc 88; + tabindex 1; + id 1002118; + price 12000; + } + green_robin_hat{ + loc 89; + tabindex 1; + id 1002119; + price 12000; + } + black_robin_hat{ + loc 90; + tabindex 1; + id 1002120; + price 12000; + } + brown_robin_hat{ + loc 91; + tabindex 1; + id 1002121; + price 12000; + } + brown_winter_hat{ + loc 92; + tabindex 1; + id 1002010; + price 800; + } + green_winter_hat{ + loc 93; + tabindex 1; + id 1002057; + price 800; + } + red_hunter{ + loc 94; + tabindex 1; + id 1002156; + price 20000; + } + blue_hunter{ + loc 95; + tabindex 1; + id 1002157; + price 20000; + } + green_hunter{ + loc 96; + tabindex 1; + id 1002158; + price 20000; + } + black_hunter{ + loc 97; + tabindex 1; + id 1002159; + price 20000; + } + brown_hunter{ + loc 98; + tabindex 1; + id 1002160; + price 20000; + } + red_hawkeye{ + loc 99; + tabindex 1; + id 1002161; + price 30000; + } + blue_hawkeye{ + loc 100; + tabindex 1; + id 1002162; + price 30000; + } + green_hawkeye{ + loc 101; + tabindex 1; + id 1002163; + price 30000; + } + brown_hawkeye{ + loc 102; + tabindex 1; + id 1002164; + price 30000; + } + dark_hawkeye{ + loc 103; + tabindex 1; + id 1002165; + price 30000; + } + single_earring{ + loc 104; + tabindex 1; + id 1032001; + price 7000; + } + amethyst_earrings{ + loc 105; + tabindex 1; + id 1032003; + price 7000; + } + brown_archer_top_(m){ + loc 106; + tabindex 1; + id 1040008; + price 3200; + } + green_archer_top_(m){ + loc 107; + tabindex 1; + id 1040071; + price 3200; + } + green_leather_hoodwear_(m){ + loc 108; + tabindex 1; + id 1040007; + price 5500; + } + silver_leather_hoodwear_(m)_{ + loc 109; + tabindex 1; + id 1040011; + price 5500; + } + brown_hard_leather_top_(m){ + loc 110; + tabindex 1; + id 1040003; + price 9000; + } + green_bennis_chainmail_(m){ + loc 111; + tabindex 1; + id 1040022; + price 15000; + } + black_bennis_chainmail_(m)_{ + loc 112; + tabindex 1; + id 1040023; + price 15000; + } + blue_bennis_chainmail_(m){ + loc 113; + tabindex 1; + id 1040024; + price 15000; + } + red_bennis_chainmail_(m){ + loc 114; + tabindex 1; + id 1040025; + price 15000; + } + green_hunter's_armor_(m)_{ + loc 115; + tabindex 1; + id 1040067; + price 50000; + } + dark_hunter's_armor_(m)_{ + loc 116; + tabindex 1; + id 1040068; + price 50000; + } + red_hunter's_armor_(m){ + loc 117; + tabindex 1; + id 1040069; + price 50000; + } + blue_hunter's_armor_(m)_{ + loc 118; + tabindex 1; + id 1040070; + price 50000; + } + green_avelin_(f){ + loc 119; + tabindex 1; + id 1041007; + price 3200; + } + yellow_avelin_(f){ + loc 120; + tabindex 1; + id 1041061; + price 3200; + } + green_able_armor_(f){ + loc 121; + tabindex 1; + id 1041008; + price 5500; + } + yellow_able_armor_(f){ + loc 122; + tabindex 1; + id 1041062; + price 5500; + } + grey_able_armor_(f){ + loc 123; + tabindex 1; + id 1041063; + price 5500; + } + green_shivermail_(f)_{ + loc 124; + tabindex 1; + id 1041013; + price 9000; + } + red_shivermail_(f){ + loc 125; + tabindex 1; + id 1041027; + price 9000; + } + purple_shivermail_(f)_{ + loc 126; + tabindex 1; + id 1041028; + price 9000; + } + green_bennis_chainmail_(f)_{ + loc 127; + tabindex 1; + id 1040022; + price 15000; + } + red_bennis_chainmail_(f){ + loc 128; + tabindex 1; + id 1040025; + price 15000; + } + blue_bennis_chainmail_(f){ + loc 129; + tabindex 1; + id 1040024; + price 15000; + } + yellow_bennis_chainmail_(f){ + loc 130; + tabindex 1; + id 1041035; + price 15000; + } + green_huntress_armor_(f){ + loc 131; + tabindex 1; + id 1041054; + price 50000; + } + black_huntress_armor_(f){ + loc 132; + tabindex 1; + id 1041055; + price 50000; + } + red_huntress_armor_(f){ + loc 133; + tabindex 1; + id 1041056; + price 50000; + } + warfare_pants_(m){ + loc 134; + tabindex 1; + id 1060005; + price 14000; + } + green_hunter's_pants_(m){ + loc 135; + tabindex 1; + id 1060056; + price 44000; + } + dark_hunter's_pants_(m){ + loc 136; + tabindex 1; + id 1060057; + price 44000; + } + red_hunter's_pants_(m){ + loc 137; + tabindex 1; + id 1060058; + price 44000; + } + blue_hunter's_pants_(m){ + loc 138; + tabindex 1; + id 1060059; + price 44000; + } + green_avelin_skirt_(f)_{ + loc 139; + tabindex 1; + id 1061009; + price 3000; + } + yellow_avelin_skirt_(f){ + loc 140; + tabindex 1; + id 1061057; + price 3000; + } + green_able_armor_skirt_(f)_{ + loc 141; + tabindex 1; + id 1061006; + price 5000; + } + brown_able_skirt_(f){ + loc 142; + tabindex 1; + id 1061058; + price 5000; + } + grey_able_skirt_(f){ + loc 143; + tabindex 1; + id 1061059; + price 5000; + } + green_shivermail_skirt_(f){ + loc 144; + tabindex 1; + id 1061024; + price 9000; + } + red_shivermail_skirt_(f)_{ + loc 145; + tabindex 1; + id 1061025; + price 9000; + } + purple_shivermail_skirt_(f){ + loc 146; + tabindex 1; + id 1061026; + price 9000; + } + green_huntress_pants_(f){ + loc 147; + tabindex 1; + id 1061050; + price 44000; + } + black_huntress_pants_(f){ + loc 148; + tabindex 1; + id 1061051; + price 44000; + } + red_huntress_pants_(f){ + loc 149; + tabindex 1; + id 1061052; + price 44000; + } + archer_pants{ + loc 150; + tabindex 1; + id 1060151; + price 3000; + } + brown_hard_leather_pants{ + loc 151; + tabindex 1; + id 1060157; + price 9000; + } + bennis_chainpants_(m){ + loc 152; + tabindex 1; + id 1062006; + price 13000; + } + brown_hard_leather_boots{ + loc 153; + tabindex 1; + id 1072015; + price 1800; + } + green_hard_leather_boots{ + loc 154; + tabindex 1; + id 1072059; + price 1800; + } + green_woodsman_boots{ + loc 155; + tabindex 1; + id 1072016; + price 4500; + } + brown_woodsman_boots{ + loc 156; + tabindex 1; + id 1072060; + price 4500; + } + blue_woodsman_boots{ + loc 157; + tabindex 1; + id 1072061; + price 4500; + } + deer_huntertop{ + loc 158; + tabindex 1; + id 1072025; + price 9000; + } + rabbit_huntertop{ + loc 159; + tabindex 1; + id 1072026; + price 9000; + } + lion_huntertop{ + loc 160; + tabindex 1; + id 1072068; + price 9000; + } + red_whitebottom_boots{ + loc 161; + tabindex 1; + id 1072012; + price 15000; + } + orange_whitebottom_boots{ + loc 162; + tabindex 1; + id 1072054; + price 15000; + } + pink_whitebottom_boots{ + loc 163; + tabindex 1; + id 1072055; + price 15000; + } + blue_whitebottom_boots{ + loc 164; + tabindex 1; + id 1072056; + price 15000; + } + blue_sneakers{ + loc 165; + tabindex 1; + id 1072018; + price 30000; + } + red_sneakers{ + loc 166; + tabindex 1; + id 1072064; + price 30000; + } + bronze_coif{ + loc 167; + tabindex 1; + id 1002043; + price 2400; + } + bronze_helmet{ + loc 168; + tabindex 1; + id 1002039; + price 2700; + } + bronze_full_helm{ + loc 169; + tabindex 1; + id 1002051; + price 3500; + } + bronze_football_helmet{ + loc 170; + tabindex 1; + id 1002055; + price 8700; + } + bronze_viking_helm{ + loc 171; + tabindex 1; + id 1002059; + price 8500; + } + steel_sharp_helm{ + loc 172; + tabindex 1; + id 1002027; + price 11500; + } + iron_burgernet_helm{ + loc 173; + tabindex 1; + id 1002005; + price 19000; + } + brown_lolico_armor_(m){ + loc 174; + tabindex 1; + id 1040015; + price 3200; + } + blue_lolico_armor_(m){ + loc 175; + tabindex 1; + id 1040038; + price 3200; + } + steel_corporal_(m){ + loc 176; + tabindex 1; + id 1040009; + price 5500; + } + brown_corporal_(m){ + loc 177; + tabindex 1; + id 1040037; + price 5500; + } + blue_sergeant_(m){ + loc 178; + tabindex 1; + id 1040012; + price 9000; + } + red_sergeant_(m){ + loc 179; + tabindex 1; + id 1040039; + price 9000; + } + silver_master_sergeant_(m){ + loc 180; + tabindex 1; + id 1040040; + price 16000; + } + orihalcon_master_sergeant_(m){ + loc 181; + tabindex 1; + id 1040016; + price 16000; + } + dark_master_sergeant_(m){ + loc 182; + tabindex 1; + id 1040041; + price 16000; + } + red_hwarang_shirt_(m){ + loc 183; + tabindex 1; + id 1040021; + price 40000; + } + green_hwarang_shirt_(m){ + loc 184; + tabindex 1; + id 1040026; + price 40000; + } + orange_lolica_armor_(f){ + loc 185; + tabindex 1; + id 1041014; + price 3200; + } + blueberry_lolica_armor_(f){ + loc 186; + tabindex 1; + id 1041064; + price 3200; + } + red_lamelle_(f){ + loc 187; + tabindex 1; + id 1041019; + price 9000; + } + green_lamelle_(f){ + loc 188; + tabindex 1; + id 1041020; + price 9000; + } + brown_lamelle_(f){ + loc 189; + tabindex 1; + id 1041021; + price 9000; + } + blue_shark_(f){ + loc 190; + tabindex 1; + id 1041022; + price 16000; + } + sky_shark_(f){ + loc 191; + tabindex 1; + id 1041023; + price 16000; + } + red_shark_(f){ + loc 192; + tabindex 1; + id 1041024; + price 16000; + } + blue_kendo_robe_(m){ + loc 193; + tabindex 1; + id 1050005; + price 15000; + } + red_kendo_robe_(m){ + loc 194; + tabindex 1; + id 1050006; + price 15000; + } + white_kendo_robe_(m){ + loc 195; + tabindex 1; + id 1050007; + price 15000; + } + black_dragon_robe_(m){ + loc 196; + tabindex 1; + id 1050011; + price 70000; + } + steel_fitted_mail_(f){ + loc 197; + tabindex 1; + id 1051000; + price 8000; + } + dark_engrit_(f){ + loc 198; + tabindex 1; + id 1051010; + price 60000; + } + red_engrit_(f){ + loc 199; + tabindex 1; + id 1051011; + price 60000; + } + blue_engrit_(f){ + loc 200; + tabindex 1; + id 1051012; + price 60000; + } + yellow_engrit_(f){ + loc 201; + tabindex 1; + id 1051013; + price 60000; + } + brown_lolico_pants_(m){ + loc 202; + tabindex 1; + id 1060008; + price 3000; + } + blue_lolico_pants_(m){ + loc 203; + tabindex 1; + id 1060028; + price 3000; + } + steel_corporal_pants_(m){ + loc 204; + tabindex 1; + id 1060009; + price 5000; + } + brown_corporal_pants_(m){ + loc 205; + tabindex 1; + id 1060027; + price 5000; + } + steel_sergeant_kilt_(m){ + loc 206; + tabindex 1; + id 1060010; + price 9000; + } + red_sergeant_kilt_(m){ + loc 207; + tabindex 1; + id 1060029; + price 9000; + } + orihalcon_master_sergeant_kilt_(m){ + loc 208; + tabindex 1; + id 1060011; + price 14000; + } + dark_master_sergeant_kilt_(m){ + loc 209; + tabindex 1; + id 1060030; + price 14000; + } + silver_master_sergeant_kilt_(m){ + loc 210; + tabindex 1; + id 1060060; + price 14000; + } + black_martial_arts_pants_(m){ + loc 211; + tabindex 1; + id 1060016; + price 38000; + } + white_martial_arts_pants_(m){ + loc 212; + tabindex 1; + id 1060017; + price 38000; + } + red_martial_arts_pants_(m){ + loc 213; + tabindex 1; + id 1060018; + price 38000; + } + brown_martial_arts_pants_(m){ + loc 214; + tabindex 1; + id 1060019; + price 38000; + } + rookie_pants_(f){ + loc 215; + tabindex 1; + id 1061014; + price 3000; + } + sophia_pants_(f){ + loc 216; + tabindex 1; + id 1061023; + price 3000; + } + red_ramel_skirt_(f){ + loc 217; + tabindex 1; + id 1061016; + price 9000; + } + green_ramel_skirt_(f){ + loc 218; + tabindex 1; + id 1061017; + price 9000; + } + brown_ramel_skirt_(f){ + loc 219; + tabindex 1; + id 1061018; + price 9000; + } + blue_shark_skirt_(f){ + loc 220; + tabindex 1; + id 1061015; + price 14000; + } + sky_shark_skirt_(f){ + loc 221; + tabindex 1; + id 1061019; + price 14000; + } + red_shark_skirt_(f){ + loc 222; + tabindex 1; + id 1061020; + price 14000; + } + steel_grieves{ + loc 223; + tabindex 1; + id 1072009; + price 5000; + } + bronze_greaves{ + loc 224; + tabindex 1; + id 1072050; + price 5000; + } + brown_high_boots{ + loc 225; + tabindex 1; + id 1072007; + price 10000; + } + orange_high_boots{ + loc 226; + tabindex 1; + id 1072046; + price 10000; + } + blue_high_boots{ + loc 227; + tabindex 1; + id 1072047; + price 10000; + } + mithril_war_boots{ + loc 228; + tabindex 1; + id 1072011; + price 15000; + } + wooden_buckler{ + loc 229; + tabindex 1; + id 1092005; + price 4000; + } + steel_shield{ + loc 230; + tabindex 1; + id 1092000; + price 6000; + } + red_ghetto_beanie{ + loc 231; + tabindex 1; + id 1002122; + price 900; + } + blue_ghetto_beanie{ + loc 232; + tabindex 1; + id 1002123; + price 900; + } + brown_ghetto_beanie{ + loc 233; + tabindex 1; + id 1002124; + price 900; + } + black_ghetto_beanie{ + loc 234; + tabindex 1; + id 1002125; + price 900; + } + green_ghetto_beanie{ + loc 235; + tabindex 1; + id 1002126; + price 900; + } + metal_gear{ + loc 236; + tabindex 1; + id 1002001; + price 3000; + } + red_thief_hood{ + loc 237; + tabindex 1; + id 1002107; + price 4000; + } + blue_thief_hood{ + loc 238; + tabindex 1; + id 1002108; + price 4000; + } + green_thief_hood{ + loc 239; + tabindex 1; + id 1002109; + price 4000; + } + black_thief_hood{ + loc 240; + tabindex 1; + id 1002110; + price 4000; + } + yellow_thief_hood{ + loc 241; + tabindex 1; + id 1002111; + price 4000; + } + red_loosecap{ + loc 242; + tabindex 1; + id 1002127; + price 12000; + } + blue_loosecap{ + loc 243; + tabindex 1; + id 1002128; + price 12000; + } + brown_loosecap{ + loc 244; + tabindex 1; + id 1002129; + price 12000; + } + black_loosecap{ + loc 245; + tabindex 1; + id 1002130; + price 12000; + } + green_loosecap{ + loc 246; + tabindex 1; + id 1002131; + price 12000; + } + red_starry_bandana{ + loc 247; + tabindex 1; + id 1002020; + price 7400; + } + sky_blue_starry_bandana{ + loc 248; + tabindex 1; + id 1002096; + price 7400; + } + yellow_starry_bandana{ + loc 249; + tabindex 1; + id 1002097; + price 7400; + } + red_tiberian{ + loc 250; + tabindex 1; + id 1002146; + price 20000; + } + blue_tiberian{ + loc 251; + tabindex 1; + id 1002147; + price 20000; + } + green_tiberian{ + loc 252; + tabindex 1; + id 1002148; + price 20000; + } + brown_tiberian{ + loc 253; + tabindex 1; + id 1002149; + price 20000; + } + dark_tiberian{ + loc 254; + tabindex 1; + id 1002150; + price 20000; + } + red_guise{ + loc 255; + tabindex 1; + id 1002171; + price 30000; + } + blue_guise{ + loc 256; + tabindex 1; + id 1002172; + price 30000; + } + green_guise{ + loc 257; + tabindex 1; + id 1002173; + price 30000; + } + brown_guise{ + loc 258; + tabindex 1; + id 1002174; + price 30000; + } + dark_guise{ + loc 259; + tabindex 1; + id 1002175; + price 30000; + } + blue_cloth_vest_(m){ + loc 260; + tabindex 1; + id 1040031; + price 3000; + } + red_cloth_vest_(m){ + loc 261; + tabindex 1; + id 1040032; + price 3000; + } + black_cloth_vest_(m){ + loc 262; + tabindex 1; + id 1040033; + price 3000; + } + dark_nightshift_(m){ + loc 263; + tabindex 1; + id 1040034; + price 5000; + } + blue_nightshift_(m){ + loc 264; + tabindex 1; + id 1040035; + price 5000; + } + blue_pao_(m){ + loc 265; + tabindex 1; + id 1040042; + price 9000; + } + red_pao_(m){ + loc 266; + tabindex 1; + id 1040043; + price 9000; + } + black_pao_(m){ + loc 267; + tabindex 1; + id 1040044; + price 9000; + } + brown_sneak_(m){ + loc 268; + tabindex 1; + id 1040048; + price 16000; + } + blue_sneak_(m){ + loc 269; + tabindex 1; + id 1040049; + price 16000; + } + black_sneak_(m){ + loc 270; + tabindex 1; + id 1040050; + price 16000; + } + dark_brown_stealer_(m){ + loc 271; + tabindex 1; + id 1040057; + price 45000; + } + dark_silver_stealer_(m){ + loc 272; + tabindex 1; + id 1040058; + price 45000; + } + red_gold_stealer_(m){ + loc 273; + tabindex 1; + id 1040059; + price 45000; + } + silver_black_stealer_(m){ + loc 274; + tabindex 1; + id 1040060; + price 45000; + } + red_cloth_vest_(f){ + loc 275; + tabindex 1; + id 1040032; + price 3000; + } + blue_cloth_vest_(f){ + loc 276; + tabindex 1; + id 1040031; + price 3000; + } + black_cloth_vest_(f){ + loc 277; + tabindex 1; + id 1040033; + price 3000; + } + red_nightshift_(f){ + loc 278; + tabindex 1; + id 1041044; + price 5000; + } + brown_nightshift_(f){ + loc 279; + tabindex 1; + id 1041045; + price 5000; + } + red_qi_pao_(f){ + loc 280; + tabindex 1; + id 1041003; + price 9000; + } + pink_qi_pao_(f){ + loc 281; + tabindex 1; + id 1041039; + price 9000; + } + blue_qi_pao_(f){ + loc 282; + tabindex 1; + id 1041040; + price 9000; + } + dark_sneak_(f){ + loc 283; + tabindex 1; + id 1041057; + price 18000; + } + blood_sneak_(f){ + loc 284; + tabindex 1; + id 1041058; + price 18000; + } + sky_sneak_(f){ + loc 285; + tabindex 1; + id 1041059; + price 18000; + } + gold_sneak_(f){ + loc 286; + tabindex 1; + id 1041060; + price 18000; + } + red_steal_(f){ + loc 287; + tabindex 1; + id 1041047; + price 45000; + } + black_steal_(f){ + loc 288; + tabindex 1; + id 1041048; + price 45000; + } + blue_steal_(f){ + loc 289; + tabindex 1; + id 1041049; + price 45000; + } + purple_steal_(f){ + loc 290; + tabindex 1; + id 1041050; + price 45000; + } + blue_cloth_pants_(m){ + loc 291; + tabindex 1; + id 1060021; + price 2800; + } + red_cloth_pants_(m){ + loc 292; + tabindex 1; + id 1060022; + price 2800; + } + black_cloth_pants_(m){ + loc 293; + tabindex 1; + id 1060023; + price 2800; + } + dark_nightshift_pants_(m){ + loc 294; + tabindex 1; + id 1060024; + price 4800; + } + blue_nightshift_pants_(m){ + loc 295; + tabindex 1; + id 1060025; + price 4800; + } + blue_pao_bottom_(m){ + loc 296; + tabindex 1; + id 1060031; + price 8000; + } + red_pao_bottom_(m){ + loc 297; + tabindex 1; + id 1060032; + price 8000; + } + black_pao_bottom_(m){ + loc 298; + tabindex 1; + id 1060033; + price 8000; + } + dark_brown_sneak_pants_(m){ + loc 299; + tabindex 1; + id 1060037; + price 19000; + } + brown_sneak_pants_(m){ + loc 300; + tabindex 1; + id 1060038; + price 19000; + } + black_sneak_pants_(m){ + loc 301; + tabindex 1; + id 1060039; + price 19000; + } + dark_brown_stealer_pants_(m){ + loc 302; + tabindex 1; + id 1060043; + price 40000; + } + dark_silver_stealer_pants_(m){ + loc 303; + tabindex 1; + id 1060044; + price 40000; + } + red_/_gold_stealer_pants_(m){ + loc 304; + tabindex 1; + id 1060045; + price 40000; + } + silver_/_black_stealer_pants_(m){ + loc 305; + tabindex 1; + id 1060046; + price 40000; + } + red_cloth_pants_(f){ + loc 306; + tabindex 1; + id 1060022; + price 2800; + } + blue_cloth_pants_(f){ + loc 307; + tabindex 1; + id 1060021; + price 2800; + } + black_cloth_pants_(f){ + loc 308; + tabindex 1; + id 1060023; + price 2800; + } + red_nightshift_pants_(f){ + loc 309; + tabindex 1; + id 1061037; + price 4800; + } + brown_nightshift_pants_(f){ + loc 310; + tabindex 1; + id 1061038; + price 4800; + } + red_qi_pao_pants_(f){ + loc 311; + tabindex 1; + id 1061003; + price 8000; + } + purple_qi_pao_pants_(f){ + loc 312; + tabindex 1; + id 1061032; + price 8000; + } + blue_qi_pao_pants_(f){ + loc 313; + tabindex 1; + id 1061033; + price 8000; + } + red_qi_pao_skirt_(f){ + loc 314; + tabindex 1; + id 1061040; + price 12000; + } + purple_qi_pao_skirt_(f){ + loc 315; + tabindex 1; + id 1061041; + price 12000; + } + blue_qi_pao_skirt_(f){ + loc 316; + tabindex 1; + id 1061042; + price 12000; + } + dark_sneak_pants_(f){ + loc 317; + tabindex 1; + id 1061053; + price 18000; + } + blood_sneak_pants_(f){ + loc 318; + tabindex 1; + id 1061054; + price 18000; + } + sky_sneak_pants_(f){ + loc 319; + tabindex 1; + id 1061055; + price 18000; + } + gold_sneak_pants_(f){ + loc 320; + tabindex 1; + id 1061056; + price 18000; + } + red_steal_pants_(f){ + loc 321; + tabindex 1; + id 1061043; + price 40000; + } + black_steal_pants_(f){ + loc 322; + tabindex 1; + id 1061044; + price 40000; + } + blue_steal_pants_(f){ + loc 323; + tabindex 1; + id 1061045; + price 40000; + } + purple_steal_pants_(f){ + loc 324; + tabindex 1; + id 1061046; + price 40000; + } + blue_gidder_shoes{ + loc 325; + tabindex 1; + id 1072070; + price 1800; + } + brown_gidder_shoes{ + loc 326; + tabindex 1; + id 1072071; + price 1800; + } + white_gomushin{ + loc 327; + tabindex 1; + id 1072004; + price 2000; + } + black_gomushin{ + loc 328; + tabindex 1; + id 1072042; + price 2000; + } + smelly_gomushin{ + loc 329; + tabindex 1; + id 1072043; + price 2000; + } + white_ninja_sandals{ + loc 330; + tabindex 1; + id 1072028; + price 4500; + } + yellow_ninja_sandals{ + loc 331; + tabindex 1; + id 1072029; + price 4500; + } + blue_ninja_sandals{ + loc 332; + tabindex 1; + id 1072030; + price 4500; + } + red_ninja_sandals{ + loc 333; + tabindex 1; + id 1072031; + price 4500; + } + black_enamel_boots{ + loc 334; + tabindex 1; + id 1072022; + price 9000; + } + red_enamel_boots{ + loc 335; + tabindex 1; + id 1072065; + price 9000; + } + blue_enamel_boots{ + loc 336; + tabindex 1; + id 1072066; + price 9000; + } + brown_rocky_bandana{ + loc 337; + tabindex 1; + id 1002610; + price 900; + } + brown_lagger_cap{ + loc 338; + tabindex 1; + id 1002613; + price 4000; + } + brown_double_marine{ + loc 339; + tabindex 1; + id 1002616; + price 12000; + } + brown_pitz_bandana{ + loc 340; + tabindex 1; + id 1002619; + price 20000; + } + brown_rocky_suit{ + loc 341; + tabindex 1; + id 1052095; + price 4000; + } + brown_cotton_lagger{ + loc 342; + tabindex 1; + id 1052098; + price 8000; + } + beige_carribean{ + loc 343; + tabindex 1; + id 1052101; + price 16000; + } + brown_turk_gally{ + loc 344; + tabindex 1; + id 1052104; + price 30000; + } + brown_pollard{ + loc 345; + tabindex 1; + id 1052107; + price 60000; + } + brown_lagger_slipper{ + loc 346; + tabindex 1; + id 1072285; + price 5000; + } +} +1011001{ + brown_skullcap{ + loc 0; + tabindex 1; + id 1002008; + price 500; + } + old_wisconsin{ + loc 1; + tabindex 1; + id 1002033; + price 3000; + } + black_baseball_cap{ + loc 2; + tabindex 1; + id 1002060; + price 3000; + } + yellow_baseball_cap{ + loc 3; + tabindex 1; + id 1002061; + price 3000; + } + brown_baseball_cap{ + loc 4; + tabindex 1; + id 1002062; + price 3000; + } + blue_baseball_cap{ + loc 5; + tabindex 1; + id 1002063; + price 3000; + } + red_baseball_cap{ + loc 6; + tabindex 1; + id 1002012; + price 3000; + } + red_feather_hat{ + loc 7; + tabindex 1; + id 1002112; + price 4000; + } + blue_feather_hat{ + loc 8; + tabindex 1; + id 1002113; + price 4000; + } + green_feather_hat{ + loc 9; + tabindex 1; + id 1002114; + price 4000; + } + black_feather_hat{ + loc 10; + tabindex 1; + id 1002115; + price 4000; + } + brown_feather_hat{ + loc 11; + tabindex 1; + id 1002116; + price 4000; + } + red_robin_hat{ + loc 12; + tabindex 1; + id 1002117; + price 12000; + } + blue_robin_hat{ + loc 13; + tabindex 1; + id 1002118; + price 12000; + } + green_robin_hat{ + loc 14; + tabindex 1; + id 1002119; + price 12000; + } + black_robin_hat{ + loc 15; + tabindex 1; + id 1002120; + price 12000; + } + brown_robin_hat{ + loc 16; + tabindex 1; + id 1002121; + price 12000; + } + green_winter_hat{ + loc 17; + tabindex 1; + id 1002057; + price 800; + } + brown_winter_hat{ + loc 18; + tabindex 1; + id 1002010; + price 800; + } + red_hunter{ + loc 19; + tabindex 1; + id 1002156; + price 20000; + } + blue_hunter{ + loc 20; + tabindex 1; + id 1002157; + price 20000; + } + green_hunter{ + loc 21; + tabindex 1; + id 1002158; + price 20000; + } + black_hunter{ + loc 22; + tabindex 1; + id 1002159; + price 20000; + } + brown_hunter{ + loc 23; + tabindex 1; + id 1002160; + price 20000; + } + red_hawkeye{ + loc 24; + tabindex 1; + id 1002161; + price 30000; + } + blue_hawkeye{ + loc 25; + tabindex 1; + id 1002162; + price 30000; + } + green_hawkeye{ + loc 26; + tabindex 1; + id 1002163; + price 30000; + } + brown_hawkeye{ + loc 27; + tabindex 1; + id 1002164; + price 30000; + } + dark_hawkeye{ + loc 28; + tabindex 1; + id 1002165; + price 30000; + } + amethyst_earrings{ + loc 29; + tabindex 1; + id 1032003; + price 7000; + } + single_earring{ + loc 30; + tabindex 1; + id 1032001; + price 7000; + } + brown_archer_top_(m){ + loc 31; + tabindex 1; + id 1040008; + price 3200; + } + green_archer_top_(m){ + loc 32; + tabindex 1; + id 1040071; + price 3200; + } + green_leather_hoodwear_(m){ + loc 33; + tabindex 1; + id 1040007; + price 5500; + } + silver_leather_hoodwear_(m)_{ + loc 34; + tabindex 1; + id 1040011; + price 5500; + } + brown_hard_leather_top_(m){ + loc 35; + tabindex 1; + id 1040003; + price 9000; + } + green_bennis_chainmail_(m){ + loc 36; + tabindex 1; + id 1040022; + price 15000; + } + black_bennis_chainmail_(m)_{ + loc 37; + tabindex 1; + id 1040023; + price 15000; + } + blue_bennis_chainmail_(m){ + loc 38; + tabindex 1; + id 1040024; + price 15000; + } + red_bennis_chainmail_(m){ + loc 39; + tabindex 1; + id 1040025; + price 15000; + } + green_hunter's_armor_(m)_{ + loc 40; + tabindex 1; + id 1040067; + price 50000; + } + dark_hunter's_armor_(m)_{ + loc 41; + tabindex 1; + id 1040068; + price 50000; + } + red_hunter's_armor_(m){ + loc 42; + tabindex 1; + id 1040069; + price 50000; + } + blue_hunter's_armor_(m)_{ + loc 43; + tabindex 1; + id 1040070; + price 50000; + } + green_avelin_(f){ + loc 44; + tabindex 1; + id 1041007; + price 3200; + } + yellow_avelin_(f){ + loc 45; + tabindex 1; + id 1041061; + price 3200; + } + green_able_armor_(f){ + loc 46; + tabindex 1; + id 1041008; + price 5500; + } + yellow_able_armor_(f){ + loc 47; + tabindex 1; + id 1041062; + price 5500; + } + grey_able_armor_(f){ + loc 48; + tabindex 1; + id 1041063; + price 5500; + } + red_shivermail_(f){ + loc 49; + tabindex 1; + id 1041027; + price 9000; + } + purple_shivermail_(f)_{ + loc 50; + tabindex 1; + id 1041028; + price 9000; + } + green_shivermail_(f)_{ + loc 51; + tabindex 1; + id 1041013; + price 9000; + } + green_bennis_chainmail_(f)_{ + loc 52; + tabindex 1; + id 1040022; + price 15000; + } + red_bennis_chainmail_(f){ + loc 53; + tabindex 1; + id 1040025; + price 15000; + } + blue_bennis_chainmail_(f){ + loc 54; + tabindex 1; + id 1040024; + price 15000; + } + yellow_bennis_chainmail_(f){ + loc 55; + tabindex 1; + id 1041035; + price 15000; + } + green_huntress_armor_(f){ + loc 56; + tabindex 1; + id 1041054; + price 50000; + } + black_huntress_armor_(f){ + loc 57; + tabindex 1; + id 1041055; + price 50000; + } + red_huntress_armor_(f){ + loc 58; + tabindex 1; + id 1041056; + price 50000; + } + warfare_pants_(m){ + loc 59; + tabindex 1; + id 1060005; + price 14000; + } + green_hunter's_pants_(m){ + loc 60; + tabindex 1; + id 1060056; + price 44000; + } + dark_hunter's_pants_(m){ + loc 61; + tabindex 1; + id 1060057; + price 44000; + } + red_hunter's_pants_(m){ + loc 62; + tabindex 1; + id 1060058; + price 44000; + } + blue_hunter's_pants_(m){ + loc 63; + tabindex 1; + id 1060059; + price 44000; + } + yellow_avelin_skirt_(f){ + loc 64; + tabindex 1; + id 1061057; + price 3000; + } + green_avelin_skirt_(f)_{ + loc 65; + tabindex 1; + id 1061009; + price 3000; + } + green_able_armor_skirt_(f)_{ + loc 66; + tabindex 1; + id 1061006; + price 5000; + } + brown_able_skirt_(f){ + loc 67; + tabindex 1; + id 1061058; + price 5000; + } + grey_able_skirt_(f){ + loc 68; + tabindex 1; + id 1061059; + price 5000; + } + green_shivermail_skirt_(f){ + loc 69; + tabindex 1; + id 1061024; + price 9000; + } + red_shivermail_skirt_(f)_{ + loc 70; + tabindex 1; + id 1061025; + price 9000; + } + purple_shivermail_skirt_(f){ + loc 71; + tabindex 1; + id 1061026; + price 9000; + } + green_huntress_pants_(f){ + loc 72; + tabindex 1; + id 1061050; + price 44000; + } + black_huntress_pants_(f){ + loc 73; + tabindex 1; + id 1061051; + price 44000; + } + red_huntress_pants_(f){ + loc 74; + tabindex 1; + id 1061052; + price 44000; + } + archer_pants{ + loc 75; + tabindex 1; + id 1060151; + price 3000; + } + brown_hard_leather_pants{ + loc 76; + tabindex 1; + id 1060157; + price 9000; + } + bennis_chainpants_(m){ + loc 77; + tabindex 1; + id 1062006; + price 13000; + } + green_hard_leather_boots{ + loc 78; + tabindex 1; + id 1072059; + price 1800; + } + brown_hard_leather_boots{ + loc 79; + tabindex 1; + id 1072015; + price 1800; + } + brown_woodsman_boots{ + loc 80; + tabindex 1; + id 1072060; + price 4500; + } + blue_woodsman_boots{ + loc 81; + tabindex 1; + id 1072061; + price 4500; + } + green_woodsman_boots{ + loc 82; + tabindex 1; + id 1072016; + price 4500; + } + deer_huntertop{ + loc 83; + tabindex 1; + id 1072025; + price 9000; + } + rabbit_huntertop{ + loc 84; + tabindex 1; + id 1072026; + price 9000; + } + bear_huntertop{ + loc 85; + tabindex 1; + id 1072067; + price 9000; + } + lion_huntertop{ + loc 86; + tabindex 1; + id 1072068; + price 9000; + } + red_whitebottom_shoes{ + loc 87; + tabindex 1; + id 1072012; + price 13000; + } + orange_whitebottom_boots{ + loc 88; + tabindex 1; + id 1072054; + price 13000; + } + pink_whitebottom_boots{ + loc 89; + tabindex 1; + id 1072055; + price 13000; + } + blue_whitebottom_boots{ + loc 90; + tabindex 1; + id 1072056; + price 13000; + } + blue_sneakers{ + loc 91; + tabindex 1; + id 1072018; + price 30000; + } + red_sneakers{ + loc 92; + tabindex 1; + id 1072064; + price 30000; + } +} +1011000{ + war_bow{ + loc 0; + tabindex 1; + id 1452002; + price 3000; + } + composite_bow{ + loc 1; + tabindex 1; + id 1452003; + price 6000; + } + hunter's_bow{ + loc 2; + tabindex 1; + id 1452001; + price 10000; + } + battle_bow{ + loc 3; + tabindex 1; + id 1452000; + price 20000; + } + crossbow{ + loc 4; + tabindex 1; + id 1462001; + price 4000; + } + battle_crossbow{ + loc 5; + tabindex 1; + id 1462002; + price 8000; + } + balanche{ + loc 6; + tabindex 1; + id 1462003; + price 12000; + } + mountain_crossbow{ + loc 7; + tabindex 1; + id 1462000; + price 30000; + } + long_sword{ + loc 8; + tabindex 1; + id 1302007; + price 3000; + } + leather_purse{ + loc 9; + tabindex 1; + id 1322007; + price 6000; + } + hard_briefcase{ + loc 10; + tabindex 1; + id 1322008; + price 12000; + } + monkey_wrench{ + loc 11; + tabindex 1; + id 1422004; + price 20000; + } + janitor's_mop{ + loc 12; + tabindex 1; + id 1442004; + price 24000; + } +} +1012004{ + pet_food_{ + loc 0; + tabindex 1; + id 2120000; + price 30; + } + revitalizer{ + loc 1; + tabindex 1; + id 2260000; + price 1000; + } + pet_command_guide_:_kitty_{ + loc 2; + tabindex 1; + id 4160001; + price 1000; + } + pet_command_guide_:_bunny_{ + loc 3; + tabindex 1; + id 4160002; + price 1000; + } + pet_command_guide_:_mini_kargo{ + loc 4; + tabindex 1; + id 4160003; + price 1000; + } + pet_command_guide_:_husky_{ + loc 5; + tabindex 1; + id 4160004; + price 1000; + } + pet_command_guide_:_panda_{ + loc 6; + tabindex 1; + id 4160006; + price 1000; + } + pet_command_guide_:_dino_{ + loc 7; + tabindex 1; + id 4160007; + price 1000; + } + pet_command_guide_:_monkey_{ + loc 8; + tabindex 1; + id 4160010; + price 1000; + } + pet_command_guide_:_baby_dragon{ + loc 9; + tabindex 1; + id 4160022; + price 1000; + } + pet_command_guide_:_green/red/blue_dragon{ + loc 10; + tabindex 1; + id 4160023; + price 1000; + } + pet_command_guide_:_black_dragon{ + loc 11; + tabindex 1; + id 4160024; + price 1000; + } + bartos'_favorite_juice{ + loc 12; + tabindex 1; + id 4031993; + price 100000; + } + pet_command_guide_:_blue/red/green/gold_robo{ + loc 13; + tabindex 1; + id 4160035; + price 1000; + } + pet_command_guide_:_jr._balrog{ + loc 14; + tabindex 1; + id 4160015; + price 1000; + } + pet_command_guide_:_kino{ + loc 15; + tabindex 1; + id 4160033; + price 1000; + } + pet_command_guide_:_white_duck{ + loc 16; + tabindex 1; + id 4160039; + price 1000; + } + pet_command_guide_:_gorilla_robo{ + loc 17; + tabindex 1; + id 4160036; + price 1000; + } + pet_command_guide_:_baby_robo{ + loc 18; + tabindex 1; + id 4160034; + price 1000; + } + pet_command_guide_:_crystal_rudolph{ + loc 19; + tabindex 1; + id 4160037; + price 1000; + } + pet_command_guide_:_skunk{ + loc 20; + tabindex 1; + id 4160032; + price 1000; + } + pet_command_guide_:_snowman{ + loc 21; + tabindex 1; + id 4160029; + price 1000; + } + pet_command_guide_:_porcupine{ + loc 22; + tabindex 1; + id 4160027; + price 1000; + } + pet_command_guide_:_sun_wu_kong{ + loc 23; + tabindex 1; + id 4160019; + price 1000; + } + pet_command_guide_:_golden_pig{ + loc 24; + tabindex 1; + id 4160017; + price 1000; + } + pet_command_guide_:_jr._reaper{ + loc 25; + tabindex 1; + id 4160026; + price 1000; + } + pet_command_guide_:_mini_yeti{ + loc 26; + tabindex 1; + id 4160012; + price 1000; + } + pet_command_guide_:_penguin{ + loc 27; + tabindex 1; + id 4160014; + price 1000; + } + pet_command_guide_:_turkey{ + loc 28; + tabindex 1; + id 4160020; + price 1000; + } + pet_command_guide_:_white_tiger_{ + loc 29; + tabindex 1; + id 4160008; + price 1000; + } + pet_command_guide_:_rudolph_{ + loc 30; + tabindex 1; + id 4160009; + price 1000; + } + pet_command_guide_:_robot_{ + loc 31; + tabindex 1; + id 4160013; + price 1000; + } + pet_command_guide_:_puppy_{ + loc 32; + tabindex 1; + id 4160000; + price 1000; + } + pet_command_guide_:_pig{ + loc 33; + tabindex 1; + id 4160005; + price 1000; + } +} +1021001{ + bronze_coif{ + loc 0; + tabindex 1; + id 1002043; + price 2400; + } + bronze_helmet{ + loc 1; + tabindex 1; + id 1002039; + price 2700; + } + bronze_full_helm{ + loc 2; + tabindex 1; + id 1002051; + price 3500; + } + bronze_football_helmet{ + loc 3; + tabindex 1; + id 1002055; + price 8700; + } + bronze_viking_helm{ + loc 4; + tabindex 1; + id 1002059; + price 8500; + } + steel_sharp_helm{ + loc 5; + tabindex 1; + id 1002027; + price 11500; + } + iron_burgernet_helm{ + loc 6; + tabindex 1; + id 1002005; + price 19000; + } + brown_lolico_armor_(m){ + loc 7; + tabindex 1; + id 1040015; + price 3200; + } + blue_lolico_armor_(m){ + loc 8; + tabindex 1; + id 1040038; + price 3200; + } + steel_corporal_(m){ + loc 9; + tabindex 1; + id 1040009; + price 5500; + } + brown_corporal_(m){ + loc 10; + tabindex 1; + id 1040037; + price 5500; + } + blue_sergeant_(m){ + loc 11; + tabindex 1; + id 1040012; + price 9000; + } + red_sergeant_(m){ + loc 12; + tabindex 1; + id 1040039; + price 9000; + } + silver_master_sergeant_(m){ + loc 13; + tabindex 1; + id 1040040; + price 16000; + } + orihalcon_master_sergeant_(m){ + loc 14; + tabindex 1; + id 1040016; + price 16000; + } + dark_master_sergeant_(m){ + loc 15; + tabindex 1; + id 1040041; + price 16000; + } + red_hwarang_shirt_(m){ + loc 16; + tabindex 1; + id 1040021; + price 40000; + } + green_hwarang_shirt_(m){ + loc 17; + tabindex 1; + id 1040026; + price 40000; + } + orange_lolica_armor_(f){ + loc 18; + tabindex 1; + id 1041014; + price 3200; + } + blueberry_lolica_armor_(f){ + loc 19; + tabindex 1; + id 1041064; + price 3200; + } + red_lamelle_(f){ + loc 20; + tabindex 1; + id 1041019; + price 9000; + } + green_lamelle_(f){ + loc 21; + tabindex 1; + id 1041020; + price 9000; + } + brown_lamelle_(f){ + loc 22; + tabindex 1; + id 1041021; + price 9000; + } + blue_shark_(f){ + loc 23; + tabindex 1; + id 1041022; + price 16000; + } + sky_shark_(f){ + loc 24; + tabindex 1; + id 1041023; + price 16000; + } + red_shark_(f){ + loc 25; + tabindex 1; + id 1041024; + price 16000; + } + blue_kendo_robe_(m){ + loc 26; + tabindex 1; + id 1050005; + price 15000; + } + red_kendo_robe_(m){ + loc 27; + tabindex 1; + id 1050006; + price 15000; + } + white_kendo_robe_(m){ + loc 28; + tabindex 1; + id 1050007; + price 15000; + } + black_dragon_robe_(m){ + loc 29; + tabindex 1; + id 1050011; + price 70000; + } + steel_fitted_mail_(f){ + loc 30; + tabindex 1; + id 1051000; + price 8000; + } + dark_engrit_(f){ + loc 31; + tabindex 1; + id 1051010; + price 60000; + } + red_engrit_(f){ + loc 32; + tabindex 1; + id 1051011; + price 60000; + } + blue_engrit_(f){ + loc 33; + tabindex 1; + id 1051012; + price 60000; + } + yellow_engrit_(f){ + loc 34; + tabindex 1; + id 1051013; + price 60000; + } + brown_lolico_pants_(m){ + loc 35; + tabindex 1; + id 1060008; + price 3000; + } + blue_lolico_pants_(m){ + loc 36; + tabindex 1; + id 1060028; + price 3000; + } + steel_corporal_pants_(m){ + loc 37; + tabindex 1; + id 1060009; + price 5000; + } + brown_corporal_pants_(m){ + loc 38; + tabindex 1; + id 1060027; + price 5000; + } + steel_sergeant_kilt_(m){ + loc 39; + tabindex 1; + id 1060010; + price 9000; + } + red_sergeant_kilt_(m){ + loc 40; + tabindex 1; + id 1060029; + price 9000; + } + orihalcon_master_sergeant_kilt_(m){ + loc 41; + tabindex 1; + id 1060011; + price 14000; + } + dark_master_sergeant_kilt_(m){ + loc 42; + tabindex 1; + id 1060030; + price 14000; + } + silver_master_sergeant_kilt_(m){ + loc 43; + tabindex 1; + id 1060060; + price 14000; + } + black_martial_arts_pants_(m){ + loc 44; + tabindex 1; + id 1060016; + price 38000; + } + white_martial_arts_pants_(m){ + loc 45; + tabindex 1; + id 1060017; + price 38000; + } + red_martial_arts_pants_(m){ + loc 46; + tabindex 1; + id 1060018; + price 38000; + } + brown_martial_arts_pants_(m){ + loc 47; + tabindex 1; + id 1060019; + price 38000; + } + rookie_pants_(f){ + loc 48; + tabindex 1; + id 1061014; + price 3000; + } + sophia_pants_(f){ + loc 49; + tabindex 1; + id 1061023; + price 3000; + } + red_ramel_skirt_(f){ + loc 50; + tabindex 1; + id 1061016; + price 9000; + } + green_ramel_skirt_(f){ + loc 51; + tabindex 1; + id 1061017; + price 9000; + } + brown_ramel_skirt_(f){ + loc 52; + tabindex 1; + id 1061018; + price 9000; + } + blue_shark_skirt_(f){ + loc 53; + tabindex 1; + id 1061015; + price 14000; + } + sky_shark_skirt_(f){ + loc 54; + tabindex 1; + id 1061019; + price 14000; + } + red_shark_skirt_(f){ + loc 55; + tabindex 1; + id 1061020; + price 14000; + } + steel_grieves{ + loc 56; + tabindex 1; + id 1072564; + price 5000; + } + bronze_greaves{ + loc 57; + tabindex 1; + id 1072050; + price 5000; + } + brown_high_boots{ + loc 58; + tabindex 1; + id 1072007; + price 10000; + } + orange_high_boots{ + loc 59; + tabindex 1; + id 1072046; + price 10000; + } + blue_high_boots{ + loc 60; + tabindex 1; + id 1072047; + price 10000; + } + mithril_war_boots{ + loc 61; + tabindex 1; + id 1072011; + price 15000; + } + wooden_buckler{ + loc 62; + tabindex 1; + id 1092005; + price 4000; + } + steel_shield{ + loc 63; + tabindex 1; + id 1092000; + price 6000; + } +} +1021000{ + long_sword{ + loc 0; + tabindex 1; + id 1302007; + price 3000; + } + sabre{ + loc 1; + tabindex 1; + id 1302005; + price 6000; + } + viking_sword{ + loc 2; + tabindex 1; + id 1302002; + price 10000; + } + machete{ + loc 3; + tabindex 1; + id 1302006; + price 10000; + } + eloon{ + loc 4; + tabindex 1; + id 1302003; + price 20000; + } + gladius{ + loc 5; + tabindex 1; + id 1302008; + price 40000; + } + field_dagger{ + loc 6; + tabindex 1; + id 1332006; + price 7000; + } + coconut_knife{ + loc 7; + tabindex 1; + id 1332008; + price 10000; + } + iron_dagger{ + loc 8; + tabindex 1; + id 1332010; + price 22000; + } + battle_axe{ + loc 9; + tabindex 1; + id 1312001; + price 6000; + } + mithril_axe{ + loc 10; + tabindex 1; + id 1312003; + price 20000; + } + fireman's_axe{ + loc 11; + tabindex 1; + id 1312005; + price 40000; + } + mace{ + loc 12; + tabindex 1; + id 1322000; + price 6000; + } + iron_mace{ + loc 13; + tabindex 1; + id 1322002; + price 10000; + } + fusion_mace{ + loc 14; + tabindex 1; + id 1322004; + price 22000; + } + war_hammer{ + loc 15; + tabindex 1; + id 1322014; + price 40000; + } + wooden_sword{ + loc 16; + tabindex 1; + id 1402001; + price 3000; + } + two-handed_sword{ + loc 17; + tabindex 1; + id 1402000; + price 12000; + } + broadsword{ + loc 18; + tabindex 1; + id 1402008; + price 22000; + } + metal_axe{ + loc 19; + tabindex 1; + id 1412001; + price 3000; + } + iron_axe{ + loc 20; + tabindex 1; + id 1412012; + price 10000; + } + two-handed_axe{ + loc 21; + tabindex 1; + id 1412000; + price 22000; + } + blue_axe{ + loc 22; + tabindex 1; + id 1412006; + price 45000; + } + wooden_mallet{ + loc 23; + tabindex 1; + id 1422000; + price 3000; + } + heavy_mace{ + loc 24; + tabindex 1; + id 1422002; + price 6000; + } + square_hammer{ + loc 25; + tabindex 1; + id 1422003; + price 10000; + } + pickaxe{ + loc 26; + tabindex 1; + id 1422006; + price 10000; + } + monkey_wrench{ + loc 27; + tabindex 1; + id 1422004; + price 20000; + } + spear{ + loc 28; + tabindex 1; + id 1432000; + price 3000; + } + fork_on_a_stick{ + loc 29; + tabindex 1; + id 1432001; + price 7000; + } + pole_arm{ + loc 30; + tabindex 1; + id 1442079; + price 3000; + } + iron_ball{ + loc 31; + tabindex 1; + id 1442006; + price 8000; + } + studded_polearm{ + loc 32; + tabindex 1; + id 1442007; + price 12000; + } + janitor's_mop{ + loc 33; + tabindex 1; + id 1442004; + price 24000; + } +} +1021100{ + red_potion{ + loc 0; + tabindex 1; + id 2000000; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2000001; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2000002; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2000003; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2000006; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2001515; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2001516; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2001517; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2001519; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2001520; + price 500; + } + apple{ + loc 10; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 11; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 12; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 13; + tabindex 1; + id 2001534; + price 100; + } + lemon{ + loc 14; + tabindex 1; + id 2001535; + price 310; + } + return_scroll_-_nearest_town{ + loc 15; + tabindex 1; + id 2030000; + price 400; + } + return_scroll_to_perion{ + loc 16; + tabindex 1; + id 2030003; + price 500; + } + arrow_for_bow{ + loc 17; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 18; + tabindex 1; + id 2061000; + price 1; + } + antidote{ + loc 19; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 20; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 21; + tabindex 1; + id 2050002; + price 300; + } + subi_throwing-stars{ + loc 22; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 23; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +1031001{ + brown_apprentice_hat{ + loc 0; + tabindex 1; + id 1002017; + price 1200; + } + blue_moon_conehat{ + loc 1; + tabindex 1; + id 1002102; + price 3800; + } + pink_moon_conehat{ + loc 2; + tabindex 1; + id 1002103; + price 3800; + } + green_moon_conehat{ + loc 3; + tabindex 1; + id 1002104; + price 3800; + } + dark_moon_conehat{ + loc 4; + tabindex 1; + id 1002105; + price 3800; + } + brown_moon_conehat{ + loc 5; + tabindex 1; + id 1002106; + price 3800; + } + green_wizardry_hat{ + loc 6; + tabindex 1; + id 1002016; + price 8000; + } + blue_training_shirt_(m){ + loc 7; + tabindex 1; + id 1040004; + price 2000; + } + grey/brown_training_shirt_(m){ + loc 8; + tabindex 1; + id 1040017; + price 2000; + } + black_split_piece_(m){ + loc 9; + tabindex 1; + id 1040018; + price 8500; + } + orange_split_piece_(m){ + loc 10; + tabindex 1; + id 1040019; + price 8500; + } + blue_split_piece_(m){ + loc 11; + tabindex 1; + id 1040020; + price 8500; + } + black_armine_(f){ + loc 12; + tabindex 1; + id 1041015; + price 2000; + } + green_armine_(f){ + loc 13; + tabindex 1; + id 1041016; + price 2000; + } + purple_arianne_(f){ + loc 14; + tabindex 1; + id 1041017; + price 4000; + } + green_arianne_(f){ + loc 15; + tabindex 1; + id 1041018; + price 4000; + } + pink_arianne_(f){ + loc 16; + tabindex 1; + id 1041025; + price 4000; + } + yellow_arianne_(f){ + loc 17; + tabindex 1; + id 1041026; + price 4000; + } + black_split_(f){ + loc 18; + tabindex 1; + id 1041029; + price 8500; + } + red_split_(f){ + loc 19; + tabindex 1; + id 1041030; + price 8500; + } + purple_split_(f){ + loc 20; + tabindex 1; + id 1041031; + price 8500; + } + purple_fairy_top_(f){ + loc 21; + tabindex 1; + id 1041041; + price 42000; + } + green_fairy_top_(f){ + loc 22; + tabindex 1; + id 1041042; + price 42000; + } + blue_fairy_top_(f){ + loc 23; + tabindex 1; + id 1041043; + price 42000; + } + beige_plain_robe_(m){ + loc 24; + tabindex 1; + id 1050008; + price 7000; + } + blue_plain_robe_(m){ + loc 25; + tabindex 1; + id 1050009; + price 7000; + } + green_plain_robe_(m){ + loc 26; + tabindex 1; + id 1050010; + price 7000; + } + brown_doros_robe_(m){ + loc 27; + tabindex 1; + id 1050001; + price 16000; + } + blue_doros_robe_(m){ + loc 28; + tabindex 1; + id 1050023; + price 16000; + } + yellow_doros_robe_(m){ + loc 29; + tabindex 1; + id 1050024; + price 16000; + } + white_doros_robe_(m){ + loc 30; + tabindex 1; + id 1050025; + price 16000; + } + blue_wizard_robe_(m){ + loc 31; + tabindex 1; + id 1050003; + price 40000; + } + white_wizard_robe_(m){ + loc 32; + tabindex 1; + id 1050026; + price 40000; + } + black_wizard_robe_(m){ + loc 33; + tabindex 1; + id 1050027; + price 40000; + } + green_wizard_robe_(m){ + loc 34; + tabindex 1; + id 1050028; + price 40000; + } + brown_doroness_robe_(f){ + loc 35; + tabindex 1; + id 1051003; + price 16000; + } + red_doroness_robe_(f){ + loc 36; + tabindex 1; + id 1051005; + price 16000; + } + purple_doroness_robe_(f){ + loc 37; + tabindex 1; + id 1051004; + price 1600; + } + blue_training_pants_(m){ + loc 38; + tabindex 1; + id 1060012; + price 2000; + } + grey/brown_training_pants_(m){ + loc 39; + tabindex 1; + id 1060013; + price 2000; + } + black_split_pants_(m){ + loc 40; + tabindex 1; + id 1060014; + price 8000; + } + white_split_pants_(m){ + loc 41; + tabindex 1; + id 1060015; + price 8000; + } + black_armine_skirt_(f){ + loc 42; + tabindex 1; + id 1061010; + price 2000; + } + green_armine_skirt_(f){ + loc 43; + tabindex 1; + id 1061011; + price 2000; + } + purple_arianne_skirt_(f){ + loc 44; + tabindex 1; + id 1061012; + price 4000; + } + green_arianne_skirt_(f){ + loc 45; + tabindex 1; + id 1061013; + price 4000; + } + pink_arianne_skirt_(f){ + loc 46; + tabindex 1; + id 1061021; + price 4000; + } + yellow_arianne_skirt_(f){ + loc 47; + tabindex 1; + id 1061022; + price 4000; + } + black_split_skirt_(f){ + loc 48; + tabindex 1; + id 1061027; + price 8000; + } + white_split_skirt_(f){ + loc 49; + tabindex 1; + id 1061028; + price 8000; + } + purple_fairy_skirt_(f){ + loc 50; + tabindex 1; + id 1061034; + price 40000; + } + green_fairy_skirt_(f){ + loc 51; + tabindex 1; + id 1061035; + price 40000; + } + blue_fairy_skirt_(f)__{ + loc 52; + tabindex 1; + id 1061036; + price 40000; + } + brown_basic_boots{ + loc 53; + tabindex 1; + id 1072006; + price 1500; + } + yellow_basic_boots{ + loc 54; + tabindex 1; + id 1072044; + price 1500; + } + blue_basic_boots{ + loc 55; + tabindex 1; + id 1072045; + price 1500; + } + beige_nitty{ + loc 56; + tabindex 1; + id 1072023; + price 4000; + } + black_nitty{ + loc 57; + tabindex 1; + id 1072024; + price 4000; + } +} +1031000{ + wooden_wand{ + loc 0; + tabindex 1; + id 1372005; + price 2000; + } + hardwood_wand{ + loc 1; + tabindex 1; + id 1372006; + price 5000; + } + metal_wand{ + loc 2; + tabindex 1; + id 1372002; + price 9000; + } + ice_wand{ + loc 3; + tabindex 1; + id 1372004; + price 18000; + } + mithril_wand{ + loc 4; + tabindex 1; + id 1372003; + price 38000; + } + wooden_staff{ + loc 5; + tabindex 1; + id 1382000; + price 3000; + } + sapphire_staff{ + loc 6; + tabindex 1; + id 1382003; + price 6000; + } + emerald_staff{ + loc 7; + tabindex 1; + id 1382005; + price 6000; + } + old_wooden_staff{ + loc 8; + tabindex 1; + id 1382004; + price 10000; + } + wizard_staff{ + loc 9; + tabindex 1; + id 1382002; + price 20000; + } + iron_mace{ + loc 10; + tabindex 1; + id 1322002; + price 10000; + } +} +1031100{ + red_potion{ + loc 0; + tabindex 1; + id 2000000; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2000001; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2000002; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2000003; + price 192; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2000006; + price 604; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2001515; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2001516; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2001517; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2001519; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2001520; + price 500; + } + apple{ + loc 10; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 11; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 12; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 13; + tabindex 1; + id 2001534; + price 97; + } + lemon{ + loc 14; + tabindex 1; + id 2001535; + price 305; + } + arrow_for_bow{ + loc 15; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 16; + tabindex 1; + id 2061000; + price 1; + } + antidote{ + loc 17; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 18; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 19; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 20; + tabindex 1; + id 2050003; + price 500; + } + subi_throwing-stars{ + loc 21; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 22; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +1001100{ + red_potion{ + loc 0; + tabindex 1; + id 2000000; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2000001; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2000002; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2000003; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2000006; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2001515; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2001516; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2001517; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2001519; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2001520; + price 500; + } + apple{ + loc 10; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 11; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 12; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 13; + tabindex 1; + id 2001534; + price 100; + } + lemon{ + loc 14; + tabindex 1; + id 2001535; + price 310; + } + chocolate{ + loc 15; + tabindex 1; + id 2020028; + price 3000; + } + return_scroll_-_nearest_town{ + loc 16; + tabindex 1; + id 2030000; + price 400; + } + return_scroll_to_lith_harbor{ + loc 17; + tabindex 1; + id 2030001; + price 500; + } + arrow_for_bow{ + loc 18; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 19; + tabindex 1; + id 2061000; + price 1; + } + subi_throwing-stars{ + loc 20; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 21; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +1001000{ + sword{ + loc 0; + tabindex 1; + id 1302000; + price 50; + } + hand_axe_{ + loc 1; + tabindex 1; + id 1312004; + price 50; + } + wooden_club{ + loc 2; + tabindex 1; + id 1322005; + price 50; + } + long_sword{ + loc 3; + tabindex 1; + id 1302007; + price 3000; + } + double_axe_{ + loc 4; + tabindex 1; + id 1312000; + price 3000; + } + fruit_knife{ + loc 5; + tabindex 1; + id 1332007; + price 1000; + } +} +1001001{ + brown_skullcap{ + loc 0; + tabindex 1; + id 1002008; + price 500; + } + red_headband{ + loc 1; + tabindex 1; + id 1002014; + price 1000; + } + black_headband{ + loc 2; + tabindex 1; + id 1002066; + price 450; + } + green_headband{ + loc 3; + tabindex 1; + id 1002067; + price 450; + } + yellow_headband{ + loc 4; + tabindex 1; + id 1002068; + price 450; + } + blue_headband{ + loc 5; + tabindex 1; + id 1002069; + price 450; + } + black_swimming_cap{ + loc 6; + tabindex 1; + id 1002132; + price 800; + } + blue_swimming_cap{ + loc 7; + tabindex 1; + id 1002133; + price 800; + } + red_swimming_cap{ + loc 8; + tabindex 1; + id 1002134; + price 800; + } + white_bandana{ + loc 9; + tabindex 1; + id 1002019; + price 2000; + } + metal_gear{ + loc 10; + tabindex 1; + id 1002001; + price 3000; + } + blue_one-lined_t-shirt_(m){ + loc 11; + tabindex 1; + id 1040013; + price 3000; + } + orange_sporty_t-shirt_(m){ + loc 12; + tabindex 1; + id 1040014; + price 3000; + } + pink_starry_shirt_(f){ + loc 13; + tabindex 1; + id 1041004; + price 3000; + } + red-striped_t-shirt_(f){ + loc 14; + tabindex 1; + id 1041012; + price 3000; + } + jean_capris_(m){ + loc 15; + tabindex 1; + id 1060007; + price 1000; + } + grey_thick_sweat_pants_(m){ + loc 16; + tabindex 1; + id 1060004; + price 2800; + } + ice_jeans{ + loc 17; + tabindex 1; + id 1062000; + price 4800; + } + sandblasted_jeans_{ + loc 18; + tabindex 1; + id 1062001; + price 4800; + } + yellow_rubber_boots{ + loc 19; + tabindex 1; + id 1072037; + price 50; + } + blue_rubber_boots{ + loc 20; + tabindex 1; + id 1072038; + price 50; + } + red_rubber_boots{ + loc 21; + tabindex 1; + id 1072001; + price 50; + } + leather_sandals{ + loc 22; + tabindex 1; + id 1072005; + price 50; + } + brown_aroa_boots{ + loc 23; + tabindex 1; + id 1072048; + price 5000; + } + green_aroa_boots{ + loc 24; + tabindex 1; + id 1072049; + price 5000; + } + bronze_aroa_boots{ + loc 25; + tabindex 1; + id 1072008; + price 5000; + } + blue_ankle-strap_sandals{ + loc 26; + tabindex 1; + id 1072017; + price 10000; + } + red_ankle-strap_sandals{ + loc 27; + tabindex 1; + id 1072062; + price 10000; + } + brown_ankle-strap_sandals{ + loc 28; + tabindex 1; + id 1072063; + price 10000; + } + stolen_fence{ + loc 29; + tabindex 1; + id 1092003; + price 2000; + } + sky-blue_wooden_chair_{ + loc 30; + tabindex 1; + id 3010001; + price 1000; + } +} +1055000{ + long_sword{ + loc 0; + tabindex 1; + id 1302007; + price 3000; + } + triangular_zamadar{ + loc 1; + tabindex 1; + id 1332000; + price 4000; + } + field_dagger{ + loc 2; + tabindex 1; + id 1332006; + price 7000; + } + triple-tipped_zamadar{ + loc 3; + tabindex 1; + id 1332002; + price 8000; + } + coconut_knife{ + loc 4; + tabindex 1; + id 1332008; + price 10000; + } + stinger{ + loc 5; + tabindex 1; + id 1332013; + price 15000; + } + iron_dagger{ + loc 6; + tabindex 1; + id 1332010; + price 22000; + } + forked_dagger{ + loc 7; + tabindex 1; + id 1332004; + price 38000; + } + reef_claw{ + loc 8; + tabindex 1; + id 1332012; + price 40000; + } + cass{ + loc 9; + tabindex 1; + id 1332009; + price 42000; + } + plunger{ + loc 10; + tabindex 1; + id 1322009; + price 20000; + } + wooden_sword{ + loc 11; + tabindex 1; + id 1402001; + price 3000; + } + metal_axe{ + loc 12; + tabindex 1; + id 1412001; + price 3000; + } + wooden_mallet{ + loc 13; + tabindex 1; + id 1422000; + price 3000; + } + spear{ + loc 14; + tabindex 1; + id 1432000; + price 3000; + } + fork_on_a_stick{ + loc 15; + tabindex 1; + id 1432001; + price 7000; + } + pole_arm{ + loc 16; + tabindex 1; + id 1442079; + price 3000; + } + garnier{ + loc 17; + tabindex 1; + id 1472000; + price 3000; + } + champion_katara{ + loc 18; + tabindex 1; + id 1342000; + price 10000; + } + guardian_katara{ + loc 19; + tabindex 1; + id 1342001; + price 42000; + } + black_ghetto_beanie{ + loc 20; + tabindex 1; + id 1002125; + price 900; + } + metal_gear{ + loc 21; + tabindex 1; + id 1002001; + price 3000; + } + black_thief_hood{ + loc 22; + tabindex 1; + id 1002110; + price 4000; + } + black_loosecap{ + loc 23; + tabindex 1; + id 1002130; + price 12000; + } + yellow_starry_bandana{ + loc 24; + tabindex 1; + id 1002097; + price 7400; + } + dark_tiberian{ + loc 25; + tabindex 1; + id 1002150; + price 20000; + } + dark_guise{ + loc 26; + tabindex 1; + id 1002175; + price 30000; + } + black_cloth_vest_(m){ + loc 27; + tabindex 1; + id 1040033; + price 3000; + } + dark_nightshift_(m){ + loc 28; + tabindex 1; + id 1040034; + price 5000; + } + black_pao_(m){ + loc 29; + tabindex 1; + id 1040044; + price 9000; + } + black_sneak_(m){ + loc 30; + tabindex 1; + id 1040050; + price 16000; + } + dark_brown_stealer_(m){ + loc 31; + tabindex 1; + id 1040057; + price 45000; + } + dark_silver_stealer_(m){ + loc 32; + tabindex 1; + id 1040058; + price 45000; + } + black_cloth_vest_(f){ + loc 33; + tabindex 1; + id 1040033; + price 3000; + } + red_nightshift_(f){ + loc 34; + tabindex 1; + id 1041044; + price 5000; + } + brown_nightshift_(f){ + loc 35; + tabindex 1; + id 1041045; + price 5000; + } + blue_qi_pao_(f){ + loc 36; + tabindex 1; + id 1041040; + price 9000; + } + dark_sneak_(f){ + loc 37; + tabindex 1; + id 1041057; + price 18000; + } + gold_sneak_(f){ + loc 38; + tabindex 1; + id 1041060; + price 18000; + } + purple_steal_(f){ + loc 39; + tabindex 1; + id 1041050; + price 45000; + } + black_cloth_pants_(m){ + loc 40; + tabindex 1; + id 1060023; + price 2800; + } + dark_nightshift_pants_(m){ + loc 41; + tabindex 1; + id 1060024; + price 4800; + } + blue_nightshift_pants_(m){ + loc 42; + tabindex 1; + id 1060025; + price 4800; + } + black_pao_bottom_(m){ + loc 43; + tabindex 1; + id 1060033; + price 8000; + } + black_sneak_pants_(m){ + loc 44; + tabindex 1; + id 1060039; + price 19000; + } + dark_brown_stealer_pants_(m){ + loc 45; + tabindex 1; + id 1060043; + price 40000; + } + dark_silver_stealer_pants_(m){ + loc 46; + tabindex 1; + id 1060044; + price 40000; + } + black_cloth_pants_(f){ + loc 47; + tabindex 1; + id 1060023; + price 2800; + } + red_nightshift_pants_(f){ + loc 48; + tabindex 1; + id 1061037; + price 4800; + } + brown_nightshift_pants_(f){ + loc 49; + tabindex 1; + id 1061038; + price 4800; + } + blue_qi_pao_pants_(f){ + loc 50; + tabindex 1; + id 1061033; + price 8000; + } + blue_qi_pao_skirt_(f){ + loc 51; + tabindex 1; + id 1061042; + price 12000; + } + dark_sneak_pants_(f){ + loc 52; + tabindex 1; + id 1061053; + price 18000; + } + gold_sneak_pants_(f){ + loc 53; + tabindex 1; + id 1061056; + price 18000; + } + purple_steal_pants_(f){ + loc 54; + tabindex 1; + id 1061046; + price 40000; + } + smelly_gomushin{ + loc 55; + tabindex 1; + id 1072043; + price 2000; + } + white_ninja_sandals{ + loc 56; + tabindex 1; + id 1072028; + price 4500; + } + red_ninja_sandals{ + loc 57; + tabindex 1; + id 1072031; + price 4500; + } + blue_enamel_boots{ + loc 58; + tabindex 1; + id 1072066; + price 9000; + } +} +1055002{ + red_potion{ + loc 0; + tabindex 1; + id 2000000; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2000001; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2000002; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2000003; + price 192; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2000006; + price 604; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2001515; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2001516; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2001517; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2001519; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2001520; + price 500; + } + apple{ + loc 10; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 11; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 12; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 13; + tabindex 1; + id 2001534; + price 97; + } + lemon{ + loc 14; + tabindex 1; + id 2001535; + price 305; + } + arrow_for_bow{ + loc 15; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 16; + tabindex 1; + id 2061000; + price 1; + } + antidote{ + loc 17; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 18; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 19; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 20; + tabindex 1; + id 2050003; + price 500; + } + subi_throwing-stars{ + loc 21; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 22; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +1051000{ + long_sword{ + loc 0; + tabindex 1; + id 1302007; + price 3000; + } + triangular_zamadar{ + loc 1; + tabindex 1; + id 1332000; + price 4000; + } + field_dagger{ + loc 2; + tabindex 1; + id 1332006; + price 7000; + } + triple-tipped_zamadar{ + loc 3; + tabindex 1; + id 1332002; + price 8000; + } + coconut_knife{ + loc 4; + tabindex 1; + id 1332008; + price 10000; + } + stinger{ + loc 5; + tabindex 1; + id 1332013; + price 15000; + } + iron_dagger{ + loc 6; + tabindex 1; + id 1332010; + price 22000; + } + forked_dagger{ + loc 7; + tabindex 1; + id 1332004; + price 38000; + } + reef_claw{ + loc 8; + tabindex 1; + id 1332012; + price 40000; + } + cass{ + loc 9; + tabindex 1; + id 1332009; + price 42000; + } + plunger{ + loc 10; + tabindex 1; + id 1322009; + price 20000; + } + wooden_sword{ + loc 11; + tabindex 1; + id 1402001; + price 3000; + } + metal_axe{ + loc 12; + tabindex 1; + id 1412001; + price 3000; + } + wooden_mallet{ + loc 13; + tabindex 1; + id 1422000; + price 3000; + } + spear{ + loc 14; + tabindex 1; + id 1432000; + price 3000; + } + fork_on_a_stick{ + loc 15; + tabindex 1; + id 1432001; + price 7000; + } + pole_arm{ + loc 16; + tabindex 1; + id 1442079; + price 3000; + } + garnier{ + loc 17; + tabindex 1; + id 1472000; + price 3000; + } +} +1051001{ + red_ghetto_beanie{ + loc 0; + tabindex 1; + id 1002122; + price 900; + } + blue_ghetto_beanie{ + loc 1; + tabindex 1; + id 1002123; + price 900; + } + brown_ghetto_beanie{ + loc 2; + tabindex 1; + id 1002124; + price 900; + } + black_ghetto_beanie{ + loc 3; + tabindex 1; + id 1002125; + price 900; + } + green_ghetto_beanie{ + loc 4; + tabindex 1; + id 1002126; + price 900; + } + metal_gear{ + loc 5; + tabindex 1; + id 1002001; + price 3000; + } + red_thief_hood{ + loc 6; + tabindex 1; + id 1002107; + price 4000; + } + blue_thief_hood{ + loc 7; + tabindex 1; + id 1002108; + price 4000; + } + green_thief_hood{ + loc 8; + tabindex 1; + id 1002109; + price 4000; + } + black_thief_hood{ + loc 9; + tabindex 1; + id 1002110; + price 4000; + } + yellow_thief_hood{ + loc 10; + tabindex 1; + id 1002111; + price 4000; + } + red_loosecap{ + loc 11; + tabindex 1; + id 1002127; + price 12000; + } + blue_loosecap{ + loc 12; + tabindex 1; + id 1002128; + price 12000; + } + brown_loosecap{ + loc 13; + tabindex 1; + id 1002129; + price 12000; + } + black_loosecap{ + loc 14; + tabindex 1; + id 1002130; + price 12000; + } + green_loosecap{ + loc 15; + tabindex 1; + id 1002131; + price 12000; + } + red_starry_bandana{ + loc 16; + tabindex 1; + id 1002020; + price 7400; + } + sky_blue_starry_bandana{ + loc 17; + tabindex 1; + id 1002096; + price 7400; + } + yellow_starry_bandana{ + loc 18; + tabindex 1; + id 1002097; + price 7400; + } + red_tiberian{ + loc 19; + tabindex 1; + id 1002146; + price 20000; + } + blue_tiberian{ + loc 20; + tabindex 1; + id 1002147; + price 20000; + } + green_tiberian{ + loc 21; + tabindex 1; + id 1002148; + price 20000; + } + brown_tiberian{ + loc 22; + tabindex 1; + id 1002149; + price 20000; + } + dark_tiberian{ + loc 23; + tabindex 1; + id 1002150; + price 20000; + } + red_guise{ + loc 24; + tabindex 1; + id 1002171; + price 30000; + } + blue_guise{ + loc 25; + tabindex 1; + id 1002172; + price 30000; + } + green_guise{ + loc 26; + tabindex 1; + id 1002173; + price 30000; + } + brown_guise{ + loc 27; + tabindex 1; + id 1002174; + price 30000; + } + black_guise{ + loc 28; + tabindex 1; + id 1002175; + price 30000; + } + blue_cloth_vest_(m){ + loc 29; + tabindex 1; + id 1040031; + price 3000; + } + red_cloth_vest_(m){ + loc 30; + tabindex 1; + id 1040032; + price 3000; + } + black_cloth_vest_(m){ + loc 31; + tabindex 1; + id 1040033; + price 3000; + } + dark_nightshift_(m){ + loc 32; + tabindex 1; + id 1040034; + price 5000; + } + blue_nightshift_(m){ + loc 33; + tabindex 1; + id 1040035; + price 5000; + } + blue_pao_(m){ + loc 34; + tabindex 1; + id 1040042; + price 9000; + } + red_pao_(m){ + loc 35; + tabindex 1; + id 1040043; + price 9000; + } + black_pao_(m){ + loc 36; + tabindex 1; + id 1040044; + price 9000; + } + brown_sneak_(m){ + loc 37; + tabindex 1; + id 1040048; + price 16000; + } + blue_sneak_(m){ + loc 38; + tabindex 1; + id 1040049; + price 16000; + } + black_sneak_(m){ + loc 39; + tabindex 1; + id 1040050; + price 16000; + } + dark_brown_stealer_(m){ + loc 40; + tabindex 1; + id 1040057; + price 45000; + } + dark_silver_stealer_(m){ + loc 41; + tabindex 1; + id 1040058; + price 45000; + } + red_gold_stealer_(m){ + loc 42; + tabindex 1; + id 1040059; + price 45000; + } + silver_black_stealer_(m){ + loc 43; + tabindex 1; + id 1040060; + price 45000; + } + red_cloth_vest_(f){ + loc 44; + tabindex 1; + id 1040032; + price 3000; + } + blue_cloth_vest_(f){ + loc 45; + tabindex 1; + id 1040031; + price 3000; + } + black_cloth_vest_(f){ + loc 46; + tabindex 1; + id 1040033; + price 3000; + } + red_nightshift_(f){ + loc 47; + tabindex 1; + id 1041044; + price 5000; + } + brown_nightshift_(f){ + loc 48; + tabindex 1; + id 1041045; + price 5000; + } + red_qi_pao_(f){ + loc 49; + tabindex 1; + id 1041003; + price 9000; + } + pink_qi_pao_(f){ + loc 50; + tabindex 1; + id 1041039; + price 9000; + } + blue_qi_pao_(f){ + loc 51; + tabindex 1; + id 1041040; + price 9000; + } + dark_sneak_(f){ + loc 52; + tabindex 1; + id 1041057; + price 18000; + } + blood_sneak_(f){ + loc 53; + tabindex 1; + id 1041058; + price 18000; + } + sky_sneak_(f){ + loc 54; + tabindex 1; + id 1041059; + price 18000; + } + gold_sneak_(f){ + loc 55; + tabindex 1; + id 1041060; + price 18000; + } + red_steal_(f){ + loc 56; + tabindex 1; + id 1041047; + price 45000; + } + black_steal_(f){ + loc 57; + tabindex 1; + id 1041048; + price 45000; + } + blue_steal_(f){ + loc 58; + tabindex 1; + id 1041049; + price 45000; + } + purple_steal_(f){ + loc 59; + tabindex 1; + id 1041050; + price 45000; + } + blue_cloth_pants_(m){ + loc 60; + tabindex 1; + id 1060021; + price 2800; + } + red_cloth_pants_(m){ + loc 61; + tabindex 1; + id 1060022; + price 2800; + } + black_cloth_pants_(m){ + loc 62; + tabindex 1; + id 1060023; + price 2800; + } + dark_nightshift_pants_(m){ + loc 63; + tabindex 1; + id 1060024; + price 4800; + } + blue_nightshift_pants_(m){ + loc 64; + tabindex 1; + id 1060025; + price 4800; + } + blue_pao_bottom_(m){ + loc 65; + tabindex 1; + id 1060031; + price 8000; + } + red_pao_bottom_(m){ + loc 66; + tabindex 1; + id 1060032; + price 8000; + } + black_pao_bottom_(m){ + loc 67; + tabindex 1; + id 1060033; + price 8000; + } + dark_brown_sneak_pants_(m){ + loc 68; + tabindex 1; + id 1060037; + price 19000; + } + brown_sneak_pants_(m){ + loc 69; + tabindex 1; + id 1060038; + price 19000; + } + black_sneak_pants_(m){ + loc 70; + tabindex 1; + id 1060039; + price 19000; + } + dark_brown_stealer_pants_(m){ + loc 71; + tabindex 1; + id 1060043; + price 40000; + } + dark_silver_stealer_pants_(m){ + loc 72; + tabindex 1; + id 1060044; + price 40000; + } + red_/_gold_stealer_pants_(m){ + loc 73; + tabindex 1; + id 1060045; + price 40000; + } + silver_/_black_stealer_pants_(m){ + loc 74; + tabindex 1; + id 1060046; + price 40000; + } + red_cloth_pants_(f){ + loc 75; + tabindex 1; + id 1060022; + price 2800; + } + blue_cloth_pants_(f){ + loc 76; + tabindex 1; + id 1060021; + price 2800; + } + black_cloth_pants_(f){ + loc 77; + tabindex 1; + id 1060023; + price 2800; + } + red_nightshift_pants_(f){ + loc 78; + tabindex 1; + id 1061037; + price 4800; + } + brown_nightshift_pants_(f){ + loc 79; + tabindex 1; + id 1061038; + price 4800; + } + purple_qi_pao_pants_(f){ + loc 80; + tabindex 1; + id 1061032; + price 8000; + } + blue_qi_pao_pants_(f){ + loc 81; + tabindex 1; + id 1061033; + price 8000; + } + red_qi_pao_pants_(f){ + loc 82; + tabindex 1; + id 1061003; + price 8000; + } + purple_qi_pao_skirt_(f){ + loc 83; + tabindex 1; + id 1061041; + price 12000; + } + blue_qi_pao_skirt_(f){ + loc 84; + tabindex 1; + id 1061042; + price 12000; + } + red_qi_pao_skirt_(f){ + loc 85; + tabindex 1; + id 1061040; + price 12000; + } + dark_sneak_pants_(f){ + loc 86; + tabindex 1; + id 1061053; + price 18000; + } + blood_sneak_pants_(f){ + loc 87; + tabindex 1; + id 1061054; + price 18000; + } + sky_sneak_pants_(f){ + loc 88; + tabindex 1; + id 1061055; + price 18000; + } + gold_sneak_pants_(f){ + loc 89; + tabindex 1; + id 1061056; + price 18000; + } + red_steal_pants_(f){ + loc 90; + tabindex 1; + id 1061043; + price 40000; + } + black_steal_pants_(f){ + loc 91; + tabindex 1; + id 1061044; + price 40000; + } + blue_steal_pants_(f){ + loc 92; + tabindex 1; + id 1061045; + price 40000; + } + purple_steal_pants_(f){ + loc 93; + tabindex 1; + id 1061046; + price 40000; + } + blue_gidder_shoes{ + loc 94; + tabindex 1; + id 1072070; + price 1800; + } + brown_gidder_shoes{ + loc 95; + tabindex 1; + id 1072071; + price 1800; + } + white_gomushin{ + loc 96; + tabindex 1; + id 1072004; + price 2000; + } + black_gomushin{ + loc 97; + tabindex 1; + id 1072042; + price 2000; + } + smelly_gomushin{ + loc 98; + tabindex 1; + id 1072043; + price 2000; + } + white_ninja_sandals{ + loc 99; + tabindex 1; + id 1072028; + price 45000; + } + yellow_ninja_sandals{ + loc 100; + tabindex 1; + id 1072029; + price 45000; + } + blue_ninja_sandals{ + loc 101; + tabindex 1; + id 1072030; + price 45000; + } + red_ninja_sandals{ + loc 102; + tabindex 1; + id 1072031; + price 45000; + } + black_enamel_boots{ + loc 103; + tabindex 1; + id 1072022; + price 9000; + } + red_enamel_boots{ + loc 104; + tabindex 1; + id 1072065; + price 9000; + } + blue_enamel_boots{ + loc 105; + tabindex 1; + id 1072066; + price 9000; + } +} +1051002{ + red_potion{ + loc 0; + tabindex 1; + id 2000000; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2000001; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2000002; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2000003; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2000006; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2001515; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2001516; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2001517; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2001519; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2001520; + price 500; + } + apple{ + loc 10; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 11; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 12; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 13; + tabindex 1; + id 2001534; + price 100; + } + lemon{ + loc 14; + tabindex 1; + id 2001535; + price 310; + } + return_scroll_-_nearest_town{ + loc 15; + tabindex 1; + id 2030000; + price 400; + } + return_scroll_to_kerning_city{ + loc 16; + tabindex 1; + id 2030005; + price 500; + } + arrow_for_bow{ + loc 17; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 18; + tabindex 1; + id 2061000; + price 1; + } + antidote{ + loc 19; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 20; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 21; + tabindex 1; + id 2050002; + price 300; + } + subi_throwing-stars{ + loc 22; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 23; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +1091002{ + red_potion{ + loc 0; + tabindex 1; + id 2000000; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2000001; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2000002; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2000003; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2000006; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2001515; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2001516; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2001517; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2001519; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2001520; + price 500; + } + apple{ + loc 10; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 11; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 12; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 13; + tabindex 1; + id 2001534; + price 100; + } + lemon{ + loc 14; + tabindex 1; + id 2001535; + price 310; + } + chocolate{ + loc 15; + tabindex 1; + id 2020028; + price 3000; + } + return_scroll_-_nearest_town{ + loc 16; + tabindex 1; + id 2030000; + price 400; + } + nautilus_return_scroll{ + loc 17; + tabindex 1; + id 2030019; + price 500; + } + arrow_for_bow{ + loc 18; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 19; + tabindex 1; + id 2061000; + price 1; + } + subi_throwing-stars{ + loc 20; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 21; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +1091001{ + brown_rocky_bandana{ + loc 0; + tabindex 1; + id 1002610; + price 900; + } + brown_lagger_cap{ + loc 1; + tabindex 1; + id 1002613; + price 4000; + } + brown_double_marine{ + loc 2; + tabindex 1; + id 1002616; + price 12000; + } + brown_pitz_bandana{ + loc 3; + tabindex 1; + id 1002619; + price 20000; + } + brown_rocky_suit{ + loc 4; + tabindex 1; + id 1052095; + price 4000; + } + brown_cotton_lagger{ + loc 5; + tabindex 1; + id 1052098; + price 8000; + } + beige_carribean{ + loc 6; + tabindex 1; + id 1052101; + price 16000; + } + brown_turk_gally{ + loc 7; + tabindex 1; + id 1052104; + price 30000; + } + brown_pollard{ + loc 8; + tabindex 1; + id 1052107; + price 60000; + } + brown_lagger_slipper{ + loc 9; + tabindex 1; + id 1072285; + price 5000; + } + brown_skeedy_sandals{ + loc 10; + tabindex 1; + id 1072288; + price 8000; + } +} +1091000{ + pistol{ + loc 0; + tabindex 1; + id 1492000; + price 3000; + } + dellinger_special{ + loc 1; + tabindex 1; + id 1492001; + price 6000; + } + the_negotiator{ + loc 2; + tabindex 1; + id 1492002; + price 10000; + } + golden_hook{ + loc 3; + tabindex 1; + id 1492003; + price 22000; + } + cold_mind{ + loc 4; + tabindex 1; + id 1492004; + price 50000; + } + steel_knuckler{ + loc 5; + tabindex 1; + id 1482000; + price 3000; + } + leather_arms{ + loc 6; + tabindex 1; + id 1482001; + price 6000; + } + double_tail_knuckler{ + loc 7; + tabindex 1; + id 1482002; + price 10000; + } + norman_grip{ + loc 8; + tabindex 1; + id 1482003; + price 20000; + } + prime_hands{ + loc 9; + tabindex 1; + id 1482004; + price 52000; + } + janitor's_mop{ + loc 10; + tabindex 1; + id 1442004; + price 24000; + } + long_sword{ + loc 11; + tabindex 1; + id 1302007; + price 3000; + } + leather_purse{ + loc 12; + tabindex 1; + id 1322007; + price 6000; + } +} +1540894{ + absolab_katana{ + loc 1; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1542108; + } + absolab_summoner{ + loc 2; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1552110; + } + absolab_scepter{ + loc 3; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1252093; + } + absolab_lucky_item_scroll{ + loc 4; + tabindex 2; + tokenitemid 4310199; + tokenprice 1; + id 2048915; + } + absolab_soul_shooter{ + loc 5; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1222109; + } + absolab_desperado{ + loc 6; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1232109; + } + absolab_whip_thief{ + loc 7; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1242116; + } + absolab_whip_pirate{ + loc 8; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1242120; + } + absolab_psy_limiter{ + loc 9; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1262017; + } + absolab_saber{ + loc 10; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1302333; + } + absolab_axe{ + loc 11; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1312199; + } + absolab_bit_hammer{ + loc 12; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1322250; + } + absolab_blade_lord{ + loc 13; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1332274; + } + absolab_katara{ // goes wrong + loc 14; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1342102; + } + absolab_forked_cane{ + loc 15; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1362135; + } + absolab_wand{ + loc 16; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1372222; + } + absolab_staff{ + loc 17; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1382259; + } + absolab_broad_saber{ + loc 18; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1402251; + } + absolab_broad_axe{ + loc 19; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1412177; + } + absolab_broad_hammer{ + loc 20; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1422184; + } + absolab_piercing_spear{ + loc 21; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1432214; + } + absolab_hellslayer{ + loc 22; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1442268; + } + absolab_bow{ + loc 23; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1452252; + } + absolab_crossbow{ + loc 24; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1462239; + } + absolab_revenge_guard{ + loc 25; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1472261; + } + absolab_gun{ + loc 26; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1492231; + } + absolab_dual_bowgun{ + loc 27; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1522138; + } + absolab_blast_cannon{ + loc 28; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1532144; + } + absolab_pile_god{ + loc 29; + tabindex 1; + tokenitemid 4310199; + tokenprice 5; + id 1582017; + } +} +2091012{ + mini_mulung_dojo_chair{ + loc 1; + tabindex 1; + id 3015240; + price 99000; + } + mulung_scarecrow_chair{ + loc 2; + tabindex 1; + id 3015241; + price 99000; + } + so_gong_gloves{ + loc 3; + tabindex 1; + id 1082394; + price 75000; + } + expert_gloves{ + loc 4; + tabindex 1; + id 1082660; + price 60000; + } + expert_apprentice_glove{ + loc 5; + tabindex 1; + id 1082661; + price 40000; + } + mulung_unidentified_belt_box{ + loc 6; + tabindex 1; + id 2434284; + price 3000; + } + mulung_unidentified_glove_box{ + loc 7; + tabindex 1; + id 2434285; + price 3000; + } + unidentified_traits_growth_box{ + loc 8; + tabindex 1; + id 2434286; + price 1500; + } + special_medal_of_honor{ + loc 9; + tabindex 1; + id 2434288; + price 6000; + } + mugong_honor_exp_guarantee{ + loc 10; + tabindex 1; + id 2434287; + price 5000; + } + pendant_of_the_spirit{ + loc 11; + tabindex 1; + id 1122017; + price 3000; + } + unity_training_center_entrance_charm_30min{ + loc 12; + tabindex 1; + id 4001851; + price 3000; + } + unity_training_center_entrance_charm_1hour{ + loc 13; + tabindex 1; + id 4001852; + price 5500; + } + unity_training_center_entrance_charm_3hour{ + loc 14; + tabindex 1; + id 4001853; + price 15000; + } + unity_training_center_entrance_charm_6hour{ + loc 15; + tabindex 1; + id 4001854; + price 29000; + } + epic_potential_scroll_50{ + loc 16; + tabindex 1; + id 2049705; + price 15000; + } + bonus_potential_scroll_50{ + loc 17; + tabindex 1; + id 2048308; + price 25000; + } + prototype_soul_enchanter{ + loc 18; + tabindex 1; + id 2590004; + price 1000; + } + spell_trace{ + loc 19; + tabindex 1; + id 4001832; + quantity 100; + price 800; + } + mulung_dojo_dmg_skin{ + loc 20; + tabindex 1; + id 2434289; + price 70000; + } + scarecrow_summoning_sack{ + loc 21; + tabindex 1; + id 2434325; + price 3500; + } +} +2041002{ + gladius{ + loc 1; + tabindex 1; + id 1302008; + price 40000; + } + cutlus{ + loc 2; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 3; + tabindex 1; + id 1302009; + price 225000; + } + fireman_axe{ + loc 4; + tabindex 1; + id 1312005; + price 40000; + } + dankke{ + loc 5; + tabindex 1; + id 1312006; + price 100000; + } + blue_counter{ + loc 6; + tabindex 1; + id 1312007; + price 175000; + } + war_hammer{ + loc 7; + tabindex 1; + id 1322014; + price 40000; + } + heavy_hammer{ + loc 8; + tabindex 1; + id 1322015; + price 100000; + } + jacker{ + loc 9; + tabindex 1; + id 1322016; + price 175000; + } + cass{ + loc 10; + tabindex 1; + id 1332009; + price 42000; + } + reef_claw{ + loc 11; + tabindex 1; + id 1332012; + price 40000; + } + halfmoon_zamadar{ + loc 12; + tabindex 1; + id 1332001; + price 200000; + } + gephart{ + loc 13; + tabindex 1; + id 1332014; + price 355000; + } + bazlud{ + loc 14; + tabindex 1; + id 1332011; + price 425000; + } + mithril_wand{ + loc 15; + tabindex 1; + id 1372003; + price 38000; + } + wizard_wand{ + loc 16; + tabindex 1; + id 1372001; + price 175000; + } + fairy_wand{ + loc 17; + tabindex 1; + id 1372000; + price 400000; + } + wizard_staff{ + loc 18; + tabindex 1; + id 1382002; + price 20000; + } + scimitar{ + loc 19; + tabindex 1; + id 1402002; + price 150000; + } + lionheart{ + loc 20; + tabindex 1; + id 1402006; + price 350000; + } + zard{ + loc 21; + tabindex 1; + id 1402007; + price 450000; + } + blue_axe{ + loc 22; + tabindex 1; + id 1412006; + price 45000; + } + niam{ + loc 23; + tabindex 1; + id 1412004; + price 200000; + } + sabretooth{ + loc 24; + tabindex 1; + id 1412005; + price 250000; + } + mithril_maul{ + loc 25; + tabindex 1; + id 1422001; + price 45000; + } + sledgehammer{ + loc 26; + tabindex 1; + id 1422008; + price 200000; + } + titan{ + loc 27; + tabindex 1; + id 1422007; + price 250000; + } + forked_spear{ + loc 28; + tabindex 1; + id 1432002; + price 60000; + } + nakamaki{ + loc 29; + tabindex 1; + id 1432003; + price 175000; + } + zeco{ + loc 30; + tabindex 1; + id 1432005; + price 225000; + } + mithril_pole_arm{ + loc 31; + tabindex 1; + id 1442001; + price 60000; + } + axe_pole_arm{ + loc 32; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 33; + tabindex 1; + id 1442009; + price 300000; + } + ryden{ + loc 34; + tabindex 1; + id 1452005; + price 150000; + } + red_viper{ + loc 35; + tabindex 1; + id 1452006; + price 250000; + } + vaulter_2000{ + loc 36; + tabindex 1; + id 1452007; + price 375000; + } + mountain_crossbow{ + loc 37; + tabindex 1; + id 1462000; + price 30000; + } + eagle_crow{ + loc 38; + tabindex 1; + id 1462004; + price 200000; + } + heckler{ + loc 39; + tabindex 1; + id 1462005; + price 250000; + } + steel_titan{ + loc 40; + tabindex 1; + id 1472001; + price 20000; + } + bronze_igor{ + loc 41; + tabindex 1; + id 1472004; + price 30000; + } + meba{ + loc 42; + tabindex 1; + id 1472007; + price 60000; + } + prime_hands{ + loc 43; + tabindex 1; + id 1482004; + price 75000; + } + silver_maiden{ + loc 44; + tabindex 1; + id 1482005; + price 100000; + } + neozard{ + loc 45; + tabindex 1; + id 1482006; + price 150000; + } + cold_mind{ + loc 46; + tabindex 1; + id 1492004; + price 75000; + } + shooting_star{ + loc 47; + tabindex 1; + id 1492005; + price 100000; + } + lunar_shooter{ + loc 48; + tabindex 1; + id 1492006; + price 160000; + } +} +2041003{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + yellow_jangoon_armor{ + loc 1; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 2; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 3; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 4; + tabindex 1; + id 1041085; + price 200000; + } + white_crusader_chainmail{ + loc 5; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 6; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 7; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 8; + tabindex 1; + id 1051014; + price 112500; + } + brown_jangoon_pants{ + loc 9; + tabindex 1; + id 1060075; + price 180000; + } + white_jangoon_pants{ + loc 10; + tabindex 1; + id 1060074; + price 180000; + } + red_jangoon_skirt{ + loc 11; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 12; + tabindex 1; + id 1061084; + price 180000; + } + red_triangular_shield{ + loc 13; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 14; + tabindex 1; + id 1092099; + price 200000; + } + red_matty{ + loc 15; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 16; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 17; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 18; + tabindex 1; + id 1002144; + price 96000; + } + blue_amoria_top{ + loc 19; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 20; + tabindex 1; + id 1041178; + price 120000; + } + white_chaos_robe{ + loc 21; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 22; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 23; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 24; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 25; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 26; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 27; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 28; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 29; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 30; + tabindex 1; + id 1051027; + price 450000; + } + blue_amoria_skirt{ + loc 31; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 32; + tabindex 1; + id 1061047; + price 120000; + } + blue_pole-feather_hat{ + loc 33; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 34; + tabindex 1; + id 1003323; + price 100000; + } + green_pole-feather_hat{ + loc 35; + tabindex 1; + id 1002137; + price 100000; + } + red_legolier{ + loc 36; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 37; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 38; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier__{ + loc 39; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 40; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 41; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 42; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 43; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 44; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 45; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 46; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 47; + tabindex 1; + id 1041081; + price 180000; + } + blue_legolier_pants{ + loc 48; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 49; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 50; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 51; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 52; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 53; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 54; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 55; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 56; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 57; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 58; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 59; + tabindex 1; + id 1061080; + price 160000; + } + red_burgler{ + loc 60; + tabindex 1; + id 1002176; + price 100000; + } + blue_burglar{ + loc 61; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 62; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 63; + tabindex 1; + id 1002179; + price 100000; + } + dark_burglar{ + loc 64; + tabindex 1; + id 1002180; + price 100000; + } + black_knucklevest{ + loc 65; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest_{ + loc 66; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 67; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 68; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 69; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 70; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 71; + tabindex 1; + id 1041074; + price 180000; + } + red_avenger{ + loc 72; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 73; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 74; + tabindex 1; + id 1051243; + price 111000; + } + red_knucklevest_pants{ + loc 75; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 77; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 78; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 79; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 80; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 81; + tabindex 1; + id 1061069; + price 160000; + } + blue_den_marine{ + loc 82; + tabindex 1; + id 1003325; + price 75000; + } + blue_brace_look{ + loc 83; + tabindex 1; + id 1052394; + price 100000; + } + red_barbay{ + loc 84; + tabindex 1; + id 1052395; + price 120000; + } +} +2041006{ + red_pill_{ + loc 0; + tabindex 1; + id 2001507; + price 50; + } + red_potion{ + loc 1; + tabindex 1; + id 2001500; + price 47; + } + orange_pill{ + loc 2; + tabindex 1; + id 2001508; + price 160; + } + orange_potion{ + loc 3; + tabindex 1; + id 2001501; + price 152; + } + white_pill_{ + loc 4; + tabindex 1; + id 2001509; + price 320; + } + white_potion{ + loc 5; + tabindex 1; + id 2022174; + price 304; + } + blue_pill{ + loc 6; + tabindex 1; + id 2001510; + price 200; + } + blue_potion{ + loc 7; + tabindex 1; + id 2001503; + price 190; + } + mana_elixir_pill{ + loc 8; + tabindex 1; + id 2001511; + price 186; + } + mana_elixir{ + loc 9; + tabindex 1; + id 2022177; + price 176; + } + ice_cream_pop{ + loc 10; + tabindex 1; + id 2001513; + price 2185; + } + very_special_sundae{ + loc 11; + tabindex 1; + id 2001514; + price 3800; + } + warrior_pill{ + loc 12; + tabindex 1; + id 2002006; + price 500; + } + magic_pill_{ + loc 13; + tabindex 1; + id 2002007; + price 500; + } + sniper_pill{ + loc 14; + tabindex 1; + id 2002008; + price 500; + } + dexterity_pill_{ + loc 15; + tabindex 1; + id 2002009; + price 500; + } + speed_pill_{ + loc 16; + tabindex 1; + id 2002010; + price 500; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + egg{ + loc 18; + tabindex 1; + id 2010002; + price 47; + } + fried_chicken{ + loc 19; + tabindex 1; + id 2481003; + price 209; + } + cake{ + loc 20; + tabindex 1; + id 2481004; + price 304; + } + pizza{ + loc 21; + tabindex 1; + id 2481005; + price 427; + } + hamburger{ + loc 22; + tabindex 1; + id 2020053; + price 427; + } + hot_dog{ + loc 23; + tabindex 1; + id 2020005; + price 304; + } + hot_dog_supreme{ + loc 24; + tabindex 1; + id 2020054; + price 503; + } + chocolate{ + loc 25; + tabindex 1; + id 2020028; + price 2850; + } + return_scroll_-_nearest_town{ + loc 26; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 27; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 28; + tabindex 1; + id 2061000; + price 1; + } + bronze_arrow_for_bow{ + loc 29; + tabindex 1; + id 2060001; + price 10; + } + bronze_arrow_for_crossbow{ + loc 30; + tabindex 1; + id 2061001; + price 10; + } + subi_throwing-stars{ + loc 31; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 32; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2012004{ + jousting_helmet{ + loc 0; + tabindex 1; + id 1003316; + price 120000; + } + bronze_pride{ + loc 1; + tabindex 1; + id 1002064; + price 40000; + } + red_hawkeye{ + loc 2; + tabindex 1; + id 1002161; + price 30000; + } + blue_hawkeye{ + loc 3; + tabindex 1; + id 1002162; + price 30000; + } + green_hawkeye{ + loc 4; + tabindex 1; + id 1003318; + price 30000; + } + brown_hawkeye{ + loc 5; + tabindex 1; + id 1002164; + price 30000; + } + dark_hawkeye{ + loc 6; + tabindex 1; + id 1002165; + price 30000; + } + red_guise{ + loc 7; + tabindex 1; + id 1002171; + price 30000; + } + blue_guise{ + loc 8; + tabindex 1; + id 1002172; + price 30000; + } + green_guise{ + loc 9; + tabindex 1; + id 1002173; + price 30000; + } + brown_guise{ + loc 10; + tabindex 1; + id 1003319; + price 30000; + } + dark_guise{ + loc 11; + tabindex 1; + id 1002175; + price 30000; + } + red_hwarang_shirt{ + loc 12; + tabindex 1; + id 1040021; + price 40000; + } + green_hwarang_shirt{ + loc 13; + tabindex 1; + id 1040026; + price 40000; + } + purple_fairy_top{ + loc 14; + tabindex 1; + id 1041041; + price 42000; + } + green_fairy_top{ + loc 15; + tabindex 1; + id 1041175; + price 42000; + } + blue_fairy_top{ + loc 16; + tabindex 1; + id 1041043; + price 42000; + } + red_hunter's_armor{ + loc 17; + tabindex 1; + id 1040069; + price 50000; + } + blue_hunter's_armor_{ + loc 18; + tabindex 1; + id 1040070; + price 50000; + } + green_hunter's_armor_{ + loc 19; + tabindex 1; + id 1040067; + price 50000; + } + dark_hunter's_armor_{ + loc 20; + tabindex 1; + id 1040173; + price 50000; + } + red_huntress_armor{ + loc 21; + tabindex 1; + id 1041056; + price 50000; + } + green_huntress_armor{ + loc 22; + tabindex 1; + id 1041176; + price 50000; + } + black_huntress_armor{ + loc 23; + tabindex 1; + id 1041055; + price 50000; + } + dark_brown_stealer{ + loc 24; + tabindex 1; + id 1040174; + price 45000; + } + dark_silver_stealer{ + loc 25; + tabindex 1; + id 1040058; + price 45000; + } + red_gold_stealer{ + loc 26; + tabindex 1; + id 1040059; + price 45000; + } + silver_black_stealer{ + loc 27; + tabindex 1; + id 1040060; + price 45000; + } + red_steal{ + loc 28; + tabindex 1; + id 1041047; + price 45000; + } + black_steal{ + loc 29; + tabindex 1; + id 1041177; + price 45000; + } + blue_steal{ + loc 30; + tabindex 1; + id 1041049; + price 45000; + } + dark_engrit{ + loc 31; + tabindex 1; + id 1051241; + price 60000; + } + red_engrit{ + loc 32; + tabindex 1; + id 1051011; + price 60000; + } + blue_engrit{ + loc 33; + tabindex 1; + id 1051012; + price 60000; + } + yellow_engrit{ + loc 34; + tabindex 1; + id 1051013; + price 60000; + } + blue_wizard_robe{ + loc 35; + tabindex 1; + id 1050003; + price 40000; + } + white_wizard_robe{ + loc 36; + tabindex 1; + id 1050026; + price 40000; + } + black_mage_robe{ + loc 37; + tabindex 1; + id 1050027; + price 40000; + } + green_wizard_robe{ + loc 38; + tabindex 1; + id 1050028; + price 40000; + } + black_martial_arts_pants{ + loc 39; + tabindex 1; + id 1060016; + price 38000; + } + white_martial_arts_pants{ + loc 40; + tabindex 1; + id 1060017; + price 38000; + } + red_martial_arts_pants{ + loc 41; + tabindex 1; + id 1060018; + price 38000; + } + brown_martial_arts_pants{ + loc 42; + tabindex 1; + id 1060019; + price 38000; + } + purple_fairy_skirt{ + loc 43; + tabindex 1; + id 1061034; + price 40000; + } + green_fairy_skirt{ + loc 44; + tabindex 1; + id 1061184; + price 40000; + } + blue_fairy_skirt__{ + loc 45; + tabindex 1; + id 1061036; + price 40000; + } + blue_hunter's_pants{ + loc 46; + tabindex 1; + id 1060059; + price 44000; + } + red_hunter's_pants{ + loc 47; + tabindex 1; + id 1060058; + price 44000; + } + green_hunter's_pants{ + loc 48; + tabindex 1; + id 1060161; + price 44000; + } + dark_hunter's_pants{ + loc 49; + tabindex 1; + id 1060057; + price 44000; + } + red_huntress_pants{ + loc 50; + tabindex 1; + id 1061052; + price 44000; + } + green_huntress_pants{ + loc 51; + tabindex 1; + id 1061185; + price 44000; + } + black_huntress_pants{ + loc 52; + tabindex 1; + id 1061051; + price 44000; + } + dark_brown_stealer_pants{ + loc 53; + tabindex 1; + id 1060162; + price 40000; + } + dark_silver_stealer_pants{ + loc 54; + tabindex 1; + id 1060044; + price 40000; + } + red_/_gold_stealer_pants{ + loc 55; + tabindex 1; + id 1060045; + price 40000; + } + silver_/_black_stealer_pants{ + loc 56; + tabindex 1; + id 1060046; + price 40000; + } + red_steal_pants{ + loc 57; + tabindex 1; + id 1061043; + price 40000; + } + black_steal_pants{ + loc 58; + tabindex 1; + id 1061186; + price 40000; + } + blue_steal_pants{ + loc 59; + tabindex 1; + id 1061045; + price 40000; + } + purple_steal_pants{ + loc 60; + tabindex 1; + id 1061046; + price 40000; + } + mithril_buckler{ + loc 61; + tabindex 1; + id 1092097; + price 60000; + } + white_oceania_cap{ + loc 62; + tabindex 1; + id 1003320; + price 40000; + } + brown_pollard{ + loc 63; + tabindex 1; + id 1052393; + price 90000; + } +} +2012003{ + gladius{ + loc 0; + tabindex 1; + id 1302186; + price 40000; + } + fireman's_axe{ + loc 1; + tabindex 1; + id 1312082; + price 40000; + } + war_hammer{ + loc 2; + tabindex 1; + id 1322116; + price 40000; + } + cass{ + loc 3; + tabindex 1; + id 1332009; + price 42000; + } + reef_claw{ + loc 4; + tabindex 1; + id 1332162; + price 40000; + } + mithril_wand{ + loc 5; + tabindex 1; + id 1372111; + price 38000; + } + wizard_staff{ + loc 6; + tabindex 1; + id 1382135; + price 20000; + } + scimitar{ + loc 7; + tabindex 1; + id 1402123; + price 150000; + } + blue_axe{ + loc 8; + tabindex 1; + id 1412081; + price 45000; + } + mithril_maul{ + loc 9; + tabindex 1; + id 1422083; + price 45000; + } + forked_spear{ + loc 10; + tabindex 1; + id 1432110; + price 60000; + } + mithril_pole_arm{ + loc 11; + tabindex 1; + id 1442001; + price 60000; + } + ryden{ + loc 12; + tabindex 1; + id 1452141; + price 150000; + } + mountain_crossbow{ + loc 13; + tabindex 1; + id 1462129; + price 30000; + } + steel_titans{ + loc 14; + tabindex 1; + id 1472150; + price 20000; + } + prime_hands{ + loc 15; + tabindex 1; + id 1482114; + price 75000; + } + cold_mind{ + loc 16; + tabindex 1; + id 1492113; + price 75000; + } +} +2012005{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + unagi{ + loc 10; + tabindex 1; + id 2022003; + price 1100; + } + pure_water{ + loc 11; + tabindex 1; + id 2022000; + price 1650; + } + watermelon{ + loc 12; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 13; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 14; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 15; + tabindex 1; + id 2010000; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 2010002; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 2070013; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 2010004; + price 310; + } + chocolate{ + loc 20; + tabindex 1; + id 2020028; + price 3000; + } + antidote{ + loc 21; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 22; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 23; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 24; + tabindex 1; + id 2050003; + price 500; + } + return_scroll_-_nearest_town{ + loc 25; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 26; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061000; + price 1; + } + subi_throwing-stars{ + loc 28; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 29; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2060004{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + air_bubble{ + loc 10; + tabindex 1; + id 2430364; + price 300; + } + fried_shrimp_{ + loc 11; + tabindex 1; + id 2022041; + price 1600; + } + watermelon{ + loc 12; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 13; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 14; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 15; + tabindex 1; + id 2010000; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 2010002; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 2070013; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 2010004; + price 310; + } + melting_cheese{ + loc 20; + tabindex 1; + id 2020012; + price 4500; + } + reindeer_milk{ + loc 21; + tabindex 1; + id 2020013; + price 5600; + } + sunrise_dew{ + loc 22; + tabindex 1; + id 2020045; + price 8100; + } + sunset_dew{ + loc 23; + tabindex 1; + id 2020046; + price 10200; + } + unagi{ + loc 24; + tabindex 1; + id 2022003; + price 1100; + } + pure_water{ + loc 25; + tabindex 1; + id 2022000; + price 1650; + } + return_scroll_-_nearest_town{ + loc 26; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 27; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 28; + tabindex 1; + id 2061000; + price 1; + } + bronze_arrow_for_bow{ + loc 29; + tabindex 1; + id 2060001; + price 10; + } + bronze_arrow_for_crossbow{ + loc 30; + tabindex 1; + id 2061001; + price 10; + } + subi_throwing-stars{ + loc 31; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 32; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2060007{ + eloon{ + loc 0; + tabindex 1; + id 1302185; + price 20000; + } + gladius{ + loc 1; + tabindex 1; + id 1302186; + price 40000; + } + cutlass{ + loc 2; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 3; + tabindex 1; + id 1302188; + price 225000; + } + mithril_axe{ + loc 4; + tabindex 1; + id 1312003; + price 20000; + } + fireman's_axe{ + loc 5; + tabindex 1; + id 1312082; + price 40000; + } + dankke{ + loc 6; + tabindex 1; + id 1312083; + price 100000; + } + blue_counter{ + loc 7; + tabindex 1; + id 1312084; + price 175000; + } + fusion_mace{ + loc 8; + tabindex 1; + id 1322115; + price 22000; + } + war_hammer{ + loc 9; + tabindex 1; + id 1322116; + price 40000; + } + heavy_hammer{ + loc 10; + tabindex 1; + id 1322117; + price 100000; + } + jacker{ + loc 11; + tabindex 1; + id 1322118; + price 175000; + } + forked_dagger{ + loc 12; + tabindex 1; + id 1332161; + price 38000; + } + reef_claw{ + loc 13; + tabindex 1; + id 1332162; + price 40000; + } + gephart{ + loc 14; + tabindex 1; + id 1332163; + price 375000; + } + bazlud{ + loc 15; + tabindex 1; + id 1332011; + price 425000; + } + ice_wand{ + loc 16; + tabindex 1; + id 1372110; + price 18000; + } + wizard_staff{ + loc 17; + tabindex 1; + id 1382135; + price 20000; + } + mithril_wand{ + loc 18; + tabindex 1; + id 1372111; + price 38000; + } + wizard_wand{ + loc 19; + tabindex 1; + id 1372112; + price 175000; + } + fairy_wand{ + loc 20; + tabindex 1; + id 1372113; + price 400000; + } + broadsword{ + loc 21; + tabindex 1; + id 1402122; + price 22000; + } + scimitar{ + loc 22; + tabindex 1; + id 1402123; + price 150000; + } + lionheart{ + loc 23; + tabindex 1; + id 1402124; + price 350000; + } + zard{ + loc 24; + tabindex 1; + id 1402125; + price 450000; + } + two-handed_axe{ + loc 25; + tabindex 1; + id 1412080; + price 22000; + } + niam{ + loc 26; + tabindex 1; + id 1412082; + price 200000; + } + blue_axe{ + loc 27; + tabindex 1; + id 1412081; + price 45000; + } + sabretooth{ + loc 28; + tabindex 1; + id 1412083; + price 250000; + } + monkey_wrench{ + loc 29; + tabindex 1; + id 1422082; + price 20000; + } + mithril_maul{ + loc 30; + tabindex 1; + id 1422083; + price 45000; + } + sledgehammer{ + loc 31; + tabindex 1; + id 1422084; + price 200000; + } + titan{ + loc 32; + tabindex 1; + id 1422085; + price 250000; + } + forked_spear{ + loc 33; + tabindex 1; + id 1432110; + price 60000; + } + nakamaki{ + loc 34; + tabindex 1; + id 1432111; + price 175000; + } + zeco{ + loc 35; + tabindex 1; + id 1432112; + price 225000; + } + janitor's_mop{ + loc 36; + tabindex 1; + id 1442147; + price 24000; + } + mithril_pole_arm{ + loc 37; + tabindex 1; + id 1442001; + price 60000; + } + axe_pole_arm{ + loc 38; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 39; + tabindex 1; + id 1442150; + price 300000; + } + battle_bow{ + loc 40; + tabindex 1; + id 1452140; + price 20000; + } + ryden{ + loc 41; + tabindex 1; + id 1452141; + price 150000; + } + red_viper{ + loc 42; + tabindex 1; + id 1452142; + price 250000; + } + vaulter_2000{ + loc 43; + tabindex 1; + id 1452143; + price 375000; + } + balanche{ + loc 44; + tabindex 1; + id 1462128; + price 12000; + } + mountain_crossbow{ + loc 45; + tabindex 1; + id 1462129; + price 30000; + } + eagle_crow{ + loc 46; + tabindex 1; + id 1462130; + price 200000; + } + heckler{ + loc 47; + tabindex 1; + id 1462131; + price 250000; + } + meba{ + loc 48; + tabindex 1; + id 1472152; + price 60000; + } + prime_hands{ + loc 49; + tabindex 1; + id 1482114; + price 75000; + } + silver_maiden{ + loc 50; + tabindex 1; + id 1482115; + price 100000; + } + neozard{ + loc 51; + tabindex 1; + id 1482116; + price 150000; + } + cold_mind{ + loc 52; + tabindex 1; + id 1492113; + price 75000; + } + shooting_star{ + loc 53; + tabindex 1; + id 1702155; + price 100000; + } + lunar_shooter{ + loc 54; + tabindex 1; + id 1492115; + price 160000; + } +} +2060003{ + jousting_helmet{ + loc 0; + tabindex 1; + id 1003316; + price 120000; + } + great_blue_helmet{ + loc 1; + tabindex 1; + id 1002048; + price 160000; + } + blue_jester{ + loc 2; + tabindex 1; + id 1002034; + price 60000; + } + blue_matty{ + loc 3; + tabindex 1; + id 1002142; + price 96000; + } + blue_hawkeye{ + loc 4; + tabindex 1; + id 1002162; + price 60000; + } + blue_pole-feather_hat{ + loc 5; + tabindex 1; + id 1002138; + price 100000; + } + blue_guise{ + loc 6; + tabindex 1; + id 1002172; + price 60000; + } + blue_burglar{ + loc 7; + tabindex 1; + id 1002177; + price 100000; + } + red_engrit{ + loc 8; + tabindex 1; + id 1051011; + price 60000; + } + blue_engrit{ + loc 9; + tabindex 1; + id 1051012; + price 60000; + } + yellow_engrit{ + loc 10; + tabindex 1; + id 1051013; + price 60000; + } + black_dragon_robe{ + loc 11; + tabindex 1; + id 1050196; + price 70000; + } + red_hwarang_shirt{ + loc 12; + tabindex 1; + id 1040021; + price 40000; + } + green_hwarang_shirt{ + loc 13; + tabindex 1; + id 1040026; + price 40000; + } + black_martial_arts_pants{ + loc 14; + tabindex 1; + id 1060016; + price 38000; + } + white_martial_arts_pants{ + loc 15; + tabindex 1; + id 1060017; + price 38000; + } + white_crusader_chainmail{ + loc 16; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 17; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 18; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 19; + tabindex 1; + id 1051014; + price 112500; + } + blood_fitted_mail{ + loc 20; + tabindex 1; + id 1051242; + price 112500; + } + maroon_jangoon_armor{ + loc 21; + tabindex 1; + id 1040177; + price 200000; + } + blue_jangoon_armor{ + loc 22; + tabindex 1; + id 1040086; + price 200000; + } + red_jangoon_armor{ + loc 23; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 24; + tabindex 1; + id 1041085; + price 200000; + } + white_jangoon_pants{ + loc 25; + tabindex 1; + id 1060074; + price 180000; + } + brown_jangoon_pants{ + loc 26; + tabindex 1; + id 1060075; + price 180000; + } + red_jangoon_skirt{ + loc 27; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 28; + tabindex 1; + id 1061084; + price 180000; + } + purple_fairy_top{ + loc 29; + tabindex 1; + id 1041041; + price 42000; + } + green_fairy_top{ + loc 30; + tabindex 1; + id 1041175; + price 42000; + } + blue_fairy_top{ + loc 31; + tabindex 1; + id 1041043; + price 42000; + } + purple_fairy_skirt{ + loc 32; + tabindex 1; + id 1061034; + price 40000; + } + green_fairy_skirt{ + loc 33; + tabindex 1; + id 1061184; + price 40000; + } + blue_fairy_skirt__{ + loc 34; + tabindex 1; + id 1061036; + price 40000; + } + blue_wizard_robe{ + loc 35; + tabindex 1; + id 1050003; + price 40000; + } + white_wizard_robe{ + loc 36; + tabindex 1; + id 1050026; + price 40000; + } + green_wizard_robe{ + loc 37; + tabindex 1; + id 1050028; + price 40000; + } + red_amoria_top{ + loc 38; + tabindex 1; + id 1041178; + price 120000; + } + blue_amoria_top{ + loc 39; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_skirt{ + loc 40; + tabindex 1; + id 1061047; + price 120000; + } + blue_amoria_skirt{ + loc 41; + tabindex 1; + id 1061048; + price 120000; + } + blood_chaos_robe{ + loc 42; + tabindex 1; + id 1050199; + price 300000; + } + blue_chaos_robe{ + loc 43; + tabindex 1; + id 1050030; + price 300000; + } + white_chaos_robe{ + loc 44; + tabindex 1; + id 1050031; + price 300000; + } + purple_moonlight{ + loc 45; + tabindex 1; + id 1051023; + price 450000; + } + red_moonlight{ + loc 46; + tabindex 1; + id 1051024; + price 450000; + } + blue_moonlight{ + loc 47; + tabindex 1; + id 1051025; + price 450000; + } + red_starlight{ + loc 48; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 49; + tabindex 1; + id 1050037; + price 450000; + } + blue_starlight{ + loc 50; + tabindex 1; + id 1050038; + price 450000; + } + green_huntress_armor{ + loc 51; + tabindex 1; + id 1041176; + price 50000; + } + red_huntress_armor{ + loc 52; + tabindex 1; + id 1041056; + price 50000; + } + green_huntress_pants{ + loc 53; + tabindex 1; + id 1061185; + price 44000; + } + red_huntress_pants{ + loc 54; + tabindex 1; + id 1061052; + price 44000; + } + green_hunter's_armor_{ + loc 55; + tabindex 1; + id 1040067; + price 50000; + } + red_hunter's_armor{ + loc 56; + tabindex 1; + id 1040069; + price 50000; + } + green_hunter's_pants{ + loc 57; + tabindex 1; + id 1060161; + price 44000; + } + red_hunter's_pants{ + loc 58; + tabindex 1; + id 1060058; + price 44000; + } + red_legolia{ + loc 59; + tabindex 1; + id 1041179; + price 114000; + } + blue_legolia{ + loc 60; + tabindex 1; + id 1041066; + price 114000; + } + green_legolia{ + loc 61; + tabindex 1; + id 1041067; + price 114000; + } + red_legolia_pants{ + loc 62; + tabindex 1; + id 1061060; + price 108000; + } + blue_legolia_pants{ + loc 63; + tabindex 1; + id 1061188; + price 108000; + } + green_legolia_pants{ + loc 64; + tabindex 1; + id 1061062; + price 108000; + } + red_legolier{ + loc 65; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 66; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 67; + tabindex 1; + id 1040074; + price 114000; + } + red_legolier_pants{ + loc 68; + tabindex 1; + id 1060061; + price 108000; + } + blue_legolier_pants{ + loc 69; + tabindex 1; + id 1060163; + price 108000; + } + green_legolier_pants{ + loc 70; + tabindex 1; + id 1060063; + price 108000; + } + brown_piette{ + loc 71; + tabindex 1; + id 1040178; + price 180000; + } + white_piette{ + loc 72; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette_pants{ + loc 73; + tabindex 1; + id 1060069; + price 160000; + } + blue_piette_pants{ + loc 74; + tabindex 1; + id 1060070; + price 160000; + } + white_piettra{ + loc 75; + tabindex 1; + id 1041081; + price 180000; + } + brown_piettra{ + loc 76; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra_skirt{ + loc 77; + tabindex 1; + id 1061080; + price 160000; + } + brown_piettra_skirt{ + loc 78; + tabindex 1; + id 1061081; + price 160000; + } + red_steal{ + loc 79; + tabindex 1; + id 1041047; + price 45000; + } + blue_steal{ + loc 80; + tabindex 1; + id 1041049; + price 45000; + } + purple_steal{ + loc 81; + tabindex 1; + id 1041050; + price 45000; + } + red_steal_pants{ + loc 82; + tabindex 1; + id 1061043; + price 40000; + } + blue_steal_pants{ + loc 83; + tabindex 1; + id 1061045; + price 40000; + } + purple_steal_pants{ + loc 84; + tabindex 1; + id 1061046; + price 40000; + } + dark_brown_stealer{ + loc 85; + tabindex 1; + id 1040174; + price 45000; + } + red_gold_stealer{ + loc 86; + tabindex 1; + id 1040059; + price 45000; + } + dark_brown_stealer_pants{ + loc 87; + tabindex 1; + id 1060162; + price 45000; + } + red_/_gold_stealer_pants{ + loc 88; + tabindex 1; + id 1060045; + price 45000; + } + green_knucklevest{ + loc 89; + tabindex 1; + id 1040176; + price 114000; + } + red_knucklevest_{ + loc 90; + tabindex 1; + id 1040062; + price 114000; + } + blue_knucklevest_pants{ + loc 91; + tabindex 1; + id 1060050; + price 108000; + } + red_knucklevest_pants{ + loc 92; + tabindex 1; + id 1060051; + price 108000; + } + red_avenger{ + loc 93; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 94; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 95; + tabindex 1; + id 1051243; + price 111000; + } + khaki_shadow{ + loc 96; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 97; + tabindex 1; + id 1040083; + price 180000; + } + khaki_shadow_pants{ + loc 98; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 99; + tabindex 1; + id 1060072; + price 160000; + } + purple_shadow{ + loc 100; + tabindex 1; + id 1041074; + price 180000; + } + red_shadow{ + loc 101; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow_pants{ + loc 102; + tabindex 1; + id 1061069; + price 160000; + } + red_shadow_pants{ + loc 103; + tabindex 1; + id 1061070; + price 160000; + } + white_oceania_cap{ + loc 104; + tabindex 1; + id 1003320; + price 40000; + } + brown_pollard{ + loc 105; + tabindex 1; + id 1052393; + price 90000; + } + blue_brace_look{ + loc 106; + tabindex 1; + id 1052394; + price 100000; + } + red_barbay{ + loc 107; + tabindex 1; + id 1052395; + price 120000; + } + blue_den_marine{ + loc 108; + tabindex 1; + id 1003325; + price 75000; + } +} +2080002{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + yellow_jangoon_armor{ + loc 1; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 2; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 3; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 4; + tabindex 1; + id 1041085; + price 200000; + } + white_crusader_chainmail{ + loc 5; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 6; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 7; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 8; + tabindex 1; + id 1051014; + price 112500; + } + white_jangoon_pants{ + loc 9; + tabindex 1; + id 1060074; + price 180000; + } + brown_jangoon_pants{ + loc 10; + tabindex 1; + id 1060075; + price 180000; + } + red_jangoon_skirt{ + loc 11; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 12; + tabindex 1; + id 1061084; + price 180000; + } + red_triangular_shield{ + loc 13; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 14; + tabindex 1; + id 1092099; + price 200000; + } + red_matty{ + loc 15; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 16; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 17; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 18; + tabindex 1; + id 1002144; + price 96000; + } + blue_amoria_top{ + loc 19; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 20; + tabindex 1; + id 1041178; + price 120000; + } + white_chaos_robe{ + loc 21; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 22; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 23; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 24; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 25; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 26; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 27; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 28; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 29; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 30; + tabindex 1; + id 1051027; + price 450000; + } + blue_amoria_skirt{ + loc 31; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 32; + tabindex 1; + id 1061047; + price 120000; + } + blue_pole-feather_hat{ + loc 33; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 34; + tabindex 1; + id 1003323; + price 100000; + } + brown_pole-feather_hat{ + loc 35; + tabindex 1; + id 1002135; + price 100000; + } + green_pole-feather_hat{ + loc 36; + tabindex 1; + id 1002137; + price 100000; + } + red_legolier{ + loc 37; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 38; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 39; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier__{ + loc 40; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 41; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 42; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 43; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 44; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 45; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 46; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 47; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 48; + tabindex 1; + id 1041081; + price 180000; + } + blue_legolier_pants{ + loc 49; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 50; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 51; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 52; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 53; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 54; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 55; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 56; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 57; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 58; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 59; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 60; + tabindex 1; + id 1061080; + price 160000; + } + red_burgler{ + loc 61; + tabindex 1; + id 1002176; + price 100000; + } + blue_burglar{ + loc 62; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 63; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 64; + tabindex 1; + id 1002179; + price 100000; + } + dark_burglar{ + loc 65; + tabindex 1; + id 1002180; + price 100000; + } + black_knucklevest{ + loc 66; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest_{ + loc 67; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 68; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 69; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 70; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 71; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 72; + tabindex 1; + id 1041074; + price 180000; + } + red_avenger{ + loc 73; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 74; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 75; + tabindex 1; + id 1051243; + price 111000; + } + red_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 77; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 78; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 79; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 80; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 81; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 82; + tabindex 1; + id 1061069; + price 160000; + } + blue_brace_look{ + loc 83; + tabindex 1; + id 1052394; + price 100000; + } + red_barbay{ + loc 84; + tabindex 1; + id 1052395; + price 120000; + } + blue_den_marine{ + loc 85; + tabindex 1; + id 1003325; + price 75000; + } +} +2080001{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + baby_dragon_food{ + loc 10; + tabindex 1; + id 2022089; + price 3400; + } + watermelon{ + loc 11; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 12; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 13; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 14; + tabindex 1; + id 2010000; + price 30; + } + egg{ + loc 15; + tabindex 1; + id 2010002; + price 50; + } + meat{ + loc 16; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 17; + tabindex 1; + id 2070013; + price 100; + } + lemon{ + loc 18; + tabindex 1; + id 2010004; + price 310; + } + melting_cheese{ + loc 19; + tabindex 1; + id 2020012; + price 4500; + } + reindeer_milk{ + loc 20; + tabindex 1; + id 2020013; + price 5600; + } + sunrise_dew{ + loc 21; + tabindex 1; + id 2020045; + price 8100; + } + sunset_dew{ + loc 22; + tabindex 1; + id 2020046; + price 10200; + } + return_scroll_-_nearest_town{ + loc 23; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 24; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 25; + tabindex 1; + id 2061000; + price 1; + } + bronze_arrow_for_bow{ + loc 26; + tabindex 1; + id 2060001; + price 10; + } + bronze_arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061001; + price 10; + } + subi_throwing-stars{ + loc 28; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 29; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2090002{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + yellow_jangoon_armor{ + loc 1; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 2; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 3; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 4; + tabindex 1; + id 1041085; + price 200000; + } + white_crusader_chainmail{ + loc 5; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 6; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 7; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 8; + tabindex 1; + id 1051014; + price 112500; + } + white_jangoon_pants{ + loc 9; + tabindex 1; + id 1060074; + price 180000; + } + brown_jangoon_pants{ + loc 10; + tabindex 1; + id 1060075; + price 180000; + } + red_jangoon_skirt{ + loc 11; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 12; + tabindex 1; + id 1061084; + price 180000; + } + red_triangular_shield{ + loc 13; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 14; + tabindex 1; + id 1092099; + price 200000; + } + red_matty{ + loc 15; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 16; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 17; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 18; + tabindex 1; + id 1002144; + price 96000; + } + blue_amoria_top{ + loc 19; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 20; + tabindex 1; + id 1041178; + price 120000; + } + white_chaos_robe{ + loc 21; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 22; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 23; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 24; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 25; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 26; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 27; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 28; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 29; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 30; + tabindex 1; + id 1051027; + price 450000; + } + blue_amoria_skirt{ + loc 31; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 32; + tabindex 1; + id 1061047; + price 120000; + } + blue_pole-feather_hat{ + loc 33; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 34; + tabindex 1; + id 1003323; + price 100000; + } + brown_pole-feather_hat{ + loc 35; + tabindex 1; + id 1002135; + price 100000; + } + green_pole-feather_hat{ + loc 36; + tabindex 1; + id 1002137; + price 100000; + } + red_legolier{ + loc 37; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 38; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 39; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier{ + loc 40; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 41; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 42; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 43; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 44; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 45; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 46; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 47; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 48; + tabindex 1; + id 1041081; + price 180000; + } + blue_legolier_pants{ + loc 49; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 50; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 51; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 52; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 53; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 54; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 55; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 56; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 57; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 58; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 59; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 60; + tabindex 1; + id 1061080; + price 160000; + } + red_burgler{ + loc 61; + tabindex 1; + id 1002176; + price 100000; + } + blue_burgler{ + loc 62; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 63; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 64; + tabindex 1; + id 1002179; + price 100000; + } + dark_burgler{ + loc 65; + tabindex 1; + id 1002180; + price 100000; + } + black_knucklevest{ + loc 66; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest{ + loc 67; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 68; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 69; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 70; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 71; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 72; + tabindex 1; + id 1041074; + price 180000; + } + red_avenger{ + loc 73; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 74; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 75; + tabindex 1; + id 1051243; + price 111000; + } + red_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 77; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 78; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 79; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 80; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 81; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 82; + tabindex 1; + id 1061069; + price 160000; + } + blue_brace_look{ + loc 83; + tabindex 1; + id 1052394; + price 100000; + } + red_barbay{ + loc 84; + tabindex 1; + id 1052395; + price 120000; + } + blue_den_marine{ + loc 85; + tabindex 1; + id 1003325; + price 75000; + } +} +2090001{ + gladius{ + loc 0; + tabindex 1; + id 1302186; + price 40000; + } + cutlus{ + loc 1; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 2; + tabindex 1; + id 1302188; + price 225000; + } + fireman's_axe{ + loc 3; + tabindex 1; + id 1312082; + price 40000; + } + dankke{ + loc 4; + tabindex 1; + id 1312083; + price 100000; + } + blue_counter{ + loc 5; + tabindex 1; + id 1312084; + price 175000; + } + war_hammer{ + loc 6; + tabindex 1; + id 1322116; + price 40000; + } + heavy_hammer{ + loc 7; + tabindex 1; + id 1322117; + price 100000; + } + jacker{ + loc 8; + tabindex 1; + id 1322118; + price 175000; + } + cass{ + loc 9; + tabindex 1; + id 1332009; + price 42000; + } + reef_claw{ + loc 10; + tabindex 1; + id 1332162; + price 40000; + } + halfmoon_zamadar{ + loc 11; + tabindex 1; + id 1332001; + price 200000; + } + gephart{ + loc 12; + tabindex 1; + id 1332163; + price 355000; + } + bazlud{ + loc 13; + tabindex 1; + id 1332011; + price 425000; + } + mithril_wand{ + loc 14; + tabindex 1; + id 1372111; + price 38000; + } + wizard_wand{ + loc 15; + tabindex 1; + id 1372112; + price 175000; + } + fairy_wand{ + loc 16; + tabindex 1; + id 1372113; + price 400000; + } + wizard_staff{ + loc 17; + tabindex 1; + id 1382135; + price 20000; + } + scimitar{ + loc 18; + tabindex 1; + id 1402123; + price 150000; + } + lionheart{ + loc 19; + tabindex 1; + id 1402124; + price 350000; + } + zard{ + loc 20; + tabindex 1; + id 1402125; + price 450000; + } + blue_axe{ + loc 21; + tabindex 1; + id 1412081; + price 45000; + } + niam{ + loc 22; + tabindex 1; + id 1412082; + price 200000; + } + sabretooth{ + loc 23; + tabindex 1; + id 1412083; + price 250000; + } + mithril_maul{ + loc 24; + tabindex 1; + id 1422083; + price 45000; + } + sledgehammer{ + loc 25; + tabindex 1; + id 1422084; + price 200000; + } + titan{ + loc 26; + tabindex 1; + id 1422085; + price 250000; + } + forked_spear{ + loc 27; + tabindex 1; + id 1432110; + price 60000; + } + nakamaki{ + loc 28; + tabindex 1; + id 1432111; + price 175000; + } + zeco{ + loc 29; + tabindex 1; + id 1432112; + price 225000; + } + mithril_pole_arm{ + loc 30; + tabindex 1; + id 1442001; + price 60000; + } + axe_pole_arm{ + loc 31; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 32; + tabindex 1; + id 1442150; + price 300000; + } + ryden{ + loc 33; + tabindex 1; + id 1452141; + price 150000; + } + red_viper{ + loc 34; + tabindex 1; + id 1452142; + price 250000; + } + vaulter_2000{ + loc 35; + tabindex 1; + id 1452143; + price 375000; + } + mountain_crossbow{ + loc 36; + tabindex 1; + id 1462129; + price 30000; + } + eagle_crow{ + loc 37; + tabindex 1; + id 1462130; + price 200000; + } + heckler{ + loc 38; + tabindex 1; + id 1462131; + price 250000; + } + steel_titans{ + loc 39; + tabindex 1; + id 1472150; + price 20000; + } + bronze_igor{ + loc 40; + tabindex 1; + id 1472091; + price 30000; + } + meba{ + loc 41; + tabindex 1; + id 1472152; + price 60000; + } + silver_maiden{ + loc 42; + tabindex 1; + id 1482115; + price 100000; + } + neozard{ + loc 43; + tabindex 1; + id 1482116; + price 150000; + } + shooting_star{ + loc 44; + tabindex 1; + id 1702155; + price 100000; + } + lunar_shooter{ + loc 45; + tabindex 1; + id 1492115; + price 160000; + } +} +2090006{ + pet_food{ + loc 0; + tabindex 1; + id 4034590; + price 30; + } + revitalizer{ + loc 1; + tabindex 1; + id 2260000; + price 1000; + } + bartos'_favorite_juice{ + loc 2; + tabindex 1; + id 4031993; + price 100000; + } + pet_command_guide_:_blue/red/green/gold_robo{ + loc 3; + tabindex 1; + id 4160035; + price 1000; + } + pet_command_guide_:_jr._balrog{ + loc 4; + tabindex 1; + id 4160015; + price 1000; + } + pet_command_guide_:_kino{ + loc 5; + tabindex 1; + id 4160033; + price 1000; + } + pet_command_guide_:_white_duck{ + loc 6; + tabindex 1; + id 4160039; + price 1000; + } + pet_command_guide_:_gorilla_robo{ + loc 7; + tabindex 1; + id 4160036; + price 1000; + } + pet_command_guide_:_baby_robo{ + loc 8; + tabindex 1; + id 4160034; + price 1000; + } + pet_command_guide_:_crystal_rudolph{ + loc 9; + tabindex 1; + id 4160037; + price 1000; + } + pet_command_guide_:_skunk{ + loc 10; + tabindex 1; + id 4160032; + price 1000; + } + pet_command_guide_:_snowman{ + loc 11; + tabindex 1; + id 4160029; + price 1000; + } + pet_command_guide_:_porcupine{ + loc 12; + tabindex 1; + id 4160027; + price 1000; + } + pet_command_guide_:_sun_wu_kong{ + loc 13; + tabindex 1; + id 4160019; + price 1000; + } + pet_command_guide_:_golden_pig{ + loc 14; + tabindex 1; + id 4160017; + price 1000; + } + pet_command_guide_:_jr._reaper{ + loc 15; + tabindex 1; + id 4160028; + price 1000; + } + pet_command_guide_:_mini_yeti{ + loc 16; + tabindex 1; + id 4160012; + price 1000; + } + pet_command_guide_:_penguin{ + loc 17; + tabindex 1; + id 4160014; + price 1000; + } + pet_command_guide_:_turkey{ + loc 18; + tabindex 1; + id 4160020; + price 1000; + } + pet_command_guide_:_mini_kargo{ + loc 19; + tabindex 1; + id 4160003; + price 1000; + } + pet_command_guide_:_green/red/blue_dragon{ + loc 20; + tabindex 1; + id 4160023; + price 1000; + } + pet_command_guide_:_baby_dragon{ + loc 21; + tabindex 1; + id 4160022; + price 1000; + } + pet_command_guide_:_white_tiger{ + loc 22; + tabindex 1; + id 4160008; + price 1000; + } + pet_command_guide_:_rudolph{ + loc 23; + tabindex 1; + id 4160009; + price 1000; + } + pet_command_guide_:_robot{ + loc 24; + tabindex 1; + id 4160013; + price 1000; + } + pet_command_guide_:_puppy{ + loc 25; + tabindex 1; + id 4160000; + price 1000; + } + pet_command_guide_:_pig{ + loc 26; + tabindex 1; + id 4160005; + price 1000; + } + pet_command_guide_:_panda{ + loc 27; + tabindex 1; + id 4160006; + price 1000; + } + pet_command_guide_:_monkey{ + loc 28; + tabindex 1; + id 4160010; + price 1000; + } + pet_command_guide_:_kitty{ + loc 29; + tabindex 1; + id 4160001; + price 1000; + } + pet_command_guide_:_husky{ + loc 30; + tabindex 1; + id 4160004; + price 1000; + } + pet_command_guide_:_dino{ + loc 31; + tabindex 1; + id 4160007; + price 1000; + } + pet_command_guide_:_bunny{ + loc 32; + tabindex 1; + id 4160002; + price 1000; + } + pet_command_guide_:_black_dragon{ + loc 33; + tabindex 1; + id 4160024; + price 1000; + } +} +2093002{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + unagi{ + loc 10; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 11; + tabindex 1; + id 4032352; + price 1650; + } + watermelon{ + loc 12; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 13; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 14; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 15; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 4034406; + price 310; + } + chocolate{ + loc 20; + tabindex 1; + id 4033144; + price 3000; + } + antidote{ + loc 21; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 22; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 23; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 24; + tabindex 1; + id 2050003; + price 500; + } + return_scroll_-_nearest_town{ + loc 25; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 26; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061000; + price 1; + } + subi_throwing-stars{ + loc 28; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 29; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2093000{ + gladius{ + loc 0; + tabindex 1; + id 1302186; + price 40000; + } + fireman's_axe{ + loc 1; + tabindex 1; + id 1312082; + price 40000; + } + war_hammer{ + loc 2; + tabindex 1; + id 1322116; + price 40000; + } + cass{ + loc 3; + tabindex 1; + id 1332009; + price 42000; + } + reef_claw{ + loc 4; + tabindex 1; + id 1332162; + price 40000; + } + mithril_wand{ + loc 5; + tabindex 1; + id 1372111; + price 38000; + } + wizard_staff{ + loc 6; + tabindex 1; + id 1382135; + price 20000; + } + scimitar{ + loc 7; + tabindex 1; + id 1402123; + price 150000; + } + blue_axe{ + loc 8; + tabindex 1; + id 1412081; + price 45000; + } + mithril_maul{ + loc 9; + tabindex 1; + id 1422083; + price 45000; + } + forked_spear{ + loc 10; + tabindex 1; + id 1432110; + price 60000; + } + mithril_pole_arm{ + loc 11; + tabindex 1; + id 1442001; + price 60000; + } + ryden{ + loc 12; + tabindex 1; + id 1452141; + price 150000; + } + mountain_crossbow{ + loc 13; + tabindex 1; + id 1462129; + price 30000; + } + steel_titans{ + loc 14; + tabindex 1; + id 1472150; + price 20000; + } + prime_hands{ + loc 15; + tabindex 1; + id 1482114; + price 75000; + } + cold_mind{ + loc 16; + tabindex 1; + id 1492113; + price 75000; + } +} +2093001{ + jousting_helmet{ + loc 0; + tabindex 1; + id 1003316; + price 120000; + } + red_hwarang_shirt{ + loc 1; + tabindex 1; + id 1040021; + price 40000; + } + green_hwarang_shirt{ + loc 2; + tabindex 1; + id 1040026; + price 40000; + } + dark_engrit{ + loc 3; + tabindex 1; + id 1051241; + price 60000; + } + red_engrit{ + loc 4; + tabindex 1; + id 1051011; + price 60000; + } + blue_engrit{ + loc 5; + tabindex 1; + id 1051012; + price 60000; + } + yellow_engrit{ + loc 6; + tabindex 1; + id 1051013; + price 60000; + } + black_martial_arts_pants{ + loc 7; + tabindex 1; + id 1060016; + price 38000; + } + white_martial_arts_pants{ + loc 8; + tabindex 1; + id 1060017; + price 38000; + } + red_martial_arts_pants{ + loc 9; + tabindex 1; + id 1060018; + price 38000; + } + brown_martial_arts_pants{ + loc 10; + tabindex 1; + id 1060019; + price 38000; + } + mithril_buckler{ + loc 11; + tabindex 1; + id 1092097; + price 60000; + } + bronze_pride{ + loc 12; + tabindex 1; + id 1002064; + price 40000; + } + purple_fairy_top{ + loc 13; + tabindex 1; + id 1041041; + price 42000; + } + green_fairy_top{ + loc 14; + tabindex 1; + id 1041175; + price 42000; + } + blue_fairy_top{ + loc 15; + tabindex 1; + id 1041043; + price 42000; + } + blue_wizard_robe{ + loc 16; + tabindex 1; + id 1050003; + price 40000; + } + white_wizard_robe{ + loc 17; + tabindex 1; + id 1050026; + price 40000; + } + black_wizard_robe{ + loc 18; + tabindex 1; + id 1050027; + price 40000; + } + green_wizard_robe{ + loc 19; + tabindex 1; + id 1050028; + price 40000; + } + purple_fairy_skirt{ + loc 20; + tabindex 1; + id 1061034; + price 40000; + } + green_fairy_skirt{ + loc 21; + tabindex 1; + id 1061184; + price 40000; + } + blue_fairy_skirt{ + loc 22; + tabindex 1; + id 1061036; + price 40000; + } + red_hawkeye{ + loc 23; + tabindex 1; + id 1002161; + price 30000; + } + blue_hawkeye{ + loc 24; + tabindex 1; + id 1002162; + price 30000; + } + green_hawkeye{ + loc 25; + tabindex 1; + id 1003318; + price 30000; + } + brown_hawkeye{ + loc 26; + tabindex 1; + id 1002164; + price 30000; + } + dark_hawkeye{ + loc 27; + tabindex 1; + id 1002165; + price 30000; + } + red_hunter's_armor{ + loc 28; + tabindex 1; + id 1040069; + price 50000; + } + blue_hunter's_armor{ + loc 29; + tabindex 1; + id 1040070; + price 50000; + } + green_hunter's_armor{ + loc 30; + tabindex 1; + id 1040067; + price 50000; + } + dark_hunter's_armor{ + loc 31; + tabindex 1; + id 1040173; + price 50000; + } + red_huntress_armor{ + loc 32; + tabindex 1; + id 1041056; + price 50000; + } + green_huntress_armor{ + loc 33; + tabindex 1; + id 1041176; + price 50000; + } + black_huntress_armor{ + loc 34; + tabindex 1; + id 1041055; + price 50000; + } + blue_hunter's_pants{ + loc 35; + tabindex 1; + id 1060059; + price 44000; + } + red_hunter's_pants{ + loc 36; + tabindex 1; + id 1060058; + price 44000; + } + green_hunter's_pants{ + loc 37; + tabindex 1; + id 1060161; + price 44000; + } + dark_hunter's_pants{ + loc 38; + tabindex 1; + id 1060057; + price 44000; + } + red_huntress_pants{ + loc 39; + tabindex 1; + id 1061052; + price 44000; + } + green_huntress_pants{ + loc 40; + tabindex 1; + id 1061185; + price 44000; + } + black_huntress_pants{ + loc 41; + tabindex 1; + id 1061051; + price 44000; + } + red_guise{ + loc 42; + tabindex 1; + id 1002171; + price 30000; + } + blue_guise{ + loc 43; + tabindex 1; + id 1002172; + price 30000; + } + green_guise{ + loc 44; + tabindex 1; + id 1002173; + price 30000; + } + brown_guise{ + loc 45; + tabindex 1; + id 1003319; + price 30000; + } + dark_guise{ + loc 46; + tabindex 1; + id 1002175; + price 30000; + } + dark_brown_stealer{ + loc 47; + tabindex 1; + id 1040174; + price 45000; + } + dark_silver_stealer{ + loc 48; + tabindex 1; + id 1040058; + price 45000; + } + red_gold_stealer{ + loc 49; + tabindex 1; + id 1040059; + price 45000; + } + silver_black_stealer{ + loc 50; + tabindex 1; + id 1040060; + price 45000; + } + red_steal{ + loc 51; + tabindex 1; + id 1041047; + price 45000; + } + black_steal{ + loc 52; + tabindex 1; + id 1041177; + price 45000; + } + blue_steal{ + loc 53; + tabindex 1; + id 1041049; + price 45000; + } + purple_steal{ + loc 54; + tabindex 1; + id 1041050; + price 45000; + } + dark_brown_stealer_pants{ + loc 55; + tabindex 1; + id 1060162; + price 40000; + } + dark_silver_stealer_pants{ + loc 56; + tabindex 1; + id 1060044; + price 40000; + } + red_/_gold_stealer_pants{ + loc 57; + tabindex 1; + id 1060045; + price 40000; + } + silver_/_black_stealer_pants{ + loc 58; + tabindex 1; + id 1060046; + price 40000; + } + red_steal_pants{ + loc 59; + tabindex 1; + id 1061043; + price 40000; + } + black_steal_pants{ + loc 60; + tabindex 1; + id 1061186; + price 40000; + } + blue_steal_pants{ + loc 61; + tabindex 1; + id 1061045; + price 40000; + } + purple_steal_pants{ + loc 62; + tabindex 1; + id 1061046; + price 40000; + } + white_oceania_cap{ + loc 63; + tabindex 1; + id 1003320; + price 40000; + } + brown_pollard{ + loc 64; + tabindex 1; + id 1052393; + price 90000; + } +} +2022001{ + red-bean_soup{ + loc 0; + tabindex 1; + id 2270041; + price 400; + } + soft_white_bun{ + loc 1; + tabindex 1; + id 2022186; + price 2400; + } + red_potion{ + loc 2; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 3; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 4; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 5; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 6; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 7; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 8; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 9; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 10; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 11; + tabindex 1; + id 2002005; + price 500; + } + pure_water{ + loc 12; + tabindex 1; + id 4032352; + price 1650; + } + watermelon{ + loc 13; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 14; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 15; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 16; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 17; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 18; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 19; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 20; + tabindex 1; + id 4034406; + price 310; + } + unagi{ + loc 21; + tabindex 1; + id 3994092; + price 1100; + } + melting_cheese{ + loc 22; + tabindex 1; + id 2020012; + price 4500; + } + reindeer_milk{ + loc 23; + tabindex 1; + id 2020013; + price 5600; + } + sunrise_dew{ + loc 24; + tabindex 1; + id 2020045; + price 8100; + } + sunset_dew{ + loc 25; + tabindex 1; + id 2020046; + price 10200; + } + return_scroll_-_nearest_town{ + loc 26; + tabindex 1; + id 2030000; + price 400; + } + antidote{ + loc 27; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 28; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 29; + tabindex 1; + id 2050002; + price 300; + } + arrow_for_bow{ + loc 30; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 31; + tabindex 1; + id 2061000; + price 1; + } + subi_throwing-stars{ + loc 32; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 33; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2020001{ + cutlus{ + loc 0; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 1; + tabindex 1; + id 1302188; + price 225000; + } + dankke{ + loc 2; + tabindex 1; + id 1312083; + price 100000; + } + blue_counter{ + loc 3; + tabindex 1; + id 1312084; + price 175000; + } + heavy_hammer{ + loc 4; + tabindex 1; + id 1322117; + price 100000; + } + jacker{ + loc 5; + tabindex 1; + id 1322118; + price 175000; + } + halfmoon_zamadar{ + loc 6; + tabindex 1; + id 1332001; + price 200000; + } + gephart{ + loc 7; + tabindex 1; + id 1332163; + price 375000; + } + bazlud{ + loc 8; + tabindex 1; + id 1332011; + price 425000; + } + wizard_wand{ + loc 9; + tabindex 1; + id 1372112; + price 175000; + } + fairy_wand{ + loc 10; + tabindex 1; + id 1372113; + price 400000; + } + lionheart{ + loc 11; + tabindex 1; + id 1402124; + price 350000; + } + zard{ + loc 12; + tabindex 1; + id 1402125; + price 450000; + } + niam{ + loc 13; + tabindex 1; + id 1412082; + price 200000; + } + sabretooth{ + loc 14; + tabindex 1; + id 1412083; + price 250000; + } + sledgehammer{ + loc 15; + tabindex 1; + id 1422084; + price 200000; + } + titan{ + loc 16; + tabindex 1; + id 1422085; + price 250000; + } + nakamaki{ + loc 17; + tabindex 1; + id 1432111; + price 175000; + } + zeco{ + loc 18; + tabindex 1; + id 1432112; + price 225000; + } + axe_pole_arm{ + loc 19; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 20; + tabindex 1; + id 1442150; + price 300000; + } + red_viper{ + loc 21; + tabindex 1; + id 1452142; + price 250000; + } + vaulter_2000{ + loc 22; + tabindex 1; + id 1452143; + price 375000; + } + eagle_crow{ + loc 23; + tabindex 1; + id 1462130; + price 200000; + } + heckler{ + loc 24; + tabindex 1; + id 1462131; + price 250000; + } + bronze_igor{ + loc 25; + tabindex 1; + id 1472091; + price 30000; + } + meba{ + loc 26; + tabindex 1; + id 1472152; + price 60000; + } +} +2022000{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + red_matty{ + loc 1; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 2; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 3; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 4; + tabindex 1; + id 1002144; + price 96000; + } + blue_pole-feather_hat{ + loc 5; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 6; + tabindex 1; + id 1003323; + price 100000; + } + brown_pole-feather_hat{ + loc 7; + tabindex 1; + id 1002135; + price 100000; + } + green_pole-feather_hat{ + loc 8; + tabindex 1; + id 1002137; + price 100000; + } + red_burgler{ + loc 9; + tabindex 1; + id 1002176; + price 100000; + } + blue_burgler{ + loc 10; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 11; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 12; + tabindex 1; + id 1002179; + price 100000; + } + dark_burgler{ + loc 13; + tabindex 1; + id 1002180; + price 100000; + } + yellow_jangoon_armor{ + loc 14; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 15; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 16; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 17; + tabindex 1; + id 1041085; + price 200000; + } + blue_amoria_top{ + loc 18; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 19; + tabindex 1; + id 1041178; + price 120000; + } + red_legolier{ + loc 20; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 21; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 22; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier{ + loc 23; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 24; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 25; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 26; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 27; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 28; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 29; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 30; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 31; + tabindex 1; + id 1041081; + price 180000; + } + black_knucklevest{ + loc 32; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest{ + loc 33; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 34; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 35; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 36; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 37; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 38; + tabindex 1; + id 1041074; + price 180000; + } + white_crusader_chainmail{ + loc 39; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 40; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 41; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 42; + tabindex 1; + id 1051014; + price 112500; + } + white_chaos_robe{ + loc 43; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 44; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 45; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 46; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 47; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 48; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 49; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 50; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 51; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 52; + tabindex 1; + id 1051027; + price 450000; + } + red_avenger{ + loc 53; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 54; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 55; + tabindex 1; + id 1051243; + price 111000; + } + white_jangoon_pants{ + loc 56; + tabindex 1; + id 1060074; + price 180000; + } + brown_jangoon_pants{ + loc 57; + tabindex 1; + id 1060075; + price 180000; + } + red_jangoon_skirt{ + loc 58; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 59; + tabindex 1; + id 1061084; + price 180000; + } + blue_amoria_skirt{ + loc 60; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 61; + tabindex 1; + id 1061047; + price 120000; + } + blue_legolier_pants{ + loc 62; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 63; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 64; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 65; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 66; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 67; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 68; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 69; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 70; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 71; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 72; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 73; + tabindex 1; + id 1061080; + price 160000; + } + red_knucklevest_pants{ + loc 74; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 75; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 77; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 78; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 79; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 80; + tabindex 1; + id 1061069; + price 160000; + } + red_snowshoes{ + loc 81; + tabindex 1; + id 1072168; + price 30000; + } + blue_snowshoes{ + loc 82; + tabindex 1; + id 1072169; + price 28000; + } + green_snowshoes{ + loc 83; + tabindex 1; + id 1072170; + price 29000; + } + black_snowshoes{ + loc 84; + tabindex 1; + id 1072171; + price 29000; + } + purple_snowshoes{ + loc 85; + tabindex 1; + id 1072338; + price 29000; + } + red_triangular_shield{ + loc 86; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 87; + tabindex 1; + id 1092099; + price 200000; + } +} +2020005{ + holy_water{ + loc 0; + tabindex 1; + id 2050003; + price 300; + } + all_cure_potion{ + loc 1; + tabindex 1; + id 2050004; + price 400; + } + the_magic_rock{ + loc 2; + tabindex 1; + id 4006000; + price 5000; + } + the_summoning_rock{ + loc 3; + tabindex 1; + id 4006001; + price 5000; + } +} +2100002{ + gladius{ + loc 0; + tabindex 1; + id 1302186; + price 40000; + } + fireman's_axe{ + loc 1; + tabindex 1; + id 1312082; + price 40000; + } + war_hammer{ + loc 2; + tabindex 1; + id 1322116; + price 40000; + } + cass{ + loc 3; + tabindex 1; + id 1332009; + price 42000; + } + reef_claw{ + loc 4; + tabindex 1; + id 1332162; + price 40000; + } + mithril_wand{ + loc 5; + tabindex 1; + id 1372111; + price 38000; + } + wizard_staff{ + loc 6; + tabindex 1; + id 1382135; + price 20000; + } + scimitar{ + loc 7; + tabindex 1; + id 1402123; + price 150000; + } + blue_axe{ + loc 8; + tabindex 1; + id 1412081; + price 45000; + } + mithril_maul{ + loc 9; + tabindex 1; + id 1422083; + price 45000; + } + forked_spear{ + loc 10; + tabindex 1; + id 1432110; + price 60000; + } + mithril_pole_arm{ + loc 11; + tabindex 1; + id 1442001; + price 60000; + } + ryden{ + loc 12; + tabindex 1; + id 1452141; + price 150000; + } + mountain_crossbow{ + loc 13; + tabindex 1; + id 1462129; + price 30000; + } + steel_titans{ + loc 14; + tabindex 1; + id 1472150; + price 20000; + } + prime_hands{ + loc 15; + tabindex 1; + id 1482114; + price 75000; + } + cold_mind{ + loc 16; + tabindex 1; + id 1492113; + price 75000; + } +} +2100003{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + jousting_helmet{ + loc 1; + tabindex 1; + id 1003316; + price 120000; + } + red_hwarang_shirt{ + loc 2; + tabindex 1; + id 1040021; + price 40000; + } + green_hwarang_shirt{ + loc 3; + tabindex 1; + id 1040026; + price 40000; + } + dark_engrit{ + loc 4; + tabindex 1; + id 1051241; + price 60000; + } + red_engrit{ + loc 5; + tabindex 1; + id 1051011; + price 60000; + } + blue_engrit{ + loc 6; + tabindex 1; + id 1051012; + price 60000; + } + yellow_engrit{ + loc 7; + tabindex 1; + id 1051013; + price 60000; + } + black_martial_arts_pants{ + loc 8; + tabindex 1; + id 1060016; + price 38000; + } + white_martial_arts_pants{ + loc 9; + tabindex 1; + id 1060017; + price 38000; + } + red_martial_arts_pants{ + loc 10; + tabindex 1; + id 1060018; + price 38000; + } + brown_martial_arts_pants{ + loc 11; + tabindex 1; + id 1060019; + price 38000; + } + mithril_buckler{ + loc 12; + tabindex 1; + id 1092097; + price 60000; + } + bronze_pride{ + loc 13; + tabindex 1; + id 1002064; + price 40000; + } + purple_fairy_top{ + loc 14; + tabindex 1; + id 1041041; + price 42000; + } + green_fairy_top{ + loc 15; + tabindex 1; + id 1041175; + price 42000; + } + blue_fairy_top{ + loc 16; + tabindex 1; + id 1041043; + price 42000; + } + blue_wizard_robe{ + loc 17; + tabindex 1; + id 1050003; + price 40000; + } + white_wizard_robe{ + loc 18; + tabindex 1; + id 1050026; + price 40000; + } + black_wizard_robe{ + loc 19; + tabindex 1; + id 1050027; + price 40000; + } + green_wizard_robe{ + loc 20; + tabindex 1; + id 1050028; + price 40000; + } + purple_fairy_skirt{ + loc 21; + tabindex 1; + id 1061034; + price 40000; + } + green_fairy_skirt{ + loc 22; + tabindex 1; + id 1061184; + price 40000; + } + blue_fairy_skirt{ + loc 23; + tabindex 1; + id 1061036; + price 40000; + } + red_hawkeye{ + loc 24; + tabindex 1; + id 1002161; + price 30000; + } + green_hawkeye{ + loc 25; + tabindex 1; + id 1003318; + price 30000; + } + brown_hawkeye{ + loc 26; + tabindex 1; + id 1002164; + price 30000; + } + dark_hawkeye{ + loc 27; + tabindex 1; + id 1002165; + price 30000; + } + red_hunter's_armor{ + loc 28; + tabindex 1; + id 1040069; + price 50000; + } + blue_hunter's_armor{ + loc 29; + tabindex 1; + id 1040070; + price 50000; + } + green_hunter's_armor{ + loc 30; + tabindex 1; + id 1040067; + price 50000; + } + dark_hunter's_armor{ + loc 31; + tabindex 1; + id 1040173; + price 50000; + } + red_huntress_armor{ + loc 32; + tabindex 1; + id 1041056; + price 50000; + } + green_huntress_armor{ + loc 33; + tabindex 1; + id 1041176; + price 50000; + } + black_huntress_armor{ + loc 34; + tabindex 1; + id 1041055; + price 50000; + } + blue_hunter's_pants{ + loc 35; + tabindex 1; + id 1060059; + price 44000; + } + red_hunter's_pants{ + loc 36; + tabindex 1; + id 1060058; + price 44000; + } + green_hunter's_pants{ + loc 37; + tabindex 1; + id 1060161; + price 44000; + } + dark_hunter's_pants{ + loc 38; + tabindex 1; + id 1060057; + price 44000; + } + red_huntress_pants{ + loc 39; + tabindex 1; + id 1061052; + price 44000; + } + green_huntress_pants{ + loc 40; + tabindex 1; + id 1061185; + price 44000; + } + black_huntress_pants{ + loc 41; + tabindex 1; + id 1061051; + price 44000; + } + red_guise{ + loc 42; + tabindex 1; + id 1002171; + price 30000; + } + blue_guise{ + loc 43; + tabindex 1; + id 1002172; + price 30000; + } + green_guise{ + loc 44; + tabindex 1; + id 1002173; + price 30000; + } + brown_guise{ + loc 45; + tabindex 1; + id 1003319; + price 30000; + } + dark_guise{ + loc 46; + tabindex 1; + id 1002175; + price 30000; + } + dark_brown_stealer{ + loc 47; + tabindex 1; + id 1040174; + price 45000; + } + dark_silver_stealer{ + loc 48; + tabindex 1; + id 1040058; + price 45000; + } + red_gold_stealer{ + loc 49; + tabindex 1; + id 1040059; + price 45000; + } + silver_black_stealer{ + loc 50; + tabindex 1; + id 1040060; + price 45000; + } + red_steal{ + loc 51; + tabindex 1; + id 1041047; + price 45000; + } + black_steal{ + loc 52; + tabindex 1; + id 1041177; + price 45000; + } + blue_steal{ + loc 53; + tabindex 1; + id 1041049; + price 45000; + } + purple_steal{ + loc 54; + tabindex 1; + id 1041050; + price 45000; + } + dark_brown_stealer_pants{ + loc 55; + tabindex 1; + id 1060162; + price 40000; + } + dark_silver_stealer_pants{ + loc 56; + tabindex 1; + id 1060044; + price 40000; + } + red_/_gold_stealer_pants{ + loc 57; + tabindex 1; + id 1060045; + price 40000; + } + silver_/_black_stealer_pants{ + loc 58; + tabindex 1; + id 1060046; + price 40000; + } + red_steal_pants{ + loc 59; + tabindex 1; + id 1061043; + price 40000; + } + black_steal_pants{ + loc 60; + tabindex 1; + id 1061186; + price 40000; + } + blue_steal_pants{ + loc 61; + tabindex 1; + id 1061045; + price 40000; + } + purple_steal_pants{ + loc 62; + tabindex 1; + id 1061046; + price 40000; + } + brown_pollard{ + loc 63; + tabindex 1; + id 1052393; + price 90000; + } + white_oceania_cap{ + loc 64; + tabindex 1; + id 1003320; + price 40000; + } +} +2100004{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + unagi{ + loc 10; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 11; + tabindex 1; + id 4032352; + price 1650; + } + watermelon{ + loc 12; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 13; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 14; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 15; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 4034406; + price 310; + } + chocolate{ + loc 20; + tabindex 1; + id 4033144; + price 3000; + } + antidote{ + loc 21; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 22; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 23; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 24; + tabindex 1; + id 2050003; + price 500; + } + return_scroll_-_nearest_town{ + loc 25; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 26; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061000; + price 1; + } + pet_food{ + loc 28; + tabindex 1; + id 4034590; + price 25; + } + subi_throwing-stars{ + loc 29; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 30; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2070003{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + yellow_jangoon_armor{ + loc 1; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 2; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 3; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 4; + tabindex 1; + id 1041085; + price 200000; + } + white_crusader_chainmail{ + loc 5; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 6; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 7; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 8; + tabindex 1; + id 1051014; + price 112500; + } + brown_jangoon_pants{ + loc 9; + tabindex 1; + id 1060075; + price 180000; + } + white_jangoon_pants{ + loc 10; + tabindex 1; + id 1060074; + price 180000; + } + red_jangoon_skirt{ + loc 11; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 12; + tabindex 1; + id 1061084; + price 180000; + } + red_triangular_shield{ + loc 13; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 14; + tabindex 1; + id 1092099; + price 200000; + } + red_matty{ + loc 15; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 16; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 17; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 18; + tabindex 1; + id 1002144; + price 96000; + } + blue_amoria_top{ + loc 19; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 20; + tabindex 1; + id 1041178; + price 120000; + } + white_chaos_robe{ + loc 21; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 22; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 23; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 24; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 25; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 26; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 27; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 28; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 29; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 30; + tabindex 1; + id 1051027; + price 450000; + } + blue_amoria_skirt{ + loc 31; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 32; + tabindex 1; + id 1061047; + price 120000; + } + blue_pole-feather_hat{ + loc 33; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 34; + tabindex 1; + id 1003323; + price 100000; + } + green_pole-feather_hat{ + loc 35; + tabindex 1; + id 1002137; + price 100000; + } + red_legolier{ + loc 36; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 37; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 38; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier{ + loc 39; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 40; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 41; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 42; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 43; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 44; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 45; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 46; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 47; + tabindex 1; + id 1041081; + price 180000; + } + blue_legolier_pants{ + loc 48; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 49; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 50; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 51; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 52; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 53; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 54; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 55; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 56; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 57; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 58; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 59; + tabindex 1; + id 1061080; + price 160000; + } + red_burgler{ + loc 60; + tabindex 1; + id 1002176; + price 100000; + } + blue_burgler{ + loc 61; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 62; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 63; + tabindex 1; + id 1002179; + price 100000; + } + dark_burgler{ + loc 64; + tabindex 1; + id 1002180; + price 100000; + } + black_knucklevest{ + loc 65; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest{ + loc 66; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 67; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 68; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 69; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 70; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 71; + tabindex 1; + id 1041074; + price 180000; + } + red_avenger{ + loc 72; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 73; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 74; + tabindex 1; + id 1051243; + price 111000; + } + red_knucklevest_pants{ + loc 75; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 77; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 78; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 79; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 80; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 81; + tabindex 1; + id 1061069; + price 160000; + } + brown_pollard{ + loc 82; + tabindex 1; + id 1052393; + price 90000; + } + blue_brace_look{ + loc 83; + tabindex 1; + id 1052394; + price 100000; + } + red_barbay{ + loc 84; + tabindex 1; + id 1052395; + price 120000; + } + blue_den_marine{ + loc 85; + tabindex 1; + id 1003325; + price 75000; + } +} +2070002{ + cutlus{ + loc 0; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 1; + tabindex 1; + id 1302188; + price 225000; + } + dankke{ + loc 2; + tabindex 1; + id 1312083; + price 100000; + } + blue_counter{ + loc 3; + tabindex 1; + id 1312084; + price 175000; + } + heavy_hammer{ + loc 4; + tabindex 1; + id 1322117; + price 100000; + } + jacker{ + loc 5; + tabindex 1; + id 1322118; + price 175000; + } + halfmoon_zamadar{ + loc 6; + tabindex 1; + id 1332001; + price 200000; + } + gephart{ + loc 7; + tabindex 1; + id 1332163; + price 375000; + } + bazlud{ + loc 8; + tabindex 1; + id 1332011; + price 425000; + } + wizard_wand{ + loc 9; + tabindex 1; + id 1372112; + price 175000; + } + fairy_wand{ + loc 10; + tabindex 1; + id 1372113; + price 400000; + } + lionheart{ + loc 11; + tabindex 1; + id 1402124; + price 350000; + } + zard{ + loc 12; + tabindex 1; + id 1402125; + price 450000; + } + niam{ + loc 13; + tabindex 1; + id 1412082; + price 200000; + } + sabretooth{ + loc 14; + tabindex 1; + id 1412083; + price 250000; + } + sledgehammer{ + loc 15; + tabindex 1; + id 1422084; + price 200000; + } + titan{ + loc 16; + tabindex 1; + id 1422085; + price 250000; + } + nakamaki{ + loc 17; + tabindex 1; + id 1432111; + price 175000; + } + zeco{ + loc 18; + tabindex 1; + id 1432112; + price 225000; + } + axe_pole_arm{ + loc 19; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 20; + tabindex 1; + id 1442150; + price 300000; + } + red_viper{ + loc 21; + tabindex 1; + id 1452142; + price 250000; + } + vaulter_2000{ + loc 22; + tabindex 1; + id 1452143; + price 375000; + } + eagle_crow{ + loc 23; + tabindex 1; + id 1462130; + price 200000; + } + heckler{ + loc 24; + tabindex 1; + id 1462131; + price 250000; + } + bronze_igor{ + loc 25; + tabindex 1; + id 1472091; + price 30000; + } + meba{ + loc 26; + tabindex 1; + id 1472152; + price 60000; + } + silver_maiden{ + loc 27; + tabindex 1; + id 1482115; + price 100000; + } + neozard{ + loc 28; + tabindex 1; + id 1482116; + price 150000; + } + shooting_star{ + loc 29; + tabindex 1; + id 1702155; + price 100000; + } + lunar_shooter{ + loc 30; + tabindex 1; + id 1492115; + price 160000; + } +} +2070001{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + watermelon{ + loc 10; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 11; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 12; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 13; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 14; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 15; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 16; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 17; + tabindex 1; + id 4034406; + price 310; + } + melting_cheese{ + loc 18; + tabindex 1; + id 2020012; + price 4500; + } + reindeer_milk{ + loc 19; + tabindex 1; + id 2020013; + price 5600; + } + sunrise_dew{ + loc 20; + tabindex 1; + id 2020045; + price 8100; + } + sunset_dew{ + loc 21; + tabindex 1; + id 2020046; + price 10200; + } + unagi{ + loc 22; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 23; + tabindex 1; + id 4032352; + price 1650; + } + return_scroll_-_nearest_town{ + loc 24; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 25; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 26; + tabindex 1; + id 2061000; + price 1; + } + bronze_arrow_for_bow{ + loc 27; + tabindex 1; + id 2060001; + price 10; + } + bronze_arrow_for_crossbow{ + loc 28; + tabindex 1; + id 2061001; + price 10; + } + subi_throwing-stars{ + loc 29; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 30; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +9270065{ + chicken_kapitan{ + loc 0; + tabindex 1; + id 2022476; + price 4200; + } + mee_siam{ + loc 1; + tabindex 1; + id 2022477; + price 9200; + } + rojak{ + loc 2; + tabindex 1; + id 2022478; + price 3200; + } + kangkung_belacan{ + loc 3; + tabindex 1; + id 2022479; + price 3800; + } + kuih{ + loc 4; + tabindex 1; + id 2022480; + price 12000; + } + laksa{ + loc 5; + tabindex 1; + id 2022203; + price 800; + } + hokkien_mee{ + loc 6; + tabindex 1; + id 2022204; + price 1200; + } + carrot_cake{ + loc 7; + tabindex 1; + id 2022205; + price 1800; + } + chicken_rice{ + loc 8; + tabindex 1; + id 2022206; + price 2200; + } + satay{ + loc 9; + tabindex 1; + id 2022207; + price 2600; + } + guava{ + loc 10; + tabindex 1; + id 2022208; + price 1000; + } + rambutan{ + loc 11; + tabindex 1; + id 2022209; + price 1600; + } + dragon_fruit{ + loc 12; + tabindex 1; + id 2022210; + price 3200; + } + durian{ + loc 13; + tabindex 1; + id 2022211; + price 6400; + } + pepper_crab{ + loc 14; + tabindex 1; + id 2022214; + price 3200; + } + chili_crab{ + loc 15; + tabindex 1; + id 2022215; + price 6800; + } + antidote{ + loc 16; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 17; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 18; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 19; + tabindex 1; + id 2050003; + price 500; + } + return_scroll_-_nearest_town{ + loc 20; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 21; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 22; + tabindex 1; + id 2061000; + price 1; + } +} +9270057{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + unagi{ + loc 10; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 11; + tabindex 1; + id 4032352; + price 1650; + } + watermelon{ + loc 12; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 13; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 14; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 15; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 4034406; + price 310; + } + chocolate{ + loc 20; + tabindex 1; + id 4033144; + price 3000; + } + antidote{ + loc 21; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 22; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 23; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 24; + tabindex 1; + id 2050003; + price 500; + } + return_scroll_-_nearest_town{ + loc 25; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 26; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061000; + price 1; + } + mushroom_miso_ramen{ + loc 28; + tabindex 1; + id 2022015; + price 12000; + } +} +9270055{ + gladius{ + loc 0; + tabindex 1; + id 1302186; + price 40000; + } + cutlus{ + loc 1; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 2; + tabindex 1; + id 1302188; + price 225000; + } + fireman's_axe{ + loc 3; + tabindex 1; + id 1312082; + price 40000; + } + dankke{ + loc 4; + tabindex 1; + id 1312083; + price 100000; + } + blue_counter{ + loc 5; + tabindex 1; + id 1312084; + price 175000; + } + war_hammer{ + loc 6; + tabindex 1; + id 1322116; + price 40000; + } + heavy_hammer{ + loc 7; + tabindex 1; + id 1322117; + price 100000; + } + jacker{ + loc 8; + tabindex 1; + id 1322118; + price 175000; + } + cass{ + loc 9; + tabindex 1; + id 1332009; + price 42000; + } + reef_claw{ + loc 10; + tabindex 1; + id 1332162; + price 40000; + } + halfmoon_zamadar{ + loc 11; + tabindex 1; + id 1332001; + price 200000; + } + gephart{ + loc 12; + tabindex 1; + id 1332163; + price 375000; + } + bazlud{ + loc 13; + tabindex 1; + id 1332011; + price 425000; + } + mithril_wand{ + loc 14; + tabindex 1; + id 1372111; + price 38000; + } + wizard_wand{ + loc 15; + tabindex 1; + id 1372112; + price 175000; + } + fairy_wand{ + loc 16; + tabindex 1; + id 1372113; + price 400000; + } + wizard_staff{ + loc 17; + tabindex 1; + id 1382135; + price 20000; + } + scimitar{ + loc 18; + tabindex 1; + id 1402123; + price 150000; + } + lionheart{ + loc 19; + tabindex 1; + id 1402124; + price 350000; + } + zard{ + loc 20; + tabindex 1; + id 1402125; + price 450000; + } + blue_axe{ + loc 21; + tabindex 1; + id 1412081; + price 45000; + } + niam{ + loc 22; + tabindex 1; + id 1412082; + price 200000; + } + sabretooth{ + loc 23; + tabindex 1; + id 1412083; + price 250000; + } + mithril_maul{ + loc 24; + tabindex 1; + id 1422083; + price 45000; + } + sledgehammer{ + loc 25; + tabindex 1; + id 1422084; + price 200000; + } + titan{ + loc 26; + tabindex 1; + id 1422085; + price 250000; + } + forked_spear{ + loc 27; + tabindex 1; + id 1432110; + price 60000; + } + nakamaki{ + loc 28; + tabindex 1; + id 1432111; + price 175000; + } + zeco{ + loc 29; + tabindex 1; + id 1432112; + price 225000; + } + mithril_pole_arm{ + loc 30; + tabindex 1; + id 1442001; + price 60000; + } + axe_pole_arm{ + loc 31; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 32; + tabindex 1; + id 1442150; + price 300000; + } + ryden{ + loc 33; + tabindex 1; + id 1452141; + price 150000; + } + red_viper{ + loc 34; + tabindex 1; + id 1452142; + price 250000; + } + vaulter_2000{ + loc 35; + tabindex 1; + id 1452143; + price 375000; + } + mountain_crossbow{ + loc 36; + tabindex 1; + id 1462129; + price 30000; + } + eagle_crow{ + loc 37; + tabindex 1; + id 1462130; + price 200000; + } + heckler{ + loc 38; + tabindex 1; + id 1462131; + price 250000; + } + steel_titans{ + loc 39; + tabindex 1; + id 1472150; + price 20000; + } + bronze_igor{ + loc 40; + tabindex 1; + id 1472091; + price 30000; + } + meba{ + loc 41; + tabindex 1; + id 1472152; + price 60000; + } + norman_grip{ + loc 42; + tabindex 1; + id 1482113; + price 20000; + } + prime_hands{ + loc 43; + tabindex 1; + id 1482114; + price 75000; + } + silver_maiden{ + loc 44; + tabindex 1; + id 1482115; + price 100000; + } + neozard{ + loc 45; + tabindex 1; + id 1482116; + price 150000; + } + golden_hook{ + loc 46; + tabindex 1; + id 1492112; + price 22000; + } + cold_mind{ + loc 47; + tabindex 1; + id 1492113; + price 75000; + } + shooting_star{ + loc 48; + tabindex 1; + id 1702155; + price 100000; + } + lunar_shooter{ + loc 49; + tabindex 1; + id 1492115; + price 160000; + } +} +9270056{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + yellow_jangoon_armor{ + loc 1; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 2; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 3; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 4; + tabindex 1; + id 1041085; + price 200000; + } + white_crusader_chainmail{ + loc 5; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 6; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 7; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 8; + tabindex 1; + id 1051014; + price 112500; + } + brown_jangoon_pants{ + loc 9; + tabindex 1; + id 1060075; + price 180000; + } + white_jangoon_pants{ + loc 10; + tabindex 1; + id 1060074; + price 180000; + } + red_jangoon_skirt{ + loc 11; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 12; + tabindex 1; + id 1061084; + price 180000; + } + red_triangular_shield{ + loc 13; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 14; + tabindex 1; + id 1092099; + price 200000; + } + red_matty{ + loc 15; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 16; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 17; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 18; + tabindex 1; + id 1002144; + price 96000; + } + blue_amoria_top{ + loc 19; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 20; + tabindex 1; + id 1041178; + price 120000; + } + white_chaos_robe{ + loc 21; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 22; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 23; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 24; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 25; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 26; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 27; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 28; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 29; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 30; + tabindex 1; + id 1051027; + price 450000; + } + blue_amoria_skirt{ + loc 31; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 32; + tabindex 1; + id 1061047; + price 120000; + } + blue_pole-feather_hat{ + loc 33; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 34; + tabindex 1; + id 1003323; + price 100000; + } + brown_pole-feather_hat{ + loc 35; + tabindex 1; + id 1002135; + price 100000; + } + green_pole-feather_hat{ + loc 36; + tabindex 1; + id 1002137; + price 100000; + } + red_legolier{ + loc 37; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 38; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 39; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier{ + loc 40; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 41; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 42; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 43; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 44; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 45; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 46; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 47; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 48; + tabindex 1; + id 1041081; + price 180000; + } + blue_legolier_pants{ + loc 49; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 50; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 51; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 52; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 53; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 54; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 55; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 56; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 57; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 58; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 59; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 60; + tabindex 1; + id 1061080; + price 160000; + } + red_burgler{ + loc 61; + tabindex 1; + id 1002176; + price 100000; + } + blue_burgler{ + loc 62; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 63; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 64; + tabindex 1; + id 1002179; + price 100000; + } + dark_burgler{ + loc 65; + tabindex 1; + id 1002180; + price 100000; + } + black_knucklevest{ + loc 66; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest{ + loc 67; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 68; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 69; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 70; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 71; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 72; + tabindex 1; + id 1041074; + price 180000; + } + red_avenger{ + loc 73; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 74; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 75; + tabindex 1; + id 1051243; + price 111000; + } + red_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 77; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 78; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 79; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 80; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 81; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 82; + tabindex 1; + id 1061069; + price 160000; + } +} +9110004{ + dango{ + loc 0; + tabindex 1; + id 2022014; + price 650; + } + tri-colored_dango{ + loc 1; + tabindex 1; + id 2022023; + price 1350; + } +} +9110005{ + takoyaki_(octopus_ball){ + loc 0; + tabindex 1; + id 2022024; + price 2000; + } + takoyaki_(jumbo){ + loc 1; + tabindex 1; + id 2022025; + price 4200; + } +} +9110006{ + yakisoba{ + loc 0; + tabindex 1; + id 2022026; + price 1800; + } + yakisoba_(x2){ + loc 1; + tabindex 1; + id 2022027; + price 3800; + } +} +9110003{ + fish_cake_(skewer){ + loc 0; + tabindex 1; + id 2022021; + price 550; + } + fish_cake_(dish){ + loc 1; + tabindex 1; + id 2022022; + price 1300; + } +} +9110007{ + ramen{ + loc 0; + tabindex 1; + id 2022017; + price 1100; + } + kinoko_ramen_(roasted_pork){ + loc 1; + tabindex 1; + id 2022018; + price 1600; + } + kinoko_ramen_(pig_head){ + loc 2; + tabindex 1; + id 2022019; + price 850; + } + kinoko_ramen_(salt){ + loc 3; + tabindex 1; + id 2022020; + price 550; + } +} +9201058{ + jousting_helmet{ + loc 0; + tabindex 1; + id 1003316; + price 120500; + } + red_hwarang_shirt{ + loc 1; + tabindex 1; + id 1040021; + price 40500; + } + green_hwarang_shirt{ + loc 2; + tabindex 1; + id 1040026; + price 40500; + } + dark_engrit{ + loc 3; + tabindex 1; + id 1051241; + price 60500; + } + red_engrit{ + loc 4; + tabindex 1; + id 1051011; + price 60500; + } + blue_engrit{ + loc 5; + tabindex 1; + id 1051012; + price 60500; + } + yellow_engrit{ + loc 6; + tabindex 1; + id 1051013; + price 60500; + } + black_martial_arts_pants{ + loc 7; + tabindex 1; + id 1060016; + price 32500; + } + white_martial_arts_pants{ + loc 8; + tabindex 1; + id 1060017; + price 32500; + } + red_martial_arts_pants{ + loc 9; + tabindex 1; + id 1060018; + price 32500; + } + brown_martial_arts_pants{ + loc 10; + tabindex 1; + id 1060019; + price 32500; + } + mithril_buckler{ + loc 11; + tabindex 1; + id 1092097; + price 60500; + } + bronze_pride{ + loc 12; + tabindex 1; + id 1002064; + price 40500; + } + purple_fairy_top{ + loc 13; + tabindex 1; + id 1041041; + price 42500; + } + green_fairy_top{ + loc 14; + tabindex 1; + id 1041175; + price 42500; + } + blue_fairy_top{ + loc 15; + tabindex 1; + id 1041043; + price 42500; + } + blue_wizard_robe{ + loc 16; + tabindex 1; + id 1050003; + price 40500; + } + white_wizard_robe{ + loc 17; + tabindex 1; + id 1050026; + price 40500; + } + black_wizard_robe{ + loc 18; + tabindex 1; + id 1050027; + price 40500; + } + green_wizard_robe{ + loc 19; + tabindex 1; + id 1050028; + price 40500; + } + purple_fairy_skirt{ + loc 20; + tabindex 1; + id 1061034; + price 40500; + } + green_fairy_skirt{ + loc 21; + tabindex 1; + id 1061184; + price 40500; + } + blue_fairy_skirt{ + loc 22; + tabindex 1; + id 1061036; + price 40500; + } + red_hawkeye{ + loc 23; + tabindex 1; + id 1002161; + price 30500; + } + blue_hawkeye{ + loc 24; + tabindex 1; + id 1002162; + price 30500; + } + green_hawkeye{ + loc 25; + tabindex 1; + id 1003318; + price 30500; + } + brown_hawkeye{ + loc 26; + tabindex 1; + id 1002164; + price 30500; + } + dark_hawkeye{ + loc 27; + tabindex 1; + id 1002165; + price 30500; + } + red_hunter's_armor{ + loc 28; + tabindex 1; + id 1040069; + price 50500; + } + blue_hunter's_armor{ + loc 29; + tabindex 1; + id 1040070; + price 50500; + } + green_hunter's_armor{ + loc 30; + tabindex 1; + id 1040067; + price 50500; + } + dark_hunter's_armor{ + loc 31; + tabindex 1; + id 1040173; + price 50500; + } + red_huntress_armor{ + loc 32; + tabindex 1; + id 1041056; + price 50500; + } + green_huntress_armor{ + loc 33; + tabindex 1; + id 1041176; + price 50500; + } + black_huntress_armor{ + loc 34; + tabindex 1; + id 1041055; + price 50500; + } + blue_hunter's_pants{ + loc 35; + tabindex 1; + id 1060059; + price 44500; + } + red_hunter's_pants{ + loc 36; + tabindex 1; + id 1060058; + price 44500; + } + green_hunter's_pants{ + loc 37; + tabindex 1; + id 1060161; + price 44500; + } + dark_hunter's_pants{ + loc 38; + tabindex 1; + id 1060057; + price 44500; + } + red_huntress_pants{ + loc 39; + tabindex 1; + id 1061052; + price 44500; + } + green_huntress_pants{ + loc 40; + tabindex 1; + id 1061185; + price 44500; + } + black_huntress_pants{ + loc 41; + tabindex 1; + id 1061051; + price 44500; + } + red_guise{ + loc 42; + tabindex 1; + id 1002171; + price 30500; + } + blue_guise{ + loc 43; + tabindex 1; + id 1002172; + price 30500; + } + green_guise{ + loc 44; + tabindex 1; + id 1002173; + price 30500; + } + brown_guise{ + loc 45; + tabindex 1; + id 1003319; + price 30500; + } + black_guise{ + loc 46; + tabindex 1; + id 1002175; + price 30500; + } + dark_brown_stealer{ + loc 47; + tabindex 1; + id 1040174; + price 45500; + } + dark_silver_stealer{ + loc 48; + tabindex 1; + id 1040058; + price 45500; + } + red_gold_stealer{ + loc 49; + tabindex 1; + id 1040059; + price 45500; + } + silver_black_stealer{ + loc 50; + tabindex 1; + id 1040060; + price 45500; + } + red_steal{ + loc 51; + tabindex 1; + id 1041047; + price 45500; + } + black_steal{ + loc 52; + tabindex 1; + id 1041177; + price 45500; + } + blue_steal{ + loc 53; + tabindex 1; + id 1041049; + price 45500; + } + purple_steal{ + loc 54; + tabindex 1; + id 1041050; + price 45500; + } + dark_brown_stealer_pants{ + loc 55; + tabindex 1; + id 1060162; + price 40500; + } + dark_silver_stealer_pants{ + loc 56; + tabindex 1; + id 1060044; + price 40500; + } + red_/_gold_stealer_pants{ + loc 57; + tabindex 1; + id 1060045; + price 40500; + } + silver_/_black_stealer_pants{ + loc 58; + tabindex 1; + id 1060046; + price 40500; + } + red_steal_pants{ + loc 59; + tabindex 1; + id 1061043; + price 40500; + } + black_steal_pants{ + loc 60; + tabindex 1; + id 1061186; + price 40500; + } + blue_steal_pants{ + loc 61; + tabindex 1; + id 1061045; + price 40500; + } + purple_steal_pants{ + loc 62; + tabindex 1; + id 1061046; + price 40500; + } +} +9201060{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + thief_elixir{ + loc 5; + tabindex 1; + id 2002016; + price 5000; + } + archer_elixir{ + loc 6; + tabindex 1; + id 2002019; + price 5000; + } + warrior_elixir{ + loc 7; + tabindex 1; + id 2002017; + price 5000; + } + wizard_elixir{ + loc 8; + tabindex 1; + id 2002018; + price 5000; + } + mana_bull{ + loc 9; + tabindex 1; + id 2002020; + price 2800; + } + honster{ + loc 10; + tabindex 1; + id 2002021; + price 2800; + } + ginseng_root{ + loc 11; + tabindex 1; + id 2002022; + price 2100; + } + ginger_ale{ + loc 12; + tabindex 1; + id 2002026; + price 3800; + } + sorcerer_elixir{ + loc 13; + tabindex 1; + id 2002024; + price 1500; + } + barbarian_elixir{ + loc 14; + tabindex 1; + id 2002025; + price 1500; + } + apple{ + loc 15; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 4034406; + price 310; + } + grilled_cheese{ + loc 20; + tabindex 1; + id 2022189; + price 1000; + } + supreme_pizza{ + loc 21; + tabindex 1; + id 2022191; + price 1000; + } + waffle{ + loc 22; + tabindex 1; + id 2022192; + price 600; + } + unagi{ + loc 23; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 24; + tabindex 1; + id 4032352; + price 1650; + } + watermelon{ + loc 25; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 26; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 27; + tabindex 1; + id 2001514; + price 4000; + } + cherry_pie{ + loc 28; + tabindex 1; + id 2022190; + price 3000; + } + melting_cheese{ + loc 29; + tabindex 1; + id 2020012; + price 4500; + } + reindeer_milk{ + loc 30; + tabindex 1; + id 2020013; + price 5600; + } + sunrise_dew{ + loc 31; + tabindex 1; + id 2020045; + price 8100; + } + sunset_dew{ + loc 32; + tabindex 1; + id 2020046; + price 10200; + } + mapleade{ + loc 33; + tabindex 1; + id 2022195; + price 150000; + } + return_scroll_-_nearest_town{ + loc 34; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 35; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 36; + tabindex 1; + id 2061000; + price 1; + } +} +9201059{ + gladius{ + loc 0; + tabindex 1; + id 1302186; + price 42500; + } + onyx_blade{ + loc 1; + tabindex 1; + id 1302068; + price 352500; + } + fireman's_axe{ + loc 2; + tabindex 1; + id 1312082; + price 42500; + } + war_hammer{ + loc 3; + tabindex 1; + id 1322116; + price 42500; + } + cass{ + loc 4; + tabindex 1; + id 1332009; + price 44500; + } + reef_claw{ + loc 5; + tabindex 1; + id 1332162; + price 42500; + } + mithril_wand{ + loc 6; + tabindex 1; + id 1372111; + price 40500; + } + wizard_staff{ + loc 7; + tabindex 1; + id 1382135; + price 22500; + } + scimitar{ + loc 8; + tabindex 1; + id 1402123; + price 152500; + } + blue_axe{ + loc 9; + tabindex 1; + id 1412081; + price 47500; + } + mithril_maul{ + loc 10; + tabindex 1; + id 1422083; + price 47500; + } + forked_spear{ + loc 11; + tabindex 1; + id 1432110; + price 62500; + } + mithril_pole_arm{ + loc 12; + tabindex 1; + id 1442001; + price 62500; + } + ryden{ + loc 13; + tabindex 1; + id 1452141; + price 152500; + } + mountain_crossbow{ + loc 14; + tabindex 1; + id 1462129; + price 32500; + } + steel_titans{ + loc 15; + tabindex 1; + id 1472150; + price 22500; + } +} +2050000{ + cutlus{ + loc 0; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 1; + tabindex 1; + id 1302188; + price 225000; + } + dankke{ + loc 2; + tabindex 1; + id 1312083; + price 100000; + } + blue_counter{ + loc 3; + tabindex 1; + id 1312084; + price 175000; + } + heavy_hammer{ + loc 4; + tabindex 1; + id 1322117; + price 100000; + } + jacker{ + loc 5; + tabindex 1; + id 1322118; + price 175000; + } + halfmoon_zamadar{ + loc 6; + tabindex 1; + id 1332001; + price 200000; + } + gephart{ + loc 7; + tabindex 1; + id 1332163; + price 375000; + } + bazlud{ + loc 8; + tabindex 1; + id 1332011; + price 425000; + } + wizard_wand{ + loc 9; + tabindex 1; + id 1372112; + price 175000; + } + fairy_wand{ + loc 10; + tabindex 1; + id 1372113; + price 400000; + } + lionheart{ + loc 11; + tabindex 1; + id 1402124; + price 350000; + } + zard{ + loc 12; + tabindex 1; + id 1402125; + price 450000; + } + niam{ + loc 13; + tabindex 1; + id 1412082; + price 200000; + } + sabretooth{ + loc 14; + tabindex 1; + id 1412083; + price 250000; + } + sledgehammer{ + loc 15; + tabindex 1; + id 1422084; + price 200000; + } + titan{ + loc 16; + tabindex 1; + id 1422085; + price 250000; + } + nakamaki{ + loc 17; + tabindex 1; + id 1432111; + price 175000; + } + zeco{ + loc 18; + tabindex 1; + id 1432112; + price 225000; + } + axe_pole_arm{ + loc 19; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 20; + tabindex 1; + id 1442150; + price 300000; + } + red_viper{ + loc 21; + tabindex 1; + id 1452142; + price 250000; + } + vaulter_2000{ + loc 22; + tabindex 1; + id 1452143; + price 375000; + } + eagle_crow{ + loc 23; + tabindex 1; + id 1462130; + price 200000; + } + heckler{ + loc 24; + tabindex 1; + id 1462131; + price 250000; + } + bronze_igor{ + loc 25; + tabindex 1; + id 1472091; + price 30000; + } + meba{ + loc 26; + tabindex 1; + id 1472152; + price 60000; + } + silver_maiden{ + loc 27; + tabindex 1; + id 1482115; + price 100000; + } + neozard{ + loc 28; + tabindex 1; + id 1482116; + price 150000; + } + shooting_star{ + loc 29; + tabindex 1; + id 1702155; + price 100000; + } + lunar_shooter{ + loc 30; + tabindex 1; + id 1492115; + price 160000; + } +} +2050003{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + yellow_jangoon_armor{ + loc 1; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 2; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 3; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 4; + tabindex 1; + id 1041085; + price 200000; + } + white_crusader_chainmail{ + loc 5; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 6; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 7; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 8; + tabindex 1; + id 1051014; + price 112500; + } + brown_jangoon_pants{ + loc 9; + tabindex 1; + id 1060075; + price 180000; + } + white_jangoon_pants{ + loc 10; + tabindex 1; + id 1060074; + price 180000; + } + red_jangoon_skirt{ + loc 11; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 12; + tabindex 1; + id 1061084; + price 180000; + } + red_triangular_shield{ + loc 13; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 14; + tabindex 1; + id 1092099; + price 200000; + } + red_matty{ + loc 15; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 16; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 17; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 18; + tabindex 1; + id 1002144; + price 96000; + } + blue_amoria_top{ + loc 19; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 20; + tabindex 1; + id 1041178; + price 120000; + } + white_chaos_robe{ + loc 21; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 22; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 23; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 24; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 25; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 26; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 27; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 28; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 29; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 30; + tabindex 1; + id 1051027; + price 450000; + } + blue_amoria_skirt{ + loc 31; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 32; + tabindex 1; + id 1061047; + price 120000; + } + blue_pole-feather_hat{ + loc 33; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 34; + tabindex 1; + id 1003323; + price 100000; + } + green_pole-feather_hat{ + loc 35; + tabindex 1; + id 1002137; + price 100000; + } + red_legolier{ + loc 36; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 37; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 38; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier{ + loc 39; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 40; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 41; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 42; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 43; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 44; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 45; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 46; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 47; + tabindex 1; + id 1041081; + price 180000; + } + blue_legolier_pants{ + loc 48; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 49; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 50; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 51; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 52; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 53; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 54; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 55; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 56; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 57; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 58; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 59; + tabindex 1; + id 1061080; + price 160000; + } + red_burgler{ + loc 60; + tabindex 1; + id 1002176; + price 100000; + } + blue_burgler{ + loc 61; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 62; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 63; + tabindex 1; + id 1002179; + price 100000; + } + dark_burgler{ + loc 64; + tabindex 1; + id 1002180; + price 100000; + } + black_knucklevest{ + loc 65; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest{ + loc 66; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 67; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 68; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 69; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 70; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 71; + tabindex 1; + id 1041074; + price 180000; + } + red_avenger{ + loc 72; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 73; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 74; + tabindex 1; + id 1051243; + price 111000; + } + red_knucklevest_pants{ + loc 75; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 77; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 78; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 79; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 80; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 81; + tabindex 1; + id 1061069; + price 160000; + } + blue_brace_look{ + loc 82; + tabindex 1; + id 1052394; + price 100000; + } + red_barbay{ + loc 83; + tabindex 1; + id 1052395; + price 120000; + } + blue_den_marine{ + loc 84; + tabindex 1; + id 1003325; + price 75000; + } +} +2051000{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 47; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 152; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 304; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 190; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 589; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 475; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 380; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 475; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 475; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 475; + } + pain_reliever{ + loc 10; + tabindex 1; + id 2002011; + price 1200; + } + watermelon{ + loc 11; + tabindex 1; + id 2001512; + price 3040; + } + ice_cream_pop{ + loc 12; + tabindex 1; + id 2001513; + price 2185; + } + very_special_sundae{ + loc 13; + tabindex 1; + id 2001514; + price 3800; + } + apple{ + loc 14; + tabindex 1; + id 4034403; + price 28; + } + egg{ + loc 15; + tabindex 1; + id 4220124; + price 47; + } + meat{ + loc 16; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 17; + tabindex 1; + id 4034405; + price 95; + } + lemon{ + loc 18; + tabindex 1; + id 4034406; + price 294; + } + melting_cheese{ + loc 19; + tabindex 1; + id 2020012; + price 4680; + } + reindeer_milk{ + loc 20; + tabindex 1; + id 2020013; + price 5600; + } + sunrise_dew{ + loc 21; + tabindex 1; + id 2020045; + price 7695; + } + sunset_dew{ + loc 22; + tabindex 1; + id 2020046; + price 9690; + } + unagi{ + loc 23; + tabindex 1; + id 3994092; + price 1045; + } + pure_water{ + loc 24; + tabindex 1; + id 4032352; + price 1567; + } + return_scroll_-_nearest_town{ + loc 25; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 26; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061000; + price 1; + } + bronze_arrow_for_bow{ + loc 28; + tabindex 1; + id 2060001; + price 10; + } + bronze_arrow_for_crossbow{ + loc 29; + tabindex 1; + id 2061001; + price 10; + } + subi_throwing-stars{ + loc 30; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 31; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +2080004{ + pet_food{ + loc 0; + tabindex 1; + id 4034590; + price 30; + } + revitalizer{ + loc 1; + tabindex 1; + id 2260000; + price 1000; + } + bartos'_favorite_juice{ + loc 2; + tabindex 1; + id 4031993; + price 100000; + } + pet_command_guide_:_blue/red/green/gold_robo{ + loc 3; + tabindex 1; + id 4160035; + price 1000; + } + pet_command_guide_:_jr._balrog{ + loc 4; + tabindex 1; + id 4160015; + price 1000; + } + pet_command_guide_:_kino{ + loc 5; + tabindex 1; + id 4160033; + price 1000; + } + pet_command_guide_:_white_duck{ + loc 6; + tabindex 1; + id 4160039; + price 1000; + } + pet_command_guide_:_gorilla_robo{ + loc 7; + tabindex 1; + id 4160036; + price 1000; + } + pet_command_guide_:_baby_robo{ + loc 8; + tabindex 1; + id 4160034; + price 1000; + } + pet_command_guide_:_crystal_rudolph{ + loc 9; + tabindex 1; + id 4160037; + price 1000; + } + pet_command_guide_:_skunk{ + loc 10; + tabindex 1; + id 4160032; + price 1000; + } + pet_command_guide_:_porcupine{ + loc 11; + tabindex 1; + id 4160027; + price 1000; + } + pet_command_guide_:_snowman{ + loc 12; + tabindex 1; + id 4160029; + price 1000; + } + pet_command_guide_:_sun_wu_kong{ + loc 13; + tabindex 1; + id 4160019; + price 1000; + } + pet_command_guide_:_golden_pig{ + loc 14; + tabindex 1; + id 4160017; + price 1000; + } + pet_command_guide_:_jr._reaper{ + loc 15; + tabindex 1; + id 4160028; + price 1000; + } + pet_command_guide_:_mini_yeti{ + loc 16; + tabindex 1; + id 4160012; + price 1000; + } + pet_command_guide_:_penguin{ + loc 17; + tabindex 1; + id 4160014; + price 1000; + } + pet_command_guide_:_turkey{ + loc 18; + tabindex 1; + id 4160020; + price 1000; + } + pet_command_guide_:_mini_kargo{ + loc 19; + tabindex 1; + id 4160003; + price 1000; + } + pet_command_guide_:_green/red/blue_dragon{ + loc 20; + tabindex 1; + id 4160023; + price 1000; + } + pet_command_guide_:_baby_dragon{ + loc 21; + tabindex 1; + id 4160022; + price 1000; + } + pet_command_guide_:_white_tiger{ + loc 22; + tabindex 1; + id 4160008; + price 1000; + } + pet_command_guide_:_rudolph{ + loc 23; + tabindex 1; + id 4160009; + price 1000; + } + pet_command_guide_:_robot{ + loc 24; + tabindex 1; + id 4160013; + price 1000; + } + pet_command_guide_:_puppy{ + loc 25; + tabindex 1; + id 4160000; + price 1000; + } + pet_command_guide_:_pig{ + loc 26; + tabindex 1; + id 4160005; + price 1000; + } + pet_command_guide_:_panda{ + loc 27; + tabindex 1; + id 4160006; + price 1000; + } + pet_command_guide_:_monkey{ + loc 28; + tabindex 1; + id 4160010; + price 1000; + } + pet_command_guide_:_kitty{ + loc 29; + tabindex 1; + id 4160001; + price 1000; + } + pet_command_guide_:_husky{ + loc 30; + tabindex 1; + id 4160004; + price 1000; + } + pet_command_guide_:_dino{ + loc 31; + tabindex 1; + id 4160007; + price 1000; + } + pet_command_guide_:_bunny{ + loc 32; + tabindex 1; + id 4160002; + price 1000; + } + pet_command_guide_:_black_dragon{ + loc 33; + tabindex 1; + id 4160024; + price 1000; + } +} +9120002{ + orange_potion{ + loc 0; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 1; + tabindex 1; + id 2022174; + price 320; + } + ice_cream_pop{ + loc 2; + tabindex 1; + id 2001513; + price 2300; + } + melting_cheese{ + loc 3; + tabindex 1; + id 2020012; + price 4500; + } + blue_potion{ + loc 4; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 5; + tabindex 1; + id 2022177; + price 620; + } + very_special_sundae{ + loc 6; + tabindex 1; + id 2001514; + price 4000; + } + cider{ + loc 7; + tabindex 1; + id 2022002; + price 1000; + } + sunrise_dew{ + loc 8; + tabindex 1; + id 2020045; + price 8100; + } + red_arrow_for_bow{ + loc 9; + tabindex 1; + id 2060003; + price 40; + } +} +9120000{ + mystic_cane{ + loc 0; + tabindex 1; + id 1382011; + price 2000000; + } + bushido{ + loc 1; + tabindex 1; + id 1332024; + price 2000000; + } + bamboo_sword{ + loc 2; + tabindex 1; + id 1302022; + price 80000; + } + pico-pico_hammer{ + loc 3; + tabindex 1; + id 1302021; + price 1250000; + } + silver_crow{ + loc 4; + tabindex 1; + id 1462132; + price 500000; + } + aluminum_baseball_bat{ + loc 5; + tabindex 1; + id 1402010; + price 150000; + } + fish_spear{ + loc 6; + tabindex 1; + id 1432109; + price 150000; + } + wooden_baseball_bat{ + loc 7; + tabindex 1; + id 1402009; + price 30000; + } + red_brick{ + loc 8; + tabindex 1; + id 1322012; + price 15000; + } + green_paint_brush{ + loc 9; + tabindex 1; + id 1312013; + price 100000; + } + steel_guards{ + loc 10; + tabindex 1; + id 1472153; + price 250000; + } +} +9270022{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + unagi{ + loc 10; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 11; + tabindex 1; + id 4032352; + price 1650; + } + watermelon{ + loc 12; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 13; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 14; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 15; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 4034406; + price 310; + } + chocolate{ + loc 20; + tabindex 1; + id 4033144; + price 3000; + } + antidote{ + loc 21; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 22; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 23; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 24; + tabindex 1; + id 2050003; + price 500; + } + return_scroll_-_nearest_town{ + loc 25; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 26; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061000; + price 1; + } +} +9270021{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 5; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 6; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 7; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 8; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 9; + tabindex 1; + id 2002005; + price 500; + } + unagi{ + loc 10; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 11; + tabindex 1; + id 4032352; + price 1650; + } + watermelon{ + loc 12; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 13; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 14; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 15; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 16; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 17; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 18; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 19; + tabindex 1; + id 4034406; + price 310; + } + chocolate{ + loc 20; + tabindex 1; + id 4033144; + price 3000; + } + antidote{ + loc 21; + tabindex 1; + id 2050000; + price 200; + } + eyedrop{ + loc 22; + tabindex 1; + id 2050001; + price 200; + } + tonic{ + loc 23; + tabindex 1; + id 2050002; + price 300; + } + holy_water{ + loc 24; + tabindex 1; + id 2050003; + price 500; + } + return_scroll_-_nearest_town{ + loc 25; + tabindex 1; + id 2030000; + price 400; + } + arrow_for_bow{ + loc 26; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 27; + tabindex 1; + id 2061000; + price 1; + } + mushroom_miso_ramen{ + loc 28; + tabindex 1; + id 2022015; + price 12000; + } +} +9270019{ + gladius{ + loc 0; + tabindex 1; + id 1302186; + price 40000; + } + cutlus{ + loc 1; + tabindex 1; + id 1302004; + price 100000; + } + traus{ + loc 2; + tabindex 1; + id 1302188; + price 225000; + } + fireman's_axe{ + loc 3; + tabindex 1; + id 1312082; + price 40000; + } + dankke{ + loc 4; + tabindex 1; + id 1312083; + price 100000; + } + blue_counter{ + loc 5; + tabindex 1; + id 1312084; + price 175000; + } + war_hammer{ + loc 6; + tabindex 1; + id 1322116; + price 40000; + } + heavy_hammer{ + loc 7; + tabindex 1; + id 1322117; + price 100000; + } + jacker{ + loc 8; + tabindex 1; + id 1322118; + price 175000; + } + cass{ + loc 9; + tabindex 1; + id 1332009; + price 42000; + } + reef_claw{ + loc 10; + tabindex 1; + id 1332162; + price 40000; + } + halfmoon_zamadar{ + loc 11; + tabindex 1; + id 1332001; + price 200000; + } + gephart{ + loc 12; + tabindex 1; + id 1332163; + price 355000; + } + bazlud{ + loc 13; + tabindex 1; + id 1332011; + price 425000; + } + mithril_wand{ + loc 14; + tabindex 1; + id 1372111; + price 38000; + } + wizard_wand{ + loc 15; + tabindex 1; + id 1372112; + price 175000; + } + fairy_wand{ + loc 16; + tabindex 1; + id 1372113; + price 400000; + } + wizard_staff{ + loc 17; + tabindex 1; + id 1382135; + price 20000; + } + scimitar{ + loc 18; + tabindex 1; + id 1402123; + price 150000; + } + lionheart{ + loc 19; + tabindex 1; + id 1402124; + price 350000; + } + zard{ + loc 20; + tabindex 1; + id 1402125; + price 450000; + } + blue_axe{ + loc 21; + tabindex 1; + id 1412081; + price 45000; + } + niam{ + loc 22; + tabindex 1; + id 1412082; + price 200000; + } + sabretooth{ + loc 23; + tabindex 1; + id 1412083; + price 250000; + } + mithril_maul{ + loc 24; + tabindex 1; + id 1422083; + price 45000; + } + sledgehammer{ + loc 25; + tabindex 1; + id 1422084; + price 200000; + } + titan{ + loc 26; + tabindex 1; + id 1422085; + price 250000; + } + forked_spear{ + loc 27; + tabindex 1; + id 1432110; + price 60000; + } + nakamaki{ + loc 28; + tabindex 1; + id 1432111; + price 175000; + } + zeco{ + loc 29; + tabindex 1; + id 1432112; + price 225000; + } + mithril_pole_arm{ + loc 30; + tabindex 1; + id 1442001; + price 60000; + } + axe_pole_arm{ + loc 31; + tabindex 1; + id 1442003; + price 175000; + } + crescent_polearm{ + loc 32; + tabindex 1; + id 1442150; + price 300000; + } + ryden{ + loc 33; + tabindex 1; + id 1452141; + price 150000; + } + red_viper{ + loc 34; + tabindex 1; + id 1452142; + price 250000; + } + vaulter_2000{ + loc 35; + tabindex 1; + id 1452143; + price 375000; + } + mountain_crossbow{ + loc 36; + tabindex 1; + id 1462129; + price 30000; + } + eagle_crow{ + loc 37; + tabindex 1; + id 1462130; + price 200000; + } + heckler{ + loc 38; + tabindex 1; + id 1462131; + price 250000; + } + steel_titans{ + loc 39; + tabindex 1; + id 1472150; + price 20000; + } + bronze_igor{ + loc 40; + tabindex 1; + id 1472091; + price 30000; + } + meba{ + loc 41; + tabindex 1; + id 1472152; + price 60000; + } +} +9270020{ + great_brown_helmet{ + loc 0; + tabindex 1; + id 1003321; + price 160000; + } + yellow_jangoon_armor{ + loc 1; + tabindex 1; + id 1040000; + price 200000; + } + maroon_jangoon_armor{ + loc 2; + tabindex 1; + id 1040177; + price 200000; + } + red_jangoon_armor{ + loc 3; + tabindex 1; + id 1041084; + price 200000; + } + brown_jangoon_armor{ + loc 4; + tabindex 1; + id 1041085; + price 200000; + } + white_crusader_chainmail{ + loc 5; + tabindex 1; + id 1050198; + price 112500; + } + blue_crusader_chainmail{ + loc 6; + tabindex 1; + id 1050021; + price 112500; + } + emerald_fitted_mail{ + loc 7; + tabindex 1; + id 1051001; + price 112500; + } + sapphire_fitted_mail{ + loc 8; + tabindex 1; + id 1051014; + price 112500; + } + white_jangoon_pants{ + loc 9; + tabindex 1; + id 1060074; + price 180000; + } + brown_jangoon_pants{ + loc 10; + tabindex 1; + id 1060075; + price 180000; + } + red_jangoon_skirt{ + loc 11; + tabindex 1; + id 1061083; + price 180000; + } + brown_jangoon_skirt{ + loc 12; + tabindex 1; + id 1061084; + price 180000; + } + red_triangular_shield{ + loc 13; + tabindex 1; + id 1092098; + price 100000; + } + red_cross_shield{ + loc 14; + tabindex 1; + id 1092099; + price 200000; + } + red_matty{ + loc 15; + tabindex 1; + id 1002141; + price 96000; + } + blue_matty{ + loc 16; + tabindex 1; + id 1002142; + price 96000; + } + green_matty{ + loc 17; + tabindex 1; + id 1003322; + price 96000; + } + brown_matty{ + loc 18; + tabindex 1; + id 1002144; + price 96000; + } + blue_amoria_top{ + loc 19; + tabindex 1; + id 1041052; + price 120000; + } + red_amoria_top{ + loc 20; + tabindex 1; + id 1041178; + price 120000; + } + white_chaos_robe{ + loc 21; + tabindex 1; + id 1050031; + price 300000; + } + blood_chaos_robe{ + loc 22; + tabindex 1; + id 1050199; + price 300000; + } + brown_starlight{ + loc 23; + tabindex 1; + id 1050035; + price 450000; + } + blue_starlight{ + loc 24; + tabindex 1; + id 1050038; + price 450000; + } + red_starlight{ + loc 25; + tabindex 1; + id 1050036; + price 450000; + } + green_starlight{ + loc 26; + tabindex 1; + id 1050037; + price 450000; + } + purple_moonlight{ + loc 27; + tabindex 1; + id 1051023; + price 450000; + } + blue_moonlight{ + loc 28; + tabindex 1; + id 1051025; + price 450000; + } + red_moonlight{ + loc 29; + tabindex 1; + id 1051024; + price 450000; + } + brown_moonlight{ + loc 30; + tabindex 1; + id 1051027; + price 450000; + } + blue_amoria_skirt{ + loc 31; + tabindex 1; + id 1061048; + price 120000; + } + red_amoria_skirt{ + loc 32; + tabindex 1; + id 1061047; + price 120000; + } + blue_pole-feather_hat{ + loc 33; + tabindex 1; + id 1002138; + price 100000; + } + red_pole-feather_hat{ + loc 34; + tabindex 1; + id 1003323; + price 100000; + } + brown_pole-feather_hat{ + loc 35; + tabindex 1; + id 1002135; + price 100000; + } + green_pole-feather_hat{ + loc 36; + tabindex 1; + id 1002137; + price 100000; + } + red_legolier{ + loc 37; + tabindex 1; + id 1040175; + price 114000; + } + blue_legolier{ + loc 38; + tabindex 1; + id 1040073; + price 114000; + } + green_legolier{ + loc 39; + tabindex 1; + id 1040074; + price 114000; + } + brown_legolier{ + loc 40; + tabindex 1; + id 1040076; + price 114000; + } + white_piette{ + loc 41; + tabindex 1; + id 1040081; + price 180000; + } + brown_piette{ + loc 42; + tabindex 1; + id 1040178; + price 180000; + } + blue_legolia{ + loc 43; + tabindex 1; + id 1041066; + price 114000; + } + brown_legolia{ + loc 44; + tabindex 1; + id 1041069; + price 114000; + } + red_legolia{ + loc 45; + tabindex 1; + id 1041179; + price 114000; + } + green_legolia{ + loc 46; + tabindex 1; + id 1041067; + price 114000; + } + brown_piettra{ + loc 47; + tabindex 1; + id 1041082; + price 180000; + } + white_piettra{ + loc 48; + tabindex 1; + id 1041081; + price 180000; + } + blue_legolier_pants{ + loc 49; + tabindex 1; + id 1060163; + price 108000; + } + brown_legolier_pants{ + loc 50; + tabindex 1; + id 1060065; + price 108000; + } + red_legolier_pants{ + loc 51; + tabindex 1; + id 1060061; + price 108000; + } + green_legolier_pants{ + loc 52; + tabindex 1; + id 1060063; + price 108000; + } + blue_piette_pants{ + loc 53; + tabindex 1; + id 1060070; + price 160000; + } + brown_piette_pants{ + loc 54; + tabindex 1; + id 1060069; + price 160000; + } + blue_legolia_pants{ + loc 55; + tabindex 1; + id 1061188; + price 108000; + } + brown_legolia_pants{ + loc 56; + tabindex 1; + id 1061064; + price 108000; + } + red_legolia_pants{ + loc 57; + tabindex 1; + id 1061060; + price 108000; + } + green_legolia_pants{ + loc 58; + tabindex 1; + id 1061062; + price 108000; + } + brown_piettra_skirt{ + loc 59; + tabindex 1; + id 1061081; + price 160000; + } + white_piettra_skirt{ + loc 60; + tabindex 1; + id 1061080; + price 160000; + } + red_burgler{ + loc 61; + tabindex 1; + id 1002176; + price 100000; + } + blue_burgler{ + loc 62; + tabindex 1; + id 1002177; + price 100000; + } + green_burgler{ + loc 63; + tabindex 1; + id 1002178; + price 100000; + } + brown_burgler{ + loc 64; + tabindex 1; + id 1002179; + price 100000; + } + dark_burgler{ + loc 65; + tabindex 1; + id 1002180; + price 100000; + } + black_knucklevest{ + loc 66; + tabindex 1; + id 1040063; + price 114000; + } + red_knucklevest{ + loc 67; + tabindex 1; + id 1040062; + price 114000; + } + green_knucklevest{ + loc 68; + tabindex 1; + id 1040176; + price 114000; + } + khaki_shadow{ + loc 69; + tabindex 1; + id 1040082; + price 180000; + } + marine_shadow{ + loc 70; + tabindex 1; + id 1040083; + price 180000; + } + red_shadow{ + loc 71; + tabindex 1; + id 1041075; + price 180000; + } + purple_shadow{ + loc 72; + tabindex 1; + id 1041074; + price 180000; + } + red_avenger{ + loc 73; + tabindex 1; + id 1051007; + price 111000; + } + blue_avenger{ + loc 74; + tabindex 1; + id 1051008; + price 111000; + } + purple_avenger{ + loc 75; + tabindex 1; + id 1051243; + price 111000; + } + red_knucklevest_pants{ + loc 76; + tabindex 1; + id 1060051; + price 108000; + } + blue_knucklevest_pants{ + loc 77; + tabindex 1; + id 1060050; + price 108000; + } + black_knucklevest_pants{ + loc 78; + tabindex 1; + id 1060164; + price 108000; + } + khaki_shadow_pants{ + loc 79; + tabindex 1; + id 1060071; + price 160000; + } + marine_shadow_pants{ + loc 80; + tabindex 1; + id 1060072; + price 160000; + } + red_shadow_pants{ + loc 81; + tabindex 1; + id 1061070; + price 160000; + } + purple_shadow_pants{ + loc 82; + tabindex 1; + id 1061069; + price 160000; + } +} +9270027{ + laksa{ + loc 0; + tabindex 1; + id 2022203; + price 800; + } + hokkien_mee{ + loc 1; + tabindex 1; + id 2022204; + price 1200; + } + carrot_cake{ + loc 2; + tabindex 1; + id 2022205; + price 1800; + } + chicken_rice{ + loc 3; + tabindex 1; + id 2022206; + price 2200; + } + satay{ + loc 4; + tabindex 1; + id 2022207; + price 2600; + } + guava{ + loc 5; + tabindex 1; + id 2022208; + price 1000; + } + rambutan{ + loc 6; + tabindex 1; + id 2022209; + price 1600; + } + dragon_fruit{ + loc 7; + tabindex 1; + id 2022210; + price 3200; + } + durian{ + loc 8; + tabindex 1; + id 2022211; + price 6400; + } + pepper_crab{ + loc 9; + tabindex 1; + id 2022214; + price 3200; + } + chili_crab{ + loc 10; + tabindex 1; + id 2022215; + price 6800; + } +} +1061002{ + red_potion{ + loc 0; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 1; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 2; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 3; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 4; + tabindex 1; + id 2022177; + price 620; + } + apple{ + loc 5; + tabindex 1; + id 4034403; + price 30; + } + egg{ + loc 6; + tabindex 1; + id 4220124; + price 50; + } + meat{ + loc 7; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 8; + tabindex 1; + id 4034405; + price 100; + } + lemon{ + loc 9; + tabindex 1; + id 4034406; + price 310; + } + unagi{ + loc 10; + tabindex 1; + id 3994092; + price 1100; + } + pure_water{ + loc 11; + tabindex 1; + id 4032352; + price 1650; + } + return_scroll_-_nearest_town{ + loc 12; + tabindex 1; + id 2030000; + price 400; + } + return_scroll_to_sleepywood{ + loc 13; + tabindex 1; + id 2030006; + price 600; + } + arrow_for_bow{ + loc 14; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 15; + tabindex 1; + id 2061000; + price 1; + } + subi_throwing-stars{ + loc 16; + tabindex 1; + id 2070000; + price 500; + quantity 500; + } + bullet{ + loc 17; + tabindex 1; + id 2330000; + price 600; + quantity 500; + } +} +9071001{ + nebulite_socket_creator{ + loc 0; + tabindex 1; + id 2930000; + price 5000; + } + red_potion{ + loc 1; + tabindex 1; + id 2001500; + price 50; + } + orange_potion{ + loc 2; + tabindex 1; + id 2001501; + price 160; + } + white_potion{ + loc 3; + tabindex 1; + id 2022174; + price 320; + } + blue_potion{ + loc 4; + tabindex 1; + id 2001503; + price 200; + } + mana_elixir{ + loc 5; + tabindex 1; + id 2022177; + price 620; + } + dexterity_potion{ + loc 6; + tabindex 1; + id 2002000; + price 500; + } + speed_potion{ + loc 7; + tabindex 1; + id 2002001; + price 400; + } + magic_potion{ + loc 8; + tabindex 1; + id 2002002; + price 500; + } + warrior_potion{ + loc 9; + tabindex 1; + id 2002004; + price 500; + } + sniper_potion{ + loc 10; + tabindex 1; + id 2002005; + price 500; + } + watermelon{ + loc 11; + tabindex 1; + id 2001512; + price 3200; + } + ice_cream_pop{ + loc 12; + tabindex 1; + id 2001513; + price 2300; + } + very_special_sundae{ + loc 13; + tabindex 1; + id 2001514; + price 4000; + } + apple{ + loc 14; + tabindex 1; + id 2001532; + price 30; + } + egg{ + loc 15; + tabindex 1; + id 2001533; + price 50; + } + meat{ + loc 16; + tabindex 1; + id 2010001; + price 106; + } + orange{ + loc 17; + tabindex 1; + id 2001534; + price 100; + } + lemon{ + loc 18; + tabindex 1; + id 2001535; + price 310; + } + melting_cheese{ + loc 19; + tabindex 1; + id 2020012; + price 4500; + } + reindeer_milk{ + loc 20; + tabindex 1; + id 2020013; + price 5600; + } + sunrise_dew{ + loc 21; + tabindex 1; + id 2020045; + price 8100; + } + sunset_dew{ + loc 22; + tabindex 1; + id 2020046; + price 10200; + } + arrow_for_bow{ + loc 23; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_crossbow{ + loc 24; + tabindex 1; + id 2061000; + price 1; + } + bronze_arrow_for_bow{ + loc 25; + tabindex 1; + id 2060001; + price 10; + } + bronze_arrow_for_crossbow{ + loc 26; + tabindex 1; + id 2061001; + price 10; + } + subi_throwing-stars{ + loc 27; + tabindex 1; + id 2070000; + price 500; + } + bullet{ + loc 28; + tabindex 1; + id 2330000; + price 600; + } + spiegelmann_badge_chest{ + loc 29; + tabindex 2; + id 2550000; + tokenitemid 4310020; + tokenprice 30; + } + spiegelmann_mustache{ + loc 30; + tabindex 2; + id 1012270; + tokenitemid 4310020; + tokenprice 50; + } + spiegelmann_autograph{ + loc 31; + tabindex 2; + id 1162008; + tokenitemid 4310020; + tokenprice 100; + } + spiegelmann_hot-air_balloon_7day{ + loc 32; + tabindex 2; + id 2430275; + tokenitemid 4310020; + tokenprice 70; + } + extreme_red_potion{ + loc 33; + tabindex 2; + id 2023125; + tokenitemid 4310020; + tokenprice 5; + } + extreme_green_potion{ + loc 34; + tabindex 2; + id 2023126; + tokenitemid 4310020; + tokenprice 5; + } + extreme_blue_potion{ + loc 35; + tabindex 2; + id 2023127; + tokenitemid 4310020; + tokenprice 5; + } + extreme_gold_potion{ + loc 36; + tabindex 2; + id 2023128; + tokenitemid 4310020; + tokenprice 10; + } + greed_pendant{ + loc 37; + tabindex 2; + id 1122219; + tokenitemid 4310020; + tokenprice 150; + } + monster_park_damage_skin{ + loc 38; + tabindex 2; + id 2434824; + tokenitemid 4310020; + tokenprice 50; + } +} +9031007{ + heart_s_series{ + loc 0; + tabindex 1; + id 1672034; + price 1000000; + } + heart_i_series{ + loc 1; + tabindex 1; + id 1672035; + price 1000000; + } + heart_d_series{ + loc 2; + tabindex 1; + id 1672036; + price 1000000; + } + heart_l_series{ + loc 3; + tabindex 1; + id 1672037; + price 1000000; + } + heart_g_series{ + loc 4; + tabindex 1; + id 1672038; + price 1000000; + } + imp_disease_cure{ + loc 5; + tabindex 1; + id 4340000; + price 1000; + } + basic_mold{ + loc 6; + tabindex 1; + id 4024004; + price 100; + } + int_mold{ + loc 7; + tabindex 1; + id 4024005; + price 300; + } + adv_mold{ + loc 8; + tabindex 1; + id 4024006; + price 500; + } + sup_mold{ + loc 9; + tabindex 1; + id 4024007; + price 1000; + } + basic_abrasive{ + loc 10; + tabindex 1; + id 4025000; + price 1000; + } + int_abrasive{ + loc 11; + tabindex 1; + id 4025001; + price 5000; + } + adv_abrasive{ + loc 12; + tabindex 1; + id 4025002; + price 10000; + } + sup_abrasive{ + loc 13; + tabindex 1; + id 4025003; + price 50000; + } + basic_herb_oil_bottle{ + loc 14; + tabindex 1; + id 4024000; + price 100; + } + int_herb_oil_bottle{ + loc 15; + tabindex 1; + id 4024001; + price 300; + } + adv_herb_oil_bottle{ + loc 16; + tabindex 1; + id 4024002; + price 500; + } + sup_herb_oil_bottle{ + loc 17; + tabindex 1; + id 4024003; + price 1000; + } + basic_empty_bottle{ + loc 18; + tabindex 1; + id 4025004; + price 100; + } + int_empty_bottle{ + loc 19; + tabindex 1; + id 4025005; + price 200; + } + adv_empty_bottle{ + loc 20; + tabindex 1; + id 4025006; + price 400; + } + sup_empty_bottle{ + loc 21; + tabindex 1; + id 4025007; + price 800; + } + basic_potion_coagulant{ + loc 22; + tabindex 1; + id 4025008; + price 50; + } + int_potion_coagulant{ + loc 23; + tabindex 1; + id 4025009; + price 100; + } + adv_potion_coagulant{ + loc 24; + tabindex 1; + id 4025010; + price 200; + } + sup_potion_coagulant{ + loc 25; + tabindex 1; + id 4025011; + price 400; + } + alchemist_stone{ + loc 26; + tabindex 1; + id 4021017; + price 5000; + } + arrow_for_bow{ + loc 27; + tabindex 1; + id 2060000; + price 1; + } + arrow_for_xbow{ + loc 28; + tabindex 1; + id 2061000; + price 1; + } + arrow_for_bow_bundle{ + loc 29; + tabindex 1; + quantity 2000; + id 2060000; + price 1400; + } + arrow_for_xbow_bundle{ + loc 30; + tabindex 1; + quantity 2000; + id 2061000; + price 1400; + } +} +2540017{ + alicia_skin{ + loc 1; + tabindex 1; + id 2432465; + pointquestid 42003; + pointprice 300000; + } + alicia_skin2{ + loc 2; + tabindex 1; + id 2432465; + price 300; + } +} + +9062015{ + alicia_skin{ + loc 1; + tabindex 1; + id 2432465; + pointquestid 42003; + pointprice 300000; + } + alicia_skin2{ + loc 2; + tabindex 1; + id 2432465; + price 300; + } +} \ No newline at end of file diff --git a/scripts/field/100000004_enter.py b/scripts/field/100000004_enter.py new file mode 100755 index 0000000..339b5a0 --- /dev/null +++ b/scripts/field/100000004_enter.py @@ -0,0 +1,45 @@ +# Created by MechAviv +# Map ID :: 100000004 +# Henesys : Closet House + +if sm.hasQuest(32707): + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.setIntroBoxChat(1530020) + sm.setSpeakerType(3) + sm.sendNext("Hey, you should head back now. How long are you gonna mooch off of us?") + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendSay("Oh em gee... You were the one that summoned me in the first place! Don't tell me what to do.") + + + sm.setIntroBoxChat(1530020) + sm.setSpeakerType(3) + sm.sendSay("How many times do I have to tell you, it was an accident! And can you PLEASE talk like a normal person, not this oh em...whatever stuff?") + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendSay("Practically everyone talks like that back where I'm from.") + + + sm.setIntroBoxChat(1530020) + sm.setSpeakerType(3) + sm.sendSay("Great, I opened a portal to a world full of mutants.") + + + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("Hey guys. I'm here now, so, um, care to fill me in?") + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/field/58923_direction.py b/scripts/field/58923_direction.py new file mode 100755 index 0000000..5a941a8 --- /dev/null +++ b/scripts/field/58923_direction.py @@ -0,0 +1,20 @@ +# id 811000020 (East Tower Central Shrine : Inside East Tower Central Shrine), field 811000020 +sm.lockInGameUI(True, True) +sm.spawnNpc(9130118, 139, 88) +sm.showNpcSpecialActionByTemplateId(9130118, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130118) # Miroku +sm.sendNext("What, who are you?") +sm.setParam(17) +sm.sendSay("...What are you doing here?") +sm.setParam(5) +sm.sendSay("Me? You're obviously not worthy enough to know who I am. As for what I'm doing, I'm brainwashing these little soldiers! Don't you have eyes?") +sm.sendSay("Those lowly beings are better off being brainwashed. You know, I think you will be, too.") +sm.sendSay("So hold still! I'LL MAKE THIS QUICK!") +sm.setParam(17) +sm.sendSay("No more jokes. You can't just do as you please! ") +sm.lockInGameUI(False, True) +sm.closeUI(1128) +sm.startQuest(58936) +sm.createQuestWithQRValue(58973, "m035=clear") diff --git a/scripts/field/58924_direction.py b/scripts/field/58924_direction.py new file mode 100755 index 0000000..a96c9db --- /dev/null +++ b/scripts/field/58924_direction.py @@ -0,0 +1,20 @@ +# id 811000021 (Hieizan : Path to West Tower), field 811000021 +sm.lockInGameUI(True, True) +sm.spawnNpc(9131000, 0, 0) +sm.showNpcSpecialActionByTemplateId(9131000, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setParam(17) +sm.sendSay(" I didn't follow you. I didn't even expect to see you. ") +sm.sendSay("But today, I will finally defeat you!") +sm.setParam(5) +sm.setParam(17) +sm.sendSay("Enough! Taste my blade!") +sm.setParam(5) +sm.completeQuestNoCheck(58937) +sm.setParam(17) +sm.sendSay("No! You are my worst enemy, and I will be sure to rid the world of you!") +sm.createQuestWithQRValue(18418, "B=35628") +sm.sendSay(" Where did you go?! ") +sm.createQuestWithQRValue(58973, "m035=clear;dr1=clear") +sm.lockInGameUI(False, True) diff --git a/scripts/field/Advanture_tuto04.py b/scripts/field/Advanture_tuto04.py new file mode 100755 index 0000000..3fb9ac0 --- /dev/null +++ b/scripts/field/Advanture_tuto04.py @@ -0,0 +1,14 @@ +# Created by MechAviv +# ID :: [4000004] +# Hidden Street : Explorer Video + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.playURLVideoByScript("http://nxcache.nexon.net/maplestory/video/yt/adventurer.html") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 +sm.warp(4000005, 0) diff --git a/scripts/field/Advanture_tuto11.py b/scripts/field/Advanture_tuto11.py new file mode 100755 index 0000000..fb076ac --- /dev/null +++ b/scripts/field/Advanture_tuto11.py @@ -0,0 +1,82 @@ +# Maple Road : Maple Tree Hill (4000011) Map for Explorer Tutorial + +# TODO: {serverName} Custom Beginnings + +server_name = sm.getServerName() +speaker = 2007 # maple administrator + +sm.setSpeakerID(speaker) +sm.removeEscapeButton() +sm.sendNext("Welcome to the world of " + server_name + "!") +sm.sendNext("I will now send you to the player hub to start your adventure!") +sm.warpToHub() +sm.doJobStart() # handles job start based on job +chr.giveStartingItems() + + +''' +UNK_NPC = 10300 # NPC name - "???" + +# Explorer - Tutorial Skipper +def skip_tutorial(): + MAPLE_ADMINISTRATOR = 2007 + + quests_to_complete = [ + 32202, # Mystical Maple Tree + 32203, # The New Explorer + 32215 # A Strange Explorer + ] + + map_to_warp = 4000032 # End of + target_level = 10 + + sm.setSpeakerID(MAPLE_ADMINISTRATOR) + sm.removeEscapeButton() + sm.lockInGameUI(True) + + if sm.sendAskYesNo("Would you like to skip the tutorial quest line and instantly arrive at #m" + str(map_to_warp) + "#?"): + if sm.getChr().getLevel() < target_level: + sm.addLevel(target_level - sm.getChr().getLevel()) + + for quest in quests_to_complete: + sm.completeQuestNoRewards(quest) + + sm.warp(map_to_warp) + + sm.lockInGameUI(False) + sm.dispose() + + +if not sm.hasQuest(32202) or not sm.hasQuestCompleted(32203): + skip_tutorial() + sm.lockInGameUI(True) + sm.showFieldEffect("maplemap/enter/10000", 0) + sm.sendDelay(1000) + + sm.spawnNpc(UNK_NPC, -240, 220) + sm.showNpcSpecialActionByTemplateId(UNK_NPC, "summon", 0) + sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 900, 0, -120, 0, sm.getNpcObjectIdByTemplateId(UNK_NPC), False, 0) + sm.sendDelay(1800) + + sm.moveNpcByTemplateId(UNK_NPC, False, 1000, 100) + sm.moveCamera(False, 200, 200, 200) + + # The delay is for letting the Npc move + sm.sendDelay(3000) + + sm.moveCamera(True, 0, 0, 0) + + sm.sendDelay(900) + + sm.setSpeakerID(0) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("Who was that girl? Why did she run away when she saw me?") + sm.sendNext("Maybe I'll follow her..") + + sm.removeNpc(UNK_NPC) + sm.completeQuestNoRewards(32202) + sm.lockInGameUI(False) + sm.dispose() +''' \ No newline at end of file diff --git a/scripts/field/Advanture_tuto11_default.py b/scripts/field/Advanture_tuto11_default.py new file mode 100755 index 0000000..09f0d40 --- /dev/null +++ b/scripts/field/Advanture_tuto11_default.py @@ -0,0 +1,66 @@ +# Maple Road : Maple Tree Hill (4000011) Map for Explorer Tutorial + +UNK_NPC = 10300 # NPC name - "???" + +# Explorer - Tutorial Skipper +def skip_tutorial(): + MAPLE_ADMINISTRATOR = 2007 + + quests_to_complete = [ + 32202, # Mystical Maple Tree + 32203, # The New Explorer + 32215 # A Strange Explorer + ] + + map_to_warp = 4000032 # End of + target_level = 10 + + sm.setSpeakerID(MAPLE_ADMINISTRATOR) + sm.removeEscapeButton() + sm.lockInGameUI(True) + + if sm.sendAskYesNo("Would you like to skip the tutorial questline and instantly arrive at #m" + str(map_to_warp) + "#?"): + if sm.getChr().getLevel() < target_level: + sm.addLevel(target_level - sm.getChr().getLevel()) + + for quest in quests_to_complete: + sm.completeQuestNoRewards(quest) + + sm.warp(map_to_warp) + + sm.lockInGameUI(False) + sm.dispose() + + +if not sm.hasQuest(32202) or not sm.hasQuestCompleted(32203): + skip_tutorial() + sm.lockInGameUI(True) + sm.showFieldEffect("maplemap/enter/10000", 0) + sm.sendDelay(1000) + + sm.spawnNpc(UNK_NPC, -240, 220) + sm.showNpcSpecialActionByTemplateId(UNK_NPC, "summon", 0) + sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 900, 0, -120, 0, sm.getNpcObjectIdByTemplateId(UNK_NPC), False, 0) + sm.sendDelay(1800) + + sm.moveNpcByTemplateId(UNK_NPC, False, 1000, 100) + sm.moveCamera(False, 200, 200, 200) + + # The delay is for letting the Npc move + sm.sendDelay(3000) + + sm.moveCamera(True, 0, 0, 0) + + sm.sendDelay(900) + + sm.setSpeakerID(0) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("Who was that girl? Why did she run away when she saw me?") + sm.sendNext("Maybe I'll follow her..") + + sm.removeNpc(UNK_NPC) + sm.completeQuestNoRewards(32202) + sm.lockInGameUI(False) + sm.dispose() diff --git a/scripts/field/Advanture_tuto33.py b/scripts/field/Advanture_tuto33.py new file mode 100755 index 0000000..c38bd26 --- /dev/null +++ b/scripts/field/Advanture_tuto33.py @@ -0,0 +1,7 @@ +# Inside the Sangri-la | Explorer tutorial +if not sm.hasMobsInField(): + sm.spawnMob(9300815, -152, 150, False) # Spawn Mano +else: + sm.killMobs() + sm.spawnMob(9300815, -152, 150, False) # Spawn Mano +sm.dispose() diff --git a/scripts/field/Akayrum_Before.py b/scripts/field/Akayrum_Before.py new file mode 100755 index 0000000..46df0a9 --- /dev/null +++ b/scripts/field/Akayrum_Before.py @@ -0,0 +1,2 @@ +sm.removeNpc(2144016) +sm.spawnMob(8860000, -8, -181, False) \ No newline at end of file diff --git a/scripts/field/Akayrum_Before2.py b/scripts/field/Akayrum_Before2.py new file mode 100755 index 0000000..f5d28be --- /dev/null +++ b/scripts/field/Akayrum_Before2.py @@ -0,0 +1,3 @@ +sm.removeNpc(2144016) +sm.spawnMob(8860005, -8, -181, False) + diff --git a/scripts/field/Akayrum_ExpeditionEnter.py b/scripts/field/Akayrum_ExpeditionEnter.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/Commerci.py b/scripts/field/Commerci.py new file mode 100755 index 0000000..b0df122 --- /dev/null +++ b/scripts/field/Commerci.py @@ -0,0 +1,205 @@ +# id 865000100 (Trade : En Route), field 865000100 +import random +from random import randrange +from time import sleep + +sleep(1) +mobsPerRound = 75 +mobsLevel = 220 +mobs = [9390800, 9390801] +runners = [9390802, 9390803] + +if sm.getFieldID() == 865000200: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + position = sm.getReactorPositionByPos(2) + yOffSet = 100 + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 84000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(15) + sm.giveItem(4310100, 6) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000900: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + yOffSet = 100 + position = sm.getReactorPositionByPos(2) + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 3820000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(20) + sm.giveItem(4310100, 18) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000300: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 3070000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 38) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000100: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 230000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 243000000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 230000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 66) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000400: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 2300000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390868, position.getX() + xOffSet, position.getY() + yOffSet, False, 77600000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 2300000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(30) + sm.giveItem(4310100, 102) + sm.warpInstanceOut(865000001) \ No newline at end of file diff --git a/scripts/field/Commerci1.py b/scripts/field/Commerci1.py new file mode 100755 index 0000000..b0df122 --- /dev/null +++ b/scripts/field/Commerci1.py @@ -0,0 +1,205 @@ +# id 865000100 (Trade : En Route), field 865000100 +import random +from random import randrange +from time import sleep + +sleep(1) +mobsPerRound = 75 +mobsLevel = 220 +mobs = [9390800, 9390801] +runners = [9390802, 9390803] + +if sm.getFieldID() == 865000200: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + position = sm.getReactorPositionByPos(2) + yOffSet = 100 + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 84000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(15) + sm.giveItem(4310100, 6) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000900: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + yOffSet = 100 + position = sm.getReactorPositionByPos(2) + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 3820000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(20) + sm.giveItem(4310100, 18) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000300: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 3070000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 38) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000100: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 230000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 243000000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 230000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 66) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000400: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 2300000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390868, position.getX() + xOffSet, position.getY() + yOffSet, False, 77600000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 2300000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(30) + sm.giveItem(4310100, 102) + sm.warpInstanceOut(865000001) \ No newline at end of file diff --git a/scripts/field/Commerci2.py b/scripts/field/Commerci2.py new file mode 100755 index 0000000..b0df122 --- /dev/null +++ b/scripts/field/Commerci2.py @@ -0,0 +1,205 @@ +# id 865000100 (Trade : En Route), field 865000100 +import random +from random import randrange +from time import sleep + +sleep(1) +mobsPerRound = 75 +mobsLevel = 220 +mobs = [9390800, 9390801] +runners = [9390802, 9390803] + +if sm.getFieldID() == 865000200: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + position = sm.getReactorPositionByPos(2) + yOffSet = 100 + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 84000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(15) + sm.giveItem(4310100, 6) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000900: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + yOffSet = 100 + position = sm.getReactorPositionByPos(2) + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 3820000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(20) + sm.giveItem(4310100, 18) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000300: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 3070000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 38) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000100: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 230000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 243000000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 230000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 66) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000400: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 2300000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390868, position.getX() + xOffSet, position.getY() + yOffSet, False, 77600000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 2300000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(30) + sm.giveItem(4310100, 102) + sm.warpInstanceOut(865000001) \ No newline at end of file diff --git a/scripts/field/Commerci3.py b/scripts/field/Commerci3.py new file mode 100755 index 0000000..b0df122 --- /dev/null +++ b/scripts/field/Commerci3.py @@ -0,0 +1,205 @@ +# id 865000100 (Trade : En Route), field 865000100 +import random +from random import randrange +from time import sleep + +sleep(1) +mobsPerRound = 75 +mobsLevel = 220 +mobs = [9390800, 9390801] +runners = [9390802, 9390803] + +if sm.getFieldID() == 865000200: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + position = sm.getReactorPositionByPos(2) + yOffSet = 100 + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 84000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(15) + sm.giveItem(4310100, 6) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000900: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + yOffSet = 100 + position = sm.getReactorPositionByPos(2) + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 3820000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(20) + sm.giveItem(4310100, 18) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000300: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 3070000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 38) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000100: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 230000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 243000000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 230000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 66) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000400: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 2300000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390868, position.getX() + xOffSet, position.getY() + yOffSet, False, 77600000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 2300000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(30) + sm.giveItem(4310100, 102) + sm.warpInstanceOut(865000001) \ No newline at end of file diff --git a/scripts/field/Commerci4.py b/scripts/field/Commerci4.py new file mode 100755 index 0000000..b0df122 --- /dev/null +++ b/scripts/field/Commerci4.py @@ -0,0 +1,205 @@ +# id 865000100 (Trade : En Route), field 865000100 +import random +from random import randrange +from time import sleep + +sleep(1) +mobsPerRound = 75 +mobsLevel = 220 +mobs = [9390800, 9390801] +runners = [9390802, 9390803] + +if sm.getFieldID() == 865000200: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + position = sm.getReactorPositionByPos(2) + yOffSet = 100 + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 84000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(15) + sm.giveItem(4310100, 6) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000900: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + xOffSet = 0 + yOffSet = 100 + position = sm.getReactorPositionByPos(2) + sm.spawnMob(9390857, position.getX() + xOffSet, position.getY() + yOffSet, False, 3820000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(20) + sm.giveItem(4310100, 18) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000300: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 52000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 3070000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 52000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 38) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000100: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 230000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390804, position.getX() + xOffSet, position.getY() + yOffSet, False, 243000000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 230000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(25) + sm.giveItem(4310100, 66) + sm.warpInstanceOut(865000001) + +if sm.getFieldID() == 865000400: + def normalWave(): + position = sm.getReactorPositionByPos(randrange(1)) + for x in range(mobsPerRound): + sm.spawnMob(random.choice(mobs), position.getX(), position.getY(), False, 2300000000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def bossWave(): + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + yOffSet = 100 + sm.spawnMob(9390868, position.getX() + xOffSet, position.getY() + yOffSet, False, 77600000000) + while sm.hasMobsInField(): + sleep(5) + + def runnerWave(): + boss = random.choice(runners) + position = sm.getReactorPositionByPos(2) + xOffSet = 500 + sm.spawnMob(boss, position.getX() + xOffSet, position.getY(), False, 2300000000) + while sm.hasMobsInField(): + sleep(5) + + + normalWave() + + waves = [normalWave, runnerWave] + for x in range(3): #three rounds either normal or runners + function = random.choice(waves) + function() + + bossWave() + + sm.giveShipExp(30) + sm.giveItem(4310100, 102) + sm.warpInstanceOut(865000001) \ No newline at end of file diff --git a/scripts/field/Curbrock_Scene0.py b/scripts/field/Curbrock_Scene0.py new file mode 100755 index 0000000..44ccae8 --- /dev/null +++ b/scripts/field/Curbrock_Scene0.py @@ -0,0 +1,5 @@ +# Curbrock Scene 1 + +sm.stopEvents() +sm.showFieldEffect("Map/Effect.img/Curbrock0/frame") +sm.showFieldEffect("Map/Effect.img/Curbrock0/002") \ No newline at end of file diff --git a/scripts/field/Curbrock_Scene1.py b/scripts/field/Curbrock_Scene1.py new file mode 100755 index 0000000..7ba6220 --- /dev/null +++ b/scripts/field/Curbrock_Scene1.py @@ -0,0 +1,4 @@ +# Curbrock Scene 2 + +sm.showFieldEffect("Map/Effect.img/Curbrock1/frame") +sm.showFieldEffect("Map/Effect.img/Curbrock1/002") \ No newline at end of file diff --git a/scripts/field/Curbrock_Summon0.py b/scripts/field/Curbrock_Summon0.py new file mode 100755 index 0000000..046b9c1 --- /dev/null +++ b/scripts/field/Curbrock_Summon0.py @@ -0,0 +1,7 @@ +# Curbrock Summon 1 + +CURBROCK = 9400929 # MOD ID +CURBROCKS_ESCAPE_ROUTE = 600050030 # MAP ID + +sm.spawnMob(CURBROCK, 70, -208, False) +sm.setInstanceTime(60, CURBROCKS_ESCAPE_ROUTE, 0) \ No newline at end of file diff --git a/scripts/field/Curbrock_Summon1.py b/scripts/field/Curbrock_Summon1.py new file mode 100755 index 0000000..562e8d8 --- /dev/null +++ b/scripts/field/Curbrock_Summon1.py @@ -0,0 +1,11 @@ +# Curbrock Summon 2 + +CURBROCK2 = 9400930 # MOD ID +CURBROCKS_ESCAPE_ROUTE_VER2 = 600050040 # MAP ID +CURBROCKS_ESCAPE_ROUTE_VER3 = 600050050 # MAP ID 2 + +sm.spawnMob(CURBROCK2, 190, -208, False) +sm.setInstanceTime(1800, CURBROCKS_ESCAPE_ROUTE_VER3) +sm.waitForMobDeath(CURBROCK2) +sm.warp(CURBROCKS_ESCAPE_ROUTE_VER2) +sm.stopEvents() \ No newline at end of file diff --git a/scripts/field/Curbrock_Summon2.py b/scripts/field/Curbrock_Summon2.py new file mode 100755 index 0000000..a610660 --- /dev/null +++ b/scripts/field/Curbrock_Summon2.py @@ -0,0 +1,11 @@ +# Curbrock Summon 3 + +CURBROCK3 = 9400931 # MOD ID +CURBROCKS_ESCAPE_ROUTE_VER3 = 600050050 # MAP ID + +sm.spawnMob(CURBROCK3, 320, -208, False) +# sm.setInstanceTime(CURBROCKS_ESCAPE_ROUTE_VER3, 0) +sm.setInstanceTime(1800, CURBROCKS_ESCAPE_ROUTE_VER3) +sm.waitForMobDeath(CURBROCK3) +sm.warp(CURBROCKS_ESCAPE_ROUTE_VER3) +sm.stopEvents() \ No newline at end of file diff --git a/scripts/field/Fenter_450004250.py b/scripts/field/Fenter_450004250.py new file mode 100755 index 0000000..fad0737 --- /dev/null +++ b/scripts/field/Fenter_450004250.py @@ -0,0 +1,3 @@ +# id 450004850 (Lachelein : Crumbling Clocktower), field 450004850 +sm.createQuestWithQRValue(34359, "boss=1") +sm.warp(450004900) diff --git a/scripts/field/Fritto_Eagle.py b/scripts/field/Fritto_Eagle.py new file mode 100755 index 0000000..5a7c0b5 --- /dev/null +++ b/scripts/field/Fritto_Eagle.py @@ -0,0 +1 @@ +# Fritto - Eagle FPS stage diff --git a/scripts/field/Fritto_Eagle_Enter.py b/scripts/field/Fritto_Eagle_Enter.py new file mode 100755 index 0000000..300e863 --- /dev/null +++ b/scripts/field/Fritto_Eagle_Enter.py @@ -0,0 +1 @@ +sm.chat("TODO") \ No newline at end of file diff --git a/scripts/field/Fritto_Egg_Enter.py b/scripts/field/Fritto_Egg_Enter.py new file mode 100755 index 0000000..b16395c --- /dev/null +++ b/scripts/field/Fritto_Egg_Enter.py @@ -0,0 +1,3 @@ +sm.spawnReactor(2408000, 933, -340) +sm.createStopWatch(30) # 30 sec +sm.invokeAfterDelay(30000, "warp", 993000601, 0) # diff --git a/scripts/field/GiantBossField.py b/scripts/field/GiantBossField.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/GiantBoss_Head.py b/scripts/field/GiantBoss_Head.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/GiantBoss_Head_First_Enter.py b/scripts/field/GiantBoss_Head_First_Enter.py new file mode 100755 index 0000000..d6e37ec --- /dev/null +++ b/scripts/field/GiantBoss_Head_First_Enter.py @@ -0,0 +1,39 @@ +from net.swordie.ms.enums import GolluxDifficultyType + +golluxCoinID = 4310097 +firstPhaseHeadID = 9390600 +secondPhaseHeadID = 9390601 +thirdPhaseHeadID = 9390602 +golluxMobID = 9390623 +secondGolluxMobID = 9390622 +sm.blockGolluxAttacks() +if sm.golluxMapAlreadyVisited() is not True: + sm.spawnGollux(0) + sm.addCurrentGolluxMap() + sm.spawnMobRespawnable(golluxMobID, -850, 0, True, 1, 10) + sm.spawnMobRespawnable(secondGolluxMobID, 850, 0, True, 1, 10) +elif sm.hasMobById(secondPhaseHeadID): + sm.changeFootHold("phase2-1", True) + sm.changeFootHold("phase2-2", True) +elif sm.hasMobById(thirdPhaseHeadID): + sm.changeFootHold("phase2-1", True) + sm.changeFootHold("phase2-2", True) + sm.changeFootHold("phase3", True) +if sm.hasMobById(firstPhaseHeadID): + sm.waitForMobDeath(firstPhaseHeadID) + sm.changeFootHold("phase2-1", True) + sm.changeFootHold("phase2-2", True) + sm.spawnGollux(1) +if sm.hasMobById(secondPhaseHeadID): + sm.waitForMobDeath(secondPhaseHeadID) + sm.changeFootHold("phase3", True) + sm.spawnGollux(2) + sm.createTimerGauge(100) + sm.invokeAfterDelay(100000, "warpInstanceOut", 863010700) +if sm.hasMobById(thirdPhaseHeadID): + sm.waitForMobDeath(thirdPhaseHeadID) + coinsAmount = 10 * (3 - GolluxDifficultyType.getVal(sm.getGolluxDifficulty()) + 2) + sm.giveItem(golluxCoinID, coinsAmount) + sm.stopEvents() + sm.warpInstanceOut(863010000) + sm.clearGolluxClearedMaps() diff --git a/scripts/field/GiantBoss_Hip.py b/scripts/field/GiantBoss_Hip.py new file mode 100755 index 0000000..2865b49 --- /dev/null +++ b/scripts/field/GiantBoss_Hip.py @@ -0,0 +1,13 @@ +abdomenID=9390612; +if not sm.golluxMapAlreadyVisited(): + sm.spawnMob(abdomenID) +if not sm.hasMobsInField(): + sm.openGolluxPortal("change", 7) + sm.openGolluxPortal("clear1", 12) + sm.openGolluxPortal("clear2", 12) +sm.addCurrentGolluxMap() +sm.waitForMobDeath(abdomenID) +sm.addClearedGolluxMap() +sm.openGolluxPortal("change", 7) +sm.openGolluxPortal("clear1", 12) +sm.openGolluxPortal("clear2", 12) \ No newline at end of file diff --git a/scripts/field/GiantBoss_LArm.py b/scripts/field/GiantBoss_LArm.py new file mode 100755 index 0000000..0731292 --- /dev/null +++ b/scripts/field/GiantBoss_LArm.py @@ -0,0 +1,11 @@ +leftShoulderID=9390611; +if not sm.golluxMapAlreadyVisited(): + sm.spawnMob(leftShoulderID) +if not sm.hasMobsInField(): + sm.openGolluxPortal("clear", 7) + sm.openGolluxPortal("phase3", 12) +sm.addCurrentGolluxMap() +sm.waitForMobDeath(leftShoulderID) +sm.addClearedGolluxMap() +sm.openGolluxPortal("clear", 7) +sm.openGolluxPortal("phase3", 12) \ No newline at end of file diff --git a/scripts/field/GiantBoss_RArm.py b/scripts/field/GiantBoss_RArm.py new file mode 100755 index 0000000..5115b5b --- /dev/null +++ b/scripts/field/GiantBoss_RArm.py @@ -0,0 +1,11 @@ +rightShoulderID=9390610; +if not sm.golluxMapAlreadyVisited(): + sm.spawnMob(rightShoulderID) +if not sm.hasMobsInField(): + sm.openGolluxPortal("clear", 7) + sm.openGolluxPortal("phase3", 12) +sm.addCurrentGolluxMap() +sm.waitForMobDeath(rightShoulderID) +sm.addClearedGolluxMap() +sm.openGolluxPortal("clear", 7) +sm.openGolluxPortal("phase3", 12) \ No newline at end of file diff --git a/scripts/field/GiantBoss_field.py b/scripts/field/GiantBoss_field.py new file mode 100755 index 0000000..52be118 --- /dev/null +++ b/scripts/field/GiantBoss_field.py @@ -0,0 +1,9 @@ +sm.addCurrentGolluxMap() +if sm.getAmountOfMobsInField() < 2: + sm.addClearedGolluxMap() +else: + while sm.getAmountOfMobsInField() > 1: + sm.waitForMobDeath() + sm.addClearedGolluxMap() + sm.openGolluxPortal("open", 1) + sm.openGolluxPortal("clear", 1) \ No newline at end of file diff --git a/scripts/field/HeadScript1.py b/scripts/field/HeadScript1.py new file mode 100755 index 0000000..572c6ff --- /dev/null +++ b/scripts/field/HeadScript1.py @@ -0,0 +1,8 @@ +if sm.getFieldID() == 240060000: + if not sm.hasFieldProperty("HeadSpawned"): + sm.setFieldProperty("HeadSpawned", True) + sm.spawnMob(8810200, 868, 230, False) +else: + if not sm.hasFieldProperty("SecondHeadSpawned"): + sm.setFieldProperty("SecondHeadSpawned", True) + sm.spawnMob(8810001, -317,230, False) diff --git a/scripts/field/HeadScript2.py b/scripts/field/HeadScript2.py new file mode 100755 index 0000000..1fd3ed9 --- /dev/null +++ b/scripts/field/HeadScript2.py @@ -0,0 +1,8 @@ +if sm.getFieldID() == 240060001: + if not sm.hasFieldProperty("HeadSpawned"): + sm.setFieldProperty("HeadSpawned", True) + sm.spawnMob(8810100, 868, 230, False) +if sm.getFieldID() == 240060100: + if not sm.hasFieldProperty("SecondHeadSpawned"): + sm.setFieldProperty("SecondHeadSpawned", True) + sm.spawnMob(8810001, -317,230, False) diff --git a/scripts/field/HeadScript3.py b/scripts/field/HeadScript3.py new file mode 100755 index 0000000..b807f35 --- /dev/null +++ b/scripts/field/HeadScript3.py @@ -0,0 +1,8 @@ +if sm.getFieldID() == 240060002: + if not sm.hasFieldProperty("HeadSpawned"): + sm.setFieldProperty("HeadSpawned", True) + sm.spawnMob(8810000, 868, 230, False) +if sm.getFieldID() == 240060101: + if not sm.hasFieldProperty("SecondHeadSpawned"): + sm.setFieldProperty("SecondHeadSpawned", True) + sm.spawnMob(8810101, -317,230, False) \ No newline at end of file diff --git a/scripts/field/HorntailFight.py b/scripts/field/HorntailFight.py new file mode 100755 index 0000000..5579a6e --- /dev/null +++ b/scripts/field/HorntailFight.py @@ -0,0 +1,39 @@ +from net.swordie.ms.scripts import ScriptType +# from net.swordie.ms.constants import AchievementConstant # Doesn't exist at this time +# from net.swordie.ms.client import Achievements + +EhorntailIDs = [8810202, 8810203, 8810204, 8810205, 8810206, 8810207, 8810208, 8810209] +NhorntailIDs = [8810002, 8810003, 8810004, 8810005, 8810006, 8810007, 8810008, 8810009] +ChorntailIDs = [8810102, 8810103, 8810104, 8810105, 8810106, 8810107, 8810108, 8810109] +EhorntailMap = 240060300 +NhorntailMap = 240060200 +ChorntailMap = 240060201 + +if sm.getFieldID() == EhorntailMap: + mobs = EhorntailIDs + dropMob = 8810214 + +if sm.getFieldID() == NhorntailMap: + mobs = NhorntailIDs + dropMob = 8810018 + +if sm.getFieldID() == ChorntailMap: + mobs = ChorntailIDs + +for id in mobs: + sm.spawnMob(id, 95, 260, False) + dropMob = 8810118 + +count = 0 + +while count < 8: + sm.waitForMobDeath(mobs) + count = count + 1 + +sm.killMobs(True) +sm.spawnMob(dropMob) +sm.killMobs(True) +#if not chr.getAccount().isExistAchievement(AchievementConstant.MOB_HORNTAIL) and sm.getFieldID() == NhorntailMap: +# Achievements.getInstance().getById(AchievementConstant.MOB_HORNTAIL).finishAchievement(chr); +#elif not chr.getAccount().isExistAchievement(AchievementConstant.MOB_CHAOS_HORNTAIL) and sm.getFieldID() == ChorntailMap: +# Achievements.getInstance().getById(AchievementConstant.MOB_CHAOS_HORNTAIL).finishAchievement(chr); \ No newline at end of file diff --git a/scripts/field/P3_Event1_Start.py b/scripts/field/P3_Event1_Start.py new file mode 100755 index 0000000..6a07a5e --- /dev/null +++ b/scripts/field/P3_Event1_Start.py @@ -0,0 +1,8 @@ +# id 867236200 (Abrup Basin : Skuas Castle Tower), field 867236200 +sm.lockInGameUI(True, False) +sm.forcedInput(0) +sm.zoomCamera(2000, 1000, 2000, 206, -410) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/PTjob1.py b/scripts/field/PTjob1.py new file mode 100755 index 0000000..fd9db91 --- /dev/null +++ b/scripts/field/PTjob1.py @@ -0,0 +1,21 @@ +if (sm.getChr().getJob() == 2003): + sm.lockInGameUI(True) + sm.playVideoByScript("phantom.avi") + sm.levelUntil(10) + + sm.jobAdvance(2400) +# sm.setSTR(4) +# sm.setINT(4) +# sm.setDEX(4) +# sm.setLUK(35) +# sm.setAP(23) + sm.resetAP(False) + sm.addMaxHP(150) + sm.addMaxMP(50) + sm.giveAndEquip(1362001) + sm.giveAndEquip(1352100) + sm.giveItem(2000019, 50) + sm.giveItem(1142375) + sm.completeQuest(25000) + sm.lockInGameUI(False) + sm.dispose() diff --git a/scripts/field/PTjob2M.py b/scripts/field/PTjob2M.py new file mode 100755 index 0000000..4784121 --- /dev/null +++ b/scripts/field/PTjob2M.py @@ -0,0 +1,5 @@ +LOCK = 9001045 +if not sm.hasQuest(25102): + sm.startQuestNoCheck(25102) + sm.spawnMob(LOCK, 170, 182, False) +sm.dispose() \ No newline at end of file diff --git a/scripts/field/PTjob2M2.py b/scripts/field/PTjob2M2.py new file mode 100755 index 0000000..a594bfe --- /dev/null +++ b/scripts/field/PTjob2M2.py @@ -0,0 +1,6 @@ +sm.lockInGameUI(True) + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("This place is frighteningly well-preserved. Now where did I put that skill book? The small cabinet with the world's first meso? The trunk with the only existing Reverse Miracle Cube?") +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/PTtutor000.py b/scripts/field/PTtutor000.py new file mode 100755 index 0000000..f15eeb7 --- /dev/null +++ b/scripts/field/PTtutor000.py @@ -0,0 +1,50 @@ +sm.lockInGameUI(True) + +sm.giveAndEquip(1352104) +sm.giveSkill(20031211, 0) +sm.giveSkill(20031211, 1) +sm.giveSkill(20031212, 0) +sm.giveSkill(20031212, 1) +sm.playVideoByScript("phantom_memory.avi") + +sm.showFieldEffect("phantom/mapname1", 0) +sm.forcedInput(1) +sm.sendDelay(1000) + +sm.forcedInput(0) +sm.sendDelay(1000) + +sm.forcedInput(2) +sm.sendDelay(1000) + +sm.forcedInput(0) +sm.sendDelay(1000) + +sm.forcedInput(1) +sm.avatarOriented("Effect/OnUserEff.img/questEffect/phantom/tutorial") +sm.sendDelay(1000) + +sm.forcedInput(0) +sm.sendDelay(1000) + +sm.forcedInput(2) +sm.sendDelay(1000) + +sm.forcedInput(0) +sm.sendDelay(1000) + +sm.forcedInput(1) +sm.sendDelay(500) + +sm.forcedInput(0) +sm.sendDelay(1000) + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("I believe it's time to make an appearance.") +sm.sendSay("My heart is racing! It's been ages since I've felt so alive. Or anxious. I am terribly anxious.") +sm.sendSay("If I stand here any longer, I'll lose the nerve. It's now or never!") + +sm.lockInGameUI(False) +sm.warpInstanceIn(915000100, 1) +sm.dispose() diff --git a/scripts/field/PTtutor100.py b/scripts/field/PTtutor100.py new file mode 100755 index 0000000..5df9d17 --- /dev/null +++ b/scripts/field/PTtutor100.py @@ -0,0 +1,22 @@ +# Waist Deck [Phantom Tutorial: Skip] (915000100) + +ghostWalk = 20031211 +chump = 20031212 +shroudWalk = 20031205 + +MAPLE_ADMINISTRATOR = 2007 +medal = 1142375 + +tutorial = 25000 +lumiere = 150000000 + +sm.setSpeakerID(MAPLE_ADMINISTRATOR) + +if sm.sendAskYesNo("Would you like to skip the tutorial and instantly arrive at the #m" + str(lumiere) + "#?"): + # Swap beginner skills + sm.removeSkill(ghostWalk) + sm.removeSkill(chump) + sm.giveSkill(shroudWalk) + + # Let PTjob1.py handle everything else + sm.warp(lumiere) \ No newline at end of file diff --git a/scripts/field/PTtutor300.py b/scripts/field/PTtutor300.py new file mode 100755 index 0000000..2cda273 --- /dev/null +++ b/scripts/field/PTtutor300.py @@ -0,0 +1,21 @@ +GUARD1 = 9300498 +GUARD2 = 9300507 + +sm.showFieldEffect("phantom/mapname2", 0) + +sm.spawnMob(GUARD1, -2050, -1204, False) +sm.spawnMob(GUARD2, -2420, -964, False) +sm.spawnMob(GUARD1, -2070, -717, False) +sm.spawnMob(GUARD2, -2070, -476, False) +sm.spawnMob(GUARD1, -2430, -210, False) + +sm.setFuncKeyByScript(True, 20031211, 83) +sm.setFuncKeyByScript(True, 20031212, 79) + +sm.removeEscapeButton() +sm.sendSayImage("UI/tutorial/phantom/0/0") +sm.sendSayImage("UI/tutorial/phantom/1/0") +sm.sendSayImage("UI/tutorial/phantom/2/0") +sm.sendSayImage("UI/tutorial/phantom/3/0") +sm.sendSayImage("UI/tutorial/phantom/4/0") +sm.dispose() \ No newline at end of file diff --git a/scripts/field/PTtutor301.py b/scripts/field/PTtutor301.py new file mode 100755 index 0000000..1e41df5 --- /dev/null +++ b/scripts/field/PTtutor301.py @@ -0,0 +1,8 @@ +GUARD1 = 9300498 +GUARD2 = 9300507 + +sm.spawnMob(GUARD1, -2050, -1204, False) +sm.spawnMob(GUARD2, -2420, -964, False) +sm.spawnMob(GUARD1, -2070, -717, False) +sm.spawnMob(GUARD2, -2070, -476, False) +sm.spawnMob(GUARD1, -2430, -210, False) \ No newline at end of file diff --git a/scripts/field/PTtutor500.py b/scripts/field/PTtutor500.py new file mode 100755 index 0000000..158449b --- /dev/null +++ b/scripts/field/PTtutor500.py @@ -0,0 +1,226 @@ +CYGNUS = 1402100 +NEINHEART = 1402101 +MIHILE = 1402102 +OZ = 1402103 +IRENA = 1402104 +ECKHART = 1402105 +HAWKEYE = 1402106 +KIRIGA = 1402200 +KIDIS = 1402201 +KIMAN = 1402202 +KIBELU = 1402203 +HILLA = 1402400 +HILLA_GUARD = 1402401 + +sm.showFieldEffect("phantom/mapname3", 0) +sm.lockInGameUI(True) +sm.forcedInput(0) +sm.sendDelay(2000) + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("(Looks like I'm not too late. Everyone's here, but nothing has started yet. I'll just grab one of these empty seats...)") + +sm.forcedInput(2) +sm.sendDelay(1500) + +sm.forcedInput(0) +sm.sendDelay(500) + +sm.sendNext("(Cygnus and her knights look very serious. Can't say that I blame them.)") +sm.sendSay("(The senators don't seem so thrilled either. I wonder what they're thinking? Maybe I can get closer...)") + +sm.sendDelay(2000) + +sm.forcedInput(0) + +sm.setSpeakerID(KIRIGA) +sm.sendNext("Could it be true? Could Cygnus have been a fake this whole time?") + +sm.setSpeakerID(KIDIS) +sm.sendSay("Are you listening to yourself? How could that even be possible? Cygnus is the empress now and she'll be the empress tomorrow!") + +sm.setSpeakerID(KIBELU) +sm.sendSay("I'm not arguing that she's a total impostor, but if there really is someone with the treasure of Ereve...") + +sm.setSpeakerID(KIMAN) +sm.sendSay("Aria was supposed to have valued that gem above all other things. She was going to pass it on to the rightful heir.") + +sm.setSpeakerID(KIRIGA) +sm.sendSay("If that treasure proves she is the real empress, I mean if someone other than Cygnus even belongs to Aria's bloodline... everything we've worked for could be in jeopardy.") + +sm.setSpeakerID(KIBELU) +sm.sendSay("I won't betray Cygnus after all she's done for Ereve, but I can't ignore the legitimacy of this woman's claims either! ") + +sm.setSpeakerID(KIMAN) +sm.sendSay("The Maple World alliance was just about to form a unified front. The only reason most of these people are here is because they trusted Cygnus. The alliance may fall to pieces if someone else steps in.") + +sm.setSpeakerID(KIDIS) +sm.sendSay("We could stand here and speculate all day. I think it is time we let this accuser speak for herself.") +sm.sendSay("Shhh... She's here.") + +sm.forcedInput(0) +sm.sendDelay(500) + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("(The director of this convoluted play finally arrives.)") + +sm.showFieldEffect("phantom/hillah", 0) +sm.playSound("Magatia/alceCircle", 100) +sm.sendDelay(1200) + +sm.spawnNpc(HILLA, -131, -7) +sm.showNpcSpecialActionByTemplateId(HILLA, "summon", 0) + +sm.spawnNpc(HILLA_GUARD, -209, -7) +sm.showNpcSpecialActionByTemplateId(HILLA_GUARD, "summon", 0) + +sm.spawnNpc(HILLA_GUARD, -282, -7) +sm.showNpcSpecialActionByTemplateId(HILLA_GUARD, "summon", 0) + +sm.spawnNpc(HILLA_GUARD, -59, -7) +sm.showNpcSpecialActionByTemplateId(HILLA_GUARD, "summon", 0) + +sm.forcedInput(0) +sm.sendDelay(4500) + +sm.setSpeakerID(HILLA) +sm.sendNext("Thank you all for coming! I am Hilla, and I am here to tell you that I am the true heir to the Empress's throne. ") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("...") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("We're here to prove that you're lying.") + +sm.setSpeakerID(HILLA) +sm.sendSay("So you would like to think, but I'd like to talk about an old tale that the people of Ereve seem to have conveniently forgotten. A tale of Aria, the empress during the time of the Black Mage's reign...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(Aria...)") + +sm.setSpeakerID(HILLA) +sm.sendSay("As you all must know, there was no historical record left over after the Black Mage rose to power, but there WAS a persistent story of a gem that Aria clung to. The treasure called Skaia.") +sm.sendSay("Skaia, Aria's lost treasure. It's said to have been passed down from empress to empress to protect them! It holds many wondrous powers!") + +sm.setSpeakerID(IRENA) +sm.sendSay("The stories about Aria's possession of Skaia are not in question, but there are no records of what powers the jewel actually possessed...") + +sm.setSpeakerID(HILLA) +sm.sendSay("I stand before you with proof of my lineage and you argue semantics? I have the jewel, not Cygnus!") +sm.sendSay("When the Black Mage's army decimated Ereve, the Skaia was thought lost. I'm sure that's the old story you've all heard. But do you all really think such an important treasure would be written off as a loss? Do you think our forefathers would have let it linger in some tomb?") +sm.sendSay("That is lunacy! The Skaia was protected from the Black Mage, quietly passed down for hundreds of years until I could reveal my birthright!") + +sm.setSpeakerID(ECKHART) +sm.sendSay("So that's your argument?") + +sm.setSpeakerID(HILLA) +sm.sendSay("That is the truth.") + +sm.setSpeakerID(OZ) +sm.sendSay("How can you prove that the Skaia you have is real? It could be a fake.") + +sm.setSpeakerID(HILLA) +sm.sendSay("A valid question, but ultimately foolish. The name Skaia is well known, but very few have actually seen it. In fact, the only people in Maple World that would have even seen its picture are here today. That means that all of YOU are the proof that my Skaia is real!") +sm.sendSay("Do you not recognize the Skaia in my hand? Is it not the jewel you have all seen before?") + +sm.setSpeakerID(HAWKEYE) +sm.sendSay("Listen to what you're saying! Jewels can be forged and reproduced. There is no way we can be certain that the one you have is the real thing.") + +sm.setSpeakerID(HILLA) +sm.sendSay("I'm sorry, Sir Hawkeye, but were you alive hundreds of years ago? No, Your opinion on the validity of this gem is of no importance.") +sm.sendSay("Besides, we have not yet gotten to the real argument. I ask you all, why is the Lady Cygnus so frail? If she is indeed the true heir, she would not be overpowered by Shinsoo's strength. Lady Cygnus, you yourself must know that you were not meant to wield the power you've stolen...") + +sm.setSpeakerID(MIHILE) +sm.sendSay("Such insolence!") + +sm.setSpeakerID(HILLA) +sm.sendSay("Oh... was I being insolent? Is speaking the truth now a sign of betrayal?") +sm.sendSay("Think on my words and decide for yourselves! Isn't that your role, Cygnus? To act on what is best for the people?") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("She is right. I am no one special and I am unable to fully absorb Shinsoo's power. I don't know why, but I was born like this. ") +sm.sendSay("If this woman questions my validity as your empress, we must at least allow her to discuss it, or we will be no better than the Black Mage...") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("Lady Cygnus!") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("I have to do what is right! I've asked the world to fight for me while I sit here under the protection of more people I've asked to fight for me. If I've done that without any real authority or qualification...") +sm.sendSay("Then I am no better than a tyrant.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(Her voice is shaking like a leaf, but her eyes are firm. She really is Aria's niece... and she seems to be quite popular.)") + +sm.setSpeakerID(HILLA) +sm.sendSay("I believe we've dragged this on long enough! Let's see who truly carries the bloodline of the empress. It is said that Skaia will shine in the hands of an Empress. Do you care to test your mettle, little Cygnus?") +sm.sendSay("It shines in my hands. Will it shine in yours?") + +sm.showFieldEffect("phantom/skaia", 0) +sm.playSound("phantom/skaia", 100) +sm.forcedInput(0) +sm.sendDelay(7500) + +sm.setSpeakerID(CYGNUS) +sm.sendNext("Ah...") + +sm.setSpeakerID(HILLA) +sm.sendSay("Not even a flicker. What more do you need?") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("...") + +sm.setSpeakerID(MIHILE) +sm.sendSay("It's too early for conclusions, Empress.") + +sm.setSpeakerID(HAWKEYE) +sm.sendSay("That's right. We still don't even know if that stone is real.") + +sm.setSpeakerID(OZ) +sm.sendSay("R-right! Even I can make light with magic!") + +sm.setSpeakerID(IRENA) +sm.sendSay("When Shinsoo returns, she'll reveal the truth. You absolutely cannot believe that woman's words.") + +sm.setSpeakerID(ECKHART) +sm.sendSay("If you falter, the Cygnus Knights falter as well. Stay strong.") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("Your alliance is the foundation for a new era in Maple World. This could all be a scheme to place doubt on your position. We cannot listen to her until she presents solid proof.") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("Everyone...") + +sm.setSpeakerID(HILLA) +sm.sendSay("Your hounds are trying desperately to ignore the truth.") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("I won't deny your hard work, Cygnus. You have been surprisingly wise for a young girl, but I urge you to make the right decision.") +sm.sendSay("Acknowledge me as the real empress and step away from this charade before it's too late.") + +sm.setSpeakerID(HILLA) +sm.sendSay("Tell the alliance that they will follow me now.") +sm.sendSay("Of course, I'm not without sympathy to your situation. I'll give you some time to take all of this in. Do whatever you need to do to reconcile yourself with the truth.") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("When you are finished, you will find that the true Empress of Maple World is not Cygnus, but Hilla.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(Gaston should be ready about now. Time to take the plunge!)") + +sm.showFieldEffect("phantom/phantom", 0) +sm.forcedInput(0) +sm.sendDelay(1500) + +sm.sendNext("Jumping ahead of ourselves, aren't we?") + +sm.sendDelay(500) + +sm.startQuestNoCheck(25001) +sm.lockInGameUI(False) +sm.removeNpc(HILLA) +sm.removeNpc(HILLA_GUARD) +sm.removeNpc(HILLA_GUARD) +sm.removeNpc(HILLA_GUARD) +sm.warpInstanceOut(150000000, 2) +sm.dispose() \ No newline at end of file diff --git a/scripts/field/PinkBeenJob_Event.py b/scripts/field/PinkBeenJob_Event.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/PinkBeen_before.py b/scripts/field/PinkBeen_before.py new file mode 100755 index 0000000..82b2d13 --- /dev/null +++ b/scripts/field/PinkBeen_before.py @@ -0,0 +1,45 @@ +# Pinkbean fight +if sm.getFieldID() == 270051100 and not sm.hasFieldProperty("PinkBeanSpawned"): + sm.setFieldProperty("PinkBeanSpawned", True) + sm.spawnMob(8820000, 0, -42, False) + sm.spawnMob(8820103, 4, -42, False) + sm.waitForMobDeath(8820103) + sm.spawnMob(8820104, 4, -42, False) + sm.waitForMobDeath(8820104) + sm.spawnMob(8820103, 4, -42, False) + sm.waitForMobDeath(8820103) + sm.spawnMob(8820103, 4, -42, False) + sm.spawnMob(8820105, 4, -42, False) + sm.waitForMobDeath(8820105) + sm.spawnMob(8820104, 4, -42, False) + sm.waitForMobDeath(8820104) + sm.spawnMob(8820104, 4, -42, False) + sm.spawnMob(8820106, 4, -42, False) + sm.waitForMobDeath(8820106) + sm.spawnMob(8820102, 4, -42, False) + sm.waitForMobDeath(8820102) + sm.removeMobByTemplateId(8820000) + sm.spawnMob(8820200, -16, -42, False) +if sm.getFieldID() == 270050100 and not sm.hasFieldProperty("PinkBeanSpawned"): + sm.setFieldProperty("PinkBeanSpawned", True) + sm.spawnMob(8820000, 0, -42, False) + sm.spawnMob(8820003, 4, -42, False) + sm.waitForMobDeath(8820003) + sm.spawnMob(8820004, 4, -42, False) + sm.waitForMobDeath(8820004) + sm.spawnMob(8820003, 4, -42, False) + sm.waitForMobDeath(8820003) + sm.spawnMob(8820003, 4, -42, False) + sm.spawnMob(8820005, 4, -42, False) + sm.waitForMobDeath(8820005) + sm.spawnMob(8820004, 4, -42, False) + sm.waitForMobDeath(8820004) + sm.spawnMob(8820004, 4, -42, False) + sm.spawnMob(8820006, 4, -42, False) + sm.waitForMobDeath(8820006) + sm.spawnMob(8820002, 4, -42, False) + sm.waitForMobDeath(8820002) + sm.removeMobByTemplateId(8820000) + sm.spawnMob(8820001, -16, -42, False) +else: + sm.dispose() diff --git a/scripts/field/Polo_Wave.py b/scripts/field/Polo_Wave.py new file mode 100755 index 0000000..70d7c86 --- /dev/null +++ b/scripts/field/Polo_Wave.py @@ -0,0 +1,37 @@ +from random import randrange +from time import sleep + +respawnsPerRound = 20 +Rounds = 20 +x = 953 +y = 165 +bossY = -195 +#mobs = { #wave [mobid, mobid, boss] each stage has two mobs +# 0 : [9831000, 9831001, 9831002], +# 1 : [9831003, 9831004, 9831005], +# 2 : [9831006, 9831007, 9831008], +# 3 : [5062009, 11000, 0], +# 4 : [2711004, 15000, 0], +#} + +mobsBaseId = 9831000 +mobsLevel = int(chr.getLevel() / 1.25) + +def doWave(wave): + count = 0 + sm.spawnBuffedMobRespawnable(mobsBaseId + wave * 3 + randrange(2), x, y, False, 0, 1 * 1000, respawnsPerRound, mobsLevel) + while count < respawnsPerRound: + sm.waitForMobDeath() + count += 1 + if sm.getFieldProperty("lives") <= 0: + sm.stopEvents() + sm.warpInstanceOut(chr.getPreviousFieldID()) + sm.dispose() + sleep(5) + +sm.setFieldProperty("lives", 20) +for i in range(5): + doWave(i) +sm.giveNX(100000) +sleep(1) +sm.warpInstanceOut(chr.getPreviousFieldID()) \ No newline at end of file diff --git a/scripts/field/PrincessNo.py b/scripts/field/PrincessNo.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/PrincessNo_summon.py b/scripts/field/PrincessNo_summon.py new file mode 100755 index 0000000..bd25c29 --- /dev/null +++ b/scripts/field/PrincessNo_summon.py @@ -0,0 +1 @@ +sm.spawnMob(9450022, -66, -205, False) diff --git a/scripts/field/PromiseDragon.py b/scripts/field/PromiseDragon.py new file mode 100755 index 0000000..82c4108 --- /dev/null +++ b/scripts/field/PromiseDragon.py @@ -0,0 +1,2 @@ +sm.lockInGameUI(True, False) +sm.reservedEffect("Effect/Direction4.img/PromiseDragon/Scene0") \ No newline at end of file diff --git a/scripts/field/Ranmaru_Before.py b/scripts/field/Ranmaru_Before.py new file mode 100755 index 0000000..c732312 --- /dev/null +++ b/scripts/field/Ranmaru_Before.py @@ -0,0 +1,6 @@ +from net.swordie.ms.constants import BossConstants + +spawned = field.hasProperty(BossConstants.RANMARU_SPAWN_KEY) and field.getProperty(BossConstants.RANMARU_SPAWN_KEY) +if not spawned: + field.setProperty(BossConstants.RANMARU_SPAWN_KEY, True) + sm.spawnMob(9421583, -373, 123, False, BossConstants.RANMARU_HP) \ No newline at end of file diff --git a/scripts/field/Ranmaru_ExpeditionEnter.py b/scripts/field/Ranmaru_ExpeditionEnter.py new file mode 100755 index 0000000..9d1b0a6 --- /dev/null +++ b/scripts/field/Ranmaru_ExpeditionEnter.py @@ -0,0 +1,9 @@ +from net.swordie.ms.constants import BossConstants + +field = chr.getField() +instance = chr.getInstance() +init = instance.initialised + +if not init: + instance.initialised = True + mob = sm.spawnMob(BossConstants.RANMARU_CHAOS_TEMPLATE_ID, -373, 123, False, BossConstants.RANMARU_CHAOS_HP) \ No newline at end of file diff --git a/scripts/field/Ranmaru_ExpeditionEnter2.py b/scripts/field/Ranmaru_ExpeditionEnter2.py new file mode 100755 index 0000000..650ae7d --- /dev/null +++ b/scripts/field/Ranmaru_ExpeditionEnter2.py @@ -0,0 +1,7 @@ +field = chr.getField() +instance = chr.getInstance() +init = instance.initialised + +if not init: + instance.initialised = True + mob = sm.spawnMob(9410248, -373, 123, False) \ No newline at end of file diff --git a/scripts/field/Resi_tutor10.py b/scripts/field/Resi_tutor10.py new file mode 100755 index 0000000..3f17e02 --- /dev/null +++ b/scripts/field/Resi_tutor10.py @@ -0,0 +1,34 @@ +# Resistance - Tutorial Skipper +def skip_tutorial(): + MAPLE_ADMINISTRATOR = 2007 + + quests_to_complete = [ + 23000, # Spill It, Headmaster! + 23001, # Request from a Kindergarten Teacher + 23002, # Request from a Police Officer + 23003, # Request from a Doctor + 23004, # Request from a Streetsweeper + 23005, # Request from a Mascot + 23010, # Mysterious Invitation + ] + + map_to_warp = 310010000 # Secret Plaza + target_level = 10 + + sm.setSpeakerID(MAPLE_ADMINISTRATOR) + sm.removeEscapeButton() + sm.lockInGameUI(True) + + if sm.sendAskYesNo("Would you like to skip the tutorial questline and instantly arrive at #m" + str(map_to_warp) + "#?"): + if sm.getChr().getLevel() < target_level: + sm.addLevel(target_level - sm.getChr().getLevel()) + + for quest in quests_to_complete: + sm.completeQuestNoRewards(quest) + + sm.warp(map_to_warp) + + sm.lockInGameUI(False) + sm.dispose() + +skip_tutorial() \ No newline at end of file diff --git a/scripts/field/Resi_tutor20.py b/scripts/field/Resi_tutor20.py new file mode 100755 index 0000000..f304a03 --- /dev/null +++ b/scripts/field/Resi_tutor20.py @@ -0,0 +1,2 @@ +sm.showFieldEffect("resistance/tutorialGuide") +sm.createQuestWithQRValue(23007, "") \ No newline at end of file diff --git a/scripts/field/Resi_tutor30.py b/scripts/field/Resi_tutor30.py new file mode 100755 index 0000000..17fb7bb --- /dev/null +++ b/scripts/field/Resi_tutor30.py @@ -0,0 +1,2 @@ +# 931000010 +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/resistanceTutorial/userTalk") \ No newline at end of file diff --git a/scripts/field/Resi_tutor40.py b/scripts/field/Resi_tutor40.py new file mode 100755 index 0000000..f812dc0 --- /dev/null +++ b/scripts/field/Resi_tutor40.py @@ -0,0 +1,30 @@ +# 931000011 +sm.removeEscapeButton() + +sm.setSpeakerID(2159012) +sm.sendNext("The experiment is going well, quite well. The endless supply of Rue is certainly speeding things along. Joining the Black Wings was a wise decision, a wise decision indeed. Muahaha!") + +sm.setSpeakerID(2159008) +sm.sendSay("I say, you have great foresight about these things.") + +sm.setSpeakerID(2159012) +sm.sendSay("The android the Black Wings wanted will be completed soon. Oh yes, very soon. Then, the next stage will begin! I will conduct an experiment wilder than their wildest dreams!") + +sm.setSpeakerID(2159008) +sm.sendSay("Pardon? The next stage?") + +sm.setSpeakerID(2159012) +sm.sendSay("Teeheehee, do you still not comprehend what I'm trying to create? Look around! Here's a clue: it's eons more interesting than a simple android. Eons more interesting.") + +sm.setSpeakerID(2159008) +sm.sendSay("What?? All these test subjects... I say, sir, just what are you planning to do?") + +sm.setSpeakerID(2159012) +sm.sendSay("Now, now, you may not understand the grandness of my experiments. I don't expect you to. No, I don't expect you to. Just focus on your job and make sure none of the test subjects run away.") +sm.sendSay("Hey... Did you hear that?") + +sm.setSpeakerID(2159008) +sm.sendSay("Huh? Well... Now that you mention it, I do hear something. Yes, I do hear something...") + +# Tremble (FieldEffect here) - (0, 500, 30). +sm.reservedEffect("Effect/Direction4.img/Resistance/TalkInLab") \ No newline at end of file diff --git a/scripts/field/Resi_tutor50.py b/scripts/field/Resi_tutor50.py new file mode 100755 index 0000000..16f7cd4 --- /dev/null +++ b/scripts/field/Resi_tutor50.py @@ -0,0 +1,21 @@ +# 931000012 +sm.removeEscapeButton() +sm.setSpeakerID(2159006) +sm.sendNext("Whew, something must have distracted them. Now's your chance. GO!") + +sm.setPlayerAsSpeaker() +sm.sendSay("But if I flee, you'll be left here alone...") + +sm.setSpeakerID(2159006) +sm.sendSay("Forget about me. You can't help me. Doctor Gelimer would realize right away if I'm missing, and then he'd summon the Black Wings to look for us. No, forget me and save yourself. Please!") + +sm.setPlayerAsSpeaker() +sm.sendSay("I can't just leave you here! And you shouldn't give up hope so easily!") + +sm.setSpeakerID(2159006) +sm.sendSay("But it IS hopeless. I'm stuck in here. But thank you for caring. It's been a long time since anyone's been kind to me. But now, hurry! You must go!") +if not sm.sendAskYesNo("#b(Vita closes her eyes like she's given up. What should you do? How about trying to break open the vat?)#k"): + sm.sendNext("#b(You tried to hit the vat with all your might, but your hand slipped!)#k") + +sm.giveExp(60) +sm.warp(931000013, 0) \ No newline at end of file diff --git a/scripts/field/Resi_tutor50_1.py b/scripts/field/Resi_tutor50_1.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/Resi_tutor60.py b/scripts/field/Resi_tutor60.py new file mode 100755 index 0000000..d1db77f --- /dev/null +++ b/scripts/field/Resi_tutor60.py @@ -0,0 +1,9 @@ +# 931000020 + +sm.setSpeakerID(2159007) +sm.sendNext("It's been...a really long time since I've been outside the laboratory. Where are we?") + +sm.setPlayerAsSpeaker() +sm.sendSay("This is the road that leads to Edelstein, where I live! Let's get out of here before the Black Wings follow us.") + +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow1") \ No newline at end of file diff --git a/scripts/field/Resi_tutor70.py b/scripts/field/Resi_tutor70.py new file mode 100755 index 0000000..2637caa --- /dev/null +++ b/scripts/field/Resi_tutor70.py @@ -0,0 +1 @@ +sm.reservedEffect("Effect/Direction4.img/Resistance/TalkJ") \ No newline at end of file diff --git a/scripts/field/Resi_tutor80.py b/scripts/field/Resi_tutor80.py new file mode 100755 index 0000000..16d3ee0 --- /dev/null +++ b/scripts/field/Resi_tutor80.py @@ -0,0 +1 @@ +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/SailField.py b/scripts/field/SailField.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/ShipLevel.py b/scripts/field/ShipLevel.py new file mode 100755 index 0000000..05b7f03 --- /dev/null +++ b/scripts/field/ShipLevel.py @@ -0,0 +1,9 @@ +if sm.getShipLevel() == 30: + sm.deductShipExp(sm.getShipExp()) + sm.dispose() +if sm.getShipExp() > 100: + sm.deductShipExp(100) + sm.giveShipLevel(1) + sm.playSound("profession/levelup") + sm.dispose() +else: sm.dispose() \ No newline at end of file diff --git a/scripts/field/Sky_GateMapEnter.py b/scripts/field/Sky_GateMapEnter.py new file mode 100755 index 0000000..7efa96c --- /dev/null +++ b/scripts/field/Sky_GateMapEnter.py @@ -0,0 +1,3 @@ +# id 240080000 (Leafre : Crimson Sky Dock), field 240080000 +sm.createQuestWithQRValue(15794, "beforelv=211") +sm.createQuestWithQRValue(18418, "B=34970") diff --git a/scripts/field/Sky_Quest.py b/scripts/field/Sky_Quest.py new file mode 100755 index 0000000..12cdb94 --- /dev/null +++ b/scripts/field/Sky_Quest.py @@ -0,0 +1,4 @@ +if sm.getFieldID() == 240030102 and sm.hasQuest(3757): + sm.setPlayerAsSpeaker() + sm.sendNext("Was this the place that the Dragon Rider was last spotted?") + sm.sendSay("You should find a clue if you enter that#b portal on the lower right side of the map#k. Go on ahead.") \ No newline at end of file diff --git a/scripts/field/Sky_StageEnter.py b/scripts/field/Sky_StageEnter.py new file mode 100755 index 0000000..0dc0d28 --- /dev/null +++ b/scripts/field/Sky_StageEnter.py @@ -0,0 +1,39 @@ +# id 240080100 (Leafre : Crimson Sky 1 ), field 240080100 +sm.startQuest(7813) +sm.startQuest(7814) +sm.startQuest(7815) +sm.createQuestWithQRValue(1210, "try=1") +sm.startQuest(1210) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.showFieldEffect("quest/party/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.warp(240080200) diff --git a/scripts/field/StageMsg_crack.py b/scripts/field/StageMsg_crack.py new file mode 100755 index 0000000..1b77136 --- /dev/null +++ b/scripts/field/StageMsg_crack.py @@ -0,0 +1,48 @@ +# Hidden street | Abandoned Tower / Abandoned Tower + +import random +from net.swordie.ms.enums import WeatherEffNoticeType + +STAGE_2_CLEARED = "Stage2Cleared" +STAGE_3_ORDER = "Stage3Order" +stage3OrderArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +STAGE_4_CLEARED = "Stage4Cleared" + +#Stage 2 +if sm.getFieldID() == 922010400: + if chr.getParty().getOrCreateFieldById(922010401).getMobs().size() == 0 and chr.getParty().getOrCreateFieldById(922010402).getMobs().size() == 0 and chr.getParty().getOrCreateFieldById(922010403).getMobs().size() == 0 and chr.getParty().getOrCreateFieldById(922010404).getMobs().size() == 0 and chr.getParty().getOrCreateFieldById(922010405).getMobs().size() == 0: + #Do this so that the effect won't get spammed + if not field.hasProperty(STAGE_2_CLEARED): + sm.invokeForParty("showFieldEffect", "quest/party/clear", 10000) + sm.showObjectFieldEffect("gate") + field.setProperty(STAGE_2_CLEARED, True) + else: + sm.showWeatherNotice("Defeat all the Dark Eyes and Shadow Eyes hiding in the darkness!", WeatherEffNoticeType.LudibriumPQ, 5000) + +#Stage 3 +elif sm.getFieldID() == 922010600: + #Create puzzle order + field.setProperty(STAGE_3_ORDER, stage3OrderArray) + i = 0 + while i < len(stage3OrderArray): + x = random.randint(1, 3) + stage3OrderArray[i] = x + i+=1 + field.setProperty(STAGE_3_ORDER, stage3OrderArray) + sm.showWeatherNotice("Figure out the hidden code for the boxes and get to the top.", WeatherEffNoticeType.LudibriumPQ, 5000) + +#Stage 4 +elif sm.getFieldID() == 922010700: + while sm.hasMobsInField(): + sm.waitForMobDeath() + sm.invokeForParty("showFieldEffect", "quest/party/clear", 10000) + field.setProperty(STAGE_4_CLEARED, True) + sm.showObjectFieldEffect("gate") + +#Stage 5 +elif sm.getFieldID() == 922010800: + sm.showWeatherNotice("Get on the box that corresponds to the answer to the question!", WeatherEffNoticeType.LudibriumPQ, 5000) + +#Stage 6: +elif sm.getFieldID() == 922010900: + sm.spawnMob(9300012, 979, 184, False) diff --git a/scripts/field/StageMsg_davy.py b/scripts/field/StageMsg_davy.py new file mode 100755 index 0000000..78a0337 --- /dev/null +++ b/scripts/field/StageMsg_davy.py @@ -0,0 +1,19 @@ +# Maps in Lord Pirate PQ | Used to show the Weather Notice on the maps +from net.swordie.ms.enums import WeatherEffNoticeType + +stage = ((sm.getFieldID() % 1000) / 100) + 1 + +# Field Messages +if stage == 1: + sm.showWeatherNoticeToField("Eliminate all monsters and break all the chests!", WeatherEffNoticeType.LordPiratePQ) +elif stage == 2: + sm.showWeatherNoticeToField("Please collect the Pirate Marks and bring them to me", WeatherEffNoticeType.LordPiratePQ) +elif stage == 3: + sm.showWeatherNoticeToField("Eliminate all monsters and break all the chests!", WeatherEffNoticeType.LordPiratePQ) +elif stage == 4: + sm.showWeatherNoticeToField("Eliminate all monsters and break all the chests!", WeatherEffNoticeType.LordPiratePQ) +elif stage == 5: + sm.showWeatherNoticeToField("Unlock all the doors!", WeatherEffNoticeType.LordPiratePQ) +elif stage == 6: + sm.showWeatherNoticeToField("Eliminate the Captain!", WeatherEffNoticeType.LordPiratePQ) +sm.dispose() diff --git a/scripts/field/StageUserEnterSengo.py b/scripts/field/StageUserEnterSengo.py new file mode 100755 index 0000000..0fcc5f0 --- /dev/null +++ b/scripts/field/StageUserEnterSengo.py @@ -0,0 +1,49 @@ +from time import sleep + +if sm.getFieldID() == 744000041: + bossPerFloor = [ + # Floor, Boss + [1, 9410201], # + [2, 9410202], # + [3, 9410203], # + [4, 9410204], # + [5, 9410205], # + [6, 9410206], # + [7, 9410207], # + [8, 9410208], # + [9, 9410209], # + [10, 9410210], # + [11, 9410211], # + [12, 9410212], # + [13, 9410213], # + [14, 9410214], # + [15, 9410215], # + [16, 9410216], # + [17, 9410165], # + [18, 9410166], # + [19, 9410167], # + [20, 9410168], # + [21, 9410171], # + [22, 9410171] # + + ] + + def doWork(floor, boss): + chr.chatMessage(" Stage: " + str(floor)) + sm.spawnMob(boss, 7, 257, False, 100000000) + sm.waitForMobDeath(boss) + sleep(3) + + for i in range(len(bossPerFloor)): + if 0 <= i <= 20: + doWork(bossPerFloor[i][0], bossPerFloor[i][1]) + else: + sm.giveFriendPoints(600) + sleep(2) + sm.warpInstanceOut(744000020) + sm.dispose() + + + +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/field/UMField.py b/scripts/field/UMField.py new file mode 100755 index 0000000..098c32b --- /dev/null +++ b/scripts/field/UMField.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Map ID :: 913050010 +# Ereve : Conference Room of the Alliance + +sm.setTemporarySkillSet(0) \ No newline at end of file diff --git a/scripts/field/VanLeon_Before.py b/scripts/field/VanLeon_Before.py new file mode 100755 index 0000000..278aa2a --- /dev/null +++ b/scripts/field/VanLeon_Before.py @@ -0,0 +1,7 @@ +# spawns von leon npc, has a talk, then morphs into boss (in VanLeon_Summon script) + +VON_LEON_NPC = 2161000 +SPAWNX = -10 +SPAWNY = -181 + +sm.spawnNpc(VON_LEON_NPC, SPAWNX, SPAWNY) \ No newline at end of file diff --git a/scripts/field/VisitorleaveDirectionMode.py b/scripts/field/VisitorleaveDirectionMode.py new file mode 100755 index 0000000..19e1b1c --- /dev/null +++ b/scripts/field/VisitorleaveDirectionMode.py @@ -0,0 +1,4 @@ +# Pink Zakum : Pink Zakum Entrance +# Called when user enters pink zakum auto event lobby + +sm.sendAutoEventClock() \ No newline at end of file diff --git a/scripts/field/WUK_enter.py b/scripts/field/WUK_enter.py new file mode 100755 index 0000000..c2d9e72 --- /dev/null +++ b/scripts/field/WUK_enter.py @@ -0,0 +1,5 @@ +# field 933011000 | First time together + +from net.swordie.ms.enums import WeatherEffNoticeType + +sm.showWeatherNotice("Everyone! Talk to Cloto, and defeat Ligators to find the coupons Cloto wants!", WeatherEffNoticeType.KerningPQ, 5000) \ No newline at end of file diff --git a/scripts/field/WU_moonRabbit.py b/scripts/field/WU_moonRabbit.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/WUmoonrabbit_count.py b/scripts/field/WUmoonrabbit_count.py new file mode 100755 index 0000000..413de78 --- /dev/null +++ b/scripts/field/WUmoonrabbit_count.py @@ -0,0 +1,5 @@ +# field 933001000 | (Moon Bunny's Rice Cake : Primrose HIll) +STAGE_1_CLEARED = "Stage1Cleared" +STAGE_1_FLOWER_DATA = "Stage1FlowerData" +field.setProperty(STAGE_1_FLOWER_DATA, 0) +field.setProperty(STAGE_1_CLEARED, False) \ No newline at end of file diff --git a/scripts/field/WUmoonrabbit_mapEnter.py b/scripts/field/WUmoonrabbit_mapEnter.py new file mode 100755 index 0000000..47c7f5a --- /dev/null +++ b/scripts/field/WUmoonrabbit_mapEnter.py @@ -0,0 +1,10 @@ +from net.swordie.ms.enums import WeatherEffNoticeType + +if not field.hasProperty("stage"): + # field.setRespawn(False) + mobids = [9300903, 9300904, 9300905] + field.setNoRespawn(mobids) + sm.killMobs(); + sm.setInstanceTime(1200) + sm.showWeatherNotice("6 Primrose Seeds, stolen by the pigs, must be recovered... ", WeatherEffNoticeType.RiceCakePQ) + field.setProperty("stage", 1) \ No newline at end of file diff --git a/scripts/field/abysscave_ent.py b/scripts/field/abysscave_ent.py new file mode 100755 index 0000000..88c4b84 --- /dev/null +++ b/scripts/field/abysscave_ent.py @@ -0,0 +1,10 @@ +# Root Abyss | Abyssal Cave (Vellum's Boss Map) + +from net.swordie.ms.enums import WeatherEffNoticeType + +sm.showWeatherNotice("Vellum is nowhere to be seen. Take a look around the altar.", WeatherEffNoticeType.SnowySnowAndSprinkledFlowerAndSoapBubbles, 10000) +if sm.hasQuest(30012): + sm.waitForMobDeath(9400942) + sm.completeQuest(30012) #[Root Abyss] Defeat the Final Guardian + sm.dispose() + diff --git a/scripts/field/achieve_davy.py b/scripts/field/achieve_davy.py new file mode 100755 index 0000000..d65c39a --- /dev/null +++ b/scripts/field/achieve_davy.py @@ -0,0 +1,4 @@ +# Maps in Lord PiratePQ | Used in the Lord Pirate PQ +if sm.getFieldID() == 925100500 and not sm.hasMobsInField(): + sm.spawnMob(9300119, 566, 238, False) # Spawns Captain Davy John +sm.dispose() diff --git a/scripts/field/agite_sion.py b/scripts/field/agite_sion.py new file mode 100755 index 0000000..cabbcea --- /dev/null +++ b/scripts/field/agite_sion.py @@ -0,0 +1,15 @@ +# id 865030111 (Commerci Republic : Assassins's Den Interior), field 865030111 +sm.lockInGameUI(True, False) +sm.forcedInput(0) +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9010000) # Maple Administrator +res = sm.sendAskYesNo("Would you like to skip the cutscenes?") +sm.createQuestWithQRValue(18418, "B=33295") +sm.lockInGameUI(False, True) +sm.showNpcSpecialActionByTemplateId(9390236, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9390237, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9390238, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9390218, "summon", 0) +sm.completeQuestNoCheck(17664) +sm.createQuestWithQRValue(18418, "B=33296") diff --git a/scripts/field/angelic_tuto0.py b/scripts/field/angelic_tuto0.py new file mode 100755 index 0000000..76ef80a --- /dev/null +++ b/scripts/field/angelic_tuto0.py @@ -0,0 +1,108 @@ +# Created by MechAviv +# Map ID :: 940011000 +# Nova's Sanctum : Pantheon + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.hideUser(True) +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Are you cryin' again, #h0#?!") + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("B-but the other kids are makin' fun of me!") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("That's cause you don't have no magic!") + + +sm.sendDelay(600) + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Do not be so harsh with her, Velderoth. #h0# can not help the way she was born. ") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("But... I don't want to see #h0# getting bullied anymore! Maybe she can learn to use magic like us...") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Stop picking on her, Velderoth. You're supposed to be her friend.") + + +sm.sendDelay(600) + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("I'm sorry you guys, I don't want to start a fight...") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("(Dear little #h0#...)") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("We'll watch your back forever, #h0#. I swear it.") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("This is bummin' me out! Let's go down to town and get some candy!") + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Okay!") + + +sm.sendDelay(600) + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("#h0#, you're so much less ugly when you smile!") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Totally!") + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Gee, thanks. Jerks.") + + +sm.sendDelay(300) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940011010, 0) diff --git a/scripts/field/angelic_tuto1.py b/scripts/field/angelic_tuto1.py new file mode 100755 index 0000000..dddc9ee --- /dev/null +++ b/scripts/field/angelic_tuto1.py @@ -0,0 +1,153 @@ +# Created by MechAviv +# Map ID :: 940011010 +# Western Region of Pantheon : Heliseum Hideout + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.hideUser(True) +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Super #h0# construction!") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Haha, what? You say the funniest things.") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("What are you gonna call this place?") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It's gotta be super tough! And awesome!") + + +sm.sendDelay(900) + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("How about the Justice Lair?") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Hahahaha, you love justice like I love pushups!") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("That's too kiddy.") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Then what are we gonna call it?") + + +sm.sendDelay(900) + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("I know!! Let's call ourselves the Heliseum Force.") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Heliseum Force?") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("If we're gonna take back Heliseum from that stupid Magnus, we have to remember it every single day!") + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Cool!! That's so cool, Velderoth!") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I know, right?") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I think it sounds good.") + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Then this place will be the Heliseum Hideout from now on!") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("This is going to be sooo awesome!") + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Are you gonna be our captain, Veldie?") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Uh... me?") + + +sm.setSpeakerID(3000102) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I don't want to lead people. I just want to be tough!") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Is that really okay?") + + +sm.setSpeakerID(3000100) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Sure thing, cap'n!") + + +sm.setSpeakerID(3000101) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Then today is the official founding of the Heliseum Force!") + + +sm.sendDelay(300) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940012010, 0) diff --git a/scripts/field/angelic_tuto10.py b/scripts/field/angelic_tuto10.py new file mode 100755 index 0000000..e7135a7 --- /dev/null +++ b/scripts/field/angelic_tuto10.py @@ -0,0 +1,28 @@ +# Created by MechAviv +# Map ID :: 940011100 +# Eastern Region of Pantheon : East Sanctum + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Okay, dragon-guy, we're here. ") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Do you see a ring where the relic used to be?") + + +sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/field/angelic_tuto10_0.py b/scripts/field/angelic_tuto10_0.py new file mode 100755 index 0000000..6279134 --- /dev/null +++ b/scripts/field/angelic_tuto10_0.py @@ -0,0 +1,31 @@ +# Created by MechAviv +# Map ID :: 940011100 +# Eastern Region of Pantheon : East Sanctum + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg2/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Just put that on your little finger. ") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Is this gonna shock me or something? I hate pranks...") + + +sm.giveAndEquip(1222001) +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Would you just put the stupid thing on so I can make you powerful?!") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940012000, 0) diff --git a/scripts/field/angelic_tuto11.py b/scripts/field/angelic_tuto11.py new file mode 100755 index 0000000..5057638 --- /dev/null +++ b/scripts/field/angelic_tuto11.py @@ -0,0 +1,137 @@ +# Created by MechAviv +# Map ID :: 940011110 +# Eastern Region of Pantheon : East Sanctum + +# [SET_DRESS_CHANGED] [01 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/2", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Holy moly, you look amazing! Look at those legs! And that hair! And your-- why are you looking at me like that?") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("W-what am I wearing?! Where are my pants?!") +# Unhandled User Effect [PlaySoundWithMuteBGM] Packet: 23 15 00 56 6F 69 63 65 2E 69 6D 67 2F 41 6E 67 65 6C 69 63 5F 46 2F 31 + + +OBJECT_1 = sm.sendNpcController(3000119, 150, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.sendDelay(90) + + +OBJECT_2 = sm.sendNpcController(3000115, 250, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.sendDelay(90) + + +OBJECT_3 = sm.sendNpcController(3000111, 350, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +sm.sendDelay(90) + + +sm.setSpeakerID(3000119) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("There! That girl has the relic on her arm!") + + +sm.setSpeakerID(3000115) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Do we really need to hurt a pretty little thing like her? The relic is out of the Sanctum, it won't cause us any trouble.") + + +sm.setSpeakerID(3000119) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Don't be stupid! We can't let some little bimbo take credit for our actions!") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I-I'm sorry, um, ma'am, but would you please give me that relic?") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("You're one of those creeps I saw before!") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Well, I wouldn't say 'creep' so much as liberator. Look, maybe you can give me that beautiful bracelet of yours for a bit and I can take you out for dinner...") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("No way, you old weirdo! I can't even get this thing off of my arm.") + + +sm.setSpeakerID(3000119) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Would you stop flirting?! Just grab the bimbo and we'll get out of here!") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#h0#! Now would be a good time to kick the tar out of them.") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("H-how do I do that?!") + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/3", 900, 30, -70, -2, -2, False, 0) +sm.sendDelay(900) + + +sm.setSpeakerID(3000119) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("What mad devilry is going on inside that lovely little head of yours? Come now! Let's go!") + + +sm.sendDelay(300) + +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.spawnMob(9300560, 150, 239, False) +sm.spawnMob(9300561, 250, 239, False) +sm.spawnMob(9300562, 350, 239, False) +sm.chatScript("Press the CTRL key to attack.") +sm.systemMessage("Press the CTRL key to attack.") +sm.showFieldEffect("lightning/screenMsg/0", 0) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) + +while sm.hasMobsInField(): + sm.waitForMobDeath() +sm.warp(940001050, 0) \ No newline at end of file diff --git a/scripts/field/angelic_tuto12.py b/scripts/field/angelic_tuto12.py new file mode 100755 index 0000000..5ce85f8 --- /dev/null +++ b/scripts/field/angelic_tuto12.py @@ -0,0 +1,114 @@ +# Created by MechAviv +# Map ID :: 940011150 +# Eastern Region of Pantheon : East Sanctum + +# [SET_DRESS_CHANGED] [01 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(1) +sm.sendDelay(60) +# Unhandled User Effect [ResetOnStateForOnOffSkill] Packet: 33 + + +sm.forcedInput(0) +sm.sendDelay(300) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/4", 900, 0, -120, -2, -2, False, 0) +sm.sendDelay(150) + + +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(1) +sm.sendDelay(60) + + +sm.forcedInput(2) +sm.sendDelay(90) + + +sm.forcedInput(1) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.sendDelay(510) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/9", 900, 0, -120, -2, -2, False, 0) +sm.sendDelay(900) + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Mwahahaha, how's THAT for power?!") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("That was so much fun! It was all PEW PEW KABLOOOM!!") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Uh, yes. Yes it was sort of like that, only a lot less stupid.") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Hehehe, hahahaha, HAHAHAHAHA!") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You didn't hear a single word I said, did you? HEY! Enough with the terrifying laughter. You need some practice to use my powers properly.") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Awww, practice? I don't wannnaaaa....") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("My powers require a transformation to really be effective. I think you should give it a shot. ") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Oh, okay!") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Hehehe... Ahem, then look deep into your heart, feel my presence, and say REALLY loud... Dress-Up!") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Dress-Up?") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940012020, 0) diff --git a/scripts/field/angelic_tuto2.py b/scripts/field/angelic_tuto2.py new file mode 100755 index 0000000..48ff1aa --- /dev/null +++ b/scripts/field/angelic_tuto2.py @@ -0,0 +1,145 @@ +# Created by MechAviv +# Map ID :: 940011020 +# Eastern Region of Pantheon : Near East Sanctum + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(3000140, -1400, 0) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000104, -1650, 0) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("It's so pretty out today! I wanna take a nap!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You're such a lazy bum, #h0#. Kyle and I manage to become knights already, and here you are trying to sleep more!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Hey, I'm not a fighter like you guys! Unless I magically sprout a set of super powers, I'm gonna lounge around alllll day every day.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I'm pretty sure you've told me that one about a thousand times.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Oh, I'm sorry, am I boring you? Should I be congratulating you two on your fancy new titles? I'll join you one day!") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I don't think you really need to be a knight, #h0#. ") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("What are you talking about? We're the Heliseum Force! We have to fight!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Yeah, but you don't use magic. You have to face the truth sometime...") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Ugh, not everybody HAS to use magic, ya know? You're so thickheaded sometimes...") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I just want you to think sometimes. Anyway, I gotta get back.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Oh, I wish I could go...") + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, 0, OBJECT_1, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("What was that?") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("What are you talking about? Come on, you can daydream about smooching with #h0# on the way back to camp.") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("No, something's wrong! on! We need to get to the East Sanctum!") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Let's get moving! Heliseum Force, go!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Seriously? How in the world would you know what's going on at the East Sanctum?") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("C'mon Veldie! Kyle's gut is hardly ever wrong. Besides, I'm bored!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Why did you guys even make me captain if we're always going to follow Kyle's stupid gut?") + + +sm.moveNpcByObjectId(OBJECT_1, False, 400, 100) +sm.moveNpcByObjectId(OBJECT_2, False, 400, 100) +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(600) + + +sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/field/angelic_tuto2_0.py b/scripts/field/angelic_tuto2_0.py new file mode 100755 index 0000000..ce914ef --- /dev/null +++ b/scripts/field/angelic_tuto2_0.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940011020 +# Eastern Region of Pantheon : Near East Sanctum + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940011030, 0) diff --git a/scripts/field/angelic_tuto3.py b/scripts/field/angelic_tuto3.py new file mode 100755 index 0000000..21c7ae7 --- /dev/null +++ b/scripts/field/angelic_tuto3.py @@ -0,0 +1,124 @@ +# Created by MechAviv +# Map ID :: 940011030 +# Eastern Region of Pantheon : East Sanctum + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(3000140, -300, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000104, -450, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000110, -120, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(3000114, -50, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +OBJECT_5 = sm.sendNpcController(3000111, 130, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +OBJECT_6 = sm.sendNpcController(3000115, 250, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_6, "summon", 0) +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Nothing here, big surprise...") + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, 0, OBJECT_2, False, 0) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, 0, OBJECT_1, False, 0) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/3", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Hey, who are those priests? I've never seen 'em before.") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Velderoth, this isn't right!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You're right. They look suspicious. I'm going to run back to base and get help. You two stay here and keep an eye on them, okay? But no heroics. You get out of here if they spot you.") + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg0/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(900) + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("What are they talking about?") + + +sm.sendNpcController(OBJECT_2, False) +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("The relic's disappearance should weaken the shields.") + + +sm.setSpeakerID(3000114) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I thought the relic was cursed... should we really be touching it?") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I did not realize they allowed superstitious nincompoops entry to our order! Will you balk at the call of destiny?") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("(Are they trying to steal the relic?)") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("They're gonna take the relic away!") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Let's stop them!") + + +sm.moveNpcByObjectId(OBJECT_1, False, 300, 100) +sm.sendDelay(300) + + +sm.forcedInput(2) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_3, False, 0) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_4, False, 0) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_5, False, 0) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_6, False, 0) +sm.sendDelay(300) + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/6", 900, 0, -120, -2, -2, False, 0) +sm.sendDelay(300) + + +sm.showFieldEffect("kaiser/tear_rush", 0) diff --git a/scripts/field/angelic_tuto3_0.py b/scripts/field/angelic_tuto3_0.py new file mode 100755 index 0000000..26bb78f --- /dev/null +++ b/scripts/field/angelic_tuto3_0.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Map ID :: 940011030 +# Eastern Region of Pantheon : East Sanctum + +sm.sendDelay(1800) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940011040, 0) diff --git a/scripts/field/angelic_tuto4.py b/scripts/field/angelic_tuto4.py new file mode 100755 index 0000000..268b286 --- /dev/null +++ b/scripts/field/angelic_tuto4.py @@ -0,0 +1,91 @@ +# Created by MechAviv +# Map ID :: 940011040 +# Eastern Region of Pantheon : East Sanctum + +# [SET_DRESS_CHANGED] [00 00 ] +sm.giveAndEquip(1352601) +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.forcedInput(4) +OBJECT_1 = sm.sendNpcController(3000141, -150, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000115, 200, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000111, 300, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +sm.sendDelay(1200) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") + + +sm.showEffect("Effect/BasicEff.img/Kaiser_Transform4_S", 0, 0, 0, 0, OBJECT_1, False, 0) +sm.setSpeakerID(3000115) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("W-what is this madness?!") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("How could a mere child have that kind of power?!") +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") + + +sm.setSpeakerID(3000115) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("He seems to be unconscious. We are lucky.") +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("They came out of nowhere. We must eliminate them before more come.") +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg0/1", 1200, 0, -100, -2, -2, False, 0) +sm.sendDelay(900) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") + + +sm.forcedInput(0) +sm.setSpeakerID(3000115) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("He's waking up!") + + +sm.sendDelay(150) + + +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.forcedAction(497, 0) +sm.showEffect("Skill/6512.img/skill/65121002/effect", 0, 0, 0, -2, -2, False, 0) +sm.playSound("Angelicburster/65121002", 100) +sm.sendDelay(900) + + +sm.showFieldEffect("demonSlayer/whiteOut", 0) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "die1", 0) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "die1", 0) +sm.sendDelay(1200) + + +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.sendDelay(720) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.sendNpcController(OBJECT_1, False) +sm.warp(940011050, 0) diff --git a/scripts/field/angelic_tuto5.py b/scripts/field/angelic_tuto5.py new file mode 100755 index 0000000..940d5cd --- /dev/null +++ b/scripts/field/angelic_tuto5.py @@ -0,0 +1,72 @@ +# Created by MechAviv +# Map ID :: 940011050 +# Eastern Region of Pantheon : East Sanctum + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(4) +OBJECT_1 = sm.sendNpcController(3000141, -150, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.sendDelay(1200) + +OBJECT_2 = sm.sendNpcController(3000104, -380, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.moveNpcByObjectId(OBJECT_2, False, 100, 100) +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/5", 900, 0, -120, 0, OBJECT_2, False, 0) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.sendDelay(900) + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, 0, OBJECT_2, False, 0) +OBJECT_3 = sm.sendNpcController(3000106, -330, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(3000107, -420, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.sendDelay(900) + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, 0, OBJECT_3, False, 0) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, 0, OBJECT_4, False, 0) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.sendDelay(900) + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("What's going on here?") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kyle! #h0#!") + + +sm.showEffect("Effect/BasicEff.img/Kaiser_Transform4_S", 0, 0, 0, 0, OBJECT_1, False, 0) +sm.sendDelay(900) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/6", 1200, 0, -120, 0, OBJECT_3, False, 0) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.sendDelay(300) + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/7", 1200, 0, -120, 0, OBJECT_4, False, 0) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.sendDelay(600) + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg0/0", 1200, 0, -120, 0, OBJECT_2, False, 0) +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.sendNext("Kaiser has finally made himself known. Cartalion, please take these two to the clinic.") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene3") +sm.warp(940011060, 0) \ No newline at end of file diff --git a/scripts/field/angelic_tuto6.py b/scripts/field/angelic_tuto6.py new file mode 100755 index 0000000..eb491da --- /dev/null +++ b/scripts/field/angelic_tuto6.py @@ -0,0 +1,154 @@ +# Created by MechAviv +# Map ID :: 940011060 +# Pantheon : Pantheon Clinic + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(1) +sm.sendDelay(60) + + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(3000106, 160, 50) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000107, 10, 50) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000152, 90, 50) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +sm.setSpeakerID(3000152) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("#h0#, you have finally come to.") + + +sm.setSpeakerID(3000152) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Umm, where am I?") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Pantheon. How do you feel?") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("My head feels like a ripe watermelon, but I think I'm okay otherwise.") + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(600) + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Huh? Why is there a pink thing on my arm?") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I wish I had better news, child, but I fear you have been cursed by the East Sanctum relic. In fact, it is quite stuck to your arm.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("What?! What do I do?! How do I get it off?!") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("The security threat of having a young, defenseless girl wandering around with one of our relics strapped to her arm has not escaped me.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Do not scold the girl, Cartalion. That relic would be entirely gone if it were not for Kaiser and #h0#.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I suppose you are right, as usual.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Ha... hahaha... what? I don't remember anything...") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Are you saying that the relic grabbed me and turned into a bracelet when I touched it? Who the heck is Kaiser? What is going on?!") + + +sm.setSpeakerID(3000152) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Hey, it's going to be okay. We don't have a way to remove that relic from your arm, but it won't cause you any harm. Think of it like a nice accessory.") + + +sm.setSpeakerID(3000152) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I-I didn't mean to take it! I don't even like pink!") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#h0#, no one is blaming you for this. Three relics remain in Pantheon. We are quite safe.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("B-but, I...") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#h0#, please don't start crying. I'm a very sensitive sympathy-weeper.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Ugh...") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Cartalion!") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I'm sorry. I have very little control over my tearducts.") + + +sm.forcedInput(1) diff --git a/scripts/field/angelic_tuto6_0.py b/scripts/field/angelic_tuto6_0.py new file mode 100755 index 0000000..77dd4c1 --- /dev/null +++ b/scripts/field/angelic_tuto6_0.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940011060 +# Pantheon : Pantheon Clinic + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940011070, 0) \ No newline at end of file diff --git a/scripts/field/angelic_tuto7.py b/scripts/field/angelic_tuto7.py new file mode 100755 index 0000000..6a8fc7b --- /dev/null +++ b/scripts/field/angelic_tuto7.py @@ -0,0 +1,34 @@ +# Created by MechAviv +# Map ID :: 940011070 +# Pantheon : Great Temple Interior + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(1) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("I-I stole something! I've never stolen anything. I didn't mean to, I swear!") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I don't even have any MP... I'm incapable of doing anything... I'm useless.... ") + + +sm.forcedInput(1) +sm.sendDelay(120) + + +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene1") +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/5", 1200, 0, -120, -2, -2, False, 0) diff --git a/scripts/field/angelic_tuto7_0.py b/scripts/field/angelic_tuto7_0.py new file mode 100755 index 0000000..18f6040 --- /dev/null +++ b/scripts/field/angelic_tuto7_0.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# Map ID :: 940011070 +# Pantheon : Great Temple Interior + +OBJECT_1 = sm.sendNpcController(3000152, 300, 10) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.setSpeakerID(3000152) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("#h0#, wait!") + + +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.setSpeakerID(3000152) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("This 'curse' is not as ominous as it sounds. That relic has never reacted to any other priest, yet it clung to you like a nurturing mother.") + + +sm.setSpeakerID(3000152) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("But I don't want any of this! I didn't mean to take anything!") + + +sm.forcedInput(1) +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/6", 1200, 0, -120, 0, OBJECT_1, False, 0) +sm.curNodeEventEnd(True) diff --git a/scripts/field/angelic_tuto7_1.py b/scripts/field/angelic_tuto7_1.py new file mode 100755 index 0000000..9a4ff35 --- /dev/null +++ b/scripts/field/angelic_tuto7_1.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940011070 +# Pantheon : Great Temple Interior + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940011080, 0) diff --git a/scripts/field/angelic_tuto8.py b/scripts/field/angelic_tuto8.py new file mode 100755 index 0000000..8965627 --- /dev/null +++ b/scripts/field/angelic_tuto8.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Map ID :: 940011080 +# Western Region of Pantheon : Heliseum Hideout + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("What am I gonna do?! Maybe I can just hide in here until I die of old age.") + + +sm.sendDelay(300) + + +sm.forcedInput(2) diff --git a/scripts/field/angelic_tuto8_0.py b/scripts/field/angelic_tuto8_0.py new file mode 100755 index 0000000..9a62e6f --- /dev/null +++ b/scripts/field/angelic_tuto8_0.py @@ -0,0 +1,91 @@ +# Created by MechAviv +# Map ID :: 940011080 +# Western Region of Pantheon : Heliseum Hideout + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Bwaaaa... why... does... nothing... ever... work for me?!!") +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene1") + + +sm.sendDelay(900) + +OBJECT_1 = sm.sendNpcController(3000140, -400, 0) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.sendDelay(30) + + +sm.moveNpcByObjectId(OBJECT_1, False, 170, 100) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(690) + + +sm.forcedInput(1) +sm.sendDelay(210) + + +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Oh, Kyle! *sniff* I-I heard you were some kind of superhero now... That's great. Great for you. *sniff*") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#h0#, I was looking for you. A-are you all right?") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Me? Why do you wanna see me? Is it this thing on my arm? I didn't mean to get it stuck on there but then it just...") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I shoulda known something bad was gonna happen to me...") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#h0#...") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I... I just thought maybe I'd finally get to use magic like you guys. Instead, I get a big stupid pink bracelet and a whole lot of people mad at me... I never shoulda come with you guys.") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#h0#, I... I mean, me and Velderoth are worried about you.") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I'm sorry. I'm so sorry you two always have to worry about me. I'm just gonna stay here so you never have to worry about me again.") + + +sm.setSpeakerID(3000140) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("You should go on, okay? I need some time alone.") + + +sm.forcedInput(1) +sm.curNodeEventEnd(True) diff --git a/scripts/field/angelic_tuto8_1.py b/scripts/field/angelic_tuto8_1.py new file mode 100755 index 0000000..63c4940 --- /dev/null +++ b/scripts/field/angelic_tuto8_1.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940011080 +# Western Region of Pantheon : Heliseum Hideout + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940011090, 0) diff --git a/scripts/field/angelic_tuto9.py b/scripts/field/angelic_tuto9.py new file mode 100755 index 0000000..7761437 --- /dev/null +++ b/scripts/field/angelic_tuto9.py @@ -0,0 +1,29 @@ +# Created by MechAviv +# Map ID :: 940011090 +# Eastern Region of Pantheon : Near East Sanctum + +# [SET_DRESS_CHANGED] [00 00 ] +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Stupid. You can't just sit here and cry.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Maybe I can just put this dumb thing back at the East Sanctum. Then this will all go away!") + + +sm.forcedInput(2) diff --git a/scripts/field/angelic_tuto9_0.py b/scripts/field/angelic_tuto9_0.py new file mode 100755 index 0000000..140e5e0 --- /dev/null +++ b/scripts/field/angelic_tuto9_0.py @@ -0,0 +1,120 @@ +# Created by MechAviv +# Map ID :: 940011090 +# Eastern Region of Pantheon : Near East Sanctum + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/1", 1200, 30, -70, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg0/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/2", 1200, 0, -120, -2, -2, False, 0) +sm.forcedInput(1) +sm.sendDelay(60) + + +sm.forcedInput(2) +sm.sendDelay(120) + + +sm.forcedInput(1) +sm.sendDelay(60) + + +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.sendDelay(600) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/7", 1200, 30, -70, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/3", 1200, 30, -70, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg1/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1800) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/4", 1200, 30, -70, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.showEffect("Effect/Direction10.img/effect/tuto/BalloonMsg0/8", 1200, 30, -70, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Hey! Girly. Can you see me?") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("WHAT THE--") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("AH! Relax! I'm Eskalade. I, uh, I live in that bracelet on your pillowy-soft wrist. I was thinking, maybe since we're, like, attached that I'd give you a little of my power.") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Power? What're you talking about?") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Just go over to the spot where you grabbed that relic.") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Fine, but I'm not going to do it just because you told me. I was already going there.") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Fine! How did I end up with such a disobedient little brat?") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I'm not going to take you anywhere if you're going to be rude.") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Who's being rude?! I'm offering you ultimate power in exchange for a little trip to a place you were already going!") + + +sm.setSpeakerID(3000132) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Oh, yeah, I guess that's true.") + + +sm.forcedInput(2) +sm.curNodeEventEnd(True) diff --git a/scripts/field/angelic_tuto9_1.py b/scripts/field/angelic_tuto9_1.py new file mode 100755 index 0000000..1c89daa --- /dev/null +++ b/scripts/field/angelic_tuto9_1.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940011090 +# Eastern Region of Pantheon : Near East Sanctum + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940011100, 0) \ No newline at end of file diff --git a/scripts/field/angelic_tutoA.py b/scripts/field/angelic_tutoA.py new file mode 100755 index 0000000..24253d6 --- /dev/null +++ b/scripts/field/angelic_tutoA.py @@ -0,0 +1,39 @@ +# Created by MechAviv +# Map ID :: 940012010 +# Hidden Street : Decades Later + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.removeSkill(60011219) + +if not "1" in sm.getQRValue(25807): + sm.levelUntil(10) + sm.setJob(6500) + sm.createQuestWithQRValue(25807, "1") + sm.resetStats() + # Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 58 01 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 58 01 00 00 FF 00 00 00 00 + sm.addSP(5, True) + # [INVENTORY_GROW] [01 1C ] + # [INVENTORY_GROW] [02 1C ] + # [INVENTORY_GROW] [03 1C ] + # [INVENTORY_GROW] [04 1C ] + sm.giveSkill(60011216, 1, 1) + sm.giveSkill(60011218, 1, 1) + sm.giveSkill(60011220, 1, 1) + sm.giveSkill(60011222, 1, 1) + sm.sendDelay(300) + + +sm.showFieldEffect("kaiser/text0", 0) +sm.sendDelay(4200) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# [FORCED_STAT_RESET] [] +sm.warp(940011020, 0) diff --git a/scripts/field/angelic_tutoB.py b/scripts/field/angelic_tutoB.py new file mode 100755 index 0000000..825980a --- /dev/null +++ b/scripts/field/angelic_tutoB.py @@ -0,0 +1,14 @@ +# Created by MechAviv +# Map ID :: 940012000 +# Hidden Street : First Transformation + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.reservedEffect("Effect/Direction10.img/angelicTuto/Scene2") +sm.sendDelay(6600) + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# [FORCED_STAT_RESET] [] +sm.warp(940011110, 0) diff --git a/scripts/field/angelic_tutoC.py b/scripts/field/angelic_tutoC.py new file mode 100755 index 0000000..68b43d5 --- /dev/null +++ b/scripts/field/angelic_tutoC.py @@ -0,0 +1,15 @@ +# Created by MechAviv +# Map ID :: 940012020 +# Hidden Street : Dress-Up + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.playURLVideoByScript("http://nxcache.nexon.net/maplestory/video/yt/angelic.html") + + +sm.giveItem(1142495) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# [FORCED_STAT_RESET] [] +sm.warp(400000000, 0) \ No newline at end of file diff --git a/scripts/field/aranDirection.py b/scripts/field/aranDirection.py new file mode 100755 index 0000000..6dc4aea --- /dev/null +++ b/scripts/field/aranDirection.py @@ -0,0 +1,11 @@ +# 914090010 +if sm.getFieldID() == 914090010: + sm.reservedEffect("Effect/Direction1.img/aranTutorial/Scene0") +elif sm.getFieldID() == 914090011: + sm.reservedEffect("Effect/Direction1.img/aranTutorial/Scene10") +elif sm.getFieldID() == 914090012: + sm.reservedEffect("Effect/Direction1.img/aranTutorial/Scene20") +elif sm.getFieldID() == 914090013: + sm.reservedEffect("Effect/Direction1.img/aranTutorial/Scene3") +elif sm.getFieldID() == 914090100: + sm.reservedEffect("Effect/Direction1.img/aranTutorial/HandedPoleArm0") \ No newline at end of file diff --git a/scripts/field/aranTutorAlone.py b/scripts/field/aranTutorAlone.py new file mode 100755 index 0000000..612abdc --- /dev/null +++ b/scripts/field/aranTutorAlone.py @@ -0,0 +1,42 @@ +# Aran - Tutorial Skipper +def skip_tutorial(): + COMBAT_STEP = 20001295 + MAPLE_ADMINISTRATOR = 2007 + + quests_to_complete = [ + 21000, # Find the Missing Kid 1 + 21001, # Find the Missing Kid 2 + 21010, # The Return of the Hero + 21011, # The Missing Weapon + 21012, # Abilities Lost + 21014, # Lilin's Account + 21015, # Basic Fitness Training 1 + 21016, # Basic Fitness Training 2 + 21017, # Basic Fitness Training 3 + 21018, # Basic Fitness Test + 21100, # The Five Heroes + ] + + map_to_warp = 140000000 # Rien + target_level = 10 + + sm.setSpeakerID(MAPLE_ADMINISTRATOR) + sm.removeEscapeButton() + sm.lockInGameUI(True) + + if sm.sendAskYesNo("Would you like to skip the tutorial quest line and instantly arrive at #m" + str(map_to_warp) + "#?"): + if sm.getChr().getLevel() < target_level: + sm.addLevel(target_level - sm.getChr().getLevel()) + + for quest in quests_to_complete: + sm.completeQuestNoRewards(quest) + + sm.giveSkill(COMBAT_STEP, 1, 1) + sm.warp(map_to_warp) + + sm.createQuestWithQRValue(21019, "noskip") + sm.lockInGameUI(False) + sm.dispose() + +if sm.getQRValue(21019) != "noskip": + skip_tutorial() \ No newline at end of file diff --git a/scripts/field/aranTutorMobgen.py b/scripts/field/aranTutorMobgen.py new file mode 100755 index 0000000..a0033b0 --- /dev/null +++ b/scripts/field/aranTutorMobgen.py @@ -0,0 +1,19 @@ +# Aran Introduction +sm.killMobs() + +if sm.getFieldID() == 914000200: + sm.spawnMob(9300379, 2099, 2, False, 10) + sm.spawnMob(9300379, 1799, 2, False, 10) + sm.spawnMob(9300379, 1515, 2, False, 10) + +elif sm.getFieldID() == 914000210: + sm.spawnMob(9300380, 667, 2, False, 15) + sm.spawnMob(9300380, 382, 2, False, 15) + sm.spawnMob(9300380, 97, 2, False, 15) + +elif sm.getFieldID() == 914000220: + sm.spawnMob(9300381, -716, 2, False, 20) + sm.spawnMob(9300381, -839, 2, False, 20) + sm.spawnMob(9300381, -1046, 2, False, 20) + sm.spawnMob(9300381, -1186, 2, False, 20) + sm.spawnMob(9300381, -1332, 2, False, 20) \ No newline at end of file diff --git a/scripts/field/arcanaBoss2.py b/scripts/field/arcanaBoss2.py new file mode 100755 index 0000000..845a06c --- /dev/null +++ b/scripts/field/arcanaBoss2.py @@ -0,0 +1,3 @@ +# id 940200280 (Arcana : Grove of the Spirit Tree), field 940200280 +sm.completeQuestNoCheck(34477) +sm.warp(940200214) diff --git a/scripts/field/arcanaCave_mapEnter.py b/scripts/field/arcanaCave_mapEnter.py new file mode 100755 index 0000000..7c1930e --- /dev/null +++ b/scripts/field/arcanaCave_mapEnter.py @@ -0,0 +1,5 @@ +# id 940200300 (Cavern : Deep Within the Cavern 1), field 940200300 +sm.showFieldEffect("aswan/stageEff/stage", 0) +sm.showFieldEffect("aswan/stageEff/number/1", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/arcane1MO_1.py b/scripts/field/arcane1MO_1.py new file mode 100755 index 0000000..9d4232a --- /dev/null +++ b/scripts/field/arcane1MO_1.py @@ -0,0 +1,2 @@ +# id 450001400 (Nina's Erda Investigation : Within the Land of Oblivion), field 450001400 +sm.progressMessageFont(3, 20, 0, 0, "The Erda Collector has been activated. When hit, Erda will materialize nearby.") diff --git a/scripts/field/arcane1MO_2_2.py b/scripts/field/arcane1MO_2_2.py new file mode 100755 index 0000000..8c9bcf8 --- /dev/null +++ b/scripts/field/arcane1MO_2_2.py @@ -0,0 +1,2 @@ +# id 450001500 (Nina's Erda Investigation : Within the Land of Tranquility), field 450001500 +sm.progressMessageFont(3, 20, 9, 0, "The Erda must have attracted them. There was a quick ripple of red light, but then nothing...") diff --git a/scripts/field/ark_mPark.py b/scripts/field/ark_mPark.py new file mode 100755 index 0000000..8b32ceb --- /dev/null +++ b/scripts/field/ark_mPark.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# Map ID :: 940205100 +# Ravaged Base Remnants : Ravaged Eastern Base 1 + +sm.addPopUpSay(3001500, 1000, "#face8#There are more enemies every moment.", "") +sm.systemMessage("Clear out all of the monsters first.") \ No newline at end of file diff --git a/scripts/field/babyPigMap.py b/scripts/field/babyPigMap.py new file mode 100755 index 0000000..16d3ee0 --- /dev/null +++ b/scripts/field/babyPigMap.py @@ -0,0 +1 @@ +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/badDream1.py b/scripts/field/badDream1.py new file mode 100755 index 0000000..d52e1ed --- /dev/null +++ b/scripts/field/badDream1.py @@ -0,0 +1,24 @@ +# id 913051000 (Ereve : Conference Room of the Alliance), field 913051000 +sm.lockInGameUI(True, True) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setSpeakerID(1105001) # Athena Pierce +sm.setParam(1) +sm.sendNext("Let's get started right away.") +sm.setSpeakerID(1105002) # Claudine +sm.sendSay("This is taking forever. And so many did not attend. Why do you enjoy being alone?") +sm.setSpeakerID(1105003) # Neinheart +sm.sendSay("Everyone has their orders. Claudine, it will not be easy to get all of Maple World's warriors in one place.") +sm.setSpeakerID(1105002) # Claudine +sm.sendSay("Sir Neinheart, it is our duty to carry out the impossible. Why would the Alliance exist otherwise?") +sm.setSpeakerID(1105003) # Neinheart +sm.sendSay("You're talking without thinking. We've worked hard for this alliance. Didn't everyone swear to join forces to defeat the Black Mage?") +sm.setSpeakerID(1105002) # Claudine +sm.sendSay("Wait... Am I hearing a lecture on promises from the Cygnus Knights?") +sm.setSpeakerID(1105001) # Athena Pierce +sm.sendSay("Stop with the wasteful debate.") +sm.setSpeakerID(1105000) # Cygnus +sm.sendSay("This threatens the very future of the Alliance... We can't afford for the public to lose confidence") +sm.sendSay("We have gathered today to discuss the grave events occurring in Maple World.") +sm.lockInGameUI(False, True) +sm.warp(913051001) diff --git a/scripts/field/badDream2.py b/scripts/field/badDream2.py new file mode 100755 index 0000000..7d79af0 --- /dev/null +++ b/scripts/field/badDream2.py @@ -0,0 +1,6 @@ +# id 913051001 (Hidden Street : Future Henesys), field 913051001 +sm.lockInGameUI(True, True) +sm.moveCamera(False, 200, 1709, 205) +sm.sendDelay(15000) +sm.lockInGameUI(False, True) +sm.warp(913051002) diff --git a/scripts/field/badDream3.py b/scripts/field/badDream3.py new file mode 100755 index 0000000..5842ca8 --- /dev/null +++ b/scripts/field/badDream3.py @@ -0,0 +1,20 @@ +# id 913051002 (Hidden Street : Present Henesys), field 913051002 +sm.lockInGameUI(True, True) +sm.hideUser(True) +sm.showFieldEffect("twilightPerion/text1", 0) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setSpeakerID(2142900) # Chief Stan +sm.setParam(1) +sm.sendNext("That's strange. All of the people in one town having the same dream?") +sm.setSpeakerID(2142901) # Mrs. Ming Ming +sm.sendSay("It was a horrible dream. The very thought of it sends shivers down my spine.") +sm.setSpeakerID(2142904) # Pia +sm.sendSay("I never imagined that the Cygnus Knights would side with the powers of the dark...") +sm.setSpeakerID(2142902) # Bruce +sm.sendSay("We can't be sure that's what happened!") +sm.setSpeakerID(2142903) # Camila +sm.sendSay("But it was too vivid to be called a dream. It was like watching the world through someone else's eyes.") +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(913051003) diff --git a/scripts/field/badDream4.py b/scripts/field/badDream4.py new file mode 100755 index 0000000..29d3d53 --- /dev/null +++ b/scripts/field/badDream4.py @@ -0,0 +1,31 @@ +# id 913051003 (Ereve : Conference Room of the Alliance), field 913051003 +sm.lockInGameUI(True, True) +sm.showFieldEffect("twilightPerion/text2", 0) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setSpeakerID(1105005) # Lady Syl +sm.setParam(1) +sm.sendNext("Ereve destroyed and Cygnus turned to evil? Didn't we prove this was only a false future?") +sm.setSpeakerID(1105003) # Neinheart +sm.sendSay("That is not our future. It is nothing but a fabrication.") +sm.setSpeakerID(1105002) # Claudine +sm.sendSay("It's not completely impossible...") +sm.setSpeakerID(1105014) # Mihile +sm.sendSay("How dare you insinuate we would be involved?!") +sm.setSpeakerID(1105006) # Belle +sm.sendSay("What are you going to do about it, blondie?") +sm.setSpeakerID(1105001) # Athena Pierce +sm.sendSay("No fights!") +sm.setSpeakerID(1105002) # Claudine +sm.sendSay("Everyone stay calm. We need to look at this situation from all sides if we're going to solve it.") +sm.setParam(17) +sm.sendSay("#b(It's going to take some time before the Alliance members can agree with one another.)#k") +sm.setSpeakerID(1105001) # Athena Pierce +sm.setParam(1) +sm.sendSay("This is serious. That fake future is haunting peoples' dreams.") +sm.setSpeakerID(1105004) # Grendel the Really Old +sm.sendSay("Is something like that even possible? This kind of dream control would be next to impossible for even the most highly-trained magician.") +sm.setSpeakerID(1105000) # Cygnus +sm.sendSay("It's not just Henesys. This nightmare is spreading like the plague.") +sm.lockInGameUI(False, True) +sm.warp(913051004) diff --git a/scripts/field/badDream5.py b/scripts/field/badDream5.py new file mode 100755 index 0000000..04b371a --- /dev/null +++ b/scripts/field/badDream5.py @@ -0,0 +1,16 @@ +# id 913051004 (Hidden Street : Present Ereve), field 913051004 +sm.lockInGameUI(True, True) +sm.hideUser(True) +sm.showFieldEffect("twilightPerion/text6", 0) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setSpeakerID(2142910) # Kirium +sm.setParam(1) +sm.sendNext("You're having the dream as well?") +sm.setSpeakerID(2142911) # Kiriwing +sm.sendSay("It's strange. Everyone having nightmares.") +sm.setSpeakerID(2142912) # Kiryu +sm.sendSay("We have Empress Cygnus here to ground our fears, but what about people in other areas?") +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(913051005) diff --git a/scripts/field/badDream6.py b/scripts/field/badDream6.py new file mode 100755 index 0000000..f5d3518 --- /dev/null +++ b/scripts/field/badDream6.py @@ -0,0 +1,26 @@ +# id 913051005 (Hidden Street : Recent Elluel), field 913051005 +sm.lockInGameUI(True, True) +sm.hideUser(True) +sm.showFieldEffect("twilightPerion/text7", 0) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setSpeakerID(2142934) # Deet +sm.setParam(1) +sm.sendNext("It's always the same for me... Is it for you too?") +sm.setSpeakerID(2142935) # Roa +sm.sendSay("It's so scary to go to bed at night.") +sm.setSpeakerID(2142936) # Moonie +sm.sendSay("Don't cry. It's only a dream.") +sm.setSpeakerID(2142933) # Klas +sm.sendSay("There's no need to fear. It was just a dream.") +sm.moveCamera(False, 150, -110, -210) +sm.sendDelay(6000) +sm.setSpeakerID(2142932) # Astilda +sm.sendNext("I've been alive for hundreds of years, and I've never seen anything like this.") +sm.setSpeakerID(2142931) # Danika +sm.sendSay("We've never heard of this sort of thing either... Could it be one of the Black Mage's commanders?") +sm.setSpeakerID(2142930) # Philius +sm.sendSay("We don't know the enemy's plans. They could just be trying to scare us, or it could just be distracting us from something bigger...") +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(913051006) diff --git a/scripts/field/badDream7.py b/scripts/field/badDream7.py new file mode 100755 index 0000000..dfcc1d6 --- /dev/null +++ b/scripts/field/badDream7.py @@ -0,0 +1,18 @@ +# id 913051006 (Hidden Street : Recent Perion), field 913051006 +sm.lockInGameUI(True, True) +sm.hideUser(True) +sm.showFieldEffect("twilightPerion/text8", 0) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setSpeakerID(2142921) # Dances with Balrog +sm.setParam(1) +sm.sendNext("The same dream for days on end... It's unbelievable.") +sm.setSpeakerID(2142922) # Stands with Bulls +sm.sendSay("This is simple trickery from the enemy! They're trying to make us lose faith in each other.") +sm.setSpeakerID(2142923) # Ayan +sm.sendSay("But the people of town are so scared... especially with these strange rumors.") +sm.setSpeakerID(2142920) # Blackbull +sm.sendSay("Isn't this a bad omen?") +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(913051007) diff --git a/scripts/field/badDream8.py b/scripts/field/badDream8.py new file mode 100755 index 0000000..24a753f --- /dev/null +++ b/scripts/field/badDream8.py @@ -0,0 +1,16 @@ +# id 913051007 (Ereve : Conference Room of the Alliance), field 913051007 +sm.lockInGameUI(True, True) +sm.showFieldEffect("twilightPerion/text2", 0) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setSpeakerID(1105001) # Athena Pierce +sm.setParam(1) +sm.sendNext("It's impossible to know what the Black Mage's dream master is up to, but we can't let the people suffer any longer.") +sm.setSpeakerID(1105009) # Evan +sm.sendSay("How is the Alliance planning to remedy this?") +sm.setSpeakerID(1105001) # Athena Pierce +sm.sendSay("The Silent Crusade has already attempted a remedy... But it won't be enough.") +sm.sendSay("I want to ask all of you to help me calm the people of Perion before this gets out of control. It's top priority for the Alliance right now.") +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(31900) +sm.warp(913050010) diff --git a/scripts/field/balog_summon.py b/scripts/field/balog_summon.py new file mode 100755 index 0000000..d3145ee --- /dev/null +++ b/scripts/field/balog_summon.py @@ -0,0 +1,16 @@ +from time import sleep + +sm.spawnMob(8830003, 412, 258, False) +sm.spawnMob(8830001, 412, 258, False) +sm.spawnMob(8830005, 412, 258, False) +sm.waitForMobDeath(8830001) +sm.removeMobByTemplateId(8830005) +sm.spawnMob(8830002, 412, 258, False) +sm.waitForMobDeath(8830002) +sm.removeMobByTemplateId(8830003) +sm.spawnMob(8830000, 412, 258, False) +sm.waitForMobDeath(8830000) +sleep(2) +sm.removeMobByTemplateId(8830004) +sm.removeMobByTemplateId(8830005) +sm.dispose() diff --git a/scripts/field/banban_Summon.py b/scripts/field/banban_Summon.py new file mode 100755 index 0000000..7c71127 --- /dev/null +++ b/scripts/field/banban_Summon.py @@ -0,0 +1,7 @@ +# Root Abyss - Temporal Crevasse (Von Bon's Map) +from net.swordie.ms.enums import WeatherEffNoticeType + +sm.showWeatherNotice("Summon Von Bon in the Dimensional Schism.", WeatherEffNoticeType.SnowySnowAndSprinkledFlowerAndSoapBubbles, 10000) +if sm.hasQuest(3009): + sm.waitForMobDeath(9303154) + sm.completeQuest(30009) #[Root Abyss] Defeat the First Guardian \ No newline at end of file diff --git a/scripts/field/bellderos_summon.py b/scripts/field/bellderos_summon.py new file mode 100755 index 0000000..712567a --- /dev/null +++ b/scripts/field/bellderos_summon.py @@ -0,0 +1,13 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.spawnMob(8880004, 1448, -1347, False, 10000000000) +sm.setDeathCount(5) +sm.setInstanceTime(BossConstants.MAGNUS_TIME) + + +sm.invokeAtFixedRate(250, BossConstants.MAGNUS_GREEN_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.GreenMeteor, 1, BossConstants.MAGNUS_GREEN_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_GREEN_ATOM_AMOUNT, BossConstants.MAGNUS_GREEN_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.MAGNUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.BlueMeteor, 1, BossConstants.MAGNUS_BLUE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_BLUE_ATOM_AMOUNT, BossConstants.MAGNUS_BLUE_ATOM_PROP) diff --git a/scripts/field/bhb1_scEnterHp.py b/scripts/field/bhb1_scEnterHp.py new file mode 100755 index 0000000..32ca34e --- /dev/null +++ b/scripts/field/bhb1_scEnterHp.py @@ -0,0 +1,9 @@ +# Black Heaven Inside: Core (350060160) | Stage 1 Lotus Boss | Used to show Lotus (stage1) HP as well as warp party into the next map upon Lotus' death + +BLACK_HEAVEN_CORE = 8240103 # Stage 1 + +sm.showHP(BLACK_HEAVEN_CORE) + +sm.waitForMobDeath(BLACK_HEAVEN_CORE) + +sm.invokeAfterDelay(7000, "warp", 350060180, 0) # Warp player(s) into the next map after 7000ms delay diff --git a/scripts/field/bhb2_scEnterHp.py b/scripts/field/bhb2_scEnterHp.py new file mode 100755 index 0000000..28f3528 --- /dev/null +++ b/scripts/field/bhb2_scEnterHp.py @@ -0,0 +1,20 @@ +# Black Heaven Inside: Core (350060180) & (350060200) | Stage 2 & 3 Lotus Boss | Used to show Lotus HP as well as warp party into the next map upon Lotus' death + +LOTUS = 8240104 # Stage 2 +LOTUS_2 = 8240105 # Stage 3 + +if sm.getFieldID() == 350060180: + sm.showHP(LOTUS) +elif sm.getFieldID() == 350060200: + sm.showHP(LOTUS_2) + +mob = sm.waitForMobDeath() +while mob.getTemplateId() != LOTUS and mob.getTemplateId() != LOTUS_2: + mob = sm.waitForMobDeath() + +if mob.getTemplateId() == LOTUS: + sm.showFieldEffect("Map/Effect2.img/blackHeavenBossDie2") # Shows the Boss Death effect + sm.invokeAfterDelay(6500, "warp", 350060200, 0) # Warps player(s) into the next map after 6500ms delay + +elif mob.getTemplateId() == LOTUS_2: + sm.showFieldEffect("Map/Effect2.img/blackHeavenBossDie3", 4700) # Shows the Boss Death effect diff --git a/scripts/field/bhb2_scenario.py b/scripts/field/bhb2_scenario.py new file mode 100755 index 0000000..7fa2317 --- /dev/null +++ b/scripts/field/bhb2_scenario.py @@ -0,0 +1,17 @@ +# Black Heaven Inside: Core (350060180) | Stage 2 Lotus Boss | Used to spawn the Boss +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +LOTUS = 8240104 # Stage 2 + +sm.spawnMob(LOTUS, 0, -16, False) + + +sm.invokeAtFixedRate(0, BossConstants.LOTUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusBlueDebris, 1, BossConstants.LOTUS_BLUE_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_BLUE_ATOM_AMOUNT, BossConstants.LOTUS_BLUE_ATOM_PROP) + +sm.invokeAtFixedRate(250, BossConstants.LOTUS_YELLOW_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusYellowDebris, 2, BossConstants.LOTUS_YELLOW_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_YELLOW_ATOM_AMOUNT, BossConstants.LOTUS_YELLOW_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.LOTUS_PURPLE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusPurpleDebris, 3, BossConstants.LOTUS_PURPLE_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_PURPLE_ATOM_AMOUNT, BossConstants.LOTUS_PURPLE_ATOM_PROP) diff --git a/scripts/field/bhb3_scenario.py b/scripts/field/bhb3_scenario.py new file mode 100755 index 0000000..18b4a2f --- /dev/null +++ b/scripts/field/bhb3_scenario.py @@ -0,0 +1,23 @@ +# Black Heaven Inside: Core (350060200) | Stage 3 Lotus Boss | Used to spawn the Boss +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +LOTUS = 8240105 # Stage 3 + +sm.spawnMob(LOTUS, 0, -16, False) + + +sm.invokeAtFixedRate(0, BossConstants.LOTUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusBlueDebris, 1, BossConstants.LOTUS_BLUE_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_BLUE_ATOM_AMOUNT, BossConstants.LOTUS_BLUE_ATOM_PROP) + +sm.invokeAtFixedRate(250, BossConstants.LOTUS_YELLOW_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusYellowDebris, 2, BossConstants.LOTUS_YELLOW_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_YELLOW_ATOM_AMOUNT, BossConstants.LOTUS_YELLOW_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.LOTUS_PURPLE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusPurpleDebris, 3, BossConstants.LOTUS_PURPLE_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_PURPLE_ATOM_AMOUNT, BossConstants.LOTUS_PURPLE_ATOM_PROP) + +sm.invokeAtFixedRate(1000, BossConstants.LOTUS_ROBOT_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusRobotDebris, 4, BossConstants.LOTUS_ROBOT_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_ROBOT_ATOM_AMOUNT, BossConstants.LOTUS_ROBOT_ATOM_PROP) + +sm.invokeAtFixedRate(2000, BossConstants.LOTUS_CRUSHER_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusCrusherDebris, 5, BossConstants.LOTUS_CRUSHER_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_CRUSHER_ATOM_AMOUNT, BossConstants.LOTUS_CRUSHER_ATOM_PROP) diff --git a/scripts/field/blackHeavenBoss1_scenario.py b/scripts/field/blackHeavenBoss1_scenario.py new file mode 100755 index 0000000..1a706c5 --- /dev/null +++ b/scripts/field/blackHeavenBoss1_scenario.py @@ -0,0 +1,17 @@ +# Black Heaven Inside: Core (350060160) | Stage 1 Lotus Boss | Used to spawn the Boss +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +BLACK_HEAVEN_CORE = 8240103 # Stage 1 + +sm.spawnMob(BLACK_HEAVEN_CORE, 0, -16, False, 400000000000) # 400b hp + + +sm.invokeAtFixedRate(0, BossConstants.LOTUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusBlueDebris, 1, BossConstants.LOTUS_BLUE_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_BLUE_ATOM_AMOUNT, BossConstants.LOTUS_BLUE_ATOM_PROP) + +sm.invokeAtFixedRate(250, BossConstants.LOTUS_YELLOW_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusYellowDebris, 2, BossConstants.LOTUS_YELLOW_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_YELLOW_ATOM_AMOUNT, BossConstants.LOTUS_YELLOW_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.LOTUS_PURPLE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.LotusPurpleDebris, 3, BossConstants.LOTUS_PURPLE_ATOM_DAMAGE, BossConstants.LOTUS_OBSTACLE_ATOM_VELOCITY, BossConstants.LOTUS_PURPLE_ATOM_AMOUNT, BossConstants.LOTUS_PURPLE_ATOM_PROP) diff --git a/scripts/field/blackHeavenBoss1_summon.py b/scripts/field/blackHeavenBoss1_summon.py new file mode 100755 index 0000000..4ba75b0 --- /dev/null +++ b/scripts/field/blackHeavenBoss1_summon.py @@ -0,0 +1,6 @@ +lotusFirstPhase = 8950000 +lotusSecondPhaseMapId = 350060500 + +sm.spawnLotus(0, 1) +sm.waitForMobDeath(lotusFirstPhase) +sm.warpInstanceIn(lotusSecondPhaseMapId, True) diff --git a/scripts/field/blackHeavenBoss1n_summon.py b/scripts/field/blackHeavenBoss1n_summon.py new file mode 100755 index 0000000..0a2ab02 --- /dev/null +++ b/scripts/field/blackHeavenBoss1n_summon.py @@ -0,0 +1,6 @@ +lotusFirstPhase = 8950000 +lotusSecondPhaseMapId = 350060800 + +sm.spawnLotus(0, 0) +sm.waitForMobDeath(lotusFirstPhase) +sm.warpInstanceIn(lotusSecondPhaseMapId, True) diff --git a/scripts/field/blackHeavenBoss2_summon.py b/scripts/field/blackHeavenBoss2_summon.py new file mode 100755 index 0000000..28fe268 --- /dev/null +++ b/scripts/field/blackHeavenBoss2_summon.py @@ -0,0 +1,6 @@ +lotusSecondPhase = 8950001 +lotusThirdPhaseMapId = 350060600 + +sm.spawnLotus(1, 1) +sm.waitForMobDeath(lotusSecondPhase) +sm.warpInstanceIn(lotusThirdPhaseMapId, True) diff --git a/scripts/field/blackHeavenBoss2n_summon.py b/scripts/field/blackHeavenBoss2n_summon.py new file mode 100755 index 0000000..bbdc1f1 --- /dev/null +++ b/scripts/field/blackHeavenBoss2n_summon.py @@ -0,0 +1,6 @@ +lotusSecondPhase = 8950001 +lotusThirdPhaseMapId = 350060900 + +sm.spawnLotus(1, 0) +sm.waitForMobDeath(lotusSecondPhase) +sm.warpInstanceIn(lotusThirdPhaseMapId, True) \ No newline at end of file diff --git a/scripts/field/blackHeavenBoss3_summon.py b/scripts/field/blackHeavenBoss3_summon.py new file mode 100755 index 0000000..9da8fe7 --- /dev/null +++ b/scripts/field/blackHeavenBoss3_summon.py @@ -0,0 +1,8 @@ +from net.swordie.ms.enums import EventType +from time import sleep + +sm.spawnLotus(2, 1) + +sm.waitForMobDeath(8950002) +sleep(1) +sm.killMobs() \ No newline at end of file diff --git a/scripts/field/blackHeavenBoss3n_summon.py b/scripts/field/blackHeavenBoss3n_summon.py new file mode 100755 index 0000000..2bf1f2e --- /dev/null +++ b/scripts/field/blackHeavenBoss3n_summon.py @@ -0,0 +1,8 @@ +from net.swordie.ms.enums import EventType +from time import sleep + +sm.spawnLotus(2, 0) + +sm.waitForMobDeath(8950002) +sleep(1) +sm.killMobs() \ No newline at end of file diff --git a/scripts/field/blackSlimeBoss.py b/scripts/field/blackSlimeBoss.py new file mode 100755 index 0000000..60706d5 --- /dev/null +++ b/scripts/field/blackSlimeBoss.py @@ -0,0 +1,7 @@ +# id 120041900 (Gold Beach : Shady Beach), field 120041900 +sm.lockInGameUI(True, True) +sm.showFieldEffect("phantom/back", 0) +sm.showFieldEffect("goldBeach/blackSlimeBoss", 0) +sm.sendDelay(3000) +sm.lockInGameUI(False, True) +sm.startQuest(26511) diff --git a/scripts/field/blackgateCityFirstEnter.py b/scripts/field/blackgateCityFirstEnter.py new file mode 100755 index 0000000..da12444 --- /dev/null +++ b/scripts/field/blackgateCityFirstEnter.py @@ -0,0 +1,2 @@ +# id 610050100 (null), field 610050100 +sm.playSound("Sound/FarmSE.img/boxResult", 100) diff --git a/scripts/field/boss_blackvikign.py b/scripts/field/boss_blackvikign.py new file mode 100755 index 0000000..03f011c --- /dev/null +++ b/scripts/field/boss_blackvikign.py @@ -0,0 +1,42 @@ +# id 106030800 (Viking Airship : Captain's Quarters), field 106030800 +sm.lockInGameUI(True, True) +sm.spawnNpc(1302102, -104, 285) +sm.showNpcSpecialActionByTemplateId(1302102, "summon", 0) +sm.spawnNpc(1302104, 133, 279) +sm.showNpcSpecialActionByTemplateId(1302104, "summon", 0) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "YO, I'll tell you what I want,", 2000, 0, 0, -30, 0, 4, 1302102, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "What I really, really want!", 2000, 0, 0, -30, 0, 4, 1302102, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Is this... the Captain's Quarters?", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Who goes there?!", 2000, 1, 0, -30, 0, 4, 1302102, 4878499) +sm.playSound("flowervioleta/suprise", 100) +sm.sendDelay(2000) +sm.reservedEffect(False, 0, 0, "Effect/Direction2.img/flowervioleta/face") +sm.speechBalloon(True, 0, 0, "Are you the Black Viking?", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.zoomCamera(1000, 3000, 1500, -420, 170) +sm.sendDelay(2000) +sm.zoomCamera(0, 2000, 1500, 350, 190) +sm.sendDelay(2000) +sm.zoomCamera(0, 2000, 0, -116, 280) +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Don't judge me! My friends online say it's cool!", 2000, 1, 0, -30, 0, 4, 1302102, 4878499) +sm.zoomCamera(500, 1000, 500, -100, 170) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...I didn't say anything.", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Yeah, well... How dare you bust in here uninvited!", 2000, 0, 0, -30, 0, 4, 1302102, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "You've seen too much! I can't let you post about this online!", 2000, 0, 0, -30, 0, 4, 1302102, 4878499) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.startQuest(5880) +sm.startQuest(30069) +sm.showNpcSpecialActionByTemplateId(1302019, "summon", 0) +sm.showNpcSpecialActionByTemplateId(1302005, "summon", 0) +sm.warp(106030000) diff --git a/scripts/field/cannon_tuto_01.py b/scripts/field/cannon_tuto_01.py new file mode 100755 index 0000000..f226e84 --- /dev/null +++ b/scripts/field/cannon_tuto_01.py @@ -0,0 +1,21 @@ +SKIPPER = 1096000 +REITING = 1096001 + +if sm.sendAskYesNo("Would you like to skip the intro?"): + sm.completeQuestNoRewards(2568) + if sm.getChr().getLevel() < 10: + sm.addLevel(10 - sm.getChr().getLevel()) + sm.warp(912060500) + sm.dispose() + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.forcedInput(0) +sm.completeQuest(2573) + +sm.spawnNpc(SKIPPER, 2209, -107) +sm.showNpcSpecialActionByTemplateId(SKIPPER, "summon", 0) + +sm.spawnNpc(REITING, 2046, -62) +sm.showNpcSpecialActionByTemplateId(REITING, "summon", 0) +sm.forcedInput(2) diff --git a/scripts/field/cannon_tuto_02.py b/scripts/field/cannon_tuto_02.py new file mode 100755 index 0000000..c2c81b1 --- /dev/null +++ b/scripts/field/cannon_tuto_02.py @@ -0,0 +1,24 @@ +SKIPPER = 1096000 + +sm.removeEscapeButton() + +sm.setSpeakerID(SKIPPER) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face03") +sm.sendNext("So, why do you want to go to Maple Island, anyway? Not many people head that way these days. Judging by your clothes, you're not a tourist, either.") + +sm.setPlayerAsSpeaker() +sm.sendSay("I'm going to Maple Island for training. After that, I'm headed to Victoria Island to become a great adventurer! ...That's how it works, right?") + +sm.setSpeakerID(SKIPPER) +sm.sendSay("It sure does! Maple Island is a great place to train, since there are no dangerous monsters there. Plus, you'll meet plenty of newbies like yourself to make friends with. Once you're comfortable with the basics, Victoria Island is where you learn to shine. And then, when you're ready, there's a big, wide world out there for you to explore! Ahh, how I envy you!") + +sm.setPlayerAsSpeaker() +sm.sendSay("Heh, I can't wait! I'm gonna train really hard, and learn to take down all of the most powerful monsters. I've been studying to be a great Explorer. I'm completely prepared!") + +sm.setSpeakerID(SKIPPER) +sm.sendSay("What a great attitude you have! That's the kind of thing that will help you succeed. Of course, you can't ever be sure of what will happen in the future. Just remember, #beverything happens for a reason#k. ") +sm.sendSay("Hey...did you hear something? Huh, I just had the weirdest feeling. I know there are no monsters out here on the ocean, but you might want to be careful anyway. ") + +sm.ballonMsg("What are you talking about? I don't feel anything...") +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/cannon_tuto_03.py b/scripts/field/cannon_tuto_03.py new file mode 100755 index 0000000..6556e3e --- /dev/null +++ b/scripts/field/cannon_tuto_03.py @@ -0,0 +1,122 @@ +BALROG_SUMMON = 1096011 +BALROG = 1096008 +SKIPPER = 1096000 +REITING = 1096001 +SKIPPER_AND_REITING = 1096002 + +sm.spawnNpc(BALROG_SUMMON, 2000, -20) +sm.showNpcSpecialActionByTemplateId(BALROG_SUMMON, "summon", 0) + +sm.showEffect("Effect/Summon.img/15", 0, 0, 0, 0, sm.getNpcObjectIdByTemplateId(BALROG_SUMMON), False, 0) +sm.playSound("cannonshooter/summon", 100) +sm.sendDelay(2000) + +sm.removeNpc(SKIPPER) +sm.removeNpc(REITING) + +sm.spawnNpc(BALROG, 2000, -20) +sm.showNpcSpecialActionByTemplateId(BALROG, "summon", 0) + +sm.spawnNpc(SKIPPER_AND_REITING, 2108, -82) +sm.showNpcSpecialActionByTemplateId(SKIPPER_AND_REITING, "summon", 0) + +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/balog/0", 2000, 0, -200, 0, sm.getNpcObjectIdByTemplateId(BALROG), False, 0) +sm.sendDelay(500) + +sm.showNpcSpecialActionByTemplateId(BALROG, "attack2", 0) +sm.sendDelay(1000) + +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/npc/0", 2000, 0, -169, 0, sm.getNpcObjectIdByTemplateId(SKIPPER_AND_REITING), False, 0) +sm.showNpcSpecialActionByTemplateId(BALROG, "attack1", 0) +sm.sendDelay(1000) + +sm.playSound("Party1/Failed", 100) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/User/0", 2000, 0, -100, 0, -2, False, 0) +sm.sendDelay(1000) + +sm.forcedInput(1) +sm.sendDelay(150) + +sm.forcedInput(0) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face02") +sm.sendDelay(1000) + +sm.showNpcSpecialActionByTemplateId(BALROG, "attack2", 0) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/npc/1", 2000, 0, -169, 0, sm.getNpcObjectIdByTemplateId(SKIPPER_AND_REITING), False, 0) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face02") +sm.sendDelay(500) + +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/User/1", 2000, 0, -100, 0, -2, False, 0) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face05") +sm.sendDelay(1000) + +sm.showNpcSpecialActionByTemplateId(BALROG, "attack2", 0) +sm.playSound("cannonshooter/Attack1", 100) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face05") +sm.sendDelay(100) + +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face05") +sm.sendDelay(1000) + +sm.showNpcSpecialActionByTemplateId(BALROG, "attack1", 0) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/balog/0", 2000, 0, -200, 0, sm.getNpcObjectIdByTemplateId(BALROG), False, 0) +sm.showEffect("Mob/8150000.img/attack2/info/effect", 0, 0, 0, 0, sm.getNpcObjectIdByTemplateId(BALROG), False, 0) +sm.playSound("cannonshooter/Attack1", 100) +sm.sendDelay(1000) + +sm.showEffect("Mob/8150000.img/attack2/info/hit", 0, 0, 0, 0, 0, False, 0) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/User/2", 2000, 0, -100, 0, -2, False, 0) +sm.forcedInput(6) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face02") +sm.sendDelay(500) + +sm.forcedInput(0) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face02") +sm.sendDelay(500) + +sm.showNpcSpecialActionByTemplateId(BALROG, "attack2", 0) +sm.showEffect("Mob/8150000.img/attack1/info/effect", 0, 0, 0, 0, sm.getNpcObjectIdByTemplateId(BALROG), False, 0) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face02") +sm.sendDelay(500) + +sm.showEffect("Mob/8150000.img/attack1/info/hit", 0, 0, 0, 0, 0, False, 0) +sm.playSound("cannonshooter/Attack1", 100) +sm.ballonMsg("Why are you acting like this?") +sm.forcedInput(6) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face01") +sm.sendDelay(500) + +sm.showEffect("Mob/8150000.img/attack1/info/effect", 0, 0, 0, 0, sm.getNpcObjectIdByTemplateId(BALROG), False, 0) +sm.forcedInput(2) +sm.sendDelay(200) + +sm.forcedInput(1) +sm.sendDelay(200) + +sm.forcedInput(2) +sm.sendDelay(200) + +sm.forcedInput(1) +sm.sendDelay(200) + +sm.forcedInput(2) +sm.sendDelay(150) + +sm.forcedInput(0) +sm.sendDelay(500) + +sm.showNpcSpecialActionByTemplateId(BALROG, "attack", 0) +sm.playSound("cannonshooter/Attack2", 100) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/balog/1", 2000, 0, -200, 0, sm.getNpcObjectIdByTemplateId(BALROG), False, 0) +sm.sendDelay(300) + +sm.forcedInput(2) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/User/3", 2000, 0, -100, 0, -2, False, 0) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face02") +sm.sendDelay(2000) + +sm.showNpcSpecialActionByTemplateId(BALROG, "stand", 0) +sm.removeNpc(BALROG) +sm.removeNpc(SKIPPER_AND_REITING) +sm.removeNpc(BALROG_SUMMON) +sm.warp(912060100, 0) \ No newline at end of file diff --git a/scripts/field/cannon_tuto_direction.py b/scripts/field/cannon_tuto_direction.py new file mode 100755 index 0000000..ab3b676 --- /dev/null +++ b/scripts/field/cannon_tuto_direction.py @@ -0,0 +1,3 @@ +sm.lockInGameUI(True) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/Scene00") +sm.reservedEffect("Effect/Direction4.img/cannonshooter/out00") diff --git a/scripts/field/cannon_tuto_direction1.py b/scripts/field/cannon_tuto_direction1.py new file mode 100755 index 0000000..8a08db4 --- /dev/null +++ b/scripts/field/cannon_tuto_direction1.py @@ -0,0 +1,11 @@ +sm.lockInGameUI(True) +sm.playSound("cannonshooter/flying", 100) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/balloon/0", 9000, 0, 0, 0, -2, False, 0) +sm.sendDelay(1500) + +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/balloon/1", 9000, 0, 0, 0, -2, False, 0) +sm.sendDelay(1500) + +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/balloon/2", 9000, 0, 0, 0, -2, False, 0) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face04") +sm.reservedEffect("Effect/Direction4.img/cannonshooter/out01") \ No newline at end of file diff --git a/scripts/field/cannon_tuto_direction2.py b/scripts/field/cannon_tuto_direction2.py new file mode 100755 index 0000000..e82b56d --- /dev/null +++ b/scripts/field/cannon_tuto_direction2.py @@ -0,0 +1,4 @@ +sm.lockInGameUI(True) +sm.playSound("cannonshooter/bang", 100) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/Scene01") +sm.reservedEffect("Effect/Direction4.img/cannonshooter/out02") diff --git a/scripts/field/captain_lat_enter.py b/scripts/field/captain_lat_enter.py new file mode 100755 index 0000000..50e5272 --- /dev/null +++ b/scripts/field/captain_lat_enter.py @@ -0,0 +1 @@ +sm.spawnMob(9420513, 113, 225, False) \ No newline at end of file diff --git a/scripts/field/chaos_summon_zakum.py b/scripts/field/chaos_summon_zakum.py new file mode 100755 index 0000000..a153ff0 --- /dev/null +++ b/scripts/field/chaos_summon_zakum.py @@ -0,0 +1,14 @@ +#field.spawnMob(8800102, -54, 86, False, 999999999) + +for i in range(8): + field.spawnMob(8800102 + i, -54, 86, False, 999999999) + +breakLoop = False +while not breakLoop and field is not None and field.getChars().size() > 0: + breakLoop = True + for i in range(8): + if field.getLifeByTemplateId(8800103 + i) is not None: + breakLoop = False + if sm.waitForMobDeath(8800102): + sm.killMobs() + sm.dispose() \ No newline at end of file diff --git a/scripts/field/chaos_zakum_enter.py b/scripts/field/chaos_zakum_enter.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/check_count.py b/scripts/field/check_count.py new file mode 100755 index 0000000..5110963 --- /dev/null +++ b/scripts/field/check_count.py @@ -0,0 +1,4 @@ +# Golden Temple | Ravana's Golden Altar (252030100) +if sm.hasQuest(3863): + sm.waitForMobDeath(8800200) + sm.completeQuestNoRewards(3863) # Ravana the Demon \ No newline at end of file diff --git a/scripts/field/check_q20833.py b/scripts/field/check_q20833.py new file mode 100755 index 0000000..b1c18a7 --- /dev/null +++ b/scripts/field/check_q20833.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [130030104] +# Empress Road : The Tranquil Garden + +sm.createQuestWithQRValue(20833, "gardenIn") \ No newline at end of file diff --git a/scripts/field/clearBossDirection1.py b/scripts/field/clearBossDirection1.py new file mode 100755 index 0000000..927ec41 --- /dev/null +++ b/scripts/field/clearBossDirection1.py @@ -0,0 +1,35 @@ +# id 863000920 (Tynerum : Gollux: Head), field 863000920 +sm.startQuest(17450) +sm.lockInGameUI(True, False) +sm.spawnNpc(9390125, 5, 38) +sm.showNpcSpecialActionByTemplateId(9390125, "summon", 0) +sm.sendDelay(1200) +sm.sendDelay(800) +sm.sendDelay(1600) +sm.spawnNpc(9390124, 12, -240) +sm.showNpcSpecialActionByTemplateId(9390124, "summon", 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/6", 1500, 300, -120, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/7", 1500, 0, -120, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.sendDelay(1200) +sm.sendDelay(800) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/8", 1500, 300, -220, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/9", 1500, 300, -220, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/10", 1500, 300, -220, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/11", 1500, 300, -220, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/12", 1500, 300, -220, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/13", 1500, 300, -220, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.showEffect("Effect/Direction13.img/effect/giantBoss/balloonMsg/14", 1500, 300, -220, 0, 0, 0, 0) +sm.sendDelay(1700) +sm.sendDelay(1200) +sm.sendDelay(800) +sm.lockInGameUI(False, True) +sm.warp(863010700) diff --git a/scripts/field/crash_Dragon.py b/scripts/field/crash_Dragon.py new file mode 100755 index 0000000..5d32db7 --- /dev/null +++ b/scripts/field/crash_Dragon.py @@ -0,0 +1,2 @@ +sm.lockInGameUI(True, False) +sm.reservedEffect("Effect/Direction4.img/crash/Scene0") \ No newline at end of file diff --git a/scripts/field/crimsonSniping.py b/scripts/field/crimsonSniping.py new file mode 100755 index 0000000..a6269cb --- /dev/null +++ b/scripts/field/crimsonSniping.py @@ -0,0 +1,13 @@ +# id 301050100 (Hidden Street : Mini-game: Ghost Sniper), field 301050100 +sm.createQuestWithQRValue(31359, "") +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.showFieldEffect("killing/first/start", 0) +sm.createQuestWithQRValue(31359, "mission=success") +sm.startQuest(31262) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.createQuestWithQRValue(31359, "") +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(301000000) diff --git a/scripts/field/crossHunter_q1608.py b/scripts/field/crossHunter_q1608.py new file mode 100755 index 0000000..2bb016c --- /dev/null +++ b/scripts/field/crossHunter_q1608.py @@ -0,0 +1,10 @@ +# Hidden Street : Strange Path (931050410) | Used for Silent Crusade questline + +STARLING = 9073000 + +sm.spawnNpc(STARLING, -611, 214) + +sm.waitForMobDeath(9300471) + +#if sm.hasQuest(1608): +# sm.completeQuest(1608) \ No newline at end of file diff --git a/scripts/field/crossHunter_q1626.py b/scripts/field/crossHunter_q1626.py new file mode 100755 index 0000000..0f4c2b5 --- /dev/null +++ b/scripts/field/crossHunter_q1626.py @@ -0,0 +1,6 @@ +from net.swordie.ms.constants import QuestConstants + +sm.waitForMobDeath(9300510) +sm.spawnNpc(9073022, -380, -405) +if not "m4=2" in sm.getQRValue(QuestConstants.SILENT_CRUSADE_WANTED_TAB_1): + sm.addQRValue(QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m4=2") \ No newline at end of file diff --git a/scripts/field/cygnus_Minimap.py b/scripts/field/cygnus_Minimap.py new file mode 100755 index 0000000..334dec3 --- /dev/null +++ b/scripts/field/cygnus_Minimap.py @@ -0,0 +1,50 @@ +# Knights of Cygnus - Tutorial Skipper +def skip_tutorial(): + MAPLE_ADMINISTRATOR = 2007 + + quests_to_complete = [ + 20820, # The City of Ereve + 20821, # Knight's Orientation + 20822, # The Path of Bravery + 20823, # Question and Answer + 20824, # Knight's Cavalier + 20825, # Well-Behaved Student + 20826, # Lesson 1 - Ereve History + 20827, # What's Next? + 20828, # Lesson 2 - Physical Training + 20829, # Lesson 3 - Battle Basics 1 + 20830, # A Much-Needed Break + 20831, # Lesson 3 - Battle Basics 2 + 20832, # Lesson, Interrupted + 20833, # Tiny Bird + 20834, # The Tranquil Garden + 20835, # The Chief Knights + 20836, # Lesson, Resumed + 20837, # Lesson 5 - Skills + 20838, # Certified Knight + 20839, # Meeting with the Empress + 20860, # The Five Paths + ] + + map_to_warp = 130000000 # Ereve + target_level = 10 + + sm.setSpeakerID(MAPLE_ADMINISTRATOR) + sm.removeEscapeButton() + sm.lockInGameUI(True) + + if sm.sendAskYesNo("Would you like to skip the tutorial quest line and instantly arrive at #m" + str(map_to_warp) + "#?"): + if sm.getChr().getLevel() < target_level: + sm.addLevel(target_level - sm.getChr().getLevel()) + + for quest in quests_to_complete: + sm.completeQuestNoRewards(quest) + + sm.warp(map_to_warp) + + sm.lockInGameUI(False) + sm.dispose() + +skip_tutorial() +sm.showEffect("Effect/OnUserEff.img/guideEffect/cygnusTutorial/0", 0, 0) +sm.invokeAfterDelay(5000, "showEffect", "Effect/OnUserEff.img/guideEffect/cygnusTutorial/1", 0, 0) \ No newline at end of file diff --git a/scripts/field/cygnus_Summon.py b/scripts/field/cygnus_Summon.py new file mode 100755 index 0000000..8683b0b --- /dev/null +++ b/scripts/field/cygnus_Summon.py @@ -0,0 +1,2 @@ +if sm.getFieldID() == 271040100: + sm.spawnMob(8850111, -147, 115, False) diff --git a/scripts/field/cygnus_Summon_Easy.py b/scripts/field/cygnus_Summon_Easy.py new file mode 100755 index 0000000..660a3e9 --- /dev/null +++ b/scripts/field/cygnus_Summon_Easy.py @@ -0,0 +1,2 @@ +if sm.getFieldID() == 271041100: + sm.spawnMob(8850011, -147, 115, False) diff --git a/scripts/field/cygnus_blackhole.py b/scripts/field/cygnus_blackhole.py new file mode 100755 index 0000000..36e489c --- /dev/null +++ b/scripts/field/cygnus_blackhole.py @@ -0,0 +1,11 @@ +# Hidden street : A dark place +sm.lockInGameUI(True) +sm.setPlayerAsSpeaker() +sm.sendNext("Where am I? I almost caught up with that person...") +sm.forcedInput(2) +sm.sendDelay(2000) +sm.sendNext("Is there anyone..?") +sm.sendNext("It sounds like the voice of Hawkeye.") +sm.warpInstanceOut(913031003, 3) +sm.setQRValue(20891, "dream", False) +sm.lockInGameUI(False) diff --git a/scripts/field/cygnus_nightmare.py b/scripts/field/cygnus_nightmare.py new file mode 100755 index 0000000..d7a1d0f --- /dev/null +++ b/scripts/field/cygnus_nightmare.py @@ -0,0 +1,13 @@ +# Hidden street : The Nightmare +sm.lockInGameUI(True) +sm.setPlayerAsSpeaker() +sm.sendNext("This must be... oh! It's the queen!") +sm.forcedInput(2) +sm.sendDelay(100) +sm.sendNext("What is she staring at?") +#todo add wz scene for cygnus appearing in mirror +sm.warp(913031002, 0) +sm.startQuest(20893) +sm.lockInGameUI(False) + + diff --git a/scripts/field/cygnus_nightmare2.py b/scripts/field/cygnus_nightmare2.py new file mode 100755 index 0000000..e5c5623 --- /dev/null +++ b/scripts/field/cygnus_nightmare2.py @@ -0,0 +1,9 @@ +# Hidden street : The Nightmare +sm.spawnMob(9300742, 238, 109, False) +sm.waitForMobDeath(9300742) +sm.sendDelay(500) +sm.warpInstanceOut(130000000, 0) + + + + diff --git a/scripts/field/da_JobChange4.py b/scripts/field/da_JobChange4.py new file mode 100755 index 0000000..1b26062 --- /dev/null +++ b/scripts/field/da_JobChange4.py @@ -0,0 +1 @@ +sm.spawnMob(9001058, 245, 95, False) diff --git a/scripts/field/defeat_mob.py b/scripts/field/defeat_mob.py new file mode 100755 index 0000000..5272748 --- /dev/null +++ b/scripts/field/defeat_mob.py @@ -0,0 +1,38 @@ +from net.swordie.ms.constants import QuestConstants + +CRUSADER_COIN = 4310018 + +dict = { + #Mob Id : [Tab Quest ID, QR Value] + 9300477 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m0=2", 1], + 9300878 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m1=2", 1], + 9300879 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m2=2", 1], + 8090000 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m3=2", 1], + 9300510 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m4=2", 1], + + 9300479 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m0=2", 2], + 9300480 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m1=2", 2], + 9300511 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m2=2", 2], + 9300512 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m3=2", 2], + 9300482 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m4=2", 2], + + 9300475 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m0=2", 3], + 9300514 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m1=2", 3], + 9300880 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m2=2", 3], + 9300478 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m3=2", 3], + 9300513 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m4=2", 3], + + 9300515 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m0=2", 4], + 9300516 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m1=2", 4], + 9300517 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m2=2", 4], + 9300518 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m3=2", 4], + 9300519 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m4=2", 4], +} + +while sm.hasMobsInField(): + mob = sm.waitForMobDeath() + mobid = mob.getTemplateId() + if mobid in dict and not dict[mobid][1] in sm.getQRValue(dict[mobid][0]): + sm.addQRValue(dict[mobid][0], dict[mobid][1]) + sm.dropItem(CRUSADER_COIN, (dict[mobid][2] * 2) - 5, mob) # crusader coin reward: (stage * 2) - 5 +sm.dispose() \ No newline at end of file diff --git a/scripts/field/defeat_mob2.py b/scripts/field/defeat_mob2.py new file mode 100755 index 0000000..5272748 --- /dev/null +++ b/scripts/field/defeat_mob2.py @@ -0,0 +1,38 @@ +from net.swordie.ms.constants import QuestConstants + +CRUSADER_COIN = 4310018 + +dict = { + #Mob Id : [Tab Quest ID, QR Value] + 9300477 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m0=2", 1], + 9300878 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m1=2", 1], + 9300879 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m2=2", 1], + 8090000 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m3=2", 1], + 9300510 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "m4=2", 1], + + 9300479 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m0=2", 2], + 9300480 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m1=2", 2], + 9300511 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m2=2", 2], + 9300512 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m3=2", 2], + 9300482 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "m4=2", 2], + + 9300475 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m0=2", 3], + 9300514 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m1=2", 3], + 9300880 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m2=2", 3], + 9300478 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m3=2", 3], + 9300513 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "m4=2", 3], + + 9300515 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m0=2", 4], + 9300516 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m1=2", 4], + 9300517 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m2=2", 4], + 9300518 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m3=2", 4], + 9300519 : [QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "m4=2", 4], +} + +while sm.hasMobsInField(): + mob = sm.waitForMobDeath() + mobid = mob.getTemplateId() + if mobid in dict and not dict[mobid][1] in sm.getQRValue(dict[mobid][0]): + sm.addQRValue(dict[mobid][0], dict[mobid][1]) + sm.dropItem(CRUSADER_COIN, (dict[mobid][2] * 2) - 5, mob) # crusader coin reward: (stage * 2) - 5 +sm.dispose() \ No newline at end of file diff --git a/scripts/field/demon_jobChange0.py b/scripts/field/demon_jobChange0.py new file mode 100755 index 0000000..9923c03 --- /dev/null +++ b/scripts/field/demon_jobChange0.py @@ -0,0 +1,3 @@ +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.forcedInput(2) diff --git a/scripts/field/demon_jobChange1.py b/scripts/field/demon_jobChange1.py new file mode 100755 index 0000000..d7c35fb --- /dev/null +++ b/scripts/field/demon_jobChange1.py @@ -0,0 +1,55 @@ +FERDI = 2159311 + +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendNext("#bThere's much to consider...") +sm.sendSay("#bBut the fact remains that my strength has not yet fully returned.") +sm.sendSay("#bHow vexing, to have lost the power I wielded against the Black Mage himself.") +sm.sendSay("#bPerhaps it is a sign that I was meant for another path...") +sm.sendSay("#b...Why am I spouting such nonsense?") +sm.sendSay("#bI am #h0#. The Fury that once served the Black Mage now seeks his total destruction.") + +sm.setSpeakerID(FERDI) +if sm.sendAskSelectMenu(1, 0) == 1: + # Demon Slayer + sm.giveSkill(30010112, -1) + sm.jobAdvance(3100) + sm.showEffect("Effect/BasicEff.img/JobChangedDemon", 0, 0, 0, -2, -2, False, 0) + sm.playSound("tutoCommon/JobChanged", 100) + sm.setSTR(35) + sm.setDEX(4) + sm.setAP(23) + sm.addMaxHP(50) + # Max MP setting to 10 + sm.createQuestWithQRValue(23977, "1", False) + sm.giveSkill(30010111, 1) + sm.giveAndEquip(1322122) + sm.giveAndEquip(1099000) + sm.giveItem(1142341) + sm.giveItem(2001527, 30) +else: + # Demon Avanger + sm.giveSkill(30010112, -1) + sm.jobAdvance(3101) + sm.showEffect("Effect/BasicEff.img/JobChangedDemon", 0, 0, 0, -2, -2, False, 0) + sm.playSound("tutoCommon/JobChanged", 100) + sm.setSTR(4) + sm.setDEX(4) + sm.setAP(23) + sm.addMaxHP(1190) + sm.createQuestWithQRValue(23977, "1", False) + sm.giveSkill(30010241, 0) + sm.giveSkill(30010242, 1) + sm.giveSkill(30010230, 1) + sm.giveSkill(30010231, 1) + sm.giveSkill(30010232, 1) + sm.giveAndEquip(1232001) + sm.giveAndEquip(1099006) + sm.giveItem(1142553) + sm.giveItem(2001527, 30) + +sm.setPlayerAsSpeaker() +sm.sendNext("#bMy strength as a Commander will serve me on my dark quest!") +sm.sendSay("#bI should check my Use tab first by pressing #rI#b.") + +sm.lockInGameUI(False) diff --git a/scripts/field/direction_eunwol_house.py b/scripts/field/direction_eunwol_house.py new file mode 100755 index 0000000..ae0862c --- /dev/null +++ b/scripts/field/direction_eunwol_house.py @@ -0,0 +1,37 @@ +SNIFFS = 3002003 + +sm.setSpeakerID(2007) +if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.createQuestWithQRValue(37999, "SKIP_RAIN_EXPLAIN") +if sm.getQRValue(37999) != "SKIP_RAIN_EXPLAIN": + sm.lockInGameUI(True, False) + sm.hideUser(False) + sm.spawnNpc(SNIFFS, -512, 5) + sm.showNpcSpecialActionByTemplateId(SNIFFS, "summon") + sm.sendDelay(1000) + + sm.removeEscapeButton() + sm.setSpeakerID(SNIFFS) + sm.sendNext("Shade! Something bad is happening!") + + sm.forcedInput(1) + sm.sendDelay(100) + + sm.forcedInput(0) + sm.setPlayerAsSpeaker() + sm.sendNext("...Well, I'm not in the best situation either... Anyway, what happened?") + + sm.setSpeakerID(SNIFFS) + sm.sendSay("I-it's raining in the town!") + + sm.setPlayerAsSpeaker() + sm.sendSay("Rain? Hm, I guess it's the first time I've seen it rain in this town. But why is it so bad? Are there damages to the houses?") + + sm.setSpeakerID(SNIFFS) + sm.sendSay("No, no! Raining means... It means... You should hear it from the chief himself. Hurry, go talk to him!") + + sm.removeNpc(SNIFFS) +sm.startQuestNoCheck(38019) +sm.startQuestNoCheck(38903) # interestingly enough if you do the skip in GMS it doesn't start raining so this quest isn't started +sm.lockInGameUI(False) +sm.warp(410000001, 0) diff --git a/scripts/field/direction_foxvillage.py b/scripts/field/direction_foxvillage.py new file mode 100755 index 0000000..ae11603 --- /dev/null +++ b/scripts/field/direction_foxvillage.py @@ -0,0 +1,89 @@ +LUMPS = 3002001 +SALLY = 3002002 +SNIFFS = 3002003 +TWITCH = 3002004 +SILVER = 3002005 +COMPASS = 3002006 +TIMBER = 3002007 +BROOK = 3002008 +PATIENCE = 3002009 +TUMBLEWEED = 3002105 + +sm.setSpeakerID(2007) +if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.createQuestWithQRValue(37999, "SKIP_FOXVILLAGE") + +if sm.getQRValue(37999) != "SKIP_FOXVILLAGE": + sm.lockInGameUI(True) + sm.forcedInput(0) + + sm.spawnNpc(LUMPS, 300, 89) + sm.showNpcSpecialActionByTemplateId(LUMPS, "summon") + + sm.spawnNpc(SALLY, -175, 0) + sm.showNpcSpecialActionByTemplateId(SALLY, "summon") + + sm.spawnNpc(SNIFFS, 360, 103) + sm.showNpcSpecialActionByTemplateId(SALLY, "summon") + + sm.spawnNpc(TWITCH, -238, -33) + sm.showNpcSpecialActionByTemplateId(TWITCH, "summon") + + sm.spawnNpc(SILVER, 84, 37) + sm.showNpcSpecialActionByTemplateId(SILVER, "summon") + + sm.spawnNpc(COMPASS, 174, 55) + sm.showNpcSpecialActionByTemplateId(COMPASS, "summon") + + sm.spawnNpc(TIMBER, -128, 51) + sm.showNpcSpecialActionByTemplateId(TIMBER, "summon") + + sm.spawnNpc(BROOK, -190, 77) + sm.showNpcSpecialActionByTemplateId(BROOK, "summon") + + sm.spawnNpc(PATIENCE, 241, 72) + sm.showNpcSpecialActionByTemplateId(PATIENCE, "summon") + + sm.spawnNpc(TUMBLEWEED, -61, 41) + sm.showNpcSpecialActionByTemplateId(TUMBLEWEED, "summon") + sm.sendDelay(2000) + + sm.removeEscapeButton() + sm.setSpeakerID(TIMBER) + sm.sendNext("We were really getting used to having you around here...") + + sm.setSpeakerID(BROOK) + sm.sendSay("Have all three meals of the day. Especially breakfast. Foxes live to eat.") + + sm.setSpeakerID(SILVER) + sm.sendSay("You're leaving this town, but don't ever forget you are one of us Pointy-Ear Foxes. Don't forget the pride of foxes. Come back anytime you like. We'll be waiting for you.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Thank you for all you've done. And I will never...never forget.") + + sm.setSpeakerID(TWITCH) + sm.sendSay("Shade! You sound like you're leaving forever! Come back soon, and bring yummy treats next time!") + + sm.setSpeakerID(SILVER) + sm.sendSay("Ah, old age makes me tear up about anything. But enough about me, Moonbeam won't come out of her room. She doesn't want to see you leave. And that heavy rainfall... I don't think she'll stop crying anytime soon.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("......") + + sm.setSpeakerID(TUMBLEWEED) + sm.sendSay("I still think you should wait a couple days and go with me, but I guess if you're busy that's too bad. Here, take this scroll, it will take you right to Pantheon. When you get there, talk to #rCartalion#k. Tell him you came on behalf of me and he'll take good care of you.") + + sm.removeNpc(LUMPS) + sm.removeNpc(SALLY) + sm.removeNpc(SNIFFS) + sm.removeNpc(TWITCH) + sm.removeNpc(SILVER) + sm.removeNpc(COMPASS) + sm.removeNpc(TIMBER) + sm.removeNpc(BROOK) + sm.removeNpc(PATIENCE) + sm.removeNpc(TUMBLEWEED) + +sm.lockInGameUI(False) +sm.startQuest(38028) +sm.warp(410000000, 6) diff --git a/scripts/field/dojang_Eff.py b/scripts/field/dojang_Eff.py new file mode 100755 index 0000000..b01585a --- /dev/null +++ b/scripts/field/dojang_Eff.py @@ -0,0 +1,160 @@ +# Mu Lung Dojo Floors (except 1st Floor) | Used to spawn the Bosses & Display "Floor Effect & Dojo Clock" + +from net.swordie.ms.constants import WzConstants +import random + +MuLungDojoF1 = 925070100 +MuLungDojoF2 = 925070200 +MuLungDojoF3 = 925070300 +MuLungDojoF4 = 925070400 +MuLungDojoF5 = 925070500 +MuLungDojoF6 = 925070600 +MuLungDojoF7 = 925070700 +MuLungDojoF8 = 925070800 +MuLungDojoF9 = 925070900 +MuLungDojoF10 = 925071000 +MuLungDojoF11 = 925071100 +MuLungDojoF12 = 925071200 +MuLungDojoF13 = 925071300 +MuLungDojoF14 = 925071400 +MuLungDojoF15 = 925071500 +MuLungDojoF16 = 925071600 +MuLungDojoF17 = 925071700 +MuLungDojoF18 = 925071800 +MuLungDojoF19 = 925071900 +MuLungDojoF20 = 925072000 +MuLungDojoF21 = 925072100 +MuLungDojoF22 = 925072200 +MuLungDojoF23 = 925072300 +MuLungDojoF24 = 925072400 +MuLungDojoF25 = 925072500 +MuLungDojoF26 = 925072600 +MuLungDojoF27 = 925072700 +MuLungDojoF28 = 925072800 +MuLungDojoF29 = 925072900 +MuLungDojoF30 = 925073000 +MuLungDojoF31 = 925073100 +MuLungDojoF32 = 925073200 +MuLungDojoF33 = 925073300 +MuLungDojoF34 = 925073400 +MuLungDojoF35 = 925073500 +MuLungDojoF36 = 925073600 +MuLungDojoF37 = 925073700 +MuLungDojoF38 = 925073800 +MuLungDojoF39 = 925073900 +MuLungDojoF40 = 925074000 +MuLungDojoF41 = 925074100 +MuLungDojoF42 = 925074200 +MuLungDojoF43 = 925074300 +MuLungDojoF44 = 925074400 +MuLungDojoF45 = 925074500 +MuLungDojoF46 = 925074600 +MuLungDojoF47 = 925074700 +MuLungDojoF48 = 925074800 +MuLungDojoF49 = 925074900 +MuLungDojoF50 = 925075000 +MuLungDojoF51 = 925075100 +MuLungDojoF52 = 925075200 +MuLungDojoF53 = 925075300 +MuLungDojoF54 = 925075400 +MuLungDojoF55 = 925075500 +MuLungDojoF56 = 925075600 +MuLungDojoF57 = 925075700 +MuLungDojoF58 = 925075800 +MuLungDojoF59 = 925075900 +MuLungDojoF60 = 925076000 +MuLungDojoF61 = 925076100 +MuLungDojoF62 = 925076200 +MuLungDojoF63 = 925076300 + +# TODO: add HP +bossPerFloor = { + MuLungDojoF1: 9305600, # Mano + MuLungDojoF2: 9305601, # Mushmom + MuLungDojoF3: 9305602, # Stumpy + MuLungDojoF4: 9305603, # Blue Mushmom + MuLungDojoF5: 9305604, # Zombie Mushmom + MuLungDojoF6: 9305605, # King Slime + MuLungDojoF7: 9305606, # Dyle + MuLungDojoF8: 9305607, # King Clang + MuLungDojoF9: 9305608, # Faust + MuLungDojoF10: 9305609, # Hilla + MuLungDojoF11: 9305610, # Metal Golem + MuLungDojoF12: 9305611, # Eliza + MuLungDojoF13: 9305612, # Jr. Balrog + MuLungDojoF14: 9305613, # Nine-Tailed Fox + MuLungDojoF15: 9305614, # Deo + MuLungDojoF16: 9305615, # Zeno + MuLungDojoF17: 9305616, # Timer + MuLungDojoF18: 9305617, # Snack Bar + MuLungDojoF19: 9305618, # Tae Roon + MuLungDojoF20: 9305619, # Von Leon + MuLungDojoF21: 9305620, # Papa Pixie + MuLungDojoF22: 9305621, # Alishar + MuLungDojoF23: 9305622, # Lord Pirate + MuLungDojoF24: 9305623, # Deet and Roi + MuLungDojoF25: 9305624, # Frankenroid + MuLungDojoF26: 9305625, # Chimera + MuLungDojoF27: 9305626, # Poison Golem + MuLungDojoF28: 9305627, # King Sage Cat + MuLungDojoF29: 9305628, # Crimson Balrog + MuLungDojoF30: 9305629, # Arkarium + MuLungDojoF31: 9305630, # Manon + MuLungDojoF32: 9305631, # Griffey + MuLungDojoF33: 9305632, # Snowman + MuLungDojoF34: 9305633, # Papulatus + MuLungDojoF35: 9305634, # Ani + MuLungDojoF36: 9305635, # Leviathan + MuLungDojoF37: 9305636, # Dodo + MuLungDojoF38: 9305637, # Lilynouch + MuLungDojoF39: 9305638, # Lyka + MuLungDojoF40: 9305639, # Magnus + MuLungDojoF41: 9305656, # King Omen + MuLungDojoF42: 9305657, + MuLungDojoF43: 9305658, + MuLungDojoF44: 9305659, + MuLungDojoF45: 9305660, + MuLungDojoF46: 9305661, + MuLungDojoF47: 9305662, + MuLungDojoF48: 9305663, + MuLungDojoF49: 9305664, + MuLungDojoF50: 9305665, + MuLungDojoF51: 9305666, + MuLungDojoF52: 9305667, + MuLungDojoF53: 9305668, + MuLungDojoF54: 9305669, + MuLungDojoF55: 9305670, + MuLungDojoF56: 9305671, + MuLungDojoF57: 9305672, + MuLungDojoF58: 9305673, + MuLungDojoF59: 9305674, + MuLungDojoF60: 9305675, + MuLungDojoF61: 9305676, + MuLungDojoF62: 9305677, + MuLungDojoF63: 9305640 +} + +currentPoint = 0 +stage = ((sm.getFieldID() % 10000) / 100) +if stage == 1: + sm.createQuestWithQRValue(3847, "Time=0;Floor=0;Result=start") + sm.showTimerInfoEx(900, 0) +else: + sm.pauseInstanceTime(False) + randomNum1 = random.randint(10, 75) + stagePoint = int(stage * 3.5) + pointPer = int(randomNum1 + stagePoint) + currentPoint = int(chr.getDojoPoints() + pointPer) + chr.setDojoPoints(currentPoint) + +sm.showFieldEffect(WzConstants.EFFECT_DOJO_STAGE) +sm.showFieldEffect(str(WzConstants.EFFECT_DOJO_STAGE_NUMBER) + str(stage)) +chr.chatMessage("You have " + str(currentPoint) + " Dojo Points") + +sm.spawnMobWithAppearType(bossPerFloor[sm.getFieldID()], 0, 7, 1, 3000) # Spawns mob based on Field ID + +sm.waitForMobDeath(bossPerFloor[sm.getFieldID()]) + +sm.pauseInstanceTime(True) +sm.createQuestWithQRValue(3847, "Time="+str(900 - sm.getInstanceRemainingTime())+";Floor="+str(stage)+";Result=start") +sm.showFieldEffect(WzConstants.EFFECT_DOJO_CLEAR) diff --git a/scripts/field/dojang_Msg.py b/scripts/field/dojang_Msg.py new file mode 100755 index 0000000..eb0c74d --- /dev/null +++ b/scripts/field/dojang_Msg.py @@ -0,0 +1,6 @@ +# Mu Lung Dojo Entrance (925020000) | Used for dojo weather notice + +from net.swordie.ms.enums import WeatherEffNoticeType + +sm.showWeatherNotice("If you want to taste the bitterness of defeat, come on in!", WeatherEffNoticeType.MuLungDojo) +sm.dispose() diff --git a/scripts/field/dojang_QcheckSet.py b/scripts/field/dojang_QcheckSet.py new file mode 100755 index 0000000..38ea272 --- /dev/null +++ b/scripts/field/dojang_QcheckSet.py @@ -0,0 +1,13 @@ +# 925020002: Exit, 925020003: RoofTop, 925020004: ? +import random + +lastFloor = int(sm.getQRValue(3847, "Floor")) +if lastFloor == 63: + randomNum1 = random.randint(10, 75) + stagePoint = int(63 * 3.5) + pointPer = int(randomNum1 + stagePoint) + currentPoint = int(chr.getDojoPoints() + pointPer) + chr.setDojoPoints(currentPoint) +chr.chatMessage("You have " + str(currentPoint) + " Dojo Points") +chr.chatMessage("You have cleared "+str(lastFloor)+" Floor in "+sm.getQRValue(3847, "Time")+" seconds.") +sm.setQRValue(3847, "Result", "complete") diff --git a/scripts/field/dojang_hall.py b/scripts/field/dojang_hall.py new file mode 100755 index 0000000..2a8cf13 --- /dev/null +++ b/scripts/field/dojang_hall.py @@ -0,0 +1 @@ +sm.stopEvents() \ No newline at end of file diff --git a/scripts/field/drop_etc.py b/scripts/field/drop_etc.py new file mode 100755 index 0000000..269cf00 --- /dev/null +++ b/scripts/field/drop_etc.py @@ -0,0 +1,3 @@ +# id 301050200 (Hidden Street : Mini-game: Castle Climb), field 301050200 +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/ds_JobChange4_0.py b/scripts/field/ds_JobChange4_0.py new file mode 100755 index 0000000..29830b9 --- /dev/null +++ b/scripts/field/ds_JobChange4_0.py @@ -0,0 +1,4 @@ +# 927000100 | demon slayer 4th job adv +sm.spawnMob(9001039, 524, 69, False) +sm.waitForMobDeath(9001039) +sm.warp(927000110) \ No newline at end of file diff --git a/scripts/field/ds_JobChange4_1.py b/scripts/field/ds_JobChange4_1.py new file mode 100755 index 0000000..79c1c3b --- /dev/null +++ b/scripts/field/ds_JobChange4_1.py @@ -0,0 +1,10 @@ +# 927000100 | demon slayer 4th job adv +sm.spawnNpc(2159335, 377, 69) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendNext("#b(I remember the feeling of unleashing my Fury... But I can't hold onto it for long...)") +sm.spawnMob(9001041, 377, 69, False) +sm.removeNpc(2159335) +sm.waitForMobDeath(9001041) +sm.addQRValue(23206, "1") +sm.warpInstanceOut(310010000) \ No newline at end of file diff --git a/scripts/field/ds_enter_home.py b/scripts/field/ds_enter_home.py new file mode 100755 index 0000000..21b36c0 --- /dev/null +++ b/scripts/field/ds_enter_home.py @@ -0,0 +1,8 @@ +sm.lockInGameUI(False) +# DAFQ nexon ? +sm.completeQuestNoRewards(23200) +sm.deleteQuest(23200) +sm.completeQuestNoRewards(23201) +sm.deleteQuest(23201) +sm.completeQuestNoRewards(23202) +sm.deleteQuest(23202) diff --git a/scripts/field/ds_tuto_0_0.py b/scripts/field/ds_tuto_0_0.py new file mode 100755 index 0000000..1190866 --- /dev/null +++ b/scripts/field/ds_tuto_0_0.py @@ -0,0 +1,82 @@ +# Temple of Time Corridor 1 (927000000) + +# Constants +MASTEMA = 2159307 +SKILLS = [30011109, 30010110, 30010185] + +sm.curNodeEventEnd(True) +for i in range(3): + if not sm.hasSkill(SKILLS[i]): + sm.giveSkill(SKILLS[i]) + +sm.setSpeakerID(2007) +sm.setBoxChat() +if sm.sendAskAccept("Would you like to skip the introduction?"): + sm.levelUntil(10) + if sm.sendAskSelectMenu(1, 0) == 1: + # Demon Slayer + sm.giveSkill(30010112, -1) + sm.jobAdvance(3100) + sm.setSTR(35) + sm.setDEX(4) + sm.setAP(23) + sm.addMaxHP(50) + # Max MP setting to 10 + sm.createQuestWithQRValue(23977, "1", False) + sm.giveSkill(30010111, 1) + sm.giveAndEquip(1322122) + sm.giveAndEquip(1099000) + sm.giveItem(1142341) + sm.giveItem(2001527, 30) + else: + # Demon Avanger + # sm.giveSkill(30010112, -1) + sm.jobAdvance(3101) + sm.setSTR(4) + sm.setDEX(4) + sm.setAP(23) + sm.addMaxHP(1190) + sm.createQuestWithQRValue(23977, "1", False) + sm.giveSkill(30010241, 0) # Wild Rage + sm.giveSkill(30010242, 1) # Blood Pact + sm.giveSkill(30010230, 1) # Exceed + sm.giveSkill(30010231, 1) # Hyper Potion Mastery + sm.giveSkill(30010232, 1) # Star Force Conversion + sm.giveAndEquip(1232001) + sm.giveAndEquip(1099006) + sm.giveItem(1142553) + sm.giveItem(2001527, 30) + sm.warp(310010000) + sm.dispose() + +sm.lockInGameUI(True) + +sm.forcedInput(0) +sm.spawnNpc(MASTEMA, 1430, 50) +sm.showNpcSpecialActionByTemplateId(MASTEMA, "summon", 0) +sm.showFieldEffect("demonSlayer/back", 0) +sm.showFieldEffect("demonSlayer/text0", 0) +sm.sendDelay(500) + +sm.showFieldEffect("demonSlayer/text1", 0) +sm.sendDelay(1000) + +sm.forcedInput(2) +sm.sendDelay(3000) + +sm.showFieldEffect("demonSlayer/text2", 0) +sm.sendDelay(500) + +sm.showFieldEffect("demonSlayer/text3", 0) +sm.sendDelay(4000) + +sm.showFieldEffect("demonSlayer/text4", 0) +sm.sendDelay(500) + +sm.showFieldEffect("demonSlayer/text5", 0) +sm.sendDelay(4000) + +sm.showFieldEffect("demonSlayer/text6", 0) +sm.sendDelay(500) + +sm.showFieldEffect("demonSlayer/text7", 0) \ No newline at end of file diff --git a/scripts/field/ds_tuto_0_1.py b/scripts/field/ds_tuto_0_1.py new file mode 100755 index 0000000..815fc7d --- /dev/null +++ b/scripts/field/ds_tuto_0_1.py @@ -0,0 +1,9 @@ +# Dialog Constants +MASTEMA = 2159307 +sm.removeEscapeButton() +sm.setSpeakerID(MASTEMA) + +sm.sendNext("Commander! Where were you? I thought maybe #p2159309# had actually made a move against you...") +sm.sendSay("Things are strange around here these days. #p2159309# has it out for you, since you were the one who managed to catch the Goddess of the Temple of Time. He only managed to blind her, but he still thinks he deserves all the credit... Fool.") +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/ds_tuto_0_2.py b/scripts/field/ds_tuto_0_2.py new file mode 100755 index 0000000..0f0e945 --- /dev/null +++ b/scripts/field/ds_tuto_0_2.py @@ -0,0 +1,73 @@ +# Dialog Constants +MASTEMA = 2159307 +sm.removeEscapeButton() +sm.setSpeakerID(MASTEMA) + +sm.sendNext("...Are you okay? You seem different... Yeah, you are. You used to scold me when I asked you such things, but now... Hey, you don't look so good. Did something happen? Are you hurt?") + +sm.setPlayerAsSpeaker() +sm.sendSay("...Tell me, #p2151009#. Who do you serve? Is it me, or the Black Mage?") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("W-what? Why would you ask me such a-") + +sm.setPlayerAsSpeaker() +sm.sendSay("Answer me!") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("Well... Um... I am loyal to the Black Mage, of course... But the day you saved my life, I pledged myself to you. I go where you go. Does, um, does that answer your question?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Yes. I have a favor to ask of you, then.") +sm.sendSay("Give this letter to the #rHeroes#k.") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("Do what?! Why... What are you thinking? After everything that's happened, you want to make things worse? If anyone finds out you're trying to contact the Heroes, you're finished as a Commander!") + +sm.setPlayerAsSpeaker() +sm.sendSay("I am already finished as a Commander.") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("Wait... Are you betraying the Black Mage? But, you're the most loyal of his Commanders! You practically GAVE him the Temple of Time! We have everything... Why are you doing this?") + +sm.setPlayerAsSpeaker() +sm.sendSay("There's no time to explain! If you are truly loyal to me, you will do as I ask. If not...") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("No! No... I'll do it. I'm just...worried about you.") + +sm.setPlayerAsSpeaker() +sm.sendSay("......") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("I mean, what about your family? Won't they be in dan-") + +sm.setPlayerAsSpeaker() +sm.sendSay("SILENCE! Do not say another word about my family...") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("...What? Did... Did something happen to them already...?") + +sm.setPlayerAsSpeaker() +sm.sendSay("......") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("I see... You've always been the quiet type, but silence sometimes speaks for itself.") +sm.sendSay("Very well. I swear to you, on my very life, that I will deliver this letter to the Heroes.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Thank you. I am sorry to ask such a thing of you, #p2151009#...") + +sm.setSpeakerID(MASTEMA) +sm.sendSay("Don't be sorry. I owe you my life, after all. In fact, I...I really appreciate your trust.") +sm.sendSay("Okay...I'm going. Whatever it is you're doing...good luck.") + +sm.showNpcSpecialActionByTemplateId(MASTEMA, "teleportation", 0) +sm.sendDelay(720) + +sm.removeNpc(MASTEMA) +sm.setPlayerAsSpeaker() +sm.sendNext("(Your loyalty means so much to me, #p2151009#. Thank you.)") + +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/ds_tuto_0_3.py b/scripts/field/ds_tuto_0_3.py new file mode 100755 index 0000000..d802481 --- /dev/null +++ b/scripts/field/ds_tuto_0_3.py @@ -0,0 +1,2 @@ +sm.curNodeEventEnd(True) +sm.warpInstanceIn(927000080, 0) diff --git a/scripts/field/ds_tuto_1_0.py b/scripts/field/ds_tuto_1_0.py new file mode 100755 index 0000000..4e2b5b4 --- /dev/null +++ b/scripts/field/ds_tuto_1_0.py @@ -0,0 +1,106 @@ +VON_LEON = 2159310 +ARKARIUM = 2159308 +ORCHID = 2159339 + +sm.lockInGameUI(True) +sm.forcedInput(1) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.removeEscapeButton() +sm.setSpeakerID(VON_LEON) +sm.sendNext("Are all the Commanders here, aside from those away on missions? Good. Let's begin the meeting.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Until the mighty Black Mage finishes his plan, we must not relax for even a moment! We are still vulnerable to attack, and must remain on guard while the Black Mage is distracted. Now, #h0#, I heard you uncovered some interesting information.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Yes...I have discovered a resistance group has formed in secret, and is building a force to move against us.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Resistance? Ha! There's no one left in this world that can resist us. I've even heard some of the rabble calling them #rHeroes#k. Isn't that precious?") + +sm.setSpeakerID(ORCHID) +sm.sendSay("Of course, I'm a little excited to see them scramble around in their last-ditch panic. Might make for some entertaining fights. They certainly didn't put up much resistance when we took Ereve. Or when I eliminated the Castellan.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("The battle at Ereve was easy because of the Black Mage's involvement, not because of your power, #p2159339#. Watch your tongue.") + +sm.setSpeakerID(ORCHID) +sm.sendSay("Well... Since the Black Mage took care of everything, I didn't have to use my full power. So, there.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Lotus seems very busy... What are you doing here, Orchid? Are you not working with Lotus?") + +sm.setSpeakerID(ORCHID) +sm.sendSay("Lotus is the one who's too busy for me! I was GOING to go back my twin up...you don't have to bug me about it. You guys are too uptight, anyway.") + +sm.setSpeakerID(VON_LEON) +sm.sendSay("...This meeting is not going anywhere...") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Have you ever noticed that when #p2159339# opens her mouth, our meetings grind to a halt? Funny, that. As for the Heroes, I'm sure #h0# has a plan to deal with them.") +sm.sendSay("Since you brought down the Goddess of Time, I'm sure these pathetic 'Heroes' will be no match for you.") + +sm.setPlayerAsSpeaker() +sm.sendSay("...They will not be so easy to eliminate. Unlike most foes, the Heroes fight for others, not themselves. They are special, because they have chosen to protect the world, rather than struggle desperately. That makes them dangerous. And I'll remind you, I only stunned the Goddess. The Black Mage was the one to defeat her, of course.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Goodness, how modest of you! That must be why you're the Black Mage's favorite. You really just put the rest of us to shame, don't you? My, my, my...") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 2000) +sm.sendDelay(1500) + +sm.setSpeakerID(VON_LEON) +sm.sendNext("#p2159309#, I've heard enough from you. #h0# stunned the Goddess of Time, allowing for our victory. THAT was the turning point in the battle. Accept it.") + +sm.sendSay("Besides, you were credited for blinding the Goddess. What more do you want, #p2159309#?") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Oh, I don't want anything. I'm just...making observations. Shouldn't we move on with the meeting? The Heroes will be taken care of, but what of the remaining resistance group?") + +sm.setSpeakerID(VON_LEON) +sm.sendSay("As commanded, they have been completely eliminated.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Oh, I see!") + +sm.setSpeakerID(ORCHID) +sm.sendSay("I have a question, actually. Why has the Black Mage changed our orders? I mean, if we destroy everything, who will be left to rule over...?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Destroy everything? Did the Black Mage order such a thing? I received no such order.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Oh, yes! I forgot. You seemed so tired from your epic battle against the Goddess, I didn't even mention the new orders to you.") + +sm.sendSay("You see, our great leader, the Black Mage, ordered all of us, except you, to eliminate everything. And I mean, EVERYTHING!") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/18", 2000) +sm.sendDelay(1500) + +sm.setSpeakerID(VON_LEON) +sm.sendNext("Indeed. For example, I saw Leafre burned to cinders. Nothing remained...") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("The Black Mage told us to show the world the price of resistance, so we began eliminating areas suspected of treachery. I think we did rather well.") + +sm.setSpeakerID(VON_LEON) +sm.sendSay("Yes... There are only a few remaining dragon servants left.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Wait, wait. Did the Black Mage not promise that he would not attack the Southern Region? Which parts were destroyed?") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Which parts? Ha! All of them, of course! We took our orders quite seriously. Why...is something bothering you?") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg0/11", 2000) +sm.sendDelay(1500) + +sm.setPlayerAsSpeaker() +sm.sendNext("...Please excuse me. There is a matter I must attend to.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Hold it right there! No matter how favored you are by the Black Mage, you follow orders. No one has dismissed you yet. Sit down. THAT is an order.") + +sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/field/ds_tuto_1_1.py b/scripts/field/ds_tuto_1_1.py new file mode 100755 index 0000000..c70a638 --- /dev/null +++ b/scripts/field/ds_tuto_1_1.py @@ -0,0 +1,11 @@ +ARKARIUM = 2159308 +sm.removeEscapeButton() + +sm.setPlayerAsSpeaker() +sm.sendNext("(Damian... Mother... Please be safe...)") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("You're not even listening. Feh. Say...didn't you once mention that your #rfamily#k lives in the South Region? Heh...") + +sm.curNodeEventEnd(True) +sm.warpInstanceIn(924020010, 0) \ No newline at end of file diff --git a/scripts/field/ds_tuto_1_before.py b/scripts/field/ds_tuto_1_before.py new file mode 100755 index 0000000..2fb67b9 --- /dev/null +++ b/scripts/field/ds_tuto_1_before.py @@ -0,0 +1,12 @@ +sm.lockInGameUI(True) +sm.forcedInput(1) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.showFieldEffect("demonSlayer/text8", 0) +sm.sendDelay(500) + +sm.showFieldEffect("demonSlayer/text9", 0) +sm.sendDelay(3000) + +sm.warpInstanceIn(927000010, 1) \ No newline at end of file diff --git a/scripts/field/ds_tuto_2_1.py b/scripts/field/ds_tuto_2_1.py new file mode 100755 index 0000000..c423f41 --- /dev/null +++ b/scripts/field/ds_tuto_2_1.py @@ -0,0 +1,28 @@ +ARKARIUM = 2159309 +MOB = 9300455 + +sm.forcedAction(371, 0) +sm.playSound("demonSlayer/31121001", 100) +sm.showEffect("Skill/3112.img/skill/31121001/effect", 0, 340, 71) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "teleportation", 0) +sm.sendDelay(570) + +sm.removeNpc(ARKARIUM) +sm.sendDelay(870) + +sm.spawnNpc(ARKARIUM, 500, 50) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "summon", 0) + +sm.removeEscapeButton() +sm.setSpeakerID(ARKARIUM) +sm.sendNext("You disappoint me! You don't even understand the Black Mage's true goal. Guards! Eliminate the betrayer!") + +sm.lockInGameUI(False) +sm.chatScript("Eliminate all guards.") +sm.playSound("demonSlayer/summonGuard", 100) + +sm.spawnMob(MOB, 450, 71, False) +sm.spawnMob(MOB, 400, 71, False) +sm.spawnMob(MOB, 350, 71, False) +sm.startQuestNoCheck(23205) +sm.reservedEffect("Effect/Direction6.img/DemonTutorial/Scene4") diff --git a/scripts/field/ds_tuto_2_2.py b/scripts/field/ds_tuto_2_2.py new file mode 100755 index 0000000..25a72fc --- /dev/null +++ b/scripts/field/ds_tuto_2_2.py @@ -0,0 +1,82 @@ +ARKARIUM = 2159309 +ARK_CHAT = 2159308 + +sm.completeQuestNoRewards(23203) +sm.deleteQuest(23203) + +sm.spawnNpc(ARKARIUM, 500, 50) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "summon", 0) +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.forcedInput(2) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.removeEscapeButton() +sm.setSpeakerID(ARK_CHAT) +sm.sendNext("You are rather powerful, aren't you? I think it's time we settled which of us is stronger. I've always wanted to test my magic against your Demon Fury. Of course, I know who will be victorious!") + +sm.chatScript("Press the Control key rapidly to block Arkarium's attack and counterattack.") +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/guide1/0", 5010, 150, -300) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "alert", 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/arkyrimAttack", 0, 0, -7, 0, sm.getNpcObjectIdByTemplateId(ARKARIUM), False, 0) +sm.sendDelay(2010) + +sm.playSound("demonSlayer/arkAttack0", 100) +sm.patternInputRequest("17#17#17#", 4, 2, 3000) + +sm.fadeInOut(600, 1500, 600, 150) +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/9", 2000) +sm.forcedAction(376, 0) +sm.showEffect("Skill/3112.img/skill/31121000/effect", 0, 389, 83, 0, 0, True, 0) +sm.playSound("demonSlayer/31121000", 100) +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/9", 2000) +sm.sendDelay(900) + +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1000, ARKARIUM) +sm.playSound("demonSlayer/31121000", 100) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "teleportation", 0) +sm.sendDelay(570) + +sm.removeNpc(ARKARIUM) +sm.spawnNpc(ARKARIUM, 620, 50) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "summon", 0) +sm.sendDelay(1000) + +sm.removeEscapeButton() +sm.setSpeakerID(ARKARIUM) +sm.sendNext("You're stronger than I expected! How amusing!") + +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "resolve", 0) +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/10", 2000, ARKARIUM) +sm.sendDelay(1500) + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/11", 2000) +sm.sendDelay(1500) + +sm.showEffect("Skill/3112.img/skill/31121005/effect", 0, 389, 71, 1, 0, False, 1) +sm.showEffect("Skill/3112.img/skill/31121005/effect0", 0, 389, 71, -1, 0, False, 1) +sm.playSound("demonSlayer/31121005", 100) +sm.forcedAction(370, 0) +sm.sendDelay(1980) + +sm.showEffect("Effect/Direction6.img/effect/tuto/gateOpen/0", 2100, 918, -195, 0, 0, True, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/gateLight/0", 2100, 926, -390, 0, 0, True, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/gateStair/0", 2100, 879, 30, 1, 0, True, 0) +sm.playSound("demonSlayer/openGate", 100) +sm.sendDelay(1950) + +sm.startQuestNoCheck(23203) +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg0/0", 2000, ARKARIUM) +sm.sendDelay(1200) + +sm.setSpeakerID(ARK_CHAT) +sm.sendNext("Ah! It seems the Black Mage wishes to see you after all. It's a shame we cannot finish our little contest, but as always, I defer to my master. I believe I'll pay those so-called 'Heroes' a visit...") +sm.sendSay("As for you, #h0# I don't expect I'll see you again. Enjoy the oblivion granted to you from the Black Mage himself! Ha ha ha!") + +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "teleportation", 0) +sm.sendDelay(570) + +sm.removeNpc(ARKARIUM) +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg2/2", 2000) +sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/field/ds_tuto_2_3.py b/scripts/field/ds_tuto_2_3.py new file mode 100755 index 0000000..f76b693 --- /dev/null +++ b/scripts/field/ds_tuto_2_3.py @@ -0,0 +1,7 @@ +sm.showFieldEffect("demonSlayer/whiteOut", 0) +sm.sendDelay(1950) + +sm.completeQuestNoRewards(23203) +sm.deleteQuest(23203) +sm.curNodeEventEnd(True) +sm.warpInstanceIn(931050300, 0) \ No newline at end of file diff --git a/scripts/field/ds_tuto_2_before.py b/scripts/field/ds_tuto_2_before.py new file mode 100755 index 0000000..040ed7f --- /dev/null +++ b/scripts/field/ds_tuto_2_before.py @@ -0,0 +1,14 @@ +sm.lockInGameUI(True) +sm.forcedInput(1) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.showFieldEffect("demonSlayer/text13", 0) +sm.sendDelay(500) + +sm.showFieldEffect("demonSlayer/text14", 0) +sm.sendDelay(4000) + +sm.lockInGameUI(False) +sm.warpInstanceIn(927000020, 0) + diff --git a/scripts/field/ds_tuto_2_prep.py b/scripts/field/ds_tuto_2_prep.py new file mode 100755 index 0000000..de6cc59 --- /dev/null +++ b/scripts/field/ds_tuto_2_prep.py @@ -0,0 +1,12 @@ +ARKARIUM = 2159309 + +SKILLS = [30010166, 30011167, 30011168, 30011169, 30011170] + +sm.spawnNpc(ARKARIUM, 550, 50) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "summon", 0) +sm.completeQuestNoRewards(23205) +sm.deleteQuest(23205) +sm.startQuestNoCheck(23204) +for i in range(5): + if not sm.hasSkill(SKILLS[i]): + sm.giveSkill(SKILLS[i]) \ No newline at end of file diff --git a/scripts/field/ds_tuto_3_0.py b/scripts/field/ds_tuto_3_0.py new file mode 100755 index 0000000..cf50cb8 --- /dev/null +++ b/scripts/field/ds_tuto_3_0.py @@ -0,0 +1,85 @@ +FERDI = 2159311 + +sm.lockInGameUI(True) +sm.levelUntil(10) + +sm.sendDelay(3000) + +sm.showFieldEffect("demonSlayer/text12", 0) +sm.sendDelay(5000) + +sm.forcedInput(1) +sm.sendDelay(10) + +sm.forcedInput(0) +sm.removeEscapeButton() +sm.setSpeakerID(FERDI) +sm.setPlayerAsSpeaker() +sm.sendNext("........") + +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg0/14", 2000, 130, 50, 10, 0, True, 0) +sm.sendDelay(2000) + +sm.sendNext("(I think I hear something...)") + +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg0/15", 2000, -130, 50, 10, 0, True, 0) +sm.sendDelay(2000) + +sm.sendNext("(Where am I? Am I still alive...?)") + +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg0/16", 2000, 130, 50, 10, 0, True, 0) +sm.sendDelay(2000) + +sm.sendNext("(Ugh... My energy... Something is stealing my energy!)") + +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg0/17", 2000, -130, 50, 10, 0, True, 0) +sm.sendDelay(2000) + +sm.sendNext("(I must escape before they drain all my power!)") + +sm.chatScript("Tap the Control Key repeatedly to break the wall.") +sm.showEffect("Effect/Direction6.img/effect/tuto/guide1/0", 3000, 0, -100, 20, 0, True, 0) +sm.patternInputRequest("17#17#17#", 2, 2, 3000) + +sm.playSound("demonSlayer/punch", 100) +sm.playSound("demonSlayer/crackEgg", 100) +sm.chatScript("Tap the Control Key repeatedly to break the wall.") +sm.showEffect("Effect/Direction6.img/effect/tuto/guide1/0", 3000, 0, -100, 20, 0, True, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/breakEgg/0", 6600, 0, 0, 0, 0, True, 0) +sm.patternInputRequest("17#17#17#", 2, 2, 3000) + +sm.playSound("demonSlayer/punch", 100) +sm.playSound("demonSlayer/crackEgg", 100) +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg0/7", 2000, 130, 100, 10, 0, True, 0) +sm.chatScript("Tap the Control Key repeatedly to break the wall.") +sm.showEffect("Effect/Direction6.img/effect/tuto/guide1/0", 3000, 0, -100, 20, 0, True, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/breakEgg/0", 6600, 0, 0, 0, 0, True, 0) +sm.patternInputRequest("17#17#17#", 2, 2, 3000) + +sm.playSound("demonSlayer/punch", 100) +sm.playSound("demonSlayer/crackEgg", 100) +sm.chatScript("Tap the Control Key repeatedly to break the wall.") +sm.showEffect("Effect/Direction6.img/effect/tuto/guide1/0", 3000, 0, -100, 20, 0, True, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/breakEgg/1", 6600, 0, 0, 1, 0, True, 0) +sm.patternInputRequest("17#17#17#", 2, 2, 3000) + +sm.playSound("demonSlayer/punch", 100) +sm.playSound("demonSlayer/crackEgg", 100) +sm.chatScript("Tap the Control Key repeatedly to break the wall.") +sm.showEffect("Effect/Direction6.img/effect/tuto/guide1/0", 3000, 0, -100, 20, 0, True, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/breakEgg/1", 6600, 0, 0, 1, 0, True, 0) +sm.patternInputRequest("17#17#17#", 2, 2, 3000) + +sm.playSound("demonSlayer/punch", 100) +sm.playSound("demonSlayer/crackEgg", 100) +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg1/1", 2000, -130, 50, 10, 0, True, 0) +sm.playSound("demonSlayer/crackEgg", 100) +sm.sendDelay(1000) + +sm.showEffect("Effect/Direction6.img/effect/tuto/breakEgg/2", 9000, 0, 0, 5, 0, True, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg1/2", 2000, 130, 50, 10, 0, True, 0) +sm.sendDelay(1000) + +sm.playSound("demonSlayer/crackEgg", 100) +sm.showFieldEffect("demonSlayer/whiteOut", 0) +sm.warpInstanceIn(931050020, 0) \ No newline at end of file diff --git a/scripts/field/ds_tuto_3_1.py b/scripts/field/ds_tuto_3_1.py new file mode 100755 index 0000000..0300d47 --- /dev/null +++ b/scripts/field/ds_tuto_3_1.py @@ -0,0 +1,121 @@ +GUARD1 = 2159340 +GUARD2 = 2159341 +J_AGENT = 2159342 + +sm.lockInGameUI(True) +sm.completeQuestNoRewards(23207) +sm.deleteQuest(23207) + +sm.spawnNpc(GUARD1, 175, 0) +sm.showNpcSpecialActionByTemplateId(GUARD1, "summon", 0) +sm.spawnNpc(GUARD2, 300, 0) +sm.showNpcSpecialActionByTemplateId(GUARD2, "summon", 0) +sm.spawnNpc(J_AGENT, 600, 0) +sm.showNpcSpecialActionByTemplateId(J_AGENT, "summon", 0) +sm.showNpcSpecialActionByTemplateId(GUARD1, "panic", 0) +sm.showNpcSpecialActionByTemplateId(GUARD2, "panic", 0) + +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/3", 1500, J_AGENT) +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/3", 1500, GUARD1) +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/3", 1500, GUARD2) +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg2/0", 1500)# for player ofc +sm.sendDelay(1500) + +sm.forcedInput(0) +sm.removeEscapeButton() +sm.setSpeakerID(GUARD1) +sm.sendNext("W-what is that?") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg2/1", 2000) +sm.sendDelay(900) + +sm.setPlayerAsSpeaker() +sm.sendNext("(What's going on? My Fury is...nearly gone! And what is this thing? Did it take my power...?)") + +sm.setSpeakerID(GUARD2) +sm.sendSay("T-this can't be happening...!") + +sm.setPlayerAsSpeaker() +sm.sendSay("What did you do to me? This energy...is it the Black Mage's energy?") + +sm.setSpeakerID(GUARD1) +sm.sendSay("Need to capture that person to avoid interrogation...") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/16", 2000) +sm.sendDelay(1500) + +sm.fadeInOut(600, 1500, 600, 150) +sm.forcedAction(372, 0) +sm.showEffect("Skill/3112.img/skill/31121006/effect", 0, 0, 0, 0, 0, False, 0)# should make method for skill effect +sm.playSound("demonSlayer/31121006", 100) +sm.reservedEffect("Effect/Direction6.img/DemonTutorial/Scene3") +sm.sendDelay(900) + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/17", 2000) +sm.sendDelay(900) + +sm.playSound("demonSlayer/31121006h", 100) +sm.startQuestNoCheck(23207) +sm.showNpcSpecialActionByTemplateId(GUARD1, "die", 0) +sm.showNpcSpecialActionByTemplateId(GUARD2, "die", 0) +sm.sendDelay(990) + +sm.removeNpc(GUARD1) +sm.removeNpc(GUARD2) +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg0/13", 2000) + +sm.setSpeakerID(J_AGENT) +sm.sendNext("(Who is that? I've never seen such a powerful skill...)") + +sm.sendDelay(1500) + +sm.setPlayerAsSpeaker() +sm.sendNext("(Ugh... I wasted too much power fighting them. Where am I? If nothing else, I know I need to get out of here.)") + +sm.forcedInput(2) +sm.sendDelay(990) + +sm.forcedInput(0) +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/12", 2000) + + + +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 2000, J_AGENT) +sm.sendDelay(1200) + +sm.moveNpcByTemplateId(J_AGENT, True, 150, 100) + +sm.sendNext("(No... I'm...losing consciousness. If they find me now...!)") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("Wait, calm down. I'm not your enemy. Who are you? And how did you end up in a place like this?") + +sm.setPlayerAsSpeaker() +sm.sendSay("(He doesn't feel evil...)\r\nStay back!") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("C'mon... Look at you. You need help, and you need it now. Do you realized what they were doing? That machine next to you is an Energy Conducting Device... The Black Wings were draining your power.") + +sm.setPlayerAsSpeaker() +sm.sendSay("(An Energy Conducting Device? This machine? And who are the Black Wings? None of this makes any sense...)") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg0/13", 2000) +sm.sendDelay(1500) + +sm.sendNext("Who are you? And...*cough* How do you know about these things?") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("I'm J, an agent in the Resistance. We're working against the Black Wings. I don't know who you are, but I wouldn't take advantage of you in your state. Let me help you.") + +sm.setPlayerAsSpeaker() +sm.sendSay("No... I have...no energy...") + +sm.forcedAction(379, 0) +sm.showEffect("Effect/Direction6.img/effect/tuto/fallMale", 0, 0, 0, 0, 0, False, 0) +sm.sendDelay(600) + +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/13", 2000, J_AGENT) +sm.sendDelay(1500) + +sm.removeNpc(J_AGENT) +sm.warpInstanceIn(931050030, 0) \ No newline at end of file diff --git a/scripts/field/ds_tuto_4_0.py b/scripts/field/ds_tuto_4_0.py new file mode 100755 index 0000000..4158c51 --- /dev/null +++ b/scripts/field/ds_tuto_4_0.py @@ -0,0 +1,41 @@ +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() + +sm.sendNext("Hmm...") +sm.sendSay("(Where am I? I don't recognize this place... It's not the cave I was in before... Ugh, everything hurts.)") + +sm.forcedInput(1) +sm.sendDelay(600) + +sm.forcedInput(0) +sm.sendNext("(This looks like a Treatment Room... Where am I? What happened to me?)") +sm.sendSay("(I must remember what happened...)") +sm.sendSay("(The Black Mage broke his promise and destroyed the southern part of Ossyria, where my mother and Damien were. He destroyed my home...)") +sm.sendSay("(My locket! Where is my locket?)") +sm.sendSay("(Did I lose it during the fight? That was all I have left from my family... No...)") + +sm.forcedInput(2) +sm.sendDelay(600) + +sm.forcedInput(0) +sm.sendNext("(I went to the Temple of Time to take revenge on the Black Mage... On the way, I let #p2151009# go, to get away from the Commanders. #p2159309# tried to stop me, but I was determined... Say, I wonder how the Heroes did?)") +sm.sendSay("(The Black Mage was too powerful for me. I knew he would be, but I thought I could do at least a little damage. All I managed was breaking his barrier and tearing his robe... How pathetic.)") +sm.sendSay("(But... How did I survive? The Black Mage would never have spared me. Did someone else get involved? The Heroes...?)") +sm.sendSay("(Ugh, now I have a headache. I don't even know where I am now. This place is so strange. And yet...does this mean Maple World wasn't destroyed?)") + +sm.forcedInput(1) +sm.sendDelay(600) + +sm.forcedInput(0) +sm.sendNext("(I should check on myself. I'm going to need my Demon Fury no matter what... But how much is left?)") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg0/13", 2000) +sm.sendDelay(1500) + +sm.sendNext("(No! My Demon Aegis is so weak...I've never seen it this bad. Almost all of my power and abilities are gone. How could this happen?)") +sm.sendSay("(I can't hardly fight like this. That man with the hat... He doesn't look dangerous, but I can't trust anyone.)") +sm.sendSay("(It's going to take time to build my power back up, and sitting here won't accomplish anything. I need to go.)") + +sm.forcedInput(1) \ No newline at end of file diff --git a/scripts/field/ds_tuto_4_1.py b/scripts/field/ds_tuto_4_1.py new file mode 100755 index 0000000..215d9db --- /dev/null +++ b/scripts/field/ds_tuto_4_1.py @@ -0,0 +1,58 @@ +J_AGENT = 2159344 +CLAUDINE = 2159315 +ELEX = 2159312 +BELLE = 2159314 + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/3", 2000) +sm.sendDelay(1000) + +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendNext("(I hear something...)") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("...I was going to come back after I discovered the Energy Conducting Device. It was like the one at the Power Plant, but this one was connected to an egg. While I was examining it, that person broke out of the egg, and defeated all the Black Wings. It was crazy.") + +sm.setSpeakerID(CLAUDINE) +sm.sendSay("You know, J... If it were anyone else telling me this, I would laugh in their face. But this... What were the Black Wings doing? And who is this person?") + +sm.setPlayerAsSpeaker() +sm.sendSay("(Are they talking about me?)") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("And those skills... I've never seen skills like that. So powerful... I think our guest is out of juice, but we should be careful.") + +sm.setSpeakerID(ELEX) +sm.sendSay("Maybe this is one of their experiments? Think about Vita... And nobody really knows what the Black Wings are doing deep in the mines, right?") + +sm.setSpeakerID(BELLE) +sm.sendSay("That blasted madman Gelimer... We have to stop him!") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("...Hold on. I'll see if our new friend is awake yet.") + +sm.forcedInput(2) +sm.sendDelay(2000) + +sm.forcedInput(1) +sm.spawnNpc(J_AGENT, -600, -20) +sm.showNpcSpecialActionByTemplateId(J_AGENT, "summon", 0) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.showBalloonMsgOnNpc("Effect/Direction6.img/effect/tuto/balloonMsg1/3", 1500, J_AGENT) +sm.sendDelay(1000) + +sm.sendNext("Ah, you're awake. How do you feel? Still tired?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Did...you save me?") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("Yeah. You were badly wounded... I couldn't just leave you with the Black Wings. Considering the circumstances, I think we're on the same side. We have plenty to talk about, so how about you take a walk with me?") + +sm.setPlayerAsSpeaker() +sm.sendSay("(Interrogation...? Not sure yet... They're friendlier than those Black Wings, anyway.) Very well.") + +sm.removeNpc(J_AGENT) +sm.warpInstanceIn(931050010, 0) \ No newline at end of file diff --git a/scripts/field/ds_tuto_5_0.py b/scripts/field/ds_tuto_5_0.py new file mode 100755 index 0000000..dcf268e --- /dev/null +++ b/scripts/field/ds_tuto_5_0.py @@ -0,0 +1,140 @@ +BELLE = 2159314 +ELEX = 2159312 +BRIGHTON = 2159313 +CLAUDINE = 2159315 +J_AGENT = 2159344 +BLACK_JACK = 2159345 +CHECKY = 2159316 +FERDI = 2159311 + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) + +sm.removeEscapeButton() +sm.setSpeakerID(BELLE) +sm.sendNext("Y-you really have wings.") + +sm.setSpeakerID(ELEX) +sm.sendSay("Who are you? Did the Black Wings send you as a spy? Actually, that wouldn't make sense...") + +sm.setSpeakerID(BRIGHTON) +sm.sendSay("Keep your guard up. We still don't know what's going on.") + +sm.setSpeakerID(CLAUDINE) +sm.sendSay("Who are you? What's your relationship with the Black Wings?") + +sm.setPlayerAsSpeaker() +sm.sendSay("I have no idea who these Black Wings are. I've never heard of them. What do you want to know about me? I'm...not even sure where to begin...") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("Well, let's start with your name, your organization, your background... And, if you don't mind, I'd like to know about those wings on your back.") + +sm.setPlayerAsSpeaker() +sm.sendSay("My name is #h0#. I am not currently part of any organization...though I was once one of the Black Mage's Commanders. I rebelled against him, and we fought, but he defeated me. When I awoke, I saw what the man in the hat described. Oh, and I was born with these wings. My father was a demon.") + +sm.setSpeakerID(CLAUDINE) +sm.sendSay("Wait, wait, wait. You were a Commander under the Black Mage? How? He's been sealed for hundreds of years?") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/3", 2000) +sm.sendDelay(600) + +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 1500, -90, -150) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 1500, 210, -150) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 1500, 100, -150) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 1500, -180, -100) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 1500, -260, -50) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 1500, 270, -50) +sm.sendDelay(1500) + +sm.setSpeakerID(BELLE) +sm.sendNext("Sounds like someone has a screw loose to me. The experiments do that sometimes. One subject thought she was a violin.") + +sm.setPlayerAsSpeaker() +sm.sendSay("(Hundreds of years ago? What are they talking about? But...this place is so strange. How long have I been asleep? And...could the Heroes have sealed the Black Mage?)") + +sm.setSpeakerID(BELLE) +sm.sendSay("This makes no sense. What do you think, #p2159345#?") + +sm.setSpeakerID(BLACK_JACK) +sm.sendSay("It's no lie. That doesn't mean our guest isn't just crazy, though.") + +sm.setSpeakerID(CHECKY) +sm.sendSay("I'm with Black Jack on this one. Either our guest is crazy...or it's all true.") + +sm.setSpeakerID(CLAUDINE) +sm.sendSay("If that's true, then our guest is from hundreds of years ago, back before the Black Mage was sealed. Wait, if you were a Commander, why did you rebel?") + +sm.setPlayerAsSpeaker() +sm.sendSay("That is a personal matter. Now, since I answered your questions, you answer mine. Who are you people? And who are the Black Wings?") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("Like I said before, we're the Resistance. We're a group formed in secret to protect our home, the city of Edelstein, from the Black Wings. ") +sm.sendSay("Those nasty folks that were using you like a battery were the Black Wings. They invaded Edelstein a while back, and have been draining energy from the city. We don't know why, but we do know that they're working for the Black Mage.") + +sm.setPlayerAsSpeaker() +sm.sendSay("They follow the Black Mage? I thought you said he was sealed.") + +sm.setSpeakerID(ELEX) +sm.sendSay("He is. We think they're trying to find a way to release him again. And, to be fair, there have been a lot of recent events that hint that it could happen.") + +sm.setPlayerAsSpeaker() +sm.sendSay("The Black Mage is returning? That's excellent news...") +sm.sendSay("That means I can still have my revenge!") + +sm.setSpeakerID(BRIGHTON) +sm.sendSay("Okay...you're kinda crazy, but I can see we're on the same side.") + +sm.startQuest(23279) +sm.setSpeakerID(FERDI) +sm.sendSay("If you want revenge on the Black Mage, why don't you join us?") + +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1500, -90, -150) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1500, 210, -150) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1500, 100, -150) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1500, -180, -100) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1500, -260, -50) +sm.showEffectOnPosition("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1500, 270, -50) + +sm.setSpeakerID(CLAUDINE) +sm.sendSay("Headmaster, what are you saying...?") + +sm.setSpeakerID(BRIGHTON) +sm.sendSay("Are you crazy? This is obviously a trap! And even if it isn't, we'd be fools to trust a Commander of the Black Mage!") + +sm.setSpeakerID(FERDI) +sm.sendSay("Well... I'm happy to see everyone together on this! Ha!") +sm.sendSay("I trust #p2159345#'s judgment, and besides, we can use all the help we can get. Even if our new friend #bused to be#k a Commander, this is clearly no longer the case.") + +sm.setSpeakerID(ELEX) +sm.sendSay("Besides, better to have the Commander here with us than with the Black Wings.") + +sm.setSpeakerID(FERDI) +sm.sendSay("We can always use more members. As long as our goals are the same, we can work together.") + +sm.setPlayerAsSpeaker() +sm.sendSay("W-wait, what's going on? I'm still trying to catch up to the story here!") + +sm.setSpeakerID(BELLE) +sm.sendSay("There's no need to catch up. The decision has been made. If you want to fight the Black Mage, you'll have to go through the Black Wings, and you'll run into them the moment you leave this place. We have common enemies. Let's work together to bring them down!") + +sm.setSpeakerID(CHECKY) +sm.sendSay("Caution is good. I don't expect you to fully trust us yet. We can work on that as we take the Black Wings apart, piece by piece.") + +sm.setPlayerAsSpeaker() +sm.sendSay("True... Very well. I will join you, for now.") +sm.sendSay("I realize this is overdue, but...allow me to thank you for saving me.") + +sm.setSpeakerID(J_AGENT) +sm.sendSay("You're quite welcome. Hearing that is a relief...I've never been betrayed by someone who thanked me.") + +sm.setPlayerAsSpeaker() +sm.sendSay("I am loyal to those who are loyal to me.") + +sm.setSpeakerID(FERDI) +sm.sendSay("Works for me. All right, make yourself at home. Our secret base is your secret base, and all that.") + +sm.createQuestWithQRValue(23209, "1", False) +sm.completeQuest(23279) +sm.deleteQuest(23279) +sm.lockInGameUI(False) +sm.warpInstanceIn(931050040, 0) \ No newline at end of file diff --git a/scripts/field/ds_tuto_ani.py b/scripts/field/ds_tuto_ani.py new file mode 100755 index 0000000..83fa87f --- /dev/null +++ b/scripts/field/ds_tuto_ani.py @@ -0,0 +1,5 @@ +sm.lockInGameUI(True) +sm.playVideoByScript("DemonSlayer1.avi")# DemonSlayer2.avi for female + +sm.warpInstanceIn(931050000, 0) + diff --git a/scripts/field/ds_tuto_home_before.py b/scripts/field/ds_tuto_home_before.py new file mode 100755 index 0000000..98b1099 --- /dev/null +++ b/scripts/field/ds_tuto_home_before.py @@ -0,0 +1,11 @@ +sm.lockInGameUI(True) +sm.forcedInput(1) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.sendDelay(90) + +sm.showFieldEffect("demonSlayer/text11", 0) +sm.sendDelay(4000) + +sm.reservedEffect("Effect/Direction6.img/DemonTutorial/Scene2") \ No newline at end of file diff --git a/scripts/field/dubl2Tuto0.py b/scripts/field/dubl2Tuto0.py new file mode 100755 index 0000000..22a1b8e --- /dev/null +++ b/scripts/field/dubl2Tuto0.py @@ -0,0 +1,9 @@ +sm.lockInGameUI(True) +sm.blindEffect(False) +sm.blindEffect(True) +sm.chatScript("The Secret Garden Depths") +sm.chatScript("On a rainy day...") +sm.forcedInput(0) +sm.sendDelay(3000) + +sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/field/dubl2Tuto0_0.py b/scripts/field/dubl2Tuto0_0.py new file mode 100755 index 0000000..b86c4aa --- /dev/null +++ b/scripts/field/dubl2Tuto0_0.py @@ -0,0 +1,11 @@ +sm.lockInGameUI(False) +sm.progressMessageFont(3, 20, 20, 0, "You can start the quest by clicking the NPC with the lightbulb over their head.") +sm.blindEffect(False) + +if sm.sendAskAccept("Would you like to skip the introduction?"): + sm.levelUntil(10) + sm.jobAdvance(400) + sm.resetAP(chr.getJob()) + sm.warp(101000000) + sm.giveItem(1332063) + sm.dispose() diff --git a/scripts/field/dublTuto21.py b/scripts/field/dublTuto21.py new file mode 100755 index 0000000..4f63307 --- /dev/null +++ b/scripts/field/dublTuto21.py @@ -0,0 +1,8 @@ +PLAY_HOUSE = 9300522 +sm.killMobs() +if sm.hasQuest(2606): + sm.spawnMob(9300522, -500, 152, False) + sm.spawnMob(9300522, -300, 152, False) + sm.spawnMob(9300521, -100, 152, False) + sm.spawnMob(9300522, 100, 152, False) + sm.spawnMob(9300522, 300, 152, False) \ No newline at end of file diff --git a/scripts/field/dublTuto23.py b/scripts/field/dublTuto23.py new file mode 100755 index 0000000..f56e99a --- /dev/null +++ b/scripts/field/dublTuto23.py @@ -0,0 +1,3 @@ +sm.killMobs() +if sm.hasQuest(2608): + sm.spawnMob(9300523, -209, 152, False) \ No newline at end of file diff --git a/scripts/field/easy_balog_summon.py b/scripts/field/easy_balog_summon.py new file mode 100755 index 0000000..3c00218 --- /dev/null +++ b/scripts/field/easy_balog_summon.py @@ -0,0 +1,15 @@ +# easy balrog enter field script +# has three parts, they are all spawned at the same time and place + +from net.swordie.ms.constants import BossConstants +from time import sleep + +sm.spawnBalrog(True) # True = easy + +end = sm.waitForMobDeath(BossConstants.BALROG_EASY_DMGSINK) # we just need this guy to die + +sm.showFieldEffect("Map/Effect.img/balog/clear/stone") +sleep(1) # let them marvel at the field effect for a sec + +sm.resetBossMap(BossConstants.BALROG_EASY_BATTLE_MAP) +sm.warpInstanceOut(BossConstants.BALROG_EASY_WIN_MAP, True) \ No newline at end of file diff --git a/scripts/field/easy_zakum_enter.py b/scripts/field/easy_zakum_enter.py new file mode 100755 index 0000000..a81f336 --- /dev/null +++ b/scripts/field/easy_zakum_enter.py @@ -0,0 +1,9 @@ +sm.spawnMob(8800022, -54, 86, False) +#sm.showZakumPlatforms() + +for i in range(8): + sm.spawnMob(8800023 + i, -54, 86, False) + +if sm.waitForMobDeath(8800022): + sm.killMobs() + sm.dispose() diff --git a/scripts/field/enterAswanField.py b/scripts/field/enterAswanField.py new file mode 100755 index 0000000..a211b40 --- /dev/null +++ b/scripts/field/enterAswanField.py @@ -0,0 +1,11 @@ +from net.swordie.ms.enums import AzwanDifficulty +from net.swordie.ms.enums import AzwanModes + +mode = AzwanModes.getByVal((chr.getFieldID() / 1000) % 10) +difficulty = AzwanDifficulty.getByVal(chr.getFieldID() % 10) + +#chr.chatMessage(str(mode)) +#chr.chatMessage(str(difficulty)) + +if mode == AzwanModes.Attack: + sm.waitForMobDeath() \ No newline at end of file diff --git a/scripts/field/enterBossDirection0.py b/scripts/field/enterBossDirection0.py new file mode 100755 index 0000000..549cbfb --- /dev/null +++ b/scripts/field/enterBossDirection0.py @@ -0,0 +1,10 @@ +# id 863000900 (Tynerum : Gollux: Head), field 863000900 +sm.startQuest(17536) +sm.startQuest(17537) +sm.lockInGameUI(True, True) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9010000) # Maple Administrator +res = sm.sendAskYesNo("Would you like to skip the cutscene?") +sm.lockInGameUI(False, True) +sm.warp(863010100) diff --git a/scripts/field/enter_100051010.py b/scripts/field/enter_100051010.py new file mode 100755 index 0000000..202f560 --- /dev/null +++ b/scripts/field/enter_100051010.py @@ -0,0 +1,32 @@ +# id 100051010 (Partem : Karuppa Forest Entrance), field 100051010 +if not hasQuest(35906): +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h1;13=h0;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.spawnNpc(1013306) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.zoomCamera(0, 2000, 0, 220, 120) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3#There's something moving there, in the brush. Time to find out what we're dealing with.") +sm.forcedMove(False, 320) +sm.zoomCamera(2000, 1000, 2000, 110, -30) +sm.sendDelay(2500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendNext("#face1#Argh...S-save meeeee. My poor head... It's become stuck in the ground, you see...") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face1#(I should proooobably help him. You never know which random person will have the clue that leads you on your next adventure, after all!)") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(35947, "2=1;6=1") +else: diff --git a/scripts/field/enter_100051021.py b/scripts/field/enter_100051021.py new file mode 100755 index 0000000..faab942 --- /dev/null +++ b/scripts/field/enter_100051021.py @@ -0,0 +1,10 @@ +# id 100051021 (Partem : Chargin' Sprout Area), field 100051021 +sm.createQuestWithQRValue(16700, "count=91;date=20190708") +sm.createQuestWithQRValue(16700, "count=92;date=20190708") +sm.createQuestWithQRValue(16700, "count=93;date=20190708") +sm.createQuestWithQRValue(16700, "count=94;date=20190708") +sm.createQuestWithQRValue(16700, "count=95;date=20190708") +sm.createQuestWithQRValue(16700, "count=96;date=20190708") +sm.createQuestWithQRValue(16700, "count=97;date=20190708") +sm.createQuestWithQRValue(16700, "count=98;date=20190708") +sm.createQuestWithQRValue(16700, "count=99;date=20190708") diff --git a/scripts/field/enter_100051022.py b/scripts/field/enter_100051022.py new file mode 100755 index 0000000..6e88d7c --- /dev/null +++ b/scripts/field/enter_100051022.py @@ -0,0 +1,76 @@ +# id 100051022 (Partem : Hoppin' Sprout Area), field 100051022 +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=100;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=101;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=102;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=103;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=104;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=105;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=106;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=107;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=108;date=20190708") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/39") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=109;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=110;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=111;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=112;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=113;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=114;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=115;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=116;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=117;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=118;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=119;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=120;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=121;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=122;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=123;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=124;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=125;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=126;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=127;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=128;date=20190708") +sm.startQuest(35915) +sm.createQuestWithQRValue(16700, "count=129;date=20190708") +sm.createQuestWithQRValue(16700, "count=130;date=20190708") +sm.createQuestWithQRValue(16700, "count=131;date=20190708") +sm.createQuestWithQRValue(16700, "count=132;date=20190708") +sm.createQuestWithQRValue(16700, "count=133;date=20190708") +sm.createQuestWithQRValue(16700, "count=134;date=20190708") +sm.createQuestWithQRValue(16700, "count=135;date=20190708") +sm.createQuestWithQRValue(16700, "count=136;date=20190708") +sm.createQuestWithQRValue(16700, "count=137;date=20190708") +sm.createQuestWithQRValue(16700, "count=138;date=20190708") +sm.createQuestWithQRValue(16700, "count=139;date=20190708") +sm.createQuestWithQRValue(16700, "count=140;date=20190708") +sm.createQuestWithQRValue(16700, "count=141;date=20190708") +sm.createQuestWithQRValue(16700, "count=142;date=20190708") diff --git a/scripts/field/enter_100051030.py b/scripts/field/enter_100051030.py new file mode 100755 index 0000000..cffe9ac --- /dev/null +++ b/scripts/field/enter_100051030.py @@ -0,0 +1,3 @@ +# id 100051030 (Partem : Gorgonz's Place), field 100051030 +sm.setMapTaggedObjectVisible("0", False, 0, 0) +sm.warp(910090308) diff --git a/scripts/field/enter_100051031.py b/scripts/field/enter_100051031.py new file mode 100755 index 0000000..40ebdd1 --- /dev/null +++ b/scripts/field/enter_100051031.py @@ -0,0 +1,28 @@ +# id 100051031 (Partem : Land of Log-a-Rhythmic Bugs), field 100051031 +sm.createQuestWithQRValue(16700, "count=172;date=20190708") +sm.createQuestWithQRValue(16700, "count=173;date=20190708") +sm.createQuestWithQRValue(16700, "count=174;date=20190708") +sm.createQuestWithQRValue(16700, "count=175;date=20190708") +sm.createQuestWithQRValue(16700, "count=176;date=20190708") +sm.createQuestWithQRValue(16700, "count=177;date=20190708") +sm.createQuestWithQRValue(16700, "count=178;date=20190708") +sm.createQuestWithQRValue(16700, "count=179;date=20190708") +sm.createQuestWithQRValue(16700, "count=180;date=20190708") +sm.startQuest(11620) +sm.createQuestWithQRValue(16700, "count=181;date=20190708") +sm.createQuestWithQRValue(16700, "count=182;date=20190708") +sm.createQuestWithQRValue(16700, "count=183;date=20190708") +sm.createQuestWithQRValue(16700, "count=184;date=20190708") +sm.createQuestWithQRValue(16700, "count=185;date=20190708") +sm.createQuestWithQRValue(16700, "count=186;date=20190708") +sm.createQuestWithQRValue(16700, "count=187;date=20190708") +sm.createQuestWithQRValue(16700, "count=188;date=20190708") +sm.createQuestWithQRValue(16700, "count=189;date=20190708") +sm.createQuestWithQRValue(16700, "count=190;date=20190708") +sm.createQuestWithQRValue(16700, "count=191;date=20190708") +sm.createQuestWithQRValue(16700, "count=192;date=20190708") +sm.createQuestWithQRValue(16700, "count=193;date=20190708") +sm.createQuestWithQRValue(16700, "count=194;date=20190708") +sm.createQuestWithQRValue(16700, "count=195;date=20190708") +sm.createQuestWithQRValue(16700, "count=196;date=20190708") +sm.createQuestWithQRValue(16700, "count=197;date=20190708") diff --git a/scripts/field/enter_100051033.py b/scripts/field/enter_100051033.py new file mode 100755 index 0000000..e8800a1 --- /dev/null +++ b/scripts/field/enter_100051033.py @@ -0,0 +1,47 @@ +# id 100051033 (Partem : Creepy Crawly Copse End), field 100051033 +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=267;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=268;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=269;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=270;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=271;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=272;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=273;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=274;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=275;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=276;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=277;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=278;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=279;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=280;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=281;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=282;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=283;date=20190708") +sm.createQuestWithQRValue(16700, "count=284;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=285;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=286;date=20190708") +sm.createQuestWithQRValue(16700, "count=287;date=20190708") +sm.createQuestWithQRValue(16700, "count=288;date=20190708") +sm.createQuestWithQRValue(16700, "count=289;date=20190708") +sm.startQuest(35920) +sm.createQuestWithQRValue(16700, "count=290;date=20190708") +sm.createQuestWithQRValue(16700, "count=291;date=20190708") +sm.createQuestWithQRValue(16700, "count=292;date=20190708") diff --git a/scripts/field/enter_100051034.py b/scripts/field/enter_100051034.py new file mode 100755 index 0000000..b297c73 --- /dev/null +++ b/scripts/field/enter_100051034.py @@ -0,0 +1,70 @@ +# id 100051034 (Partem : Wawa Falls), field 100051034 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1500, 0, 100, -200) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(300) +sm.zoomCamera(4500, 1500, 4500, -280, 45) +sm.createFieldTextEffect("#fnArial##fs18#Wawa Falls", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.sendDelay(4500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Hmm... This is weird. We've combed through the Creepy Crawly Copse, but I haven't seen that last compass part anywhere. Where could it be hiding?") +sm.sendSay("#face0#Maybe Gorgonz only thought he saw the third compass piece fall here. But if it's not here, where do you think it could be?") +sm.sendDelay(300) +sm.zoomCamera(1000, 1500, 1000, -150, 45) +sm.forcedMove(False, 190) +sm.sendDelay(2500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0##b(A glint in the water catches your eye, and you approach to take a closer look. Upon gazing in, you can faintly see the final part of the broken compass lying on the bottom of the river.)#k") +sm.sendSay("#face1#Well, this complicates things. The last part's down there.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Ugh. Really?") +sm.sendSay("#face0#You're right. From what I can make out, the pattern looks the same as the others we've picked up.") +sm.sendSay("#face0#Sooo... Do you have any good ideas about how to fish it out? The current here is stronger than it looks, so diving in ourselves would be dangerous.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3##b(You dip your hand into the surging waters for a moment, feeling the churn of the current around your fingers. Begrudgingly, you admit it would be risky for you to try to recover it yourself.)#k") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#If only we could make the waterfall stop, just for a moment.") +sm.forcedMove(True, 1) +sm.sendDelay(300) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Stop the waterfall? You think it's actually possible?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face1#O-oh no... Me and my big mouth. I'm sorry, I just blurted it out. I don't even know how we could manage something like that.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face6#(If all I need is a minute or so, I think I might be able to pull it off. I could knock a big boulder into the stream and stop up the flow for a bit...)") +sm.sendSay("#face6#(Of course, I'd need some explosives to make that happen, and wouldn't you know it, I forgot my dynamite in my OTHER pants. Guess I'll just have to compound an explosive using what I can find in the field.)") +sm.sendSay("#face0#Actually...") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face1#*sniff*... Y-yes?") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#Is there anything around here I could use to make an explosive?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#What would you need that for? ...Wait, you figured out a way, didn't you? Let's see. Something explosive...") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(35947, "12=1;16=1;2=1;6=1") diff --git a/scripts/field/enter_100051040.py b/scripts/field/enter_100051040.py new file mode 100755 index 0000000..4ca1f93 --- /dev/null +++ b/scripts/field/enter_100051040.py @@ -0,0 +1,33 @@ +# id 100051040 (Partem : Hidden Entrance), field 100051040 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1500, 0, -200, 90) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Eeep! This place is even spookier than I'd imagined. I feel like we might hear some sort of weird scratching or moaning any minute...") +sm.playSound("Sound/SoundEff.img/pathfinder/roar1", 100) +sm.sendDelay(1000) +sm.sendNext("#face0#Aaaaah!") +sm.sendSay("#face1#W-w-what was that?! We don't usually hear the loud noises this often... Oh no! What if I jinxed us?") +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3#(Who would've thought there'd be a passageway this deep in the forest? From the look of it, I'd guess it opens into the main complex of the ruins.)") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(35947, "12=1;22=1;16=1;2=1;6=1") diff --git a/scripts/field/enter_100051042.py b/scripts/field/enter_100051042.py new file mode 100755 index 0000000..ff109b0 --- /dev/null +++ b/scripts/field/enter_100051042.py @@ -0,0 +1,11 @@ +# id 100051042 (Partem : Ruins Guardian Way 2), field 100051042 +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) +sm.startQuest(35926) diff --git a/scripts/field/enter_100051043.py b/scripts/field/enter_100051043.py new file mode 100755 index 0000000..7faa70f --- /dev/null +++ b/scripts/field/enter_100051043.py @@ -0,0 +1,53 @@ +# id 100051043 (Partem : Deep Within the Ruins), field 100051043 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, -755, 230) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Oooh... We're getting close to whatever is making that weird sound. Just a little further this way.") +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.createFieldTextEffect("#fnArial##fs18#Mysterious Black Pool", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.zoomCamera(4000, 2000, 4000, -755, 100) +sm.sendDelay(4500) +sm.sendNext("#face0#It's...a big pool of water. It's pitch-dark, so I can't really make out much, but the sound's definitely coming from somewhere down below.") +sm.forcedMove(False, 10) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#Wait. There's something written on the pillar here.") +sm.sendDelay(500) +sm.zoomCamera(2000, 2000, 2000, -460, 60) +sm.sendDelay(2500) +sm.sendNext("#face3#Let's see... #g'Whosoever seeks to find the way\r\nmust first pass through the Deathly Abyss.\r\nOnly a light bright enough to ward off death\r\nshall illuminate the path.'#k") +sm.sendSay("#face0#The Deathly Abyss, huh? How come these things never lead to the sun-drenched meadows of life?") +sm.sendDelay(500) +sm.zoomCamera(1500, 1500, 1500, -700, 60) +sm.sendDelay(2000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Wow, you can actually read that script? I didn't know anyone could. No matter how long I look at it, it just looks like a pretty jumble of designs to me.") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0##b(You pick up a stone and toss it in, but it quickly vanishes into the depths beyond your sight. Even if you dove in, you would have no idea where to swim to, or what else might lurk in the depths.)#k") +sm.sendSay("#face6#(Lots of ancient cultures believed light had a symbolic power to subdue or overcome death. But does the clue mean I need to literally light up the water? What could I use to do that without it being dimmed or extinguished by the pool?)") +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("#face3#Hmm. I just thought something that might get us through the Deathly Abyss.") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(35947, "12=1;22=1;16=1;26=1;2=1;6=1") diff --git a/scripts/field/enter_100051044.py b/scripts/field/enter_100051044.py new file mode 100755 index 0000000..97c6de5 --- /dev/null +++ b/scripts/field/enter_100051044.py @@ -0,0 +1,45 @@ +# id 100051044 (Partem : Soul Chamber), field 100051044 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 3000, 0, -1145, 268) +sm.spawnNpc(1013350, -1096, 43) +sm.showNpcSpecialActionByTemplateId(1013350, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.zoomCamera(4000, 2000, 4000, -1010, 85) +sm.sendDelay(4500) +sm.createFieldTextEffect("#fnArial##fs18#Moments Later, in the Soul Chamber", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Phew... Th-th-that was so scary! We almost became permanent residents of these creepy ruins! If it wasn't for your quick thinking, we would've... *pant* *pant*") +sm.sendSay("#face0#Anyway, we finally made it. This is where the noise is coming from.") +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3##b(You see something shining brightly upon a raised dais in the middle of the chamber. After going through all that trouble to get here, you might as well take a closer look.)#k") +sm.sendDelay(500) +sm.zoomCamera(3000, 1000, 3000, -400, -45) +sm.moveNpcByTemplateId(1013350, False, 400, 150) +sm.forcedMove(False, 450) +sm.sendDelay(5000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013360) # Soul +sm.sendNext("#face0#You are the one who has trod the hidden path. You have shown yourself qualified to be the bearer of the power.") +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0##b(You hear a low-pitched voice echo in the chamber. You're not sure how to respond, but after everything you've gone through to get here, you decide to just speak candidly to the voice.)#k") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(35947, "12=1;22=1;16=1;26=1;29=1;2=1;6=1") diff --git a/scripts/field/enter_101000100.py b/scripts/field/enter_101000100.py new file mode 100755 index 0000000..bc22cf5 --- /dev/null +++ b/scripts/field/enter_101000100.py @@ -0,0 +1,13 @@ +from net.swordie.ms.connection.packet import Effect +from net.swordie.ms.connection.packet import User +from net.swordie.ms.enums import TextEffectType +from net.swordie.ms.util import Position + +sm.lockInGameUI(True) + +effect = Effect.createFieldTextEffect("#fs20#- After the forest and house have recovered in a couple of months -", 50, 2000, 4, + Position(0, 0), 1, 4 , TextEffectType.BlackFadedBrush, 0, 0) +sm.getChr().getField().broadcastPacket(User.effect(effect)); +sm.sendDelay(4000) + +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/enter_101020100.py b/scripts/field/enter_101020100.py new file mode 100755 index 0000000..f042ddf --- /dev/null +++ b/scripts/field/enter_101020100.py @@ -0,0 +1,10 @@ +# id 101020100 (Chimney Tree : Close to the Birds), field 101020100 +sm.createQuestWithQRValue(16700, "count=151;date=20190716") +sm.createQuestWithQRValue(16700, "count=152;date=20190716") +sm.createQuestWithQRValue(16700, "count=153;date=20190716") +sm.createQuestWithQRValue(16700, "count=154;date=20190716") +sm.createQuestWithQRValue(16700, "count=155;date=20190716") +sm.showEffect("Effect/BasicEff.img/monsterCollectionGet", 0, 4) +sm.createQuestWithQRValue(18821, "lc=0:0:4:23") +sm.createQuestWithQRValue(18821, "count=1;lc=0:0:4:23") +sm.startQuest(28859) diff --git a/scripts/field/enter_101020400.py b/scripts/field/enter_101020400.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/enter_101020401.py b/scripts/field/enter_101020401.py new file mode 100755 index 0000000..8c9a481 --- /dev/null +++ b/scripts/field/enter_101020401.py @@ -0,0 +1,6 @@ +# id 101020401 (East Forest : Windy Place), field 101020401 +sm.createQuestWithQRValue(16700, "count=92;date=20190716") +sm.createQuestWithQRValue(16700, "count=93;date=20190716") +sm.createQuestWithQRValue(16700, "count=94;date=20190716") +sm.createQuestWithQRValue(16700, "count=95;date=20190716") +sm.createQuestWithQRValue(16700, "count=96;date=20190716") diff --git a/scripts/field/enter_101070001.py b/scripts/field/enter_101070001.py new file mode 100755 index 0000000..d0ab834 --- /dev/null +++ b/scripts/field/enter_101070001.py @@ -0,0 +1,22 @@ +sm.lockUI() +FANZY = 1500010 + +sm.removeEscapeButton() + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("#bBleh! I almost drowned!#k") + +sm.setSpeakerID(FANZY) +sm.sendSay("There must be some kind of enchantment to keep people from swimming across.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("#bYou could have told me that in advance!#k") + +sm.setSpeakerID(FANZY) +sm.sendSay("I'm not omniscient, and you make a good test subject. We'll have to find another way.") + +sm.unlockUI() +sm.startQuest(32102) +sm.completeQuest(32102) + +sm.warp(101070000, 0) \ No newline at end of file diff --git a/scripts/field/enter_101072001.py b/scripts/field/enter_101072001.py new file mode 100755 index 0000000..13196e2 --- /dev/null +++ b/scripts/field/enter_101072001.py @@ -0,0 +1,21 @@ +# id 101072001 (Ellinel Fairy Academy : Ellinel Academy Lobby), field 101072001 +sm.lockInGameUI(True, True) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1500003) # Woonie the Fairy +sm.sendNext("Mr. Kalayan!") +sm.setInnerOverrideSpeakerTemplateID(1500004) # Tosh the Fairy +sm.sendSay("We missed you!") +sm.setInnerOverrideSpeakerTemplateID(1500005) # Tracy the Fairy +sm.sendSay("We were so scared.") +sm.setInnerOverrideSpeakerTemplateID(1500006) # Ephony the Fairy +sm.sendSay("I'm sorry! We'll never play in a danger zone again.") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("No, I'm the one at fault! I should have encouraged your pointless little plays! Forgive me!") +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("Look at the display of emotions between them! No human could ever hope to match this!") +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendSay("I am rather impressed by your empathy and lack of savagery, #h0#. You have been of great help.") +sm.sendSay("And you, Cootie the Really Small. Such understanding of fairy culture is uncommon, even amongst our own people. I would like to offer you a position here at the Academy...") +sm.lockInGameUI(False, True) +sm.warp(101072002) diff --git a/scripts/field/enter_101072002.py b/scripts/field/enter_101072002.py new file mode 100755 index 0000000..2823556 --- /dev/null +++ b/scripts/field/enter_101072002.py @@ -0,0 +1,45 @@ +# id 101072002 (Ellinel Fairy Academy : Ellinel Academy Lobby), field 101072002 +sm.lockInGameUI(True, True) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendNext("What? I can work in Ellinel?!") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("H-headmistress Ivana, you would bring a HUMAN into our halls of knowledge?!") +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendSay("Our boycott of the humans has crippled us. Why, if not for their help, our children would have been lost. It is time for a change...") +sm.sendSay("The Black Mage sent all of Maple World into terror long ago... Now, certain factions would bring him back. We fairies cannot stand by idly. \r\nWe must open our hearts and minds.") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("Ugh... Whatever you say, Headmistress...") +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("This is SO COOL. I'm glad you came out here to see me do all this.") +sm.setParam(17) +sm.sendSay("So, the kids can rehearse their play again?") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendSay("They've already begun work on a different script! They must have been greatly touched by this incident.") +sm.setParam(17) +sm.sendSay("......?") +sm.moveCamera(False, 180, -400, 259) +sm.sendDelay(4737) +sm.sendDelay(100) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1500006) # Ephony the Fairy +sm.sendNext("Watch out, evil Mole King! For buffs and mesos, I am #b#h0##k! In the name of hot sandwiches, I will punish you! ") +sm.setInnerOverrideSpeakerTemplateID(1500005) # Tracy the Fairy +sm.sendSay("Hey, no fair! I was gonna play #b#h0##k!") +sm.setInnerOverrideSpeakerTemplateID(1500007) # Phiny the Fairy +sm.sendSay("No! That's my role!") +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(0) +sm.sendDelay(100) +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendNext("The title of the play is #bCrybaby #h0#'s Molenificent Transformation#k.") +sm.setParam(17) +sm.sendSay("......") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("That sounds like a play I'd love to see! ") +sm.lockInGameUI(False, True) +sm.startQuest(32129) +sm.warp(101072000) diff --git a/scripts/field/enter_101073010.py b/scripts/field/enter_101073010.py new file mode 100755 index 0000000..dce26f2 --- /dev/null +++ b/scripts/field/enter_101073010.py @@ -0,0 +1,7 @@ +# id 101073010 (Mandraky Field : Desolate Orchard 1), field 101073010 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500017) # Tosh the Fairy +sm.sendSayOkay("Help me! I'm totally stuck 'cuz of all the monsters!\r\n\r\n#b(Defeat all nearby monsters.)#k") +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_101073110.py b/scripts/field/enter_101073110.py new file mode 100755 index 0000000..c90c8a9 --- /dev/null +++ b/scripts/field/enter_101073110.py @@ -0,0 +1,9 @@ +# id 101073110 (Mandraky Field : Desolate Orchard 2), field 101073110 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500019) # Ephony the Fairy +sm.sendSayOkay("Help us! These monsters are gonna eeeeat us!\r\n\r\n#b(Defeat all nearby monsters.)#k") +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_101073201.py b/scripts/field/enter_101073201.py new file mode 100755 index 0000000..ba9c1c5 --- /dev/null +++ b/scripts/field/enter_101073201.py @@ -0,0 +1,30 @@ +# id 101073201 (Mandraky Field : Kidnapping Site), field 101073201 +sm.lockInGameUI(True, True) +sm.hideUser(True) +sm.spawnNpc(1500026, -322, 228) +sm.showNpcSpecialActionByTemplateId(1500026, "summon", 0) +sm.spawnNpc(1500031, 40, 228) +sm.showNpcSpecialActionByTemplateId(1500031, "summon", 0) +sm.spawnNpc(1500032, 180, 228) +sm.showNpcSpecialActionByTemplateId(1500032, "summon", 0) +sm.setSpeakerType(3) +sm.setSpeakerID(1500016) # Woonie the Fairy +sm.setParam(1) +sm.sendNext("I'm scared... We were only rehearsing our play...") +sm.setSpeakerID(1500018) # Tracy the Fairy +sm.sendSay("Don't worry, Woonie. Everything will be fine! Someone will come and save us... I think...") +sm.setSpeakerID(1500026) # ??? +sm.sendSay("What's this? Little lady fairies in the land of the Mole King?! What brave little morsels you must be!") +sm.setSpeakerID(1500018) # Tracy the Fairy +sm.sendSay("Please let us go. I don't want to be mole chow!") +sm.setSpeakerID(1500026) # ??? +sm.sendSay("Oh, I won't eat you! I'll keep you around to be my brides! When you're old enough, obviously, we moles have a very strong sense of chivalry.") +sm.setSpeakerID(1500016) # Woonie the Fairy +sm.sendSay("What?! GROSS!") +sm.setSpeakerID(1500026) # ??? +sm.sendSay("I am sorry if I offended you, m'lady, but I'm not spending my days under the dank dark earth! Once I've liberated all these Mandrakies from your oppressive fairy regime, I'll be the ruler up here, and you will come to love me... as long as that's okay with you.") +sm.setSpeakerID(1500018) # Tracy the Fairy +sm.sendSay("Okay, somebody HAS to save us. ") +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(101073100) diff --git a/scripts/field/enter_101073300.py b/scripts/field/enter_101073300.py new file mode 100755 index 0000000..3865217 --- /dev/null +++ b/scripts/field/enter_101073300.py @@ -0,0 +1,8 @@ +# id 101073300 (Mandraky Field : Outdoor Theater Stage), field 101073300 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500016) # Woonie the Fairy +sm.sendSayOkay("Please eliminate that gross old mole!\r\n#b(Defeat the Mole King.)#k") +sm.startQuest(26509) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_101074000.py b/scripts/field/enter_101074000.py new file mode 100755 index 0000000..f7d6204 --- /dev/null +++ b/scripts/field/enter_101074000.py @@ -0,0 +1,6 @@ +# Field script for entering Ellinel Fairy Academy + +MIDSUMMER_NIGHTS_FOREST_ELLINEL_LAKE_SHORE = 101070000 # MAP ID + +sm.invokeAfterDelay(5000, "warp", MIDSUMMER_NIGHTS_FOREST_ELLINEL_LAKE_SHORE, 0) + diff --git a/scripts/field/enter_101074001.py b/scripts/field/enter_101074001.py new file mode 100755 index 0000000..a19efcd --- /dev/null +++ b/scripts/field/enter_101074001.py @@ -0,0 +1,5 @@ +# Field script for leaving Ellinel Fairy Academy + +NORTH_FOREST_GIANT_TREE = 101030000 # MAP ID + +sm.invokeAfterDelay(4000, "warp", NORTH_FOREST_GIANT_TREE, 5) diff --git a/scripts/field/enter_101080000.py b/scripts/field/enter_101080000.py new file mode 100755 index 0000000..ffc9992 --- /dev/null +++ b/scripts/field/enter_101080000.py @@ -0,0 +1,31 @@ +# id 101080000 (South Forest : Deepening Forest), field 101080000 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(3) +sm.sendNext("Now, what way was it Anne told me to go?") +sm.sendDelay(1000) +sm.zoomCamera(2000, 1500, 2000, -834, 496) +sm.sendDelay(3000) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.sendNext("Over there?") +sm.forcedMove(False, 300) +sm.sendDelay(3500) +sm.sendDelay(2000) +sm.sendNext("Ugh...") +sm.sendSay("It's kind of scary, but...") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_101081300.py b/scripts/field/enter_101081300.py new file mode 100755 index 0000000..17297b8 --- /dev/null +++ b/scripts/field/enter_101081300.py @@ -0,0 +1,29 @@ +# id 101081300 (Elodin : Deep Forest Clearing), field 101081300 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.spawnNpc(1501012, -120, 83) +sm.showNpcSpecialActionByTemplateId(1501012, "summon", 0) +sm.forcedMove(False, 250) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(3) +sm.sendNext("Uhh...") +sm.sendSay("I #ethink#n she went this way...") +sm.sendDelay(2000) +sm.zoomCamera(2000, 1500, 2000, -40, 10) +sm.sendDelay(2000) +sm.sendNext("Oh!") +sm.sendDelay(1000) +sm.sendDelay(1500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_101082000.py b/scripts/field/enter_101082000.py new file mode 100755 index 0000000..9043fde --- /dev/null +++ b/scripts/field/enter_101082000.py @@ -0,0 +1,5 @@ +# id 101082000 (Ruenna's Home : 1st Floor Living Room), field 101082000 +sm.lockInGameUI(True, False) +sm.blind(True, 150, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_106030100.py b/scripts/field/enter_106030100.py new file mode 100755 index 0000000..a8a573e --- /dev/null +++ b/scripts/field/enter_106030100.py @@ -0,0 +1,5 @@ +# Banquet Hall - Mushroom Castle +if sm.hasQuest(30050): + sm.completeQuest(30050) +# On enter mushroom castle theme dungeon +sm.showEffect("Map/Effect.img/temaD/enter/mushCatle") diff --git a/scripts/field/enter_106031000.py b/scripts/field/enter_106031000.py new file mode 100755 index 0000000..195f53a --- /dev/null +++ b/scripts/field/enter_106031000.py @@ -0,0 +1,49 @@ +# id 106031000 (Mushroom Castle : Banquet Hall), field 106031000 +sm.showNpcSpecialActionByTemplateId(1302111, "summon", 0) +sm.showNpcSpecialActionByTemplateId(1302101, "summon", 0) +sm.lockInGameUI(True, True) +sm.hideUser(False) +sm.removeAdditionalEffect() +sm.sendDelay(1000) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setSpeakerID(1302108) # Head Servant +sm.setParam(33) +sm.setColor(1) +sm.sendNext("The next contestant is willing to do anything to make the princess smile! Remember him by his one broken horn! It's the bad boy of the mushroom world, MINUS!") +sm.spawnNpc(1302110, 138, 225) +sm.showNpcSpecialActionByTemplateId(1302110, "summon", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(1302111, "open", 0) +sm.playSound("flowervioleta/curtain", 100) +sm.sendDelay(2000) +sm.startQuest(30080) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "One who will make the princess smile,", 2000, 1, 0, 0, 0, 4, 1302110, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "One who will become the husband of the princess,", 2000, 1, 0, 0, 0, 4, 1302110, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "One who will become the king of this land,", 2000, 1, 0, 0, 0, 4, 1302110, 4878499) +sm.zoomCamera(600, 5000, 600, 139, 285) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(1302110, "cry", 0) +sm.sendDelay(500) +sm.playSound("flowervioleta/appear", 100) +sm.sendDelay(1500) +sm.zoomCamera(600, 1000, 600, 140, 222) +sm.sendDelay(1500) +sm.sendDelay(3000) +sm.sendDelay(1500) +sm.speechBalloon(True, 0, 0, "Take him out.", 2000, 1, 0, 0, 0, 4, 1302100, 4878499) +sm.showNpcSpecialActionByTemplateId(1302110, "out", 0) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(1302111, "close", 0) +sm.playSound("flowervioleta/curtain", 100) +sm.sendDelay(2000) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "Ah... I am quite tired. Can we take a short break?", 2000, 0, 0, 0, 0, 4, 1302100, 4878499) +sm.lockInGameUI(False, True) +sm.warp(106030000) diff --git a/scripts/field/enter_106031001.py b/scripts/field/enter_106031001.py new file mode 100755 index 0000000..41b9573 --- /dev/null +++ b/scripts/field/enter_106031001.py @@ -0,0 +1,49 @@ +# id 106031001 (Mushroom Castle : Banquet Hall), field 106031001 +sm.lockInGameUI(True, True) +equips = [1004160, ] +sm.avatarLookSet(equips) +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...I-I guess you look a bit like a viking!", 2000, 0, 0, 0, 0, 4, 1302100, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "I totally thought you were a viking!", 2000, 0, 0, 0, 0, 4, 1302106, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "All you need is a beak... and you'll look the same!", 2000, 0, 0, 0, 0, 4, 1302108, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Um... skinnier legs and you'll definitely pass as one!", 2000, 0, 0, 0, 0, 4, 1302105, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Let's make wings out of cloth to perfect the look!", 2000, 0, 0, 0, 0, 4, 1302107, 4878499) +sm.sendDelay(3000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "......", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.speechBalloon(True, 0, 0, "......", 2000, 1, 0, 0, 0, 4, 1302100, 4878499) +sm.speechBalloon(True, 0, 0, "......", 2000, 1, 0, 0, 0, 4, 1302105, 4878499) +sm.speechBalloon(True, 0, 0, "......", 2000, 1, 0, 0, 0, 4, 1302106, 4878499) +sm.speechBalloon(True, 0, 0, "......", 2000, 1, 0, 0, 0, 4, 1302107, 4878499) +sm.speechBalloon(True, 0, 0, "......", 2000, 1, 0, 0, 0, 4, 1302108, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "It's not gonna work, huh?", 2000, 0, 0, 0, 0, 4, 1302100, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Yea, I think we're kinda overreacting...", 2000, 0, 0, 0, 0, 4, 1302108, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "I agree, it's not a good idea.", 2000, 0, 0, 0, 0, 4, 1302105, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Then, what about my dear Violetta!", 2000, 0, 0, 0, 0, 4, 1302100, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Leave it to me! I will take care of everything!", 2000, 0, 0, 0, 0, 4, 1302107, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Oh, Head Security Officer! Do you have a plan?", 2000, 0, 0, 0, 0, 4, 1302100, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "I'd call it an eye for eye!", 2000, 0, 0, 0, 0, 4, 1302107, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "I will kidnap the vikings!", 2000, 0, 0, 0, 0, 4, 1302107, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...What?", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.speechBalloon(True, 0, 0, "...What?", 2000, 1, 0, 0, 0, 4, 1302100, 4878499) +sm.speechBalloon(True, 0, 0, "...What?", 2000, 1, 0, 0, 0, 4, 1302106, 4878499) +sm.speechBalloon(True, 0, 0, "...What?", 2000, 1, 0, 0, 0, 4, 1302105, 4878499) +sm.speechBalloon(True, 0, 0, "...What?", 2000, 1, 0, 0, 0, 4, 1302108, 4878499) +equips = [0, ] +sm.avatarLookSet(equips) +sm.lockInGameUI(False, True) +sm.warp(106030000) diff --git a/scripts/field/enter_106031002.py b/scripts/field/enter_106031002.py new file mode 100755 index 0000000..40fba07 --- /dev/null +++ b/scripts/field/enter_106031002.py @@ -0,0 +1,79 @@ +# id 106031002 (Mushroom Castle : Banquet Hall), field 106031002 +sm.lockInGameUI(True, True) +sm.removeAdditionalEffect() +sm.spawnNpc(1302109, 138, 257) +sm.showNpcSpecialActionByTemplateId(1302109, "summon", 0) +sm.spawnNpc(1302101, 300, 257) +sm.showNpcSpecialActionByTemplateId(1302101, "summon", 0) +sm.forcedInput(1) +sm.sendDelay(100) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "My princess, run!", 2000, 0, 0, 0, 0, 4, 1302100, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 1, 0, "Father? Who is this man?", 2000, 0, 0, 0, 0, 4, 1302101, 4878499) +sm.showFieldEffect("lightning/screenMsg/2", 0) +sm.sendDelay(5000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Can it be...?!", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "I will rule the world, for I am the Black...", 2000, 0, 0, -30, 0, 4, 1302109, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Black Ma-!", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.speechBalloon(True, 0, 0, "Black Ma-!", 2000, 1, 0, 0, 0, 4, 1302100, 4878499) +sm.speechBalloon(True, 1, 0, "Black Ma-!", 2000, 1, 0, 0, 0, 4, 1302101, 4878499) +sm.speechBalloon(True, 0, 0, "Black Ma-!", 2000, 1, 0, 0, 0, 4, 1302105, 4878499) +sm.speechBalloon(True, 0, 0, "Black Ma-!", 2000, 1, 0, 0, 0, 4, 1302106, 4878499) +sm.speechBalloon(True, 0, 0, "Black Ma-!", 2000, 1, 0, 0, 0, 4, 1302107, 4878499) +sm.speechBalloon(True, 0, 0, "Black Ma-!", 2000, 1, 0, 0, 0, 4, 1302108, 4878499) +sm.showNpcSpecialActionByTemplateId(1302109, "change", 0) +sm.playSound("Kite/Crown", 100) +sm.sendDelay(2000) +sm.startQuest(30081) +sm.playSound("flowervioleta/appear", 100) +sm.sendDelay(3000) +sm.speechBalloon(False, 0, 0, "Black Viking!", 2000, 0, 0, -50, 0, 4, 1302109, 4878499) +sm.blind(True, 120, 0, 0, 0, 500) +sm.sendDelay(500) +sm.showFieldEffect("Map/Effect2.img/flowervioleta/bird", 1073343334) +sm.sendDelay(3000) +sm.blind(False, 0, 0, 0, 0, 500) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...Oh.", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.speechBalloon(True, 0, 0, "...Oh.", 2000, 1, 0, 0, 0, 4, 1302100, 4878499) +sm.speechBalloon(True, 1, 0, "...Oh.", 2000, 1, 0, 0, 0, 4, 1302101, 4878499) +sm.speechBalloon(True, 0, 0, "...Oh.", 2000, 1, 0, 0, 0, 4, 1302105, 4878499) +sm.speechBalloon(True, 0, 0, "...Oh.", 2000, 1, 0, 0, 0, 4, 1302106, 4878499) +sm.speechBalloon(True, 0, 0, "...Oh.", 2000, 1, 0, 0, 0, 4, 1302107, 4878499) +sm.speechBalloon(True, 0, 0, "...Oh.", 2000, 1, 0, 0, 0, 4, 1302108, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Why does everyone get disappointed when they hear my name?!", 2000, 0, 0, -50, 0, 4, 1302109, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "So anyway... where is this irresistibly beautiful princess, Violetta?", 2000, 0, 0, -50, 0, 4, 1302109, 4878499) +sm.showNpcSpecialActionByTemplateId(1302101, "open", 0) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 1, 0, "Have you come to kidnap my beautiful self?", 2000, 0, 0, 0, 0, 4, 1302101, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "#fn매ᄐᆳ##eNo, no, no. Where is Violetta?\r\nI'm serious, like a heart attack.", 3000, 0, 0, -40, 0, 4, 1302109, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 1, 0, "I am Violetta.", 2000, 0, 0, 0, 0, 4, 1302101, 4878499) +sm.playSound("flowervioleta/suprise", 100) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...You? You are the beautiful Violetta?", 2000, 0, 0, -40, 0, 4, 1302109, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "*Nod*", 2000, 1, 0, 0, 0, 4, 1302100, 4878499) +sm.speechBalloon(True, 1, 0, "*Nod*", 2000, 1, 0, 0, 0, 4, 1302101, 4878499) +sm.speechBalloon(True, 0, 0, "*Nod*", 2000, 1, 0, 0, 0, 4, 1302105, 4878499) +sm.speechBalloon(True, 0, 0, "*Nod*", 2000, 1, 0, 0, 0, 4, 1302106, 4878499) +sm.speechBalloon(True, 0, 0, "*Nod*", 2000, 1, 0, 0, 0, 4, 1302107, 4878499) +sm.speechBalloon(True, 0, 0, "*Nod*", 2000, 1, 0, 0, 0, 4, 1302108, 4878499) +sm.playSound("flowervioleta/thunder", 100) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Blasted Prime Minister! He tricked me!", 2000, 0, 0, -40, 0, 4, 1302109, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "How dare you shame me like this.\r\nI will take this ugly mushroom with me!", 2000, 0, 0, -40, 0, 4, 1302109, 4878499) +sm.lockInGameUI(False, True) +sm.warp(106031100) diff --git a/scripts/field/enter_106031003.py b/scripts/field/enter_106031003.py new file mode 100755 index 0000000..f0546d2 --- /dev/null +++ b/scripts/field/enter_106031003.py @@ -0,0 +1,40 @@ +# id 106031003 (Mushroom Castle : Banquet Hall), field 106031003 +sm.showNpcSpecialActionByTemplateId(1302101, "summon", 0) +sm.lockInGameUI(True, True) +sm.removeAdditionalEffect() +sm.setSpeakerType(3) +sm.setSpeakerID(1302001) # Violetta +sm.setParam(33) +sm.setColor(1) +sm.sendNext("Father, please take this medicine. It is the Mushroom All Cure Potion that this brave hero got for you.") +sm.setSpeakerID(1302004) # Prime Minister +sm.sendSay("#face1#T-thank you. *Gulp gulp gulp*") +sm.sendSay("#face2#Oh, I'm regaining my strength... my health! AHAHAHA!") +sm.startQuest(30081) +sm.setSpeakerID(1302001) # Violetta +sm.sendSay("Are you all better? I am so thankful. Oh, great hero, how shall I ever repay you?") +sm.sendSay("Okay, I have made up my mind. I, Violetta, will be your bride. ") +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.setParam(57) +sm.sendNext("Um, no. No, really. I'm really, REALLY okay.") +sm.setParam(33) +sm.sendSay("Please, don't try to be courteous. You have all the rights, all the qualifications to be my spouse. Please come here, I will be yours.") +sm.setParam(57) +sm.sendSay("I can't go through with this. I don't want this mushroom as my spouse. I gotta...") +sm.sendSay("I...I love Inkwell!") +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302100, 4878499) +sm.speechBalloon(True, 1, 0, "!", 2000, 1, 0, 0, 0, 4, 1302101, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302104, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302105, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302106, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302107, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302108, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302113, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302114, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302115, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2000, 1, 0, 0, 0, 4, 1302116, 4878499) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "Goodbye!", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.forcedInput(2) diff --git a/scripts/field/enter_106031100.py b/scripts/field/enter_106031100.py new file mode 100755 index 0000000..4a57f05 --- /dev/null +++ b/scripts/field/enter_106031100.py @@ -0,0 +1,9 @@ +# id 106031100 (Direction : Direction), field 106031100 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.forcedInput(0) +sm.sendDelay(3500) +sm.sendDelay(9500) +sm.reservedEffect(False, 0, 0, "Effect/Direction2.img/flowervioleta/opennig") +sm.lockInGameUI(False, True) +sm.warp(106031000) diff --git a/scripts/field/enter_106031210.py b/scripts/field/enter_106031210.py new file mode 100755 index 0000000..3a82d9f --- /dev/null +++ b/scripts/field/enter_106031210.py @@ -0,0 +1,48 @@ +# id 106031210 (Mushroom Castle : Castle Rear Entrance), field 106031210 +sm.startQuest(30082) +sm.lockInGameUI(True, True) +sm.forcedInput(1) +sm.sendDelay(100) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "We've won!", 2000, 0, 0, 0, 0, 4, 1302107, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 1, 0, "I've heard it's all thanks to you.", 2000, 0, 0, 0, 0, 4, 1302101, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Well, yeah, I guess...", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 1, "Please don't put your face so close to mine.", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 1, 0, "I'm so glad our castle gate is strong.", 2000, 0, 0, 0, 0, 4, 1302101, 4878499) +sm.sendDelay(1500) +sm.speechBalloon(True, 0, 0, "*Knock knock*", 1500, 1, -55, -20, 0, 4, 1302101, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "#r#e#fs20#*CRUNCH*", 2000, 0, -55, -20, 0, 4, 1302101, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "T-the gate has fallen!", 2000, 0, 0, 0, 0, 4, 1302107, 4878499) +sm.moveCamera(False, 400, 650, 138) +sm.sendDelay(2219) +sm.spawnNpc(1302118, 980, 147) +sm.showNpcSpecialActionByTemplateId(1302118, "summon", 0) +sm.spawnNpc(1302119, 880, 147) +sm.showNpcSpecialActionByTemplateId(1302119, "summon", 0) +sm.spawnNpc(1302118, 780, 147) +sm.showNpcSpecialActionByTemplateId(1302118, "summon", 0) +sm.spawnNpc(1302119, 680, 147) +sm.showNpcSpecialActionByTemplateId(1302119, "summon", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(1302118, True, 250, 100) +sm.moveNpcByTemplateId(1302119, True, 250, 100) +sm.moveNpcByTemplateId(1302118, True, 250, 100) +sm.moveNpcByTemplateId(1302119, True, 250, 100) +sm.sendDelay(3000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Intruders! Protect the castle!", 2000, 0, 0, 0, 0, 4, 1302107, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 1, 0, "H-how did it break?", 2000, 0, 0, 0, 0, 4, 1302101, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 1, "What the... Is she an alien?!", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.lockInGameUI(False, True) +sm.warp(106031002) diff --git a/scripts/field/enter_106031504.py b/scripts/field/enter_106031504.py new file mode 100755 index 0000000..07bab4a --- /dev/null +++ b/scripts/field/enter_106031504.py @@ -0,0 +1,24 @@ +# id 106031504 (Viking Airship : Galley), field 106031504 +sm.lockInGameUI(True, True) +sm.forcedInput(1) +sm.sendDelay(100) +sm.forcedInput(0) +sm.setSpeakerType(3) +sm.setSpeakerID(1302001) # Violetta +sm.setParam(57) +sm.setColor(1) +sm.sendNext("(T-that power, though! Why did I get this key when she could have easily released herself?)") +sm.setParam(33) +sm.sendSay("All right, let's g... Ah, I'm sorry but I can't walk. All this ruckus has shaken me up, plus I've always been a bit on the weaker side. I have no choice but to let you carry me.") +sm.setParam(57) +sm.sendSay("I'd like to formally rej-UGH!") +sm.startQuest(30067) +equips = [1102689, ] +sm.avatarLookSet(equips) +sm.sendDelay(2000) +sm.setParam(33) +sm.sendNext("Leggo!") +equips = [1102689, ] +sm.avatarLookSet(equips) +sm.lockInGameUI(False, True) +sm.warp(106031500) diff --git a/scripts/field/enter_120040300.py b/scripts/field/enter_120040300.py new file mode 100755 index 0000000..0f2fabe --- /dev/null +++ b/scripts/field/enter_120040300.py @@ -0,0 +1,2 @@ +# id 120040300 (Gold Beach : Beachgrass Dunes 3), field 120040300 +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") diff --git a/scripts/field/enter_141000000.py b/scripts/field/enter_141000000.py new file mode 100755 index 0000000..7e7ab03 --- /dev/null +++ b/scripts/field/enter_141000000.py @@ -0,0 +1,2 @@ +# Rien Strait - Glacial Observatory +sm.showFieldEffect("Map/Effect.img/temaD/enter/glacierExplorer") # Riena Strait Theme Dungeon Effect diff --git a/scripts/field/enter_141010400.py b/scripts/field/enter_141010400.py new file mode 100755 index 0000000..279917a --- /dev/null +++ b/scripts/field/enter_141010400.py @@ -0,0 +1 @@ +sm.chatScript("Eliminate all mobs.") \ No newline at end of file diff --git a/scripts/field/enter_141040001.py b/scripts/field/enter_141040001.py new file mode 100755 index 0000000..3f0de16 --- /dev/null +++ b/scripts/field/enter_141040001.py @@ -0,0 +1,6 @@ +# id 141040001 (Riena Strait : Frostwitch Barbara), field 141040001 +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9010000) # Maple Administrator +res = sm.sendAskYesNo("Would you like to skip the cutscenes?") +sm.warp(141040002) diff --git a/scripts/field/enter_141040002.py b/scripts/field/enter_141040002.py new file mode 100755 index 0000000..61bd51d --- /dev/null +++ b/scripts/field/enter_141040002.py @@ -0,0 +1,41 @@ +# Riena Strait : Barbara's Memories (141040002) | Riena Strait Questline ending cutscene + +BARBARA_20Y_AGO = 1514003 +YOUNG_PUTAN = 1514004 +YOUNG_ALVESH = 1514005 +YOUNG_DACHI = 1514006 + +sm.lockInGameUI(True) +sm.hideUser(True) +sm.removeEscapeButton() + +sm.setSpeakerID(BARBARA_20Y_AGO) +sm.sendNext("Are you guys... hungry?") + +sm.setSpeakerID(YOUNG_ALVESH) +sm.sendSay("Woof, woof!") + +sm.setSpeakerID(YOUNG_PUTAN) +sm.sendSay("Quak~ Quaaak~!!") + +sm.setSpeakerID(YOUNG_DACHI) +sm.sendSay("Ongong!") + +sm.setSpeakerID(BARBARA_20Y_AGO) +sm.sendSay("What are you saying? Speak English you brats, whew...") + +sm.sendSay("You small ones... They are opening up their mouths to be fed. It is their desire to live.") + +sm.setSpeakerID(YOUNG_ALVESH) +sm.sendSay("Woof, woof!") + +sm.setSpeakerID(YOUNG_PUTAN) +sm.sendSay("Eep!") + +sm.setSpeakerID(YOUNG_DACHI) +sm.sendSay("Ongong?") + +sm.setSpeakerID(BARBARA_20Y_AGO) +sm.sendSay("Ok, ok. I'll find you food. Let's see.. Is there anywhere I can catch fish?") + +sm.warp(141040003, 0) diff --git a/scripts/field/enter_141040003.py b/scripts/field/enter_141040003.py new file mode 100755 index 0000000..98b327e --- /dev/null +++ b/scripts/field/enter_141040003.py @@ -0,0 +1,101 @@ +# Riena Strait : Frostwitch Barbara (141040003) | Riena Strait Questline ending cutscene + +BARBARA = 1510008 +PUTAN = 1510000 +DACHI = 1510005 +ALVESH = 1510003 +ALVIOLA = 1510002 +NORA = 1510007 +HELMSMAN_TANYA = 1510006 + + +sm.lockInGameUI(True) +sm.removeEscapeButton() +sm.moveCamera(150, 0, 100) +if "1" in sm.getQRValue(32192): + + sm.setSpeakerID(BARBARA) + sm.sendNext("What? What are you doing here in a crowd?") + + sm.setSpeakerID(PUTAN) + sm.sendSay("Hmm Hmm,. So.. Hmm... Where should I begin..") + + sm.setSpeakerID(DACHI) + sm.sendSay("So what I meant was.. Hmmm..") + + sm.setSpeakerID(BARBARA) + sm.sendSay("If you have something to say, say it quick! I am busy cooking dinner!") + + sm.setSpeakerID(ALVIOLA) + sm.sendSay("I've come to apologise. I am sorry that I misunderstood you all these years.") + + sm.setSpeakerID(ALVESH) + sm.sendSay("All of this was a big misunderstanding. You are not a witch... " + "You did not destroy the glaciers nor did you raise the sea level. " + "You instead have taken care of our children who had nowhere to go.") + + sm.setSpeakerID(BARBARA) + sm.sendSay("You suck. You noticed that just now?") + + sm.setSpeakerID(PUTAN) + sm.sendSay("Hmm hmm, I am sorry. But why didn't you say so? And we wouldn't misunderstand you!") + + sm.setSpeakerID(BARBARA) + sm.sendSay("Such nonsense! Why would I harass the ones that I raised and took care of with my own hands?") + + sm.setSpeakerID(PUTAN) + sm.sendSay("Huh?..") + + sm.setSpeakerID(BARBARA) + sm.sendSay("I'm not originally from here. I lost my husband and children.. " + "I didn't want to live any longer, but I decided to die after enjoying the snow that I like. " + "That's why I came here.") + + sm.setSpeakerID(BARBARA) + sm.sendSay("But then, I found you guys who were floating on the sea.") + + sm.setSpeakerID(BARBARA) + sm.sendSay("Those little things held on to my garment... I just couldn't let them go. That's why I brought them all here.") + + sm.warp(141040002, 0) + sm.setQRValue(32192, "2") + +elif "2" in sm.getQRValue(32192): + sm.hideUser(False) + + sm.setSpeakerID(PUTAN) + sm.sendNext("Oh no... I don't remember it well.. But you are the one who saved us when we were little!") + + sm.setSpeakerID(ALVESH) + sm.sendSay("I remember it vaguely. Someone was taking care of me with warm hands... I never knew that was a human's. Meanwhile, we were calling her a witch...") + + sm.setSpeakerID(DACHI) + sm.sendSay("Then that means, you've been here doing the same work for centuries. Oh my... you are like a mother to our people!") + + sm.setSpeakerID(NORA) + sm.sendSay("That's really touching, Granny.") + + sm.setSpeakerID(BARBARA) + sm.sendSay("Stop talking nonsense and eat.") + + sm.sendSay("And you brats.. This granny's feelings are hurt..") + + sm.setSpeakerID(PUTAN) + sm.sendSay("...?") + + sm.setSpeakerID(BARBARA) + sm.sendNext("#r#eStop quarrelling, you brats!") + + sm.setSpeakerID(PUTAN) + sm.sendSay("Ye.. Yes!") + + sm.moveCamera(150, -500, 50) + + sm.setSpeakerID(NORA) + sm.sendNext("That's good. So there won't be any conflict among the three ethnic groups going forward, right?") + + sm.setSpeakerID(HELMSMAN_TANYA) + sm.sendSay("Haha, all thanks to you, navigator.") + + sm.warpInstanceOut(141000000, 0) + sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/enter_141050000.py b/scripts/field/enter_141050000.py new file mode 100755 index 0000000..f1afd7f --- /dev/null +++ b/scripts/field/enter_141050000.py @@ -0,0 +1,5 @@ +# Glacier Cutter Base | 141050000 + + +if sm.hasQuest(32187): + sm.createQuestWithQRValue(32193, "1") diff --git a/scripts/field/enter_141050300.py b/scripts/field/enter_141050300.py new file mode 100755 index 0000000..ad6f3a7 --- /dev/null +++ b/scripts/field/enter_141050300.py @@ -0,0 +1,2 @@ +# id 141050300 (Riena Strait : Glacier Cutter), field 141050300 +sm.startQuest(26512) diff --git a/scripts/field/enter_141050400.py b/scripts/field/enter_141050400.py new file mode 100755 index 0000000..f0df3dc --- /dev/null +++ b/scripts/field/enter_141050400.py @@ -0,0 +1,6 @@ +# id 141050400 (Riena Strait : Admiral Martini), field 141050400 +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9010000) # Maple Administrator +res = sm.sendAskYesNo("Would you like to skip the cutscenes?") +sm.warp(141050000) diff --git a/scripts/field/enter_141060000.py b/scripts/field/enter_141060000.py new file mode 100755 index 0000000..8639054 --- /dev/null +++ b/scripts/field/enter_141060000.py @@ -0,0 +1,9 @@ +# Middle of the Strait | 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +mount = CharacterTemporaryStat.RideVehicle +rienaSkiff = 1930000 + +if sm.hasCTS(mount) and sm.getnOptionByCTS(mount) != rienaSkiff: + sm.removeCTS(mount) +sm.rideVehicle(rienaSkiff) \ No newline at end of file diff --git a/scripts/field/enter_23210.py b/scripts/field/enter_23210.py new file mode 100755 index 0000000..e4c56b7 --- /dev/null +++ b/scripts/field/enter_23210.py @@ -0,0 +1,5 @@ +# Mastema | Demon 2nd job +sm.spawnMob(9001036, 640, -14, False) +sm.waitForMobDeath(9001036) +sm.warpInstanceOut(931050110) + diff --git a/scripts/field/enter_23214.py b/scripts/field/enter_23214.py new file mode 100755 index 0000000..bbf8efe --- /dev/null +++ b/scripts/field/enter_23214.py @@ -0,0 +1,5 @@ +# Mastema | Demon 3rd job +sm.spawnMob(9001038, 987, -14, False) +sm.waitForMobDeath(9001038) +sm.warpInstanceOut(931050110) + diff --git a/scripts/field/enter_23615.py b/scripts/field/enter_23615.py new file mode 100755 index 0000000..ec9c3c9 --- /dev/null +++ b/scripts/field/enter_23615.py @@ -0,0 +1,36 @@ +# Hidden Street : Road to the Mine 1 ; Xenon 3rd Job + +# spawnPoint = 533 28 +# lackey sp = 1184 28 + +BLACK_WINGS_LACKEY = 2159397 +BLACK_WINGS_GOON = 9300643 + +sm.lockInGameUI(True) +sm.sendDelay(30) + +sm.spawnNpc(BLACK_WINGS_LACKEY, 1184, 28) +sm.moveCamera(False, 250, 700, 28) +sm.sendDelay(2500) + +# TODO: just moves back left and right +# sm.moveNpcByTemplateId(BLACK_WINGS_LACKEY, True, 100, 100) +# sm.moveCamera(True, 250, 0, 0) + +sm.setSpeakerID(BLACK_WINGS_LACKEY) +sm.sendNext("Hey, what're you doing out here? And where did that other guy go? You don't look familiar...") +sm.setPlayerAsSpeaker() +sm.sendSay("I am a Black Wing.") +sm.setSpeakerID(BLACK_WINGS_LACKEY) +sm.sendSay("Are you now? Let me see here... I think I've seen your face before. I think I saw you in some orders I got from Gelimer.") +sm.setPlayerAsSpeaker() +sm.sendSay("You are mistaken.") +sm.setSpeakerID(BLACK_WINGS_LACKEY) +sm.sendSay("I am? Maybe I'd better check with Gelimer. I don't want to get into hot water. Come along!") +sm.setPlayerAsSpeaker() +sm.sendSay("Maybe I should have just taken this guy out...") + +sm.moveCamera(True, 1000, 0, 0) +sm.lockInGameUI(False) +sm.removeNpc(BLACK_WINGS_LACKEY) +sm.spawnMob(BLACK_WINGS_GOON, 610, 28, False) diff --git a/scripts/field/enter_270000000.py b/scripts/field/enter_270000000.py new file mode 100755 index 0000000..bff4ae7 --- /dev/null +++ b/scripts/field/enter_270000000.py @@ -0,0 +1,4 @@ +# id 270000000 (Time Lane : Three Doors), field 270000000 +sm.setMapTaggedObjectVisible("door0", True, 0, 0) +sm.setMapTaggedObjectVisible("door1", True, 0, 0) +sm.createQuestWithQRValue(18418, "B=32955") diff --git a/scripts/field/enter_301000000.py b/scripts/field/enter_301000000.py new file mode 100755 index 0000000..b863b10 --- /dev/null +++ b/scripts/field/enter_301000000.py @@ -0,0 +1 @@ +# id 301000000 (Crimsonheart Castle : Top of the Citadel), field 301000000 diff --git a/scripts/field/enter_301070010.py b/scripts/field/enter_301070010.py new file mode 100755 index 0000000..de50101 --- /dev/null +++ b/scripts/field/enter_301070010.py @@ -0,0 +1,3 @@ +# id 301070010 (Crimsonheart Castle : Path to the Altar), field 301070010 +sm.startQuest(31258) +sm.startQuest(31258) diff --git a/scripts/field/enter_302000000.py b/scripts/field/enter_302000000.py new file mode 100755 index 0000000..1e42cd3 --- /dev/null +++ b/scripts/field/enter_302000000.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Map ID :: 302000000 +# Grand Athenaeum : Grand Athenaeum +if "" in sm.getQuestEx(32666, "clear"): + sm.setQuestEx(32666, "clear", "0"); \ No newline at end of file diff --git a/scripts/field/enter_331000000.py b/scripts/field/enter_331000000.py new file mode 100755 index 0000000..094efa4 --- /dev/null +++ b/scripts/field/enter_331000000.py @@ -0,0 +1,14 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331000000 +# Main Street :: City Center + +# if (22700, "coNight", "1"): +if "1" in sm.getQuestEx(22700, "coNight"): + sm.setSpineObjectEffectAlpha(False, "sinkHole", 0, 0) + sm.changeBGM("Bgm43/Unknown Part Of City", 0, 0) + sm.setObjectEffectPlay("city", "night", True, False) + sm.setSpineObjectEffectPlay(False, "car", "day2night", False, False) + sm.setSpineObjectEffectAddPlay(False, "car", "night", True) + sm.setSpineObjectEffectStop(False, "car", False) + sm.setSpineObjectEffectPlay(False, "eastSub", "night", True, False) \ No newline at end of file diff --git a/scripts/field/enter_331001000.py b/scripts/field/enter_331001000.py new file mode 100755 index 0000000..0c8128c --- /dev/null +++ b/scripts/field/enter_331001000.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: HQ +KINESIS = 1531000 +JAY = 1531001 + +sm.setNpcOverrideBoxChat(JAY) +sm.sendNext("Good job. Get up to the 2nd floor.") +sm.unlockForIntro() \ No newline at end of file diff --git a/scripts/field/enter_331001100.py b/scripts/field/enter_331001100.py new file mode 100755 index 0000000..e6127ed --- /dev/null +++ b/scripts/field/enter_331001100.py @@ -0,0 +1,49 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001100 +# Main Street :: City Center + +from net.swordie.ms.enums import TextEffectType + +sm.lockForIntro() +sm.removeAdditionalEffect() +sm.hideUser(True) +sm.blind(1, -1, 0, 0, 0, 0) +#sm.playURLVideoByScript("http://nxcache.nexon.net/maplestory/video/yt/Kinesis1.html") + +sm.zoomCamera(0, 1000, 0, 4830, -620) + +sm.setObjectEffectPlay("city", "daylight", True, False) +sm.playSound("Sound/SoundEff.img/kinesis/signal") +sm.sendDelay(500) + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.zoomCamera(10000, 1000, 10000, 4450, -620) + +sm.setObjectEffectPlay("city", "day2night", False, False) +sm.setObjectEffectAddPlay("city", "night", True) +sm.sendDelay(5000) + +sm.OnOffLayer_On(3000, "title", 0, 0, 40, "Map/Effect2.img/kinesis/title", 4, 0, -1, 0) +sm.sendDelay(4000) + +sm.OnOffLayer_Off(2000, "title", 0) +sm.sendDelay(2000) + +sm.createFieldTextEffect("#fn³ª´Æðíμñ ExtraBold##fs26#2019, Seoul", 100, 2500, 4, 0, 0, 1, 4, TextEffectType.KinesisIntro, 0, 0) +sm.sendDelay(3000) + +sm.zoomCamera(8000, 1000, 8000, 200, -300) + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.hideUser(False) +sm.unlockForIntro() + +sm.warp(331001110, 0) \ No newline at end of file diff --git a/scripts/field/enter_331001110.py b/scripts/field/enter_331001110.py new file mode 100755 index 0000000..035316a --- /dev/null +++ b/scripts/field/enter_331001110.py @@ -0,0 +1,96 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001110 +# Hideout :: Training Room 1 + +from net.swordie.ms.enums import TextEffectType + +KINESIS = 1531000 +JAY = 1531001 + +sm.lockForIntro() +sm.blind(1, 255, 0, 0) +sm.forcedFlip(True) +sm.removeAdditionalEffect() +# UNK925 ["Ambience.img/snowwave"] [64 00 00 00] [3C 00 00 00] ("Ambience.img/snowwave", 100, 60) +sm.playSound("Sound/Ambience.img/flare_ready") + +sm.setIntroBoxChat(JAY) +sm.sendNext("#face9#Testing, testing, 1, 2, 3. OK. I think you can hear me. You ready to show me your stuff, K?") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("I don't think so, Jay. Something is very wrong down here.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#What? No. I double-checked everything. My gear is perfect and amazing.") + +sm.blind(1, 255, 0, 0) +sm.sendDelay(300) + +sm.blind(0, 0, 0, 250) +sm.sendDelay(300) + +sm.createFieldTextEffect("#fn³ª´Æðíμñ ExtraBold##fs26#Kinesis's Hideout\r\n#fs14#- Training Room -", 100, 2500, 4, 0, 0, 1, 4, TextEffectType.KinesisIntro, 0, 0) +sm.sendDelay(4000) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("Then why does it say I'm starting at #bLevel 10#k?") +sm.sendSay("Jay, you and I both know I can KILL it at #bLevel 10#k. Dial it up to something fun, will you?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#Come on, K. I told you, I still need basic data on your agility and psychokinetic abilities. Since, y'know, you fried the hard drives I used last time.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Not my fault if your tech can't keep up. Just make sure I don't get bored, alright?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#Whatever, dude. Look, I just want some basic data for now. Move forward and follow the signs.") + +sm.playSound("Sound/Field.img/flowervioleta/wink") + +sm.cameraSwitchNormal("go_tuto2", 1000) +sm.sendDelay(1000) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("Hold it. We're still missing something.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face10#Seriously? What now?") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face3#We need music, man! Put on something for me to rock the block with.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#......") + +# STOP_AMBIENT_SOUND(or just 927) ["Ambience.img/snowwave"] +sm.playSound("Sound/SoundEff.img/blackHeaven/switch_push") +sm.sendDelay(300) + +sm.changeBGM("Bgm42/TheBeast2", 0, 0) +sm.setIntroBoxChat(KINESIS) +sm.sendNext("#face2#Perfect. Let's get started.") + +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 3000, 0, 1477, -68) +sm.sendDelay(300) + +sm.removeOverlapScreen(1000) +sm.playSound("Sound/SoundEff.img/PvP/80001740_Use") +sm.OnOffLayer_On(500, "0", 800, 0, 12, "Map/Effect2.img/kinesis/chaKine", 5, 1, -1, 0) +sm.OnOffLayer_Move(300, "0", -800, 0) +sm.sendDelay(4500) + +sm.playSound("Sound/SoundEff.img/12thMS/jump_m") +sm.OnOffLayer_Off(500, "0", 0) +sm.OnOffLayer_Move(300, "0", 800, 0) +sm.sendDelay(500) + +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) + +sm.removeOverlapScreen(1000) +sm.unlockForIntro() + diff --git a/scripts/field/enter_331001120.py b/scripts/field/enter_331001120.py new file mode 100755 index 0000000..5411876 --- /dev/null +++ b/scripts/field/enter_331001120.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001120 +# Hideout :: Training Room 2 + +JAY = 1531001 + +sm.spawnMob(2700302, 705, 63, False) +sm.lockForIntro() +sm.forcedFlip(True) +sm.removeAdditionalEffect() + +sm.setIntroBoxChat(JAY) +sm.sendNext("#face9#Okay, before we get to the real combat, let me capture a baseline of your ablities. Destroy Training Robot A there so I can measure your basic power.") + +sm.setQuestEx(22700, "kinetuto", "0") +sm.progressMessageFont(3, 20, 20, 0, "Defeat the target using basic attacks and skills.") +sm.unlockForIntro() +sm.avatarOriented("UI/tutorial.img/kinesis/0") +sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_06", 100) + +sm.waitForMobDeath(2700302) +if sm.getQuestEx(22700, "kinetuto").equals("0"): + sm.setQuestEx(22700, "kinetuto", "1") + sm.playSound("Party1/Clear") \ No newline at end of file diff --git a/scripts/field/enter_331001130.py b/scripts/field/enter_331001130.py new file mode 100755 index 0000000..845467d --- /dev/null +++ b/scripts/field/enter_331001130.py @@ -0,0 +1,45 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: Training Room 3 +KINESIS = 1531000 +JAY = 1531001 + +sm.lockForIntro() +sm.removeAdditionalEffect() +sm.forcedFlip(True) + +sm.setIntroBoxChat(JAY) +sm.sendNext("#face9#You're clear to go sickhouse, K. Open up with your attack skills.") +sm.sendSay("#face9#I'll switch your psy-limiter to #bTier 1#k.") +sm.setJob(14200) +sm.addSP(1, True) +# here goes reset stats +sm.giveAndEquip(1353200) +sm.giveSkill(142001000, 1, 10) +sm.giveSkill(142001001, 1, 20) +sm.giveSkill(142001004, 1, 5) +sm.giveSkill(142001002, 1, 10) +sm.setFuncKeyByScript(True, 142001000, 42) +sm.setFuncKeyByScript(True, 142001001, 83) +sm.unlockForIntro() + +sm.sendNext("#face9#Psychic Force #g[SHIFT]#k will push your targets in one direction.") +sm.sendSay("#face9#Kinetic Crash #g[DEL]#k will lift enemies with your psychokinesis and slam them into the floor.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#gSHIFT#k to push and #gDEL#k to attack. Simple") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#So you say. I'd like to get some data on your triple jump, too, so mash your Jump key to zip all over the place for me.") +sm.playSound("Sound/SoundEff.img/blackHeaven/metaldrop") +sm.spawnMob(2700300, -50, 63, False) +sm.spawnMob(2700300, 50, 63, False) +sm.spawnMob(2700300, 150, 63, False) +sm.spawnMob(2700300, 250, 63, False) +sm.spawnMob(2700300, 350, 63, False) +sm.spawnMob(2700300, 450, 63, False) +sm.spawnMob(2700300, 550, 63, False) +sm.playSound("Sound/Field.img/flowervioleta/wink") +sm.cameraSwitchNormal("go_ajit", 1000) +sm.setQuestEx(22700, "kinetuto2", "0") diff --git a/scripts/field/enter_331002000.py b/scripts/field/enter_331002000.py new file mode 100755 index 0000000..7a23cda --- /dev/null +++ b/scripts/field/enter_331002000.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor +from net.swordie.ms.enums import TextEffectType + +sm.unlockForIntro() +sm.createFieldTextEffect("#fn������� ExtraBold##fs26#First Floor: Corridor\r\n#fs14#- Private School for the Gifted -", 100, 2500, 4, 0, 0, 1, 4, TextEffectType.KinesisIntro, 0, 0) \ No newline at end of file diff --git a/scripts/field/enter_331002100.py b/scripts/field/enter_331002100.py new file mode 100755 index 0000000..3a1bb38 --- /dev/null +++ b/scripts/field/enter_331002100.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: Second Floor Corridor +from net.swordie.ms.enums import TextEffectType + +sm.unlockForIntro() +if "1" in sm.getQuestEx(22700, "coNight"): + sm.setSpineObjectEffectPlay(False, "corridor", "night", True, False) +sm.createFieldTextEffect("#fn������� ExtraBold##fs26#Second Floor: Corridor\r\n#fs14#- Private School for the Gifted -", 100, 2500, 4, 0, 0, 1, 4, TextEffectType.KinesisIntro, 0, 0) \ No newline at end of file diff --git a/scripts/field/enter_331002300.py b/scripts/field/enter_331002300.py new file mode 100755 index 0000000..1baf0fb --- /dev/null +++ b/scripts/field/enter_331002300.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002300 +# School for the Gifted :: 1-1 Classroom +if "1" in sm.getQuestEx(22700, "coNight"): + sm.setSpineObjectEffectPlay(False, "classroom", "night", True, False) + sm.setSpineObjectEffectPlay(False, "class_dayObj", "night", True, False) +sm.unlockForIntro() +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) + +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) + +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) \ No newline at end of file diff --git a/scripts/field/enter_331002400.py b/scripts/field/enter_331002400.py new file mode 100755 index 0000000..5440924 --- /dev/null +++ b/scripts/field/enter_331002400.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002400 +# School for the Gifted :: 2-1 Classroom +if "1" in sm.getQuestEx(22700, "coNight"): + sm.setSpineObjectEffectPlay(False, "classroom", "night", True, False) + sm.setSpineObjectEffectPlay(False, "class_dayObj", "night", True, False) +sm.unlockForIntro() +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) +sm. spawnMob(2700303, 0, 177, False) + +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) +sm. spawnMob(2700304, 0, 177, False) + +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) +sm. spawnMob(2700305, 0, 177, False) \ No newline at end of file diff --git a/scripts/field/enter_331002500.py b/scripts/field/enter_331002500.py new file mode 100755 index 0000000..ca228e4 --- /dev/null +++ b/scripts/field/enter_331002500.py @@ -0,0 +1,84 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002500 +# School for the Gifted :: 2-1 Classroom +KINESIS = 1531000 + +sm.setSpineObjectEffectAlpha(False, "class_flyObj", 0, 0) +if "1" in sm.getQuestEx(22700, "coNight"): + sm.setSpineObjectEffectPlay(False, "classroom", "night", True, False) + sm.setSpineObjectEffectPlay(False, "class_dayObj", "night", True, False) +if sm.hasQuest(22728): + sm.blind(1, 255, 0, 0) + sm.sendDelay(1200) + + sm.blind(0, 0, 0, 1000) + sm.sendDelay(1400) + + sm.sendDelay(1500) + + sm.setIntroBoxChat(KINESIS) + sm.sendNext("Is someone there?") + + sm.sendDelay(1500) + + sm.sendSay("Must be imagining...") + sm.sendSay("#face0#Ugh... My head...") + + sm.forcedInput(4) + sm.localEmotion(7, 9000, False) + sm.setFieldFloating(331002500, 20, 20, 100) + sm.showFadeTransition(0, 1000, 3000) + sm.sendDelay(500) + + sm.removeOverlapScreen(1000) + sm.sendDelay(500) + + sm.showFadeTransition(0, 1000, 3000) + sm.sendDelay(500) + + sm.removeOverlapScreen(1000) + sm.sendDelay(500) + + sm.setSpineObjectEffectAlpha(False, "class_flyObj", 255, 1000) + sm.setSpineObjectEffectAlpha(False, "class_dayObj", 0, 1000) + sm.showFadeTransition(0, 1000, 3000) + sm.sendDelay(500) + + sm.removeOverlapScreen(1000) + sm.sendDelay(500) + + sm.showFadeTransition(0, 1000, 3000) + sm.sendDelay(500) + + sm.removeOverlapScreen(1000) + sm.sendDelay(500) + + sm.setFieldFloating(331002500, 0, 0, 0) + sm.sendDelay(1000) + + sm.blind(1, 255, 0, 500) + sm.sendDelay(500) + + sm.sendDelay(1000) + + sm.setSpineObjectEffectAlpha(False, "class_flyObj", 0, 0) + sm.setSpineObjectEffectAlpha(False, "class_dayObj", 255, 0) + sm.blind(1, 255, 0, 0) + sm.sendDelay(1200) + + sm.blind(0, 0, 0, 1000) + sm.sendDelay(1400) + + sm.sendDelay(1000) + + sm.setIntroBoxChat(KINESIS) + sm.sendNext("#face0#Ahhh... It hurts.") + sm.sendSay("What was that? I think I blacked out for a second there. And just for a moment, I felt like I lost control of my power.") + sm.sendSay("Ah... It's probably nothing. I must have just been tired. Let's go.") + + sm.sendDelay(1000) + + sm.setQuestEx(22700, "blackCat", "1") + sm.completeQuest(22728) + sm.giveExp(1200) \ No newline at end of file diff --git a/scripts/field/enter_331003000.py b/scripts/field/enter_331003000.py new file mode 100755 index 0000000..5465da3 --- /dev/null +++ b/scripts/field/enter_331003000.py @@ -0,0 +1,11 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331003000 +# Subway :: Subway Car #1 +BLUE_SHIRT_GUY = 1531064 +# if has quest 22730 +sm.spawnNpc(BLUE_SHIRT_GUY, 416, 47) +sm.showNpcSpecialActionByTemplateId(BLUE_SHIRT_GUY, "summon") +sm.playSound("Sound/Field.img/flowervioleta/wink") +sm.cameraSwitchNormal("go_next", 1000) +sm.unlockForIntro() \ No newline at end of file diff --git a/scripts/field/enter_331003100.py b/scripts/field/enter_331003100.py new file mode 100755 index 0000000..5eb1903 --- /dev/null +++ b/scripts/field/enter_331003100.py @@ -0,0 +1,36 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331003100 +# Subway :: Subway Car #2 +JAY = 1531001 +BLONDE_LADY = 1531065 +STUDENT = 1531066 +sm.spawnNpc(BLONDE_LADY, 373, 47) +sm.showNpcSpecialActionByTemplateId(BLONDE_LADY, "summon") + +sm.spawnNpc(STUDENT, 680, 47) +sm.showNpcSpecialActionByTemplateId(STUDENT, "summon") + +sm.spawnMob(2700303, 250, 57, False) +sm.spawnMob(2700303, 260, 57, False) +sm.spawnMob(2700303, 270, 57, False) + +sm.spawnMob(2700304, 280, 57, False) +sm.spawnMob(2700304, 290, 57, False) +sm.spawnMob(2700304, 300, 57, False) + +sm.spawnMob(2700305, 310, 57, False) +sm.spawnMob(2700305, 320, 57, False) +sm.spawnMob(2700305, 330, 57, False) +sm.spawnMob(2700305, 340, 57, False) + +sm.setSpineObjectEffectPlay(True, "subway_bg", "outing", False, False) +sm.setSpineObjectEffectPlay(True, "subway_main", "outing", False, False) + +sm.setSpineObjectEffectAddPlay(True, "subway_bg", "outside", True) +sm.setSpineObjectEffectAddPlay(True, "subway_main", "outside", True) + +sm.unlockForIntro() +sm.playSound("Sound/Field.img/flowervioleta/wink") +sm.cameraSwitchNormal("go_next", 1000) +sm.addPopUpSay(JAY, 2000, "#face10#Kinesis, monsters dead ahead!", "") \ No newline at end of file diff --git a/scripts/field/enter_331003200.py b/scripts/field/enter_331003200.py new file mode 100755 index 0000000..e6691b2 --- /dev/null +++ b/scripts/field/enter_331003200.py @@ -0,0 +1,36 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331003200 +# Subway :: Subway Car #3 +JAY = 1531001 +GIRL = 1531067 + +sm.spawnNpc(GIRL, 699, 47) +sm.showNpcSpecialActionByTemplateId(GIRL, "summon") + +sm.spawnMob(2700303, 250, 57, False) +sm.spawnMob(2700303, 250, 57, False) +sm.spawnMob(2700303, 250, 57, False) +sm.spawnMob(2700303, 250, 57, False) +sm.spawnMob(2700303, 250, 57, False) + + +sm.spawnMob(2700304, 300, 57, False) +sm.spawnMob(2700304, 300, 57, False) +sm.spawnMob(2700304, 300, 57, False) +sm.spawnMob(2700304, 300, 57, False) +sm.spawnMob(2700304, 300, 57, False) + +sm.spawnMob(2700305, 350, 57, False) +sm.spawnMob(2700305, 350, 57, False) +sm.spawnMob(2700305, 350, 57, False) +sm.spawnMob(2700305, 350, 57, False) +sm.spawnMob(2700305, 350, 57, False) + +sm.setSpineObjectEffectPlay(True, "subway_bg", "outside", True, False) +sm.setSpineObjectEffectPlay(True, "subway_main", "outside", True, False) + +sm.unlockForIntro() +sm.playSound("Sound/Field.img/flowervioleta/wink") +sm.cameraSwitchNormal("go_next", 1000) +sm.addPopUpSay(JAY, 2000, "#face10#Watch out, there are more on the way!", "") \ No newline at end of file diff --git a/scripts/field/enter_331003300.py b/scripts/field/enter_331003300.py new file mode 100755 index 0000000..2c28c3e --- /dev/null +++ b/scripts/field/enter_331003300.py @@ -0,0 +1,23 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331003300 +# Subway :: Subway Car #4 +JAY = 1531001 + +sm.spawnMob(2700306, 400, 57, False) +sm.spawnMob(2700307, 425, 57, False) +sm.spawnMob(2700308, 450, 57, False) + +sm.unlockForIntro() +sm.createQuestWithQRValue(22733, "") +sm.setQuestEx(22700, "kinePro", "0") +sm.playSound("Sound/Field.img/flowervioleta/wink") +sm.cameraSwitchNormal("pt_DP", 1000) +sm.addPopUpSay(JAY, 2000, "#face10#K, those are the stronger ones! Take them out first!", "") + +while sm.hasMobsInField(): + sm.waitForMobDeath() + +if sm.getQuestEx(22700, "kinePro").equals("0"): + sm.setQRValue(22733, "001001001") + sm.showFieldEffect("monsterPark/clearF", 0) \ No newline at end of file diff --git a/scripts/field/enter_331005110.py b/scripts/field/enter_331005110.py new file mode 100755 index 0000000..438f246 --- /dev/null +++ b/scripts/field/enter_331005110.py @@ -0,0 +1,174 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331005110 +# Unnamed +KINESIS = 1531000 +JAY = 1531001 +WHITE_MAGE = 1531005 + +sm.lockForIntro() +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.blind(1, 255, 0, 0) +sm.setSpineObjectEffectAddPlay(True, "subway_bg", "outside", True) +sm.setSpineObjectEffectAddPlay(True, "subway_main", "outside", True) +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.sendDelay(1000) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("#face4#This is such a disaster. I'm sure it'll make the news tonight.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face11#K, you doing okay?") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("I'm fine. What about you?") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#Eh, no big. That cat you brought in is missing, though.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Wait, what? Where did Nero go?") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#No idea. It left right after you did. Maybe you didn't pet it enough.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("You should have stopped it, Jay.") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#Pfft, no thanks. I'm not a cat person. I take care of the hardware, so you can take care of any fuzzy critters you drag back here.") + +sm.playSound("Sound/Voice3.img/Kinesis/subway_04") +sm.progressMessageFont(3, 20, 20, 0, "This train will stop service at the next station. ") +sm.sendDelay(4000) + +sm.progressMessageFont(3, 12, 20, 0, "Please follow the crew's instructions and exit the train quickly and calmly.") +sm.sendDelay(3000) + +sm.progressMessageFont(3, 20, 20, 0, "Thank you.") +sm.sendDelay(1000) + +sm.sendNext("This could blow your whole secret identity thing, K. You okay with that?") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("That just means more fans, Jay. You know I don't let stuff like that hold me back. I'll return after I get off at the next station.") + +sm.sendDelay(1000) + +sm.setSpineObjectEffectPlay(True, "subway_bg", "insiding", False, False) +sm.setSpineObjectEffectPlay(True, "subway_main", "insiding", False, False) +sm.setSpineObjectEffectAddPlay(True, "subway_bg", "inside", True) +sm.setSpineObjectEffectAddPlay(True, "subway_main", "inside", True) +sm.sendDelay(1500) + +sm.sendNext("Huh. Wonder why the train's not stopping.") + +sm.sendDelay(1000) + +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion10") +sm.setFieldFloating(331005110, 1, 5, 20) +sm.changeBGM("Bgm41.img/BigMachine_mission", 0, 0) +sm.sendDelay(1000) + +sm.playSound("Sound/Voice3.img/Kinesis/subway_05") +sm.progressMessageFont(3, 20, 20, 0, "Regular service on this train has been interrupted. ") +sm.sendDelay(4000) + +sm.progressMessageFont(3, 20, 20, 0, "Please be careful. Thank you.") +sm.sendDelay(4000) + +sm.setIntroBoxChat(JAY) +sm.sendNext("Hold up, K! I'm getting a bizarre energy reading up ahead. No idea what it is.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Ahead? I don't see...") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face0#Argghhh!") + +sm.setFieldFloating(331005110, 20, 20, 100) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) + +sm.removeOverlapScreen(1000) +sm.sendDelay(500) + +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) + +sm.removeOverlapScreen(1000) +sm.sendDelay(500) + +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) + +sm.removeOverlapScreen(1000) +sm.sendDelay(500) + +sm.setFieldFloating(331005110, 1, 5, 200) +sm.setIntroBoxChat(JAY) +sm.sendNext("#face1#K? Kinesis? What's going on?") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face0#Aaah... It's... My head!") + + +sm.setIntroBoxChat(WHITE_MAGE) +sm.sendSay("#face2#Is this the first time we've met in person? Should I say it's an honor... Kinesis?.") + +sm.spawnNpc(WHITE_MAGE, 627, 48) +sm.showNpcSpecialActionByTemplateId(WHITE_MAGE, "summon") +sm.sendDelay(3000) + +sm.setFieldFloating(331005110, 0, 0, 0) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 2000, 0, 530, 0) + +sm.removeOverlapScreen(1000) +sm.playSound("Sound/SoundEff.img/PvP/80001740_Use") +sm.OnOffLayer_On(500, "0", 800, 0, 12, "Map/Effect2.img/kinesis/chaWhite", 5, 1, -1, 0) +sm.OnOffLayer_Move(300, "0", -800, 0) +sm.sendDelay(3000) + +sm.playSound("Sound/SoundEff.img/12thMS/jump_m") +sm.OnOffLayer_Off(500, "0", 0) +sm.OnOffLayer_Move(100, "0", 800, 0) +sm.sendDelay(1000) + +sm.setIntroBoxChat(WHITE_MAGE) +sm.sendNext("You're quite special, you know. And not for the reason you think. You are the first human of this world to get abilities from the other.") +sm.sendSay("#face1#You are the catalyst that I have been searching for.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face0#Urgh... What are you talking about?") + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.blind(1, 255, 0, 0) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) + +sm.playURLVideoByScript("http://nxcache.nexon.net/maplestory/video/yt/Kinesis2.html") +sm.completeQuest(22733) +sm.startQuest(22734) +sm.completeQuest(22734) +sm.giveExp(2500) + +sm.warp(331005120, 0) \ No newline at end of file diff --git a/scripts/field/enter_331005120.py b/scripts/field/enter_331005120.py new file mode 100755 index 0000000..cfff573 --- /dev/null +++ b/scripts/field/enter_331005120.py @@ -0,0 +1,98 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331005120 +# Unnamed +JAY = 1531001 +YUNA = 1531002 + +sm.lockForIntro() +sm.removeAdditionalEffect() +sm.hideUser(True) +sm.blind(1, 255, 0, 0) +sm.zoomCamera(0, 1000, 0, 645, -260) + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.setIntroBoxChat(JAY) +sm.sendNext("I've located Kinesis.") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face3#Really?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face1#Yes. He's in the sinkhole.") + + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face4#...What? That's not possible. The sinkhole destroyed everything!") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face0#I don't think so. It's not destroyed. It's missing.") + + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face4#That makes even LESS sense! What are you jerks hiding from me?") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face1#Yuna, we... Look, we're not just playing at being heroes here. Something is happening to world. This sinkhole thing isn't just happening here.") + + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face3#It... it's not? What does that even mean?") + + +sm.setIntroBoxChat(JAY) +sm.sendSay(".#face1#It means that parts of the Earth are disappearing all over. Our world is being... I don't know, ABSORBED by another.") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face1#It all seems like random events right now, but if my projections are correct... and they ARE, Earth is going to vanish into parts unknown in the near future.") + +sm.blind(1, 255, 0, 250) +sm.sendDelay(250) + +sm.OnOffLayer_On(1000, "cube", 0, 0, 12, "Map/Effect2.img/kinesis/cube", 4, 0, -1, 0) +sm.sendDelay(1500) + +sm.setIntroBoxChat(JAY) +sm.sendNext("#face1#And in the midst of all this, Kinesis got their powers.") +sm.sendSay("#face1#Think about that. Forces begin destroying our world at the same time Kinesis gets control over the fundamental forces of the universe.") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("So... all this secrecy and heroics... it wasn't just to stroke Kinesis's ego?") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face1#Well... probably a little. But the main goal was gathering data. Data on what's tearing the planet apart... and if it's the same power that Kinesis controls.") + +sm.OnOffLayer_Off(300, "cube", 0) +sm.blind(1, 255, 0, 0) +sm.sendDelay(300) + +sm.blind(0, 0, 250) +sm.sendDelay(300) + + +sm.setIntroBoxChat(YUNA) +sm.sendNext("#face2#I had no idea... #b#h0##k never said a word about this.") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("Well, K hates it when people worry.") + + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face2##b#h0##k... Wherever you are, please come back safe.") + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.hideUser(False) +sm.unlockForIntro() +sm.warp(101020400, 0) \ No newline at end of file diff --git a/scripts/field/enter_400000000.py b/scripts/field/enter_400000000.py new file mode 100755 index 0000000..7bc12ab --- /dev/null +++ b/scripts/field/enter_400000000.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Map ID :: 400000000 +# Nova's Sanctum : Pantheon + +# nothing special for now.. \ No newline at end of file diff --git a/scripts/field/enter_402000000.py b/scripts/field/enter_402000000.py new file mode 100755 index 0000000..8257ea7 --- /dev/null +++ b/scripts/field/enter_402000000.py @@ -0,0 +1,4 @@ +# id 402000000 (Savage Terminal : Brigand's Row), field 402000000 +sm.setMapTaggedObjectVisible("402000000_tag", False, 0, 0) +sm.setMapTaggedObjectVisible("crack", False, 0, 0) +sm.warp(400000000) diff --git a/scripts/field/enter_402000002.py b/scripts/field/enter_402000002.py new file mode 100755 index 0000000..0f193fa --- /dev/null +++ b/scripts/field/enter_402000002.py @@ -0,0 +1,42 @@ +# id 402000002 (Savage Terminal : Old Storage Room), field 402000002 +if not sm.hasHadQuest(34603): + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.forcedMove(False, 100) + sm.sendDelay(1000) + sm.zoomCamera(0, 2000, 0, -294, 138) + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(1200) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1400) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001271) + sm.sendNext("#face1#Hm... No one's back from the mission yet.") + sm.forcedMove(False, 200) + sm.zoomCamera(1000, 2000, 1000, -94, 138) + sm.sendDelay(1800) + sm.forcedInput(6) + sm.zoomCamera(500, 2000, 500, 270, 0) + sm.sendDelay(500) + sm.setInnerOverrideSpeakerTemplateID(3001250) + sm.sendNext("#face2#Hey, newbie. Don't fight if there's nothing to gain from it. It's one of our basic rules.") + sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) + sm.setInnerOverrideSpeakerTemplateID(3001271) + sm.sendSay("#face0#How would you know if I've been fighting? And what do you care if I fight anyway?") + sm.forcedInput(0) + sm.forcedMove(False, 200) + sm.sendDelay(1800) + sm.setInnerOverrideSpeakerTemplateID(3001250) + sm.sendNext("#face2#I care because it affects the whole crew. You're an official branch member now, so you need to start acting like it.") + sm.setInnerOverrideSpeakerTemplateID(3001271) + sm.sendSay("#face1#...Fine.") + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000110.py b/scripts/field/enter_402000110.py new file mode 100755 index 0000000..62094b0 --- /dev/null +++ b/scripts/field/enter_402000110.py @@ -0,0 +1,2 @@ +# id 402000110 (null), field 402000110 +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") diff --git a/scripts/field/enter_402000111.py b/scripts/field/enter_402000111.py new file mode 100755 index 0000000..c835503 --- /dev/null +++ b/scripts/field/enter_402000111.py @@ -0,0 +1,2 @@ +# id 402000111 (null), field 402000111 +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") diff --git a/scripts/field/enter_402000402.py b/scripts/field/enter_402000402.py new file mode 100755 index 0000000..479531d --- /dev/null +++ b/scripts/field/enter_402000402.py @@ -0,0 +1,100 @@ +# id 402000402 (null), field 402000402 +if not sm.hasHadQuest(34940): + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.zoomCamera(0, 1000, 0, -494, 0) + sm.changeBGM("Bgm00.img/Silence", 0, 0) + sm.forcedAction(25, 999999) + sm.sendDelay(1000) + sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#A Little Later, Savage Terminal", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) + sm.zoomCamera(3000, 1000, 3000, -494, 668) + sm.sendDelay(3500) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face1#Where is this? It's so familiar... I guess that means I've still got my memories.") + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendSay("#face0#You're awake! We escaped and made it here to Savage Terminal.") + sm.forcedAction(2, 999999) + sm.sendDelay(1000) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face1#Ugh...") + sm.sendDelay(1000) + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendNext("#face0#The moment we lost your signal, Ark, the monsters came at us full force.") + sm.sendSay("#face2#We barely managed to get the crystal going and had to guess at how to operate the airship.") + sm.blind(True, 255, 0, 0, 0, 500) + sm.sendDelay(500) + sm.sendDelay(1000) + sm.onLayer(500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/12/0", 4, True, -1, False) + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendNext("#face2#It was a really close call, but we made it!") + sm.sendSay("#face3#It was so scary!") + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face2#!?") + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendSay("#face3#It felt like the planet's life energy was being drawn right out of the land...") + sm.sendSay("#face2#Thank you for protecting all of us, Ark.") + sm.sendDelay(1000) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face8#(So they were just there to steal more power from the planet. But why?)") + sm.offLayer(300, "d0", False) + sm.sendDelay(1000) + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(1200) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1400) + sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo + sm.sendNext("#face3#Yeah, thanks! It's not exactly the paradise we're looking for, but this place is pretty great!") + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendSay("#face4#Yeah, just look at all the amazing scrap here that I can use for my research!") + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face2#So, what's this paradise you're looking for anyway?") + sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo + sm.sendSay("#face4#Oh, right! We never really explained, did we?") + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendSay("#face0#It's less about where it is and more about what it is.") + sm.sendSay("#face0#It's a place where we don't have to worry.") + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendSay("#face4#Somewhere we can go treasure hunting every day!") + sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo + sm.sendSay("#face2#It's a place where people understand my music!") + sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit + sm.sendSay("#face0#And it has lots of hot springs!") + sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs + sm.sendSay("#face0#Yeah! And lots of puffy clouds too!") + sm.sendDelay(1000) + sm.setInnerOverrideSpeakerTemplateID(3001511) # Mar + sm.sendNext("#face2#And a shiny, sparkly night sky!") + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face9#Haha, that sounds pretty great. I'd love to see it someday.") + sm.sendDelay(1000) + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendNext("#face0#What are you going to do, Ark?") + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face3#There's something I still need to take care of.") + sm.sendSay("#face3#I'm going to gather more information here and leave.") + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendSay("#face0#But we only just got here! And we like you!") + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face0#Don't worry. I've still got some time here. And if you need my help at all before I go, I'd be happy to.") + sm.changeBGM("Bgm47.img/HuntingGround", 0, 0) + sm.createQuestWithQRValue(34940, "dir=2;enter=1;exp=1") + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) + sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;18=h1;09=h0") + sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;18=h1;09=h0;19=h1") + sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;20=h1;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;18=h1;09=h0;19=h1") +elif not sm.hasHadQuest(34943): + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face0#(Everyone is gone, and there's nothing left to do here. Maybe I should take a look around.)") + sm.createQuestWithQRValue(34943, "dir=1;exp=1") diff --git a/scripts/field/enter_402000501.py b/scripts/field/enter_402000501.py new file mode 100755 index 0000000..0101711 --- /dev/null +++ b/scripts/field/enter_402000501.py @@ -0,0 +1,53 @@ +# id 402000501 (null), field 402000501 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3001300, -1541, 11) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.createQuestWithQRValue(34813, "m=1") +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -1140, 63) +sm.sendDelay(300) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#We arrived.") +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendSay("#face0#It sounds like nonstop pandemonium at the Crystal Gate lately.") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 118, 0, 0, 4, 3001336, 4600225) +sm.sendDelay(500) +sm.sendNext("#face1#Yeah, I heard Specters managed to get through.") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 402, 0, 0, 4, 3001336, 4600225) +sm.sendDelay(500) +sm.sendNext("#face0#What?! Really?! Does that mean we've been exposed?") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 0, 0, 0, 4, 3001336, 4600225) +sm.sendSay("#face1#I don't think so. I heard they stopped all the intruders and moved the gate for good measure. I'm sure our superiors have it under control.") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 402, 0, 0, 4, 3001336, 4600225) +sm.sendDelay(500) +sm.sendNext("#face0#Yeah, you're right. We've been in hiding for a while. I'm sure we're still fine.") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 118, 0, 0, 4, 3001336, 4600225) +sm.sendDelay(500) +sm.sendNext("#face1#I hope we don't have to live in hiding forever though.") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 0, 0, 0, 4, 3001336, 4600225) +sm.sendDelay(500) +sm.sendNext("#face0#We're probably better off this way. I've heard the outside world is really dangerous...") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 402, 0, 0, 4, 3001336, 4600225) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#I do not detect any traces of Agate here. We should continue searching elsewhere.") +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendSay("#face1#Did you say Agate?") +sm.speechBalloon(True, 0, 0, "...", 1000, 1, 0, 0, 0, 4, 3001336, 4600225) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.createQuestWithQRValue(34813, "m=0") +sm.createQuestWithQRValue(34813, "m=0;d2=1") +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000502.py b/scripts/field/enter_402000502.py new file mode 100755 index 0000000..9951a70 --- /dev/null +++ b/scripts/field/enter_402000502.py @@ -0,0 +1,42 @@ +# id 402000502 (null), field 402000502 +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=202;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=203;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=204;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=205;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=206;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=207;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=208;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=209;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=210;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=211;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=212;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=213;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=214;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=215;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=216;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=217;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=218;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=219;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=220;date=20190221") +sm.startQuest(34813) +sm.createQuestWithQRValue(16700, "count=221;date=20190221") +sm.createQuestWithQRValue(16700, "count=222;date=20190221") diff --git a/scripts/field/enter_402000504.py b/scripts/field/enter_402000504.py new file mode 100755 index 0000000..83f5b47 --- /dev/null +++ b/scripts/field/enter_402000504.py @@ -0,0 +1,34 @@ +# id 402000504 (null), field 402000504 +sm.createQuestWithQRValue(16700, "count=261;date=20190221") +sm.createQuestWithQRValue(16700, "count=262;date=20190221") +sm.createQuestWithQRValue(16700, "count=263;date=20190221") +sm.createQuestWithQRValue(16700, "count=264;date=20190221") +sm.createQuestWithQRValue(16700, "count=265;date=20190221") +sm.createQuestWithQRValue(16700, "count=266;date=20190221") +sm.createQuestWithQRValue(16700, "count=267;date=20190221") +sm.createQuestWithQRValue(16700, "count=268;date=20190221") +sm.createQuestWithQRValue(16700, "count=269;date=20190221") +sm.createQuestWithQRValue(16700, "count=270;date=20190221") +sm.createQuestWithQRValue(16700, "count=271;date=20190221") +sm.createQuestWithQRValue(16700, "count=272;date=20190221") +sm.createQuestWithQRValue(16700, "count=273;date=20190221") +sm.createQuestWithQRValue(16700, "count=274;date=20190221") +sm.createQuestWithQRValue(16700, "count=275;date=20190221") +sm.createQuestWithQRValue(16700, "count=276;date=20190221") +sm.playSound("DarkParty/scream4", 100) +sm.playSound("DarkParty/scream2", 100) +sm.playSound("DarkParty/scream4", 100) +sm.createQuestWithQRValue(16700, "count=277;date=20190221") +sm.createQuestWithQRValue(16700, "count=278;date=20190221") +sm.createQuestWithQRValue(16700, "count=279;date=20190221") +sm.createQuestWithQRValue(16700, "count=280;date=20190221") +sm.createQuestWithQRValue(16700, "count=281;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=24") +sm.createQuestWithQRValue(16700, "count=282;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=25") +sm.createQuestWithQRValue(16700, "count=283;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=26") +sm.createQuestWithQRValue(16700, "count=284;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=27") +sm.createQuestWithQRValue(16700, "count=285;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=28") diff --git a/scripts/field/enter_402000509.py b/scripts/field/enter_402000509.py new file mode 100755 index 0000000..bc714cb --- /dev/null +++ b/scripts/field/enter_402000509.py @@ -0,0 +1,18 @@ +# id 402000509 (null), field 402000509 +sm.createQuestWithQRValue(16700, "count=245;date=20190221") +sm.createQuestWithQRValue(16700, "count=246;date=20190221") +sm.createQuestWithQRValue(16700, "count=247;date=20190221") +sm.createQuestWithQRValue(16700, "count=248;date=20190221") +sm.createQuestWithQRValue(16700, "count=249;date=20190221") +sm.createQuestWithQRValue(16700, "count=250;date=20190221") +sm.createQuestWithQRValue(16700, "count=251;date=20190221") +sm.createQuestWithQRValue(16700, "count=252;date=20190221") +sm.createQuestWithQRValue(16700, "count=253;date=20190221") +sm.createQuestWithQRValue(16700, "count=254;date=20190221") +sm.createQuestWithQRValue(16700, "count=255;date=20190221") +sm.createQuestWithQRValue(16700, "count=256;date=20190221") +sm.createQuestWithQRValue(16700, "count=257;date=20190221") +sm.createQuestWithQRValue(16700, "count=258;date=20190221") +sm.createQuestWithQRValue(16700, "count=259;date=20190221") +sm.createQuestWithQRValue(16700, "count=260;date=20190221") +sm.playSound("DarkParty/scream2", 100) diff --git a/scripts/field/enter_402000510.py b/scripts/field/enter_402000510.py new file mode 100755 index 0000000..a53a932 --- /dev/null +++ b/scripts/field/enter_402000510.py @@ -0,0 +1,25 @@ +# id 402000510 (null), field 402000510 +sm.createQuestWithQRValue(16700, "count=223;date=20190221") +sm.createQuestWithQRValue(16700, "count=224;date=20190221") +sm.createQuestWithQRValue(16700, "count=225;date=20190221") +sm.createQuestWithQRValue(16700, "count=226;date=20190221") +sm.createQuestWithQRValue(16700, "count=227;date=20190221") +sm.createQuestWithQRValue(16700, "count=228;date=20190221") +sm.playSound("DarkParty/scream4", 100) +sm.createQuestWithQRValue(16700, "count=229;date=20190221") +sm.createQuestWithQRValue(16700, "count=230;date=20190221") +sm.createQuestWithQRValue(16700, "count=231;date=20190221") +sm.createQuestWithQRValue(16700, "count=232;date=20190221") +sm.createQuestWithQRValue(16700, "count=233;date=20190221") +sm.createQuestWithQRValue(16700, "count=234;date=20190221") +sm.createQuestWithQRValue(16700, "count=235;date=20190221") +sm.createQuestWithQRValue(16700, "count=236;date=20190221") +sm.createQuestWithQRValue(16700, "count=237;date=20190221") +sm.createQuestWithQRValue(16700, "count=238;date=20190221") +sm.startQuest(28825) +sm.createQuestWithQRValue(16700, "count=239;date=20190221") +sm.createQuestWithQRValue(16700, "count=240;date=20190221") +sm.createQuestWithQRValue(16700, "count=241;date=20190221") +sm.createQuestWithQRValue(16700, "count=242;date=20190221") +sm.createQuestWithQRValue(16700, "count=243;date=20190221") +sm.createQuestWithQRValue(16700, "count=244;date=20190221") diff --git a/scripts/field/enter_402000512.py b/scripts/field/enter_402000512.py new file mode 100755 index 0000000..1739302 --- /dev/null +++ b/scripts/field/enter_402000512.py @@ -0,0 +1,24 @@ +# id 402000512 (null), field 402000512 +sm.createQuestWithQRValue(16700, "count=41;date=20190221") +sm.createQuestWithQRValue(16700, "count=42;date=20190221") +sm.createQuestWithQRValue(16700, "count=43;date=20190221") +sm.createQuestWithQRValue(16700, "count=44;date=20190221") +sm.createQuestWithQRValue(16700, "count=45;date=20190221") +sm.playSound("DarkParty/scream4", 100) +sm.createQuestWithQRValue(16700, "count=46;date=20190221") +sm.createQuestWithQRValue(16700, "count=47;date=20190221") +sm.createQuestWithQRValue(16700, "count=48;date=20190221") +sm.createQuestWithQRValue(16700, "count=49;date=20190221") +sm.createQuestWithQRValue(16700, "count=50;date=20190221") +sm.createQuestWithQRValue(16700, "count=51;date=20190221") +sm.createQuestWithQRValue(16700, "count=52;date=20190221") +sm.createQuestWithQRValue(16700, "count=53;date=20190221") +sm.createQuestWithQRValue(16700, "count=54;date=20190221") +sm.createQuestWithQRValue(16700, "count=55;date=20190221") +sm.createQuestWithQRValue(16700, "count=56;date=20190221") +sm.createQuestWithQRValue(16700, "count=57;date=20190221") +sm.createQuestWithQRValue(16700, "count=58;date=20190221") +sm.playSound("DarkParty/scream2", 100) +sm.createQuestWithQRValue(16700, "count=59;date=20190221") +sm.createQuestWithQRValue(16700, "count=60;date=20190221") +sm.playSound("DarkParty/scream3", 100) diff --git a/scripts/field/enter_402000513.py b/scripts/field/enter_402000513.py new file mode 100755 index 0000000..235363c --- /dev/null +++ b/scripts/field/enter_402000513.py @@ -0,0 +1,8 @@ +# id 402000513 (null), field 402000513 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendNext("#face0#Hey! Look! Carnelian's here!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0##b(She doesn't look so good... I hope she's not injured.)#k") diff --git a/scripts/field/enter_402000514.py b/scripts/field/enter_402000514.py new file mode 100755 index 0000000..9e88c5f --- /dev/null +++ b/scripts/field/enter_402000514.py @@ -0,0 +1,36 @@ +# id 402000514 (null), field 402000514 +sm.createQuestWithQRValue(16700, "count=125;date=20190221") +sm.createQuestWithQRValue(16700, "count=126;date=20190221") +sm.createQuestWithQRValue(16700, "count=127;date=20190221") +sm.createQuestWithQRValue(16700, "count=128;date=20190221") +sm.createQuestWithQRValue(16700, "count=129;date=20190221") +sm.createQuestWithQRValue(16700, "count=130;date=20190221") +sm.createQuestWithQRValue(16700, "count=131;date=20190221") +sm.createQuestWithQRValue(16700, "count=132;date=20190221") +sm.createQuestWithQRValue(16700, "count=133;date=20190221") +sm.createQuestWithQRValue(16700, "count=134;date=20190221") +sm.createQuestWithQRValue(16700, "count=135;date=20190221") +sm.createQuestWithQRValue(16700, "count=136;date=20190221") +sm.createQuestWithQRValue(16700, "count=137;date=20190221") +sm.createQuestWithQRValue(16700, "count=138;date=20190221") +sm.createQuestWithQRValue(16700, "count=139;date=20190221") +sm.createQuestWithQRValue(16700, "count=140;date=20190221") +sm.createQuestWithQRValue(16700, "count=141;date=20190221") +sm.createQuestWithQRValue(16700, "count=142;date=20190221") +sm.createQuestWithQRValue(16700, "count=143;date=20190221") +sm.createQuestWithQRValue(16700, "count=144;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=20") +sm.createQuestWithQRValue(16027, "ComboK=21") +sm.createQuestWithQRValue(16700, "count=145;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=22") +sm.createQuestWithQRValue(16027, "ComboK=23") +sm.playSound("DarkParty/scream3", 100) +sm.playSound("DarkParty/scream1", 100) +sm.playSound("DarkParty/scream4", 100) +sm.createQuestWithQRValue(16700, "count=146;date=20190221") +sm.createQuestWithQRValue(16700, "count=147;date=20190221") +sm.createQuestWithQRValue(16700, "count=148;date=20190221") +sm.createQuestWithQRValue(16700, "count=149;date=20190221") +sm.createQuestWithQRValue(16700, "count=150;date=20190221") +sm.createQuestWithQRValue(16700, "count=151;date=20190221") +sm.warp(402000500) diff --git a/scripts/field/enter_402000519.py b/scripts/field/enter_402000519.py new file mode 100755 index 0000000..9e7d9f2 --- /dev/null +++ b/scripts/field/enter_402000519.py @@ -0,0 +1,32 @@ +# id 402000519 (null), field 402000519 +sm.createQuestWithQRValue(16700, "count=83;date=20190221") +sm.createQuestWithQRValue(16700, "count=84;date=20190221") +sm.createQuestWithQRValue(16700, "count=85;date=20190221") +sm.createQuestWithQRValue(16700, "count=86;date=20190221") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/15") +sm.createQuestWithQRValue(16700, "count=87;date=20190221") +sm.createQuestWithQRValue(16700, "count=88;date=20190221") +sm.createQuestWithQRValue(16700, "count=89;date=20190221") +sm.createQuestWithQRValue(16700, "count=90;date=20190221") +sm.createQuestWithQRValue(16700, "count=91;date=20190221") +sm.createQuestWithQRValue(16700, "count=92;date=20190221") +sm.createQuestWithQRValue(16700, "count=93;date=20190221") +sm.createQuestWithQRValue(16700, "count=94;date=20190221") +sm.createQuestWithQRValue(16700, "count=95;date=20190221") +sm.createQuestWithQRValue(16700, "count=96;date=20190221") +sm.createQuestWithQRValue(16700, "count=97;date=20190221") +sm.createQuestWithQRValue(16700, "count=98;date=20190221") +sm.createQuestWithQRValue(16700, "count=99;date=20190221") +sm.createQuestWithQRValue(16700, "count=100;date=20190221") +sm.createQuestWithQRValue(16700, "count=101;date=20190221") +sm.createQuestWithQRValue(16700, "count=102;date=20190221") +sm.playSound("Sound/PL_Choco.img/effectSound/getChoco", 100) +sm.avatarOriented("Effect/OnUserEff.img/PL_Choco/getChoco") +sm.createQuestWithQRValue(16700, "count=103;date=20190221") +sm.createQuestWithQRValue(16700, "count=104;date=20190221") +sm.createQuestWithQRValue(16700, "count=105;date=20190221") +sm.createQuestWithQRValue(16700, "count=106;date=20190221") +sm.createQuestWithQRValue(16700, "count=107;date=20190221") +sm.createQuestWithQRValue(16700, "count=108;date=20190221") +sm.createQuestWithQRValue(16700, "count=109;date=20190221") diff --git a/scripts/field/enter_402000520.py b/scripts/field/enter_402000520.py new file mode 100755 index 0000000..933401f --- /dev/null +++ b/scripts/field/enter_402000520.py @@ -0,0 +1,49 @@ +# id 402000520 (null), field 402000520 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(300) +sm.zoomCamera(0, 1000, 0, 2100, -285) +sm.sendDelay(300) +sm.spawnNpc(3001300, 657, -4) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.flipNpcByTemplateId(3001300, False) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.zoomCamera(6000, 1500, 6000, 850, 65) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.reservedEffectRepeat("Effect/Direction14.img/illium/text/3", True, True, 0, 0, 0) +sm.sendDelay(3500) +sm.reservedEffectRepeat("Effect/Direction14.img/illium/text/3", False, False, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face3#Ex... I'm scared...") +sm.sendSay("#face3#You think I'll ever get used to the #bCrystal Academy#k?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Once you learn to control your unstable magical talents and better develop your social skills, I have the utmost confidence that you will be a talented engineer, Sir.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#Thanks, Ex.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face1#Hello, Illium.") +sm.zoomCamera(1500, 1500, 1500, 1220, 65) +sm.sendDelay(1000) +sm.spawnNpc(3001301, 1381, 27) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.playSound("Sound/Skill.img/152001004/Use", 100) +sm.showNpcSpecialActionByTemplateId(3001301, "appear", 0) +sm.forcedMove(False, 350) +sm.moveNpcByTemplateId(3001300, False, 350, 150) +sm.sendDelay(2000) +sm.sendNext("#face1#Welcome to Crystal Academy. Let's head inside.") +sm.createQuestWithQRValue(34801, "019=1;hunt1=1;gate=1;020=1;021=1;exp=1") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000521) diff --git a/scripts/field/enter_402000521.py b/scripts/field/enter_402000521.py new file mode 100755 index 0000000..bbd365a --- /dev/null +++ b/scripts/field/enter_402000521.py @@ -0,0 +1,89 @@ +# id 402000521 (null), field 402000521 +if not sm.hasHadQuest(34801): + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(300) + sm.zoomCamera(0, 1000, 0, 0, -1500) + sm.sendDelay(300) + sm.spawnNpc(3001301, 93, 0) + sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) + sm.spawnNpc(3001300, -80, -92) + sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) + sm.zoomCamera(8000, 1000, 8000, 0, -70) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(2000) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face2#Wow! This place is huge!") + sm.sendDelay(900) + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendNext("#face0#Sir, this is amazing! Many only dream of such a unique opportunity to attend the Crystal Academy. It's the best school for learning anything you want to know about mytocrystal magic.") + sm.sendDelay(900) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face3#Ex...") + sm.sendDelay(300) + sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate + sm.sendNext("#face1#It's as he says. Students of the Crystal Academy are naturally talented with mytocrystals.") + sm.sendSay("#face0#Illium, you do not fall into that category.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face8#I know...") + sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate + sm.sendSay("#face0#But yesterday's incident demonstrated that you may have a chance yet, unstable as your magic is.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#Really?") + sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate + sm.sendSay("#face0#I'm not certain yet. But if I am correct, and you are able to wield magic...") + sm.sendSay("#face0#Well, I brought you here so that you can learn how to use your magic safely.") + sm.sendSay("#face1#Class is starting. Here's a course schedule and map.") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#I have now saved the map to memory. You can open it with a hotkey.") + sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate + sm.sendSay("#face1#Perhaps you should let your little friend guide you. Good luck!") + sm.avatarOriented("UI/tutorial.img/illium/worldMap") + sm.showNpcSpecialActionByTemplateId(3001301, "disappear", 0) + sm.sendDelay(750) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face8#I can use magic?") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#The first class will begin soon. You should hurry.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face4#Ah! I can't be late for my first class!") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#I'm detecting powerful magic from that column of crystals.\r\nIt will boost your jumps, so you can reach the higher floors.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0##bJump to move, jump to move#k... Okay...") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#I believe you can travel further if you use the #bCrystalline Wings#k skill\r\nafter you jump.") + sm.createQuestWithQRValue(34801, "019=1;guide=1;hunt1=1;gate=1;020=1;021=1;exp=1") + sm.setLevel(10) + sm.setMaxHp(413) + sm.setHp(413) + sm.setMaxMp(381) + sm.setMp(381) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) +elif not sm.hasHadQuest(34806): + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate + sm.sendNext("#face1#You did well today! Goodbye!") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#See you tomorrow!") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#Sir, you have completed today's schedule.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#In that case, maybe I should go to the library for my assignment.") + sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean + sm.sendSay("#face2#Help! Someone save me!") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#What's going on?") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#The sound seems to me coming from the classroom to your left. Would you like to go there now?") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#Yeah. Let's hurry.") + sm.createQuestWithQRValue(34806, "scene=1;d=1;train=1;item1=1;item2=1;exp=1") + sm.warp(402000532) \ No newline at end of file diff --git a/scripts/field/enter_402000522.py b/scripts/field/enter_402000522.py new file mode 100755 index 0000000..a727a5c --- /dev/null +++ b/scripts/field/enter_402000522.py @@ -0,0 +1,37 @@ +# id 402000522 (null), field 402000522 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3001300, -491, -1377) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.flipNpcByTemplateId(3001300, True) +sm.sendDelay(30) +sm.forcedFlip(True) +sm.sendDelay(30) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#I'm going to take a moment to think.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Class is starting.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#I just need to figure out the best way to talk to people.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#It's just a matter of confidence, Sir. With a couple of positive interactions, you'll have friends in no time!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Yeah. I shouldn't let my undeveloped skills hold me back from learning and improving.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Every student at the Crystal Academy has an innate talent for using mytocrystal mana, but there's no reason you can't one day reach their skill level.") +sm.sendSay("#face0#You can do it, Sir.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Yeah, it'll be a lot of hard work, but it's worth it.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#You should probably start your class.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#You're right.") +sm.sendSay("#face0#Here goes.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(34802, "out=2") diff --git a/scripts/field/enter_402000523.py b/scripts/field/enter_402000523.py new file mode 100755 index 0000000..383caa8 --- /dev/null +++ b/scripts/field/enter_402000523.py @@ -0,0 +1,97 @@ +# id 402000523 (null), field 402000523 +sm.createQuestWithQRValue(34804, "gossip=1") +sm.createQuestWithQRValue(34858, "gate=1;cinna=2") +sm.createQuestWithQRValue(34859, "dean=2;extra1=1;extra2=1;carn=3") +sm.createQuestWithQRValue(34859, "dean=2;extra1=2;extra2=1;carn=3") +sm.createQuestWithQRValue(34859, "dean=2;extra1=2;extra2=2;carn=3") +sm.createQuestWithQRValue(34859, "dean=2;extra1=2;extra2=2;carn=4") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3001300, 150, -1381) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 700) +sm.sendDelay(700) +sm.forcedMove(False, 100) +sm.moveNpcByTemplateId(3001300, False, 70, 100) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face0#What happened?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face0#What?") +sm.spawnNpc(3001307, -278, -1381) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.spawnNpc(3001311, -339, -1381) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face0#It talks! It shouted #fs22##rObsidian#k!") +sm.sendSay("#face1#That was just about the last thing I expected to happen in class today.") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face1#Hey! There goes that student now.") +sm.forcedFlip(True) +sm.flipNpcByTemplateId(3001300, True) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#What...?") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face0#Hi!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#H-hi!") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face1#Cool robot! Did you make it?") +sm.sendSay("#face0#And how did you get into this school?") +sm.sendSay("#face0#And why doesn't the mytocrystal on your hand have any color?") +sm.sendSay("#face0#Why don't your wings shine like ours?") +sm.sendSay("#face0#Is this robot your pet?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#Huh? What?") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0#Take it easy, Dean!") +sm.spawnNpc(3001308, -100, -1381) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.sendSay("#face0#You're overwhelming him.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#What? But I'm just curious!") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0#He's new. Maybe slow it down and give him a chance to answer first?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face4#He clearly doesn't want to talk to us. I'm leaving.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#No, wait! It's fun!") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face3#No. We should leave him alone.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face1#Fine. I'll go. But I'm determined to talk to him eventually.") +sm.sendDelay(800) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face3#I'm happy to meet you all. I promise. I'm just a little nervous.") +sm.flipNpcByTemplateId(3001308, False) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendNext("#face1#Oh, don't mind them. Dean's just a little too enthusiastic sometimes.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Ah, I see.") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0#What's your name?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Illium.") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face1#Pleased to meet you! I'm #bCarnelian#k.") +sm.sendSay("#face0#I'd love to stay and chat, but I'm going to be late. See you later!") +sm.sendDelay(800) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#I'll guide you to your next class.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000526.py b/scripts/field/enter_402000526.py new file mode 100755 index 0000000..d3dd465 --- /dev/null +++ b/scripts/field/enter_402000526.py @@ -0,0 +1,103 @@ +# id 402000526 (null), field 402000526 +sm.setMapTaggedObjectVisible("c1_loop", False, 0, 0) +sm.setMapTaggedObjectVisible("c1_appear", False, 0, 0) +sm.setMapTaggedObjectVisible("c2_loop", False, 0, 0) +sm.setMapTaggedObjectVisible("c2_appear", False, 0, 0) +sm.setMapTaggedObjectVisible("c3_loop", False, 0, 0) +sm.setMapTaggedObjectVisible("c3_appear", False, 0, 0) +if not sm.hasHadQuest(34859): + sm.startQuest(34859) + sm.createQuestWithQRValue(34859, "carn=1") + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.spawnNpc(3001300, 1019, 23) + sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) + sm.flipNpcByTemplateId(3001300, True) + sm.sendDelay(30) + sm.forcedFlip(True) + sm.moveCamera(False, 170, -65, 0) + sm.sendDelay(1000) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face4#There are so many students!") + sm.sendDelay(2000) + sm.sendDelay(1500) + sm.speechBalloon(True, 0, 0, "Huh? Who's that?", 4000, 1, 0, 0, 0, 4, 3001317, 4600225) + sm.sendDelay(1000) + sm.speechBalloon(True, 0, 0, "Must be new.", 2500, 1, 0, 0, 0, 4, 3001314, 4600225) + sm.sendDelay(1000) + sm.speechBalloon(True, 0, 0, "A transfer student?", 1500, 1, 0, 0, 0, 4, 3001315, 4600225) + sm.moveCamera(True, 170, 0, 0) + sm.sendNext("#face3#And they're all looking at me...") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#This is a great opportunity to converse with your peers.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face3#Uh... I don't really know what to say.") + res = sm.sendAskAccept("#face3#I think I'd rather just keep to myself.") + sm.sendNext("#face3#This is a lot to take in.") + sm.createQuestWithQRValue(34802, "out=1") + sm.blind(True, 255, 0, 0, 0, 500) + sm.sendDelay(500) + sm.blind(False, 0, 0, 0, 0, 500) + sm.lockInGameUI(False, True) + sm.warp(402000522) +elif not sm.hasHadQuest(34802): + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face0#Right! Paying attention!") + sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat + sm.sendSay("#face0#Ah, Illium. Agate told me to expect you. Class, Illium will be studying with you from now on.") + sm.sendSay("#face0#There's an empty seat for you here.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face4#Thank you!") + sm.createQuestWithQRValue(34802, "class1=1;out=2") + sm.lockInGameUI(False, True) +elif not sm.hasHadQuest(34808): + sm.createQuestWithQRValue(34802, "class1=1;class2=1;class3=1;class4=1;out=2;exp=1") + sm.createQuestWithQRValue(34808, "d2=1") + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.zoomCamera(0, 1000, 0, 33, -70) + sm.forcedFlip(True) + sm.sendDelay(500) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1000) + sm.spawnNpc(3001300, 567, -106) + sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) + sm.spawnNpc(3001310, 478, -45) + sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) + sm.spawnNpc(3001311, -432, 22) + sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001305) # Professor Lutil + sm.sendNext("#face0#Last time we covered the last battle of the Verdant Flora.") + sm.sendSay("#face0#Would anyone care to give a brief summary?") + sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria + sm.sendSay("#face4#The last battle was an ancient civil war between the Verdant Flora and the High Flora, led by Prince Gerand Darmoor, who nearly wiped out the Verdant Flora and banished our god.") + sm.sendSay("#face4#Our god worked hard for the Verdant Flora's survival. He created mechanical wings to replace those that the Verdant had lost in the battle. Today, that fusion of technology and mytocrystals allows us to wield magic despite our banishment.") + sm.setInnerOverrideSpeakerTemplateID(3001305) # Professor Lutil + sm.sendSay("#face0#Well done!") + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendSay("#face2#I guess I should have studied that a bit more.") + sm.setInnerOverrideSpeakerTemplateID(3001305) # Professor Lutil + sm.sendSay("#face0#The ancient god of the Verdant Flora was the hero of our people. The annual Festival of the Gods is intended to honor him and bring hope to our people.") + sm.sendSay("#face0#The Festival of the Gods will be held at the end of the semester. Crystal Academy will be responsible for organizing a grand presentation of light and magic!") + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendSay("#face0#Oh, Illium! Want to go with me?") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face9#Sure!") + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000527.py b/scripts/field/enter_402000527.py new file mode 100755 index 0000000..52ca317 --- /dev/null +++ b/scripts/field/enter_402000527.py @@ -0,0 +1,162 @@ +# id 402000527 (null), field 402000527 +sm.completeQuestNoCheck(34859) +sm.createQuestWithQRValue(34859, "carn=2") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedFlip(True) +sm.spawnNpc(3001314, -333, 56) +sm.showNpcSpecialActionByTemplateId(3001314, "summon", 0) +sm.spawnNpc(3001315, -211, 56) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001308, -89, 56) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.spawnNpc(3001311, -32, 56) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.spawnNpc(3001323, -493, 56) +sm.showNpcSpecialActionByTemplateId(3001323, "summon", 0) +sm.spawnNpc(3001307, 29, 56) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.sendDelay(1000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Second Class: Magical Combat Training", 20, 2200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(3001314, "skill", -1) +sm.playSound("Sound/SoundEff.img/illium/student_skill", 100) +sm.showNpcSpecialActionByTemplateId(3001323, "hit", 1) +sm.sendDelay(100) +sm.speechBalloon(False, 0, 0, "Hyah!", 1000, 1, 0, 0, 0, 4, 3001314, 4600225) +sm.playSound("Sound/Mob.img/2400407/Damage", 100) +sm.sendDelay(1200) +sm.resetNpcSpecialActionByTemplateId(3001314) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face0#Step aside! I'll show you how it's done!") +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendSay("#face0#Dean, pay attention.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#Ah! Okay...") +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendSay("#face0#All right, next!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.spawnNpc(3001314, 29, 56) +sm.showNpcSpecialActionByTemplateId(3001314, "summon", 0) +sm.spawnNpc(3001315, -333, 56) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001308, -150, 56) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.spawnNpc(3001311, -93, 56) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.spawnNpc(3001307, -34, 56) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.sendDelay(800) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3001315, "skill", -1) +sm.playSound("Sound/SoundEff.img/illium/student_skill", 100) +sm.showNpcSpecialActionByTemplateId(3001323, "hit", 1) +sm.sendDelay(100) +sm.speechBalloon(False, 0, 0, "Hah!", 1000, 1, 0, 0, 0, 4, 3001315, 4600225) +sm.playSound("Sound/Mob.img/2400407/Damage", 100) +sm.sendDelay(1200) +sm.resetNpcSpecialActionByTemplateId(3001315) +sm.resetNpcSpecialActionByTemplateId(3001314) +sm.flipNpcByTemplateId(3001314, True) +sm.sendDelay(30) +sm.sendNext("#face0#Everyone's doing well!") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face1#Wow! That was great! Practicing yesterday really helped! What a relief!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.spawnNpc(3001314, -34, 56) +sm.showNpcSpecialActionByTemplateId(3001314, "summon", 0) +sm.spawnNpc(3001315, 29, 56) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001308, -212, 56) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.spawnNpc(3001311, -160, 56) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.spawnNpc(3001307, -96, 56) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendNext("#face0#You must be the new student.") +sm.sendSay("#face0#You're Illium, right? It's your turn.") +sm.forcedMove(True, 40) +sm.sendDelay(1000) +sm.forcedAction(7, 0) +sm.resetNpcSpecialActionByTemplateId(3001323) +sm.showNpcSpecialActionByTemplateId(3001323, "hit", 0) +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "That was an attack, right?", 2000, 1, 0, 0, 0, 4, 3001314, 4600225) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "How strange...", 2000, 1, 0, 0, 0, 4, 3001315, 4600225) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face1#Hah! What was that?! My grandma could have done better!") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face4#That was disappointing.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Aww...") +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendSay("#face0#A normal attack won't do! You must use #bmagic#k.") +sm.sendSay("#face0#Gather the mytocrystal energy in your #bwings#k, then transfer it to the crystal on your hand.") +sm.sendSay("#face0#Ah, but you don't have #rwings#k.") +sm.sendSay("#face0#Well, you may not have wings, but I'm sure you can find other ways to use your magic even if they are a bit unorthodox.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#My problem is figuring out how.") +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendSay("#face0#Attack the practice robot using whatever means you can think of.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face8#Hmm...") +sm.sendDelay(1000) +sm.forcedAction(1342, 0) +sm.showEffect("Skill/15200.img/skill/152001001/effect", 0, 0, 0, 0, 0, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Use", 100) +sm.sendDelay(300) +sm.showEffect("Skill/15200.img/skill/152001001/hit", 0, 0, 0, 0, 80674123, 0, 0) +sm.showNpcSpecialActionByTemplateId(3001323, "die", 0) +sm.sendDelay(300) +sm.playSound("Sound/Mob.img/2400407/Die", 100) +sm.sendDelay(700) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "!?", 1000, 1, 0, 0, 0, 4, 3001314, 4600225) +sm.speechBalloon(False, 0, 0, "!?", 1000, 1, 0, 0, 0, 4, 3001315, 4600225) +sm.speechBalloon(False, 0, 0, "!?", 1000, 1, 0, 0, 0, 4, 3001308, 4600225) +sm.speechBalloon(False, 0, 0, "!?", 1000, 1, 0, 0, 0, 4, 3001311, 4600225) +sm.speechBalloon(False, 0, 0, "!?", 1000, 1, 0, 0, 0, 4, 3001307, 4600225) +sm.sendDelay(1500) +sm.speechBalloon(False, 0, 0, "What was that?!", 1500, 0, 0, 0, 0, 4, 3001315, 4600225) +sm.flipNpcByTemplateId(3001314, False) +sm.sendDelay(30) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "I have no idea what just happened.", 1500, 0, 0, 0, 0, 4, 3001314, 4600225) +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendNext("#face4#Was that magic you used?") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#How is that even possible?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face4#It was so strange!") +sm.flipNpcByTemplateId(3001314, True) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendNext("#face0#Well, it isn't perfect, but that's a wonderful start! Well done!") +sm.sendDelay(1500) +sm.createQuestWithQRValue(34802, "class1=1;class2=1;out=2;exp=1") +sm.showFadeTransition(0, 1000, 3000) +sm.forcedFlip(True) +sm.createQuestWithQRValue(34858, "gate=1;cinna=1") +sm.createQuestWithQRValue(34859, "dean=1;carn=2") +sm.createQuestWithQRValue(34859, "dean=1;extra1=1;carn=2") +sm.createQuestWithQRValue(34859, "dean=1;extra1=1;extra2=1;carn=2") +sm.createQuestWithQRValue(34859, "dean=1;extra1=1;extra2=1;carn=3") +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000528.py b/scripts/field/enter_402000528.py new file mode 100755 index 0000000..19ff846 --- /dev/null +++ b/scripts/field/enter_402000528.py @@ -0,0 +1,82 @@ +# id 402000528 (null), field 402000528 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 250, 0, 0, 0, 0) +sm.spawnNpc(3001309, -20, 63) +sm.showNpcSpecialActionByTemplateId(3001309, "summon", 0) +sm.spawnNpc(3001300, 1506, 22) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(3001300, True, 1000, 150) +sm.forcedMove(True, 1000) +sm.zoomCamera(0, 2000, 0, -100, 63) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face0#What were you thinking enrolling that miscreant child in the Academy? You rewarded him for behavior that could endanger us all.") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.sendNext("#face0#These laws are in place for a reason.") +sm.sendSay("#face4#What if he's a spy for the High Flora? What if we're discovered. Worse, what if the Elder Crystal is discovered?") +sm.sendSay("#face4#We must strengthen security around the Crystal. Where should I station our men? We can't take any risks.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#You needn't worry. The Crystal is safe.") +sm.sendSay("#face2#Hello, Illium.") +sm.zoomCamera(1000, 2000, 1000, 336, 63) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face4#Oh! Hello...") +sm.flipNpcByTemplateId(3001309, False) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face1#You...") +sm.forcedMove(True, 300) +sm.moveNpcByTemplateId(3001300, True, 250, 150) +sm.zoomCamera(1500, 2000, 1500, -100, 63) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face1#Darius, let's end our conversation here. You may take your leave.") +sm.flipNpcByTemplateId(3001309, True) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face4#As you wish.") +sm.flipNpcByTemplateId(3001309, False) +sm.sendDelay(30) +sm.moveNpcByTemplateId(3001309, False, 850, 150) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#Illium, did you hear what Darius said?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face8#Yes...") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Some students today were less than welcoming to Illium today.") +sm.sendSay("#face0#It is not a good means of building camaraderie among peers.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face8#I'm sure it won't always be like that...") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face1#I see. Everyone is a bit uncomfortable with the unfamiliar. Don't worry. It'll get better.") +sm.sendSay("#face0#Illium, you're special.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#I am?") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face1#You are the only one to have overcome your limitations so spectacularly. Believe in yourself and train hard.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#I'll try.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face2#Now, why don't we begin your #bsupplemental lesson#k?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Okay!") +sm.sendDelay(1000) +sm.createQuestWithQRValue(34806, "scene=1") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000529.py b/scripts/field/enter_402000529.py new file mode 100755 index 0000000..cd9dc50 --- /dev/null +++ b/scripts/field/enter_402000529.py @@ -0,0 +1,43 @@ +# id 402000529 (null), field 402000529 +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("crystal", False, 0, 0) +if not sm.hasQuestWithValue(34813, "d2=1"): + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(600) + sm.forcedFlip(True) + sm.sendDelay(1000) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1500) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face0#Yes! I think we've finally got the basics taken care of.") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#Indeed! Your production time has been significantly reduced.") + sm.sendSay("#face0#Your are exhibiting quite an aptitude for creating this product.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#I really want to do this statue justice. This year's festival feels so much more meaningful to me.") + sm.sendSay("#face0#Just thinking about the beautiful floating crystals that light up the Festival of the Gods every year is inspiring.") + sm.createQuestWithQRValue(34813, "529=1;d=1;m=0;item2=1;exp=1;d2=1") + sm.lockInGameUI(False, True) + sm.warp(940202031) +elif not sm.hasQuestWithValue(34813, "031=1"): + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face0#This year's festival is going to be special! I'm going to do everything I can to shine brilliantly!") + sm.createQuestWithQRValue(34813, "529=1;d=1;m=0;item2=1;exp=1;031=1;d2=1") +elif not sm.hasQuestWithValue(34816, "fin=1"): + sm.setMapTaggedObjectVisible("obj", False, 0, 0) + sm.lockInGameUI(True, False) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face0#Now that we've attended the festival...") + sm.lockInGameUI(False, True) + sm.createQuestWithQRValue(34816, "d=1;fin=1;exp=1;d1=1") \ No newline at end of file diff --git a/scripts/field/enter_402000530.py b/scripts/field/enter_402000530.py new file mode 100755 index 0000000..0a05c15 --- /dev/null +++ b/scripts/field/enter_402000530.py @@ -0,0 +1,141 @@ +# id 402000530 (null), field 402000530 +if not sm.hasHadQuest(34858): + sm.startQuest(34858) + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(500, 1000, 500, 50, -70) + sm.sendDelay(500) + sm.sendDelay(500) + sm.forcedFlip(True) + sm.removeOverlapScreen(1000) + sm.sendDelay(3000) + sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Third Class: Gate Creation", 20, 2200, 6, -50, -50, 1, 4, 0, 0, 0) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine + sm.sendNext("#face0#The Verdant Flora use mana from the mytocrystals for our magic.") + sm.sendSay("#face0#One thing we use that mana for is the #bCrystal Gate#k. That's what we will be learning about today.") + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 0, -183, -1802) + sm.sendDelay(500) + sm.removeOverlapScreen(1000) + sm.sendDelay(1500) + sm.sendNext("#face0#The Sanctuary in which we live exists within the Crystal Gate.\r\nIt's a type of virtual space created with magic.") + sm.zoomCamera(2000, 1200, 2000, -700, -2650) + sm.sendNext("#face0#That is why the sky is perpetually dark and appears crystalline.") + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 0, 50, -70) + sm.sendDelay(500) + sm.removeOverlapScreen(1000) + sm.sendDelay(1500) + sm.sendNext("#face0#The Crystal Gate hides us from the High Flora and protects us from attack.") + sm.sendSay("#face0#It is a secret we must carefully hide from the High Flora.") + sm.sendSay("#face0#Once you know how to create a gate, you'll find them to be very useful. However, making a gate is quite difficult.") + sm.sendSay("#face0#Split into 2-member teams for this lesson.") + sm.createQuestWithQRValue(34802, "class1=1;class2=1;class3=1;out=2;exp=1") + sm.showFadeTransition(0, 1000, 3000) + sm.sendDelay(300) + sm.forcedFlip(True) + sm.moveCamera(True, 0, 0, 0) + sm.removeOverlapScreen(1000) + sm.lockInGameUI(False, True) +elif not sm.hasHadQuest(34811): + sm.startQuest(34811) + sm.createQuestWithQRValue(34802, "class1=1;class2=1;class3=1;class4=1;class5=1;out=2;exp=1") + sm.lockInGameUI(True, False) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(500, 1000, 500, 50, -70) + sm.sendDelay(500) + sm.sendDelay(500) + sm.forcedFlip(True) + sm.removeOverlapScreen(1000) + sm.spawnNpc(3001310, 520, 31) + sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) + sm.spawnNpc(3001311, 603, -31) + sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine + sm.sendNext("#face0#Did everyone complete their assignment?") + sm.sendDelay(1000) + sm.sendDelay(1000) + sm.speechBalloon(False, 0, 0, "!", 1000, 1, 0, 0, 0, 4, 3001310, 4600225) + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendNext("#face2#Uh... oops!") + sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria + sm.sendSay("#face4#Tsk tsk.") + sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine + sm.sendSay("#face0#Those that did not complete the assignment must stay after class.") + sm.sendSay("#face0#Let's continue where we left off last time with Crystal Gate creation. If we're successful, we'll have a small space we can hide in! Aren't you excited?") + sm.sendSay("#face0#We'll need to gather a special mytocrystal for the gate today. They're dangerous, so they're stored specially in the classroom.") + sm.sendSay("#face0#Enter the portal on the right and gather #b20#k #i4036168# #t4036168# items by hunting #o2400403# monsters.") + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendSay("#face0#Let's go!") + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.lockInGameUI(False, True) +elif not sm.hasHadQuest(34813): + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.forcedFlip(True) + sm.sendDelay(1000) + sm.zoomCamera(0, 2000, 0, 358, 63) + sm.spawnNpc(3001301, 500, 63) + sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) + sm.spawnNpc(3001300, 283, 63) + sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1000) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate + sm.sendNext("#face1#Very well done today! I'll see you tomorrow!") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face9#Thanks! Bye!") + sm.showNpcSpecialActionByTemplateId(3001301, "disappear", 0) + sm.sendDelay(750) + sm.spawnNpc(3001310, -142, 63) + sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) + sm.moveNpcByTemplateId(3001310, False, 300, 150) + sm.sendDelay(2000) + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendNext("#face0#Illium!") + sm.sendDelay(1000) + sm.forcedFlip(True) + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendNext("#face0#Hey, Morian! What are you still doing here?") + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendSay("#face0#I just finished my private tutoring session. How was your training?") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face9#Better than usual! Thanks to Agate, I've improved a lot. It's amazing!") + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendSay("#face0#Yeah, no offense, but you weren't exactly a mytocrystal expert when you started.") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#Ha ha, yeah. You've been really helpful too.") + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendSay("#face0#No problem! But, hey, I'm hungry! Want to grab a bite to eat?") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#I'd better not. I want to get a head start on my statue for the Festival of the Gods.") + sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian + sm.sendSay("#face0#Ah, good idea! I'll leave you to it then. Bye!") + sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium + sm.sendSay("#face0#See you!") + sm.moveNpcByTemplateId(3001310, True, 350, 150) + sm.sendDelay(2000) + sm.sendDelay(1000) + sm.sendNext("#face0#Hey, Ex? I think I should get started on my statue today. Want to point me in the direction of the lab?") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#Certainly, Sir.") + sm.showFadeTransition(0, 1000, 3000) + sm.createQuestWithQRValue(34813, "d=1;m=0;item2=1;exp=1;d2=1") + sm.moveCamera(True, 0, 0, 0) + sm.removeOverlapScreen(1000) + sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000531.py b/scripts/field/enter_402000531.py new file mode 100755 index 0000000..e589805 --- /dev/null +++ b/scripts/field/enter_402000531.py @@ -0,0 +1,72 @@ +# id 402000531 (null), field 402000531 +sm.createQuestWithQRValue(34803, "kc=0") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=61;date=20190221") +sm.createQuestWithQRValue(34803, "kc=1") +sm.playSound("DarkParty/scream2", 100) +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=62;date=20190221") +sm.createQuestWithQRValue(34803, "kc=2") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/08") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=63;date=20190221") +sm.createQuestWithQRValue(34803, "kc=3") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=64;date=20190221") +sm.createQuestWithQRValue(34803, "kc=4") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=65;date=20190221") +sm.createQuestWithQRValue(34803, "kc=5") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=66;date=20190221") +sm.createQuestWithQRValue(34803, "kc=6") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=67;date=20190221") +sm.createQuestWithQRValue(34803, "kc=7") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=68;date=20190221") +sm.createQuestWithQRValue(34803, "kc=8") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=69;date=20190221") +sm.createQuestWithQRValue(34803, "kc=9") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=70;date=20190221") +sm.createQuestWithQRValue(34803, "kc=10") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=71;date=20190221") +sm.createQuestWithQRValue(34803, "kc=11") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=72;date=20190221") +sm.createQuestWithQRValue(34803, "kc=12") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=73;date=20190221") +sm.createQuestWithQRValue(34803, "kc=13") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=74;date=20190221") +sm.createQuestWithQRValue(34803, "kc=14") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=75;date=20190221") +sm.createQuestWithQRValue(34803, "kc=15") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=76;date=20190221") +sm.createQuestWithQRValue(34803, "kc=16") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=77;date=20190221") +sm.createQuestWithQRValue(34803, "kc=17") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=78;date=20190221") +sm.createQuestWithQRValue(34803, "kc=18") +sm.showEffect("Effect/BasicEff.img/monsterCollectionGet", 0, 4) +sm.createQuestWithQRValue(18821, "count=25;lc=10:2:1:7") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=79;date=20190221") +sm.createQuestWithQRValue(34803, "kc=19") +sm.createQuestWithQRValue(18821, "count=26;lc=10:2:1:7") +sm.startQuest(34803) +sm.createQuestWithQRValue(16700, "count=80;date=20190221") +sm.createQuestWithQRValue(34803, "kc=20") +sm.createQuestWithQRValue(16700, "count=81;date=20190221") +sm.createQuestWithQRValue(34803, "kc=21") +sm.createQuestWithQRValue(16700, "count=82;date=20190221") +sm.createQuestWithQRValue(34803, "kc=22") diff --git a/scripts/field/enter_402000532.py b/scripts/field/enter_402000532.py new file mode 100755 index 0000000..d9be70b --- /dev/null +++ b/scripts/field/enter_402000532.py @@ -0,0 +1,77 @@ +# id 402000532 (null), field 402000532 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 250, 0, 0, 0, 0) +sm.spawnNpc(3001300, 495, 25) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.spawnNpc(3001324, -119, 63) +sm.showNpcSpecialActionByTemplateId(3001324, "summon", 0) +sm.spawnNpc(3001392, -311, 63) +sm.showNpcSpecialActionByTemplateId(3001392, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001324, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001392, "attack", -1) +sm.forcedMove(True, 150) +sm.moveNpcByTemplateId(3001300, True, 150, 150) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face2#Ah! Help me!") +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.sendNext("#face2#Hey! You with the tin can for a pet!") +sm.sendSay("#face2#Can you help me?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +res = sm.sendAskAccept("#face8#Huh?") +sm.sendNext("#face9#Looks like we've got no choice but to fight!") +sm.forcedMove(True, 100) +sm.moveNpcByTemplateId(3001300, True, 600, 300) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(3001300, "attack", -1) +sm.playSound("Sound/Skill.img/152001003/Attack3", 75) +sm.sendDelay(1000) +sm.blind(True, 255, 240, 240, 240, 100) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 100) +sm.sendDelay(100) +sm.blind(True, 255, 240, 240, 240, 500) +sm.sendDelay(800) +sm.resetNpcSpecialActionByTemplateId(3001300) +sm.resetNpcSpecialActionByTemplateId(3001324) +sm.resetNpcSpecialActionByTemplateId(3001392) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.showNpcSpecialActionByTemplateId(3001324, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001392, "die", 0) +sm.removeNpc(3001324) +sm.removeNpc(3001392) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face2#Phew... Illium! Ex! Thank you both so much!") +sm.sendSay("#face2#I'm really sorry for being so mean before. You didn't deserve it. Forgive me?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Uh... Why not? Anyway, I'm glad you're safe.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#I was so scared.") +sm.sendDelay(1000) +sm.sendNext("#face2#Oh no! My bag ripped! Everything must have fallen out when I was busy escaping.") +sm.speechBalloon(False, 0, 0, "!", 1000, 1, 0, 0, 0, 4, 3001337, 4600225) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#Oh, that's terrible!") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#Maybe some of the faulty robots picked them up?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#It's possible, I suppose...") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#I know you just saved me and all, but would you defeat the faulty robots and get my stuff back too?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face8#Well...") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.createQuestWithQRValue(34807, "d2=1") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000533.py b/scripts/field/enter_402000533.py new file mode 100755 index 0000000..33f3c83 --- /dev/null +++ b/scripts/field/enter_402000533.py @@ -0,0 +1,148 @@ +# id 402000533 (null), field 402000533 +sm.lockInGameUI(False, True) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3001301, 57, -42) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#Let's get started then.") +sm.spawnNpc(3001323, -243, -42) +sm.showNpcSpecialActionByTemplateId(3001323, "summon", 0) +sm.forcedFlip(True) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -10, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.sendNext("#face0#Let's see what you can do.") +sm.sendSay("#face0#Attack the Practice Robot.") +sm.forcedAction(1342, 0) +sm.showEffect("Skill/15200.img/skill/152001001/effect", 0, 0, 0, 0, 0, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Use", 100) +sm.sendDelay(300) +sm.showEffect("Skill/15200.img/skill/152001001/hit", 0, 0, 0, 0, 80746774, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Hit", 100) +sm.showNpcSpecialActionByTemplateId(3001323, "die", 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Phew!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Hm, not bad.") +sm.sendSay("#face0#Okay, try this now.") +sm.spawnNpc(3001325, -243, -42) +sm.showNpcSpecialActionByTemplateId(3001325, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#(Uh, that one looks a lot stronger than the other one.)") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Don't be afraid. Attack!") +sm.forcedAction(1342, 0) +sm.showEffect("Skill/15200.img/skill/152001001/effect", 0, 0, 0, 0, 0, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Use", 100) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3001325, "hit", -1) +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(3001325) +sm.showEffect("Effect/OnUserEff.img/emotion/ddam", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Are you sure about this?!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Focus on the mytocrystal mana.") +sm.zoomCamera(1500, 1500, 1500, -40, 0) +sm.sendDelay(1000) +sm.sendNext("#face0#You must let go of your fear and act with confidence.") +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Okay. I can do this.") +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#When you're ready, attack the targets directly in front of you.") +sm.forcedAction(1342, 0) +sm.showEffect("Skill/15200.img/skill/152001001/effect", 0, 0, 0, 0, 0, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Use", 100) +sm.sendDelay(300) +sm.showEffect("Skill/15200.img/skill/152001001/hit", 0, 0, 0, 0, 80747744, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Hit", 100) +sm.showNpcSpecialActionByTemplateId(3001325, "die", 0) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Ah hah!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Wonderful!") +sm.sendSay("#face0#The more practice you have, the more you'll perfect your skills. Just remember to trust your abilities.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Headmistress...") +sm.zoomCamera(1000, 1500, 1000, 50, 0) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.sendNext("#face0#Will I eventually...") +sm.zoomCamera(1000, 2000, 1000, 50, 30) +sm.sendDelay(500) +sm.sendNext("#face0#...become as strong as you are?") +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#With your innate talents, if you work hard...") +sm.sendSay("#face0#...you may even surpass me one day.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.zoomCamera(0, 1500, 0, -40, 0) +sm.onLayer(1500, "1", 0, -80, 0, "Effect/Direction14.img/illium/tuto/1", 4, True, -1, False) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#That was the day my destiny began to take shape.") +sm.onLayer(1500, "2", 0, -80, 0, "Effect/Direction14.img/illium/tuto/2", 4, True, -1, False) +sm.sendDelay(2000) +sm.sendNext("#face0#The best times at the academy were those I spent training with Agate.") +sm.onLayer(1500, "3", 0, -80, 0, "Effect/Direction14.img/illium/tuto/3", 4, True, -1, False) +sm.sendDelay(2000) +sm.sendNext("#face0#She taught me how to bring out the best side of myself and use it to my advantage.") +sm.spawnNpc(3001325, -243, -42) +sm.showNpcSpecialActionByTemplateId(3001325, "summon", 0) +sm.spawnNpc(3001325, -323, -42) +sm.showNpcSpecialActionByTemplateId(3001325, "summon", 0) +sm.spawnNpc(3001325, -403, -42) +sm.showNpcSpecialActionByTemplateId(3001325, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.offLayer(1000, "1", False) +sm.offLayer(1000, "2", False) +sm.offLayer(1000, "3", False) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.reservedEffectRepeat("Effect/Direction14.img/illium/text/0", True, True, 0, 0, 0) +sm.sendDelay(500) +sm.reservedEffectRepeat("Effect/Direction14.img/illium/text/0", False, False, 0, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#Now!") +sm.forcedAction(1342, 0) +sm.showEffect("Skill/15200.img/skill/152001001/effect", 0, 0, 0, 0, 0, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Use", 100) +sm.sendDelay(300) +sm.showEffect("Skill/15200.img/skill/152001001/hit", 0, 0, 0, 0, 80753453, 0, 0) +sm.showEffect("Skill/15200.img/skill/152001001/hit", 0, 0, 0, 0, 80753454, 0, 0) +sm.showEffect("Skill/15200.img/skill/152001001/hit", 0, 0, 0, 0, 80753455, 0, 0) +sm.playSound("Sound/Skill.img/152001001/Hit", 100) +sm.showNpcSpecialActionByTemplateId(3001325, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001325, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001325, "die", 0) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Whoa!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Marvelous! You got them all in one shot!!") +sm.sendSay("#face0#You're improving at an amazing rate!") +sm.forcedFlip(True) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#It's all thanks to you.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#And your hard work!") +sm.sendSay("#face0#Ready to head back now?") +sm.createQuestWithQRValue(34806, "scene=1;train=1;item1=1;item2=1;exp=1") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.lockInGameUI(False, True) +sm.warp(402000521) diff --git a/scripts/field/enter_402000534.py b/scripts/field/enter_402000534.py new file mode 100755 index 0000000..95d226c --- /dev/null +++ b/scripts/field/enter_402000534.py @@ -0,0 +1,17 @@ +# id 402000534 (null), field 402000534 +sm.createQuestWithQRValue(16700, "count=110;date=20190221") +sm.createQuestWithQRValue(16700, "count=111;date=20190221") +sm.createQuestWithQRValue(16700, "count=112;date=20190221") +sm.createQuestWithQRValue(16700, "count=113;date=20190221") +sm.createQuestWithQRValue(16700, "count=114;date=20190221") +sm.createQuestWithQRValue(16700, "count=115;date=20190221") +sm.createQuestWithQRValue(16700, "count=116;date=20190221") +sm.createQuestWithQRValue(16700, "count=117;date=20190221") +sm.createQuestWithQRValue(16700, "count=118;date=20190221") +sm.playSound("DarkParty/scream4", 100) +sm.createQuestWithQRValue(16700, "count=119;date=20190221") +sm.createQuestWithQRValue(16700, "count=120;date=20190221") +sm.createQuestWithQRValue(16700, "count=121;date=20190221") +sm.createQuestWithQRValue(16700, "count=122;date=20190221") +sm.createQuestWithQRValue(16700, "count=123;date=20190221") +sm.createQuestWithQRValue(16700, "count=124;date=20190221") diff --git a/scripts/field/enter_402000535.py b/scripts/field/enter_402000535.py new file mode 100755 index 0000000..930ff47 --- /dev/null +++ b/scripts/field/enter_402000535.py @@ -0,0 +1,32 @@ +# id 402000535 (null), field 402000535 +sm.createQuestWithQRValue(16700, "count=171;date=20190221") +sm.createQuestWithQRValue(16700, "count=172;date=20190221") +sm.createQuestWithQRValue(16700, "count=173;date=20190221") +sm.createQuestWithQRValue(16700, "count=174;date=20190221") +sm.createQuestWithQRValue(16700, "count=175;date=20190221") +sm.createQuestWithQRValue(16700, "count=176;date=20190221") +sm.createQuestWithQRValue(16700, "count=177;date=20190221") +sm.createQuestWithQRValue(16700, "count=178;date=20190221") +sm.createQuestWithQRValue(16700, "count=179;date=20190221") +sm.createQuestWithQRValue(16700, "count=180;date=20190221") +sm.createQuestWithQRValue(16700, "count=181;date=20190221") +sm.createQuestWithQRValue(16700, "count=182;date=20190221") +sm.createQuestWithQRValue(16700, "count=183;date=20190221") +sm.createQuestWithQRValue(16700, "count=184;date=20190221") +sm.createQuestWithQRValue(16700, "count=185;date=20190221") +sm.createQuestWithQRValue(16700, "count=186;date=20190221") +sm.createQuestWithQRValue(16700, "count=187;date=20190221") +sm.createQuestWithQRValue(16700, "count=188;date=20190221") +sm.createQuestWithQRValue(16700, "count=189;date=20190221") +sm.createQuestWithQRValue(16700, "count=190;date=20190221") +sm.createQuestWithQRValue(16700, "count=191;date=20190221") +sm.createQuestWithQRValue(16700, "count=192;date=20190221") +sm.createQuestWithQRValue(16700, "count=193;date=20190221") +sm.createQuestWithQRValue(16700, "count=194;date=20190221") +sm.createQuestWithQRValue(16700, "count=195;date=20190221") +sm.createQuestWithQRValue(16700, "count=196;date=20190221") +sm.createQuestWithQRValue(16700, "count=197;date=20190221") +sm.createQuestWithQRValue(16700, "count=198;date=20190221") +sm.createQuestWithQRValue(16700, "count=199;date=20190221") +sm.createQuestWithQRValue(16700, "count=200;date=20190221") +sm.createQuestWithQRValue(16700, "count=201;date=20190221") diff --git a/scripts/field/enter_402000600.py b/scripts/field/enter_402000600.py new file mode 100755 index 0000000..5809892 --- /dev/null +++ b/scripts/field/enter_402000600.py @@ -0,0 +1,64 @@ +# id 402000600 (null), field 402000600 +sm.createQuestWithQRValue(26900, "sf=0;mt=1;al=1;id=0") +sm.createQuestWithQRValue(26902, "") +sm.createQuestWithQRValue(26903, "") +sm.createQuestWithQRValue(26904, "") +sm.createQuestWithQRValue(26905, "") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") +sm.createQuestWithQRValue(27039, "") +sm.createQuestWithQRValue(14756, "d=19/02/21/12/37") +sm.createQuestWithQRValue(14755, "") +sm.createQuestWithQRValue(17803, "") +sm.createQuestWithQRValue(17803, "") +sm.createQuestWithQRValue(52998, "") +sm.createQuestWithQRValue(61585, "0=20190220;1=20190220") +sm.createQuestWithQRValue(61585, "0=20190221;1=20190220") +sm.createQuestWithQRValue(26015, "") +sm.createQuestWithQRValue(26011, "") +sm.createQuestWithQRValue(32547, "lastDecTime=2019/02/21 12:37:16") +sm.createQuestWithQRValue(64110, "chk=1") +sm.createQuestWithQRValue(64110, "chk=0") +sm.createQuestWithQRValue(18793, "q0=0;q1=0;pq=0;q2=0;q1Date=19/02/21;pqDate=19/02/20;q2Date=19/02/20") +sm.createQuestWithQRValue(18793, "q0=0;q1=0;pq=0;q2=0;q1Date=19/02/21;pqDate=19/02/20;q2Date=19/02/21") +sm.createQuestWithQRValue(18793, "q0=0;q1=0;pq=0;q2=0;q1Date=19/02/21;pqDate=19/02/21;q2Date=19/02/21") +sm.createQuestWithQRValue(15157, "guide=0;gDate=19/02/21") +sm.createQuestWithQRValue(56838, "LD=19/02/21") +sm.createQuestWithQRValue(26473, "") +sm.createQuestWithQRValue(26473, "party=3") +sm.createQuestWithQRValue(26473, "party=3;solo=3") +sm.createQuestWithQRValue(26473, "party=3;solo=3;lastdate=19/02/21") +sm.createQuestWithQRValue(18578, "count=0;rewardDay=00/01/01;miss=0;fixedDay=19/02/21/00/00") +sm.startQuest(9571) +sm.startQuest(52387) +sm.startQuest(52388) +sm.startQuest(52389) +sm.startQuest(52390) +sm.startQuest(52347) +sm.startQuest(52394) +sm.startQuest(28861) +sm.startQuest(28830) +sm.startQuest(28831) +sm.startQuest(28832) +sm.startQuest(28833) +sm.startQuest(28834) +sm.startQuest(42102) +sm.startQuest(7621) +sm.createQuestWithQRValue(64270, "") +sm.createQuestWithQRValue(64110, "chk=1") +sm.createQuestWithQRValue(64110, "chk=0") +sm.createQuestWithQRValue(63862, "") +sm.closeUI(1207) +sm.closeUI(1208) +sm.createQuestWithQRValue(16548, "count=0;todayM=0;todayT=0;lastDate=19/02/21;todayC=0") +sm.createQuestWithQRValue(63369, "chk=0;day=1") +sm.startQuest(61555) +sm.createQuestWithQRValue(62153, "lastday=19/02/21") +sm.createQuestWithQRValue(18688, "party=10;solo=10;r=02/21") +sm.createQuestWithQRValue(18273, "count=0;last=19/02/21;state1=0;state2=0") +sm.createQuestWithQRValue(18282, "count=0;last=19/02/21") +sm.createQuestWithQRValue(58980, "") +sm.startQuest(7019) +sm.createQuestWithQRValue(14662, "") +sm.createQuestWithQRValue(15708, "") +sm.completeQuestNoCheck(7707) diff --git a/scripts/field/enter_402000614.py b/scripts/field/enter_402000614.py new file mode 100755 index 0000000..8a37ecf --- /dev/null +++ b/scripts/field/enter_402000614.py @@ -0,0 +1,173 @@ +# id 402000614 (null), field 402000614 +sm.lockInGameUI(True, False) +sm.zoomCamera(0, 1000, 0, -357, 60) +sm.spawnNpc(3001511, -311, 76) +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(3001511, False, 400, 180) +sm.sendDelay(500) +sm.zoomCamera(7000, 1000, 7000, 268, 60) +sm.forcedMove(False, 750) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(3001511, "falldown", 0) +sm.sendDelay(2000) +sm.moveNpcByTemplateId(3001511, False, 250, 180) +sm.sendDelay(1000) +sm.forcedMove(False, 250) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001511) # Mar +sm.sendNext("#face0#This is where I keep all my shiny things. Isn't it pretty?") +sm.zoomCamera(2000, 1000, 2000, 650, 60) +sm.sendDelay(2000) +sm.sendNext("#face1#It's almost as pretty as the night sky.") +sm.sendSay("#face2#It's my favorite, favorite thing.") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face2#This looks very familiar...") +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(300) +sm.offLayer(300, "0", False) +sm.onLayer(500, "2", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/2", 4, True, -1, True) +sm.onLayer(500, "3", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/3", 4, True, -1, True) +sm.bgmVolume(0, 1000) +sm.sendDelay(1500) +sm.bgmVolume(-2, 300) +sm.changeBGM("Bgm43.img/Unknown Part Of City", 0, 0) +sm.onLayer(1500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/1/0", 4, True, -1, False) +sm.sendDelay(2000) +sm.onLayer(500, "d1", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/1/1", 4, True, -1, False) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/1", 100) +sm.sendDelay(3100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Now they're sending rookies like us into the field...", 50, 2500, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(3000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#They must really be hurting on the front lines.", 50, 2600, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/2", 100) +sm.sendDelay(4150) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I guess you can't be picky about troops when you lose.", 50, 3650, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/3", 100) +sm.sendDelay(4760) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#But I'm not going to complain. It got us to an elite base that much faster!", 50, 4260, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/4", 100) +sm.sendDelay(7100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Yeah, we're finally taking a big step forward.", 50, 6600, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/5", 100) +sm.sendDelay(5600) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Now we'll be able to make a difference.", 50, 5100, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/6", 100) +sm.sendDelay(5000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Soldiers forever sworn to bring peace to Grandis.", 50, 4500, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(500) +sm.onLayer(500, "d2", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/1/2", 4, True, -1, False) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/7", 100) +sm.sendDelay(3500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#We're ready. Let's get moving.", 50, 3000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/8", 100) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/8", 100) +sm.sendDelay(1900) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Yes, Brigadier General, sir!", 50, 1400, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/12", 100) +sm.sendDelay(2500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#See you at the base.", 50, 2000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/11", 100) +sm.sendDelay(2400) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Any advice, sir?", 50, 1900, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/10", 100) +sm.sendDelay(3700) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#You're good soldiers. I'm sure you'll be fine.", 50, 3200, 7, 0, -50, 0, 4, 3, 300, 300) +sm.offLayer(500, "d2", False) +sm.offLayer(500, "d1", False) +sm.offLayer(500, "d0", False) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/GLAddVoice/Back/B/1", 100) +sm.playSound("Sound/Voice4.img/GLAdd/Back/B/1", 100) +sm.sendDelay(2500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs55#For victory!", 50, 2000, 4, 0, 0, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/GLAdd/Back/B/2", 100) +sm.sendDelay(3350) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs55#Glory to the Flora!", 50, 2850, 4, 0, 0, 0, 4, 3, 300, 300) +sm.onLayer(500, "d5", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/1/0", 4, True, -1, False) +sm.onLayer(500, "d6", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/1/1", 4, True, -1, False) +sm.sendDelay(1000) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/14", 100) +sm.sendDelay(4300) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Brigadier General Limbo... He's done so much good.", 50, 3800, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/15", 100) +sm.sendDelay(3600) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#That could be me one day.", 50, 3100, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/16", 100) +sm.sendDelay(5700) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Ha! Sucking up to the boss already, huh?", 50, 4200, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/17", 100) +sm.sendDelay(3600) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#What!? I'm serious! Don't you want to be that great too?", 50, 1600, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/B/18", 100) +sm.sendDelay(3500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#One step at a time. We're going to be late. Let's go.", 50, 3000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.offLayer(500, "d6", False) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/19", 100) +sm.sendDelay(3500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Albaire!", 50, 3000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(1500) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/22", 100) +sm.sendDelay(2400) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I guess it's really time for us to go.", 50, 1900, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/B/Male/23", 100) +sm.sendDelay(5000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I can't believe we've already been assigned to such an important base.", 50, 4500, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(1500) +sm.onLayer(500, "d3", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/1/3", 4, True, -1, False) +sm.sendDelay(1500) +sm.offLayer(500, "d3", False) +sm.offLayer(500, "d5", False) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.offLayer(300, "0", False) +sm.offLayer(300, "2", False) +sm.offLayer(300, "3", False) +sm.sendDelay(500) +sm.sendNext("#face3#(I have so many memories of my life as a soldier... and the one who fought alongside me...)") +sm.sendSay("#face3#(The man who attacked me... We were friends before...)") +sm.sendSay("#face5#(We're wearing the same uniform, so we must have fought on the same side, but then... why would he attack me?)") +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.flipNpcByTemplateId(3001511, True) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001511) # Mar +sm.sendNext("#face0#Are you okay?") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face0#Fine. Let's get back to the refuge.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.sayMonologue("#fs22##fnArial#I returned there several times after that.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/C/Male/1", 100) +sm.sayMonologue("#fs22##fnArial#But I recalled nothing more from my past.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/C/Male/2", 100) +sm.sayMonologue("#fs22##fnArial#\r\nI'm sure of one thing though.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/C/Male/3", 100) +sm.sayMonologue("#fs22##fnArial#There's still hope for us.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/C/Male/4", 100) +sm.sayMonologue("#fs22##fnArial#A way to escape this planet.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/C/Male/5", 100) +sm.sayMonologue("#fs22##fnArial#\r\n\r\nThe power that broken crystal contains is our best chance. #fnᄍ￙ᅤ￁#", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/C/Male/6", 100) +sm.sayMonologue("#fs22##fnArial#All we have to do is find the rest of it.", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/C/Male/7", 100) +sm.sendDelay(1000) +sm.createQuestWithQRValue(34924, "e1=1") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.lockInGameUI(False, True) +sm.warp(402000600) diff --git a/scripts/field/enter_402000615.py b/scripts/field/enter_402000615.py new file mode 100755 index 0000000..b0ac813 --- /dev/null +++ b/scripts/field/enter_402000615.py @@ -0,0 +1,147 @@ +# id 402000615 (null), field 402000615 +sm.setMapTaggedObjectVisible("core0", False, 0, 0) +sm.setMapTaggedObjectVisible("core1", False, 0, 0) +if not sm.hasHadQuest(34901): + sm.changeBGM("Bgm28.img/helisiumWarcry", 0, 0) + sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001516, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001515, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001521, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001522, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001514, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001520, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001519, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001517, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001518, "summon", 0) + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.zoomCamera(0, 3000, 0, 200, -130) + sm.sendDelay(500) + sm.sendDelay(500) + sm.speechBalloon(True, 0, 0, "Our refuge isn't safe anymore.", 1000, 0, 0, 0, 0, 4, 3001517, 102647) + sm.sendDelay(1100) + sm.speechBalloon(True, 0, 0, "I'm so scared.", 1000, 0, 0, 0, 0, 4, 3001518, 102647) + sm.zoomCamera(3000, 2000, 3000, 440, 150) + sm.sendDelay(3500) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendNext("#face2#It's okay. It might be tough, but we can rebuild our home if we have to. At least we're all safe. That's what matters.") + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendSay("#face2#I'm detecting monster signals everywhere. We need to be ready to move.") + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendSay("#face2#So, Ark, was it? What do you plan to do?") + sm.zoomCamera(3000, 2000, 3000, 150, 150) + sm.sendDelay(1000) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face0#Don't worry, I won't bother you. Wouldn't want you to take me prisoner again... Thanks for letting me go, by the way.") + sm.sendDelay(2000) + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendNext("#face2#Oh, that's not what I meant. I don't think you'll hurt us. I just think we'd be safer if we all stick together.") + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendSay("#face0#It's up to you. But since you're not an enemy, we've got no problem with you staying.") + sm.blind(True, 150, 0, 0, 0, 3000) + sm.sendDelay(500) + sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo + sm.sendNext("#face3#Won't get eaten by monsters! No! No! No!\r\nCause we're gonna stop talking! Go! Go! Go!") + sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs + sm.sendSay("#face0#He's right. We don't have time to chat. Let's do a headcount. Zippy, Salvo, Ferret, myself, Digs, and Grit... One, two, three, four...") + sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit + sm.sendSay("#face0#Bull, Slink, all the kids... Wait a minute. Are we missing a kid?!") + sm.sendDelay(1100) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face0#(Hm, they seem nice enough. And they don't think I'm a monster anymore. Maybe traveling with them wouldn't be such a bad idea.)") + sm.sendSay("#face0#(At least for a little while. Once I get more information and figure out who I am... Ark... I can move on.)") + sm.sendDelay(300) + sm.blind(False, 0, 0, 0, 0, 300) + sm.sendDelay(300) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.zoomCamera(0, 2000, 0, 410, 150) + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendNext("#face3# Mar?!") + sm.zoomCamera(500, 3000, 500, 410, 150) + sm.sendNext("#face1#Mar is missing! Oh no. He always takes a nap in the refuge this time of day! He must still be there!") + sm.blind(False, 0, 0, 0, 0, 500) + sm.sendDelay(500) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.zoomCamera(0, 2000, 0, 150, 150) + sm.blind(True, 150, 0, 0, 0, 2000) + sm.sendDelay(500) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face5#(The caravan is distraught over leaving someone behind, but the monsters are closing in fast. They need to get out of here.)") + sm.sendSay("#face5#...") + sm.sendSay("#face5#(If I send the others on and go after the kid myself, they might all make it.)") + sm.sendDelay(300) + sm.blind(False, 0, 0, 0, 0, 300) + sm.zoomCamera(3000, 2000, 3000, 380, 150) + sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy + sm.sendNext("#face3#We can't leave Mar behind, but there are so many monsters! What do we do?") + sm.forcedMove(False, 270) + sm.sendDelay(3000) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face0#You all need to hide now. I'll get Mar. Where will I find him?") + sm.sendDelay(1000) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) + sm.closeUI(1207) + sm.closeUI(1208) +elif not sm.hasHadQuest(34928): + sm.lockInGameUI(True, False) + sm.zoomCamera(0, 1000, 0, 267, 60) + sm.spawnNpc(3001510, 280, 95) + sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendNext("#face0#I'm picking up a signal somewhere near here.") + sm.sendDelay(1000) + sm.zoomCamera(3000, 2000, 3000, 765, 150) + sm.moveNpcByTemplateId(3001510, False, 600, 100) + sm.sendDelay(1000) + sm.forcedMove(False, 520) + sm.sendDelay(2000) + sm.sendNext("#face4#This way, I think. Just below here.") + sm.zoomCamera(2000, 2000, 2000, 765, -10) + sm.sendDelay(2000) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face3#(There's something nagging at the back of my mind, but I can't put my finger on what.)") + sm.zoomCamera(500, 2000, 500, 765, 150) + sm.flipNpcByTemplateId(3001510, True) + sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret + sm.sendNext("#face0#Right here, Ark.") + sm.sendDelay(1000) + sm.sendDelay(1000) + sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 0, -100, 0, 0, 864975, 0, 0) + sm.sendDelay(300) + sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 0, -100, 0, 0, 864975, 0, 0) + sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 0, -100, 0, 0, 864975, 0, 0) + sm.sendDelay(500) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) + sm.createQuestWithQRValue(34928, "e1=1") + sm.createQuestWithQRValue(34995, "00=h1;01=h1;10=h0;02=h1;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h1;16=h0;17=h0;09=h0") + sm.setMapTaggedObjectVisible("core0", True, 0, 0) + sm.setMapTaggedObjectVisible("core1", True, 0, 0) diff --git a/scripts/field/enter_402000620.py b/scripts/field/enter_402000620.py new file mode 100755 index 0000000..ffb638b --- /dev/null +++ b/scripts/field/enter_402000620.py @@ -0,0 +1,15 @@ +# id 402000620 (null), field 402000620 +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001514, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001515, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001516, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001517, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001518, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001519, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001520, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001521, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001522, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) diff --git a/scripts/field/enter_402000630.py b/scripts/field/enter_402000630.py new file mode 100755 index 0000000..4cae9f0 --- /dev/null +++ b/scripts/field/enter_402000630.py @@ -0,0 +1,39 @@ +# id 402000630 (null), field 402000630 +sm.createQuestWithQRValue(34931, "dir=1;exp=1") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.zoomCamera(0, 2000, 0, -142, -250) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.zoomCamera(3000, 1000, 3000, 100, 0) +sm.sendDelay(3500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face2#So this is what's below the sand.") +sm.sendSay("#face2#And now we've all been separated.") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face0#Well...") +sm.blind(True, 150, 0, 0, 0, 500) +sm.playSound("Sound/SoundEff.img/PinkBean/expectation", 100) +sm.onLayer(500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/7/1", 4, True, -1, False) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 500) +sm.offLayer(500, "d0", False) +sm.sendDelay(500) +sm.sendNext("#face0#At least we got this.") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#Wow! You managed to catch that while we were falling? Impressive!") +sm.sendSay("#face2#I'm not happy about being this far underground. What was that demolitions dummy thinking?!") +sm.sendSay("#face2#Now we're going to waste a bunch of time we don't have tracking everyone down.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000633.py b/scripts/field/enter_402000633.py new file mode 100755 index 0000000..8a7d78a --- /dev/null +++ b/scripts/field/enter_402000633.py @@ -0,0 +1,34 @@ +# id 402000633 (null), field 402000633 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3001512, -745, -150) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -657, -150) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendNext("#face0#Ferret, Ark!! You're okay!") +sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit +sm.sendSay("#face0#I don't remember anything after the fall. I just woke up here.") +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendSay("#face0#The exit's straight above us.") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#We've got to find Salvo before we can leave.") +sm.sendSay("#face4#Of course he's the one that's missing.") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face4#Calm down. We'll find him.") +sm.createQuestWithQRValue(34933, "dir=1;exp=1") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000635.py b/scripts/field/enter_402000635.py new file mode 100755 index 0000000..6613f83 --- /dev/null +++ b/scripts/field/enter_402000635.py @@ -0,0 +1,148 @@ +# id 402000635 (null), field 402000635 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedFlip(True) +sm.zoomCamera(2000, 2000, 2000, -600, 120) +sm.sendDelay(2000) +sm.spawnNpc(3001512, -980, 20) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -900, 20) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001510, -762, 20) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.moveNpcByTemplateId(3001510, False, 150, 120) +sm.moveNpcByTemplateId(3001512, False, 150, 120) +sm.moveNpcByTemplateId(3001513, False, 150, 120) +sm.forcedMove(False, 150) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face3#Salvo? Where are you?") +sm.blind(False, 0, 0, 0, 0, 500) +sm.zoomCamera(2000, 1000, 2000, -240, -10) +sm.sendDelay(2000) +sm.spawnNpc(3001509, -250, 20) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face2#I'm right here!") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face3#Good! You're safe... What were you thinking?!") +sm.sendSay("#face3#Follow us and be quick about it. We've found a way out.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face2#Aw, you do care! Okay!") +sm.flipNpcByTemplateId(3001509, False) +sm.moveNpcByTemplateId(3001510, False, 550, 150) +sm.moveNpcByTemplateId(3001512, False, 550, 150) +sm.moveNpcByTemplateId(3001513, False, 550, 150) +sm.forcedMove(False, 600) +sm.zoomCamera(4000, 1000, 4000, 280, -20) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#Ark! Where are you going?") +sm.sendDelay(4000) +sm.sendNext("#face2#Something about this signal isn't right...") +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendSay("#face0#This place is really scary.") +sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit +sm.sendSay("#face0#We need to get out of here!") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face7#Something's wrong... what... augh...") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face2#All these resonating waves make me want to sing!") +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.forcedAction(4, 999999) +sm.sendDelay(300) +sm.offLayer(300, "0", False) +sm.sendDelay(300) +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendNext("#face0#Let's get going.") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face7#Augh!") +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.sendDelay(300) +sm.offLayer(300, "0", False) +sm.sendDelay(300) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face2#Ark doesn't look so good!") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face0#Hey, Ark!") +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendSay("#face0#Hang on!") +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(300) +sm.onLayer(500, "2", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/2", 4, True, -1, True) +sm.onLayer(500, "3", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/3", 4, True, -1, True) +sm.offLayer(300, "0", False) +sm.onLayer(1000, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/2/0", 4, True, -1, False) +sm.sendDelay(1000) +sm.playSound("Sound/Voice4.img/Ark/Back/C/Male/1", 100) +sm.sendDelay(5150) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#They're no match for us at all.", 50, 4650, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.offLayer(1000, "d0", False) +sm.onLayer(1000, "d1", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/2/1", 4, True, -1, False) +sm.sendDelay(1000) +sm.playSound("Sound/Voice4.img/Ark/Back/C/Male/2", 100) +sm.sendDelay(5150) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#They call this a war for peace?", 50, 4650, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/C/Male/3", 100) +sm.sendDelay(5600) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#This is no war... It's a massacre.", 50, 5100, 7, 0, -50, 0, 4, 3, 300, 300) +sm.offLayer(500, "d1", False) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/C/4", 100) +sm.sendDelay(4100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs65#Ark! What are you doing?", 50, 3600, 4, 0, 0, 0, 4, 3, 300, 300) +sm.onLayer(1000, "d2", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/2/2", 4, True, -1, False) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/C/5", 100) +sm.sendDelay(4400) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Are you out of your mind?!", 50, 3900, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/C/Male/6", 100) +sm.sendDelay(5600) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Albaire, I can't do this any more.", 50, 5100, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/C/Male/7", 100) +sm.sendDelay(6200) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#It's not right. It's not right at all.", 50, 5700, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/C/8", 100) +sm.sendDelay(3200) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Don't be so naive.", 50, 2700, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/C/9", 100) +sm.sendDelay(6950) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Nothing this great comes without sacrifice.", 50, 6450, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/C/10", 100) +sm.sendDelay(5750) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#And no one said it would be pretty.", 50, 5250, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/C/11", 100) +sm.sendDelay(8000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Now get it together. This is for the greater good.", 50, 7500, 7, 0, -50, 0, 4, 3, 300, 300) +sm.offLayer(500, "d2", False) +sm.sendDelay(500) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.offLayer(300, "2", False) +sm.offLayer(300, "3", False) +sm.sendDelay(300) +sm.offLayer(300, "0", False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face0#Ark! Hello?") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face2#Ark's signal is being disrupted somehow.") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h1;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;09=h0") +sm.createQuestWithQRValue(34934, "dir=1;exp=1") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000640.py b/scripts/field/enter_402000640.py new file mode 100755 index 0000000..d62be59 --- /dev/null +++ b/scripts/field/enter_402000640.py @@ -0,0 +1,98 @@ +# id 402000640 (null), field 402000640 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 369, 250) +sm.forcedAction(4, 999999) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(4500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Meanwhile, Far from the Refuge", 100, 1200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face6#When did I get here?") +sm.sendSay("#face8#At this rate, the darkness will overtake me any moment. But... I have to keep fighting it.") +sm.sendSay("#face1#I need to use this power to protect my friends.") +sm.zoomCamera(7000, 2000, 7000, 369, 350) +sm.sendDelay(2500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.onLayer(500, "999", 0, -5, 0, "Effect/Direction17.img/effect/ark/ArkGaugeCooltime/1366", 4, True, -1, False) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/1", 100) +sm.sendDelay(6200) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#You're not looking too good... friend.", 50, 5700, 4, 0, 0, 0, 4, 3, 300, 300) +sm.offLayer(500, "999", False) +sm.sendDelay(500) +sm.sendNext("#face6#...") +sm.onLayer(500, "999", 0, -5, 0, "Effect/Direction17.img/effect/ark/ArkGaugeCooltime/1366", 4, True, -1, False) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/2", 100) +sm.sendDelay(6050) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#So, you finally realized you need me.", 50, 5550, 4, 0, 0, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/3", 100) +sm.sendDelay(5450) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#This must be something important.", 50, 4950, 4, 0, 0, 0, 4, 3, 300, 300) +sm.offLayer(500, "999", False) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/4", 100) +sm.sendNext("#face6#The specter power in me... It's you?") +sm.onLayer(500, "999", 0, -5, 0, "Effect/Direction17.img/effect/ark/ArkGaugeCooltime/1366", 4, True, -1, False) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/5", 100) +sm.sendDelay(5750) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Indeed it is. I am part of you now.", 50, 5250, 4, 0, 0, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/6", 100) +sm.sendDelay(9050) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#So, don't worry. You can trust me to take over from here.", 50, 8550, 4, 0, 0, 0, 4, 3, 300, 300) +sm.offLayer(500, "999", False) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/7", 100) +sm.sendNext("#face6#I'll never trust you.") +sm.onLayer(500, "999", 0, -5, 0, "Effect/Direction17.img/effect/ark/ArkGaugeCooltime/1366", 4, True, -1, False) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/8", 100) +sm.sendDelay(6500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Do you want to save your friends or not?", 50, 6000, 4, 0, 0, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/9", 100) +sm.sendDelay(7400) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#If so, you really don't have much of a choice.", 50, 6900, 4, 0, 0, 0, 4, 3, 300, 300) +sm.offLayer(500, "999", False) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/10", 100) +sm.sendNext("#face5#...") +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/11", 100) +sm.sendSay("#face6#That doesn't mean I have to give you full control.") +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/12", 100) +sm.sendSay("#face6#And I definitely don't have to like what you are.") +sm.onLayer(500, "999", 0, -5, 0, "Effect/Direction17.img/effect/ark/ArkGaugeCooltime/1366", 4, True, -1, False) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/13", 100) +sm.sendDelay(2500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Tsk...", 50, 2000, 4, 0, 0, 0, 4, 3, 300, 300) +sm.offLayer(500, "999", False) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/14", 100) +sm.sendNext("#face6#I'll use your power this time. They need us.") +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/15", 100) +sm.sendSay("#face0#But don't forget that I make the decisions.") +sm.playSound("Sound/Voice4.img/Ark/Etc/B/Male/16", 100) +sm.sendSay("#face8#You don't.") +sm.onLayer(500, "999", 0, -5, 0, "Effect/Direction17.img/effect/ark/ArkGaugeCooltime/1366", 4, True, -1, False) +sm.sendDelay(500) +sm.offLayer(500, "999", False) +sm.createQuestWithQRValue(34938, "dir=1;exp=1") +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.sendDelay(300) +sm.blind(True, 255, 240, 240, 240, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.zoomCamera(1000, 1000, 1000, 369, 200) +sm.forcedAction(4, 999999) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_402000644.py b/scripts/field/enter_402000644.py new file mode 100755 index 0000000..ac7043f --- /dev/null +++ b/scripts/field/enter_402000644.py @@ -0,0 +1,168 @@ +# id 402000644 (null), field 402000644 +sm.setMapTaggedObjectVisible("sand", False, 0, 0) +sm.changeBGM("Bgm28.img/helisiumWarcry", 0, 0) +sm.startQuest(28126) +if sm.hasHadQuest(34939) and not sm.hasHadQuest(34940): + sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001512, "knockdown", -1) + sm.showNpcSpecialActionByTemplateId(3001513, "knockdown", -1) + sm.showNpcSpecialActionByTemplateId(3001509, "knockdown", -1) + sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;09=h0") + sm.createQuestWithQRValue(34940, "dir=1;enter=1;exp=1") + sm.setMapTaggedObjectVisible("sand", True, 0, 0) + sm.lockInGameUI(True, False) + sm.blind(True, 255, 0, 0, 0, 0) + sm.removeAdditionalEffect() + sm.changeBGM("Bgm00.img/Silence", 0, 0) + sm.spawnNpc(3001530, -110, 200) + sm.showNpcSpecialActionByTemplateId(3001530, "summon", 0) + sm.spawnNpc(3001531, -40, 200) + sm.showNpcSpecialActionByTemplateId(3001531, "summon", 0) + sm.spawnNpc(3001530, 20, 200) + sm.showNpcSpecialActionByTemplateId(3001530, "summon", 0) + sm.spawnNpc(3001531, 90, 200) + sm.showNpcSpecialActionByTemplateId(3001531, "summon", 0) + sm.spawnNpc(3001530, 150, 200) + sm.showNpcSpecialActionByTemplateId(3001530, "summon", 0) + sm.spawnNpc(3001531, 210, 200) + sm.showNpcSpecialActionByTemplateId(3001531, "summon", 0) + sm.spawnNpc(3001530, 270, 200) + sm.showNpcSpecialActionByTemplateId(3001530, "summon", 0) + sm.spawnNpc(3001531, -1300, 200) + sm.showNpcSpecialActionByTemplateId(3001531, "summon", 0) + sm.spawnNpc(3001512, -644, 350) + sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) + sm.spawnNpc(3001513, -498, 350) + sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) + sm.spawnNpc(3001509, -219, 350) + sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) + sm.zoomCamera(0, 1500, 0, -325, 220) + sm.showNpcSpecialActionByTemplateId(3001512, "knockdown", -1) + sm.showNpcSpecialActionByTemplateId(3001513, "knockdown", -1) + sm.showNpcSpecialActionByTemplateId(3001509, "knockdown", -1) + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(1200) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1400) + sm.spawnNpc(3001504, -325, 200) + sm.showNpcSpecialActionByTemplateId(3001504, "summon", 0) + sm.showNpcSpecialActionByTemplateId(3001504, "appear", 1) + sm.sendDelay(1200) + sm.showNpcSpecialActionByTemplateId(3001504, "stand", 1) + sm.sendDelay(500) + sm.zoomCamera(1000, 1500, 1000, -140, 220) + sm.sendDelay(1000) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire + sm.sendNext("#face0#It appears the opposition is no longer able to fight. Secure the target.") + sm.sendDelay(1000) + sm.sendDelay(1500) + sm.speechBalloon(True, 0, 0, "Yes, sir!", 1000, 0, 0, 0, 0, 4, 3001530, 102647) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.zoomCamera(0, 2000, 0, -800, 250) + sm.sendDelay(500) + sm.zoomCamera(1500, 1000, 1500, -400, 200) + sm.forcedMove(False, 200) + sm.sendDelay(2500) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face5#(My old friend... The one from my memories.)") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/1", 100) + sm.sendSay("#face5#(Though he's much older and wearing a colonel's uniform. How long has it been?)") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/2", 100) + sm.sendSay("#face8#(He's got a completely different demeanor. Time isn't the only thing that's changed him.)") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/3", 100) + sm.sendDelay(1000) + sm.zoomCamera(0, 2000, 0, -150, 250) + sm.sendDelay(300) + sm.zoomCamera(2000, 2000, 2000, -420, 250) + sm.sendDelay(1500) + sm.sendNext("#face5#War for peace. It was all a lie.") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/4", 100) + sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire + sm.sendSay("#face0#What does it matter?") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/5", 100) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face8#It matters to the people of this planet.") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/6", 100) + sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire + sm.sendSay("#face1#You know, it's sad to see you like this.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/7", 100) + sm.sendDelay(1000) + sm.sendNext("#face0#After you first betrayed us, I had hoped saving you would change your mind.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/8", 100) + sm.sendSay("#face1#But it seems I was wrong.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/9", 100) + sm.sendSay("#face0#Ah, well. It's all in the past now anyway.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/10", 100) + sm.sendSay("#face1#Step aside, Ark. I'm not here for you.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/11", 100) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face5#...") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/12", 100) + sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire + sm.sendSay("#face1#Don't side with these barbarians out of some misplaced sense of pity. You can still walk away from this.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/13", 100) + sm.sendSay("#face1#But if you interfere with the High Flora's mission, I'll have to destroy you.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/14", 100) + sm.sendDelay(1000) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.zoomCamera(0, 1000, 0, -400, 200) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendNext("#face5#Mission?") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/15", 100) + sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire + sm.sendSay("#face1#The mission to remake the galaxy in the High Flora image. You may have turned on what we believe, but I didn't.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/16", 100) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face5#What you believe in and fight for is nothing more than a massacre.") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/17", 100) + sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire + sm.sendSay("#face1#It's not my problem if these people refuse to accept the Flora and our ways as superior.") + sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/B/18", 100) + sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark + sm.sendSay("#face5#...") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/19", 100) + sm.zoomCamera(1000, 1500, 1000, -550, 230) + sm.sendDelay(1500) + sm.sendNext("#face8#What happened to bringing peace to Grandis?") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/20", 100) + sm.sendSay("#face5#What happened to making a difference like we always said we would?") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/21", 100) + sm.zoomCamera(500, 2000, 500, -550, 250) + sm.sendDelay(900) + sm.sendNext("#face5#How many innocent people have to die in the name of your precious mission?") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/22", 100) + sm.sendSay("#face5#The only thing that you've brought to this war is more hate and destruction.") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/23", 100) + sm.sendSay("#face5#I won't make the same mistake you have. I'd rather die for what I know is right.") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/24", 100) + sm.zoomCamera(500, 3000, 500, -550, 270) + sm.sendDelay(900) + sm.sendNext("#face8#Right here, right now. This is where it ends.") + sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/B/Male/25", 100) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) + sm.warp(940205900) + diff --git a/scripts/field/enter_402090000.py b/scripts/field/enter_402090000.py new file mode 100755 index 0000000..80906ba --- /dev/null +++ b/scripts/field/enter_402090000.py @@ -0,0 +1,274 @@ +# id 402090000 (null), field 402090000 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.setMapTaggedObjectVisible("core0", False, 0, 0) +sm.setMapTaggedObjectVisible("core1", False, 0, 0) +sm.forcedFlip(True) +sm.spawnNpc(3001508, -2680, 263) +sm.showNpcSpecialActionByTemplateId(3001508, "summon", 0) +sm.spawnNpc(3001509, -2750, 263) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.spawnNpc(3001510, -2400, 263) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.sendDelay(1000) +sm.changeBGM("Bgm48.img/Doomsday_FULL", 0, 0) +sm.onLayer(500, "2", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/2", 4, True, -1, True) +sm.onLayer(500, "3", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/3", 4, True, -1, True) +sm.sendDelay(2500) +sm.onLayer(1500, "d0", 0, -80, 1, "Effect/Direction17.img/effect/ark/illust/6/0", 4, True, -1, False) +sm.sendDelay(2000) +sm.sendDelay(7850) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/1", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#For too long, we endured war for the sake of war.", 50, 7350, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(8150) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/2", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#We championed selfish causes for misguided leaders.", 50, 7650, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(6200) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/3", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#We wasted countless lives for nothing.", 50, 5700, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(9500) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/4", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#But now, we must rise together as one for a greater purpose.", 50, 9000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(7100) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/5", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#By fighting together, we can end this chaos.", 50, 6600, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(2500) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/6", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Join me!", 50, 2000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(7250) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/7", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Dedicate your lives to the glory of our race.", 50, 6750, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(10550) +sm.playExclSoundWithDownBGM("Voice4.img/GLAdd/Mono/AA/8", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#It is time for the noble High Flora to lead Grandis into a new age!", 50, 10050, 7, 0, -50, 0, 4, 3, 300, 300) +sm.offLayer(300, "d0", False) +sm.offLayer(300, "2", False) +sm.offLayer(300, "3", False) +sm.sendDelay(1500) +sm.sendDelay(2300) +sm.spineScreen(False, True, True, 0, "Effect/Direction17.img/effect/ark/fire/0/front_particle","animation","00") +sm.spineScreen(False, True, True, 0, "Effect/Direction17.img/effect/ark/fire/1/fire_particle_01","animation","01") +sm.spineScreen(False, True, True, 0, "Effect/Direction17.img/effect/ark/fire/2/fire_particle_02","animation","02") +sm.sendDelay(2000) +sm.sayMonologue("#fs22##fnArial#I thought I was fighting for something greater than myself, for peace.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/1", 100) +sm.sayMonologue("#fs22##fnArial#\r\nBut I soon discovered it was just more greed and hate.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/2", 100) +sm.sayMonologue("#fs22##fnArial#No longer would I blindly obey the whims of a corrupt leader.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/3", 100) +sm.sayMonologue("#fs22##fnArial#\r\nInstead, I would fight alongside the weak and defend them.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/4", 100) +sm.sayMonologue("#fs22#\r\n\r\n\r\n#fnArial#I thought if enough of us stood together, we could make a difference.", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/5", 100) +sm.sayMonologue("#fs22##fnArial#It may have been treason, but I knew it was the right choice.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/6", 100) +sm.sayMonologue("#fs22##fnArial#If I could help stop the madness, it would be worth it.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/7", 100) +sm.sayMonologue("#fs22##fnArial#\r\n\r\nIf there were ever a time to put my life on the line for a cause, it was then.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/8", 100) +sm.sayMonologue("#fs22##fnArial#If I fell in battle fighting for something I truly believed in...", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/9", 100) +sm.sayMonologue("#fs22##fnArial#Even if no one knew my name or what I did for them...", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/10", 100) +sm.sayMonologue("#fs22##fnArial#\r\nI would be satisfied. After all, it was never about the glory.", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/11", 100) +sm.sendDelay(1000) +sm.sendDelay(5300) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/A/Male/12", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs45#But fate had other plans for me.", 50, 4800, 4, 0, 0, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.offSpineScreen("00", 0, "", 0) +sm.offSpineScreen("01", 0, "", 0) +sm.offSpineScreen("02", 0, "", 0) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(300) +sm.onLayer(500, "2", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/2", 4, True, -1, True) +sm.onLayer(500, "3", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/3", 4, True, -1, True) +sm.offLayer(300, "0", False) +sm.sendDelay(2500) +sm.onLayer(1500, "d1", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/0/0", 4, True, -1, False) +sm.sendDelay(1000) +sm.sendDelay(6500) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/1", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I did all I could, but it wasn't enough.", 50, 6000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(6800) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/2", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Maybe it was always meant to end this way.", 50, 6300, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(4400) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/3", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Or maybe it was just me...", 50, 3900, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(3500) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/4", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Is this how it ends?", 50, 3000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.offLayer(300, "d1", False) +sm.sendDelay(1000) +sm.sendDelay(2500) +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/A/7", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs65#Ark!", 50, 2000, 4, 0, 0, 0, 4, 3, 300, 300) +sm.spineScreen(True, False, True, 0, "Map/Effect2.img/HofM/ACT1_bye/whiteback2/skeleton","animation","") +sm.sendDelay(2000) +sm.onLayer(300, "d2", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/0/1", 4, True, -1, False) +sm.sendDelay(3000) +sm.playSound("Sound/Voice4.img/Ark/Now/A/Male/3", 100) +sm.sendDelay(2000) +sm.offLayer(300, "d2", False) +sm.offLayer(300, "2", False) +sm.offLayer(300, "3", False) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.bgmVolume(0, 2000) +sm.sendDelay(2300) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.bgmVolume(-1, 1000) +sm.offLayer(300, "0", False) +sm.sendDelay(1000) +sm.zoomCamera(0, 1000, 0, 2, 180) +sm.forcedAction(25, 999999) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/back", 9999999, 0, 0, -120, 0, 0, 0) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/front_0", 9999999, 0, 0, 1, 0, 0, 0) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 10000, 0, 0, 2, 0, 0, 0) +sm.blind(True, 255, 240, 240, 240, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.zoomCamera(0, 1000, 0, 2, 180) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face1#What happened?") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/9", 100) +sm.sendDelay(6000) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 0, 0, 0, 2, 0, 0, 0) +sm.sendDelay(500) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/front_1", 0, 0, 0, 1, 0, 0, 0) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 0, 0, 0, 2, 0, 0, 0) +sm.sendDelay(1000) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/front_2", 9999, 0, 0, 1, 0, 0, 0) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 0, 0, 0, 2, 0, 0, 0) +sm.sendDelay(500) +sm.zoomCamera(3000, 1500, 3000, 250, -50) +sm.sendDelay(4000) +sm.showFadeTransition(0, 300, 300) +sm.sendDelay(300) +sm.removeOverlapScreen(300) +sm.zoomCamera(0, 1500, 0, -2350, -50) +sm.moveNpcByTemplateId(3001508, False, 1200, 80) +sm.moveNpcByTemplateId(3001509, False, 1050, 80) +sm.moveNpcByTemplateId(3001510, False, 1200, 80) +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/cadena/energy_running2", 150) +sm.zoomCamera(3000, 1000, 3000, -2300, 180) +sm.playSound("Sound/SoundEff.img/ark/flare_ready", 100) +sm.sendDelay(3000) +sm.zoomCamera(17000, 1000, 17000, -1050, 180) +sm.playSound("Sound/SoundEff.img/ark/flare_ready", 100) +sm.sendDelay(2000) +sm.playSound("Sound/SoundEff.img/cadena/energy_running2", 150) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face3#Searching today! Searching forever! \r\nAlways searching! Always together!") +sm.sendSay("#face4#Keep on searching!") +sm.playSound("Sound/SoundEff.img/ark/flare_ready", 100) +sm.sendSay("#face3#North! South! East! West! Always searching for the best! \r\nUp! Down! Left! Right! Search all day! Search all night!") +sm.sendSay("#face4#Keep on searching!") +sm.playSound("Sound/SoundEff.img/ark/flare_ready", 100) +sm.sendSay("#face3#No, no, nowhere at all! \r\nFate has brought us to a crawl!") +sm.sendSay("#face4#Searching today! Searching forever! \r\nI'll search the skies for this endeavor!") +sm.playSound("Sound/SoundEff.img/cadena/energy_running2", 150) +sm.sendSay("#face0#Ack! Cough!") +sm.playSound("Sound/SoundEff.img/ark/flare_ready", 100) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ark/flare_ready", 100) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#Oh! Are you finally done? I couldn't hear myself think over all that racket! Now I can focus on getting a good signal.") +sm.moveNpcByTemplateId(3001509, False, 50, 90) +sm.zoomCamera(1000, 1000, 1000, -1200, 180) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face1#Cough! Cough! Racket?\r\nHow could you NOT like my work song?") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#If it interferes with my work, then it's not a work song. It's just noise.") +sm.zoomCamera(1000, 2000, 1000, -1500, 320) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face1#How dare you! I don't have to take that! Prepare to be further annoyed!!") +sm.zoomCamera(1000, 2000, 1000, -1350, 320) +sm.moveNpcByTemplateId(3001510, True, 1, 80) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#You sing like a box of mice at feeding time!") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face1#And you spend way too much time working and being a grump!") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face2#Stop it, you two!\r\nFriends don't fight!") +sm.sendSay("#face3#Shake hands and apologize, or I'll- I'll make you hug each other!") +sm.sendDelay(300) +sm.flipNpcByTemplateId(3001508, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, False) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face3#Who cares if I'm a grump?! I do something useful!") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face1#Singing is useful too! ") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face3#Not again...") +sm.sendSay("#face2#Please, you two. Just... get along for one day?!\r\nWe haven't gotten anything done!") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#Grrr...") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face0#...") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#Fine. I'm sorry.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face3#I'm sorry too. You just don't understand my music.") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face3#It's no one's fault. Today just started out on the wrong foot.") +sm.moveNpcByTemplateId(3001508, False, 60, 120) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(3001508, True, 30, 120) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(3001508, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001508, False) +sm.sendDelay(500) +sm.showEffect("Effect/Direction17.img/effect/ark/sand/wind", 999999, 0, 0, 2, 0, 0, 0) +sm.sendDelay(300) +sm.moveNpcByTemplateId(3001508, True, 10, 100) +sm.sendNext("#face2#Eh?!") +sm.sendDelay(2000) +sm.moveNpcByTemplateId(3001508, True, 50, 100) +sm.sendDelay(1000) +sm.sendNext("#face3#Ahh!") +sm.zoomCamera(1000, 2000, 1000, -1350, -400) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face0#Whoa...") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face2#This lifeform is from... somewhere else.") +sm.sendDelay(3000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402090001) diff --git a/scripts/field/enter_402090001.py b/scripts/field/enter_402090001.py new file mode 100755 index 0000000..f80f534 --- /dev/null +++ b/scripts/field/enter_402090001.py @@ -0,0 +1,259 @@ +# id 402090001 (null), field 402090001 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.zoomCamera(0, 1000, 0, -303, -545) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.sendDelay(2000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Several Days Later, Caravan Refuge Entrance", 100, 2200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.zoomCamera(3000, 1000, 3000, -303, 70) +sm.sendDelay(4000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face1#Ugh... How long have I been out?") +sm.sendSay("#face1#Why am I in the desert? And... what's wrong with my arm?") +sm.forcedAction(0, 300) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.forcedAction(0, 300) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.forcedAction(0, 300) +sm.sendDelay(300) +sm.forcedFlip(False) +sm.sendNext("#face2#Who tied me up? What do they want?") +sm.sendSay("#face3#Maybe they're not dangerous. Then again, the wounds on my arms look pretty fresh.") +sm.sendSay("#face0#Urgh... At least I'm alive.") +sm.sendSay("#face5#Maybe I can reason with whoever it is.") +sm.forcedFlip(True) +sm.forcedAction(0, 300) +sm.sendDelay(300) +sm.sendNext("#face0#I might be able to cut these ropes, but who knows how much time I've got.") +sm.sendSay("#face3#Looks like about 20 people over there. Too many to fight. I might have to make a run for it.") +sm.sendSay("#face0#...But I suppose I should at least try to talk to them first.") +sm.sendSay("#face2#Ah! Here comes one now.") +sm.spawnNpc(3001509, -1250, 90) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.sendDelay(1000) +sm.showFadeTransition(0, 300, 300) +sm.sendDelay(300) +sm.removeOverlapScreen(300) +sm.zoomCamera(0, 2000, 0, -1200, 150) +sm.sendDelay(300) +sm.moveNpcByTemplateId(3001509, False, 150, 70) +sm.zoomCamera(3500, 2000, 3500, -950, 150) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face2#Boy, I feel like singing at the top of my lungs today!") +sm.sendDelay(3000) +sm.flipNpcByTemplateId(3001509, True) +sm.zoomCamera(5000, 2000, 5000, -730, 150) +sm.moveNpcByTemplateId(3001509, False, 150, 70) +sm.sendNext("#face2#I might just dance too! Fancy feet! Shuffle, shuffle, shuffle! I'm doing it!") +sm.sendDelay(2000) +sm.flipNpcByTemplateId(3001509, True) +sm.moveNpcByTemplateId(3001509, False, 430, 100) +sm.sendNext("#face3#Salvo on duty and doing fine! \r\nMy dance demolition skill's top of the line!") +sm.sendDelay(1500) +sm.sendNext("#face4#Woo! Yeah! Woo, woo! Yea- OH!") +sm.sendDelay(2000) +sm.playSound("Sound/SoundEff.img/Falldown", 100) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284521, 0, 0) +sm.sendDelay(300) +sm.sendDelay(300) +sm.zoomCamera(0, 2000, 0, -430, 150) +sm.flipNpcByTemplateId(3001509, False) +sm.moveNpcByTemplateId(3001509, True, 60, 220) +sm.sendDelay(2000) +sm.sendNext("#face1#The monster's awaaaaake!") +sm.spawnNpc(3001509, -490, 90) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.sendDelay(1000) +sm.sendDelay(300) +sm.zoomCamera(0, 2000, 0, -450, 150) +sm.spawnNpc(3001508, -185, 76) +sm.showNpcSpecialActionByTemplateId(3001508, "summon", 0) +sm.spawnNpc(3001510, -122, 76) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.spawnNpc(3001514, -30, 76) +sm.showNpcSpecialActionByTemplateId(3001514, "summon", 0) +sm.spawnNpc(3001515, 10, 127) +sm.showNpcSpecialActionByTemplateId(3001515, "summon", 0) +sm.spawnNpc(3001516, 70, 127) +sm.showNpcSpecialActionByTemplateId(3001516, "summon", 0) +sm.spawnNpc(3001512, -570, 76) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -620, 76) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001520, -570, 127) +sm.showNpcSpecialActionByTemplateId(3001520, "summon", 0) +sm.spawnNpc(3001519, -640, 127) +sm.showNpcSpecialActionByTemplateId(3001519, "summon", 0) +sm.spawnNpc(3001517, -670, 76) +sm.showNpcSpecialActionByTemplateId(3001517, "summon", 0) +sm.spawnNpc(3001518, -720, 76) +sm.showNpcSpecialActionByTemplateId(3001518, "summon", 0) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face4#You think I'm a monster?") +sm.zoomCamera(1000, 1000, 1000, -300, 70) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284857, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284858, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284859, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284860, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284861, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284862, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284863, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284864, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284865, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284866, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284867, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 284835, 0, 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face2#It can talk? Maybe it's different from the others? But... no... something's not right... Its arm...") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face4#Please listen. I'm not a monster. I don't want to hurt you. Would you untie me?") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face0#That's just what a monster #ewould#n say! Identify yourself if you want to be released! Or... promise to listen to my music. That's okay too.") +sm.sendDelay(1100) +sm.speechBalloon(False, 0, 0, "The face...", 1000, 0, 0, 0, 0, 4, 3001512, 102647) +sm.sendDelay(1100) +sm.speechBalloon(False, 0, 0, "Where are you from?", 1000, 0, 0, 0, 0, 4, 3001514, 102647) +sm.sendDelay(1100) +sm.speechBalloon(False, 0, 0, "What's wrong with your arm?", 1000, 0, 0, 0, 0, 4, 3001513, 102647) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face3#I... I don't actually know. I don't know who I am either. I wish I could tell you.") +sm.sendSay("#face3#All I can remember is one big nightmare and someone calling me... Ark. I think that's my name.") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face4#Hm, doesn't seem like they're lying.") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face2#Well, they smile too much to be evil, right? Maybe we should let 'em go. What does everybody think?") +sm.blind(True, 200, 0, 0, 0, 3000) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face1#No! We don't know who that is! And they haven't even listened to my music! What if they turn around and attack us the moment we untie them?!") +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendSay("#face0#Salvo's got a point. Well, about them attacking us, not the music.") +sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit +sm.sendSay("#face0#Morale at the refuge is already bad. If we have another problem, it'll be devastating.") +sm.sendDelay(1100) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face3#(This debate is clearly not leaning in my favor. Maybe I should just go with my original plan to work the rope loose and make a break for it.)") +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 300) +sm.sendDelay(500) +sm.zoomCamera(0, 1000, 0, -300, 70) +sm.sendDelay(500) +sm.zoomCamera(0, 1000, 0, -300, 70) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face2#The alarm?! Monsters again... Get ready, everyone! Now! We must defend the refuge!") +sm.sendSay("#face2#Anyone who can't fight needs to find a safe place to hide. Anyone who can, follow me!") +sm.sendDelay(500) +sm.zoomCamera(0, 1000, 0, -300, 70) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.changeBGM("Bgm28.img/helisiumWarcry", 0, 0) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face2#It's too late! Look!") +sm.sendDelay(500) +sm.zoomCamera(1000, 2000, 1000, -1000, 70) +sm.sendDelay(1000) +sm.spawnNpc(3001527, -1450, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1430, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1420, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1400, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1380, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1370, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1350, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1300, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1450, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1430, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1420, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1410, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1350, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1320, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1300, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1280, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1350, 150) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1120, 150) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1200, 150) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1480, 150) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.moveNpcByTemplateId(3001527, False, 600, 300) +sm.moveNpcByTemplateId(3001528, False, 400, 300) +sm.moveNpcByTemplateId(3001527, False, 500, 300) +sm.moveNpcByTemplateId(3001528, False, 400, 300) +sm.moveNpcByTemplateId(3001527, False, 600, 300) +sm.moveNpcByTemplateId(3001528, False, 400, 300) +sm.moveNpcByTemplateId(3001527, False, 700, 300) +sm.moveNpcByTemplateId(3001528, False, 400, 300) +sm.moveNpcByTemplateId(3001527, False, 500, 300) +sm.moveNpcByTemplateId(3001528, False, 400, 300) +sm.moveNpcByTemplateId(3001527, False, 400, 300) +sm.moveNpcByTemplateId(3001528, False, 500, 300) +sm.moveNpcByTemplateId(3001527, False, 400, 300) +sm.moveNpcByTemplateId(3001528, False, 600, 300) +sm.moveNpcByTemplateId(3001527, False, 400, 300) +sm.moveNpcByTemplateId(3001528, False, 700, 300) +sm.moveNpcByTemplateId(3001527, False, 300, 300) +sm.moveNpcByTemplateId(3001528, False, 200, 300) +sm.moveNpcByTemplateId(3001527, False, 400, 300) +sm.moveNpcByTemplateId(3001528, False, 400, 300) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.sendDelay(1000) +sm.zoomCamera(1000, 2000, 1000, -750, 150) +sm.sendDelay(1000) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face1#Everyone, RUN!!") +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.sendNext("#face2#I'm sorry about the misunderstanding! I'll let you go. Hurry!") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000615) diff --git a/scripts/field/enter_402090002.py b/scripts/field/enter_402090002.py new file mode 100755 index 0000000..8ada9db --- /dev/null +++ b/scripts/field/enter_402090002.py @@ -0,0 +1,136 @@ +# id 402090002 (null), field 402090002 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedFlip(True) +sm.zoomCamera(0, 1000, 0, 100, 250) +sm.sendDelay(1000) +sm.spawnNpc(3001508, -54, 237) +sm.showNpcSpecialActionByTemplateId(3001508, "summon", 0) +sm.spawnNpc(3001509, 298, 200) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.spawnNpc(3001512, 374, 200) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, 431, 200) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001510, 550, 200) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.spawnNpc(3001514, -181, 200) +sm.showNpcSpecialActionByTemplateId(3001514, "summon", 0) +sm.spawnNpc(3001515, -330, 200) +sm.showNpcSpecialActionByTemplateId(3001515, "summon", 0) +sm.spawnNpc(3001516, -275, 200) +sm.showNpcSpecialActionByTemplateId(3001516, "summon", 0) +sm.spawnNpc(3001517, -487, -5) +sm.showNpcSpecialActionByTemplateId(3001517, "summon", 0) +sm.spawnNpc(3001518, -330, -5) +sm.showNpcSpecialActionByTemplateId(3001518, "summon", 0) +sm.spawnNpc(3001519, -435, -5) +sm.showNpcSpecialActionByTemplateId(3001519, "summon", 0) +sm.spawnNpc(3001520, -380, -5) +sm.showNpcSpecialActionByTemplateId(3001520, "summon", 0) +sm.spawnNpc(3001521, -331, 132) +sm.showNpcSpecialActionByTemplateId(3001521, "summon", 0) +sm.spawnNpc(3001522, -439, 93) +sm.showNpcSpecialActionByTemplateId(3001522, "summon", 0) +sm.spawnNpc(3001511, -830, 200) +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face0#Ferret, Salvo, Digs, Grit, and Ark... All of you, come home in one piece.") +sm.moveNpcByTemplateId(3001511, False, 350, 200) +sm.sendDelay(3500) +sm.showNpcSpecialActionByTemplateId(3001511, "falldown", 0) +sm.sendDelay(1500) +sm.resetNpcSpecialActionByTemplateId(3001511) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001511) # Mar +sm.sendNext("#face2#Be brave!!") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#Zippy, if anything happens, we'll contact you through one of the signal devices.") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face2#Good. Ring once for retreat, twice if you find the crystals, three times if you're heading back home.") +sm.sendSay("#face3#And I hope you don't need it, but... four if you're in danger.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face2#Don't worry. We'll succeed.") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face0#Okay, let's head out.") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face2#For those staying in the refuge, return to your stations and stay alert for attacks.") +sm.flipNpcByTemplateId(3001514, True) +sm.flipNpcByTemplateId(3001515, True) +sm.flipNpcByTemplateId(3001516, True) +sm.flipNpcByTemplateId(3001517, True) +sm.flipNpcByTemplateId(3001518, True) +sm.flipNpcByTemplateId(3001519, True) +sm.flipNpcByTemplateId(3001520, True) +sm.flipNpcByTemplateId(3001521, True) +sm.flipNpcByTemplateId(3001522, True) +sm.flipNpcByTemplateId(3001511, True) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 100, 250) +sm.sendDelay(1000) +sm.zoomCamera(1000, 1000, 1000, 260, 250) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#Zippy, we need to know what signals the refuge will use.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face3#We don't need signals! \r\nWe can use music!") +sm.sendSay("#face4#We'll listen with our hearts!") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face2#Salvo, we really need to be more practical than that right now.") +sm.blind(True, 150, 0, 0, 0, 2000) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face0#Oh, right, uh... what about... um...") +sm.blind(True, 255, 0, 0, 0, 3000) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#Ah, don't worry about it. I'm sure it'll be fine. Just stick to the plan.") +sm.sendDelay(1000) +sm.onLayer(500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/8/0", 4, True, -1, False) +sm.sendDelay(1000) +sm.onLayer(500, "d1", -200, 30, -1, "Effect/Direction17.img/effect/ark/illust/8/1", 4, True, -1, False) +sm.sendDelay(500) +sm.moveLayer(1000, "d1", 0, -150) +sm.sendNext("#face0#Based on the signals, there are two crystal fragments left to find.") +sm.sendDelay(1000) +sm.moveLayer(1000, "d1", 140, 130) +sm.sendDelay(1000) +sm.moveLayer(1000, "d1", 140, 0) +sm.sendDelay(1000) +sm.sendNext("#face0#We'll head to the closer one first.") +sm.moveLayer(1000, "d1", 100, 0) +sm.sendDelay(1000) +sm.moveLayer(1000, "d1", 0, -140) +sm.sendDelay(1000) +sm.sendNext("#face4#Then we'll find the third and make our way to the transport.") +sm.moveLayer(1000, "d1", -200, 140) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face1#Well, check out Mr. Bossy taking over as leader!") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#...") +sm.sendSay("#face0#It's not that far, and we've got a good signal, so I doubt we'll get lost. I'm only worried about one thing.") +sm.sendSay("#face2#We have no idea if and when more of those monsters will show up.") +sm.sendDelay(1000) +sm.sendNext("#face2#There's not much we can do about that, so we'll just have to be careful. Let's hurry and get moving.") +sm.offLayer(300, "d0", False) +sm.offLayer(300, "d1", False) +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402090004) diff --git a/scripts/field/enter_402090003.py b/scripts/field/enter_402090003.py new file mode 100755 index 0000000..43b4f9c --- /dev/null +++ b/scripts/field/enter_402090003.py @@ -0,0 +1,167 @@ +# id 402090003 (null), field 402090003 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3001527, 500, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 460, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 400, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 350, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 220, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 80, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 40, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 0, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 730, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 800, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 870, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 940, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 1010, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 1080, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 1140, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 1280, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.zoomCamera(0, 2000, 0, 598, 150) +sm.forcedAction(4, 15000) +sm.sendDelay(500) +sm.zoomCamera(500, 2250, 500, 598, 150) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face5#Ugh... What's wrong with my arm?!") +sm.sendDelay(1500) +sm.zoomCamera(500, 2500, 500, 598, 160) +sm.sendNext("#face6#I can't stop it! What is this?!") +sm.sendDelay(1500) +sm.zoomCamera(500, 3000, 500, 598, 165) +sm.blind(True, 255, 0, 0, 0, 5000) +sm.sendNext("#face6#No... NO! Aaaaaagh!") +sm.zoomCamera(5000, 1000, 5000, 598, 100) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.sendDelay(540) +sm.playSound("Sound/Voice4.img/Ark/Back/F/Male/12", 100) +sm.sendNext("#face7#Ahhh!!") +sm.sendDelay(3500) +sm.sayMonologue("#fnArial##fs22#The more enemies I destroyed,", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/2", 100) +sm.sayMonologue("#fnArial##fs22#the more the darkness consumed me.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/3", 100) +sm.sayMonologue("#fnArial##fs22#\r\n\r\n\r\nIt hadn't always been a part of me... Had it?", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/4", 100) +sm.sayMonologue("#fnArial##fs22#\r\nIt was such a strange feeling...", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/5", 100) +sm.sayMonologue("#fnArial##fs22#It was taking full control of my body.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/6", 100) +sm.sayMonologue("#fnArial##fs22#\r\nIt was terrifying. Yet...", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/7", 100) +sm.sayMonologue("#fnArial##fs22#I couldn't resist such intoxicating power.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/8", 100) +sm.sayMonologue("#fnArial##fs22#\r\n\r\nI was torn between a desire to protect the innocent and a thirst for carnage.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/9", 100) +sm.sayMonologue("#fnArial##fs22#As the two warred within me, all I could do was cry out.", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/10", 100) +sm.onLayer(500, "999", 0, -5, 0, "Effect/Direction17.img/effect/ark/ArkGaugeCooltime/1366", 4, True, -1, False) +sm.sendDelay(6350) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/B/Male/11", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs65#Aaaahhh#fnᄍ￙ᅤ￁##fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold#!!", 50, 5850, 4, 0, 0, 0, 4, 3, 300, 300) +sm.offLayer(300, "999", False) +sm.spawnNpc(3001516, -1363, 92) +sm.showNpcSpecialActionByTemplateId(3001516, "summon", 0) +sm.spawnNpc(3001515, -1419, 92) +sm.showNpcSpecialActionByTemplateId(3001515, "summon", 0) +sm.spawnNpc(3001520, -1033, 96) +sm.showNpcSpecialActionByTemplateId(3001520, "summon", 0) +sm.spawnNpc(3001519, -1104, 96) +sm.showNpcSpecialActionByTemplateId(3001519, "summon", 0) +sm.spawnNpc(3001517, -968, 96) +sm.showNpcSpecialActionByTemplateId(3001517, "summon", 0) +sm.spawnNpc(3001518, -1168, 96) +sm.showNpcSpecialActionByTemplateId(3001518, "summon", 0) +sm.spawnNpc(3001512, -755, 90) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -822, 90) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001510, -612, -289) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.spawnNpc(3001514, 225, -265) +sm.showNpcSpecialActionByTemplateId(3001514, "summon", 0) +sm.spawnNpc(3001521, 513, 100) +sm.showNpcSpecialActionByTemplateId(3001521, "summon", 0) +sm.spawnNpc(3001522, 639, 90) +sm.showNpcSpecialActionByTemplateId(3001522, "summon", 0) +sm.spawnNpc(3001509, 997, -122) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.spawnNpc(3001508, -1630, 60) +sm.showNpcSpecialActionByTemplateId(3001508, "summon", 0) +sm.bgmVolume(0, 2000) +sm.sendDelay(2500) +sm.bgmVolume(-2, 300) +sm.spineScreen(False, False, True, 0, "Effect/Direction17.img/effect/ark/dust/0/ark_dust","01_dust A","01") +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.changeBGM("Bgm48.img/VerdelTown", 0, 0) +sm.zoomCamera(0, 1000, 0, -1257, 60) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Several Days Later, Caravan Refuge", 100, 2200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.moveNpcByTemplateId(3001508, False, 1346, 220) +sm.sendDelay(500) +sm.forcedMove(False, 1165) +sm.zoomCamera(7000, 1000, 7000, -430, 60) +sm.speechBalloon(True, 0, 0, "We don't have enough to eat...", 1000, 0, 0, 0, 0, 4, 3001515, 102647) +sm.sendDelay(3000) +sm.sendDelay(500) +sm.speechBalloon(True, 0, 0, "We need to focus on repairing structures...", 1000, 0, 0, 0, 0, 4, 3001516, 102647) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Thank you, Ark!", 1000, 0, 0, 0, 0, 4, 3001512, 102647) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face0#Thank you for keeping everyone safe! We've already started rebuilding the refuge.") +sm.speechBalloon(True, 0, 0, "You saved us!", 1000, 0, 0, 0, 0, 4, 3001513, 102647) +sm.sendDelay(500) +sm.moveNpcByTemplateId(3001508, True, 40, 230) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face0#(I can't remember anything after I lost consciousness, but somehow I found my way back to the caravan.)") +sm.sendSay("#face0#(Mar is safe, but what was all that chaos about?)") +sm.sendDelay(2000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000600) diff --git a/scripts/field/enter_402090004.py b/scripts/field/enter_402090004.py new file mode 100755 index 0000000..e72b0d0 --- /dev/null +++ b/scripts/field/enter_402090004.py @@ -0,0 +1,104 @@ +# id 402090004 (null), field 402090004 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -1500, -200) +sm.spawnNpc(3001509, -1838, 250) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.spawnNpc(3001512, -1960, 250) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -1900, 250) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001510, -1260, 250) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#A While Later, Far from the Caravan Refuge", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.zoomCamera(4000, 1000, 4000, -1500, 250) +sm.sendDelay(4000) +sm.zoomCamera(3000, 1000, 3000, -1150, 250) +sm.forcedFlip(True) +sm.moveNpcByTemplateId(3001509, False, 350, 200) +sm.moveNpcByTemplateId(3001512, False, 350, 200) +sm.moveNpcByTemplateId(3001513, False, 350, 200) +sm.moveNpcByTemplateId(3001510, False, 350, 200) +sm.sendDelay(500) +sm.forcedMove(False, 350) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendNext("#face0#The wind is strange. Are you sure we're headed the right direction?") +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.spineScreen(False, False, True, 0, "Effect/Direction17.img/effect/ark/dust/0/ark_dust","01_dust A","01") +sm.sendDelay(2500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 868071, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 868073, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 868072, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 868074, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.spineScreen(False, True, True, 0, "Effect/Direction17.img/effect/ark/dust/0/ark_dust","02_dust B","02") +sm.moveNpcByTemplateId(3001509, False, 150, 120) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face2#How can we be stuck in a sandstorm?! Ferret, I'm really glad you're so good at this, but... are your signals still working?") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#...") +sm.zoomCamera(2000, 1000, 2000, -850, 250) +sm.moveNpcByTemplateId(3001512, False, 150, 120) +sm.moveNpcByTemplateId(3001513, False, 150, 120) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.blind(False, 0, 0, 0, 0, 2000) +sm.sendNext("#face0#This is bad.") +sm.zoomCamera(1000, 1500, 1000, -850, 300) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendNext("#face2#The sandstorm is messing with my devices.") +sm.zoomCamera(1000, 2000, 1000, -850, 320) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendNext("#face3#I can't get any kind of signal.") +sm.spawnNpc(3001524, -750, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.spawnNpc(3001524, -700, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.spawnNpc(3001524, -650, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.spawnNpc(3001524, -600, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.spawnNpc(3001524, -560, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.spawnNpc(3001524, -500, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.spawnNpc(3001524, -420, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.spawnNpc(3001524, -300, 233) +sm.showNpcSpecialActionByTemplateId(3001524, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001524, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001524, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001524, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001524, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001524, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001524, "attack", -1) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ark/wind", 100) +sm.forcedMove(False, 150) +sm.zoomCamera(2000, 1000, 2000, -1000, 250) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face4#That's definitely not good for us.") +sm.sendDelay(2500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000621) diff --git a/scripts/field/enter_402090005.py b/scripts/field/enter_402090005.py new file mode 100755 index 0000000..3e88fe5 --- /dev/null +++ b/scripts/field/enter_402090005.py @@ -0,0 +1,87 @@ +# id 402090005 (null), field 402090005 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.setMapTaggedObjectVisible("back0", False, 0, 0) +sm.setMapTaggedObjectVisible("back1", False, 0, 0) +sm.forcedFlip(True) +sm.zoomCamera(0, 1000, 0, -10, 250) +sm.sendDelay(1000) +sm.spawnNpc(3001509, -150, 250) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.spawnNpc(3001512, 0, 250) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -60, 250) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001510, 160, 250) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.moveNpcByTemplateId(3001510, False, 330, 180) +sm.moveNpcByTemplateId(3001509, False, 330, 180) +sm.moveNpcByTemplateId(3001512, False, 330, 180) +sm.moveNpcByTemplateId(3001513, False, 330, 180) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.forcedMove(False, 420) +sm.zoomCamera(3000, 1000, 3000, 300, 250) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face4#Ha! The signal's coming from directly below us.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face2#Time for me to do my thing!") +sm.moveNpcByTemplateId(3001509, False, 450, 150) +sm.sendDelay(1000) +sm.zoomCamera(3000, 1000, 3000, 800, 250) +sm.sendDelay(4000) +sm.sendDelay(1000) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 3000, 670, 152, 3, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion1", 100) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 6000, 620, 112, 3, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion2", 100) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 820, 62, 3, 0, 0, 0) +sm.sendDelay(1000) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 320, 112, 3, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 1120, -88, 3, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion0", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 6000, 1020, 62, 3, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 480, 162, 3, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 840, -38, 3, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 6000, 820, -238, 3, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion1", 100) +sm.bgmVolume(-2, 500) +sm.changeBGM("Bgm45.img/Time Is Gold", 0, 0) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face2#Salvo! You're going to destroy everything!") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) +sm.zoomCamera(0, 1000, 0, 800, 250) +sm.spawnNpc(3001512, 660, 220) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, 600, 220) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001510, 1010, 220) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.setMapTaggedObjectVisible("back0", True, 0, 0) +sm.setMapTaggedObjectVisible("back1", True, 0, 0) +sm.showEffect("Effect/Direction17.img/effect/ark/hole/back", 999999, 150, -50, -6, 873198, 0, 0) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.zoomCamera(0, 1000, 0, 800, 250) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face1#Uh oh! Going down!") +sm.zoomCamera(1000, 2000, 1000, 500, 3250) +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000630) diff --git a/scripts/field/enter_402090006.py b/scripts/field/enter_402090006.py new file mode 100755 index 0000000..b4c74b4 --- /dev/null +++ b/scripts/field/enter_402090006.py @@ -0,0 +1,81 @@ +# id 402090006 (null), field 402090006 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.zoomCamera(0, 2000, 0, -2281, 381) +sm.forcedAction(7, 0) +sm.sendDelay(1000) +sm.forcedInput(7) +sm.sendDelay(1000) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 3000, 750, 0, 4, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion1", 100) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 3000, 500, 100, 4, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion2", 100) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 2000, 57, 4, 0, 0, 0) +sm.sendDelay(1000) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 420, 200, 4, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 100, 30, 3, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion0", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 3000, 190, 440, 3, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 313, 370, 3, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 0, 172, 410, 3, 0, 0, 0) +sm.showEffect("Effect/Direction19.img/effect/cadena/3", 3000, 400, 280, 3, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/blackHeaven/explosion1", 100) +sm.sendDelay(500) +sm.zoomCamera(500, 1000, 500, -2301, 350) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.setMapTaggedObjectVisible("sand", False, 0, 0) +sm.zoomCamera(0, 1000, 0, -2301, 350) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face0#I think we found it!") +sm.blind(True, 150, 0, 0, 0, 500) +sm.playSound("Sound/SoundEff.img/PinkBean/expectation", 100) +sm.onLayer(300, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/7/2", 4, True, -1, False) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 500) +sm.offLayer(500, "d0", False) +sm.sendDelay(500) +sm.bgmVolume(-2, 0) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face1#So, we just take this to the refuge, and we can travel again?") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face3#Oh yeah! Now we've made it through adversity!") +sm.sendSay("#face4#Through the sandy storms and the dry, dry sea!") +sm.sendSay("#face3#It wasn't easy? You're telling me!") +sm.sendSay("#face4#But soon we'll leave here, and we'll all be free!") +sm.zoomCamera(1000, 1000, 1000, -1808, 350) +sm.forcedMove(False, 500) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face0#Hm, I've seen that before.") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#I've seen this from a distance before, but never up close. This structure is massive.") +sm.sendDelay(1000) +sm.zoomCamera(4000, 950, 4000, -1308, -150) +sm.sendDelay(1000) +sm.changeBGM("Bgm45.img/Army Of Fears Theme", 0, 0) +sm.sendDelay(5500) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face8#So, now we see what war in the name of peace truly looks like.") +sm.sendDelay(3500) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(300) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402090010) diff --git a/scripts/field/enter_402090007.py b/scripts/field/enter_402090007.py new file mode 100755 index 0000000..9b4faa4 --- /dev/null +++ b/scripts/field/enter_402090007.py @@ -0,0 +1,188 @@ +# id 402090007 (null), field 402090007 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.changeBGM("Bgm47.img/DeathOfAsylum", 0, 0) +sm.spawnNpc(3001527, -800, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -760, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -700, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -640, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -520, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -500, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -940, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1000, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -170, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -100, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 0, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 100, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 210, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 380, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 440, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 580, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.createQuestWithQRValue(34997, "27=h1;28=h0") +sm.createQuestWithQRValue(34997, "27=h1;28=h1") +sm.zoomCamera(0, 1000, 0, -310, 200) +sm.forcedAction(4, 999999) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face6#We just need to last a little longer!") +sm.sendSay("#face6#What's wrong with me? I'm losing control again!") +sm.zoomCamera(3000, 2000, 3000, -310, 300) +sm.sendNext("#face7#Ahhh!!") +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001527, "die", 0) +sm.showNpcSpecialActionByTemplateId(3001528, "die", 0) +sm.sendDelay(540) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 2000) +sm.sendDelay(2000) +sm.hideUser(True) +sm.zoomCamera(0, 1000, 0, -310, 200) +sm.sendDelay(4500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#A Short While Ago, High Flora Council Meeting", 100, 1200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.onLayer(500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/9/0", 4, True, -1, False) +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/0", 100) +sm.setInnerOverrideSpeakerTemplateID(3001507) # ??? +sm.sendNext("#face0#Is everything going according to plan?") +sm.playSound("Sound/Voice4.img/ArkNpc/Etc/A/1", 100) +sm.setInnerOverrideSpeakerTemplateID(3001506) # Limbo +sm.sendSay("#face1#Not one problem.") +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/3", 100) +sm.setInnerOverrideSpeakerTemplateID(3001507) # ??? +sm.sendSay("#face0#I must admit, I find this entertaining.") +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/4", 100) +sm.sendSay("#face0#The vortex from the failed specter ritual has finally dissipated.") +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/5", 100) +sm.sendSay("#face0#And our scouts report there will be little resistance from the planet's current inhabitants.") +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/6", 100) +sm.sendSay("#face0#It's good news, considering your last attack on the planet was a failure.") +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/7", 100) +sm.sendSay("#face0#You left an awful lot of loose ends, Limbo.") +sm.playSound("Sound/Voice4.img/ArkNpc/Etc/A/2", 100) +sm.setInnerOverrideSpeakerTemplateID(3001506) # Limbo +sm.sendSay("#face1#One of my colonels will arrive on the planet soon to ensure everything goes smoothly.") +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/8", 100) +sm.setInnerOverrideSpeakerTemplateID(3001507) # ??? +sm.sendSay("#face0#Let's hope for your sake that no one interferes this time.") +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/9", 100) +sm.sendSay("#face0#We're done here.") +sm.sendDelay(1000) +sm.offLayer(500, "d0", False) +sm.sendDelay(1000) +sm.playSound("Sound/Voice4.img/GLAdd/Etc/A/10", 100) +sm.sendDelay(3350) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs45#Glory to the Flora!", 50, 2850, 4, 0, 0, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.spawnNpc(3001527, -800, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -760, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -700, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -640, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -520, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -500, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -940, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1000, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -170, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -100, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 0, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 100, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 210, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 380, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 440, 78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 580, 78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001512, -425, 198) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -525, 198) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001509, -163, 198) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001512, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001513, "attack", -1) +sm.showNpcSpecialActionByTemplateId(3001509, "attack", -1) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face3#The monsters here may never end! \r\nBut to survive, we must defend!") +sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit +sm.sendSay("#face0#We've taken a lot of them out, but there are still so many!") +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendSay("#face0#How much longer does Ferret need?") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/DLep4/war", 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit +sm.sendNext("#face0#There's another large mob approaching.") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendNext("#face0#We're no match for that...") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001513) # Grit +sm.sendNext("#face0#Our defensive perimeter is collapsing! Should we retreat?") +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/DLep4/blow", 100) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face0#No! Our journey can't end here!") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(402000640) diff --git a/scripts/field/enter_402090009.py b/scripts/field/enter_402090009.py new file mode 100755 index 0000000..3cb3028 --- /dev/null +++ b/scripts/field/enter_402090009.py @@ -0,0 +1,220 @@ +# id 402090009 (null), field 402090009 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.onLayer(500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/11/0", 4, True, -1, False) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire +sm.sendNext("#face0#You are weak.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/C/1", 100) +sm.sendSay("#face0#Accept it.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/C/2", 100) +sm.sendSay("#face0#Your grand ideals aren't going to save anyone.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/C/3", 100) +sm.sendSay("#face1#Don't get in the High Flora's way any more.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/C/4", 100) +sm.sendSay("#face0#This time, I'll make sure you don't survive.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/C/5", 100) +sm.sendDelay(1000) +sm.offLayer(300, "d0", False) +sm.spineScreen(False, False, True, 0, "Effect/Direction17.img/effect/ark/medal/0/ark_medal","animation","01") +sm.playSound("Sound/SoundEff.img/cadena/pendant", 100) +sm.sendDelay(6000) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(300) +sm.onLayer(500, "2", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/2", 4, True, -1, True) +sm.onLayer(500, "3", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/3", 4, True, -1, True) +sm.offLayer(300, "0", False) +sm.sendDelay(2000) +sm.changeBGM("Bgm48.img/Memory", 0, 0) +sm.sendDelay(1000) +sm.onLayer(500, "d3", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/5/0", 4, True, -1, False) +sm.sendDelay(1500) +sm.onLayer(100, "d4", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/5/1", 4, True, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendNext("#face0#We did it, Albaire!") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/1", 100) +sm.setInnerOverrideSpeakerTemplateID(3001505) # Albaire +sm.sendSay("#face0#Yeah, I wasn't sure you'd actually make it!") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/E/2", 100) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendSay("#face1#I proved you wrong, didn't I? Now we're headed into real battle instead of drills.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/3", 100) +sm.sendSay("#face1#We're finally going to make a difference in Grandis!") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/4", 100) +sm.sendSay("#face1#But I'm also a little scared.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/5", 100) +sm.sendSay("#face2#Sometimes I even have nightmares about it. I'm sure we'll be fine though.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/6", 100) +sm.setInnerOverrideSpeakerTemplateID(3001505) # Albaire +sm.sendSay("#face3#Ark, I swore to protect the people who matter to me, and that includes you.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/E/7", 100) +sm.sendSay("#face3#I'll always be there to protect you.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/E/8", 100) +sm.sendSay("#face3#Even if you are the worst soldier on the battlefield!") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/E/9", 100) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendSay("#face3#Ha! You think you could survive without me?!") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/10", 100) +sm.sendSay("#face3#You won't even make it to Colonel without my help.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/11", 100) +sm.setInnerOverrideSpeakerTemplateID(3001505) # Albaire +sm.sendSay("#face0#Then it's a good thing you aren't going to abandon me out there.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/E/12", 100) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendSay("#face3#Yeah. I'll protect you too. Just don't mess up too bad.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/13", 100) +sm.setInnerOverrideSpeakerTemplateID(3001505) # Albaire +sm.sendSay("#face1#All right, I promise.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/E/14", 100) +sm.offLayer(300, "d3", False) +sm.offLayer(300, "d4", False) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face5#I thought we were just joking around that day.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/16", 100) +sm.sendSay("#face5#But he really was always there for me.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/E/Male/17", 100) +sm.sendDelay(1000) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.sendDelay(300) +sm.offLayer(300, "0", False) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendNext("#face4#I have to warn them.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/F/Male/1", 100) +sm.onLayer(500, "d9", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/3/0", 4, True, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3001506) # Limbo +sm.sendSay("#face1#You are not to leave the base without approval, Second Lieutenant Ark.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/3", 100) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendSay("#face4#...") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/F/Male/4", 100) +sm.setInnerOverrideSpeakerTemplateID(3001506) # Limbo +sm.sendSay("#face1#I also heard you hesitated in the last battle. It nearly cost us our victory.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/5", 100) +sm.offLayer(300, "d9", False) +sm.onLayer(500, "d10", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/3/1", 4, True, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendSay("#face4#Victory? More like massacre. How can you say you fight for peace?") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/F/Male/6", 100) +sm.setInnerOverrideSpeakerTemplateID(3001506) # Limbo +sm.sendSay("#face1#Do you really think I care about peace?") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/7", 100) +sm.sendSay("#face1#From the moment you joined, I could see your doubt.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/8", 100) +sm.sendSay("#face1#The unrest in your heart shows in your eyes.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/9", 100) +sm.sendSay("#face1#I just needed you to prove you were a traitor.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/10", 100) +sm.sendSay("#face0#And now you'll pay for it.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/11", 100) +sm.sendDelay(300) +sm.offLayer(300, "d10", False) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendNext("#face5#Aaaaaaagh!!") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/F/Male/12", 100) +sm.setInnerOverrideSpeakerTemplateID(3001506) # Limbo +sm.sendSay("#face0#Your soul is mine!") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/F/13", 100) +sm.sendDelay(2000) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(300) +sm.offLayer(300, "0", False) +sm.sendDelay(1000) +sm.sayMonologue("#fs22##fnArial#\r\n\r\nI did all I could, but it wasn't enough.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/1", 100) +sm.sayMonologue("#fs22##fnArial#Maybe it was always meant to end this way.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/2", 100) +sm.sayMonologue("#fs22##fnArial#\r\nOr maybe it was just me...", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/3", 100) +sm.sayMonologue("#fs22##fnArial#\r\n\r\n\r\nIs this how it ends?", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/4", 100) +sm.sendDelay(7100) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/5", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I'm sorry I won't be there for you, Albaire.", 50, 6600, 4, 0, 0, 0, 4, 3, 300, 300) +sm.sendDelay(3200) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/A/Male/6", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Please forgive me.", 50, 2700, 4, 0, 0, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.onLayer(500, "d11", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/4/0", 4, True, -1, False) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001502) # Ark +sm.sendNext("#face5#Albaire? What is he doing here?") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/G/Male/1", 100) +sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire +sm.sendSay("#face2#Ark, I don't understand.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/G/2", 100) +sm.setInnerOverrideSpeakerTemplateID(3001505) # Albaire +sm.sendSay("#face2#How could you turn on us like this?") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/G/3", 100) +sm.sendSay("#face2#I thought we wanted the same things.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/G/4", 100) +sm.offLayer(300, "d11", False) +sm.onLayer(500, "d12", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/4/1", 4, True, -1, False) +sm.sendDelay(1000) +sm.sendNext("#face3#Still... I promised to protect you no matter what.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/G/5", 100) +sm.sendSay("#face3#Even if I have to sacrifice everything to do it.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/G/6", 100) +sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire +sm.sendSay("#face3#I can't let you die. I'll stop the specter ritual.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/G/7", 100) +sm.spineScreen(True, False, True, 0, "Map/Effect2.img/HofM/ACT1_bye/whiteback2/skeleton","animation","") +sm.sendDelay(5000) +sm.setInnerOverrideSpeakerTemplateID(3001505) # Albaire +sm.sendNext("#face3#Haaah!!") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Back/G/8", 100) +sm.sendDelay(2000) +sm.offLayer(500, "d12", False) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.playSound("Sound/SoundEff.img/radionoise", 100) +sm.sendDelay(500) +sm.offLayer(300, "0", False) +sm.offLayer(300, "2", False) +sm.offLayer(300, "3", False) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.onLayer(500, "d13", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/11/1", 4, True, -1, False) +sm.onLayer(500, "d14", 0, -50, -1, "Effect/Direction17.img/effect/ark/illust/11/2", 4, True, -1, False) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face6#What's happened to you?") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/D/Male/1", 100) +sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire +sm.sendSay("#face1#Me? I'm not the one who's changed.") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/D/2", 100) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face6#But... you wanted to protect people.") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Now/D/Male/3", 100) +sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire +sm.sendSay("#face0#Like you said, war for peace was all a lie, right?") +sm.playExclSoundWithDownBGM("Voice4.img/ArkNpc/Now/D/4", 100) +sm.offLayer(300, "d14", False) +sm.sendDelay(1000) +sm.offLayer(300, "d13", False) +sm.onLayer(500, "d15", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/11/3", 4, True, -1, False) +sm.sendDelay(1000) +sm.offLayer(3000, "d15", False) +sm.sendDelay(3000) +sm.bgmVolume(0, 2000) +sm.sendDelay(2300) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402090013) diff --git a/scripts/field/enter_402090010.py b/scripts/field/enter_402090010.py new file mode 100755 index 0000000..37cce03 --- /dev/null +++ b/scripts/field/enter_402090010.py @@ -0,0 +1,93 @@ +# id 402090010 (null), field 402090010 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.hideUser(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 345, -64) +sm.onLayer(500, "2", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/2", 4, True, -1, True) +sm.onLayer(500, "3", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/3", 4, True, -1, True) +sm.changeBGM("Bgm47.img/DeathOfAsylum", 0, 0) +sm.playSound("Sound/Voice4.img/GLAddVoice/Back/D/Male/1", 100) +sm.sendDelay(7100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#(Ark) What is he doing in a place like this?", 50, 6600, 4, 0, 0, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/D/1", 100) +sm.sendDelay(9950) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#(Lieutenant) Brigadier General, I have word of the enemy plans.", 50, 9450, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/D/2", 100) +sm.sendDelay(10100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#(Lieutenant) Our intel suggests they'll attack the base tonight.", 50, 9600, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/D/Male/3", 100) +sm.sendDelay(4250) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Brigadier General Limbo?!", 50, 3750, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/D/Male/4", 100) +sm.sendDelay(2500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Tonight? How?", 50, 2000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/D/5", 100) +sm.sendDelay(15350) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#(Lieutenant) Their resistance fighters are strong. \r\nThey made it difficult to place our equipment.", 50, 14850, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/D/6", 100) +sm.sendDelay(16100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#(Lieutenant) But now we are prepared to make them \r\nanother sacrifice toward peace under the High Flora.", 50, 15600, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/D/7", 100) +sm.sendDelay(6950) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35##r(Brigadier General Limbo) You've done well.", 50, 6450, 7, 0, -50, 0, 4, 3, 300, 300) +sm.zoomCamera(2000, 1000, 2000, -431, -64) +sm.sendDelay(2000) +sm.playSound("Sound/Voice4.img/GLAdd/Back/D/1", 100) +sm.sendDelay(4250) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#(Lieutenant) For victory!", 50, 3750, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/GLAdd/Back/D/2", 100) +sm.sendDelay(7250) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35##r(Brigadier General Limbo) Glory to the Flora.", 50, 6750, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/D/Male/8", 100) +sm.sendDelay(12800) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Peace was just a ruse. It was an excuse to conquer and exploit helpless societies.", 50, 12300, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/D/Male/9", 100) +sm.sendDelay(6650) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Now the resistance is headed into a trap.", 50, 6150, 7, 0, -50, 0, 4, 3, 300, 300) +sm.playSound("Sound/Voice4.img/Ark/Back/D/Male/10", 100) +sm.sendDelay(3500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I have to warn them.", 50, 3000, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(1000) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/D/11", 100) +sm.sendDelay(11150) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35##rThere is such incredible knowledge contained within the Abyssal Source.", 50, 10650, 7, 0, -50, 0, 4, 3, 300, 300) +sm.zoomCamera(3000, 1000, 3000, -1081, 0) +sm.sendDelay(3000) +sm.playSound("Sound/Voice4.img/ArkNpc/Back/D/12", 100) +sm.sendDelay(8900) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35##r(Brigadier General Limbo) And soon, it will all be mine.", 50, 8400, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.playSound("Sound/Voice4.img/GLAddVoice/Back/D/Male/12", 100) +sm.sendDelay(8000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#(Ark) That's Brigadier General Limbo's true form?!", 50, 7500, 7, 0, -50, 0, 4, 3, 300, 300) +sm.sendDelay(500) +sm.onLayer(500, "0", 0, -10, 0, "Effect/Direction17.img/effect/ark/noise/1366/0", 4, True, -1, True) +sm.offLayer(300, "2", False) +sm.offLayer(300, "3", False) +sm.startQuest(34936) +sm.completeQuestNoCheck(34936) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/13/03") +sm.createQuestWithQRValue(34936, "exp=1") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h1;17=h0;09=h0") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;09=h0") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h1;09=h0") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h1;06=h0;15=h0;24=h0;07=h0;16=h0;17=h1;09=h0") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.hideUser(False) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000644) diff --git a/scripts/field/enter_402090011.py b/scripts/field/enter_402090011.py new file mode 100755 index 0000000..fadfed5 --- /dev/null +++ b/scripts/field/enter_402090011.py @@ -0,0 +1,141 @@ +# id 402090011 (null), field 402090011 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.forcedFlip(True) +sm.spawnNpc(3001511, -1100, -17) +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) +sm.zoomCamera(0, 2000, 0, -1100, 50) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(3001511, False, 20, 80) +sm.zoomCamera(500, 2000, 500, -970, 150) +sm.sendDelay(500) +sm.moveNpcByTemplateId(3001511, False, 10, 80) +sm.showNpcSpecialActionByTemplateId(3001511, "falldown", 1700) +sm.sendDelay(1700) +sm.resetNpcSpecialActionByTemplateId(3001511) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001511) # Mar +sm.sendNext("#face0#Where did everyone go...?") +sm.sendSay("#face0#Who are you?") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face0#My name is Ark. We need to hurry.") +sm.sendSay("#face5#It's dangerous here. I'll take you to your people.") +sm.sendDelay(1000) +sm.zoomCamera(500, 2000, 500, -1170, 150) +sm.sendDelay(500) +sm.spawnNpc(3001527, -1550, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -1430, 73) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -1320, 73) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.sendDelay(500) +sm.showFadeTransition(0, 300, 300) +sm.spawnNpc(3001527, 250, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -30, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -120, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -200, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -280, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 0, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -50, -273) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 0, -273) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -250, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 0, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -220, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -110, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, 150, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, -80, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.spawnNpc(3001527, -100, -78) +sm.showNpcSpecialActionByTemplateId(3001527, "summon", 0) +sm.spawnNpc(3001528, 280, -78) +sm.showNpcSpecialActionByTemplateId(3001528, "summon", 0) +sm.moveNpcByTemplateId(3001527, True, 100, 80) +sm.moveNpcByTemplateId(3001528, True, 300, 80) +sm.moveNpcByTemplateId(3001527, True, 200, 80) +sm.moveNpcByTemplateId(3001528, True, 100, 100) +sm.moveNpcByTemplateId(3001527, True, 200, 80) +sm.moveNpcByTemplateId(3001528, True, 100, 80) +sm.moveNpcByTemplateId(3001527, True, 100, 80) +sm.moveNpcByTemplateId(3001528, True, 200, 100) +sm.moveNpcByTemplateId(3001527, True, 250, 80) +sm.moveNpcByTemplateId(3001528, True, 200, 80) +sm.moveNpcByTemplateId(3001527, True, 200, 80) +sm.moveNpcByTemplateId(3001528, True, 80, 80) +sm.moveNpcByTemplateId(3001527, True, 80, 100) +sm.moveNpcByTemplateId(3001528, True, 200, 80) +sm.moveNpcByTemplateId(3001527, True, 150, 80) +sm.moveNpcByTemplateId(3001528, True, 200, 80) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001527, "move", -1) +sm.showNpcSpecialActionByTemplateId(3001528, "move", -1) +sm.zoomCamera(0, 2000, 0, -250, 150) +sm.removeOverlapScreen(300) +sm.sendDelay(500) +sm.zoomCamera(3000, 2000, 3000, -470, 150) +sm.sendDelay(3000) +sm.showFadeTransition(0, 300, 300) +sm.removeOverlapScreen(500) +sm.zoomCamera(0, 2000, 0, -1100, 0) +sm.spawnNpc(3001511, -1266, -135) +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) +sm.sendDelay(500) +sm.sendNext("#face0#Wait right there for me. I'll be back.") +sm.zoomCamera(2000, 2000, 2000, -970, 50) +sm.forcedFlip(True) +sm.forcedMove(False, 200) +sm.sendDelay(2000) +sm.moveNpcByTemplateId(3001527, True, 130, 80) +sm.moveNpcByTemplateId(3001528, True, 100, 80) +sm.moveNpcByTemplateId(3001527, True, 20, 80) +sm.moveNpcByTemplateId(3001528, True, 10, 100) +sm.moveNpcByTemplateId(3001527, True, 20, 80) +sm.moveNpcByTemplateId(3001528, True, 10, 80) +sm.moveNpcByTemplateId(3001527, True, 50, 80) +sm.moveNpcByTemplateId(3001528, True, 20, 100) +sm.moveNpcByTemplateId(3001527, True, 25, 80) +sm.moveNpcByTemplateId(3001528, True, 20, 80) +sm.moveNpcByTemplateId(3001527, True, 20, 80) +sm.moveNpcByTemplateId(3001528, True, 80, 80) +sm.moveNpcByTemplateId(3001527, True, 80, 100) +sm.moveNpcByTemplateId(3001528, True, 22, 80) +sm.moveNpcByTemplateId(3001527, True, 15, 80) +sm.moveNpcByTemplateId(3001528, True, 20, 80) +sm.zoomCamera(3000, 1000, 3000, -730, 50) +sm.sendDelay(3500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(940205000) diff --git a/scripts/field/enter_402090012.py b/scripts/field/enter_402090012.py new file mode 100755 index 0000000..90719ca --- /dev/null +++ b/scripts/field/enter_402090012.py @@ -0,0 +1,64 @@ +# id 402090012 (null), field 402090012 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3001512, -700, 20) +sm.showNpcSpecialActionByTemplateId(3001512, "summon", 0) +sm.spawnNpc(3001513, -640, 20) +sm.showNpcSpecialActionByTemplateId(3001513, "summon", 0) +sm.spawnNpc(3001510, -470, 20) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.spawnNpc(3001509, -800, 20) +sm.showNpcSpecialActionByTemplateId(3001509, "summon", 0) +sm.moveNpcByTemplateId(3001510, False, 1500, 200) +sm.moveNpcByTemplateId(3001509, False, 1500, 200) +sm.moveNpcByTemplateId(3001512, False, 1500, 200) +sm.moveNpcByTemplateId(3001513, False, 1500, 200) +sm.forcedMove(False, 1500) +sm.blind(True, 150, 0, 0, 0, 1300) +sm.sendDelay(1000) +sm.sayMonologue("My memory keeps getting clearer.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/D/Male/1", 100) +sm.sayMonologue("And as it does, all of my old feelings come rushing back.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/D/Male/2", 100) +sm.sayMonologue("\r\nEverything I fought for was a lie.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/D/Male/3", 100) +sm.sayMonologue("Was the cruelty ever going to end?", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/D/Male/4", 100) +sm.sayMonologue("Nothing I did seemed to make any difference.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/D/Male/5", 100) +sm.sayMonologue("\r\n\r\n\r\nI had committed unforgiveable acts in the name of peace...", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/D/Male/6", 100) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(5000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 600, 120) +sm.sendDelay(600) +sm.forcedMove(True, 30) +sm.sendDelay(1000) +sm.zoomCamera(1000, 2000, 1000, 800, 120) +sm.flipNpcByTemplateId(3001510, True) +sm.flipNpcByTemplateId(3001510, False) +sm.moveNpcByTemplateId(3001510, True, 30, 200) +sm.sendDelay(600) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#Ark, you're still not well. Do you need a break?") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face1#No, I'll keep up.") +sm.zoomCamera(1000, 2000, 1000, 900, 120) +sm.forcedMove(False, 130) +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000648) diff --git a/scripts/field/enter_402090013.py b/scripts/field/enter_402090013.py new file mode 100755 index 0000000..0387f23 --- /dev/null +++ b/scripts/field/enter_402090013.py @@ -0,0 +1,107 @@ +# id 402090013 (null), field 402090013 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.hideUser(True) +sm.changeBGM("Bgm48.img/Memory", 0, 0) +sm.zoomCamera(0, 1000, 0, 652, 55) +sm.setMapTaggedObjectVisible("core1", True, 0, 0) +sm.setMapTaggedObjectVisible("core2", True, 0, 0) +sm.setMapTaggedObjectVisible("core3", True, 0, 0) +sm.setMapTaggedObjectVisible("coreEff", False, 0, 0) +sm.spawnNpc(3001510, 450, 90) +sm.showNpcSpecialActionByTemplateId(3001510, "summon", 0) +sm.spawnNpc(3001514, 350, 90) +sm.showNpcSpecialActionByTemplateId(3001514, "summon", 0) +sm.spawnNpc(3001515, 270, 90) +sm.showNpcSpecialActionByTemplateId(3001515, "summon", 0) +sm.spawnNpc(3001516, 210, 90) +sm.showNpcSpecialActionByTemplateId(3001516, "summon", 0) +sm.spawnNpc(3001508, 850, 90) +sm.showNpcSpecialActionByTemplateId(3001508, "summon", 0) +sm.spawnNpc(3001517, 950, 90) +sm.showNpcSpecialActionByTemplateId(3001517, "summon", 0) +sm.spawnNpc(3001518, 1150, 90) +sm.showNpcSpecialActionByTemplateId(3001518, "summon", 0) +sm.spawnNpc(3001519, 1000, 90) +sm.showNpcSpecialActionByTemplateId(3001519, "summon", 0) +sm.spawnNpc(3001520, 1050, 90) +sm.showNpcSpecialActionByTemplateId(3001520, "summon", 0) +sm.spawnNpc(3001521, 60, 90) +sm.showNpcSpecialActionByTemplateId(3001521, "summon", 0) +sm.spawnNpc(3001522, 1220, 90) +sm.showNpcSpecialActionByTemplateId(3001522, "summon", 0) +sm.spawnNpc(3001511, 740, 90) +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) +sm.sendDelay(1000) +sm.sendDelay(4000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Meanwhile, Caravan Refuge", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face2#I've lost contact with the recovery team. They're in danger.") +sm.sendSay("#face2#And the signal from the monsters is getting stronger!") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face3#If we're lucky, the monsters won't make it to this crystal before we can get out of here. But we have to hurry.") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#Yes. You're right. I'll get it ready.") +sm.moveNpcByTemplateId(3001510, False, 150, 180) +sm.sendDelay(2500) +sm.setMapTaggedObjectVisible("coreEff", True, 0, 0) +sm.sendDelay(3500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 652, 55) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face2#Ark hasn't told us how it works, though.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face0#Trust your heart and your instincts.") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face2#Yeah... okay... We can do this.") +sm.sendSay("#face2#Take us to our friends!") +sm.sendDelay(500) +sm.zoomCamera(3000, 2000, 3000, 652, -700) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 1300) +sm.sendDelay(2000) +sm.sayMonologue("#fnArial##fs22#I learned something.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/1", 100) +sm.sayMonologue("#fnᄈᆰᄡᆴᄚ■ᄉ￱##fs22#When you feel powerless,", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/2", 100) +sm.sayMonologue("#fnArial##fs22#You lose sight of what really matters.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/3", 100) +sm.sayMonologue("#fnArial##fs22#\r\nThe night I decided to leave...", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/4", 100) +sm.sayMonologue("#fnArial##fs22#Maybe I should have talked to you first.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/5", 100) +sm.sayMonologue("#fnArial##fs22#But I didn't know how to explain.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/6", 100) +sm.sayMonologue("#fnArial##fs22#If I had convinced you to join me, maybe our lives would have turned out differently.", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/7", 100) +sm.sayMonologue("#fnArial##fs22#I feel so much regret over that.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/8", 100) +sm.sayMonologue("#fnArial##fs22#And no matter how hard I try to forgive myself...", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/9", 100) +sm.sayMonologue("#fnArial##fs22#That pain is always there, haunting me.", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/10", 100) +sm.sayMonologue("#fnArial##fs22#\r\n\r\n'I'll protect you too.'", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/11", 100) +sm.sayMonologue("#fnArial##fs22#As you disappear into the sandstorm...", 0) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/12", 100) +sm.sayMonologue("#fnArial##fs22#\r\n\r\n\r\nI remember that one promise.", 1) +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Mono/E/Male/13", 100) +sm.sendDelay(2000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.hideUser(False) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000402) diff --git a/scripts/field/enter_450000200.py b/scripts/field/enter_450000200.py new file mode 100755 index 0000000..bcb909a --- /dev/null +++ b/scripts/field/enter_450000200.py @@ -0,0 +1,19 @@ +#Communing with Erda | used for V advancement +if sm.hasQuest(1460): + sm.removeEscapeButton() + sm.setSpeakerID(1540940) + sm.sendNext("Can you hear us? Can't you hear us?") + sm.setPlayerAsSpeaker() + sm.sendNext("These voices...?") + sm.setSpeakerID(1540940) + sm.sendNext("Ah good, you can hear us.") + sm.sendNext("We're what you call Erda. \r\n\r\n We formed this world under the protection of the World Tree. But now that the World Tree is scattered across the world and her protection has weakened, we can't help but let the Black Mage take us wherever he wants.") + sm.sendNext("We're scared. Darkness lurks on the #rother side of that door#k. pulling us in. Only you can save us.") + sm.sendNext("We can't help but scatter and flow to somewhere we don't know. That's our destiny.") + sm.sendNext("Remember: the future of this world rests on your shoulders.") + sm.setPlayerAsSpeaker() + sm.sendNext("What did I just see? I'd better talk to the #bHistory Observer#k again.") + sm.setQRValue(1460, "2") + sm.lockInGameUI(False) + sm.warpInstanceOut(270010111) + sm.dispose() \ No newline at end of file diff --git a/scripts/field/enter_450001000.py b/scripts/field/enter_450001000.py new file mode 100755 index 0000000..3acfe45 --- /dev/null +++ b/scripts/field/enter_450001000.py @@ -0,0 +1 @@ +# id 450001000 (Lake of Oblivion : Nameless Town), field 450001000 diff --git a/scripts/field/enter_450001218.py b/scripts/field/enter_450001218.py new file mode 100755 index 0000000..0a8d4c8 --- /dev/null +++ b/scripts/field/enter_450001218.py @@ -0,0 +1 @@ +# id 450001218 (Cave of Repose : Cave Depths), field 450001218 diff --git a/scripts/field/enter_450001219.py b/scripts/field/enter_450001219.py new file mode 100755 index 0000000..9d2bd29 --- /dev/null +++ b/scripts/field/enter_450001219.py @@ -0,0 +1,2 @@ +# id 450001219 (Cave of Repose : Split Road of Destiny), field 450001219 +sm.progressMessageFont(3, 20, 8, 0, "Go through the portal below to defeat Arma and rescue Kao.") diff --git a/scripts/field/enter_450001250.py b/scripts/field/enter_450001250.py new file mode 100755 index 0000000..7b4da4f --- /dev/null +++ b/scripts/field/enter_450001250.py @@ -0,0 +1,11 @@ +# id 450001250 (Cave of Repose : Damp Falls), field 450001250 +if not sm.hasQuestCompleted(34120): + sm.completeQuestNoCheck(34120) + sm.startQuest(34162) + sm.setSpeakerID(3003143) # Pile of Clothes + sm.setParam(2) + sm.sendNext("#b(You picked up the #t1712001:# that Kao behind.)#k") + sm.giveAndEquip(1712001) + sm.consumeItem(1712000) + sm.startQuest(28857) + sm.sendNext("ueet") \ No newline at end of file diff --git a/scripts/field/enter_450001300.py b/scripts/field/enter_450001300.py new file mode 100755 index 0000000..06a79af --- /dev/null +++ b/scripts/field/enter_450001300.py @@ -0,0 +1,110 @@ +# id 450001300 (Hidden Street : The Fountain of Reflection), field 450001300 +sm.createQuestWithQRValue(34125, "370=2;380=1;390=2;300=2;310=2;320=2;330=2") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.hideUser(True) +sm.spawnNpc(3003113, 80, 134) +sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) +sm.spawnNpc(3003112, -80, 134) +sm.showNpcSpecialActionByTemplateId(3003112, "summon", 0) +sm.zoomCamera(0, 2000, 0, 10, 243) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(3500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Fountain of Reflection", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003112) # Rino +sm.sendNext("Here's the fountain, just like you wanted. Go ahead, look deep into its waters.") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 1000) +sm.sendDelay(500) +sm.zoomCamera(0, 4000, 0, 0, 260) +sm.sendDelay(5) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.zoomCamera(0, 2000, 0, 10, 243) +sm.setInnerOverrideSpeakerTemplateID(3003113) # Kao +sm.sendNext("Argh... ugh... My head feels like it's going to burst...") +sm.changeBGM("Bgm26.img/DarkMage", 0, 0) +sm.onLayer(2500, "kao", 0, -80, 0, "Map/Effect2.img/ArcaneRiver1/past", 4, True, -1, False) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(3003113) +sm.showNpcSpecialActionByTemplateId(3003113, "quest", -1) +sm.sendNext("...The Black Mage? Waiting... at the end of Arcane River... A crucial power... The future...") +sm.sendSay("I... I remember...") +sm.sendSay("The future I came back to prevent... #h0#... fought against the Black Mage at the end of Arcane River, and lost...") +sm.sendSay("You... didn't have that crucial power... Couldn't destroy Black Mage completely...") +sm.sendSay("You stumbled because you were tricked... By Rino, Arma's follower!") +sm.sendSay("That's it! The reason I used every ounce of my power to travel back in time... It was to prevent my past self from making the same mistake...") +sm.offLayer(300, "kao", False) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("Rino... Arma... History is repeating itself!") +sm.sendSay("...I won't let it all happen again!") +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(3003112) +sm.showNpcSpecialActionByTemplateId(3003112, "smile", 0) +sm.resetNpcSpecialActionByTemplateId(3003112) +sm.showNpcSpecialActionByTemplateId(3003112, "smile2", -1) +sm.setInnerOverrideSpeakerTemplateID(3003112) # Rino +sm.sendNext("#face0#Hmph. I knew I shouldn't have let you live... You barely have any power left for my master to absorb.") +sm.setInnerOverrideSpeakerTemplateID(3003113) # Kao +sm.sendSay("Argh... I won't let it happen again...") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 1000) +sm.sendDelay(500) +sm.zoomCamera(0, 4000, 0, -50, 260) +sm.sendDelay(5) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(500) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.zoomCamera(0, 2000, 0, 10, 243) +sm.setInnerOverrideSpeakerTemplateID(3003112) # Rino +sm.sendNext("#face0#Hehe, don't get any funny ideas. You can't even take care of yourself in the state you're in.") +sm.sendSay("#face0#That friend of yours will be nourishment for Arma. As for you... It seems you've served your purpose once again. It's time you disappeared.") +sm.sendSay("#face0#Of course, I don't want your friend to suspect anything's amiss. I'd better summon up a doppelganger.") +sm.resetNpcSpecialActionByTemplateId(3003112) +sm.showNpcSpecialActionByTemplateId(3003112, "change", 0) +sm.sendDelay(1000) +sm.resetNpcSpecialActionByTemplateId(3003112) +sm.showNpcSpecialActionByTemplateId(3003112, "stand2", -1) +sm.showEffect("Effect/Direction19.img/effect/rino/0", 0, 400, -10, 0, 0, 0, 0) +sm.sendDelay(500) +sm.spawnNpc(3003113, -80, 134) +sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) +sm.sendNext("#face0#You know, in a way, you'll get to be there when your precious #h0# meets their end. Hahaha. Goodbye.") +sm.onLayer(1500, "kao", 0, 0, 0, "Map/Effect2.img/ArcaneRiver1/fall2", 4, True, -1, False) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendDelay(1500) +sm.offLayer(1500, "kao", False) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/fall", 200) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(450001380) diff --git a/scripts/field/enter_450001310.py b/scripts/field/enter_450001310.py new file mode 100755 index 0000000..b2c344a --- /dev/null +++ b/scripts/field/enter_450001310.py @@ -0,0 +1,8 @@ +# id 450001310 (Hidden Street : Lake of Oblivion), field 450001310 +sm.createQuestWithQRValue(34125, "310=2") +sm.lockInGameUI(True, False) +sm.sendDelay(10) +sm.removeAdditionalEffect() +sm.progressMessageFont(3, 20, 8, 0, "You can use the directional keys to steer the boat.") +sm.sendDelay(500) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_450001320.py b/scripts/field/enter_450001320.py new file mode 100755 index 0000000..f188577 --- /dev/null +++ b/scripts/field/enter_450001320.py @@ -0,0 +1,9 @@ +# id 450001320 (Hidden Street : Fire Zone Cliff), field 450001320 +sm.progressMessageFont(3, 20, 8, 0, "Climb up the cliff.") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.forcedInput(7) +sm.forcedInput(3) +sm.sendDelay(50) +sm.forcedInput(0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_450001330.py b/scripts/field/enter_450001330.py new file mode 100755 index 0000000..739a7b2 --- /dev/null +++ b/scripts/field/enter_450001330.py @@ -0,0 +1,54 @@ +# id 450001330 (Hidden Street : Fire Zone Skyline), field 450001330 +if sm.hasQuestCompleted(34112): + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.createQuestWithQRValue(34125, "370=2;390=2;310=2;320=2;330=2") + sm.spawnNpc(3003141, -22, -398) + sm.showNpcSpecialActionByTemplateId(3003141, "summon", 0) + sm.spawnNpc(3003142, -213, 76) + sm.showNpcSpecialActionByTemplateId(3003142, "summon", 0) + sm.sendDelay(1000) + sm.blind(False, 0, 0, 0, 0, 1500) + sm.sendDelay(1000) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3003142) # Rino + sm.sendNext("Kao said he's going back to where he came from, right? We should turn around when we reach that peak over there.") + sm.setInnerOverrideSpeakerTemplateID(3003141) # Kao + sm.sendSay("...") + sm.setInnerOverrideSpeakerTemplateID(3003142) # Rino + sm.sendSay("...Kao?") + sm.moveNpcByTemplateId(3003141, True, 500, 10) + sm.sendDelay(1500) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/fall2", 200) + sm.blind(True, 255, 0, 0, 0, 500) + sm.sendDelay(500) + sm.onLayer(1500, "kao", 0, -80, 0, "Map/Effect2.img/ArcaneRiver1/fall", 4, True, -1, False) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/fireBird2", 100) + sm.sendDelay(500) + sm.changeBGM("SoundEff.img/ArcaneRiver/thrill", 0, 0) + sm.sendNext("#b(Kao swoops towards Rino on his Fire Bird.)#k \r\nWhat are you doing? That's dangerous...!") + sm.playSound("Sound/SoundEff.img/ArcaneRiver/fireBird3", 200) + sm.sendSay("Stop that or we're going to fall! Why are you doing this?") + sm.setInnerOverrideSpeakerTemplateID(3003141) # Kao + sm.sendSay("...") + sm.sendSay("I saw it... in the Fountain of Reflection.") + sm.sendSay("I saw my past... and... your past, #h0#...") + sm.setParam(57) + sm.sendSay("Huh? What do you mean!?") + sm.sendDelay(1000) + sm.setParam(37) + sm.sendNext("...") + sm.sendSay("#r...Is there really room for two of the same souls?#k\r\n#b(Kao's Fire Bird attacks!)#k") + sm.setInnerOverrideSpeakerTemplateID(3003142) # Rino + sm.sendSay("Arrrgghh!") + sm.sendDelay(1000) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/fall2", 200) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/fireBird2", 200) + sm.blind(True, 255, 0, 0, 0, 250) + sm.sendDelay(250) + sm.lockInGameUI(False, True) + sm.warp(450001200) + sm.completeQuest(34114) diff --git a/scripts/field/enter_450001340.py b/scripts/field/enter_450001340.py new file mode 100755 index 0000000..17faca0 --- /dev/null +++ b/scripts/field/enter_450001340.py @@ -0,0 +1,16 @@ +# id 450001340 (Hidden Street : Arma's Hideout), field 450001340 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.startQuest(34119) +sm.spawnNpc(3003113, 0, 164) +sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003113) +sm.showNpcSpecialActionByTemplateId(3003113, "lying", -1) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.lockInGameUI(False, True) +sm.progressMessageFont(3, 20, 8, 0, "Kao was hurt defending you from Arma. Defeat Arma and escape from this place.") +sm.startQuest(34119) +sm.createQuestWithQRValue(34125, "370=2;380=2;390=2;300=2;310=2;320=2;330=2;340=2") +sm.warp(450001219) diff --git a/scripts/field/enter_450001350.py b/scripts/field/enter_450001350.py new file mode 100755 index 0000000..c448219 --- /dev/null +++ b/scripts/field/enter_450001350.py @@ -0,0 +1,7 @@ +# id 450001350 (Hidden Street : Cave of Repose Exit), field 450001350 +sm.createQuestWithQRValue(34125, "350=2;370=2;380=2;390=2;300=2;310=2;320=2;330=2;340=2") +sm.lockInGameUI(True, False) +equips = [1442277, ] +sm.avatarLookSet(equips) +sm.lockInGameUI(False, True) +sm.progressMessageFont(3, 20, 8, 0, "The way out of the Cave of Repose is to the right. Help Kao and escape the cave.") diff --git a/scripts/field/enter_450001360.py b/scripts/field/enter_450001360.py new file mode 100755 index 0000000..13e63a5 --- /dev/null +++ b/scripts/field/enter_450001360.py @@ -0,0 +1,55 @@ +# id 450001360 (Hidden Street : Damp Falls), field 450001360 +sm.createQuestWithQRValue(34125, "350=2;360=2;370=2;380=2;390=2;300=2;310=2;320=2;330=2;340=2") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003113, -322, 24) +sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003113) +sm.showNpcSpecialActionByTemplateId(3003113, "lying", -1) +sm.zoomCamera(0, 2000, 0, -340, 130) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 2000) +sm.zoomCamera(2000, 2000, 2000, -340, 70) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Kao! Kao, wake up!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003113) # Kao +sm.sendSay("#face0#Ugh...") +sm.showFadeTransition(0, 1000, 1000) +sm.sendDelay(500) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(3003113) +sm.showNpcSpecialActionByTemplateId(3003113, "stand2", -1) +sm.sendNext("#face0#...Looks like I haven't completely vanished yet. I'm glad. I have one last thing to tell you, and it's important.") +sm.setParam(57) +sm.sendSay("Kao...") +sm.setParam(37) +sm.sendSay("#face0#I will probably disappear after this.") +sm.sendSay("#face0#But...") +sm.sendSay("#face0#Don't be sad.") +sm.sendSay("#face0#My sacrifice... It was something I had to do... It was the reason I came here.") +sm.sendSay("#face0#...I need you to remember everything I'm about to tell you. We won't get another chance.") +sm.sendSay("#face0#We have changed things. You survived Arma with your power intact. You will be able to do what I never could. You are strong enough to receive the power of the Arcane Symbols.") +sm.sendSay("#face0#You will encounter Erdas of all shapes and sizes as you make your way along the Arcane River. Gather the Arcane Symbols, and grow stronger.") +sm.sendSay("#face0#Many threats will be lurking in the shadows. But as many enemies await you on the road to come, you will find even more allies.") +sm.sendSay("#face0#When I disappear, you must take my Arcane Symbol and jump down the waterfall. After that...") +sm.sendDelay(1000) +sm.sendNext("#face0#Ugh...") +sm.sendDelay(1000) +sm.sendNext("#face0#I don't have much time. Our future is in your hands now.") +sm.sendDelay(1000) +sm.sendNext("#face0#I entrust this stone to you. It's all I can do for you now. Goodbye #h0#. Please... Stop the Black Mage. Protect this world...") +sm.resetNpcSpecialActionByTemplateId(3003113) +sm.showNpcSpecialActionByTemplateId(3003113, "bye", 0) +sm.sendDelay(2400) +sm.zoomCamera(4000, 2000, 4000, -200, 70) +sm.sendDelay(2000) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.lockInGameUI(False, True) +sm.warp(450001250) diff --git a/scripts/field/enter_450001370.py b/scripts/field/enter_450001370.py new file mode 100755 index 0000000..5199432 --- /dev/null +++ b/scripts/field/enter_450001370.py @@ -0,0 +1,31 @@ +# id 450001370 (Hidden Street : Mirage Cliff), field 450001370 +sm.createQuestWithQRValue(34125, "370=2;390=2;310=2;320=2") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003113, 70, 213) +sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) +sm.spawnNpc(3003112, 160, 213) +sm.showNpcSpecialActionByTemplateId(3003112, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003112) # Rino +sm.sendNext("Blow with all your might on this hard shell...") +sm.playSound("Sound/SoundEff.img/ArcaneRiver/fireBird", 100) +sm.spawnNpc(3003124, 1000, 75) +sm.showNpcSpecialActionByTemplateId(3003124, "summon", 0) +sm.moveNpcByTemplateId(3003124, True, 400, 75) +sm.sendDelay(2000) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/fireBird3", 100) +sm.sendNext("The Flame Bird answered your call. You should be able to reach the end of Vanishing Journey on its back.") +sm.sendSay("Oh, did Kao say that he's going back to where he came from?") +sm.sendSay("So you're heading to the end of the Vanishing Journey? We'll escort you, it's on our way.") +sm.sendSay("Here are those Solid Claws and Sticky Oils you gathered. If you try and ride a Flame Bird without them, you're gonna have a bad time.") +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.lockInGameUI(False, True) +sm.warp(450001330) diff --git a/scripts/field/enter_450001380.py b/scripts/field/enter_450001380.py new file mode 100755 index 0000000..e995e4d --- /dev/null +++ b/scripts/field/enter_450001380.py @@ -0,0 +1,66 @@ +# id 450001380 (Hidden Street : Split Road of Destiny), field 450001380 +CUTSCENEDONE = "CutSceneDone" +if not field.hasProperty(CUTSCENEDONE): + sm.createQuestWithQRValue(34125, "370=2;380=1;390=2;310=2;320=2;330=2") + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.spawnNpc(3003113, -270, 165) + sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) + sm.spawnNpc(3003112, 175, 165) + sm.showNpcSpecialActionByTemplateId(3003112, "summon", 0) + sm.resetNpcSpecialActionByTemplateId(3003113) + sm.showNpcSpecialActionByTemplateId(3003113, "damaged", -1) + sm.zoomCamera(0, 2000, 0, 100, 206) + sm.sendDelay(1000) + sm.blind(False, 0, 0, 0, 0, 1500) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3003112) # Rino + sm.sendNext("Here's the exit! And look, there are no Slaws blocking this path.") + sm.sendSay("This way, go on--") + sm.forcedMove(False, 30) + sm.sendDelay(1000) + sm.playSound("Sound/Foot.img/cave/0", 200) + sm.sendDelay(500) + sm.playSound("Sound/Foot.img/cave/1", 200) + sm.sendDelay(300) + sm.playSound("Sound/Foot.img/cave/2", 200) + sm.sendDelay(500) + sm.playSound("Sound/Foot.img/cave/1", 200) + sm.sendDelay(300) + sm.setInnerOverrideSpeakerTemplateID(3003113) # Kao + sm.sendNext("...Stop!") + sm.changeBGM("SoundEff.img/ArcaneRiver/thrill", 0, 0) + sm.zoomCamera(1500, 1000, 1500, 20, 106) + sm.forcedMove(True, 20) + sm.sendDelay(1000) + sm.sendDelay(1000) + sm.sendNext("...You can't go that way!") + sm.sendDelay(500) + sm.showFadeTransition(0, 1000, 1000) + sm.sendDelay(500) + sm.zoomCamera(0, 2000, 0, -300, 200) + sm.removeOverlapScreen(500) + sm.sendDelay(500) + sm.zoomCamera(4000, 2000, 4000, -50, 200) + sm.sendNext("#h0#, you have to believe me. Rino's leading you into a trap.") + sm.sendSay("The Fountain of Reflection... That's where I found my missing memories, and learned the truth about Rino.") + sm.sendSay("...And learned how I lost my memories in the first place!") + sm.blind(True, 255, 0, 0, 0, 250) + sm.sendDelay(250) + sm.lockInGameUI(False, True) + sm.warp(450001300) + field.setProperty(CUTSCENEDONE, True) +else: + sm.lockInGameUI(True, False) + sm.spawnNpc(3003113, -270, 165) + sm.spawnMob(8641010, 658, 177, False) + sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) + sm.lockInGameUI(False, True) + while sm.hasMobsInField(): + sm.waitForMobDeath() + +sm.warp(450001340) + diff --git a/scripts/field/enter_450001390.py b/scripts/field/enter_450001390.py new file mode 100755 index 0000000..df8b705 --- /dev/null +++ b/scripts/field/enter_450001390.py @@ -0,0 +1,49 @@ +# id 450001390 (Hidden Street : Mirage Cliff), field 450001390 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.createQuestWithQRValue(34125, "390=2;310=2;320=2") +sm.spawnNpc(3003113, -545, 166) +sm.showNpcSpecialActionByTemplateId(3003113, "summon", 0) +sm.zoomCamera(0, 2000, 0, -245, 227) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.forcedMove(False, 515) +sm.moveNpcByTemplateId(3003113, False, 380, 180) +sm.zoomCamera(2000, 2000, 2000, -45, 227) +sm.sendDelay(3500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003113) # Kao +sm.sendNext("Huh. We just took a short boat ride, but the view here is completely different from the one in the Nameless Town.") +sm.sendSay("We finally made to the top of the cliff, but... where do we go from here?") +sm.zoomCamera(2000, 2000, 2000, 150, 227) +sm.sendDelay(3000) +sm.sendNext("Looks like there's a bridge up there. We can use it to cross to the other side.") +sm.moveNpcByTemplateId(3003113, False, 230, 150) +sm.forcedMove(False, 270) +sm.sendDelay(3000) +sm.spawnNpc(3003112, -220, 140) +sm.showNpcSpecialActionByTemplateId(3003112, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3003112) # Rino +sm.sendNext("Wait!") +sm.moveNpcByTemplateId(3003112, False, 195, 180) +sm.zoomCamera(2000, 2000, 2000, 120, 227) +sm.sendDelay(2000) +sm.forcedMove(True, 30) +sm.moveNpcByTemplateId(3003113, True, 5, 120) +sm.sendNext("You must not cross that bridge!") +sm.sendSay("This place is called the Extinction Zone... That bridge is an illusion created by the blue flames of extinction to trick you!") +sm.sendSay("If you try to cross it, you'll be swallowed up by the flames in an instant.") +sm.sendSay("You must be new here... Why have you come to a dangerous place like this?") +sm.setParam(35) +sm.sendSay("#b(You explain that you are trying to reach the end of Arcane River.)#k") +sm.setParam(37) +sm.sendSay("...But you don't have enough information about this place to do that.") +sm.sendSay("You're being reckless just wandering around here blindly!") +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.lockInGameUI(False, True) +sm.warp(450001100) diff --git a/scripts/field/enter_450001550.py b/scripts/field/enter_450001550.py new file mode 100755 index 0000000..186df36 --- /dev/null +++ b/scripts/field/enter_450001550.py @@ -0,0 +1,10 @@ +# id 450001550 (Nina's Erda Investigation : Temporary Investigation Base), field 450001550 +sm.sm.getOffFieldEffectFromWz("Map/Effect.img/killing/fail") +sm.createQuestWithQRValue(34170, "count=0;date=19/06/18") +sm.setSpeakerID(3003145) # Nina +res = sm.sendNext("#b#eErda Spectrum#n#k\r\n\r\nAh, I see you made it back without a scratch. That's more than I can say. Well done!\r\n#L1# I'd like to return to Nameless Town.#l") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003145) # Nina +sm.sendNext("Unfortunately, you didn't complete the investigation. Better luck next time... Goodbye!") +sm.createQuestWithQRValue(34170, "count=0;date=19/06/18;clear=0") +sm.warp(450001000) diff --git a/scripts/field/enter_450002023.py b/scripts/field/enter_450002023.py new file mode 100755 index 0000000..e39b212 --- /dev/null +++ b/scripts/field/enter_450002023.py @@ -0,0 +1,5 @@ +# id 450002023 (Chu Chu Island : Quiet Village Path), field 450002023 +sm.setMapTaggedObjectVisible("obj_01", False, 0, 0) +sm.setMapTaggedObjectVisible("obj_02", False, 0, 0) +sm.setMapTaggedObjectVisible("obj_03", False, 0, 0) +sm.setMapTaggedObjectVisible("obj_04", False, 0, 0) diff --git a/scripts/field/enter_450002201.py b/scripts/field/enter_450002201.py new file mode 100755 index 0000000..ad0f5a7 --- /dev/null +++ b/scripts/field/enter_450002201.py @@ -0,0 +1,166 @@ +# id 450002201 (Chu Chu Island : Muto's Descent), field 450002201 +sm.setMapTaggedObjectVisible("obj_01", True, 0, 0) +sm.createQuestWithQRValue(34220, "a=1;b=1;c=1;e=1;f=1") +sm.lockInGameUI(True, False) +sm.spawnNpc(3003164, 194, 138) +sm.showNpcSpecialActionByTemplateId(3003164, "summon", 0) +sm.spawnNpc(3003162, 143, 138) +sm.showNpcSpecialActionByTemplateId(3003162, "summon", 0) +sm.spawnNpc(3003163, 75, 138) +sm.showNpcSpecialActionByTemplateId(3003163, "summon", 0) +sm.spawnNpc(3003160, -6, 138) +sm.showNpcSpecialActionByTemplateId(3003160, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.removeAdditionalEffect() +sm.setMapTaggedObjectVisible("obj_01", True, 0, 0) +sm.completeQuestNoCheck(34224) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.spawnNpc(3003167, -400, 138) +sm.showNpcSpecialActionByTemplateId(3003167, "summon", 0) +sm.moveNpcByTemplateId(3003167, False, 70, 250) +sm.sendDelay(1000) +sm.spawnNpc(3003168, -400, 138) +sm.showNpcSpecialActionByTemplateId(3003168, "summon", 0) +sm.moveNpcByTemplateId(3003168, False, 220, 250) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bChief! Chef!#k Hurry, over here!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("(Panting) Well...?! Where is that mysterious #bassistant#k who helped you, and where's that #bdish#k of yours?") +sm.setParam(57) +sm.sendSay("...Seriously? They're standing right there... Ahem. Allow me to introduce, the #bDelicious Beefy Tastesplosion Sandwich#k, and #bSimia#k, the magnificent chef who assisted me! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("W-what?! #bSimia#k?") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("H-hello Chef...") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face0#You! The entire kitchen is in a fervor trying to prepare my masterpiece \r\nfor Muto before it's too late, and you... You were you helping \r\nthat idiot over there make food this whole time?") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("I'm sorry... I know the kitchen is very busy... But it's not like you would've let me cook anyway. That's why I wanted to help this traveler...") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face0#Even if you cannot cook, there is still trash to empty! Slurp! \r\nThere are many things to do! Don't think for a moment I will forget this.") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Hey! Who's this long-tongued jerk?") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("It must be that stupid bully Chef. Yawn. I'm bored now...") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("Who are these pipsqueaks?! Oh, you must be the three siblings who \r\nhave #btaste only for garbage#k, just like Simia!") +sm.sendSay("#face4#Even if you were in a hurry, why would you accept help from those \r\nwith no taste making food? Pitiful!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("#face0#But the dish has such a #bcatchy name#k!") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face0#Stupid Chief! There's no time!\r\nHurry and instruct Muto to pick a food!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Hold your horses. I'm on it!\r\nHey Muto! #bGulla#k is attacking! We've prepared #b2 types#k of food for you. So eat something and go kick #bGulla#k's butt!") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face2#Mu-to... is... hun... gry...") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("Hey! #bBlockhead#k! Stop saying you're hungry and try my dish!\r\nI don't know why you've been so picky about your food,\r\nbut even you will see my dish is a masterpiece!") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Chef... You shouldn't be so mean to Muto... Muto is a nice child who protects us.") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face0#W-what?! Are you lecturing me? You're not even a real chef, and now \r\nyou're trying to tell me what to do?") +sm.sendSay("#face0#Simia! You are hereby banned from my kitchen! \rmPtooey! I am finished with you!") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("...") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("Hurry up and choose Muto! Do you know how much trouble you have \r\nput us through?! Hurry up and eat this, and go defeat Gulla!") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("Hm... (Sniff, sniff)") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Oh... Muto's giving it the old sniff test!") +sm.flipNpcByTemplateId(3003164, False) +sm.flipNpcByTemplateId(3003162, False) +sm.flipNpcByTemplateId(3003163, False) +sm.flipNpcByTemplateId(3003160, False) +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#fs50#Hmm?!") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face4#Doesn't it smell delectable? Slurp! Now, consume my delicious \r\ndelicacy, and get up!") +sm.onLayer(1500, "eat", 0, 0, 0, "Map/Effect2.img/ArcaneRiver2/eat", 4, True, -1, False) +sm.sendDelay(3000) +sm.offLayer(1500, "eat", False) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 0, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003160, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003162, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003163, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003164, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003167, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003168, 4878499) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendNext("M-Muto! Chooses our #bDelicious Beefy Tastesplosion Sandwich#k!") +sm.completeQuestNoCheck(34223) +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face0##fs30#Th... This is... Goo... Good!") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face0#What are you talking about Muto? You haven't even tried my food!\r\nHurry and eat it!") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face0#Muto... HATE.. You eat it...") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face0#You ungrateful rock! Why aren't you eating my food!?") +sm.setParam(57) +sm.sendSay("Shut it, Lyck! Muto doesn't want to eat it!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Yeah! Your food tastes like #bCrilia poop#k!") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face0#How DARE you! I won't accept this insult! Eat! Eat it now!") +sm.completeQuestNoCheck(34225) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendNext("#face1##fs50#NO EAT!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Uh... Is it time for me to step in!? Chef Lyck, go get some air! Hyaaa!") +sm.blind(True, 500, 255, 255, 255, 0) +sm.sendDelay(2000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendNext("There. Master Lyck should be landing safely in the village any minute now.") +sm.setParam(57) +sm.sendSay("H-huh? I have the strangest feeling of Deja vu...") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face2##fs30#Waaah! No eat! No fight!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Muto, didn't we give you delicious food? Now get up and stop Gulla!") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Chief, why don't you let me try...") +sm.sendSay("Muto. It's been hard protecting us until now, hasn't it?") +sm.sendSay("You couldn't eat anything you wanted... It must have been hard going hungry for so long... You poor thing...") +sm.sendSay("You don't need to fight if you don't want to. I'm just happy that you're eating... And thank you for eating the food I made. I know it isn't very good...") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("Muto... Want to eat... the rest...") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("#face0#Y-You do? Please, go ahead! We made it #bjust for you#k.") +sm.setMapTaggedObjectVisible("obj_01", False, 0, 0) +sm.completeQuestNoCheck(34223) +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face0##fs30#Om... Yum! Gooooood.") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Ah! He even ate Master Lyck's food!") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendNext("Gulla's almost here! Eek!") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face0#Muto... is full... ...Thank you.") +sm.sendSay("#face0#Now... I go... Play... With #rGulla#k...") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Muto... You're going to protect us?") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face0#Yes... Muto... Eat delicious food... Protect... #bfriends#k...") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("(Sniffs) #bFriends#k... Muto... Thanks...") +sm.blind(True, 255, 0, 0, 0, 1500) +sm.onLayer(1500, "fight", 0, 0, 0, "Map/Effect2.img/ArcaneRiver2/fight", 4, True, -1, False) +sm.sendDelay(3000) +sm.offLayer(1500, "fight", False) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.warp(450002021) diff --git a/scripts/field/enter_450002202.py b/scripts/field/enter_450002202.py new file mode 100755 index 0000000..d192a17 --- /dev/null +++ b/scripts/field/enter_450002202.py @@ -0,0 +1,118 @@ +# id 450002202 (Chu Chu Island : Chu Chu Island), field 450002202 +if not sm.hasQuestCompleted(34202) or not sm.hasQuest(34202): + sm.createQuestWithQRValue(18418, "B=34841") + sm.createQuestWithQRValue(34220, "a=1;e=1") + sm.lockInGameUI(True, False) + sm.zoomCamera(0, 1000, 0, 1250, 40) + sm.removeAdditionalEffect() + sm.spawnNpc(3003167, 1402, 45) + sm.showNpcSpecialActionByTemplateId(3003167, "summon", 0) + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(1200) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1400) + sm.sendDelay(1000) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon + sm.sendNext("Here we are, the heart of #bChu Chu Island#k! Welcome to #bChu Chu Village#k!") + sm.createQuestWithQRValue(1062, "1=0") + sm.setParam(57) + sm.sendSay("#bChu Chu#k?") + sm.setParam(37) + sm.sendSay("#face0#Yeah #bChu Chu#k! What do you think? Isn't it a great name? Hahaha! I have the greatest names! Don't you like it?") + sm.setParam(57) + sm.sendSay("#bWho are you#k? And what was that #bhuge creature#k blocking my path? I need to keep going... Although... I'm hungry... and my head really hurts.") + sm.setParam(37) + sm.sendSay("You sure are curious!") + sm.sendSay("Well, I'm curious about you too. Allow me to start.") + sm.sendSay("We are...!") + sm.sendSay("#face0#Actually, I'm afraid I don't remember! Heheheh!") + sm.setParam(57) + sm.sendSay("That's... suspicious.\r\nAre you a servant of the #rBlack Mage#k?") + sm.setParam(37) + sm.sendSay("The #rBlack Mage#k? What's that?") + sm.setParam(57) + sm.sendSay("Your #bmaster#k who's sitting at the end of this river, plotting to destroy the world!") + sm.setParam(37) + sm.sendSay("Uh... I don't know much about the river. And that #rmaster#k thing you mentioned is new to me.") + sm.sendSay("#face0#Well actually, there is this #bcool, brave, and handsome#k chief but... 'Master'? I'd say I'm a #bvolunteer#k. I'm nice like that. Nobody #basked me#k to maintain order, I just do it out of the kindness of my heart, meow!") + sm.sendSay("And in any case, those that live here don't have any #bmemories of their past#k. It's kinda weird now that I think about it.") + sm.sendSay("We all just sort of woke up at different times in different places. Eventually we ran into each other, and started this village, meow!") + sm.setParam(57) + sm.sendSay("(It seems he's a little too dumb to be one of the #rBlack Mage's minions#k...)") + sm.sendSay("(A lion that walks and talks like a person... Were the residents of Chu Chu Island created #bby mixing lifeforms#k...?)") + sm.setParam(37) + sm.sendSay("#face1#Not sure what you're mumbling about over there, but Chu Chu Island is a beautiful place overflowing with food.\r\n#bEveryone#k here is #bvery#k happy.") + sm.sendSay("Well... Except for #bMuto#k!") + sm.setParam(57) + sm.sendSay("#bMuto#k?") + sm.setParam(37) + sm.sendSay("Right! The one who #battacked#k you and #bstole your food#k!") + sm.setParam(57) + sm.sendSay("Oh... That huge creature? What's his deal anyway?") + sm.setParam(37) + sm.sendSay("Muto is a #bbaby#k adored by the people of #bChu Chu Village#k. He's such a #bnice, honest kid#k.") + sm.setParam(57) + sm.sendSay("Uh... he seems a little violent...") + sm.setParam(37) + sm.sendSay("What? Our #bMuto#k? Don't be silly...\r\nHe's just a kind little fella that #bprotects our village#k...") + sm.sendSay("Y'see, there are #btwo colossal#k creatures here on Chu Chu Island.") + sm.sendSay("There's our boy #bMuto#k of course, and then there's #rGulla#k.") + sm.sendSay("#rGulla#k lives in the river. He doesn't understand words or reason, unlike us or #bMuto#k. ") + sm.onLayer(1500, "attack", 0, 0, 0, "Map/Effect2.img/ArcaneRiver2/attack", 4, True, -1, False) + sm.sendSay("And he's #rrough#k as all get-out. Gulla comes up here #bevery 10 days#k to #beat#k anything that moves.") + sm.offLayer(1000, "attack", False) + sm.onLayer(1500, "fight", 0, 0, 0, "Map/Effect2.img/ArcaneRiver2/fight", 4, True, -1, False) + sm.sendSay("Good thing we've got #bour adorable Muto to beat up Gulla#k every time he shows up!") + sm.offLayer(1000, "fight", False) + sm.sendSay("For the gift of regular beatings, we feed Muto all the delicious food we can scrounge up. You may have noticed, but he's a little on the heavy side... that was probably us.") + sm.sendSay("This whole arrangement had been working out pretty well, #buntil recently#k...") + sm.setParam(57) + sm.sendSay("What happened?") + sm.setParam(37) + sm.sendSay("Err, well... #bHe#k...") + sm.setParam(57) + sm.sendSay("Go on!") + sm.setParam(37) + sm.sendSay("He got #bpicky about his food#k...") + sm.setParam(57) + sm.sendSay("That's crazy!") + sm.setParam(37) + sm.sendSay("Muto said the food we made was yucky, and he stopped fighting against Gulla... As a result, the villagers live in fear of #rGulla#k every day...") + sm.sendSay("#face1#Oh, but hey! That #bfood#k you gave Muto!\r\nHe #breally liked it!#k") + sm.sendSay("No... I understand where Muto's coming from... There is nothing more difficult than #beating food that doesn't taste good#k... #bPoor Muto#k...") + sm.setParam(57) + sm.sendSay("But he ate almost everything I had! I've got, like, one corner of sandwich left.") + sm.setParam(37) + sm.sendSay("Oh... really? That's no good. That's like a crumb to our big ol' Muto.") + sm.setParam(57) + sm.sendSay("But he ate all of the food in my bag, except for this lonely half of a sandwich.") + sm.sendSay("Uh... So anyway, is there #ba way#k to get around Muto so I can reach the end of the river?") + sm.setParam(37) + sm.sendSay("Taste matters, but... Muto throws a tantrum if his meal doesn't fill him up.") + sm.setParam(57) + sm.sendSay("Uh... So is there #bany way#k to get around Muto so I can reach the end of the river?") + sm.setParam(37) + sm.sendSay("#face0#Nope! #bNot a single one#k.") + sm.setParam(57) + sm.sendSay("You... Sound so sure about that.") + sm.setParam(37) + sm.sendSay("Stranger! Let's work together! You need to make it further down the river, and #byou're not going anywhere#k if Muto doesn't move.") + sm.setParam(57) + sm.sendSay("...") + sm.setParam(37) + sm.sendSay("Also, we're kind of all at #rGulla's mercy#k without help from #bMuto#k...") + sm.sendSay("#face1#So what do you say? Will you help us make food that #bMuto#k will actually eat?") + sm.sendSay("#face0#It shouldn't be hard at all. This place is packed with #bdelicious ingredients#k! Yes, siree!") + sm.setParam(57) + sm.sendSay("I can't cook...") + sm.setParam(37) + sm.sendSay("#face0#Oh! Don't you worry about that! I already told the greatest chef on the island, #bMaster Lyck#k, about you and your #btiny, delicious food#k!") + sm.sendSay("Why don't you pay #bMaster Lyck#k a visit right now!") + sm.sendSay("Oh, and hey... When you see #bMaster Lyck#k, don't say anything about his #btongue#k, okay?") + sm.blind(True, 255, 0, 0, 0, 500) + sm.sendDelay(500) + sm.lockInGameUI(False, True) + sm.warp(450002000) diff --git a/scripts/field/enter_450002204.py b/scripts/field/enter_450002204.py new file mode 100755 index 0000000..ed33bc8 --- /dev/null +++ b/scripts/field/enter_450002204.py @@ -0,0 +1,82 @@ +# id 450002204 (Chu Chu Island : Chu Chu Island), field 450002204 +sm.startQuest(34200) +sm.completeQuestNoCheck(34200) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedMove(False, 2) +sm.zoomCamera(0, 1000, 0, 570, 70) +sm.createQuestWithQRValue(18418, "B=34840") +sm.spawnNpc(3003167, 796, -64) +sm.showNpcSpecialActionByTemplateId(3003167, "summon", 0) +sm.forcedInput(4) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(3000) +sm.zoomCamera(3000, 1000, 5000, 610, 20) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendNext("Hey!") +sm.setParam(57) +sm.sendSay("...") +sm.setParam(37) +sm.sendSay("Wake up, meow!") +sm.sendSay("Err... Roar. I meant roar.") +sm.sendSay("Anyway... Since #ba bop on the head#k knocked them out, maybe another good bop will wake them up? Makes sense to me.") +sm.sendSay("#face1##fs50#Hyaa!") +sm.blind(True, 300, 255, 255, 255, 0) +sm.forcedInput(0) +sm.sendDelay(2000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendNext("#face0#Hey look, you're awake! How are you feeling buddy? Heh!") +sm.setParam(57) +sm.sendSay("Oww... My head. Huh? I was just on the #briver#k and...") +sm.setParam(37) +sm.sendSay("#face1#Hm?! Yes, the #briver#k! This river goes all over! Heh!") +sm.setParam(57) +sm.sendSay("I... don't think this is the same river...") +sm.sendSay("By the way, who are you?") +sm.setParam(37) +sm.sendSay("Oh! Me? I'm the #bgreatest hero#k and #bchief#k that Chu Chu Island has ever seen! I am as #bwise as I am strong#k, and no one is more #brespected#k by the villagers...") +sm.sendSay("#face0#I'm #bLyon#k, Meow!") +sm.setParam(57) +sm.sendSay("Meow?") +sm.setParam(37) +sm.sendSay("H-huh? You're hearing things. I clearly just roared.") +sm.setParam(57) +sm.sendSay("I distinctly heard a meow. Aren't you a #blion#k?") +sm.sendSay("Wait... Ahh! It's a #blion#k! Or at least some kind of man-lion-thing...") +sm.forcedMove(True, 50) +sm.sendDelay(1000) +sm.forcedMove(False, 1) +sm.setParam(37) +sm.sendNext("#face0##bLion#k? What's that? Sounds like food!") +sm.sendSay("Hey, hey, don't wander off. Come over here, let me look at you. Those #bwounds#k you got from Muto definitely need some attention#k.") +sm.setParam(57) +sm.sendSay("Ahh! Stay back!") +sm.forcedMove(True, 50) +sm.sendDelay(1000) +sm.forcedMove(False, 1) +sm.setParam(37) +sm.sendNext("#face0#Heh. Looks like #bMuto#k gave you a pretty good knock here! How about we head down to the village for now? After a little grub and a nap, you should be right as rain!") +sm.setParam(57) +sm.sendSay("Village? There's a village here?") +sm.setParam(37) +sm.sendSay("Of course! It's the beauteous #bChu Chu Village#k! Now follow me!") +sm.moveNpcByTemplateId(3003167, False, 320, 250) +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("W-what was that?") +sm.sendSay("You know what...? #bA walking, talking lion#k isn't the weirdest thing I've seen in Maple World...") +sm.sendSay("I guess I'll follow him for now!") +sm.forcedMove(False, 800) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(450002000) diff --git a/scripts/field/enter_450002205.py b/scripts/field/enter_450002205.py new file mode 100755 index 0000000..db60b1f --- /dev/null +++ b/scripts/field/enter_450002205.py @@ -0,0 +1,177 @@ +# id 450002205 (Slurpy Forest : Quiet Village Path), field 450002205 +sm.setMapTaggedObjectVisible("obj_01", False, 0, 0) +sm.setMapTaggedObjectVisible("obj_02", False, 0, 0) +sm.setMapTaggedObjectVisible("obj_03", False, 0, 0) +sm.setMapTaggedObjectVisible("obj_04", False, 0, 0) +sm.createQuestWithQRValue(34220, "a=1;b=1;c=1;e=1") +sm.completeQuestNoCheck(34206) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3003160, 477, -119) +sm.showNpcSpecialActionByTemplateId(3003160, "summon", 0) +sm.spawnNpc(3003162, 670, -119) +sm.showNpcSpecialActionByTemplateId(3003162, "summon", 0) +sm.spawnNpc(3003163, 727, -119) +sm.showNpcSpecialActionByTemplateId(3003163, "summon", 0) +sm.spawnNpc(3003164, 784, -119) +sm.showNpcSpecialActionByTemplateId(3003164, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.createQuestWithQRValue(18418, "B=34846") +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Uh... Excuse me...") +sm.moveNpcByTemplateId(3003160, True, 1, 250) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("W-who are you? Are you a #bthief#k, here to steal our meal?!") +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003160, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003162, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003163, 4878499) +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 3003164, 4878499) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("No way. #bWe're the only ones who can eat Simia's cooking#k. But if you ARE here to steal from us, #rI won't let you get away with it#k...") +sm.setParam(57) +sm.sendSay("It's nothing like that. I'm just a #btraveler#k passing through, and I followed my nose here. Really, I just want a taste of your cooking...") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Our... food... #bis not eatable#k... You won't like... Hehehe.") +sm.setParam(57) +sm.sendSay("That's not true... There's no way that food that #bsmells this good#k could taste bad...") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Go away!") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Pibik, you shouldn't be so rude to our guest.") +sm.sendSay("You don't look like you're from around here... But just as the Pi siblings say, I'm afraid you'll find my cooking #binedible#k.") +sm.setParam(57) +sm.sendSay("Just... One bite...") +sm.setParam(37) +sm.sendSay("You really look starved. Help yourself, but don't say I didn't warn you.") +sm.setParam(57) +sm.sendSay("Th... Thank you...") +sm.setParam(37) +sm.sendSay("See? We told you that you wouldn't like it. Our tastes are much more developed than the tastes of the villagers.") +sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 0, 4878499) +sm.setParam(57) +sm.sendSay("!!!") +sm.setParam(37) +sm.sendSay("See? We told you that you wouldn't like it. Our tastes are very different from the villagers'.") +sm.setParam(57) +sm.sendSay("What are you talking about?! I've never eaten #banything this good#k!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Liar!") +sm.setParam(57) +sm.sendSay("I'm not lying! This is really good. It's much better than that terrible concoction #bMaster Lyck#k whipped up, no contest!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("You're being awfully informal for someone we just met.") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Pibik! Pimi! That's no way to treat a guest. But how do you know our #bchef#k anyway?") +sm.setParam(57) +sm.sendSay("Well... Here's what happened...") +sm.blind(True, 300, 255, 255, 255, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.setParam(37) +sm.sendNext("Oh... So you went through all that...") +sm.sendSay("It's really bad that #bMuto#k isn't eating... You must feel helpless being stuck here...") +sm.sendSay("But is it true that Muto enjoyed your food?") +sm.setParam(57) +sm.sendSay("It's true! It wasn't that great of a #bsandwich#k either. He certainly enjoyed it more than I would've...") +sm.setParam(37) +sm.sendSay("Would it be possible for us to try that #bsandwich#k?") +sm.setParam(57) +sm.sendSay("Well, I still have the part the villagers didn't eat...") +sm.setParam(37) +sm.sendSay("#face0#Oh! That's plenty! The Pi siblings #bhave a very sensitive palate#k!") +sm.sendSay("#face0#And I might just be a #bkitchen hand#k, but I work at a restaurant!") +sm.sendSay("#face0#Now let's try it together.") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("This is... Pretty good!") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Wow! I've never eaten anything this good besides what Simia cooks!") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Yumyumyumyum! Good! Heehee.") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("#face0#It's really good! I've never had anything like it!") +sm.sendSay("You clearly have #runusual tastes#k, just like us!") +sm.setParam(57) +sm.sendSay("Well... My tastes aren't that unusual...") +sm.setParam(37) +sm.sendSay("No! There's no doubt that you possess #runusual taste#k if you enjoy the same food as us!") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("It's good to have you here, comrade.") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Oh! Where are my manners? We forgot to introduce ourselves. I'm #bSimia#k. I work as a #bkitchen hand#k in Master Lyck's kitchen. He doesn't really let me cook... And these are the Pi siblings. They live with me.") +sm.sendSay("The four of us have #runusual tastes#k, just like you. That's why we have to eat different food from the villagers.") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("They kicked us out... Hehehee.") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("The villagers eat #bdifferent food#k from us, so they think we're #bstrange#k. They weren't comfortable living alongside us so... That's why I took the siblings in and moved out here.") +sm.setParam(57) +sm.sendSay("Then I was right... The villagers are the ones with weird tastes!") +sm.setParam(37) +sm.sendSay("#bWe#k are the ones with strange tastes... Which is why I have to work \r\nas a #bkitchen hand#k even though I want to be a #bchef#k...") +sm.setParam(57) +sm.sendSay("Trust me, it's the villagers who are the weird ones! Your food will be an overnight success in #bMaple World#k!") +sm.setParam(37) +sm.sendSay("Haha... I don't know where that is, but thank you for the compliment. Anyways, I'm not sad. I have #bthree of the best customers a chef could hope for#k.") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("That's right. Your food is the best!") +sm.setParam(57) +sm.sendSay("Hm... I can't believe you got kicked out of the village just for having different tastes...") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("You don't become a chef by cooking #bwhat everyone else likes#k, right? When you're hungry, all that matters is #bwhat tastes good to you.") +sm.sendSay("#face0#The fact that these three enjoy my cooking is enough for me.") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Even if it was only a nibble, that sandwich was tasty!") +sm.setParam(57) +sm.sendSay("I think I understand what's going now... Muto won't eat what the villagers cook for him, but he liked my food.") +sm.sendSay("Clearly his own tastes are #rsimilar to yours and mine#k...") +sm.sendSay("It's Simia, right? Will you please help me? I heard #rGulla#k is supposed to attack in 3 days, but I can't cook to save my life. Would you help me #bprepare a meal for Muto#k?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("It's just so strange... Muto has always enjoyed Master Lyck's cooking.") +sm.setParam(57) +sm.sendSay("Well, not anymore I guess... He clearly enjoyed my sandwich. So, will you help me?") +sm.setParam(37) +sm.sendSay("But I'm not an #bofficial chef#k... #bMaster Lyck#k will be furious if he finds out I've been cooking...") +sm.setParam(57) +sm.sendSay("Who cares if he's angry! #bSimia#k, where I come from, your cooking would be considered infinitely better than #bMaster Lyck#k's. What's more important? Not making your boss angry, or saving a village?") +sm.sendSay("And besides, can you just let Muto starve? Even if Muto #bhates#k your cooking... He's got to eat something.") +sm.setParam(37) +sm.sendSay("...") +sm.sendSay("You're right, of course... ") +sm.sendSay("Even if Muto hates my cooking... #bI can't just let him starve to death!#k") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Muto will definitely love your cooking!") +sm.setParam(57) +sm.sendSay("Thank you Simia! You're making the right choice!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("But... #bwhat food#k are you going to make him?") +sm.setParam(57) +sm.sendSay("Uh... Why not a really big #bsandwich#k? Muto clearly #benjoyed the last one#k!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Hehehe. Sand... Sandwich! #bBig#k and delicious!") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("#face0#Okay then, let's make a #bsandwich#k! We'll make one #bbig#k enough to fill Muto up!") +sm.sendSay("#face0#Hey Pi siblings! Since you have such #bsensitive palates#k, maybe you can figure out what local ingredients taste like what was in that sandwich!") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Let's do it!") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Wow! We're going to make food for Muto! I'm so pumped!") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Heeheehee! It's going to be good!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(450002023) diff --git a/scripts/field/enter_450002250.py b/scripts/field/enter_450002250.py new file mode 100755 index 0000000..5cd8bd6 --- /dev/null +++ b/scripts/field/enter_450002250.py @@ -0,0 +1,2 @@ +# id 450002250 (Chu Chu Island : Slurpy Tree Habitat), field 450002250 +sm.spawnMob(8642016, 528, 138) diff --git a/scripts/field/enter_450003000.py b/scripts/field/enter_450003000.py new file mode 100755 index 0000000..d0626fd --- /dev/null +++ b/scripts/field/enter_450003000.py @@ -0,0 +1,2 @@ +# id 450003000 (Lachelein : Lachelein Main Street), field 450003000 +sm.createQuestWithQRValue(34340, "enter=1") diff --git a/scripts/field/enter_450003100.py b/scripts/field/enter_450003100.py new file mode 100755 index 0000000..9b2816e --- /dev/null +++ b/scripts/field/enter_450003100.py @@ -0,0 +1,32 @@ +# id 450003100 (Lachelein : Hideout), field 450003100 +if not sm.hasQuest(34326) and sm.hasQuestCompleted(34325): + sm.createQuestWithQRValue(34340, "enter=7") + sm.lockInGameUI(True, False) + sm.removeAdditionalEffect() + sm.blind(True, 255, 0, 0, 0, 0) + sm.changeBGM("Bgm00.img/Silence", 0, 0) + sm.sendDelay(1500) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid + sm.sendNext("#face1#Have you ever struggled to awaken from a dream?") + sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q3/0", 128) + sm.sendSay("#face1#Even though you know you are dreaming, the darkness won't \r\nrelease its hold on you... You are paralyzed, and a feeling of helplessness \r\nwashes over you.") + sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q3/1", 128) + sm.sendSay("#face5#Have you ever felt so bereft of hope? Well, you will soon. \r\nWelcome to your nightmare.") + sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q3/2", 128) + sm.sendDelay(500) + sm.onLayer(2000, "0", 0, -80, 1, "Map/Effect3.img/Lacheln/0", 4, True, -1, False) + sm.sendDelay(1500) + sm.offLayer(1500, "0", False) + sm.sendDelay(1500) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly1", 200) + sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly2/buterfly","animation","") + sm.sendDelay(2500) + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(1200) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1400) + sm.changeBGM("Bgm46.img/LachelntheIllusionCity", 0, 0) + sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_450003330.py b/scripts/field/enter_450003330.py new file mode 100755 index 0000000..96bed14 --- /dev/null +++ b/scripts/field/enter_450003330.py @@ -0,0 +1,25 @@ +# id 450003330 (Lachelein Night Market : Noisy Market), field 450003330 +if sm.hasQuest(34316): + sm.setSpeakerType(3) + sm.setParam(5) + sm.setInnerOverrideSpeakerTemplateID(3003238) # Huge Watermelon Mask + sm.sendNext("What's going on?") + sm.setInnerOverrideSpeakerTemplateID(3003236) # Beauty Mask + sm.sendSay("What was I doing just now?") + sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask + sm.sendSay("My memories... Argh! My head... ") + sm.setParam(3) + sm.sendSay("Protective Mask? Are you okay? What is going on?") + sm.setParam(5) + sm.sendSay("Don't worry about me... Take them to safety. But where is safe...?") + sm.setParam(3) + sm.sendSay("Should I take them back to the hideout?") + sm.setParam(5) + sm.sendSay("No. You saw how the Dreamkeepers vanished when the music box was destroyed... This place may actually be safer than the hideout. ") + sm.setParam(3) + sm.sendSay("Then we should return to the hideout alone.") + sm.setParam(5) + sm.setInnerOverrideSpeakerTemplateID(3003221) # Watermelon Mask + sm.sendSay("Hey! Let me come too!") + sm.createQuestWithQRValue(34340, "enter=3") + sm.warp(450003740) diff --git a/scripts/field/enter_450003430.py b/scripts/field/enter_450003430.py new file mode 100755 index 0000000..eb61702 --- /dev/null +++ b/scripts/field/enter_450003430.py @@ -0,0 +1,37 @@ +# id 450003430 (Lachelein Ballroom : Bright Ballroom), field 450003430 +if sm.hasQuest(34319): + sm.createQuestWithQRValue(34340, "enter=4") + sm.lockInGameUI(True, False) + sm.changeBGM("Bgm00.img/Silence", 0, 0) + sm.blind(True, 255, 0, 0, 0, 0) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask + sm.sendNext("#face0##h0#, who do you think the residents of Lachelein really are?") + sm.setParam(57) + sm.sendSay("Who they really are?") + sm.setParam(37) + sm.sendSay("#face0#When the music box was destroyed, knowledge of the outside world \r\nflooded in. Of course, coming from the outside world yourself, \r\nyou must know all about the Arcane River.") + sm.setParam(57) + sm.sendSay("Err...") + sm.setParam(37) + sm.sendSay("#face0#The Arcane River is a strange world, newly born. \r\nBut then #bwhere did the people of Lachelein come from?#k") + sm.setParam(57) + sm.sendSay("I'd wondered that myself.") + sm.setParam(37) + sm.sendSay("#face0#This is what I think, #h0#. \r\n#bThey are Erdas.#k Shaped into human form, and blinded by a dream of being human.") + sm.setParam(57) + sm.sendSay("I suppose that's possible...") + sm.setParam(37) + sm.sendSay("#face0#That would mean we're little more than clumps of energy. But if that's true, \r\nwhat should we do about it?") + res = sm.sendNext("#face0##h0#... I want the truth. Do you think Erdas have '#bsouls#k'?\r\n#b#L0# Of course!#l\r\n#L1# I don't know.#l\r\n#L2# No.#l") + sm.sendNext("#face0#Maybe you're right... Or maybe not.") + sm.sendSay("#face0#Is struggling to live proof of a soul?") + sm.sendSay("#face0#Perhaps all of our efforts are meaningless.") + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(1200) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1400) + sm.changeBGM("Bgm46.img/LachelntheIllusionCity", 0, 0) + sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_450003700.py b/scripts/field/enter_450003700.py new file mode 100755 index 0000000..c928b15 --- /dev/null +++ b/scripts/field/enter_450003700.py @@ -0,0 +1,31 @@ +# id 450003700 (Lachelein : Lachelein Riverside), field 450003700 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.bgmVolume(100, 100) +sm.forcedAction(25, 30000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Yawn... Hey, Flying Fish,\r\n how far have we gone?", 1500, 0, 0, 0, 0, 4, 0, 4878499) +sm.showFadeTransition(0, 1500, 3000) +sm.zoomCamera(0, 2000, 0, 446, 281) +sm.sendDelay(300) +sm.removeOverlapScreen(1500) +sm.sendDelay(2000) +sm.showEffect("Map/Effect3.img/Lacheln/smallB", 0, 0, 0, 0, 0, 0, 0) +sm.changeBGM("Bgm46.img/ClockTowerofNightmare", 0, 0) +sm.sendDelay(5000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "I feel... strangely drowsy...", 1500, 0, 0, 0, 0, 4, 0, 4878499) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly/005","animation","") +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 2500) +sm.sendDelay(5000) +sm.bgmVolume(0, 5000) +sm.sendDelay(5000) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.lockInGameUI(False, True) +sm.warp(450003000) diff --git a/scripts/field/enter_450003710.py b/scripts/field/enter_450003710.py new file mode 100755 index 0000000..b0ab002 --- /dev/null +++ b/scripts/field/enter_450003710.py @@ -0,0 +1,25 @@ +# id 450003710 (Center Street : Center Street), field 450003710 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.spawnNpc(3003257, 402, 70) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.spawnNpc(3003257, 202, 70) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 402, 70, 0, 0, 1, 0) +sm.showEffect("Effect/Summon.img/50", 0, 202, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper +sm.sendNext("You... Come with us...") +sm.setParam(57) +sm.sendSay("(They came out of nowhere!)") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(450003711) diff --git a/scripts/field/enter_450003711.py b/scripts/field/enter_450003711.py new file mode 100755 index 0000000..7fa639b --- /dev/null +++ b/scripts/field/enter_450003711.py @@ -0,0 +1,114 @@ +# id 450003711 (Lachelein Alley : Lachelein Alley), field 450003711 +if sm.hasQuest(34301): + sm.lockInGameUI(True, False) + sm.blind(True, 255, 0, 0, 0, 0) + sm.zoomCamera(0, 2000, 0, 543, 70) + sm.spawnNpc(3003245, 600, -10) + sm.showNpcSpecialActionByTemplateId(3003245, "summon", 0) + sm.spawnNpc(3003257, 670, -10) + sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) + sm.spawnNpc(3003257, 950, -10) + sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) + sm.onLayer(2000, "0", 0, -80, 15, "Map/Effect3.img/Lacheln/1", 4, True, -1, False) + sm.onLayer(2000, "1", 0, -80, 15, "Map/Effect3.img/Lacheln/2", 4, True, -1, False) + sm.sendDelay(3000) + sm.changeBGM("Bgm46.img/ClockTowerofNightmare", 0, 0) + sm.setSpeakerType(3) + sm.setParam(37) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid + sm.sendNext("#face1#Have you ever struggled to awaken from a dream?") + sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q1/0", 128) + sm.sendSay("#face1#Even though you know you are dreaming, the darkness won't \r\nrelease its hold on you... You are paralyzed, and a feeling of helplessness \r\nwashes over you.") + sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q1/1", 128) + sm.sendSay("#face1#I realized when I tore through the cocoon of endless darkness and emerged into the world...") + sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q1/2", 128) + sm.sendSay("#face1#That I was no longer weak.") + sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q1/3", 128) + sm.bgmVolume(100, 1000) + sm.playSound("flowervioleta/spotlight", 100) + sm.offLayer(1500, "1", False) + sm.onLayer(1500, "2", 0, -80, 15, "Map/Effect3.img/Lacheln/3", 4, True, -1, False) + sm.sendDelay(3000) + sm.offLayer(1500, "0", False) + sm.offLayer(1500, "2", False) + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendDelay(1200) + sm.blind(False, 0, 0, 0, 0, 1000) + sm.sendDelay(1400) + sm.setInnerOverrideSpeakerTemplateID(3003245) # Star Mask + sm.sendNext("S-spare... me...") + sm.sendDelay(1500) + sm.showEffect("Map/Effect3.img/Lacheln/pung", 0, 0, -20, 0, 126144594, 0, 0) + sm.sendDelay(300) + sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) + sm.showNpcSpecialActionByTemplateId(3003245, "remove", -1) + sm.bgmVolume(100, 1000) + sm.sendDelay(1000) + sm.showEffect("Map/Effect3.img/Lacheln/pung2", 0, -20, -20, 0, 126144594, 0, 0) + sm.sendDelay(3000) + sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper + sm.sendNext("There is... another.") + sm.forcedMove(True, 300) + sm.moveNpcByTemplateId(3003257, True, 200, 100) + sm.sendDelay(3500) + sm.setParam(57) + sm.sendNext("Who are you?") + sm.setParam(37) + sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid + sm.sendSay("#face6#Welcome to Lachelein, the city of dreams and illusions. Here, there is no sadness or pain. ") + sm.sendSay("#face6#I hope your dream is a pleasant one.") + sm.sendDelay(500) + sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) + sm.showEffect("Map/Effect3.img/Lacheln/pung", 0, 0, -20, 0, 0, 0, 0) + sm.sendDelay(2000) + sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) + sm.bgmVolume(100, 1000) + sm.setParam(57) + sm.sendNext("Nothing... happened?") + sm.setParam(37) + sm.sendSay("#face5#Oh my! It's you... An honored guest.") + sm.sendDelay(1500) + sm.changeBGM("Bgm00.img/Silence", 0, 0) + sm.playSound("Sound/SoundEff.img/blackHeaven/electric_loop", 200) + sm.sendDelay(1500) + sm.bgmVolume(0, 2000) + sm.playSound("flowervioleta/spotlight", 100) + sm.blind(True, 255, 0, 0, 0, 0) + sm.sendNext("#face0#Oh?") + sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask + sm.sendSay("#face0#Hurry, this way!") + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot1", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot2", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot1", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot2", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot1", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot2", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) + sm.sendDelay(150) + sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot1", 200) + sm.sendDelay(150) + sm.sendDelay(1000) + sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid + sm.sendNext("#face1#Well, well... ") + sm.sendSay("#face6#You let them get away.") + sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper + sm.sendSay("P-please... Have mercy...") + sm.sendDelay(500) + sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) + sm.playSound("Sound/Mob.img/8643000/Die", 200) + sm.sendDelay(1500) + sm.lockInGameUI(False, True) + sm.warp(450003100) diff --git a/scripts/field/enter_450003720.py b/scripts/field/enter_450003720.py new file mode 100755 index 0000000..b6bb5a3 --- /dev/null +++ b/scripts/field/enter_450003720.py @@ -0,0 +1,15 @@ +# id 450003720 (Lachelein Alley : Lachelein Alley), field 450003720 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003209) # Gray Mask +sm.sendNext("Oh! There's something important I forgot to tell you! ") +sm.sendSay("I wouldn't try to escape by following the river, if I were you. It's an extremely dangerous place.") +sm.sendSay("Those who fall in are #bsapped of their energy#k. And soon, they are #btorn apart into their component Erdas.#k Isn't that terrible?") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_450003730.py b/scripts/field/enter_450003730.py new file mode 100755 index 0000000..8c2a2a7 --- /dev/null +++ b/scripts/field/enter_450003730.py @@ -0,0 +1,129 @@ +# id 450003730 (Lachelein Night Market : Noisy Market), field 450003730 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003258, 660, -50) +sm.showNpcSpecialActionByTemplateId(3003258, "summon", 0) +sm.spawnNpc(3003251, 460, -50) +sm.showNpcSpecialActionByTemplateId(3003251, "summon", 0) +sm.zoomCamera(0, 2000, 0, 650, 50) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003258) # Music Box +sm.sendNext("Ugh... I don't feel so--") +sm.showNpcSpecialActionByTemplateId(3003258, "remove", 0) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(3003258, "stand2", -1) +sm.setParam(57) +sm.sendNext("He turned into a music box?!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#It's just as I suspected. The music boxes are what's maintaining this \r\ndreamworld! ") +sm.sendDelay(1000) +sm.zoomCamera(450, 2000, 350, 180, 50) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(3003251, True) +sm.forcedFlip(True) +sm.spawnNpc(3003257, 120, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 120, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.spawnNpc(3003257, 60, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 60, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.spawnNpc(3003257, 0, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 0, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.sendDelay(700) +sm.setParam(45) +sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper +sm.sendNext(" The music box... Hands off...") +sm.zoomCamera(500, 2000, 500, 650, 50) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(3003251, True, 200, 160) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendNext("#face0#I'll buy you some time, destroy the music box! ") +sm.sendDelay(1000) +sm.zoomCamera(0, 2000, 0, 650, 50) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.setParam(57) +sm.sendNext("(It's more durable than you expected...)") +sm.setParam(45) +sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper +sm.sendSay(" Move... You're in the way.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#Destroy the music box, #h0#! ") +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Aran/swingT2", 100) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(3003258, "die", -1) +sm.playSound("Sound/Mob.img/8643013/Die", 200) +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("I did it!") +sm.showNpcSpecialActionByTemplateId(3003251, "sit", -1) +sm.zoomCamera(500, 2000, 500, 180, 50) +sm.sendDelay(1000) +sm.sendNext("Protective Mask!") +sm.setParam(45) +sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper +sm.sendSay(" We're too late... The music box... ") +sm.sendSay(" The dream is... fading...") +sm.playSound("Sound/Mob.img/8643000/Die", 200) +sm.showNpcSpecialActionByTemplateId(3003257, "die", -1) +sm.showNpcSpecialActionByTemplateId(3003257, "die", -1) +sm.showNpcSpecialActionByTemplateId(3003257, "die", -1) +sm.sendDelay(3000) +sm.completeQuest(34315) +sm.startQuest(34316) +sm.lockInGameUI(False, True) +sm.warp(450003330) diff --git a/scripts/field/enter_450003740.py b/scripts/field/enter_450003740.py new file mode 100755 index 0000000..3c9662c --- /dev/null +++ b/scripts/field/enter_450003740.py @@ -0,0 +1,56 @@ +# id 450003740 (Lachelein Clocktower : Nightmare Clocktower Peak), field 450003740 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.hideUser(True) +sm.spawnNpc(3003200, -20, -100) +sm.showNpcSpecialActionByTemplateId(3003200, "summon", 0) +sm.spawnNpc(3003257, -150, -110) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.forcedMove(True, 20) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 80, -110) +sm.sendDelay(10) +sm.zoomCamera(4000, 1000, 4000, 0, -110) +sm.sendDelay(4000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid +sm.sendNext("#face0#Let me guess, you're here to say you let them interfere with my plan. Am I right?") +sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper +sm.sendSay("Awakened One... Strong... The others... Incompetent. Have mercy...") +sm.resetNpcSpecialActionByTemplateId(3003257) +sm.showEffect("Map/Effect3.img/Lacheln/pung", 0, 0, -50, 0, 17864637, 0, 0) +sm.sendDelay(1300) +sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) +sm.playSound("Sound/Mob.img/8643000/Die", 200) +sm.showNpcSpecialActionByTemplateId(3003257, "die", -1) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid +sm.sendNext("#face0#I see. You must be the one my master has chosen.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q2/0", 128) +sm.moveNpcByTemplateId(3003200, False, 150, 100) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 0, 70) +sm.sendDelay(10) +sm.zoomCamera(4000, 2000, 4000, 190, 70) +sm.sendDelay(4000) +sm.sendNext("#face2#Or... are you here for #eme#n? Either way... It changes nothing.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q2/1", 128) +sm.sendSay("#face1#So go ahead, struggle with all your might. Cling to that false hope. \r\nJust as I did within that block of frigid ice. Just like me, in that unending dream...") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q2/2", 128) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.lockInGameUI(False, True) +sm.warp(450003100) diff --git a/scripts/field/enter_450003750.py b/scripts/field/enter_450003750.py new file mode 100755 index 0000000..d5370fb --- /dev/null +++ b/scripts/field/enter_450003750.py @@ -0,0 +1,55 @@ +# id 450003750 (Lachelein Ballroom : Lachelein Ballroom), field 450003750 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003259, 1410, -11) +sm.showNpcSpecialActionByTemplateId(3003259, "summon", 0) +sm.spawnNpc(3003251, 1300, 66) +sm.showNpcSpecialActionByTemplateId(3003251, "summon", 0) +sm.forcedFlip(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003259) # Music Box +sm.sendNext("Ooooh... What a strange feeling...") +sm.sendSay("Is this what happiness feels like? Was I... happy? I don't know. I don't know...") +sm.showNpcSpecialActionByTemplateId(3003259, "remove", 0) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/regen", 200) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#So she was the music box... Hurry, before the Dreamkeepers appear.") +sm.sendDelay(1000) +sm.spawnNpc(3003257, 1780, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 1780, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.spawnNpc(3003257, 1880, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 1880, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.spawnNpc(3003257, 1980, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 1980, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.spawnNpc(3003257, 2080, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 2080, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.spawnNpc(3003257, 2180, -50) +sm.showNpcSpecialActionByTemplateId(3003257, "summon", 0) +sm.showEffect("Effect/Summon.img/50", 0, 2180, 70, 0, 0, 1, 0) +sm.playSound("summon/0", 100) +sm.sendDelay(200) +sm.sendNext("#face0#...Too late.") +sm.sendSay("#face0#Hurry, destroy the music box #h0#!") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(34340, "enter=5") +sm.completeQuest(34325) +sm.warp(450003100) diff --git a/scripts/field/enter_450003760.py b/scripts/field/enter_450003760.py new file mode 100755 index 0000000..5869a7c --- /dev/null +++ b/scripts/field/enter_450003760.py @@ -0,0 +1,54 @@ +# id 450003760 (Lachelein Alley : Lachelein Alley), field 450003760 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendNext("#face0##h0#! #h0#! I'm coming to save you!") +sm.sendSay("#face0#Argh! My head... So many memories, flowing in... \r\nAhh... This is... A nightmare... #eThe#n nightmare...") +sm.sendSay("#face0#(Then... The one she's been looking for...?)") +sm.forcedFlip(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setParam(57) +sm.sendNext("Protective Mask? You saved me!") +sm.setParam(37) +sm.sendSay("#face0#...") +sm.setParam(57) +sm.sendSay("But... I thought those that fell into the Arcane River... dissolve into Erdas?") +sm.changeBGM("Bgm46.img/ClockTowerofNightmare", 0, 0) +sm.bgmVolume(100, 1000) +sm.setParam(37) +sm.sendSay("#face0#A being that is neither human nor Erdas would not be destroyed.") +sm.sendSay("#face0#I am what Lucid seeks. \r\nThe nightmare that Lucid fears, #bis me.#k") +sm.setParam(57) +sm.sendSay("What?!") +sm.setParam(37) +sm.sendSay("#face0#I was the only one who could peer into Lucid's memories. \r\nI was the only one who grew weak when the dream weakened. ") +sm.sendDelay(1500) +sm.sendNext("#face0#Back then, when I was agonizing over whether I had a 'soul'... \r\nIt looks like I finally have my answer. ") +sm.setParam(57) +sm.sendSay("Protective Mask...") +sm.setParam(37) +sm.sendSay("#face0#Leave, #h0#. Just leave me alone. ") +sm.sendSay("#face0#I'm just another #billusion#k conjured up by Lucid's subconscious.") +sm.setParam(57) +sm.sendSay("...") +sm.sendDelay(1500) +sm.sendNext("Look. I don't know much about souls, but I do know one thing. ") +sm.sendSay("The way you struggled to survive, just to save others... It's proof you were never an illusion.") +sm.sendSay("The way you care, and your drive to keep on living are proof that you're alive. ") +sm.setParam(37) +sm.sendSay("#face0#...") +sm.sendDelay(1000) +sm.sendNext("#face0#The final music box is at the clocktower. You know what must be done.") +sm.sendDelay(1000) +sm.forcedMove(True, 500) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(450003000) diff --git a/scripts/field/enter_450003770.py b/scripts/field/enter_450003770.py new file mode 100755 index 0000000..c1b7029 --- /dev/null +++ b/scripts/field/enter_450003770.py @@ -0,0 +1,71 @@ +# id 450003770 (Lachelein : Nightmare Clocktower), field 450003770 +sm.lockInGameUI(True, False) +sm.spawnNpc(3003250, 170, -50) +sm.showNpcSpecialActionByTemplateId(3003250, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003250, "stand2", -1) +sm.zoomCamera(0, 2000, 0, 80, 50) +sm.startQuest(34331) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid +sm.sendNext("#face6#So, you've finally made it here. ") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q4/0", 128) +sm.setParam(57) +sm.sendSay("It's time to set everyone free! No one is happy in this world you've created! ") +sm.sendSay("Did you really think that just going through the motions, day after day would make them happy? Eating, drinking, and dancing, every single day. They're not content, they're puppets in your sick show!") +sm.setParam(37) +sm.sendSay("#face6#I don't care if they're happy. The act will be enough, if I can change my master's mind.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q4/2", 128) +sm.setParam(57) +sm.sendSay("What do you mean? Aren't you working for the Black Mage? ") +sm.sendSay("What is the Black Mage scheming?! ") +sm.setParam(37) +sm.sendSay("#face5#Could you even comprehend #ehis#n true goal? No, I don't think so. I won't waste my time explaining.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q4/4", 128) +sm.sendSay("#face5#Hehe. You look tired.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q4/6", 128) +sm.sendSay("#face5#Why don't you rest? Forever...") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/Q4/7", 128) +sm.spawnNpc(3003251, -107, -5) +sm.showNpcSpecialActionByTemplateId(3003251, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#Be careful!") +sm.setParam(57) +sm.sendSay("Protective Mask?!") +sm.setParam(37) +sm.sendSay("#face0#The dream's magic is carried on the wings of her butterflies!\r\nIf you breathe in that dust...!") +sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid +sm.sendSay("#face5#Sorry. You're too late.") +sm.showNpcSpecialActionByTemplateId(3003250, "special", 1) +sm.sendDelay(3000) +sm.spineScreen(True, False, True, 0, "Map/Effect3.img/BossLucid/fog2/mist_003","animation","") +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly1", 200) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("What do I do now?! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#Listen to me carefully, #h0#. \r\nI'm not blinded by her magic, because my mask is a gas mask. ") +sm.sendSay("#face0#I am her nightmare. I was created to stop her. ") +sm.sendSay("#face0#You're #ealready inside the dream#n but you can break free with my help. Now, follow my instructions carefully. ") +sm.setParam(57) +sm.sendSay("(Speak with Protective Mask to begin the fight with #rLucid (Story)#k. ) ") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.lockInGameUI(False, True) +sm.warp(450004000) diff --git a/scripts/field/enter_450004000.py b/scripts/field/enter_450004000.py new file mode 100755 index 0000000..708556e --- /dev/null +++ b/scripts/field/enter_450004000.py @@ -0,0 +1,2 @@ +# id 450004000 (Lachelein : Nightmare Clocktower), field 450004000 +sm.showNpcSpecialActionByTemplateId(3003200, "summon", 0) diff --git a/scripts/field/enter_450004100.py b/scripts/field/enter_450004100.py new file mode 100755 index 0000000..9b7042d --- /dev/null +++ b/scripts/field/enter_450004100.py @@ -0,0 +1,9 @@ +# id 450004700 (Lachelein : Nightmare Clocktower), field 450004700 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spineScreen(True, False, True, 0, "Map/Effect3.img/BossLucid/Lucid/lusi","animation","") +sm.playSound("Sound/SoundEff.img/ArcaneRiver/lucid_spine", 200) +sm.sendDelay(9000) +sm.lockInGameUI(False, True) +sm.lockInGameUI(False, True) +sm.warp(450004750) diff --git a/scripts/field/enter_450004150.py b/scripts/field/enter_450004150.py new file mode 100755 index 0000000..dfff39e --- /dev/null +++ b/scripts/field/enter_450004150.py @@ -0,0 +1,10 @@ +# Boss Lucid Field Script + +DREAMING_LUCID = 8880140 # Stage 1 Lucid +BOSS_HP = 1000000000 + +sm.spawnMob(DREAMING_LUCID, 1015, 48, False, BOSS_HP) +sm.spawnMob(8880166, 1015, 48, False, 1) # Tree Stem + +sm.waitForMobDeath(DREAMING_LUCID) +sm.removeMobByTemplateId(8880166) # tree Stem \ No newline at end of file diff --git a/scripts/field/enter_450004200.py b/scripts/field/enter_450004200.py new file mode 100755 index 0000000..c409a4c --- /dev/null +++ b/scripts/field/enter_450004200.py @@ -0,0 +1,20 @@ +# id 450004800 (Lachelein : Nightmare Clocktower), field 450004800 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 240, 240, 240, 0) +sm.sendDelay(500) +sm.showEffect("Map/Effect3.img/BossLucid/Lucid5", 0, 89, 36, 1, 0, 1, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid +sm.sendNext("#face6#No! The dream is collapsing!") +sm.blind(False, 0, 0, 0, 0, 1500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/phase2", 200) +sm.showEffect("Map/Effect3.img/BossLucid/Lucid2", 0, 89, 36, 10, 0, 1, 0) +sm.showEffect("Map/Effect3.img/BossLucid/Lucid3", 0, -140, 100, 11, 0, 1, 0) +sm.showEffect("Map/Effect3.img/BossLucid/Lucid4", 0, 89, 36, 1, 0, 1, 0) +sm.sendDelay(2000) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.lockInGameUI(False, True) +sm.warp(450004850) diff --git a/scripts/field/enter_450004300.py b/scripts/field/enter_450004300.py new file mode 100755 index 0000000..0117e20 --- /dev/null +++ b/scripts/field/enter_450004300.py @@ -0,0 +1,3 @@ +# id 450004900 (Lachelein : Nightmare Clocktower), field 450004900 +sm.createQuestWithQRValue(34360, "boss=1") +sm.createQuestWithQRValue(34360, "bossS=1;boss=1") diff --git a/scripts/field/enter_450005000.py b/scripts/field/enter_450005000.py new file mode 100755 index 0000000..825578e --- /dev/null +++ b/scripts/field/enter_450005000.py @@ -0,0 +1,6 @@ +# id 450005000 (Arcana : Grove of the Spirit Tree), field 450005000 +sm.lockInGameUI(False, True) +sm.startQuest(34479) +sm.startQuest(34489) +sm.completeQuestNoCheck(34487) +sm.startQuest(34457) diff --git a/scripts/field/enter_450005015.py b/scripts/field/enter_450005015.py new file mode 100755 index 0000000..b2aa159 --- /dev/null +++ b/scripts/field/enter_450005015.py @@ -0,0 +1,2 @@ +# id 450005015 (Arcana : Spirit Tree Vantage), field 450005015 +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_450005400.py b/scripts/field/enter_450005400.py new file mode 100755 index 0000000..3c5fcd2 --- /dev/null +++ b/scripts/field/enter_450005400.py @@ -0,0 +1,2 @@ +# id 450005400 (Arcana : Cavernous Cavern), field 450005400 +sm.startQuest(28825) diff --git a/scripts/field/enter_701210130.py b/scripts/field/enter_701210130.py new file mode 100755 index 0000000..7cb123b --- /dev/null +++ b/scripts/field/enter_701210130.py @@ -0,0 +1,11 @@ +NINE_TAILED_FOX = 9310579 + +if sm.hasQuest(62015): + sm.chatScript("..Maybe there's a hidden entrance somewhere") + sm.chatScript("You can't find the Woodcutter anywhere..") +elif "1" in sm.getQRValue(62015): + sm.setBoxChat() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setQRValue(62015, "2") + sm.sendNext("Alright.. Time to ask #p"+ str(NINE_TAILED_FOX) +"# about this..") \ No newline at end of file diff --git a/scripts/field/enter_701210131.py b/scripts/field/enter_701210131.py new file mode 100755 index 0000000..251e7d8 --- /dev/null +++ b/scripts/field/enter_701210131.py @@ -0,0 +1,100 @@ +# Hidden Street : Secret Library (701210131) + +from net.swordie.ms.world.field.fieldeffect import GreyFieldType + +NINE_TAILED_FOX = 9310579 +KINDLY_WOODCUTTER = 9310584 + +sm.spawnNpc(KINDLY_WOODCUTTER, -650, 330) + +sm.lockInGameUI(True, False) +sm.removeEscapeButton() + +sm.sendDelay(1000) + +sm.forcedMove(True, 300) +sm.sendDelay(3000) + +sm.moveCamera(300, -550, 330) + +sm.setBoxChat() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(Ah, that must be the Woodcutter in love with Nine-Tailed Fox. I should go talk to him.)") + +sm.setSpeakerID(KINDLY_WOODCUTTER) +sm.setBoxChat() +sm.sendNext("Chop, chop, chop, chop. Thinking deep thoughts. Chop, chop, chop, chop.") + +sm.moveCameraBack(700) + +sm.forcedMove(True, 850) +sm.sendDelay(5000) + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Hi, there!") + +sm.setSpeakerID(KINDLY_WOODCUTTER) +sm.flipNpcByTemplateId(KINDLY_WOODCUTTER, False) +sm.setBoxChat() +sm.sendNext("Hello random stranger deep in the forest. Are you lost?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Not at all. I'm looking for you! Someone wanted me to deliver this letter.") + +sm.sendNext("It was #p"+ str(NINE_TAILED_FOX) +"#. She really misses you.") + +sm.setSpeakerID(KINDLY_WOODCUTTER) +sm.setBoxChat() +sm.sendNext("#p"+ str(NINE_TAILED_FOX) +"#?! Gulp. She sent me a letter?!") + +sm.showFieldEffect("Effect/EffectCN.img/shaolin/letter") +sm.sendDelay(4000) + +sm.flipNpcByTemplateId(KINDLY_WOODCUTTER, False) +sm.showNpcSpecialActionByTemplateId(KINDLY_WOODCUTTER, "special", 120000) +sm.setFieldColour(GreyFieldType.Field, 100, 100, 100, 4000) +sm.setCameraOnNpc(KINDLY_WOODCUTTER) +sm.zoomCamera(4000, 2500, -480, 330) + +sm.sendNext("Does she know where I am? Is she here?! Oh please oh please oh no no no no no!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Aren't you two lovers? Why do you sound so scared?") + +sm.setSpeakerID(KINDLY_WOODCUTTER) +sm.setBoxChat() +sm.sendNext("LOVERS?! A human and a... a... a demon?! Are you serious?! I'm HIDING deep in the forest because she wants to eat my soul!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("That's not what #p"+ str(NINE_TAILED_FOX) +"# told me...") + +sm.setSpeakerID(KINDLY_WOODCUTTER) +sm.setBoxChat() +sm.sendNext("I was terrified when she kept showing up. " + "#bI told her I would do anything, absolutely anything,#k if she would just spare my life. " + "But now she's found me, and there's nowhere left to run.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(This could be tricky. #p"+ str(NINE_TAILED_FOX) +"# may be a demon, but nobody enjoys being scorned.)") + +sm.sendNext("Look, I'll handle it. She won't hunt you down. I'll... I'll think of something.") + +sm.setSpeakerID(KINDLY_WOODCUTTER) +sm.setBoxChat() +sm.sendNext("Oh thank you. Thank you thank you thank you!") +sm.sendDelay(1000) + +sm.forcedMove(False, 1000) +sm.sendDelay(4000) + +sm.warpInstanceOut(701210130, 2) +sm.completeQuest(62015) +sm.giveExp(1010226) +sm.createQuestWithQRValue(62015, "1") +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/enter_701210161.py b/scripts/field/enter_701210161.py new file mode 100755 index 0000000..bfa8ab2 --- /dev/null +++ b/scripts/field/enter_701210161.py @@ -0,0 +1,51 @@ +# (701210161) | Path of Stone 1 Hidden Map for Script in Shaolin Temple Questline + +coordinates = [ + [207, 240], + [-177, 240], + [-281, -60], + [159, -120], + [310, 240] +] + +DEMON_B_GONE = 2434568 +ZHEUNG_GUAN = 9310046 +HAUNTED_STONE = 9310588 # Npc + +sm.lockInGameUI(True, False) #Lock, but don't show black frames +sm.chatScript("Test the Demon B Gone.") +sm.sendDelay(1000) + +sm.forcedMove(False, 860) +sm.sendDelay(4000) + +sm.removeEscapeButton() +sm.setBoxChat() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Geez. This place is crawling with demons...") +sm.sendNext("Well, time to test this out. If I sprinkle it on the demons, they should disappear. I hope #p"+ str(ZHEUNG_GUAN) +"# knows what he's talking about.") +if sm.hasItem(DEMON_B_GONE): + sm.consumeItem(DEMON_B_GONE) + +sm.sendDelay(2000) + +sm.sendNext("Hey, looks like it's working!") + +sm.sendDelay(3000) + +for coordinate in coordinates: + sm.spawnNpc(HAUNTED_STONE, coordinate[0], coordinate[1]) + +sm.sendNext("#fs 22# Whoa, whoa, whoa! The demons aren't disappearing... they're multiplying!") + +sm.sendNext("Well, THAT didn't work. I'd better let #p"+ str(ZHEUNG_GUAN) +"# know.") + +sm.forcedMove(True, 850) +sm.sendDelay(5000) + +sm.warpInstanceOut(701210120, 2) +sm.completeQuest(62005) +sm.giveExp(1515339) + +sm.lockInGameUI(False) diff --git a/scripts/field/enter_701220000.py b/scripts/field/enter_701220000.py new file mode 100755 index 0000000..c48d85e --- /dev/null +++ b/scripts/field/enter_701220000.py @@ -0,0 +1,2 @@ +# Shaolin Temple : Mahavira Hall +sm.showEffect("Effect/EffectCN.img/shaolin/title") \ No newline at end of file diff --git a/scripts/field/enter_701220100.py b/scripts/field/enter_701220100.py new file mode 100755 index 0000000..1e9ab59 --- /dev/null +++ b/scripts/field/enter_701220100.py @@ -0,0 +1,5 @@ +# id 701220100 (Shaolin Temple : Sutra Depository 1-2 F), field 701220100 +sm.playSound("Sound/FarmSE.img/boxResult", 100) +sm.createFieldTextEffect("#fs20#Sutra Depository Floors 1-2", 100, 2500, 5, 80, 0, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26# Burning Stage 10: 100% Bonus EXP! ", 50, 1500, 4, 0, -200, 1, 4, 2, 0, 0) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") diff --git a/scripts/field/enter_701220300.py b/scripts/field/enter_701220300.py new file mode 100755 index 0000000..f24a6b9 --- /dev/null +++ b/scripts/field/enter_701220300.py @@ -0,0 +1,5 @@ +# id 701220300 (Shaolin Temple : Sutra Depository 5-6 F), field 701220300 +sm.playSound("Sound/FarmSE.img/boxResult", 100) +sm.createFieldTextEffect("#fs20#Sutra Depository Floors 5-6", 100, 2500, 5, 80, 0, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26# Burning Stage 10: 100% Bonus EXP! ", 50, 1500, 4, 0, -200, 1, 4, 2, 0, 0) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") diff --git a/scripts/field/enter_701220351.py b/scripts/field/enter_701220351.py new file mode 100755 index 0000000..fc15cac --- /dev/null +++ b/scripts/field/enter_701220351.py @@ -0,0 +1,26 @@ +# id 701220351 (Hidden Street : Secret Library), field 701220351 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9310577, -377, -34) +sm.showNpcSpecialActionByTemplateId(9310577, "summon", 0) +sm.spawnNpc(9310578, 456, -79) +sm.showNpcSpecialActionByTemplateId(9310578, "summon", 0) +sm.spawnNpc(9310579, -14, 58) +sm.showNpcSpecialActionByTemplateId(9310579, "summon", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9310579, "angry", -1) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310579) # Nine-Tailed Fox +sm.sendNext("Intruder!") +sm.setInnerOverrideSpeakerTemplateID(9310578) # Goblin Demon +sm.sendSay("A human. Gross. Who's got the antihomosapien gel?") +sm.setInnerOverrideSpeakerTemplateID(9310579) # Nine-Tailed Fox +sm.sendSay("Shoo! Begone! Shoo!") +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("Huh? What? Wait a sec--!") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(62012, "secret=2;hidden=hid4;find=1") +sm.warp(701220300) diff --git a/scripts/field/enter_701220352.py b/scripts/field/enter_701220352.py new file mode 100755 index 0000000..527b517 --- /dev/null +++ b/scripts/field/enter_701220352.py @@ -0,0 +1,30 @@ +# id 701220352 (Hidden Street : Secret Library), field 701220352 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showEffect("Effect/Direction_CN.img/effect/effect/tuto/BalloonMsg0/0", 2000, -377, -34, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/1", 2000, 456, -79, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/2", 2000, -14, 58, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/3", 2000, -377, -34, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/4", 2000, 456, -79, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/5", 2000, -14, 58, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/6", 2000, -377, -34, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/7", 2000, 456, -79, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/8", 2000, -377, -34, 0, 0, 1, 0) +sm.sendDelay(2000) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/9", 2000, -14, 58, 0, 0, 1, 0) +sm.sendDelay(2000) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/10", 2000, -377, -34, 0, 0, 1, 0) +sm.sendDelay(2000) +sm.showEffect("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/11", 2000, 456, -79, 0, 0, 1, 0) +sm.sendDelay(1500) +sm.createQuestWithQRValue(62012, "secret=1;hidden=hid4;find=1") +sm.lockInGameUI(False, True) +sm.warp(701220351) diff --git a/scripts/field/enter_701220400.py b/scripts/field/enter_701220400.py new file mode 100755 index 0000000..bd1c967 --- /dev/null +++ b/scripts/field/enter_701220400.py @@ -0,0 +1,4 @@ +# id 701220400 (Shaolin Temple : Sutra Depository 7-8 F), field 701220400 +sm.playSound("Sound/FarmSE.img/boxResult", 100) +sm.createFieldTextEffect("#fs20#Sutra Depository Floors 7-8", 100, 2500, 5, 80, 0, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26# Burning Stage 10: 100% Bonus EXP! ", 50, 1500, 4, 0, -200, 1, 4, 2, 0, 0) diff --git a/scripts/field/enter_701220500.py b/scripts/field/enter_701220500.py new file mode 100755 index 0000000..c4a9e59 --- /dev/null +++ b/scripts/field/enter_701220500.py @@ -0,0 +1,5 @@ +"""# id 701220500 (Shaolin Temple : Sutra Depository 9-10 F), field 701220500 +sm.playSound("Sound/FarmSE.img/boxResult", 100) +sm.createFieldTextEffect("#fs20#Sutra Depository Floors 9-10", 100, 2500, 5, 80, 0, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26# Burning Stage 10: 100% Bonus EXP! ", 50, 1500, 4, 0, -200, 1, 4, 2, 0, 0) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.")""" diff --git a/scripts/field/enter_701220600.py b/scripts/field/enter_701220600.py new file mode 100755 index 0000000..a3dce6b --- /dev/null +++ b/scripts/field/enter_701220600.py @@ -0,0 +1,103 @@ +# Shaolin Temple : Sutra Depository Top (701220600) | Used for Cutscene in Shaolin Temple Questline + +from net.swordie.ms.world.field.fieldeffect import GreyFieldType + +WISE_CHIEF_PRIEST = 9310596 +NINE_TAILED_FOX = 9310579 +MEGAN = 9310583 +OSCAR = 9310582 + + +sm.lockInGameUI(True, False) +sm.sendDelay(1000) + +sm.forcedMove(False, 300) +sm.sendDelay(3000) + +sm.removeEscapeButton() +sm.setBoxChat() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Where are we? Is this still the Sutra Depository? Hey! What was that sound?!") + +sm.spawnNpc(WISE_CHIEF_PRIEST, 615, 212) +sm.flipNpcByTemplateId(WISE_CHIEF_PRIEST, False) + +sm.forcedMove(False, 400) +sm.sendDelay(800) + +sm.moveCamera(300, 0, chr.getPosition().getY()) + +sm.sendNext("Chief Priest!") +sm.sendDelay(200) + +sm.flipNpcByTemplateId(WISE_CHIEF_PRIEST, True) +sm.sendDelay(200) + +sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/13", 1500, WISE_CHIEF_PRIEST) +sm.sendDelay(600) + +sm.moveNpcByTemplateId(WISE_CHIEF_PRIEST, True, 150, 120) +sm.sendDelay(1000) + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("How did you find me? Leave at once!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Is that the Book of Demons upon that altar? The #p"+ str(WISE_CHIEF_PRIEST) +"# said it just contained research, but...") + +sm.sendNext("Wait! The mirror #p"+ str(NINE_TAILED_FOX) +"# gave me! It shows a person's true form. I'll use it on him...") + +sm.sendDelay(800) + +sm.setFieldColour(GreyFieldType.Field, 50, 50, 50, 1500) +sm.sendDelay(1500) + +sm.showEffectOnPosition("Effect/EffectCN.img/shaolin/CutScean", 3000, 445, 0) +sm.setFieldColour(GreyFieldType.Field, 250, 250, 250, 1500) +sm.sendDelay(1500) + +sm.setFieldColour(GreyFieldType.Field, 250, 250, 250, 1500) +sm.spawnNpc(MEGAN, 770, 212) +sm.spawnNpc(OSCAR, 860, 212) +sm.sendDelay(1200) + +sm.sendNext(sm.getQRValue(62015) +"! "+ sm.getQRValue(62018) +"!") + +sm.showBalloonMsg("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/14", 1500) +sm.sendDelay(2000) + +sm.sendNext("You! You did all of this! You took my friends!") + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("You're friends with demons? Intriguing. Anyway, I should be thanking you.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Thanking Me?") + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("You gave me this power! #fs22#You handed me the Book of Demons, and with it, the ability to draw demonic power and bend it to my will!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("But I-") + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("Leave now! Do not attempt to follow me!") + +sm.flipNpcByTemplateId(WISE_CHIEF_PRIEST, False) +sm.moveNpcByTemplateId(WISE_CHIEF_PRIEST, False, 760, 130) +sm.sendDelay(6000) + +sm.forcedMove(False, 800) +sm.sendDelay(5000) + +sm.warpInstanceOut(701220601) +sm.lockInGameUI(False) +sm.dispose() \ No newline at end of file diff --git a/scripts/field/enter_701220601.py b/scripts/field/enter_701220601.py new file mode 100755 index 0000000..a314be8 --- /dev/null +++ b/scripts/field/enter_701220601.py @@ -0,0 +1,2 @@ +# id 701220601 (Shaolin Temple : Sutra Depository - Top), field 701220601 +sm.progressMessageFont(3, 20, 13, 0, "Follow the Chief Priest through the portal on the right.") diff --git a/scripts/field/enter_701220602.py b/scripts/field/enter_701220602.py new file mode 100755 index 0000000..8b69266 --- /dev/null +++ b/scripts/field/enter_701220602.py @@ -0,0 +1,36 @@ +# id 701220602 (Shaolin Temple : Sutra Depository - Top), field 701220602 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9310596, 460, 297) +sm.showNpcSpecialActionByTemplateId(9310596, "summon", 0) +sm.flipNpcByTemplateId(9310596, True) +sm.sendDelay(2000) +sm.moveCamera(False, 500, 229, 274) +sm.sendDelay(1900) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("What the...?!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9310596) # Wise Chief Priest +sm.sendSay("This power! It fills my veins! Look how young I've become... Look how magnificent I am!") +sm.sendSay("The Book of Demons showed me a world of unlimited power, a world ripe for the plucking!") +sm.setParam(57) +sm.sendSay("And all you had to do was trade your humanity... ") +sm.setParam(37) +sm.sendSay("Oh, drop the holier than thou act. Everyone wants power. Even my master... Maybe he didn't leave to train. Maybe he turned into a demon as soon as he finished writing this book!") +sm.sendSay("Think upon that, human!") +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9310596, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9310596, False, 180, 200) +sm.sendDelay(2000) +sm.sendDelay(2500) +sm.showNpcSpecialActionByTemplateId(9310596, "teleportation", -1) +sm.sendDelay(1350) +sm.flipNpcByTemplateId(9310596, False) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.createQuestWithQRValue(62038, "clear=1") +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_701220610.py b/scripts/field/enter_701220610.py new file mode 100755 index 0000000..eacd267 --- /dev/null +++ b/scripts/field/enter_701220610.py @@ -0,0 +1,25 @@ +# Shaolin Temple : Sutra Depository - Top + +from net.swordie.ms.enums import WeatherEffNoticeType + +CHIEF_PRIEST = 9601068 # mob id +ZHEUNG_GUAN = 9310046 # Npc id +time = 30 *60 + +sm.setInstanceTime(time, 701220601, 0) +sm.chatScript("I told you not to follow me..") + +sm.invokeAfterDelay(3000, "showWeatherNotice", "Now, you will be my first victim!", WeatherEffNoticeType.BossChiefPriest) +sm.invokeAfterDelay(4000, "spawnMob", CHIEF_PRIEST, 150, 303, False) + +sm.waitForMobDeath(CHIEF_PRIEST) +sm.showWeatherNotice("Muahaha.... You got lucky.. This time.", WeatherEffNoticeType.BossChiefPriest) +sm.invokeAfterDelay(10000, "warpInstanceOut", 701220601, 0) +if not sm.hasQuestCompleted(62022) and not sm.hasQuest(62022): + sm.startQuestNoCheck(62022) + sm.removeEscapeButton() + sm.setBoxChat() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("What just happened?..\r\n" + "I should speak with #p"+ str(ZHEUNG_GUAN) +"#.") \ No newline at end of file diff --git a/scripts/field/enter_701220710.py b/scripts/field/enter_701220710.py new file mode 100755 index 0000000..27ac9b9 --- /dev/null +++ b/scripts/field/enter_701220710.py @@ -0,0 +1,5 @@ +# id 701220710 (Shaolin Temple : Sutra Depository - Top), field 701220710 +sm.createQuestWithQRValue(62040, "eNum=1;DlastDate=19/06/25;lastDate=19/06/25") +sm.createQuestWithQRValue(62040, "eNum=1;Dcount=1;DlastDate=19/06/25;lastDate=19/06/25") +sm.createQuestWithQRValue(62042, "clear=0") +sm.createQuestWithQRValue(62042, "clear=1") diff --git a/scripts/field/enter_867200100.py b/scripts/field/enter_867200100.py new file mode 100755 index 0000000..beaa67b --- /dev/null +++ b/scripts/field/enter_867200100.py @@ -0,0 +1,12 @@ +# id 867200100 (El Nath : Abrup Trail), field 867200100 +sm.lockInGameUI(True, False) +sm.forcedMove(False, 600) +sm.sendDelay(500) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 1, "#b(Abrup is just beyond these mountains.)", 3000, 1, 0, 0, 0, 4, 0, 4878499) +sm.forcedFlip(True) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/wind", 128) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 1, "#b(The sun is already setting.)", 3000, 1, 0, 0, 0, 4, 0, 4878499) +sm.lockInGameUI(False, True) +sm.warp(867200101) diff --git a/scripts/field/enter_867200101.py b/scripts/field/enter_867200101.py new file mode 100755 index 0000000..d803c01 --- /dev/null +++ b/scripts/field/enter_867200101.py @@ -0,0 +1,41 @@ +# id 867200101 (Abrup Basin : Hunters's Temporary Base Camp), field 867200101 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setMapTaggedObjectVisible("fire1", False, 0, 0) +sm.setMapTaggedObjectVisible("snow1", False, 0, 0) +sm.setMapTaggedObjectVisible("snow2", False, 0, 0) +sm.setMapTaggedObjectVisible("snow3", False, 0, 0) +sm.sendDelay(500) +sm.forcedMove(False, 100) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Could this be a temporary base camp for hunters?)") +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/wind", 128) +sm.sendNext("#b(It'll be dark soon, and that much colder. This might be a good spot to stop for the night.)") +sm.sendDelay(1000) +sm.sendNext("#b(I should start by clearing the snow and starting a fire.)") +sm.createQuestWithQRValue(64010, "enter=1") +sm.completeQuestNoCheck(64010) +sm.startQuest(64011) +sm.setMapTaggedObjectVisible("fire1", True, 0, 0) +sm.setMapTaggedObjectVisible("snow1", True, 0, 0) +sm.setMapTaggedObjectVisible("snow2", True, 0, 0) +sm.setMapTaggedObjectVisible("snow3", True, 0, 0) +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("snow1", False, 0, 0) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/sonw2", 128) +sm.createQuestWithQRValue(64011, "clean=1") +sm.setMapTaggedObjectVisible("snow2", False, 0, 0) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/sonw2", 128) +sm.createQuestWithQRValue(64011, "clean=2") +sm.setMapTaggedObjectVisible("snow3", False, 0, 0) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/sonw1", 128) +sm.createQuestWithQRValue(64011, "clean=3") +sm.setMapTaggedObjectVisible("fire1", False, 0, 0) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/sonw1", 128) +sm.createQuestWithQRValue(64011, "clean=4") +sm.warp(867200102) diff --git a/scripts/field/enter_867200102.py b/scripts/field/enter_867200102.py new file mode 100755 index 0000000..b1f995d --- /dev/null +++ b/scripts/field/enter_867200102.py @@ -0,0 +1,39 @@ +# id 867200102 (Abrup Basin : Temporary Hunting Camp), field 867200102 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.forcedAction(29, 50000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(This place is a lot cozier after clearing it out a bit.)") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/wind", 128) +sm.sendSay("#b(Once I make it down off this mountain, I can start exploring the valley.)") +sm.sendSay("#b(What could be happening in Abrup?)") +sm.sendSay("#b(First order of business is to meet the lady who sent the letter.)") +sm.startQuest(64012) +sm.sendDelay(1000) +sm.sendNext("#b(Boy... this fire sure is cozy...)") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.forcedAction(25, 50000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 250) +sm.sendDelay(300) +sm.sendNext("#b(Should be okay to doze off for a bit, yeah?)") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 250) +sm.sendDelay(300) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/wind", 128) +sm.sendNext("#b(Just a little bit.)") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.warp(867200111) diff --git a/scripts/field/enter_867200110.py b/scripts/field/enter_867200110.py new file mode 100755 index 0000000..f3fa875 --- /dev/null +++ b/scripts/field/enter_867200110.py @@ -0,0 +1,3 @@ +# id 867200110 (Abrup Basin : Base Camp), field 867200110 +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("go64014", False, 0, 0) diff --git a/scripts/field/enter_867200111.py b/scripts/field/enter_867200111.py new file mode 100755 index 0000000..aa0ecee --- /dev/null +++ b/scripts/field/enter_867200111.py @@ -0,0 +1,69 @@ +# id 867200111 (Abrup Basin : Base Camp), field 867200111 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400592, 197, 5) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.flipNpcByTemplateId(9400592, False) +sm.startQuest(64013) +sm.startQuest(64150) +sm.startQuest(64155) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/aruhi1", 128) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#...I knew it! I knew it!") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/aruhi2", 128) +sm.sendSay("#face0#When I told them, they didn't even-HIC!") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/aruhi3", 128) +sm.sendSay("#face1#...Listen. HIC! I knew... it...") +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setParam(57) +sm.sendNext("#b...?") +sm.sendSay("#bWhy are you shouting at the valley? Angry people on cliffs make me nervous!") +sm.sendDelay(500) +sm.forcedMove(False, 385) +sm.showNpcSpecialActionByTemplateId(9400592, "say", 1000) +sm.setParam(37) +sm.sendNext("#face0#Black smoke!") +sm.sendSay("#face0#Dancing flames!") +sm.setParam(57) +sm.sendSay("#bHey! Sorry, could you maybe try using sentences here? It would really...") +sm.forcedMove(False, 30) +sm.sendDelay(500) +sm.forcedMove(False, 200) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400592, True) +sm.setParam(37) +sm.sendNext("#face0#What? HIC! H-how dare you... grammar at me! You little...!") +sm.showNpcSpecialActionByTemplateId(9400592, "say", 1000) +sm.setParam(57) +sm.sendSay("#bLook, can we argue over there, AWAY from the perilous cliff? It's too dangerous here.") +sm.setParam(37) +sm.sendSay("#face0#Dangerous? DANGEROUS? Ha ha, dangerous is Abrup's m-middle name!") +sm.showNpcSpecialActionByTemplateId(9400592, "say", 1000) +sm.sendSay("#face0#Look there! Look at the fire spread! HIC! I knew it!") +sm.showNpcSpecialActionByTemplateId(9400592, "say", 1000) +sm.sendDelay(500) +sm.zoomCamera(500, 2000, 5000, 850, 500) +sm.setParam(57) +sm.sendNext("#b...Fire?!") +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face0#Ha ha, sit, sit. Ha ha ha HIC!") +sm.showNpcSpecialActionByTemplateId(9400592, "say", 1000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bHave you lost your... Okay, silly question. But I've got to get down there!") +sm.sendSay("#b(I just hope I can get there in time...)") +sm.completeQuestNoCheck(64013) +sm.startQuest(64014) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64014, "mapIdx=0") +sm.warp(867200200) diff --git a/scripts/field/enter_867200200.py b/scripts/field/enter_867200200.py new file mode 100755 index 0000000..f43d1e9 --- /dev/null +++ b/scripts/field/enter_867200200.py @@ -0,0 +1,29 @@ +# id 867200200 (Abrup Basin : Steep Mountain Trail), field 867200200 +sm.createQuestWithQRValue(64014, "scene1=0;mapIdx=0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.forcedMove(False, 50) +sm.sendDelay(300) +sm.forcedInput(6) +sm.sendDelay(1000) +sm.zoomCamera(1000, 1000, 3000, 740, -400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(How did that human trainwreck get all the way up there?)") +sm.sendDelay(1500) +sm.zoomCamera(1000, 1000, 3000, 2330, -400) +sm.sendDelay(2000) +sm.sendNext("#b(Aw, nuts... If he follows me down, he's getting eaten for sure.)") +sm.sendSay("#b(Better clear out the monsters along the way, for his sake.)") +sm.sendDelay(500) +sm.sendDelay(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/1", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867200220.py b/scripts/field/enter_867200220.py new file mode 100755 index 0000000..0a8d98f --- /dev/null +++ b/scripts/field/enter_867200220.py @@ -0,0 +1,6 @@ +# id 867200220 (Abrup Basin : Beaknose Cliff), field 867200220 +sm.createQuestWithQRValue(64014, "scene1=1;scene2=0;mapIdx=0") +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/2", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867200240.py b/scripts/field/enter_867200240.py new file mode 100755 index 0000000..cd822d5 --- /dev/null +++ b/scripts/field/enter_867200240.py @@ -0,0 +1,32 @@ +# id 867200240 (Abrup Basin : Rugged Rock), field 867200240 +sm.setMapTaggedObjectVisible("guide", False, 0, 0) +sm.lockInGameUI(True, False) +sm.startQuest(64161) +sm.spawnNpc(9400588, 135, -910) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Ahh!") +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.zoomCamera(4000, 1000, 4000, 90, -960) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400588, True, 300, 150) +sm.sendDelay(3000) +sm.sendNext("P-please help!") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400588, False, 100, 150) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.spawnNpc(9400588, 45, -650) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.flipNpcByTemplateId(9400588, False) +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/3", 0) +sm.setMapTaggedObjectVisible("guide", True, 0, 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867200260.py b/scripts/field/enter_867200260.py new file mode 100755 index 0000000..c88fc63 --- /dev/null +++ b/scripts/field/enter_867200260.py @@ -0,0 +1,4 @@ +# id 867200260 (Abrup Basin : Kaptafel Outskirts), field 867200260 +sm.createQuestWithQRValue(64014, "scene1=1;scene2=1;scene4=0;mapIdx=0") +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/4", 0) diff --git a/scripts/field/enter_867200281.py b/scripts/field/enter_867200281.py new file mode 100755 index 0000000..06b9bfa --- /dev/null +++ b/scripts/field/enter_867200281.py @@ -0,0 +1,71 @@ +# id 867200281 (null), field 867200281 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 250) +sm.sendDelay(300) +sm.spawnNpc(9400588, -20, 200) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400596, 920, 330) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400642, 960, 330) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400588, False) +sm.moveNpcByTemplateId(9400596, True, 520, 250) +sm.moveNpcByTemplateId(9400642, True, 500, 220) +sm.sendDelay(900) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/archer", 128) +sm.sendDelay(600) +sm.speechBalloon(False, 0, 0, "#fs15##eAghh!", 2000, 1, 0, 0, 0, 4, 9400596, 4878499) +sm.sendDelay(1200) +sm.showNpcSpecialActionByTemplateId(9400642, "skill2", 2880) +sm.sendDelay(630) +sm.showEffect("Effect/OnUserEff.img/emotion/wolfgrab", 2200, 0, 0, 0, 15154938, 0, 0) +sm.sendDelay(500) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation") +sm.sendDelay(900) +sm.forcedMove(False, 170) +sm.sendDelay(300) +sm.forcedAction(5, 0) +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(9400642) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400642, "die1", 1300) +sm.moveNpcByTemplateId(9400596, True, 90, 200) +sm.sendDelay(1300) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400588, False, 100, 150) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400596, False) +sm.resetNpcSpecialActionByTemplateId(9400588) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendNext("Gahh, t-thank you!") +sm.sendSay("F-Fembris in town! ") +sm.sendSay("The wolves of legend are here, burning our village to the ground!") +sm.sendSay("They're calling more monsters to help! We have to stop them somehow!") +sm.setParam(57) +sm.sendSay("#bFembris?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("In our stories, Fembris is the massive wolf that devours the sky. The real ones aren't that big, but they're scary and breathe fire so... close enough, right?") +sm.sendSay("Someday, Fembris is supposed to end the world in flame and misery. We gotta make sure that isn't today!") +sm.sendDelay(500) +sm.sendDelay(1000) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation") +sm.setParam(57) +sm.sendNext("#bI'll do what I can. You stay right here!") +sm.forcedFlip(True) +sm.forcedMove(False, 500) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64014) +sm.createQuestWithQRValue(64015, "map=0") +sm.warp(867200310) diff --git a/scripts/field/enter_867200310.py b/scripts/field/enter_867200310.py new file mode 100755 index 0000000..7fbcf2f --- /dev/null +++ b/scripts/field/enter_867200310.py @@ -0,0 +1,113 @@ +# id 867200310 (Abrup Basin : Burning Kaptafel), field 867200310 +sm.setMapTaggedObjectVisible("guide0", False, 0, 0) +sm.setMapTaggedObjectVisible("guide1", False, 0, 0) +sm.setMapTaggedObjectVisible("guide2", False, 0, 0) +sm.createQuestWithQRValue(64015, "") +sm.createQuestWithQRValue(64015, "chk1=0") +sm.createQuestWithQRValue(64015, "chk1=0;chk2=0") +sm.createQuestWithQRValue(64015, "chk1=0;chk2=0;chk3=0") +sm.createQuestWithQRValue(64015, "chk1=0;chk2=0;chk3=0;chk4=0") +sm.createQuestWithQRValue(64015, "chk1=0;chk2=0;chk3=0;chk4=0;chk5=0") +sm.createQuestWithQRValue(64015, "chk1=0;chk2=0;chk3=0;chk4=0;chk5=0;chk6=0") +sm.createQuestWithQRValue(64015, "chk1=0;chk2=0;chk3=0;chk4=0;chk5=0;chk6=0;chk7=0") +sm.createQuestWithQRValue(64015, "chk1=0;chk2=0;slaDir=0;chk3=0;chk4=0;chk5=0;chk6=0;chk7=0") +sm.lockInGameUI(True, False) +sm.spawnNpc(9400585, -2050, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -1950, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400641, -2100, 250) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400641, -2150, 250) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400642, -1850, 330) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.flipNpcByTemplateId(9400585, True) +sm.showNpcSpecialActionByTemplateId(9400585, "attack1", -1) +sm.flipNpcByTemplateId(9400585, False) +sm.showNpcSpecialActionByTemplateId(9400585, "attack1", -1) +sm.flipNpcByTemplateId(9400641, False) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", -1) +sm.flipNpcByTemplateId(9400641, False) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", -1) +sm.flipNpcByTemplateId(9400642, True) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", -1) +sm.spawnNpc(9400666, -120, 320) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.flipNpcByTemplateId(9400666, False) +sm.spawnNpc(9400596, 410, 75) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400581, -620, 360) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400676, -800, 320) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400676, -400, 330) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.flipNpcByTemplateId(9400581, True) +sm.showNpcSpecialActionByTemplateId(9400581, "attack1", -1) +sm.flipNpcByTemplateId(9400676, False) +sm.showNpcSpecialActionByTemplateId(9400676, "attack1", -1) +sm.flipNpcByTemplateId(9400676, True) +sm.showNpcSpecialActionByTemplateId(9400676, "jumpattack", -1) +sm.spawnNpc(9400667, 993, 97) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400587, 1800, 300) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400596, 1900, 300) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400642, 1600, 300) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 1520, 300) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400642, 1450, 300) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 1400, 300) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.sendDelay(500) +sm.forcedMove(False, 200) +sm.sendDelay(1000) +sm.moveCamera(False, 300, 2000, 366) +sm.sendDelay(8000) +sm.playSound("Sound/Mob.img/9402249/Attack2", 128) +sm.showNpcSpecialActionByTemplateId(9400666, "flame", 2000) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400596, False, 50, 100) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400596, "die", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400667, False, 1000, 100) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400667, "ear", 2000) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400587, False, 2000, 300) +sm.moveNpcByTemplateId(9400596, False, 2000, 300) +sm.moveNpcByTemplateId(9400642, False, 2000, 300) +sm.moveNpcByTemplateId(9400674, False, 2000, 300) +sm.moveNpcByTemplateId(9400642, False, 2000, 300) +sm.moveNpcByTemplateId(9400674, False, 2000, 300) +sm.sendDelay(4000) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.startQuest(64015) +sm.setMapTaggedObjectVisible("guide0", True, 0, 0) +sm.createQuestWithQRValue(64015, "chk1=1;chk2=0;slaDir=0;chk3=0;chk4=0;chk5=0;chk6=0;chk7=0") +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("guide0", False, 0, 0) +sm.sendDelay(1000) +sm.forcedAction(1946, 9999) +sm.forcedAction(1947, 9999) +sm.forcedAction(1948, 9999) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/reactordrop1", 128) +sm.spawnNpc(9400617, -1430, 375) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400583, -1350, 360) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400583, True, 2000, 200) +sm.moveNpcByTemplateId(9400617, True, 2000, 200) +sm.sendDelay(1000) +sm.sendDelay(4500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64015, "chk1=1;chk2=1;slaDir=0;chk3=0;chk4=0;chk5=0;chk6=0;chk7=0") diff --git a/scripts/field/enter_867200330.py b/scripts/field/enter_867200330.py new file mode 100755 index 0000000..d4458bd --- /dev/null +++ b/scripts/field/enter_867200330.py @@ -0,0 +1,5 @@ +# id 867200330 (Abrup Basin : Burning Guard Post), field 867200330 +sm.createQuestWithQRValue(64015, "chk1=1;chk2=1;slaDir=1;chk3=1;chk4=1;chk5=1;chk6=1;chk7=1;chk8=0") +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) diff --git a/scripts/field/enter_867200350.py b/scripts/field/enter_867200350.py new file mode 100755 index 0000000..300d93a --- /dev/null +++ b/scripts/field/enter_867200350.py @@ -0,0 +1,3 @@ +# id 867200350 (Abrup Basin : Burning Kaptafel), field 867200350 +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867200400.py b/scripts/field/enter_867200400.py new file mode 100755 index 0000000..7c6a4f1 --- /dev/null +++ b/scripts/field/enter_867200400.py @@ -0,0 +1,11 @@ +# id 867200400 (Abrup Basin : Kaptafel Ashes), field 867200400 +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("q64025Obj", False, 0, 0) +sm.showNpcSpecialActionByTemplateId(9400569, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400577, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400578, "summon", 0) +sm.setMapTaggedObjectVisible("guide136", True, 0, 0) +sm.setMapTaggedObjectVisible("guide137", True, 0, 0) +sm.setMapTaggedObjectVisible("guide135", True, 0, 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) diff --git a/scripts/field/enter_867200401.py b/scripts/field/enter_867200401.py new file mode 100755 index 0000000..fd4923d --- /dev/null +++ b/scripts/field/enter_867200401.py @@ -0,0 +1,226 @@ +# id 867200401 (Abrup Basin : Kaptafel Ashes), field 867200401 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("q64025Obj", False, 0, 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.startQuest(64166) +sm.forcedFlip(True) +sm.spawnNpc(9400580, 2850, 400) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400593, 2790, 400) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.spawnNpc(9400595, 3000, 400) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.spawnNpc(9400620, 2000, 350) +sm.showNpcSpecialActionByTemplateId(9400620, "summon", 0) +sm.spawnNpc(9400621, 1950, 350) +sm.showNpcSpecialActionByTemplateId(9400621, "summon", 0) +sm.spawnNpc(9400622, 1900, 350) +sm.showNpcSpecialActionByTemplateId(9400622, "summon", 0) +sm.spawnNpc(9400582, 2000, 350) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400591, 2000, 350) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400581, 2000, 350) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400583, 1950, 350) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, 1900, 350) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.moveNpcByTemplateId(9400620, False, 500, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400621, False, 500, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400622, False, 500, 100) +sm.sendDelay(250) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "Ma'am!", 2000, 1, 0, 0, 0, 4, 9400620, 4878499) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "Ma'am!!", 2000, 1, 0, 0, 0, 4, 9400621, 4878499) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "Are you okay?", 2000, 1, 0, 0, 0, 4, 9400622, 4878499) +sm.moveNpcByTemplateId(9400582, False, 560, 200) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Alika!!") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400591, False, 650, 200) +sm.sendDelay(4000) +sm.speechBalloon(True, 0, 0, "Hawalu!", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.sendDelay(500) +sm.speechBalloon(False, 0, 0, "You're okay... What a relief...", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.startQuest(64166) +sm.moveNpcByTemplateId(9400593, True, 10, 50) +sm.sendDelay(1500) +sm.sendDelay(1500) +sm.speechBalloon(False, 0, 0, "Thank you, thank you, thank you...", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.showNpcSpecialActionByTemplateId(9400591, "thankyou", 930) +sm.sendDelay(930) +sm.resetNpcSpecialActionByTemplateId(9400591) +sm.flipNpcByTemplateId(9400591, True) +sm.sendDelay(250) +sm.showNpcSpecialActionByTemplateId(9400591, "thankyou", 930) +sm.sendDelay(930) +sm.resetNpcSpecialActionByTemplateId(9400591) +sm.flipNpcByTemplateId(9400591, False) +sm.sendDelay(250) +sm.showNpcSpecialActionByTemplateId(9400591, "thankyou2", 930) +sm.sendDelay(930) +sm.resetNpcSpecialActionByTemplateId(9400591) +sm.flipNpcByTemplateId(9400591, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400591, True, 1000, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400593, True, 1000, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400595, True, 1300, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400581, False, 700, 150) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400583, False, 700, 150) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400585, False, 700, 150) +sm.sendDelay(7000) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face1#Alika! Explain yourself! What use is a scholar atop a burning tower?") +sm.sendDelay(1000) +sm.sendNext("#face1#I have told you countless times that you MUST remain safe. What were you thinking?!") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#Tell me, where can I go where I'll be safe here?") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#That's... Well, you could have found a safer place than a towering inferno! What will we do if you get injured? Or worse?") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face2#Hey, let's just focus on the good here, yeah? Alika pulled through just fine.") +sm.moveNpcByTemplateId(9400582, False, 10, 50) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400581, True) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face1#No thanks to you, Cayne! Alika might be better off alone than with a bodyguard as useless as you.") +sm.flipNpcByTemplateId(9400581, False) +sm.sendDelay(250) +sm.sendNext("#face1#Do not forget your purpose here. Your duty!") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400581, True) +sm.sendNext("#face1#Our priority now is getting the town back in order.") +sm.sendSay("#face0#All knights, follow me. Not you, Cayne. Take some time to ponder your failure.") +sm.moveNpcByTemplateId(9400581, True, 1000, 150) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400585, True) +sm.flipNpcByTemplateId(9400583, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400583, True, 1000, 150) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "...Aw, cheer up! It's not so bad.", 2000, 1, 0, 0, 0, 4, 9400583, 4878499) +sm.moveNpcByTemplateId(9400585, True, 1000, 150) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400620, True) +sm.flipNpcByTemplateId(9400621, True) +sm.flipNpcByTemplateId(9400622, True) +sm.moveNpcByTemplateId(9400622, True, 500, 150) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400621, True, 500, 150) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400620, True, 500, 150) +sm.sendDelay(2000) +sm.moveNpcByTemplateId(9400582, False, 50, 50) +sm.sendDelay(250) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face2#Alika... I thought you were inside the house... You promised me that you'd stay safe.") +sm.sendSay("#face2#I'm just... I'm sorry. It's all my fault. I shouldn't have left your side, not even for a second.") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#But it's what I asked of you. There's no need for you to apologize. It's okay.") +sm.sendSay("#face0#As for you... Thank you. For all your help.") +sm.setParam(57) +sm.sendSay("#bAh, it's nothing.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Ah, that's right! You're the one that fought alongside us earlier. You're definitely not with Afinas. What's your name?") +sm.setParam(57) +sm.sendSay("#bI'm #h0#. And I should thank you for your part earlier, too. So... Thank you! ") +sm.setParam(37) +sm.sendSay("#face1#Nice to meet you, #h0#. I am Cayne, dashing knight extraordinaire of Afinas.") +sm.sendSay("#face1#And this is my muse, my goddess, Alika.") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#...Goodness Cayne, you're making me blush.") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Allow me to express my sincerest possible gratitude for saving Alika. I am in your debt.") +sm.setParam(57) +sm.sendSay("#bRelax, you already helped me out.") +sm.setParam(37) +sm.sendSay("#face1#...You do have a point there. Heh, you would have been slow-roasted if not for my timely intervention, eh?") +sm.sendSay("#face1#How remarkable, that we might do each other such a service in such dire circumstances! It's a good thing I was there for you, you know. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face5#Cayne...") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Huh? Alika, what's wrong? Have you been hiding a grievous injury from us?") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Of course not. But this isn't the time for your bravado. Look around.") +sm.spawnNpc(9400591, 1180, 253) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.flipNpcByTemplateId(9400591, False) +sm.startQuest(64160) +sm.spawnNpc(9400593, 1055, 200) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.flipNpcByTemplateId(9400593, True) +sm.startQuest(64166) +sm.spawnNpc(9400596, 250, 280) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400596, "rest", -1) +sm.spawnNpc(9400589, 150, 280) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400587, -900, 330) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400588, -510, 380) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400585, -200, 370) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400585, "rest", -1) +sm.spawnNpc(9400585, -1325, 350) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400585, "rest", -1) +sm.spawnNpc(9400596, -1680, 350) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400596, "rest", -1) +sm.sendDelay(1500) +sm.sendDelay(5000) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "Where is...? I need to find... Where...", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Waaah! Mommy...", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "Are you okay...?", 2000, 1, 0, 0, 0, 4, 9400589, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Ugh...", 2000, 1, 0, 0, 0, 4, 9400596, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Dad! Are you okay?!", 2000, 1, 0, 0, 0, 4, 9400588, 4878499) +sm.sendDelay(5000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(1000) +sm.sendNext("#face4#I need to help these people.") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400580, True, 300, 100) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400582, True) +sm.moveNpcByTemplateId(9400582, True, 200, 100) +sm.setParam(57) +res = sm.sendNext("#b(What should I do now?)\r\n#L0# I should look for the old lady. #l\r\n#L1# I need to help the villagers with Alika and Cayne.#l") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0##h0#? What are you doing? Aren't you coming? ") +sm.sendSay("#face0#I know you're exhausted, but every moment counts right now. Please, show us your noble spirit!") +sm.setParam(57) +res = sm.sendNext("#b(Of course, the letter that brought me here also mentioned helping the people of Abrup.) \r\n#L0# All right, lead on Cayne.#l\r\n#L1# But the old lady...#l") +sm.forcedMove(True, 200) +sm.sendDelay(1000) +sm.startQuest(64017) +sm.lockInGameUI(False, True) +sm.warp(867200400) diff --git a/scripts/field/enter_867200402.py b/scripts/field/enter_867200402.py new file mode 100755 index 0000000..d23a6e1 --- /dev/null +++ b/scripts/field/enter_867200402.py @@ -0,0 +1,61 @@ +# id 867200402 (Abrup Basin : Kaptafel Ashes), field 867200402 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400569, 1696, 362) +sm.showNpcSpecialActionByTemplateId(9400569, "summon", 0) +sm.spawnNpc(9400577, 1175, 92) +sm.showNpcSpecialActionByTemplateId(9400577, "summon", 0) +sm.spawnNpc(9400578, 1440, 312) +sm.showNpcSpecialActionByTemplateId(9400578, "summon", 0) +sm.setMapTaggedObjectVisible("guide136", False, 0, 0) +sm.setMapTaggedObjectVisible("guide137", False, 0, 0) +sm.setMapTaggedObjectVisible("guide135", False, 0, 0) +sm.spawnNpc(9400591, 1180, 253) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.flipNpcByTemplateId(9400591, False) +sm.startQuest(64160) +sm.spawnNpc(9400593, 1055, 200) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.startQuest(64166) +sm.spawnNpc(9400580, 1350, 280) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 1400, 280) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/hawaru2", 128) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Waaah, Mom! Stop...", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Mom... waaaah!", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.moveNpcByTemplateId(9400580, True, 80, 50) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#What are you looking for, Shulla? You're going to hurt yourself. ") +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("My daughter...") +sm.sendDelay(2000) +sm.sendNext("My daughter's picture... her hat...") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face5#Shulla, really... Don't hurt yourself. Here, I'll help. ") +sm.moveNpcByTemplateId(9400580, True, 100, 70) +sm.setParam(57) +sm.sendSay("#b...What is she looking for? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Her daughter went missing some time ago. ") +sm.sendSay("#face0#Since then she always carries her daughter's picture and hat. If she loses those... Well, I can't imagine the pain.") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, True, 100, 50) +sm.setParam(57) +sm.sendNext("#b(The old lady in the letter also mentioned her granddaughter was missing.) ") +res = sm.sendNext("#b(Does this mean multiple people are missing?)#b\r\n#L0# I'll help Shulla and then ask her about what happened.#l") +sm.completeQuestNoCheck(64017) +sm.startQuest(64018) +sm.lockInGameUI(False, True) +sm.warp(867200400) diff --git a/scripts/field/enter_867200403.py b/scripts/field/enter_867200403.py new file mode 100755 index 0000000..58a3119 --- /dev/null +++ b/scripts/field/enter_867200403.py @@ -0,0 +1,293 @@ +# id 867200403 (Abrup Basin : Kaptafel Ashes), field 867200403 +sm.setMapTaggedObjectVisible("q64025Obj", False, 0, 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.lockInGameUI(True, False) +sm.startQuest(64019) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, False, 380, 100) +sm.sendDelay(5000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#I want to thank everyone who came together to help the town... ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#Save your thanks, Chief Kan. It is our sworn duty to aid you in these trying times. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(500) +sm.sendNext("#face1#Ah! I almost forgot. Allow me to present #h0#, our newest ally. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#I cannot thank you enough for your aid, my friend. I am Kan, Chief of Kaptafel. ") +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(500) +sm.sendNext("#face0#It is a miracle that all of you gathered here are mostly unhurt. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#What of the other villagers? If you don't mind me asking. ") +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#I can't say for sure. I know there were many injuries...") +sm.sendSay("#face0#I was just about to check on everyone else, so if you'll please excuse me...") +sm.moveNpcByTemplateId(9400587, True, 120, 100) +sm.sendDelay(500) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/hawaru3", 128) +sm.speechBalloon(False, 0, 0, "Waaah... waa...", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.sendDelay(3000) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(2000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/hawaru1", 128) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "Waa... Mommy!!", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, False, 10, 50) +sm.sendNext("#face1#Shulla, I know this is hard for you... But you're not the only one who's suffering now. ") +sm.sendSay("#face1#There's more than enough sorrow to go around, but the others are managing it. You cannot lose yourself to this despair. ") +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400587, False) +sm.sendNext("#face0#Please, think of the child you still have. Now is not the time to fret over keepsakes. ") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("Ahh... K-Kan... Waaaa... ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400587, True) +sm.moveNpcByTemplateId(9400587, True, 500, 100) +sm.sendDelay(5000) +sm.speechBalloon(True, 0, 0, "Waaah... Sniff... ", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Hng! How can he say something so callous! ") +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "Haah...", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face3#...We should give her some space.") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400582, True, 200, 80) +sm.sendDelay(500) +sm.forcedMove(True, 150) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.createQuestWithQRValue(49003, "QET=20190622184711") +sm.createQuestWithQRValue(49000, "count=0;Quest=49003;day=152843;QET=20190622165245;state=1") +sm.createQuestWithQRValue(49000, "count=0;Quest=49003;day=152843;QET=20190622165245;state=2") +sm.createQuestWithQRValue(49000, "count=0;Quest=49003;day=152843;QET=20190622181711;state=2") +sm.startQuest(49003) +sm.moveNpcByTemplateId(9400580, True, 750, 80) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, True, 775, 80) +sm.sendDelay(500) +sm.forcedMove(True, 900) +sm.sendDelay(3000) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Brr! Now that the fires are out, it's pretty chilly around here. ") +sm.sendSay("#face0#I swear, I will never get used to this cold. Alika, are you okay? ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#...I'm okay. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#What about you, #h0#? ") +sm.setParam(57) +sm.sendSay("#bI'm okay. ") +sm.setParam(37) +sm.sendSay("#face0#Am I the ONLY one freezing to death here? You must be native to Abrup, #h0#. I don't know how else you could deal with this. ") +sm.setParam(57) +sm.sendSay("#bNo, this is my first time in Abrup. ") +sm.setParam(37) +sm.sendSay("#face0#Really? Do tell! What brought you here? I can't imagine it was for sightseeing. ") +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#This isn't the time, Cayne... ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Well, why not? Surely our friend is as curious about our mission as I am about theirs. ") +sm.setParam(57) +sm.sendSay("#bNow that you mention it... What are you doing here? ") +sm.setParam(37) +sm.sendSay("#face0#We don't actually have much in the way of details. We were only dispatched here recently. ") +sm.sendSay("#face0#Our orders were to investigate unusually active monsters in the Abrup Basin, and address the situation before things got out of hand. Obviously, that last part didn't really pan out. ") +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, True, 80, 120) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(250) +sm.sendNext("#face1#The investigation is being handled by... Ta-dah! The youngest, most talented scholar of Afinas, Alika! ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#I'm... just an apprentice. ") +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 500, 80) +sm.sendDelay(500) +sm.forcedMove(True, 470) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(2000) +sm.moveNpcByTemplateId(9400582, True, 390, 80) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face1#Nonsense! True scholarship comes from the heart. And you'll soon have the title to match! You'll see! ") +sm.sendSay("#face0#Anyway, that's our story. Unfortunately, we were completely unprepared for how bad the situation is here. ") +sm.sendSay("#face0#We're simply not equipped to deal with a full-scale invasion like what we faced today.") +sm.sendDelay(1500) +sm.flipNpcByTemplateId(9400582, True) +sm.sendNext("#face0#And we've reported as much to our commanders, but they only directed us to aid the residents as best we can. ") +sm.sendSay("#face0#What could they possibly expect of us? There's only so much... ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#You're too cavalier, Cayne. The reputation of Afinas is at stake here. We have our orders. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#You're right, of course. But even you can admit that last battle was hardly ideal. ") +sm.setParam(57) +sm.sendSay("#bI see... ") +sm.setParam(37) +sm.sendSay("#face0#By the way... ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.sendNext("#face0#When we first arrived in town, everyone was very tense. ") +sm.sendSay("#face0#We looked into it, and apparently dozens of people went missing about six months ago. All at the same time! ") +sm.sendSay("#face0#That sweet lady looking for her daughter's keepsakes, the cold-blooded chief... They lost their families, as did most of the townsfolk.") +sm.setParam(57) +sm.sendSay("#b(And the old lady in the letter...) ") +sm.setParam(37) +sm.sendSay("#face0#Between the disappearances and the attacks, Kaptafel is in dire need of a guardian angel, wouldn't you say? ") +sm.sendSay("#face0#Lucky for them, they have one now! Mighty Cayne of Afinas, serving the people in need! ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Goodness, Cayne... You don't have to be grim about the odds but you don't have to be... THAT, either. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Hmph. ") +sm.sendSay("#face0#I really do want to protect this town... but I have to be honest that we're not doing a great job of it. ") +sm.setParam(57) +sm.sendSay("#bSpeaking of which... What happened to the giant monster that attacked? ") +sm.showEffect("Effect/OnUserEff.img/emotion/what", 0, 0, 0, 0, 16865201, 0, 0) +sm.sendDelay(500) +sm.setParam(37) +sm.sendNext("#face0#Which one? The Yeti? Or the Shrelephant? Either way it was probably me.") +sm.setParam(57) +sm.sendSay("#bNo, the REALLY big one. With the tentacles, and... Well, I only saw it from the ridge. ") +sm.setParam(37) +sm.sendSay("#face0#The biggest creature I saw was the wolf with its pants on fire. Luckily there was nothing else more imposing than that. ") +sm.setParam(57) +sm.sendSay("#bAh... I may have been mistaken. ") +sm.sendSay("#b(...Or I really did see something huge moving in the smoke. At least it didn't attack the town too.) ") +sm.sendSay("#b(Could someone else have seen it?) ") +sm.completeQuestNoCheck(64019) +sm.startQuest(64020) +sm.spawnNpc(9400589, -1150, 330) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.flipNpcByTemplateId(9400580, True) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 300, 80) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, True, 280, 80) +sm.sendDelay(500) +sm.forcedMove(True, 280) +sm.sendDelay(3000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1#Ah, Peytour!") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400589, False) +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Ah, Alika. I am glad to see you're safe. ") +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 250, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, True, 250, 80) +sm.forcedMove(True, 350) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face3#Peytour... Were you injured? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Hah, just a scratch. We're quite lucky no one was seriously injured. ") +sm.sendSay("#face0#You. I saw you saving people during the chaos. I would ask who you are and why you're here, if you care to speak about it. ") +sm.setParam(57) +sm.sendSay("#bMy name is #h0#. I'm here because of a letter asking for help. ") +sm.setParam(37) +sm.sendSay("#face0#A letter, you say? How remarkable. Who would have sent a letter in the midst of all this? ") +sm.sendSay("#face0#I am intrigued by your story, but there is no time for that now. If you are willing, I could use another set of hands. ") +sm.sendSay("#face0#We've run out of space to treat the injured, so I intend to fix this building up to house more of our people. ") +sm.sendSay("#face1#But as you can see, this is a tall order even for one such as myself. Hah... ") +sm.sendSay("#face0#The first order of business is gathering new wood for repairs. If you have time, your help would be appreciated. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Of course! Cayne and #h0# would be happy to help. ") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.sendNext("#face1#Right? ") +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "#b...", 3000, 1, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#I need to remain with you, Alika. My duty is to protect you. ") +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +res = sm.sendNext("#face3##h0#?#b\r\n#L0# Sure, I can help. #l\r\n#L1# I'm very sorry, but I have other matters to attend to.#l") +sm.sendNext("#face0#Thanks. I had a feeling you'd be willing to help, #h0#. Cayne, you should join them if you can. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Alika, no... ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Cayne, isn't your mission to keep me safe? I think I'll be safer when the village is in a better state. ") +sm.showEffect("Effect/OnUserEff.img/emotion/shade", 0, 0, 0, 0, 16865201, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Sigh... I'll be back soon, so stay close to the knights. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Please, both of you... There's no need to force yourselves. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Not at all. Now, let us make haste! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Ah, so much energy. You do not disappoint, Cayne! #h0#, are you ready as well? ") +sm.setParam(57) +sm.sendSay("#bSure, let's get to it. ") +sm.setParam(37) +sm.sendSay("#face0#Then we're off!") +sm.startQuest(64021) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400589, True, 1000, 80) +sm.sendDelay(250) +sm.spawnNpc(9400585, -2050, 235) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -2100, 235) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.moveNpcByTemplateId(9400585, False, 400, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400585, False, 400, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, True, 500, 80) +sm.sendDelay(500) +sm.forcedMove(True, 1000) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(4000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#You there! ") +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendSay("Yes, sir! ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Report to Alika. Stay by her side until I return. ") +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendSay("Understood, sir. ") +sm.moveNpcByTemplateId(9400585, False, 500, 130) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400585, False, 500, 130) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, True, 500, 80) +sm.sendDelay(1500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867200420) diff --git a/scripts/field/enter_867200404.py b/scripts/field/enter_867200404.py new file mode 100755 index 0000000..faa6930 --- /dev/null +++ b/scripts/field/enter_867200404.py @@ -0,0 +1,140 @@ +# id 867200404 (Abrup Basin : Kaptafel Ashes), field 867200404 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400582, -2650, 220) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400589, -2580, 220) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.moveNpcByTemplateId(9400589, False, 300, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, False, 300, 100) +sm.sendDelay(500) +sm.forcedMove(False, 320) +sm.sendDelay(1500) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Wait, no! I lost my brooch! I \r\nmust have dropped it in the forest.", 2000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.showEffect("Effect/OnUserEff.img/questEffect/PL_MONAD1/3", 0, 0, 0, 0, 16941859, 0, 0) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 0, "Hah, you didn't drop it. \r\nWe don't take valuables into the forest for that very reason. \r\nOne of the beasts there is notorious for thieving.", 4000, 1, 0, 0, 0, 4, 9400589, 4878499) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "One? Which one? Are you talking about #h0#?", 2000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(250) +sm.speechBalloon(True, 0, 0, "Since you said you could defeat it with a single blow, I left it be.", 2000, 1, 0, 0, 0, 4, 9400589, 4878499) +sm.spawnNpc(9400592, -1700, 350) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400592, True, 340, 100) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Hey, it's that messed up guy from the base camp! Looks like he made it to town okay.) ") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#Oh! Peytour-HIC! Our wise counsel-HIC-or! No... Advisor! Yeah. Advisor. Hee hee... Say, any advice on where to find something to drink? HIC! ") +sm.flipNpcByTemplateId(9400589, False) +sm.flipNpcByTemplateId(9400582, False) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Aruhi, where did you...! ") +sm.moveNpcByTemplateId(9400589, False, 20, 100) +sm.sendSay("#face0#Ah... nevermind. ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#No, not nevermind! HIC! You'd better mind everything, or this cruel winter's gonna getcha! ") +sm.sendSay("#face0#The village burns! HIC! The snow pours down! HIC! And behind it all, a giant shadow! ") +sm.sendDelay(300) +sm.sendDelay(300) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation") +sm.setParam(57) +sm.sendNext("#bA giant shadow? ") +sm.forcedMove(False, 30) +sm.sendDelay(500) +sm.spawnNpc(9400588, -1507, 354) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.startQuest(64161) +sm.sendDelay(500) +sm.setParam(37) +sm.sendNext("#face0#Hee hee. You saw it too, didn't you? HIC! ") +sm.sendSay("#face0#Looming! Looming! Moving! Moving! ") +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#b(Aruhi must have seen the same thing.) ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Oh, Aruhi... ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(1000) +sm.sendNext("#face0#Cayne, #h0#, I should get Aruhi settled. I'll meet you in town later. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Indeed! See you soon. ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400589, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400589, False, 50, 50) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400592, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400592, False, 1000, 60) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400589, False, 1000, 60) +sm.moveNpcByTemplateId(9400588, True, 600, 80) +sm.sendDelay(3000) +sm.setParam(57) +sm.sendNext("#b(Maybe wait until Aruhi cleans up before asking...)") +sm.createQuestWithQRValue(64020, "chk1=1") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Looks like he's at it again... ") +sm.sendSay("Oh! Hi, Cayne! And... #h0#! ") +sm.setParam(57) +sm.sendSay("#bI'm glad to see you're okay. ") +sm.setParam(37) +sm.sendSay("Thanks to you! Hee hee. Hopefully you can forget about my little... breakdown before. Things were just so stressful! ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Ha! You were bawling your eyes out when we met. Rather hard to forget something like that. ") +sm.moveNpcByTemplateId(9400588, True, 50, 80) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Gee, thanks. Totally what I wanted to hear. ") +sm.sendSay("Anyway, listen. Aruhi wasn't always like that... ") +sm.sendSay("I think all this stuff with the monsters and the disappearances just made him... well, break down. He's lost his mind. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Seems a little harsh for such a jolly fellow... ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Jolly? He does that to himself to keep the pain away. He lies, he jokes, and sometimes he fights. All to distract himself from his troubles. ") +sm.sendSay("He's tried cleaning up a couple times and... you can see how well that went. ") +sm.sendSay("At least Peytour is nice enough to look out for him. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Hmm. ") +sm.setParam(57) +sm.sendSay("#bDid he lose his family as well? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Honestly, it'd be hard to find someone who HASN'T lost family in this town. ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("Oh geez, I totally forgot why I came here in the first place! I'm looking for Pete and Elle. Have you seen two little Shrelephants, one with a ribbon? ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#I think I would have remembered that. ") +sm.setParam(57) +sm.sendSay("#bYeah, I've only seen the raging ones. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Ooh, where would they have gone? I gotta get going! ") +sm.flipNpcByTemplateId(9400588, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400588, True, 1000, 90) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400582, True) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0##h0#, we should get going as well.") +sm.completeQuestNoCheck(64022) +sm.lockInGameUI(False, True) +sm.warp(867200400) diff --git a/scripts/field/enter_867200405.py b/scripts/field/enter_867200405.py new file mode 100755 index 0000000..9b219b5 --- /dev/null +++ b/scripts/field/enter_867200405.py @@ -0,0 +1,179 @@ +# id 867200405 (Abrup Basin : Kaptafel Ashes), field 867200405 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400581, -30, 365) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400585, -135, 381) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -182, 387) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Hey, you! ") +sm.setParam(57) +sm.sendSay("#b...? ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400585, True) +sm.flipNpcByTemplateId(9400585, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400585, True, 1000, 130) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400585, True, 1000, 130) +sm.sendDelay(3000) +sm.moveNpcByTemplateId(9400581, True, 100, 50) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face0#I let it slide earlier, but you're not from around here, are you? ") +sm.setParam(57) +sm.sendSay("#bYes, that's true. Why? ") +sm.setParam(37) +sm.sendSay("#face0#I am curious why someone as powerful as you would come out here. ") +sm.sendSay("#face0#I assume you aren't offended by my questioning. As leader of this dispatch and protector of this town, I have a right to know. ") +sm.setParam(57) +sm.sendSay("#bWell then... I came here because I received a letter asking for help. ") +sm.sendSay("#bSo since you brought it up, I have a right to be here. ") +sm.setParam(37) +sm.sendSay("#face0#Indeed... May I see the letter? ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.sendDelay(500) +sm.sendDelay(4000) +sm.avatarOriented("Effect/OnUserEff.img/questEffect/PL_MONAD1/0") +sm.setParam(37) +sm.sendNext("#face0#This was not sent by a resident, you know. ") +sm.setParam(57) +sm.sendSay("#bIf that's all, I have matters to attend to. ") +sm.setParam(37) +sm.sendSay("#face0#Just a moment. A final question... Do you intend to stay here further? ") +sm.setParam(57) +sm.sendSay("#bYes. I was summoned by a call for help, and I won't be leaving until the sender is safe. ") +sm.setParam(37) +sm.sendSay("#face0#I see. ") +sm.sendDelay(500) +sm.forcedMove(False, 250) +sm.sendDelay(1500) +sm.flipNpcByTemplateId(9400581, False) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 0, 0, 0, 0, 16992557, 0, 0) +sm.sendDelay(1000) +sm.sendNext("#face1#I am not done speaking with you. ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.sendNext("#face0#If you intend to stay, then you will follow my orders for the duration of your stay. ") +sm.setParam(57) +sm.sendSay("#bThat won't be a problem... as long as your orders line up with my plans.") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 0, 0, 0, 0, 16992557, 0, 0) +sm.sendDelay(3000) +sm.completeQuestNoCheck(64023) +sm.startQuest(64024) +sm.spawnNpc(9400590, 2500, 380) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400587, 450, 70) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400596, 550, 70) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400593, 1050, 130) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.spawnNpc(9400591, 1100, 130) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#Snow... snowstorm! ") +sm.sendDelay(1000) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/shade", 5000, 0, 0, 0, 17002146, 0, 0) +sm.flipNpcByTemplateId(9400596, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400591, False) +sm.moveNpcByTemplateId(9400590, True, 500, 300) +sm.sendNext("#face1#It's a snowstorm!! ") +sm.sendDelay(500) +sm.sendDelay(1000) +sm.spineScreen(True, True, False, 10000, "Map/Effect2.img/Blizzard/skeleton","normal2","") +sm.sendDelay(10000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.forcedMove(True, 30) +sm.spawnNpc(9400580, 0, 300) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 50, 300) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400591, 100, 300) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400618, 140, 250) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400596, 180, 250) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400587, -200, 300) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400589, -270, 300) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400590, -330, 300) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400583, -380, 300) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, -430, 300) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400617, -480, 300) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400585, -580, 300) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face1#What is all this ruckus about a simple snowstorm? ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Simple? Ha! Spoken like someone ignorant of real snowstorms. ") +sm.setParam(57) +sm.sendSay("#bIt looks serious... How strong is it? ") +sm.setParam(37) +sm.sendSay("#face0#Strong? It's overpowering! This is looking to be the biggest snowstorm in recent memory! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Slaka! We don't need a panic now. ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#It's still just a snowstorm. We must repair as many buildings and set up as many tents as possible before it reaches us. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Great plan! Especially if you intend to freeze to death. ") +sm.sendSay("#face0#None of our buildings are in any shape to weather a storm like this. Look at those clouds. How long do you think we have until it hits? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#It pains me to say this, but Slaka is right. We have a matter of hours before the storm hits. We cannot set up shelter in that time. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#Then... we must evacuate, yes? Pack up and take shelter in another town? ") +sm.setParam(57) +sm.sendSay("#bSounds like it. And if that's the plan, we don't really have time to debate. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Chief Kan, you should say something. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#...We have no choice. Let us pack what we can and leave immediately. ") +sm.sendSay("#face0#We have good relations with the town just across the river. I'm sure they will take us in. ") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("W-wait! We're coming back after the storm passes, right? We're not truly abandoning our town, are we? ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Of course. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Shulla, I understand your fear, but I promise you this. As soon as the storm ends, I will return and restore our town to its original glory! ") +sm.sendSay("#face0#When our loved ones return, I want their homes to look just the way they remembered. ") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("Oh, Peytour. Thank you... Thank you. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#We have little time, people. Grab what you can and meet back here as soon as possible.") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Hero! ") +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendSay("Yes, sir!") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#What is the status of our reinforcements? Did headquarters respond?") +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendSay("No, sir. They told us to await their response, and then nothing since.") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Understood. ") +sm.completeQuestNoCheck(64024) +sm.lockInGameUI(False, True) +sm.warp(867200400) diff --git a/scripts/field/enter_867200406.py b/scripts/field/enter_867200406.py new file mode 100755 index 0000000..edfc3a1 --- /dev/null +++ b/scripts/field/enter_867200406.py @@ -0,0 +1,162 @@ +# id 867200406 (Abrup Basin : Kaptafel Ashes), field 867200406 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400589, -1233, 357) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400589, "attack1", 0) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bPeytour. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400589, False) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Oh, you're back already? How is everyone doing? ") +sm.setParam(57) +sm.sendSay("#bThey seem to be on track. Everyone is quite busy. ") +sm.sendSay("#bShulla's doing better and decided that we'll need food for everyone on the journey.") +sm.setParam(37) +sm.sendSay("#face0#Ah, excellent initiative on her part! ") +sm.setParam(57) +sm.sendSay("#bI wanted to help Shulla so I scoured the village for extra food, but everything I found was ruined. ") +sm.setParam(37) +sm.sendSay("#face0#That's unfortunate.") +sm.sendDelay(2000) +sm.spineScreen(True, True, False, 7000, "Map/Effect2.img/Blizzard/skeleton","normal2","") +sm.spawnNpc(9400587, -750, 300) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.sendDelay(5000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#We'll just have to make do, then. I think we can all get by without food for one day. ") +sm.forcedFlip(True) +sm.moveNpcByTemplateId(9400587, True, 300, 80) +sm.sendDelay(2000) +sm.forcedFlip(True) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#The able-bodied among us can, but I'm more concerned about the sick and injured. ") +sm.createQuestWithQRValue(49013, "QET=20190622194818") +sm.createQuestWithQRValue(49000, "count=0;Quest=49013;day=152843;QET=20190622191713;state=1") +sm.createQuestWithQRValue(49000, "count=0;Quest=49013;day=152843;QET=20190622191713;state=2") +sm.createQuestWithQRValue(49000, "count=0;Quest=49013;day=152843;QET=20190622191818;state=2") +sm.startQuest(49013) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#We cannot waste time searching for food. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Kan, if people go hungry, they won't have the energy to walk. ") +sm.sendSay("#face0#I agree that we must get moving as soon as possible, but if we don't prepare for the worst our people may not be able to keep up. ") +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 1000, 0, 0, 0, 9400587, 0, 0) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#...Understood. I'll take a few of our hunters out myself. ") +sm.setParam(57) +sm.sendSay("#bI'll go with you. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Good hunting. May the breath of Windsleep Forest go with you. ") +sm.sendDelay(1500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.spawnNpc(9400587, 2450, 400) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400596, 2380, 400) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400596, 2240, 400) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400596, 2200, 400) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400590, 3212, -362) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.moveNpcByTemplateId(9400587, False, 500, 200) +sm.moveNpcByTemplateId(9400596, False, 500, 200) +sm.moveNpcByTemplateId(9400596, False, 400, 200) +sm.moveNpcByTemplateId(9400596, False, 400, 200) +sm.forcedMove(False, 500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(5000) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Slaka! Come with me.", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(500) +sm.speechBalloon(False, 0, 0, "We need to go hunting.", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#What? You want to go hunting now? ") +sm.sendSay("#face0#Are you crazy?! We might not outrun the storm even if we leave now! I won't! I can't. It's suicide! ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#That is why I picked you. You're swift. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#I can't go. I won't go! ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Slaka! We don't have time to be quarrelling like this.") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Why do you always push people around like this? If you want to freeze to death, leave me out of it! ") +sm.spawnNpc(9400580, 2300, 390) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 2350, 390) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400618, 2460, 390) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.moveNpcByTemplateId(9400580, False, 480, 100) +sm.moveNpcByTemplateId(9400582, False, 480, 100) +sm.moveNpcByTemplateId(9400618, False, 240, 100) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0##h0#, what's going on? ") +sm.setParam(57) +sm.sendSay("#b(You explain the whole situation.) ") +sm.setParam(37) +sm.sendSay("#face0#Ah... I see both sides here. The chief really should have explained better. ") +sm.sendSay("#face0#I would think that the more people you have hunting, the faster it will go, yes? ") +sm.setParam(57) +sm.sendSay("#bOf course. ") +sm.setParam(37) +sm.sendSay("#face2#Then if the great knight Cayne helped you, you'd be done in a flash, right? ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Oh no, Alika... ") +sm.setParam(57) +sm.sendSay("#bMost definitely. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Please, Cayne. And be careful. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Are you... concerned for me? ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Hahh... darn it.") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400590, True, 50, 30) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Have no fear! Simply lead on and I will fill your larders with succulent meats! ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#All right, all right! Ten minutes. I'm only giving you ten minutes, okay? ") +sm.flipNpcByTemplateId(9400590, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400590, False, 100, 100) +sm.moveNpcByTemplateId(9400587, False, 100, 100) +sm.moveNpcByTemplateId(9400596, False, 100, 100) +sm.forcedMove(False, 100) +sm.moveNpcByTemplateId(9400582, False, 100, 100) +sm.moveNpcByTemplateId(9400596, False, 100, 100) +sm.moveNpcByTemplateId(9400596, False, 100, 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#With a group this large, we should split up. ") +sm.moveNpcByTemplateId(9400587, False, 300, 250) +sm.moveNpcByTemplateId(9400596, False, 300, 250) +sm.moveNpcByTemplateId(9400596, False, 300, 250) +sm.moveNpcByTemplateId(9400596, False, 300, 250) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.startQuest(64030) +sm.warp(867200460) diff --git a/scripts/field/enter_867200407.py b/scripts/field/enter_867200407.py new file mode 100755 index 0000000..d766525 --- /dev/null +++ b/scripts/field/enter_867200407.py @@ -0,0 +1,103 @@ +# id 867200407 (Abrup Basin : Kaptafel Ashes), field 867200407 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400677, 2684, 400) +sm.showNpcSpecialActionByTemplateId(9400677, "summon", 0) +sm.spawnNpc(9400678, 2388, 400) +sm.showNpcSpecialActionByTemplateId(9400678, "summon", 0) +sm.spawnNpc(9400679, 2130, 400) +sm.showNpcSpecialActionByTemplateId(9400679, "summon", 0) +sm.spawnNpc(9400588, 2637, 410) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400589, 2485, 400) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400591, 2288, 404) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.startQuest(64160) +sm.spawnNpc(9400581, 2564, 406) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.startQuest(64163) +sm.spawnNpc(9400592, 2239, 408) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400582, 3318, 350) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400590, 3384, 332) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation", 1000, 0, 0, 0, 18283625, 0, 0) +sm.sendDelay(3000) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation") +sm.moveNpcByTemplateId(9400582, True, 250, 300) +sm.forcedMove(True, 300) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400582, "movingattack", 0) +sm.forcedAction(5, 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400588, False, 200, 200) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400590, True, 200, 100) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Wah! What are you all doing?! You're scaring Elle! ") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Hah, good! These will be pulling the wagon. Just what we needed. ") +sm.setParam(57) +sm.sendSay("#bElle? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Is it, perchance... A female? ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("What do you mean by 'perchance'? ") +sm.spawnNpc(9400587, 3318, 350) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400596, 3384, 332) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, True, 100, 100) +sm.moveNpcByTemplateId(9400596, True, 100, 100) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#I believe that we have everyone. ") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("I don't like this... abandoning our homes. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#We will return soon. I promise. ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face1#Ha ha ha, serves you right. HIC! I told you, didn't I? You should have HIC! listened to me! HIC! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Aruhi! ") +sm.setParam(57) +sm.sendSay("#bHmm, hmm. Shall we get going, then? ") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400581, False, 600, 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Vanguards, move out! ") +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#People were right to say that disaster comes without warning. I still can't believe it... ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face0#Regardless, we got everyone together and supplied ahead of the storm. You played a big part in that, and I thank you for your efforts.") +sm.completeQuestNoCheck(64031) +sm.createQuestWithQRValue(64005, "") +sm.createQuestWithQRValue(64006, "") +sm.createQuestWithQRValue(64007, "") +sm.createQuestWithQRValue(64006, "Ec=0") +sm.createQuestWithQRValue(64006, "prog=0;Ec=0") +sm.createQuestWithQRValue(64006, "prog=0;Ec=0;max=0") +sm.createQuestWithQRValue(64006, "prog=0;Ec=0;max=0;food=450") +sm.createQuestWithQRValue(64006, "prog=0;Ec=0;weather=0;max=0;food=450") +sm.createQuestWithQRValue(64006, "WC=0;prog=0;Ec=0;weather=0;max=0;food=450") +sm.createQuestWithQRValue(64007, "happy0=50") +sm.createQuestWithQRValue(64007, "happy0=50;happy1=50") +sm.createQuestWithQRValue(64007, "happy0=50;happy1=50;happy2=60") +sm.createQuestWithQRValue(64007, "happy0=50;happy1=50;happy2=60;happy3=55") +sm.createQuestWithQRValue(64007, "happy0=50;happy1=50;happy2=60;happy3=55;man0=56") +sm.createQuestWithQRValue(64007, "happy0=50;happy1=50;happy2=60;happy3=55;man0=56;man1=33") +sm.createQuestWithQRValue(64007, "happy0=50;happy1=50;happy2=60;happy3=55;man0=56;man1=33;man2=38") +sm.createQuestWithQRValue(64007, "happy0=50;happy1=50;happy2=60;happy3=55;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64006, "WC=0;man=200;prog=0;Ec=0;weather=0;max=0;food=450") +sm.warp(867200501) diff --git a/scripts/field/enter_867200419.py b/scripts/field/enter_867200419.py new file mode 100755 index 0000000..1cd43f0 --- /dev/null +++ b/scripts/field/enter_867200419.py @@ -0,0 +1,70 @@ +# id 867200419 (Abrup Basin : Eyeful Territory), field 867200419 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400589, -720, 280) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400582, -850, 280) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400611, -970, 280) +sm.showNpcSpecialActionByTemplateId(9400611, "summon", 0) +sm.spawnNpc(9400611, -1090, 280) +sm.showNpcSpecialActionByTemplateId(9400611, "summon", 0) +sm.spawnNpc(9400611, -1300, 280) +sm.showNpcSpecialActionByTemplateId(9400611, "summon", 0) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Ugh, my aching back. Perhaps a snowstorm is coming. Let's take a break. ") +sm.showNpcSpecialActionByTemplateId(9400582, "movingattack", -1) +sm.showNpcSpecialActionByTemplateId(9400611, "attack1", -1) +sm.moveNpcByTemplateId(9400589, False, 280, 80) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.forcedMove(False, 316) +sm.sendDelay(501) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400589, True) +sm.sendNext("#face0#Please, rest. You must be exhausted from all the fighting earlier. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#I would prefer to finish up and return to the village. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Don't want to keep Alika waiting, do you? ") +sm.sendSay("#face0#Well, I wouldn't want to slow you down, then. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#A-ah, think nothing of it, Peytour. You rest while we finish up. ") +sm.sendSay("#face0#Right, #h0#? ") +sm.forcedFlip(True) +sm.setParam(57) +sm.sendSay("#b... ") +sm.sendDelay(500) +sm.forcedMove(True, 200) +sm.setParam(37) +sm.sendNext("#face1#That's the spirit! ") +sm.setParam(57) +sm.sendSay("#bYou really care about Alika. ") +sm.sendDelay(1000) +sm.forcedAction(5, 50000) +sm.setParam(37) +sm.sendNext("#face0#I-I... I am Alika's bodyguard. I'm... like her Prince Charming, I suppose... ") +sm.setParam(57) +sm.sendSay("#bRight, right... So, how big a deal is apprentice scholar? ") +sm.setParam(37) +sm.sendSay("#face0#Ha ha, Alika is no ordinary apprentice scholar. ") +sm.sendSay("#face0#She is the youngest of the Afinas scholars! A genius! Not to mention clever, charming, driven, gorgeous... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#I heard she is the daughter of a high-ranking scholar. ") +sm.setParam(57) +sm.sendSay("#bOh! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Hey, hey, hey. Let's not read anything more into this, all right? That's not relevant... ") +sm.setParam(57) +sm.sendSay("#bThen why is your voice trailing off? ") +sm.setParam(37) +sm.sendSay("#face0#... ") +sm.sendSay("#face0#...Of course, I owe a great debt to her father Rookhowell. But right now, it is solely for Alika's sake. ") +sm.sendSay("#face1#There, 50! That's all of it. Now, let's head back!") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64021, "dir1=1") +sm.warp(867200404) diff --git a/scripts/field/enter_867200420.py b/scripts/field/enter_867200420.py new file mode 100755 index 0000000..b0aefe9 --- /dev/null +++ b/scripts/field/enter_867200420.py @@ -0,0 +1,11 @@ +# id 867200420 (Abrup Basin : Eyeful Territory), field 867200420 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Hunt these Petreefied Eyeful monsters and bring back 50 pieces of Sturdy Wood. ") +sm.sendSay("#face0#I must say, these creatures are very clever in hoarding Sturdy Wood. ") +sm.sendSay("#face0#But ours is the greater need right now, so we will do what must be done. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Not a problem! Have at you, foul wood-hoarding beasts! ") +sm.warp(867200419) diff --git a/scripts/field/enter_867200460.py b/scripts/field/enter_867200460.py new file mode 100755 index 0000000..0e811bc --- /dev/null +++ b/scripts/field/enter_867200460.py @@ -0,0 +1,2 @@ +# id 867200460 (Abrup Basin : Kaptafel Outskirts), field 867200460 +sm.startQuest(28825) diff --git a/scripts/field/enter_867200480.py b/scripts/field/enter_867200480.py new file mode 100755 index 0000000..50618b7 --- /dev/null +++ b/scripts/field/enter_867200480.py @@ -0,0 +1,4 @@ +# id 867200480 (Abrup Basin : Outskirts of Kaptafel), field 867200480 +sm.startQuest(64161) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.moveNpcByTemplateId(9400588, False, 500, 140) diff --git a/scripts/field/enter_867200500.py b/scripts/field/enter_867200500.py new file mode 100755 index 0000000..897da66 --- /dev/null +++ b/scripts/field/enter_867200500.py @@ -0,0 +1,4 @@ +# id 867200500 (Abrup Basin : Trail to the Village Across the River), field 867200500 +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Ec=0;weather=0;max=1;food=450") +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Ec=0;weather=0;max=16;food=450") +sm.startQuest(64033) diff --git a/scripts/field/enter_867200501.py b/scripts/field/enter_867200501.py new file mode 100755 index 0000000..b158adc --- /dev/null +++ b/scripts/field/enter_867200501.py @@ -0,0 +1,13 @@ +# id 867200501 (Abrup Basin : Kaptafel Ashes), field 867200501 +sm.createQuestWithQRValue(64006, "WC=0;man=200;prog=0;Ec=0;weather=0;max=1;food=450") +sm.createQuestWithQRValue(64006, "WC=0;speed=40;man=200;prog=0;Ec=0;weather=0;max=1;food=450") +sm.lockInGameUI(True, False) +sm.closeUI(1888) +sm.closeUI(1890) +sm.spineScreen(True, True, False, 15000, "Map/Effect2.img/Blizzard/skeleton","normal2","") +sm.sendDelay(3000) +sm.onLayer(2000, "title", 0, 350, -80, "Map/EffectPL.img/MONAD1/title", 1, True, -1, False) +sm.sendDelay(10000) +sm.offLayer(3000, "title", False) +sm.spineScreen(True, True, False, 0, "Map/Effect2.img/Blizzard/skeleton","normal","") +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_867200550.py b/scripts/field/enter_867200550.py new file mode 100755 index 0000000..39dbdc0 --- /dev/null +++ b/scripts/field/enter_867200550.py @@ -0,0 +1,3 @@ +# id 867200550 (Abrup Basin : Svarti Trail), field 867200550 +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP1_chk15;Ec=0;max=1;weather=0;food=320") +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP1_chk15;Ec=0;max=20;weather=0;food=320") diff --git a/scripts/field/enter_867200551.py b/scripts/field/enter_867200551.py new file mode 100755 index 0000000..7791f09 --- /dev/null +++ b/scripts/field/enter_867200551.py @@ -0,0 +1,25 @@ +# id 867200551 (Abrup Basin : Abandoned Village), field 867200551 +sm.closeUI(1888) +sm.closeUI(1890) +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=40;man=199;prog=0;Pt=CaravanP1_chk15;Ec=0;max=1;weather=0;food=320") +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Slaka's gone.") +sm.sendSay("#face0#And he took some of our supplies with him.") +sm.setParam(57) +sm.sendSay("#bSlaka did WHAT? Why in the world would he do such a thing?") +sm.setParam(37) +sm.sendSay("#face0#Nothing we can do about it now. We need to head out.") +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.openUI(1888) +sm.openUI(1890) diff --git a/scripts/field/enter_867200552.py b/scripts/field/enter_867200552.py new file mode 100755 index 0000000..748a5d3 --- /dev/null +++ b/scripts/field/enter_867200552.py @@ -0,0 +1,2 @@ +# id 867200552 (Abrup Basin : Svarti Entrance), field 867200552 +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=40;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk19;Ec=20;max=20;weather=1;food=90") diff --git a/scripts/field/enter_867200600.py b/scripts/field/enter_867200600.py new file mode 100755 index 0000000..e1864a8 --- /dev/null +++ b/scripts/field/enter_867200600.py @@ -0,0 +1,91 @@ +# id 867200600 (Abrup Basin : Village Exit), field 867200600 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400641, 530, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, 630, 330) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400641, 730, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, 830, 330) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400641, 930, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400641, 1030, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400641, 1130, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, 1230, 330) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400641, 1430, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400641, -200, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, -300, 330) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400641, -400, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, -500, 330) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400641, -600, 330) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, -700, 330) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400617, 790, 330) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400618, 740, 330) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400619, 640, 330) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400617, 540, 330) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400619, 590, 330) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400618, 690, 330) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "attack1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "attack1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.sendDelay(100) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.sendDelay(200) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendNext("Hellfangs followed us!") +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "skill1", 0) +sm.moveNpcByTemplateId(9400617, True, 2000, 210) +sm.moveNpcByTemplateId(9400618, True, 2000, 300) +sm.moveNpcByTemplateId(9400619, True, 2000, 270) +sm.moveNpcByTemplateId(9400617, True, 2000, 230) +sm.moveNpcByTemplateId(9400619, True, 2000, 200) +sm.moveNpcByTemplateId(9400618, True, 2000, 250) +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendSay("Aaaaaaagh!") +sm.sendDelay(1500) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867200620) diff --git a/scripts/field/enter_867200620.py b/scripts/field/enter_867200620.py new file mode 100755 index 0000000..c258a30 --- /dev/null +++ b/scripts/field/enter_867200620.py @@ -0,0 +1,151 @@ +# id 867200620 (Abrup Basin : Village Exit), field 867200620 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400585, -725, 340) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -680, 340) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400616, -600, 340) +sm.showNpcSpecialActionByTemplateId(9400616, "summon", 0) +sm.spawnNpc(9400592, -550, 340) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400591, -490, 340) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400581, -380, 340) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400587, -300, 340) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400580, -220, 340) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, -164, 340) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400589, -85, 340) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.forcedMove(True, 130) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, False, 250, 80) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, False) +sm.flipNpcByTemplateId(9400589, False) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0##h0#! You made it back! ") +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Well done, everyone. ") +sm.moveNpcByTemplateId(9400589, False, 30, 50) +sm.sendDelay(500) +sm.sendNext("#face0#Is everyone okay? ") +sm.setParam(57) +sm.sendSay("#bYes. Fortunately, there weren't that many. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Uh... Excuse me, #h0#. I know you're very busy, but can I speak to you? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#We talked quite a bit while you were off fighting those monsters... ") +sm.sendSay("#face0#Specifically, we discussed who should be leading this caravan. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#To cut to the chase... #h0#, can you lead the caravan? ") +sm.sendSay("#face0#Vice Captain Butler, Chief Kan, Peytour, and myself agree. ") +sm.sendSay("#face0#None of us can say that we'd have made a better decision just now. ") +sm.sendSay("#face0#Since we each have our own interests here, none of us is really qualified to make objective decisions for the group. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400581, 4878499) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendNext("#face0##h0#, will you help us? ") +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bI'm not sure I'm qualified for this either, though. I hardly know anything about Abrup or the knights... ") +sm.setParam(37) +sm.sendSay("#face0#Chief Kan will help you manage our people, and Vice Captain Butler will help you manage our foes. ") +sm.sendSay("#face0#You're the right person for the job BECAUSE you're an outsider. You don't have the strong ties that we do to each other. Please... we need you.") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400581, 4878499) +sm.setParam(57) +sm.sendNext("#bDid everyone agree to this? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#...It's only until we reach the next village. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Yes. It's unanimous. ") +sm.setParam(57) +sm.sendSay("#bAll right. I'll do my best to get everyone there safely. That's all. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#I don't need your best. I need results. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400581, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400581, True, 500, 200) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, False, 70, 100) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Right, well... let's start with directions. ") +sm.sendDelay(1000) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTutoBack/0", True, True, 0, 0, 0) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/0", True, True, 0, 0, 0) +sm.sendNext("#face0#From Kaptafel to the next town is nearly a full day's travel. We'll need to cross the Frozen River as well.") +sm.sendDelay(1000) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/0", False, False, 0, 0, 0) +sm.sendDelay(3000) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/1", True, True, 0, 0, 0) +sm.sendDelay(500) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/1", False, False, 0, 0, 0) +sm.sendNext("#face0#As we travel, food should be your chief concern. ") +sm.sendDelay(2000) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/2", True, True, 0, 0, 0) +sm.sendNext("#face0#Without food, our weaker members will slow down and... might not make it. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Kan... Isn't there something more important than food? ") +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/2", False, False, 0, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#...Yes, of course. Food is important because our people are the most important part of the caravan.. ") +sm.sendDelay(2000) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/3", True, True, 0, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#Ha ha ha, ohhh that's a good one! Chief Kan pretending to care about his people, ha ha ha. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Slaka! Now is not the time! ") +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/3", False, False, 0, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Keep in mind that every decision you make will have consequences like this. Some will be happy, some will be angry, and some will be sad. ") +sm.sendDelay(2000) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/4", True, True, 0, 0, 0) +sm.sendNext("#face0#That's the problem with leadership. It's impossible to make everyone happy, so every decision is a difficult one. ") +sm.sendDelay(500) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTutoBack/0", False, False, 0, 0, 0) +sm.reservedEffectRepeat("Effect/DirectionPL.img/effect/PL_Abrup_CaravanTuto/4", False, False, 0, 0, 0) +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("#bSo, I've got to get everyone to the town across the river by making decisions that everyone can live with. No pressure! ") +sm.setParam(37) +sm.sendSay("#face0#Well, keep in mind that as the journey wears on, people will get tired and less patient with your decisions. ") +sm.sendSay("#face0#And if you add hunger on top of that, morale will drop in a hurry. Hence why food is so important. ") +sm.sendSay("#face0#If you ever need to go over all of your responsibilities, I'd be happy to review for you again anytime. ") +sm.sendSay("#face0#Please... do your best. We want everyone to reach the next town, and not turn on each other.") +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk1;Ec=2;weather=0;max=16;food=450") +sm.warp(867200500) diff --git a/scripts/field/enter_867200621.py b/scripts/field/enter_867200621.py new file mode 100755 index 0000000..87fd76e --- /dev/null +++ b/scripts/field/enter_867200621.py @@ -0,0 +1,58 @@ +# id 867200621 (Abrup Basin : Empty Plain), field 867200621 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400589, -58, 450) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400590, 15, 450) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400587, 155, 450) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400593, 587, 450) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.spawnNpc(9400591, 451, 450) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.zoomCamera(1500, 2000, 1500, 150, 450) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400590, "attack2", -1) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#What is this? Why is this all I get? ") +sm.sendSay("#face0#Ha! Have you forgotten who risked their lives to get this food before we left?! ") +sm.resetNpcSpecialActionByTemplateId(9400590) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Slaka! Even you can't ignore how cold and hungry everyone is. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#How much did you eat to get all that energy!? ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Slaka... I won't force you to sacrifice for the sake of others, but I will not tolerate you turning people against each other! ") +sm.zoomCamera(3000, 2000, 3000, 400, 450) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 18555205, 0, 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400590, False, 250, 120) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#Ha! There you are, #h0#! So, you decided who gets what food? ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.moveNpcByTemplateId(9400589, False, 250, 120) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Calm down, Slaka. #h0# is making difficult decisions for all of us. ") +sm.sendSay("#face0#Please... we all have to sacrifice a little so that everyone can survive. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Why's that, huh? Why do I even need to be chained to you? Why should I sacrifice anything? ") +sm.sendDelay(1000) +res = sm.sendNext("#face0#I'd rather take my chances on my own than be dragged down by you lot. Pathetic!#b\r\n#L0# 'Fine, Slaka. You can have more food.'#l\r\n#L1# 'Enough arguing. We have to conserve our supplies.'#l") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk6;Ec=6;weather=3;max=16;food=240") +sm.sendNext("#face0#You should have done this earlier, you know. Think harder next time! ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#That was a bad decision that undermines our principles. I guarantee you will regret doing that. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#No way. ") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk6;Ec=7;weather=3;max=16;food=240") +sm.warp(867200500) diff --git a/scripts/field/enter_867200622.py b/scripts/field/enter_867200622.py new file mode 100755 index 0000000..4e36781 --- /dev/null +++ b/scripts/field/enter_867200622.py @@ -0,0 +1,60 @@ +# id 867200622 (Abrup Basin : Snowfield Center), field 867200622 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400677, -450, 415) +sm.showNpcSpecialActionByTemplateId(9400677, "summon", 0) +sm.spawnNpc(9400617, -240, 415) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400592, -180, 415) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400618, -120, 415) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400679, 50, 415) +sm.showNpcSpecialActionByTemplateId(9400679, "summon", 0) +sm.spawnNpc(9400619, 250, 415) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400591, 300, 415) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400678, 430, 415) +sm.showNpcSpecialActionByTemplateId(9400678, "summon", 0) +sm.spawnNpc(9400677, 720, 415) +sm.showNpcSpecialActionByTemplateId(9400677, "summon", 0) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400677, False, 3000, 70) +sm.moveNpcByTemplateId(9400678, False, 3000, 70) +sm.moveNpcByTemplateId(9400591, False, 3000, 70) +sm.moveNpcByTemplateId(9400619, False, 3000, 70) +sm.moveNpcByTemplateId(9400679, False, 3000, 70) +sm.moveNpcByTemplateId(9400617, False, 3000, 70) +sm.moveNpcByTemplateId(9400592, False, 3000, 70) +sm.moveNpcByTemplateId(9400618, False, 3000, 70) +sm.moveNpcByTemplateId(9400677, False, 3000, 70) +sm.forcedMove(False, 1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWhat do you mean, she hasn't given up? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Her name is Sanaan. As she said, she lived with her granddaughter in the forest. Just the two of them. ") +sm.sendSay("#face0#You might have heard, but about six months ago people went missing from all over Abrup. Soon after that, Sanaan visited Kaptafel. ") +sm.sendSay("#face0#She said she was looking for her granddaughter. ") +sm.forcedMove(False, 1000) +sm.sendSay("#face0#Seems that she was taken along with the others. ") +sm.sendSay("#face0#Since this letter also mentions the monsters turning savage, it must have been written recently. She's still looking for her granddaughter, I suppose. ") +sm.setParam(57) +sm.sendSay("#bDo you have any idea where she is now? ") +sm.forcedMove(False, 1000) +sm.setParam(37) +sm.sendSay("#face0#I do not. Last I heard, she was planning to visit another town looking for her granddaughter. ") +sm.sendSay("#face0#But that was months ago. She might have returned to her cabin already. I pray the breath of the Windsleep Forest kept her safe... ") +sm.setParam(57) +sm.sendSay("#bI see. ") +sm.setParam(37) +sm.sendSay("#face0#When we reach the next town, perhaps you should ask around. ") +sm.setParam(57) +sm.sendSay("#bWill do. Thank you.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=4;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk8;Ec=9;weather=0;max=16;food=240") +sm.warp(867200500) diff --git a/scripts/field/enter_867200630.py b/scripts/field/enter_867200630.py new file mode 100755 index 0000000..767a9d9 --- /dev/null +++ b/scripts/field/enter_867200630.py @@ -0,0 +1,43 @@ +# id 867200630 (Abrup Basin : Open Snowfield), field 867200630 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400667, 520, 330) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400617, 790, 300) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400618, 740, 300) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400619, 640, 300) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400617, 540, 300) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400619, 590, 300) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400618, 690, 300) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400667, "ear", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendNext("M-monster! There's a monster!") +sm.moveNpcByTemplateId(9400617, True, 2000, 210) +sm.moveNpcByTemplateId(9400618, True, 2000, 300) +sm.moveNpcByTemplateId(9400619, True, 2000, 270) +sm.moveNpcByTemplateId(9400617, True, 2000, 230) +sm.moveNpcByTemplateId(9400619, True, 2000, 200) +sm.moveNpcByTemplateId(9400618, True, 2000, 250) +sm.showNpcSpecialActionByTemplateId(9400667, "jumpattack", 0) +sm.setInnerOverrideSpeakerTemplateID(9400619) # Resident +sm.sendSay("Aaaaaaagh!") +sm.showNpcSpecialActionByTemplateId(9400667, "howl", 0) +sm.zoomCamera(2000, 2000, 3000, 520, 330) +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.createFieldTextEffect("#r#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26#??????#k", 100, 4000, 4, 80, 200, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs16#It's the monster that brought the snowstorm.", 100, 1500, 4, 80, 250, 1, 4, 0, 0, 0) +sm.sendDelay(6000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867200720) diff --git a/scripts/field/enter_867200650.py b/scripts/field/enter_867200650.py new file mode 100755 index 0000000..becf04f --- /dev/null +++ b/scripts/field/enter_867200650.py @@ -0,0 +1,28 @@ +# id 867200650 (Abrup Basin : Frozen River Bank), field 867200650 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400582, 330, 355) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, -30, 355) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, 230, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 130, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 30, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -130, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400629, -230, 355) +sm.showNpcSpecialActionByTemplateId(9400629, "summon", 0) +sm.spawnNpc(9400672, 370, 355) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400582, "attack2", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400672, "die1", 0) +sm.sendDelay(1440) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(867200721) diff --git a/scripts/field/enter_867200720.py b/scripts/field/enter_867200720.py new file mode 100755 index 0000000..c24b64e --- /dev/null +++ b/scripts/field/enter_867200720.py @@ -0,0 +1,35 @@ +# id 867200720 (Abrup Basin : Open Snowfield), field 867200720 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400667, 450, 330) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400581, 620, 330) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400585, 0, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 60, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 110, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 640, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 660, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.forcedAction(7, 0) +sm.showNpcSpecialActionByTemplateId(9400667, "die1", 0) +sm.sendDelay(300) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/finishAttack", 0) +sm.sendDelay(2000) +sm.playSound("PL_3min/CubeBreak", 100) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendNext("We've defeated the monster!") +sm.sendDelay(1440) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk9;Ec=10;weather=0;max=16;food=240") +sm.warp(867200500) diff --git a/scripts/field/enter_867200721.py b/scripts/field/enter_867200721.py new file mode 100755 index 0000000..1236f9f --- /dev/null +++ b/scripts/field/enter_867200721.py @@ -0,0 +1,46 @@ +# id 867200721 (Abrup Basin : Frozen River Bank), field 867200721 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400582, 450, 355) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, 620, 355) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, 0, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 60, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 110, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 700, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 770, 355) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400672, 500, 355) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.zoomCamera(1500, 2000, 1500, 550, 420) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Cayne Special Number 2: Horizon Divide! ") +sm.showNpcSpecialActionByTemplateId(9400582, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400672, "die1", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/finishAttack", 0) +sm.sendDelay(2000) +sm.playSound("PL_3min/CubeBreak", 100) +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendNext("Yeah!!") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Cayne, seriously... What is wrong with you? ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#Can't you see? He's trying to brighten up the mood! He's so considerate and awesome and... ") +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 18744121, 0, 0) +sm.sendSay("#face0#Ooh, Miss Alika, I envy you so much! ") +sm.sendDelay(1440) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk13;Ec=14;weather=2;max=16;food=240") +sm.warp(867200500) diff --git a/scripts/field/enter_867200722.py b/scripts/field/enter_867200722.py new file mode 100755 index 0000000..35abc56 --- /dev/null +++ b/scripts/field/enter_867200722.py @@ -0,0 +1,37 @@ +# id 867200722 (Abrup Basin : Windy Spot), field 867200722 +sm.completeQuestNoCheck(64158) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400581, -630, 330) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400585, -685, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -665, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -715, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -765, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -815, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Halt! ") +sm.moveNpcByTemplateId(9400585, False, 630, 250) +sm.moveNpcByTemplateId(9400585, False, 630, 200) +sm.moveNpcByTemplateId(9400585, False, 630, 220) +sm.moveNpcByTemplateId(9400585, False, 630, 230) +sm.moveNpcByTemplateId(9400585, False, 630, 200) +sm.moveNpcByTemplateId(9400581, False, 700, 250) +sm.forcedFlip(True) +sm.sendDelay(4000) +sm.sendNext("#face0#Return to the caravan! ") +sm.sendDelay(1440) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=4;max=20;weather=1;food=528") +sm.warp(867200550) diff --git a/scripts/field/enter_867200724.py b/scripts/field/enter_867200724.py new file mode 100755 index 0000000..16df09b --- /dev/null +++ b/scripts/field/enter_867200724.py @@ -0,0 +1,33 @@ +# id 867200724 (Abrup Basin : Biting Wind River Banks), field 867200724 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400668, 450, 330) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.spawnNpc(9400583, 120, 330) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, -50, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 10, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 60, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.forcedAction(7, 0) +sm.showNpcSpecialActionByTemplateId(9400668, "die1", 0) +sm.sendDelay(300) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/finishAttack", 0) +sm.sendDelay(1500) +sm.playSound("PL_3min/CubeBreak", 100) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#Are you okay? ") +sm.forcedFlip(True) +sm.sendSay("#face0#You saved us. All of us, the villagers too! ") +sm.sendDelay(1440) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk9;Ec=10;max=20;weather=0;food=329") +sm.warp(867200550) diff --git a/scripts/field/enter_867200725.py b/scripts/field/enter_867200725.py new file mode 100755 index 0000000..883e162 --- /dev/null +++ b/scripts/field/enter_867200725.py @@ -0,0 +1,39 @@ +# id 867200725 (Abrup Basin : Edge Wind Snowfield), field 867200725 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400582, 450, 330) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, 620, 330) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, 0, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 60, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 110, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 640, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 660, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400642, 500, 330) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400582, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400642, "die1", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/finishAttack", 0) +sm.sendDelay(1500) +sm.playSound("PL_3min/CubeBreak", 100) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bDo you think the group made it to the caravan safely? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#I'm sure the other knights met them and brought them back. Have no fear.") +sm.sendDelay(1440) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk12;Ec=13;max=20;weather=2;food=329") +sm.warp(867200550) diff --git a/scripts/field/enter_867200800.py b/scripts/field/enter_867200800.py new file mode 100755 index 0000000..9bd4910 --- /dev/null +++ b/scripts/field/enter_867200800.py @@ -0,0 +1,4 @@ +# id 867200800 (Abrup Basin : Abandoned Village), field 867200800 +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) diff --git a/scripts/field/enter_867200801.py b/scripts/field/enter_867200801.py new file mode 100755 index 0000000..a3a48ca --- /dev/null +++ b/scripts/field/enter_867200801.py @@ -0,0 +1,123 @@ +# id 867200801 (Abrup Basin : Abandoned Village), field 867200801 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, -620, 300) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400592, -565, 300) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400580, -390, 300) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, -335, 300) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.startQuest(64164) +sm.spawnNpc(9400583, -285, 300) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400589, -220, 300) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400588, -160, 300) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.startQuest(64161) +sm.spawnNpc(9400581, -80, 300) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.startQuest(64163) +sm.spawnNpc(9400591, 0, 300) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400587, 60, 300) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.moveNpcByTemplateId(9400587, False, 350, 200) +sm.sendDelay(2000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation", 1000, 0, 0, 0, 32753666, 0, 0) +sm.moveNpcByTemplateId(9400591, False, 300, 200) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#What happened? ") +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400591, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400591, False) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Where should we go now...? ") +sm.sendDelay(2000) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400581, False, 50, 100) +sm.startQuest(64163) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0##h0#, I believe we should make a brief stop and then head out again. ") +sm.flipNpcByTemplateId(9400581, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, True) +sm.moveNpcByTemplateId(9400587, True, 370, 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face1#Vice Captain, many of the knights were injured along the way. We need to stop so they can be treated. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#The people are also exhausted from the hunger and cold. They need time. ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Our priority is to reach a safe place as soon as possible. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#Vice Captain Butler is right. I know it will be tough, but we should get moving right away. ") +sm.sendDelay(1000) +sm.createQuestWithQRValue(49014, "QET=20190623122238") +sm.createQuestWithQRValue(49000, "count=1;Quest=49014;day=152844;QET=20190623112957;state=1") +sm.createQuestWithQRValue(49000, "count=1;Quest=49014;day=152844;QET=20190623112957;state=2") +sm.createQuestWithQRValue(49000, "count=1;Quest=49014;day=152844;QET=20190623115238;state=2") +sm.startQuest(49014) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#What would you have me do, #h0#? ") +sm.flipNpcByTemplateId(9400588, True) +sm.sendDelay(200) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(200) +sm.flipNpcByTemplateId(9400583, True) +sm.sendDelay(200) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(200) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400591, True) +sm.moveNpcByTemplateId(9400591, True, 200, 100) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#If you push everyone to set out again, we're sure to have injuries. Especially since night has fallen. ") +sm.sendSay("#face0#On the bright side, we do have some time before the snowstorm catches up to us. That should allow us to rest a little, at least. ") +sm.sendSay("#face0#We need to build a fire for warmth and cooking first. ") +sm.setParam(57) +res = sm.sendNext("#b(Both Alika and Vice Captain Butler have good points...)\r\n#L0# 'We should rest first.' #l\r\n#L1# 'We should set out immediately.'#l") +sm.sendNext("#bYeah, I think it would be better to rest before we push everyone further. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#Hmph! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#All right everyone, get moving! ") +sm.flipNpcByTemplateId(9400589, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400589, False, 1000, 100) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400588, False) +sm.flipNpcByTemplateId(9400583, False) +sm.flipNpcByTemplateId(9400582, False) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400588, False, 500, 100) +sm.moveNpcByTemplateId(9400583, False, 500, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, False, 500, 100) +sm.moveNpcByTemplateId(9400580, False, 500, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400592, False, 500, 100) +sm.moveNpcByTemplateId(9400590, False, 500, 100) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.startQuest(64057) +sm.completeQuestNoCheck(64035) +sm.warp(867200800) diff --git a/scripts/field/enter_867200802.py b/scripts/field/enter_867200802.py new file mode 100755 index 0000000..6e38f1d --- /dev/null +++ b/scripts/field/enter_867200802.py @@ -0,0 +1,109 @@ +# id 867200802 (Abrup Basin : Abandoned Village), field 867200802 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, -566, 300) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400582, 150, 300) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, -62, 350) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, -150, 350) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -200, 350) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -250, 350) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -300, 350) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.forcedFlip(True) +sm.sendDelay(3000) +sm.sendDelay(3000) +sm.forcedFlip(True) +sm.sendDelay(300) +sm.forcedMove(True, 450) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bSlaka. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#No. Go away. Whatever it is, I won't do it. Save your breath for someone gullible. ") +sm.setParam(57) +sm.sendSay("#bPlease, you can make the difference between comfort and starvation for someone. ") +sm.flipNpcByTemplateId(9400590, False) +sm.setParam(37) +sm.sendSay("#face0#Yeah, someone that isn't me! You know, you need to learn to keep out of other peoples' business. ") +sm.sendDelay(2000) +sm.sendNext("#face0#What about all those knights you have? Send them out to do your chores! ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400583, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400583, False, 1000, 200) +sm.moveNpcByTemplateId(9400585, False, 1000, 200) +sm.moveNpcByTemplateId(9400585, False, 1000, 200) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400585, True) +sm.flipNpcByTemplateId(9400585, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400585, True, 400, 200) +sm.moveNpcByTemplateId(9400585, True, 400, 200) +sm.sendDelay(500) +sm.sendNext("#face0#...Feh. ") +sm.flipNpcByTemplateId(9400590, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400590, False) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.sendNext("#face0#Hey, why is the loud one always following that girl around?! ") +sm.setParam(57) +sm.sendSay("#bHuh? You mean Cayne? ") +sm.setParam(37) +sm.sendSay("#face0#Hey! Cayne! ") +sm.sendDelay(2000) +sm.sendNext("#face0#Caaaaaayne!! ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400582, True) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 0, 0, 0, 32781792, 0, 0) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, True, 500, 200) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#What? What happened? Are we being attacked? ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Our fearless leader needs you to go hunting. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#Oh. I would love the challenge, believe me, but I'm on another mission presently. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#What? ") +sm.sendDelay(500) +sm.sendDelay(1000) +sm.sendDelay(3000) +sm.speechBalloon(False, 0, 0, "Fine! Go! ", 2000, 1, 0, 0, 0, 4, 9400580, 4878499) +sm.sendNext("#face0#Well, problem solved. Right? ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Ah... ") +sm.sendSay("#face0#What say we all go, then? The more of us there are, the faster it'll get done. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#What?! ") +sm.setParam(57) +sm.sendSay("#bLook, if it's going to be this big of a deal, I can just go on my own. ") +sm.setParam(37) +sm.sendSay("#face0#...You're really good at this. ") +sm.sendSay("#face0#All right, this is REALLY the last time. Don't ask me for ANYTHING after this!") +sm.flipNpcByTemplateId(9400590, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400590, True, 100, 100) +sm.sendDelay(1500) +sm.lockInGameUI(False, True) +sm.startQuest(64037) +sm.warp(867200810) diff --git a/scripts/field/enter_867200810.py b/scripts/field/enter_867200810.py new file mode 100755 index 0000000..b2dcfc3 --- /dev/null +++ b/scripts/field/enter_867200810.py @@ -0,0 +1,11 @@ +# id 867200810 (Abrup Basin : River Entrance to Windsleep Forest), field 867200810 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bRight, I'll gather firewood, so you two bring back some Hellfang meat. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#What? No! Why should I get stuck with the dangerous task? ") +sm.setParam(57) +sm.sendSay("#bFine. Then let's each bring back 20 pieces of Firewood and 20 cuts of Hellfang Meat. ") +sm.createQuestWithQRValue(64037, "chk=1") diff --git a/scripts/field/enter_867200850.py b/scripts/field/enter_867200850.py new file mode 100755 index 0000000..d93df5b --- /dev/null +++ b/scripts/field/enter_867200850.py @@ -0,0 +1,28 @@ +# id 867200850 (Abrup Basin : Abandoned Village Camp), field 867200850 +sm.startQuest(64166) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bLet's hand out firewood and meat to the people. ") +sm.completeQuestNoCheck(64037) +sm.startQuest(64038) +sm.createQuestWithQRValue(64038, "NpcSpeech=94005831") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#Thank you, #h0#! I would've gone with you if you'd told me earlier. It's a bit embarrassing to just accept all this without having done anything.") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#Don't worry, just eat. I brought back the most anyway.") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#Really? Thank you! ") +sm.createQuestWithQRValue(64038, "NpcSpeech=94005831/94005912") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Thank you, #h0#. Hawalu, come say thank you.") +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendSay("Thank you!") +sm.lockInGameUI(True, False) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 141649, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64038, "NpcSpeech=94005831/94005912/94005803") +sm.createQuestWithQRValue(64038, "chk=1;NpcSpeech=94005831/94005912/94005803") +sm.warp(867200851) diff --git a/scripts/field/enter_867200851.py b/scripts/field/enter_867200851.py new file mode 100755 index 0000000..49e1825 --- /dev/null +++ b/scripts/field/enter_867200851.py @@ -0,0 +1,209 @@ +# id 867200851 (Abrup Basin : Abandoned Village Camp), field 867200851 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, 390, 300) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400584, 450, 300) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.forcedMove(False, 50) +sm.sendDelay(600) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, here. Firewood and meat. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Thank you, #h0#. This will make a huge difference for our people. ") +sm.setParam(57) +sm.sendSay("#bYes... I was also thinking... If you could make a soup with it, we could probably feed everyone. ") +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face1#Ah. Soup... ") +sm.sendDelay(1000) +sm.sendNext("#face3#Hmm... ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(1000) +sm.sendNext("#face3#Ah! Janyt, have you... made soup before? ") +sm.sendDelay(1000) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400580, 4878499) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400584, 4878499) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400580, 4878499) +sm.forcedFlip(True) +sm.forcedMove(True, 40) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, True, 50, 50) +sm.setParam(57) +sm.sendNext("#bUh... Look, all you do is start a fire...") +sm.sendSay("#bPut water in the pot...") +sm.sendSay("#bPut the pot over the fire... ") +sm.sendSay("#bWhen the water boils, put the meat and spices in... and done! ") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/simmer", 128) +sm.forcedFlip(True) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 32823501, 0, 0) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face0#Oh! Ha ha, that was rather easy. My book made it sound much more complicated... ") +sm.setParam(57) +sm.sendSay("#bYour book? A cookbook? ") +sm.setParam(37) +sm.sendSay("#face4#I suppose so. It said the meat had to be prepared in half-inch cubes, and the carrots, celery, peppers, and potatoes must be sliced thin. I would have to chop onions, leeks, and mushrooms, and mince garlic. Then you blanch tomatoes by boiling, cooling in cold water, and peeling... ") +sm.setParam(57) +sm.sendSay("#bI'm gonna stop you there, because all we have is meat and salt. ") +sm.setParam(37) +sm.sendSay("#face0#I see. Well then! You must be quite talented to cook with just two ingredients. ") +sm.sendSay("#face0#So... now what do we do? ") +sm.setParam(57) +sm.sendSay("#bWe just wait! That's it! ") +sm.forcedFlip(True) +sm.sendDelay(300) +sm.forcedMove(True, 115) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.sendDelay(300) +sm.forcedAction(29, 99999999) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400580, True, 30, 50) +sm.sendDelay(2100) +sm.showNpcSpecialActionByTemplateId(9400580, "sit", -1) +sm.sendDelay(3000) +sm.spawnNpc(9400592, 700, 320) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.moveNpcByTemplateId(9400592, True, 390, 100) +sm.sendDelay(3000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face1#Uh... #h0#... ") +sm.setParam(57) +sm.sendSay("#bAh, Aruhi. You're looking... better today? ") +sm.setParam(37) +sm.sendSay("#face1#Oh, you bet! I've stayed on the straight and narrow since we HIC! left Kaptafel! ") +sm.sendSay("#face1#Seriously. I'm serious. Please believe me. Oh! This is water! ") +sm.setParam(57) +sm.sendSay("#bAll right, I believe you. Good job. ") +sm.setParam(37) +sm.sendSay("#face0#Uh... So, I heard earlier... You came here because of a letter asking you to find someone's granddaughter...? ") +sm.setParam(57) +sm.sendSay("#bAh, yes. That's right. (He must have overheard the conversation with Vice Captain Butler.) ") +sm.spawnNpc(9400587, 700, 320) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.moveNpcByTemplateId(9400587, True, 320, 100) +sm.setParam(37) +sm.sendSay("#face0#I-I saw who did it! ") +sm.setParam(57) +sm.sendSay("#bYou did? ") +sm.setParam(37) +sm.sendSay("#face0#Yes! I swear I did! Look, I know my reputation isn't the best but you HIC! have to believe me! ") +sm.sendSay("#face1#My daughter, the townspeople, and probably the girl you're looking for, too... I saw who took them! ") +sm.setParam(57) +sm.sendSay("#bPlease, go on! ") +sm.spawnNpc(9400588, 700, 320) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.startQuest(64161) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#You must be tired. Please don't waste your energy on useless prattle. ") +sm.sendSay("#face0#This is the rambling of a broken man who can't cope with the hand life has dealt him... ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#I'm telling the truth! I've cleaned up my act, Kan. You can trust me! ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, True, 210, 100) +sm.sendDelay(600) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#How can you say that when you still reek of your vices? ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#I... I... Blast you, Kan! I've had enough of your judging! You've never had any faith in me, even before it all fell apart. ") +sm.sendSay("#face0#Blame HIC! whatever you want. I've got nothing to prove to you... ") +sm.sendDelay(900) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(600) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#...Get ahold of yourself, man. ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#Ha! Why should I? You've ruined us all anyway... ") +sm.setParam(57) +sm.sendSay("#bAruhi, please. Tell me what you saw. ") +sm.setParam(37) +sm.sendSay("#face0#Forget it... HIC! Nothing I say will bring back my wife... my daughter... I've done enough...") +sm.completeQuestNoCheck(64038) +sm.startQuest(64039) +sm.moveNpcByTemplateId(9400592, True, 500, 100) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400588, True, 410, 100) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Dad... How could you? ") +sm.sendSay("You don't care about anyone's feelings, do you? You just kick them while they're down. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400587, True, 500, 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Ugh! ") +sm.sendSay("Aruhi and Dad just cause problems. These grown-ups, I swear... ") +sm.setParam(57) +sm.sendSay("#bWhy shouldn't we consider Aruhi's account of the culprits? ") +sm.setParam(37) +sm.sendSay("Really? Have you seen the way he acts? There might be a little truth in there but you gotta dig it out from under a mountain of ramblings.") +sm.setParam(57) +sm.sendSay("#bSo how can I learn the truth? ") +sm.setParam(37) +sm.sendSay("Well, I've picked out the bits that are the same every time he tells his story. He says that a dozen people in white rock-hard armor took everyone to a giant dish in the forest and disappeared! ") +sm.setParam(57) +sm.sendSay("#bOkay... I mean, that could have happened. Maple World is a weird place... ") +sm.setParam(37) +sm.sendSay("Hey, I've lived in Abrup my whole life. Same goes for Dad, Aruhi, and just about all of the townspeople. ") +sm.sendSay("We've heard stories of people and contraptions like that from time to time. But why would they appear in the woods out here, of all places? ") +sm.sendSay("And then if they DID, why would walking disaster Aruhi be the ONLY one to see ANY of it?") +sm.sendSay("The grown-ups say he made the whole story up to give himself a reason for losing his family. ") +sm.sendSay("After all, if that's what happened, he would never have been able to save them. It wouldn't be his fault. ") +sm.setParam(57) +sm.sendSay("#b...I see. ") +sm.setParam(37) +sm.sendSay("He's probably gone to drown his sorrows. ") +sm.setParam(57) +sm.sendSay("#bHow do you know that? ") +sm.setParam(37) +sm.sendSay("Because it's what he always does. I don't need to see... it just always happens. ") +sm.sendSay("I wish it wasn't this way. I feel bad for him, and I want him to get better. But he never does. ") +sm.sendDelay(1000) +sm.sendNext("Both Aruhi... and Dad. ") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Ullan... ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Sorry, it's a lot to take in. Tomorrow's going to be tough, so we should all get some sleep! ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400588, False) +sm.sendDelay(500) +sm.sendNext("Good night to you, Alika! ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Sweet dreams, Ullan.") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400588, False, 500, 100) +sm.sendDelay(500) +sm.sendNext("#face0#Trying to change yourself... It's hard, isn't it? Maybe the hardest task of all. ") +sm.sendSay("#face0#How hard is it for her to keep smiling like she does? I always thought her just a regular girl, but my goodness... she's more mature than some of the adults we deal with. ") +sm.setParam(57) +sm.sendSay("#bBut she is still a child. We owe it to her to spare her as much sorrow as we can. ") +sm.setParam(37) +sm.sendSay("#face0#Agreed. Let's do what we can to ease her burdens. It's a promise! ") +sm.setParam(57) +sm.sendSay("#bPromise... ") +sm.setParam(37) +sm.sendSay("#face1#And if we're going to do that, we all need rest! ") +sm.sendSay("#face1#Good night, #h0#. ") +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64038, "chk=1;NpcSpeech=94005831/94005912/94005803;dir01=1") +sm.warp(867200852) diff --git a/scripts/field/enter_867200852.py b/scripts/field/enter_867200852.py new file mode 100755 index 0000000..9dc9796 --- /dev/null +++ b/scripts/field/enter_867200852.py @@ -0,0 +1,42 @@ +# id 867200852 (Abrup Basin : Abandoned Village Camp), field 867200852 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(9400582, -320, 300) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400580, -150, 300) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "sleep", -1) +sm.forcedInput(4) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0##h0#! #h0#! ") +sm.setParam(57) +sm.sendSay("#bAh... is it morning already? ") +sm.setParam(37) +sm.sendSay("#face0#Morning? What are you talking about? It's your turn on night watch! ") +sm.setParam(57) +sm.sendSay("#bUhhh...? ") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setParam(37) +sm.sendNext("#face0#Did... did no one tell you? The most capable warriors among us are taking turns keeping watch over the camp! We need your might to help us ensure the safety of- ") +sm.sendDelay(1000) +sm.forcedInput(0) +sm.sendDelay(2000) +sm.forcedFlip(True) +sm.setParam(57) +sm.sendNext("#bCayne... pipe down. You're going to wake everyone. ") +sm.setParam(37) +sm.sendSay("#face0#Ahh! My apologies... I was overcome by my noble vigor. ") +sm.sendSay("#face0#You take the east line. Our scouts report no monster groups out that way, but you might get one or two wanderers. Stay awake, and stay alert! ") +sm.setParam(57) +sm.sendSay("#bRight. Gotcha.") +sm.startQuest(64040) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.warp(867200860) diff --git a/scripts/field/enter_867200859.py b/scripts/field/enter_867200859.py new file mode 100755 index 0000000..abbfad3 --- /dev/null +++ b/scripts/field/enter_867200859.py @@ -0,0 +1,131 @@ +# id 867200859 (Abrup Basin : Abandoned Village Outskirts), field 867200859 +sm.lockInGameUI(True, False) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/footstep1", 128) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1500) +sm.spawnNpc(9400580, 1550, 170) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/footstep2", 128) +sm.sendDelay(2000) +sm.moveNpcByTemplateId(9400580, True, 100, 80) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWho's there? ") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400580, True, 100, 80) +sm.sendDelay(500) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/footstep3", 128) +sm.changeBGM("BgmPL2.img/WalkTogether", 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Ah... ") +sm.setParam(57) +sm.sendSay("#bAlika? ") +sm.setParam(37) +sm.sendSay("#face5##h0#...") +sm.setParam(57) +sm.sendSay("#bIt's late. What is it? ") +sm.sendDelay(500) +sm.forcedMove(False, 400) +sm.sendDelay(500) +sm.setParam(37) +sm.sendNext("#face5#Nothing. I had a nightmare, so I wanted to clear my head. I suppose I wandered too far. ") +sm.setParam(57) +sm.sendSay("#bYou should stay inside the camp. It's dangerous out here. ") +sm.setParam(37) +sm.sendSay("#face5#I know... I... Could I sit here for a bit before I go back? ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, True, 90, 80) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/footstep1", 128) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/footstep2", 128) +sm.forcedMove(False, 78) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(9400580, "sit", -1) +sm.sendDelay(500) +sm.forcedAction(29, 9999999) +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("#b... ") +sm.setParam(37) +sm.sendSay("#face0#Are you well-rested? You could simply assign this task to the knights, you know. ") +sm.setParam(57) +sm.sendSay("#bI'm fine. I wanted to give the Afinas Dispatch a chance to rest. They've been going non-stop since the attack. ") +sm.setParam(37) +sm.sendSay("#face0#Indeed. They are very committed people. ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("#face0#Oh, I meant to ask you... Did you ever find out who sent the letter? ") +sm.setParam(57) +sm.sendSay("#bNot yet. It doesn't seem to be anyone from Kaptafel. ") +sm.setParam(37) +sm.sendSay("#face1#Well then... Since you've done so much for us, #h0#, let us help you find the sender. ") +sm.setParam(57) +sm.sendSay("#bI don't need anything in return, Alika. I'm doing this because it's the right thing to do. ") +sm.setParam(37) +sm.sendSay("#face1#I know, and that's why I want to help you. ") +sm.sendSay("#face1#You deserve our gratitude. ") +sm.setParam(57) +sm.sendSay("#b...Thanks. Little awkward, but thanks. ") +sm.setParam(37) +sm.sendSay("#face1#Hee hee.") +sm.sendDelay(3000) +sm.setParam(57) +sm.sendNext("#bSo... What was your dream about? ") +sm.setParam(37) +sm.sendSay("#face0#...Ah. ") +sm.setParam(57) +sm.sendSay("#bOh, sorry. If you don't want to talk about it, forget I asked. ") +sm.setParam(37) +sm.sendSay("#face5#Let's discuss that another time. ") +sm.sendSay("#face0#You know what's strange? I know this place is dangerous, and that we're in terrible danger. But right now, right here... this is nice. ") +sm.sendSay("#face0#Brisk wind, clear sky, beautiful aurora... ") +sm.sendDelay(500) +sm.sendDelay(7000) +sm.sendDelay(1000) +sm.sendNext("#face1#It really helps me clear my mind. ") +sm.setParam(57) +sm.sendSay("#bYou're not cold? ") +sm.setParam(37) +sm.sendSay("#face5#Oh, I am. But if anything it makes me feel more alive. ") +sm.sendSay("#face0#I used to wake up from my nightmares in an empty room, night after night. But tonight, I awoke to a tent full of people sleeping. ") +sm.sendSay("#face0#Being around all those peaceful sleepers brought me so much relief. ") +sm.sendSay("#face0#And then, when I stepped outside, there was the aurora blanketing the sky in soft light. ") +sm.sendSay("#face0#...And there was you, #h0#. ") +sm.sendSay("#face1#Don't think too much of it. I'm just... so glad you're here. ") +sm.setParam(57) +sm.sendSay("#b...It's still late. You should get some sleep while you can. ") +sm.setParam(37) +sm.sendSay("#face0#I'll do that. Tomorrow will be another tough journey, won't it? ") +sm.sendSay("#face0#I hope things go as well as they did today. ") +sm.sendDelay(1000) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.sendDelay(250) +sm.sendNext("#face1#So... I'll head back, then. See you in the morning, #h0#.") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, False, 300, 80) +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64040) +sm.startQuest(64041) +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=40;man=200;prog=0;Pt=CaravanP1_chk15;Ec=0;max=16;weather=3;food=240") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=40;man=200;prog=0;Pt=CaravanP1_chk15;Ec=0;max=0;weather=3;food=240") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=40;man=200;prog=0;Pt=CaravanP1_chk15;Ec=0;max=0;weather=3;food=320") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=40;man=200;prog=0;Pt=CaravanP1_chk15;Ec=0;max=0;weather=0;food=320") +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=40;man=200;prog=0;Pt=CaravanP1_chk15;Ec=0;max=0;weather=0;food=320") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=100;happy3=100;man0=56;man1=32;man2=38;man3=73") +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=40;man=199;prog=0;Pt=CaravanP1_chk15;Ec=0;max=0;weather=0;food=320") +sm.warp(867200551) diff --git a/scripts/field/enter_867200860.py b/scripts/field/enter_867200860.py new file mode 100755 index 0000000..8a43d5d --- /dev/null +++ b/scripts/field/enter_867200860.py @@ -0,0 +1,5 @@ +# id 867200860 (Abrup Basin : Abandoned Village Outskirts), field 867200860 +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.createQuestWithQRValue(64040, "chk1=1") +sm.warp(867200859) diff --git a/scripts/field/enter_867200900.py b/scripts/field/enter_867200900.py new file mode 100755 index 0000000..3a40d28 --- /dev/null +++ b/scripts/field/enter_867200900.py @@ -0,0 +1,455 @@ +# id 867200900 (Abrup Basin : Windy Spot), field 867200900 +sm.startQuest(64158) +sm.createQuestWithQRValue(64193, "item=1;pMeat=0") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=422") +sm.createQuestWithQRValue(64193, "item=1;pMeat=2") +sm.createQuestWithQRValue(64193, "item=2;pMeat=2") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=425") +sm.createQuestWithQRValue(64193, "item=2;pMeat=5") +sm.createQuestWithQRValue(64193, "item=3;pMeat=5") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=427") +sm.createQuestWithQRValue(64193, "item=3;pMeat=7") +sm.createQuestWithQRValue(64193, "item=4;pMeat=7") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=430") +sm.createQuestWithQRValue(64193, "item=4;pMeat=10") +sm.createQuestWithQRValue(64193, "item=5;pMeat=10") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=433") +sm.createQuestWithQRValue(64193, "item=5;pMeat=13") +sm.createQuestWithQRValue(64193, "item=6;pMeat=13") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=436") +sm.createQuestWithQRValue(64193, "item=6;pMeat=16") +sm.createQuestWithQRValue(64193, "item=7;pMeat=16") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=438") +sm.createQuestWithQRValue(64193, "item=7;pMeat=18") +sm.createQuestWithQRValue(64193, "item=8;pMeat=18") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=441") +sm.createQuestWithQRValue(64193, "item=8;pMeat=21") +sm.createQuestWithQRValue(64193, "item=9;pMeat=21") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=443") +sm.createQuestWithQRValue(64193, "item=9;pMeat=23") +sm.createQuestWithQRValue(64193, "item=10;pMeat=23") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=446") +sm.createQuestWithQRValue(64193, "item=10;pMeat=26") +sm.createQuestWithQRValue(64193, "item=11;pMeat=26") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=448") +sm.createQuestWithQRValue(64193, "item=11;pMeat=28") +sm.createQuestWithQRValue(64193, "item=12;pMeat=28") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=450") +sm.createQuestWithQRValue(64193, "item=12;pMeat=30") +sm.createQuestWithQRValue(64193, "item=13;pMeat=30") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=452") +sm.createQuestWithQRValue(64193, "item=13;pMeat=32") +sm.createQuestWithQRValue(64193, "item=14;pMeat=32") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=455") +sm.createQuestWithQRValue(64193, "item=14;pMeat=35") +sm.createQuestWithQRValue(64193, "item=15;pMeat=35") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=458") +sm.createQuestWithQRValue(64193, "item=15;pMeat=38") +sm.createQuestWithQRValue(64193, "item=16;pMeat=38") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=461") +sm.createQuestWithQRValue(64193, "item=16;pMeat=41") +sm.createQuestWithQRValue(64193, "item=17;pMeat=41") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=464") +sm.createQuestWithQRValue(64193, "item=17;pMeat=44") +sm.createQuestWithQRValue(64193, "item=18;pMeat=44") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=467") +sm.createQuestWithQRValue(64193, "item=18;pMeat=47") +sm.createQuestWithQRValue(64193, "item=19;pMeat=47") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=469") +sm.createQuestWithQRValue(64193, "item=19;pMeat=49") +sm.createQuestWithQRValue(64193, "item=20;pMeat=49") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=471") +sm.createQuestWithQRValue(64193, "item=20;pMeat=51") +sm.createQuestWithQRValue(64193, "item=21;pMeat=51") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=474") +sm.createQuestWithQRValue(64193, "item=21;pMeat=54") +sm.createQuestWithQRValue(64193, "item=22;pMeat=54") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=476") +sm.createQuestWithQRValue(64193, "item=22;pMeat=56") +sm.createQuestWithQRValue(64193, "item=23;pMeat=56") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=478") +sm.createQuestWithQRValue(64193, "item=23;pMeat=58") +sm.createQuestWithQRValue(64193, "item=24;pMeat=58") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=481") +sm.createQuestWithQRValue(64193, "item=24;pMeat=61") +sm.createQuestWithQRValue(64193, "item=25;pMeat=61") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=484") +sm.createQuestWithQRValue(64193, "item=25;pMeat=64") +sm.createQuestWithQRValue(64193, "item=26;pMeat=64") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=487") +sm.createQuestWithQRValue(64193, "item=26;pMeat=67") +sm.createQuestWithQRValue(64193, "item=27;pMeat=67") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=489") +sm.createQuestWithQRValue(64193, "item=27;pMeat=69") +sm.createQuestWithQRValue(64193, "item=28;pMeat=69") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=491") +sm.createQuestWithQRValue(64193, "item=28;pMeat=71") +sm.createQuestWithQRValue(64193, "item=29;pMeat=71") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=493") +sm.createQuestWithQRValue(64193, "item=29;pMeat=73") +sm.createQuestWithQRValue(64193, "item=30;pMeat=73") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=495") +sm.createQuestWithQRValue(64193, "item=30;pMeat=75") +sm.createQuestWithQRValue(64193, "item=31;pMeat=75") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=498") +sm.createQuestWithQRValue(64193, "item=31;pMeat=78") +sm.createQuestWithQRValue(64193, "item=32;pMeat=78") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=500") +sm.createQuestWithQRValue(64193, "item=32;pMeat=80") +sm.createQuestWithQRValue(64193, "item=33;pMeat=80") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=503") +sm.createQuestWithQRValue(64193, "item=33;pMeat=83") +sm.createQuestWithQRValue(64193, "item=34;pMeat=83") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=506") +sm.createQuestWithQRValue(64193, "item=34;pMeat=86") +sm.createQuestWithQRValue(64193, "item=35;pMeat=86") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=508") +sm.createQuestWithQRValue(64193, "item=35;pMeat=88") +sm.createQuestWithQRValue(64193, "item=36;pMeat=88") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=510") +sm.createQuestWithQRValue(64193, "item=36;pMeat=90") +sm.createQuestWithQRValue(64193, "item=37;pMeat=90") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=513") +sm.createQuestWithQRValue(64193, "item=37;pMeat=93") +sm.createQuestWithQRValue(64193, "item=38;pMeat=93") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=515") +sm.createQuestWithQRValue(64193, "item=38;pMeat=95") +sm.createQuestWithQRValue(64193, "item=39;pMeat=95") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=518") +sm.createQuestWithQRValue(64193, "item=39;pMeat=98") +sm.createQuestWithQRValue(64193, "item=40;pMeat=98") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=521") +sm.createQuestWithQRValue(64193, "item=40;pMeat=101") +sm.createQuestWithQRValue(64193, "item=41;pMeat=101") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=523") +sm.createQuestWithQRValue(64193, "item=41;pMeat=103") +sm.createQuestWithQRValue(64193, "item=42;pMeat=103") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=526") +sm.createQuestWithQRValue(64193, "item=42;pMeat=106") +sm.createQuestWithQRValue(64193, "item=43;pMeat=106") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=529") +sm.createQuestWithQRValue(64193, "item=43;pMeat=109") +sm.createQuestWithQRValue(64193, "item=44;pMeat=109") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=532") +sm.createQuestWithQRValue(64193, "item=44;pMeat=112") +sm.createQuestWithQRValue(64193, "item=45;pMeat=112") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=534") +sm.createQuestWithQRValue(64193, "item=45;pMeat=114") +sm.createQuestWithQRValue(64193, "item=46;pMeat=114") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=537") +sm.createQuestWithQRValue(64193, "item=46;pMeat=117") +sm.createQuestWithQRValue(64193, "item=47;pMeat=117") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=539") +sm.createQuestWithQRValue(64193, "item=47;pMeat=119") +sm.createQuestWithQRValue(64193, "item=48;pMeat=119") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=542") +sm.createQuestWithQRValue(64193, "item=48;pMeat=122") +sm.createQuestWithQRValue(64193, "item=49;pMeat=122") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=544") +sm.createQuestWithQRValue(64193, "item=49;pMeat=124") +sm.createQuestWithQRValue(64193, "item=50;pMeat=124") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=547") +sm.createQuestWithQRValue(64193, "item=50;pMeat=127") +sm.createQuestWithQRValue(64193, "item=51;pMeat=127") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=549") +sm.createQuestWithQRValue(64193, "item=51;pMeat=129") +sm.createQuestWithQRValue(64193, "item=52;pMeat=129") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=552") +sm.createQuestWithQRValue(64193, "item=52;pMeat=132") +sm.createQuestWithQRValue(64193, "item=53;pMeat=132") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=555") +sm.createQuestWithQRValue(64193, "item=53;pMeat=135") +sm.createQuestWithQRValue(64193, "item=54;pMeat=135") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=557") +sm.createQuestWithQRValue(64193, "item=54;pMeat=137") +sm.createQuestWithQRValue(64193, "item=55;pMeat=137") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=560") +sm.createQuestWithQRValue(64193, "item=55;pMeat=140") +sm.createQuestWithQRValue(64193, "item=56;pMeat=140") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=563") +sm.createQuestWithQRValue(64193, "item=56;pMeat=143") +sm.createQuestWithQRValue(64193, "item=57;pMeat=143") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=565") +sm.createQuestWithQRValue(64193, "item=57;pMeat=145") +sm.createQuestWithQRValue(64193, "item=58;pMeat=145") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=568") +sm.createQuestWithQRValue(64193, "item=58;pMeat=148") +sm.createQuestWithQRValue(64193, "item=59;pMeat=148") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=571") +sm.createQuestWithQRValue(64193, "item=59;pMeat=151") +sm.createQuestWithQRValue(64193, "item=60;pMeat=151") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=573") +sm.createQuestWithQRValue(64193, "item=60;pMeat=153") +sm.createQuestWithQRValue(64193, "item=61;pMeat=153") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=575") +sm.createQuestWithQRValue(64193, "item=61;pMeat=155") +sm.createQuestWithQRValue(64193, "item=62;pMeat=155") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=578") +sm.createQuestWithQRValue(64193, "item=62;pMeat=158") +sm.createQuestWithQRValue(64193, "item=63;pMeat=158") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=581") +sm.createQuestWithQRValue(64193, "item=63;pMeat=161") +sm.createQuestWithQRValue(64193, "item=64;pMeat=161") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=583") +sm.createQuestWithQRValue(64193, "item=64;pMeat=163") +sm.createQuestWithQRValue(64193, "item=65;pMeat=163") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=585") +sm.createQuestWithQRValue(64193, "item=65;pMeat=165") +sm.createQuestWithQRValue(64193, "item=66;pMeat=165") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=588") +sm.createQuestWithQRValue(64193, "item=66;pMeat=168") +sm.createQuestWithQRValue(64193, "item=67;pMeat=168") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=591") +sm.createQuestWithQRValue(64193, "item=67;pMeat=171") +sm.createQuestWithQRValue(64193, "item=68;pMeat=171") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=593") +sm.createQuestWithQRValue(64193, "item=68;pMeat=173") +sm.createQuestWithQRValue(64193, "item=69;pMeat=173") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=595") +sm.createQuestWithQRValue(64193, "item=69;pMeat=175") +sm.createQuestWithQRValue(64193, "item=70;pMeat=175") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=598") +sm.createQuestWithQRValue(64193, "item=70;pMeat=178") +sm.createQuestWithQRValue(64193, "item=71;pMeat=178") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=601") +sm.createQuestWithQRValue(64193, "item=71;pMeat=181") +sm.createQuestWithQRValue(64193, "item=72;pMeat=181") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=603") +sm.createQuestWithQRValue(64193, "item=72;pMeat=183") +sm.createQuestWithQRValue(64193, "item=73;pMeat=183") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=606") +sm.createQuestWithQRValue(64193, "item=73;pMeat=186") +sm.createQuestWithQRValue(64193, "item=74;pMeat=186") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=608") +sm.createQuestWithQRValue(64193, "item=74;pMeat=188") +sm.createQuestWithQRValue(64193, "item=75;pMeat=188") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=610") +sm.createQuestWithQRValue(64193, "item=75;pMeat=190") +sm.createQuestWithQRValue(64193, "item=76;pMeat=190") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=612") +sm.createQuestWithQRValue(64193, "item=76;pMeat=192") +sm.createQuestWithQRValue(64193, "item=77;pMeat=192") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=614") +sm.createQuestWithQRValue(64193, "item=77;pMeat=194") +sm.createQuestWithQRValue(64193, "item=78;pMeat=194") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=617") +sm.createQuestWithQRValue(64193, "item=78;pMeat=197") +sm.createQuestWithQRValue(64193, "item=79;pMeat=197") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=619") +sm.createQuestWithQRValue(64193, "item=79;pMeat=199") +sm.createQuestWithQRValue(64193, "item=80;pMeat=199") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=622") +sm.createQuestWithQRValue(64193, "item=80;pMeat=202") +sm.createQuestWithQRValue(64193, "item=81;pMeat=202") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=625") +sm.createQuestWithQRValue(64193, "item=81;pMeat=205") +sm.createQuestWithQRValue(64193, "item=82;pMeat=205") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=627") +sm.createQuestWithQRValue(64193, "item=82;pMeat=207") +sm.createQuestWithQRValue(64193, "item=83;pMeat=207") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=630") +sm.createQuestWithQRValue(64193, "item=83;pMeat=210") +sm.createQuestWithQRValue(64193, "item=84;pMeat=210") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=632") +sm.createQuestWithQRValue(64193, "item=84;pMeat=212") +sm.createQuestWithQRValue(64193, "item=85;pMeat=212") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=634") +sm.createQuestWithQRValue(64193, "item=85;pMeat=214") +sm.createQuestWithQRValue(64193, "item=86;pMeat=214") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=636") +sm.createQuestWithQRValue(64193, "item=86;pMeat=216") +sm.createQuestWithQRValue(64193, "item=87;pMeat=216") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=639") +sm.createQuestWithQRValue(64193, "item=87;pMeat=219") +sm.createQuestWithQRValue(64193, "item=88;pMeat=219") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=641") +sm.createQuestWithQRValue(64193, "item=88;pMeat=221") +sm.createQuestWithQRValue(64193, "item=89;pMeat=221") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=644") +sm.createQuestWithQRValue(64193, "item=89;pMeat=224") +sm.createQuestWithQRValue(64193, "item=90;pMeat=224") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=646") +sm.createQuestWithQRValue(64193, "item=90;pMeat=226") +sm.createQuestWithQRValue(64193, "item=91;pMeat=226") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=648") +sm.createQuestWithQRValue(64193, "item=91;pMeat=228") +sm.createQuestWithQRValue(64193, "item=92;pMeat=228") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=651") +sm.createQuestWithQRValue(64193, "item=92;pMeat=231") +sm.createQuestWithQRValue(64193, "item=93;pMeat=231") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=653") +sm.createQuestWithQRValue(64193, "item=93;pMeat=233") +sm.createQuestWithQRValue(64193, "item=94;pMeat=233") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=656") +sm.createQuestWithQRValue(64193, "item=94;pMeat=236") +sm.createQuestWithQRValue(64193, "item=95;pMeat=236") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=658") +sm.createQuestWithQRValue(64193, "item=95;pMeat=238") +sm.createQuestWithQRValue(64193, "item=96;pMeat=238") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=660") +sm.createQuestWithQRValue(64193, "item=96;pMeat=240") +sm.createQuestWithQRValue(64193, "item=97;pMeat=240") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=663") +sm.createQuestWithQRValue(64193, "item=97;pMeat=243") +sm.createQuestWithQRValue(64193, "item=98;pMeat=243") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=666") +sm.createQuestWithQRValue(64193, "item=98;pMeat=246") +sm.createQuestWithQRValue(64193, "item=99;pMeat=246") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=669") +sm.createQuestWithQRValue(64193, "item=99;pMeat=249") +sm.createQuestWithQRValue(64193, "item=100;pMeat=249") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=672") +sm.createQuestWithQRValue(64193, "item=100;pMeat=252") +sm.createQuestWithQRValue(64193, "item=101;pMeat=252") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=674") +sm.createQuestWithQRValue(64193, "item=101;pMeat=254") +sm.createQuestWithQRValue(64193, "item=102;pMeat=254") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=677") +sm.createQuestWithQRValue(64193, "item=102;pMeat=257") +sm.createQuestWithQRValue(64193, "item=103;pMeat=257") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=680") +sm.createQuestWithQRValue(64193, "item=103;pMeat=260") +sm.createQuestWithQRValue(64193, "item=104;pMeat=260") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=682") +sm.createQuestWithQRValue(64193, "item=104;pMeat=262") +sm.createQuestWithQRValue(64193, "item=105;pMeat=262") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=685") +sm.createQuestWithQRValue(64193, "item=105;pMeat=265") +sm.createQuestWithQRValue(64193, "item=106;pMeat=265") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=688") +sm.createQuestWithQRValue(64193, "item=106;pMeat=268") +sm.createQuestWithQRValue(64193, "item=107;pMeat=268") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=690") +sm.createQuestWithQRValue(64193, "item=107;pMeat=270") +sm.createQuestWithQRValue(64193, "item=108;pMeat=270") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=693") +sm.createQuestWithQRValue(64193, "item=108;pMeat=273") +sm.createQuestWithQRValue(64193, "item=109;pMeat=273") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=695") +sm.createQuestWithQRValue(64193, "item=109;pMeat=275") +sm.createQuestWithQRValue(64193, "item=110;pMeat=275") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=697") +sm.createQuestWithQRValue(64193, "item=110;pMeat=277") +sm.createQuestWithQRValue(64193, "item=111;pMeat=277") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=699") +sm.createQuestWithQRValue(64193, "item=111;pMeat=279") +sm.createQuestWithQRValue(64193, "item=112;pMeat=279") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=701") +sm.createQuestWithQRValue(64193, "item=112;pMeat=281") +sm.createQuestWithQRValue(64193, "item=113;pMeat=281") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=704") +sm.createQuestWithQRValue(64193, "item=113;pMeat=284") +sm.createQuestWithQRValue(64193, "item=114;pMeat=284") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=707") +sm.createQuestWithQRValue(64193, "item=114;pMeat=287") +sm.createQuestWithQRValue(64193, "item=115;pMeat=287") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=710") +sm.createQuestWithQRValue(64193, "item=115;pMeat=290") +sm.createQuestWithQRValue(64193, "item=116;pMeat=290") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=713") +sm.createQuestWithQRValue(64193, "item=116;pMeat=293") +sm.createQuestWithQRValue(64193, "item=117;pMeat=293") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=716") +sm.createQuestWithQRValue(64193, "item=117;pMeat=296") +sm.createQuestWithQRValue(64193, "item=118;pMeat=296") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=719") +sm.createQuestWithQRValue(64193, "item=118;pMeat=299") +sm.createQuestWithQRValue(64193, "item=119;pMeat=299") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=721") +sm.createQuestWithQRValue(64193, "item=119;pMeat=301") +sm.createQuestWithQRValue(64193, "item=120;pMeat=301") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=724") +sm.createQuestWithQRValue(64193, "item=120;pMeat=304") +sm.createQuestWithQRValue(64193, "item=121;pMeat=304") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=726") +sm.createQuestWithQRValue(64193, "item=121;pMeat=306") +sm.createQuestWithQRValue(64193, "item=122;pMeat=306") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=728") +sm.createQuestWithQRValue(64193, "item=122;pMeat=308") +sm.createQuestWithQRValue(64193, "item=123;pMeat=308") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=730") +sm.createQuestWithQRValue(64193, "item=123;pMeat=310") +sm.createQuestWithQRValue(64193, "item=124;pMeat=310") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=733") +sm.createQuestWithQRValue(64193, "item=124;pMeat=313") +sm.createQuestWithQRValue(64193, "item=125;pMeat=313") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=735") +sm.createQuestWithQRValue(64193, "item=125;pMeat=315") +sm.createQuestWithQRValue(64193, "item=126;pMeat=315") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=738") +sm.createQuestWithQRValue(64193, "item=126;pMeat=318") +sm.createQuestWithQRValue(64193, "item=127;pMeat=318") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=740") +sm.createQuestWithQRValue(64193, "item=127;pMeat=320") +sm.createQuestWithQRValue(64193, "item=128;pMeat=320") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=743") +sm.createQuestWithQRValue(64193, "item=128;pMeat=323") +sm.createQuestWithQRValue(64193, "item=129;pMeat=323") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=745") +sm.createQuestWithQRValue(64193, "item=129;pMeat=325") +sm.createQuestWithQRValue(64193, "item=130;pMeat=325") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=748") +sm.createQuestWithQRValue(64193, "item=130;pMeat=328") +sm.createQuestWithQRValue(64193, "item=131;pMeat=328") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=750") +sm.createQuestWithQRValue(64193, "item=131;pMeat=330") +sm.createQuestWithQRValue(64193, "item=132;pMeat=330") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=753") +sm.createQuestWithQRValue(64193, "item=132;pMeat=333") +sm.createQuestWithQRValue(64193, "item=133;pMeat=333") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=755") +sm.createQuestWithQRValue(64193, "item=133;pMeat=335") +sm.createQuestWithQRValue(64193, "item=134;pMeat=335") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=758") +sm.createQuestWithQRValue(64193, "item=134;pMeat=338") +sm.createQuestWithQRValue(64193, "item=135;pMeat=338") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=760") +sm.createQuestWithQRValue(64193, "item=135;pMeat=340") +sm.createQuestWithQRValue(64193, "item=136;pMeat=340") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=763") +sm.createQuestWithQRValue(64193, "item=136;pMeat=343") +sm.createQuestWithQRValue(64193, "item=137;pMeat=343") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=766") +sm.createQuestWithQRValue(64193, "item=137;pMeat=346") +sm.createQuestWithQRValue(64193, "item=138;pMeat=346") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=768") +sm.createQuestWithQRValue(64193, "item=138;pMeat=348") +sm.createQuestWithQRValue(64193, "item=139;pMeat=348") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=771") +sm.createQuestWithQRValue(64193, "item=139;pMeat=351") +sm.createQuestWithQRValue(64193, "item=140;pMeat=351") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=774") +sm.createQuestWithQRValue(64193, "item=140;pMeat=354") +sm.createQuestWithQRValue(64193, "item=141;pMeat=354") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=777") +sm.createQuestWithQRValue(64193, "item=141;pMeat=357") +sm.createQuestWithQRValue(64193, "item=142;pMeat=357") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=779") +sm.createQuestWithQRValue(64193, "item=142;pMeat=359") +sm.createQuestWithQRValue(64193, "item=143;pMeat=359") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=782") +sm.createQuestWithQRValue(64193, "item=143;pMeat=362") +sm.createQuestWithQRValue(64193, "item=144;pMeat=362") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=784") +sm.createQuestWithQRValue(64193, "item=144;pMeat=364") +sm.createQuestWithQRValue(64193, "item=145;pMeat=364") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=786") +sm.createQuestWithQRValue(64193, "item=145;pMeat=366") +sm.createQuestWithQRValue(64193, "item=146;pMeat=366") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=789") +sm.createQuestWithQRValue(64193, "item=146;pMeat=369") +sm.createQuestWithQRValue(64193, "item=147;pMeat=369") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=792") +sm.createQuestWithQRValue(64193, "item=147;pMeat=372") +sm.createQuestWithQRValue(64193, "item=148;pMeat=372") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=795") +sm.createQuestWithQRValue(64193, "item=148;pMeat=375") +sm.createQuestWithQRValue(64193, "item=149;pMeat=375") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=797") +sm.createQuestWithQRValue(64193, "item=149;pMeat=377") +sm.createQuestWithQRValue(64193, "item=150;pMeat=377") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=800") +sm.createQuestWithQRValue(64193, "item=150;pMeat=380") +sm.createQuestWithQRValue(64193, "item=151;pMeat=380") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=802") +sm.createQuestWithQRValue(64193, "item=151;pMeat=382") diff --git a/scripts/field/enter_867200920.py b/scripts/field/enter_867200920.py new file mode 100755 index 0000000..caa8dd0 --- /dev/null +++ b/scripts/field/enter_867200920.py @@ -0,0 +1,7 @@ +# id 867200920 (Abrup Basin : Windsnap River Bank), field 867200920 +sm.createQuestWithQRValue(64034, "") +sm.startQuest(64161) +sm.startQuest(64166) +sm.startQuest(64165) +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867200940.py b/scripts/field/enter_867200940.py new file mode 100755 index 0000000..1defe7c --- /dev/null +++ b/scripts/field/enter_867200940.py @@ -0,0 +1,43 @@ +# id 867200940 (Abrup Basin : Windsnap River Bank), field 867200940 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400668, 1100, 330) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.spawnNpc(9400617, 790, 300) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400618, 740, 300) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400619, 640, 300) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400617, 540, 300) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400619, 590, 300) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400618, 690, 300) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400668, "gas", 0) +sm.sendDelay(2000) +sm.moveNpcByTemplateId(9400617, True, 2000, 210) +sm.moveNpcByTemplateId(9400618, True, 2000, 300) +sm.moveNpcByTemplateId(9400619, True, 2000, 270) +sm.moveNpcByTemplateId(9400617, True, 2000, 230) +sm.moveNpcByTemplateId(9400619, True, 2000, 200) +sm.moveNpcByTemplateId(9400618, True, 2000, 250) +sm.showNpcSpecialActionByTemplateId(9400668, "pound", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400619) # Resident +sm.sendNext("Aaaaaaagh!") +sm.showNpcSpecialActionByTemplateId(9400668, "armstretch", 0) +sm.zoomCamera(2000, 2000, 3000, 1100, 330) +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.createFieldTextEffect("#r#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26#??????#k", 100, 4000, 4, 80, 200, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs16#It's the monster that spews poison gas!", 100, 1500, 4, 80, 250, 1, 4, 0, 0, 0) +sm.sendDelay(6000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867200960.py b/scripts/field/enter_867200960.py new file mode 100755 index 0000000..25dfe4d --- /dev/null +++ b/scripts/field/enter_867200960.py @@ -0,0 +1,51 @@ +# id 867200960 (Abrup Basin : Frozen River Center), field 867200960 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400589, 272, 430) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400589, "saveme", -1) +sm.spawnNpc(9400596, 440, 380) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400591, 100, 380) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.startQuest(64160) +sm.spawnNpc(9400592, 1245, 380) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.forcedFlip(True) +sm.spawnNpc(9400620, 1400, 380) +sm.showNpcSpecialActionByTemplateId(9400620, "summon", 0) +sm.spawnNpc(9400621, 1450, 380) +sm.showNpcSpecialActionByTemplateId(9400621, "summon", 0) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400592, True, 590, 150) +sm.sendDelay(300) +sm.forcedMove(True, 700) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400620, True, 700, 150) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400621, True, 700, 150) +sm.sendDelay(3000) +sm.sendDelay(1000) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation") +sm.forcedMove(True, 200) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.spawnNpc(9400589, 430, 380) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400596, 490, 380) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.forcedFlip(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face1#Gasp-! ") +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendSay("It's all my fault! Are you okay, Peytour? ") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk15;Ec=16;max=20;weather=3;food=90") +sm.warp(867200550) diff --git a/scripts/field/enter_867200961.py b/scripts/field/enter_867200961.py new file mode 100755 index 0000000..52bb75c --- /dev/null +++ b/scripts/field/enter_867200961.py @@ -0,0 +1,110 @@ +# id 867200961 (Abrup Basin : Svarti Trail), field 867200961 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400677, 1650, 320) +sm.showNpcSpecialActionByTemplateId(9400677, "summon", 0) +sm.spawnNpc(9400678, 1500, 320) +sm.showNpcSpecialActionByTemplateId(9400678, "summon", 0) +sm.spawnNpc(9400591, 1400, 320) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400617, 1340, 320) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400580, 1300, 320) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 1250, 320) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400585, 850, 320) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400618, 800, 320) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400619, 750, 320) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400679, 500, 320) +sm.showNpcSpecialActionByTemplateId(9400679, "summon", 0) +sm.spawnNpc(9400585, 350, 320) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400587, 1150, 320) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400589, 680, 320) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.moveNpcByTemplateId(9400677, False, 1000, 70) +sm.moveNpcByTemplateId(9400678, False, 1000, 70) +sm.moveNpcByTemplateId(9400591, False, 1000, 70) +sm.moveNpcByTemplateId(9400617, False, 1000, 70) +sm.moveNpcByTemplateId(9400580, False, 1000, 70) +sm.moveNpcByTemplateId(9400582, False, 1000, 70) +sm.moveNpcByTemplateId(9400585, False, 1000, 70) +sm.moveNpcByTemplateId(9400618, False, 1000, 70) +sm.moveNpcByTemplateId(9400619, False, 1000, 70) +sm.moveNpcByTemplateId(9400679, False, 1000, 70) +sm.moveNpcByTemplateId(9400585, False, 1000, 70) +sm.moveNpcByTemplateId(9400589, False, 400, 70) +sm.flipNpcByTemplateId(9400587, True) +sm.forcedFlip(True) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0##h0#... Thanks. I didn't get a chance to say that earlier. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, False, 100, 100) +sm.sendNext("#face0#...Kan. ") +sm.sendSay("#face0#I'm doing well, now. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Sigh... Just in case you were wondering... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 33118783, 0, 0) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Do you have nothing to say to me? ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#I... I made the choice I had to. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Indeed you did. And you cannot change that. My fear is that you will come to regret it. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#... ") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 33118783, 0, 0) +sm.sendDelay(1500) +sm.moveNpcByTemplateId(9400587, False, 900, 70) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face1#Kan... ") +sm.sendSay("#face0#Six months ago, Kan lost his wife. ") +sm.setParam(57) +sm.sendSay("#bI heard as much. ") +sm.setParam(37) +sm.sendSay("#face0#But you haven't heard the whole story. You see, at the time we had everyone in the village out hunting. Our tradition was to never leave the town unguarded for any reason, but that wasn't possible then. ") +sm.sendSay("#face0#Those were strange days. Winter had not yet begun, but there seemed to be nothing to hunt anywhere. ") +sm.setParam(57) +sm.sendSay("#bWinter... ") +sm.setParam(37) +sm.sendSay("#face0#Abrup is cold, and bitterly so when winter comes. That is when the breath of Windsleep Forest stills. Chief Kan thought we could only survive the winter by having everyone go hunting before it was too late... even if it meant going far, and leaving the town vulnerable... ") +sm.sendSay("#face0#So during that particular hunting season, the children and their mothers were the only ones in town. ") +sm.sendSay("#face0#But no matter how far the hunters pressed into the forest, there was little to catch. We stayed longer than planned, desperate to bring back something. Eventually we were able to bring back a fair number of Shrelephants. ") +sm.sendSay("#face0#At last, we returned to town. Or what was left of it. ") +sm.setParam(57) +sm.sendSay("#bI see. That's why Kan is so obsessed with rules now. ") +sm.setParam(37) +sm.sendSay("#face0#Of all the villagers who lost family that day, I believe Kan may have had it worst. But he had no chance to deal with his emotions, for his responsibility was to comfort and lead. ") +sm.sendSay("#face0#He's always blamed himself for ignoring the town's rules. He worked hard to get the town back to where it was... and then this happened. ") +sm.sendSay("#face0#People call him selfish and overbearing... but I know what kind of man he truly is. He is righteous... but also devastated. ") +sm.moveNpcByTemplateId(9400589, False, 300, 70) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.forcedMove(False, 200) +sm.sendNext("#face1#He did nothing wrong. ") +sm.sendSay("#face1#Kan now believes that rules define the best course of action for everyone. His decisions are those that will save the majority, even if the cost is high.") +sm.moveNpcByTemplateId(9400589, False, 300, 70) +sm.sendDelay(250) +sm.forcedMove(False, 200) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk16;Ec=17;max=20;weather=0;food=90") +sm.warp(867200550) diff --git a/scripts/field/enter_867200980.py b/scripts/field/enter_867200980.py new file mode 100755 index 0000000..f794a72 --- /dev/null +++ b/scripts/field/enter_867200980.py @@ -0,0 +1,56 @@ +# id 867200980 (Abrup Basin : Edgewind Snowfield), field 867200980 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400617, 790, 330) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400618, 740, 330) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400619, 640, 330) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400617, 540, 330) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400619, 590, 330) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400618, 690, 330) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400582, 330, 330) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, -30, 330) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, 130, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 170, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 110, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 270, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 230, 330) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400642, 930, 330) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 1030, 330) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 830, 330) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, 1130, 330) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400672, 530, 330) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.moveNpcByTemplateId(9400617, True, 2000, 210) +sm.moveNpcByTemplateId(9400618, True, 2000, 300) +sm.moveNpcByTemplateId(9400619, True, 2000, 270) +sm.moveNpcByTemplateId(9400617, True, 2000, 230) +sm.moveNpcByTemplateId(9400619, True, 2000, 200) +sm.moveNpcByTemplateId(9400618, True, 2000, 250) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400619) # Resident +sm.sendNext("Aaaaaaagh!") +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Is this all the beasts can offer us? Ha, I could dispatch this lot myself! ") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(867200725) diff --git a/scripts/field/enter_867201000.py b/scripts/field/enter_867201000.py new file mode 100755 index 0000000..0f2d3ab --- /dev/null +++ b/scripts/field/enter_867201000.py @@ -0,0 +1,18 @@ +# id 867201000 (Abrup Basin : Svarti Entrance), field 867201000 +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("open", False, 0, 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400620, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400621, "summon", 0) diff --git a/scripts/field/enter_867201001.py b/scripts/field/enter_867201001.py new file mode 100755 index 0000000..239b25a --- /dev/null +++ b/scripts/field/enter_867201001.py @@ -0,0 +1,178 @@ +# id 867201001 (Abrup Basin : Svarti Entrance), field 867201001 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("open", False, 0, 0) +sm.spawnNpc(9400587, 600, 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400582, 360, 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.startQuest(64164) +sm.spawnNpc(9400581, 550, 0) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400580, 420, 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400584, 250, 0) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.spawnNpc(9400583, 200, 0) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400588, 150, 0) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400593, 80, 0) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.spawnNpc(9400591, 35, 0) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400589, -40, 0) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400585, -180, 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -240, 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400587, False, 100, 50) +sm.sendDelay(1000) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "Is anyone there? ", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "Chief!", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.moveNpcByTemplateId(9400581, False, 80, 50) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#The walls are intact... no sign of struggle... Did everyone just take shelter? ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.setParam(57) +sm.sendSay("#bLet's wait and see. ") +sm.sendDelay(3000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/open", 128) +sm.sendDelay(250) +sm.spawnNpc(9400597, 858, -45) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Hmm, hmm. ") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400587, False, 20, 50) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Chief Gurnardson! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#...Hmm. ") +sm.sendSay("#face0#So, Kaptafel was hit by the monsters as well. Am I right? ") +sm.sendSay("#face0#I've heard the chaos tearing through the valley, but I never expected Kaptafel to suffer so... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#It's true. We've had to evacuate the entire village... ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Wait, wait, wait. ") +sm.sendSay("#face0#Let me speak. ") +sm.sendSay("#face0#Chief Kan, I cannot take you or your people in to my village. It pains me to do this, but there is simply no way we can support that many refugees. ") +sm.sendSay("#face0#We don't have enough shelter or food for even part of your caravan. And frankly, I have concerns about the number of outsiders traveling with you. ") +sm.sendSay("#face0#From one chief to another I am sorry, but surely you understand that I must see to my own people first. ") +sm.sendSay("#face0#That is my final word on the matter. Farewell, Chief Kan. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#...") +sm.sendDelay(250) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/close", 128) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Hold a moment! I am Butler, leader of the Afinas Dispatch. ") +sm.moveNpcByTemplateId(9400581, False, 30, 50) +sm.sendSay("#face0#We have been deployed to provide aid to Abrup Basin. ") +sm.sendSay("#face0#If you will provide shelter for these people who have lost their town, we will assist in the defense of yours. ") +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/open", 128) +sm.sendDelay(250) +sm.spawnNpc(9400597, 858, -45) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#...Afinas, you say? Hmm, hmm. ") +sm.sendSay("#face0#I heard there were knights dispatched, of course... Isn't it rather late for your intervention? ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#When souls are in need, there is no early or late. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#... ") +sm.sendSay("#face0#You do not seem to appreciate how dire this situation is. If you expect me to consider so difficult a request, I expect you to abide by my rules. ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#So be it. Don't be coy, man, let's hear it.") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#As you can see, we've barely enough supplies for our own people. With you lot coming in, our rations will be gone by morning. ") +sm.sendSay("#face0#You will be responsible for your own food. We will provide shelter and nothing else. Understood? ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Understood. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#I see some sour faces among your group. Well, my rule is law here. Those who complain are not welcome here, especially considering the sacrifices we're making. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.moveNpcByTemplateId(9400580, False, 170, 80) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Chief, this is a lot to ask of our people! ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400581, True) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face1#Alika! These negotiations do not concern you. Hold your tongue! ") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4#Eh? ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#... ") +sm.moveNpcByTemplateId(9400582, False, 270, 130) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400581, True, 140, 50) +sm.sendDelay(2000) +sm.sendNext("#face1#You all heard the situation. Our hunters should group up with the knights and depart as soon as possible. ") +sm.sendSay("#face0#Excluding those wounded, every able-bodied adult should step forward. ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400582, True) +sm.moveNpcByTemplateId(9400583, False, 180, 150) +sm.moveNpcByTemplateId(9400585, False, 480, 150) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400585, False, 480, 150) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400584, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400584, True, 50, 50) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400584, False) +sm.sendDelay(3000) +sm.flipNpcByTemplateId(9400581, False) +sm.sendDelay(250) +sm.sendNext("#face0#Cayne, you're coming too. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Vice Captain! I will remain to protect Alika. ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#No exceptions. I will personally guarantee Alika's safety. ") +sm.flipNpcByTemplateId(9400580, True) +sm.sendSay("#face1#Additionally, I will brook no insubordination. The next time you attempt to undermine my authority, you will be punished. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#...Understood, sir. ") +sm.setParam(57) +sm.sendSay("#bI will go as well. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Do as you wish. ") +sm.sendSay("#face0#I expect everyone to contribute 50 pieces of edible meat immediately. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400583, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400585, True) +sm.flipNpcByTemplateId(9400585, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400585, True, 1000, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400585, True, 1000, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400583, True, 1000, 100) +sm.sendDelay(250) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.forcedMove(True, 1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64043) +sm.startQuest(64044) +sm.warp(867201110) diff --git a/scripts/field/enter_867201004.py b/scripts/field/enter_867201004.py new file mode 100755 index 0000000..3476939 --- /dev/null +++ b/scripts/field/enter_867201004.py @@ -0,0 +1,138 @@ +# id 867201004 (Abrup Basin : Svarti Entrance), field 867201004 +sm.lockInGameUI(True, False) +sm.completeQuestNoCheck(64047) +sm.sendDelay(500) +sm.spawnNpc(9400587, 700, 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400581, 640, 0) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400580, 570, 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 520, 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.startQuest(64164) +sm.spawnNpc(9400584, 440, -35) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.spawnNpc(9400583, 380, -35) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400588, 325, -35) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400593, 400, 0) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.spawnNpc(9400591, 355, 0) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400592, 300, 0) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400589, 230, 0) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400619, 180, 0) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400585, 130, 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 80, 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.sendDelay(3000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/open", 128) +sm.sendDelay(500) +sm.spawnNpc(9400597, 858, -45) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#You've been working hard, haven't you? I'm impressed with how quickly you gather. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#You'll keep your promise now, won't you? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ah... yes, of course, of course. I did promise, didn't I? We'll have to find you an appropriate space... Wait while I check...") +sm.sendDelay(250) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/close", 128) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face1#How can anyone treat their neighbors in such a disgusting fashion? ") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#We've had few dealings with Svarti in the past, just trading essential goods. ") +sm.sendSay("#face0#They've always been suspicious of us, particularly if their livestock went missing. ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#They don't seem interested in taking us in at all. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#For once in my life, I can feel my patience just... slipping away. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#What do you think, Peytour? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#We're nearly out of time. The snowstorm is nearly upon us.") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#Our only option now is to force our way in. ") +sm.sendSay("#face1#It would be a net good for the town anyway, once the monsters descend upon it. At least we know what we're up against. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#At this point, I would almost prefer letting them be attacked... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Chief... you cannot entertain such thoughts! ") +sm.setParam(57) +sm.sendSay("#bLet's at least hear what they have to say next... we may be getting ahead of ourselves. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#Hearing them out is what has us trapped out here in the first place! Had we forced our way in, we'd be safe and settled by now. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#...") +sm.sendDelay(3000) +sm.sendDelay(2000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/scream", 128) +sm.setInnerOverrideSpeakerTemplateID(9400599) # Harpooner +sm.sendNext("Ahhh! ") +sm.flipNpcByTemplateId(9400587, False) +sm.spawnNpc(9400597, 980, 0) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400598, 1010, 0) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400599, 1040, 0) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.spawnNpc(9400599, 1070, 0) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400597, True, 200, 200) +sm.moveNpcByTemplateId(9400598, True, 190, 200) +sm.moveNpcByTemplateId(9400599, True, 180, 200) +sm.moveNpcByTemplateId(9400599, True, 170, 200) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Aghhh! ") +sm.setParam(57) +sm.sendSay("#bWhat was that? ") +sm.setParam(37) +sm.sendSay("#face0#Poison gas! ") +sm.setParam(57) +sm.sendSay("#bPoison gas? Oh, no... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Could it be that toxic beast we faced on the snowfield? ") +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bToxic beast? ") +sm.setParam(37) +sm.sendSay("#face0#You know, the pink monster that was puffing out poison! ") +sm.setParam(57) +sm.sendSay("#bThen we need fire arrows! ") +sm.setParam(37) +sm.sendSay("#face0#Right! Gillie! Fire arrows! ") +sm.moveNpcByTemplateId(9400583, False, 230, 200) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#Fire arrows ready!") +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, False, 500, 200) +sm.forcedMove(False, 500) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.startQuest(64048) +sm.createQuestWithQRValue(64048, "chk=0") +sm.warp(867201020) diff --git a/scripts/field/enter_867201005.py b/scripts/field/enter_867201005.py new file mode 100755 index 0000000..6e8b418 --- /dev/null +++ b/scripts/field/enter_867201005.py @@ -0,0 +1,97 @@ +# id 867201005 (Abrup Basin : Svarti Entrance), field 867201005 +sm.completeQuestNoCheck(64048) +sm.lockInGameUI(True, False) +sm.spawnNpc(9400581, 640, 0) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400580, 550, 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400587, 500, 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400593, 440, -35) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.spawnNpc(9400591, 380, -35) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400588, 325, -35) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400597, 420, 0) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400598, 370, 0) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400599, 330, 0) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.spawnNpc(9400592, 260, 0) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400589, 200, 0) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400584, 136, 0) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.spawnNpc(9400585, 80, 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, 30, 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400582, 950, 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.forcedFlip(True) +sm.spawnNpc(9400583, 1060, -35) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33337019, 0, 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400597, False, 350, 150) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400581, False) +sm.sendDelay(250) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Whoa! Ahh, yes... Glad to see you're okay! ") +sm.sendSay("#face0#I was so worried about you in there... Ah, is anyone injured? ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#...What's he on about now? ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.moveNpcByTemplateId(9400597, False, 50, 50) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#You must be tired. Please, come in, come in. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400597, True) +sm.sendDelay(500) +sm.sendNext("#face0#Chief Kan! Inside, quickly! ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400597, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400597, False, 100, 50) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400581, False, 100, 50) +sm.moveNpcByTemplateId(9400580, False, 100, 50) +sm.moveNpcByTemplateId(9400587, False, 100, 50) +sm.moveNpcByTemplateId(9400593, False, 100, 50) +sm.moveNpcByTemplateId(9400591, False, 100, 50) +sm.moveNpcByTemplateId(9400588, False, 100, 50) +sm.moveNpcByTemplateId(9400598, False, 100, 50) +sm.moveNpcByTemplateId(9400599, False, 100, 50) +sm.moveNpcByTemplateId(9400592, False, 100, 50) +sm.moveNpcByTemplateId(9400589, False, 100, 50) +sm.moveNpcByTemplateId(9400584, False, 100, 50) +sm.moveNpcByTemplateId(9400585, False, 100, 50) +sm.moveNpcByTemplateId(9400585, False, 100, 50) +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face1#Chief Gurnardson... seems I have forgotten the value of one's word. ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face1#I have been selfish in our dealings, and have taken your kindness and sacrifice for granted. ") +sm.sendSay("#face1#This is hardly enough to repay your kindness, but my people have gathered these to give to you. Accept them with my apologies, for I feel like the most incompetent person in Kaptafel now.") +sm.completeQuestNoCheck(64049) +sm.completeQuestNoCheck(64051) +sm.createQuestWithQRValue(64150, "cnt=1") +sm.warp(867201011) diff --git a/scripts/field/enter_867201011.py b/scripts/field/enter_867201011.py new file mode 100755 index 0000000..b13fd7e --- /dev/null +++ b/scripts/field/enter_867201011.py @@ -0,0 +1,200 @@ +# id 867201011 (Abrup Basin : Svarti Village Empty Paddock), field 867201011 +sm.lockInGameUI(True, False) +sm.startQuest(64060) +sm.startQuest(64151) +sm.spawnNpc(9400599, 1200, 50) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.spawnNpc(9400598, 1150, 50) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400597, 920, 50) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400587, 820, 50) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400581, 730, 50) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.startQuest(64163) +sm.spawnNpc(9400582, 480, 40) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400580, 420, 40) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400592, 340, 20) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400591, 290, 10) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400678, 170, 10) +sm.showNpcSpecialActionByTemplateId(9400678, "summon", 0) +sm.spawnNpc(9400588, -80, -20) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400585, -150, -50) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400589, -290, -50) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.moveNpcByTemplateId(9400597, False, 120, 80) +sm.sendDelay(3500) +sm.flipNpcByTemplateId(9400597, True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Right here. ") +sm.flipNpcByTemplateId(9400587, True) +sm.flipNpcByTemplateId(9400591, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400581, True) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400582, True) +sm.flipNpcByTemplateId(9400592, True) +sm.flipNpcByTemplateId(9400591, False) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400587, False) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400581, False) +sm.flipNpcByTemplateId(9400582, False) +sm.flipNpcByTemplateId(9400591, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(3000) +sm.sendDelay(3000) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 33343645, 0, 0) +sm.sendDelay(250) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 33343646, 0, 0) +sm.sendDelay(250) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 33343648, 0, 0) +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#I'm sure you'll find this more comfortable than those frozen snowfields! ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Is this a paddock for livestock? ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.flipNpcByTemplateId(9400580, False) +sm.flipNpcByTemplateId(9400592, False) +sm.flipNpcByTemplateId(9400591, False) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#At one time, yes. But as you can see, there is no livestock here now. ") +sm.flipNpcByTemplateId(9400587, True) +sm.flipNpcByTemplateId(9400591, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400581, True) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400582, True) +sm.flipNpcByTemplateId(9400592, True) +sm.flipNpcByTemplateId(9400591, False) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400587, False) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400581, False) +sm.flipNpcByTemplateId(9400582, False) +sm.flipNpcByTemplateId(9400591, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, False) +sm.sendNext("#face0#Well, I'll get out of your way then. Make yourselves at home! ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400597, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400597, False, 800, 100) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400599, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400599, False, 700, 100) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400598, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400598, False, 50, 100) +sm.sendDelay(1500) +sm.flipNpcByTemplateId(9400598, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400598, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400598, False, 500, 100) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400587, True) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Aside from the walls... this is no better than the ashes of Kaptafel. ") +sm.sendSay("#face1#All our efforts... for this. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Now, now, this is no time for regrets. The walls do a fine job of blocking out the wind, you know. ") +sm.setParam(57) +sm.sendNext("#bLet's set up our tents so people can start resting. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.moveNpcByTemplateId(9400587, False, 300, 80) +sm.flipNpcByTemplateId(9400592, True) +sm.moveNpcByTemplateId(9400592, True, 300, 80) +sm.flipNpcByTemplateId(9400591, True) +sm.moveNpcByTemplateId(9400591, True, 300, 80) +sm.flipNpcByTemplateId(9400678, True) +sm.moveNpcByTemplateId(9400678, True, 300, 80) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 300, 70) +sm.flipNpcByTemplateId(9400598, True) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400581, True) +sm.moveNpcByTemplateId(9400585, False, 710, 300) +sm.sendDelay(4000) +sm.speechBalloon(False, 0, 0, "Signaler!", 2000, 1, 0, 0, 0, 4, 9400581, 4878499) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "Yes, Vice Captain.", 2000, 1, 0, 0, 0, 4, 9400585, 4878499) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Provide our new location to headquarters, and inquire if reinforcements are on their way. ") +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendSay("Got it! ") +sm.flipNpcByTemplateId(9400585, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400585, True, 600, 200) +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face1#Things keep getting worse... if they get much worse... ") +sm.flipNpcByTemplateId(9400581, True) +sm.moveNpcByTemplateId(9400581, True, 500, 100) +sm.sendDelay(3000) +sm.forcedFlip(True) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#I must say, you can never be sure of what life will throw at you! ") +sm.sendSay("#face0#When we set out from Kaptafel, who could have predicted that we'd end up camping in a tent, in a paddock like this? ") +sm.setParam(57) +sm.sendSay("#bI know, right? Ahh... I'm sure everyone wanted to sleep in nice, warm beds tonight... ") +sm.setParam(37) +sm.sendSay("#face0#This must be extra tough on Vice Captain Butler, too. He's going to get an earful for this failure. ") +sm.sendSay("#face0#But then... does that mean dear Alika will also...? ") +sm.setParam(57) +sm.sendSay("#bThis is far from over. Once this situation is under control, we need to look into why this happened. ") +sm.setParam(37) +sm.sendSay("#face1#Your motivation is astounding! Simply astounding! Really, are you sure you don't want to join Afinas? You would be accepted for sure! ") +sm.sendSay("#face0#You know, I've been wondering. There's still so much unknown about all this, yet headquarters refuses to send reinforcements. Isn't that odd? ") +sm.setParam(57) +sm.sendSay("#bMaybe they're short-handed at the moment? ") +sm.setParam(37) +sm.sendSay("#face0#Impossible! Afinas has thousands of troops at the ready. Unless a war starts, we will always have plenty of people. ") +sm.setParam(57) +sm.sendSay("#bHmm... ") +sm.setParam(37) +sm.sendSay("#face0#Ah, well. A mystery for another time! I'm off to tidy up Alika's tent. Take care! ") +sm.flipNpcByTemplateId(9400582, True) +sm.moveNpcByTemplateId(9400582, True, 300, 100) +sm.sendDelay(2000) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/what", 0, 0, 0, 0, 33343643, 0, 0) +sm.sendDelay(5000) +sm.completeQuestNoCheck(64060) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867201012) diff --git a/scripts/field/enter_867201012.py b/scripts/field/enter_867201012.py new file mode 100755 index 0000000..7f85819 --- /dev/null +++ b/scripts/field/enter_867201012.py @@ -0,0 +1,91 @@ +# id 867201012 (Abrup Basin : Svarti Village Empty Paddock), field 867201012 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400598, 1790, 60) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400587, 1140, 60) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400596, 1070, 60) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(False, 250) +sm.sendDelay(1000) +sm.startQuest(64061) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWhat brings you here? ") +sm.sendDelay(250) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33371939, 0, 0) +sm.moveNpcByTemplateId(9400598, True, 120, 80) +sm.sendDelay(2000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendNext("N-n-nothing! I mean, hi! I'm Thorson, and I'm from Svarti! I'm related to Chief Gurnardson! Well, distant relative.") +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400587, False, 320, 150) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Are you... watching us? ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("No! No. N-n-no. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Planning to steal something, then? We have nothing, you know. ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("No, no-o-o! It's just... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Just? ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("W-well, I... wanted to meet people from outside... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Do you think we're here for your amusement? ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bChief Kan, please. I can tell he means well. ") +sm.setParam(37) +sm.sendSay("#face0#...Considering everything we've been through here, I remain skeptical. ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("It's really not like that! I've never seen this many people in my entire life... ") +sm.sendSay("Really. The chief probably doesn't even know that I'm here! ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bWell, you need to understand... Your chief was not very kind to us when we were trying to rest for the evening. ") +sm.setParam(37) +sm.sendSay("Sigh... ") +sm.sendSay("That's because... oh... ") +sm.sendSay("Things have been really bad for us here, too. ") +sm.sendSay("Did you see how empty the village is? We're starving, even the few of us that are left... ") +sm.sendSay("We lost all of our livestock to the monsters. And then the river froze in a flash, so we can't even fish. ") +sm.sendSay("Some of us went out to break through the ice, but there were no fish underneath! It's like they all disappeared. ") +sm.setParam(57) +sm.sendSay("#bI see. I expected Svarti to have it tough, too, but not that much. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#If that's the case, surely you would have welcomed us with open arms instead of as a burden! ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("Well... since Kaptafel always steals our livestock... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#How many times do I have to tell you that we've never TOUCHED your livestock?! ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("W-whoa! Sorry, sorry! Geez... You don't have to shout... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Why must we depend on those who mistrust and mistreat us for survival? What did we ever do to deserve this... ") +sm.completeQuestNoCheck(64061) +sm.createQuestWithQRValue(64061, "dirchk=1") +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400587, True, 300, 150) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867201100) diff --git a/scripts/field/enter_867201020.py b/scripts/field/enter_867201020.py new file mode 100755 index 0000000..8aea709 --- /dev/null +++ b/scripts/field/enter_867201020.py @@ -0,0 +1,42 @@ +# id 867201020 (Abrup Basin : Svarti Village Empty Paddock), field 867201020 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400668, 1500, -5) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.spawnNpc(9400632, 1300, -5) +sm.showNpcSpecialActionByTemplateId(9400632, "summon", 0) +sm.spawnNpc(9400633, 1250, -5) +sm.showNpcSpecialActionByTemplateId(9400633, "summon", 0) +sm.spawnNpc(9400634, 1200, -5) +sm.showNpcSpecialActionByTemplateId(9400634, "summon", 0) +sm.forcedFlip(True) +sm.spawnNpc(9400582, 130, -5) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.startQuest(64164) +sm.spawnNpc(9400583, 80, -5) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400668, True, 200, 100) +sm.moveNpcByTemplateId(9400632, True, 1300, 200) +sm.moveNpcByTemplateId(9400633, True, 1300, 200) +sm.moveNpcByTemplateId(9400634, True, 1300, 200) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400599) # Harpooner +sm.sendNext("Monster!") +sm.sendSay("Aghhhh!") +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400668, "armstretch", 0) +sm.sendDelay(5000) +sm.sendDelay(300) +sm.forcedMove(False, 1000) +sm.moveNpcByTemplateId(9400582, False, 1000, 200) +sm.showNpcSpecialActionByTemplateId(9400583, "attack2", 0) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#Fire arrows!") +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/kaftafellSkill", 0) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64048, "chk=1") +sm.warp(867201005) diff --git a/scripts/field/enter_867201050.py b/scripts/field/enter_867201050.py new file mode 100755 index 0000000..ae4712f --- /dev/null +++ b/scripts/field/enter_867201050.py @@ -0,0 +1,3 @@ +# id 867201050 (Abrup Basin : Svarti Entrance), field 867201050 +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("close", False, 0, 0) diff --git a/scripts/field/enter_867201100.py b/scripts/field/enter_867201100.py new file mode 100755 index 0000000..bdd7e60 --- /dev/null +++ b/scripts/field/enter_867201100.py @@ -0,0 +1,14 @@ +# id 867201100 (Abrup Basin : Svarti Camp), field 867201100 +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.startQuest(64166) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400620, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400621, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400622, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.createQuestWithQRValue(64061, "dirchk=2") +sm.moveNpcByTemplateId(9400587, True, 1000, 100) diff --git a/scripts/field/enter_867201101.py b/scripts/field/enter_867201101.py new file mode 100755 index 0000000..6afc288 --- /dev/null +++ b/scripts/field/enter_867201101.py @@ -0,0 +1,100 @@ +# id 867201101 (Abrup Basin : Svarti Camp), field 867201101 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400582, 530, 20) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400593, 200, 15) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.spawnNpc(9400629, 320, 15) +sm.showNpcSpecialActionByTemplateId(9400629, "summon", 0) +sm.startQuest(64166) +sm.startQuest(64068) +sm.forcedFlip(True) +sm.moveNpcByTemplateId(9400582, True, 100, 50) +sm.sendDelay(300) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#I have to say, it's starting to look like a proper camp here. ") +sm.sendSay("#face0#The wall gives people hope. Just having that basic protection is enough. ") +sm.sendDelay(500) +sm.forcedMove(True, 100) +sm.setParam(57) +sm.sendNext("#bYou're right. There's a sense of calm I haven't seen recently. ") +sm.moveNpcByTemplateId(9400593, False, 50, 50) +sm.showEffect("Effect/OnUserEff.img/emotion/flower", 2000, 0, 0, 0, 33423776, 0, 0) +sm.sendDelay(250) +sm.speechBalloon(False, 0, 0, "Last chance, monsters! Better run away!", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 2000, 0, 0, 0, 33423775, 0, 0) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400593, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400593, True, 50, 50) +sm.showEffect("Effect/OnUserEff.img/emotion/flower", 2000, 0, 0, 0, 33423776, 0, 0) +sm.sendDelay(250) +sm.speechBalloon(False, 0, 0, "The Afinas Knights won't let us down!", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400593, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400593, False, 50, 50) +sm.sendDelay(2250) +sm.speechBalloon(False, 0, 0, "Who are they? Defenders of those in need!", 2000, 1, 0, 0, 0, 4, 9400629, 4878499) +sm.flipNpcByTemplateId(9400593, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400593, True, 50, 50) +sm.sendDelay(2250) +sm.speechBalloon(False, 0, 0, "Vanquishers of monsters and healers of the sick!!", 2000, 1, 0, 0, 0, 4, 9400630, 4878499) +sm.flipNpcByTemplateId(9400593, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400593, False, 50, 50) +sm.sendDelay(2250) +sm.speechBalloon(False, 0, 0, "The ray of light! Our saviors!", 2000, 1, 0, 0, 0, 4, 9400631, 4878499) +sm.flipNpcByTemplateId(9400593, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400593, True, 50, 50) +sm.sendDelay(2250) +sm.speechBalloon(False, 0, 0, "Run, monsters, run! This is our victory!", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.flipNpcByTemplateId(9400593, False) +sm.setParam(37) +sm.sendNext("#face1#Ha ha, what's that? Stop, stop, you'll make me blush! ") +sm.setParam(57) +sm.sendSay("#bYou look too happy to be embarrassed. ") +sm.setParam(37) +sm.sendSay("#face1#You see right through me once again! This is why I became a knight, you know. Are you jealous? You can always join the Afinas Knights yourself... ") +sm.setParam(57) +sm.sendSay("#bI... ") +sm.moveNpcByTemplateId(9400593, False, 100, 50) +sm.moveNpcByTemplateId(9400629, True, 60, 70) +sm.sendDelay(1200) +sm.flipNpcByTemplateId(9400629, False) +sm.sendDelay(900) +sm.showEffect("Effect/OnUserEff.img/emotion/flower", 2000, 0, 0, 0, 33423776, 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendNext("Sir knight! Here! A gift! ") +sm.showEffect("Effect/OnUserEff.img/emotion/love", 2000, 0, 0, 0, 33423775, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 2000, 0, 0, 0, 0, 1, 0) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#Oh my goodness, what is this? Is it really for me? ") +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.sendDelay(500) +sm.sendDelay(5000) +sm.sendDelay(500) +sm.sendDelay(5000) +sm.sendDelay(500) +sm.sendDelay(5000) +sm.sendDelay(500) +sm.sendDelay(5000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendNext("Hero! This is for you!") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("I gave Sir Cayne a dragon. For you, I have something special!") +sm.completeQuestNoCheck(64068) +sm.warp(867201100) diff --git a/scripts/field/enter_867201102.py b/scripts/field/enter_867201102.py new file mode 100755 index 0000000..4ae52bd --- /dev/null +++ b/scripts/field/enter_867201102.py @@ -0,0 +1,299 @@ +# id 867201102 (Abrup Basin : Svarti Camp), field 867201102 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400598, 1720, 30) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400580, 770, 30) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400589, 1130, 30) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bThorson! ") +sm.forcedMove(False, 60) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33450786, 0, 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400598, True, 100, 70) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendNext("Yes, hero? You called? What can I do for you? ") +sm.setParam(57) +sm.sendSay("#bI have something to ask you. ") +sm.setParam(37) +sm.sendSay("Anything! Go right ahead. ") +sm.setParam(57) +sm.sendSay("#bDo you happen to know the old lady living in the cabin in the forest with her granddaughter? ") +sm.sendDelay(1500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33450786, 0, 0) +sm.setParam(37) +sm.sendNext("Hmm... Oh! That witch granddaughter and the old lady! ") +sm.setParam(57) +sm.sendSay("#bWitch? ") +sm.setParam(37) +sm.sendSay("Yep! But hey, what about the old lady? ") +sm.setParam(57) +sm.sendSay("#bDid she visit this town a few months ago? ") +sm.setParam(37) +sm.sendSay("Uh... hmm... the old lady... ") +sm.sendSay("Uh... to be honest, I'm not sure. The chief usually deals with visitors. ") +sm.sendDelay(1500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33450786, 0, 0) +sm.sendNext("Oh, hey! I'll go ask the chief for you! ") +sm.flipNpcByTemplateId(9400598, False) +sm.moveNpcByTemplateId(9400598, False, 200, 90) +sm.sendDelay(3000) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(True, 220) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400589, False, 70, 60) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#From what I could hear, you were talking about Sanaan. Did you learn anything about her whereabouts? ") +sm.setParam(57) +sm.sendSay("#bThorson didn't seem to know. He went to ask Chief Gurnardson. ") +sm.setParam(37) +sm.sendSay("#face0#I see. He's quite the friendly lad. ") +sm.setParam(57) +sm.sendSay("#bOh, right... Thorson said something about a witch granddaughter. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(500) +sm.setParam(37) +sm.sendNext("#face0#Hah... ") +sm.moveNpcByTemplateId(9400589, True, 200, 70) +sm.sendDelay(500) +sm.forcedMove(True, 100) +sm.sendNext("#face0#She's a little different from us, and some people concern themselves too much with such differences. Nothing more. ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.setParam(57) +sm.sendNext("#bDifferent? How so?") +sm.setParam(37) +sm.sendSay("#face0#Hmm... it may be more appropriate to say she is special. Both her natural abilities and her skin color.") +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, False, 280, 70) +sm.sendDelay(3500) +sm.flipNpcByTemplateId(9400589, False) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0##h0#, I forgot to give this to you earlier.") +sm.sendDelay(900) +sm.sendDelay(2000) +sm.avatarOriented("Effect/OnUserEff.img/questEffect/PL_MONAD1/1") +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(500) +sm.sendNext("#face0#Peytour, what exactly do you mean?") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Sanaan and her granddaughter... let's see, her name was... Blanche. Right, Blanche.") +sm.sendSay("#face0#They were once villagers of Kaptafel, though it was before I settled in the town proper.") +sm.setParam(57) +sm.sendSay("#bI did not know that.") +sm.setParam(37) +sm.sendSay("#face0#They said that Sanaan raised Blanche since she was a baby. As she grew, her differences became more and more obvious.") +sm.sendSay("#face0#That itself was not a problem. The problem was when the villagers began to notice how Blanche was different from them.") +sm.sendSay("#face0#Blue-gray skin, swift running, incredible archery...") +sm.sendSay("#face0#I never met the girl, but from the stories it's not hard to imagine people fearing or even hating her, out of ignorance.") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#Blue-gray skin...") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33450787, 0, 0) +sm.sendSay("#face4#You mean...") +sm.setParam(57) +sm.sendSay("#bWas she a demon?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Half-demon, as I hear it. Regardless, Sanaan took her granddaughter into the forest to keep her safe.") +sm.sendSay("#face0#This is as much I know. I've always pitied them, struggling on their own because of the ill treatment of others...") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Hmmm...") +sm.spawnNpc(9400598, 1500, 30) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400597, 1550, 30) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.moveNpcByTemplateId(9400598, True, 170, 100) +sm.moveNpcByTemplateId(9400597, True, 270, 60) +sm.sendDelay(3000) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "Hero! Hero! ", 3000, 1, 0, 0, 0, 4, 9400598, 4878499) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Hmm! What is it? You have questions for me?") +sm.setParam(57) +sm.sendSay("#bYes, do you...") +sm.setParam(37) +sm.sendSay("#face0#Hold a moment! Information is not free here, friend. Your questions come with a price.") +sm.setParam(57) +sm.sendSay("#bExcuse me?") +sm.setParam(37) +sm.sendSay("#face0#Now, then... I heard from Thorson earlier that you brought back some Leatty Crystals for your people, right? I would appreciate you sharing your spoils, to support those who are supporting you.") +sm.setParam(57) +sm.sendSay("#b...How many do you need?") +sm.flipNpcByTemplateId(9400597, False) +sm.sendDelay(250) +sm.setParam(37) +sm.sendNext("#face0#Thorson, how many did they bring back? ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("Uh, I don't know... maybe 100? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#What? 100? What a bounty! Surely you can spare half. ") +sm.flipNpcByTemplateId(9400597, True) +sm.sendDelay(250) +sm.setParam(57) +sm.sendNext("#bI'll need some time to round them up. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#No, please... stay here. ") +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 300, 200) +sm.sendDelay(2400) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, False, 290, 200) +sm.sendDelay(3000) +sm.setParam(57) +sm.sendNext("#bThat's... ") +sm.setParam(37) +sm.sendSay("#face4#We should hear the story first. The knights can handle a simple task like gathering Leatty Crystals. ") +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(3500) +sm.speechBalloon(False, 0, 0, "Let's see... ", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(False, 0, 0, "Seems about right.", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.setParam(57) +sm.sendNext("#bNow, continue with your story. It had better be worth 50 Leatty Crystals. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Goodness, you needn't be so skeptical! ") +sm.sendSay("#face0#Hmm, hmm... Ahh yes, the old lady. I remember her visits to Svarti well. She came twice, actually! ") +sm.setParam(57) +sm.sendSay("#bTwice? ") +sm.setParam(37) +sm.sendSay("#face0#The first time was about 4 or 5 months ago... she was looking for her granddaughter, so I sent her away. We had no outsiders here at the time, you see. ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("That's right. The chief usually turns people away at the gate. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ahem! Then again about two months ago... probably a little before the monsters turned on us, she came back. ") +sm.sendSay("#face0#Of course, I told her that her granddaughter was not here. Because she isn't. Of course. ") +sm.sendSay("#face0#I recall she mumbled something about returning home. Perhaps this was the last place she looked? ") +sm.setParam(57) +sm.sendSay("#bSo... she went back to that cabin after all. ") +sm.setParam(37) +sm.sendSay("#face0#There you go! Surely that was some valuable information, eh? Well-worth your efforts, hmm? ") +sm.setParam(57) +sm.sendSay("#bIf she's still at the cabin... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face5#...then she must be in danger. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Why ARE you looking for that old lady, anyway? Do you know her? ") +sm.setParam(57) +sm.sendSay("#bIn a way... She is the one who sent me the letter that brought me to Abrup. ") +sm.sendSay("#bDespite that, I still haven't met her in person. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#In a way, we have Sanaan to thank for our survival. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#I-is that so? That old lady saved all of us? Hmm! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Well, it was her letter that brought #h0# here from the outside world. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ah, is that so? Perhaps... ") +sm.sendSay("#face0#S-so then, you're going to that cabin? Are you planning to bring her here? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Are you really planning to go there? ") +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 0, 0, 0) +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("#face0#The forest is far too dangerous right now, even for you. And there's no guarantee she's still there. ") +sm.forcedFlip(True) +sm.sendDelay(250) +sm.setParam(57) +sm.sendNext("#bHm. If she is in the dangerous forest...") +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "Wait! Why are you ignoring me?", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Are you really going? Into the deep forest? ") +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "This is why you never deal with mystery outsiders.", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.setParam(57) +sm.sendNext("#bYes. I have to do this. ") +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face5#... ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400597, False) +sm.sendDelay(300) +sm.speechBalloon(False, 0, 0, "And Thorson! Stop being a blabbermouth already!", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.moveNpcByTemplateId(9400597, False, 300, 100) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400598, False) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400598, False, 300, 100) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bEvery moment counts. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#You really are stubborn sometimes. Do you even know where the cabin is? Ah, give me a moment. ") +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400589, True, 650, 200) +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("#b... ") +sm.sendDelay(250) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "...", 3000, 1, 0, 0, 0, 4, 9400580, 4878499) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4#... ") +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("#bAlika, what's on your mind? ") +sm.speechBalloon(True, 0, 0, "...", 3000, 1, 0, 0, 0, 4, 9400580, 4878499) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face5#Huh? Ah, n-nothing. ") +sm.sendSay("#face5#Just... be careful, and come back safe. Please, #h0#. ") +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 1500, 200) +sm.sendDelay(2000) +sm.sendDelay(250) +sm.forcedMove(True, 650) +sm.sendDelay(3000) +sm.flipNpcByTemplateId(9400589, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400589, False, 100, 200) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Here, take this. ") +sm.setParam(57) +sm.sendSay("#bThis is... ") +sm.setParam(37) +sm.sendSay("#face0#Sanaan's cabin is beyond the Grim Vale in Windsleep Forest. ") +sm.sendSay("#face0#I would not suggest entering the Grim Vale under the circumstances, so please take the path around it. ") +sm.sendSay("#face0#However, if you have to spend the night in the forest, make camp in the canyon there. You'll be more secluded while you rest. ") +sm.sendSay("#face0#...I feel responsible for you taking on this burden. Perhaps I said something I shouldn't have. ") +sm.setParam(57) +sm.sendSay("#bDon't worry, Peytour. I'll be back in no time. ") +sm.setParam(37) +sm.sendSay("#face0#Of course, of course. Take care out there, and may the breath of Windsleep Forest be with you. ") +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64070) +sm.warp(867201100) diff --git a/scripts/field/enter_867201130.py b/scripts/field/enter_867201130.py new file mode 100755 index 0000000..3e25df5 --- /dev/null +++ b/scripts/field/enter_867201130.py @@ -0,0 +1,10 @@ +# id 867201130 (Abrup Basin : Windsleep Forest Outskirts), field 867201130 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Since we know the deep forest is dangrous and unpredictable, try to stay away from there when you hunt! ") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152844;QET=20190623115238;state=2") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152844;QET=20190623115238;state=1") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152844;QET=20190623125240;state=1") +sm.warp(867201150) diff --git a/scripts/field/enter_867201150.py b/scripts/field/enter_867201150.py new file mode 100755 index 0000000..3f5322b --- /dev/null +++ b/scripts/field/enter_867201150.py @@ -0,0 +1,208 @@ +# id 867201150 (Abrup Basin : Windsleep Forest Outskirts), field 867201150 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400612, -1035, 90) +sm.showNpcSpecialActionByTemplateId(9400612, "summon", 0) +sm.spawnNpc(9400612, -570, 90) +sm.showNpcSpecialActionByTemplateId(9400612, "summon", 0) +sm.spawnNpc(9400612, -146, 90) +sm.showNpcSpecialActionByTemplateId(9400612, "summon", 0) +sm.spawnNpc(9400612, 390, 90) +sm.showNpcSpecialActionByTemplateId(9400612, "summon", 0) +sm.spawnNpc(9400585, -795, 90) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400585, "attack1", -1) +sm.spawnNpc(9400596, 650, 90) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400596, "attack1", -1) +sm.spawnNpc(9400596, -860, 90) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400596, "attack1", -1) +sm.spawnNpc(9400582, 190, 90) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.startQuest(64164) +sm.showNpcSpecialActionByTemplateId(9400582, "attack1", -1) +sm.spawnNpc(9400589, -326, 90) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400589, "attack1", -1) +sm.spawnNpc(9400587, -450, 90) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400587, "attack1", -1) +sm.spawnNpc(9400591, -1436, 90) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400675, -1503, 90) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.forcedAction(5, 2000) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(9400612, "die1", 0) +sm.sendDelay(900) +sm.showNpcSpecialActionByTemplateId(9400612, "die1", 0) +sm.sendDelay(900) +sm.showNpcSpecialActionByTemplateId(9400612, "die1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400612, "die1", 0) +sm.resetNpcSpecialActionByTemplateId(9400585) +sm.resetNpcSpecialActionByTemplateId(9400596) +sm.resetNpcSpecialActionByTemplateId(9400596) +sm.resetNpcSpecialActionByTemplateId(9400582) +sm.resetNpcSpecialActionByTemplateId(9400589) +sm.resetNpcSpecialActionByTemplateId(9400587) +sm.sendDelay(1500) +sm.sendDelay(900) +sm.sendDelay(900) +sm.sendDelay(300) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Aghhhh!! ") +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400582, True) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#What now? ") +sm.showNpcSpecialActionByTemplateId(9400675, "skill2", -1) +sm.showNpcSpecialActionByTemplateId(9400591, "grab", -1) +sm.sendDelay(600) +sm.forcedMove(True, 900) +sm.moveNpcByTemplateId(9400582, True, 710, 250) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(600) +sm.flipNpcByTemplateId(9400585, True) +sm.moveNpcByTemplateId(9400587, True, 550, 300) +sm.sendDelay(600) +sm.setParam(57) +sm.sendNext("#bShulla! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("H-help! ") +sm.sendDelay(2100) +sm.showNpcSpecialActionByTemplateId(9400587, "attack1", 0) +sm.sendDelay(600) +sm.moveNpcByTemplateId(9400582, True, 550, 300) +sm.sendDelay(1500) +sm.forcedMove(True, 350) +sm.resetNpcSpecialActionByTemplateId(9400675) +sm.showNpcSpecialActionByTemplateId(9400675, "hit1", 300) +sm.resetNpcSpecialActionByTemplateId(9400591) +sm.sendDelay(600) +sm.flipNpcByTemplateId(9400591, False) +sm.sendDelay(600) +sm.moveNpcByTemplateId(9400591, False, 236, 150) +sm.moveNpcByTemplateId(9400589, True, 475, 100) +sm.sendDelay(1200) +sm.moveNpcByTemplateId(9400582, True, 50, 100) +sm.sendDelay(900) +sm.showNpcSpecialActionByTemplateId(9400675, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400582, "skill", 0) +sm.playSound("Sound/Mob.img/9402301/Skill1", 128) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Have at you! ") +sm.forcedMove(True, 50) +sm.sendDelay(1000) +sm.forcedAction(5, 0) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400675, "die1", 0) +sm.sendDelay(1600) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400582, False) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Ugh... Kan... ") +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Did I not tell you to stay away from the forest?! ") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("I am... sorry... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#You need to be careful, for the sake of the child you still have! ") +sm.sendSay("#face0#What are you going to do if you get hurt? ") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Kan! I know how you feel, but Shulla doesn't deserve this. ") +sm.sendSay("#face0#I'm sorry, but you need to step back for a minute and collect yourself. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Kan... ") +sm.spawnNpc(9400596, -1850, 0) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400618, -1900, 0) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400619, -650, 0) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.moveNpcByTemplateId(9400596, False, 550, 100) +sm.moveNpcByTemplateId(9400618, False, 550, 100) +sm.moveNpcByTemplateId(9400619, True, 140, 50) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face1#...I'm so tired, Peytour. I've lost enough people, and sacrificed so much. I just want this to end! ") +sm.sendSay("#face1#I've tried so hard to keep everyone pushing on, but when I hear someone fall apart like that... what is there left for me to do? ") +sm.sendSay("#face1#All I want is to protect our people! I can't do that if they can't help themselves! ") +sm.sendSay("#face1#Peytour... if even you can't understand me... then I... ") +sm.moveNpcByTemplateId(9400589, True, 30, 30) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Rest easy, Kan. I understand your struggle, and I know the others do as well. ") +sm.sendSay("#face0#Truly, look around! ") +sm.sendSay("#face0#None of these people would be here without you. They trust you, believe in you... How can you not see how much they care about you? ") +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400587, False, 150, 100) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Kan! ") +sm.sendSay("I'm sorry I'm... so weak. But you shouldn't beat yourself up on my account. ") +sm.sendSay("We all took an important a step forward when we left town. Our road is hard, but we owe it to each other to persist. ") +sm.sendSay("But Kan... you're still stuck in the past. ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400591, False, 100, 50) +sm.flipNpcByTemplateId(9400589, False) +sm.sendNext("Believe me, I know how that feels. But you can't change what happened. Tormenting yourself accomplishes nothing! ") +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendSay("Shulla is right, Chief! ") +sm.moveNpcByTemplateId(9400596, False, 100, 50) +sm.sendSay("No one blames you for what happened that day. Why can't you forgive yourself? We hate to see you like this! ") +sm.sendSay("The chief I remember listened to everyone and decided for the group. He didn't give heartless orders. ") +sm.moveNpcByTemplateId(9400618, False, 100, 50) +sm.sendSay("We're all waiting for the day that you start leading with your heart again. ") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("Please, Kan... we miss the old you. ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400591, False, 30, 50) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Remember who you are, Kan.") +sm.flipNpcByTemplateId(9400587, True) +sm.moveNpcByTemplateId(9400596, False, 40, 50) +sm.moveNpcByTemplateId(9400618, False, 40, 50) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#... ") +sm.sendSay("#face1#I... I am... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#You don't have to say anything... ") +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Sob... Aah...", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Kan...", 2000, 1, 0, 0, 0, 4, 9400589, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "It's okay to cry...", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.completeQuestNoCheck(64046) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face1##h0#, we should go hunt.") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64046, "dir1=1") +sm.completeQuestNoCheck(64046) +sm.warp(867201130) diff --git a/scripts/field/enter_867201160.py b/scripts/field/enter_867201160.py new file mode 100755 index 0000000..12713fb --- /dev/null +++ b/scripts/field/enter_867201160.py @@ -0,0 +1,3 @@ +# id 867201160 (Abrup Basin : Dusky Snowfield), field 867201160 +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867201180.py b/scripts/field/enter_867201180.py new file mode 100755 index 0000000..f747b08 --- /dev/null +++ b/scripts/field/enter_867201180.py @@ -0,0 +1,13 @@ +# id 867201180 (Abrup Basin : Frozen River Center), field 867201180 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0##h0#? ") +sm.sendSay("#face0#You always seem to show up where I am. You must really like me! ") +sm.setParam(57) +sm.sendSay("#bEr, Alika asked me to help... ") +sm.setParam(37) +sm.sendSay("#face1#Ha! Is the mighty hero blushing?") +sm.sendSay("#face1#Since I've collected quite a few already, I think 30 more each should do it!") +sm.warp(867201100) diff --git a/scripts/field/enter_867201200.py b/scripts/field/enter_867201200.py new file mode 100755 index 0000000..a709aa8 --- /dev/null +++ b/scripts/field/enter_867201200.py @@ -0,0 +1,5 @@ +# id 867201200 (Abrup Basin : Windsleep Forest Entrance), field 867201200 +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/1", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867201220.py b/scripts/field/enter_867201220.py new file mode 100755 index 0000000..29ed872 --- /dev/null +++ b/scripts/field/enter_867201220.py @@ -0,0 +1,5 @@ +# id 867201220 (Abrup Basin : Windsleep Forest Trail), field 867201220 +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/2", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867201240.py b/scripts/field/enter_867201240.py new file mode 100755 index 0000000..c60ee4f --- /dev/null +++ b/scripts/field/enter_867201240.py @@ -0,0 +1,9 @@ +# id 867201240 (Abrup Basin : Glistening Sunlight Trail), field 867201240 +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/3", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(It's so quiet here... the silence is unsettling.) ") +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867201260.py b/scripts/field/enter_867201260.py new file mode 100755 index 0000000..c6933aa --- /dev/null +++ b/scripts/field/enter_867201260.py @@ -0,0 +1,5 @@ +# id 867201260 (Abrup Basin : Onerous Trail), field 867201260 +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/4", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867201280.py b/scripts/field/enter_867201280.py new file mode 100755 index 0000000..475a848 --- /dev/null +++ b/scripts/field/enter_867201280.py @@ -0,0 +1,58 @@ +# id 867201280 (Abrup Basin : Glistening Sunlight Trail), field 867201280 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400580, 50, 445) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, 120, 445) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.spawnNpc(9400675, -250, 445) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400642, -460, 345) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, -350, 170) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400675, 85, 10) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400674, 375, 30) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400674, 340, 290) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400642, 365, 445) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 600, 445) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400642, 575, 235) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 750, 340) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.showNpcSpecialActionByTemplateId(9400580, "fear", -1) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400675, "skill1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400674, "skill1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400674, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400674, "skill1", 0) +sm.sendDelay(1500) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.zoomCamera(1000, 2000, 2000, 70, 450) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika? ") +sm.showNpcSpecialActionByTemplateId(9400675, "skill1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400642, "skill1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400642, "skill1", 0) +sm.sendNext("#bWhat are you doing out here? ") +sm.sendSay("#bStay right there! I'll handle the monsters! ") +sm.createQuestWithQRValue(64072, "chk1=1") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.createQuestWithQRValue(64072, "chk1=1;chk2=1") +sm.warp(867201301) diff --git a/scripts/field/enter_867201301.py b/scripts/field/enter_867201301.py new file mode 100755 index 0000000..d24bd2f --- /dev/null +++ b/scripts/field/enter_867201301.py @@ -0,0 +1,46 @@ +# id 867201301 (Abrup Basin : Glistening Sunlight Trail), field 867201301 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, 50, 445) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, 180, 445) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "fear", -1) +sm.sendDelay(500) +sm.forcedMove(False, 130) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika! Why are you here? ") +sm.sendDelay(1000) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400580, True, 40, 70) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#I was so worried about you, #h0#. I just couldn't let you go by yourself. ") +sm.sendSay("#face5#The forest is so dangerous, especially with everything going on! I know you're very confident in your abilities, but I prepared for anything that might happen... ") +sm.showEffect("Effect/OnUserEff.img/questEffect/PL_MONAD1/8", 3000, 0, 0, 0, 33629382, 0, 0) +sm.sendSay("#face5#Medicine, compass, blanket, emergency rations... ") +sm.setParam(57) +sm.sendSay("#bWait, is that why you rushed out earlier? ") +sm.sendSay("#bAlika, as you said, the forest is too dangerous. You should go back. ") +sm.setParam(37) +sm.sendSay("#face1#Hang on, #h0#. You might have forgotten, but I am the youngest scholar of Afinas because of my talents. I'll be able to help you! ") +sm.startQuest(64162) +sm.sendSay("#face3#And I came too far for you to send me back on my own... right? ") +sm.setParam(57) +sm.sendSay("#bAlika, this is serious! ") +sm.setParam(37) +sm.sendSay("#face3#... ") +sm.setParam(57) +sm.sendSay("#b...Hah. ") +sm.sendSay("#bOkay, you win. But you stay right behind me. ") +sm.setParam(37) +sm.sendSay("#face2#Fine by me! Okay #h0#, lead the way!") +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64072) +sm.startQuest(64073) +sm.startQuest(64058) +sm.warp(867201320) diff --git a/scripts/field/enter_867201320.py b/scripts/field/enter_867201320.py new file mode 100755 index 0000000..ec1768e --- /dev/null +++ b/scripts/field/enter_867201320.py @@ -0,0 +1,5 @@ +# id 867201320 (Abrup Basin : Memoir Trail), field 867201320 +sm.setMapTaggedObjectVisible("ribbon01", False, 0, 0) +sm.setMapTaggedObjectVisible("ribbon02", False, 0, 0) +sm.setMapTaggedObjectVisible("ribbon03", False, 0, 0) +sm.setMapTaggedObjectVisible("ribbon01", True, 0, 0) diff --git a/scripts/field/enter_867201340.py b/scripts/field/enter_867201340.py new file mode 100755 index 0000000..5b10599 --- /dev/null +++ b/scripts/field/enter_867201340.py @@ -0,0 +1,14 @@ +# id 867201340 (Abrup Basin : Unbent Timber Lane), field 867201340 +sm.setMapTaggedObjectVisible("ribbon01", False, 0, 0) +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, 1987, 346) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, 2076, 446) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400580, "ribbon", -1) +sm.sendDelay(3000) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.setMapTaggedObjectVisible("ribbon01", True, 0, 0) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_867201401.py b/scripts/field/enter_867201401.py new file mode 100755 index 0000000..4e6521e --- /dev/null +++ b/scripts/field/enter_867201401.py @@ -0,0 +1,90 @@ +# id 867201401 (Abrup Basin : Eyeful Treasure Trove), field 867201401 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("close", True, 0, 0) +sm.setMapTaggedObjectVisible("open", False, 0, 0) +sm.startQuest(64074) +sm.forcedFlip(True) +sm.spawnNpc(9400580, 0, 250) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, -125, 250) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.sendDelay(500) +sm.forcedMove(False, 40) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Ahh! ") +sm.setParam(57) +sm.sendSay("#bAre you okay, Alika? Where are we? ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, False, 200, 80) +sm.sendDelay(500) +sm.forcedMove(False, 100) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.setParam(37) +sm.sendNext("#face3#A... treasure vault? ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, False, 200, 80) +sm.sendDelay(500) +sm.sendNext("#face1#There's treasure everywhere! Loads of it! ") +sm.sendDelay(500) +sm.forcedMove(False, 120) +sm.sendDelay(1500) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.setMapTaggedObjectVisible("close", False, 0, 0) +sm.setMapTaggedObjectVisible("open", True, 0, 0) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/eyeeyebox", 128) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/questEffect/PL_MONAD1/3", 0, 0, 0, 0, 33661394, 0, 0) +sm.sendDelay(500) +sm.sendNext("#face1#Eh? Isn't this the brooch Cayne lost? ") +sm.setParam(57) +sm.sendSay("#bNow we know who the thief of Abrup is. ") +sm.spawnNpc(9400610, 730, 250) +sm.showNpcSpecialActionByTemplateId(9400610, "summon", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400610, True, 30, 50) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(5000) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/questEffect/PL_MONAD1/4", 0, 0, 0, 0, 33661394, 0, 0) +sm.setParam(37) +sm.sendNext("#face0#Hmm, this necklace has some fine workmanship. ") +sm.sendSay("#face0#...All of these items must have been precious to their owners. Why don't we return them? ") +sm.setParam(57) +sm.sendSay("#bThat's a great idea. ") +sm.setParam(37) +sm.sendSay("#face0#I don't want to slow you down if you have to fight, so I'll hang on to these. ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, True, 100, 50) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bAren't they heavy? ") +sm.setParam(37) +sm.sendSay("#face1#Hey, I have to help you out somehow! ") +sm.sendSay("#face1#Okay, let's get going! ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, True, 300, 80) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.forcedMove(True, 300) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(9400610) # Eyeful +sm.sendNext("Brrrrrrrrrr!!!!") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.completeQuestNoCheck(64074) +sm.createQuestWithQRValue(64272, "0=4;2=1") +sm.warp(867201501) diff --git a/scripts/field/enter_867201501.py b/scripts/field/enter_867201501.py new file mode 100755 index 0000000..20b9ba0 --- /dev/null +++ b/scripts/field/enter_867201501.py @@ -0,0 +1,91 @@ +# id 867201501 (Abrup Basin : Spring Wind Hollow), field 867201501 +sm.lockInGameUI(True, False) +sm.startQuest(64076) +sm.spawnNpc(9400580, 1650, 440) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.forcedFlip(True) +sm.spawnNpc(9400595, 1970, 440) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.spawnNpc(9400682, 877, 440) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400580, True, 500, 120) +sm.sendDelay(4000) +sm.forcedMove(True, 500) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1#Wow, it's so pretty here! Look at how the leaves are all frozen and sparkling. ") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.sendNext("#face2#Like a chandelier! ") +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.forcedMove(True, 400) +sm.sendDelay(3500) +sm.forcedFlip(True) +sm.sendNext("#face1##h0#, look at this! ") +sm.showNpcSpecialActionByTemplateId(9400580, "special4", -1) +sm.sendDelay(2000) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.sendDelay(250) +sm.sendNext("#face1#What could this be? It seems to be a new kind of plant... or mushroom? ") +sm.moveNpcByTemplateId(9400580, True, 150, 100) +sm.sendSay("#face1#From a flying Eyeful to a strange pink plant. What is going on in this forest? ") +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400580, "special1", -1) +sm.sendNext("#face1#What could this be? It's lovely... ") +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400682, "special1", -1) +sm.sendDelay(600) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33675520, 0, 0) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400580, False, 30, 50) +sm.sendDelay(1000) +sm.forcedAction(4, 500000) +sm.spawnNpc(9400641, 150, 440) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, 100, 440) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400642, 50, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 0, 440) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400641, 1600, 440) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, 1650, 440) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400642, 1700, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 1750, 440) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400641, False, 500, 100) +sm.moveNpcByTemplateId(9400641, True, 500, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400672, False, 500, 100) +sm.moveNpcByTemplateId(9400672, True, 500, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400642, False, 500, 100) +sm.moveNpcByTemplateId(9400642, True, 500, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400674, False, 500, 100) +sm.moveNpcByTemplateId(9400674, True, 500, 100) +sm.sendDelay(3000) +sm.flipNpcByTemplateId(9400580, False) +sm.forcedFlip(True) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.sendDelay(600) +sm.forcedMove(False, 50) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bWhat, where did... Alika, stay behind me! ") +sm.forcedFlip(True) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.warp(867201510) diff --git a/scripts/field/enter_867201502.py b/scripts/field/enter_867201502.py new file mode 100755 index 0000000..62cdb27 --- /dev/null +++ b/scripts/field/enter_867201502.py @@ -0,0 +1,104 @@ +# id 867201502 (Abrup Basin : Spring Wind Hollow), field 867201502 +sm.createQuestWithQRValue(64076, "chk1=1") +sm.lockInGameUI(True, False) +sm.forcedAction(4, 10000) +sm.spawnNpc(9400580, 950, 440) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.startQuest(64162) +sm.spawnNpc(9400689, 877, 440) +sm.showNpcSpecialActionByTemplateId(9400689, "summon", 0) +sm.spawnNpc(9400641, 600, 440) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, 550, 100) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400642, 500, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 0, 450) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400641, 1150, 440) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400672, 1200, 440) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400642, 1250, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 1300, 440) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400672, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400674, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400672, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400674, "attack1", -1) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.forcedAction(5, 0) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400580, True) +sm.forcedAction(5, 0) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400580, "attack1", 0) +sm.sendDelay(2000) +sm.forcedAction(5, 0) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4#Ah! I can't take this anymore! ") +sm.flipNpcByTemplateId(9400580, True) +sm.forcedAction(5, 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400580, "special2", 0) +sm.sendDelay(1500) +sm.showNpcSpecialActionByTemplateId(9400689, "special1", -1) +sm.sendDelay(2000) +sm.resetNpcSpecialActionByTemplateId(9400641) +sm.resetNpcSpecialActionByTemplateId(9400672) +sm.resetNpcSpecialActionByTemplateId(9400642) +sm.resetNpcSpecialActionByTemplateId(9400674) +sm.resetNpcSpecialActionByTemplateId(9400641) +sm.resetNpcSpecialActionByTemplateId(9400672) +sm.resetNpcSpecialActionByTemplateId(9400642) +sm.resetNpcSpecialActionByTemplateId(9400674) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33717611, 0, 0) +sm.sendDelay(1500) +sm.setParam(57) +sm.sendNext("#bWhat's going on? ") +sm.setParam(37) +sm.sendSay("#face0#Perhaps... ") +sm.startQuest(64077) +sm.startQuest(64162) +sm.moveNpcByTemplateId(9400580, True, 10, 20) +sm.forcedMove(False, 50) +sm.sendDelay(2000) +sm.sendNext("#face0#This was controlling the monsters? ") +sm.resetNpcSpecialActionByTemplateId(9400689) +sm.showNpcSpecialActionByTemplateId(9400689, "special2", -1) +sm.sendSay("#face4#Maybe when I tried to touch it, it saw that as a threat. ") +sm.setParam(57) +sm.sendSay("#bWell, that was a significant response. There's a lot we don't know about this forest, Alika, so we need to be more careful. ") +sm.setParam(37) +sm.sendSay("#face0#I will. I promise I will, I'm sorry, #h0#. ") +sm.sendSay("#face4#On that note, I've really never seen anything like this, in the field or in my books. What kind of creature controls others? ") +sm.sendSay("#face4#Could this be the cause of the monster mutations? And is it native to Abrup? Wait, we don't have time for this now. ") +sm.sendSay("#face0#I need to bring it back to Afinas headquarters for study. #h0#, can you help? ") +sm.moveNpcByTemplateId(9400580, True, 10, 20) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400580, "special1", -1) +sm.resetNpcSpecialActionByTemplateId(9400689) +sm.showNpcSpecialActionByTemplateId(9400689, "special3", -1) +sm.sendDelay(4000) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.lockInGameUI(False, True) +sm.warp(867201503) diff --git a/scripts/field/enter_867201503.py b/scripts/field/enter_867201503.py new file mode 100755 index 0000000..0f133da --- /dev/null +++ b/scripts/field/enter_867201503.py @@ -0,0 +1,33 @@ +# id 867201503 (null), field 867201503 +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.lockInGameUI(True, False) +equips = [1103125, ] +sm.avatarLookSet(equips) +sm.forcedInput(6) +sm.sendDelay(500) +sm.forcedInput(3) +sm.sendDelay(100) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1#Wow! ") +sm.setParam(56) +sm.sendSay("#bAlika! Are you okay? ") +sm.setParam(37) +sm.sendSay("#face2#Ha ha! This is so much fun! ") +sm.setParam(56) +sm.sendSay("#bStay close to me! ") +sm.forcedInput(0) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64077) +sm.warp(867201540) diff --git a/scripts/field/enter_867201510.py b/scripts/field/enter_867201510.py new file mode 100755 index 0000000..0aca063 --- /dev/null +++ b/scripts/field/enter_867201510.py @@ -0,0 +1,18 @@ +# id 867201510 (Abrup Basin : Spring Wind Hollow), field 867201510 +sm.showFieldEffect("defense/count", 0) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400689, "summon", 0) +sm.showFieldEffect("killing/stage/1", 0) +sm.showFieldEffect("killing/first/start", 0) +sm.showFieldEffect("defense/count", 0) +sm.showFieldEffect("killing/stage/2", 0) +sm.showFieldEffect("killing/first/start", 0) +sm.showFieldEffect("defense/count", 0) +sm.showFieldEffect("killing/stage/3", 0) +sm.showFieldEffect("killing/first/start", 0) +sm.showFieldEffect("defense/count", 0) +sm.showFieldEffect("killing/stage/4", 0) +sm.showFieldEffect("killing/first/start", 0) +sm.completeQuestNoCheck(64076) +sm.showFieldEffect("killing/clear", 0) +sm.warp(867201500) diff --git a/scripts/field/enter_867201540.py b/scripts/field/enter_867201540.py new file mode 100755 index 0000000..6621b2e --- /dev/null +++ b/scripts/field/enter_867201540.py @@ -0,0 +1,5 @@ +# id 867201540 (Abrup Basin : Forest Depths), field 867201540 +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.startQuest(64078) +sm.createQuestWithQRValue(64078, "chk1=1") diff --git a/scripts/field/enter_867201550.py b/scripts/field/enter_867201550.py new file mode 100755 index 0000000..698f756 --- /dev/null +++ b/scripts/field/enter_867201550.py @@ -0,0 +1,29 @@ +# id 867201550 (null), field 867201550 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1#Wow... ") +sm.setParam(57) +sm.sendSay("#bBeautiful. ") +sm.setParam(37) +sm.sendSay("#face0#Do you see that town over there? ") +sm.setParam(57) +sm.sendSay("#bWhere? ") +sm.setParam(37) +sm.sendSay("#face0#There! Between the cliffs! ") +sm.setParam(57) +sm.sendSay("#bOh! Wow, how did people manage to cram a town in there? ") +sm.setParam(37) +sm.sendSay("#face3#It looks solid, too. That place could keep everyone safe. ") +sm.setParam(57) +sm.sendSay("#bYeah, and there's enough space for everyone to have a roof over their head again. ") +sm.setParam(37) +sm.sendSay("#face0#You're right. Goodness, should we hurry down? ") +sm.setParam(57) +sm.sendSay("#bOkay, hold on! ") +sm.lockInGameUI(False, True) +sm.startQuest(64059) +sm.warp(867201560) diff --git a/scripts/field/enter_867201560.py b/scripts/field/enter_867201560.py new file mode 100755 index 0000000..e7e3b2e --- /dev/null +++ b/scripts/field/enter_867201560.py @@ -0,0 +1,5 @@ +# id 867201560 (Abrup Basin : Grim Vale Overlook), field 867201560 +sm.setMapTaggedObjectVisible("ice01", False, 0, 0) +sm.setMapTaggedObjectVisible("ice02", False, 0, 0) +sm.setMapTaggedObjectVisible("ice03", False, 0, 0) +sm.completeQuestNoCheck(64078) diff --git a/scripts/field/enter_867201580.py b/scripts/field/enter_867201580.py new file mode 100755 index 0000000..a4fcac1 --- /dev/null +++ b/scripts/field/enter_867201580.py @@ -0,0 +1,45 @@ +# id 867201580 (Abrup Basin : Grim Vale Interior), field 867201580 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(9400580, 1110, 300) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, 1200, 300) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.forcedFlip(True) +sm.forcedInput(4) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5##h0#! #h0#! ") +sm.sendSay("#face5#Are you okay? Speak to me! ") +sm.sendSay("#face5#Ahh! #h0#! I was so worried! ") +sm.sendSay("#face5#Aghhh! You can NOT die and leave me by myself in this dangerous forest! Do you understand? ") +sm.sendDelay(1000) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bAhh... ") +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face5#Don't leave me here! ") +sm.setParam(57) +sm.sendSay("#bI won't die... so don't you worry. ") +sm.sendSay("#bThank you, Alika. You saved me. ") +sm.setParam(37) +sm.sendSay("#face3#We're a team out here! Always together! ") +sm.setParam(57) +sm.sendSay("#bOkay, ha ha. ") +sm.sendDelay(1000) +sm.sendDelay(6000) +sm.setParam(37) +sm.sendNext("#face3#The sun is setting. Shouldn't we stop and warm up for the night? ") +sm.setParam(57) +sm.sendSay("#bThat's a great idea. Let's look for a place to rest. ") +sm.lockInGameUI(False, True) +sm.startQuest(64080) diff --git a/scripts/field/enter_867201601.py b/scripts/field/enter_867201601.py new file mode 100755 index 0000000..f54733d --- /dev/null +++ b/scripts/field/enter_867201601.py @@ -0,0 +1,188 @@ +# id 867201601 (Abrup Basin : Grim Vale Cave), field 867201601 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400680, 901, 401) +sm.showNpcSpecialActionByTemplateId(9400680, "summon", 0) +sm.forcedFlip(True) +sm.forcedAction(29, 100000000) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/wind", 128) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face3#... ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("#face3#Hmm... do you hear something? ") +sm.setParam(57) +sm.sendSay("#bWhat? ") +sm.setParam(37) +sm.sendSay("#face3#Here, listen... That. Someone crying, perhaps. Is it just me? ") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/wind", 128) +sm.sendDelay(3000) +sm.setParam(57) +sm.sendNext("#bIt's just the wind. Don't worry. ") +sm.setParam(37) +sm.sendSay("#face3#... ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.sendDelay(7000) +sm.setParam(37) +sm.sendNext("#face1#It's finally dawning on me just how long a day this has been. ") +sm.setParam(57) +sm.sendSay("#bI know... we've been going non-stop since we left Kaptafel. ") +sm.setParam(37) +sm.sendSay("#face1#I don't mean to complain, mind you. After all, I want to set a good example for the others... who aren't here right now. Ha... ") +sm.sendSay("#face0#I do wonder, though... am I doing enough for those who rely on me? Or am I really a burden on those I mean to help? ") +sm.setParam(57) +sm.sendSay("#bYou? A burden? You work way too hard for that to ever be true. ") +sm.setParam(37) +sm.sendSay("#face1#Thank you. ") +sm.sendSay("#face0#But I have been a burden to you, by following you all the way out here. And for that, I am sorry. ") +sm.setParam(57) +sm.sendSay("#bDon't be ridiculous. If not for you, I'd be an ice cube under that lake right now. ") +sm.sendSay("#bHonestly, I'm glad you came along. I've really enjoyed your company. ") +sm.setParam(37) +sm.sendSay("#face1#I'm happy to hear that. ") +sm.sendSay("#face1#This reminds me of the night we spent at that lost village. ") +sm.sendSay("#face1#When it's so dark and quiet, you can really appreciate the night sky. ") +sm.setParam(57) +sm.sendSay("#bYeah, Abrup is probably the only place you can see the aurora like this. ") +sm.setParam(37) +sm.sendSay("#face0#Back then... you asked about my dreams, didn't you? ") +sm.sendSay("#face0#Well, I've never told anyone of them. I have this fear... that if I tell someone about my dreams, they will come true. ") +sm.sendSay("#face0#But today, just today, I believe I can tell you. ") +sm.sendSay("#face0#That is, if you're willing to listen? ") +sm.setParam(57) +sm.sendSay("#bOf course.") +sm.setParam(37) +sm.sendSay("#face0#In my dreams, it's always dark and cold. ") +sm.sendSay("#face0#And I always see the same girl. ") +sm.sendSay("#face4#She's running through a black forest, chased by someone or something I never see. She falls, her skin bruised and battered, but she keeps going. ") +sm.sendSay("#face4#The dream skips ahead to her lying still on the barren snowfield. I don't know if she's exhausted or unconscious, but I know she's still alive. I can feel it. ") +sm.sendSay("#face5#When I awaken, I still feel as though I am that poor girl. So cold, and so frightened... ") +sm.sendSay("#face5#This dream, this exact same dream... I've had it every night for months. ") +sm.setParam(57) +sm.sendSay("#bThat sounds terrible. ") +sm.setParam(37) +sm.sendSay("#face5#But what does it mean? Is that girl waiting for me somewhere? Does she need my help? ") +sm.sendSay("#face4#Having the exact same dream every night must mean something. Especially since... my father is there, too. ") +sm.setParam(57) +sm.sendSay("#bYour father? ") +sm.setParam(37) +sm.sendSay("#face5#Yes... without a doubt. ") +sm.sendSay("#face5#He's wearing his Afinas scholar robes, as he always did... ") +sm.sendSay("#face4#But I don't know why he's there. Is he saving that girl? Or is it... something sinister... ") +sm.sendSay("#face4#To be honest, that's the real reason I wanted to be here. ") +sm.sendSay("#face3#There's something waiting for me out here. I know now that dark forest from my dream is Abrup's Windsleep Forest. ") +sm.setParam(57) +sm.sendSay("#bThis is the same forest you saw the girl fleeing in? ") +sm.setParam(37) +sm.sendSay("#face3#I know it sounds positively mad, but I'm sure of it. And that means there's something here for me to find. ") +sm.sendSay("#face5#So I followed you, #h0#, even knowing the dangers and burdening you further. I'm so sorry. ") +sm.setParam(57) +sm.sendSay("#bWell... have you found anything yet? ") +sm.setParam(37) +sm.sendSay("#face3#...No. Nothing at all. ") +sm.sendSay("#face3#I don't even know what I expected to find. Did I think I'd meet that girl? Or my father? I don't know... ") +sm.setParam(57) +sm.sendSay("#bBut you've taken an important step, Alika. That's always hard. ") +sm.sendSay("#bYou've taken the first step towards resolution. ") +sm.setParam(37) +res = sm.sendNext("#face1#Hah, thanks #h0#. You're starting to remind me of my friend. #b\r\n#L0# Are you talking about Cayne?#l\r\n#L1# Your friend must be quite thoughtful, just like me...#l") +res = sm.sendNext("#face1#Cayne is a good friend of mine, of course. But I'm talking about another friend. A very important one. #b\r\n#L0# Tell me more.#l\r\n#L1# I'd like to meet that friend sometime.#l") +sm.sendNext("#face2#Her name is Vivere, and she's my best friend. She's practically family, we're so close. ") +sm.sendSay("#face2#We've been together nearly our whole lives. That's something that's bothered me here... we've never been apart this long. ") +res = sm.sendNext("#face3#I should have brought her with me...#b\r\n#L0# Is your friend a scholar, too?#l\r\n#L1# Let's go back to your father... #l") +sm.sendNext("#face1#No, not a scholar. But she's at least as smart as I am. ") +sm.setParam(57) +sm.sendSay("#bSmarter than you, the youngest scholar in Afinas? ") +sm.setParam(37) +sm.sendSay("#face1#Yes, much smarter! For me, doing well academically is expected, because all I did was study ever since I was young. ") +sm.sendSay("#face1#But my friend... it all just comes so naturally to her. ") +sm.setParam(57) +sm.sendSay("#bAre you ever jealous of her? ") +sm.setParam(37) +res = sm.sendNext("#face1#Jealous? No, not at all! I'm happy to have someone like her in my life. #b\r\n#L0# Studying since you were young... isn't that hard?#l\r\n#L1# Tell me more about your friend. #l") +sm.sendNext("#face0#It was hard... because it was hard to earn praise even if I did well. ") +sm.sendSay("#face0#No matter how high my scores were, it was never enough for my father. And others would give him credit for my success. ") +sm.sendSay("#face0#I hated hearing that, so I tried harder than anyone. I wanted to be perfect, so no one could find any fault with me. ") +sm.sendSay("#face1#Because of my drive, I was able to make Apprentice Scholar faster than anyone in the history of Afinas. So in that sense, it was worth it. ") +sm.setParam(57) +sm.sendSay("#bThat's amazing, Alika. You never gave up, even when times got tough. So admirable. ") +sm.setParam(37) +res = sm.sendNext("#face1#'If you can dream it, you can do it.' That's my favorite quote. It's the one that's kept me going this whole time. #b\r\n#L0# So, what do you hope to do in the future?#l\r\n#L1# I see.#l") +sm.sendNext("#face1#Hmm... well... it's a little embarrassing... ") +sm.setParam(57) +sm.sendSay("#bThere's no reason to be embarrassed of your dreams. You've accomplished so much, so why should you care if someone doesn't like your dream? ") +sm.setParam(37) +sm.sendSay("#face2#True, very true. And it's not like you'd be mean about it anyway, right? Ha ha... Okay, I'll tell you, but you CANNOT tell Cayne, okay? ") +sm.setParam(57) +sm.sendSay("#bWhatever it is, he'll never hear it from me. ") +sm.setParam(37) +sm.sendSay("#face1#I've only left Afinas headquarters a few times in my whole life. ") +sm.sendSay("#face1#This right now is the biggest adventure I've ever had. To be fair, it's a pretty big one. ") +sm.sendSay("#face1#My dream, then, is to travel to a brand new world! ") +sm.sendSay("#face2#I want to find a place far from the world we know, a land that knows nothing of us, and live amongst its people. I want to share my knowledge for the good of all. What do you think of that? ") +sm.setParam(57) +sm.sendSay("#bI think that's a great idea! But... why is it a secret from Cayne? ") +sm.setParam(37) +sm.sendSay("#face1#Because if things are perfect, both Cayne and Vivere are there with me. I want to share my dream with them, those that I hold dear... ") +sm.setParam(57) +sm.sendSay("#bWouldn't Cayne be happy to hear that? ") +sm.setParam(37) +sm.sendSay("#face1#Hmm... that could reach my father... so this needs to be a secret even to you, #h0#.") +res = sm.sendNext("#face1##h0#, do you perhaps... want to join us in Afinas? #b\r\n#L0# Do you think I should become an Afinas knight?#l\r\n#L1# Why?#l") +sm.sendNext("#face1#I admit, I expected that. Someone like you is certain to be in great demand, right #h0#? ") +res = sm.sendNext("#face1#I want to show you how much I appreciate what you've done. Think of it as a vacation! You can relax, rest up... Oh! And I can introduce you to Vivere, too. #b\r\n#L0# Thank you for the offer, but I have other commitments.#l\r\n#L1# Anytime, if you need me.#l") +sm.sendNext("#face2#Good! It's a promise, then. Once we get out of this mess, we're going back to Afinas together.") +sm.setParam(57) +sm.sendSay("#bOkay. It's getting late. You should get some sleep. ") +sm.setParam(37) +sm.sendSay("#face1#You're right, of course. But I fear... if we sleep here, will we still be alive in the morning? ") +sm.setParam(57) +sm.sendSay("#bOf course. Don't worry, just rest. ") +sm.setParam(37) +sm.sendSay("#face1#What about you, #h0#? ") +sm.setParam(57) +sm.sendSay("#bI'll be sleeping soon as well. We have a lot to do tomorrow. ") +sm.setParam(37) +sm.sendSay("#face1#Okay. ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("#face1#Don't worry, #h0#! We'll find that dear old lady. ") +sm.sendSay("#face1#The breath of Windsleep Forest is with her. ") +sm.sendSay("#face1#I had always wondered what that greeting meant, and now I finally know. ") +sm.sendSay("#face1#I must say, it feels as though the breath of Windsleep Forest is what led us here. ") +sm.setParam(57) +sm.sendSay("#bYou might be right. ") +sm.setParam(37) +sm.sendSay("#face1#So don't you worry. ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("#face1#All right then, off to sleep! ") +sm.sendSay("#face2#Good night, #h0#! ") +sm.setParam(57) +sm.sendSay("#bGood night, Alika. ") +sm.spawnNpc(9400580, 901, 401) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "sleep", -1) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.setParam(37) +sm.sendNext("#face5#Hmm... umm... ") +sm.sendSay("#face5#Where are you... going...? ") +sm.sendSay("#face5#Ugh.... agh... ") +sm.setParam(57) +sm.sendSay("#bShe must be having that same nightmare...") +sm.sendDelay(3000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64081, "dir=1") +sm.warp(867201603) diff --git a/scripts/field/enter_867201602.py b/scripts/field/enter_867201602.py new file mode 100755 index 0000000..8eedebc --- /dev/null +++ b/scripts/field/enter_867201602.py @@ -0,0 +1,39 @@ +# id 867201602 (Abrup Basin : Grim Vale Small Cave), field 867201602 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("q64080", False, 0, 0) +sm.spawnNpc(9400580, 1230, 470) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, 1360, 470) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.forcedFlip(True) +sm.moveNpcByTemplateId(9400580, True, 600, 100) +sm.sendDelay(3000) +sm.forcedMove(True, 400) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400595, True, 300, 80) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, let's camp here for the night. ") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, False, 100, 80) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Hmm... cozy. ") +sm.setParam(57) +sm.sendSay("#bYou must be hungry... I don't remember you eating today. ") +sm.sendSay("#bI'll go find us some food. Stay right here and, uh, scream if something happens. ") +sm.setParam(37) +sm.sendSay("#face0#Will do, #h0#. I'll start a fire while you're gone. ") +sm.setParam(57) +sm.sendSay("#bOkay, just... don't go too far. Stay around here. ") +sm.setParam(37) +sm.sendSay("#face1#Don't you worry.") +sm.createQuestWithQRValue(64080, "chk1=1;chk2=1;chk3=1") +sm.setMapTaggedObjectVisible("q64080", True, 0, 0) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_867201603.py b/scripts/field/enter_867201603.py new file mode 100755 index 0000000..9e770a4 --- /dev/null +++ b/scripts/field/enter_867201603.py @@ -0,0 +1,35 @@ +# id 867201603 (Abrup Basin : Grim Vale Small Cave), field 867201603 +sm.lockInGameUI(False, True) +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(9400580, -120, 480) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.forcedFlip(True) +sm.spawnNpc(9400595, -220, 480) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, False, 50, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400595, False, 50, 50) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1##h0#, are you up? ") +sm.sendSay("#face1#Good morning. ") +sm.setParam(57) +sm.sendSay("#bYou're up early. ") +sm.setParam(37) +sm.sendSay("#face2#Like you said, we have a lot to do today! We have to find that pen-pal of yours. ") +sm.lockInGameUI(False, True) +sm.sendSay("#face3#I talked too much last night, didn't I? I get a little chatty in the evenings...") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face2#But don't forget about that promise you made! I definitely won't!") +sm.completeQuestNoCheck(64081) diff --git a/scripts/field/enter_867201690.py b/scripts/field/enter_867201690.py new file mode 100755 index 0000000..84c5808 --- /dev/null +++ b/scripts/field/enter_867201690.py @@ -0,0 +1,67 @@ +# id 867201690 (Abrup Basin : Eyeful Treasure Trove), field 867201690 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, 50, 230) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400597, 130, 230) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.forcedInput(4) +sm.showNpcSpecialActionByTemplateId(9400597, "die", 0) +sm.showNpcSpecialActionByTemplateId(9400590, "die", 0) +sm.sendDelay(1000) +sm.sendDelay(1500) +sm.speechBalloon(True, 0, 0, "Aaaaargh!", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.forcedInput(0) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Whoa! What's going on? ", 3000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.moveNpcByTemplateId(9400597, False, 80, 50) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400590, False, 30, 40) +sm.sendDelay(2000) +sm.sendDelay(500) +sm.speechBalloon(True, 0, 0, "What's this?", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.flipNpcByTemplateId(9400597, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400597, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400597, True) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Treasure?!", 3000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#Aha! So this is where the Eyeful's been stashing all its treasure! ") +sm.sendSay("#face0#No wonder nobody's found it until now... That sneaky little thief! ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400597, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400597, True, 20, 50) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Gold watches... necklaces... ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Earrings! Silver rings! An... arrowhead? Heh, forget this. ") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 34647009, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#A cattle name tag... Eh? A cattle name tag?! ") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 0, 0, 0, 34647008, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#What was that? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Hmm... Why would this be here? ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#There's only one explanation. The monsters ate the cattle, and then this one brought the tag back to its nest! ") +sm.sendSay("#face0#And to think, all this time you've been blaming Kaptafel folk for stealing your livestock. ") +sm.sendSay("#face0#Been barking up the wrong tree, haven't you? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Why... I don't understand... ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#You owe us an apology, Chief! Right now! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#... ") +sm.createQuestWithQRValue(64122, "dir01=1") +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_867201700.py b/scripts/field/enter_867201700.py new file mode 100755 index 0000000..2451713 --- /dev/null +++ b/scripts/field/enter_867201700.py @@ -0,0 +1,68 @@ +# id 867201700 (Abrup Basin : Cutoff Forest Trail), field 867201700 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400580, -1120, 175) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400676, -890, 175) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400685, -600, 175) +sm.showNpcSpecialActionByTemplateId(9400685, "summon", 0) +sm.spawnNpc(9400642, 25, 175) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400685, 240, 175) +sm.showNpcSpecialActionByTemplateId(9400685, "summon", 0) +sm.spawnNpc(9400685, -730, 350) +sm.showNpcSpecialActionByTemplateId(9400685, "summon", 0) +sm.spawnNpc(9400642, -420, 350) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 15, 350) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 350, 350) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400642, -450, 445) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, 100, 445) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 580, 445) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 1230, 445) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400642, 1620, 445) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400676, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400676, "attack1", 0) +sm.sendDelay(700) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWe're just getting started... Be careful, Alika. ") +sm.zoomCamera(1000, 1000, 5000, 1220, 200) +sm.showNpcSpecialActionByTemplateId(9400685, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400674, "attack1", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400685, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(700) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(3000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face3#Goodness, that's quite the mob. I doubt we can just simply slip by. ") +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/1", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867201720.py b/scripts/field/enter_867201720.py new file mode 100755 index 0000000..9c44df0 --- /dev/null +++ b/scripts/field/enter_867201720.py @@ -0,0 +1,62 @@ +# id 867201720 (Abrup Basin : Jellyrash Trail), field 867201720 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400580, -1120, 175) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400674, -230, 445) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400642, 45, 445) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 305, 445) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, 780, 445) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400676, 1225, 445) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 1585, 445) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, -20, 190) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 340, 190) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, 560, 30) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 1060, 60) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400674, 1430, 190) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, 530, 305) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 1560, 360) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400674, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400674, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(700) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.moveNpcByTemplateId(9400580, False, 200, 200) +sm.sendDelay(2000) +sm.zoomCamera(1000, 1000, 3000, 1260, -195) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400674, "attack1", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400676, "attack1", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400676, "attack1", 0) +sm.sendDelay(700) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", 0) +sm.sendDelay(2000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/2", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867201740.py b/scripts/field/enter_867201740.py new file mode 100755 index 0000000..8771723 --- /dev/null +++ b/scripts/field/enter_867201740.py @@ -0,0 +1,6 @@ +# id 867201740 (Abrup Basin : Windsleep Forest Trap), field 867201740 +sm.showFieldEffect("monsterPark/stageEff/stage", 0) +sm.showFieldEffect("monsterPark/stageEff/number/3", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.warp(867201760) diff --git a/scripts/field/enter_867201760.py b/scripts/field/enter_867201760.py new file mode 100755 index 0000000..875e25a --- /dev/null +++ b/scripts/field/enter_867201760.py @@ -0,0 +1,35 @@ +# id 867201760 (Abrup Basin : Windsleep Forest Trap), field 867201760 +sm.completeQuestNoCheck(64083) +sm.showNpcSpecialActionByTemplateId(9400615, "summon", 0) +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.spawnNpc(9400580, 1280, 440) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.moveNpcByTemplateId(9400580, False, 290, 100) +sm.sendDelay(2500) +sm.forcedMove(False, 100) +sm.showNpcSpecialActionByTemplateId(9400615, "broken", -1) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Agh! ") +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.forcedMove(False, 200) +sm.setParam(57) +sm.sendNext("#bAlika? ") +sm.setParam(37) +sm.sendSay("#face5#Ahhh... ") +sm.sendSay("#face5#Ah! What in the world? I'm... I'm okay. ") +sm.setParam(57) +sm.sendSay("#bCan you climb up? ") +sm.sendDelay(2000) +sm.setParam(37) +sm.sendNext("#face5#Hmm... no... ") +sm.setParam(57) +sm.sendSay("#bWait up, let me find something to use as a rope! ") +sm.startQuest(64084) +sm.createQuestWithQRValue(64084, "") +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_867201800.py b/scripts/field/enter_867201800.py new file mode 100755 index 0000000..f91d43e --- /dev/null +++ b/scripts/field/enter_867201800.py @@ -0,0 +1,2 @@ +# id 867201800 (Abrup Basin : Cabin Front Porch), field 867201800 +sm.setMapTaggedObjectVisible("pt00", False, 0, 0) diff --git a/scripts/field/enter_867201801.py b/scripts/field/enter_867201801.py new file mode 100755 index 0000000..40e611d --- /dev/null +++ b/scripts/field/enter_867201801.py @@ -0,0 +1,12 @@ +# id 867201801 (Abrup Basin : Empty Cabin), field 867201801 +sm.lockInGameUI(False, True) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bThere's no one here. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#You're right. It looks like she left in a hurry, yet no signs of battle. ") +sm.sendSay("#face3#She must have fled to a safer place, right? ") +sm.setParam(57) +sm.sendSay("#bI hope so... ") diff --git a/scripts/field/enter_867201802.py b/scripts/field/enter_867201802.py new file mode 100755 index 0000000..a5aa266 --- /dev/null +++ b/scripts/field/enter_867201802.py @@ -0,0 +1,116 @@ +# id 867201802 (Abrup Basin : Cabin Front Porch), field 867201802 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(9400690, 1500, 440) +sm.showNpcSpecialActionByTemplateId(9400690, "summon", 0) +sm.spawnNpc(9400676, -350, 440) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -250, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, -150, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -50, 440) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 20, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 100, 440) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, 180, 440) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400675, 250, 440) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400674, 400, 440) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, 610, 440) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400641, -280, 500) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400675, -170, 500) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400641, -60, 500) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400667, 70, 500) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400672, 200, 500) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400674, 280, 500) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400675, 370, 500) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400666, 460, 500) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.spawnNpc(9400674, 550, 500) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400672, 660, 500) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400668, 730, 500) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400690, "attack1", -1) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400675, False, 200, 10) +sm.moveNpcByTemplateId(9400674, False, 200, 10) +sm.moveNpcByTemplateId(9400641, False, 200, 10) +sm.moveNpcByTemplateId(9400675, False, 200, 10) +sm.moveNpcByTemplateId(9400641, False, 200, 10) +sm.moveNpcByTemplateId(9400667, False, 200, 10) +sm.moveNpcByTemplateId(9400672, False, 200, 10) +sm.moveNpcByTemplateId(9400674, False, 200, 10) +sm.moveNpcByTemplateId(9400675, False, 200, 10) +sm.moveNpcByTemplateId(9400666, False, 200, 10) +sm.moveNpcByTemplateId(9400674, False, 200, 10) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400672, False, 200, 10) +sm.moveNpcByTemplateId(9400668, False, 200, 10) +sm.playSound("Sound/Mob.img/9402270/Attack4", 128) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bMy... this many... ") +sm.playSound("Sound/Mob.img/9402245/Attack2", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402247/Attack1", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402250/Attack5", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402247/Attack2", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402270/Attack7", 128) +sm.playSound("Sound/Mob.img/9402250/Attack4", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402252/Attack2", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402246/skill1", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402241/Attack1", 100) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5##h0#... ") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#b(Giant Shadow? So, it wasn't just a trick of the light?)") +sm.createQuestWithQRValue(64020, "chk1=1;chk2=1;chk3=1;chk4=1") +sm.completeQuestNoCheck(64020) +sm.playSound("Sound/Mob.img/9402250/Attack5", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402247/Attack2", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402250/Attack4", 100) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400690, "attack1", -1) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64085, "dir=2") +sm.warp(867201801) diff --git a/scripts/field/enter_867201803.py b/scripts/field/enter_867201803.py new file mode 100755 index 0000000..d1c173b --- /dev/null +++ b/scripts/field/enter_867201803.py @@ -0,0 +1,48 @@ +# id 867201803 (Abrup Basin : Cabin Front Porch), field 867201803 +sm.setMapTaggedObjectVisible("guide", False, 0, 0) +sm.createQuestWithQRValue(64086, "dir01=1") +sm.lockInGameUI(True, False) +sm.spawnNpc(9400667, 486, 440) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400580, 170, 440) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.startQuest(64162) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.showNpcSpecialActionByTemplateId(9400580, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400667, "jumpattack", 0) +sm.sendDelay(2500) +sm.resetNpcSpecialActionByTemplateId(9400667) +sm.sendDelay(250) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, be careful! ") +sm.moveNpcByTemplateId(9400667, True, 100, 50) +sm.sendDelay(250) +sm.forcedMove(False, 150) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 100, 150) +sm.sendDelay(500) +sm.forcedAction(5, 0) +sm.moveNpcByTemplateId(9400667, False, 50, 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402250/Attack7", 100) +sm.showNpcSpecialActionByTemplateId(9400667, "howl", 0) +sm.sendDelay(500) +sm.sendNext("#bAh! It's a tough one. ") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33920405, 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face3#The monsters are getting away! ") +sm.sendSay("#face0##bWe need to do something! ") +sm.sendSay("#face3##bLet's get up in the trees first! ") +sm.sendDelay(250) +sm.setMapTaggedObjectVisible("guide", True, 0, 0) +sm.sendDelay(3000) +sm.resetNpcSpecialActionByTemplateId(9400667) +sm.moveNpcByTemplateId(9400667, True, 300, 50) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_867201810.py b/scripts/field/enter_867201810.py new file mode 100755 index 0000000..d6322c7 --- /dev/null +++ b/scripts/field/enter_867201810.py @@ -0,0 +1,25 @@ +# id 867201810 (Abrup Basin : Cabin Front Porch), field 867201810 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400667, 544, 190) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400580, 850, 140) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.forcedFlip(True) +sm.showNpcSpecialActionByTemplateId(9400667, "jumpattack", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, get back! ") +sm.playSound("Sound/Mob.img/9402250/Attack7", 100) +sm.showNpcSpecialActionByTemplateId(9400667, "howl", 0) +sm.zoomCamera(2000, 2000, 3000, 540, 150) +sm.sendDelay(2000) +sm.sendDelay(4000) +sm.createFieldTextEffect("#r#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26#Frostflail Yeti#k", 100, 2000, 4, 80, 200, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs16#Mutated Yeti", 100, 1500, 4, 80, 250, 1, 4, 0, 0, 0) +sm.sendDelay(1000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867201803) diff --git a/scripts/field/enter_867201820.py b/scripts/field/enter_867201820.py new file mode 100755 index 0000000..c42e690 --- /dev/null +++ b/scripts/field/enter_867201820.py @@ -0,0 +1,12 @@ +# id 867201820 (Abrup Basin : Windsleep Forest Treetops), field 867201820 +sm.setMapTaggedObjectVisible("alika01", False, 0, 0) +sm.setMapTaggedObjectVisible("alika02", False, 0, 0) +sm.setMapTaggedObjectVisible("up00", False, 0, 0) +sm.startQuest(64088) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, do you think you can jump over? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#I'll try! ") diff --git a/scripts/field/enter_867201821.py b/scripts/field/enter_867201821.py new file mode 100755 index 0000000..3a8a2be --- /dev/null +++ b/scripts/field/enter_867201821.py @@ -0,0 +1,4 @@ +# id 867201821 (Abrup Basin : Windsleep Forest Treetops), field 867201821 +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.setMapTaggedObjectVisible("portal", False, 0, 0) diff --git a/scripts/field/enter_867201822.py b/scripts/field/enter_867201822.py new file mode 100755 index 0000000..05f7361 --- /dev/null +++ b/scripts/field/enter_867201822.py @@ -0,0 +1,48 @@ +# id 867201822 (Abrup Basin : Windsleep Forest Heights), field 867201822 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.spawnNpc(9400642, 950, -20) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400666, 720, -20) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.spawnNpc(9400675, 540, -20) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400674, 460, -20) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, 300, -20) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 200, -20) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400672, 150, -20) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400674, 80, -20) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400668, -100, -20) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(250) +sm.showNpcSpecialActionByTemplateId(9400666, "flame", 0) +sm.moveNpcByTemplateId(9400675, False, 50, 50) +sm.moveNpcByTemplateId(9400676, False, 50, 50) +sm.sendDelay(1500) +sm.showNpcSpecialActionByTemplateId(9400642, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400674, "skill1", 0) +sm.sendDelay(1500) +sm.showNpcSpecialActionByTemplateId(9400675, "skill1", 0) +sm.showNpcSpecialActionByTemplateId(9400674, "skill1", 0) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(9400666, "flame", 0) +sm.moveNpcByTemplateId(9400674, False, 50, 50) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWelp, we gotta stop these monsters now. ") +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64088, "coll1=1;coll2=1;coll3=1;coll4=1;coll5=1;chk1=1;chk2=1") +sm.warp(867201821) diff --git a/scripts/field/enter_867201900.py b/scripts/field/enter_867201900.py new file mode 100755 index 0000000..9b7e9b9 --- /dev/null +++ b/scripts/field/enter_867201900.py @@ -0,0 +1,3 @@ +# id 867201900 (Abrup Basin : White Birch Forest), field 867201900 +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_867201980.py b/scripts/field/enter_867201980.py new file mode 100755 index 0000000..f3dfedc --- /dev/null +++ b/scripts/field/enter_867201980.py @@ -0,0 +1,150 @@ +# id 867201980 (Abrup Basin : Icy Grim Vale), field 867201980 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400676, 3900, 250) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 3820, 250) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 3750, 250) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, 3650, 250) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 3580, 250) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 3500, 250) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, 3420, 250) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400675, 3350, 250) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400674, 3210, 250) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.moveNpcByTemplateId(9400676, True, 500, 10) +sm.moveNpcByTemplateId(9400642, True, 500, 10) +sm.moveNpcByTemplateId(9400642, True, 500, 10) +sm.moveNpcByTemplateId(9400676, True, 500, 10) +sm.moveNpcByTemplateId(9400642, True, 500, 10) +sm.moveNpcByTemplateId(9400642, True, 500, 10) +sm.moveNpcByTemplateId(9400676, True, 500, 10) +sm.moveNpcByTemplateId(9400675, True, 500, 10) +sm.moveNpcByTemplateId(9400674, True, 500, 10) +sm.forcedMove(True, 300) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/monsterfootstep_loop", 128) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, keep looking ahead! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Ahhhh! ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400676, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400676, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400676, True, 500, 20) +sm.moveNpcByTemplateId(9400675, True, 500, 20) +sm.moveNpcByTemplateId(9400674, True, 500, 20) +sm.forcedMove(True, 600) +sm.sendDelay(2500) +sm.sendNext("#face5#Gasp... I-I'm... so tired! ") +sm.setParam(57) +sm.sendSay("#bKeep it up just a bit longer! ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400676, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400676, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400642, True, 500, 20) +sm.moveNpcByTemplateId(9400676, True, 500, 20) +sm.moveNpcByTemplateId(9400675, True, 500, 20) +sm.moveNpcByTemplateId(9400674, True, 500, 20) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(True, 500) +sm.sendDelay(2500) +sm.setParam(37) +sm.sendNext("#face5#Gasp... I can't... anymore... ") +sm.setParam(57) +sm.sendSay("#bAlika, we're almost there! You can do it! ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendNext("#bAlika, Alika! Remember the thin ice from yesterday, when I fell in the water? ") +sm.sendSay("#bThere must be a spot like that here, too! We can buy some time if we lure them into that spot! ") +sm.setParam(37) +sm.sendSay("#face5#Gasp... gasp... ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.forcedMove(True, 100) +sm.sendDelay(250) +sm.sendDelay(1000) +sm.forcedAction(13, 0) +sm.sendDelay(250) +sm.forcedMove(True, 100) +sm.sendDelay(250) +sm.sendDelay(1000) +sm.sendDelay(500) +sm.sendNext("#face0#Haaaah...! ") +sm.setParam(57) +sm.sendSay("#bWas this all for nothing?! ") +sm.forcedAction(13, 0) +sm.sendDelay(250) +sm.forcedMove(True, 100) +sm.sendDelay(250) +sm.sendDelay(1000) +sm.sendNext("#bNo... please! ") +sm.forcedAction(13, 0) +sm.sendDelay(250) +sm.forcedMove(True, 150) +sm.sendDelay(250) +sm.sendDelay(2000) +sm.sendDelay(3000) +sm.setParam(37) +sm.sendNext("#face5#Gasp... ") +sm.sendDelay(5000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/avalanche", 60) +sm.sendDelay(10000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/avalanche", 128) +sm.sendNext("#face5#Gasp... Huh? ") +sm.setParam(56) +sm.sendSay("#bWhat... just happened? ") +sm.sendDelay(5000) +sm.sendNext("#bWhaaa...? Did I do this?! ") +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/scene2/d1","0","juliet") +sm.sendDelay(7500) +sm.playSound("Sound/Mob.img/9402270/Attack7", 128) +sm.sendDelay(3500) +sm.spawnNpc(9400690, 1600, 260) +sm.showNpcSpecialActionByTemplateId(9400690, "summon", 0) +sm.offSpineScreen("juliet", 0, "", 0) +sm.setParam(57) +sm.sendNext("#bRun!! ") +sm.moveNpcByTemplateId(9400690, True, 30, 100) +sm.sendDelay(500) +sm.spawnNpc(9400595, 1190, 440) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400595) # Pete +sm.sendNext("#face0#Rawwwwrrrrrrr!! ") +sm.moveNpcByTemplateId(9400595, True, 2000, 300) +sm.sendDelay(1000) +sm.forcedInput(1) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64090) +sm.startQuest(64091) +sm.warp(867202000) diff --git a/scripts/field/enter_867202000.py b/scripts/field/enter_867202000.py new file mode 100755 index 0000000..df7e014 --- /dev/null +++ b/scripts/field/enter_867202000.py @@ -0,0 +1,3 @@ +# id 867202000 (Abrup Basin : Dangerous Canyon), field 867202000 +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867202050.py b/scripts/field/enter_867202050.py new file mode 100755 index 0000000..521ecd1 --- /dev/null +++ b/scripts/field/enter_867202050.py @@ -0,0 +1,31 @@ +# id 867202050 (Abrup Basin : Grim Vale Cliffs), field 867202050 +sm.lockInGameUI(True, False) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.forcedMove(True, 980) +sm.sendDelay(5000) +sm.spawnNpc(9400690, 2800, -100) +sm.showNpcSpecialActionByTemplateId(9400690, "summon", 0) +sm.sendDelay(300) +sm.playSound("Sound/Mob.img/9402270/Attack2", 128) +sm.forcedFlip(True) +sm.sendDelay(300) +sm.sendDelay(1000) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.sendDelay(2000) +sm.moveNpcByTemplateId(9400690, True, 550, 100) +sm.sendDelay(3000) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.playSound("Sound/Mob.img/9402270/Attack7", 128) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(900) +sm.forcedMove(True, 100) +sm.sendDelay(1500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867202051) diff --git a/scripts/field/enter_867202051.py b/scripts/field/enter_867202051.py new file mode 100755 index 0000000..c327dba --- /dev/null +++ b/scripts/field/enter_867202051.py @@ -0,0 +1,30 @@ +# id 867202051 (Abrup Basin : Grim Vale Cliffs), field 867202051 +sm.lockInGameUI(True, False) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face2#Wow! Amazing, Pete! ") +sm.setInnerOverrideSpeakerTemplateID(9400595) # Pete +sm.sendSay("#face0#Rrrrrawrr! ") +sm.forcedMove(False, 400) +sm.sendDelay(1500) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.sendDelay(2000) +sm.forcedMove(False, 100) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.forcedMove(True, 300) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "#fs15##bAhhhhh!", 3000, 1, 0, 0, 0, 4, 0, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1##h0#, to the right! ") +sm.forcedMove(False, 500) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "#fs15#Aghh! ", 3000, 1, 0, 0, 0, 4, 9400586, 4878499) +sm.forcedMove(True, 200) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "#fs15#Rawrrr!!", 3000, 1, 0, 0, 0, 4, 9400586, 4878499) +sm.lockInGameUI(False, True) +sm.warp(867202052) diff --git a/scripts/field/enter_867202052.py b/scripts/field/enter_867202052.py new file mode 100755 index 0000000..4f80836 --- /dev/null +++ b/scripts/field/enter_867202052.py @@ -0,0 +1,38 @@ +# id 867202052 (Abrup Basin : Grim Vale Cliffs), field 867202052 +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.setMapTaggedObjectVisible("kodol01", False, 0, 0) +sm.setMapTaggedObjectVisible("kodol02", False, 0, 0) +sm.playSound("Sound/Mob.img/9402270/Attack2", 128) +sm.sendDelay(600) +sm.sendDelay(2000) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.setMapTaggedObjectVisible("kodol01", True, 0, 0) +sm.setMapTaggedObjectVisible("kodol02", True, 0, 0) +sm.spineScreen(False, True, True, 0, "Map/EffectPL.img/HiddenTales/Direction/Alert10s/time_red_effect_10sec","animation","spineEffect2") +sm.forcedMove(True, 100) +sm.forcedInput(5) +sm.spawnNpc(9400690, -650, 130) +sm.showNpcSpecialActionByTemplateId(9400690, "summon", 0) +sm.playSound("Sound/Mob.img/9402270/Attack1", 128) +sm.showNpcSpecialActionByTemplateId(9400690, "hand_grab2", -1) +sm.forcedAction(5, 0) +sm.resetNpcSpecialActionByTemplateId(9400690) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400690, "hand_grabbing2", 0) +sm.playSound("Sound/Mob.img/9402279/Attack10", 128) +sm.sendDelay(900) +sm.forcedInput(4) +sm.sendDelay(900) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.blind(True, 255, 0, 0, 0, 3000) +sm.sendDelay(3000) +sm.moveCamera(True, 0, 0, 0) +sm.offSpineScreen("spineEffect2", 0, "", 0) +sm.lockInGameUI(False, True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0##h0#!!") +sm.warp(867202053) diff --git a/scripts/field/enter_867202053.py b/scripts/field/enter_867202053.py new file mode 100755 index 0000000..687deca --- /dev/null +++ b/scripts/field/enter_867202053.py @@ -0,0 +1,49 @@ +# id 867202053 (Abrup Basin : Grim Vale Cliffs), field 867202053 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 255) +sm.setMapTaggedObjectVisible("ice01", True, 0, 0) +sm.setMapTaggedObjectVisible("ice02", True, 0, 0) +sm.setMapTaggedObjectVisible("ice03", True, 0, 0) +sm.spawnNpc(9400580, 120, -940) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, 330, -940) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.zoomCamera(6500, 1000, 6500, -30, 280) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 250) +sm.sendDelay(300) +sm.forcedMove(True, 50) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400595, True, 30, 100) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400580, False, 30, 100) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/plop", 128) +sm.sendDelay(500) +sm.hideUser(True) +sm.sendDelay(500) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/plop", 128) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/plop", 128) +sm.sendDelay(100) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(2500) +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/scene1/d0","0","juliet") +sm.sendDelay(5000) +sm.offSpineScreen("juliet", 1, "", 3000) +sm.sendDelay(4000) +sm.sendDelay(3000) +sm.lockInGameUI(False, True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400595) # Pete +sm.sendNext("#face0#Rawwwwrrrrrrr!!") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.completeQuestNoCheck(64092) +sm.completeQuestNoCheck(64052) +sm.createQuestWithQRValue(64151, "cnt=1") +sm.warp(867202101) diff --git a/scripts/field/enter_867202101.py b/scripts/field/enter_867202101.py new file mode 100755 index 0000000..3b5e347 --- /dev/null +++ b/scripts/field/enter_867202101.py @@ -0,0 +1,6 @@ +# id 867202101 (Abrup Basin : Rolling Caravan), field 867202101 +sm.lockInGameUI(True, False) +sm.changeBGM("BgmPL2/TheWaytoHope_gloomy_MR", 0, 0) +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/part2_0/op4","0","part2Op01") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) diff --git a/scripts/field/enter_867202200.py b/scripts/field/enter_867202200.py new file mode 100755 index 0000000..8238459 --- /dev/null +++ b/scripts/field/enter_867202200.py @@ -0,0 +1,5 @@ +# id 867202200 (Abrup Basin : Skuas Entrance), field 867202200 +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("deffence01", True, 0, 0) +sm.setMapTaggedObjectVisible("deffence02", False, 0, 0) +sm.setMapTaggedObjectVisible("deffence03", False, 0, 0) diff --git a/scripts/field/enter_867202201.py b/scripts/field/enter_867202201.py new file mode 100755 index 0000000..48eaf51 --- /dev/null +++ b/scripts/field/enter_867202201.py @@ -0,0 +1,43 @@ +# id 867202201 (Abrup Basin : Skuas Entrance), field 867202201 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("door", False, 0, 0) +sm.spawnNpc(9400581, -1100, 80) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400587, -1150, 80) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.startQuest(64163) +sm.spawnNpc(9400597, -1200, 80) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400598, -1250, 80) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400591, -1300, 80) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400580, -1600, 80) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, -1650, 80) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, -1850, 80) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400584, -1900, 80) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.spawnNpc(9400588, -1950, 80) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400589, -1999, 80) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400591, False, 500, 160) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("W-we made it! We made it! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Hurry! Thorson, go on ahead and tell them to open their gates! ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay(" M-me? ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#So... this is Skuas?") +sm.sendDelay(1000) +sm.setMapTaggedObjectVisible("door", True, 0, 0) +sm.sendDelay(3000) diff --git a/scripts/field/enter_867202203.py b/scripts/field/enter_867202203.py new file mode 100755 index 0000000..0e784c5 --- /dev/null +++ b/scripts/field/enter_867202203.py @@ -0,0 +1,36 @@ +# id 867202203 (Abrup Basin : Skuas Entrance), field 867202203 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400635, -1300, 80) +sm.showNpcSpecialActionByTemplateId(9400635, "summon", 0) +sm.spawnNpc(9400629, -1450, 80) +sm.showNpcSpecialActionByTemplateId(9400629, "summon", 0) +sm.spawnNpc(9400623, -1400, 80) +sm.showNpcSpecialActionByTemplateId(9400623, "summon", 0) +sm.spawnNpc(9400672, -1500, 80) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400674, -1600, 80) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, -1700, 80) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -1800, 80) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.moveNpcByTemplateId(9400635, False, 1500, 200) +sm.moveNpcByTemplateId(9400629, False, 1500, 200) +sm.moveNpcByTemplateId(9400623, False, 1500, 200) +sm.moveNpcByTemplateId(9400672, False, 1500, 170) +sm.moveNpcByTemplateId(9400674, False, 1500, 170) +sm.moveNpcByTemplateId(9400676, False, 1500, 170) +sm.moveNpcByTemplateId(9400642, False, 1500, 170) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face0#...! ") +sm.setParam(57) +sm.sendSay("#b...! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Run, faster! ") +sm.lockInGameUI(False, True) +sm.warp(867202210) diff --git a/scripts/field/enter_867202210.py b/scripts/field/enter_867202210.py new file mode 100755 index 0000000..e6434e4 --- /dev/null +++ b/scripts/field/enter_867202210.py @@ -0,0 +1,5 @@ +# id 867202210 (Abrup Basin : Skuas Entrance), field 867202210 +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.completeQuestNoCheck(64135) +sm.warp(867202314) diff --git a/scripts/field/enter_867202230.py b/scripts/field/enter_867202230.py new file mode 100755 index 0000000..fa8ce3c --- /dev/null +++ b/scripts/field/enter_867202230.py @@ -0,0 +1,96 @@ +# id 867202230 (Abrup Basin : Skuas Entrance), field 867202230 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedFlip(True) +sm.spawnNpc(9400582, 2930, 0) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400602, 3000, 0) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.spawnNpc(9400580, 3170, -100) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400581, 2247, 108) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400583, 2247, 108) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400587, 2247, 108) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400590, 2247, 108) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400592, 2247, 108) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400603, 2247, 108) +sm.showNpcSpecialActionByTemplateId(9400603, "summon", 0) +sm.spawnNpc(9400604, 2247, 108) +sm.showNpcSpecialActionByTemplateId(9400604, "summon", 0) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT3/horn2", 128) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendNext("T-they're here! We're under attack! ") +sm.sendSay("Monsters! ") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(15000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#...And so it begins. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Stand fast, everyone! D-don't let fear make you weak. ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#Just like we practiced! Just like we practiced! ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#So much for those reinforcements... I suppose we'll have to handle this ourselves. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#...Alika, stay by my side. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Stay safe, everyone... Please... ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face2#Julieta... ") +sm.setParam(57) +sm.sendSay("#bLet's make this the last battle against these beasts! ") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendNext("#bRemember, we have to protect the young and wounded taking shelter in the castle. ") +sm.sendSay("#bEveryone who can fight must rally outside the castle! ") +sm.sendSay("#bGillie, please lead the Snowfield Archers with Chief Kan. ") +sm.sendSay("#bVice Captain Butler, I'll leave the catapult to you. ") +sm.sendSay("#bAlika! I need you to help the miners plant those land mines along the flanks. ") +sm.sendSay("#bEveryone, fight hard and watch your backs! ") +sm.sendDelay(2000) +sm.setParam(37) +sm.sendNext("#face2##h0#, I promise I'll do my part to hold them back, no matter what it takes. Believe in me! ") +sm.completeQuestNoCheck(64138) +sm.startQuest(64139) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64001, "") +sm.createQuestWithQRValue(64002, "") +sm.createQuestWithQRValue(64003, "") +sm.createQuestWithQRValue(64004, "") +sm.createQuestWithQRValue(64001, "stage=0") +sm.createQuestWithQRValue(64001, "stage=0;enemy=000000") +sm.createQuestWithQRValue(64001, "stage=0;enemy=000000;companion=000000000") +sm.createQuestWithQRValue(64001, "man=720;stage=0;enemy=000000;companion=000000000") +sm.createQuestWithQRValue(64001, "man=720;stage=0;enemy=000000;seq=0;companion=000000000") +sm.createQuestWithQRValue(64001, "man=720;stage=0;enemy=000000;seq=0;mine=0;companion=000000000") +sm.createQuestWithQRValue(64002, "stage=0") +sm.createQuestWithQRValue(64002, "stage=0;enemy=0") +sm.createQuestWithQRValue(64002, "stage=0;enemy=0;companion=0") +sm.createQuestWithQRValue(64002, "man=0;stage=0;enemy=0;companion=0") +sm.createQuestWithQRValue(64003, "enemy0=0") +sm.createQuestWithQRValue(64003, "enemy0=0;companion0=0") +sm.createQuestWithQRValue(64003, "enemy0=0;enemy1=0;companion0=0") +sm.createQuestWithQRValue(64003, "enemy0=0;enemy1=0;companion0=0;companion1=0") +sm.createQuestWithQRValue(64002, "man=0;stage=0;enemy=0;man0=0;companion=0") +sm.createQuestWithQRValue(64002, "man=0;stage=0;enemy=0;man0=0;man1=0;companion=0") +sm.createQuestWithQRValue(64004, "0=1") +sm.createQuestWithQRValue(64004, "0=1;1=1") +sm.createQuestWithQRValue(64004, "0=1;1=1;2=1") +sm.createQuestWithQRValue(64004, "0=1;1=1;2=1;3=1") +sm.createQuestWithQRValue(64004, "0=1;1=1;2=1;3=1;4=1") +sm.createQuestWithQRValue(64004, "0=1;1=1;2=1;3=1;4=1;5=1") +sm.createQuestWithQRValue(64004, "0=1;1=1;2=1;3=1;4=1;5=1;6=1") +sm.createQuestWithQRValue(64001, "man=720;stage=0;enemy=000000;seq=0;mine=0;companion=708435216") +sm.createQuestWithQRValue(64001, "man=720;stage=0;enemy=104253;seq=0;mine=0;companion=708435216") +sm.warp(867233050) diff --git a/scripts/field/enter_867202290.py b/scripts/field/enter_867202290.py new file mode 100755 index 0000000..ed9cab8 --- /dev/null +++ b/scripts/field/enter_867202290.py @@ -0,0 +1,112 @@ +# id 867202290 (Abrup Basin : Skuas Entrance), field 867202290 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, 5180, 1160) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400581, 4995, 1160) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400582, 4920, 1160) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, 4862, 1160) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400584, 4810, 1160) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.spawnNpc(9400620, 4740, 1160) +sm.showNpcSpecialActionByTemplateId(9400620, "summon", 0) +sm.spawnNpc(9400621, 4680, 1160) +sm.showNpcSpecialActionByTemplateId(9400621, "summon", 0) +sm.spawnNpc(9400622, 4620, 1160) +sm.showNpcSpecialActionByTemplateId(9400622, "summon", 0) +sm.spawnNpc(9400623, 4560, 1160) +sm.showNpcSpecialActionByTemplateId(9400623, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face3#I do wish I could stay to see the town restored, but...") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("No, child. You've already done so much for us. Go.") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face3#I'll send more forces and relief supplies when I get back. I know it will be tough, but be strong.") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Thank you. I don't think I can ever repay Afinas for such kindness...") +sm.sendSay("#face0#And #h0#, you are one of the most remarkable people I've ever met. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ahem, you should know, you're welcome in my town whenever you like. I'll have a warm bed and a right feast ready for you anytime. You're like family now, you are!") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#That's right. Please come visit us anytime you're near Abrup.") +sm.setParam(57) +sm.sendSay("#bI certainly will. I'll never forget our time together, friends. Thank you.") +sm.sendSay("#bI hope there is only peace and happiness in Abrup's future.") +sm.setParam(37) +sm.sendSay("#face0#We all still carry the weight of our families disappearing and our town being razed. But we have the hope we need to keep moving forward.") +sm.sendSay("#face0#We won't give up. We'll be strong. Our town will rise again, and our loved ones will return in time.") +sm.sendSay("#face0#Thanks to #h0#, Scholar Alika, and the Knights of Afinas, we have the strength to carry on.") +sm.sendSay("#face0#From the bottom of my heart, thank you. We will never forget what you've done for us.") +sm.sendDelay(3000) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Thank you, thank you.", 2000, 0, 0, 0, 0, 4, 9400589, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Sniff... I'll never forget. ", 2000, 0, 0, 0, 0, 4, 9400592, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Thank you!", 2000, 0, 0, 0, 0, 4, 9400598, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Thank you, for everything...", 2000, 0, 0, 0, 0, 4, 9400601, 4878499) +sm.sendDelay(2000) +sm.startQuest(64163) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#b(Where are Einar and Sanaan?)") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#The sun's starting to set. We should head out if we're going to make it home before dark.") +sm.flipNpcByTemplateId(9400581, True) +sm.sendNext("#face0#Afinas Dispatch, move out!") +sm.flipNpcByTemplateId(9400623, True) +sm.flipNpcByTemplateId(9400622, True) +sm.flipNpcByTemplateId(9400621, True) +sm.flipNpcByTemplateId(9400620, True) +sm.flipNpcByTemplateId(9400583, True) +sm.flipNpcByTemplateId(9400584, True) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400623, True, 500, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400622, True, 500, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400621, True, 500, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400620, True, 500, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400583, True, 500, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400584, True, 500, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, True, 500, 80) +sm.sendDelay(1500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(500) +sm.forcedMove(True, 500) +sm.moveNpcByTemplateId(9400580, True, 500, 70) +sm.blind(True, 255, 0, 0, 0, 5000) +sm.sendDelay(5000) +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1##h0#, I'm grateful for what you've done. Unfortunately, I don't think this will be the last of our troubles, but I'm sure I'll be safe as long as I'm with you. ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face1#I'm so glad I met you here! ") +sm.sendSay("#face2#I look forward to our future adventures together, #h0#! ") +sm.createQuestWithQRValue(49010, "QET=20190623154228") +sm.createQuestWithQRValue(49000, "count=1;Quest=49010;day=152844;QET=20190623145525;state=1") +sm.createQuestWithQRValue(49000, "count=1;Quest=49010;day=152844;QET=20190623145525;state=2") +sm.createQuestWithQRValue(49000, "count=1;Quest=49010;day=152844;QET=20190623151228;state=2") +sm.createQuestWithQRValue(49010, "QET=20190623154228") +sm.createQuestWithQRValue(49010, "QET=20190623154228") +sm.startQuest(49010) +sm.completeQuestNoCheck(64145) +sm.completeQuestNoCheck(64053) +sm.createQuestWithQRValue(64152, "cnt=1") +sm.createQuestWithQRValue(500486, "EP1=2") +sm.changeBGM("Bgm00.img/Silence", 0, 0) diff --git a/scripts/field/enter_867202300.py b/scripts/field/enter_867202300.py new file mode 100755 index 0000000..a211d91 --- /dev/null +++ b/scripts/field/enter_867202300.py @@ -0,0 +1,31 @@ +# id 867202300 (Abrup Basin : Skuas), field 867202300 +sm.lockInGameUI(False, True) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400589, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400592, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.startQuest(64161) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Whoa, why does Ullan look so upset?) ") +sm.sendSay("#b(Has she been like this since she met Sanaan?)") +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400600, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400604, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400620, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400621, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400622, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400623, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400623, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400585, "attack1", -1) diff --git a/scripts/field/enter_867202301.py b/scripts/field/enter_867202301.py new file mode 100755 index 0000000..a336f00 --- /dev/null +++ b/scripts/field/enter_867202301.py @@ -0,0 +1,45 @@ +# id 867202301 (Abrup Basin : Skuas), field 867202301 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400581, -750, 80) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.startQuest(64163) +sm.spawnNpc(9400587, -800, 80) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400597, -850, 80) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400580, -900, 80) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, -950, 80) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, -1050, 80) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400584, -1100, 80) +sm.showNpcSpecialActionByTemplateId(9400584, "summon", 0) +sm.spawnNpc(9400588, -1150, 80) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400589, -1200, 80) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400598, -1250, 80) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400591, -1300, 80) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400596, -1350, 80) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400585, -1400, 80) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -1450, 80) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -1500, 80) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -1550, 80) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -1600, 80) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400600, -200, 80) +sm.showNpcSpecialActionByTemplateId(9400600, "summon", 0) +sm.spawnNpc(9400603, -150, 80) +sm.showNpcSpecialActionByTemplateId(9400603, "summon", 0) +sm.spawnNpc(9400603, -100, 80) +sm.showNpcSpecialActionByTemplateId(9400603, "summon", 0) +sm.sendDelay(2000) +sm.sendDelay(8000) diff --git a/scripts/field/enter_867202302.py b/scripts/field/enter_867202302.py new file mode 100755 index 0000000..96bcceb --- /dev/null +++ b/scripts/field/enter_867202302.py @@ -0,0 +1,15 @@ +# id 867202302 (Abrup Basin : Skuas), field 867202302 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, -80, -118) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400586, 200, -180) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400587, -185, -75) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400588, -240, -75) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400597, -145, 85) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.startQuest(64167) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) diff --git a/scripts/field/enter_867202303.py b/scripts/field/enter_867202303.py new file mode 100755 index 0000000..18d440b --- /dev/null +++ b/scripts/field/enter_867202303.py @@ -0,0 +1,107 @@ +# id 867202303 (Abrup Basin : Skuas), field 867202303 +sm.lockInGameUI(True, False) +sm.createQuestWithQRValue(18790, "mod=30894647101;lastTime=190622202836;damage=4590864058308;coin=0") +sm.createQuestWithQRValue(18098, "lastTime=190623133603;coin=35") +sm.createQuestWithQRValue(18098, "lastTime=190623133603;coin=39") +sm.spawnNpc(9400592, -565, -75) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.startQuest(64167) +sm.spawnNpc(9400596, -620, -75) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400589, 150, -180) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400635, 240, -180) +sm.showNpcSpecialActionByTemplateId(9400635, "summon", 0) +sm.spawnNpc(9400636, 303, -180) +sm.showNpcSpecialActionByTemplateId(9400636, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#What is your next move? ") +sm.setParam(57) +sm.sendSay("#bAs we discussed before, we should block the path to the castle and repair the walls as best we can. ") +sm.setParam(37) +sm.sendSay("#face0#Good. As for the roadblock... ") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400589, True, 220, 80) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#We've got plenty of options for those all around us. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Wood! ") +sm.setParam(57) +sm.sendSay("#bWood! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#That's my specialty. ") +sm.setParam(57) +sm.sendSay("#bI'd feel better about this if you came with us, Peytour. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Good, then I'll leave you to it. ") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400592, False, 50, 30) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#...I-I'm good with an axe too! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#That's true, I recall you helping me with some woodcutting before. ") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400596, False, 50, 30) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendNext("I'm coming too! You'll need someone to watch your backs. ") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400635, True, 100, 70) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendNext("I know this forest well, so I'll lead the way! ") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#With such a large party, there should be nothing to worry about. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Going back to the forest? Are you out of your minds?!") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("... ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400636, False, 30, 30) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendNext("I... I should get back to guarding the wall...") +sm.setParam(57) +sm.sendSay("#bWell, that's important too. Thanks for your help, everyone. ") +sm.sendSay("#bWith so many people helping us, we'll be done in a flash! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Good. Get to it, then. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#You're not coming with us, Vice Captain Butler? ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#I have an urgent matter to attend to. You have all the help you need already, I'd say. ") +sm.setParam(57) +sm.sendSay("#bCayne, we have enough people. Let's be on our way. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Come back safe, #h0#. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#...I need to stay with Alika, so I won't be able to help you. I'm sorry, #h0#. ") +sm.setParam(57) +sm.sendSay("#bNo, don't worry about it. That's your job, Cayne. ") +sm.setParam(37) +sm.sendSay("#face0#So you're going out to catch an Eyeful in a hollow tree, right? ") +sm.sendSay("#face1#...There was a reason they became thieves, huh? ") +sm.setParam(57) +sm.sendSay("#bWhat? ") +sm.setParam(37) +sm.sendSay("#face0#Never mind. Just be careful out there. ") +sm.setParam(57) +sm.sendSay("#bRight, let's go! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendSay("Follow me, please! ") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.startQuest(64107) +sm.warp(867202600) diff --git a/scripts/field/enter_867202304.py b/scripts/field/enter_867202304.py new file mode 100755 index 0000000..138c0fd --- /dev/null +++ b/scripts/field/enter_867202304.py @@ -0,0 +1,112 @@ +# id 867202304 (Abrup Basin : Skuas), field 867202304 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, -750, 65) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400589, -900, 65) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400592, -980, 65) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400590, False, 200, 100) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Where are you going, Slaka? This wood is for building barricades, and we need all the help we can get. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400590, True) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#...What, I have to help with that? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Who else? Get over here. ") +sm.moveNpcByTemplateId(9400590, True, 360, 120) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400589, True) +sm.flipNpcByTemplateId(9400592, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400592, True, 100, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400589, True, 100, 100) +sm.sendDelay(2000) +sm.forcedFlip(True) +sm.setParam(57) +sm.sendNext("#bPeytour! ") +sm.flipNpcByTemplateId(9400589, False) +sm.flipNpcByTemplateId(9400592, False) +sm.flipNpcByTemplateId(9400590, False) +sm.sendDelay(500) +sm.forcedMove(True, 20) +sm.sendNext("#bWhen we were fighting earlier, and you nailed that one monster with an axe throw... was that luck? ") +sm.setParam(37) +sm.sendSay("#face0#Hah, what do you mean by luck? ") +sm.setParam(57) +sm.sendSay("#bThat was a precise strike. Very practiced. You're not an ordinary lumberjack, are you? ") +sm.setParam(37) +sm.sendSay("#face0#Hah! When you put it like that... I suppose it was luck.") +sm.setParam(57) +sm.sendSay("#bYou can deny it all you want... but your skills with the axe will be of great help to us. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#Y-yeah! Even those raging Hellfangs didn't stand a chance against you! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Well... ") +sm.setParam(57) +sm.sendSay("#bHonestly, it doesn't matter to me if it was luck or skill. As long as you can help us fight, that's what matters. ") +sm.setParam(37) +sm.sendSay("#face0#It really was luck, you know. To throw like that consistently, that requires a lot of training. ") +sm.setParam(57) +sm.sendSay("#bI can help with that. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#Amazing, Peytour! ") +sm.sendSay("#face1#I wish I could be helpful... I'm so ashamed. I cowered in the back while everyone else was fighting. ") +sm.sendSay("#face0#But I won't just stand around anymore! ") +sm.sendSay("#face0#I'll take full responsibility for these wooden barricades. You can trust me with that! ") +sm.setParam(57) +sm.sendSay("#bAruhi, your skill with an axe could be very helpful in combat. Why don't you train with us? ") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 34388678, 0, 0) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face0#M-me? Then what about the w-wooden barricades? ") +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendSay("Skuas has many craftsmen who can handle that work. ") +sm.sendSay("Since you've gotten the materials, we can take care of the rest. Just focus on training! ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400592, True) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#R-really?! ") +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendSay("Of course! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Splendid! ") +sm.setParam(57) +sm.sendSay("#bSo, shall we go over to the training area? ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400592, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400592, True) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendNext("Yes, don't worry about us! Good luck! ") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.forcedMove(False, 300) +sm.moveNpcByTemplateId(9400589, False, 300, 100) +sm.moveNpcByTemplateId(9400592, False, 100, 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#T-thank you! Thank you very much! A-and please thank the other craftsmen as well!") +sm.flipNpcByTemplateId(9400592, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400592, False, 200, 100) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.createQuestWithQRValue(64110, "dir1=1;chk=0") +sm.startQuest(64110) +sm.lockInGameUI(False, True) +sm.warp(867202401) diff --git a/scripts/field/enter_867202305.py b/scripts/field/enter_867202305.py new file mode 100755 index 0000000..61c5390 --- /dev/null +++ b/scripts/field/enter_867202305.py @@ -0,0 +1,167 @@ +# id 867202305 (Abrup Basin : Skuas), field 867202305 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, 90, 60) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400597, 200, 60) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400591, -65, 70) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400618, -120, 70) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.spawnNpc(9400586, 850, -5) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400601, 900, -5) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400586, True, 500, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400601, True, 500, 100) +sm.sendDelay(500) +sm.forcedMove(True, 520) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Ridiculous! Honestly, what's this world coming to? Look at that traitor roaming the streets with his head held high! ") +sm.sendSay("#face0#Hmph, now I've seen everything! ") +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 0, 0, 0, 0, 34565416, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#What are you rambling about, you old windbag? Someone needs to sew you back into that poor coat! ") +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 0, 0, 0, 0, 34565417, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#W-what did you just say?! ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Heh... Maybe if you stuffed less fish in your face, you'd have an easier time stuffing yourself in that coat! Ptooey! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Why, you...! ") +sm.sendSay("#face0#This is exactly why I always say we shouldn't let these outsiders in. Hmph! ") +sm.sendSay("#face0#Where's Chief Kan?! How can he let his people embarass him so?! ") +sm.spawnNpc(9400582, 850, -5) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400580, 900, -5) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400600, 950, -5) +sm.showNpcSpecialActionByTemplateId(9400600, "summon", 0) +sm.moveNpcByTemplateId(9400582, True, 350, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, True, 350, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400600, True, 350, 100) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#Don't bother Chief Kan with your prattle. Not unless you want an arrow in your back... ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#W-w-what did... How... ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Honestly, all you do is eat our food! What're you going to do when the monsters attack? Be a meat shield for the old and infirm, hmm? ") +sm.sendSay("#face0#At least I earn what I eat. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#W-w-what? Whaaaaaat?! Are you trying to...! ") +sm.sendSay("#face0#Ah... Ah! Ah ha ha, I knew it! You didn't come back for us, did you, you rat? ") +sm.sendSay("#face0#Obviously, you ran afoul of a little monster and turned tail like a frightened child! ") +sm.sendSay("#face0#I can see the fear in your eyes even now! ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#What's that, pig?") +sm.sendSay("#face0#I don't want to hear a word out of your greasy face until I see you out there on the field!") +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Wow, I see Slaka wasted no time getting back to business. ") +sm.sendSay("#face1#As much as I'm enjoying this, perhaps we should step in? ") +sm.setParam(57) +sm.sendSay("#bGeez Cayne, you scared me. Where did you come from? ") +sm.forcedFlip(True) +sm.setParam(37) +sm.sendSay("#face0#I was training with the soldiers and came over to see what the commotion was! ") +sm.setParam(57) +sm.sendSay("#bTraining? ") +sm.setParam(37) +sm.sendSay("#face1#Indeed! I heard you did some sparring with Peytour and the drunkard.") +sm.sendSay("#face1#I believe you've started something, because others have been lining up to train since then! ") +sm.sendSay("#face1#Gillie and I are completely swamped! ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#We can't just let this continue... they're starting to attract a crowd. ") +sm.forcedFlip(True) +sm.spawnNpc(9400587, -350, 75) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400598, -300, 75) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.moveNpcByTemplateId(9400587, False, 490, 150) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400598, False, 450, 150) +sm.sendDelay(3600) +sm.flipNpcByTemplateId(9400587, True) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 0, 0, 0, 0, 34571675, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Slaka! What is the meaning of this?! ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("Chief, what are you doing? Everyone is staring... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#They say a rotten apple spoils the barrel. It certainly seems that way now... ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("We agreed we'd all fight on the same side, remember? Fighting each other won't help at all! ") +sm.moveNpcByTemplateId(9400590, True, 5, 10) +sm.moveNpcByTemplateId(9400587, True, 5, 10) +sm.moveNpcByTemplateId(9400598, False, 5, 10) +sm.moveNpcByTemplateId(9400597, False, 5, 10) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#Get off my back, he started it! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Unbelievable... Hmph! ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Ha, took the words right out of my mouth. ") +sm.moveNpcByTemplateId(9400590, True, 5, 10) +sm.moveNpcByTemplateId(9400587, True, 5, 10) +sm.moveNpcByTemplateId(9400598, False, 5, 10) +sm.moveNpcByTemplateId(9400597, False, 5, 10) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendNext("Enough! ") +sm.moveNpcByTemplateId(9400600, True, 300, 80) +sm.sendDelay(3000) +sm.sendNext("Step back, both of you!") +sm.flipNpcByTemplateId(9400597, False) +sm.moveNpcByTemplateId(9400587, True, 20, 30) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400597, False, 20, 20) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 34565417, 0, 0) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 34565416, 0, 0) +sm.sendDelay(3000) +sm.sendNext("You cannot let petty bickering distract you from our duties. ") +sm.sendNext("No one here has the time to argue and fight. Look around and see what they're doing! ") +sm.sendSay("They're training, repairing the walls, building shelters, and preparing food! ") +sm.sendSay("Everyone's working for the group... Everyone except the two of you. What do you have to say for yourselves? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ahem, he's the one who first... ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Oh no, no no no. I was working hard on the barricades, and was just going to pick up more wood, when this bloated gasbag... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Slaka! ") +sm.sendSay("#face0#Chief Birna, I apologize. I'll try my best to make peace between the villagers. ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Good on you, Chief Kan. You can start with that fish-smelling greaseball. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Sigh... This isn't just about one person, or one town. We all have to work together to survive this, so any problems that affect one or two of us hold everyone back. ") +sm.flipNpcByTemplateId(9400587, True) +sm.flipNpcByTemplateId(9400590, True) +sm.flipNpcByTemplateId(9400597, True) +sm.flipNpcByTemplateId(9400598, True) +sm.flipNpcByTemplateId(9400591, True) +sm.flipNpcByTemplateId(9400618, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400587, True, 600, 60) +sm.moveNpcByTemplateId(9400590, True, 150, 40) +sm.moveNpcByTemplateId(9400597, True, 600, 60) +sm.moveNpcByTemplateId(9400598, True, 600, 60) +sm.moveNpcByTemplateId(9400591, True, 600, 60) +sm.moveNpcByTemplateId(9400618, True, 600, 60) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400590, False) +sm.moveNpcByTemplateId(9400590, False, 400, 80) +sm.sendDelay(2000) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 34565416, 1, 0, 0, 0) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64118) +sm.warp(867202306) diff --git a/scripts/field/enter_867202306.py b/scripts/field/enter_867202306.py new file mode 100755 index 0000000..02cb1b6 --- /dev/null +++ b/scripts/field/enter_867202306.py @@ -0,0 +1,192 @@ +# id 867202306 (Abrup Basin : Skuas), field 867202306 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, 515, -48) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400582, 430, 40) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400580, 377, 50) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400600, 322, 56) +sm.showNpcSpecialActionByTemplateId(9400600, "summon", 0) +sm.spawnNpc(9400601, 217, 68) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.spawnNpc(9400586, 159, 70) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400597, -243, 80) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400598, -296, 80) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.spawnNpc(9400599, -342, 80) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("Birna, I don't think you need to be so hard on him. He's got a lot on his mind as the chief of his town. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("And I'm the chief of my town! But you don't see me mewling and sniping like that! ") +sm.sendSay("I've done all that I can to teach them the importance of cooperation, and they still just bicker and complain about their own needs... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("They're young, Birna. They don't have the years of experience that we do. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("I suppose... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("This conflict will teach them, Birna. They're already learning, and by the time we pull through this storm they might finally understand. And seeing them grow reminds me that we're still maturing, too. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Ugh, don't remind me. I've always hated it when you're right. ") +sm.spawnNpc(9400604, 700, -20) +sm.showNpcSpecialActionByTemplateId(9400604, "summon", 0) +sm.moveNpcByTemplateId(9400604, True, 250, 100) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendNext("Chief Birna! ") +sm.flipNpcByTemplateId(9400600, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400600, False, 180, 60) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400582, False) +sm.flipNpcByTemplateId(9400580, False) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendNext("What is it? ") +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("We've finished testing the new ballista! It's a real corker! ") +sm.sendSay("We can build more, but we'd need more wood and more hands. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Well then. See if some of the guards would be willing to take a break from training to help you out. Same with the miners. ") +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("Will do! ") +sm.flipNpcByTemplateId(9400604, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400604, False, 500, 100) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400600, True) +sm.setParam(57) +sm.sendNext("#bBallista? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Our bright little scholar here drew up the blueprints for some weapons we can use to defend the town. The ballista required the fewest resources, so we started with that. ") +sm.setParam(57) +sm.sendSay("#bWow! Alika, that's amazing. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Ha ha, it's no big deal... I never thought that semester in Siege Weapon Drafting would pay off, but here we are. Oh, and the Skuas craftsmen made some great improvements, too! ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Smart AND humble... is there anything our dear Alika can't do? ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#...I just said the craftsmen made improvements I hadn't considered, you know. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Ha! Glad to hear we have a few bright minds among our own people as well. ") +sm.spawnNpc(9400635, 950, 0) +sm.showNpcSpecialActionByTemplateId(9400635, "summon", 0) +sm.spawnNpc(9400636, 1000, 0) +sm.showNpcSpecialActionByTemplateId(9400636, "summon", 0) +sm.spawnNpc(9400637, 1050, 0) +sm.showNpcSpecialActionByTemplateId(9400637, "summon", 0) +sm.spawnNpc(9400638, 1100, 0) +sm.showNpcSpecialActionByTemplateId(9400638, "summon", 0) +sm.spawnNpc(9400639, 1150, 0) +sm.showNpcSpecialActionByTemplateId(9400639, "summon", 0) +sm.spawnNpc(9400640, 1200, 0) +sm.showNpcSpecialActionByTemplateId(9400640, "summon", 0) +sm.moveNpcByTemplateId(9400635, True, 200, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400636, True, 200, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400637, True, 200, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400638, True, 200, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400639, True, 200, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400640, True, 200, 100) +sm.sendDelay(2500) +sm.flipNpcByTemplateId(9400600, False) +sm.sendDelay(1500) +sm.sendNext("Thank you for meeting with me. As you may already know, we're constructing weapons to give us a defensive advantage if the town is attacked. ") +sm.sendSay("We've completed one weapon and the plan is to construct more, but we lack the materials and the manpower. ") +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendSay("Leave the wood to us! ") +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("Our ore reserves are fine, so we can focus on construction! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Thank you, everyone. Look out for each other and make sure no one is put in harm's way with these tasks.") +sm.flipNpcByTemplateId(9400635, False) +sm.flipNpcByTemplateId(9400636, False) +sm.flipNpcByTemplateId(9400637, False) +sm.flipNpcByTemplateId(9400638, False) +sm.flipNpcByTemplateId(9400639, False) +sm.flipNpcByTemplateId(9400640, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400635, False, 400, 100) +sm.moveNpcByTemplateId(9400636, False, 400, 100) +sm.moveNpcByTemplateId(9400637, False, 400, 100) +sm.moveNpcByTemplateId(9400638, False, 400, 100) +sm.moveNpcByTemplateId(9400639, False, 400, 100) +sm.moveNpcByTemplateId(9400640, False, 400, 100) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400600, True) +sm.sendDelay(500) +sm.sendDelay(2500) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Everything is going so well...", 2000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Chief, is that envy I hear in your voice?", 2000, 1, 0, 0, 0, 4, 9400598, 4878499) +sm.sendDelay(2500) +sm.sendNext("That confrontation between Slaka and Chief Gurnardson seems to have put the chief in poor spirits. ") +sm.setParam(57) +sm.sendSay("#bYeah... I suppose I should talk to him. ") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400600, True, 530, 100) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.sendNext("#bChief Gurnardson... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face1#Hmm? Ah, yes! I hope you've spoken to that ruffian Slaka... He, uh, clearly started... ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("Chief Gurnardson is right! That jerk started it! ") +sm.sendSay("We were just standing here, minding our own business, and then Slaka asked why we weren't doing anything, and then he started calling the chief gasbag and greaseball and- ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Yes, YES, we remember! That's enough... But yes! How DARE he act so rudely towards us. Why, he practically owes us his life! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Why WEREN'T you doing anything? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face1#Huh? No... You see... That's... ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("...There was nothing that we could do. ") +sm.setParam(57) +sm.sendSay("#bWhat do you mean? There's always something more that needs to be done. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Look, we've done our fair share, alright? We pitched tents! We moved rocks to the wall! What else do you want from us?! ") +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("Yeah, though... I have been wondering if we'll be able to help when the monsters attack. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("This isn't about fair shares or doubts. If you see something that needs doing, do it. The one thing we know for sure is that standing around like this does nothing.") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face1#... ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("#face0#...Teach us! ") +sm.setParam(57) +sm.sendSay("#bWhat? ") +sm.setParam(37) +sm.sendSay("#face0#You know, like how you taught the Kaptafel lumberjacks to, um, fight with their axes! ") +sm.sendSay("#face0#Teach us how to fight with our harpoons! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Surely you are better with a harpoon than #h0#? You were practically born with one in your hand. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#And I've used it to spear fish in the river, not beasts on the land! I don't know how to fight... ") +sm.setParam(57) +sm.sendSay("#bThen I will teach you. But you should know, I didn't teach the others to fight with their axes. I taught them how to use their experience as woodcutters to fight. ") +sm.sendSay("#bAttacks aren't just about slicing and cutting, so with a little advice and practice you should be able to fight using your harpoons. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendSay("R-really? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Then let's not dally! Lead on!") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64119, "dir1=1") +sm.startQuest(64119) +sm.warp(867202403) diff --git a/scripts/field/enter_867202307.py b/scripts/field/enter_867202307.py new file mode 100755 index 0000000..5add770 --- /dev/null +++ b/scripts/field/enter_867202307.py @@ -0,0 +1,118 @@ +# id 867202307 (Abrup Basin : Skuas), field 867202307 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400597, -270, -80) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.forcedFlip(True) +sm.spawnNpc(9400632, -450, -80) +sm.showNpcSpecialActionByTemplateId(9400632, "summon", 0) +sm.spawnNpc(9400633, -520, -80) +sm.showNpcSpecialActionByTemplateId(9400633, "summon", 0) +sm.spawnNpc(9400583, -150, -80) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, -100, -80) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face1#Aughh, I'm so tired! ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#Good work! ") +sm.setParam(57) +sm.sendSay("#bThat was great! You really got me! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendSay("Us too! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Really? Eh heh heh! ") +sm.spawnNpc(9400586, 150, -180) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400601, 220, -180) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.spawnNpc(9400590, 300, -180) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.moveNpcByTemplateId(9400586, True, 250, 70) +sm.moveNpcByTemplateId(9400601, True, 250, 70) +sm.moveNpcByTemplateId(9400590, True, 250, 70) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("#h0#, I must tell you... Our food supplies are nearly gone. ") +sm.sendSay("I couldn't find Chief Birna, so I'm telling you first. At this rate, we won't last much longer. ") +sm.setParam(57) +sm.sendSay("#bThat's no good. We'd better go hunting and restock before we run out. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#You should go with them, Chief Gurnardson. The monsters you'll face out there will be good practice after sparring with us. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#I-is that so? ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#It's a great opportunity to show off, you know... ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Really? Hmm...") +sm.sendSay("#face0#You say we've about run out of food already? ") +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Yes. With a group of this size, our supplies have... depleted faster than expected. ") +sm.sendSay("Even on the thinnest rations, we only have about two days before we run out. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ahem, so... this is a very urgent matter, yes? ") +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("I would consider mass starvation rather urgent, yes. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Well then, we'll take care of the situation! ") +sm.setParam(57) +sm.sendSay("#bReally? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Ah, that would be wonderful. I don't think I could restock on my own... ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#... ") +sm.moveNpcByTemplateId(9400590, True, 200, 70) +sm.sendDelay(2000) +sm.sendNext("#face0#Since Chief Gurnardson isn't familiar with the area, I'll lead the way! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#...You? ") +sm.setParam(57) +sm.sendSay("#bSlaka, are you sure? I mean, I was going to ask... ") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#Ha, of course you were! No one could handle this task but me, so I have a duty to help you!") +sm.flipNpcByTemplateId(9400590, False) +sm.sendDelay(250) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 2000, 0, 0, 0, 34622892, 0, 0) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendNext("Everyone... thank you for stepping up. ") +sm.sendDelay(250) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 2000, 0, 0, 0, 34622892, 0, 0) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400590, True) +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#N-no, I think our group is perfectly capable already! #h0#? Lady Gillie? You're coming with us, aren't you? ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#I don't think I can. I have another training session to run. ") +sm.setParam(57) +sm.sendSay("#bI'll be coming with you, of course, but I don't know the area like Slaka. ") +sm.sendSay("#bSince he's both a scout and a hunter, I'd feel much better if Slaka came along. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Ha, you hear that? Heh heh. Uh, I mean... ") +sm.sendSay("#face0#Did you hear that, Chief Gurnardson? They'll feel MUCH better! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Mmm... Ahem! ") +sm.setParam(57) +sm.sendSay("#bShall we get started? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Good luck out there. And focus on fighting the monsters, not each other! ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Don't you worry! ") +sm.sendSay("#face0#Heh heh, off we go! ") +sm.moveNpcByTemplateId(9400590, True, 300, 100) +sm.sendDelay(1000) +sm.completeQuestNoCheck(64120) +sm.startQuest(64121) +sm.startQuest(64158) +sm.lockInGameUI(False, True) +sm.warp(867202660) diff --git a/scripts/field/enter_867202308.py b/scripts/field/enter_867202308.py new file mode 100755 index 0000000..eccde2b --- /dev/null +++ b/scripts/field/enter_867202308.py @@ -0,0 +1,214 @@ +# id 867202308 (Abrup Basin : Skuas), field 867202308 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, -1000, 50) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400597, -900, 50) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400592, -150, 70) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400587, -100, 70) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400589, -50, 70) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400601, -5, 70) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.spawnNpc(9400591, 50, 70) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400598, 100, 70) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.moveNpcByTemplateId(9400590, False, 50, 50) +sm.moveNpcByTemplateId(9400597, False, 50, 50) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400592, True, 400, 80) +sm.moveNpcByTemplateId(9400587, True, 400, 80) +sm.moveNpcByTemplateId(9400589, True, 400, 80) +sm.moveNpcByTemplateId(9400601, True, 400, 80) +sm.moveNpcByTemplateId(9400591, True, 400, 80) +sm.moveNpcByTemplateId(9400598, True, 400, 80) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#You'd better go and apologize to Chief Kan first!") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Come again, you phony?") +sm.flipNpcByTemplateId(9400597, True) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 2000, 0, 0, 0, 34792210, 0, 0) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#...Let's not go there.") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/ddam", 2000, 0, 0, 0, 34792209, 0, 0) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Go where?") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 2000, 0, 0, 0, 34792210, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 2000, 0, 0, 0, 34792209, 0, 0) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.forcedMove(False, 300) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bAruhi!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#Me...? What do you want with...") +sm.moveNpcByTemplateId(9400592, True, 50, 60) +sm.setParam(57) +sm.sendSay("#bIn the forest...") +sm.sendSay("#bWe found this.") +sm.sendDelay(500) +sm.sendDelay(500) +sm.avatarOriented("Effect/OnUserEff.img/questEffect/PL_MONAD1/7") +sm.setParam(37) +sm.sendNext("#face1#T-this is...") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/questEffect/PL_MONAD1/7", 5000, 0, 0, 0, 34792211, 0, 0) +sm.sendDelay(500) +sm.sendNext("#face1#It's what they were wearing...") +sm.sendSay("#face1#The people who took my wife and daughter...") +sm.setParam(57) +sm.sendSay("#bIs this what you saw?") +sm.setParam(37) +sm.sendSay("#face1#Yes...") +sm.sendSay("#face1#...Yes! YES!!") +sm.sendSay("#face1#Finally... proof. Everyone, look! I've been telling you all the truth!") +sm.flipNpcByTemplateId(9400592, False) +sm.sendDelay(500) +sm.sendNext("#face1#Look me in the eyes and tell me I'm lying now!") +sm.sendSay("#face1#Go on, tell me I was talking crazy! Waaahhh... ") +sm.moveNpcByTemplateId(9400587, True, 50, 60) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(True, 200) +sm.moveNpcByTemplateId(9400590, True, 200, 50) +sm.moveNpcByTemplateId(9400597, True, 200, 50) +sm.showEffect("Effect/OnUserEff.img/emotion/shade", 5000, 0, 0, 0, 34792212, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face1#Aruhi...") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face1#Sniff, sniff... I told you I wasn't lying...") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#I'm sorry... I...") +sm.spawnNpc(9400617, -1100, 80) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400596, -1150, 80) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400618, -1200, 80) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.moveNpcByTemplateId(9400589, True, 60, 50) +sm.moveNpcByTemplateId(9400591, True, 120, 50) +sm.forcedFlip(True) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("Aruhi...") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face1#We failed you. All of us should have trusted you.") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face1#Waahhh...") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#I'm sorry I didn't believe you...") +sm.moveNpcByTemplateId(9400617, False, 360, 80) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face1#I'm sorry... I truly am.") +sm.moveNpcByTemplateId(9400596, False, 360, 80) +sm.sendSay("#face1#I know everyone deserves the benefit of the doubt, but I just dismissed you...") +sm.moveNpcByTemplateId(9400618, False, 360, 80) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face1#Waaahhh...") +sm.sendSay("#face1#Why... What reason did I have to lie? Sniff...") +sm.sendSay("#face1#Me, of all people! When it was my own wife and daughter who'd gone missing! Waah... ") +sm.sendSay("#face1#Waaah... Sniff... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#I'm sorry, so sorry... I really am...") +sm.sendSay("#face1#I... I was wrong...") +sm.sendSay("#face1#I'm sorry it took so long for me to realize that...") +sm.sendDelay(2000) +sm.forcedMove(False, 900) +sm.completeQuestNoCheck(64122) +sm.completeQuestNoCheck(64125) +sm.spawnNpc(9400580, 200, -90) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 250, -90) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.moveNpcByTemplateId(9400580, True, 100, 50) +sm.moveNpcByTemplateId(9400582, True, 100, 50) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#That helmet... did you find it in the forest? ") +sm.setParam(57) +sm.sendSay("#bYes, we found it with the treasures of another Eyeful. ") +sm.setParam(37) +sm.sendSay("#face0#Really? Then I suppose there are more out there. ") +sm.setParam(57) +sm.sendSay("#bThat would be my guess. Who knows how many of those tunnels are hidden beneath the forest... ") +sm.sendSay("#bThat helmet wasn't the only thing out there, either. We brought back a bunch of stolen items, too. ") +sm.setParam(37) +sm.sendSay("#face5#Oh, good! I'm sure their owners have been missing them dearly. ") +sm.setParam(57) +sm.sendSay("#bThat reminds me... what did you do with the things we found last time? ") +sm.setParam(37) +sm.sendSay("#face0#We left them at the General Store, since everybody in the village stops by there. ") +sm.sendSay("#face0#Elva was completely fine with helping us out. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#I got my brooch back. Those Eyefuls... I've always hated them! ") +sm.setParam(57) +sm.sendSay("#bI guess we should leave these items at the General Store, too. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#I'll tag along. I want to see how many of the original items are still unclaimed. ") +sm.flipNpcByTemplateId(9400580, False) +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, False, 300, 100) +sm.moveNpcByTemplateId(9400580, False, 300, 100) +sm.forcedMove(False, 300) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.spawnNpc(9400588, -50, 70) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.startQuest(64161) +sm.spawnNpc(9400587, -100, 70) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400591, -150, 70) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400592, -200, 70) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400596, -250, 70) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400588, False, 300, 150) +sm.moveNpcByTemplateId(9400587, False, 300, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400591, False, 300, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400592, False, 300, 80) +sm.moveNpcByTemplateId(9400596, False, 300, 80) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Hero! Alika! Cayne! ") +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400580, True) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(2000) +sm.sendNext("Are you... um, on your way to the General Store? ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#We sure are, Ullan. ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("We're on our way to the General Store too. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Do you need anything? ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("No... just going to see Sanaan... ") +sm.setParam(57) +sm.sendSay("#bYou've finally made up your mind. ") +sm.setParam(37) +sm.sendSay("Yes! We all decided to go together. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#We should have done this sooner... I'm afraid we might be too late. My shame is so great... ") +sm.setParam(57) +sm.sendSay("#bNo, it's never too late. Just don't waste anymore time. Hurry, let's go to Sanaan. ") +sm.startQuest(64126) +sm.lockInGameUI(False, True) +sm.warp(867202309) diff --git a/scripts/field/enter_867202309.py b/scripts/field/enter_867202309.py new file mode 100755 index 0000000..111714d --- /dev/null +++ b/scripts/field/enter_867202309.py @@ -0,0 +1,119 @@ +# id 867202309 (Abrup Basin : Skuas), field 867202309 +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.spawnNpc(9400580, 1210, -40) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 1270, -40) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400586, 1100, 0) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400601, 1360, -40) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.spawnNpc(9400588, 900, 0) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400587, 850, 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400591, 800, 0) +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.spawnNpc(9400592, 750, 0) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400617, 700, 0) +sm.showNpcSpecialActionByTemplateId(9400617, "summon", 0) +sm.spawnNpc(9400596, 650, 0) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400619, 600, 0) +sm.showNpcSpecialActionByTemplateId(9400619, "summon", 0) +sm.spawnNpc(9400618, 550, 0) +sm.showNpcSpecialActionByTemplateId(9400618, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("Goodness, is everything alright? What is everyone doing here? ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Granny... Sniff... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Ullan? My child, why are you crying? ") +sm.moveNpcByTemplateId(9400586, True, 50, 50) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400588, False, 50, 50) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Sanaan... I'm so sorry... ") +sm.sendSay("Sorry for forcing you into the forest... and for not stopping you... and for what happened with Blanche... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("... ") +sm.moveNpcByTemplateId(9400587, False, 50, 50) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#Sanaan, I should have told you this a long time ago, but... I'm sorry. Very, truly sorry. ") +sm.sendSay("#face1#I thought I was making the best choice for the peace of the village, but it was an immature and foolish choice. ") +sm.sendSay("#face1#We had so many opportunities to set things right, but none of us bothered to do it. We've owed you this apology for ages. ") +sm.sendSay("#face1#I can't imagine how scared and lonely you and Blanche must have been out in that dark forest... I don't know how to ever make it up to you... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("...That was all so long ago. I've moved on. But thank you for thinking of me and my Blanche. It's never too late to say you're sorry. ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("B-but what about Blanche? She's gone because we... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("No, child. Dear Ullan, it's not your fault Blanche went missing. I've not once thought of blaming you for that. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#I know it's too late, but... ") +sm.sendSay("#face1#Would you return with us to Kaptafel once this is all over, Sanaan? ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("...I appreciate it, but I can't leave that cabin until Blanche returns. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#We've all lost family members. Over the past 6 months, we've searched for them , we've fallen into despair, and some have even tried to forget. ") +sm.sendSay("#face1#But of all of us, it was Aruhi that knew what really happened. We ignored him out of selfishness, but now that we know better, we will resume the search. ") +sm.sendSay("#face1#Sanaan... I want to make sure you see your Blanche again. I want to know you're safe. ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("I'll have to think about it. ") +sm.sendSay("Like you said... we have a common goal of finding our loved ones. ") +sm.sendSay("It's something all of us in Abrup have in common. ") +sm.sendSay("At the very least, we should work together more than we did before, eh? ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Sanaan... I'm so sorry... ") +sm.sendSay("Sniff... I really, really am!") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("I know, child, I know. It's alright.") +sm.sendDelay(500) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Chief Kan's getting better at apologizing, isn't he?") +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400580, False) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#...This isn't the time, Cayne.") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Right, of course. Perhaps we should give them some time to savor the moment, mm? We do have plenty on our plate, after all.") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.setParam(57) +sm.sendSay("#bOh right, the lost items!") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, False) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Elva, #h0# went into the forest and located some more lost items. ") +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Ah, I see. Well, you can certainly leave them with me. More than half of the items you left last time made their way to their rightful owners. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Wow, really? That's great news! ") +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Yes... and I noticed that among them was a necklace that belonged to Einar's sister. ") +sm.setParam(57) +sm.sendSay("#bEinar... that's the boy you were making armor for, right? ") +sm.setParam(37) +sm.sendSay("That's right. I was able to give him armor and his precious necklace all at once. It might have been a bit much, though. He cried... a lot. ") +sm.sendDelay(1000) +sm.sendNext("I hope he can turn things around... ") +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.completeQuestNoCheck(64126) +sm.lockInGameUI(False, True) +sm.warp(867202310) diff --git a/scripts/field/enter_867202310.py b/scripts/field/enter_867202310.py new file mode 100755 index 0000000..3fd47ff --- /dev/null +++ b/scripts/field/enter_867202310.py @@ -0,0 +1,140 @@ +# id 867202310 (Abrup Basin : Skuas), field 867202310 +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.spawnNpc(9400580, 640, -240) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 600, -220) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4#If the Fembris have been seen at the edge of Windsleep Forest... ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#We should prepare for an attack. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#But we have no idea how much time we have! ") +sm.setParam(57) +sm.sendSay("#bThen we need to assume we have no time. ") +sm.setParam(37) +sm.sendSay("#face0#The ballistas have been completed, and we're finishing up on the catapults. They should be ready... soon. ") +sm.setParam(57) +sm.sendSay("#bWeapons like that will be a huge help. ") +sm.setParam(37) +sm.sendSay("#face0#The biggest task left is to finish repairing the walls.") +sm.forcedFlip(True) +sm.sendDelay(300) +sm.forcedMove(False, 100) +sm.moveNpcByTemplateId(9400580, False, 60, 70) +sm.moveNpcByTemplateId(9400582, False, 60, 70) +sm.sendDelay(900) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.spawnNpc(9400580, 1380, -520) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400582, 1340, -520) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400600, 1560, -530) +sm.showNpcSpecialActionByTemplateId(9400600, "summon", 0) +sm.spawnNpc(9400604, 1650, -530) +sm.showNpcSpecialActionByTemplateId(9400604, "summon", 0) +sm.spawnNpc(9400604, 1720, -530) +sm.showNpcSpecialActionByTemplateId(9400604, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400600, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400600, True, 50, 50) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendNext("Ah, #h0#. Back from the friendly hunt with Chief Gurnardson and the lot? How did you fare? ") +sm.setParam(57) +sm.sendSay("#bJust fine. We gathered plenty of meat, enough that we shouldn't have to worry for awhile. ") +sm.setParam(37) +sm.sendSay("Glad to hear it! ") +sm.setParam(57) +sm.sendSay("#bHowever... ") +sm.setParam(37) +sm.sendSay("I don't like the sound of that... ") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bOn our way back, we found some Fembris at the edge of the forest. We're concerned that might mean... ") +sm.setParam(37) +sm.sendSay("...That an attack is coming. ") +sm.setParam(57) +sm.sendSay("#bYes. It could mean we don't have much time left. ") +sm.sendSay("#bThe monsters that hit Kaptafel seemed to be led by the Fembris. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#The same thing happened at Svarti. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Then we'd best hurry. ") +sm.setParam(57) +sm.sendSay("#bHow far along are the wall repairs? ") +sm.setParam(37) +sm.sendSay("We'll be finished soon enough. We've sent some of our men to help with the catapults, and others are out on patrol, so we're a touch short-handed. ") +sm.setParam(57) +sm.sendSay("#bLet me help out. ") +sm.spawnNpc(9400586, 1260, -520) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400588, 1220, -520) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400601, 1180, -520) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.spawnNpc(9400592, 1140, -520) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400598, 1100, -520) +sm.showNpcSpecialActionByTemplateId(9400598, "summon", 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Perhaps I can help as well. ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Me too! ") +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Count me in. ") +sm.setParam(57) +sm.sendSay("#bHow did you all show up at once? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Chief Gurnardson's going around telling everyone. ") +sm.sendSay("He said Slaka saw a Fembris and wet his pants, so everyone needs to help out so he doesn't have to be scared anymore! ") +sm.setParam(57) +sm.sendSay("#bUgh... Not the motivation I was hoping for...") +sm.spawnNpc(9400590, 1560, -520) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400597, 1610, -520) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#...Let me help, too. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#That's the spirit! Build those walls up high and strong, so the Fembris can't get through! Heh heh. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("We'll be finished in no time with all this help. ") +sm.sendSay("We should do this by stations. Sanaan can move the building stones from here to there, and Gurnardson can carry them down the stairs to Ullan... ") +sm.sendSay("And #h0# can take them from the lot up to the wall. ") +sm.setParam(57) +sm.sendSay("#bSounds good, Chief Birna. And thank you all for coming out to help. Let's get it done! ") +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Right on... ", 2000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Heh, this is nothing!", 2000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "I'm happy we're all working together.", 2000, 1, 0, 0, 0, 4, 9400586, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Yessir! ", 2000, 1, 0, 0, 0, 4, 9400588, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "You got it.", 2000, 1, 0, 0, 0, 4, 9400601, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Just say the word!", 2000, 1, 0, 0, 0, 4, 9400604, 4878499) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.startQuest(64127) +sm.warp(867202311) diff --git a/scripts/field/enter_867202311.py b/scripts/field/enter_867202311.py new file mode 100755 index 0000000..f6fe973 --- /dev/null +++ b/scripts/field/enter_867202311.py @@ -0,0 +1,10 @@ +# id 867202311 (Abrup Basin : Skuas), field 867202311 +sm.showNpcSpecialActionByTemplateId(9400570, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400606, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400605, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400638, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400639, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400640, "summon", 0) +sm.startQuest(64169) +sm.moveNpcByTemplateId(9400606, True, 250, 50) +sm.moveNpcByTemplateId(9400605, True, 250, 50) diff --git a/scripts/field/enter_867202312.py b/scripts/field/enter_867202312.py new file mode 100755 index 0000000..78a2342 --- /dev/null +++ b/scripts/field/enter_867202312.py @@ -0,0 +1,116 @@ +# id 867202312 (Abrup Basin : Skuas), field 867202312 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400638, -1526, -20) +sm.showNpcSpecialActionByTemplateId(9400638, "summon", 0) +sm.spawnNpc(9400639, -1380, 90) +sm.showNpcSpecialActionByTemplateId(9400639, "summon", 0) +sm.spawnNpc(9400640, -1030, 80) +sm.showNpcSpecialActionByTemplateId(9400640, "summon", 0) +sm.spawnNpc(9400602, 600, 0) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.forcedMove(False, 600) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400602, True, 450, 100) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face0#Uh... ") +sm.sendSay("#face0#Are you... #h0#? ") +sm.setParam(57) +sm.sendSay("#bWho...? ") +sm.sendSay("#b(It's the helmet Sanaan was making!) ") +sm.moveNpcByTemplateId(9400602, True, 60, 100) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face0#...I need your help. ") +sm.sendSay("#face1#I... I want to help out too! ") +sm.sendSay("#face1#Please... please let me join you... ") +sm.setParam(57) +sm.sendSay("#bWhat is it you want to do? ") +sm.setParam(37) +sm.sendSay("#face1#I... I need to be there to avenge my sister... please, please let me help! ") +sm.setParam(57) +sm.sendSay("#bThere's no way I'm going to turn you down. We need all the warriors we can get. ") +sm.sendSay("#bBut all I can do is wait for the next battle for us to fight alongside each other. ") +sm.sendSay("#bAfter that, it's up to you. ") +sm.setParam(37) +sm.sendSay("#face1#...Yes, I understand! I'll be ready! ") +sm.setParam(57) +sm.sendSay("#bAlright, for now let's get these stones where they need to go. We can talk more later. ") +sm.sendSay("#bCan you help with these? ") +sm.setParam(37) +sm.sendSay("#face1#Yes, of course. ") +sm.flipNpcByTemplateId(9400602, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400602, False, 100, 100) +sm.sendDelay(3000) +sm.flipNpcByTemplateId(9400602, True) +sm.sendDelay(300) +sm.setMapTaggedObjectVisible("rock1", False, 0, 0) +sm.startQuest(64168) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400602, True, 400, 150) +sm.spawnNpc(9400606, 600, 0) +sm.showNpcSpecialActionByTemplateId(9400606, "summon", 0) +sm.startQuest(64169) +sm.moveNpcByTemplateId(9400606, True, 400, 100) +sm.sendDelay(5000) +sm.createQuestWithQRValue(64127, "chk1=9") +sm.flipNpcByTemplateId(9400602, False) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400602, False, 300, 150) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face1#Wow, he struck me as rather scrawny but he's got some power there! ") +sm.setParam(57) +sm.sendSay("#bCayne, he can hear you. ") +sm.setParam(37) +sm.sendSay("#face1#I know! It's a compliment. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face1#I know I don't look strong... ") +sm.sendSay("#face1#But you can rely on me. I've been working hard since I was a kid. ") +sm.sendSay("#face1#I lost my parents when I was young. I did whatever I could to take care of my baby sister. ") +sm.sendSay("#face1#Hauling barrels, cutting wood, sweeping chimneys... I didn't mind, because it was all for my sister. ") +sm.sendSay("#face1#This is nothing. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#Ah, don't get me wrong. I was just commenting on how resilient you are. Nothing more. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face1#...") +sm.moveNpcByTemplateId(9400606, True, 50, 50) +sm.sendDelay(1000) +sm.startQuest(64169) +sm.setMapTaggedObjectVisible("rock1", True, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face1#This is the last one.") +sm.moveNpcByTemplateId(9400602, False, 100, 150) +sm.sendDelay(1500) +sm.flipNpcByTemplateId(9400602, True) +sm.sendDelay(300) +sm.startQuest(64168) +sm.setMapTaggedObjectVisible("rock1", False, 0, 0) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400602, True, 450, 150) +sm.sendDelay(5000) +sm.createQuestWithQRValue(64127, "chk1=10") +sm.flipNpcByTemplateId(9400602, False) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400602, False, 300, 150) +sm.sendDelay(2000) +sm.sendNext("#face1#Wow! Excellent.") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#Now... Please train me. ") +sm.sendSay("#face1#I want to fight alongside you! Teach me how to fight. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#I shall! Your spirit is inspiring. But first, I need to get Alika. #h0#! Head to the training lot for me. ") +sm.sendSay("#face1#I can't leave her alone, you know that. I'll be there soon! ") +sm.flipNpcByTemplateId(9400606, False) +sm.moveNpcByTemplateId(9400606, False, 300, 200) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.createQuestWithQRValue(64127, "dir=1;chk1=10") +sm.completeQuestNoCheck(64127) +sm.completeQuestNoCheck(64128) +sm.lockInGameUI(False, True) +sm.warp(867202398) diff --git a/scripts/field/enter_867202313.py b/scripts/field/enter_867202313.py new file mode 100755 index 0000000..01a0e49 --- /dev/null +++ b/scripts/field/enter_867202313.py @@ -0,0 +1,149 @@ +# id 867202313 (Abrup Basin : Skuas), field 867202313 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, -700, 80) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400638, -600, 80) +sm.showNpcSpecialActionByTemplateId(9400638, "summon", 0) +sm.moveNpcByTemplateId(9400580, True, 300, 150) +sm.moveNpcByTemplateId(9400638, True, 300, 120) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5##h0#! I told you not to go. Why didn't you listen?! ") +sm.setParam(57) +sm.sendSay("#bHere...") +sm.setParam(37) +sm.sendSay("#face4#What...?") +sm.setParam(57) +sm.sendSay("#bIt's Jellyrash tentacles. Maybe they'll work as rope? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("Well, it's disgusting... but very tough. It should hold. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Really?") +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("I'll give it a go, and let you know when it's ready! ") +sm.flipNpcByTemplateId(9400638, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400638, False, 1000, 150) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4#I was so worried... I shouldn't have told you... ") +sm.setParam(57) +sm.sendSay("#bWe need that catapult. And you can see, I'm fine. ") +sm.setParam(37) +sm.sendSay("#face4#But I'm not fine! We need you, #h0#. Everyone who fought and prepared with you for this battle needs you. ") +sm.sendSay("#face4##h0#, you are far, far more important than the catapult. If anything had happened, we'd have to fight this battle without you. ") +sm.setParam(57) +sm.sendSay("#b...I'm sorry. ") +sm.setParam(37) +sm.sendSay("#face5#Then stop putting yourself at risk. Listen to me, alright? ") +sm.setParam(57) +sm.sendSay("#bAlright.") +sm.sendSay("#bAlika, listen... I saw red snow out there. On the edge of the forest. ") +sm.setParam(37) +sm.sendSay("#face4#Red snow...?") +sm.setParam(57) +sm.sendSay("#bThe attack will come soon. We have to get everyone ready.") +sm.spawnNpc(9400639, -350, 80) +sm.showNpcSpecialActionByTemplateId(9400639, "summon", 0) +sm.spawnNpc(9400640, -250, 80) +sm.showNpcSpecialActionByTemplateId(9400640, "summon", 0) +sm.moveNpcByTemplateId(9400639, True, 500, 200) +sm.moveNpcByTemplateId(9400640, True, 500, 200) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendNext("Scholar Alika! It's ready! ") +sm.flipNpcByTemplateId(9400580, False) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face2#It is? ") +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("Very much so! I followed your instructions, and now it's thirty times stronger than before! ") +sm.setParam(57) +sm.sendSay("#bYou're not talking about the catapult, are you? ") +sm.setParam(37) +sm.sendSay("I'm talking about mines! ") +sm.setParam(57) +sm.sendSay("#bMines?! ") +sm.setParam(37) +sm.sendSay("Scholar Alika showed us how to make mines out of the gunpowder we use for blasting tunnels! ") +sm.setParam(57) +sm.sendSay("#bAlika, that's amazing! How do you know how to do that? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Hey, the history of gunpowder is fascinating reading. I'm just glad I remembered the proportions right. Or maybe I didn't, if it's that powerful... ") +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("Ba ha ha, incredible! Ingenious! I hope you'll let us pick your brain some more before you leave.") +sm.sendSay("Oh, but you'll want to see them in action, right? Here we go... ") +sm.sendSay("Cover your ears! ") +sm.flipNpcByTemplateId(9400640, False) +sm.moveNpcByTemplateId(9400640, False, 100, 100) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400640, "mine", 0) +sm.sendDelay(500) +sm.spawnNpc(9400579, -750, 80) +sm.showNpcSpecialActionByTemplateId(9400579, "summon", 0) +sm.sendDelay(500) +sm.spawnNpc(9400579, -550, 80) +sm.showNpcSpecialActionByTemplateId(9400579, "summon", 0) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400579, "special1", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400579, "special1", 0) +sm.sendDelay(2500) +sm.flipNpcByTemplateId(9400640, True) +sm.moveNpcByTemplateId(9400640, True, 100, 100) +sm.sendNext("Ha HA! How do ya like THAT?! ") +sm.spawnNpc(9400600, -400, 70) +sm.showNpcSpecialActionByTemplateId(9400600, "summon", 0) +sm.spawnNpc(9400588, -350, 70) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400582, -300, 70) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.moveNpcByTemplateId(9400600, True, 250, 200) +sm.moveNpcByTemplateId(9400588, True, 250, 200) +sm.moveNpcByTemplateId(9400582, True, 250, 200) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendNext("What's happening?! ") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Are we under attack?! ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Alika! Alika, where are you?! ") +sm.flipNpcByTemplateId(9400600, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, False) +sm.flipNpcByTemplateId(9400600, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400588, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400588, True) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendNext("What was that terrible noise...? ") +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendSay("Behold, Chief! A Skuas-made mine! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("But how...") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT3/horn1", 128) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendNext("Gates! Open up the gates! ") +sm.sendSay("Right now! ") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64134) +sm.startQuest(64135) +sm.warp(867202203) diff --git a/scripts/field/enter_867202314.py b/scripts/field/enter_867202314.py new file mode 100755 index 0000000..e376f6b --- /dev/null +++ b/scripts/field/enter_867202314.py @@ -0,0 +1,120 @@ +# id 867202314 (Abrup Basin : Skuas), field 867202314 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#W-what's going on?! ") +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendSay("Huff... gasp... ") +sm.sendSay("The... the monsters are on the move! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Where did you find them? How close are they? ") +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendSay("They're on the other side of Sunglow Forest! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("...They're nearly upon us.") +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Do you know how to get to this Sunglow place?", 2000, 1, 0, 0, 0, 4, 9400598, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "It's just past the forest entrance. \r\nIt's not that far from Skuas.", 2000, 1, 0, 0, 0, 4, 9400601, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 0, "Why don't you ask me?", 2000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Granny... I'm scared.", 2000, 1, 0, 0, 0, 4, 9400588, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "There, there. Don't be scared. \r\nYour daddy will keep you safe.", 2000, 1, 0, 0, 0, 4, 9400586, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 0, "No matter what happens...", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Oh, dear. So soon...", 2000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 0, "You've done everything you can to prepare... \r\nThere's nothing left to worry about.", 2000, 1, 0, 0, 0, 4, 9400600, 4878499) +sm.spawnNpc(9400581, -1500, 85) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400585, -1600, 85) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -1700, 85) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.moveNpcByTemplateId(9400581, False, 200, 100) +sm.moveNpcByTemplateId(9400585, False, 200, 100) +sm.moveNpcByTemplateId(9400585, False, 200, 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face1#The scouts were attacked?!") +sm.sendSay("#face0#Where? How far did they get?") +sm.sendDelay(2000) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Red snow...", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "It's happened. It's here.", 3000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(False, 0, 0, "...", 3000, 1, 0, 0, 0, 4, 9400602, 4878499) +sm.setParam(57) +sm.sendNext("#b...They're right at our doorstep. ") +sm.setParam(37) +sm.sendSay("#face0#Those eyes... Never have I seen such eyes... ") +sm.setParam(57) +sm.sendSay("#bEveryone, thank you for all of your hard work. ") +sm.sendSay("#bYou've trained to fight our foes, with weapons you've never had to hold before. ") +sm.sendSay("#bYou've moved giant stones to build up our walls, day in and day out. ") +sm.sendSay("#bAnd you've spent long, sleepless nights watching those same walls for attack. ") +sm.sendSay("#bDespite all of these hardships, you have persisted and worked as a magnificent team. ") +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Since Kaptafel, you've done more for us than anyone, #h0#.", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Hear, hear! We owe it all to you.", 2000, 1, 0, 0, 0, 4, 9400600, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "You're the reason we could come together like this.", 2000, 1, 0, 0, 0, 4, 9400586, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Right on! ", 2000, 1, 0, 0, 0, 4, 9400592, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "It's true!", 2000, 1, 0, 0, 0, 4, 9400598, 4878499) +sm.sendNext("#bI know none of you wants to be in this situation right now. ") +sm.sendSay("#bI doubt any of you imagined this happening in your lives. ") +sm.sendSay("#bBut we cannot choose the challenges that face us, or when we must face them. And we cannot blame ourselves for them, either. ") +sm.sendSay("#bTheir attacks have driven us from our homes and families, but so long as we remain standing, we can return. ") +sm.sendSay("#bWe can't change the past, but we can make our own future. ") +sm.sendSay("#bWe will fight, we will win, and we will return to the lives we left behind. ") +sm.sendSay("#bThis is why we cannot let fear make us falter. ") +sm.sendSay("#bWe must fight together! We must stand as one, and drive back our enemies together! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#We won't back down! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#We won't live in fear any more! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("We must fight!") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT3/battlecry1", 128) +sm.sendDelay(600) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400600, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400586, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400583, 4878499) +sm.sendDelay(600) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400588, 4878499) +sm.sendDelay(600) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400601, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400592, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400630, 4878499) +sm.sendDelay(600) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400599, 4878499) +sm.sendDelay(600) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400589, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("Well said. We can't wait for the world to come to us. We have to work hard for the future that we want. ") +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400598, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400622, 4878499) +sm.speechBalloon(False, 0, 0, "We must fight!", 4000, 1, 0, 0, 0, 4, 9400621, 4878499) +sm.sendSay("So, here's to taking back our valley! ") +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face2#Thank you... I'm honored to fight alongside you... ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face2#We'll hold them back! No matter what!") +sm.completeQuestNoCheck(64136) +sm.warp(867202230) diff --git a/scripts/field/enter_867202315.py b/scripts/field/enter_867202315.py new file mode 100755 index 0000000..59449a9 --- /dev/null +++ b/scripts/field/enter_867202315.py @@ -0,0 +1,191 @@ +# id 867202315 (Abrup Basin : Skuas), field 867202315 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400587, -990, 70) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.spawnNpc(9400602, -1050, 70) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.startQuest(64168) +sm.spawnNpc(9400582, -1100, 70) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400580, -1210, 70) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400586, -600, 80) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400588, -600, 80) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.spawnNpc(9400583, 1450, 0) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.moveNpcByTemplateId(9400586, True, 170, 100) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("Einar! You did wonderfully, Einar! You've made us all so proud.") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face3#Grandma...") +sm.moveNpcByTemplateId(9400602, False, 100, 50) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("There, there. You poor thing. Let's get you settled. It's all over now.") +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face3#Ju... Julieta... Julieta is...") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("What about Julieta?") +sm.moveNpcByTemplateId(9400602, False, 40, 50) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face1#Julieta is...") +sm.moveNpcByTemplateId(9400588, True, 320, 150) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Papa! Alika! Hero! ") +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400602, True) +sm.sendNext("Papa, are you okay?") +sm.sendSay("Papa, did you really defeat the monster? That's so cool! So is Mama coming back now?") +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 35527934, 0, 0) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400602, False) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Ahoy! Managed to stay alive, did you? \r\nYou must have found a great hiding spot, heh.", 2000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "What kind of joke is that? \r\nDo you know how many monsters I took down? \r\nYou're the coward, shooting arrows from the safety of the back lines.", 2000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(1000) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Mama! Is it over now?", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "Are we going back home?", 2000, 1, 0, 0, 0, 4, 9400593, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "That's right, Hawalu. \r\nWe're going back home...", 2000, 1, 0, 0, 0, 4, 9400591, 4878499) +sm.sendDelay(1000) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Wow, we really pulled through! \r\nThe town isn't even that torn up!", 2000, 1, 0, 0, 0, 4, 9400638, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "That's what I'm talking about! \r\nAnd this new ballista packed a mean punch!", 2000, 1, 0, 0, 0, 4, 9400639, 4878499) +sm.sendDelay(1000) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Thank you for your help earlier.", 2000, 1, 0, 0, 0, 4, 9400629, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Ha, likewise. I'm thinking we work pretty well together, yeah?", 2000, 1, 0, 0, 0, 4, 9400632, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Yeah! We should go hunting together sometime.", 2000, 1, 0, 0, 0, 4, 9400629, 4878499) +sm.moveNpcByTemplateId(9400583, True, 150, 70) +sm.sendDelay(1000) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Gillie, you're okay!", 2000, 1, 0, 0, 0, 4, 9400620, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "We need to take care of the wounded first. ", 2000, 1, 0, 0, 0, 4, 9400583, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Understood, Gillie!", 2000, 1, 0, 0, 0, 4, 9400622, 4878499) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face3#...") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("What's wrong, Einar? Hm? What happened?") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face3#Erm... nothing... it's nothing.") +sm.moveNpcByTemplateId(9400602, False, 1000, 30) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400586, False) +sm.sendDelay(1000) +sm.sendNext("#face3#Don't worry about it...") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400586, False, 1000, 25) +sm.sendNext("#face3#Nothing... nothing...") +sm.sendSay("#face3#It's nothing...") +sm.sendDelay(2000) +sm.moveNpcByTemplateId(9400582, False, 30, 50) +sm.flipNpcByTemplateId(9400588, False) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Do you think he needs us now? ") +sm.setParam(57) +sm.sendSay("#bNo... I think he's going to need some time to himself. ") +sm.flipNpcByTemplateId(9400588, True) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/what", 0, 0, 0, 0, 35527938, 0, 0) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("What are you talking about?") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#...Nothing. ") +sm.moveNpcByTemplateId(9400587, False, 1000, 50) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400588, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400588, False, 1000, 45) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Cayne, could you give us a moment? ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face2#...Sure.") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, False, 1000, 50) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4##h0#... ") +sm.sendSay("#face4#Do you remember the dream I told you about in the forest? ") +sm.setParam(57) +sm.sendSay("#bYes, the one about running... ") +sm.setParam(37) +sm.sendSay("#face4#That's right, the girl running away and then lying on the snowfield. ") +sm.sendSay("#face4#Until now, I couldn't be sure the two girls were the same person or not. ") +sm.sendSay("#face5#And there's something else I didn't tell you. ") +sm.sendSay("#face5#It was Blanche. Sanaan's granddaughter is the girl from my dream. ") +sm.sendDelay(1000) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation") +sm.setParam(57) +sm.sendNext("#bBlanche?! ") +sm.setParam(37) +sm.sendSay("#face5#Yes... I'm certain. Bluish-gray skin and long black hair. It's the girl from the picture. ") +sm.setParam(57) +sm.sendSay("#bWhat is Blanche doing in your dream, Alika? ") +sm.setParam(37) +sm.sendSay("#face5#There's more... ") +sm.sendSay("#face5#Julieta... that frail little girl inside the monster... was the girl lying in the snow in my dream. ") +sm.setParam(57) +sm.sendSay("#b...? ") +sm.setParam(37) +sm.sendSay("#face4##h0#, you said you have leads on who was behind the abductions, right? ") +sm.setParam(57) +sm.sendSay("#bI have clues, but nothing concrete yet. I'm still working on it. ") +sm.setParam(37) +sm.sendSay("#face4#Well, I want to work on it with you. ") +sm.sendSay("#face4#My dreams... they feel like cries for help! We're too late to save Julieta, but maybe there's still a chance to save Blanche. ") +sm.sendSay("#face4#And the other people of Abrup that disappeared... they must be with Blanche as well. ") +sm.sendSay("#face4##h0#... I have to get to the bottom of this. It feels like my responsibility. ") +sm.sendSay("#face5#Please... Will you help me? ") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bAlika... ") +sm.setParam(37) +sm.sendSay("#face0#You don't have to answer right away. ") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bBut why me? ") +sm.setParam(37) +sm.sendSay("#face4#...I don't know. It just feels right. ") +sm.sendSay("#face4#We're two people that never would have met, had fate not brought us together. ") +sm.sendSay("#face4#I had a dream, and you found a letter. Those simple events have led to all of this. ") +sm.sendSay("#face4#All that time we spent wandering the forest, searching for a girl we didn't know... There's a reason for this. A reason we're here. Together. ") +sm.sendSay("#face4##h0#... don't you feel it too?") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#b...Alright. We'll do this together.") +sm.blind(True, 255, 0, 0, 0, 2000) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64143) +sm.warp(867202990) diff --git a/scripts/field/enter_867202316.py b/scripts/field/enter_867202316.py new file mode 100755 index 0000000..406da1c --- /dev/null +++ b/scripts/field/enter_867202316.py @@ -0,0 +1,224 @@ +# id 867202316 (Abrup Basin : Skuas), field 867202316 +sm.showNpcSpecialActionByTemplateId(9400603, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400603, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400600, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.moveNpcByTemplateId(9400580, False, 70, 50) +sm.sendDelay(250) +sm.forcedMove(False, 100) +sm.moveNpcByTemplateId(9400586, True, 40, 30) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("I never thought it would... ") +sm.moveNpcByTemplateId(9400589, False, 300, 120) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Sanaan! You made it! Oh, I'm so relieved... ") +sm.sendDelay(3000) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400589, False) +sm.sendNext("#face0#Oh, I was so glad that I got carried away... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Hah, it's okay. Nice to know someone was worried. ") +sm.moveNpcByTemplateId(9400587, False, 130, 50) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400597, False, 90, 50) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#It's... been a while, Sanaan. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Hmm, hmm! Yes, quite a while! Why didn't you tell me? ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Tell you what, you old windbag? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face1#Well... Ah, hmm! ") +sm.sendSay("#face1#...About your situation, though... I suppose you did. Ah, well, I hope you understand that I was just following town policy! Hmm! ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("There's no point in dwelling on the past.") +sm.moveNpcByTemplateId(9400600, True, 30, 50) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendNext("Have I not taught you the importance of cooperation and compassion? We only have each other here in this valley, so selfishness is entirely self-defeating. ") +sm.sendSay("Had you considered the needs of your kin for even a moment, this wouldn't have happened. ") +sm.sendSay("How can you call yourself a leader if you act with such cruelty? ") +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 34292437, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 34292438, 0, 0) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Chief Birna... We aren't children listening to your history lessons anymore. ") +sm.sendSay("#face0#We must make tough decisions for the good of our people. Don't treat us like children.") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#That's... That's what I'm saying! ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("I'm treating you as a chief, Kan. That means holding you to a higher standard.") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400597, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400597, True, 100, 80) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400586, False) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("Don't trouble yourself with lectures, Birna. What matters is that I'm here now. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400586, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400589, False) +sm.moveNpcByTemplateId(9400586, True, 40, 50) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400589, False, 190, 80) +sm.sendDelay(2500) +sm.sendNext("I didn't want to assume... but the letter that brought you here was mine, yes? ") +sm.sendSay("Well then. Welcome to Abrup, such as it is. ") +sm.forcedMove(False, 80) +sm.setParam(57) +sm.sendSay("#bI'm so glad you're okay... Sorry to keep you waiting. ") +sm.setParam(37) +sm.sendSay("Nonsense, friend. You've clearly had your hands full.") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("You are every bit the hero our people say you are. You've accomplished so much, even bringing these two hard-headed chiefs together somehow. ") +sm.setParam(57) +sm.sendSay("#bOh, that wasn't me. She gets the credit for uniting the towns. ") +sm.flipNpcByTemplateId(9400589, True) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Hello. I'm Alika, a scholar with the Afinas Dispatch. ") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("A pleasure to meet you, Alkia. I'm Birna, chief of Skuas. ") +sm.sendSay("I owe you both my most heartfelt thanks. ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("How difficult this must have all been for you, coming all this way. ") +sm.setParam(57) +sm.sendSay("#bWe've had plenty of help though, from both the Afinas Dispatch and the locals.") +sm.spawnNpc(9400588, -275, -185) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.moveNpcByTemplateId(9400588, False, 80, 50) +sm.sendDelay(1200) +sm.setParam(37) +sm.sendNext("Ah... Thank you, thank you... You have no idea how much this means to me. ") +sm.sendSay("After my granddaughter disappeared, I searched every corner of Abrup looking for her, for any sign of her. ") +sm.sendSay("A day came soon after when the forest wind stopped and everything froze. After that, the monsters began changing. ") +sm.sendSay("I had no idea how dire the situation was. Fortunately Elva here came to rescue me from the mounting danger. ") +sm.sendSay("Here in Skuas I was safe, but I couldn't search for my granddaughter, or even wait for her at our cabin. All I could do was write letters begging for help. ") +sm.sendSay("I've written hundreds of letters, and you are the only person who came. ") +sm.setParam(57) +sm.sendSay("#bBut I couldn't find any trace of her, either...") +sm.setParam(37) +sm.sendSay("Please, don't be sorry. What you've done here is a far greater thing than helping one old woman. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Umm... I brought the picture from the cabin. ") +sm.moveNpcByTemplateId(9400580, False, 50, 50) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/questEffect/PL_MONAD1/6", 0, 0, 0, 0, 34292435, 0, 0) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 50, 50) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400580, False) +sm.showEffect("Effect/OnUserEff.img/questEffect/PL_MONAD1/6", 0, 0, 0, 0, 34292434, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("Oh, goodness... Thank you so much, dear. My one regret when I left my cabin was leaving this precious picture behind. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#I'm sorry about what happened to your granddaughter. ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("She's strong. I have a feeling we'll be reunited soon. ") +sm.setParam(57) +sm.sendSay("#bShe's... very special, isn't she? ") +sm.setParam(37) +sm.sendSay("Yes. No one is as special as my Blanche... ") +sm.sendDelay(250) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation", 1000, 0, 0, 0, 34304857, 0, 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Blanche...? Blanche was taken too? ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400587, True) +sm.sendDelay(250) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bYes, the letter that brought me here was about a missing granddaughter. And that letter was from Sanaan. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Sanaan saved us all. ") +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/shade", 0, 0, 0, 0, 34304857, 0, 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("B-but Blanche... Did Blanche... We...? ") +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/shade", 0, 0, 0, 0, 34304857, 0, 0) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400588, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400588, True, 100, 140) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face1#... ") +sm.moveNpcByTemplateId(9400587, True, 150, 140) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bWhat's Ullan trying to say? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("It's nothing, just something from the past. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("She still remembers what happened back then... ") +sm.sendSay("But if you're stuck in the past for too long, you can never change the future. ") +sm.sendSay("Ignoring our problems accomplishes nothing...") +sm.sendSay("It's a shame that some people seem to forget that. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face1#Very true...") +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendSay("Only when we acknowledge our past mistakes can we improve. Don't you agree? ") +sm.sendSay("It may have taken longer than it should, but these people need to experience every step. ") +sm.spawnNpc(9400581, -400, -85) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.spawnNpc(9400582, -480, -85) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400583, -540, -85) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.moveNpcByTemplateId(9400581, False, 250, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400582, False, 250, 80) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400583, False, 250, 80) +sm.sendDelay(4000) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendNext("There are many things I want to tell to you, #h0#. But I am not the only one who needs you now. ") +sm.sendSay("Once you have attended to your duties, come and sit with me for a chat.") +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.sendNext("#h0#, I know it's not much, but please accept this. \r\nI'm truly grateful to you for coming here and uniting the people of Abrup.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.completeQuestNoCheck(64103) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/06/23/13/36") +sm.createQuestWithQRValue(25980, "normal=#164#119#88#87#;hard=#") +sm.warp(867202303) diff --git a/scripts/field/enter_867202398.py b/scripts/field/enter_867202398.py new file mode 100755 index 0000000..864e694 --- /dev/null +++ b/scripts/field/enter_867202398.py @@ -0,0 +1,135 @@ +# id 867202398 (Abrup Basin : Training Grounds), field 867202398 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400602, -200, -90) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.forcedFlip(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bSo, have you ever fought before? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#I went hunting once a long time ago. ") +sm.setParam(57) +sm.sendSay("#bI see... ") +sm.setParam(37) +sm.sendSay("#face0#... ") +sm.setParam(57) +sm.sendSay("#bDo you know how to use a spear and shield? ") +sm.setParam(37) +sm.sendSay("#face0#No, not really... ") +sm.spawnNpc(9400582, -650, -90) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400580, -650, -90) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.moveNpcByTemplateId(9400582, False, 250, 100) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, False, 200, 80) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0##h0#! Einar! ") +sm.flipNpcByTemplateId(9400602, True) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bWhen did you pick up his name? ") +sm.setParam(37) +sm.sendSay("#face0#He's my student now. A fine teacher must know his student's name. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#... ") +sm.setParam(57) +sm.sendSay("#bCayne is a trained knight, He can teach you better than I can. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Indeed! And #h0# will spar with you. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#...Thank you. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#I don't have much time to spare, so this will be a short, intense lesson. ") +sm.sendSay("#face0#With your strength, it won't be too hard for you to handle a shield. ") +sm.sendSay("#face0#Watch my moves, and do as I do. ") +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400582, "skill", 0) +sm.sendDelay(2500) +sm.sendNext("#face0#See? ") +sm.setParam(57) +sm.sendSay("#bAh, Cayne? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Cayne, what are you doing? How do you expect him to copy that? ") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 34869135, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#...! ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#It's a simple sequence of moves. So long as the student trusts in his teacher, it all flows naturally. Student, were you watching? ") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face0#Yes, thank you...") +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400580, False, 320, 100) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400582, True, 150, 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Truly, it's not at all difficult. Just remember two things.") +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "#fs15##eBlock! Stab!", 3000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.moveNpcByTemplateId(9400602, True, 50, 50) +sm.sendDelay(3000) +sm.speechBalloon(False, 0, 0, "#fs15#Block, stab.", 3000, 1, 0, 0, 0, 4, 9400602, 4878499) +sm.flipNpcByTemplateId(9400580, True) +sm.sendNext("#face0#Don't forget!") +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400582, "attack1", 0) +sm.sendDelay(500) +sm.speechBalloon(True, 0, 0, "#fs15##eBlock!", 3000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.showNpcSpecialActionByTemplateId(9400602, "attack2", 0) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400602, "attack1", 0) +sm.sendDelay(500) +sm.speechBalloon(True, 0, 0, "#fs15##eNext, stab!", 3000, 1, 0, 0, 0, 4, 9400582, 4878499) +sm.showNpcSpecialActionByTemplateId(9400582, "skill", 0) +sm.sendDelay(3000) +sm.sendNext("#face0#Ooh, not bad!") +sm.sendSay("#face0#Block, stab, and repeat three times!") +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400602, "attack2", 0) +sm.sendDelay(2100) +sm.showNpcSpecialActionByTemplateId(9400602, "attack1", 0) +sm.sendDelay(1800) +sm.setParam(57) +sm.sendNext("#b...Is this how you normally train in Afinas?") +sm.showNpcSpecialActionByTemplateId(9400602, "attack2", 0) +sm.sendDelay(2100) +sm.showNpcSpecialActionByTemplateId(9400602, "attack1", 0) +sm.sendDelay(1800) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Look, this is entirely on Cayne, alright? Don't assume...") +sm.showNpcSpecialActionByTemplateId(9400602, "attack2", 0) +sm.sendDelay(2100) +sm.showNpcSpecialActionByTemplateId(9400602, "attack1", 0) +sm.sendDelay(1800) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face3#Huff, huff...") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152844;QET=20190623135524;state=2") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152844;QET=20190623135524;state=1") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152844;QET=20190623145525;state=1") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#You look beat, friend. In my professional opinion, you need a few big meals and more fresh air. Haven't been eating or sleeping well, hm?") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face3#Huff, huff... How... did you know that?") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#I have my ways.") +sm.sendSay("#face0#Right! Sparring time. #h0#, are you ready?") +sm.setParam(57) +sm.sendSay("#bOf course.") +sm.forcedMove(True, 100) +sm.lockInGameUI(False, True) +sm.startQuest(64129) +sm.warp(867202480) diff --git a/scripts/field/enter_867202399.py b/scripts/field/enter_867202399.py new file mode 100755 index 0000000..e3be0d8 --- /dev/null +++ b/scripts/field/enter_867202399.py @@ -0,0 +1,98 @@ +# id 867202399 (Abrup Basin : Training Grounds), field 867202399 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400582, -110, -70) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400602, -170, -70) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face3#Huff, huff...") +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Einar, you can't be tired. Lots of people are counting on you. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#Did... Sanaan... talk to you...?") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Of course she did. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#Is that... why you're being nice to me? ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Nope. She asked me to treat you like anyone else. ") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 0, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face0#... ") +sm.sendDelay(1500) +sm.setParam(57) +sm.sendNext("#bSanaan is worried about you. ") +sm.setParam(37) +sm.sendSay("#face1#I know... I owe her so much. ") +sm.sendSay("#face1#To return her favor, I must... ") +sm.sendSay("#face0#This armor Sanaan gave me... I can never repay her. ") +sm.sendSay("#face0#...I'm guessing you don't think much of me right now. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Why would you say that? No judgments here. ") +sm.setParam(57) +sm.sendSay("#bNo one's going to give you a hard time with all the effort you're putting in. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#Honestly, #h0#, I heard your speech from my home. One part stood out to me... 'I realized that there were always people who helped me, for everything I thought I accomplished on my own.' ") +sm.sendSay("#face1#You're right. I wouldn't be here if it weren't for the townspeople. ") +sm.sendDelay(1000) +sm.sendNext("#face0#...Please, will you listen to my story? ") +sm.setParam(57) +sm.sendSay("#bOf course. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#Just keep it under three minutes. We've got a training schedule to stick to! ") +sm.setParam(57) +sm.sendSay("#bNot now, Cayne...") +sm.setParam(37) +sm.sendSay("#face1#Hey, I've just got plenty of energy to burn. You talk, I'll stretch. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0#For almost my whole life, Julieta was my only family. There's a big age gap between us, but soon after she was born, our parents... ") +sm.sendSay("#face0#I did any kind of work I could find to make a living for my sister and I. There wasn't much I could do, but I chopped wood and fixed roofs and cleaned barns as best I could. I still do, honestly. ") +sm.sendSay("#face0#Then came the day that everyone disappeared into the forest. They vanished, and never returned. ") +sm.sendSay("#face0#That morning, I was supposed to cut trees on my own in the deep forest. I was terrified. My sister told me not to go, but I knew I had to work for use to survive. ") +sm.sendSay("#face0#As I was leaving, the Chief stopped me and asked me to help with something else in town. I don't even remember what it was now...") +sm.sendSay("#face0#Julieta didn't know that. She packed me a lunch and came to find me in the forest... ") +sm.sendSay("#face1#It's... it's my fault that she's gone. ") +sm.sendSay("#face1#My whole family is gone... and it's my fault. I know it's my fault. It's like I'm cursed... ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#That's ridiculous. ") +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face1#You know what's worse than that, though? ") +sm.sendSay("#face1#I never even considered looking for my sister. All I could think about was my regret... if I had stayed home that day... if I had gone to the forest... if I had told Julieta that I was going...") +sm.sendSay("#face0#I always think like that, but now it's the other way. If Elva didn't bring me food every day... if the Chief didn't make me take charge of my life...") +sm.sendSay("#face0#And if Sanaan never made this armor, or find Julieta's necklace...") +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/scene3/d2","0","scene3") +sm.sendSay("#face0#If any of those things didn't happen, I'd still be wallowing at home in my guilt and remorse. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Is she your sister? She doesn't look like you. ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face0##h0#, you were right. I'm still here because I had help from everyone. ") +sm.sendSay("#face0#I'm so happy I've finally realized this, before it's too late. I want to do everything I can to help you. It's the only way I can atone for abandoning my sister. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Great! That means it's time for action, not words. And if you want to act, you've got to learn to fight! ") +sm.offSpineScreen("scene3", 0, "", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400582, True, 120, 100) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400582, False) +sm.sendDelay(500) +sm.sendNext("#face0##h0#, Einar, are you ready? ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face2#Yes... I'm ready! ") +sm.setParam(57) +sm.sendSay("#bI'm ready too. ") +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64129) +sm.startQuest(64130) +sm.warp(867202500) diff --git a/scripts/field/enter_867202401.py b/scripts/field/enter_867202401.py new file mode 100755 index 0000000..fd81882 --- /dev/null +++ b/scripts/field/enter_867202401.py @@ -0,0 +1,24 @@ +# id 867202401 (Abrup Basin : Training Grounds), field 867202401 +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#So, how shall we begin? ") +sm.setParam(57) +sm.sendSay("#bSparring! Just imagine that I'm a monster, and attack. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#A-attack you? ") +sm.setParam(57) +sm.sendSay("#bYes, both of you attack at once! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Hah, you're full of confidence! Are you sure? ") +sm.setParam(57) +sm.sendSay("#bEasy peasy! ") +sm.setParam(37) +sm.sendSay("#face0#Ha ha! Aruhi, let's show #h0# what we can do! ") +sm.sendSay("#face0#Let's GO!!") +sm.warp(867202420) diff --git a/scripts/field/enter_867202402.py b/scripts/field/enter_867202402.py new file mode 100755 index 0000000..7ee9354 --- /dev/null +++ b/scripts/field/enter_867202402.py @@ -0,0 +1,26 @@ +# id 867202402 (Abrup Basin : Training Grounds), field 867202402 +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#You're really something. You've worn us out, and you're not even winded. ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face1#Phew, no kidding! ") +sm.sendSay("#face0#You're amazing too, Peytour! Makes me think back to that time we were drinking and you got to talking about your past... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Hah, you still have the strength to talk? I guess you've still got more left in you! ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#Ack, no! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#You're going to be training all day today, so get ready! ") +sm.setParam(57) +sm.sendSay("#bYou're going to wear Aruhi out! Take a break. ") +sm.setParam(37) +sm.sendSay("#face0#Hah, I was just joking around. ") +sm.sendSay("#face0#We'll do this again soon, friends. I want the strength to reclaim my village! ") +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face0#Yeah! Me too! ") +sm.completeQuestNoCheck(64110) +sm.warp(867202300) diff --git a/scripts/field/enter_867202403.py b/scripts/field/enter_867202403.py new file mode 100755 index 0000000..c1dc064 --- /dev/null +++ b/scripts/field/enter_867202403.py @@ -0,0 +1,59 @@ +# id 867202403 (Abrup Basin : Training Grounds), field 867202403 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400636, -530, -70) +sm.showNpcSpecialActionByTemplateId(9400636, "summon", 0) +sm.spawnNpc(9400596, -400, -70) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400597, -150, -70) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400599, -80, -70) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400636, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400596, "attack1", -1) +sm.sendDelay(1000) +sm.createQuestWithQRValue(49004, "QET=20190623142524") +sm.createQuestWithQRValue(49000, "count=1;Quest=49004;day=152844;QET=20190623125240;state=1") +sm.createQuestWithQRValue(49000, "count=1;Quest=49004;day=152844;QET=20190623125240;state=2") +sm.createQuestWithQRValue(49000, "count=1;Quest=49004;day=152844;QET=20190623135524;state=2") +sm.createQuestWithQRValue(49004, "QET=20190623142524") +sm.createQuestWithQRValue(49004, "QET=20190623142524") +sm.startQuest(49004) +sm.moveNpcByTemplateId(9400597, True, 50, 30) +sm.moveNpcByTemplateId(9400599, True, 50, 30) +sm.sendDelay(1000) +sm.resetNpcSpecialActionByTemplateId(9400636) +sm.resetNpcSpecialActionByTemplateId(9400596) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400636, False) +sm.sendDelay(250) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "What are you looking at?!", 2000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "What, we're not allowed over here?", 2000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(False, 0, 0, "I didn't say anything! I was happy because we're finally training together.", 2000, 1, 0, 0, 0, 4, 9400636, 4878499) +sm.sendDelay(1500) +sm.speechBalloon(False, 0, 0, "...Ahem!", 2000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.flipNpcByTemplateId(9400596, True) +sm.flipNpcByTemplateId(9400636, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400596, True, 100, 50) +sm.moveNpcByTemplateId(9400636, True, 80, 30) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bIt's not hard. ") +sm.flipNpcByTemplateId(9400636, False) +sm.flipNpcByTemplateId(9400596, False) +sm.forcedFlip(True) +sm.sendDelay(250) +sm.sendNext("#bCome at me with your harpoon like I'm a fish jumping out of the water! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#...Huh?! ") +sm.setInnerOverrideSpeakerTemplateID(9400599) # Harpooner +sm.sendSay("Attack you? #h0#? ") +sm.setParam(57) +sm.sendSay("#bYes! Let's get started! ") +sm.warp(867202440) diff --git a/scripts/field/enter_867202404.py b/scripts/field/enter_867202404.py new file mode 100755 index 0000000..e8c6f26 --- /dev/null +++ b/scripts/field/enter_867202404.py @@ -0,0 +1,65 @@ +# id 867202404 (Abrup Basin : Training Grounds), field 867202404 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400597, -270, -70) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400632, -450, -70) +sm.showNpcSpecialActionByTemplateId(9400632, "summon", 0) +sm.spawnNpc(9400633, -520, -70) +sm.showNpcSpecialActionByTemplateId(9400633, "summon", 0) +sm.spawnNpc(9400583, -110, -70) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400585, -45, -70) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bPhew! Good job everyone.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Whew... I swear... I used to be an amazing harpooner... back in the day...") +sm.moveNpcByTemplateId(9400583, True, 50, 50) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#Wow! You're much better than I was expecting! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Hmm, really? ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#Yep! I mean, you're still a little lacking on power... ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Hmmm... Really? ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#Your attacks were very quick and precise. Maybe because you've been hunting small fish. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Really?! ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#You know, I was thinking it would help if we could net the monsters when they attack... ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#A net?! ") +sm.sendDelay(500) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "How?", 2000, 1, 0, 0, 0, 4, 9400632, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(False, 0, 0, "Really?", 2000, 1, 0, 0, 0, 4, 9400633, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0##h0#! Could you spar with us one more time? ") +sm.setParam(57) +sm.sendSay("#bOf course! ") +sm.setParam(37) +sm.sendSay("#face0#I need three people from Afinas to help me. ") +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendSay("Got it! ") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face0#Great. Alright, harpooners... Throw your nets at #h0# and the soldiers on my signal! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Okay, piece of cake! ") +sm.sendDelay(500) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Okay!", 2000, 1, 0, 0, 0, 4, 9400632, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Got it!", 2000, 1, 0, 0, 0, 4, 9400633, 4878499) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#I'll be attacking as well! Watch out, #h0#! ") +sm.completeQuestNoCheck(64119) +sm.startQuest(64120) +sm.lockInGameUI(False, True) +sm.warp(867202460) diff --git a/scripts/field/enter_867202420.py b/scripts/field/enter_867202420.py new file mode 100755 index 0000000..18be5a1 --- /dev/null +++ b/scripts/field/enter_867202420.py @@ -0,0 +1,27 @@ +# id 867202420 (Abrup Basin : Training Grounds), field 867202420 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400589, -638, -70) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400592, -10, -70) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAruhi! Hit harder! ") +sm.showNpcSpecialActionByTemplateId(9400592, "attack1", 0) +sm.sendDelay(3000) +sm.sendNext("#bNow, Peytour! Throw your axe! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Here goes!") +sm.showNpcSpecialActionByTemplateId(9400589, "attack2", 0) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#Whoa! Amazing throw!") +sm.sendDelay(2000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64110, "dir1=1;chk=0;chk1=1") +sm.warp(867202402) diff --git a/scripts/field/enter_867202440.py b/scripts/field/enter_867202440.py new file mode 100755 index 0000000..6a4d319 --- /dev/null +++ b/scripts/field/enter_867202440.py @@ -0,0 +1,46 @@ +# id 867202440 (Abrup Basin : Training Grounds), field 867202440 +sm.removeAdditionalEffect() +sm.spawnNpc(9400597, -638, -70) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400599, -550, -70) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.spawnNpc(9400599, -450, -70) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.spawnNpc(9400583, -10, -70) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#Imagine you're just catching fish! ") +sm.showNpcSpecialActionByTemplateId(9400599, "attack1", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400599, "attack1", 0) +sm.sendDelay(700) +sm.showNpcSpecialActionByTemplateId(9400597, "attack1", 0) +sm.sendDelay(2000) +sm.sendNext("#face0#You sometimes throw your harpoons when you fish, right? ") +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Gah! Here goes nothing! ") +sm.zoomCamera(1500, 2000, 1500, -305, -65) +sm.setFieldGrey(GreyFieldType.Field, True) +sm.blind(True, 150, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.showNpcSpecialActionByTemplateId(9400597, "attack2", 0) +sm.forcedInput(4) +sm.sendDelay(1000) +sm.setFieldGrey(GreyFieldType.Field, False) +sm.blind(True, 1, 255, 255, 255, 200) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.moveCamera(True, 0, 0, 0) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64119, "dir1=1;chk1=1") +sm.warp(867202404) diff --git a/scripts/field/enter_867202460.py b/scripts/field/enter_867202460.py new file mode 100755 index 0000000..de0388b --- /dev/null +++ b/scripts/field/enter_867202460.py @@ -0,0 +1,40 @@ +# id 867202460 (Abrup Basin : Training Grounds), field 867202460 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400597, -150, -70) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400583, -638, -70) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.spawnNpc(9400599, -550, -70) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.spawnNpc(9400599, -10, -70) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.spawnNpc(9400585, -350, -70) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.spawnNpc(9400585, -270, -70) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#Everyone, throw your nets when I give the signal! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Leave it to me! ") +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400583, "attack2", 0) +sm.sendDelay(2000) +sm.sendNext("#face0#I've got you! ") +sm.showNpcSpecialActionByTemplateId(9400597, "attack3", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400599, "attack2", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/svartiSkill", 0) +sm.showNpcSpecialActionByTemplateId(9400599, "attack2", 0) +sm.sendDelay(500) +sm.sendNext("#face0#Gahaha, no one can escape the grasp of Svarti!") +sm.sendDelay(2000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64120, "chk1=1") +sm.warp(867202307) diff --git a/scripts/field/enter_867202480.py b/scripts/field/enter_867202480.py new file mode 100755 index 0000000..3611a2f --- /dev/null +++ b/scripts/field/enter_867202480.py @@ -0,0 +1,26 @@ +# id 867202480 (Abrup Basin : Training Grounds), field 867202480 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400582, -500, -70) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400602, -100, -70) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400602, "attack1", 0) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400602, "attack2", 0) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Don't forget! ") +sm.sendSay("#face0#Block and stab!") +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400582, "buff", 0) +sm.sendDelay(3000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64129, "chk1=1") +sm.warp(867202399) diff --git a/scripts/field/enter_867202500.py b/scripts/field/enter_867202500.py new file mode 100755 index 0000000..aa0b259 --- /dev/null +++ b/scripts/field/enter_867202500.py @@ -0,0 +1,26 @@ +# id 867202500 (Abrup Basin : Training Grounds), field 867202500 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400582, -150, -70) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400602, -638, -70) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400582, "skill", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face1#Einar, do you remember what I've taught you? ") +sm.showNpcSpecialActionByTemplateId(9400602, "attack2", 0) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face2#Yes! Block and stab! ") +sm.showNpcSpecialActionByTemplateId(9400602, "attack1", 0) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(9400582, "buff", 0) +sm.sendDelay(2000) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64130, "chk1=1") +sm.warp(867202300) diff --git a/scripts/field/enter_867202600.py b/scripts/field/enter_867202600.py new file mode 100755 index 0000000..617a81f --- /dev/null +++ b/scripts/field/enter_867202600.py @@ -0,0 +1,3 @@ +# id 867202600 (Abrup Basin : Sunglow Forest), field 867202600 +sm.createQuestWithQRValue(64108, "chk1=1") +sm.warp(867202652) diff --git a/scripts/field/enter_867202620.py b/scripts/field/enter_867202620.py new file mode 100755 index 0000000..8304061 --- /dev/null +++ b/scripts/field/enter_867202620.py @@ -0,0 +1,7 @@ +# id 867202620 (Abrup Basin : Sunglow Forest), field 867202620 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#Agh, hurry! Help!") +sm.warp(867202651) diff --git a/scripts/field/enter_867202650.py b/scripts/field/enter_867202650.py new file mode 100755 index 0000000..7101428 --- /dev/null +++ b/scripts/field/enter_867202650.py @@ -0,0 +1,60 @@ +# id 867202650 (Abrup Basin : Sunglow Forest), field 867202650 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, -1300, 130) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400672, -1400, 130) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400674, -1500, 130) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, -1550, 130) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400674, -1650, 130) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400589, -60, 130) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400592, 130, 130) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400596, 400, 130) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400635, 460, 130) +sm.showNpcSpecialActionByTemplateId(9400635, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#Ughhh... W-wait! Over here!") +sm.forcedFlip(True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400590, False, 600, 200) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400672, False, 600, 180) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400674, False, 600, 180) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400676, False, 580, 180) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400674, False, 570, 180) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400592, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400596, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400635, True) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#...Slaka?!") +sm.moveNpcByTemplateId(9400589, True, 100, 200) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400589, "attack2", 0) +sm.sendDelay(1500) +sm.showNpcSpecialActionByTemplateId(9400672, "die1", 0) +sm.showNpcSpecialActionByTemplateId(9400674, "die1", 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#Kuahhh!") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0##h0#!") +sm.startQuest(64109) +sm.lockInGameUI(False, True) +sm.warp(867202620) diff --git a/scripts/field/enter_867202651.py b/scripts/field/enter_867202651.py new file mode 100755 index 0000000..b094845 --- /dev/null +++ b/scripts/field/enter_867202651.py @@ -0,0 +1,98 @@ +# id 867202651 (Abrup Basin : Sunglow Forest), field 867202651 +sm.lockInGameUI(True, False) +sm.createQuestWithQRValue(64019, "chk1=1") +sm.spawnNpc(9400590, -300, 130) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400589, 0, 130) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400592, 150, 130) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400596, 350, 130) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.spawnNpc(9400635, 400, 130) +sm.showNpcSpecialActionByTemplateId(9400635, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face1#Ugh...") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face1#Gaaah...") +sm.setParam(57) +sm.sendSay("#bPhew... ") +sm.setParam(37) +sm.sendSay("#face1#Uhhhhhh...") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#You... You have the nerve to return here after stealing our food?! ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#What? What?! Gah, I'm tired, I'm beaten up, and this is how you treat me? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#...I'm sorry, treated like what, exactly? ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Treated! Like! This! I was halfway up the El Nath Mountains when I decided to turn back just for you people! I thought you might need my help! ") +sm.setParam(57) +sm.sendSay("#bThen why did you run off with the food in the first place? ") +sm.setParam(37) +sm.sendSay("#face0#Hey, hey, hey! We... don't need to worry about that right now! You should be nice, or I won't tell you what I saw. ") +sm.sendSay("#face0#I really did come back because I was worried about you guys, you know! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#I know you too well to believe that, Slaka. Besides, you look as though you've been lost in the woods for days.") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Well yeah, I was climbing that dangerous mountain! Geez... ") +sm.setParam(57) +sm.sendSay("#bSo what is it that you saw out there? ") +sm.setParam(37) +sm.sendSay("#face0#Up on the mountain like that, I had a good view of the entire Abrup Basin! ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#I should hope so, assuming you really were up the mountain... ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Which I was! But while I was there I saw... it was... ") +sm.setParam(57) +sm.sendSay("#bWhat was it? ") +sm.setParam(37) +sm.sendSay("#face0#It was a giant silhouette, and a red snowstorm surrounding it! ") +sm.setParam(57) +sm.sendSay("#b...! ") +sm.setParam(37) +sm.sendSay("#face0#I could see hundreds... no, thousands of monsters spilling out of the snowstorm, too! ") +sm.sendSay("#face0#And they all moved together, making the storm even bigger! ") +sm.sendSay("#face0#That's exactly what happened when Kaptafel was about to be attacked, you know. ") +sm.sendSay("#face0#So yeah... I could have gone straight to El Nath, but you know me. My soft heart told me you guys were in trouble, so I came all the way back down. ") +sm.sendSay("#face0#You need to understand, that red snowstorm is still raging around the forest! ") +sm.sendSay("#face0#They're on the way here... The red snow and that giant shadow! ") +sm.setParam(57) +sm.sendSay("#b(That sounds just like the shadow I saw...) ") +sm.setParam(37) +sm.sendSay("#face0#See? Now, don't you feel bad for treating me like trash? ") +sm.setParam(57) +sm.sendSay("#b(That's a bit much, but still...) ") +sm.sendSay("#bAlright. I trust you, Slaka. Thanks for this valuable information. ") +sm.setParam(37) +sm.sendSay("#face0#Yeah? Am I finally being recognized for my contributions? ") +sm.setParam(57) +sm.sendSay("#bWell, we also can't ignore you stealing our food and abandoning us. ") +sm.setParam(37) +sm.sendSay("#face0#...Really? Well, uh, what's done is done, right? ") +sm.sendSay("#face0#I mean, if you're going to treat me like a thief, then... I could be like Robin Hood! Yeah, that food totally went to some poor folks in need! ") +sm.sendSay("#face0#Yep, poor folks... like me! Then once I was full, I had the energy to come all the way back and help! ...Right? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#...Let's just put this behind us and move on. If things are really as bad as you say, then we have no time to waste. ") +sm.sendSay("#face0#We should hurry back.") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400589, False) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400596, False) +sm.flipNpcByTemplateId(9400635, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400635, False, 300, 100) +sm.moveNpcByTemplateId(9400596, False, 300, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400592, False, 300, 100) +sm.moveNpcByTemplateId(9400589, False, 300, 100) +sm.sendDelay(250) +sm.forcedMove(False, 300) +sm.moveNpcByTemplateId(9400590, False, 300, 100) +sm.sendDelay(3000) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64109) +sm.warp(867202304) diff --git a/scripts/field/enter_867202652.py b/scripts/field/enter_867202652.py new file mode 100755 index 0000000..22e521e --- /dev/null +++ b/scripts/field/enter_867202652.py @@ -0,0 +1,61 @@ +# id 867202652 (Abrup Basin : Sunglow Forest), field 867202652 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400592, -550, 130) +sm.showNpcSpecialActionByTemplateId(9400592, "summon", 0) +sm.spawnNpc(9400589, -460, 130) +sm.showNpcSpecialActionByTemplateId(9400589, "summon", 0) +sm.spawnNpc(9400611, -300, 130) +sm.showNpcSpecialActionByTemplateId(9400611, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400611, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400589, "attack1", -1) +sm.moveNpcByTemplateId(9400592, True, 100, 70) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#Ah... Umm... ") +sm.sendSay("#face0#D-do you finally believe I'm clean? ") +sm.resetNpcSpecialActionByTemplateId(9400611) +sm.resetNpcSpecialActionByTemplateId(9400589) +sm.showNpcSpecialActionByTemplateId(9400611, "die1", 0) +sm.sendDelay(1200) +sm.flipNpcByTemplateId(9400589, True) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#We do. This is the most level-headed you've been since this whole mess started. ") +sm.setParam(57) +sm.sendSay("#bAnd this is the most level-headed I've EVER seen you! ") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face1#That day... when I returned home from the the Skuas market... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Aruhi... ") +sm.moveNpcByTemplateId(9400589, True, 100, 70) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendSay("#face1#Please, just hear me out, just this once... Please, Peytour. ") +sm.setParam(57) +sm.sendSay("#bGo on. ") +sm.setParam(37) +sm.sendSay("#face1#When I returned, the town felt wrong. There were footprints everywhere... And at the end of those footprints... friends and loved ones being carried away screaming... ") +sm.sendSay("#face1#I saw it with my own two eyes. They were demons covered head to toe in steel armor, white as snow! ") +sm.sendSay("#face1#I'm a coward... I did nothing. I just hid and waited for it all to end. ") +sm.sendSay("#face1#But I'm no liar... I've been telling the truth every day since it happened. Do you believe me now? ") +sm.setParam(57) +sm.sendSay("#b...Alright. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face1#There are no other witnesses, and the kidnappers left no traces, so... ") +sm.setParam(57) +sm.sendSay("#bLet's ask around, then. Perhaps someone from another village saw them. ") +sm.createQuestWithQRValue(64039, "chk1=1") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#T-thank you! Oh, thank you! All I've wanted was to be trusted again! ") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Almost done... Just a little bit more...") +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(64108) +sm.warp(-1) diff --git a/scripts/field/enter_867202660.py b/scripts/field/enter_867202660.py new file mode 100755 index 0000000..9854bdd --- /dev/null +++ b/scripts/field/enter_867202660.py @@ -0,0 +1,38 @@ +# id 867202660 (Abrup Basin : Shrelephant Habitat), field 867202660 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#There. It's the Shrelephants you used to raise. Go ahead, have at them. ") +sm.setParam(57) +sm.sendSay("#bYou should join us, Slaka. ") +sm.setParam(37) +sm.sendSay("#face0#Huh? Hold on now, I only agreed to be your guide. ") +sm.setParam(57) +sm.sendSay("#bLook, we're all going to work together on this. I say we each collect 30 pieces of Shrelephant meat and then head back. ") +sm.createQuestWithQRValue(64121, "item=1") +sm.createQuestWithQRValue(64121, "item=2") +sm.createQuestWithQRValue(64121, "item=3") +sm.createQuestWithQRValue(64121, "item=4") +sm.createQuestWithQRValue(64121, "item=5") +sm.createQuestWithQRValue(64121, "item=6") +sm.createQuestWithQRValue(64121, "item=7") +sm.createQuestWithQRValue(64121, "item=8") +sm.createQuestWithQRValue(64121, "item=9") +sm.createQuestWithQRValue(64121, "item=10") +sm.createQuestWithQRValue(64121, "item=11") +sm.createQuestWithQRValue(64121, "item=12") +sm.createQuestWithQRValue(64121, "item=13") +sm.createQuestWithQRValue(64121, "item=14") +sm.createQuestWithQRValue(64121, "item=15") +sm.createQuestWithQRValue(64121, "item=16") +sm.createQuestWithQRValue(64121, "item=17") +sm.createQuestWithQRValue(64121, "item=18") +sm.createQuestWithQRValue(64121, "item=19") +sm.createQuestWithQRValue(64121, "item=20") +sm.createQuestWithQRValue(64121, "item=21") +sm.createQuestWithQRValue(64121, "item=22") +sm.createQuestWithQRValue(64121, "item=23") +sm.createQuestWithQRValue(64121, "item=24") +sm.createQuestWithQRValue(64121, "item=25") +sm.warp(867202683) diff --git a/scripts/field/enter_867202680.py b/scripts/field/enter_867202680.py new file mode 100755 index 0000000..756a4de --- /dev/null +++ b/scripts/field/enter_867202680.py @@ -0,0 +1,11 @@ +# id 867202680 (Abrup Basin : Windsleep Forest Junction), field 867202680 +sm.lockInGameUI(False, True) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#Wh... what?! Fembris? How did the Fembris get here?!") +sm.setMapTaggedObjectVisible("portal", True, 0, 0) diff --git a/scripts/field/enter_867202681.py b/scripts/field/enter_867202681.py new file mode 100755 index 0000000..68a1c14 --- /dev/null +++ b/scripts/field/enter_867202681.py @@ -0,0 +1,38 @@ +# id 867202681 (Abrup Basin : Windsleep Forest Junction), field 867202681 +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.spawnNpc(9400590, -1000, 120) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400597, -1150, 120) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.forcedMove(False, 600) +sm.moveNpcByTemplateId(9400590, False, 600, 100) +sm.moveNpcByTemplateId(9400597, False, 600, 100) +sm.sendDelay(500) +sm.sendDelay(3500) +sm.speechBalloon(False, 0, 0, "You'd best apologize as soon as we get back to Skuas.", 3000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(False, 0, 0, "Wha... for what?", 3000, 1, 0, 0, 0, 4, 9400597, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(False, 0, 0, "Oh come on, don't play dumb.", 3000, 1, 0, 0, 0, 4, 9400590, 4878499) +sm.spawnNpc(9400666, 400, 120) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400666, "jumpattack", 0) +sm.sendDelay(4000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#Wh... what?! Fembris? How did the Fembris get here?!") +sm.setParam(57) +sm.sendSay("#bFembris?!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#F-Fembris?!") +sm.setParam(57) +sm.sendSay("#bGet back!") +sm.forcedMove(False, 400) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.startQuest(64123) +sm.warp(867202700) diff --git a/scripts/field/enter_867202682.py b/scripts/field/enter_867202682.py new file mode 100755 index 0000000..5b9b507 --- /dev/null +++ b/scripts/field/enter_867202682.py @@ -0,0 +1,35 @@ +# id 867202682 (Abrup Basin : Windsleep Forest Junction), field 867202682 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400590, 400, 120) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400597, 500, 120) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWhew... Impressive, Chief Gurnardson! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Hah, it was nothing! ") +sm.sendSay("#face0#I'd say we've earned our place here, wouldn't you? ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face1#...") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ahem! Now we know who's really weighing us down, you might say! ") +sm.sendSay("#face0#Hmph! Put your money where your mouth is, eh! ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face1#...You're not going to tell the villagers, are you? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#So you ARE ashamed of turning tail, aren't you? ") +sm.setParam(57) +sm.sendSay("#bI'm just glad everyone is safe. ") +sm.sendSay("#bAnyway, we need to warn everyone about the Fembris. ") +sm.sendSay("#bWe need to hurry back!") +sm.lockInGameUI(False, True) +sm.setParam(37) +sm.sendSay("#face0#Hah, I haven't laughed like that in a long time. Feels good! ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face0#You saw the look on Slaka's face too, right? Oh, that was rich! That should teach him to mouth off! Ha ha ha.") +sm.sendSay("#face0#It's all thanks to you and Gillie! I never really thought I could be a warrior like this.") +sm.completeQuestNoCheck(64123) +sm.warp(867202308) diff --git a/scripts/field/enter_867202683.py b/scripts/field/enter_867202683.py new file mode 100755 index 0000000..7100cae --- /dev/null +++ b/scripts/field/enter_867202683.py @@ -0,0 +1,26 @@ +# id 867202683 (Abrup Basin : Shrelephant Habitat), field 867202683 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400609, -600, -150) +sm.showNpcSpecialActionByTemplateId(9400609, "summon", 0) +sm.spawnNpc(9400597, -1060, 50) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400590, -400, 50) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWhat's that? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#An Eyeful? What's it doing way out here? ") +sm.setParam(57) +sm.sendSay("#bWe need to follow it! ") +sm.forcedMove(False, 300) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/eyeeyeportal", 128) +sm.sendDelay(1000) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.completeQuestNoCheck(64158) +sm.completeQuestNoCheck(64121) +sm.lockInGameUI(False, True) +sm.warp(867201690) diff --git a/scripts/field/enter_867202700.py b/scripts/field/enter_867202700.py new file mode 100755 index 0000000..3e71872 --- /dev/null +++ b/scripts/field/enter_867202700.py @@ -0,0 +1,65 @@ +# id 867202700 (Abrup Basin : Windsleep Forest Junction), field 867202700 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400669, 265, 150) +sm.showNpcSpecialActionByTemplateId(9400669, "summon", 0) +sm.spawnNpc(9400590, -970, 150) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.spawnNpc(9400597, -1040, 150) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.spawnNpc(9400632, -260, 150) +sm.showNpcSpecialActionByTemplateId(9400632, "summon", 0) +sm.spawnNpc(9400633, -140, 150) +sm.showNpcSpecialActionByTemplateId(9400633, "summon", 0) +sm.spawnNpc(9400634, -240, 150) +sm.showNpcSpecialActionByTemplateId(9400634, "summon", 0) +sm.spawnNpc(9400632, -180, 150) +sm.showNpcSpecialActionByTemplateId(9400632, "summon", 0) +sm.spawnNpc(9400633, -100, 150) +sm.showNpcSpecialActionByTemplateId(9400633, "summon", 0) +sm.spawnNpc(9400634, -50, 150) +sm.showNpcSpecialActionByTemplateId(9400634, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400669, "claw", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400632, True, 2000, 210) +sm.moveNpcByTemplateId(9400633, True, 2000, 300) +sm.moveNpcByTemplateId(9400634, True, 2000, 270) +sm.moveNpcByTemplateId(9400632, True, 2000, 230) +sm.moveNpcByTemplateId(9400633, True, 2000, 200) +sm.moveNpcByTemplateId(9400634, True, 2000, 250) +sm.showNpcSpecialActionByTemplateId(9400669, "breathe", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400599) # Harpooner +sm.sendNext("Aaaaaaagh!") +sm.zoomCamera(2000, 2000, 3000, 265, 150) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(9400669, "flame", 0) +sm.sendDelay(2000) +sm.createFieldTextEffect("#r#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26#Fembris#k", 100, 4000, 4, 80, 200, 1, 4, 0, 0, 0) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs16#Legendary Wolf", 100, 1500, 4, 80, 250, 1, 4, 0, 0, 0) +sm.sendDelay(6000) +sm.sendDelay(500) +sm.zoomCamera(1000, 2000, 3000, -860, 150) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Shouldn't we be helping out? ") +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face1#Stand down, stand down! You have no idea how powerful that thing is! ") +sm.sendSay("#face1#It's going to light the whole forest on fire! ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#What are you going on about? ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400590, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400590, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400590, True) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face1#Gah, where do we go now? ") +sm.sendSay("#face1#If the Fembris got this far, that giant shadow can't be far behind! Quick, we need to get out of here! ") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867202800.py b/scripts/field/enter_867202800.py new file mode 100755 index 0000000..0b1bdcd --- /dev/null +++ b/scripts/field/enter_867202800.py @@ -0,0 +1,19 @@ +# id 867202800 (Abrup Basin : Crimson Snow-Covered Windsleep Forest Junction), field 867202800 +sm.lockInGameUI(True, False) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Red snow... The attack is coming.) ") +sm.sendDelay(3000) +sm.sendNext("#b(When did the Jellyrashes show up...?) ") +sm.forcedMove(True, 600) +sm.sendDelay(3000) +sm.sendNext("#b(Hm... is there anything we could use as rope?) ") +sm.sendDelay(2000) +sm.sendNext("#b(There was that time I saved Alika with a Jellyrash...) ") +sm.sendSay("#b(Would that work?)") +sm.sendSay("#b(There's no time to waste! The town needs to know the attack's coming. Just collect ten and head back fast!)") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64133, "dir1=1") +sm.warp(867202810) diff --git a/scripts/field/enter_867202880.py b/scripts/field/enter_867202880.py new file mode 100755 index 0000000..988713e --- /dev/null +++ b/scripts/field/enter_867202880.py @@ -0,0 +1,3 @@ +# id 867202880 (Abrup Basin : Frozen River Bank), field 867202880 +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867202910.py b/scripts/field/enter_867202910.py new file mode 100755 index 0000000..13ef622 --- /dev/null +++ b/scripts/field/enter_867202910.py @@ -0,0 +1,301 @@ +# id 867202910 (Abrup Basin : Grim Vale Canyon End), field 867202910 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400596, -1108, 450) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.flipNpcByTemplateId(9400596, False) +sm.spawnNpc(9400599, -1014, 450) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.flipNpcByTemplateId(9400599, False) +sm.spawnNpc(9400682, -940, 450) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.spawnNpc(9400682, -850, 450) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.spawnNpc(9400585, -750, 450) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.flipNpcByTemplateId(9400585, True) +sm.spawnNpc(9400590, -670, 450) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.flipNpcByTemplateId(9400590, True) +sm.spawnNpc(9400683, -640, 450) +sm.showNpcSpecialActionByTemplateId(9400683, "summon", 0) +sm.spawnNpc(9400682, -545, 450) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.spawnNpc(9400603, -470, 450) +sm.showNpcSpecialActionByTemplateId(9400603, "summon", 0) +sm.flipNpcByTemplateId(9400603, True) +sm.spawnNpc(9400585, -390, 450) +sm.showNpcSpecialActionByTemplateId(9400585, "summon", 0) +sm.flipNpcByTemplateId(9400585, False) +sm.spawnNpc(9400682, -294, 450) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.spawnNpc(9400682, -230, 450) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.spawnNpc(9400683, -75, 450) +sm.showNpcSpecialActionByTemplateId(9400683, "summon", 0) +sm.spawnNpc(9400581, -110, 450) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.flipNpcByTemplateId(9400581, True) +sm.spawnNpc(9400684, 0, 450) +sm.showNpcSpecialActionByTemplateId(9400684, "summon", 0) +sm.flipNpcByTemplateId(9400684, False) +sm.spawnNpc(9400682, 85, 450) +sm.showNpcSpecialActionByTemplateId(9400682, "summon", 0) +sm.spawnNpc(9400681, 850, 450) +sm.showNpcSpecialActionByTemplateId(9400681, "summon", 0) +sm.flipNpcByTemplateId(9400681, True) +sm.showNpcSpecialActionByTemplateId(9400596, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400599, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400585, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400590, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400603, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400585, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400581, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400684, "attack1", -1) +sm.playSound("Sound/Mob.img/9402279/Die", 100) +sm.showNpcSpecialActionByTemplateId(9400681, "special1", -1) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(56) +sm.setColor(1) +sm.sendNext("#bWe... we won!") +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(9400681) +sm.showNpcSpecialActionByTemplateId(9400681, "special2", -1) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400603) # Guard +sm.sendNext("We've defeated the monster!") +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400682, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(150) +sm.showNpcSpecialActionByTemplateId(9400683, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(110) +sm.showNpcSpecialActionByTemplateId(9400682, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(90) +sm.showNpcSpecialActionByTemplateId(9400682, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(150) +sm.showNpcSpecialActionByTemplateId(9400682, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(120) +sm.showNpcSpecialActionByTemplateId(9400683, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(100) +sm.showNpcSpecialActionByTemplateId(9400682, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(150) +sm.showNpcSpecialActionByTemplateId(9400682, "die", -1) +sm.playSound("Sound/Mob.img/9402290/Die", 100) +sm.sendDelay(200) +sm.resetNpcSpecialActionByTemplateId(9400596) +sm.resetNpcSpecialActionByTemplateId(9400599) +sm.resetNpcSpecialActionByTemplateId(9400585) +sm.resetNpcSpecialActionByTemplateId(9400590) +sm.resetNpcSpecialActionByTemplateId(9400603) +sm.resetNpcSpecialActionByTemplateId(9400585) +sm.resetNpcSpecialActionByTemplateId(9400581) +sm.resetNpcSpecialActionByTemplateId(9400684) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400590, False) +sm.sendDelay(150) +sm.sendDelay(110) +sm.sendDelay(90) +sm.sendDelay(150) +sm.sendDelay(120) +sm.sendDelay(100) +sm.sendDelay(150) +sm.sendDelay(200) +sm.flipNpcByTemplateId(9400585, False) +sm.flipNpcByTemplateId(9400603, False) +sm.flipNpcByTemplateId(9400581, False) +sm.sendDelay(500) +sm.sendDelay(500) +sm.sendDelay(1500) +sm.speechBalloon(False, 0, 0, "#fs15##eIt's over! Finally!", 2000, 0, 0, 0, 0, 4, 9400585, 4878499) +sm.moveNpcByTemplateId(9400590, False, 400, 300) +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendNext("We've defeated the monster!") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT3/battlecry2", 128) +sm.spawnNpc(9400587, 60, 430) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.forcedFlip(True) +sm.moveNpcByTemplateId(9400684, True, 20, 100) +sm.speechBalloon(False, 0, 0, "#fs15##eWe won!", 2000, 0, 0, 0, 0, 4, 9400596, 4878499) +sm.speechBalloon(False, 0, 0, "#fs15##eWe made it! We made it!", 2000, 0, 0, 0, 0, 4, 9400599, 4878499) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#We'll finally be able to go home...") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Ha! We've done it! Mission complete, and with no need of reinforcements.") +sm.setParam(56) +sm.sendSay("#bI just hope this really is the end of it. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face0#Don't jinx it! Oh, man! It's really over!") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400590, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400590, True, 500, 200) +sm.sendDelay(1000) +sm.sendNext("#face0#We have to spread the good news, ha ha ha!") +sm.sendDelay(5000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation", 2000, 0, 0, 0, 35473677, 0, 0) +sm.sendDelay(3000) +sm.setParam(56) +sm.sendNext("#b...?") +sm.moveNpcByTemplateId(9400684, False, 300, 100) +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400587, False) +sm.forcedFlip(True) +sm.startQuest(64168) +sm.showNpcSpecialActionByTemplateId(9400684, "special2", 0) +sm.sendDelay(1000) +sm.resetNpcSpecialActionByTemplateId(9400684) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face0#Th-this...?") +sm.moveNpcByTemplateId(9400684, False, 30, 70) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400684, False, 20, 70) +sm.sendDelay(1000) +sm.sendNext("#face0#This... this...") +sm.moveNpcByTemplateId(9400684, False, 50, 70) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#What's... inside this thing?") +sm.sendSay("#face0#...A girl?!") +sm.moveNpcByTemplateId(9400585, False, 400, 100) +sm.moveNpcByTemplateId(9400603, False, 390, 100) +sm.forcedMove(False, 50) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400581, False, 200, 90) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400684, False, 20, 70) +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face0#...Ju-Julieta?") +sm.sendSay("#face0#Wha... wha...") +sm.sendDelay(1000) +sm.sendNext("#face0#What... are you doing here?") +sm.sendSay("#face1#Huh?! Julieta! Say something!") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400684, True) +sm.sendDelay(250) +sm.sendNext("#face1##h0#... this... this...?") +sm.sendSay("#face1#This is... my sister...") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400684, False) +sm.sendDelay(250) +sm.sendNext("#face1#This is my sister!! Why is she here?!") +sm.showNpcSpecialActionByTemplateId(9400684, "special3", -1) +sm.sendDelay(1000) +sm.spawnNpc(9400580, -450, 400) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.flipNpcByTemplateId(9400580, False) +sm.spawnNpc(9400582, -510, 400) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.flipNpcByTemplateId(9400582, False) +sm.spawnNpc(9400599, -580, 400) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.flipNpcByTemplateId(9400599, False) +sm.spawnNpc(9400604, -650, 400) +sm.showNpcSpecialActionByTemplateId(9400604, "summon", 0) +sm.flipNpcByTemplateId(9400604, False) +sm.moveNpcByTemplateId(9400580, False, 330, 100) +sm.moveNpcByTemplateId(9400582, False, 330, 100) +sm.moveNpcByTemplateId(9400599, False, 350, 100) +sm.moveNpcByTemplateId(9400604, False, 350, 100) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1##h0#! The monster is finally...") +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "#fs15##eBa ha ha! Finally!", 2000, 0, 0, 0, 0, 4, 9400604, 4878499) +sm.setParam(56) +sm.sendNext("#b...") +sm.speechBalloon(False, 0, 0, "#fs15##eGood job!", 2000, 0, 0, 0, 0, 4, 9400599, 4878499) +sm.sendDelay(1500) +sm.sendDelay(500) +sm.speechBalloon(False, 0, 0, "#fs15##e!!!", 2000, 0, 0, 0, 0, 4, 9400580, 4878499) +sm.setParam(37) +sm.sendNext("#face4#T-that child...?") +sm.resetNpcSpecialActionByTemplateId(9400681) +sm.showNpcSpecialActionByTemplateId(9400681, "special3", 0) +sm.sendDelay(3000) +sm.resetNpcSpecialActionByTemplateId(9400684) +sm.moveNpcByTemplateId(9400684, False, 100, 200) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(9400684, "special4", 0) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face1#Ju... Julieta!") +sm.sendSay("#face1#Please... open your eyes... please... just...") +sm.sendSay("#face1#I'm sorry... I should have listened to you... I'm sorry...") +sm.sendSay("#face1#I promise I'll be better, Julieta... please, don't leave me...") +sm.resetNpcSpecialActionByTemplateId(9400684) +sm.showNpcSpecialActionByTemplateId(9400684, "special5", 0) +sm.sendSay("#face1#No! NO!!") +sm.sendSay("#face1#Please! No no no NO!!") +sm.sendSay("#face1##h0#, please! Can you stop this?! Alika, please! Get Janyt! SOMEBODY!!") +sm.sendSay("#face1#No! NO!!") +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(9400684) +sm.showNpcSpecialActionByTemplateId(9400684, "special3", -1) +sm.sendDelay(1000) +sm.setParam(56) +sm.sendNext("#b(What is going on?)") +sm.sendSay("#b(I thought this monster was some great, evil beast...)") +sm.sendSay("#b(But it was really a defenseless little girl?)") +sm.setParam(37) +sm.sendSay("#face1#Julieta... Sob... Sob... It's my fault... I... I...") +sm.moveNpcByTemplateId(9400582, False, 100, 50) +sm.sendDelay(300) +sm.flipNpcByTemplateId(9400582, True) +sm.sendDelay(5000) +sm.speechBalloon(True, 0, 0, "Just... Let him mourn.", 2000, 0, 0, 0, 0, 4, 9400580, 4878499) +sm.flipNpcByTemplateId(9400582, False) +sm.moveNpcByTemplateId(9400582, False, 300, 50) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face2#Einar...") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face1#...") +sm.sendSay("#face1#...What have I done?") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face2#Einar...") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face3#Julieta... She must have suffered so much...") +sm.sendSay("#face3#She must have been waiting for me to save her...") +sm.sendSay("#face3#How much pain must she have been in...") +sm.setParam(56) +sm.sendSay("#b...") +sm.setParam(37) +sm.sendSay("#face3#Why didn't I... do anything until now...") +sm.sendSay("#face3#No... if I had just...") +sm.sendSay("#face3#If only... ") +sm.moveNpcByTemplateId(9400582, False, 100, 50) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face2#Einar! Look at me!") +sm.sendSay("#face2#You didn't do anything wrong! ") +sm.sendSay("#face2#Your sister's disappearance, what happened today... none of it is your fault.") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face1#Julieta... Julieta...") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face2#Take Einar back to town. I'll finish up here and get the wounded taken care of.") +sm.setParam(56) +sm.sendSay("#bGot it.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face5#Julieta...") +sm.completeQuestNoCheck(64142) +sm.lockInGameUI(False, True) +sm.warp(867202315) diff --git a/scripts/field/enter_867202990.py b/scripts/field/enter_867202990.py new file mode 100755 index 0000000..5a7cba5 --- /dev/null +++ b/scripts/field/enter_867202990.py @@ -0,0 +1,28 @@ +# id 867202990 (Afinas : Someone's Office), field 867202990 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.spawnNpc(9400608, 294, 230) +sm.showNpcSpecialActionByTemplateId(9400608, "summon", 0) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400608) # Dester +sm.sendNext("Ohhh?") +sm.showNpcSpecialActionByTemplateId(9400608, "special1", 0) +sm.sendDelay(3500) +sm.showNpcSpecialActionByTemplateId(9400608, "say", -1) +sm.sendNext("Incredible. That was... I have no words.") +sm.sendSay("What a pity the experiment has already ended! What a performance!") +sm.sendSay("But there's still so much to learn... So many questions...") +sm.sendSay("Ah, well! There's always next time.") +sm.sendSay("I really should congratulate them when they return. Heh heh.") +sm.resetNpcSpecialActionByTemplateId(9400608) +sm.sendDelay(250) +sm.showNpcSpecialActionByTemplateId(9400608, "special1", -1) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 4000) +sm.sendDelay(5000) +sm.completeQuestNoCheck(64144) +sm.lockInGameUI(False, True) +sm.warp(867202290) diff --git a/scripts/field/enter_867233001.py b/scripts/field/enter_867233001.py new file mode 100755 index 0000000..5550fe7 --- /dev/null +++ b/scripts/field/enter_867233001.py @@ -0,0 +1,4 @@ +# id 867233001 (Abrup Basin : Skuas), field 867233001 +sm.completeQuestNoCheck(64139) +sm.startQuest(64140) +sm.warp(867235900) diff --git a/scripts/field/enter_867235900.py b/scripts/field/enter_867235900.py new file mode 100755 index 0000000..c0de603 --- /dev/null +++ b/scripts/field/enter_867235900.py @@ -0,0 +1,143 @@ +# id 867235900 (Abrup Basin : Destroyed Skuas Castle Interior), field 867235900 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedFlip(True) +sm.spawnNpc(9400690, -1150, -240) +sm.showNpcSpecialActionByTemplateId(9400690, "summon", 0) +sm.spawnNpc(9400676, 15, -185) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400582, 180, -185) +sm.showNpcSpecialActionByTemplateId(9400582, "summon", 0) +sm.spawnNpc(9400666, -310, -70) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400666, "flame", -1) +sm.spawnNpc(9400672, -810, 80) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400672, "attack1", -1) +sm.spawnNpc(9400642, -900, 80) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", -1) +sm.spawnNpc(9400602, -670, 80) +sm.showNpcSpecialActionByTemplateId(9400602, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400602, "attack1", -1) +sm.spawnNpc(9400621, -620, 80) +sm.showNpcSpecialActionByTemplateId(9400621, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400621, "attack1", -1) +sm.spawnNpc(9400599, -560, 80) +sm.showNpcSpecialActionByTemplateId(9400599, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400599, "attack1", -1) +sm.spawnNpc(9400641, -455, 80) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", -1) +sm.spawnNpc(9400596, -260, 80) +sm.showNpcSpecialActionByTemplateId(9400596, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400596, "attack1", -1) +sm.spawnNpc(9400674, -40, 60) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400674, "attack1", -1) +sm.spawnNpc(9400675, 100, 60) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400675, "attack1", -1) +sm.spawnNpc(9400583, 260, 50) +sm.showNpcSpecialActionByTemplateId(9400583, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400583, "attack1", -1) +sm.spawnNpc(9400590, 310, 50) +sm.showNpcSpecialActionByTemplateId(9400590, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400590, "attack1", -1) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402241/Attack1", 100) +sm.playSound("Sound/Mob.img/9402301/Skill2", 100) +sm.blind(False, 0, 0, 0, 0, 2100) +sm.forcedAction(5, 5000) +sm.showNpcSpecialActionByTemplateId(9400582, "skill", -1) +sm.showNpcSpecialActionByTemplateId(9400676, "attack1", -1) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402241/Attack2", 100) +sm.playSound("Sound/Mob.img/9402301/Skill2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400242/Attack1", 100) +sm.playSound("Sound/Mob.img/9402310/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400245/Attack2", 100) +sm.playSound("Sound/Mob.img/9402311/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400242/Attack3", 100) +sm.playSound("Sound/Mob.img/9402312/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400249/Skill2", 100) +sm.playSound("Sound/Mob.img/9402305/Attack2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400250/Attack7", 100) +sm.playSound("Sound/Mob.img/9402308/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400246/Attack2", 100) +sm.playSound("Sound/Mob.img/9402309/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400246/Skill1", 100) +sm.playSound("Sound/Mob.img/9402313/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400251/Attack6", 100) +sm.playSound("Sound/Mob.img/9402317/Attack1", 100) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.changeBGM("BgmPL2.img/Appearance", 0, 0) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402241/Attack2", 100) +sm.playSound("Sound/Mob.img/9402301/Skill2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400242/Attack1", 100) +sm.playSound("Sound/Mob.img/9402310/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9400245/Attack2", 100) +sm.playSound("Sound/Mob.img/9402311/Attack1", 100) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendNext("I-it's... the G-giant Shadow!") +sm.sendSay("The Giant Shadow is climbing over the castle wall!") +sm.forcedFlip(True) +sm.moveNpcByTemplateId(9400690, False, 450, 70) +sm.sendDelay(4500) +sm.playSound("Sound/Mob.img/9402270/Attack7", 128) +sm.showNpcSpecialActionByTemplateId(9400690, "attack1", -1) +sm.sendDelay(5500) +sm.setParam(56) +sm.sendNext("#bCayne, take Alika and get out of here! You too, Einar!") +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402310/Skill1", 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendNext("#face2#No! I'm not running again!") +sm.playSound("Sound/Mob.img/9402316/Attack1", 100) +sm.sendDelay(1000) +sm.playSound("Sound/Mob.img/9402312/Attack1", 100) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face1#I'll stay until the end as well!") +sm.playSound("Sound/Mob.img/9402308/Attack1", 100) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendSay("#face1#So there's nowhere else to hide? I didn't stay behind because I wanted us to stick together. Don't flatter yourself.") +sm.sendDelay(5000) +sm.setParam(56) +sm.sendNext("#bEveryone, out of the way!") +sm.createQuestWithQRValue(64140, "dir=1") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.createQuestWithQRValue(64200, "inGame=0") +sm.createQuestWithQRValue(64201, "event1_camera=0") +sm.createQuestWithQRValue(64201, "event1_camera=0;event1_wall=0") +sm.createQuestWithQRValue(64202, "event2_camera=0") +sm.createQuestWithQRValue(64202, "event2_camera=0;event2_wall=0") +sm.createQuestWithQRValue(64203, "event3_camera=0") +sm.createQuestWithQRValue(64203, "count=0;event3_camera=0") +sm.createQuestWithQRValue(64204, "P2_fall=0") +sm.createQuestWithQRValue(64204, "RushMob=0;P2_fall=0") +sm.createQuestWithQRValue(64204, "RushMob=0;P2_fall=0;LadderMob=0") +sm.createQuestWithQRValue(64205, "Fire=0") +sm.createQuestWithQRValue(64206, "ScreenMob=0") +sm.createQuestWithQRValue(64206, "count=0;ScreenMob=0") +sm.createQuestWithQRValue(64207, "P3_E1=0") +sm.createQuestWithQRValue(64207, "P3_E1=0;P3_E2=0") +sm.lockInGameUI(False, True) +sm.warp(867236100) diff --git a/scripts/field/enter_867236100.py b/scripts/field/enter_867236100.py new file mode 100755 index 0000000..570e309 --- /dev/null +++ b/scripts/field/enter_867236100.py @@ -0,0 +1,14 @@ +# id 867236100 (Abrup Basin : Destroyed Skuas Castle Interior), field 867236100 +sm.createQuestWithQRValue(64271, "5=1") +sm.setMapTaggedObjectVisible("explode00", False, 2, 0) +sm.setMapTaggedObjectVisible("explode01", False, 2, 0) +sm.setMapTaggedObjectVisible("explode02", False, 2, 0) +sm.createQuestWithQRValue(64201, "event1_camera=0;event1_wall=1") +sm.createQuestWithQRValue(64201, "event1_camera=1;event1_wall=1") +sm.lockInGameUI(True, False) +sm.forcedInput(0) +sm.zoomCamera(1500, 1000, 1500, -235, 375) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64272, "26=1;0=4;2=2") +sm.createQuestWithQRValue(64272, "26=1;27=1;0=4;2=2") diff --git a/scripts/field/enter_867236150.py b/scripts/field/enter_867236150.py new file mode 100755 index 0000000..ad0285b --- /dev/null +++ b/scripts/field/enter_867236150.py @@ -0,0 +1,13 @@ +# id 867236150 (Abrup Basin : Skuas Castle Tower), field 867236150 +sm.lockInGameUI(True, False) +sm.forcedInput(2) +sm.sendDelay(200) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64204, "RushMob=1;P2_fall=0;LadderMob=0") +sm.createQuestWithQRValue(64204, "RushMob=1;P2_fall=1;LadderMob=0") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/field/enter_867236220.py b/scripts/field/enter_867236220.py new file mode 100755 index 0000000..7dffddf --- /dev/null +++ b/scripts/field/enter_867236220.py @@ -0,0 +1,21 @@ +# id 867236220 (Abrup Basin : Skuas Castle Tower), field 867236220 +sm.showNpcSpecialActionByTemplateId(9400604, "summon", 0) +sm.flipNpcByTemplateId(9400604, False) +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400604) # Miner +sm.sendNext("Ha ha, take that! How you like that mine, huh?") +sm.showNpcSpecialActionByTemplateId(9400604, "mine", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/mine", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/mine2", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/mine3", 0) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face5##h0#! There's nowhere left to go! Jump off the front, okay? Trust me!") +sm.forcedInput(1) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 350) +sm.sendDelay(300) +sm.lockInGameUI(False, True) +sm.warp(867236250) diff --git a/scripts/field/enter_867236250.py b/scripts/field/enter_867236250.py new file mode 100755 index 0000000..88f5bbd --- /dev/null +++ b/scripts/field/enter_867236250.py @@ -0,0 +1,15 @@ +# id 867236250 (Abrup Basin : Destroyed Skuas Walls), field 867236250 +sm.createQuestWithQRValue(64206, "count=0;ScreenMob=1") +sm.lockInGameUI(True, False) +sm.forcedInput(0) +sm.sendDelay(200) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.forcedInput(5) +sm.blind(False, 0, 0, 0, 0, 2000) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") +sm.createQuestWithQRValue(64272, "25=34;26=11;27=10;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=34;26=11;27=11;0=4;2=2") diff --git a/scripts/field/enter_867236300.py b/scripts/field/enter_867236300.py new file mode 100755 index 0000000..b1ffdfd --- /dev/null +++ b/scripts/field/enter_867236300.py @@ -0,0 +1,52 @@ +# id 867236300 (Abrup Basin : Icy Grim Vale), field 867236300 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face2#I'll take care of these here, don't worry!") +sm.sendSay("#face2#Gillie! The Jellyrashes must be destroyed before they take root!") +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendSay("#face1#Understood!") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face1#Snowfield Archers! Rally around Gillie and take out those Jellyrashes!") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64272, "25=34;26=15;27=14;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=34;26=15;27=15;0=4;2=2") +sm.createQuestWithQRValue(16700, "count=16;date=20190623") +sm.createQuestWithQRValue(16700, "count=17;date=20190623") +sm.createQuestWithQRValue(16700, "count=18;date=20190623") +sm.createQuestWithQRValue(16700, "count=19;date=20190623") +sm.createQuestWithQRValue(16700, "count=20;date=20190623") +sm.createQuestWithQRValue(64272, "25=34;26=16;27=15;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=34;26=16;27=16;0=4;2=2") +sm.createQuestWithQRValue(16700, "count=21;date=20190623") +sm.createQuestWithQRValue(16700, "count=22;date=20190623") +sm.createQuestWithQRValue(16700, "count=23;date=20190623") +sm.createQuestWithQRValue(16700, "count=24;date=20190623") +sm.createQuestWithQRValue(16700, "count=25;date=20190623") +sm.createQuestWithQRValue(16700, "count=26;date=20190623") +sm.createQuestWithQRValue(16700, "count=27;date=20190623") +sm.createQuestWithQRValue(16700, "count=28;date=20190623") +sm.createQuestWithQRValue(16700, "count=29;date=20190623") +sm.createQuestWithQRValue(16700, "count=30;date=20190623") +sm.createQuestWithQRValue(16700, "count=31;date=20190623") +sm.createQuestWithQRValue(16700, "count=32;date=20190623") +sm.createQuestWithQRValue(16700, "count=33;date=20190623") +sm.createQuestWithQRValue(16700, "count=34;date=20190623") +sm.createQuestWithQRValue(16700, "count=35;date=20190623") +sm.createQuestWithQRValue(16700, "count=36;date=20190623") +sm.createQuestWithQRValue(16700, "count=37;date=20190623") +sm.createQuestWithQRValue(16700, "count=38;date=20190623") +sm.createQuestWithQRValue(16700, "count=39;date=20190623") +sm.createQuestWithQRValue(16700, "count=40;date=20190623") +sm.createQuestWithQRValue(16700, "count=41;date=20190623") +sm.createQuestWithQRValue(16700, "count=42;date=20190623") +sm.createQuestWithQRValue(16700, "count=43;date=20190623") +sm.createQuestWithQRValue(16700, "count=44;date=20190623") +sm.createQuestWithQRValue(64272, "25=34;26=17;27=16;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=34;26=17;27=17;0=4;2=2") +sm.completeQuestNoCheck(64140) +sm.createQuestWithQRValue(64270, "4=1") +sm.createQuestWithQRValue(64271, "5=1;6=1") +sm.warp(867202910) diff --git a/scripts/field/enter_910090301.py b/scripts/field/enter_910090301.py new file mode 100755 index 0000000..373b648 --- /dev/null +++ b/scripts/field/enter_910090301.py @@ -0,0 +1,74 @@ +# id 910090301 (Partem : Partem Ruins Interior 1), field 910090301 +sm.teleportInField(-930, -400) +sm.setMapTaggedObjectVisible("guide", False, 0, 0) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -378, -163) +sm.forcedInput(7) +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(4000) +sm.createFieldTextEffect("#fnArial##fs18#Several Days Later, in the Partem Ruins", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.forcedMove(False, 250) +sm.zoomCamera(1500, 1500, 1500, -650, -300) +sm.sendDelay(2000) +sm.forcedInput(6) +sm.sendDelay(500) +sm.forcedMove(False, 180) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3#Well...here we are. I'm certain this is the place depicted in those old sketches.") +sm.sendSay("#face1#Heh... I've gotta say, I think I underestimated this place. Look at how huge and cavernous it is! I've got a feeling there must be something incredible hidden here.") +sm.sendDelay(1000) +sm.sendNext("#face0#Lessee... I've gotta find the three keys, then offer them up to the Altar of Trial. At least, that's what was scribbled on that note I found lying on the researcher's desk.") +sm.zoomCamera(1500, 1500, 1500, -650, -400) +sm.sendDelay(1500) +sm.onLayer(500, "00", 0, -100, -1, "Effect/Direction22.img/effect/PF_key/0", 4, False, -1, False) +sm.playSound("Sound/SoundEff.img/pathfinder/key", 100) +sm.sendDelay(1000) +sm.offLayer(550, "00", False) +sm.onLayer(300, "01", 0, -100, -1, "Effect/Direction22.img/effect/PF_key/1", 4, False, -1, False) +sm.sendDelay(1000) +sm.onLayer(500, "02", 0, -100, -1, "Effect/Direction22.img/effect/PF_key/2", 4, False, -1, False) +sm.offLayer(300, "01", False) +sm.sendDelay(1000) +sm.offLayer(550, "02", False) +sm.sendDelay(500) +sm.zoomCamera(1500, 1500, 1500, -650, -300) +sm.sendDelay(2000) +sm.sendNext("#face1#I brought the one I found in the research lab, and another one I found on the way here. Not too shabby, if I say so myself.") +sm.sendSay("#face0#Judging by the reaction this key is giving off, I'd say it's a pretty safe bet that the last key is somewhere in these ruins.") +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/pathfinder/roar1", 100) +sm.sendDelay(1000) +sm.zoomCamera(0, 1500, 0, -700, -300) +sm.sendDelay(300) +sm.sendNext("#face3#Ooooh, I don't like that shaking. Shaking ruins are an occupational hazard. C'mon now, you're not gonna collapse on me, are you?") +sm.sendSay("#face0#But... Hnnnnnng... I can't just LEAVE without finding out what the three keys will reveal! Let's hope these ruins hold together at least that long. C'mon, architecture of the ancients, don't fail me now.") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.avatarOriented("UI/tutorial.img/34") +sm.createQuestWithQRValue(42102, "date=00/00/00/00/00") +sm.createQuestWithQRValue(7264, "dojangRank=0") +sm.createQuestWithQRValue(7264, "dojangRankJob=0;dojangRank=0") +sm.startQuest(7621) +sm.startQuest(100194) +sm.setParam(548) +sm.setSpeakerID(1013358) +res = sm.sendAskAccept("#face0#Okay. I guess the plan is to head where the altar keys point me. Doesn't look like it's too far off, but all the same, I shouldn't try my luck by hanging around here any longer than I need to.") +sm.sendNext("#face0#Whatever the key's responding to, it's just beyond here.") +sm.startQuest(35900) +sm.setMapTaggedObjectVisible("guide", True, 0, 0) diff --git a/scripts/field/enter_910090302.py b/scripts/field/enter_910090302.py new file mode 100755 index 0000000..aa8fabe --- /dev/null +++ b/scripts/field/enter_910090302.py @@ -0,0 +1,45 @@ +# id 910090302 (Partem : Partem Ruins Interior 2), field 910090302 +if not sm.hasHadQuest(35902): + sm.completeQuestNoCheck(35900) + sm.startQuest(11620) + sm.createQuestWithQRValue(15710, "lasttime=19/07/04/16/47") + sm.createQuestWithQRValue(25980, "normal=#") + sm.createQuestWithQRValue(25980, "normal=#;hard=#") + sm.setSpeakerType(3) + sm.setParam(548) + sm.setColor(1) + sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder + sm.sendNext("#face3#Hmm... An arrow and a potion? They look old enough, sure, but they don't seem particularly significant.") + sm.sendSay("#face6#Tch... It doesn't seem any different from those of modern times. In other words, it's just like any other junk. Did I come all the way here for nothing?") + sm.sendSay("#face0#...Huh. There's something written on the outside of this box. Might as well take a look-see.") + sm.setSpeakerType(4) + sm.setSpeakerID(1013305) # Ancient Crate + res = sm.sendAskAccept("#face0#It's written in an ancient script. Question is, is it worth trying to decipher it?") + sm.setSpeakerType(3) + sm.sendNext("#face2#It'll take some time, but... Haha, of course it's worth it. Mostly because it would drive me nuts if I didn't. Ah, curiosity, you're the itch I always have to scratch.") + sm.startQuest(35901) + sm.createQuestWithQRValue(63369, "chk=2") + sm.createQuestWithQRValue(63369, "chk=2;day=0") + sm.createQuestWithQRValue(63369, "chk=2;day=1") + sm.completeQuestNoCheck(63360) + sm.sendNext("#face0##g'A temperamental dancer / best viewed with distant gaze,'\r\n'In crimson does it pirouette / in black its footfall stays.'#k") + sm.sendSay("#face1#Oooh, ancient poetry. Which is ALSO a riddle. Score! Now that we've got the basic rhyme scheme, the next verse would go like so...") + sm.sendSay("#face0##b(You deciphered the ancient script on the box. It's written with a figurative lilt, as ancient verse is wont to do, but after mulling over it a while, you think you have a good idea what it's referring to.)#k") + sm.completeQuestNoCheck(35901) + sm.startQuest(11620) + sm.setSpeakerType(4) + if sm.sendAskAccept("#face6#So basically, it's telling me to get the offering from whatever is guarding these ruins. Then once I've done that, I place it in front of the pillar that correctly answers the riddle. Gotta love the way these ancient ruins are always so roundabout with their secrets, eh?"): + sm.setSpeakerType(3) + sm.sendNext("#face0#I know the answer now! Take that, ancient riddle makers. Now, let's find this #r#o2300200##k and get #b#i4036523# #t4036523##k x#b5#k. I think if I poke around here, I'm bound to run into the Ruins Guardian sooner or later.") + sm.startQuest(35902) + sm.completeQuestNoCheck(63363) + sm.createQuestWithQRValue(63367, "dam=0") + sm.createQuestWithQRValue(63367, "dam=170") + sm.createQuestWithQRValue(63368, "day=0") + sm.createQuestWithQRValue(63368, "day=1") + sm.createQuestWithQRValue(63366, "minlv=-9999") + sm.createQuestWithQRValue(63366, "minlv=-9999;maxlv=99999") + sm.completeQuestNoCheck(63361) + sm.completeQuestNoCheck(63362) + sm.completeQuestNoCheck(63363) + sm.completeQuestNoCheck(63370) diff --git a/scripts/field/enter_910090303.py b/scripts/field/enter_910090303.py new file mode 100755 index 0000000..9b71432 --- /dev/null +++ b/scripts/field/enter_910090303.py @@ -0,0 +1,2 @@ +# id 910090303 (Partem : Ruins Guardian Chamber), field 910090303 +sm.avatarOriented("UI/tutorial.img/4") diff --git a/scripts/field/enter_910090304.py b/scripts/field/enter_910090304.py new file mode 100755 index 0000000..8d9db11 --- /dev/null +++ b/scripts/field/enter_910090304.py @@ -0,0 +1,61 @@ +# id 910090304 (Partem : Base Camp), field 910090304 +sm.changeBGM("Bgm51.img/ThePartemRuins", 0, 0) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.hideUser(True) +sm.setSpeakerType(3) +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face4#Argh... Ugh...") +sm.sendDelay(1000) +sm.sendNext("#face4#Almost...there...") +sm.sendDelay(500) +sm.sendDelay(4500) +sm.createFieldTextEffect("#fnArial##fs18#Later, at the Base Camp", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/pathfinder/down", 100) +sm.sendDelay(1000) +sm.onLayer(500, "00", 0, -80, 1, "Effect/Direction22.img/effect/PF_baseC/0", 4, False, -1, False) +sm.sendNext("#face4#Nnnngh... uggh...") +sm.sendDelay(1000) +sm.sendNext("#face5#Feels like...my innards are on fire. What the heck HAPPENED back there? What was up with that super-ominous energy?") +sm.sendSay("#face5#Was it because I touched the relic? Is this one of those creepy curses you always hear stories about?") +sm.offLayer(500, "00", False) +sm.onLayer(500, "01", 0, -80, 1, "Effect/Direction22.img/effect/PF_baseC/1", 4, False, -1, False) +sm.sendSay("#face5#Guess my mentor was right. She was always saying that in this line of work, danger nips at curiosity's heels. Probably should've taken that part more seriously.") +sm.onLayer(1500, "02", 0, -80, 1, "Effect/Direction22.img/effect/PF_baseC/2", 4, False, -1, False) +sm.sendDelay(2000) +sm.offLayer(1000, "02", False) +sm.onLayer(2500, "03", 0, -80, 1, "Effect/Direction22.img/effect/PF_baseC/3", 4, False, -1, False) +sm.sendDelay(3000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003658) # Athena Pierce +sm.sendNext("Congratulations, #h0#. You've soaked up everything I've taught you like a sponge. But now, it's time to head out and explore the world for yourself.") +sm.sendSay("I'm certain it won't be long before you have a quiver full of tales to tell, stories from your own adventures.") +sm.sendSay("After all, having observed your growth as you've trained, I can say with confidence that your daring and curiosity exceed even that of your fellow Explorers.") +sm.sendSay("However...") +sm.sendDelay(1000) +sm.sendNext("I want you to be aware that I worry for you, for those exact same reasons.") +sm.sendSay("Curiosity can be the torchlight that illuminates heretofore-unseen paths, but it can also be the upended candle that sets the house ablaze.") +sm.sendSay("That's why, if you remember anything you've learned from me, I want you to remember that in this line of work, danger tends to follow the curious.") +sm.sendSay("And to that end, you must learn to control your curiosity. Know when to indulge it, and when to deny it.") +sm.offLayer(1000, "03", False) +sm.sendDelay(1500) +sm.onLayer(1500, "04", 0, -80, 1, "Effect/Direction22.img/effect/PF_baseC/2", 4, False, -1, False) +sm.sendDelay(2000) +sm.offLayer(300, "01", False) +sm.sendDelay(500) +sm.offLayer(3000, "04", False) +sm.sendDelay(1500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face5#B-but I...") +sm.sendDelay(1500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(910090305) diff --git a/scripts/field/enter_910090305.py b/scripts/field/enter_910090305.py new file mode 100755 index 0000000..edee84f --- /dev/null +++ b/scripts/field/enter_910090305.py @@ -0,0 +1,77 @@ +# id 910090305 (Partem : Forest Near the Ruins), field 910090305 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, -555, -350) +sm.sayMonologue("#fs30##fnArial#The Relic", 0) +sm.sayMonologue("#fs20##fnArial#\r\nAn artifact of unknown purpose, imbued with a powerful curse.", 0) +sm.sayMonologue("#fs20##fnArial#\r\nEnamored by ancient artifacts, you found the relic while exploring.", 0) +sm.sayMonologue("#fs20##fnArial#Afflicted with its curse, you teetered between life and death.", 0) +sm.sayMonologue("#fs20##fnArial#\r\nAfter barely pulling through, you began to travel the land, hoping to learn more about the relic.", 0) +sm.sayMonologue("#fs20##fnArial#But something about you is different from before...", 1) +sm.sendDelay(1000) +sm.onLayer(300, "00", 0, 0, 1, "Effect/Direction22.img/effect/PF_two/0", 4, True, -1, False) +sm.sendDelay(1500) +sm.onLayer(300, "01", 0, 0, 1, "Effect/Direction22.img/effect/PF_two/1", 4, True, -1, False) +sm.offLayer(300, "00", False) +sm.sendDelay(500) +sm.moveLayer(2000, "01", 410, 170) +sm.sendDelay(2500) +sm.sayMonologue("#fs30##fnArial#The Ancient Bow", 0) +sm.sayMonologue("#fs20##fnArial#\r\n\r\nWhat first seemed to be a double-bladed dagger was, in fact, a mystical ancient bow.", 0) +sm.sayMonologue("#fs20##fnArial#Through the relic's influence, you can draw out its hidden power.", 1) +sm.offLayer(500, "01", False) +sm.sendDelay(1000) +sm.onLayer(500, "02", 410, 170, 1, "Effect/Direction22.img/effect/PF_two/2", 4, True, -1, False) +sm.sendDelay(1000) +sm.sayMonologue("#fs30##fnArial#Curse Sigil", 0) +sm.sayMonologue("#fs20##fnArial#\r\n\r\nThe curse's mark on your hand has grown smaller, but shows no sign of disappearing.", 0) +sm.sayMonologue("#fs20##fnArial#You feel it slowly eating away at your life force.", 0) +sm.sayMonologue("#fs20##fnArial#\r\n'I must escape this cursed fate, whatever it takes.'", 1) +sm.offLayer(300, "02", False) +sm.bgmVolume(0, 1000) +sm.sendDelay(1500) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.zoomCamera(4000, 1000, 4000, 169, -22) +sm.sendDelay(1200) +sm.createFieldTextEffect("#fnArial##fs18#Several Days Later, Near the Partem Ruins", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.bgmVolume(-2, 300) +sm.sendDelay(300) +sm.changeBGM("Bgm51/TheVillageOfKarupa", 0, 0) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Guess the investigation always starts at the scene of the crime.") +sm.sendDelay(1000) +sm.sendNext("#face6#It all happened in these ruins, so I figured there might be a clue on how to break the curse here, too. But even if there IS, it does me no good if I can't even get in.") +sm.sendSay("#face0#That leaves me with just two options, then. Either I find some way to get inside the ruins, or I check out places nearby.") +sm.sendDelay(1000) +sm.sendNext("#face0#Okay then... Before I get into the swing of this investigation, I'd better make sure I'm prepared.") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.setLevel(10) +sm.addSP(5) +sm.setSTR(4) +sm.setINT(4) +sm.setDEX(4) +sm.setLUK(4) +sm.addMaxHP(350) +sm.addMaxMP(200) +sm.setAP(4 + chr.getLevel() * 5) +sm.setJob(301) +sm.completeQuestNoCheck(35902) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/04/16/51") +sm.startQuest(11620) diff --git a/scripts/field/enter_910090306.py b/scripts/field/enter_910090306.py new file mode 100755 index 0000000..02794ef --- /dev/null +++ b/scripts/field/enter_910090306.py @@ -0,0 +1,51 @@ +# id 910090306 (Partem : Town Entrance), field 910090306 +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h1;13=h0;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.zoomCamera(0, 1500, 0, 430, 90) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.speechBalloon(True, 0, 0, "Better safe than sorry.", 1000, 0, 0, 0, 0, 4, 1013323, 5039505) +sm.speechBalloon(True, 0, 0, "Uh-oh, a weirdo...", 1000, 0, 0, 0, 0, 4, 1013322, 5039505) +sm.sendDelay(1500) +sm.speechBalloon(True, 0, 0, "C'mon, let's go home.", 1000, 0, 0, 0, 0, 4, 1013323, 5039505) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h0;13=h0;23=h1;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h0;13=h0;23=h0;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.zoomCamera(0, 1500, 0, 430, 90) +sm.sendDelay(1500) +sm.zoomCamera(2000, 1500, 2000, -120, 90) +sm.sendDelay(2500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendNext("#face0#Haha. It's okay, guys, you can come out. I know this traveler may look kinda weird, what with that visible neck and all, but they went out of their way to save my life.") +sm.sendSay("#face0#That's weird. They're being even more shy than usual today. It's probably because you're the first outsider who's passed through in a while.") +sm.sendSay("#face0#But even then, they're usually not THIS skittish. Hmm... Maybe that loud noise we heard a few days ago has them on edge.") +sm.sendDelay(500) +sm.sendNext("#face0#Oh. I probably should've mentioned it before, but that loud noise is the main reason the Karuppa steer clear of the ruins.") +sm.sendSay("#face0#Every so often, we'll hear this terrifying BOOOOOM, and my stomach twists itself into knots every time. I've never heard anything else quite like it. It's very bizarre.") +sm.sendDelay(500) +sm.sendNext("#face0#Anyway, we're almost there. Right ahead, you should be able to see where we Karuppa live.") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(35906) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/33") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h1;13=h0;23=h0;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.warp(100051000) diff --git a/scripts/field/enter_910090307.py b/scripts/field/enter_910090307.py new file mode 100755 index 0000000..b67c3e3 --- /dev/null +++ b/scripts/field/enter_910090307.py @@ -0,0 +1,153 @@ +# id 910090307 (Partem : Mortargrind Hill), field 910090307 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.setMapTaggedObjectVisible("object", False, 0, 0) +sm.setMapTaggedObjectVisible("object1", False, 0, 0) +sm.zoomCamera(0, 1000, 0, 134, -20) +sm.sendDelay(300) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.forcedMove(False, 330) +sm.zoomCamera(2500, 1500, 2500, 134, 20) +sm.sendDelay(3500) +sm.setSpeakerType(3) +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face1#Huh. This must be the legendary tool Brie was talking about.") +sm.sendDelay(300) +sm.sendNext("#face1#It's got some moss growing on it, but that's to be expected of a stone object that's been sitting outside since ancient times. Maybe they don't realize that this is an artifact.") +sm.sendSay("#face1#Brie said that at the end of the ceremony, everyone drinks their share of the Wunderlixir. And soon, I'll get my chance.") +sm.sendDelay(1000) +sm.sendNext("#face3#I hear the townspeople coming. Now's my chance to make my exit. Then I can just show up in a few minutes like I just got there and no one will be the wiser.") +sm.sendDelay(300) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.setMapTaggedObjectVisible("object", True, 0, 0) +sm.setMapTaggedObjectVisible("object1", True, 0, 0) +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.spawnNpc(1013352, 220, -81) +sm.showNpcSpecialActionByTemplateId(1013352, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(4500) +sm.createFieldTextEffect("#fnArial##fs18#Several Minutes Later, on Mortargrind Hill", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendNext("#face0#I see everyone's here. Good, good. As we come together to partake in the legendary Karuppa Wunderlixir, let us all reflect on the spirit of healing and wellness, both in ourselves and in our community.") +sm.showNpcSpecialActionByTemplateId(1013352, "special1", 1080) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/foxvalley/npc_doldol", 100) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendNext("#face0#A divine power has come to rest in the legendary mortar and pestle!") +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendNext("#face0#As we have a special guest with us for this year's celebration, I would like to offer them the honored first sip.") +sm.sendSay("#face0#Come, traveler, and partake of the Wunderlixir.") +sm.sendDelay(500) +sm.zoomCamera(1500, 1500, 1500, -352, -20) +sm.sendDelay(2000) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face6#I'm ready.") +sm.sendDelay(500) +sm.forcedMove(False, 330) +sm.zoomCamera(2500, 1500, 2500, 134, 20) +sm.sendDelay(2500) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("#face0##b(As you prepare to drink the Wunderlixir, you feel the ominous energy within you begin to surge. In your discomfort, it occurs to you that the sensation is much like the first time you came in contact with the relic.)#k") +sm.bgmVolume(0, 2000) +sm.sendDelay(2300) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.bgmVolume(5, 1000) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("#face3#Bwah--!") +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/pathfinder/roar2", 100) +sm.sendDelay(300) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/pathfinder/roar1", 100) +sm.sendDelay(1000) +sm.sendDelay(300) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendNext("#face1#O-oh no... It's the sound! The terrible sound!") +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendSay("#face0#But this is the sound that comes from those ghastly ruins outside the village. What in the world--?") +sm.blind(True, 255, 0, 0, 0, 2500) +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3#(I still feel the curse's presence, but...there's some weird reaction going on, too. I'll bet the relic has some sort of connection with this town. If only I knew what...)") +sm.playSound("Sound/SoundEff.img/pathfinder/roar1", 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face1#Argh... My head feels like it's gonna explode!") +sm.setMapTaggedObjectVisible("object", False, 0, 0) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/pathfinder/roar2", 100) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendNext("#face1#D-danger! Everyone, back to the village! Take shelter there!") +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0##b(At the chief's urging, the townsfolk flee toward the village, spooked by the loud noise. The only ones who remain are the chief and the chatterbox.)#k") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendNext("#face1#To think, our festival would be disrupted by such an ill omen... Tell me, traveler, why is your body making that same haunting noise we hear from the ruins?") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face6#(There's no way I could've predicted the Wunderlixir would trigger something weird like this. Looks like I've worn out my welcome with these guys, but...I guess that means there's no reason to hold back my inquiry for politeness' sake now.)") +sm.sendDelay(500) +sm.sendNext("#face0#I've got a few questions of my own. This relic... What exactly is it? You know something about it, don't you?") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("#face0##b(Taking out the relic you found in the ruins, you hold it before you for them to see. You watch them tremble as the color drains from their faces.)#k") +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendNext("#face1#H-how did you come to possess such a terrible thing?! You need to leave, right now. And to think, I took you for a good person...") +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendSay("#face1#Not only have you defiled our sacred festival with that odious totem, you have brought in your wake that foul noise that has long struck fear into the hearts of the Karuppa.") +sm.sendSay("#face1#You have brought evil things right into our midst. After what we all just experienced, I doubt anyone would wish to extend you any further hospitality. Leave our village, and do not return.") +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(1013352, "special2", 1080) +sm.sendDelay(2500) +sm.setMapTaggedObjectVisible("object1", False, 0, 0) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 0, 90) +sm.sendDelay(1500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Well...this puts me in a bit of an awkward place. Guess I've got no choice but to try some other avenues of investigation.") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h1;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.completeQuestNoCheck(35911) +sm.warp(100051020) diff --git a/scripts/field/enter_910090308.py b/scripts/field/enter_910090308.py new file mode 100755 index 0000000..2668f0b --- /dev/null +++ b/scripts/field/enter_910090308.py @@ -0,0 +1,79 @@ +# id 910090308 (Partem : Gorgonz's Place), field 910090308 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedFlip(True) +sm.zoomCamera(0, 1500, 0, 1350, -100) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(4500) +sm.createFieldTextEffect("#fnArial##fs18#Gorgonz's Place", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#This is Gorgonz's house. He's probably asleep right now, though, since he tends to stay up late, then naps half the day away.") +sm.sendSay("#face0#Hey Gorgonz! Wake up and roll out of bed for a minute! I need to talk to you!") +sm.sendSay("#face0#Gorgonz! Oh Gorgoooonz!") +sm.sendSay("#face0#Gooorrrrr-goooonzzzz!") +sm.sendSay("#face0#*pant* *pant* Oh wait. I just remembered, there's a surefire way to get him to show.") +sm.sendSay("#face0#Ahem. De.... De-De...") +sm.sendSay("#face0#DEMOGORGONZ!") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#Bwah--!") +sm.sendDelay(1000) +sm.spawnNpc(1013351, 1372, -174) +sm.showNpcSpecialActionByTemplateId(1013351, "summon", 0) +sm.moveNpcByTemplateId(1013351, True, 40, 80) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#Ahhh, that's what I like to hear. The power, the prestige, the smidge of extra credibility that comes with being addressed by your full name! Anyway, long time no see, kiddo. What's shakin'?") +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#*sigh* Well, you don't seem to be doing any worse for wear. I was worried when you first said you were moving out of town.") +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendSay("#face0#Worried? For me? I roll with the punches. Whatever the trouble, I'll tough it out. But enough about me. Who's your tall, dark, and shady friend there? Wait, don't tell me you hired your very own assassin?") +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Ack! N-no! They're a hero - an Explorer who was passing through the area. We're working together now. ...Did I mention they're super strong?") +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendSay("#face1#Heh heh... At long last, a fellow connoisseur of myth, mystery, and the generally odd! Become my rival and let us scorch each other with the flames of heated scholarly competition!") +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Wh-what? No! This is why people don't come visit you, Gorgonz. Anyway, this Explorer are I here to see you about something important.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#(She told Gorgonz we were investigating the ruins, stepping up the effort because the loud noises were getting worse. Which is...sure, let's just go with that for simplicity's sake.)") +sm.sendSay("#face0#Okay. First things first, what can you tell me about this relic?") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("#face0#(I showed the relic to Gorgonz, but when he saw it, his face grew pale, just like with Mascarpo and the chief.)") +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#Eeeep! S-sorry, but can you please put that away?") +sm.sendSay("#face0#Yeowza. I don't know where you picked that thing up, but it's got some seriously bad mojo floatin' around it, just like the ruins. Is it connected to the ruins? ...Did you GET it from the ruins?") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#I'm the one asking the questions here. I heard you observe the ruins. How much do you know about them?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendSay("#face0#So...here's the thing. I'm no archaeologist. I just like creepy, scary stuff. That's why I hang out near the ruins. I don't really know all that much about them, scientifically speaking.") +sm.sendDelay(1000) +sm.sendNext("#face0#Sorry to be a disappointment. But if there's something in the ruins you're looking for, there IS something I've got that I think can help.") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(35913) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/38") +sm.createQuestWithQRValue(35947, "12=1;2=1;6=1") +sm.createQuestWithQRValue(35948, "00=h0;10=h1;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h1;17=h0;09=h0;19=h0") +sm.warp(100051030) diff --git a/scripts/field/enter_910090309.py b/scripts/field/enter_910090309.py new file mode 100755 index 0000000..5d72756 --- /dev/null +++ b/scripts/field/enter_910090309.py @@ -0,0 +1,79 @@ +# id 910090309 (Partem : Wawa Falls), field 910090309 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 50, -45) +sm.setMapTaggedObjectVisible("0", True, 0, 0) +sm.setMapTaggedObjectVisible("1", False, 0, 0) +sm.setMapTaggedObjectVisible("boom", False, 0, 0) +sm.spawnNpc(1013350, -900, -180) +sm.showNpcSpecialActionByTemplateId(1013350, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Whew! This is bigger than any of the fireworks I've made before. Here, take it!") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#Okay. I'm gonna place it here, so we'll need to stand clear. Once we light this puppy, we should get a satisfying BOOM.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Okay!") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setMapTaggedObjectVisible("boom", True, 0, 0) +sm.setMapTaggedObjectVisible("0", False, 0, 0) +sm.setMapTaggedObjectVisible("1", True, 0, 0) +sm.playSound("Sound/SoundEff.img/pathfinder/rock", 100) +sm.sendDelay(900) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.setMapTaggedObjectVisible("boom", False, 0, 0) +sm.sendDelay(300) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3#...Did it work?") +sm.zoomCamera(0, 1000, 0, -550, -45) +sm.blind(True, 255, 240, 240, 240, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(300) +sm.zoomCamera(2000, 1500, 2000, -600, 0) +sm.moveNpcByTemplateId(1013350, False, 140, 180) +sm.forcedMove(False, 120) +sm.sendDelay(2000) +sm.zoomCamera(1000, 1500, 1000, -400, 40) +sm.sendDelay(1500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#There it is! The last fragment from the compass!") +sm.sendDelay(300) +sm.sendNext("#face2#We finally have all three pieces of the compass! Let's take them back to Gorgonz's house and get him to fix it, heehee.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#(Looks like we're all set. The first and second were no sweat, but I have to admit, it would've been rough going trying to nab that third one without the kid's help.)") +sm.sendSay("#face0#Hey... Back there... You did all right, kiddo.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#R-really?") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face6#...Anyway, this compass isn't gonna fix itself. Let's get moving.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face2#Wow... I really did all right. That's pretty close to 'good'! C'mon! Gorgonz is waiting!") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(35920) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h1;19=h0") +sm.warp(100051030) diff --git a/scripts/field/enter_910090310.py b/scripts/field/enter_910090310.py new file mode 100755 index 0000000..a7ae91e --- /dev/null +++ b/scripts/field/enter_910090310.py @@ -0,0 +1,59 @@ +# id 910090310 (Partem : Gorgonz's Place), field 910090310 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.setMapTaggedObjectVisible("1", False, 0, 0) +sm.setMapTaggedObjectVisible("2", False, 0, 0) +sm.forcedFlip(True) +sm.forcedFlip(False) +sm.zoomCamera(0, 1500, 0, 200, -200) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#In a couple minutes, the sun will hit the top of the hill. Before that happens, you need to put something related to whatever it is you're looking for on the base of the compass.") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.forcedMove(False, 120) +sm.sendDelay(1000) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0##b(You pull out the Relic and place it on the compass's pedestal. The sunlight grows brighter, seeming to bathe the entire hill in its warm glow.)#k") +sm.sendDelay(1000) +sm.setMapTaggedObjectVisible("1", True, 0, 0) +sm.sendDelay(500) +sm.setMapTaggedObjectVisible("2", False, 0, 0) +sm.playSound("Sound/SoundEff.img/pathfinder/compass", 100) +sm.sendDelay(1000) +sm.zoomCamera(2000, 1000, 2000, -170, -200) +sm.forcedMove(True, 120) +sm.sendDelay(2500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face2#Wow, it actually worked!") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#Where the light's pointing... I feel like I've been in that area of the forest before.") +sm.sendSay("#face3##b(You vaguely remember the location the compass is pointing toward as being near the ruins, though even to your trained eyes it seemed merely a place overgrown with vegetation. Now you're curious what secrets may be hidden there.)#k") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#It looks like it's leading us closer to the ruins. Maybe if we go there, we'll find something connected to those loud noises that always keep us on edge.") +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendSay("#face0#The ruins? Yikes. Well, have a nice trip. Tell me all about it when you get back. I'm curious, but not quite curious enough to overcome my crippling fear. Wait, did I say 'crippling fear'? What I meant to say is that I'm just really busy. With, uh... Research. Yeah, let's go with that.") +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Do you seriously expect me to believe you're that self-motivated when you won't even fix your magic compass without other people helping out? Well, do what you want. Me and the Explorer are gonna check it out. Byeeeeee.") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(35922) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/46") +sm.warp(100051030) diff --git a/scripts/field/enter_910090311.py b/scripts/field/enter_910090311.py new file mode 100755 index 0000000..da0da0c --- /dev/null +++ b/scripts/field/enter_910090311.py @@ -0,0 +1,59 @@ +# id 910090311 (Partem : Ruins Guardian Way Entrance), field 910090311 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(1013350, -631, 60) +sm.showNpcSpecialActionByTemplateId(1013350, "summon", 0) +sm.zoomCamera(0, 2000, 0, -540, -400) +sm.sendDelay(500) +sm.createFieldTextEffect("#fnArial##fs18#Partem Ruins", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.zoomCamera(4000, 2000, 4000, -540, 100) +sm.sendDelay(4500) +sm.setSpeakerType(3) +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Huh. So it really was a secret entrance into the ruins after all.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Ack... Who designed this place, anyway? This path branches off in a bunch of different directions. Do you have any clue which way we should go? Because I sure don't...") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#(Well, this place gives us nothing if not options for taking a wrong turn. Guess I didn't notice the first time I was in here because I just followed the light from the altar key.)") +sm.sendSay("#face0#(Hmm... Would there be a clue to undoing the curse in the chamber where I first found the relic? Or should I look somewhere else?)") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Uhm... I think I'm hearing a faint vibration-y sort of sound. Is it just me? It's sort of like what I hear when the ruins shake, so that's not very encouraging.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face6##b(You stand still, trying to focus on the sound. Though faint, you do hear a deep thrum from further below.)#k") +sm.sendSay("#face0#(If I can zero in on where that sound is coming from, it might lead to something. The question is, how do I do that when it's so faint? Hmm... Y'know, even if I can't, maybe SHE can...)") +sm.sendSay("#face0#Hey, kiddo, got a favor to ask. Do you think you can root out the source of this sound?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#I think so. I've been frightened by those loud noises from the ruins for so long that I've become almost hypersensitive to sounds like that.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#All right. Lead the way, then, and I'll follow.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#So you want to actually go TOWARD the sound? Eeep... That seems more than a little dicey to me, but I'll summon up all my courage and do it. Just promise me you'll be right behind me.") +sm.sendDelay(500) +sm.zoomCamera(2000, 1000, 2000, -120, -48) +sm.moveNpcByTemplateId(1013350, False, 550, 180) +sm.sendDelay(2000) +sm.forcedMove(False, 300) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(35923) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;21=h0;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;21=h0;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h1;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.warp(100051041) diff --git a/scripts/field/enter_910090312.py b/scripts/field/enter_910090312.py new file mode 100755 index 0000000..e0e75e2 --- /dev/null +++ b/scripts/field/enter_910090312.py @@ -0,0 +1,45 @@ +# id 910090312 (Partem : Deathly Abyss), field 910090312 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.playSound("Sound/SoundEff.img/morass/bubble", 100) +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedMove(True, 10) +sm.sendDelay(300) +sm.forcedAction(27, 999999) +sm.spawnNpc(1013350, -182, 78) +sm.showNpcSpecialActionByTemplateId(1013350, "summon", 0) +sm.moveNpcByTemplateId(1013350, False, 10, 80) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(1013350, "special2", -1) +sm.zoomCamera(0, 1500, 0, 0, -120) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.zoomCamera(3000, 1000, 3000, 0, 200) +sm.sendDelay(3000) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#This pool is way deeper than it looked. Is it just me, or is it actually getting darker the further down we go?") +sm.sendSay("#face1#Eeeek! S-something weird just fluttered by! I think it's coming toward us again! Nooo! Go away!") +sm.sendDelay(300) +sm.sendDelay(300) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.sendDelay(300) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face4#(We've gotta reach the bottom, and soon. Tch... I hate these do-or-die situations. Why do all these ruins keep trying to kill me? Still, we're fresh out of options here.)") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.progressMessageFont(3, 20, 4, 0, "Swim down while fending off the dangers in the depths.") +sm.warp(910090350) diff --git a/scripts/field/enter_910090313.py b/scripts/field/enter_910090313.py new file mode 100755 index 0000000..364a044 --- /dev/null +++ b/scripts/field/enter_910090313.py @@ -0,0 +1,95 @@ +# id 910090313 (Partem : Deathly Abyss Depths), field 910090313 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.playSound("Sound/SoundEff.img/morass/bubble", 100) +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedMove(False, 1) +sm.sendDelay(300) +sm.forcedAction(27, 999999) +sm.spawnNpc(1013350, -182, 78) +sm.showNpcSpecialActionByTemplateId(1013350, "summon", 0) +sm.moveNpcByTemplateId(1013350, False, 10, 80) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(1013350, "special2", -1) +sm.zoomCamera(0, 1500, 0, 0, 230) +sm.sendDelay(300) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Oh! Over there! I think I see a doorway that leads to an exit!") +sm.forcedMove(False, 10) +sm.sendDelay(500) +sm.sendNext("#face0#But I think our glowpod is about to fade. Let's light up a new one. ...Oh. That look on your face definitely says, 'I just used the last one.'") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#...Pretty much, yeah.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#We've gotta do something!") +sm.sendSay("#face1#The glowpod...") +sm.blind(True, 100, 0, 0, 0, 1300) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#(Even if we swam as fast as we could, we'd never make it in time. Think! How can we get there quickly?)") +sm.sendSay("#face0#(Something quick. Something I can do with what I've got on me right now...)") +sm.sendSay("#face6#(What've I got? Lessee... A little bit of the explosive powder from earlier, some rope, and my bow and arrows. Gah. What can I do with these?)") +sm.zoomCamera(500, 1600, 500, 85, 230) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.sendDelay(500) +sm.sendNext("#face0#(I could set off an explosion in the water... Nah, that wouldn't solve anything about our current predicament. Time's not on my side.)") +sm.zoomCamera(500, 1700, 500, 85, 260) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.sendDelay(500) +sm.sendNext("#face0#(Try to lasso something in the distance with my rope? All these rocks are going to be slippery from being underwater for so long, so I don't think that'd really work.)") +sm.zoomCamera(500, 2000, 500, 85, 280) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.sendDelay(500) +sm.sendNext("#face3#(Bows work by storing up a little bit of tension and amplifying that to exert a lot of force. I might be able to shoot an arrow all the way to the bottom...)") +sm.bgmVolume(0, 1000) +sm.sendDelay(1300) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.bgmVolume(5, 1000) +sm.changeBGM("Bgm51.img/Pathfinder", 0, 0) +sm.blind(True, 150, 0, 0, 0, 1300) +sm.sendNext("#face3#Well, the clock's ticking, and it's this or nothing.") +sm.sendDelay(1000) +sm.sendNext("#face0#Brie! I want you to hold onto me as tightly as you can. Whatever happens, don't let go, okay?") +sm.sendSay("#face0#The moment I loose the arrow, I want you to swim with all your might. You think you can do that?") +sm.forcedMove(True, 120) +sm.zoomCamera(1500, 2000, 1500, -113, 210) +sm.sendDelay(2000) +sm.sendNext("#face0##b(Without a word, Brie clasps tightly to you. It looks like she's doing her best to be brave given the dire straits in which you presently find yourselves.)#k") +sm.sendDelay(1000) +sm.sendNext("#face0#All right, here we go. Lady Lucky, don't fail me now!") +sm.blind(True, 170, 0, 0, 0, 1300) +sm.sendDelay(500) +sm.zoomCamera(2500, 3000, 2500, 0, 600) +sm.sendDelay(1000) +sm.onLayer(0, "00", 0, -80, -12, "Effect/Direction22.img/effect/PF_light/0", 4, True, -1, False) +sm.playSound("Sound/SoundEff.img/morass/bubble", 100) +sm.sendDelay(1800) +sm.offLayer(300, "00", False) +sm.playSound("Sound/SoundEff.img/illium/job", 100) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.sendNext("#face0##b(The arrow pierces the glowpod and shoots downward through the water, leaving motes of light in its wake. The two of you quickly follow the luminous contrail to the doorway at the bottom of the pool .)#k") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(35927) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/14/03") +sm.createQuestWithQRValue(25980, "normal=#;hard=#") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;02=h1;11=h1;12=h0;21=h0;13=h0;22=h1;14=h0;23=h1;06=h0;15=h0;24=h0;16=h0;07=h0;25=h0;17=h0;08=h0;26=h1;09=h0;19=h0") +sm.warp(100051044) diff --git a/scripts/field/enter_910090314.py b/scripts/field/enter_910090314.py new file mode 100755 index 0000000..521da5f --- /dev/null +++ b/scripts/field/enter_910090314.py @@ -0,0 +1,79 @@ +# id 910090314 (Partem : Karuppa Town), field 910090314 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.hideUser(True) +sm.zoomCamera(0, 1000, 0, -36, -358) +sm.sendDelay(500) +sm.zoomCamera(4000, 1000, 4000, -36, 0) +sm.createFieldTextEffect("#fnArial##fs18#Later, in the Karuppa Town", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.sendDelay(5500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1500, 0, 80, 90) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendNext("#face0#Hoho, that's quite the active imagination you have, Brie. But you couldn't have gone into the ruins. Everyone knows it's impossible for we Karuppa to venture inside.") +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face0#And somewhere deep in the ruins, you heard a voice without a form? This entire tale sounds hiiiiighly suspect to me.") +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face1#*sniff*... *sniffle*...") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face6##b(Once you started walking, you found yourself headed in the direction of the Karuppa Town. Perhaps it was a gut feeling, but it didn't seem right to you, leaving things as they were. You approached in time to overhear the villagers' skepticism about Brie's story.)#k") +sm.sendSay("#face0#(It's not like me to stick my nose into others' business, but... I'd feel bad if I skipped town and just left the kid high and dry.)") +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendNext("#face0#It's because you were hanging out with that bad-news traveler, isn't it? They sure put some strange ideas in your head. Tsk tsk... And to think, you were always such a model Karuppa; a real straight arrow.") +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face1#B-but it's all true! I went on an adventure with a real hero...") +sm.sendDelay(1000) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Don't look too glum. They just don't know courage when they see it. Anyway... I just wanted to give you a little something in thanks for your help.") +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/Fever", 100) +sm.onLayer(0, "01", -20, 85, -1200000, "Effect/Direction22.img/effect/PF_flower/0", 4, False, -1, False) +sm.sendDelay(1500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Huh? This is...") +sm.offLayer(300, "01", False) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face1##b(You watch as Brie picks up the small flower, clutching it tightly in her hands. As she dabs the tears from her eyes, you can see them glimmer with renewed determination.)#k") +sm.blind(True, 255, 0, 0, 0, 6000) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face1#The ruins outside of town aren't some terrible place. They were built by our Karuppa ancestors to house a holy relic.") +sm.sendSay("#face1#But because of a curse placed on it, the relic's power started to become corrupted. It made those sounds we're afraid of so that our people would stay away from the ruins, out of reach of its dark energy.") +sm.sendDelay(1000) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#(Heh... That was pretty out-of-character for me, huh? *sigh* This is why it's easier to just work alone.)") +sm.sendSay("#face0#(Anyway, at least I can leave with a clear conscience now. I'll just have to trust that the villagers will come to terms with all of this in their own time. That just leaves the question of where to head after this...)") +sm.sendDelay(500) +sm.sendNext("#face3#(Oh yeah... The Bowman Instructional School isn't too far from here, is it? I should probably stop by.)") +sm.sendDelay(1000) +sm.hideUser(False) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(35929) +sm.createQuestWithQRValue(35948, "00=h1;10=h0;02=h1;11=h1;12=h0;21=h0;13=h0;22=h1;14=h0;23=h1;06=h0;15=h0;24=h0;16=h0;07=h0;25=h0;17=h0;08=h0;26=h1;09=h0;19=h1") +sm.createQuestWithQRValue(35948, "00=h1;10=h0;02=h1;11=h1;12=h0;21=h0;13=h0;22=h1;14=h0;23=h1;06=h0;15=h0;24=h0;16=h0;07=h0;25=h0;17=h0;08=h0;26=h1;09=h0;19=h0") +sm.warp(100000201) diff --git a/scripts/field/enter_910090350.py b/scripts/field/enter_910090350.py new file mode 100755 index 0000000..32833b9 --- /dev/null +++ b/scripts/field/enter_910090350.py @@ -0,0 +1,17 @@ +# id 910090350 (Partem : Deathly Abyss), field 910090350 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.createQuestWithQRValue(35927, "count=0") +sm.createQuestWithQRValue(35927, "count=0;talk1=0") +sm.createQuestWithQRValue(35927, "count=0;talk1=0;talk2=0") +sm.forcedMove(True, 10) +sm.forcedInput(7) +sm.sendDelay(300) +sm.forcedInput(7) +sm.sendDelay(300) +sm.forcedMove(True, 100) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_910143000.py b/scripts/field/enter_910143000.py new file mode 100755 index 0000000..947f666 --- /dev/null +++ b/scripts/field/enter_910143000.py @@ -0,0 +1,69 @@ +# id 910143000 (null), field 910143000 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.createQuestWithQRValue(37152, "plane=on") +sm.sendDelay(1000) +sm.zoomCamera(0, 1000, 0, -873, 100) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.forcedMove(False, 350) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1012110) # Anne +sm.sendNext("It flew over this way, didn't it? Where did my paper airplane land?") +sm.forcedFlip(True) +sm.sendDelay(2000) +sm.sendNext("Oh, it's way over there.") +sm.forcedInput(8) +sm.sendDelay(1000) +sm.forcedMove(True, 600) +sm.sendDelay(6000) +sm.sendNext("I guess I threw it harder than I thought... Ugh, it's really creepy here. Probably full of monsters.") +sm.createQuestWithQRValue(37152, "plane=off") +sm.sendDelay(500) +sm.changeBGM("Bgm00/Silence", 0, 0) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(2000) +sm.sendNext("Heeey! I know you monsters are listening, but you better not attack me! I'm just here to get my airplane, then I'll be out of your fur... or scales... or whatever...") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation3", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(2000) +sm.sendNext("Ahh! What's that screeching?!") +sm.sendDelay(1000) +sm.zoomCamera(1000, 1000, 1000, -873, 415) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 2000, 0, -873, 530) +sm.sendDelay(1300) +sm.removeOverlapScreen(1000) +sm.sendDelay(3000) +sm.spawnNpc(1501012, -886, 533) +sm.showNpcSpecialActionByTemplateId(1501012, "summon", 0) +sm.sendDelay(2000) +sm.sendNext("Ahhhh! A witch!") +sm.sendDelay(500) +sm.forcedMove(False, 350) +sm.sendDelay(2000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 0, -886, 583, 0, 0, 1, 0) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.startQuest(37152) +sm.warp(101000000) diff --git a/scripts/field/enter_910143001.py b/scripts/field/enter_910143001.py new file mode 100755 index 0000000..95ae2af --- /dev/null +++ b/scripts/field/enter_910143001.py @@ -0,0 +1,35 @@ +# id 910143001 (null), field 910143001 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.onLayer(1500, "00", 0, 0, 12, "Effect/Direction21.img/Elodin/deepforest/0", 4, True, -1, False) +sm.sendDelay(4500) +sm.setSpeakerType(3) +sm.setParam(3) +sm.sendNext("...I don't hear any screeching noises, and this place is plenty creepy without them.") +sm.sendSay("What am I even doing here, anyway? It's not like Anne can't just...fold another paper airplane. Heck, I'd fold it for her.") +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.sendNext("Ugh... Those howls are giving me the willies.") +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.sendNext("Gyah! The screeching!!") +sm.sendDelay(1000) +sm.onLayer(1500, "01", 0, 0, 12, "Effect/Direction21.img/Elodin/deepforest/1", 4, True, -1, False) +sm.sendDelay(2500) +sm.sendNext("Monsters?! I hate these things!") +sm.sendDelay(1000) +sm.offLayer(500, "00", False) +sm.offLayer(500, "01", False) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(101081000) diff --git a/scripts/field/enter_910143002.py b/scripts/field/enter_910143002.py new file mode 100755 index 0000000..f00199e --- /dev/null +++ b/scripts/field/enter_910143002.py @@ -0,0 +1,45 @@ +# id 910143002 (null), field 910143002 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 127, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(3) +sm.sendNext("There must be a way out of here!") +sm.sendSay("I am #eso#n over this place.") +sm.sendDelay(2000) +sm.spawnNpc(1501012, 480, 133) +sm.showNpcSpecialActionByTemplateId(1501012, "summon", 0) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(1500) +sm.flipNpcByTemplateId(1501012, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(1501012, False, 200, 150) +sm.sendDelay(2000) +sm.sendDelay(1500) +sm.sendDelay(1000) +sm.sendNext("What the...?") +sm.sendSay("Is that the witch?") +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.sendDelay(1000) +sm.avatarOriented("Effect/OnUserEff.img/emotion/ddam") +sm.sendNext("Uhh...") +sm.sendSay("She didn't turn me into a newt or anything. Hm... Maybe she's a nice witch.") +sm.sendDelay(1000) +sm.forcedMove(False, 800) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(101081300) diff --git a/scripts/field/enter_910143003.py b/scripts/field/enter_910143003.py new file mode 100755 index 0000000..975ae82 --- /dev/null +++ b/scripts/field/enter_910143003.py @@ -0,0 +1,81 @@ +# id 910143003 (null), field 910143003 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1500, 0, -544, 100) +sm.sendDelay(1000) +sm.blind(True, 180, 0, 0, 0, 1300) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(3) +sm.sendNext("Huh? The screeching stopped.") +sm.forcedInput(2) +sm.playSound("Sound/Foot.img/leaf/1", 100) +sm.sendDelay(500) +sm.forcedInput(6) +sm.sendDelay(500) +sm.forcedMove(False, 250) +sm.playSound("Sound/Foot.img/leaf/0", 100) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/3", 100) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/0", 100) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/3", 100) +sm.sendDelay(500) +sm.sendNext("Looks like nobody's ho--") +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation3", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(500) +sm.spawnNpc(1501014, -70, 120) +sm.showNpcSpecialActionByTemplateId(1501014, "summon", 0) +sm.sendDelay(1000) +sm.zoomCamera(100, 1500, 100, -270, 100) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.sendDelay(1500) +sm.zoomCamera(100, 2500, 100, -95, 125) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.sendDelay(1500) +sm.zoomCamera(100, 3500, 100, -70, 150) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.sendDelay(3000) +sm.playSound("Sound/SoundEff.img/Elodin/scream_close", 200) +sm.zoomCamera(100, 2000, 100, -270, 150) +sm.sendDelay(1000) +sm.sendNext("#fs28#Muahhhh!!") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501012) # ??? +sm.sendSay("What's going on in here?") +sm.zoomCamera(100, 2000, 100, -600, 150) +sm.sendDelay(1000) +sm.spawnNpc(1501012, -640, 130) +sm.showNpcSpecialActionByTemplateId(1501012, "summon", 0) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation3", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(500) +sm.forcedInput(7) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(1500) +sm.sendNext("Stop screaming!") +sm.setParam(3) +sm.sendSay("Ah...") +sm.sendDelay(500) +sm.forcedInput(4) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 0, -640, 150, 0, 0, 1, 0) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 2000) +sm.sendDelay(1500) +sm.setParam(5) +sm.sendNext("Well that was a bit much.") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(37159, "dir=end") +sm.warp(101082000) diff --git a/scripts/field/enter_910370111.py b/scripts/field/enter_910370111.py new file mode 100755 index 0000000..4fe01fd --- /dev/null +++ b/scripts/field/enter_910370111.py @@ -0,0 +1,34 @@ +# id 910370111 (null), field 910370111 +sm.lockInGameUI(True, False) +sm.forcedInput(2) +sm.sendDelay(1400) +sm.forcedInput(1) +sm.sendDelay(30) +sm.forcedInput(0) +sm.setSpeakerType(3) +sm.setSpeakerID(1052001) # Dark Lord +sm.setParam(1) +sm.sendNext("Listen up, #b#h0#!#k! I'm going to give you a rough overview of the Shadower skills.") +res = sm.sendNext("First, let me ask you something. Do you know which one of the following is a basic Shadower skill?\r\n\r\n#b#L0#Critical Growth#l\r\n#L1#Freezing Crush#l\r\n#L2#Combo Attack#l") +sm.sendNext("Yeah, #bCritical Growth#k is the right answer!") +sm.sendSay("Do you want to know what kind of skill it is? Well, let me show you what it can do.") +sm.showEffect("Effect/CharacterEff.img/advTutorial/skillUI/4200013", 0, -450, -200, 0, 0, 0, 0) +sm.sendDelay(2520) +sm.sendNext("As you can see, this skill will increase your Critical Rate continuously.") +sm.setParam(3) +sm.sendSay("I know how important the basics are, but... Can I see the #rmost powerful skill#k out of all the Shadower skills?") +sm.setParam(1) +sm.sendSay("Of course. In fact, I will give you a chance to try them out! The two top skills are #rAssassinate#k and #rShadower Instinct#k.") +sm.showEffect("Effect/CharacterEff.img/advTutorial/skillUI/4221001", 0, -460, -200, 0, 0, 0, 0) +sm.showEffect("Effect/CharacterEff.img/advTutorial/skillUI/4221013", 0, -135, -200, 0, 0, 0, 0) +sm.sendDelay(2520) +sm.sendNext("These skills are different from any other attack and buff skills. They become much more powerful when you have a high #bBody Count#k.") +sm.setParam(3) +sm.sendSay("#bBody Count#k?") +sm.setParam(1) +sm.sendSay("Yes. Your Body Count refers to the points that you gain for attacking enemies. You'll find it in the upper right corner, shown as a buff icon.") +sm.sendSay("#i3800573#, #i3800574#, #i3800575#, #i3800576#, and #i3800577#!") +sm.sendSay("See #i3800577#? You'll see some incredible effects if you use the #bAssassinate#k and #bShadower Instinct#k skills when you see this icon.") +res = sm.sendAskYesNo("That's the end of the Shadower skill tutorial. Ready to move on?\r\n#r(Press Yes to return your original location.)#k") +sm.lockInGameUI(False, True) +sm.warp(610050000) diff --git a/scripts/field/enter_924030000.py b/scripts/field/enter_924030000.py new file mode 100755 index 0000000..bc85b51 --- /dev/null +++ b/scripts/field/enter_924030000.py @@ -0,0 +1,6 @@ +# Hidden Street : Stone Colossus (924030000) | Used to spawn Dark Elizas for the [Stone Colossus] Quest line + + +for x in range(6): + sm.spawnMob(9100044, (150*x), 60, False) + diff --git a/scripts/field/enter_940021000.py b/scripts/field/enter_940021000.py new file mode 100755 index 0000000..408f265 --- /dev/null +++ b/scripts/field/enter_940021000.py @@ -0,0 +1,117 @@ +# DIPQ + +import random +from time import sleep + +sleep(4) +mobsPerRound = 50 +mobsLevel = chr.getLevel() +mobHp = 500000 +firstWaveMobs = [9300618,9300619] +fourthWaveMobs = [9300620,9300621] + +if sm.getFieldID() == 940021000: + + def firstWave(): + for x in range(mobsPerRound): + sm.spawnMobByFieldID(random.choice(firstWaveMobs), 2604, 29, False, mobHp, 940021000) + sleep(0.1) + if not sm.getFieldID() == 940021000: + sm.dispose() + while sm.hasMobsInField(): + sleep(5) + + + def secondWave(): + sm.spawnMobByFieldID(9300622, 2604, 29, False, 25000000, 940021000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def thirdWaveTOP(): + for x in range(mobsPerRound): + sm.spawnMobByFieldID(9300625, 2030, -451, False, mobHp, 940021000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def thirdWaveMID(): + for x in range(mobsPerRound): + sm.spawnMobByFieldID(9300625, 2604, 29, False, mobHp, 940021000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def thirdWaveRIGHT(): + for x in range(mobsPerRound): + sm.spawnMobByFieldID(9300625, 3250, 29, False, mobHp, 940021000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def fourthWave(): + for x in range(mobsPerRound): + sm.spawnMobByFieldID(random.choice(fourthWaveMobs), 2015, 0, False, mobHp, 940021000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def fifthWave(): + sm.spawnMobByFieldID(9300634, 2604, 29, False, 25000000, 940021000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def BossWave(): + sm.spawnMobByFieldID(9300627, 2604, 29, False, 940021000) + sleep(0.1) + while sm.hasMobsInField(): + sleep(5) + + def checkMap(): + if not sm.getFieldID() == 940021000: + sm.dispose() + + for x in range(6): + checkMap() + firstWave() + sm.showClearStageExpWindow(sm.getPQExp()) + sm.giveExp(sm.getPQExp()) + sleep(5) + + checkMap() + secondWave() + sm.showClearStageExpWindow(sm.getPQExp()) + sm.giveExp(sm.getPQExp()) + sleep(5) + + waves = [thirdWaveTOP, thirdWaveMID, thirdWaveRIGHT] + for x in range(10): + function = random.choice(waves) + function() + sm.showClearStageExpWindow(sm.getPQExp()) + sm.giveExp(sm.getPQExp()) + sleep(5) + + for x in range(6): + checkMap() + fourthWave() + sm.showClearStageExpWindow(sm.getPQExp()) + sm.giveExp(sm.getPQExp()) + sleep(5) + + checkMap() + fifthWave() + sm.showClearStageExpWindow(sm.getPQExp()) + sm.giveExp(sm.getPQExp()) + sleep(5) + sm.giveItem(2431127) + + checkMap() + BossWave() + sm.showClearStageExpWindow(sm.getPQExp()) + sm.giveExp(sm.getPQExp()) + sm.giveItem(2431128) + sleep(5) + + sm.WarpInstanceOut(940020000) \ No newline at end of file diff --git a/scripts/field/enter_940200100.py b/scripts/field/enter_940200100.py new file mode 100755 index 0000000..b676247 --- /dev/null +++ b/scripts/field/enter_940200100.py @@ -0,0 +1,75 @@ +# id 940200100 (Hidden Street : Elven Training Grounds), field 940200100 +from net.swordie.ms.world.field.fieldeffect import GreyFieldType +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 20, -90) +sm.spawnNpc(3003274, 50, -20) +sm.showNpcSpecialActionByTemplateId(3003274, "summon", 0) +sm.spawnNpc(3003270, 115, -20) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.spawnNpc(3003275, -110, -20) +sm.showNpcSpecialActionByTemplateId(3003275, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendNext("Excellent work! It's clear the two of you are improving every day. Her Majesty will be pleased to see such young Elves giving their all for their kingdom.") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face1#Hehe, I couldn't help but do well after all my practicing. Um... Hey Danika, by the way...") +sm.sendSay("#face1#I was hoping for the opportunity to show Her Majesty the results of my training! I heard that she'll be returning to Elluel soon...") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -90, 10) +sm.sendDelay(500) +sm.zoomCamera(3000, 2000, 3000, 5, 10) +sm.resetNpcSpecialActionByTemplateId(3003275) +sm.showNpcSpecialActionByTemplateId(3003275, "smile", 0) +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendNext("Well, she did mention wanting to stop by the training grounds for a visit. She's sorry she hasn't been able to devote as much attention to the two of you as she'd like.") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face1#Yahoo! Really? I-I'm going to train even harder! I've got to kick my training regimen up a notch. But I'm already practicing every day. Hmm.. Archery, running, what else is there?") +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendSay("Calm down Athena. I'm glad you're motivated to impress your queen, but don't overdo it.") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face1#Don't worry Danika. I've got oodles of stamina! Then I'll see you tomorrow! Let's go Lucid!") +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendSay("See you tomorrow.") +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendSay("#face0#Goodbye.") +sm.moveNpcByTemplateId(3003274, False, 350, 160) +sm.moveNpcByTemplateId(3003270, False, 350, 160) +sm.sendDelay(500) +sm.zoomCamera(3000, 2000, 3000, 560, 10) +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendNext("#face1#Aren't you stoked? It's time to show off all our hard work to her majesty!") +sm.moveNpcByTemplateId(3003274, False, 160, 160) +sm.sendDelay(3000) +sm.moveNpcByTemplateId(3003274, True, 1, 160) +sm.sendNext("#face1#I'm putting my training into overdrive tomorrow! You'll join me, right?") +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendSay("#face0#Yeah... tomorrow...") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face0#Well then, I'd better get a full night's sleep, hehe! Bye Lucid!") +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendSay("#face0#Y-yeah... Bye Athena.") +sm.moveNpcByTemplateId(3003274, False, 600, 200) +sm.sendDelay(2000) +sm.moveNpcByTemplateId(3003270, False, 20, 160) +sm.sendDelay(500) +sm.setFieldGrey(GreyFieldType.Field, True) +sm.blind(True, 50, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("#face0#...") +sm.sendDelay(1500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200101) diff --git a/scripts/field/enter_940200101.py b/scripts/field/enter_940200101.py new file mode 100755 index 0000000..be51f67 --- /dev/null +++ b/scripts/field/enter_940200101.py @@ -0,0 +1,47 @@ +# id 940200101 (Hidden Street : Twilight Training Grounds), field 940200101 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -5, -450) +sm.spawnNpc(3003270, -250, -20) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1000) +sm.zoomCamera(4000, 1000, 4000, -5, 160) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/arrow0", 200) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/arrow1", 200) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/arrow2", 200) +sm.sendDelay(100) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face1#Yah!") +sm.sendSay("#face2#Hiya!") +sm.moveNpcByTemplateId(3003270, False, 320, 160) +sm.sendDelay(3000) +sm.moveNpcByTemplateId(3003270, True, 5, 160) +sm.sendNext("#face2#Argh! There's no use!") +sm.sendSay("#face3#...As much as I practice, I'll never get it right. If only I was gifted like Athena... Then...") +sm.sendSay("#face3#Ugh...") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.showNpcSpecialActionByTemplateId(3003270, "sleep", -1) +sm.zoomCamera(0, 2000, 0, 0, 260) +sm.sendDelay(500) +sm.zoomCamera(3000, 2000, 3000, 90, 260) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200102) diff --git a/scripts/field/enter_940200102.py b/scripts/field/enter_940200102.py new file mode 100755 index 0000000..925c2e6 --- /dev/null +++ b/scripts/field/enter_940200102.py @@ -0,0 +1,32 @@ +# id 940200102 (Hidden Street : Lucid's Dream), field 940200102 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1000) +sm.playSound("Sound/Voice3.img/Lucid/E1/5", 200) +sm.sendDelay(800) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/arrow2", 200) +sm.sendDelay(100) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/arrow1", 200) +sm.sendDelay(50) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/arrow0", 200) +sm.zoomCamera(1000, 1000, 1000, 80, -40) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face1#All right!") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendNext("That was incredible, Lucid. Dead-center on every shot! I expect great things from you.") +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendSay("#face0#(Blushes) Mercedes...") +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200103) diff --git a/scripts/field/enter_940200103.py b/scripts/field/enter_940200103.py new file mode 100755 index 0000000..7fe7855 --- /dev/null +++ b/scripts/field/enter_940200103.py @@ -0,0 +1,21 @@ +# id 940200103 (Hidden Street : Lucid's Dream), field 940200103 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendNext("Your skills are more than just impressive, they're worthy of commendation. I can't wait to see what you can do with Dual Bowguns.") +sm.sendSay("You've proven my faith in you was not a mistake. I can only imagine how much more amazing you'll be when we next meet...") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face0#I'm so happy, it's like a dream! I don't ever want to wake up... To... wake up...") +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200105) diff --git a/scripts/field/enter_940200104.py b/scripts/field/enter_940200104.py new file mode 100755 index 0000000..7ffbfdd --- /dev/null +++ b/scripts/field/enter_940200104.py @@ -0,0 +1,41 @@ +# id 940200104 (Hidden Street : Twilight Training Grounds), field 940200104 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, 90, 260) +sm.sendDelay(500) +sm.spawnNpc(3003270, 120, -20) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.showNpcSpecialActionByTemplateId(3003270, "sleep", -1) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(2000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 90, 260) +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face0#It was a dream again... But it felt so real. Everything was finally going the way I wanted...") +sm.sendSay("#face2#The way I wanted... W-wait a minute. That was too real to be a dream. The warmth of the sun, the scent on the breeze... It can't have been an ordinary dream!") +sm.sendDelay(500) +sm.moveNpcByTemplateId(3003270, True, 80, 160) +sm.sendDelay(500) +sm.zoomCamera(2000, 2000, 2000, 0, 260) +sm.sendDelay(2000) +sm.sendNext("#face0#...I wove the dream I wanted it. I was in control!") +sm.sendSay("#face0#The ability to control dreams... Anyone can be good at archery, but this is a power that I alone possess!") +sm.sendDelay(500) +sm.sendDelay(2500) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200105) diff --git a/scripts/field/enter_940200105.py b/scripts/field/enter_940200105.py new file mode 100755 index 0000000..dbc52d9 --- /dev/null +++ b/scripts/field/enter_940200105.py @@ -0,0 +1,61 @@ +# id 940200105 (Hidden Street : Elluel), field 940200105 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -80, -180) +sm.spawnNpc(3003270, 0, -150) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.spawnNpc(3003278, -205, -150) +sm.showNpcSpecialActionByTemplateId(3003278, "summon", 0) +sm.spawnNpc(3003291, -110, -150) +sm.showNpcSpecialActionByTemplateId(3003291, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendNext("I have never heard such a beautiful melody. I feel completely at ease.") +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendSay("#face0#Tonight, you'll have a wonderful dream! I've seen to it, hehe.") +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendSay("You possess a remarkable ability, Lucid.") +sm.spawnNpc(3003275, 140, -190) +sm.showNpcSpecialActionByTemplateId(3003275, "summon", 0) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendNext("Whats this music? It's so relaxing! It's like all of my fatigue has just drifted away. I'm gonna sleep like a baby tonight!") +sm.spawnNpc(3003277, -280, -150) +sm.showNpcSpecialActionByTemplateId(3003277, "summon", 0) +sm.spawnNpc(3003281, 80, -145) +sm.showNpcSpecialActionByTemplateId(3003281, "summon", 0) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3003281) # Deet +sm.sendNext("Wow, what a pretty music box.") +sm.spawnNpc(3003279, -350, -150) +sm.showNpcSpecialActionByTemplateId(3003279, "summon", 0) +sm.spawnNpc(3003280, -210, -320) +sm.showNpcSpecialActionByTemplateId(3003280, "summon", 0) +sm.spawnNpc(3003282, -270, -320) +sm.showNpcSpecialActionByTemplateId(3003282, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendSay("Look Lucid, everyone is gathering to listen to your music. This music box may just become Elluel's greatest treasure.") +sm.sendSay("I think that everyone will rest easy after listening to this melody.") +sm.setFieldGrey(GreyFieldType.Field, True) +sm.blind(True, 50, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face3#(No... This isn't what I wanted... It was a gift for Her Majesty! No...)") +sm.sendSay("#face3#(That's it? Is my ability not as impressive as Athena's archery? She didn't even compliment me... She was just talking about that stupid music box!)") +sm.sendSay("#face3#(...I'll show her. I can do better. I'm going to practice my skill. I'll make myself invaluable. Then... she'll have to keep me to herself...)") +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly0", 200) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly/005","animation","") +sm.sendDelay(5000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.completeQuest(34370) +sm.warp(450003000) diff --git a/scripts/field/enter_940200111.py b/scripts/field/enter_940200111.py new file mode 100755 index 0000000..6649ab0 --- /dev/null +++ b/scripts/field/enter_940200111.py @@ -0,0 +1,70 @@ +# id 940200111 (Hidden Street : Elluel), field 940200111 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003274, 40, -150) +sm.showNpcSpecialActionByTemplateId(3003274, "summon", 0) +sm.spawnNpc(3003278, -110, -140) +sm.showNpcSpecialActionByTemplateId(3003278, "summon", 0) +sm.spawnNpc(3003275, -205, -150) +sm.showNpcSpecialActionByTemplateId(3003275, "summon", 0) +sm.spawnNpc(3003276, -350, -150) +sm.showNpcSpecialActionByTemplateId(3003276, "summon", 0) +sm.spawnNpc(3003277, -280, -150) +sm.showNpcSpecialActionByTemplateId(3003277, "summon", 0) +sm.spawnNpc(3003279, 5, -320) +sm.showNpcSpecialActionByTemplateId(3003279, "summon", 0) +sm.spawnNpc(3003280, -210, -320) +sm.showNpcSpecialActionByTemplateId(3003280, "summon", 0) +sm.spawnNpc(3003270, 80, -145) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.spawnNpc(3003282, 55, -320) +sm.showNpcSpecialActionByTemplateId(3003282, "summon", 0) +sm.spawnNpc(3003281, -270, -320) +sm.showNpcSpecialActionByTemplateId(3003281, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003276) # Philius +sm.sendNext("Stay safe, Your Majesty.") +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendSay("Thank you, Philius. Thank you everyone...") +sm.setInnerOverrideSpeakerTemplateID(3003276) # Philius +sm.sendSay("The coming battle will be difficult on everyone alike, you, your friends and your people. We will do the best we can during your absence.") +sm.setInnerOverrideSpeakerTemplateID(3003281) # Deet +sm.sendSay("Your Majesty!") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face0#...") +sm.setFieldGrey(GreyFieldType.Field, True) +sm.blind(True, 50, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face2#(...I have a bad feeling about this. What if she doesn't come back?! This could be the last time we ever see her!)") +sm.sendSay("#face2#(...I have to go with her! I'll fight too! Even if I'm not any good at archery...)") +sm.setFieldGrey(GreyFieldType.Field, False) +sm.blind(True, 1, 255, 255, 255, 200) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.moveNpcByTemplateId(3003274, True, 25, 160) +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendNext("#face0#I will fight by your side! Take me with you to the battlefield!") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 134951238, 0, 0) +sm.sendSay("#face0#I want to help! Please let me come with you!") +sm.setInnerOverrideSpeakerTemplateID(3003281) # Deet +sm.sendSay("I want to fight too!") +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendSay("No Deet, you're too young! ...Your Majesty.") +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendSay("Thank you both, but you must remain behind. It is my duty as your ruler to protect you, not the other way around. Trust in me and watch over Elluel while I am away.") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face0#...") +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendSay("#face3#(Mercedes...)") +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200112) diff --git a/scripts/field/enter_940200112.py b/scripts/field/enter_940200112.py new file mode 100755 index 0000000..f73bb84 --- /dev/null +++ b/scripts/field/enter_940200112.py @@ -0,0 +1,83 @@ +# id 940200112 (Hidden Street : Twilight Training Grounds), field 940200112 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -5, 160) +sm.sendDelay(500) +sm.spawnNpc(3003274, 2400, 180) +sm.showNpcSpecialActionByTemplateId(3003274, "summon", 0) +sm.spawnNpc(3003271, -200, 180) +sm.showNpcSpecialActionByTemplateId(3003271, "summon", 0) +sm.spawnNpc(3003275, 2850, 180) +sm.showNpcSpecialActionByTemplateId(3003275, "summon", 0) +sm.spawnNpc(3003278, 2900, 180) +sm.showNpcSpecialActionByTemplateId(3003278, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.moveNpcByTemplateId(3003271, False, 250, 160) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face1#...The more I think about it, the more certain I am I can't give up.") +sm.moveNpcByTemplateId(3003271, True, 70, 160) +sm.sendSay("#face1#Why did I hesitate? I should have been the first to offer my help! If I hadn't waited, things could've turned out differently...") +sm.sendSay("#face2#...Be brave, Lucid. You can convince her! There's still time!") +sm.moveNpcByTemplateId(3003271, False, 230, 160) +sm.zoomCamera(2000, 1000, 2000, 300, 160) +sm.sendDelay(2000) +sm.zoomCamera(3000, 1000, 3000, 2600, 160) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendNext("#face0#Your Majesty!") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 2600, 260) +sm.sendDelay(500) +sm.zoomCamera(3000, 2000, 3000, 2900, 260) +sm.moveNpcByTemplateId(3003274, False, 250, 160) +sm.sendNext("#face0#Your Majesty, wait! I still have something to say!") +sm.sendDelay(500) +sm.spawnNpc(3003271, 2350, -20) +sm.showNpcSpecialActionByTemplateId(3003271, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendNext("If you're here to ask to tag along, I won't hear it. Return to the village.") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face0#You're right. That's what I came here to say. But... I have to come! Because I...") +sm.zoomCamera(1000, 2000, 1000, 2800, 260) +sm.sendDelay(500) +sm.moveNpcByTemplateId(3003271, False, 130, 160) +sm.sendDelay(1500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 134960159, 0, 0) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendNext("Very well.") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.onLayer(1000, "lucid", 0, -80, 0, "Map/Effect3.img/Lacheln/episode3", 4, True, -1, False) +sm.sendNext("Athena, I want you to carry this with you. ") +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendSay("#face3#...") +sm.setInnerOverrideSpeakerTemplateID(3003274) # Athena Pierce +sm.sendSay("#face0#That's the Mistelteinn!") +sm.setInnerOverrideSpeakerTemplateID(3003278) # Mercedes +sm.sendSay("It will protect you.") +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face3#No... She gets everything handed to her! And now even Elluel's greatest treasure, the Mistelteinn...") +sm.sendSay("#face4#There's nothing I can say or do that will change anything... Athena Pierce will always be her favorite...") +sm.sendSay("#face4#I hate them all. Athena Pierce, this stupid kingdom, and everyone in it! Why do they stand in my way?!") +sm.offLayer(500, "lucid", False) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly0", 200) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly/005","animation","") +sm.sendDelay(5000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(450003000) diff --git a/scripts/field/enter_940200120.py b/scripts/field/enter_940200120.py new file mode 100755 index 0000000..e7826ab --- /dev/null +++ b/scripts/field/enter_940200120.py @@ -0,0 +1,36 @@ +# id 940200120 (Hidden Street : Remote Cave), field 940200120 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 20, 10) +sm.spawnNpc(3003271, -710, 130) +sm.showNpcSpecialActionByTemplateId(3003271, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.moveNpcByTemplateId(3003271, False, 700, 200) +sm.sendDelay(6000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 20, -5) +sm.sendDelay(500) +sm.zoomCamera(3000, 2000, 3000, 20, 160) +sm.sendDelay(3000) +sm.moveNpcByTemplateId(3003271, True, 10, 160) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face3#There's no point in denying it any longer. Mercedes doesn't need me.") +sm.sendSay("#face2#If I can't have her, no matter how much I toil, then forget her! I don't need her, or any of them! I'll go somewhere they will never find me. Out of their minds, out of their memories...") +sm.sendDelay(500) +sm.sendNext("#face4#...When night falls, I will vanish into the darkest depths of their dreams.") +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200121) diff --git a/scripts/field/enter_940200121.py b/scripts/field/enter_940200121.py new file mode 100755 index 0000000..a60ec38 --- /dev/null +++ b/scripts/field/enter_940200121.py @@ -0,0 +1,16 @@ +# id 940200121 (Hidden Street : After the War), field 940200121 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sayMonologue("And so, using her powerful ability to manipulate the minds of \r\ndreamers, Lucid hid herself away. When the Elves awoke, they would never know she existed.", 0) +sm.sayMonologue("She immersed herself in a dreamworld of her own making, \r\ncompletely isolated from the outside world.", 0) +sm.sayMonologue("In her dreamworld, Lucid was oblivious to the passage of time.", 0) +sm.sayMonologue("Finally, the terrible war came to an end when the Heroes sealed \r\nthe Black Mage away.", 1) +sm.sayMonologue("...But their victory came at a price. Each one suffered \r\nthe Black Mage's curse in a different way.", 0) +sm.sayMonologue("The Elves of Elluel, their fates being intertwined with Mercedes, \r\nalso suffered a version of the curse, as one after another each was frozen in ice.", 1) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200122) diff --git a/scripts/field/enter_940200122.py b/scripts/field/enter_940200122.py new file mode 100755 index 0000000..8a34662 --- /dev/null +++ b/scripts/field/enter_940200122.py @@ -0,0 +1,57 @@ +# id 940200122 (Hidden Street : Elluel), field 940200122 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 740, -80) +sm.spawnNpc(3003275, -191, -310) +sm.showNpcSpecialActionByTemplateId(3003275, "summon", 0) +sm.spawnNpc(3003276, -106, -310) +sm.showNpcSpecialActionByTemplateId(3003276, "summon", 0) +sm.spawnNpc(3003277, -13, -310) +sm.showNpcSpecialActionByTemplateId(3003277, "summon", 0) +sm.spawnNpc(3003279, 766, -100) +sm.showNpcSpecialActionByTemplateId(3003279, "summon", 0) +sm.spawnNpc(3003280, 863, -20) +sm.showNpcSpecialActionByTemplateId(3003280, "summon", 0) +sm.spawnNpc(3003282, 702, -20) +sm.showNpcSpecialActionByTemplateId(3003282, "summon", 0) +sm.spawnNpc(3003281, 586, -20) +sm.showNpcSpecialActionByTemplateId(3003281, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003280) # Roa +sm.sendNext("So... sleepy... I'm scared...") +sm.setInnerOverrideSpeakerTemplateID(3003281) # Deet +sm.sendSay("Everything's going to be fine... We'll be there... when you wake up....") +sm.spawnNpc(3003295, 766, -100) +sm.showNpcSpecialActionByTemplateId(3003295, "summon", 0) +sm.spawnNpc(3003296, 863, -20) +sm.showNpcSpecialActionByTemplateId(3003296, "summon", 0) +sm.spawnNpc(3003298, 702, -20) +sm.showNpcSpecialActionByTemplateId(3003298, "summon", 0) +sm.spawnNpc(3003297, 586, -20) +sm.showNpcSpecialActionByTemplateId(3003297, "summon", 0) +sm.sendDelay(2500) +sm.zoomCamera(2000, 1000, 2000, -80, -180) +sm.sendDelay(2500) +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendNext("Promise me that we'll meet again.") +sm.setInnerOverrideSpeakerTemplateID(3003276) # Philius +sm.sendSay("Even a curse as powerful as this will surely wane with the passage of time...") +sm.spawnNpc(3003292, -191, -310) +sm.showNpcSpecialActionByTemplateId(3003292, "summon", 0) +sm.spawnNpc(3003293, -106, -310) +sm.showNpcSpecialActionByTemplateId(3003293, "summon", 0) +sm.spawnNpc(3003294, -13, -310) +sm.showNpcSpecialActionByTemplateId(3003294, "summon", 0) +sm.sendDelay(2000) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200123) diff --git a/scripts/field/enter_940200123.py b/scripts/field/enter_940200123.py new file mode 100755 index 0000000..45d62e5 --- /dev/null +++ b/scripts/field/enter_940200123.py @@ -0,0 +1,35 @@ +# id 940200123 (Hidden Street : Remote Cave), field 940200123 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 20, 10) +sm.spawnNpc(3003270, 0, 120) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.showNpcSpecialActionByTemplateId(3003270, "ice", -1) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face2#What happened? Something's wrong... Something's strange... What is this dark aura?") +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(2000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 20, 160) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sayMonologue("Lucid was not immune to the long curse of ice.", 0) +sm.sayMonologue("She succumbed without a friend by her side, or the hope of escape.", 0) +sm.sayMonologue("She was trapped just like the others, but unlike them, her mind remained awake.", 0) +sm.sayMonologue("Without the ability to leave, Lucid's dreamworld turned into a cruel prison.", 0) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200124) diff --git a/scripts/field/enter_940200124.py b/scripts/field/enter_940200124.py new file mode 100755 index 0000000..3917f88 --- /dev/null +++ b/scripts/field/enter_940200124.py @@ -0,0 +1,53 @@ +# id 940200124 (Hidden Street : Royal Chamber), field 940200124 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -180, -80) +sm.sendDelay(500) +sm.spawnNpc(3003275, -260, -60) +sm.showNpcSpecialActionByTemplateId(3003275, "summon", 0) +sm.spawnNpc(3003276, -320, -60) +sm.showNpcSpecialActionByTemplateId(3003276, "summon", 0) +sm.spawnNpc(3003277, -380, -60) +sm.showNpcSpecialActionByTemplateId(3003277, "summon", 0) +sm.spawnNpc(3003280, -40, -60) +sm.showNpcSpecialActionByTemplateId(3003280, "summon", 0) +sm.spawnNpc(3003281, -100, -60) +sm.showNpcSpecialActionByTemplateId(3003281, "summon", 0) +sm.spawnNpc(3003270, -180, -60) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.showNpcSpecialActionByTemplateId(3003270, "mer", -1) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face0#I am the Ruler of the Elves, and the beautiful land of Elluel is mine. Could I possibly be any happier?") +sm.sendSay("#face0#My beloved people always trust me implicitly, and follow my every whim! Now, tell me. How much do you love me, your magnificent queen?") +sm.setInnerOverrideSpeakerTemplateID(3003275) # Danika +sm.sendSay("...") +sm.setInnerOverrideSpeakerTemplateID(3003276) # Philius +sm.sendSay("...") +sm.setInnerOverrideSpeakerTemplateID(3003281) # Deet +sm.sendSay("...") +sm.setInnerOverrideSpeakerTemplateID(3003280) # Roa +sm.sendSay("...") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, -180, -80) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face3#...") +sm.sendSay("#face4#...") +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200125) diff --git a/scripts/field/enter_940200125.py b/scripts/field/enter_940200125.py new file mode 100755 index 0000000..f2af025 --- /dev/null +++ b/scripts/field/enter_940200125.py @@ -0,0 +1,28 @@ +# id 940200125 (Hidden Street : Remote Cave), field 940200125 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, 20, 160) +sm.spawnNpc(3003270, 0, 120) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.showNpcSpecialActionByTemplateId(3003270, "ice", -1) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face3#...I wish I could forget this is a dream, but it's impossible.") +sm.sendSay("#face3#Everytime I awaken, I'm confronted by the truth. This is my reality, this tomb of ice.") +sm.sendSay("#face4#I should end this fantasy of mine... But reality is too painful.") +sm.sendSay("#face4#But before long I'll be weaving another beautiful dream. Maybe this time I won't wake up? Ugh... This is too painful... Make it stop... Please let it end...") +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly0", 200) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly/005","animation","") +sm.sendDelay(5000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(450003000) diff --git a/scripts/field/enter_940200130.py b/scripts/field/enter_940200130.py new file mode 100755 index 0000000..4e93279 --- /dev/null +++ b/scripts/field/enter_940200130.py @@ -0,0 +1,49 @@ +# id 940200130 (Hidden Street : Drifting Thoughts), field 940200130 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -200, -200) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.zoomCamera(500, 1000, 500, 50, 0) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot1", 200) +sm.sendDelay(300) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot2", 200) +sm.sendDelay(300) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot1", 200) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) +sm.sendDelay(300) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot2", 200) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face4#...How long have I been here? How long do I have to stay trapped in here?") +sm.sendSay("#face4#I can't take it anymore... I just want it to stop! Waah...") +sm.sendSay("#face4#Save me, anyone! Please wake me from this terrible nightmare!") +sm.sendSay("#face4#Waaah...") +sm.sendSay("#face4#(Sniffs) Waah...") +sm.sendSay("#face3#...") +sm.sendSay("#face2#...") +sm.sendSay("#face2#...Huh? What is that powerful force... drawing me in? Where am I going?") +sm.sendSay("#face2#Someone's there... Closer now...") +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot2", 200) +sm.sendDelay(300) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot1", 200) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot2", 200) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/foot0", 200) +sm.sendDelay(300) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200131) diff --git a/scripts/field/enter_940200131.py b/scripts/field/enter_940200131.py new file mode 100755 index 0000000..f9f214d --- /dev/null +++ b/scripts/field/enter_940200131.py @@ -0,0 +1,28 @@ +# id 940200131 (Hidden Street : Black Mage Encounter), field 940200131 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face2#...Who are you?") +sm.sendSay("#face2#...You have an ominous aura.") +sm.sendSay("#face1#But maybe you're the one I've been waiting for all this time...") +sm.sendSay("#face1#Can I go to where you are?") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sayMonologue("Eternal life, and knowledge beyond bounds.", 0) +sm.sayMonologue("...A new world.", 0) +sm.sayMonologue("It was an enticing offer for Lucid, a simple Elf-child of Elluel who had never been beyond her kingdom's borders.", 0) +sm.sayMonologue("A plan beyond fathoming, and the raw, absolute power to bring it to fruition...", 0) +sm.sayMonologue("To hear that such a powerful being needed her...", 0) +sm.sayMonologue("She took hold of the Black Mage's hand without a moment's hesitation.", 1) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200132) diff --git a/scripts/field/enter_940200132.py b/scripts/field/enter_940200132.py new file mode 100755 index 0000000..2c8d376 --- /dev/null +++ b/scripts/field/enter_940200132.py @@ -0,0 +1,32 @@ +# id 940200132 (Hidden Street : Remote Cave), field 940200132 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, 20, 80) +sm.spawnNpc(3003270, 0, 120) +sm.showNpcSpecialActionByTemplateId(3003270, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.showNpcSpecialActionByTemplateId(3003270, "ice", -1) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.zoomCamera(500, 2000, 500, 20, 160) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003270) # Lucid +sm.sendNext("#face1#Utter destruction... A new world from the ashes... Things beyond my wildest imaginings...") +sm.sendSay("#face1#All these thoughts I never dared to dream... I-it feels like my head is going to burst!") +sm.resetNpcSpecialActionByTemplateId(3003270) +sm.showNpcSpecialActionByTemplateId(3003270, "ice_break", 0) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/fall2", 200) +sm.sendDelay(2500) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly1", 200) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly2/buterfly","animation","") +sm.sendDelay(1200) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200133) diff --git a/scripts/field/enter_940200133.py b/scripts/field/enter_940200133.py new file mode 100755 index 0000000..b41404a --- /dev/null +++ b/scripts/field/enter_940200133.py @@ -0,0 +1,39 @@ +# id 940200133 (Hidden Street : Commander Lucid), field 940200133 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spineScreen(True, True, False, 0, "Map/Effect3.img/Lacheln/Sense/002","animation","lucid") +sm.bgmVolumeOnly(True) +sm.bgmVolume(40, 2000) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face6#Ha... Haha... HAHAHA.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E2/0", 128) +sm.sendSay("#face6#It feels like whatever weight's been holding me down has finally lifted...") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E2/1", 128) +sm.sendSay("#face6#So... is this his gift? I have never felt such power... It's overwhelming!") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E2/2", 128) +sm.sendSay("#face2#Ha... Haha. AHAHAHA!") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E2/3", 128) +sm.sendNext("#face2#I have been waiting for this moment, to finally be reborn.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E2/4", 128) +sm.sendSay("#face3#...Now the dream I weave will become reality!") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E2/5", 128) +sm.offSpineScreen("lucid", 0, "", 0) +sm.spineScreen(True, False, True, 0, "Map/Effect3.img/BossLucid/Lucid/lusi","animation","") +sm.playSound("Sound/SoundEff.img/ArcaneRiver/lucid_spine", 200) +sm.sendDelay(8500) +sm.bgmVolume(100, 3000) +sm.bgmVolumeOnly(False) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly1", 200) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly2/buterfly","animation","") +sm.sendDelay(2500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(450003000) diff --git a/scripts/field/enter_940200140.py b/scripts/field/enter_940200140.py new file mode 100755 index 0000000..4031bd0 --- /dev/null +++ b/scripts/field/enter_940200140.py @@ -0,0 +1,38 @@ +# id 940200140 (Hidden Street : Conference Pavilion), field 940200140 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -310, 10) +sm.spawnNpc(3003272, -1220, 80) +sm.showNpcSpecialActionByTemplateId(3003272, "summon", 0) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1540452) # Claudine +sm.sendNext("I know what our scout saw! The Cygnus Knights betrayed us! They betrayed the Alliance, and all of Maple World!") +sm.setInnerOverrideSpeakerTemplateID(1540450) # Cygnus +sm.sendSay("Please calm down. We all know what was witnessed beyond the Gate to the Future was a fabrication created by the Black Mage!") +sm.setInnerOverrideSpeakerTemplateID(1540838) # Neinheart +sm.sendSay("I would never lead the Knights into such an obvious trap!") +sm.setInnerOverrideSpeakerTemplateID(1540452) # Claudine +sm.sendSay("...You say that now with the benefit of hindsight. Your arrogance won't save us from what could be!") +sm.setInnerOverrideSpeakerTemplateID(1540838) # Neinheart +sm.sendSay("Do you trust the enemy's illusion over your own allies?!") +sm.setInnerOverrideSpeakerTemplateID(1540453) # Athena Pierce +sm.sendSay("We can't allow the enemy to divide us. Please stop fighting!") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face2#Heh, the Alliance is wavering just as he foresaw. Everything is going according to plan.") +sm.sendSay("#face2#Even though they realized it was an illusion, the seeds of doubt have been planted in their minds.") +sm.sendSay("#face2#Under the care of the nightmare that is about to unfold, those seeds will bloom.") +sm.zoomCamera(2000, 1000, 2000, -310, -200) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200141) diff --git a/scripts/field/enter_940200141.py b/scripts/field/enter_940200141.py new file mode 100755 index 0000000..8201c3f --- /dev/null +++ b/scripts/field/enter_940200141.py @@ -0,0 +1,34 @@ +# id 940200141 (Hidden Street : Black Mage's Temple), field 940200141 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 0, -300) +sm.spawnNpc(3003272, -360, -470) +sm.showNpcSpecialActionByTemplateId(3003272, "summon", 0) +sm.spawnNpc(3003283, 0, -520) +sm.showNpcSpecialActionByTemplateId(3003283, "summon", 0) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.zoomCamera(3000, 1000, 3000, 0, -550) +sm.sendDelay(3500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face2#A new era will soon be upon us. The day when our plan comes to fruition.") +sm.sendSay("#face4#Hehe, I'm eager to see the new world you're going to create. How about a sneak peak? I won't tell if you don't!") +sm.blind(True, 255, 0, 0, 0, 2000) +sm.sendDelay(2000) +sm.sendNext("#face0#...") +sm.sendSay("#face5#...I don't understand. I can't see anything...") +sm.sendSay("#face5#He can't possiby be planning to...") +sm.sayMonologue("There was no life in the world the Black Mage showed her. No Maple World, nothing.", 0) +sm.sayMonologue("Not even the Black Mage himself existed in that world. ...There was only oblivion.", 0) +sm.sayMonologue("It was then that Lucid, for the first time since becoming a commander, thought to defy her master...", 0) +sm.sayMonologue("And so, she created a city of endless celebration in the heart of the Arcane River...", 1) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200142) diff --git a/scripts/field/enter_940200142.py b/scripts/field/enter_940200142.py new file mode 100755 index 0000000..936e6ca --- /dev/null +++ b/scripts/field/enter_940200142.py @@ -0,0 +1,60 @@ +# id 940200142 (Hidden Street : Clocktower Top), field 940200142 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -425, -100) +sm.spawnNpc(3003272, -425, -160) +sm.showNpcSpecialActionByTemplateId(3003272, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1500, 0, -720, -620) +sm.sendDelay(5500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 80, -170) +sm.sendDelay(10) +sm.zoomCamera(4000, 1000, 4000, -400, -170) +sm.sendDelay(2000) +sm.bgmVolumeOnly(True) +sm.bgmVolume(30, 2000) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face0#In this city of dreams, there is no sadness or pain.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E3/0", 128) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -410, -100) +sm.sendDelay(1000) +sm.sendNext("#face0#This beautiful dream will grow beyond Arcane River, and envelop the entire world.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E3/1", 128) +sm.sendSay("#face5#...I will protect it to my dying breath... Even if I have to go against Him.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E3/2", 128) +sm.sendSay("#face2#Black Mage! Witness the new world that I, Lucid, will create!") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E3/3", 128) +sm.zoomCamera(5000, 2000, 5000, -610, -100) +sm.bgmVolume(100, 3000) +sm.bgmVolumeOnly(False) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly0", 200) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly/005","animation","") +sm.sendDelay(5000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(450003000) diff --git a/scripts/field/enter_940200150.py b/scripts/field/enter_940200150.py new file mode 100755 index 0000000..6270cff --- /dev/null +++ b/scripts/field/enter_940200150.py @@ -0,0 +1,71 @@ +# id 940200150 (Hidden Street : Lucid's Room), field 940200150 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, 360, 70) +sm.spawnNpc(3003273, -680, 0) +sm.showNpcSpecialActionByTemplateId(3003273, "summon", 0) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 360, 70) +sm.sendDelay(10) +sm.zoomCamera(3000, 2000, 3000, 360, 100) +sm.sendDelay(3000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -20, -50) +sm.sendDelay(10) +sm.zoomCamera(1500, 2000, 1500, -50, -50) +sm.sendDelay(2000) +sm.zoomCamera(4000, 2000, 4000, -50, 250) +sm.sendDelay(4000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -460, 300) +sm.sendDelay(1500) +sm.moveNpcByTemplateId(3003273, False, 630, 160) +sm.sendDelay(2000) +sm.zoomCamera(2000, 2000, 2000, -50, 300) +sm.sendDelay(3500) +sm.moveNpcByTemplateId(3003273, True, 10, 160) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face2#Lachelein is finally complete. My city of dreams.") +sm.sendSay("#face2#Everything is ready now...") +sm.sendSay("#face6#...") +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 144061230, 0, 0) +sm.resetNpcSpecialActionByTemplateId(3003273) +sm.showNpcSpecialActionByTemplateId(3003273, "sleep", 0) +sm.sendDelay(700) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/glass", 200) +sm.sendDelay(600) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -50, 300) +sm.resetNpcSpecialActionByTemplateId(3003273) +sm.showNpcSpecialActionByTemplateId(3003273, "sleep2", -1) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200151) diff --git a/scripts/field/enter_940200151.py b/scripts/field/enter_940200151.py new file mode 100755 index 0000000..6cf3880 --- /dev/null +++ b/scripts/field/enter_940200151.py @@ -0,0 +1,115 @@ +# id 940200151 (Hidden Street : Lucid's Realm), field 940200151 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 1200, -120) +sm.spawnNpc(3003272, 1200, 0) +sm.showNpcSpecialActionByTemplateId(3003272, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.moveNpcByTemplateId(3003272, False, 50, 160) +sm.sendDelay(1500) +sm.moveNpcByTemplateId(3003272, True, 50, 160) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 1100, 10) +sm.sendDelay(10) +sm.zoomCamera(3000, 2000, 3000, 1200, 10) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face5#...This is my dreamscape, my loom... Why, am I here all of a sudden...?") +sm.sendDelay(500) +sm.sendNext("#face5#...I have a bad feeling about this... I need to get out of here, immediately.") +sm.moveNpcByTemplateId(3003272, True, 200, 130) +sm.sendDelay(1000) +sm.zoomCamera(1000, 2000, 1000, 1000, 10) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003284) # Wightmare +sm.sendNext("Master, where are you going? We are the ones that called you here, hehe.") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 144073228, 0, 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(3003272, False, 1, 160) +sm.spawnNpc(3003284, 1200, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.zoomCamera(1000, 2000, 1000, 1100, 10) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face2#You are my creations! Begone, I command you!") +sm.setInnerOverrideSpeakerTemplateID(3003284) # Wightmare +sm.sendSay("I don't think that'll work. You're trapped inside your own dream, hehe.") +sm.moveNpcByTemplateId(3003284, True, 75, 160) +sm.sendDelay(1500) +sm.sendNext("You'll be staying here with us forever!") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 144073228, 0, 0) +sm.moveNpcByTemplateId(3003272, True, 1, 160) +sm.zoomCamera(1000, 2000, 1000, 970, 10) +sm.sendDelay(750) +sm.spawnNpc(3003284, 870, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.sendNext("R-relax. You won't be bored. Not for a second. This wonderful nightmare will never end.") +sm.sendSay("What are you waiting for? Show our master the way!") +sm.spawnNpc(3003284, 780, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1190, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.sendSay("Right, right. Let's go!") +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendSay("#face5#No, I can't. Not yet. I will leave this dreamscape.") +sm.spawnNpc(3003284, 720, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1250, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 660, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1310, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 600, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1370, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 540, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1430, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 480, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1490, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 420, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1550, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 360, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.spawnNpc(3003284, 1610, 0) +sm.showNpcSpecialActionByTemplateId(3003284, "summon", 0) +sm.sendSay("#face5#Leave this place! Obey me!") +sm.moveNpcByTemplateId(3003284, True, 10, 160) +sm.moveNpcByTemplateId(3003284, True, 10, 160) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3003284) # Wightmare +sm.sendNext("Hehe, you're not in control here!") +sm.moveNpcByTemplateId(3003284, False, 10, 160) +sm.moveNpcByTemplateId(3003284, False, 10, 160) +sm.sendDelay(500) +sm.sendNext("You will be trapped in this nightmare forever!") +sm.spawnNpc(3003273, 1000, 0) +sm.showNpcSpecialActionByTemplateId(3003273, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003273) +sm.showNpcSpecialActionByTemplateId(3003273, "awake2", -1) +sm.zoomCamera(3000, 1000, 3000, 970, -120) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face6#...T-this can't be!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940200152) diff --git a/scripts/field/enter_940200152.py b/scripts/field/enter_940200152.py new file mode 100755 index 0000000..6c60615 --- /dev/null +++ b/scripts/field/enter_940200152.py @@ -0,0 +1,73 @@ +# id 940200152 (Hidden Street : Lucid's Room), field 940200152 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003273, 0, 0) +sm.showNpcSpecialActionByTemplateId(3003273, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003273) +sm.showNpcSpecialActionByTemplateId(3003273, "sleep2", -1) +sm.zoomCamera(0, 1000, 0, -50, 150) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1500) +sm.zoomCamera(1000, 2000, 1000, -50, 300) +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -50, 300) +sm.resetNpcSpecialActionByTemplateId(3003273) +sm.showNpcSpecialActionByTemplateId(3003273, "awake", 0) +sm.sendDelay(2300) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -50, 300) +sm.resetNpcSpecialActionByTemplateId(3003273) +sm.showNpcSpecialActionByTemplateId(3003273, "awake2", -1) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.onLayer(1000, "lucid", 0, 0, 0, "Map/Effect3.img/Lacheln/episode", 4, True, -1, False) +sm.sendDelay(2000) +sm.playExclSoundWithDownBGM("SoundEff.img/heart", 100) +sm.offLayer(500, "lucid", False) +sm.blind(False, 0, 0, 0, 0, 500) +sm.bgmVolumeOnly(True) +sm.bgmVolume(40, 2000) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003272) # Lucid +sm.sendNext("#face6#(Pants) What is this cold running down my spine? If this is reality, then those things must have been...") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/0", 128) +sm.sendSay("#face6#It was only a dream. Then why couldn't I control it?") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/1", 128) +sm.sendSay("#face6#......") +sm.sendSay("#face6#Ah, I understand.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/2", 128) +sm.sendSay("#face6#Ha. Haha.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/3", 128) +sm.sendSay("#face3#Haha, ha, AHAHA!") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/4", 128) +sm.sendSay("#face3#Oh nightmare, swallow me whole.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/5", 128) +sm.sendSay("#face4#...But now is not my time. Until my lord, the Black Mage changes his mind... Why not follow me obediently?") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/6", 128) +sm.sendSay("#face4#Until the world is shrouded in sweet dreams... The festival must go on.") +sm.playExclSoundWithDownBGM("Voice3.img/Lucid/E4/7", 128) +sm.bgmVolume(100, 3000) +sm.bgmVolumeOnly(False) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/butterfly0", 200) +sm.spineScreen(True, False, False, 0, "Map/Effect3.img/BossLucid/butterfly/005","animation","") +sm.sendDelay(5000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(450003000) diff --git a/scripts/field/enter_940200200.py b/scripts/field/enter_940200200.py new file mode 100755 index 0000000..2c953fe --- /dev/null +++ b/scripts/field/enter_940200200.py @@ -0,0 +1,34 @@ +# id 940200200 (Lachelein : Lachelein Canal), field 940200200 +sm.startQuest(34457) +sm.startQuest(34479) +sm.startQuest(34489) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, -150, -400) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(600) +sm.zoomCamera(3000, 1000, 3000, -150, 140) +sm.sendDelay(3300) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(The path the Flying Fish took to get here appears to be completely clear of red fog.)#k") +sm.sendSay("#b(...At this rate, it will be some time before this reminder of the nightmare that once was has finally vanished.)#k") +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.forcedInput(2) +sm.sendDelay(3000) +sm.forcedInput(0) +sm.sendNext("Will this path lead us out of Lachelein?") +sm.forcedInput(2) +sm.sendDelay(1000) +sm.forcedInput(0) +sm.sendNext("The dreams and illusions are finally over. Farewell, everyone...") +sm.forcedInput(6) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(940200202) diff --git a/scripts/field/enter_940200202.py b/scripts/field/enter_940200202.py new file mode 100755 index 0000000..81b33f1 --- /dev/null +++ b/scripts/field/enter_940200202.py @@ -0,0 +1,7 @@ +# id 940200202 (Arcana : Above the Arcane River), field 940200202 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(600) +sm.blind(False, 0, 0, 0, 0, 600) +sm.sendDelay(600) diff --git a/scripts/field/enter_940200203.py b/scripts/field/enter_940200203.py new file mode 100755 index 0000000..2447dd6 --- /dev/null +++ b/scripts/field/enter_940200203.py @@ -0,0 +1,40 @@ +# id 940200203 (Arcana : The Vortex of Light), field 940200203 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, -550, 250) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.forcedInput(6) +sm.sendDelay(1200) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Woah! What's that huge vortex?") +sm.zoomCamera(3000, 1000, 3000, -47, 70) +sm.sendDelay(3500) +res = sm.sendNext("What tremendous power... It looks dangerous. What should we do?\r\n#L0# #bUhh... Let's head back for now.#l\r\n#L1# #bGo around it, Flying Fish!#l") +sm.sendNext("I've come too far to turn back now. Mr Fish! Find a way around it.") +sm.forcedMove(False, 150) +sm.sendDelay(1000) +sm.sendNext("...This thing looks really dangerous up close... Ah!") +sm.forcedMove(False, 600) +sm.sendDelay(1500) +sm.onLayer(900, "00", 0, 0, 12, "Effect/Direction19.img/effect/arcana/1", 4, False, -1, False) +sm.sendDelay(900) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(300) +sm.sendNext("Flying Fish, no!") +sm.onLayer(900, "01", 0, 0, 12, "Effect/Direction19.img/effect/arcana/2", 4, False, -1, False) +sm.sendDelay(600) +sm.offLayer(300, "00", False) +sm.sendDelay(600) +sm.sendNext("Ahhhhhhh!") +sm.onLayer(2600, "02", 0, 0, 12, "Effect/Direction19.img/effect/arcana_maptransfer/0", 4, False, -1, False) +sm.sendDelay(2600) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.offLayer(300, "01", False) +sm.sendDelay(300) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(940200204) diff --git a/scripts/field/enter_940200204.py b/scripts/field/enter_940200204.py new file mode 100755 index 0000000..10ff05e --- /dev/null +++ b/scripts/field/enter_940200204.py @@ -0,0 +1,75 @@ +# id 940200204 (Arcana : Forest Entrance), field 940200204 +sm.setMapTaggedObjectVisible("guide", False, 0, 0) +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.sendDelay(300) +sm.sendDelay(600) +sm.zoomCamera(0, 1500, 0, -385, -1030) +sm.sendDelay(1500) +sm.zoomCamera(4000, 1500, 4000, -385, -530) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.zoomCamera(0, 1500, 0, 0, 0) +sm.sendDelay(300) +sm.zoomCamera(0, 2000, 0, -2430, 230) +sm.sendDelay(300) +sm.zoomCamera(4000, 2000, 4000, -2730, 230) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.zoomCamera(0, 2000, 0, 0, 0) +sm.sendDelay(300) +sm.hideUser(False) +sm.forcedInput(4) +sm.zoomCamera(0, 1000, 0, -980, 29) +sm.sendDelay(300) +sm.zoomCamera(3000, 1000, 3000, -580, 29) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(600) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Ugh...") +sm.sendDelay(600) +sm.sendNext("Where... Where am I?") +sm.sendDelay(600) +sm.blind(True, 255, 0, 0, 0, 500) +sm.onLayer(900, "00", 0, 0, 12, "Effect/Direction19.img/effect/arcana/5", 4, False, -1, False) +sm.sendDelay(900) +sm.sendNext("The last thing I remember was getting pulled into a vortex of blinding light...") +sm.offLayer(900, "00", False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.forcedInput(0) +sm.sendNext("Ow, my back really hurts.") +sm.forcedMove(True, 150) +sm.zoomCamera(1000, 1000, 1000, -730, 29) +sm.sendDelay(1200) +sm.sendNext("This place sure is quiet. I don't even hear birds in the distance.") +sm.forcedMove(False, 200) +sm.zoomCamera(1000, 1000, 1000, -530, 29) +sm.sendDelay(1200) +sm.sendNext("Maybe nothing lives here?") +sm.sendDelay(600) +sm.sendNext("Hm?") +sm.zoomCamera(1500, 1000, 1500, -300, 29) +sm.sendDelay(1500) +sm.sendNext("What are these motes of light?") +sm.forcedMove(False, 300) +sm.zoomCamera(4000, 1000, 4000, 100, 29) +sm.sendDelay(1200) +sm.sendNext("It looks like some sort of path... Should I follow it?") +sm.forcedMove(False, 1500) +sm.sendDelay(4000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(940200205) diff --git a/scripts/field/enter_940200205.py b/scripts/field/enter_940200205.py new file mode 100755 index 0000000..e52bb59 --- /dev/null +++ b/scripts/field/enter_940200205.py @@ -0,0 +1,137 @@ +# id 940200205 (Arcana : Spirit Tree Vantage), field 940200205 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, -1200, 70) +sm.spawnNpc(3003350, -662, 25) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.forcedInput(2) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1500) +sm.forcedInput(0) +sm.forcedInput(1) +sm.sendDelay(500) +sm.forcedInput(0) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Huh. The trail ends here. What were those lights?") +sm.resetNpcSpecialActionByTemplateId(3003350) +sm.showNpcSpecialActionByTemplateId(3003350, "cry", -1) +sm.zoomCamera(3000, 2000, 3000, -660, 70) +sm.forcedInput(2) +sm.sendDelay(2000) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face4#(Sobs) Waaah...") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#b(Some sort of small, shimmering creature is crying... You can't hear what it's murmuring. You should get closer.)#k") +sm.forcedInput(2) +sm.sendDelay(1000) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.onLayer(900, "00", 0, -80, 12, "Effect/Direction19.img/effect/arcana/0", 4, True, -1, False) +sm.sendDelay(900) +sm.setParam(37) +sm.sendNext("#face4#The Spirit Tree... It's crying...") +sm.sendSay("#face5#(Sniffs) Spirit Tree, don't get sick. Please return to normal soon...") +sm.offLayer(300, "00", False) +sm.onLayer(900, "01", 0, -80, 12, "Effect/Direction19.img/effect/arcana_cry/0", 4, True, -1, False) +sm.onLayer(900, "02", 0, -80, 12, "Effect/Direction19.img/effect/arcana_cry/1", 4, True, -1, False) +sm.sendDelay(600) +sm.sendNext("#face4#The forest was so beautiful... (Sniffs) Why did this have to happen?") +sm.sendSay("#face4#Now spirits are growing wild, and the forest withers... (Sobs) What is going to happen to us? I'm scared...") +sm.offLayer(300, "01", False) +sm.offLayer(300, "02", False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(600) +sm.setParam(57) +sm.sendNext("#b(Spirit Trees? Wild spirits? What is it talking about? You should try and speak with it...)#k") +sm.forcedInput(2) +sm.sendDelay(100) +sm.forcedInput(0) +sm.sendDelay(100) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 170985491, 0, 0) +sm.flipNpcByTemplateId(3003350, True) +sm.sendDelay(100) +sm.setParam(37) +sm.sendNext("#face4#Waaaah...") +sm.forcedInput(2) +sm.sendDelay(100) +sm.forcedInput(0) +sm.sendDelay(100) +sm.setParam(57) +sm.sendNext("T-there's no reason to be afraid. I'm not here to hurt you. I'm just looking for answers...") +sm.setParam(37) +sm.sendSay("#face4#No... Behind you!") +sm.spawnNpc(3003370, -1400, 25) +sm.showNpcSpecialActionByTemplateId(3003370, "summon", 0) +sm.spawnNpc(3003370, -1310, 25) +sm.showNpcSpecialActionByTemplateId(3003370, "summon", 0) +sm.spawnNpc(3003370, -1220, 25) +sm.showNpcSpecialActionByTemplateId(3003370, "summon", 0) +sm.spawnNpc(3003370, -1130, 25) +sm.showNpcSpecialActionByTemplateId(3003370, "summon", 0) +sm.spawnNpc(3003370, -1040, 25) +sm.showNpcSpecialActionByTemplateId(3003370, "summon", 0) +sm.spawnNpc(3003370, -950, 25) +sm.showNpcSpecialActionByTemplateId(3003370, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003370, "stand2", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand2", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand2", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand2", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand2", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand2", -1) +sm.zoomCamera(1000, 2000, 1000, -1000, 70) +sm.forcedFlip(True) +sm.forcedInput(1) +sm.sendDelay(100) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.zoomCamera(500, 1000, 500, -900, -80) +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.showNpcSpecialActionByTemplateId(3003370, "regen", 1350) +sm.showNpcSpecialActionByTemplateId(3003370, "regen", 1350) +sm.showNpcSpecialActionByTemplateId(3003370, "regen", 1350) +sm.showNpcSpecialActionByTemplateId(3003370, "regen", 1350) +sm.showNpcSpecialActionByTemplateId(3003370, "regen", 1350) +sm.showNpcSpecialActionByTemplateId(3003370, "regen", 1350) +sm.sendDelay(1300) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.resetNpcSpecialActionByTemplateId(3003370) +sm.showNpcSpecialActionByTemplateId(3003370, "stand", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand", -1) +sm.showNpcSpecialActionByTemplateId(3003370, "stand", -1) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#b(These dark spirits are frightening the Small Spirit. You should deal with them.)#k") +sm.lockInGameUI(False, True) +sm.warp(940200405) diff --git a/scripts/field/enter_940200206.py b/scripts/field/enter_940200206.py new file mode 100755 index 0000000..d03b37a --- /dev/null +++ b/scripts/field/enter_940200206.py @@ -0,0 +1,11 @@ +# id 940200206 (Arcana : Near the Floral Flute), field 940200206 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 300) +sm.sendDelay(300) +sm.zoomCamera(500, 1000, 2147483647, 2147483647, 2147483647) +sm.sendDelay(500) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_940200207.py b/scripts/field/enter_940200207.py new file mode 100755 index 0000000..3d1b6b0 --- /dev/null +++ b/scripts/field/enter_940200207.py @@ -0,0 +1,36 @@ +# id 940200207 (Arcana : Grove of the Spirit Tree), field 940200207 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 272, 30) +sm.spawnNpc(3003350, 272, 100) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.spawnNpc(3003351, 390, 100) +sm.showNpcSpecialActionByTemplateId(3003351, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendNext("#face1#We're here. And now, I vanish as I appear, just like the wind!") +sm.sendSay("#face2#Never fear~ Whenever you need help, I will be near~") +sm.resetNpcSpecialActionByTemplateId(3003351) +sm.showNpcSpecialActionByTemplateId(3003351, "wind3", 1920) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/wind", 100) +sm.sendDelay(1900) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face1#Well... That's Wind Spirit for you.") +sm.sendSay("#face1#Oh well. Let's check on the Spirit Tree.") +sm.sendSay("#face1#...") +sm.sendSay("#face4#...") +sm.sendSay("#face5#(Sniffs) The Floral Flute was restored, but nothing's changed.") +sm.sendSay("#face7#(Sniffs) Hold on a little longer, Spirit Tree. We'll get you back to normal! Don't give up.") +sm.setParam(57) +sm.sendSay("#b(You try and cheer the Small Spirit up.)#k") +sm.setParam(37) +sm.sendSay("#face1#...") +sm.sendSay("#face2#T-thanks. You're right, we've made a good start. Okay, let's do this! ") +sm.lockInGameUI(False, True) +sm.warp(450005000) diff --git a/scripts/field/enter_940200210.py b/scripts/field/enter_940200210.py new file mode 100755 index 0000000..034f619 --- /dev/null +++ b/scripts/field/enter_940200210.py @@ -0,0 +1,82 @@ +# id 940200210 (Arcana : Heart of the Forest), field 940200210 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003350, 1700, -170) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.spawnNpc(3003359, 1700, -170) +sm.showNpcSpecialActionByTemplateId(3003359, "summon", 0) +sm.spawnNpc(3003352, 900, -170) +sm.showNpcSpecialActionByTemplateId(3003352, "summon", 0) +sm.spawnNpc(3003353, 850, -170) +sm.showNpcSpecialActionByTemplateId(3003353, "summon", 0) +sm.spawnNpc(3003354, 800, -170) +sm.showNpcSpecialActionByTemplateId(3003354, "summon", 0) +sm.spawnNpc(3003355, 750, -170) +sm.showNpcSpecialActionByTemplateId(3003355, "summon", 0) +sm.spawnNpc(3003357, 750, 25) +sm.showNpcSpecialActionByTemplateId(3003357, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003350, "cry", -1) +sm.zoomCamera(0, 1000, 0, 970, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.forcedInput(1) +sm.moveNpcByTemplateId(3003350, True, 50, 100) +sm.sendDelay(3500) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendNext("#face0#It's that spiritnapping stranger?! Everybody, get them...!") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face4#Stop! There are more important things to worry about. Look at this poor spirit! If we don't do something quick...") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 171268073, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 171268077, 0, 0) +sm.sendDelay(500) +sm.zoomCamera(500, 1000, 500, 1200, 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(3003352, False, 600, 150) +sm.moveNpcByTemplateId(3003353, False, 600, 150) +sm.moveNpcByTemplateId(3003354, False, 600, 150) +sm.moveNpcByTemplateId(3003355, False, 600, 150) +sm.moveNpcByTemplateId(3003357, False, 450, 110) +sm.sendDelay(3000) +sm.forcedInput(2) +sm.sendDelay(1500) +sm.forcedInput(0) +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 1650, 100) +sm.moveNpcByTemplateId(3003357, False, 580, 200) +sm.sendDelay(5000) +sm.moveNpcByTemplateId(3003357, True, 30, 110) +sm.sendDelay(2500) +sm.showNpcSpecialActionByTemplateId(3003352, "jump", 2000) +sm.showNpcSpecialActionByTemplateId(3003353, "jump", 2000) +sm.showNpcSpecialActionByTemplateId(3003354, "jump", 2000) +sm.showNpcSpecialActionByTemplateId(3003355, "jump", 2000) +sm.showNpcSpecialActionByTemplateId(3003357, "jump", 2000) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendNext("#face0#Don't give up, friend! Take our strength...") +sm.resetNpcSpecialActionByTemplateId(3003359) +sm.showNpcSpecialActionByTemplateId(3003359, "refresh", 2400) +sm.sendDelay(2300) +sm.resetNpcSpecialActionByTemplateId(3003359) +sm.showNpcSpecialActionByTemplateId(3003359, "jump", -1) +sm.setInnerOverrideSpeakerTemplateID(3003310) # Lost Tree Spirit +sm.sendNext("#face0#Oogh...") +sm.resetNpcSpecialActionByTemplateId(3003350) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face7#(Sniffs) That was a close one. But what was this spirit doing\r\nout there all alone?") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(450005200) diff --git a/scripts/field/enter_940200212.py b/scripts/field/enter_940200212.py new file mode 100755 index 0000000..da473d3 --- /dev/null +++ b/scripts/field/enter_940200212.py @@ -0,0 +1,54 @@ +# id 940200212 (Arcana : Cavernous Cavern), field 940200212 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(300) +sm.setMapTaggedObjectVisible("water", False, 0, 0) +sm.spawnNpc(3003367, 320, -385) +sm.showNpcSpecialActionByTemplateId(3003367, "summon", 0) +sm.spawnNpc(3003371, 388, -695) +sm.showNpcSpecialActionByTemplateId(3003371, "summon", 0) +sm.spawnNpc(3003350, 100, -360) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003367, "stand2", -1) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendNext("#face0#Awwight! You know what to do fewwas! Wet's go save those fatsos!") +sm.resetNpcSpecialActionByTemplateId(3003367) +sm.showNpcSpecialActionByTemplateId(3003367, "tower", 0) +sm.sendDelay(3000) +sm.sendNext("#face0#Now! Cwimb on up!") +sm.forcedInput(2) +sm.sendDelay(600) +sm.forcedInput(0) +sm.forcedInput(6) +sm.setInnerOverrideSpeakerTemplateID(3003315) # Rock Spirits +sm.sendNext("#face0#Oww! Be cayhful!") +sm.sendDelay(600) +sm.forcedInput(7) +sm.sendDelay(600) +sm.forcedInput(7) +sm.sendDelay(600) +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendNext("#face0#Awmost! Keep going! Save my bwudders!") +sm.forcedAction(7, 0) +sm.showNpcSpecialActionByTemplateId(3003371, "stand2", 0) +sm.sendDelay(1200) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/water", 200) +sm.sendDelay(300) +sm.resetNpcSpecialActionByTemplateId(3003371) +sm.showNpcSpecialActionByTemplateId(3003371, "stand3", -1) +sm.sendDelay(300) +sm.setInnerOverrideSpeakerTemplateID(3003315) # Rock Spirits +sm.sendNext("#face0#Wheeeeeeee!") +sm.sendDelay(600) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(450005400) diff --git a/scripts/field/enter_940200213.py b/scripts/field/enter_940200213.py new file mode 100755 index 0000000..cf5731d --- /dev/null +++ b/scripts/field/enter_940200213.py @@ -0,0 +1,26 @@ +# id 940200213 (Arcana : Cavernous Cavern), field 940200213 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 2000, 0, -900, 180) +sm.sendDelay(300) +sm.spawnNpc(3003314, -700, 130) +sm.showNpcSpecialActionByTemplateId(3003314, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003314, "stand2", -1) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendNext("#face1#Someone wescue me from these stuffy woots!") +sm.resetNpcSpecialActionByTemplateId(3003314) +sm.forcedAction(7, 0) +sm.showNpcSpecialActionByTemplateId(3003314, "free", 0) +sm.sendDelay(1440) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(450005400) diff --git a/scripts/field/enter_940200214.py b/scripts/field/enter_940200214.py new file mode 100755 index 0000000..b033c15 --- /dev/null +++ b/scripts/field/enter_940200214.py @@ -0,0 +1,207 @@ +# id 940200214 (Arcana : Grove of the Spirit Tree), field 940200214 +sm.startQuest(34479) +sm.startQuest(34489) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003350, -95, 25) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.spawnNpc(3003373, 312, 25) +sm.showNpcSpecialActionByTemplateId(3003373, "summon", 0) +sm.flipNpcByTemplateId(3003373, True) +sm.showNpcSpecialActionByTemplateId(3003373, "down", -1) +sm.zoomCamera(0, 1000, 0, 312, -100) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.zoomCamera(2000, 1000, 2000, 312, 25) +sm.sendDelay(1000) +sm.forcedMove(False, 100) +sm.moveNpcByTemplateId(3003350, False, 120, 120) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face7#Oh! There's someone laying where that giant evil spirit disappeared... Who's that?") +sm.zoomCamera(1000, 2000, 1000, 312, 180) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendNext("#face1#It can be felt, but not seen. You cannot hear it, but you know it is there. What is it?") +sm.spawnNpc(3003351, 700, 25) +sm.showNpcSpecialActionByTemplateId(3003351, "summon", 0) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 700, 25) +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(3003351) +sm.showNpcSpecialActionByTemplateId(3003351, "wind2", 2200) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/wind", 100) +sm.flipNpcByTemplateId(3003351, True) +sm.moveNpcByTemplateId(3003351, True, 140, 180) +sm.sendDelay(2000) +sm.zoomCamera(2000, 1000, 2000, 312, 25) +sm.sendDelay(2000) +sm.zoomCamera(1000, 2000, 1000, 312, 180) +sm.sendDelay(1000) +sm.sendNext("#face1#Friendship, love, and kindness.") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face1#Wind Spirit!") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face0#Hmm~ Hmm~ One needs only look into your eyes to know the truth~") +sm.setInnerOverrideSpeakerTemplateID(3003373) # ??? +sm.sendSay("#face0#Ugh...") +sm.setParam(57) +sm.sendSay("#b(The strange spirit groans in pain.)#k") +sm.sendSay("#b(Images flutter into your mind, accompanied by a quiet voice...)#k") +sm.zoomCamera(3000, 5000, 3000, 312, 180) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/wind", 100) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.completeQuestNoCheck(34479) +sm.completeQuestNoCheck(34489) +sm.startQuest(34487) +sm.resetNpcSpecialActionByTemplateId(3003373) +sm.hideUser(True) +sm.sendDelay(1000) +sm.blind(True, 255, 240, 240, 240, 0) +sm.zoomCamera(2000, 1000, 2000, 312, -100) +sm.playSound("Sound/SoundEff.img/blackHeaven/lightup", 100) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(1500) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sayMonologue("As long as I have lived, I have been shy.", 0) +sm.sayMonologue("When I first opened my eyes, I was inside this big tree.", 0) +sm.sayMonologue("Perhaps that is why I could never bring myself to leave it.", 0) +sm.sayMonologue("I spent all of my days the same way...", 0) +sm.sayMonologue("Counting the passing clouds, watching the leaves grow.", 0) +sm.sayMonologue("But I was not completely alone. I had friends too.", 0) +sm.sayMonologue("At least, that is how I thought of them...", 1) +sm.zoomCamera(2000, 1000, 2000, 312, 25) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendDelay(4000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#One Happy Day, #fs15##fnᄈᆰᄡᆴᄚ■ᄉ￱#The Spirit Tree's Memory", 50, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendNext("#face2#Tra-lala~ The sky, the breeze, the birds and the bees. Each one I love, perhaps equally~") +sm.sendSay("#face1#But if a spirit had to pick favorites, only one could there be.\r\nThe leaves and the branches of my plumpity tree!\r\nPlumpity, plump, plump, plump~") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face1#Hehe. I guess it is a little portly, as trees go. But I like it!") +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendSay("#face0#Wace you wosers to the twee! Come on, bwudders, woll faster!") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003373) # ??? +sm.sendNext("#face0#Ah, they're coming! I need to hide!") +sm.flipNpcByTemplateId(3003373, False) +sm.sendDelay(100) +sm.flipNpcByTemplateId(3003373, True) +sm.sendDelay(100) +sm.flipNpcByTemplateId(3003373, False) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(3003373, True) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3003373, "bye", 600) +sm.sendDelay(600) +sm.sendDelay(500) +sm.sendNext("#face0#Phew...") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.onLayer(1000, "00", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/0", 4, True, -1, False) +sm.sendDelay(1000) +sm.onLayer(1000, "01", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/4", 4, True, -1, False) +sm.onLayer(1000, "02", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/2", 4, True, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face3#Hehe, watch me swing!") +sm.onLayer(1000, "03", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/3", 4, True, -1, False) +sm.onLayer(1000, "04", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/1", 4, True, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendSay("#face0#Ahh, these weaves awe so cozy! I might faww asweep!") +sm.offLayer(1000, "01", False) +sm.offLayer(1000, "02", False) +sm.offLayer(1000, "03", False) +sm.offLayer(1000, "04", False) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3003373) # ??? +sm.sendNext("#face0#ᄀᆭᄀᆭ.") +sm.sendDelay(2000) +sm.sendNext("#face0#Huh? Did they all leave? I think they're gone.") +sm.sendSay("#face0#I'm so embarrassed. Every time they come, I can't help but hide. Maybe tomorrow is the day I'll speak to them.") +sm.sendSay("#face0#But... what if I scare them away? I'm happy like this, just listening to the chattering of the spirits as they play...") +sm.startQuest(34479) +sm.startQuest(34489) +sm.completeQuestNoCheck(34487) +sm.spawnNpc(3003350, -95, 25) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.offLayer(1000, "00", False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(2000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#One Sad Day, #fs15##fnᄈᆰᄡᆴᄚ■ᄉ￱#The Spirit Tree's Memory", 50, 1000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.moveNpcByTemplateId(3003350, False, 120, 120) +sm.sendDelay(2000) +sm.showNpcSpecialActionByTemplateId(3003350, "cry", -1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face4##b(Sniffs)#k Spirit Tree, what happened to you? Why did you wither up so suddenly?") +sm.sendSay("#face7#The forest is changing, and spirits are going wild... I'm so very scared.\r\nAnd worst of all, I have nowhere to go! Wahhh...") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3003324) # Spirit of Harmony +sm.sendNext("#face0##b(Try as I might, purging this dark aura is beyond me... What should I do?)#k") +sm.sendSay("#face0##b(If the corruption cannot be purified... Then there is only one choice.)#k") +sm.sendDelay(1000) +sm.spawnNpc(3003350, 5, 25) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.spawnNpc(3003373, 312, 25) +sm.showNpcSpecialActionByTemplateId(3003373, "summon", 0) +sm.spawnNpc(3003351, 495, 25) +sm.showNpcSpecialActionByTemplateId(3003351, "summon", 0) +sm.flipNpcByTemplateId(3003373, True) +sm.showNpcSpecialActionByTemplateId(3003373, "down", -1) +sm.hideUser(False) +sm.onLayer(900, "00", 0, -80, 9, "Effect/Direction19.img/effect/arcana_hug/0", 4, True, -1, False) +sm.onLayer(900, "03", 0, -80, 12, "Effect/Direction19.img/effect/arcana_hug/3", 4, True, -1, False) +sm.sendNext("#face1##b(I must seal it away... It is the only way to protect them.)#k") +sm.sendSay("#face1##b(Don't not cry, Small Spirit. I will keep the darkness contained.)#k") +sm.onLayer(900, "01", 0, -80, 10, "Effect/Direction19.img/effect/arcana_hug/1", 4, True, -1, False) +sm.onLayer(900, "02", 0, -80, 11, "Effect/Direction19.img/effect/arcana_hug/2", 4, True, -1, False) +sm.onLayer(900, "04", 0, -80, 12, "Effect/Direction19.img/effect/arcana_hug/4", 4, True, -1, False) +sm.sendSay("#face1##b(...Good bye, my friend. I'm sorry I could never work up the courage to talk with you...)#k") +sm.sendSay("#face1##b(I want you all to be happy... To go on playing in the leaves...)#k") +sm.onLayer(900, "05", 0, -80, 13, "Effect/Direction19.img/effect/arcana_hug/5", 4, True, -1, False) +sm.sendDelay(1680) +sm.offLayer(1500, "05", False) +sm.offLayer(1500, "01", False) +sm.offLayer(1500, "02", False) +sm.offLayer(1500, "04", False) +sm.sendNext("#face1#Farewell, my friends.") +sm.sendDelay(1000) +sm.offLayer(1500, "00", False) +sm.offLayer(1500, "03", False) +sm.sendDelay(1500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.zoomCamera(1000, 1400, 1000, 312, 180) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face1#...I know who you are. We've been friends for a long time, haven't we...?") +sm.zoomCamera(1000, 1700, 1000, 312, 180) +sm.sendNext("#face1#On days when I was happy, and days when I cried... You were always right there beside me.") +sm.sendDelay(1000) +sm.moveNpcByTemplateId(3003350, False, 170, 120) +sm.sendDelay(2500) +sm.showNpcSpecialActionByTemplateId(3003350, "cry", -1) +sm.zoomCamera(1000, 2000, 1000, 312, 180) +sm.sendNext("#face4#You were the spirit within the Spirit Tree!") +sm.bgmVolume(0, 3000) +sm.sendDelay(3000) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.lockInGameUI(False, True) +sm.warp(940200215) diff --git a/scripts/field/enter_940200215.py b/scripts/field/enter_940200215.py new file mode 100755 index 0000000..62e53d6 --- /dev/null +++ b/scripts/field/enter_940200215.py @@ -0,0 +1,132 @@ +# id 940200215 (Arcana : Grove of the Spirit Tree), field 940200215 +sm.startQuest(34479) +sm.completeQuestNoCheck(34487) +sm.startQuest(34489) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3003350, 185, 25) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.spawnNpc(3003362, 312, 25) +sm.showNpcSpecialActionByTemplateId(3003362, "summon", 0) +sm.spawnNpc(3003351, 415, 25) +sm.showNpcSpecialActionByTemplateId(3003351, "summon", 0) +sm.spawnNpc(3003358, 1125, 25) +sm.showNpcSpecialActionByTemplateId(3003358, "summon", 0) +sm.spawnNpc(3003361, -470, 25) +sm.showNpcSpecialActionByTemplateId(3003361, "summon", 0) +sm.spawnNpc(3003361, -530, 25) +sm.showNpcSpecialActionByTemplateId(3003361, "summon", 0) +sm.flipNpcByTemplateId(3003362, True) +sm.showNpcSpecialActionByTemplateId(3003362, "down", -1) +sm.showNpcSpecialActionByTemplateId(3003350, "cry", -1) +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 325, 25) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face4##b(Sobs)#k You've been fighting alone all this time...") +sm.sendSay("#face4#You used up all your strength to prevent the corruption from spreading throughout the forest... #b(Sniffs)#k That's why your leaves withered and grayed.") +sm.moveNpcByTemplateId(3003358, True, 520, 160) +sm.moveNpcByTemplateId(3003361, False, 450, 160) +sm.moveNpcByTemplateId(3003361, False, 450, 160) +sm.playSound("Sound/Foot.img/leaf/0", 200) +sm.sendDelay(50) +sm.playSound("Sound/Foot.img/leaf/1", 200) +sm.sendDelay(300) +sm.playSound("Sound/Foot.img/leaf/1", 200) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/2", 200) +sm.sendDelay(300) +sm.playSound("Sound/Foot.img/leaf/3", 200) +sm.sendDelay(50) +sm.playSound("Sound/Foot.img/leaf/1", 200) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/4", 200) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/5", 200) +sm.sendDelay(50) +sm.playSound("Sound/Foot.img/leaf/1", 200) +sm.sendDelay(300) +sm.playSound("Sound/Foot.img/leaf/2", 200) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/1", 200) +sm.sendDelay(50) +sm.playSound("Sound/Foot.img/leaf/1", 200) +sm.sendDelay(300) +sm.playSound("Sound/Foot.img/leaf/2", 200) +sm.sendDelay(500) +sm.playSound("Sound/Foot.img/leaf/5", 200) +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendNext("#face0#The S-spirit Tree!") +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendSay("#face0#The dawkness is fading away!") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face7#Don't you see, everybody?") +sm.zoomCamera(1000, 2000, 1000, 312, 180) +sm.sendDelay(1000) +sm.sendNext("#face4#He was protecting us all along!") +sm.sendSay("#face7#Even though it cost him everything...") +sm.sendSay("#face4##b(Sobs)#k Please open your eyes...") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendNext("#face1#The miracle is already around us. It sprouts beneath our feet,\r\nit blooms in the starlight, it sips from the lagoon.") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 143478977, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 143478980, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 143478981, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 143478982, 0, 0) +sm.sendSay("#face2#It toots and it twangs, it drips and it drops~ \r\nListen, to the #bsong of the forest#k~") +sm.zoomCamera(1000, 1000, 1000, 325, 25) +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/tree_revive", 100) +sm.sendDelay(5000) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.changeBGM("Bgm47.img/TheTuneOfAzureLight", 0, 0) +sm.completeQuestNoCheck(34479) +sm.startQuest(34487) +sm.completeQuestNoCheck(34489) +sm.blind(True, 255, 240, 240, 240, 1000) +sm.sendDelay(1000) +sm.completeQuestNoCheck(34457) +sm.sendDelay(1000) +sm.sendDelay(2000) +sm.blind(False, 0, 0, 0, 0, 3000) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/wind", 100) +sm.sendDelay(3000) +sm.zoomCamera(1000, 2000, 1000, 312, 180) +sm.sendDelay(2000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 312, 180) +sm.resetNpcSpecialActionByTemplateId(3003362) +sm.setInnerOverrideSpeakerTemplateID(3003324) # Spirit of Harmony +sm.sendNext("#face0#H-huh...?") +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendSay("#face0#The Spirit Tree... It's been revived...!") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face4##b(Cries)#k I'm so relieved.") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face1#Hehe. Well, if it isn't my favorite plump friend! Plump~ Plumpity~") +sm.blind(True, 255, 0, 0, 0, 5000) +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendSay("#face0#Brudders, a new fwend! Wet's pway a game! It wiww be fun!") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face2#Fun? That's my specialty! Fun~ fun~ fun~") +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendSay("#face0#No! The Spirit Tree is still weak. Rest first... Fun later.") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face7#Hmm... The Tree Spirits are right!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.sendDelay(300) +sm.sendDelay(600) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(450005000) diff --git a/scripts/field/enter_940200216.py b/scripts/field/enter_940200216.py new file mode 100755 index 0000000..c20e8aa --- /dev/null +++ b/scripts/field/enter_940200216.py @@ -0,0 +1,2 @@ +# id 940200216 (Arcana : Near the Bramble Harp), field 940200216 +sm.completeQuestNoCheck(34490) diff --git a/scripts/field/enter_940200217.py b/scripts/field/enter_940200217.py new file mode 100755 index 0000000..5b812a4 --- /dev/null +++ b/scripts/field/enter_940200217.py @@ -0,0 +1,62 @@ +# id 940200217 (Arcana : Near the Floral Flute), field 940200217 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1000, 0, 910, -230) +sm.spawnNpc(3003350, 1040, -210) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.spawnNpc(3003351, 1100, -210) +sm.showNpcSpecialActionByTemplateId(3003351, "summon", 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face1#Okay! The cutting is planted. Now it's all up to the moon... Please flute, grow! Please...") +sm.zoomCamera(0, 1000, 0, 910, -230) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 910, -230) +sm.spawnNpc(3003364, 910, -210) +sm.showNpcSpecialActionByTemplateId(3003364, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003364) +sm.showNpcSpecialActionByTemplateId(3003364, "revive", 1530) +sm.sendDelay(1530) +sm.resetNpcSpecialActionByTemplateId(3003364) +sm.showNpcSpecialActionByTemplateId(3003364, "normal", -1) +sm.sendNext("#face0#!!") +sm.sendSay("#face4#(Sobs) The Floral Flute...") +sm.sendSay("#face4#It's been revitalized! All it really needed was moonlight.") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face2#Neither sun nor light of stars will do~ Only the moon can make you bloom~") +sm.resetNpcSpecialActionByTemplateId(3003364) +sm.showNpcSpecialActionByTemplateId(3003364, "normal_ani", -1) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/leaf", 200) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face4#What a beautiful sound! What a relief... Then there's still hope.") +sm.sendSay("#face3#Hahaha! I feel like back in the good old days.") +sm.sendSay("#face3#(Giggles) Say, do you think there have been any changes to the Spirit Tree? I want to go see! Hey, Wind Spirit! Take us to the Spirit Tree!") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face1#Yes, yes! Faster than wind, lighter than air! Wooosh, woosh! Away we fly~") +sm.resetNpcSpecialActionByTemplateId(3003351) +sm.showNpcSpecialActionByTemplateId(3003351, "wind", 1920) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/wind", 100) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/arcana/windOn", 0, 0, 0, 0, 176755346, 0, 0) +sm.showEffect("Effect/OnUserEff.img/arcana/windOn", 0, 0, 0, 0, 0, 0, 0) +sm.showEffect("Effect/OnUserEff.img/arcana/windOn", 0, 0, 0, 0, 176755346, 0, 0) +sm.showEffect("Effect/OnUserEff.img/arcana/windOn", 0, 0, 0, 0, 0, 0, 0) +sm.resetNpcSpecialActionByTemplateId(3003351) +sm.showNpcSpecialActionByTemplateId(3003351, "wind3", 1920) +sm.sendDelay(1900) +sm.showEffect("Effect/OnUserEff.img/arcana/windOn", 0, 0, 0, 0, 176755346, 0, 0) +sm.showEffect("Effect/OnUserEff.img/arcana/windOn", 0, 0, 0, 0, 0, 0, 0) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(940200207) diff --git a/scripts/field/enter_940200219.py b/scripts/field/enter_940200219.py new file mode 100755 index 0000000..574d99f --- /dev/null +++ b/scripts/field/enter_940200219.py @@ -0,0 +1,59 @@ +# id 940200219 (Arcana : Near the Bramble Harp), field 940200219 +sm.completeQuestNoCheck(34490) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(300) +sm.spawnNpc(3003350, -360, 50) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.spawnNpc(3003365, 260, 50) +sm.showNpcSpecialActionByTemplateId(3003365, "summon", 0) +sm.spawnNpc(3003357, 490, 50) +sm.showNpcSpecialActionByTemplateId(3003357, "summon", 0) +sm.spawnNpc(3003372, 780, 50) +sm.showNpcSpecialActionByTemplateId(3003372, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003365, "stand2", -1) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendNext("#face0#We warned you to leave this place...") +sm.sendSay("#face0#I knew it! You pretended not to be the same stranger, but you're clearly up to no good...") +sm.zoomCamera(2000, 1500, 2000, 180, 50) +sm.moveNpcByTemplateId(3003350, False, 350, 140) +sm.sendDelay(300) +sm.forcedMove(False, 380) +sm.sendDelay(900) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face0#We were just trying to revive the Bramble Harp! Just wait, any moment now it will be brimming with life!") +sm.sendDelay(600) +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendNext("#face0#The harp is dead! Just like this slowly-withering forest...\r\nThere is no hope, no coming back.") +sm.sendSay("#face0#You ignored our warning, stranger. Now you will face the consequences.") +sm.showEffect("Effect/Direction19.img/effect/arcana_tree/0", 800, 0, 0, 0, 173164485, 0, 0) +sm.sendDelay(700) +sm.avatarOriented("Effect/Direction19.img/effect/arcana_tree/0") +sm.showEffect("Effect/Direction19.img/effect/arcana_tree/1", 180000, 0, 0, 0, 173164485, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(3003328) # Rescued Tree Spirit +sm.sendNext("#face0#No, stop!") +sm.zoomCamera(1000, 1500, 1000, 230, 50) +sm.moveNpcByTemplateId(3003372, True, 130, 200) +sm.sendDelay(1200) +sm.sendNext("#face0#Can't you see?! The Bramble Harp is beginning to bloom!") +sm.resetNpcSpecialActionByTemplateId(3003365) +sm.showNpcSpecialActionByTemplateId(3003365, "change", 0) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/harp", 200) +sm.sendDelay(2000) +sm.startQuest(34490) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face2#Ah, that beautiful sound... How I've missed it.") +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendSay("#face0#.........................") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(940200216) diff --git a/scripts/field/enter_940200250.py b/scripts/field/enter_940200250.py new file mode 100755 index 0000000..822710a --- /dev/null +++ b/scripts/field/enter_940200250.py @@ -0,0 +1,36 @@ +# id 940200250 (Arcana : Cavernous Cavern), field 940200250 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.zoomCamera(0, 2000, 0, -740, 180) +sm.forcedFlip(True) +sm.spawnNpc(3003313, -867, 115) +sm.showNpcSpecialActionByTemplateId(3003313, "summon", 0) +sm.sendDelay(300) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendNext("#face0#I was swimming awound undagwound wif my bwudders when suddenwee a big wave came and swept us away!") +sm.sendSay("#face0#When I woke up, I was twapped undah these woots! They've gwoan immensewee... It must be the same foh the Spiwit Twee.") +sm.sendSay("#face0#And... and... I'm fohgetting somefing impohtant...") +sm.setInnerOverrideSpeakerTemplateID(3003315) # Rock Spirits +sm.sendSay("#face1#Us, you dodo! You awe fohgetting us!") +sm.zoomCamera(3000, 2000, 3000, 250, -530) +sm.sendDelay(3300) +sm.sendNext("#face1#Oof! We awe stuck undah these bwasted woots! And... my butt is getting cohd and wet!") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face1#Cold and... wet? They must be blocking the water! We have to free them.") +sm.sendSay("#face1##b(Sighs)#k But they're so high up. Maybe if we piled something up to stand on...") +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendSay("#face0#I know, I know! Go and find the west of my bwudders wost thwoughout the cave! You can stack them on top wun anudder and cwimb up!") +sm.sendSay("#face0#I have ten bwudders awtogether. And we have... Two...Thwee... Fowuh of us here, incwuding me. That means I have seven bwudders that need saving! Pwease find them!") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face2# #b#h0##k, if we free them, the water will flow, and the Marimba Blossoms will play once more! Let's search the cavern for the missing Rock Spirits!") +sm.lockInGameUI(False, True) +sm.warp(450005400) diff --git a/scripts/field/enter_940200251.py b/scripts/field/enter_940200251.py new file mode 100755 index 0000000..f4a0f47 --- /dev/null +++ b/scripts/field/enter_940200251.py @@ -0,0 +1,32 @@ +# id 940200251 (Lachelein : Lachelein Canal), field 940200251 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(300) +sm.zoomCamera(0, 2000, 0, -500, 110) +sm.sendDelay(300) +sm.forcedMove(False, 200) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.zoomCamera(1500, 2000, 1500, -340, 110) +sm.sendDelay(1500) +sm.spawnNpc(3003368, -800, 200) +sm.showNpcSpecialActionByTemplateId(3003368, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Huh? That sound... I've heard it before.") +sm.moveNpcByTemplateId(3003368, False, 1000, 220) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.sendDelay(600) +sm.forcedInput(7) +sm.sendDelay(1500) +sm.forcedFlip(True) +sm.sendDelay(1200) +sm.forcedMove(False, 550) +sm.zoomCamera(2000, 1000, 2000, -128, 28) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "Flying Fish! You came back for me!", 3000, 0, 0, 0, 0, 4, 0, 4878499) +sm.lockInGameUI(False, True) +sm.warp(450003010) diff --git a/scripts/field/enter_940200252.py b/scripts/field/enter_940200252.py new file mode 100755 index 0000000..9706037 --- /dev/null +++ b/scripts/field/enter_940200252.py @@ -0,0 +1,29 @@ +# id 940200252 (Arcana : Marimba Lagoon), field 940200252 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3003350, -800, 50) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face0#Let's head down into the lagoon... Or what's left of it.") +sm.moveNpcByTemplateId(3003350, False, 1200, 200) +sm.sendDelay(300) +sm.forcedMove(False, 1350) +sm.sendDelay(300) +sm.zoomCamera(3000, 800, 3000, 100, 130) +sm.sendDelay(2000) +sm.sendNext("#face1#Back when the lagoon was full, the dew that collected on the blossoms would drip onto the surface of the lagoon. Since each flower was a different distance away, they'd make different sounds. The result was a calm concerto of water!") +sm.sendDelay(500) +sm.zoomCamera(3500, 1500, 3500, 480, 500) +sm.sendDelay(2000) +sm.sendNext("#face0#The flowers are okay. But something is obstructing this section of the lagoon...") +sm.sendDelay(1000) +sm.sendNext("#face0#Hey, look at that huge rock. Maybe that's what's blocking the flow of water?") +sm.lockInGameUI(False, True) +sm.warp(450005300) diff --git a/scripts/field/enter_940200253.py b/scripts/field/enter_940200253.py new file mode 100755 index 0000000..ad365f1 --- /dev/null +++ b/scripts/field/enter_940200253.py @@ -0,0 +1,27 @@ +# id 940200253 (Arcana : Marimba Lagoon), field 940200253 +sm.startQuest(34472) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3003350, 607, 473) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.zoomCamera(0, 1500, 0, 480, 500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(The rock breaks open with a resounding crash, revealing a passageway.)#k") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face1#Huh? A path under the lagoon?") +sm.sendSay("#face0#Breaking the rock didn't restore the flow of water, but if we follow this path, we might find the blockage.") +sm.moveNpcByTemplateId(3003350, False, 400, 120) +sm.sendDelay(300) +sm.forcedMove(False, 400) +sm.sendDelay(300) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(450005400) diff --git a/scripts/field/enter_940200255.py b/scripts/field/enter_940200255.py new file mode 100755 index 0000000..f849a04 --- /dev/null +++ b/scripts/field/enter_940200255.py @@ -0,0 +1,4 @@ +# id 940200255 (Arcana : Marimba Lagoon), field 940200255 +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.progressMessageFont(3, 20, 4, 0, "Attack the rock in the empty lagoon to break it.") +sm.warp(940200253) diff --git a/scripts/field/enter_940200330.py b/scripts/field/enter_940200330.py new file mode 100755 index 0000000..35b5ac1 --- /dev/null +++ b/scripts/field/enter_940200330.py @@ -0,0 +1,14 @@ +# id 940200330 (Arcana : Near the Floral Flute), field 940200330 +sm.lockInGameUI(True, False) +sm.forcedMove(True, 80) +sm.sendDelay(900) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face1#Let's cut a trimming from the Floral Flute! Just walk over there and mash the SPACE key.") +sm.sendDelay(300) +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendNext("#face2#Plant, plant. Transplant the plant! The flute will toot beneath the moon~") +sm.sendDelay(300) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_940200405.py b/scripts/field/enter_940200405.py new file mode 100755 index 0000000..9f748f8 --- /dev/null +++ b/scripts/field/enter_940200405.py @@ -0,0 +1,13 @@ +# id 940200405 (Arcana : Spirit Tree Vantage), field 940200405 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003350, -662, 25) +sm.showNpcSpecialActionByTemplateId(3003350, "summon", 0) +sm.resetNpcSpecialActionByTemplateId(3003350) +sm.showNpcSpecialActionByTemplateId(3003350, "cry", -1) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(34451, "clear=1") +sm.warp(450005015) diff --git a/scripts/field/enter_940200500.py b/scripts/field/enter_940200500.py new file mode 100755 index 0000000..e79bc39 --- /dev/null +++ b/scripts/field/enter_940200500.py @@ -0,0 +1,45 @@ +# id 940200500 (Savage Terminal : Old Storage Room), field 940200500 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCameraNoResponse(0, 2000, 0, 288, -57) +sm.sendDelay(300) +sm.forcedInput(4) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.forcedInput(0) +sm.forcedAction(4, 100) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face4#Noooo!!!!!") +sm.sendDelay(1000) +sm.zoomCameraNoResponse(1000, 1000, 1000, 0, 0) +sm.forcedInput(5) +sm.sendDelay(600) +sm.forcedInput(0) +sm.forcedMove(True, 100) +sm.sendDelay(1000) +sm.forcedInput(5) +sm.sendDelay(600) +sm.forcedInput(5) +sm.sendDelay(600) +sm.forcedInput(0) +sm.forcedMove(True, 200) +sm.sendDelay(2000) +sm.forcedMove(True, 50) +sm.sendDelay(500) +sm.forcedMove(True, 50) +sm.sendDelay(500) +sm.forcedAction(4, 1000) +sm.sendDelay(1000) +sm.progressMessageFont(3, 20, 20, 0, "Click the lightbulb to start the quest. Quest Status Hotkey (Q) / Secondary Key (J)") +sm.sendDelay(500) +sm.sendDelay(2000) +sm.avatarOriented("UI/tutorial.img/34") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) \ No newline at end of file diff --git a/scripts/field/enter_940200501.py b/scripts/field/enter_940200501.py new file mode 100755 index 0000000..56c912f --- /dev/null +++ b/scripts/field/enter_940200501.py @@ -0,0 +1,52 @@ +# id 940200501 (Savage Terminal : Gen's Hideout), field 940200501 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedMove(True, 1) +sm.sendDelay(10) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.forcedMove(True, 170) +sm.sendDelay(1700) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face1#No wonder the Hideout was quiet. Everyone's out on a mission.") +sm.forcedMove(True, 180) +sm.sendDelay(1800) +sm.forcedInput(5) +sm.sendDelay(500) +sm.forcedInput(6) +sm.sendDelay(500) +sm.forcedInput(0) +sm.forcedMove(False, 100) +sm.sendDelay(1000) +sm.forcedInput(6) +sm.sendDelay(600) +sm.forcedInput(5) +sm.sendDelay(600) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face3#Guess I've got the place to myself for a while. All mine... Heh.") +sm.forcedInput(0) +sm.forcedMove(True, 150) +sm.sendDelay(1500) +sm.forcedInput(5) +sm.sendDelay(600) +sm.forcedInput(0) +sm.forcedMove(True, 120) +sm.sendDelay(1000) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face2#I can come and go as I please. Good thing too. I was getting pretty tired of taking orders.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCameraNoResponse(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.progressMessageFont(3, 20, 20, 0, "Follow the arrows to exit the portal.") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) \ No newline at end of file diff --git a/scripts/field/enter_940200502.py b/scripts/field/enter_940200502.py new file mode 100755 index 0000000..33e1033 --- /dev/null +++ b/scripts/field/enter_940200502.py @@ -0,0 +1,51 @@ +# id 940200502 (Savage Terminal : Back Alley), field 940200502 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.zoomCamera(0, 2000, 0, -374, 43) +sm.sendDelay(500) +sm.forcedMove(False, 300) +sm.zoomCamera(2000, 2000, 2000, -50, 43) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face0#This whole city is a cesspool. I'm not sure why I thought things would be--or smell--any different out here.\r\n") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/5", 128) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 350, 43) +sm.sendDelay(100) +sm.zoomCamera(2000, 2000, 2000, 770, 43) +sm.playSound("Sound/SoundEff.img/cadena/people", 250) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001260) +sm.sendNext("#face0#Oh man, you should've seen me in action! Bang, pow, chumps flying all over the place!\r\n") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/6", 128) +sm.sendSay("#face0#Hah! You guys are lucky to be a part of my gang!\r\n") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/7", 128) +sm.playSound("Sound/SoundEff.img/cadena/people", 250) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, -50, 43) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face1#Hmm. This could be interesting.\r\n") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/8", 128) +sm.playSound("Sound/SoundEff.img/cadena/people", 250) +sm.forcedMove(False, 420) +sm.zoomCamera(2000, 2000, 2000, 420, 43) +sm.sendDelay(3000) +sm.spawnNpc(3001260, 996, 13) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_940200600.py b/scripts/field/enter_940200600.py new file mode 100755 index 0000000..67fd0f5 --- /dev/null +++ b/scripts/field/enter_940200600.py @@ -0,0 +1,13 @@ +# id 940200600 (Savage Terminal : Back Alley), field 940200600 +sm.showFieldEffect("lightning/screenMsg/0", 0) +sm.giveSkill(60021278, 1, 1) +max = 30 +i = 0 +while i < 30: + i += 1 + sm.waitForMobDeath(2400315) + sm.progressMessageFont(1, 20, 4, 0, "Hoodlums taught a lesson: " + str(i) + "/" + str(max)) + +sm.completeQuest(34601) +sm.removeSkill(60021278) +sm.warp(402000002) \ No newline at end of file diff --git a/scripts/field/enter_940202019.py b/scripts/field/enter_940202019.py new file mode 100755 index 0000000..5dc6855 --- /dev/null +++ b/scripts/field/enter_940202019.py @@ -0,0 +1,108 @@ +# id 940202019 (null), field 940202019 +sm.createQuestWithQRValue(34801, "019=1;hunt1=1;exp=1") +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Meanwhile, in Savage Terminal...", 100, 2000, 6, -50, -50, 1, 4, 0, 0, 0) +sm.changeBGM("Bgm47.img/HuntingGround", 0, 0) +sm.spawnNpc(3001309, 172, 764) +sm.showNpcSpecialActionByTemplateId(3001309, "summon", 0) +sm.spawnNpc(3001313, -628, 764) +sm.showNpcSpecialActionByTemplateId(3001313, "summon", 0) +sm.moveNpcByTemplateId(3001309, True, 200, 80) +sm.moveNpcByTemplateId(3001313, False, 190, 80) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(2000) +sm.spawnNpc(3001301, -238, 764) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.playSound("Sound/Skill.img/152001004/Use", 100) +sm.showNpcSpecialActionByTemplateId(3001301, "appear", 0) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#See anything unusual during the patrol?") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face0#The High Flora wouldn't deign to come here. We're safely hidden.") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face0#We should still be cautious! I overheard a conversation earlier about someone meeting one of the High Flora here in Savage Terminal.") +sm.flipNpcByTemplateId(3001301, True) +sm.sendDelay(100) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face3#Is that true?!") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face0#Well, they said parts of the wings were mechanical.") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#Mechanical wings? Then that means...") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face0#Yes. Someone mistook one of us for a High Flora.") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#Someone left the sanctuary illegally? Why have I not heard about this before?") +sm.sendSay("#face1#The protection of the Sanctuary is paramount!") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face1#I told you as soon as I heard anything. It's why we're here now!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#Sh! We can't draw attention to ourselves while we're exposed.") +sm.flipNpcByTemplateId(3001301, False) +sm.sendDelay(100) +sm.sendNext("#face3#Darius, please investigate this and make sure we're still protected.") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face4#Of course.") +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendSay("#face0##fs21#Lady Agate!") +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 0, 0, 0, 80612623, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 0, -20, 0, 80612394, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/what", 0, 0, -10, 0, 80612393, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Someone from Sanctuary.") +sm.zoomCamera(1500, 1500, 1500, -178, 764) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face0#A kid just left Sanctuary!") +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "!", 1000, 1, 0, 0, 0, 4, 3001301, 4600225) +sm.speechBalloon(False, 0, 0, "!", 1000, 1, 0, 0, 0, 4, 3001309, 4600225) +sm.speechBalloon(False, 0, 0, "!", 1000, 1, 0, 0, 0, 4, 3001313, 4600225) +sm.flipNpcByTemplateId(3001313, False) +sm.sendDelay(100) +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendNext("#face1#How did he get past security?") +sm.flipNpcByTemplateId(3001301, False) +sm.sendDelay(100) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face0#We contacted you because this is such a delicate situation.") +sm.sendSay("#face0#We've confirmed the one who left is #bIllium#k. We need to find him immediately.") +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.flipNpcByTemplateId(3001313, False) +sm.sendDelay(100) +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendNext("#face0#Illium!? That engineer?") +sm.flipNpcByTemplateId(3001301, False) +sm.sendDelay(100) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face4#I knew that kid was bound to be trouble someday.") +sm.sendSay("#face0#He could expose the Verdant Flora and put all our lives in danger.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#What's done is done.") +sm.sendSay("#face0#I'll find the child and return. Wait for me back inside the Sanctuary.") +sm.showNpcSpecialActionByTemplateId(3001301, "disappear", 0) +sm.sendDelay(750) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face1#It is unwise for Lady Agate to go alone.") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face0#You heard her. Let's get out of here.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.hideUser(False) +sm.lockInGameUI(False, True) +sm.warp(940202020) diff --git a/scripts/field/enter_940202020.py b/scripts/field/enter_940202020.py new file mode 100755 index 0000000..479fb34 --- /dev/null +++ b/scripts/field/enter_940202020.py @@ -0,0 +1,90 @@ +# id 940202020 (null), field 940202020 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(600) +sm.forcedFlip(True) +sm.spawnNpc(3001300, 440, 746) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.spawnNpc(3001358, 805, 746) +sm.showNpcSpecialActionByTemplateId(3001358, "summon", 0) +sm.spawnNpc(3001358, 695, 746) +sm.showNpcSpecialActionByTemplateId(3001358, "summon", 0) +sm.spawnNpc(3001358, 580, 746) +sm.showNpcSpecialActionByTemplateId(3001358, "summon", 0) +sm.spawnNpc(3001358, 225, 746) +sm.showNpcSpecialActionByTemplateId(3001358, "summon", 0) +sm.spawnNpc(3001358, 110, 746) +sm.showNpcSpecialActionByTemplateId(3001358, "summon", 0) +sm.zoomCamera(0, 1000, 0, 1000, 695) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.bgmVolume(40, 1000) +sm.spawnNpc(3001301, 1160, 746) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.playSound("Sound/Skill.img/152001004/Use", 100) +sm.showNpcSpecialActionByTemplateId(3001301, "appear", 0) +sm.sendDelay(900) +sm.resetNpcSpecialActionByTemplateId(3001301) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#That must be the child.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/0", 128) +sm.zoomCamera(900, 1000, 900, 560, 695) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(3001358, True, 30, 100) +sm.moveNpcByTemplateId(3001358, False, 30, 100) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Voice3.img/illium/hoodlum/1", 128) +sm.speechBalloon(False, 0, 0, "Heh heh...", 1000, 1, 0, 0, 0, 4, 3001358, 4600225) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Voice3.img/illium/hoodlum/2", 128) +sm.speechBalloon(False, 0, 0, "Fresh meat...", 1000, 1, 0, 0, 0, 4, 3001358, 4600225) +sm.showNpcSpecialActionByTemplateId(3001358, "attack1", 0) +sm.showNpcSpecialActionByTemplateId(3001358, "attack1", 0) +sm.playSound("Sound/Mob.img/2400309/Attack1", 100) +sm.sendDelay(1200) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Ex... My strength is failing me...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/1", 128) +sm.sendSay("#face0#I need... more potions...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/2", 128) +sm.showNpcSpecialActionByTemplateId(3001358, "attack1", 0) +sm.showNpcSpecialActionByTemplateId(3001358, "attack1", 0) +sm.playSound("Sound/Mob.img/2400309/Attack1", 100) +sm.sendDelay(1200) +sm.showNpcSpecialActionByTemplateId(3001300, "alert", -1) +sm.playSound("Sound/SoundEff.img/illium/rhyo_warning", 100) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/0", 128) +sm.speechBalloon(False, 0, 0, "Agh!", 1000, 1, 0, -20, 0, 4, 0, 4600225) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face3#Your life signs are critical. If you do not retreat immediately, you will certainly expire.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/7", 128) +sm.sendDelay(1500) +sm.speechBalloon(True, 0, 1, "Ugh...", 1000, 1, 0, 0, 0, 4, 0, 4600225) +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/3", 128) +sm.playSound("Sound/SoundEff.img/illium/job", 100) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/15/56") +sm.createQuestWithQRValue(34900, "job1=1") +sm.sendDelay(900) +sm.speechBalloon(False, 0, 0, "#fs28##eUaaaaaaaaaaaaaaaghhh!", 3000, 1, 0, -20, 0, 4, 0, 4600225) +sm.avatarOriented("Effect/BasicEff.img/JobChangedIlliumFront") +sm.showNpcSpecialActionByTemplateId(3001358, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001358, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001358, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001358, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001358, "die1", 0) +sm.sendDelay(1700) +sm.forcedInput(4) +sm.sendDelay(2000) +sm.sendNext("#face3#Master!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/8", 128) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.createQuestWithQRValue(34801, "019=1;hunt1=1;020=1;exp=1") +sm.startQuest(34900) +sm.lockInGameUI(False, True) +sm.warp(940202021) diff --git a/scripts/field/enter_940202021.py b/scripts/field/enter_940202021.py new file mode 100755 index 0000000..85b0446 --- /dev/null +++ b/scripts/field/enter_940202021.py @@ -0,0 +1,121 @@ +# id 940202021 (null), field 940202021 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(600) +sm.spawnNpc(3001346, -3420, 50) +sm.showNpcSpecialActionByTemplateId(3001346, "summon", 0) +sm.spawnNpc(3001300, -3210, 50) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.spawnNpc(3001301, -2960, 50) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.spawnNpc(3001306, -2810, 50) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.spawnNpc(3001306, -2735, 50) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.spawnNpc(3001306, -2660, 50) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.spawnNpc(3001306, -2585, 50) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.spawnNpc(3001306, -3555, 50) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.spawnNpc(3001306, -3630, 50) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.zoomCamera(0, 800, 0, -3000, -250) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face1#Hey, you! Kid!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Uhhh... Nnngh...") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Are you awake?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face7#Ugh...") +sm.blind(False, 0, 0, 0, 0, 1000) +sm.zoomCamera(4000, 1000, 4000, -3000, -10) +sm.sendDelay(1000) +sm.sendDelay(5000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Sanctuary, The Crystal Gate", 100, 1500, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face1#Wake up now! Her Lady Agate is addressing you!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Your name is Illium?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Um... thanks, I think.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#What is your age, young one?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#One... one hundred... fifty-three...") +sm.zoomCamera(2000, 1500, 2000, -3000, 50) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0##b(Hm... His crystal is much more faint than expected for one his age.\r\nEven his wings lack the usual magical aura.)#k") +sm.sendSay("#face0##b(The power he displayed before was more than he seems capable of.)#k") +sm.sendSay("#face0#Leaving Sanctuary is forbidden.\r\nAre you prepared to accept the consequences?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#I'm... sorry.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Do you even know who I am?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#The Seeker?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Sir, she is the Seeker of Verdant Flora and Headmistress of the Crystal Academy.") +sm.forcedFlip(True) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 80622851, 0, 0) +sm.sendDelay(500) +sm.sendNext("#face0#Accompanying her are Darius, the Verdant's Guardian, and Curly, the Verdant's Engineer.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Ex, hush!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Your robot here would suggest you have a talent for engineering.") +sm.zoomCamera(2000, 2000, 2000, -3000, 80) +sm.sendNext("#face0#Perhaps you would benefit more from education than imprisonment.") +sm.forcedFlip(True) +sm.sendSay("#face0#Considering your age and apparent mechanical aptitude, I'm willing to consider this a warning.") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 80622852, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 80622853, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 80622854, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 80622855, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 80622856, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 80622857, 0, 0) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Really?") +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face0#Yes. However! As of tomorrow morning, you will begin courses at the Crystal Academy as punishment.\r\n#rBe sure you're not late.") +sm.sendSay("#face0#Test the law again, and I may be forced to reconsider my decision.") +sm.sendSay("#face0#Now, get going.") +sm.zoomCamera(2000, 2000, 2000, -3180, 80) +sm.showNpcSpecialActionByTemplateId(3001301, "disappear", 0) +sm.sendDelay(750) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Courses? Crystal Academy?") +sm.forcedFlip(True) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#This is hardly a punishment, Sir. Many only dream of such a unique opportunity to attend the Crystal Academy.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Slow down, Ex.") +sm.sendSay("#face0#Now, can you tell me what happened back there or what?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#At the precise moment you lost consciousness, you seem to have had a magical... overload. It simply exploded out of you.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#Overload?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Unfortunately, the incident was too powerful for me to collect any accurate data.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face8#I didn't realize I had enough magic in me to do that...") +sm.sendSay("#face8#I need to head back home and do some research.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.createQuestWithQRValue(34801, "019=1;hunt1=1;020=1;021=1;exp=1") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000520) diff --git a/scripts/field/enter_940202022.py b/scripts/field/enter_940202022.py new file mode 100755 index 0000000..cbe15ac --- /dev/null +++ b/scripts/field/enter_940202022.py @@ -0,0 +1,54 @@ +# id 940202022 (null), field 940202022 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.forcedFlip(True) +sm.spawnNpc(3001304, 0, -50) +sm.showNpcSpecialActionByTemplateId(3001304, "summon", 0) +sm.spawnNpc(3001300, -200, 60) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.spawnNpc(3001310, -290, 60) +sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) +sm.spawnNpc(3001311, 185, 60) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.spawnNpc(3001314, -380, 60) +sm.showNpcSpecialActionByTemplateId(3001314, "summon", 0) +sm.spawnNpc(3001315, -465, 60) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001316, -570, 60) +sm.showNpcSpecialActionByTemplateId(3001316, "summon", 0) +sm.spawnNpc(3001317, 265, 60) +sm.showNpcSpecialActionByTemplateId(3001317, "summon", 0) +sm.spawnNpc(3001318, 360, 60) +sm.showNpcSpecialActionByTemplateId(3001318, "summon", 0) +sm.spawnNpc(3001319, 445, 60) +sm.showNpcSpecialActionByTemplateId(3001319, "summon", 0) +sm.spawnNpc(3001320, 525, 60) +sm.showNpcSpecialActionByTemplateId(3001320, "summon", 0) +sm.zoomCamera(0, 700, 0, 0, -400) +sm.sendDelay(500) +sm.zoomCamera(4000, 1000, 4000, 0, -45) +sm.sendDelay(5000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +sm.sendNext("#face0#This turned out better than expected. Very well done.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face1#Wow, this is great!") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face0#Not bad.") +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +sm.sendSay("#face0#This is a beautiful success. You should all be proud of yourselves.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#You know, I think I am a bit proud of it.") +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +sm.sendSay("#face0#Good job, everyone!") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.createQuestWithQRValue(34811, "room=1") +sm.lockInGameUI(False, True) +sm.warp(402000530) diff --git a/scripts/field/enter_940202029.py b/scripts/field/enter_940202029.py new file mode 100755 index 0000000..02549d2 --- /dev/null +++ b/scripts/field/enter_940202029.py @@ -0,0 +1,93 @@ +# id 940202029 (null), field 940202029 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3001372, 800, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 700, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 600, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 500, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001309, 900, 30) +sm.showNpcSpecialActionByTemplateId(3001309, "summon", 0) +sm.spawnNpc(3001301, 1130, -40) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.spawnNpc(3001302, 1370, -40) +sm.showNpcSpecialActionByTemplateId(3001302, "summon", 0) +sm.spawnNpc(3001303, 1260, -40) +sm.showNpcSpecialActionByTemplateId(3001303, "summon", 0) +sm.spawnNpc(3001304, 1220, 65) +sm.showNpcSpecialActionByTemplateId(3001304, "summon", 0) +sm.spawnNpc(3001305, 1310, 65) +sm.showNpcSpecialActionByTemplateId(3001305, "summon", 0) +sm.spawnNpc(3001316, 1650, 34) +sm.showNpcSpecialActionByTemplateId(3001316, "summon", 0) +sm.spawnNpc(3001315, 1600, 50) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001317, 1710, 50) +sm.showNpcSpecialActionByTemplateId(3001317, "summon", 0) +sm.spawnNpc(3001318, 1670, 65) +sm.showNpcSpecialActionByTemplateId(3001318, "summon", 0) +sm.spawnNpc(3001319, 1750, 65) +sm.showNpcSpecialActionByTemplateId(3001319, "summon", 0) +sm.zoomCamera(0, 2000, 0, 1500, 65) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#What is going on?") +sm.sendSay("#face0#Why is everyone...") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.zoomCamera(500, 2000, 500, 1000, 65) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face3#Darius? You!") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#It didn't have to come to this. \r\nYou could have handed over the Elder Crystal without a fight.") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#Agate, it's too late. The sanctuary is lost.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#I can't give up hope yet.") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face2#Don't pity your precious sanctuary. Pity yourselves, for soon you will meet your end.") +sm.zoomCamera(500, 2000, 500, 1820, 65) +sm.sendDelay(1500) +sm.spawnNpc(3001372, 1900, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 2000, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 2100, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 2200, -1) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.flipNpcByTemplateId(3001316, False) +sm.flipNpcByTemplateId(3001315, False) +sm.flipNpcByTemplateId(3001317, False) +sm.flipNpcByTemplateId(3001318, False) +sm.flipNpcByTemplateId(3001319, False) +sm.sendDelay(30) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81035949, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81035950, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81035951, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81035952, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81035953, 0, 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001318) # Model Student +sm.sendNext("We're surrounded!!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#Students, take shelter in the school! Now!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#Let me help!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#You can help by protecting your friends.") +sm.sendSay("#face3#Now go!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Okay!") +sm.lockInGameUI(False, True) +sm.warp(940202034) diff --git a/scripts/field/enter_940202030.py b/scripts/field/enter_940202030.py new file mode 100755 index 0000000..d49b58a --- /dev/null +++ b/scripts/field/enter_940202030.py @@ -0,0 +1,125 @@ +# id 940202030 (null), field 940202030 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.spawnNpc(3001300, 100, 0) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.spawnNpc(3001310, 255, 0) +sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) +sm.spawnNpc(3001307, 175, 0) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.spawnNpc(3001301, 500, 0) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.spawnNpc(3001313, 595, 0) +sm.showNpcSpecialActionByTemplateId(3001313, "summon", 0) +sm.spawnNpc(3001302, 680, 0) +sm.showNpcSpecialActionByTemplateId(3001302, "summon", 0) +sm.spawnNpc(3001303, 750, 0) +sm.showNpcSpecialActionByTemplateId(3001303, "summon", 0) +sm.spawnNpc(3001305, 820, 0) +sm.showNpcSpecialActionByTemplateId(3001305, "summon", 0) +sm.spawnNpc(3001321, 890, 0) +sm.showNpcSpecialActionByTemplateId(3001321, "summon", 0) +sm.spawnNpc(3001322, 960, 0) +sm.showNpcSpecialActionByTemplateId(3001322, "summon", 0) +sm.spawnNpc(3001308, -100, 0) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.spawnNpc(3001311, -295, 0) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.spawnNpc(3001317, -165, 0) +sm.showNpcSpecialActionByTemplateId(3001317, "summon", 0) +sm.spawnNpc(3001314, -230, 0) +sm.showNpcSpecialActionByTemplateId(3001314, "summon", 0) +sm.spawnNpc(3001315, -425, 0) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001316, -360, 0) +sm.showNpcSpecialActionByTemplateId(3001316, "summon", 0) +sm.zoomCamera(0, 1000, 0, 380, -532) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.zoomCamera(5000, 1000, 5000, 380, 10) +sm.sendDelay(1000) +sm.sendDelay(3000) +sm.reservedEffectRepeat("Effect/Direction14.img/illium/text/2", True, True, 0, 0, 0) +sm.sendDelay(1500) +sm.reservedEffectRepeat("Effect/Direction14.img/illium/text/2", False, False, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001321) # Resident +sm.sendNext("Look at that! It's amazing!") +sm.setInnerOverrideSpeakerTemplateID(3001322) # Resident +sm.sendSay("In all the decades I've attended the Festival of the Gods, I don't think I've ever seen a statue that beautiful!") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face2#Illium's work is truly amazing!") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#You've impressed us all, Illium. Well done.") +sm.setInnerOverrideSpeakerTemplateID(3001305) # Professor Lutil +sm.sendSay("#face0#The brilliance of the mytocrystal balances perfectly with the mechanisms!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face2#Well done Illium. I'm very proud of you.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face7#Thank you.") +sm.sendSay("#face8#I'm really glad to have done it.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face1#I'm glad you keep working so hard. It really shows.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#It was definitely worth all the effort.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face2#You've grown so much in such a short amount of time.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face3#Wow, Illium! That sure is something.") +sm.sendSay("#face3#You've got serious skill!") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendNext("#face0#Illium!") +sm.forcedFlip(True) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face7#Hey, everyone!") +sm.flipNpcByTemplateId(3001300, True) +sm.flipNpcByTemplateId(3001310, True) +sm.flipNpcByTemplateId(3001307, True) +sm.sendDelay(30) +sm.zoomCamera(1500, 1000, 1500, 60, 10) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendNext("#face1#You were so great today!") +sm.sendSay("#face0#I knew you were nice, but I had no idea you were so talented!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#Really? Thanks!") +sm.setInnerOverrideSpeakerTemplateID(3001316) # Moody Student +sm.sendSay("How cool!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#Yeah? I like yours too!") +sm.setInnerOverrideSpeakerTemplateID(3001314) # Arrogant Student +sm.sendSay("I had fun preparing for the Festival of the Gods!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#Me too!") +sm.sendSay("#face5#It was hard at first, but you all helped me so much!") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face1#You must feel really great! Why don't we grab some food to celebrate?!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#Huh? Yeah... okay!") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face0#The more I look at it, the more I realize how amazing that statue really is. How'd you come up with the idea?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#Oh, you know, just... inspiration I guess.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face1#Of course!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Everyone...") +sm.sendSay("#face3#Thanks so much for your support. It means... so... much!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.createQuestWithQRValue(34816, "fin=1;d1=1") +sm.sendDelay(100) +sm.completeQuestNoCheck(34816) +sm.sendDelay(100) +sm.createQuestWithQRValue(34816, "fin=1;exp=1;d1=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/58") +sm.lockInGameUI(False, True) +sm.warp(402000529) diff --git a/scripts/field/enter_940202031.py b/scripts/field/enter_940202031.py new file mode 100755 index 0000000..6268967 --- /dev/null +++ b/scripts/field/enter_940202031.py @@ -0,0 +1,33 @@ +# id 940202031 (null), field 940202031 +sm.removeAdditionalEffect() +sm.hideUser(True) +sm.zoomCamera(0, 700, 0, 385, -130) +sm.sendDelay(500) +sm.zoomCamera(5000, 1000, 5000, 385, -50) +sm.blind(True, 50, 0, 0, 0, 1300) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#When I was really young... before I made you, I used to visit that place... the one with the mysterious light... every year, in fact.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#The Festival statue is merely a collection of light with\r\nmytocrystal mana as its source, nothing more.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Well... For a long time, that's how I felt about the Festival of the Gods too.\r\nI thought it was just a bunch of pretty lights.") +sm.sendSay("#face0#Being here can be... frustrating at times. There's nothing to inspire you, nowhere to go, no hope for something more.") +sm.sendSay("#face0#But Agate and the other professors, the soldiers, even the other students...") +sm.sendSay("#face0#They taught me that there is more, that there's something worth the effort. They all work together to make this place a beautiful sanctuary for our people.") +sm.zoomCamera(7000, 1000, 7000, 385, -300) +sm.sendNext("#face0#What if the Headmistress is right? What if the light from the statue really is somehow reaching the Master?") +sm.sendSay("#face0#Maybe my light can make a difference after all.\r\nIt's worth trying.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#Sir, data would suggest that is, as you would say, nonsense.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Wow, Ex, way to dash even that little bit of hope...") +sm.hideUser(False) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000529) diff --git a/scripts/field/enter_940202032.py b/scripts/field/enter_940202032.py new file mode 100755 index 0000000..142fc21 --- /dev/null +++ b/scripts/field/enter_940202032.py @@ -0,0 +1,15 @@ +# id 940202032 (null), field 940202032 +sm.lockInGameUI(False, True) +sm.startQuest(34818) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendNext("#face3#Help! Is anyone there?!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face3#Sinaria! Morian!") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face2#Who is that?") +sm.sendSay("#face3#Over here!") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face3#Come on! You've got to help us get out of here!") diff --git a/scripts/field/enter_940202033.py b/scripts/field/enter_940202033.py new file mode 100755 index 0000000..b1f81e2 --- /dev/null +++ b/scripts/field/enter_940202033.py @@ -0,0 +1,122 @@ +# id 940202033 (null), field 940202033 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3001310, -1060, 790) +sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) +sm.spawnNpc(3001311, -1005, 790) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.spawnNpc(3001307, -740, 790) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.spawnNpc(3001308, -670, 790) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.spawnNpc(3001300, -850, 790) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.spawnNpc(3001346, -1165, 790) +sm.showNpcSpecialActionByTemplateId(3001346, "summon", 0) +sm.sendDelay(100) +sm.moveNpcByTemplateId(3001310, False, 150, 150) +sm.moveNpcByTemplateId(3001311, False, 150, 150) +sm.moveNpcByTemplateId(3001307, False, 170, 150) +sm.moveNpcByTemplateId(3001308, False, 170, 150) +sm.moveNpcByTemplateId(3001300, False, 170, 170) +sm.sendDelay(500) +sm.forcedMove(False, 230) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.flipNpcByTemplateId(3001310, True) +sm.flipNpcByTemplateId(3001311, True) +sm.flipNpcByTemplateId(3001307, True) +sm.flipNpcByTemplateId(3001308, True) +sm.flipNpcByTemplateId(3001300, True) +sm.sendDelay(100) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/illium/cg_close", 100) +sm.resetNpcSpecialActionByTemplateId(3001346) +sm.showNpcSpecialActionByTemplateId(3001346, "disappeared", -1) +sm.sendDelay(2000) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 81107131, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 81107132, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, -30, 0, 81107135, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 81107133, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 10, 0, 0, 81107134, 0, 0) +sm.sendDelay(500) +sm.avatarOriented("Effect/OnUserEff.img/emotion/oh") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendNext("#face2#The Crystal Gate is...") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face3#Will we ever be able to get back?") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#What if we can't return?") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face0#Don't talk like that. We'll get back someday!") +sm.forcedFlip(True) +sm.flipNpcByTemplateId(3001310, False) +sm.flipNpcByTemplateId(3001311, False) +sm.flipNpcByTemplateId(3001300, False) +sm.sendDelay(300) +sm.sendNext("#face0#Until then, we'll all stick together!") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#Yeah! We'll all find the Sanctuary together!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face0#But being around me puts all of you in danger.") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0#You know what you're doing. We're safer with you.") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face1#We can be the Verdant Flora Youth Expedition! We'll be invincible! Haha!") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face0#I suppose we don't have much choice.") +sm.forcedFlip(True) +sm.flipNpcByTemplateId(3001300, True) +sm.sendDelay(300) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 0, 0, 0, 81107131, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 10, -30, 0, 81107135, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 10, 0, 0, 81107133, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 10, 0, 0, 81107134, 0, 0) +sm.sendNext("#face0#I mean, if we're stuck here, we may as well do something productive.") +sm.avatarOriented("Effect/OnUserEff.img/emotion/what") +sm.sendSay("#face0#I think I'll join the Expedition too.") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face0#Wow...") +sm.forcedFlip(True) +sm.flipNpcByTemplateId(3001300, False) +sm.sendDelay(300) +sm.sendNext("#face0#You're all amazing! If we work together, we'll find the Sanctuary of the Ancient God in no time!") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face1#And we'll keep each other company!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face5#Thanks, everyone!") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face0#Where are we anyway? I've never been outside Sanctuary!") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0#It's my first time here too.") +sm.forcedMove(False, 450) +sm.sendDelay(500) +sm.flipNpcByTemplateId(3001307, False) +sm.flipNpcByTemplateId(3001308, False) +sm.sendDelay(2500) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face0#Here's the way out. Let's go.") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face0#Has Illium been here before?") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face1#Sounds like a plan to me!") +sm.moveNpcByTemplateId(3001310, False, 400, 130) +sm.moveNpcByTemplateId(3001311, False, 400, 130) +sm.moveNpcByTemplateId(3001307, False, 400, 150) +sm.moveNpcByTemplateId(3001308, False, 400, 150) +sm.moveNpcByTemplateId(3001300, False, 400, 150) +sm.sendDelay(10) +sm.forcedMove(False, 400) +sm.sendDelay(2000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(940202036) diff --git a/scripts/field/enter_940202034.py b/scripts/field/enter_940202034.py new file mode 100755 index 0000000..5297da6 --- /dev/null +++ b/scripts/field/enter_940202034.py @@ -0,0 +1,383 @@ +# id 940202034 (null), field 940202034 +sm.showNpcSpecialActionByTemplateId(3001316, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001317, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001318, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001319, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.forcedFlip(True) +sm.zoomCamera(0, 2000, 0, 50, -600) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001315) # Quiet Student +sm.sendNext("What do we do?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#We need to wait for the professors.") +sm.setInnerOverrideSpeakerTemplateID(3001316) # Moody Student +sm.sendSay("But what if they can't help us?!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#What--") +sm.spawnNpc(3001372, 450, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001373, 575, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.spawnNpc(3001372, 700, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, -300, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001373, -425, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.spawnNpc(3001372, -550, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001373, -675, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.sendDelay(500) +sm.zoomCamera(1000, 1000, 1000, 0, -690) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001318) # Model Student +sm.sendNext("Specters!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#Stay back!") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +# sm.warp(940202400) +# id 940202034 (null), field 940202034 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.zoomCamera(0, 2000, 0, 50, -650) +sm.spawnNpc(3001301, -246, -865) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.spawnNpc(3001300, 4, -865) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.spawnNpc(3001378, 165, -700) +sm.showNpcSpecialActionByTemplateId(3001378, "summon", 0) +sm.spawnNpc(3001316, 60, -700) +sm.showNpcSpecialActionByTemplateId(3001316, "summon", 0) +sm.spawnNpc(3001315, 110, -700) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001317, 160, -700) +sm.showNpcSpecialActionByTemplateId(3001317, "summon", 0) +sm.spawnNpc(3001318, 210, -700) +sm.showNpcSpecialActionByTemplateId(3001318, "summon", 0) +sm.spawnNpc(3001319, 260, -700) +sm.showNpcSpecialActionByTemplateId(3001319, "summon", 0) +sm.forcedFlip(True) +sm.showNpcSpecialActionByTemplateId(3001378, "dot", -1) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face9#Whew... I think we're safe for now.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/5", 128) +sm.setInnerOverrideSpeakerTemplateID(3001318) # Model Student +sm.sendSay("How did those Specters get through? You don't think that the professors are...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/model/1", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#There's no way! Agate's as tough as nails.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/7", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#Ugh...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/4", 128) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.forcedFlip(True) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face9#Agate?!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/9", 128) +sm.setInnerOverrideSpeakerTemplateID(3001362) # Quiet Student +sm.sendSay("Headmistress!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/quiet/1", 128) +sm.moveNpcByTemplateId(3001301, False, 120, 100) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3001315) # Quiet Student +sm.sendNext("Headmistress Agate, are you all right?") +sm.playExclSoundWithDownBGM("Voice3.img/illium/quiet/2", 128) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Agate's magicks are dangerously out of balance. This was likely brought about by excessive energy expenditure.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/9", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#Agate, you need healing!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/16", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#No. There's no time for that.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/5", 128) +sm.playSound("Sound/SoundEff.img/illium/cg_open", 100) +sm.showNpcSpecialActionByTemplateId(3001378, "open", 0) +sm.playSound("Sound/SoundEff.img/illium/cg_open", 100) +sm.sendDelay(1500) +sm.sendNext("#face3#You must all leave this place, immediately.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/7", 128) +sm.setInnerOverrideSpeakerTemplateID(3001362) # Quiet Student +sm.sendSay("Headmistress...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/quiet/3", 128) +sm.setInnerOverrideSpeakerTemplateID(3001363) # Moody Student +sm.sendSay("But... We'll be coming back here, right?") +sm.playExclSoundWithDownBGM("Voice3.img/illium/moody/1", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#Homes and schools may be rebuilt, but lives cannot be replaced. Your survival is what's important now.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/8", 128) +sm.sendSay("#face3#Now, GO!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/9", 128) +sm.setInnerOverrideSpeakerTemplateID(3001365) # Model Student +sm.sendSay("C'mon everybody!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/model/2", 128) +sm.sendDelay(500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face9#Agate... You're coming with us, right?") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/17", 128) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#I'm afraid that won't be possible.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/dyers/1", 128) +sm.spawnNpc(3001372, -420, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, -500, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, -580, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001309, -350, -700) +sm.showNpcSpecialActionByTemplateId(3001309, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001378, "disappeared", 0) +sm.playSound("Sound/SoundEff.img/illium/cg_close", 100) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face9#Ahh! The gate!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/18", 128) +sm.zoomCamera(300, 2000, 300, -200, -650) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(3001301, True) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face3#Darius...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/10", 128) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#This is the end, for the both of you.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/dyers/2", 128) +sm.showNpcSpecialActionByTemplateId(3001309, "reachout", -1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#I'll protect you, Agate!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/21", 128) +sm.showNpcSpecialActionByTemplateId(3001300, "alert", -1) +sm.playSound("Sound/SoundEff.img/illium/rhyo_warning", 100) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face3#Warning! Energy buildup detected! Exposure at this concentration will be fatal.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/10", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#Illium, get behind me!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/2", 128) +sm.showNpcSpecialActionByTemplateId(3001309, "skill", 0) +sm.sendDelay(500) +sm.onLayer(1500, "3", 0, 0, 12, "Effect/Direction14.img/illium/death/3", 4, False, -1, False) +sm.zoomCamera(1000, 1500, 1000, 0, -650) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face1#Ugh! How?!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/dyers/3", 128) +sm.sendSay("#face1#How can you still have so much power?!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/dyers/4", 128) +sm.offLayer(500, "3", False) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face3#The enemy combatants have left the area.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/11", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#Ugh...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/3", 128) +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/Falldown", 100) +sm.blind(True, 255, 0, 0, 0, 300) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face9#Agate!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/24", 128) +sm.onLayer(1500, "0", 0, -80, 12, "Effect/Direction14.img/illium/death/0", 4, True, -1, False) +sm.sendSay("#face1#Agate?! Are you all right?") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/10", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face4#I'm sorry, Illium... I'm afraid it's up to you...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/11", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face1#Quit talking like that, you're going to be fine. Come on, we have to get out of here!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/26", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face4#Illium... take this...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/12", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face1#What's this?") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/8", 128) +sm.onLayer(1500, "BlackOut", 0, -80, 13, "Map/Effect2.img/BlackOut", 4, True, -1, False) +sm.onLayer(1500, "2", 0, -80, 14, "Effect/Direction14.img/illium/death/2", 4, True, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face4#It is the Elder Crystal... That's what they're after. The crystal is the relic of a god of old... The last remaining key to unleashing their power.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/6", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face1#A... key?") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/27", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face4#Listen to me, Illium. The door to the Sanctuary of the Ancient God lies in another dimension... You must find it. You must... ugh... awaken the crystal's power.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/13", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face1#Agate!!!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/6", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face4#Go, Illium... The fate of the Verdant Flora is in your hands...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/14", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face1#But I was supposed to protect you.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/28", 128) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face4#Dry your tears, Illium. You have... ugh.. Done all you could.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/15", 128) +sm.sendSay("#face4#Please... You must not let it fall into enemy hands... Protect the Crystal. Protect your friends.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/16", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face1#Agate?!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/25", 128) +sm.offLayer(1000, "BlackOut", False) +sm.offLayer(1000, "2", False) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face4#You... are special, Illium... Never forget that...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/agate/17", 128) +sm.onLayer(1500, "1", 0, -80, 13, "Effect/Direction14.img/illium/death/1", 4, True, -1, False) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face1#Agate!!!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/11", 128) +sm.sendDelay(500) +sm.offLayer(500, "0", False) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.offLayer(1000, "1", False) +sm.sendDelay(1000) +sm.sendNext("#face1#No!!!!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/12", 128) +sm.sendDelay(500) +sm.sendNext("#face1##b(Sobs)#k") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/13", 128) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face3#Master, the enemy siege is intensifying. We must leave immediately.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/12", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face1#Agate...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/15", 128) +sm.sendSay("#face1#All this for a crystal.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/14", 128) +sm.sendSay("#face1#Gah!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/30", 128) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face3#Warning! Warning! An immensely powerful force is radiating from the relic!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/13", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#So much power... It's flowing into me!") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/37", 128) +sm.spawnNpc(3001372, 200, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 325, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 450, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001372, 575, -865) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.spawnNpc(3001373, -175, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.spawnNpc(3001373, -300, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.spawnNpc(3001373, -425, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.spawnNpc(3001373, -550, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.spawnNpc(3001373, -675, -865) +sm.showNpcSpecialActionByTemplateId(3001373, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face3#Sir, let it go! I am detecting a foreign consciousness within the crystal.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/14", 128) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#But without the crystal's power, we'll never make it out of here alive.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/32", 128) +sm.sendSay("#face9#I made her a promise... No matter what it takes...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/33", 128) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/31", 128) +sm.showEffect("Effect/Direction14.img/illium/magic", 0, 10, 0, 0, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/illium/casting", 100) +sm.sendNext("#face0#Ahhhhh!!!") +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.resetNpcSpecialActionByTemplateId(3001300) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.sendDelay(300) +sm.sendDelay(300) +sm.changeBGM("Bgm47.img/DeathOfAsylumChoir", 0, 0) +sm.createQuestWithQRValue(34900, "job1=1;job2=1") +sm.sendDelay(100) +sm.completeQuestNoCheck(34817) +sm.sendDelay(100) +sm.createQuestWithQRValue(34817, "m=1;kc=24;exp=1;clear=1") +sm.sendDelay(3000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.playSound("Sound/SoundEff.img/illium/job", 100) +sm.sendDelay(700) +sm.avatarOriented("Effect/BasicEff.img/JobChangedIlliumFront") +sm.showNpcSpecialActionByTemplateId(3001372, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001372, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001372, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001372, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001373, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001373, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001373, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001373, "die1", 0) +sm.showNpcSpecialActionByTemplateId(3001373, "die1", 0) +sm.sendDelay(1800) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face0#I can feel the crystal's power... It's a part of me. Ex, what's happened to me?") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/34", 128) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#My scans indicate the foreign consciousness and your own have... merged, sir.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/15", 128) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face0#I see...") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/35", 128) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Sir, the enemy has not halted their advance. We must leave this place immediately.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/rhyo/16", 128) +sm.zoomCamera(1500, 2000, 1500, 0, -650) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face0#I have to protect this crystal at all costs... That's what Agate would've wanted.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/36", 128) +sm.sendSay("#face0#Although we of the Verdant Flora must flee,\r\nwe will never forget the enemy who has wronged us.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/19", 128) +sm.sendSay("#face0#I have to get stronger if I am to face them... No, not just them. I need to be strong enough to defeat Darmoor, the one who commands them.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/20", 128) +sm.sendSay("#face0#Agate... I'll take care of everything.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/22", 128) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendNext("#face0#Rest in peace.") +sm.playExclSoundWithDownBGM("Voice3.img/illium/user/Male/23", 128) +sm.createQuestWithQRValue(34817, "job=1;m=1;kc=24;exp=1;clear=1") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(940202032) diff --git a/scripts/field/enter_940202035.py b/scripts/field/enter_940202035.py new file mode 100755 index 0000000..c109dd5 --- /dev/null +++ b/scripts/field/enter_940202035.py @@ -0,0 +1,110 @@ +# id 940202035 (null), field 940202035 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(300) +sm.zoomCamera(0, 1000, 0, -1450, 65) +sm.sendDelay(300) +sm.spawnNpc(3001346, -2800, 30) +sm.showNpcSpecialActionByTemplateId(3001346, "summon", 0) +sm.spawnNpc(3001310, -1370, 30) +sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) +sm.spawnNpc(3001311, -1300, 30) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.spawnNpc(3001316, -1900, 50) +sm.showNpcSpecialActionByTemplateId(3001316, "summon", 0) +sm.spawnNpc(3001315, -1965, 50) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001317, -2030, 50) +sm.showNpcSpecialActionByTemplateId(3001317, "summon", 0) +sm.spawnNpc(3001318, -2095, 50) +sm.showNpcSpecialActionByTemplateId(3001318, "summon", 0) +sm.spawnNpc(3001319, -2160, 50) +sm.showNpcSpecialActionByTemplateId(3001319, "summon", 0) +sm.spawnNpc(3001308, -1220, 30) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.spawnNpc(3001307, -1150, 30) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.completeQuestNoCheck(34900) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face4#This way! Hurry!") +sm.forcedMove(True, 150) +sm.moveNpcByTemplateId(3001310, True, 150, 150) +sm.moveNpcByTemplateId(3001311, True, 150, 150) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face2#Morian! Sinaria!") +sm.sendDelay(500) +sm.zoomCamera(500, 1000, 500, -1350, 65) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(3001310, False) +sm.flipNpcByTemplateId(3001311, False) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendNext("#face3#Hey!") +sm.createQuestWithQRValue(49000, "count=0;day=152722;QET=20190221174556;state=1") +sm.moveNpcByTemplateId(3001308, True, 150, 150) +sm.moveNpcByTemplateId(3001307, True, 150, 150) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#You're all okay!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#Dean! Carnelian!") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#Who are you? Wait, is that... Illium?!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#I'll explain later. We need to keep moving.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face3#I'm so scared.") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face4#Keep it together! We'll make it.") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#All of you! Quickly!") +sm.setInnerOverrideSpeakerTemplateID(3001362) # Quiet Student +sm.sendSay("You made it!") +sm.sendDelay(500) +sm.forcedFlip(True) +sm.flipNpcByTemplateId(3001310, True) +sm.flipNpcByTemplateId(3001311, True) +sm.sendDelay(30) +sm.zoomCamera(1500, 1000, 1500, -1850, 65) +sm.forcedMove(True, 150) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001363) # Moody Student +sm.sendNext("What a relief!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face0#Everyone is safe!") +sm.setInnerOverrideSpeakerTemplateID(3001361) # Arrogant Student +sm.sendSay("But... what about Headmistress Agate?!") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face3#She... didn't make it...") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#What?! How can that be?") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#This doesn't make any sense!") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face4#What can we do?") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face3#Survive.") +sm.sendSay("#face3#Agate died to save us all. We have to make it.") +sm.sendSay("#face0#There! The Crystal Gate!") +sm.zoomCamera(900, 1500, 900, -2800, 30) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendNext("#face2#Something about it doesn't look right.") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face3#If we can get through that gate, we'll be safe. Go!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.startQuest(34819) +sm.sendDelay(100) +sm.completeQuestNoCheck(34819) +sm.sendDelay(100) +sm.createQuestWithQRValue(34819, "exp=1") +sm.lockInGameUI(False, True) +sm.warp(940202033) diff --git a/scripts/field/enter_940202036.py b/scripts/field/enter_940202036.py new file mode 100755 index 0000000..d7b3de0 --- /dev/null +++ b/scripts/field/enter_940202036.py @@ -0,0 +1,19 @@ +# id 940202036 (null), field 940202036 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3001307, -1200, 790) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.spawnNpc(3001308, -1280, 790) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.forcedMove(False, 50) +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face0#We need to go further right. Let's keep moving.") +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_940202037.py b/scripts/field/enter_940202037.py new file mode 100755 index 0000000..7aa42cf --- /dev/null +++ b/scripts/field/enter_940202037.py @@ -0,0 +1,34 @@ +# id 940202039 (Savage Terminal : Garbage Dump Depths), field 940202039 +sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.createQuestWithQRValue(34820, "kc=0") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(27039, "") +sm.createQuestWithQRValue(27039, "") +sm.createQuestWithQRValue(26015, "") +sm.createQuestWithQRValue(26011, "") +sm.createQuestWithQRValue(36102, "First=1") +sm.completeQuestNoCheck(36102) +sm.createQuestWithQRValue(34820, "kc=1") +sm.startQuest(9571) +sm.startQuest(28861) +sm.startQuest(28862) +sm.startQuest(28830) +sm.startQuest(28831) +sm.startQuest(28832) +sm.startQuest(28833) +sm.startQuest(28834) +sm.startQuest(42102) +sm.startQuest(7621) +sm.createQuestWithQRValue(34820, "kc=2") +sm.createQuestWithQRValue(34820, "kc=3") +sm.createQuestWithQRValue(34820, "kc=4") +sm.createQuestWithQRValue(34820, "kc=5") +sm.createQuestWithQRValue(34820, "kc=6") +sm.createQuestWithQRValue(34820, "kc=7") +sm.createQuestWithQRValue(34820, "kc=8") +sm.createQuestWithQRValue(34820, "kc=9") +sm.createQuestWithQRValue(34820, "kc=10") +sm.warp(940202040) diff --git a/scripts/field/enter_940202040.py b/scripts/field/enter_940202040.py new file mode 100755 index 0000000..fd19d1e --- /dev/null +++ b/scripts/field/enter_940202040.py @@ -0,0 +1,79 @@ +# id 940202040 (Savage Terminal : Garbage Dump Depths), field 940202040 +sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001311, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001308, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendNext("#face0#Yikes. The white-haired one is stronger than I expected.") +sm.setParam(37) +sm.sendSay("#face0#What are you!?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face1#That's not your concern.") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#And we're not the High Flora either!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#Tell us what you know about the other dimension!") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#'Other dimension'?") +sm.sendSay("#face0#What is that?") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#You'd better not be lying to us!!") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#We don't know anything! Honest!") +sm.sendSay("#face0#The Nova might know!") +sm.sendSay("#face0#Yes! The Nova! In Pantheon! Try there!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#The Nova...? I've only ever read about them. You mean the dragons?") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Yes! That's all we know! Please!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face0#I guess our first stop will be Pantheon. Let's go guys.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#Well now that's sorted out, do you guys have any food?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face3#Morian!") +sm.setSpeakerType(4) +sm.setSpeakerID(3001343) # Hoodlum +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#Starting navigation to Pantheon.") +sm.setSpeakerType(3) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face0#Wait! Is there anything else we need to do?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendNext("#face0#Yikes. The white-haired one is stronger than I expected.") +sm.setParam(37) +sm.sendSay("#face0#What are you!?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face1#That's not your concern.") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#And we're not the High Flora either!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#Tell us what you know about the other dimension!") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#'Other dimension'?") +sm.sendSay("#face0#What is that?") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#You'd better not be lying to us!!") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#We don't know anything! Honest!") +sm.sendSay("#face0#The Nova might know!") +sm.sendSay("#face0#Yes! The Nova! In Pantheon! Try there!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#The Nova...? I've only ever read about them. You mean the dragons?") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Yes! That's all we know! Please!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face0#I guess our first stop will be Pantheon. Let's go guys.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#Well now that's sorted out, do you guys have any food?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face3#Morian!") +sm.setSpeakerType(4) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#Starting navigation to Pantheon.") +sm.startQuest(34820) +sm.warp(402000112) diff --git a/scripts/field/enter_940202041.py b/scripts/field/enter_940202041.py new file mode 100755 index 0000000..3503135 --- /dev/null +++ b/scripts/field/enter_940202041.py @@ -0,0 +1,107 @@ +# id 940202041 (null), field 940202041 +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3001378, 800, 30) +sm.showNpcSpecialActionByTemplateId(3001378, "summon", 0) +sm.spawnNpc(3001379, 440, 30) +sm.showNpcSpecialActionByTemplateId(3001379, "summon", 0) +sm.spawnNpc(3001380, 1250, 30) +sm.showNpcSpecialActionByTemplateId(3001380, "summon", 0) +sm.spawnNpc(3001381, 1600, 30) +sm.showNpcSpecialActionByTemplateId(3001381, "summon", 0) +sm.spawnNpc(3001306, 1320, 30) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.spawnNpc(3001306, 1370, 30) +sm.showNpcSpecialActionByTemplateId(3001306, "summon", 0) +sm.spawnNpc(3001313, 1440, 30) +sm.showNpcSpecialActionByTemplateId(3001313, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3001378, "dot", -1) +sm.showNpcSpecialActionByTemplateId(3001379, "dot", -1) +sm.showNpcSpecialActionByTemplateId(3001380, "dot", -1) +sm.showNpcSpecialActionByTemplateId(3001381, "dot", -1) +sm.sendDelay(5000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#Several Hours Earlier, Village Square", 100, 2200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3001378, "open", 0) +sm.playSound("Sound/SoundEff.img/illium/cg_open", 100) +sm.sendDelay(1500) +sm.flipNpcByTemplateId(3001306, True) +sm.flipNpcByTemplateId(3001306, True) +sm.flipNpcByTemplateId(3001313, True) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81030125, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81030126, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, -20, 0, 81030127, 0, 0) +sm.sendDelay(1500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face1#Why is the gate opening?") +sm.spawnNpc(3001372, 1052, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(300) +sm.spawnNpc(3001372, 1002, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(300) +sm.spawnNpc(3001372, 952, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(300) +sm.spawnNpc(3001372, 902, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(300) +sm.spawnNpc(3001372, 702, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(300) +sm.spawnNpc(3001372, 652, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(300) +sm.spawnNpc(3001372, 602, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(300) +sm.spawnNpc(3001372, 552, 4) +sm.showNpcSpecialActionByTemplateId(3001372, "summon", 0) +sm.sendDelay(2000) +sm.sendNext("#face1#S-Specters?!") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face1#How could we have been discovered...?") +sm.sendSay("#face1#Stay calm! If we can manage to close the gate, we'll be safe.") +sm.spawnNpc(3001309, 800, 4) +sm.showNpcSpecialActionByTemplateId(3001309, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face2#Don't be so sure.") +sm.setInnerOverrideSpeakerTemplateID(3001313) # Curly +sm.sendSay("#face1#Darius?") +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3001379, "open", 0) +sm.playSound("Sound/SoundEff.img/illium/cg_open", 100) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3001380, "open", 0) +sm.playSound("Sound/SoundEff.img/illium/cg_open", 100) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3001381, "open", 0) +sm.playSound("Sound/SoundEff.img/illium/cg_open", 100) +sm.sendDelay(1500) +sm.sendNext("#face1#What's gotten into you?") +sm.sendSay("#face1#Why would you...") +sm.sendSay("#face1#How could you betray your own people?") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face2#I would rather destroy everything than see our future tainted\r\nby the abominations created by engineers like you.") +sm.sendSay("#face3#What are you waiting for? Eliminate them!") +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.moveNpcByTemplateId(3001372, False, 500, 100) +sm.sendDelay(1500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(940202029) diff --git a/scripts/field/enter_940202100.py b/scripts/field/enter_940202100.py new file mode 100755 index 0000000..9fd8348 --- /dev/null +++ b/scripts/field/enter_940202100.py @@ -0,0 +1,19 @@ +# id 940202100 (null), field 940202100 +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16700, "count=286;date=20190221") +sm.createQuestWithQRValue(16700, "count=287;date=20190221") +sm.createQuestWithQRValue(16700, "count=288;date=20190221") +sm.createQuestWithQRValue(16700, "count=289;date=20190221") +sm.createQuestWithQRValue(16700, "count=290;date=20190221") +sm.createQuestWithQRValue(16700, "count=291;date=20190221") +sm.createQuestWithQRValue(16700, "count=292;date=20190221") +sm.createQuestWithQRValue(16700, "count=293;date=20190221") +sm.createQuestWithQRValue(16700, "count=294;date=20190221") +sm.createQuestWithQRValue(16700, "count=295;date=20190221") +sm.createQuestWithQRValue(16700, "count=296;date=20190221") +sm.createQuestWithQRValue(16700, "count=297;date=20190221") +sm.createQuestWithQRValue(16700, "count=298;date=20190221") +sm.createQuestWithQRValue(16700, "count=299;date=20190221") +sm.createQuestWithQRValue(16700, "count=300;date=20190221") +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_940202200.py b/scripts/field/enter_940202200.py new file mode 100755 index 0000000..81cec91 --- /dev/null +++ b/scripts/field/enter_940202200.py @@ -0,0 +1,4 @@ +# id 940202200 (null), field 940202200 +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_940202300.py b/scripts/field/enter_940202300.py new file mode 100755 index 0000000..037432e --- /dev/null +++ b/scripts/field/enter_940202300.py @@ -0,0 +1,4 @@ +# id 940202300 (null), field 940202300 +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_940202400.py b/scripts/field/enter_940202400.py new file mode 100755 index 0000000..1916750 --- /dev/null +++ b/scripts/field/enter_940202400.py @@ -0,0 +1,41 @@ +# id 940202400 (null), field 940202400 +sm.lockInGameUI(True, False) +sm.spawnNpc(3001316, 60, -700) +sm.showNpcSpecialActionByTemplateId(3001316, "summon", 0) +sm.spawnNpc(3001315, 110, -700) +sm.showNpcSpecialActionByTemplateId(3001315, "summon", 0) +sm.spawnNpc(3001317, 160, -700) +sm.showNpcSpecialActionByTemplateId(3001317, "summon", 0) +sm.spawnNpc(3001318, 210, -700) +sm.showNpcSpecialActionByTemplateId(3001318, "summon", 0) +sm.spawnNpc(3001319, 260, -700) +sm.showNpcSpecialActionByTemplateId(3001319, "summon", 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(34817, "m=1;kc=0;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=1;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=2;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=3;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=4;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=5;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=6;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=7;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=8;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=9;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=10;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=11;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=12;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=13;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=14;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=15;clear=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/17/09") +sm.createQuestWithQRValue(34817, "m=1;kc=16;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=17;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=18;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=19;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=20;clear=1") +sm.showFieldEffect("monsterPark/clearF", 0) +sm.createQuestWithQRValue(34817, "m=1;kc=21;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=22;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=23;clear=1") +sm.createQuestWithQRValue(34817, "m=1;kc=24;clear=1") diff --git a/scripts/field/enter_940202500.py b/scripts/field/enter_940202500.py new file mode 100755 index 0000000..5d60af2 --- /dev/null +++ b/scripts/field/enter_940202500.py @@ -0,0 +1,6 @@ +# id 940202500 (null), field 940202500 +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(25942, "season=68") +sm.createQuestWithQRValue(25942, "open=1;season=68") +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_940202600.py b/scripts/field/enter_940202600.py new file mode 100755 index 0000000..4db4200 --- /dev/null +++ b/scripts/field/enter_940202600.py @@ -0,0 +1,15 @@ +# id 940202600 (null), field 940202600 +sm.lockInGameUI(False, True) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/17/15") +sm.createQuestWithQRValue(16027, "ComboK=29") +sm.createQuestWithQRValue(16027, "ComboK=30") +sm.createQuestWithQRValue(16027, "ComboK=31") +sm.createQuestWithQRValue(16027, "ComboK=32") +sm.createQuestWithQRValue(49000, "state=1") +sm.createQuestWithQRValue(49000, "count=0;state=1") +sm.createQuestWithQRValue(49000, "count=0;QET=20190221174556;state=1") +sm.createQuestWithQRValue(16027, "ComboK=33") +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.createQuestWithQRValue(16027, "ComboK=34") diff --git a/scripts/field/enter_940202700.py b/scripts/field/enter_940202700.py new file mode 100755 index 0000000..6d363bf --- /dev/null +++ b/scripts/field/enter_940202700.py @@ -0,0 +1,4 @@ +# id 940202700 (null), field 940202700 +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/enter_940205000.py b/scripts/field/enter_940205000.py new file mode 100755 index 0000000..9601330 --- /dev/null +++ b/scripts/field/enter_940205000.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# Map ID :: 940205000 +# Refuge Outskirts : Caravan Refuge + +sm.spawnNpc(3001511, -1266, -135) +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) +# [CLOCK] [07 00 58 02 00 00 ] +# Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 diff --git a/scripts/field/enter_940205900.py b/scripts/field/enter_940205900.py new file mode 100755 index 0000000..1223755 --- /dev/null +++ b/scripts/field/enter_940205900.py @@ -0,0 +1,48 @@ +# id 940205900 (null), field 940205900 +sm.createQuestWithQRValue(34938, "dir=2;exp=1") +sm.lockInGameUI(True, False) +sm.sendDelay(1500) +sm.lockInGameUI(False, True) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.zoomCamera(0, 1000, 0, -450, 200) +sm.forcedFlip(True) +sm.spawnNpc(3001504, -325, 202) +sm.showNpcSpecialActionByTemplateId(3001504, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001504) # Albaire +sm.sendNext("#face0#There's nothing left for you.") +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(3001504, "attack1", 0) +sm.sendDelay(1500) +sm.onLayer(300, "d0", 300, 80, -1, "Effect/Direction17.img/effect/ark/ball/0", 4, True, -1, False) +sm.moveLayer(2000, "d0", -583, 0) +sm.sendDelay(500) +sm.offLayer(500, "d0", False) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face7#Aaaaaaaagh!!") +sm.playExclSoundWithDownBGM("Voice4.img/Ark/Back/F/Male/12", 100) +sm.startQuest(34944) +sm.completeQuestNoCheck(34944) +sm.createQuestWithQRValue(34996, "402=h1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/13/12") +sm.createQuestWithQRValue(34944, "exp=1") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402090009) diff --git a/scripts/field/enter_970072000.py b/scripts/field/enter_970072000.py new file mode 100755 index 0000000..6af6208 --- /dev/null +++ b/scripts/field/enter_970072000.py @@ -0,0 +1,8 @@ +sm.spawnMob(8881000, 836, 86, False, 60000000000000) + +while sm.hasMobsInField(): + sm.waitForMobDeath() +sm.setInstanceTime(60, 970072200) +for char in field.getChars(): + sm.giveItem(4310199, 8) + sm.giveItem(4009349, 1) \ No newline at end of file diff --git a/scripts/field/enter_970072200.py b/scripts/field/enter_970072200.py new file mode 100755 index 0000000..8f3cc4b --- /dev/null +++ b/scripts/field/enter_970072200.py @@ -0,0 +1,2 @@ +# id 970072200 (Hidden Street : Ursus (Entry Map)), field 970072200 +sm.lockInGameUI(False, True) diff --git a/scripts/field/enter_993034000.py b/scripts/field/enter_993034000.py new file mode 100755 index 0000000..3054037 --- /dev/null +++ b/scripts/field/enter_993034000.py @@ -0,0 +1,7 @@ +# id 993034000 halloweeb +sm.progressMessageFont(4, 19, 13, 5, "~Spooky scary halloweeb time~") +sm.setSpeakerType(2) +sm.setParam(548) +sm.setColor(2) +sm.setInnerOverrideSpeakerTemplateID(9062015) # Hallowkitty +sm.sendNext("Looks like you've stopped clestial from being overrun by all the spooky ghosties!") diff --git a/scripts/field/enter_Elodin.py b/scripts/field/enter_Elodin.py new file mode 100755 index 0000000..3972f89 --- /dev/null +++ b/scripts/field/enter_Elodin.py @@ -0,0 +1,11 @@ +# id 101081000 (Elodin : Silent Forest), field 101081000 +sm.startQuest(9571) +sm.startQuest(28861) +sm.startQuest(28862) +sm.startQuest(28830) +sm.startQuest(28831) +sm.startQuest(28832) +sm.startQuest(28833) +sm.startQuest(42102) +sm.startQuest(7621) +sm.warp(101082000) diff --git a/scripts/field/enter_dlep1dir.py b/scripts/field/enter_dlep1dir.py new file mode 100755 index 0000000..9d521c2 --- /dev/null +++ b/scripts/field/enter_dlep1dir.py @@ -0,0 +1,107 @@ +# this map share same script with 302090100 so I changed the map to 302010000 +if sm.getFieldID() == 302090000: + # [Grand Athenaeum] Stormy Forest : White Mage Prologue + sm.lockInGameUI(True) + sm.blind(1, 255, 0, 0) + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/0", 100) + sm.sayMonologue("I am a wandering mercenary.\r\n", False) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/1", 100) + sm.sayMonologue("Looking back, it was a life that could end anywhere, at anytime.", False) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/2", 100) + sm.sayMonologue("The sun will set and the wind will blow, and someday I will be lost to history.", False) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/3", 100) + sm.sayMonologue("\r\n\r\nAnd perhaps...today will be that day.", True) + + sm.blind(1, 255, 0, 0) + sm.sendDelay(1200) + + sm.blind(0, 0, 0, 1000) + sm.sendDelay(1400) + + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("...") + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/4", 100) + sm.sendSay("What happened to everyone? His followers trusted him...!") + + sm.moveCamera(300, 450, 185) + + sm.moveCameraBack(300) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/5", 100) + sm.sendNext("Were his words all lies?") + + sm.blind(1, 200, 0, 1300) + sm.sendDelay(1600) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/7", 100) + sm.sayMonologue("Where shall I start...?", True) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/8", 100) + sm.sayMonologue("...Yes. Let's begin when I first heard about the White Mage.", True) + + sm.blind(1, 255, 0, 500) + sm.sendDelay(500) + + sm.sendDelay(1200) + sm.sayMonologue("#fs40#Episode I: The White Mage", True) + + sm.lockInGameUI(False) + sm.warp(302090100, 0) + +elif sm.getFieldID() == 302090100: + # [Grand Athenaeum] Ariant : Middle of the Desert + HATSAR = 2510001 + sm.lockInGameUI(True) + sm.moveCamera(0, -205, -500) + + sm.blind(1, 255, 0, 0) + sm.sendDelay(1200) + + sm.blind(0, 0, 0, 1000) + sm.sendDelay(1400) + + sm.blind(1, 200, 0, 1300) + sm.sendDelay(1600) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/9", 100) + sm.sayMonologue("I was always alone.", False) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/10", 100) + sm.sayMonologue("My weapons were the only thing I trusted. I had to put my life on the line just to eat.", False) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/11", 100) + sm.sayMonologue("\r\nI am lucky enough to be alive today, but...I can't say that about all my friends.", True) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/12", 100) + sm.sayMonologue("As I learned to fight, I also learned not to fear the end.", True) + + sm.moveCameraBack(100) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/13", 100) + sm.sayMonologue("War and famine, plagues and disasters... The world was surely falling apart.", False) + + sm.playExclSoundWithDownBGM("Voice.img/Library/Mercenary/M/14", 100) + sm.sayMonologue("And the rich lined their pockets with comfort as they watched it happen. The worst of them was Hatsar, the mogul of Ariant.", True) + + sm.blind(0, 0, 0, 1300) + sm.sendDelay(1600) + + sm.removeEscapeButton() + sm.setSpeakerID(HATSAR) + sm.sendNext("*Huff huff* Hey, are you the servant that Hatsar sent? To escort me to Ariant?") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("...What? It's mercenary, not servant.") + + sm.setSpeakerID(HATSAR) + sm.sendSay("Hey, nothing wrong with being a servant! Anyway, good. Do you have some water? It's rough having to carry all these myself.") + + sm.lockInGameUI(False) + sm.startQuest(32629) + sm.completeQuest(32629) + sm.warp(302010000, 0) diff --git a/scripts/field/enter_illium_hunt1.py b/scripts/field/enter_illium_hunt1.py new file mode 100755 index 0000000..96eb517 --- /dev/null +++ b/scripts/field/enter_illium_hunt1.py @@ -0,0 +1,49 @@ +# id 940202013 (null), field 940202013 +sm.lockInGameUI(False, True) +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.giveAndEquip(1353500) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face4#Yikes! What are those!?") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(27039, "") +sm.completeQuestNoCheck(28515) +sm.createQuestWithQRValue(26015, "") +sm.createQuestWithQRValue(26011, "") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Those hedgehogs are close enough to hunt, and they may have the parts you need.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Those are hedgehogs?! But they're so... pokey... and weird. I thought they were supposed to be cute!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Try to get a little closer and use your basic attack on them with the #rCtrl#k key.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#That'll work on these things?") +sm.sendSay("#face0#Okay... Ctrl key, Ctrl key... Here goes nothing!") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.progressMessageFont(3, 20, 20, 0, "You can attack by pressing the Ctrl key.") +sm.avatarOriented("UI/tutorial.img/illium/attack") +sm.createQuestWithQRValue(64110, "chk=1") +sm.createQuestWithQRValue(64110, "chk=0") +sm.startQuest(9571) +sm.startQuest(28861) +sm.startQuest(28862) +sm.startQuest(28830) +sm.startQuest(28831) +sm.startQuest(42102) +sm.startQuest(7621) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/15/53") +sm.createQuestWithQRValue(25980, "normal=#") +sm.createQuestWithQRValue(25980, "normal=#;hard=#") +sm.createQuestWithQRValue(16700, "date=20190221") +sm.createQuestWithQRValue(16700, "count=1;date=20190221") +sm.createQuestWithQRValue(34801, "hunt1=1") +sm.createQuestWithQRValue(51236, "StageKey=0") +sm.createQuestWithQRValue(16700, "count=2;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=2") +sm.startQuest(11620) +sm.createQuestWithQRValue(16700, "count=3;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=3") diff --git a/scripts/field/enter_illium_hunt2.py b/scripts/field/enter_illium_hunt2.py new file mode 100755 index 0000000..c9292fc --- /dev/null +++ b/scripts/field/enter_illium_hunt2.py @@ -0,0 +1,37 @@ +# id 940203000 (null), field 940203000 +sm.lockInGameUI(False, True) +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Look over there!") +sm.sendSay("#face0#Wow, that's a lot of pincushions...") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#It's the perfect opportunity to obtain the parts you require.") +sm.sendSay("#face0#As the hedgehogs fall apart, they'll drop parts. Collect what they've already dropped by pressing the #rZ key#k.") +sm.progressMessageFont(3, 20, 20, 0, "Use the Z key to pick up the items.") +sm.moveCamera(True, 0, 0, 0) +sm.avatarOriented("UI/tutorial.img/illium/pickup") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16700, "count=4;date=20190221") +sm.createQuestWithQRValue(16700, "count=5;date=20190221") +sm.playSound("DarkParty/scream3", 100) +sm.createQuestWithQRValue(16700, "count=6;date=20190221") +sm.createQuestWithQRValue(16700, "count=7;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=4") +sm.startQuest(11620) +sm.createQuestWithQRValue(16700, "count=8;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=5") +sm.createQuestWithQRValue(16700, "count=9;date=20190221") +sm.createQuestWithQRValue(16700, "count=10;date=20190221") +sm.createQuestWithQRValue(16700, "count=11;date=20190221") +sm.createQuestWithQRValue(16700, "count=12;date=20190221") +sm.createQuestWithQRValue(16700, "count=13;date=20190221") +sm.createQuestWithQRValue(16700, "count=14;date=20190221") +sm.createQuestWithQRValue(16025, "MultiKC=1") +sm.createQuestWithQRValue(16027, "ComboK=6") +sm.playSound("DarkParty/scream4", 100) +sm.playSound("DarkParty/scream3", 100) +sm.createQuestWithQRValue(16700, "count=15;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=7") diff --git a/scripts/field/enter_masRoom.py b/scripts/field/enter_masRoom.py new file mode 100755 index 0000000..1b1596d --- /dev/null +++ b/scripts/field/enter_masRoom.py @@ -0,0 +1,4 @@ +# 931050110 - Field for demon advancements + +if sm.hasQuest(23221): # Demon 4th job + sm.spawnMob(9001058, 671, -14, False) \ No newline at end of file diff --git a/scripts/field/enter_q25584.py b/scripts/field/enter_q25584.py new file mode 100755 index 0000000..d7452f8 --- /dev/null +++ b/scripts/field/enter_q25584.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [910600201] +# Hidden Street : Abandoned Hideout + +sm.setQuestEx(25583, "enter", "1") diff --git a/scripts/field/enter_q25587e.py b/scripts/field/enter_q25587e.py new file mode 100755 index 0000000..01532bd --- /dev/null +++ b/scripts/field/enter_q25587e.py @@ -0,0 +1,92 @@ +# Created by MechAviv +# ID :: [910142051] +# Hidden Street : Harmony + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(4) +OBJECT_1 = sm.sendNpcController(1032209, -15, -30) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.showEffect("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon40", 0, 20, 0, -2, -2, False, 0) +sm.sendDelay(4200) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") + + +sm.forcedInput(0) +sm.sendDelay(30) + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("How are you feeling?") + + +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("What happened? I thought... I...") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Who is this Lania, hm? You shouted her name out of the blue and then just conked out.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("She's nobod--She's a girl I met when I woke up in the present world. We lived together for a few years before the Dark awoke inside me.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I see. And this darkness... You got it from your fight against the Black Mage?") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Yes. I believe it happened when I sealed him away. I'm not sure if it's a piece of him that I've absorbed, or some part of me I never realized I had.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("There's something I gotta tell you, Luminous. I did do a bit of research on Dark magic in the last few centuries, and I found that Light and Dark are two sides of the same coin. That's why the darkness got into you so easily!") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Where have I heard that before...?") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I don't know, but Dark grows stronger when Light fades. But since you have BOTH powers, I bet you could learn to control your darkness! Hold on a tick...") + +sm.startQuest(25587) +sm.completeQuest(25587) +sm.giveExp(10000) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.sendNpcController(OBJECT_1, False) +sm.warp(101000200, 0) \ No newline at end of file diff --git a/scripts/field/enter_q25587s.py b/scripts/field/enter_q25587s.py new file mode 100755 index 0000000..70928a9 --- /dev/null +++ b/scripts/field/enter_q25587s.py @@ -0,0 +1,102 @@ +# Created by MechAviv +# ID :: [910142050] +# Hidden Street : Harmony + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +OBJECT_1 = sm.sendNpcController(1032209, -15, -30) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Did you come to Harmony to train in the Dark arts? I can't blame you. We have plenty of books on the matter.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I wrestle for control of my own mind and soul at all times! I fear this evil energy will swallow me whole before I am able to control it. I must find a wielder of light that is as powerful as I am...") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I may not have a body anymore, but I'm much stronger than last time you saw me. Don't make me whip out my Light-fu!") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Vieren... you have truly embraced the power of Light. You are not the same man I remember. Do you truly believe the power of light can suppress the darkness? I suppose if this does not work, we will both burn to cinder and ash.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("All right. Let's get this over with!") + + +sm.faceOff(21066) +sm.showEffect("Effect/Direction8.img/effect/tuto/floodEffect/1", 2100, 0, 0, -5, -2, False, 0) +sm.showEffect("Effect/Direction8.img/effect/tuto/floodEffect/2", 2100, 0, 0, -6, -2, False, 0) +sm.sendDelay(1800) + + +OBJECT_2 = sm.sendNpcController(1032217, -330, -30) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.setSpeakerID(1032217) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Luminous! Stop!") + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.setSpeakerID(1032217) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("...Lania?") + + +sm.setSpeakerID(1032217) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I've been waiting for you, Luminous. Constantly. Since before I forgot...") + + +sm.setSpeakerID(1032217) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Lania? Lania!") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...Luminous?") + + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg1/3", 0, 0, -180, -2, -2, False, 0) +sm.sendDelay(2100) + + +sm.showFieldEffect("demonSlayer/whiteOut", 0) +sm.sendDelay(4000) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.warp(910142051, 0) diff --git a/scripts/field/enter_rock_free.py b/scripts/field/enter_rock_free.py new file mode 100755 index 0000000..5afdc3f --- /dev/null +++ b/scripts/field/enter_rock_free.py @@ -0,0 +1,29 @@ +# id 940200414 (Arcana : Deep in the Cavern Lower Path 1), field 940200414 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(300) +sm.zoomCamera(0, 2000, 0, -4714, -270) +sm.sendDelay(300) +sm.spawnNpc(3003366, -4664, -330) +sm.showNpcSpecialActionByTemplateId(3003366, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003366, "stand2", -1) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendNext("#face1#How wong am I going to be stuck wike this? I don't want to die!") +sm.zoomCamera(600, 2000, 600, -4714, -310) +sm.sendDelay(600) +sm.resetNpcSpecialActionByTemplateId(3003366) +sm.forcedAction(7, 0) +sm.showNpcSpecialActionByTemplateId(3003366, "free", 0) +sm.sendDelay(1600) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(450005431) diff --git a/scripts/field/enter_skuasDir.py b/scripts/field/enter_skuasDir.py new file mode 100755 index 0000000..0da2e76 --- /dev/null +++ b/scripts/field/enter_skuasDir.py @@ -0,0 +1,32 @@ +# id 867233150 (Abrup Basin : Skuas Forward Defense Line), field 867233150 +sm.createQuestWithQRValue(64001, "dir1=0;man=720;stage=0;enemy=104253;seq=0;mine=0;Fidx=0;companion=708435216;dir0=0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(9400676, -1795, 135) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.forcedMove(True, 300) +sm.sendDelay(1500) +sm.forcedAction(7, 0) +sm.sendDelay(300) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/finishAttack", 0) +sm.sendDelay(900) +sm.showNpcSpecialActionByTemplateId(9400676, "die1", 1) +sm.playSound("PL_3min/CubeBreak", 100) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("This battle is ours!") +sm.sendDelay(1440) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64001, "dir1=0;man=557;stage=0;enemy=104253;seq=0;mine=0;Fidx=0;companion=708435216;dir0=0") +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/3min/clearS/skeleton_clear","animation_text01_01","") +sm.playSound("PL_3min/Clear", 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face0#Victory!") +sm.openUI(1711) diff --git a/scripts/field/enter_skuasDir0.py b/scripts/field/enter_skuasDir0.py new file mode 100755 index 0000000..fe912b4 --- /dev/null +++ b/scripts/field/enter_skuasDir0.py @@ -0,0 +1,12 @@ +# id 867233050 (Abrup Basin : Skuas Forward Defense Line), field 867233050 +sm.createQuestWithQRValue(64001, "man=720;stage=0;enemy=104253;seq=0;mine=0;companion=708435216;dir0=0") +sm.createQuestWithQRValue(64001, "dir1=0;man=720;stage=0;enemy=104253;seq=0;mine=0;companion=708435216;dir0=0") +sm.createQuestWithQRValue(64002, "man=0;stage=0;enemy=4;man0=0;man1=0;companion=0") +sm.createQuestWithQRValue(64002, "man=0;stage=0;enemy=4;man0=0;man1=0;companion=8") +sm.createQuestWithQRValue(64003, "enemy0=1;enemy1=0;companion0=0;companion1=0") +sm.createQuestWithQRValue(64003, "enemy0=1;enemy1=0;companion0=7;companion1=0") +sm.createQuestWithQRValue(64002, "man=128;stage=0;enemy=4;man0=0;man1=0;companion=8") +sm.createQuestWithQRValue(64003, "enemy0=1;enemy1=0;companion0=7;man0=128;companion1=0") +sm.createQuestWithQRValue(64003, "enemy0=1;enemy1=0;companion0=7;man0=128;companion1=0;man1=35") +sm.createQuestWithQRValue(64001, "dir1=0;man=720;stage=0;enemy=104253;seq=0;mine=0;Fidx=0;companion=708435216;dir0=0") +sm.warp(867233100) diff --git a/scripts/field/enter_skuasDir4.py b/scripts/field/enter_skuasDir4.py new file mode 100755 index 0000000..5716779 --- /dev/null +++ b/scripts/field/enter_skuasDir4.py @@ -0,0 +1,35 @@ +# id 867233450 (Abrup Basin : Skuas Second Defense Line), field 867233450 +sm.createQuestWithQRValue(64001, "dir1=1;man=303;stage=3;enemy=120;seq=0;mine=0;Fidx=0;companion=316;dir0=0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(9400667, -1270, 145) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.forcedMove(True, 300) +sm.sendDelay(1500) +sm.forcedAction(7, 0) +sm.sendDelay(300) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/finishAttack", 0) +sm.sendDelay(900) +sm.showNpcSpecialActionByTemplateId(9400667, "die1", 1) +sm.playSound("PL_3min/CubeBreak", 100) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("This battle is ours!") +sm.sendDelay(1440) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64001, "dir1=1;man=121;stage=3;enemy=120;seq=0;mine=0;Fidx=0;companion=316;dir0=0") +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/3min/clearS/skeleton_clear","animation_text01_01","") +sm.playSound("PL_3min/Clear", 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Victory!") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#There's too much damage. Take cover!") +sm.createQuestWithQRValue(64002, "man=53;stage=4;enemy=1;man0=0;man1=0;companion=6") +sm.warp(867233500) diff --git a/scripts/field/enter_skuasDir5.py b/scripts/field/enter_skuasDir5.py new file mode 100755 index 0000000..b4916c7 --- /dev/null +++ b/scripts/field/enter_skuasDir5.py @@ -0,0 +1,36 @@ +# id 867233550 (Abrup Basin : Destroyed Skuas Walls), field 867233550 +sm.createQuestWithQRValue(64001, "dir1=1;man=121;stage=4;enemy=120;seq=0;mine=0;Fidx=0;companion=316;dir0=0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(9400668, -600, 145) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.forcedMove(True, 300) +sm.sendDelay(1500) +sm.forcedAction(7, 0) +sm.sendDelay(300) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/finishAttack", 0) +sm.sendDelay(900) +sm.showNpcSpecialActionByTemplateId(9400668, "die1", 1) +sm.playSound("PL_3min/CubeBreak", 100) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("This battle is ours!") +sm.sendDelay(1440) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64001, "dir1=1;man=53;stage=4;enemy=120;seq=0;mine=0;Fidx=0;companion=316;dir0=0") +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/3min/clearS/skeleton_clear","animation_text01_01","") +sm.playSound("PL_3min/Clear", 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Victory!") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#The wall has been breached!\r\nWe've got no choice. Everyone, pull back to the castle! Now!") +sm.createQuestWithQRValue(64002, "man=53;stage=5;enemy=2;man0=0;man1=0;companion=6") +sm.createQuestWithQRValue(64002, "man=53;stage=5;enemy=2;man0=0;man1=0;companion=9") +sm.warp(867233600) diff --git a/scripts/field/enter_skuasStage.py b/scripts/field/enter_skuasStage.py new file mode 100755 index 0000000..ce053d8 --- /dev/null +++ b/scripts/field/enter_skuasStage.py @@ -0,0 +1,13 @@ +# id 867233100 (Abrup Basin : Skuas Forward Defense Line), field 867233100 +sm.closeUI(1711) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/base", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/stage/0", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/map/0", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/enemy/4", 0) +sm.showFieldEffect("Map/EffectPL.img/MainStream/Skuas/screenEff/companion/8", 0) +sm.createQuestWithQRValue(64001, "dir1=0;man=720;stage=0;enemy=104253;seq=1;mine=0;Fidx=0;companion=708435216;dir0=0") +sm.playExclSoundWithDownBGM("PL_MONAD.img/effectSound/Skuas_StageStart", 100) +sm.createQuestWithQRValue(64002, "man=128;stage=1;enemy=4;man0=0;man1=0;companion=8") +sm.createQuestWithQRValue(64003, "enemy0=1;enemy1=0;companion0=7;man0=128;companion1=0;man1=35;map0=0") +sm.createQuestWithQRValue(64003, "enemy0=1;enemy1=0;companion0=7;man0=128;companion1=0;man1=35;map0=0;map1=0") +sm.warp(867233150) diff --git a/scripts/field/enter_spinep0dir.py b/scripts/field/enter_spinep0dir.py new file mode 100755 index 0000000..74d4d6c --- /dev/null +++ b/scripts/field/enter_spinep0dir.py @@ -0,0 +1,543 @@ +# Created by MechAviv + +if sm.getFieldID() == 330002040: + # Map ID :: 330002040 + # Shinsoo International School : Front Gate + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.hideUser(True) + sm.removeAdditionalEffect() + OBJECT_7 = sm.sendNpcController(1530010, -1620, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_7, "summon", 0) + OBJECT_8 = sm.sendNpcController(1530100, -300, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_8, "summon", 0) + OBJECT_9 = sm.sendNpcController(1530080, 100, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_9, "summon", 0) + OBJECT_10 = sm.sendNpcController(1530090, 200, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_10, "summon", 0) + sm.blind(1, 255, 0, 0, 0, 0, 0) + sm.sendDelay(1200) + + + sm.blind(0, 0, 0, 0, 0, 1000, 0) + sm.sendDelay(1400) + + + sm.setSpeakerID(1530011) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendNext("Empress, what are you doing here?") + + + sm.moveCamera(False, 100, -1933, 132) + + + sm.sendDelay(4059) + + + sm.flipNpcByObjectId(OBJECT_7, True) + sm.sendDelay(500) + + + sm.createFieldTextEffect("#fn나눔고딕 ExtraBold##fs26#Ereve\r\n#fs14#- Empress' Resting Spot -", 100, 1800, 4, 0, 0, 1, 4, 0, 0, 0) + sm.sendDelay(5000) + + sm.setSpeakerID(1530010) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendNext("Hello, #p1530011#.") + + + sm.setSpeakerID(1530011) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Is something on your mind?") + + + sm.setSpeakerID(1530010) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Ha... I had a funny dream.") + + + sm.setSpeakerID(1530011) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Oh? What was it?") + + + sm.setSpeakerID(1530010) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("I dreamed that I was the #p1530010# from another world.") + + + sm.setSpeakerID(1530011) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Another world...?") + + + sm.setSpeakerID(1530010) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Yes, a world very different from this one.") + + + sm.setSpeakerID(1530010) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("No dragons or magic, but wondrous machines and a great society that spanned the globe.") + + + sm.setSpeakerID(1530010) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("I was the daughter of a rich family. I was a student!") + + + sm.setSpeakerID(1530011) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Fascinating. Was anyone you know in this dream with you?") + + + sm.setSpeakerID(1530010) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Ha, that's my secret. Anyway, what's on my schedule this week, #p1530011#?") + + + sm.setSpeakerID(1530011) + sm.removeEscapeButton() + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("There is a ceremony for the knights coming up. Let's be on our way, and I can give you the details as we walk.") + + + sm.moveCamera(False, 200, -1933, -773) + + + sm.sendDelay(4519) + + + sm.changeBGM("Bgm00.img/Silence", 0, 0) + sm.setIntroBoxChat(1530100) + sm.setSpeakerType(3) + sm.sendNext("Mihile, Eckhart! Wait up, bros!") + + + sm.changeBGM("Bgm38.img/SchoolLife", 0, 0) + sm.moveCamera(False, 2000, -83, -773) + + + sm.sendDelay(924) + + + sm.moveCamera(False, 200, -83, 117) + + + sm.sendDelay(4451) + + + sm.moveNpcByObjectId(OBJECT_8, False, 220, 100) + sm.sendDelay(500) + + + sm.flipNpcByObjectId(OBJECT_9, True) + sm.flipNpcByObjectId(OBJECT_10, True) + sm.createFieldTextEffect("#fn나눔고딕 ExtraBold##fs26#Shinsoo International School\r\n#fs14#- 2019, A Street in Seoul -", 100, 2500, 4, 0, 0, 1, 4, 0, 0, 0) + sm.sendDelay(5000) + + sm.setIntroBoxChat(1530100) + sm.setSpeakerType(3) + sm.sendNext("Why you guys bookin' it so hard? Hold up!") + + + sm.setIntroBoxChat(1530090) + sm.setSpeakerType(3) + sm.sendSay("I've got places to be. I don't know what HIS excuse is.") + + + sm.setIntroBoxChat(1530080) + sm.setSpeakerType(3) + sm.sendSay("Same here.") + + + sm.setIntroBoxChat(1530100) + sm.setSpeakerType(3) + sm.sendSay("Aww, did you two have another fight?\r\nNot like I care, though. There was this smokin' chick on TV last night-") + + + OBJECT_11 = sm.sendNpcController(1530370, -400, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_11, "summon", 0) + sm.sendDelay(500) + + + sm.setIntroBoxChat(1530370) + sm.setSpeakerType(3) + sm.sendNext("Hawkeye! Get over here! I know you were the one that broke that window in the lounge yesterday!") + + + sm.setIntroBoxChat(1530100) + sm.setSpeakerType(3) + sm.sendSay("Ahh, Stan's ruining my morning again! I'm out, catch you guys later!") + + + sm.moveNpcByObjectId(OBJECT_8, False, 1300, 250) + sm.moveNpcByObjectId(OBJECT_11, False, 1400, 250) + sm.sendDelay(5500) + + + sm.setIntroBoxChat(1530100) + sm.setSpeakerType(3) + sm.sendNext("#face0#Urgh! Hey, let go of me! I've got rights, ya know!") + + + sm.setIntroBoxChat(1530370) + sm.setSpeakerType(3) + sm.sendSay("Not with me you don't!") + + + sm.sendDelay(500) + + + OBJECT_12 = sm.sendNpcController(1530110, -200, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_12, "summon", 0) + OBJECT_13 = sm.sendNpcController(1530120, -300, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_13, "summon", 0) + sm.setIntroBoxChat(1530120) + sm.setSpeakerType(3) + sm.sendNext("Hawkeye's busted again. I think it's gonna be a good day.") + + + sm.moveNpcByObjectId(OBJECT_12, False, 80, 100) + sm.moveNpcByObjectId(OBJECT_13, False, 80, 100) + sm.sendDelay(1500) + sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 1530080) + + + sm.setIntroBoxChat(1530120) + sm.setSpeakerType(3) + sm.sendNext("And look, it's Mihile and Eckhart.") + + + sm.setIntroBoxChat(1530110) + sm.setSpeakerType(3) + sm.sendSay("Why do you two hang out all the time? You must love fighting with each other.") + + + sm.sendDelay(500) + + + sm.sendDelay(2500) + sm.speechBalloon(True, 0, 0, "No way.", 2500, 1, 0, 0, 0, 4, 1530080) + sm.speechBalloon(True, 0, 0, "No way.", 2500, 1, 0, 0, 0, 4, 1530090) + + + sm.setIntroBoxChat(1530110) + sm.setSpeakerType(3) + sm.sendNext("Aww, that's sho cute!") + + + sm.showEffect("Effect/OnUserEff.img/emotion/ddam", 0, 0, 0, 0, OBJECT_9, False, 0) + sm.showEffect("Effect/OnUserEff.img/emotion/ddam", 0, 0, 0, 0, OBJECT_10, False, 0) + sm.sendDelay(2500) + + + sm.sendDelay(2500) + sm.speechBalloon(True, 0, 0, "*Sigh*", 2500, 1, 0, 0, 0, 4, 1530080) + sm.speechBalloon(True, 0, 0, "*Sigh*", 2500, 1, 0, 0, 0, 4, 1530090) + + + sm.sendNpcController(OBJECT_8, False) + sm.sendNpcController(OBJECT_11, False) + sm.flipNpcByObjectId(OBJECT_9, False) + sm.flipNpcByObjectId(OBJECT_10, False) + sm.moveNpcByObjectId(OBJECT_9, False, 800, 120) + sm.moveNpcByObjectId(OBJECT_10, False, 800, 120) + sm.moveCamera(False, 200, 417, 117) + + + sm.sendDelay(4500) + + + OBJECT_14 = sm.sendNpcController(1530070, 400, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_14, "summon", 0) + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendNext("What are you guys doing here?") + + + OBJECT_15 = sm.sendNpcController(1530060, -400, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_15, "summon", 0) + OBJECT_16 = sm.sendNpcController(1530360, -550, 100) + sm.showNpcSpecialActionByObjectId(OBJECT_16, "summon", 0) + sm.moveCamera(False, 200, 117, 117) + sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 1530120) + + + sm.moveNpcByObjectId(OBJECT_14, True, 300, 100) + sm.sendDelay(3500) + + + sm.setIntroBoxChat(1530120) + sm.setSpeakerType(3) + sm.sendNext("Well hello to you too, Mr. Class President. Are you here to make sure Cygnus gets to school safely? How loyal of you.") + + + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendSay("Yes, I am. Since it is one of my duties as Class President. Or did you forget she practically owns the school?") + + + sm.moveNpcByObjectId(OBJECT_12, False, 800, 120) + sm.moveNpcByObjectId(OBJECT_13, False, 800, 120) + sm.moveNpcByObjectId(OBJECT_14, True, 250, 100) + sm.moveCamera(False, 200, -83, 117) + + + sm.sendDelay(1000) + + + sm.sendDelay(5000) + + + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendNext("Good morning, Miss Cygnus.") + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendSay("Oh, good morning Neinheart.") + + + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendSay("You look like something's on your mind.") + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendSay("Ha, I had a funny dream last night.") + + + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendSay("Really? What was it?") + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendSay("I had a dream that I was the Cygnus from another world.") + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendSay("That world had dragons and magic, and I was an empress with lots of knights, and I lived on an island that floats in the sky. Pretty neat, right?") + + + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendSay("Sounds like something from a video game. I didn't know you were into that.") + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendSay("#face0#Ha ha. Yeah, it was pretty ridiculous.\r\nSo, Neinheart, what do we have planned for this week?") + + + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendSay("We have a new #btransfer student#k coming this week. We'll need to-") + + + sm.sendDelay(2500) + sm.speechBalloon(True, 0, 0, "!", 2500, 1, 0, 0, 0, 4, 1530060) + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendNext("Transfer student? We've got a transfer student coming?") + + + sm.setIntroBoxChat(1530070) + sm.setSpeakerType(3) + sm.sendSay("Hm...? Why are you so excited?") + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendSay("Ah, it's nothing.") + + + sm.sendDelay(200) + + + sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, OBJECT_15, False, 0) + sm.sendDelay(2000) + + + sm.setIntroBoxChat(1530060) + sm.setSpeakerType(3) + sm.sendNext("I just... like meeting new students.") + + + sm.blind(1, 255, 0, 0, 0, 500, 0) + sm.sendDelay(500) + + + sm.hideUser(False) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.sendNpcController(OBJECT_7, False) + sm.sendNpcController(OBJECT_9, False) + sm.sendNpcController(OBJECT_10, False) + sm.sendNpcController(OBJECT_12, False) + sm.sendNpcController(OBJECT_13, False) + sm.sendNpcController(OBJECT_14, False) + sm.sendNpcController(OBJECT_15, False) + sm.sendNpcController(OBJECT_16, False) + sm.warp(330002041, 0) +elif sm.getFieldID() == 330002041: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.hideUser(True) + sm.removeAdditionalEffect() + sm.blind(1, 255, 0, 0, 0, 0, 0) + sm.sendDelay(1200) + + + sm.blind(0, 0, 0, 0, 0, 1000, 0) + sm.sendDelay(1400) + + + sm.sendDelay(1000) + + + sm.showFieldEffect("Map/Effect2.img/spinOff1/title", 0) + sm.sendDelay(2500) + + + sm.blind(1, 255, 0, 0, 0, 500, 0) + sm.sendDelay(500) + + + sm.hideUser(False) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.warp(330002042, 0) +elif sm.getFieldID() == 330002042: + # Map ID :: 330002042 + # Shinsoo International School : Dorm + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.hideUser(True) + sm.removeAdditionalEffect() + sm.blind(1, 255, 0, 0, 0, 0, 0) + OBJECT_1 = sm.sendNpcController(1530000, 320, 5) + sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) + sm.sendDelay(1000) + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendNext("Oh man, another day at school...") + + + sm.blind(1, 255, 0, 0, 0, 0, 0) + sm.sendDelay(1200) + + + sm.blind(0, 0, 0, 0, 0, 1000, 0) + sm.sendDelay(1400) + + + sm.moveNpcByObjectId(OBJECT_1, False, 150, 150) + sm.sendDelay(2500) + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendNext("I'm so sick of this grind. Every day, the same old garbage.") + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendSay("Who wants to go to an 'international school', anyway?\r\nAnd what kind of a name is #bShinsoo International School#k?") + + + sm.moveNpcByObjectId(OBJECT_1, True, 150, 150) + sm.sendDelay(2500) + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendNext("I never fit in wherever I go. It's not gonna be any better here.") + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendSay("God, it's all so BORING! Why couldn't life be more exciting? I wish I could be #banywhere but here#k!") + + + sm.sendDelay(2000) + sm.speechBalloon(True, 0, 0, "...?!", 2500, 1, 0, 0, 0, 4, 1530000) + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendNext("...What's with that closet?") + + + sm.moveNpcByObjectId(OBJECT_1, True, 50, 100) + sm.sendDelay(2000) + + + sm.showEffect("Map/Obj/spinOff1.img/frame/ani/0", 10000, 0, -30, 0, OBJECT_1, False, 0) + sm.sendDelay(300) + + + sm.showEffect("Map/Obj/spinOff1.img/frame/ani/0", 10000, 10, -60, 0, OBJECT_1, False, 0) + sm.sendDelay(300) + + + sm.showEffect("Map/Obj/spinOff1.img/frame/ani/0", 10000, 20, -55, 0, OBJECT_1, False, 0) + sm.sendDelay(300) + + + sm.showEffect("Map/Obj/spinOff1.img/frame/ani/0", 10000, -10, -70, 0, OBJECT_1, False, 0) + sm.sendDelay(300) + + + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendNext("W-whaaaaaa THIS ISN'T WHAT I MEANT!!") + + + sm.blind(1, 255, 240, 240, 240, 1300, 0) + sm.sendDelay(1600) + + + sm.hideUser(False) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.startQuest(32707) + sm.sendNpcController(OBJECT_1, False) + sm.warp(100000004, 0) diff --git a/scripts/field/enter_stageEffect.py b/scripts/field/enter_stageEffect.py new file mode 100755 index 0000000..8e970cb --- /dev/null +++ b/scripts/field/enter_stageEffect.py @@ -0,0 +1,9 @@ +from net.swordie.ms.constants import WzConstants + +sm.showFieldEffect(""+ WzConstants.EFFECT_MONSTER_PARK_STAGE) +sm.showFieldEffect(""+ WzConstants.EFFECT_MONSTER_PARK_STAGE_NUMBER +"1") + +while sm.hasMobsInField(): + sm.waitForMobDeath() + +sm.showFieldEffect(""+ WzConstants.EFFECT_CLEAR) \ No newline at end of file diff --git a/scripts/field/enter_underbase.py b/scripts/field/enter_underbase.py new file mode 100755 index 0000000..d43a495 --- /dev/null +++ b/scripts/field/enter_underbase.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# Map ID :: 310010000 +# Resistance Headquarters : Secret Plaza + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/field/enter_visitor_1.py b/scripts/field/enter_visitor_1.py new file mode 100755 index 0000000..f2e04f7 --- /dev/null +++ b/scripts/field/enter_visitor_1.py @@ -0,0 +1,18 @@ + +from time import sleep +mobsPerRound = 10 + +if sm.hasFieldProperty("Visitor1"): + sm.dispose() +else: + sm.setFieldProperty("Visitor1", True) + for x in range(mobsPerRound): + sm.spawnMob(9390101, 350, 32, False, 100000000000) + sm.spawnMob(9390100, 350, 32, False, 100000000000) + sm.spawnMob(9390101, 1340, -254, False, 100000000000) + sm.spawnMob(9390100, 1340, -254, False, 100000000000) + sm.spawnMob(9390101, 1328, 32, False, 100000000000) + sm.spawnMob(9390100, 1328, 32, False, 100000000000) + sm.spawnMob(9390101, 314, -311, False, 100000000000) + sm.spawnMob(9390100, 314, -311, False, 100000000000) + sleep(0.1) diff --git a/scripts/field/enter_visitor_2.py b/scripts/field/enter_visitor_2.py new file mode 100755 index 0000000..09bd175 --- /dev/null +++ b/scripts/field/enter_visitor_2.py @@ -0,0 +1,17 @@ +from time import sleep +mobsPerRound = 10 + +if sm.hasFieldProperty("Visitor2"): + sm.dispose() +else: + sm.setFieldProperty("Visitor2", True) + for x in range(mobsPerRound): + sm.spawnMob(9390101, 1043, 32, False, 100000000000) + sm.spawnMob(9390102, 1043, 32, False, 100000000000) + sm.spawnMob(9390101, 785, -311, False, 100000000000) + sm.spawnMob(9390102, 785, -311, False, 100000000000) + sm.spawnMob(9390101, 828, -612, False, 100000000000) + sm.spawnMob(9390102, 828, -612, False, 100000000000) + sm.spawnMob(9390101, 1837 ,-372, False, 100000000000) + sm.spawnMob(9390102, 1837 ,-372, False, 100000000000) + sleep(0.1) \ No newline at end of file diff --git a/scripts/field/enter_visitor_3.py b/scripts/field/enter_visitor_3.py new file mode 100755 index 0000000..dfb6e99 --- /dev/null +++ b/scripts/field/enter_visitor_3.py @@ -0,0 +1,5 @@ +if sm.hasFieldProperty("Visitor3"): + sm.dispose() +else: + sm.setFieldProperty("Visitor3", True) + sm.spawnMob(9390110, 267, 32, False, 4000000000000) \ No newline at end of file diff --git a/scripts/field/enter_visitor_4.py b/scripts/field/enter_visitor_4.py new file mode 100755 index 0000000..9b1e750 --- /dev/null +++ b/scripts/field/enter_visitor_4.py @@ -0,0 +1,17 @@ +from time import sleep +mobsPerRound = 10 + +if sm.hasFieldProperty("Visitor4"): + sm.dispose() +else: + sm.setFieldProperty("Visitor4", True) + for x in range(mobsPerRound): + sm.spawnMob(9390104, 165, 32, False, 100000000000) + sm.spawnMob(9390103, 165, 32, False, 100000000000) + sm.spawnMob(9390104, 945, -719, False, 100000000000) + sm.spawnMob(9390103, 945, -719, False, 100000000000) + sm.spawnMob(9390104, 498, -345, False, 100000000000) + sm.spawnMob(9390103, 498, -345, False, 100000000000) + sm.spawnMob(9390104, 1221, 32, False, 100000000000) + sm.spawnMob(9390103, 1221, 32, False, 100000000000) + sleep(0.1) \ No newline at end of file diff --git a/scripts/field/enter_visitor_5.py b/scripts/field/enter_visitor_5.py new file mode 100755 index 0000000..3087ba6 --- /dev/null +++ b/scripts/field/enter_visitor_5.py @@ -0,0 +1,5 @@ +if sm.hasFieldProperty("Visitor5"): + sm.dispose() +else: + sm.setFieldProperty("Visitor5", True) + sm.spawnMob(9430020, 309, 32, False, 6000000000000) \ No newline at end of file diff --git a/scripts/field/enter_warZone1_0_1st.py b/scripts/field/enter_warZone1_0_1st.py new file mode 100755 index 0000000..a8044e9 --- /dev/null +++ b/scripts/field/enter_warZone1_0_1st.py @@ -0,0 +1,28 @@ +# Occupied reclamation HQ | Used for Magnus prequest +from net.swordie.ms.constants import WzConstants + +sm.chatScript("Defeat all Specters inside Heliseum Reclamation HQ.") +sm.spawnMob(2400122, -599, 182, False) #Specter miner +sm.spawnMob(2400122, -449, 93, False) #Specter miner +sm.spawnMob(2400122, 96, 182, False) #Specter miner +sm.spawnMob(2400122, 650, 182, False) #Specter miner +sm.spawnMob(2400122, 1232, 182, False) #Specter miner +sm.spawnMob(2400121, -201, 182, False) #Specter tamer +sm.spawnMob(2400121, 70, 93, False) #Specter tamer +sm.spawnMob(2400121, -655, 182, False) #Specter tamer +sm.spawnMob(2400121, -1228, 182, False) #Specter tamer +sm.spawnMob(2400121, 244, 93, False) #Specter tamer +sm.spawnMob(2400121, 522, 182, False) #Specter tamer +sm.spawnMob(2400121, 1162, 182, False) #Specter tamer +sm.spawnMob(2400121, -1309, 182, False) #Specter tamer +sm.spawnMob(2400120, -1309, 182, False) #Specter battle hound +sm.spawnMob(2400120, -290, 182, False) #Specter battle hound +sm.spawnMob(2400120, -239, 93, False) #Specter battle hound +sm.spawnMob(2400120, -866, 182, False) #Specter battle hound +sm.spawnMob(2400120, 91, 182, False) #Specter battle hound +sm.spawnMob(2400120, 1237, 182, False) #Specter battle hound +sm.spawnMob(2400120, -1581, 182, False) #Specter battle hound +sm.spawnMob(2400120, -1107, 182, False) #Specter battle hound +while sm.hasMobsInField(): + sm.waitForMobDeath() +sm.showEffectToField(WzConstants.EFFECT_DOJO_CLEAR) diff --git a/scripts/field/enter_warZone1_1_1st.py b/scripts/field/enter_warZone1_1_1st.py new file mode 100755 index 0000000..63ed553 --- /dev/null +++ b/scripts/field/enter_warZone1_1_1st.py @@ -0,0 +1,30 @@ +# Occupied reclamation HQ | Used for Magnus prequest +from net.swordie.ms.constants import WzConstants + + +sm.showFieldEffect("Map/Effect.img/monsterPark/stageEff/stage") +sm.showFieldEffect("Map/Effect.img/monsterPark/stageEff/number/1") +sm.spawnMob(2400109, -552, 182, False) +sm.spawnMob(2400109, -296, 182, False) +sm.spawnMob(2400109, -187, 182, False) +sm.spawnMob(2400109, -129, 182, False) +sm.spawnMob(2400109, 93, 182, False) +sm.spawnMob(2400109, 346, 182, False) +sm.spawnMob(2400109, 478, 182, False) +sm.spawnMob(2400109, 649, 182, False) +sm.spawnMob(2400109, 804, 182, False) +sm.spawnMob(2400109, 863, 182, False) +sm.spawnMob(2400109, 870, 182, False) +sm.spawnMob(2400109, 920, 182, False) +sm.spawnMob(2400109, 1000, 182, False) +sm.spawnMob(2400109, 1075, 182, False) +sm.spawnMob(2400109, 1120, 182, False) +sm.spawnMob(2400109, 1180, 182, False) +sm.spawnMob(2400109, 1220, 182, False) +sm.spawnMob(2400109, 1275, 182, False) +sm.spawnMob(2400109, 1300, 182, False) +sm.spawnMob(2400109, 1352, 182, False) +if sm.getChr().getField().getMobs().size() == 0: + sm.showEffect(WzConstants.EFFECT_MONSTER_PARK_CLEAR) + + diff --git a/scripts/field/enter_warZone1_1_2nd.py b/scripts/field/enter_warZone1_1_2nd.py new file mode 100755 index 0000000..7fb3a96 --- /dev/null +++ b/scripts/field/enter_warZone1_1_2nd.py @@ -0,0 +1,32 @@ +# Occupied reclamation HQ | Used for Magnus prequest +from net.swordie.ms.constants import WzConstants + + +sm.showEffect(WzConstants.EFFECT_MONSTER_PARK_FINAL_STAGE) +sm.spawnMob(2400109, -540, 182, False) +sm.spawnMob(2400109, -348, 182, False) +sm.spawnMob(2400109, -191, 182, False) +sm.spawnMob(2400109, -95, 182, False) +sm.spawnMob(2400109, 172, 182, False) +sm.spawnMob(2400109, 346, 182, False) +sm.spawnMob(2400109, 554, 182, False) +sm.spawnMob(2400109, 691, 182, False) +sm.spawnMob(2400109, 829, 182, False) +sm.spawnMob(2400109, 895, 182, False) +sm.spawnMob(2400109, 1073, 182, False) +sm.spawnMob(2400109, 1266, 182, False) +sm.spawnMob(2400109, -414, -118, False) +sm.spawnMob(2400109, -279, -118, False) +sm.spawnMob(2400109, -87, -118, False) +sm.spawnMob(2400109, 94, -487, False) +sm.spawnMob(2400109, 115, -487, False) +sm.spawnMob(2400109, 178, -487, False) +sm.spawnMob(2400109, 381, -487, False) +sm.spawnMob(2400109, 603, -487, False) +sm.spawnMob(2400109, 752, -487, False) +sm.spawnMob(2400018, 1181, -178, False) + +if sm.getChr().getField().getMobs().size() == 0: + sm.showEffect(WzConstants.EFFECT_MONSTER_PARK_CLEAR) + + diff --git a/scripts/field/eunwol_house.py b/scripts/field/eunwol_house.py new file mode 100755 index 0000000..131e7ec --- /dev/null +++ b/scripts/field/eunwol_house.py @@ -0,0 +1,13 @@ +# 410000001 +if sm.hasQuest(38002): + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("What happened? A house and a new name... But what happened to my friends? Are they alive? If I am, then maybe we failed to seal the Black Mage...") + sm.sendSay("No. They wouldn't give up that easily. They're probably hiding out somewhere, waiting to get back together. I need to look after myself for now, and get my strength back.") + sm.sendSay("Level 10... It's better than nothing, but it's not the best feeling. I'll hang around and get stronger. That's the only thing I can do now.") + sm.setQRValue(38002, "clear", False) +elif sm.hasQuest(38018): + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("W-what is that thing? It looks so fuzzy. I don't think I should touch it...") + sm.setQRValue(38018, "clear", False) \ No newline at end of file diff --git a/scripts/field/eunwol_tuto_1.py b/scripts/field/eunwol_tuto_1.py new file mode 100755 index 0000000..4a89aac --- /dev/null +++ b/scripts/field/eunwol_tuto_1.py @@ -0,0 +1,41 @@ +# 927030000 +PHANTOM = 2159439 +LUMINOUS = 2159467 + +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.forcedInput(0) + +sm.spawnNpc(PHANTOM, 1210, 10) +sm.showNpcSpecialActionByTemplateId(PHANTOM, "summon") + +sm.spawnNpc(LUMINOUS, 830, 10) +sm.showNpcSpecialActionByTemplateId(LUMINOUS, "summon") +sm.sendDelay(1000) + +sm.removeEscapeButton() + +sm.setSpeakerID(PHANTOM) +sm.sendNext("I knew I wasn't going to like you from the start. You're too stuffy.") + +sm.setSpeakerID(LUMINOUS) +sm.sendSay("The feeling is mutual, I assure you.") + +sm.setSpeakerID(PHANTOM) +sm.sendSay("I'm glad we're on the same page. And yet we were sent here together to wait for the end... Maybe Freud has a better sense of humor than I thought.") +sm.sendDelay(500) + +sm.hideUser(False) +sm.avatarOriented("Effect/BasicEff.img/Summoned") +sm.sendDelay(2000) + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("Who knows, but he might get mad for real if we keep putting off time.") + +sm.setSpeakerID(PHANTOM) +sm.sendSay("Freud? Mad? Now that's funny.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("More like we won't ever see each other again. I'll head in first, I'm feeling a bad energy.") + +sm.forcedInput(1) diff --git a/scripts/field/eunwol_tuto_1_1.py b/scripts/field/eunwol_tuto_1_1.py new file mode 100755 index 0000000..0278ecc --- /dev/null +++ b/scripts/field/eunwol_tuto_1_1.py @@ -0,0 +1,25 @@ +# 927030000 +PHANTOM = 2159439 +LUMINOUS = 2159467 + +sm.forcedInput(0) +sm.sendDelay(500) + +sm.hideUser(True) +sm.sendDelay(1000) + +sm.moveCamera(False, 100, 1000, 18) + +sm.removeEscapeButton() +sm.setSpeakerID(PHANTOM) +sm.sendNext("Don't waste your time moping around up here, staring into the distance. It's not as romantic as it seems...") +sm.sendDelay(500) + +sm.showNpcSpecialActionByTemplateId(PHANTOM, "teleportation") +sm.sendDelay(840) + +sm.removeNpc(PHANTOM) +sm.sendDelay(500) + +sm.removeNpc(LUMINOUS) +sm.warp(927030010, 0) diff --git a/scripts/field/eunwol_tuto_2.py b/scripts/field/eunwol_tuto_2.py new file mode 100755 index 0000000..a2aa449 --- /dev/null +++ b/scripts/field/eunwol_tuto_2.py @@ -0,0 +1,154 @@ +# Hidden Street : Temple of Time Corridor 2 (927030010) | Used for Luminous&Shade tutorial (so far) +ARAN = 2159441 + +if chr.getJob() == 2005: + VOID_PRIEST = 2159442 + VOID_PRIEST_2 = 2159443 + VOID_PRIEST_3 = 2159444 + + sm.lockInGameUI(True, False) + sm.hideUser(False) + sm.sendDelay(1000) + + sm.removeEscapeButton() + sm.setSpeakerID(ARAN) + sm.sendNext("...Ugh, Phantom and Luminous are always at it. They're almost literally opposites.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("I think they're perfect for each other. One's a chatterbox and the other is boring. They're like a never-ending stand-up routine.") + + sm.setSpeakerID(ARAN) + sm.sendSay("Hah, true that. You know they'd take you apart if they heard you say that. Oh, look, another round of monsters coming.") + + sm.moveCamera(False, 200, 1100, 66) + + sm.spawnNpc(VOID_PRIEST, 770, 50) + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST, "summon") + sm.sendDelay(100) + + sm.spawnNpc(VOID_PRIEST_2, 970, 50) + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_2, "summon") + sm.sendDelay(100) + + sm.spawnNpc(VOID_PRIEST_3, 1170, 50) + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_3, "summon") + sm.sendDelay(300) + + sm.moveCamera(True, 200, 0, 0) + + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("Here, I'll take care of them.") + + sm.forcedInput(1) + sm.moveCamera(False, 180, 1100, 66) + + sm.forcedInput(0) + sm.sendDelay(500) + + sm.forcedAction(412, 900) + sm.showEffectOnPosition("Skill/512.img/skill/5121007/effect", 900, -40, -25) + sm.showEffectOnPosition("Skill/512.img/skill/5121007/effect0", 810, -40, -25) + sm.playSound("eunwolTuto/Use", 100) + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST, "hit") + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_2, "hit") + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_3, "hit") + sm.showNpcEffectOnPosition("Skill/512.img/skill/5121007/hit/0", -5, -50, VOID_PRIEST) + sm.showNpcEffectOnPosition("Skill/512.img/skill/5121007/hit/0", -5, -50, VOID_PRIEST_2) + sm.showNpcEffectOnPosition("Skill/512.img/skill/5121007/hit/0", -5, -50, VOID_PRIEST_2) + sm.playSound("eunwolTuto/Hit", 100) + sm.showEffectOnPosition("Skill/512.img/skill/5121020/effect", 900, -40, -25) + sm.showEffectOnPosition("Skill/512.img/skill/5121020/effect0", 810, -40, -25) + sm.playSound("eunwolTuto/Use", 100) + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST, "hit") + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_2, "hit") + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_3, "hit") + sm.showNpcEffectOnPosition("Skill/512.img/skill/5121020/hit/0", -5, -50, VOID_PRIEST) + sm.showNpcEffectOnPosition("Skill/512.img/skill/5121020/hit/0", -5, -50, VOID_PRIEST_2) + sm.showNpcEffectOnPosition("Skill/512.img/skill/5121020/hit/0", -5, -50, VOID_PRIEST_2) + sm.playSound("eunwolTuto/Hit", 100) + sm.sendDelay(600) + + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST, "die") + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_2, "die") + sm.showNpcSpecialActionByTemplateId(VOID_PRIEST_3, "die") + sm.sendDelay(2100) + + sm.removeNpc(VOID_PRIEST) + sm.removeNpc(VOID_PRIEST_2) + sm.removeNpc(VOID_PRIEST_3) + sm.sendDelay(800) + + sm.forcedInput(2) + sm.moveCamera(True, 200, 0, 0) + + sm.forcedInput(0) + sm.sendDelay(500) + + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("Are you gonna stay?") + + sm.setSpeakerID(ARAN) + sm.sendSay("Yes, somebody's gotta watch this hall. I'm not ready for the Black Mage just yet.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("I'll go in first. See you later. ") + + sm.setSpeakerID(ARAN) + sm.sendSay("Okay!") + + sm.forcedInput(2) + sm.dispose() +elif chr.getJob() == 2004: + # TODO: replace the invokeAfterDelay to sendDelay. + WHITE_PRIEST = 2159360 + BLACK_PRIEST = 2159361 + + sm.removeEscapeButton() + + sm.lockInGameUI(True) + + sm.setCameraOnNpc(ARAN) + sm.teleportInField(1000, 0) + + sm.spawnNpc(WHITE_PRIEST, 1320, 69) + sm.flipNpcByTemplateId(WHITE_PRIEST, False) + sm.spawnNpc(BLACK_PRIEST, 1240, 69) + sm.flipNpcByTemplateId(BLACK_PRIEST, False) + + sm.invokeAfterDelay(2000, "showBalloonMsg", "Effect/Direction8.img/effect/tuto/BalloonMsg0/5", 2000) + sm.invokeAfterDelay(3500, "showNpcSpecialActionByTemplateId", ARAN, "attack") + sm.invokeAfterDelay(5000, "showNpcSpecialActionByTemplateId", WHITE_PRIEST, "die") + sm.invokeAfterDelay(5000, "showNpcSpecialActionByTemplateId", BLACK_PRIEST, "die") + + sm.invokeAfterDelay(6500, "hideNpcByTemplateId", WHITE_PRIEST, True) + sm.invokeAfterDelay(6500, "hideNpcByTemplateId", BLACK_PRIEST, True) + + sm.invokeAfterDelay(6500, "forcedMove", False, 250) + sm.setSpeakerID(ARAN) + sm.invokeAfterDelay(7000, "sendNext", "I figured you'd have your hands full right now, but here you are goofing around!") + + sm.setPlayerAsSpeaker() + sm.sendNext("Aran! You're wounded! Where are Mercedes and Freud?") + + sm.setSpeakerID(ARAN) + sm.sendNext("Ah, it's nothing. Those two got a head start on me. " + "They might even be fighting the Black Mage right now...") + + sm.setPlayerAsSpeaker() + sm.sendNext("Can you go on?") + + sm.setSpeakerID(ARAN) + sm.sendNext("Aww, are you worried about me? " + "I'm fine! Just... get in there, okay? " + "You don't want to let Mercedes and Freud hog all the glory. " + "I'll stay here and fend off anybody trying to get in...") + + sm.setPlayerAsSpeaker() + sm.sendNext("...Be careful") + + sm.forcedMove(False, 500) + sm.invokeAfterDelay(4000, "showBalloonMsg", "Effect/Direction8.img/effect/tuto/BalloonMsg0/7", 2000) + sm.invokeAfterDelay(4500, "showEffect", "Effect/Direction8.img/effect/tuto/BalloonMsg0/6", 2000, -300, -100, 0, 0, True, 0) + sm.invokeAfterDelay(6900, "lockInGameUI", False) + sm.invokeAfterDelay(7000, "warp", 927020060) + sm.dispose() \ No newline at end of file diff --git a/scripts/field/eunwol_tuto_2_2.py b/scripts/field/eunwol_tuto_2_2.py new file mode 100755 index 0000000..b682289 --- /dev/null +++ b/scripts/field/eunwol_tuto_2_2.py @@ -0,0 +1,13 @@ +# 927030010 +sm.forcedInput(0) +sm.sendDelay(100) + +sm.hideUser(True) +sm.blind(1, 200, 0, 1000) +sm.sendDelay(1000) + +sm.sayMonologue("\r\n\r\n\r\nAran felt uneasy.", False) +sm.sayMonologue("\r\n\r\nSomething made her think that perhaps this was the last time she would see her friend. Was it intuition? Or maybe an omen.", True) + +sm.createQuestWithQRValue(38900, "1") +sm.warp(927030050, 0) diff --git a/scripts/field/eunwol_tuto_3.py b/scripts/field/eunwol_tuto_3.py new file mode 100755 index 0000000..c54c641 --- /dev/null +++ b/scripts/field/eunwol_tuto_3.py @@ -0,0 +1,102 @@ +# 927030020 +EUNWOL = 2159449 +LUMINOUS = 2159467 +FREUD = 2159445 + +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.forcedInput(0) + +sm.spawnNpc(EUNWOL, 215, -85) +sm.showNpcSpecialActionByTemplateId(EUNWOL, "summon") +sm.moveCamera(False, 400, 215, -85) + +sm.blind(1, 200, 0, 1000) +sm.sendDelay(1000) + +sm.sayMonologue("\r\n\r\nThings were looking grim.", False) +sm.sayMonologue("\r\nThe Black Mage was stronger than anyone expected.", False) +sm.sayMonologue("\r\nThe heroes could not overcome the incredible power wielded by the Black Mage.", True) + +sm.sayMonologue("\r\n\r\n\r\n\r\nThere was only one option left,\r\n\r\n\r\n to seal the Black Mage behind the Seal of Time.", True) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1000) + + +sm.removeEscapeButton() + +sm.setSpeakerID(LUMINOUS) +sm.sendNext("I've activated all five seals! ...Now what?") + +sm.setSpeakerID(FREUD) +sm.sendSay("All there is left to do is take the Black Mage's Power of Time. There's just...one catch.") + +sm.setSpeakerID(LUMINOUS) +sm.sendSay("Catch? What kind of catch?") + +sm.setSpeakerID(FREUD) +sm.sendSay("To activate the Seal of Time, we need the time from a person, a #r#eliving person#k#n. Like a sacrifice. Don't make that face. I will do it.") + +sm.setSpeakerID(LUMINOUS) +sm.sendSay("Don't say that! Why would you do that?") + +sm.setSpeakerID(FREUD) +sm.sendSay("Because I made it. Besides, I like the idea of being the big hero for once! I'm tired of cleaning up your messes anyway.") + +sm.setSpeakerID(LUMINOUS) +sm.sendSay("How can you make jokes in this situation? No, I'll do it. I've got nothing to lose.") + +sm.setSpeakerID(FREUD) +sm.sendSay("Luminous, I know how you feel, but this...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I'll do it.") + +sm.setSpeakerID(FREUD) +sm.sendSay("Oh, stop it. We have the fate of Maple World in our hands right now. We can't be getting emotional now.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("That's why I'll do it. You know better than anyone here that your health cannot handle the seal.") + +sm.setSpeakerID(FREUD) +sm.sendSay("......") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Luminous, you're the only one who can activate the seal. We need your power of light to end this.") + +sm.setSpeakerID(LUMINOUS) +sm.sendSay("But we have to sacrifice someone! How can we decide something like that?") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("It's easy. Let me do it. I have no family, no clan, no one to miss me. Except you lot, I suppose.") +sm.sendSay("Look, we're running out of time. Let's get this over with, and then we can argue about it in the afterlife. Deal?") +sm.sendDelay(500) + +sm.moveNpcByTemplateId(LUMINOUS, True, 180, 100) +sm.sendDelay(2000) + +sm.showBalloonMsg("Effect/Direction15.img/effect/story/BalloonMsg0/0", 0) +sm.sendDelay(2500) + +sm.showBalloonMsg("Effect/Direction15.img/effect/story/BalloonMsg0/1", 0) +sm.sendDelay(2000) + +sm.showBalloonMsgOnNpc("Effect/Direction15.img/effect/story/BalloonMsg0/2", 0, LUMINOUS) +sm.sendDelay(2000) + +sm.showBalloonMsgOnNpc("Effect/BasicEff.img/Teleport", 0, 0, 0, LUMINOUS) +sm.removeNpc(LUMINOUS) +sm.sendDelay(300) + +sm.moveCamera(True, 400, 0, 0) + +sm.hideUser(False) +sm.avatarOriented("Effect/BasicEff.img/Teleport") +sm.sendDelay(1000) + +sm.sendNext("All right, let's do this.") +sm.sendDelay(500) + +sm.createQuestWithQRValue(38907, "2") +sm.warp(927030050, 0) \ No newline at end of file diff --git a/scripts/field/eunwol_tuto_3_5.py b/scripts/field/eunwol_tuto_3_5.py new file mode 100755 index 0000000..79133dc --- /dev/null +++ b/scripts/field/eunwol_tuto_3_5.py @@ -0,0 +1,33 @@ +# 927030030 +seals = [ +[600, -510], +[-600, -510], +[150, -720], +[-150, -720], +[0, -280], +] + +sm.lockInGameUI(True, False) +sm.hideUser(False) +sm.forcedInput(0) +sm.sendDelay(1000) + +for seal in seals: + sm.playSound("eunwolTuto/seal", 100) + sm.avatarOriented("Effect/Direction15.img/effect/tuto/seal/front") + sm.avatarOriented("Effect/Direction15.img/effect/tuto/seal/back") + sm.sendDelay(300) + + sm.playSound("eunwolTuto/particle", 100) + sm.moveParticleEff("eunwol_seal", 0, -345, seal[0], seal[1], 1500, 50, 2, 5) + sm.sendDelay(1500) + + sm.playSound("eunwolTuto/seal_stone", 100) + sm.showEffect("Effect/Direction15.img/effect/tuto/seal/stone", 0, seal[0], seal[1] + 200, 0, 0, True, 0) + if seal[0] == 0: + sm.sendDelay(600) + else: + sm.sendDelay(1000) + +sm.setQRValue(38907, "3") +sm.warp(927030050, 0) \ No newline at end of file diff --git a/scripts/field/eunwol_tuto_5.py b/scripts/field/eunwol_tuto_5.py new file mode 100755 index 0000000..5650021 --- /dev/null +++ b/scripts/field/eunwol_tuto_5.py @@ -0,0 +1,36 @@ +# 927030040 +seals = [ + [600, -510], + [-600, -510], + [150, -720], + [-150, -720], + [0, -280], +] + +sm.lockInGameUI(True, False) +sm.hideUser(False) +sm.sendDelay(1000) + +sm.playSound("eunwolTuto/seal", 100) +sm.avatarOriented("Effect/Direction15.img/effect/tuto/seal/front") +sm.avatarOriented("Effect/Direction15.img/effect/tuto/seal/back") + +sm.playSound("eunwolTuto/particle", 100) +for seal in seals: + sm.moveParticleEff("eunwol_seal", 0, -345, seal[0], seal[1], 1500, 50, 2, 5) +sm.sendDelay(1500) + +for seal in seals: + sm.showEffect("Effect/Direction15.img/effect/tuto/seal/stone", 0, seal[0], seal[1] + 200, 0, 0, True, 0) +sm.sendDelay(600) + +sm.hideUser(True) +sm.sendDelay(1000) + +sm.showBalloonMsg("Effect/Direction15.img/effect/story/BalloonMsg0/3", 0) +sm.startQuest(38900) +sm.createQuestWithQRValue(38900, "1") +sm.sendDelay(2000) + +sm.blind(1, 255, 0, 0) +sm.warp(940200000, 0) \ No newline at end of file diff --git a/scripts/field/eunwol_tuto_6.py b/scripts/field/eunwol_tuto_6.py new file mode 100755 index 0000000..c0cdb7c --- /dev/null +++ b/scripts/field/eunwol_tuto_6.py @@ -0,0 +1,68 @@ +# 940200000 +sm.lockInGameUI(True) +sm.hideUser(True) +sm.forcedInput(0) +if "2" in sm.getQRValue(38900): + sm.showFieldEffect("Map/Effect2.img/eunwol/gofoxvillage") + sm.sendDelay(3000) + + sm.hideUser(False) + sm.warp(940200010, 0) +elif "1" in sm.getQRValue(38900): + sm.sendDelay(3000) + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("......") + sm.sendSay("Did I...die?") + sm.sendSay("......") + sm.sendSay("I guess there is no afterlife. Freud will be pretty disappointed.") + sm.sendSay("......") + sm.sendDelay(2000) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/0", 3200, 300, -210, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/1", 2900, -300, -70, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/2", 2600, 300, 0, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/3", 2300, -300, 70, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/4", 2000, 300, 210, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.sendNext("What's that sound?") + sm.sendDelay(500) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/5", 3200, -300, -70, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/6", 2900, 300, -210, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/7", 2600, -300, 70, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/8", 2300, 300, 0, -2, -2, False, 0) + sm.sendDelay(300) + + sm.showEffect("Effect/Direction15.img/effect/story/BalloonMsg1/9", 2000, 300, 210, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.sendNext("It's getting loud. Maybe it's them. Maybe I'm not ready to go to the afterlife just yet.") + + sm.blind(1, 250, 240, 240, 240, 3000) + sm.sendDelay(3000) + + sm.blind(0, 0, 0, 1000) + sm.sendDelay(1000) + + sm.showFieldEffect("Map/Effect2.img/eunwol/meetfox") + sm.sendDelay(3200) + sm.levelUntil(10) + + sm.hideUser(False) + sm.warp(940200010, 0) \ No newline at end of file diff --git a/scripts/field/eunwol_tuto_7.py b/scripts/field/eunwol_tuto_7.py new file mode 100755 index 0000000..201af6e --- /dev/null +++ b/scripts/field/eunwol_tuto_7.py @@ -0,0 +1,139 @@ +# 940200010 +MOONBEAM = 3002100 +TWITCH = 3002004 +LUMPS = 3002001 +SALLY = 3002002 +SNIFFS = 3002003 + +sm.lockInGameUI(True) +sm.spawnNpc(MOONBEAM, 200, -145) +sm.showNpcSpecialActionByTemplateId(MOONBEAM, "summon") + +sm.spawnNpc(TWITCH, 40, -145) +sm.showNpcSpecialActionByTemplateId(TWITCH, "summon") + +sm.spawnNpc(LUMPS, -30, -145) +sm.showNpcSpecialActionByTemplateId(LUMPS, "summon") + +sm.spawnNpc(SALLY, -100, -145) +sm.showNpcSpecialActionByTemplateId(SALLY, "summon") + +sm.spawnNpc(SNIFFS, 260, -145) +sm.showNpcSpecialActionByTemplateId(SNIFFS, "summon") + +if "2" in sm.getQRValue(38900): + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("What are you doing?") + + sm.setSpeakerID(TWITCH) + sm.sendSay("Whoa! No tail! For reals!") + + sm.setSpeakerID(SALLY) + sm.sendSay("You're so mean. Mama said not to make fun of unlucky people.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Huh... What?") + + sm.setSpeakerID(SNIFFS) + sm.sendSay("Moonbeam, we'll get going first. You bring it to town.") + sm.sendDelay(1000) + + sm.removeNpc(TWITCH) + sm.removeNpc(LUMPS) + sm.removeNpc(SALLY) + sm.removeNpc(SNIFFS) + sm.sendDelay(1000) + + sm.setSpeakerID(MOONBEAM) + sm.sendNext("'Kay. Let's go, human.") + sm.sendDelay(1000) + + sm.removeNpc(MOONBEAM) + sm.warp(940200060, 0) +elif "1" in sm.getQRValue(38900): + sm.forcedInput(4) + sm.sendDelay(2000) + sm.showBalloonMsg("Effect/Direction5.img/effect/mercedesInIce/merBalloon/0", 0) + sm.sendDelay(3000) + + sm.forcedInput(3) + sm.sendDelay(1000) + + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("W-where is this...?") + + sm.setSpeakerID(SNIFFS) + sm.sendSay("Ooh! It woke up, it's up! ") + + sm.setSpeakerID(SALLY) + sm.sendSay("It even spoke! It knows how to speak!") + + sm.setSpeakerID(TWITCH) + sm.sendSay("Did you see that? Its eyes are round!") + + sm.setSpeakerID(LUMPS) + sm.sendSay("It's so huge! Maybe we'll get eaten!") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Ugh...") + + sm.setSpeakerID(TWITCH) + sm.sendSay("Hey, I think it's sick. Ask it if it's hurt.") + + sm.setSpeakerID(LUMPS) + sm.sendSay("Why do you keep budging me? I'm scared.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("You scaredy-cats! Move over. Hey, you! You okay?") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Yeah, I'm feeling okay. It's howling in my head. But where is this? Who are you...?") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("We're the Pointy-Ear Foxes. We live here. Who are you? How'd you get here? This is our territory.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("(Pointy-Ear Foxes? An unknown race? They do resemble foxes, with those ears and tails.)") + sm.sendSay("I'm a human. I just came from near the Temple of Time, where is this near?") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("Human? Temple of Time? Never heard of those before.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("(Not know the Temple of Time? How far did I come? Where is this...)") + + sm.showEffect("Effect/Direction2.img/effect/chat/nugu/0", 2000, 20, -80, 0, 0, False, 0) + sm.sendDelay(2500) + + sm.sendNext("T-two moons?!") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("...There's always two moons. Human, you feelin' okay?") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Always two moons? That's not possible! And my level is... #r#e10#k#n?! What happened...??") + + sm.setSpeakerID(SNIFFS) + sm.sendSay("I knew it! Something was off from its earless looks. It must be...stupid!") + + sm.setSpeakerID(SALLY) + sm.sendSay("Maybe that's why it got abandoned. Oh, poor thing...") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("We have no choice, let's take it back to the town.") + + sm.setSpeakerID(LUMPS) + sm.sendSay("But the adults will be mad if we bring in an outsider.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("But we can't just leave it here. I'll take full responsibility. Let's go!") + + sm.setQRValue(38900, "2") + sm.removeNpc(MOONBEAM) + sm.removeNpc(TWITCH) + sm.removeNpc(LUMPS) + sm.removeNpc(SALLY) + sm.removeNpc(SNIFFS) + sm.warp(940200000, 0) \ No newline at end of file diff --git a/scripts/field/eunwol_tuto_illust.py b/scripts/field/eunwol_tuto_illust.py new file mode 100755 index 0000000..5a91662 --- /dev/null +++ b/scripts/field/eunwol_tuto_illust.py @@ -0,0 +1,63 @@ +# 927030050 +FOX_POINT_PATH = 940200060 +CURSE_YOUR_HUMAN_LEGS = 38000 +SHADE_SKIP_QR = 37999 + +QUESTS_TO_SKIP = [38000, 38001, 38002, 38003, 38004, 38005, 38006, 38007, 38008, 38009, 38010, 38011, 38012, 38013, 38014, 38015, 38016, 38017, 38018, 38019, 38020, 38021, 38022, 38023, 38024, 38025, 38026, 38027] + +sm.setSpeakerID(2007) +sm.setBoxChat() +if sm.sendAskAccept("Would you like to complete #r#eall quests up to 2nd job advancement#k#n? (You'll have to grind until level 27.)"): + sm.addLevel(9) + sm.jobAdvance(2500) + sm.giveAndEquip(1353100) + sm.giveItem(1142671) + sm.completeQuestNoRewards(32024) + sm.giveItem(3010766) + sm.resetAP(False, 2500) + sm.giveSkill(20051284) + sm.giveSkill(20050285) + sm.giveSkill(25001002, 0, 25) + sm.warp(410000000) + for q in QUESTS_TO_SKIP: + sm.startQuestNoCheck(q) + sm.completeQuestNoRewards(q) + sm.consumeItem(4033998, 4) + sm.dispose() + +if sm.sendAskYesNo("Would you like to skip the tutorial cutscene?"): + sm.createQuestWithQRValue(SHADE_SKIP_QR, "SKIPPED_ILLUST") + sm.warp(FOX_POINT_PATH) + sm.dispose() + +sm.lockInGameUI(True, False) +sm.hideUser(True) +sm.forcedInput(0) +if "3" in sm.getQRValue(38907): + sm.reservedEffect("Effect/Direction15.img/eunwolTutorial/Scene1") + sm.sendDelay(16000) + sm.warpInstanceIn(927030040, 0) +elif "2" in sm.getQRValue(38907): + sm.reservedEffect("Effect/Direction15.img/eunwolTutorial/Scene0") + sm.sendDelay(4000) + sm.warpInstanceIn(927030030, 0) +elif "1" in sm.getQRValue(38900): + sm.sendDelay(500) + sm.showFieldEffect("Map/Effect2.img/eunwol/enter") + sm.sendDelay(3500) + sm.warpInstanceIn(927030020, 0) +else: + sm.sendDelay(500) + sm.sayMonologue("\r\n\r\nA great darkness is covering Maple World.", False) + sm.sayMonologue("\r\nThe Black Mage wishes to dominate Maple World with overwhelming darkness.", False) + sm.sayMonologue("\r\nMany feared the Black Mage and his incredible strength, and few dared to oppose him.", True) + + sm.sayMonologue("\r\nDespair reigned in Maple World.", False) + sm.sayMonologue("\r\n\r\n\r\nBut then...", False) + sm.sayMonologue("\r\nThere came heroes who were bold enough to oppose the Black Mage.", True) + sm.sendDelay(1000) + + sm.reservedEffect("Effect/Direction8.img/lightningTutorial/Scene0") + sm.sendDelay(3300) + + sm.warpInstanceIn(927030000, 0) diff --git a/scripts/field/evanAlone.py b/scripts/field/evanAlone.py new file mode 100755 index 0000000..f02f72b --- /dev/null +++ b/scripts/field/evanAlone.py @@ -0,0 +1,46 @@ +# Evan Intro | Dream World: Dream Forest Entrance (900010000) + +# Evan - Tutorial Skipper +def skip_tutorial(): + MAPLE_ADMINISTRATOR = 2007 + + quests_to_complete = [ + 22000, # Strange Dream + 22001, # Feeding Bull Dog + 22002, # Sandwich for Breakfast + 22003, # Delivering the Lunch Box + 22004, # Fixing the Fence + 22005, # Rescuing the Piglet + 22006, # Returning the Empty Lunch Box + 22007, # Collecting Eggs + 22008, # Chasing away the Foxes + 22009, # Verifying the Farm Situation + 22010, # Strange Farm + ] + + map_to_warp = 100030102 # Front Yard + target_level = 10 + + sm.setSpeakerID(MAPLE_ADMINISTRATOR) + sm.removeEscapeButton() + sm.lockInGameUI(True) + + if sm.sendAskYesNo("Would you like to skip the tutorial questline and instantly arrive at #m" + str(map_to_warp) + "#?"): + if sm.getChr().getLevel() < target_level: + sm.addLevel(target_level - sm.getChr().getLevel()) + + for quest in quests_to_complete: + sm.completeQuestNoRewards(quest) + + sm.giveItem(1372107) # Beginner Magician's Wand + sm.resetAP(False, sm.getChr().getJob()) + # sm.addSP(3, True) + sm.warp(map_to_warp) + + sm.createQuestWithQRValue(22011, "noskip") + sm.lockInGameUI(False) + sm.dispose() + + +if sm.getQRValue(22011) != "noskip": + skip_tutorial() diff --git a/scripts/field/evanLeaveD.py b/scripts/field/evanLeaveD.py new file mode 100755 index 0000000..fa7cfa3 --- /dev/null +++ b/scripts/field/evanLeaveD.py @@ -0,0 +1,5 @@ +# Field Script for Evan Intro | Utah's House: Attic (100030100) +# Author: Tiger + +# TODO: there should be a WZ effect here but, can't find it... +# "Carry out the terms of the agreement" diff --git a/scripts/field/evanTogether.py b/scripts/field/evanTogether.py new file mode 100755 index 0000000..16d3ee0 --- /dev/null +++ b/scripts/field/evanTogether.py @@ -0,0 +1 @@ +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/event_25735.py b/scripts/field/event_25735.py new file mode 100755 index 0000000..d2d4b4c --- /dev/null +++ b/scripts/field/event_25735.py @@ -0,0 +1,81 @@ +# Created by MechAviv +# Map ID :: 940000000 +# Hidden Street : Pantheon Vacant Lot + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.spawnNpc(3000110, 350, 0) +sm.showNpcSpecialActionByTemplateId(3000110, "summon", 0) +sm.spawnNpc(3000111, 450, 0) +sm.showNpcSpecialActionByTemplateId(3000111, "summon", 0) +sm.spawnNpc(3000114, 550, 0) +sm.showNpcSpecialActionByTemplateId(3000114, "summon", 0) +sm.spawnNpc(3000119, 700, 0) +sm.showNpcSpecialActionByTemplateId(3000119, "summon", 0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg2/0", 1200, 0, -120, -2, -2, False, 0) +sm.moveCamera(False, 400, 450, -6) + + +sm.sendDelay(1500) + + +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("They must be plotting something.") + + +sm.setSpeakerID(3000110) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendSay("I need to make up for last time.") + + +sm.setSpeakerID(3000114) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendSay("We were careless. He might be Kaiser, but he's still a kid.") + + +sm.setSpeakerID(3000119) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendSay("We need to plan this out before we do anything.") + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg0/2", 1200, 0, -120, 0, 3000110, False, 0) +sm.sendDelay(900) + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/2", 1200, 0, -120, 0, 3000119, False, 0) +sm.sendDelay(900) + + +sm.moveCamera(False, 999999999, -85, -6) + + +sm.setSpeakerID(3000119) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("That's my line, fools! Who are you?") + + +sm.setSpeakerID(3000119) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendSay("Get rid of that pest!") + + +sm.removeNpc(3000110) +sm.removeNpc(3000111) +sm.removeNpc(3000114) +sm.removeNpc(3000119) +sm.chatScript("Defeat all enemies.") +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/field/event_25735_end0.py b/scripts/field/event_25735_end0.py new file mode 100755 index 0000000..9fd415a --- /dev/null +++ b/scripts/field/event_25735_end0.py @@ -0,0 +1,68 @@ +# Created by MechAviv +# Map ID :: 940000020 +# Hidden Street : Pantheon Vacant Lot + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.sendDelay(60) + + +sm.forcedInput(2) +sm.sendDelay(60) + + +sm.forcedInput(0) +sm.spawnNpc(3000110, 400, 0) +sm.showNpcSpecialActionByTemplateId(3000110, "summon", 0) +sm.spawnNpc(3000111, 450, 0) +sm.showNpcSpecialActionByTemplateId(3000111, "summon", 0) +sm.spawnNpc(3000114, 500, 0) +sm.showNpcSpecialActionByTemplateId(3000114, "summon", 0) +sm.spawnNpc(3000119, 550, 0) +sm.showNpcSpecialActionByTemplateId(3000119, "summon", 0) +sm.moveCamera(False, 400, 420, 29) + + +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Is that all?!") + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg0/3", 1200, 0, -120, 0, 3000111, False, 0) +sm.sendDelay(1200) + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/10", 1200, 0, -120, 0, 3000114, False, 0) +sm.sendDelay(900) + + +sm.moveCamera(False, 999999999, 3, 29) + + +sm.moveNpcByTemplateId(3000110, False, 300, 100) +sm.moveNpcByTemplateId(3000111, False, 300, 100) +sm.moveNpcByTemplateId(3000114, False, 300, 100) +sm.moveNpcByTemplateId(3000119, False, 300, 100) +sm.forcedInput(2) +sm.sendDelay(900) + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/12", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(900) + + +sm.removeNpc(3000110) +sm.removeNpc(3000111) +sm.removeNpc(3000114) +sm.removeNpc(3000119) +sm.sendDelay(600) + + +sm.forcedInput(0) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/field/event_25735_end1.py b/scripts/field/event_25735_end1.py new file mode 100755 index 0000000..1915b48 --- /dev/null +++ b/scripts/field/event_25735_end1.py @@ -0,0 +1,36 @@ +# Created by MechAviv +# Map ID :: 940000030 +# Hidden Street : Somewhere Near Pantheon + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(1200) + + +sm.forcedInput(0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg0/4", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("No good...the aura is gone. They have escaped my wrath...for now.") + + +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendSay("They must be plotting something. I need to let Cartalion know about this.") + + +sm.createQuestWithQRValue(25802, "1") +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/field/event_25744.py b/scripts/field/event_25744.py new file mode 100755 index 0000000..4a3f7cb --- /dev/null +++ b/scripts/field/event_25744.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Map ID :: 940000070 +# West Pantheon : Near West Sanctum + +sm.chatScript("Defeat all enemies.") diff --git a/scripts/field/event_25744_end.py b/scripts/field/event_25744_end.py new file mode 100755 index 0000000..b5f434c --- /dev/null +++ b/scripts/field/event_25744_end.py @@ -0,0 +1,59 @@ +# Created by MechAviv +# Map ID :: 940000090 +# West Pantheon : Near West Sanctum + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("The enemies don't know anything about the Relic. Did I beat the sense out of them?") + + +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendSay("And I don't feel any evil aura. is this it?") + + +sm.forcedInput(1) +sm.sendDelay(300) + + +sm.forcedInput(2) +sm.sendDelay(600) + + +sm.forcedInput(1) +sm.sendDelay(300) + + +sm.forcedInput(0) +sm.sendDelay(600) + + +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("I guess I should think about this harder. Nah, I'll just let Cartalion know about this.") + + +sm.setSpeakerID(0) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendSay("He said he is investigating something about Nefarious Priests. I'll see where he is with that.") + + +sm.createQuestWithQRValue(25805, "1") +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/field/event_25852.py b/scripts/field/event_25852.py new file mode 100755 index 0000000..9ccfd2f --- /dev/null +++ b/scripts/field/event_25852.py @@ -0,0 +1,231 @@ +# id 940010000 (Hidden Street : Pantheon Vacant Lot), field 940010000 +sm.lockInGameUI(True, True) +sm.forcedInput(1) +sm.sendDelay(30) +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(27039, "") +sm.createQuestWithQRValue(27039, "") +sm.completeQuestNoCheck(28515) +sm.createQuestWithQRValue(26015, "") +sm.createQuestWithQRValue(26011, "") +sm.forcedInput(0) +sm.spawnNpc(3000110, 350, 0) +sm.showNpcSpecialActionByTemplateId(3000110, "summon", 0) +sm.spawnNpc(3000111, 250, 0) +sm.showNpcSpecialActionByTemplateId(3000111, "summon", 0) +sm.spawnNpc(3000114, 150, 0) +sm.showNpcSpecialActionByTemplateId(3000114, "summon", 0) +sm.spawnNpc(3000119, 0, 0) +sm.showNpcSpecialActionByTemplateId(3000119, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("Yikes! I found bad guys!") +sm.setSpeakerID(3000110) # Nefarious Priest +sm.setParam(1) +sm.sendSay("Hey! I found a beautiful girl!") +sm.setSpeakerID(3000114) # Nefarious Priest +sm.sendSay("Get yourself together! That's Angelic Buster!") +sm.setParam(17) +sm.sendSay("What are you goons up to?!") +sm.setParam(1) +sm.sendSay("Do I have to hit her? She's really good looking...") +sm.setSpeakerID(3000119) # Nefarious Priest +sm.sendSay("Don't hit her! Just catch her! She can clean up that mess I made in the laundry room!") +sm.setSpeakerID(3000110) # Nefarious Priest +sm.sendSay("Perfect plan! You're gonna be our new maid, cutie!") +sm.setParam(17) +sm.sendSay("Hey! I'm standing RIGHT HERE! I'm gonna crack you peanut-brains across the head for that!") +sm.setSpeakerID(3000119) # Nefarious Priest +sm.setParam(1) +sm.sendSay("Everybody at once!") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16862, "check=1") +sm.createQuestWithQRValue(16862, "check=1;reset=1") +sm.createQuestWithQRValue(16772, "reset=1") +sm.createQuestWithQRValue(16035, "") +sm.createQuestWithQRValue(16774, "reset=1") +sm.createQuestWithQRValue(16807, "count=0") +sm.createQuestWithQRValue(16842, "check=1") +sm.createQuestWithQRValue(100194, "check=1") +sm.createQuestWithQRValue(16860, "new=1") +sm.createQuestWithQRValue(16547, "object=0") +sm.createQuestWithQRValue(16545, "check=0") +sm.createQuestWithQRValue(32429, "") +sm.createQuestWithQRValue(32430, "") +sm.createQuestWithQRValue(32431, "") +sm.createQuestWithQRValue(32432, "") +sm.createQuestWithQRValue(32433, "") +sm.createQuestWithQRValue(32434, "") +sm.createQuestWithQRValue(32435, "") +sm.createQuestWithQRValue(32436, "") +sm.createQuestWithQRValue(32437, "") +sm.createQuestWithQRValue(32438, "") +sm.createQuestWithQRValue(32439, "") +sm.createQuestWithQRValue(32440, "") +sm.createQuestWithQRValue(32441, "") +sm.createQuestWithQRValue(32442, "") +sm.createQuestWithQRValue(32443, "") +sm.createQuestWithQRValue(32444, "") +sm.createQuestWithQRValue(32445, "") +sm.createQuestWithQRValue(32446, "") +sm.createQuestWithQRValue(32447, "") +sm.createQuestWithQRValue(32448, "") +sm.createQuestWithQRValue(32449, "") +sm.createQuestWithQRValue(32450, "") +sm.createQuestWithQRValue(32451, "") +sm.createQuestWithQRValue(32452, "") +sm.createQuestWithQRValue(32453, "") +sm.createQuestWithQRValue(32454, "") +sm.createQuestWithQRValue(32455, "") +sm.createQuestWithQRValue(32456, "") +sm.createQuestWithQRValue(32457, "") +sm.createQuestWithQRValue(32458, "") +sm.createQuestWithQRValue(32459, "") +sm.createQuestWithQRValue(32460, "") +sm.createQuestWithQRValue(32461, "") +sm.createQuestWithQRValue(32462, "") +sm.createQuestWithQRValue(32463, "") +sm.createQuestWithQRValue(32464, "") +sm.createQuestWithQRValue(32465, "") +sm.createQuestWithQRValue(32466, "") +sm.createQuestWithQRValue(32467, "") +sm.createQuestWithQRValue(32468, "") +sm.createQuestWithQRValue(32469, "") +sm.createQuestWithQRValue(32470, "") +sm.createQuestWithQRValue(32471, "") +sm.createQuestWithQRValue(32472, "") +sm.createQuestWithQRValue(32473, "") +sm.createQuestWithQRValue(32474, "") +sm.createQuestWithQRValue(32475, "") +sm.createQuestWithQRValue(32476, "") +sm.createQuestWithQRValue(32477, "") +sm.createQuestWithQRValue(32478, "") +sm.createQuestWithQRValue(32479, "") +sm.createQuestWithQRValue(39101, "") +sm.createQuestWithQRValue(39102, "") +sm.createQuestWithQRValue(39103, "") +sm.createQuestWithQRValue(39104, "") +sm.createQuestWithQRValue(39105, "") +sm.createQuestWithQRValue(39106, "") +sm.createQuestWithQRValue(39107, "") +sm.createQuestWithQRValue(39108, "") +sm.createQuestWithQRValue(39109, "") +sm.createQuestWithQRValue(39110, "") +sm.createQuestWithQRValue(39111, "") +sm.createQuestWithQRValue(39112, "") +sm.createQuestWithQRValue(39113, "") +sm.createQuestWithQRValue(39114, "") +sm.createQuestWithQRValue(39115, "") +sm.createQuestWithQRValue(39116, "") +sm.createQuestWithQRValue(39117, "") +sm.createQuestWithQRValue(39118, "") +sm.createQuestWithQRValue(39119, "") +sm.createQuestWithQRValue(39120, "") +sm.createQuestWithQRValue(39121, "") +sm.createQuestWithQRValue(39122, "") +sm.createQuestWithQRValue(39123, "") +sm.createQuestWithQRValue(39124, "") +sm.createQuestWithQRValue(39125, "") +sm.createQuestWithQRValue(39126, "") +sm.createQuestWithQRValue(39127, "") +sm.createQuestWithQRValue(39128, "") +sm.createQuestWithQRValue(39129, "") +sm.createQuestWithQRValue(39130, "") +sm.createQuestWithQRValue(39131, "") +sm.createQuestWithQRValue(39132, "") +sm.createQuestWithQRValue(39133, "") +sm.createQuestWithQRValue(39134, "") +sm.createQuestWithQRValue(39135, "") +sm.createQuestWithQRValue(39136, "") +sm.createQuestWithQRValue(39137, "") +sm.createQuestWithQRValue(39138, "") +sm.createQuestWithQRValue(39139, "") +sm.createQuestWithQRValue(39140, "") +sm.createQuestWithQRValue(39141, "") +sm.createQuestWithQRValue(39142, "") +sm.createQuestWithQRValue(39143, "") +sm.createQuestWithQRValue(39144, "") +sm.createQuestWithQRValue(39145, "") +sm.createQuestWithQRValue(39146, "") +sm.createQuestWithQRValue(39147, "") +sm.createQuestWithQRValue(39148, "") +sm.createQuestWithQRValue(39149, "") +sm.createQuestWithQRValue(39150, "") +sm.createQuestWithQRValue(39151, "") +sm.createQuestWithQRValue(39152, "") +sm.createQuestWithQRValue(39153, "") +sm.createQuestWithQRValue(39154, "") +sm.createQuestWithQRValue(39155, "") +sm.createQuestWithQRValue(39156, "") +sm.createQuestWithQRValue(39157, "") +sm.createQuestWithQRValue(39158, "") +sm.createQuestWithQRValue(39159, "") +sm.createQuestWithQRValue(39160, "") +sm.createQuestWithQRValue(39161, "") +sm.createQuestWithQRValue(39162, "") +sm.createQuestWithQRValue(39163, "") +sm.createQuestWithQRValue(39164, "") +sm.createQuestWithQRValue(39165, "") +sm.createQuestWithQRValue(39160, "start=1") +sm.createQuestWithQRValue(39165, "start=1") +sm.createQuestWithQRValue(39100, "") +sm.createQuestWithQRValue(39100, "") +sm.createQuestWithQRValue(39100, "") +sm.createQuestWithQRValue(39100, "") +sm.createQuestWithQRValue(39100, "") +sm.createQuestWithQRValue(39002, "") +sm.createQuestWithQRValue(39003, "") +sm.createQuestWithQRValue(39004, "") +sm.createQuestWithQRValue(39005, "") +sm.createQuestWithQRValue(39006, "") +sm.createQuestWithQRValue(39007, "") +sm.createQuestWithQRValue(39008, "") +sm.createQuestWithQRValue(39009, "") +sm.createQuestWithQRValue(39010, "") +sm.createQuestWithQRValue(39011, "") +sm.createQuestWithQRValue(39012, "") +sm.createQuestWithQRValue(15708, "") +sm.createQuestWithQRValue(15418, "") +sm.createQuestWithQRValue(1072, "reset=1") +sm.createQuestWithQRValue(61389, "Wedding=0") +sm.createQuestWithQRValue(15157, "guide=0") +sm.createQuestWithQRValue(15157, "guide=0;gDate=19/07/16") +sm.createQuestWithQRValue(56838, "LD=19/07/16") +sm.createQuestWithQRValue(5659, "") +sm.createQuestWithQRValue(5656, "zombie=0") +sm.createQuestWithQRValue(5656, "cure=0;zombie=0") +sm.createQuestWithQRValue(5656, "cure=0;zombie=0;total=0") +sm.createQuestWithQRValue(5656, "cure=0;zombie=0;check=0;total=0") +sm.createQuestWithQRValue(5656, "cure=0;zombie=0;check=0;reset=1;total=0") +sm.createQuestWithQRValue(26473, "") +sm.createQuestWithQRValue(26473, "party=3") +sm.createQuestWithQRValue(26473, "party=3;solo=3") +sm.createQuestWithQRValue(26473, "party=3;solo=3;lastdate=19/07/16") +sm.createQuestWithQRValue(14470, "state=0") +sm.createQuestWithQRValue(18189, "eTime=12/12/31/00/00") +sm.createQuestWithQRValue(18578, "miss=0;rewardDay=00/01/01;fixedDay=19/07/16/00/00") +sm.createQuestWithQRValue(3155, "reset=1") +sm.startQuest(9571) +sm.startQuest(20760) +sm.createQuestWithQRValue(13271, "sn2=0") +sm.createQuestWithQRValue(13303, "03=1") +sm.createQuestWithQRValue(5425, "dc=0") +sm.startQuest(52387) +sm.startQuest(52388) +sm.startQuest(52389) +sm.startQuest(52390) +sm.startQuest(52347) +sm.startQuest(52394) +sm.startQuest(28866) +sm.startQuest(28867) +sm.startQuest(28874) +sm.startQuest(28862) +sm.startQuest(11276) +sm.startQuest(42102) +sm.createQuestWithQRValue(42102, "date=00/00/00/00/00") +sm.createQuestWithQRValue(7264, "dojangRank=0") +sm.createQuestWithQRValue(7264, "dojangRankJob=0;dojangRank=0") +sm.startQuest(7621) +sm.createQuestWithQRValue(51236, "StageKey=0") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/16/06/41") diff --git a/scripts/field/event_25856.py b/scripts/field/event_25856.py new file mode 100755 index 0000000..bedc5c0 --- /dev/null +++ b/scripts/field/event_25856.py @@ -0,0 +1,38 @@ +# id 940010020 (Hidden Street : Near South Sanctum), field 940010020 +sm.lockInGameUI(True, True) +sm.forcedInput(1) +sm.sendDelay(30) +sm.forcedInput(0) +sm.spawnNpc(3000110, -2500, 0) +sm.showNpcSpecialActionByTemplateId(3000110, "summon", 0) +sm.spawnNpc(3000111, -2400, 0) +sm.showNpcSpecialActionByTemplateId(3000111, "summon", 0) +sm.spawnNpc(3000114, -2300, 0) +sm.showNpcSpecialActionByTemplateId(3000114, "summon", 0) +sm.spawnNpc(3000115, -2200, 0) +sm.showNpcSpecialActionByTemplateId(3000115, "summon", 0) +sm.spawnNpc(3000116, -2100, 0) +sm.showNpcSpecialActionByTemplateId(3000116, "summon", 0) +sm.spawnNpc(3000119, -2000, 0) +sm.showNpcSpecialActionByTemplateId(3000119, "summon", 0) +sm.spawnNpc(3000120, -1900, 0) +sm.showNpcSpecialActionByTemplateId(3000120, "summon", 0) +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("Oh!") +sm.setSpeakerID(3000120) # Nefarious Priest +sm.setParam(1) +sm.sendSay("Wh-who are you?!") +sm.setParam(17) +sm.sendSay("I am the lovely sentinel of justice, Angeli...") +sm.setSpeakerID(3000114) # Nefarious Priest +sm.setParam(1) +sm.sendSay("Get her!") +sm.setParam(17) +sm.sendSay("The other bad guys usually wait for me to finish my catchphrase...") +sm.setSpeakerID(3000110) # Nefarious Priest +sm.setParam(1) +sm.sendSay("Oh, uh, sorry, I'm new...") +sm.setParam(17) +sm.sendSay("It's okay... but I'll never, ever forgive you for being a jerk to the South Sanctum!") +sm.lockInGameUI(False, True) diff --git a/scripts/field/event_25857.py b/scripts/field/event_25857.py new file mode 100755 index 0000000..653c7c4 --- /dev/null +++ b/scripts/field/event_25857.py @@ -0,0 +1,25 @@ +# id 940010040 (Hidden Street : Near West Sanctum), field 940010040 +sm.lockInGameUI(True, True) +sm.forcedInput(1) +sm.sendDelay(30) +sm.forcedInput(0) +sm.showEffect("Effect/Direction10.img/effect/story/BalloonMsg1/0", 1200, 0, -120, 0, 0, 0, 0) +sm.sendDelay(600) +sm.forcedInput(1) +sm.sendDelay(300) +sm.forcedInput(0) +sm.sendDelay(30) +sm.forcedInput(2) +sm.sendDelay(300) +sm.forcedInput(0) +sm.sendDelay(30) +sm.forcedInput(1) +sm.sendDelay(150) +sm.forcedInput(0) +sm.sendDelay(30) +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("Wh-what was that? What just happened?") +sm.startQuest(25914) +sm.lockInGameUI(False, True) +sm.warp(400020000) diff --git a/scripts/field/evolvingDirection1.py b/scripts/field/evolvingDirection1.py new file mode 100755 index 0000000..f09ba32 --- /dev/null +++ b/scripts/field/evolvingDirection1.py @@ -0,0 +1,24 @@ +sm.lockInGameUI(True) +sm.removeEscapeButton() +sm.showFieldEffect("evolving/mapname", 0) +sm.sendDelay(3000) +sm.setSpeakerID(1033230) +sm.sendNext("Gelimer! Why did you move Lotus here without my authorization?!") +sm.setSpeakerID(9075303) +sm.sendNext("M-madame Orchid. You are... early...") +sm.setSpeakerID(1033230) +sm.sendNext("Shut your trap, you greasy old nerd! You don't move my brother unless I tell you to move my brother! My little Lotus needs to be near me or he'll get scared!") +sm.setSpeakerID(9075303) +sm.sendNext("Please lower your voice, dear. There have been some developments...") +sm.setSpeakerID(1033230) +sm.sendNext("I'm developing a need to set your mustache on fire, Gelimer. How long do you think you can keep delaying these experiments? Lotus should have been awake months ago. You know what I'm going to do to you if you don't succeed, don't you?") +sm.setSpeakerID(9075303) +sm.sendNext("Lotus will awaken soon, I assure you. He will wake up, very soon...") +sm.setSpeakerID(1033230) +sm.sendNext("You want more time? Then buy a new watch! I want my brother awake now!") +sm.setSpeakerID(9075303) +sm.sendNext("Perhaps he only needs to hear your voice... Come, take a look.") +sm.showFieldEffect("evolving/swoo1", 0) +sm.sendDelay(4000) +sm.lockInGameUI(False) +sm.warp(957020002, 0) \ No newline at end of file diff --git a/scripts/field/evolvingDirection2.py b/scripts/field/evolvingDirection2.py new file mode 100755 index 0000000..c31c116 --- /dev/null +++ b/scripts/field/evolvingDirection2.py @@ -0,0 +1,111 @@ +if sm.hasQuest(1801): + sm.lockInGameUI(True) + sm.removeEscapeButton() + sm.spawnNpc(1033230, 61, 136) + sm.spawnNpc(9075302, 176, 136) + sm.spawnNpc(9075303, 381, 136) + sm.setSpeakerID(1033230) + sm.sendNext("Lotus? Lotus! Are you awake?!") + sm.setSpeakerID(9075302) + sm.sendNext("........") + sm.setSpeakerID(1033230) + sm.sendNext("Oh, brother, I've missed you so much! You've been napping all this time and I've had to blow up SO many people.") + sm.setSpeakerID(9075302) + sm.sendNext("........") + sm.setSpeakerID(1033230) + sm.sendNext("Now we can be together again! We can take over this whole planet of stupid monkeys and rule it like we're supposed to!") + sm.setSpeakerID(9075302) + sm.sendNext("........") + sm.setSpeakerID(1033230) + sm.sendNext("Lotus? Can you hear me? Remember your sister, Orchid?") + sm.setSpeakerID(9075302) + sm.sendNext("........") + sm.setSpeakerID(1033230) + sm.sendNext("I thought you said he was waking up, Gelimer! If you scrambled his brains, I'm going to turn you inside out!") + sm.setSpeakerID(9075303) + sm.sendNext("I assure you, Commander Orchid. Lotus is perfectly fine. Do you wish to see? Here... Execute Program Alpha-97") + sm.showFieldEffect("evolving/swoo2", 0) + sm.sendDelay(4000) + sm.removeNpc(1033230) + sm.spawnNpc(9075002, -83, 136) + sm.setSpeakerID(9075002) + sm.sendNext("L... Lotus? What's going on?!") + sm.setSpeakerID(9075303) + sm.sendNext("Perhaps it needs a little more juice, but the controls seem to be functional. My hypothesis was correct. His spirit could not withstand the impulses of his physical form.") + sm.setSpeakerID(9075002) + sm.sendNext("Gelimer... You...") + sm.setSpeakerID(9075303) + sm.sendNext("Have completed my experiments, yes. Your brother's body is awake once more. It does not yet have volition, but that is only a small inconvenience.") + sm.setSpeakerID(9075002) + sm.sendNext("What... did you do... to Lotus?!") + sm.setSpeakerID(9075303) + sm.sendNext("I have taken control of the man who has the ability to control others, foolish girl. Unfortunately, his brain is still in hibernation, but his powers are all that are truly important.") + sm.setSpeakerID(9075002) + sm.sendNext("Why? Why Lotus?") + sm.setSpeakerID(9075303) + sm.sendNext("The Black Mage requires a vessel, child, not another follower. Do be a good girl and die now, won't you? I doubt we will be needing your services any more. Hahahaha!") + sm.setSpeakerID(9075002) + sm.sendNext("No... No... Not Lotus! Stop!") + sm.lockInGameUI(False) + sm.warpInstanceOut(957020003, 0) +if sm.hasQuest(1846): + sm.lockInGameUI(True) + sm.removeEscapeButton() + sm.deleteQuest(1849) + sm.spawnNpc(9075301, 13, 55) + sm.spawnNpc(9075300, -106, 136) + sm.setSpeakerID(9075300) + sm.sendNext("Lotus... Lotus! It's you, right?") + sm.setSpeakerID(9075301) + sm.sendNext("") + sm.setSpeakerID(9075300) + sm.sendNext("Why aren't you answering? Did you forget me? Lotus, talk, please?") + sm.setSpeakerID(9075301) + sm.sendNext("Checking user information. \r\n\r\n Orchid, is not a registered user name.") + sm.setSpeakerID(9075300) + sm.sendNext("Lotus, what are you talking about? I can't understand a thing.") + sm.setSpeakerID(9075301) + sm.sendNext("You must register to use the Evolution System. Would you like to register?") + sm.setSpeakerID(9075300) + sm.sendNext("You're not Lotus? Who are you? Who are you to take his form?") + sm.setSpeakerID(9075301) + sm.sendNext("I am ESS, the artificial intelligence that regulates the Evolution System. I was designed for maximum efficiency.") + sm.setSpeakerID(9075300) + sm.sendNext("Artificial intelligence? Did Gelimer make you?") + sm.setSpeakerID(9075301) + sm.sendNext("Due to a system reset, all previous user information has been deleted.") + sm.setSpeakerID(9075300) + sm.sendNext("I don't like it. I don't like it one bit. Why do you look like Lotus? He is Orchid's twin. My twin! Why is Gelimer making robot brothers?!") + sm.showNpcSpecialActionByTemplateId(9075300, "summon", 0) + sm.removeNpc(9075300) + sm.spawnNpc(9075307, -106, 136, True) + sm.setSpeakerID(9075307) + sm.sendNext("Where is Lotus? Give him back, now! Bring back Lotus!") + sm.reservedEffectRepeat("Effect/Direction5.img/effect/attack/1", True) + sm.reservedEffectRepeat("Effect/Direction5.img/effect/attack/2", True) + sm.reservedEffectRepeat("Effect/Direction5.img/effect/attack/3", True) + sm.setSpeakerID(9075301) + sm.sendNext("System has detected attack. Activating the defense system.") + sm.hideUser(False) + sm.setPlayerAsSpeaker() + sm.sendNext("Orchid? She hasn't lost all her powers?") + sm.setSpeakerID(9075301) + sm.sendNext("Switching to target tracking mode. Tracking target.") + sm.deleteQuest(1849) + sm.createQuestWithQRValue(1849, "1") + sm.setSpeakerID(9075301) + sm.sendNext("Enemy recognition complete. Switching to attack mode. Initiating attacks. Attack... Starting.") + sm.showFieldEffect("Effect/Direction5.img/effect/attack/0") + sm.sendDelay(4000) + sm.setPlayerAsSpeaker() + sm.sendNext("Orchid!") + sm.setSpeakerID(9075301) + sm.sendNext("New target found. Enemy recognition initiated.") + + sm.sendNext("User name #h #. User verified. Ending defense system and switcing to system enhancement mode.") + sm.setPlayerAsSpeaker() + sm.sendNext("Orchid! Wake up, Orchid!") + sm.setSpeakerID(9075307) + sm.sendNext("I miss Lotus.") + sm.lockInGameUI(False) + sm.warp(957020004) \ No newline at end of file diff --git a/scripts/field/evolvingDirection3.py b/scripts/field/evolvingDirection3.py new file mode 100755 index 0000000..c82b164 --- /dev/null +++ b/scripts/field/evolvingDirection3.py @@ -0,0 +1,14 @@ +if sm.hasQuest(1846): + sm.lockInGameUI(True) + sm.showScene("Effect.wz/Direction5.img", "evolvingDereciton", "Scene1") + sm.sendDelay(11000) + sm.lockInGameUI(True) + sm.warp(957020006) +else: + sm.lockInGameUI(True) + sm.showScene("Effect.wz/Direction5.img", "evolvingDereciton", "Scene0") + sm.invokeAfterDelay(3500, "showFadeTransition", 2500, 0, 500) + sm.invokeAfterDelay(4000, "lockInGameUI", False) + #TODO ugly workaround + sm.deleteQuest(1801) + sm.createQuestWithQRValue(1801, "end") \ No newline at end of file diff --git a/scripts/field/evolvingDirection5.py b/scripts/field/evolvingDirection5.py new file mode 100755 index 0000000..ae784b6 --- /dev/null +++ b/scripts/field/evolvingDirection5.py @@ -0,0 +1,35 @@ +#Resistance Headquarters :Hospital Room +if sm.hasQuest(1846): + sm.lockInGameUI(True) + sm.spawnNpc(1540471, 475, 56) + sm.spawnNpc(9075304, 200, 56, True) + sm.removeEscapeButton() + sm.setSpeakerID(9075304) + sm.sendNext("We've done what we can medically, but her terrible wounds have left her in a coma. We don't know how long she can go on since she was so weak to begin with.") + sm.sendNext("There's not much else we can do. Death, or life... It's all up to Orchid. All we can do is wait and watch... I also asked Belle to investigate the Evolution system that attacked her.") + sm.spawnNpc(2450037, 100, 56, True) + sm.setSpeakerID(9075305) + sm.sendNext("I'm back. Ugh, I never want to go back there. Gives me the creeps.") + sm.setSpeakerID(9075304) + sm.sendNext("Sorry you had to deal with that. How did the investigations go?") + sm.setSpeakerID(9075305) + sm.sendNext("Well, to cut to the chase, the Evolution System has #r#e evolved#k#n by itself. Without any changes to its internal system. I don't want to admit it but, Gelimer was a genius.") + sm.setSpeakerID(9075304) + sm.sendNext("Belle, hold your horses and tell us the details. A self-evolving machine... What are you talking about?") + sm.setSpeakerID(9075305) + sm.sendNext("That is just what it is. The Evolution System has evolved itself completely anew. It doesn't just defend itself. It's #renhanced itself to a stronger system#k. It's making its own judgements.") + sm.setSpeakerID(9075305) + sm.sendNext("It recognized Orchid as a strong enemy and enhanced its own system to accommodate. Gelimer, that madman... he created something big.") + sm.setSpeakerID(9075304) + sm.sendNext("Then what happens to the Evolution System now?") + sm.setSpeakerID(9075305) + sm.sendNext("Who knows? Whether it will keep itself as-is or chose to make changes... It's all up to the AI.") + sm.sendNext("You should go check it out for yourself. My words are worth almost nothing, unless you go see it.") + sm.setSpeakerID(9075304) + sm.sendNext("Okay, #h #. Go see how the Evolution System has changed itself. Contact me as soon as you see anything out of the ordinary.") + sm.setSpeakerID(1540471) + sm.sendNext("Lotus...Lotus...") + sm.setSpeakerID(9075304) + sm.sendNext("She will call out Lotus's name even in her times of life-and-death struggles. Do you think he will hear her?") + sm.lockInGameUI(False) + sm.warp(957020003, 0) \ No newline at end of file diff --git a/scripts/field/evolvingDirection6.py b/scripts/field/evolvingDirection6.py new file mode 100755 index 0000000..3262196 --- /dev/null +++ b/scripts/field/evolvingDirection6.py @@ -0,0 +1,17 @@ +#Gelimer Research Lab : Second Square +sm.lockInGameUI(True) +sm.hideUser(True) +sm.removeEscapeButton() +sm.spawnNpc(9075303, 750, -104) +sm.setSpeakerID(9075303) +sm.sendNext("W-what, Lotus has cried? How can it be?!") +sm.setSpeakerID(9075302) +sm.sendNext("") +sm.setSpeakerID(9075303) +sm.sendNext("Hm, something has gone wrong. Maybe that screw I put into his brains last night stimulated the lacrimnal galnds. Let me see, where did I put those blueprints?") +sm.setSpeakerID(9075302) +sm.sendNext("Or....chid") +sm.completeQuest(1846) +sm.lockInGameUI(False) +sm.hideUser(False) +sm.warpInstanceOut(957000000) \ No newline at end of file diff --git a/scripts/field/explorationPoint.py b/scripts/field/explorationPoint.py new file mode 100755 index 0000000..9bca62c --- /dev/null +++ b/scripts/field/explorationPoint.py @@ -0,0 +1,12 @@ +# Victoria Island Explorer Medal | Used for that Explore Medal Quest +if sm.getFieldID() == 105000000 and sm.hasQuest(30004): + sm.setPlayerAsSpeaker() + sm.sendNext("Welp, this thing is ancient, but seems to be working. Guess I should head back.") + sm.warp(910700200, 0) # Root Abyss Quest Line Map + sm.completeQuest(30004) + +elif sm.getFieldID() == 104000000: + sm.showEffect("Map/Effect.img/maplemap/enter/104000000") + +elif sm.getFieldID() == 220080000 and sm.hasQuest(1662): + sm.chatScript("Enter papulatus.") \ No newline at end of file diff --git a/scripts/field/fireWolf_Enter.py b/scripts/field/fireWolf_Enter.py new file mode 100755 index 0000000..772eff3 --- /dev/null +++ b/scripts/field/fireWolf_Enter.py @@ -0,0 +1,4 @@ +if not sm.hasMobsInField(): + sm.spawnMob(9101078, 0, 353, False) +sm.createStopWatch(30) # 30 sec +sm.invokeAfterDelay(30000, "warpInstanceOut", 993000600, 0) \ No newline at end of file diff --git a/scripts/field/first_DemianHard1.py b/scripts/field/first_DemianHard1.py new file mode 100755 index 0000000..ced9993 --- /dev/null +++ b/scripts/field/first_DemianHard1.py @@ -0,0 +1,4 @@ +sm.spawnMob(8880110, 1073, 16, False, 25200000000000) # 25.2t +while sm.hasMobsInField(): + sm.waitForMobDeath() +sm.warp(350160240) diff --git a/scripts/field/first_DemianHard2.py b/scripts/field/first_DemianHard2.py new file mode 100755 index 0000000..767e9f6 --- /dev/null +++ b/scripts/field/first_DemianHard2.py @@ -0,0 +1 @@ +sm.spawnMob(8880111, 1073, 16, False, 10800000000000) # 10.8t diff --git a/scripts/field/first_DemianNormal1.py b/scripts/field/first_DemianNormal1.py new file mode 100755 index 0000000..06a3d64 --- /dev/null +++ b/scripts/field/first_DemianNormal1.py @@ -0,0 +1,29 @@ +from net.swordie.ms.connection.packet import DemianFieldPacket +from net.swordie.ms.connection.packet import FieldPacket +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.life.mob.boss.demian import Demian +from net.swordie.ms.life.mob.boss.demian.sword import DemianFlyingSword + +field = chr.getField() +instance = chr.getInstance() +init = instance.initialised +if not init: + instance.initialised = True + mob = sm.spawnMob(BossConstants.DEMIAN_NORMAL_TEMPLATE_ID, 895, 16, False, BossConstants.DEMIAN_HP) # spawn Demian + sm.addEvent(Demian.stigmaIncinerateObjectTimer(field)) # start Pillar + + sword = DemianFlyingSword.createDemianFlyingSword(chr, mob) + field.spawnLife(sword, None) # create + sword.startPath() + sword.target() + + for iChr in instance.getChars(): + iSM = iChr.getScriptManager() + iChr.write(FieldPacket.giveSpecialSkillBar(BossConstants.BRAND_OF_SACRIFICE)) + iChr.write(DemianFieldPacket.corruptionChange(False, 0)) # show corruption window + iSM.addEvent(Demian.increaseStigmaPassiveTimer(iChr)) # start stigma timer on corruption window + + +while sm.hasMobsInField(): + sm.waitForMobDeath() +sm.warp(350160240) diff --git a/scripts/field/first_DemianNormal2.py b/scripts/field/first_DemianNormal2.py new file mode 100755 index 0000000..d5e900b --- /dev/null +++ b/scripts/field/first_DemianNormal2.py @@ -0,0 +1 @@ +sm.spawnMob(8880101, 1073, 16, False, 360000000000) # 360b diff --git a/scripts/field/firstenter_bossBlackMage.py b/scripts/field/firstenter_bossBlackMage.py new file mode 100755 index 0000000..e8f2e26 --- /dev/null +++ b/scripts/field/firstenter_bossBlackMage.py @@ -0,0 +1,41 @@ +# 450,013,100 - Limina: Temple of Darkness +TIME = 30 * 60 + +MAP_P1 = 450013100 +MAP_P2 = 450013300 +MAP_P3 = 450013500 +MAP_P4 = 450013700 +MAP_DIFF = 200 # 100 if direction maps are included + +AEONIAN_RISE = 8880500 +TANADIAN_RUIN = 8880501 +BLACK_MAGE_P2 = 8880502 +BLACK_MAGE_P3 = 8880503 +BLACK_MAGE_P4 = 8880504 + + + +fieldId = field.getId() + +if fieldId == MAP_P1: + sm.setInstanceTime(TIME) + sm.spawnMob(AEONIAN_RISE, -942, 85, 32500000000000) # 32.5t + sm.spawnMob(TANADIAN_RUIN, 942, 85, 32500000000000) # 32.5t + + sm.waitForMobDeath(AEONIAN_RISE, TANADIAN_RUIN) + sm.waitForMobDeath(AEONIAN_RISE, TANADIAN_RUIN) + + sm.warpField(MAP_P2) +elif fieldId == MAP_P2: + sm.spawnMob(BLACK_MAGE_P2, 0, 88, 135000000000000) # 135t + sm.waitForMobDeath(BLACK_MAGE_P2) + + sm.warpField(MAP_P3) +elif fieldId == MAP_P3: + sm.spawnMob(BLACK_MAGE_P3, 375, 88, 200000000000000) # 200t + sm.waitForMobDeath(BLACK_MAGE_P3) + + sm.warpField(MAP_P4) +elif fieldId == MAP_P4: + sm.spawnMob(BLACK_MAGE_P4, 375, 88, 100000000000000) # 100t + diff --git a/scripts/field/firstmeet_ayame.py b/scripts/field/firstmeet_ayame.py new file mode 100755 index 0000000..2f2c00d --- /dev/null +++ b/scripts/field/firstmeet_ayame.py @@ -0,0 +1,46 @@ +# Cut-sence for Sengoku Era Questline when first meeting Ayame | Master Room (811000007) +# Author: Tiger + +AYAME = 9130106 + +sm.spawnNpc(AYAME, 620, 187) +sm.hideNpcByTemplateId(AYAME, True, True) # removes Ayame temporarily, this is needed because +# for some reason when the NPC first spawns, it glides to different position than originally spawned. +sm.lockInGameUI(True) +sm.removeEscapeButton() + +sm.sendDelay(1100) # Send a short delay +sm.hideNpcByTemplateId(AYAME, False, False) # After delay, you can see the spawned NPC standing still + +sm.sendDelay(1000) +sm.moveNpcByTemplateId(AYAME, True, 50, 50) + +sm.sendDelay(200) +sm.moveNpcByTemplateId(AYAME, True, 20, 50) + +sm.sendDelay(200) +sm.moveNpcByTemplateId(AYAME, True, 20, 50) + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("(The new warrior is.. a girl?)") + +sm.moveNpcByTemplateId(AYAME, True, 100, 50) + +sm.sendDelay(200) +sm.setSpeakerID(AYAME) + +sm.moveNpcByTemplateId(AYAME, True, 100, 50) +sm.flipDialogue() +sm.sendSay("You brought me this medicine?") + +sm.moveNpcByTemplateId(AYAME, True, 100, 50) + +sm.flipDialogue() +sm.sendSay("Well, thanks! You saved my life!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("...This is my first time feeling irritated from a thank-you.") + +sm.lockInGameUI(False) +sm.removeNpc(AYAME) +sm.warpInstanceOut(811000008, 0) # Momiji Hills : Master Room diff --git a/scripts/field/foxtree_direction.py b/scripts/field/foxtree_direction.py new file mode 100755 index 0000000..31b3b5d --- /dev/null +++ b/scripts/field/foxtree_direction.py @@ -0,0 +1,131 @@ +# 940200011 +MOONBEAM = 3002100 + +if sm.hasQuest(38004): + sm.setSpeakerID(2007) + if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.createQuestWithQRValue(37999, "SKIP_38004") + if sm.getQRValue(37999) != "SKIP_38004": + sm.lockInGameUI(True) + sm.spawnNpc(MOONBEAM, 204, -135) + sm.showNpcSpecialActionByTemplateId(MOONBEAM, "summon") + sm.forcedInput(0) + sm.sendDelay(2000) + + sm.removeEscapeButton() + sm.setSpeakerID(MOONBEAM) + sm.sendNext("Um, Fox God? This is Shade, who will be hanging out with us. I gotta say, he has no ears or tails, but he's still pretty cool. So make sure he doesn't get eaten or anything, okay?") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("(It's interesting that the fox people believe in a fox god. Of course, when I say it like that it seems super obvious.)") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("Shade! Hey, stop fooling around and start praying to the fox god! Tell him to watch over you! Hurry!") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("W-watch over me... ") + + sm.playSound("eunwolTuto/foxgod", 100) + sm.showBalloonMsgOnNpc("Effect/Direction15.img/effect/tuto/foxgod/stone", 0, 0, 0, MOONBEAM) + sm.sendDelay(2100) + + sm.playSound("eunwolTuto/blessing", 100) + sm.avatarOriented("Effect/Direction15.img/effect/tuto/foxgod/eunwol") + sm.sendDelay(2500) + + sm.sendNext("What was that? Something shiny covered my body...!") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("What's the fuss? The fox god sent you his blessing. Go on, say thank you! The fox god is being very generous, giving blessings to the earless and tailless.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("T-thank you. Wait, so that light was the fox god's blessing? You mean to say the fox god's blessing is an actual power?") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("What, you thought I was joking? That thing that just went POP into your body was the #rpower of spirits#k. You can use that power now, and I'll teach you all the ins and outs of it.") + + sm.removeNpc(MOONBEAM) + sm.giveSkill(20051284) + sm.giveSkill(20050285) + sm.completeQuest(38004) + sm.addLevel(1) + sm.chatScript("You learned [Fox Trot] and [Spirit Bond 1].") + if sm.getQRValue(37999) != "SKIP_38004": + sm.sendDelay(1000) + + sm.lockInGameUI(False) + sm.warp(410000002, 0) +elif sm.hasQuest(38011): + sm.setSpeakerID(2007) + if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.createQuestWithQRValue(37999, "SKIP_38011") + if sm.getQRValue(37999) != "SKIP_38011": + sm.lockInGameUI(True) + sm.spawnNpc(MOONBEAM, 204, -135) + sm.showNpcSpecialActionByTemplateId(MOONBEAM, "summon") + sm.forcedInput(0) + sm.sendDelay(2000) + + sm.removeEscapeButton() + sm.setSpeakerID(MOONBEAM) + sm.sendNext("...Why did you follow me?") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("......") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("Dummy, this place is dangerous. It's filled with tigers all around.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("...I'm sorry.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("Hmph, what for?\r\n\r\n#b#L0# Sorry I didn't eat the raw liver#l\r\n#L1# Sorry I lied about eating the raw liver#l\r\n#L2# Sorry for getting hurt and worrying you#l") + + sm.sendNext("I-I don't care about you! You're stupid, and dumb, and... And you have no ears, oddly big, and you can't even hunt well! What else... ") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("I'm sorry.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("You know, I was the one that got the liver for you. All by myself, from all the way in the deep parts of the forest... But why did you get these things for everyone? Getting hurt like that just for some stupid mouse tails. Shade, you dummy!") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Yes, I'm sorry.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("...I still think you're too weak even with a spirit. You can't run, can't claw anyone, or even bite anyone with fangs. You'd have no chance against a tiger if you met one. So... I'll give you my spirit.") + + sm.sendDelay(500) + + sm.playSound("eunwolTuto/rang", 100) + sm.showBalloonMsgOnNpc("Effect/Direction15.img/effect/tuto/passon/rang", 0, 0, 0, MOONBEAM) + sm.sendDelay(1000) + + sm.playSound("eunwolTuto/eunwol", 100) + sm.avatarOriented("Effect/Direction15.img/effect/tuto/passon/eunwol") + sm.sendDelay(2300) + + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("Moonbeam! What are you...!") + sm.sendSay("......") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("I wanna start heading back first. ...I might be slower than you now. See ya!") + + sm.removeNpc(MOONBEAM) + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Why are you doing this to me? Maaaaan, Silver's going to be spitting fire when he finds out...") + + chr.addSkill(25001002, chr.getSkillLevel(25001000), 25) + chr.removeSkillAndSendPacket(25001000) + sm.giveExp(1800) + sm.giveAndEquip(1353100) + sm.completeQuest(38011) + sm.chatScript("[Swift Strike] was upgraded to [Flash Fist].") + if sm.getQRValue(37999) != "SKIP_38011": + sm.sendDelay(1000) + + sm.lockInGameUI(False) + sm.warp(410000002, 0) diff --git a/scripts/field/getDragonEgg.py b/scripts/field/getDragonEgg.py new file mode 100755 index 0000000..4684ff4 --- /dev/null +++ b/scripts/field/getDragonEgg.py @@ -0,0 +1,2 @@ +sm.lockInGameUI(True, False) +sm.reservedEffect("Effect/Direction4.img/getDragonEgg/Scene0") \ No newline at end of file diff --git a/scripts/field/go10000.py b/scripts/field/go10000.py new file mode 100755 index 0000000..2019abd --- /dev/null +++ b/scripts/field/go10000.py @@ -0,0 +1,3 @@ +# Maple Hall (10000) +sm.showEffect("Map/Effect.img/maplemap/enter/10000") +sm.dispose() diff --git a/scripts/field/go1000000.py b/scripts/field/go1000000.py new file mode 100755 index 0000000..d01c504 --- /dev/null +++ b/scripts/field/go1000000.py @@ -0,0 +1,3 @@ +# Amherst (1000000) +sm.showEffect("Map/Effect.img/maplemap/enter/1000000") +sm.dispose() diff --git a/scripts/field/go1010000.py b/scripts/field/go1010000.py new file mode 100755 index 0000000..1337882 --- /dev/null +++ b/scripts/field/go1010000.py @@ -0,0 +1,3 @@ +# Entrance to Adventurer Training Center (1010000) +sm.showEffect("Map/Effect.img/maplemap/enter/1010000") +sm.dispose() diff --git a/scripts/field/go1010100.py b/scripts/field/go1010100.py new file mode 100755 index 0000000..e0b9dd7 --- /dev/null +++ b/scripts/field/go1010100.py @@ -0,0 +1,3 @@ +sm.showFieldEffect("maplemap/enter/1010100", 0) +# adventurer training center 1 +sm.showEffect("Map/Effect.img/maplemap/enter/1010100") diff --git a/scripts/field/go1010200.py b/scripts/field/go1010200.py new file mode 100755 index 0000000..b779198 --- /dev/null +++ b/scripts/field/go1010200.py @@ -0,0 +1,2 @@ +sm.showFieldEffect("maplemap/enter/1010200", 0) +sm.showEffect("Map/Effect.img/maplemap/enter/1010200") diff --git a/scripts/field/go1010300.py b/scripts/field/go1010300.py new file mode 100755 index 0000000..0fea2db --- /dev/null +++ b/scripts/field/go1010300.py @@ -0,0 +1,2 @@ +sm.showFieldEffect("maplemap/enter/1010300", 0) +sm.showEffect("Map/Effect.img/maplemap/enter/1010300") diff --git a/scripts/field/go1010400.py b/scripts/field/go1010400.py new file mode 100755 index 0000000..a1f56eb --- /dev/null +++ b/scripts/field/go1010400.py @@ -0,0 +1,2 @@ +sm.showFieldEffect("maplemap/enter/1010400", 0) +sm.showEffect("Map/Effect.img/maplemap/enter/1010400") diff --git a/scripts/field/go1020000.py b/scripts/field/go1020000.py new file mode 100755 index 0000000..bcc0262 --- /dev/null +++ b/scripts/field/go1020000.py @@ -0,0 +1,3 @@ +# Split Road of Destiny (1020000) +sm.showEffect("Map/Effect.img/maplemap/enter/1020000") +sm.dispose() diff --git a/scripts/field/go20000.py b/scripts/field/go20000.py new file mode 100755 index 0000000..324c6ad --- /dev/null +++ b/scripts/field/go20000.py @@ -0,0 +1,2 @@ +# Snail Park +sm.showEffect("Map/Effect.img/maplemap/enter/20000") \ No newline at end of file diff --git a/scripts/field/go2000000.py b/scripts/field/go2000000.py new file mode 100755 index 0000000..edcf2cd --- /dev/null +++ b/scripts/field/go2000000.py @@ -0,0 +1,3 @@ +# South Perry (2000000) +sm.showEffect("Map/Effect.img/maplemap/enter/2000000") +sm.dispose() diff --git a/scripts/field/go30000.py b/scripts/field/go30000.py new file mode 100755 index 0000000..16d73d7 --- /dev/null +++ b/scripts/field/go30000.py @@ -0,0 +1,2 @@ +# Snail Garden +sm.showEffect("Map/Effect.img/maplemap/enter/30000") \ No newline at end of file diff --git a/scripts/field/go40000.py b/scripts/field/go40000.py new file mode 100755 index 0000000..9962e5e --- /dev/null +++ b/scripts/field/go40000.py @@ -0,0 +1,3 @@ +sm.showFieldEffect("maplemap/enter/40000", 0) +# Inside Small Forest +sm.showEffect("Map/Effect.img/maplemap/enter/40000") diff --git a/scripts/field/go50000.py b/scripts/field/go50000.py new file mode 100755 index 0000000..2b8fa91 --- /dev/null +++ b/scripts/field/go50000.py @@ -0,0 +1,3 @@ +sm.showFieldEffect("maplemap/enter/50000", 0) +# Inside Dangerous Forest +sm.showEffect("Map/Effect.img/maplemap/enter/50000") diff --git a/scripts/field/goAdventure.py b/scripts/field/goAdventure.py new file mode 100755 index 0000000..6f80850 --- /dev/null +++ b/scripts/field/goAdventure.py @@ -0,0 +1 @@ +sm.warp(100000000) \ No newline at end of file diff --git a/scripts/field/goArcher.py b/scripts/field/goArcher.py new file mode 100755 index 0000000..f1525fa --- /dev/null +++ b/scripts/field/goArcher.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [1020300] +# Unknown : Unknown + +sm.reservedEffect("Effect/Direction3.img/archer/Scene1") diff --git a/scripts/field/goLith.py b/scripts/field/goLith.py new file mode 100755 index 0000000..172b6c4 --- /dev/null +++ b/scripts/field/goLith.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# ID :: [4000005] +# Hidden Street : Lith Harbor + +sm.setTemporarySkillSet(0) +sm.reservedEffect("Effect/Direction3.img/goLith/Scene0") \ No newline at end of file diff --git a/scripts/field/goMagician.py b/scripts/field/goMagician.py new file mode 100755 index 0000000..1db8e75 --- /dev/null +++ b/scripts/field/goMagician.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [1020200] +# Unknown : Unknown + +sm.reservedEffect("Effect/Direction3.img/magician/Scene1") \ No newline at end of file diff --git a/scripts/field/goPirate.py b/scripts/field/goPirate.py new file mode 100755 index 0000000..fc186fe --- /dev/null +++ b/scripts/field/goPirate.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [1020500] +# Unknown : Unknown + +sm.reservedEffect("Effect/Direction3.img/pirate/Scene1") diff --git a/scripts/field/goRogue.py b/scripts/field/goRogue.py new file mode 100755 index 0000000..9f10073 --- /dev/null +++ b/scripts/field/goRogue.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# ID :: [1020400] +# Unknown : Unknown + +sm.reservedEffect("Effect/Direction3.img/rogue/Scene1") +#sm.warp(4000026, 0) diff --git a/scripts/field/goSwordman.py b/scripts/field/goSwordman.py new file mode 100755 index 0000000..17dadb7 --- /dev/null +++ b/scripts/field/goSwordman.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [1020100] +# Unknown : Unknown + +sm.reservedEffect("Effect/Direction3.img/swordman/Scene1") diff --git a/scripts/field/hayatoJobChange.py b/scripts/field/hayatoJobChange.py new file mode 100755 index 0000000..a053d69 --- /dev/null +++ b/scripts/field/hayatoJobChange.py @@ -0,0 +1,15 @@ +# Hayato Tutorial Clipsence | Momijigaoka : Unfamiliar Hillside (807040000) + +jobId = 0 +if chr.getJob() == 4002: + jobId = 4200 +elif chr.getJob() == 4001: + jobId = 4100 +if jobId == 0: #won't give exp and set job every entrance like before + sm.dispose() +sm.giveExp(3500) +sm.jobAdvance(jobId) +sm.resetAP(False, jobId) +sm.lockInGameUI(True) +#sm.playVideoByScript("JPHayato.avi") +sm.lockInGameUI(False) diff --git a/scripts/field/hekaton_enter_HP.py b/scripts/field/hekaton_enter_HP.py new file mode 100755 index 0000000..4c851a1 --- /dev/null +++ b/scripts/field/hekaton_enter_HP.py @@ -0,0 +1,5 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.invokeAtFixedRate(250, BossConstants.HEKATON_RED_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.HekatonRedOrb, 1, BossConstants.HEKATON_RED_ATOM_DAMAGE, BossConstants.HEKATON_OBSTACLE_ATOM_VELOCITY, BossConstants.HEKATON_RED_ATOM_AMOUNT, BossConstants.HEKATON_RED_ATOM_PROP) diff --git a/scripts/field/henesys_first.py b/scripts/field/henesys_first.py new file mode 100755 index 0000000..6eb8c38 --- /dev/null +++ b/scripts/field/henesys_first.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# ID :: [100000201] +# Henesys : Bowman Instructional School + +sm.createQuestWithQRValue(2708, "1") +# Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 diff --git a/scripts/field/herbcheck.py b/scripts/field/herbcheck.py new file mode 100755 index 0000000..aea2096 --- /dev/null +++ b/scripts/field/herbcheck.py @@ -0,0 +1,32 @@ +# id 811000005 (Momiji Hills : Hidden Field of Momiji Hills 2), field 811000005 +sm.playSound("Sound/FarmSE.img/boxResult", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26# Burning Stage 10: 100% Bonus EXP! ", 50, 1500, 4, 0, -200, 1, 4, 2, 0, 0) +sm.closeUI(1128) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) diff --git a/scripts/field/hillah_ExpeditionEnter.py b/scripts/field/hillah_ExpeditionEnter.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/hontale_boss1.py b/scripts/field/hontale_boss1.py new file mode 100755 index 0000000..e298192 --- /dev/null +++ b/scripts/field/hontale_boss1.py @@ -0,0 +1,11 @@ +# 240060000 ~ 240060002 +BASE_MAP = 240060000 + +NORMAL = 0 +HARD = 1 +EASY = 2 + +diff = field.getId() - BASE_MAP +sm.chat(str(field.getId())) +ht = 8810000 + diff * 100 +sm.spawnMob(ht, 957, 230) \ No newline at end of file diff --git a/scripts/field/hontale_boss2.py b/scripts/field/hontale_boss2.py new file mode 100755 index 0000000..e844da1 --- /dev/null +++ b/scripts/field/hontale_boss2.py @@ -0,0 +1,11 @@ +# 240060000 ~ 240060002 +BASE_MAP = 240060100 + +NORMAL = 0 +HARD = 1 +EASY = 2 + +diff = field.getId() - BASE_MAP +sm.chat(str(field.getId())) +ht = 8810001 + diff * 100 +sm.spawnMob(ht, -420, 230) \ No newline at end of file diff --git a/scripts/field/hontale_guide.py b/scripts/field/hontale_guide.py new file mode 100755 index 0000000..7de4866 --- /dev/null +++ b/scripts/field/hontale_guide.py @@ -0,0 +1,4 @@ +# Horntail | Horntail's cave (easy) + + +sm.systemMessage("Destroy the crystal to spawn the horntail...") \ No newline at end of file diff --git a/scripts/field/iceCave.py b/scripts/field/iceCave.py new file mode 100755 index 0000000..2f2f139 --- /dev/null +++ b/scripts/field/iceCave.py @@ -0,0 +1,11 @@ +# 140090000 +sm.removeSkill(20000014) +sm.removeSkill(20000015) +sm.removeSkill(20000016) +sm.removeSkill(20000017) +sm.removeSkill(20000018) + +if not sm.hasSkill(20001295): + sm.lockInGameUI(False, False) + sm.giveSkill(20001295) + sm.chatScript("You learned the Combat Step skill.") \ No newline at end of file diff --git a/scripts/field/into_701220310.py b/scripts/field/into_701220310.py new file mode 100755 index 0000000..5c91ca9 --- /dev/null +++ b/scripts/field/into_701220310.py @@ -0,0 +1,19 @@ +# Shaolin Temple : Sutra Despository 5-6F (701220310) | Secret room used for a minigame in the Shaolin questline + +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +time = 3 *60 + +sm.giveCTS(CharacterTemporaryStat.Morph, 222, 0, 180) # nOption 222 = Gold Giant +sm.lockInGameUI(True) +sm.sayMonologue("#fNpc/9310047.img/stand/0# #e#fs30# [Find the Secret Library!]\r\n\r\n\r\n" + "" + "#fs16#Investigate Sutra Depository Floor 5-6 and find the Secret Library within the time limit.\r\n" + "A few tips:\r\n\r\n" + "1. Search inside for the secret portal to the Secret Library\r\n" + "2. Monsters won't attack you while you're in demon form.\r\n" + "3. You will return to your original form if you bump into any obstacles.\r\n" + "4. Monsters will attack you in your original form, so be careful!", True) + +sm.setInstanceTime(time, 701220200) +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/jett_tuto_0_0.py b/scripts/field/jett_tuto_0_0.py new file mode 100755 index 0000000..68c017a --- /dev/null +++ b/scripts/field/jett_tuto_0_0.py @@ -0,0 +1,111 @@ +# Created by MechAviv +# Map ID :: 620100000 +# Planet Cerberus : Somewhere on the planet Cerberus + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.giveAndEquip(1003530) +sm.hideUser(True) +OBJECT_1 = sm.sendNpcController(9201274, 50, -150) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(9201275, -50, -150) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.showFieldEffect("newPirate/text3", 0) +sm.sendDelay(1900) + + +sm.setSpeakerID(9201275) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("All right, I found you! Taste my space beam, you vicious criminal!") + + +sm.showNpcSpecialActionByObjectId(OBJECT_2, "attack", 0) +sm.setSpeakerID(9201274) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Oh yeah? Well, this shield from the royal guards will defend me against anything and everything!") + + +sm.showNpcSpecialActionByObjectId(OBJECT_1, "attack", 0) +sm.sendDelay(2000) + + +sm.setSpeakerID(9201275) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("...Y'know, it's kinda weird that a vicious criminal is using a good guy shield.") + + +sm.setSpeakerID(9201274) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I don't care. I don't wanna be a nasty criminal or a space pirate anyway!\r\nA royal guard is much cooler. I'm gonna live in the castle and protect the king!") + + +sm.setSpeakerID(9201275) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("But... why? Your family is like the most famous bounty hunter crew ever.\r\nI bet your parents want to take you on all kinds of adventures.") + + +sm.setSpeakerID(9201274) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It's cool, but it gets old after awhile. Sometimes you want to find something you really, really like and just... hold on to it. Protect it.") + + +sm.setSpeakerID(9201274) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I'm tired of being at home while my family vanishes off to parts unknown.") + + +sm.setSpeakerID(9201275) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...I think your family is the coolest.\r\nYou guys chase bad dudes all over space. That's crazy.") + + +sm.setSpeakerID(9201275) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I...I wanna make a cool space crew, just like your family.\r\nThough I... don't have a family to adventure with... or anything as neat as the Core...") + + +sm.setSpeakerID(9201274) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Someday my dad's Core will be mine... And I'll get really strong!\r\nWhen I do, I'll get rid of all those jerks that hurt your family, Burke!") + + +sm.setSpeakerID(9201275) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...Thanks, Jett.") + + +sm.setSpeakerID(9201274) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Uh-oh, it's already dinner time! Hurry up, Burke!") + + +sm.moveNpcByObjectId(OBJECT_1, True, 600, 100) +sm.sendDelay(2000) + + +sm.setSpeakerID(9201275) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("......") + + +sm.moveNpcByObjectId(OBJECT_2, True, 600, 100) +sm.sendDelay(2000) + + +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.warp(620100010, 0) diff --git a/scripts/field/jett_tuto_10_0.py b/scripts/field/jett_tuto_10_0.py new file mode 100755 index 0000000..8fb974e --- /dev/null +++ b/scripts/field/jett_tuto_10_0.py @@ -0,0 +1,15 @@ +# Created by MechAviv +# Map ID :: 620100041 +# Nautilus : Wrecked Airship 1 + +# Inventory Operation with 1 operations. +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(2) +sm.localEmotion(3, 5000, False) +sm.forcedInput(4) +sm.sendDelay(2000) + + +sm.forcedInput(2) diff --git a/scripts/field/jett_tuto_10_0_before.py b/scripts/field/jett_tuto_10_0_before.py new file mode 100755 index 0000000..406c30b --- /dev/null +++ b/scripts/field/jett_tuto_10_0_before.py @@ -0,0 +1,28 @@ +# Created by MechAviv +# Map ID :: 620100040 +# Ballroom : Lobby + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.showFieldEffect("newPirate/Shuttle/0", 0) +sm.sendDelay(4200) + + +sm.showFieldEffect("newPirate/TimeTravel/0", 0) +sm.sendDelay(3500) + + +sm.showFieldEffect("newPirate/text1", 0) +sm.sendDelay(1500) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) + +sm.warp(620100041, 0) diff --git a/scripts/field/jett_tuto_10_1.py b/scripts/field/jett_tuto_10_1.py new file mode 100755 index 0000000..a4eaa83 --- /dev/null +++ b/scripts/field/jett_tuto_10_1.py @@ -0,0 +1,92 @@ +# Created by MechAviv +# Map ID :: 620100041 +# Nautilus : Wrecked Airship 1 + +sm.localEmotion(5, 3000, False) +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/11", 2000, 0, -100, -2, -2, False, 0) +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext(" #b(The ship is a wreck!)#k") + + +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("#b(Wha-what happened? #p9270083# and I took off, those guards were scorching our backsides with their batteries...)#k") + + +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay(" #b(The emergency lights came on and everything started shaking. Musta ruptured our photon lines and caused a backlash wormhole! Can't believe I made it out alive... Where's #b#p9270083##k?)#k") + + +sm.sendDelay(1000) + + +sm.localEmotion(6, 3000, False) +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/10", 1500, 0, -100, -2, -2, False, 0) +sm.sendDelay(1500) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/9", 2000, 0, -100, -2, -2, False, 0) +sm.sendDelay(1500) + + +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext(" Wh-where... where is... ") + + +sm.sendDelay(1000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/12", 1500, 0, -100, -2, -2, False, 0) +sm.sendDelay(1500) + + +sm.reservedEffect("Effect/DirectionNewPirate.img/newPirate/face02") +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/13", 2000, 0, -100, -2, -2, False, 0) +sm.sendDelay(1500) +sm.reservedEffect("Effect/DirectionNewPirate.img/newPirate/face02") + + +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#b(I must've dropped it when we crashed! I've gotta find it!)#k") + + +sm.sendDelay(1000) + + +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#b(The core must have saved my hide... but I don't feel its power anymore.)#k") + + +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Wait, but... Burke... Where is Burke? Surely he survived the crash...") + + +sm.setSpeakerID(9270086) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I should ask that person.") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/field/jett_tuto_12_0.py b/scripts/field/jett_tuto_12_0.py new file mode 100755 index 0000000..9f208ba --- /dev/null +++ b/scripts/field/jett_tuto_12_0.py @@ -0,0 +1,9 @@ +# Created by MechAviv +# Map ID :: 620100042 +# Nautilus : Wrecked Airship 2 + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.setStandAloneMode(True) +sm.forcedInput(2) diff --git a/scripts/field/jett_tuto_12_1.py b/scripts/field/jett_tuto_12_1.py new file mode 100755 index 0000000..0e17418 --- /dev/null +++ b/scripts/field/jett_tuto_12_1.py @@ -0,0 +1,183 @@ +# Created by MechAviv +# Map ID :: 620100042 +# Nautilus : Wrecked Airship 2 + +OBJECT_1 = sm.sendNpcController(9270084, 143, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.sendSessionValue("mastema", OBJECT_1) +sm.forcedInput(2) +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/16", 2000, 0, -100, -2, -2, False, 0) +sm.sendDelay(1900) + + +sm.forcedInput(0) +sm.sendDelay(2000) + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#b#p9270084##k! What's with the outfit?") + + +sm.forcedInput(2) +sm.sendDelay(1000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/17", 2000, 0, -100, -2, -2, False, 0) +sm.forcedInput(0) +sm.sendDelay(2000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/9", 2000, 0, -80, -2, -2, False, 0) +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/9", 0, 0, -100, 0, OBJECT_1, False, 0) +sm.sendDelay(2000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/18", 2000, 0, -100, -2, -2, False, 0) +sm.sendDelay(2000) + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("S-seriously, #p9270084#, what's with the creepy get-up? Are you-- THE CORE!") + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I knew you were the best captain ever! Toss me the core and I'll get us off of this backwater planet!") + + +sm.sendDelay(2000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/11", 0, 0, -100, 0, OBJECT_1, False, 0) +sm.sendDelay(2000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/3", 0, 0, -100, 0, OBJECT_1, False, 0) +sm.sendDelay(2000) + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Do you feel powerless without it? Do you feel like you can't really make a difference in the world?") + + +sm.showNpcSpecialActionByObjectId(OBJECT_1, "alert", 0) +sm.sendDelay(2000) + + +sm.playSound("demonSlayer/arkAttack0", 100) +sm.showEffect("Effect/DirectionNewPirate.img/effect/tuto/pirateAttack", 2000, 0, -50, -2, -2, False, 0) +sm.forcedInput(1) +sm.sendDelay(500) + + +sm.forcedInput(0) +sm.sendDelay(100) + + +sm.forcedInput(2) +sm.sendDelay(100) + + +sm.localEmotion(5, 2000, False) +sm.forcedInput(4) +sm.sendDelay(2000) + + +sm.localEmotion(5, 3500, False) +sm.sendDelay(1500) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/21", 2000, 20, -70, -2, -2, False, 0) +sm.sendDelay(1000) + + +sm.sendDelay(2000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/19", 2000, 20, -70, -2, -2, False, 0) +sm.sendDelay(2000) + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Wh-what do you think you're doing?! Stop jokin' around and give me that core before I start rethinking our friendship! ") + + +sm.sendDelay(1000) + + +sm.sendDelay(2000) + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("You really thought of me as a friend? All my life, I walked in your shadow. No matter how much I trained, I couldn't surpass the power of your core.") + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Letting you live the life I've had to lead is my last gift to you, friend.") + + +sm.sendDelay(1000) + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Nobody outside my family can use the core. You know that! It ain't gonna be anything but a useless rock to you!") + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Then it'll be a useless rock to the both of us and we'll finally be equals... the way it was meant to be. Now, farewell...") + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Wait! Just, just tell me you didn't assassinate the king. Tell me you didn't do it, #p9270084#...") + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("We've all got secrets, and that's one I'm not ready to give up just yet. ") + + +sm.sendDelay(2000) +sm.reservedEffect("Effect/DirectionNewPirate.img/newPirate/face05") + + +sm.setSpeakerID(9270084) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#b#p9270084##k... it... it didn't have to be like this... ugh...") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(620100043, 0) diff --git a/scripts/field/jett_tuto_13_0.py b/scripts/field/jett_tuto_13_0.py new file mode 100755 index 0000000..0544c62 --- /dev/null +++ b/scripts/field/jett_tuto_13_0.py @@ -0,0 +1,225 @@ +# Created by MechAviv +# Map ID :: 620100044 +# Nautilus : Nautilus Bunkroom + +sm.startQuest(5674) +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.setStandAloneMode(True) +sm.forcedInput(0) +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("You're up. How ya feeling? Any concussions? Fuzzy vision? Head injury rage?") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("What's going on...? Are you the... royal guards? I didn't do anything!") + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Yep, definitely a concussion... Relax, cowpoke! You're safe here with us scallywags.") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Calm yourself down before I shackle you to the bed. You're on board the Nautilus and I'm her captain, Kyrin. ") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Bark tells me you're from... space? Why did you come to Maple World?") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("#b(Maple... World? I've never even heard of that! This place must be a real dump to get left off the galactic charts.)#k") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("#b(I'd better keep low for now... let these outlaws think I'm not a threat. They saved my backside, but a bounty as big as mine has a funny way of changin' people's minds.)#k") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("I was on a space-vacation when my ship's converter fan pooped out. Lucky for me your, planet was close and soft enough to touch down on. ") + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Y-You're sayin' you came from OUTER SPACE?! Hahahahaha! Captain, you don't believe this nonsense, do you?") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#b(I knew that ship wasn't regular old Maple tech. I wonder how much I could make off of a real live alien...)#k") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Put your tongue back in your mouth, Bark. Tell me about your ship, alien. It was awfully small to be pumping out that kind of power. You sure you're not just trying to cover up some secret government experiment?") + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Captain... You gotta be kidding...") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("My kin figured out focus-beam propulsion a hundred years ago. You can believe whatever you want, but it works.") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#b(With that kind of power, the Nautilus would be unstoppable! I am gonna be SO RICH.)#k") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("We'll help you fix up your craft. In the meantime, you need to stay here and rest. I'll make sure the crew gives you a wide berth.") + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("If the Captain likes you, so do I. That's why I'm gonna give you back all the stuff I stole from you when you crashed.") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Good show of hospitality there, Bark. That's a fancy looking gun you've got, alien, but what's with the busted up chunk of rock?") + + +sm.sendDelay(1000) + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#b(That light... It has to be the core! B-but, it's only a fragment...)#k") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("I found this floating around in the bits of your ship.") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#b(It's a very small fragment of the Core...I must do what I can with this piece...and find a way to get my powers back!)#k") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Ha! I'd be careful about what you say around old Black Bark. He never forgets a debt!") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#b(These outlaws should be the perfect bunch to keep me hidden for now. All I've gotta do is stick with them and lay low.)#k") + + +sm.setSpeakerID(9270089) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Why don't you get out and stretch your legs. If you're gonna stay a while, you should start getting in good with the crew right away. They're a lively bunch at the best of times. Come by the #m120000101# when you're done.") + + +sm.chatScript("Follow the arrow and move to the portal.") +sm.sendDelay(500) + + +sm.setStandAloneMode(False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("(Even this tiny fragment of the Core is giving off a lot of power. I may make it yet.)") + +sm.levelUntil(10) +sm.giveAndEquip(1003530) +sm.giveItem(1492139) +sm.giveAndEquip(1352820) +# [INVENTORY_GROW] [01 1C ] +# [INVENTORY_GROW] [04 1C ] +sm.resetStats() +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 58 01 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 A3 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 58 01 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 A3 00 00 00 FF 00 00 00 00 +sm.addSP(5, True) +# Inventory Operation with 1 operations. +# Inventory Operation with 1 operations. +sm.createQuestWithQRValue(5675, "1") + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("(If I'm gonna surround myself with outlaws, I need my gun at my side.\r\nJust need to open my inventory first. I wonder if the #bI#k key still works.)") + +sm.createQuestWithQRValue(5674, "1") +sm.startQuest(53256)# not sure about that +sm.avatarOriented("UI/tutorial.img/29") diff --git a/scripts/field/jett_tuto_13_0_before.py b/scripts/field/jett_tuto_13_0_before.py new file mode 100755 index 0000000..d743246 --- /dev/null +++ b/scripts/field/jett_tuto_13_0_before.py @@ -0,0 +1,69 @@ +# Created by MechAviv +# Map ID :: 620100043 +# Ballroom : Lobby + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.sendDelay(3000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/6", 2000, 130, 0, 10, -2, True, 0) +sm.sendDelay(1000) + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("(.......)") + + +sm.sendDelay(1000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/7", 2000, 130, 0, 10, -2, True, 0) +sm.sendDelay(2000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/8", 2000, 130, 0, 10, -2, True, 0) +sm.sendDelay(1000) + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("(Ugh... where... am I?)") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("I don't know a spaceship from a barnacle, but anybody that can survive that kinda fall and still have a thirst for treasure is good in my book.") + + +sm.sendDelay(500) + + +sm.setSpeakerID(9270088) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("(Who... are these voices? #b#p9270084##k... my core... )") + + +sm.sendDelay(1500) + + +sm.showFieldEffect("newPirate/wakeup2", 0) +sm.sendDelay(7600) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) + +sm.warp(620100044, 0) \ No newline at end of file diff --git a/scripts/field/jett_tuto_1_0.py b/scripts/field/jett_tuto_1_0.py new file mode 100755 index 0000000..cd44a8e --- /dev/null +++ b/scripts/field/jett_tuto_1_0.py @@ -0,0 +1,140 @@ +# Created by MechAviv +# Map ID :: 620100010 +# Planet Cerberus : In Front of the Castle +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.setStandAloneMode(True) +sm.showFieldEffect("newPirate/text4", 0) +sm.sendDelay(1900) + + +sm.forcedInput(1) +sm.sendDelay(3000) + + +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Ugh, failed again... Why can't I pass this thing? Why is it so hard to become a royal guard?") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Team operations?! Fights are supposed to be mano-a-mano. Everyone else is just in the way!") + + +sm.sendDelay(1200) + + +OBJECT_1 = sm.sendNpcController(9270083, -630, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.moveNpcByObjectId(OBJECT_1, False, 400, 100) +sm.sendDelay(5500) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("How'd it go, Jett?") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Five failures and counting. I just don't get it. I have the power of the Core... What could be the problem?") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("My dad wanted me to follow in his footsteps as a bounty hunter...\r\nMaybe the universe is trying to tell me something with all these failures...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Don't think of it as failure. Think of it as... opportunity!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Why don't you join my bounty hunters? I've always thought you'd be perfect.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("...Do you really think that's what I should do?") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Actually, yes. Think of your family, Jett.\r\nThey only wanted one thing, and that's for you to become a great bounty hunter, battle evil, and carry on their legacy.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Protecting the king is important, of course. But maybe there's a better way for you to do that.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("...You know what? You're right.\r\nOkay, I'll roll with you and your hunters for awhile, Burke. I owe you.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Owe me? Hardly. Your family took me in after I lost my own family to pirates.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It's your family that fueled my dreams to become a bounty hunter, and look at me now!\r\nI've always thought of working with you as my destiny.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Burke...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Heh. I may not have a Core, but I'm proud to have a friend who does.\r\nTests don't mean anything in the real world. I know you have the power and the potential to become the greatest bounty hunter of all time.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Burke, I'm proud to call you family.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("My thoughts exactly, Jett.") + + +sm.sendDelay(1200) + + +sm.sendNpcController(OBJECT_1, False) +sm.warp(620100020, 0) diff --git a/scripts/field/jett_tuto_2_0.py b/scripts/field/jett_tuto_2_0.py new file mode 100755 index 0000000..91831ad --- /dev/null +++ b/scripts/field/jett_tuto_2_0.py @@ -0,0 +1,58 @@ +# Created by MechAviv +# Map ID :: 620100020 +# Spaceship : Corridor +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) + +OBJECT_1 = sm.sendNpcController(9201276, 40, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(9201277, -270, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(9201278, -170, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(9201279, -90, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +OBJECT_5 = sm.sendNpcController(9270083, 150, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +sm.showFieldEffect("newPirate/text4", 0) +sm.sendDelay(1900) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Good work, team. All of you together were able to bring in the whole group.") + + +sm.sendDelay(1000) + + +sm.setSpeakerID(9201276) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Whatever, Burke! You're nothing without that loser with the Core. That's the only reason you had a chance!") + + +sm.setSpeakerID(9201276) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Man, shut your face. I don't want to rough you up before we turn you in. Lock them up and keep an eye on them!") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Roger that, chief.") + + +sm.sendDelay(1200) + + +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.sendNpcController(OBJECT_4, False) +sm.sendNpcController(OBJECT_5, False) +sm.warp(620100021, 0) diff --git a/scripts/field/jett_tuto_2_1.py b/scripts/field/jett_tuto_2_1.py new file mode 100755 index 0000000..632eea3 --- /dev/null +++ b/scripts/field/jett_tuto_2_1.py @@ -0,0 +1,41 @@ +# Created by MechAviv +# Map ID :: 620100021 +# Spaceship : Captain's Quarters + +OBJECT_1 = sm.sendNpcController(9270083, 40, -75) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(2000) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Forget those idiots. You'er the captain of this crew. We all know that.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I know. Thanks, Jett.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Right, hey, we're gonna party before we make the drop-off. Come on!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Okay, I'll be there soon.") + + +sm.forcedInput(2) diff --git a/scripts/field/jett_tuto_2_2.py b/scripts/field/jett_tuto_2_2.py new file mode 100755 index 0000000..fa76977 --- /dev/null +++ b/scripts/field/jett_tuto_2_2.py @@ -0,0 +1,26 @@ +# Created by MechAviv +# Map ID :: 620100021 +# Spaceship : Captain's Quarters + +sm.sendDelay(1200) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("The Core... If only I had...") + + +sm.sendDelay(1200) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("No, what am I thinking! I can't be jealous of a friend like Jett... I should just go...") + + +sm.sendDelay(1200) + + +sm.warp(620100022, 0) diff --git a/scripts/field/jett_tuto_2_3.py b/scripts/field/jett_tuto_2_3.py new file mode 100755 index 0000000..3a05ad4 --- /dev/null +++ b/scripts/field/jett_tuto_2_3.py @@ -0,0 +1,76 @@ +# Created by MechAviv +# Map ID :: 620100022 +# Spaceship : Corridor + +sm.hideUser(True) +OBJECT_1 = sm.sendNpcController(9201277, -270, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(9201278, -180, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(9201279, -90, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(9270083, 610, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +sm.moveNpcByObjectId(OBJECT_4, True, 100, 100) +sm.sendDelay(1200) + + +sm.moveCamera(False, 150, 200, -167) + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Jett was all sorts of awesome today. I've never seen anyone so strong.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("?") + + +sm.sendDelay(1200) + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Yeah, that Core thing is just amazing. Jett's unstoppable... I bet even Captain Burke couldn't win that fight.") + + +sm.setSpeakerID(9201279) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Hah, that's kind of sad.") + + +sm.setSpeakerID(9201279) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I mean, maybe Jett should just be the captain. The king trusts Jett more anyway. We'd probably all be better off.") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("That's what everyone's been saying. Ah well, let's get to the party before all the food is gone.") + + +sm.sendDelay(1200) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext(".......") + + +sm.sendDelay(1200) + + +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.sendNpcController(OBJECT_4, False) +sm.warp(620100030, 0) diff --git a/scripts/field/jett_tuto_3_0.py b/scripts/field/jett_tuto_3_0.py new file mode 100755 index 0000000..7f5022b --- /dev/null +++ b/scripts/field/jett_tuto_3_0.py @@ -0,0 +1,185 @@ +# Created by MechAviv +# Map ID :: 620100030 +# Dark Cave : Dark Cave + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) + +sm.hideUser(True) +OBJECT_1 = sm.sendNpcController(9201277, -180, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(9201278, -100, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(9201279, -30, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(9270083, 60, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +sm.showFieldEffect("newPirate/text5", 0) +sm.sendDelay(1900) + + +sm.moveNpcByObjectId(OBJECT_4, False, 50, 100) +sm.sendDelay(1200) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("They're here... They've got nowhere else to run. I'm going to get them today!") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Captain, shouldn't we call for backup? This might-") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("No! They're not getting away from me! I won't let them!") + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("But what if it's a trap like last time? We were lucky Jett was there to-") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Jett? Jett?! What's so great about Jett? Jett is nothing without the Core! NOTHING!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I'M the captain here!") + + +sm.sendDelay(1200) + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Captain, calm down. We just need to be careful...") + + +sm.sendDelay(1200) + + +sm.tremble(0, 1300, 30) +sm.sendDelay(1200) + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("What was that?") + + +OBJECT_5 = sm.sendNpcController(9201280, 440, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +OBJECT_6 = sm.sendNpcController(9201281, 530, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_6, "summon", 0) +OBJECT_7 = sm.sendNpcController(9201282, 590, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_7, "summon", 0) +OBJECT_8 = sm.sendNpcController(9201283, 650, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_8, "summon", 0) +OBJECT_9 = sm.sendNpcController(9201284, 710, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_9, "summon", 0) +OBJECT_10 = sm.sendNpcController(9201285, 770, 37) +sm.showNpcSpecialActionByObjectId(OBJECT_10, "summon", 0) +sm.sendDelay(1900) + + +sm.setSpeakerID(9201280) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Ha! Gotcha! Burke, you fool. I heard you've been losing your edge. Guess the rumors were true.") + + +sm.setSpeakerID(9201280) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("And without Jett, you're easy pickings. Say goodnight, buddy.") + + +sm.moveNpcByObjectId(OBJECT_5, True, 20, 100) +sm.moveNpcByObjectId(OBJECT_6, True, 20, 100) +sm.moveNpcByObjectId(OBJECT_7, True, 20, 100) +sm.moveNpcByObjectId(OBJECT_8, True, 20, 100) +sm.moveNpcByObjectId(OBJECT_9, True, 20, 100) +sm.moveNpcByObjectId(OBJECT_10, True, 20, 100) +sm.sendDelay(1200) + + +sm.setSpeakerID(9201280) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Stop!") + + +sm.showEffect("Skill/000.img/skill/0001227/effect", 0, 0, 0, -2, -2, False, 0) +sm.hideUser(False) +sm.sendDelay(1200) + + +sm.setSpeakerID(9201280) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("...It's you!") + + +sm.setSpeakerID(9201280) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Glad I decided to drop in.") + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Chief! Thank goodness!") + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("You guys sit tight, I've got this!") + + +sm.setSpeakerID(9201280) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Rrgh, everyone, run for it! We can't take the one with the Core.") + + +sm.forcedAction(5, 0) +sm.showEffect("Skill/572.img/skill/5721064/effect", 0, 0, 0, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(9201280) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("N-no...") + + +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.sendNpcController(OBJECT_4, False) +sm.sendNpcController(OBJECT_5, False) +sm.sendNpcController(OBJECT_6, False) +sm.sendNpcController(OBJECT_7, False) +sm.sendNpcController(OBJECT_8, False) +sm.sendNpcController(OBJECT_9, False) +sm.sendNpcController(OBJECT_10, False) +sm.warp(620100023, 0) diff --git a/scripts/field/jett_tuto_4_0.py b/scripts/field/jett_tuto_4_0.py new file mode 100755 index 0000000..bb631df --- /dev/null +++ b/scripts/field/jett_tuto_4_0.py @@ -0,0 +1,240 @@ +# Created by MechAviv +# Map ID :: 620100023 +# Spaceship : Captain's Quarters +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) + +OBJECT_1 = sm.sendNpcController(9270083, 50, -75) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(9201286, -450, -143) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.showFieldEffect("newPirate/text6", 0) +sm.sendDelay(1900) + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Burke... what WAS that? You put yourself and the crew in danger. That's not the Burke I know...") + + +sm.sendDelay(1200) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("I just... I just wanted to be as good as you.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Look, I'm not even that good! All my power comes from the Core. It's not me.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I never wanted to be a bounty hunter anyway. You're the-") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Stop, Jett! That's the thing!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("?") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You never wanted to be a bounty hunter! I did. But YOU'RE the one with the Core! It's not...") + + +sm.sendDelay(1900) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("...I think you just need some rest. I'll take care of the crew. You just relax... and think things over.") + + +sm.forcedInput(2) +sm.sendDelay(3000) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Aargh...!") + + +sm.sendDelay(3000) + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Kshhhhhh... Kshhhh...") + + +sm.sendDelay(1200) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("?") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("What the...? Is this thing busted?") + + +sm.moveNpcByObjectId(OBJECT_1, True, 300, 100) +sm.sendDelay(4000) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Who are you?") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("This... Kshhh... Maple World... Kshhhhh... We are... Kshh.... revive the master...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Maple World... I've heard of that place. What do you want with me?") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("We need... Kshhhhh.... power of the Core...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("The Core? Then you're out of luck. It's not mine.") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kshh... I know... Kshhhh... Bring... to us... Kshhhhhh...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Yeah, sure. Why would I betray my own friend for some creepy stranger's request?") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Friend....? Kshhhh... An ungrateful... Kshhh... stealing your position... Kshh... Truly your friend...?") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You've been bugging our ship!") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Ha ha ha... not too... difficult to find your ship... Kshhhh... the Core... more powerful than you'll ever know...") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kshhhh... Bring the Core to Maple World... Kshhh... And Jett will lose... Kshhhhhh... you'll be at the top again...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("The top... again?") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You've been robbed of so many... Kshhhh... because of the Core....") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...Let's assume I do this thing. I can't just drag Jett to the other side of the universe.") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kshhhhhhh... Eliminate... the king... Kshhhhh... Blame Jett...") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("They will chase... Kshhhh... ends of the universe... Kshhhh... cannot return to your world...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("The king... I've never forgiven him for ignoring my struggle... And fawning over Jett...") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kshhhh... Help us... and the power... is yours...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...Can you guarantee Jett's safety? I'll bring you the Core, and that's all.") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kshhhh... Exactly what... we want...") + + +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.warp(620100024, 0) diff --git a/scripts/field/jett_tuto_4_1.py b/scripts/field/jett_tuto_4_1.py new file mode 100755 index 0000000..2c88e9f --- /dev/null +++ b/scripts/field/jett_tuto_4_1.py @@ -0,0 +1,24 @@ +# Created by MechAviv +# Map ID :: 620100024 +# Spaceship : Jett's Room + +sm.hideUser(True) +sm.completeQuest(5757) +OBJECT_1 = sm.sendNpcController(9270083, -230, -85) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.moveNpcByObjectId(OBJECT_1, False, 100, 100) +sm.sendDelay(1900) + + +sm.completeQuest(5757) +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Jett... I'm so sorry, but I need your power.\r\nJust the Core... Please forgive me.") + + +sm.sendDelay(3000) + + +sm.sendNpcController(OBJECT_1, False) +sm.warp(620100025, 0) diff --git a/scripts/field/jett_tuto_5_0.py b/scripts/field/jett_tuto_5_0.py new file mode 100755 index 0000000..26b100b --- /dev/null +++ b/scripts/field/jett_tuto_5_0.py @@ -0,0 +1,232 @@ +# Created by MechAviv +# Map ID :: 620100025 +# Spaceship : Corridor +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) + +sm.completeQuest(5757) +sm.showFieldEffect("newPirate/text6", 0) +sm.sendDelay(1900) + + +OBJECT_1 = sm.sendNpcController(9201277, 80, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.showEffect("Skill/000.img/skill/0001227/effect", 0, 10, -20, 0, OBJECT_1, False, 0) +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Chief! Code red!") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("What is it?") + + +sm.forcedInput(2) +sm.sendDelay(400) + + +sm.forcedInput(0) +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("The king...he's... He's been assassinated! But the thing is...") + + +sm.sendDelay(1200) + + +OBJECT_2 = sm.sendNpcController(9270083, -520, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Jett!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Burke! Where have you been?\r\nDid you hear? The king was assassinated!") + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.moveNpcByObjectId(OBJECT_2, False, 300, 100) +sm.sendDelay(4000) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("...I've heard. Look at this.") + + +sm.showFieldEffect("newPirate/pendant_w", 0) +sm.sendDelay(3000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/1", 2000, 0, -80, -2, -2, False, 0) +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Wha......What?! How am I wanted...? For what...? Is this real, Burke?!") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("We were about to tell you.") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Everyone says you were the one who assassinated the king.") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("What?! No! It's not me! I've been right here on the ship!") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("We know, but-") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("There's no time! The royal guards must already be homing in on us. You need to go!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("No, I won't run! That'll only convince them that I did it! I'm innocent, and I'll prove it!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I have no reason to assassinate the king!") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Jett, there are witnesses. I don't know how, but... No one will believe you. And the people are angry.") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I can't believe it... I didn't do anything...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Jett, I know you're innocent. We all do. But you have to get out of here. Get somewhere safe first, then think about what we can do to get you out of this mess.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It's only been a few hours, but everyone's already convinced you're guilty. I mean, just look at this reward.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You're a bounty hunter. You know how this works.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Is running away... really the only option I have?") + + +OBJECT_3 = sm.sendNpcController(9201278, 200, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +sm.showEffect("Skill/000.img/skill/0001227/effect", 0, 10, -20, 0, OBJECT_3, False, 0) +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Chief! The royal guardsmen are here! If you're going, it's got to be now. Don't worry, we'll buy you some time!") + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("No, I don't want anyone else involved in this mess! I don't know how I got into it, but I'm going to get myself out of it.") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You've saved our lives so many times. Let us do this one thing for you.") + + +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("...You guys...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You don't have much time! We've got your back, now go!") + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Please... Take care!") + + +sm.setSpeakerID(9201278) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("...We'll meet again, I promise!") + + +sm.moveNpcByObjectId(OBJECT_2, True, 400, 100) +sm.sendNpcController(OBJECT_2, False) +sm.forcedInput(1) +sm.sendDelay(4000) + + +sm.forcedInput(0) +sm.hideUser(True) +sm.setSpeakerID(9201277) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("We've got to do our part! Even if it means putting our lives on the line...") + + +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_3, False) +sm.warp(620100026, 0) diff --git a/scripts/field/jett_tuto_6_0.py b/scripts/field/jett_tuto_6_0.py new file mode 100755 index 0000000..033fc2a --- /dev/null +++ b/scripts/field/jett_tuto_6_0.py @@ -0,0 +1,39 @@ +# Created by MechAviv +# Map ID :: 620100026 +# Spaceship : In Front of the Shuttle +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) + +sm.giveSkill(228, 1, 1) +OBJECT_1 = sm.sendNpcController(9270083, 430, -131) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +for i in range(3): + sm.spawnMob(9420564, -450, -120, False) +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("The guardsmen are already here! Does this mean our crew is...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("No... They were good people! I'm innocent! WHY CAN'T YOU SEE THAT?!") + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/3", 2000, 0, -80, -2, -2, False, 0) +sm.sendDelay(500) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/attack_tuto", 3000, 0, -200, -2, -2, False, 0) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.chatScript("Eliminate all Guards.") +sm.startQuestNoCheck(5671) \ No newline at end of file diff --git a/scripts/field/jett_tuto_7_1.py b/scripts/field/jett_tuto_7_1.py new file mode 100755 index 0000000..14fea39 --- /dev/null +++ b/scripts/field/jett_tuto_7_1.py @@ -0,0 +1,31 @@ +# Created by MechAviv +# Map ID :: 620100027 +# Spaceship : Spaceship Cockpit + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(1000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/20", 2000, 0, -100, -2, -2, False, 0) +sm.sendDelay(2000) + +sm.spawnMob(9420567, -378, -120, False) +sm.setSpeakerID(9270085) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("You there! Get away from those controls, and drop that key!") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.chatScript("Eliminate the Key Keeper and find the Master Key.") +sm.startQuestNoCheck(5672) +sm.createQuestWithQRValue(5672, "001") \ No newline at end of file diff --git a/scripts/field/jett_tuto_8_0.py b/scripts/field/jett_tuto_8_0.py new file mode 100755 index 0000000..1ec65fc --- /dev/null +++ b/scripts/field/jett_tuto_8_0.py @@ -0,0 +1,13 @@ +# Created by MechAviv +# Map ID :: 620100028 +# Spaceship : In Front of the Shuttle + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(9270083, 34, -137) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.sendSessionValue("mastema", OBJECT_1) +sm.forcedInput(2) diff --git a/scripts/field/jett_tuto_8_1.py b/scripts/field/jett_tuto_8_1.py new file mode 100755 index 0000000..f3082e7 --- /dev/null +++ b/scripts/field/jett_tuto_8_1.py @@ -0,0 +1,26 @@ +# Created by MechAviv +# Map ID :: 620100028 +# Spaceship : In Front of the Shuttle + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("You found the #bMaster Key#k!") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("The ship's all prepped! Let's turn and burn!") + + +sm.sendDelay(1000) + + +sm.setStandAloneMode(False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) + +sm.warp(620100029, 0) diff --git a/scripts/field/jett_tuto_9_0.py b/scripts/field/jett_tuto_9_0.py new file mode 100755 index 0000000..8f1c88b --- /dev/null +++ b/scripts/field/jett_tuto_9_0.py @@ -0,0 +1,62 @@ +# Created by MechAviv +# Map ID :: 620100029 +# Spaceship : In Front of the Shuttle + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.setStandAloneMode(True) +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(9270083, 2415, -134) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.sendSessionValue("Ade", OBJECT_1) +sm.forcedInput(1) +sm.sendDelay(1000) + + +sm.forcedInput(0) +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/2", 0, 0, -100, 0, OBJECT_1, False, 0) +sm.sendDelay(2000) + + +sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg2/1", 0, 0, -100, 0, OBJECT_1, False, 0) +sm.sendDelay(1000) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("#p9270083#. You follow me outta here and then you disappear. They're after me, not you. ") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("What are you talking about? We're... we're family. I won't let you face this on your own.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Look, just get on the shuttle!") + + +sm.sendDelay(1000) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Burke... Thank you...") + + +sm.sendDelay(2000) + + +sm.chatScript("Follow the arrows to the portal.") +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/field/kaiser_illust1.py b/scripts/field/kaiser_illust1.py new file mode 100755 index 0000000..70a9983 --- /dev/null +++ b/scripts/field/kaiser_illust1.py @@ -0,0 +1,14 @@ +# Created by MechAviv +# Map ID :: 940002010 +# Hidden Street : Magnus's Ambush + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.reservedEffect("Effect/Direction9.img/KaiserTutorial/Scene0") +sm.sendDelay(7200) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940001110, 0) diff --git a/scripts/field/kaiser_illust2.py b/scripts/field/kaiser_illust2.py new file mode 100755 index 0000000..5cb2a60 --- /dev/null +++ b/scripts/field/kaiser_illust2.py @@ -0,0 +1,13 @@ +# Created by MechAviv +# Map ID :: 940002020 +# Hidden Street : Kaiser's Awakening + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.reservedEffect("Effect/Direction9.img/KaiserTutorial/Scene1") +sm.sendDelay(7200) + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940001230, 0) diff --git a/scripts/field/kaiser_tutoC_0_0.py b/scripts/field/kaiser_tutoC_0_0.py new file mode 100755 index 0000000..484257a --- /dev/null +++ b/scripts/field/kaiser_tutoC_0_0.py @@ -0,0 +1,139 @@ +# Created by MechAviv +# Map ID :: 940001200 +# Eastern Region of Pantheon : Near East Sanctum + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(3000103, -1400, 0) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000104, -1650, 0) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Wow, what lovely weather!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Get your head out of the clouds. #h0# and I have already become knights. When are you going to become a knight?") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I dunno. I don't have magic power or anything. Maybe I should look for some!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I'm pretty sure you've told me that one about a thousand times.") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Anyways, you guys are knights! That's so cool! You can ride on horses and wear shiny armor and stuff, right? I want in on that!") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I'm not sure you're cut out to be a knight, Tear.") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Do what?! I thought we all promised to become knights! That's what the Heliseum Force is all about, right? Well, that and awesome cook-outs.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Yeah, but you don't use magic. You have to face the truth sometime...") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Ugh, why do you keep bringing that up? Magic is no big thing.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I just want you to think sometimes. Anyway, I gotta get back.") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Man, I wish I was going too.") + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/0", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Really? Because I don't feel so good about this.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("What are you talking about? Come on, you can daydream about smooching with #h0# on the way back to camp.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("No... Something's there. I think something is happening at the East Sanctum.") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Well, let's go check it out! I wonder what's going on?") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Tear, are you really going to fall for that rubbish?") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Well, #h0# is a pretty good guesser. And I don't have anything else to do.") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I wish I had the authority to overrule you people... Fine. Let's go.") + + +sm.moveNpcByObjectId(OBJECT_1, False, 400, 100) +sm.moveNpcByObjectId(OBJECT_2, False, 400, 100) +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg0/3", 1200, 0, -120, 0, OBJECT_1, False, 0) +sm.sendDelay(600) + + +sm.forcedInput(2) diff --git a/scripts/field/kaiser_tutoC_0_1.py b/scripts/field/kaiser_tutoC_0_1.py new file mode 100755 index 0000000..f0dd21c --- /dev/null +++ b/scripts/field/kaiser_tutoC_0_1.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940001200 +# Eastern Region of Pantheon : Near East Sanctum + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940001210, 0) diff --git a/scripts/field/kaiser_tutoC_1_0.py b/scripts/field/kaiser_tutoC_1_0.py new file mode 100755 index 0000000..d41b8c4 --- /dev/null +++ b/scripts/field/kaiser_tutoC_1_0.py @@ -0,0 +1,136 @@ +# Created by MechAviv +# Map ID :: 940001210 +# Eastern Region of Pantheon : East Sanctum + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(3000103, -300, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000104, -450, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000110, -120, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(3000114, -100, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +OBJECT_5 = sm.sendNpcController(3000111, 130, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +OBJECT_6 = sm.sendNpcController(3000115, 250, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_6, "summon", 0) +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Nothing here, big surprise...") + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/3", 1200, 0, -120, 0, OBJECT_2, False, 0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/3", 1200, 0, -120, -2, -2, False, 0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/4", 1200, 0, -120, 0, OBJECT_1, False, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Well, those priests are keeping busy. It's funny, though...I don't recognize any of them.") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Shhh! Something is not right. Velderoth!") + + +sm.setSpeakerID(3000104) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You're right. They look suspicious. I'm going to run back to base and get help. You two stay here and keep an eye on them, okay? But no heroics. You get out of here if they spot you.") + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg0/0", 1200, 0, -120, 0, OBJECT_1, False, 0) +sm.sendDelay(900) + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("What are you talking about?") + + +sm.sendNpcController(OBJECT_2, False) +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("They attacked the East Sanctum? What are they trying to do with the Relic?)") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("The relic's disappearance should weaken the shields.") + + +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 02 02 00 00 FF 00 00 00 00 +sm.setSpeakerID(3000114) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I thought the relic was cursed... should we really be touching it?") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I did not realize they allowed superstitious nincompoops entry to our order! Will you balk at the call of destiny?") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Are they trying to take the Relic?") + + +sm.setSpeakerID(3000103) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("We gotta stop them!") + + +sm.moveNpcByObjectId(OBJECT_1, False, 300, 100) +sm.sendDelay(300) + + +sm.forcedInput(2) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_3, False, 0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_4, False, 0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_5, False, 0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/1", 1200, 0, -120, 0, OBJECT_6, False, 0) +sm.sendDelay(600) + + +sm.forcedInput(0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/7", 900, 0, -120, 0, OBJECT_1, False, 0) +sm.sendDelay(900) + + +sm.showFieldEffect("kaiser/tear_rush", 0) +sm.sendDelay(3000) + + +# Unhandled Message [COLLECTION_RECORD_MESSAGE] Packet: 2A 01 00 00 00 2F 00 31 30 3A 31 3A 32 3A 31 31 3D 34 3B 31 30 3A 31 3A 32 3A 31 32 3D 35 3B 31 30 3A 31 3A 33 3A 31 35 3D 34 3B 31 30 3A 31 3A 33 3A 31 36 3D 35 +sm.sendNpcController(OBJECT_1, False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.sendNpcController(OBJECT_3, False) +sm.sendNpcController(OBJECT_4, False) +sm.sendNpcController(OBJECT_5, False) +sm.sendNpcController(OBJECT_6, False) +sm.warp(940001220, 0) diff --git a/scripts/field/kaiser_tutoC_2_0.py b/scripts/field/kaiser_tutoC_2_0.py new file mode 100755 index 0000000..4adf845 --- /dev/null +++ b/scripts/field/kaiser_tutoC_2_0.py @@ -0,0 +1,61 @@ +# Created by MechAviv +# Map ID :: 940001220 +# Eastern Region of Pantheon : East Sanctum + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(3000139, -150, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000110, -20, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000114, 70, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(3000111, 130, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +OBJECT_5 = sm.sendNpcController(3000115, 250, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +sm.sendSessionValue("enemy0", OBJECT_2) +sm.sendSessionValue("enemy1", OBJECT_3) +sm.sendSessionValue("enemy2", OBJECT_4) +sm.sendSessionValue("enemy3", OBJECT_5) +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Eh? A child dares to interfere?") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Tear, wait!") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("These kids are fearless. A pity we cannot allow any witnesses to escape.") + + +sm.setSpeakerID(3000110) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("You think you can take me down? Bring it!") + + +sm.setSpeakerID(3000114) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Ha! What can you do all by yourself?") + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/0", 1200, 0, -120, -2, -2, False, 0) +sm.forcedInput(2) diff --git a/scripts/field/kaiser_tutoC_2_1.py b/scripts/field/kaiser_tutoC_2_1.py new file mode 100755 index 0000000..c4752cb --- /dev/null +++ b/scripts/field/kaiser_tutoC_2_1.py @@ -0,0 +1,64 @@ +# Created by MechAviv +# Map ID :: 940001220 +# Eastern Region of Pantheon : East Sanctum +OBJECT_2 = sm.getIntroNpcObjectID(3000110) +OBJECT_3 = sm.getIntroNpcObjectID(3000114) +OBJECT_5 = sm.getIntroNpcObjectID(3000115) + +sm.forcedAction(451, 0) +sm.playSound("Kaiser/61001101", 100) +sm.showEffect("Skill/6100.img/skill/61001101/effect", 0, 0, 0, -2, -2, False, 0) +sm.sendDelay(210) + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/5", 1200, 0, -120, 0, OBJECT_2, False, 0) +sm.sendDelay(150) + + +sm.showNpcSpecialActionByObjectId(OBJECT_2, "die1", 0) +sm.sendDelay(1500) + + +sm.setSpeakerID(3000114) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Ho-How dare you... Attack!") + + +sm.showNpcSpecialActionByObjectId(OBJECT_3, "attack1", 0) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "attack1", 0) +sm.sendDelay(1500) + + +sm.showEffect("Npc/3000114.img/hit", 0, 0, 0, -2, -2, False, 0) +sm.sendDelay(300) + + +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/6", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(900) +sm.reservedEffect("Effect/Direction9.img/KaiserTutorial/Scene2") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Wha-! How can kids be so strong?") + + +sm.setSpeakerID(3000114) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Down in one strike?! We can't let this happen! Get them!") + + +sm.showEffect("Effect/Direction9.img/effect/tuto/Effect/0", 0, 0, 0, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.showFieldEffect("demonSlayer/whiteOut", 0) +sm.sendDelay(1950) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940002020, 0) diff --git a/scripts/field/kaiser_tutoC_3_0.py b/scripts/field/kaiser_tutoC_3_0.py new file mode 100755 index 0000000..35ff453 --- /dev/null +++ b/scripts/field/kaiser_tutoC_3_0.py @@ -0,0 +1,70 @@ +# Created by MechAviv +# Map ID :: 940001230 +# Eastern Region of Pantheon : East Sanctum + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.hideUser(True) +OBJECT_1 = sm.sendNpcController(3000142, -100, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000139, -150, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000114, 70, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +OBJECT_4 = sm.sendNpcController(3000111, 130, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +OBJECT_5 = sm.sendNpcController(3000115, 250, 220) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +sm.setSpeakerID(3000114) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Wh-What is this...") + + +sm.setSpeakerID(3000111) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("That kid transformed into this?") + + +sm.setSpeakerID(3000114) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Looks dangerous...") + + +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg0/2", 1200, 0, -200, 0, OBJECT_1, False, 0) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "DKgigaSlasher", 0) +sm.showEffect("Skill/6112.img/skill/61121201/effect", 0, 0, 0, -2, -2, False, 0) +sm.playSound("Kaiser/61121100", 100) +sm.sendDelay(300) + + +sm.showNpcSpecialActionByObjectId(OBJECT_3, "die1", 0) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "die1", 0) +sm.sendDelay(1500) + + +sm.sendNpcController(OBJECT_3, False) +sm.sendNpcController(OBJECT_4, False) +sm.setSpeakerID(3000115) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("W-what is this madness?!") + + +sm.showFieldEffect("demonSlayer/whiteOut", 0) +sm.sendDelay(1950) + + +sm.hideUser(False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.sendNpcController(OBJECT_4, False) +sm.sendNpcController(OBJECT_5, False) +sm.warp(940001240, 0) diff --git a/scripts/field/kaiser_tutoC_4_0.py b/scripts/field/kaiser_tutoC_4_0.py new file mode 100755 index 0000000..13d5d84 --- /dev/null +++ b/scripts/field/kaiser_tutoC_4_0.py @@ -0,0 +1,177 @@ +# Created by MechAviv +# Map ID :: 940001240 +# Pantheon : Pantheon Clinic + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.forcedInput(0) +sm.forcedInput(1) +sm.sendDelay(60) + + +sm.forcedInput(0) +OBJECT_1 = sm.sendNpcController(3000106, 150, 50) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000107, 70, 50) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Are you awake?") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Fenelle? Urgh... Where am I? Am I still alive?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You're fine now.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Cartalion? Oh, man. And Tear! What happened to Tear?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("She is safe, though not quite the same...") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Wait...why are you guys looking at me funny? Do I have something on my face?") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You are Kaiser now. We have awaited Kaiser's return for so long.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Kaiser? Me? That makes no sense.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Velderoth told us about the attack on the East Sanctum. When Fenelle and I arrived, we found you in your Kaiser form.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You had defeated the Nefarious Priests yourself, and lost consciousness.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Don't worry about Tear. She's fine, though... She's been cursed by the Relic.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Cursed? Is that better or worse than me being Kaiser? Because I'm having trouble believing any of this.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("This is no joke. Your aura and the transformation sigil you left make it clear you are Kaiser. You are the chosen one.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("All right, then. What do I do now?") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Accept your destiny. Act with courage and compassion.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It will be a tough path for a young person like you, but that is the price of great power.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Hey, I'm all about great power. The greater, the better. However, I don't really feel all that different.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kaiser is a being that reincarnates, but loses all previous abilities and memories. You are like a rough gemstone with unlimited potential.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You must train hard to live up to the previous Kaiser. This is your burden now.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Don't push the young one too hard, Cartalion. There is plenty of time to grow.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It may be best for you to hide your awakening for now, Kaiser. Our enemies may try to take advantage of your inexperience.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I'll fight anyone who comes looking for trouble. But I'm wondering about Tear. Where is she?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("She woke up before you did and ran off. She's somewhat distressed about her condition. Kylan went after her, so don't worry yourself too much.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("My brain feels all fuzzy. I feel plenty strong, but I need to get everything straight.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Don't force yourself.") + + +sm.forcedInput(1) diff --git a/scripts/field/kaiser_tutoC_4_1.py b/scripts/field/kaiser_tutoC_4_1.py new file mode 100755 index 0000000..03a4ddd --- /dev/null +++ b/scripts/field/kaiser_tutoC_4_1.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940001240 +# Pantheon : Pantheon Clinic + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(400000000, 0) diff --git a/scripts/field/kaiser_tutoC_set.py b/scripts/field/kaiser_tutoC_set.py new file mode 100755 index 0000000..c99dfb0 --- /dev/null +++ b/scripts/field/kaiser_tutoC_set.py @@ -0,0 +1,48 @@ +# Created by MechAviv +# Map ID :: 940002040 +# Hidden Street : Decades Later + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +if not "1" in sm.getQRValue(25807): + sm.levelUntil(10) + sm.removeSkill(60000222) + sm.giveAndEquip(1402177) + sm.giveAndEquip(1352500) + sm.giveItem(1142484) + sm.createQuestWithQRValue(25807, "1") + sm.setJob(6100) + sm.removeSkill(60001229) + sm.removeSkill(60001229) + # Unhandled Stat Changed [STR] Packet: 00 00 40 00 00 00 00 00 00 00 23 00 FF 00 00 00 00 + # Unhandled Stat Changed [DEX] Packet: 00 00 80 00 00 00 00 00 00 00 04 00 FF 00 00 00 00 + # Unhandled Stat Changed [AP] Packet: 00 00 00 40 00 00 00 00 00 00 17 00 FF 00 00 00 00 + # Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 EE 01 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 D5 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 D5 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 EE 01 00 00 FF 00 00 00 00 + sm.addSP(3, True) + # [INVENTORY_GROW] [01 1C ] + # [INVENTORY_GROW] [02 1C ] + # [INVENTORY_GROW] [03 1C ] + # [INVENTORY_GROW] [04 1C ] + sm.giveSkill(60001216, 1, 1) + sm.giveSkill(60001217, 1, 1) + sm.giveSkill(60001218, 1, 1) + sm.giveSkill(60000219, 1, 1) + sm.giveSkill(60001225, 1, 1) + sm.giveSkill(61001000, 1, 20) + sm.giveSkill(61001101, 1, 20) + sm.setFuncKeyByScript(True, 60001225, 42) + sm.sendDelay(900) + + +sm.showFieldEffect("kaiser/text0", 0) +sm.sendDelay(4200) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# [FORCED_STAT_RESET] [] +sm.warp(940001200, 0) diff --git a/scripts/field/kaiser_tuto_0_0.py b/scripts/field/kaiser_tuto_0_0.py new file mode 100755 index 0000000..e4dbe07 --- /dev/null +++ b/scripts/field/kaiser_tuto_0_0.py @@ -0,0 +1,173 @@ +# Created by MechAviv +# Map ID :: 940001000 +# Hidden Street : Great Temple Interior + +sm.giveSkill(60001229, 1, 1) +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +OBJECT_1 = sm.sendNpcController(3000107, -600, 20) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000106, 500, 20) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("We're in trouble!") + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(30) + + +sm.moveCamera(False, 300, -400, 27) + + +sm.sendDelay(2501) + + +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg1/0", 7000, 0, -150, 0, OBJECT_1, False, 0) +sm.moveNpcByObjectId(OBJECT_1, False, 600, 100) +sm.moveCamera(True, 100, 0, 0) + + +sm.sendDelay(7810) + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("The capital of Verdant Flora has fallen!") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("It all came down to Darmoor in the end.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Who is left that can stand against Darmoor?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("We still have the Anima...") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("No, they never measured up to us in military might. They're too passive, as well...they won't take arms against Darmoor unless Darmoor strikes first.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Then, what hope is there?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Darmoor is surely going to attack our capital, Heliseum. I will head to Heliseum immediately to prepare our defenses.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("But... Is there any way for us to win? Darmoor has defeated another Transcendent and now has power over life and time.") + + +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(30) + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("At the very least, we can delay him with Heliseum's Shield. The balance of power is not in our favor, but we cannot give up just because things look grim.") + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(30) + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Cartalion, stay here and protect the people.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("But I want to fight! I'm a warrior of Nova, too.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("We need someone to look after Pantheon, in case we fail. And, we need someone with experience to survive if all of the other commanders fall. You can protect the shield, can't you?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Kaiser... Don't push yourself too hard.") + + +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(30) + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Don't worry, Fenelle. Kaiser does what Kaiser must.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("But...") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +# [FORCED_STAT_RESET] [] +sm.warp(940001010, 0) diff --git a/scripts/field/kaiser_tuto_1_0.py b/scripts/field/kaiser_tuto_1_0.py new file mode 100755 index 0000000..0b693e7 --- /dev/null +++ b/scripts/field/kaiser_tuto_1_0.py @@ -0,0 +1,34 @@ +# Created by MechAviv +# Map ID :: 940001010 +# Hidden Street : East Pantheon + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +OBJECT_1 = sm.sendNpcController(3000107, -2950, 20) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Kaiser, this won't do. Come with me. There are other trustworthy people in Pantheon besides me.") + + +sm.moveCamera(False, 300, -2150, 29) + + +sm.sendDelay(30) + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(357) + + +sm.moveNpcByObjectId(OBJECT_1, False, 200, 100) +sm.sendDelay(417) + + +sm.forcedInput(1) diff --git a/scripts/field/kaiser_tuto_1_1.py b/scripts/field/kaiser_tuto_1_1.py new file mode 100755 index 0000000..74cf737 --- /dev/null +++ b/scripts/field/kaiser_tuto_1_1.py @@ -0,0 +1,59 @@ +# Created by MechAviv +# Map ID :: 940001010 +# Hidden Street : East Pantheon + +sm.sendDelay(2000) + + +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg1/1", 0, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.moveCamera(False, 600, -1200, 29) + + +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(1553) + +sm.spawnMob(9300545, -1600, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300546, -1500, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300545, -1400, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300546, -1300, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300545, -1200, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300546, -1100, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300545, -1000, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300546, -900, 29, False) +sm.sendDelay(150) + +sm.spawnMob(9300546, -800, 29, False) +sm.moveCamera(True, 0, 0, 0) + + +sm.sendDelay(0) + + +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 32 00 00 00 FF 00 00 00 00 +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.showFieldEffect("lightning/screenMsg/0", 0) +while sm.hasMobsInField(): + sm.waitForMobDeath() +sm.warp(940001050, 0) \ No newline at end of file diff --git a/scripts/field/kaiser_tuto_2_0.py b/scripts/field/kaiser_tuto_2_0.py new file mode 100755 index 0000000..990ad35 --- /dev/null +++ b/scripts/field/kaiser_tuto_2_0.py @@ -0,0 +1,59 @@ +# Created by MechAviv +# Map ID :: 940001050 +# Hidden Street : East Pantheon + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +OBJECT_1 = sm.sendNpcController(3000107, -2000, 20) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("There are Specters here as well?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("The situation might be more serious than I expected.") + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("This isn't good. Go back and activate the shield as soon as possible.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("This is precisely when you need the most help. Even if you are Kaiser, you can't make it by yourself...") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Cartalion, you are a knight of Nova. Your first duty is always to the people of Nova. You must protect them, not me. As Kaiser, I fight for others, not the other way around.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("As you wish. Good luck out there.") + + +sm.sendDelay(1000) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.warp(940001100, 0) diff --git a/scripts/field/kaiser_tuto_3_0.py b/scripts/field/kaiser_tuto_3_0.py new file mode 100755 index 0000000..3307d5a --- /dev/null +++ b/scripts/field/kaiser_tuto_3_0.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Map ID :: 940001100 +# Heliseum : Heliseum Outskirts + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg0/0", 0, 0, -105, -2, -2, False, 0) +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/kaiser_tuto_3_1.py b/scripts/field/kaiser_tuto_3_1.py new file mode 100755 index 0000000..81d4584 --- /dev/null +++ b/scripts/field/kaiser_tuto_3_1.py @@ -0,0 +1,60 @@ +# Created by MechAviv +# Map ID :: 940001100 +# Heliseum : Heliseum Outskirts + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Something feels wrong. Am I too late?") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("But even Darmoor himself can't break through the Shield of Heliseum. What happened here?") + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("The boundary is unmarked...") + + +sm.moveCamera(False, 600, -600, 178) + + +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(2638) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("The Eye of Protector Rock, which has never closed, is dark.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Heliseum has already been captured? What about the shield?") + + +sm.moveCamera(True, 0, 0, 0) + + +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/kaiser_tuto_3_2.py b/scripts/field/kaiser_tuto_3_2.py new file mode 100755 index 0000000..d827166 --- /dev/null +++ b/scripts/field/kaiser_tuto_3_2.py @@ -0,0 +1,26 @@ +# Created by MechAviv +# Map ID :: 940001100 +# Heliseum : Heliseum Outskirts + +OBJECT_1 = sm.sendNpcController(3000131, -390, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.sendSessionValue("magnus", OBJECT_1) +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Kaiser...you're late.") + + +sm.moveCamera(False, 450, -600, 178) + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Magnus! What are you doing here? What happened to Heliseum?") + + +sm.forcedInput(2) +sm.curNodeEventEnd(True) diff --git a/scripts/field/kaiser_tuto_3_3.py b/scripts/field/kaiser_tuto_3_3.py new file mode 100755 index 0000000..a6cbbbc --- /dev/null +++ b/scripts/field/kaiser_tuto_3_3.py @@ -0,0 +1,16 @@ +# Created by MechAviv +# Map ID :: 940001100 +# Heliseum : Heliseum Outskirts +OBJECT_1 = sm.getIntroNpcObjectID(3000131) + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Heliseum? Darmoor took it. Plain and simple.") + + +sm.showNpcSpecialActionByObjectId(OBJECT_1, "fake", 0) +sm.showEffect("Effect/Direction9.img/effect/story/BalloonMsg1/1", 0, 0, -110, -2, -2, False, 0) +sm.forcedInput(2) +sm.curNodeEventEnd(True) diff --git a/scripts/field/kaiser_tuto_3_4.py b/scripts/field/kaiser_tuto_3_4.py new file mode 100755 index 0000000..959b5b5 --- /dev/null +++ b/scripts/field/kaiser_tuto_3_4.py @@ -0,0 +1,52 @@ +# Created by MechAviv +# Map ID :: 940001100 +# Heliseum : Heliseum Outskirts +OBJECT_1 = sm.getIntroNpcObjectID(3000131) + +sm.showNpcSpecialActionByObjectId(OBJECT_1, "fake", 0) +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("No... But what of you? Are you injured? You fought against Darmoor's army?") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I am...unharmed. And the fight? What do you expect from someone who was exiled?") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("But... How did Darmoor's army get inside Heliseum? What did they do to the shield?") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("There was a traitor, of course. The traitor disabled the shield so the Specters could overrun Heliseum.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Magnus... Who would do such a thing?") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Me.") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# [FORCED_STAT_RESET] [] +sm.warp(940002010, 0) diff --git a/scripts/field/kaiser_tuto_4_0.py b/scripts/field/kaiser_tuto_4_0.py new file mode 100755 index 0000000..40bd67f --- /dev/null +++ b/scripts/field/kaiser_tuto_4_0.py @@ -0,0 +1,191 @@ +# Created by MechAviv +# Map ID :: 940001110 +# Heliseum : Heliseum Outskirts + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +OBJECT_1 = sm.sendNpcController(3000131, -390, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.moveCamera(False, 300, -600, 170) + + +sm.sendDelay(999) + +sm.reservedEffect("Effect/Direction9.img/kaiserTutorial/Scene2") +sm.sendDelay(1000) + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("How DARE you lay Heliseum at Darmoor's feet! You are a DISGRACE to the people of Nova!") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("The Council spared you, and this is how you repay them? I'll never forgive you! NEVER!") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I wouldn't expect you to understand. I want power...and Darmoor gave it to me.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I don't know what kind of power you've got, and I don't care. This wound isn't going to stop me from striking you down!") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Temper, temper. I don't think you understand your situation. Let me break it down for you.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("First, I admit that I might not have the power to defeat you, mighty Kaiser, even with my added power from Darmoor. However, don't make the mistake of thinking I have no plan to counter your strength.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("You say your wound isn't going to stop you. But that blade was coated in a vicious poison that will sap your strength, tipping the odds in my favor.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Heh... Then all I have to do is beat your before the poison takes full effect.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Indeed. Which brings me to my second point. You're not just fighting me, you know. Heliseum has been overrun with thousands of Specters, all under my command. Even at full strength, I doubt you could beat so many.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I won't know until I try.") + + +OBJECT_2 = sm.sendNpcController(3000125, -750, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +sm.sendDelay(210) + + +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 32 00 00 00 FF 00 00 00 00 +OBJECT_3 = sm.sendNpcController(3000122, -650, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +sm.sendDelay(210) + + +OBJECT_4 = sm.sendNpcController(3000125, -550, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +sm.sendDelay(210) + + +sm.moveCamera(False, 450, -1300, 170) + + +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(1526) + + +OBJECT_5 = sm.sendNpcController(3000122, -1150, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +sm.sendDelay(210) + + +OBJECT_6 = sm.sendNpcController(3000125, -1250, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_6, "summon", 0) +sm.sendDelay(210) + + +OBJECT_7 = sm.sendNpcController(3000122, -1350, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_7, "summon", 0) +sm.sendDelay(210) + + +OBJECT_8 = sm.sendNpcController(3000125, -1450, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_8, "summon", 0) +sm.sendDelay(210) + + +OBJECT_9 = sm.sendNpcController(3000122, -1550, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_9, "summon", 0) +sm.sendDelay(210) + + +OBJECT_10 = sm.sendNpcController(3000125, -1650, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_10, "summon", 0) +sm.moveCamera(True, 0, 0, 0) + + +sm.forcedInput(2) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.sendDelay(30) + + +sm.sendDelay(2000) +sm.avatarOriented("Effect/OnUserEff.img/normalEffect/demonSlayer/chatBalloon0") +sm.reservedEffect("Effect/Direction9.img/kaiserTutorial/Scene2") + + +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg2/0", 0, 0, -120, -2, -2, False, 0) +sm.sendDelay(2000) + + +sm.moveCamera(False, 450, -600, 170) + + +sm.sendDelay(585) + + +sm.showNpcSpecialActionByObjectId(OBJECT_1, "alert", 0) +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg1/2", 0, 0, -130, 0, OBJECT_1, False, 0) +sm.sendDelay(2000) + + +sm.moveCamera(True, 0, 0, 0) + + +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.sendNpcController(OBJECT_4, False) +sm.sendNpcController(OBJECT_5, False) +sm.sendNpcController(OBJECT_6, False) +sm.sendNpcController(OBJECT_7, False) +sm.sendNpcController(OBJECT_8, False) +sm.sendNpcController(OBJECT_9, False) +sm.sendNpcController(OBJECT_10, False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.showFieldEffect("lightning/screenMsg/0", 0) +sm.sendNpcController(OBJECT_1, False) +# [FORCED_STAT_RESET] [] +sm.warp(940001150, 0) diff --git a/scripts/field/kaiser_tuto_5_0.py b/scripts/field/kaiser_tuto_5_0.py new file mode 100755 index 0000000..2b5fc05 --- /dev/null +++ b/scripts/field/kaiser_tuto_5_0.py @@ -0,0 +1,178 @@ +# Created by MechAviv +# Map ID :: 940001150 +# Unknown : Unknown + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +OBJECT_1 = sm.sendNpcController(3000131, -390, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000122, -740, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000125, -640, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +sm.sendDelay(1500) + + +sm.forcedAction(474, 0) +sm.showEffect("Skill/6112.img/skill/61121100/effect", 0, 0, 0, -2, -2, False, 0) +sm.playSound("Kaiser/61121100", 100) +sm.sendDelay(150) + + +sm.showNpcSpecialActionByObjectId(OBJECT_2, "die1", 0) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "die1", 0) +sm.showEffect("Skill/6112.img/skill/61121100/hit", 0, 0, 0, 0, OBJECT_2, False, 0) +sm.showEffect("Skill/6112.img/skill/61121100/hit", 0, 0, 0, 0, OBJECT_3, False, 0) +sm.sendDelay(1400) +sm.playExclSoundWithDownBGM("Skill.img/61121100/Hit", 100) + + +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +sm.moveCamera(False, 300, -600, 178) + + +sm.sendDelay(1002) + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Bravo, Kaiser. Defiant to the last. I look forward to seeing how many Specters you can cut down before they overwhelm you.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Sorry to disappoint, but you're going first, Magnus.") + + +sm.moveCamera(True, 0, 0, 0) + + +sm.sendDelay(0) + + +OBJECT_4 = sm.sendNpcController(3000128, -750, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_4, "summon", 0) +sm.sendDelay(210) + + +OBJECT_5 = sm.sendNpcController(3000128, -650, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_5, "summon", 0) +sm.sendDelay(210) + + +OBJECT_6 = sm.sendNpcController(3000128, -550, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_6, "summon", 0) +sm.sendDelay(210) + + +OBJECT_7 = sm.sendNpcController(3000128, -1150, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_7, "summon", 0) +sm.sendDelay(210) + + +OBJECT_8 = sm.sendNpcController(3000128, -1250, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_8, "summon", 0) +sm.sendDelay(210) + + +OBJECT_9 = sm.sendNpcController(3000128, -1350, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_9, "summon", 0) +sm.sendDelay(210) + + +sm.moveCamera(False, 450, -600, 178) + + +sm.sendDelay(666) + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Oh, I doubt that very much. There are still plenty of Specters here to head you off. That poison taking effect yet?") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("You're a coward, Magnus. Hiding behind your minions and dirty tricks, all earned by licking the boots of Darmoor. You have no honor.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Honor is overrated. I just want to watch you suffer, and look! I got what I wanted.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Oh, but don't worry. I'm merciful enough to end your life with my own hands. Kaiser may return, but I'll take great pleasure in ending your career.") + + +sm.sendDelay(2000) +sm.avatarOriented("Effect/OnUserEff.img/normalEffect/demonSlayer/chatBalloon0") +sm.reservedEffect("Effect/Direction9.img/kaiserTutorial/Scene2") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("(This poison is spreading too fast. This might be my last chance...I have to do what I can to end this quickly.)") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Even when you reincarnate, you'll be right back to square one. Too weak to oppose us. It's all over for you.") + + +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Enough talk, Magnus. Let us end this.") + + +sm.showEffect("Effect/Direction9.img/effect/tuto/Effect/0", 0, 0, 0, -2, -2, False, 0) +sm.sendDelay(1200) + + +sm.hideUser(True) +OBJECT_10 = sm.sendNpcController(3000142, -900, 170) +sm.showNpcSpecialActionByObjectId(OBJECT_10, "summon", 0) +sm.setSpeakerID(3000131) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Now THIS is what I wanted! I was afraid the poison might stop you from transforming, but you don't disappoint. I always wanted to test my strength against your true form. Have at you!") + + +sm.showFieldEffect("demonSlayer/whiteOut", 0) +sm.sendDelay(5000) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_4, False) +sm.sendNpcController(OBJECT_5, False) +sm.sendNpcController(OBJECT_6, False) +sm.sendNpcController(OBJECT_7, False) +sm.sendNpcController(OBJECT_8, False) +sm.sendNpcController(OBJECT_9, False) +sm.sendNpcController(OBJECT_10, False) +# [FORCED_STAT_RESET] [] +sm.warp(940002030, 0) diff --git a/scripts/field/kaiser_tuto_6_0.py b/scripts/field/kaiser_tuto_6_0.py new file mode 100755 index 0000000..1a01c15 --- /dev/null +++ b/scripts/field/kaiser_tuto_6_0.py @@ -0,0 +1,14 @@ +# Created by MechAviv +# Map ID :: 940002030 +# Hidden Street : Play Magnus Video + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.playURLVideoByScript("http://nxcache.nexon.net/maplestory/video/yt/kaiser.html") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# [FORCED_STAT_RESET] [] +sm.warp(940001160, 0) diff --git a/scripts/field/kaiser_tuto_7_0.py b/scripts/field/kaiser_tuto_7_0.py new file mode 100755 index 0000000..35a14f7 --- /dev/null +++ b/scripts/field/kaiser_tuto_7_0.py @@ -0,0 +1,209 @@ +# Created by MechAviv +# Map ID :: 940001160 +# Unknown : Unknown + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.hideUser(True) +OBJECT_1 = sm.sendNpcController(3000106, 250, 20) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +OBJECT_2 = sm.sendNpcController(3000107, -800, 20) +sm.showNpcSpecialActionByObjectId(OBJECT_2, "summon", 0) +OBJECT_3 = sm.sendNpcController(3000108, -600, 20) +sm.showNpcSpecialActionByObjectId(OBJECT_3, "summon", 0) +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Did something happen to Kaiser? I've got a bad feeling...") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("High Priest!") + + +sm.moveCamera(False, 300, -400, 27) + + +sm.sendDelay(1334) + + +sm.moveNpcByObjectId(OBJECT_2, False, 450, 100) +sm.moveNpcByObjectId(OBJECT_3, False, 450, 100) +sm.moveCamera(True, 0, 0, 0) + + +sm.sendDelay(1000) + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("What's going on? Beldar...why are you here...?") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Heliseum has been captured. I escaped along with a few other survivors.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Heliseum is... But, Kaiser left for Heliseum a while ago...") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I have not seen him. As we were escaping, though... We saw a huge explosion. It might have been...") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Fenelle! I will lead our forces into Heliseum and re-take the city! Kaiser might need-") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Don't be a fool! Heliseum has already fallen. We must hold the line here, and protect the shield. If Nova is to survive this catastrophe, we must act carefully.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Then...you're just going to let Kaiser...?") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("There were thousands of Specters in Heliseum. If Kaiser has not escaped by now...he won't be escaping at all. Not even he can survive such odds.") + + +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg0/2", 0, 0, -100, 0, OBJECT_1, False, 0) +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg0/2", 0, 0, -120, 0, OBJECT_2, False, 0) +sm.showEffect("Effect/Direction9.img/effect/tuto/BalloonMsg0/2", 0, 0, -120, 0, OBJECT_3, False, 0) +sm.sendDelay(2000) + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("In truth, we wouldn't have enough power to form the shield over Pantheon without the Relics at Heliseum.") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("So, I ordered priests to bring the Relics with them when we escaped. With the Relics safe, we can raise a shield strong enough to protect us from Darmoor.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I see. You only care about saving yourself.") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Say whatever you want, but I did what I had to for the good of Nova. It would have been easy to stay and fall in battle. It is harder to have to live with the shame of our loss.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("But...how did Heliseum fall in the first place? They had the shield up, and still they were captured.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Come to think of it, how DID Heliseum fall that easily with the shield intact?") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Do you remember Magnus, the disgraced knight exiled by the Council?") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Yes. He was said to be a strong as Kaiser, but used his power for personal gain. A wholly despicable fellow.") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It was him. He disabled the shield and let Darmoor's forces in. Magnus appeared in the city not long before the invasion, and we thought perhaps he had turned over a new leaf. Instead...") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It was mistake to think that it would take Darmoor too long to invade. He found a way to seize both Aboris and Heliseum at once, leaving us completely off-guard.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...By the way, where is the King and the royal families?") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I don't know. We've lost track of so many people in all the chaos. If they escaped, they will find their way here. Our priority now is to get the shield up.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("This time, let's spread the Relics out instead of keeping them in a single place. We don't want same thing to happen here.") + + +sm.setSpeakerID(3000107) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("That will make them harder to defend, though.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Well, I will cast a protective spell on the Relics that only allows elite priests to handle them. It is not a perfect solution, but it is something.") + + +sm.setSpeakerID(3000108) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I will leave the shield to you. As for Kaiser, if he has fallen, when will he reincarnate?") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("His spirit will select a child born after he passes on. All we can do it wait.") + + +sm.setSpeakerID(3000106) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("For now, we should keep Kaiser's reincarnation a secret. The last thing we need is our enemy targeting our children.") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.sendNpcController(OBJECT_1, False) +sm.sendNpcController(OBJECT_2, False) +sm.sendNpcController(OBJECT_3, False) +# [FORCED_STAT_RESET] [] +sm.warp(940002040, 0) diff --git a/scripts/field/kannaTutoDirection.py b/scripts/field/kannaTutoDirection.py new file mode 100755 index 0000000..46e86c2 --- /dev/null +++ b/scripts/field/kannaTutoDirection.py @@ -0,0 +1,305 @@ +# Created by MechAviv +# Main kanna introduction script + +FIELD_ID = sm.getFieldID() + +if FIELD_ID == 807100110: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.setStandAloneMode(True) + sm.giveSkill(40020000, 1, 1) + sm.giveSkill(40020001, 1, 1) + sm.removeSkill(40020002) + sm.giveSkill(40020109, 1, 1) + sm.showFieldEffect("JPKanna/text0", 0) + sm.sendDelay(7000) + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.warp(807100100, 1) +elif FIELD_ID == 807100100: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.forcedInput(2) + sm.sendDelay(2500) + + + sm.forcedInput(0) + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendNext("I can already feel the dark energy burning my skin.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("This place gives me goosebumps.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("There's a lot of noise.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("We may not be the only intruders.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("Whatever's going on, I don't like it. Do you think someone else could have received the same orders?") + + + sm.setSpeakerID(9131006) + sm.removeEscapeButton() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("Leave the worrying to me, Kanna. You hurry and stop the ritual.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("The others have gone to the Northern Wing or the southwestern area. Kenshin's right. You need to focus on stopping the ritual.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("We think it's taking place in the Western Wing. If you can somehow disrupt it, the power flowing into the Temple will be cut off. You'll have to destroy the altar in the basement to fully stop the ritual.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("Got it.") + + + sm.setSpeakerID(9131003) + sm.removeEscapeButton() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("You must hurry, Kanna!") + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.objectStateByString("guide1") + sm.objectStateByString("guide2") + sm.objectStateByString("guide3") +elif FIELD_ID == 807100111: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.showFieldEffect("JPKanna/text1", 0) + sm.sendDelay(7000) + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.warp(807100101, 1) +elif FIELD_ID == 807100112: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.showFieldEffect("JPKanna/text2", 0) + sm.sendDelay(7000) + + + sm.completeQuest(63363) + # [QUEST_RESULT] [0B 83 F7 00 00 50 7B 89 00 8A F7 00 00 00 ] + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.warpInstanceIn(807100102, 1) +elif FIELD_ID == 807100102: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.spawnMob(9421572, -450, 32, False) + sm.spawnMob(9421572, -360, 32, False) + sm.spawnMob(9421572, -270, 32, False) + sm.spawnMob(9421572, -180, 32, False) + sm.spawnMob(9421572, -90, 32, False) + sm.spawnMob(9421572, 0, 32, False) + sm.spawnMob(9421572, 90, 32, False) + sm.spawnMob(9421572, 180, 32, False) + sm.spawnMob(9421572, 270, 32, False) + sm.spawnMob(9421572, 360, 32, False) + sm.spawnMob(9421572, 450, 32, False) + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/1", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/2", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/3", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.addPopUpSay(9130081, 5000, "#eEliminate the enemies!#n ", "") + sm.chatScript("Eliminate the enemies!") + sm.showFieldEffect("aran/tutorialGuide2", 0) + sm.removeSkill(40021183) + sm.removeSkill(40021184) + sm.removeSkill(40021185) + sm.removeSkill(40021186) +elif FIELD_ID == 807100103: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.forcedInput(2) + sm.sendDelay(1500) + + + sm.forcedInput(6) + sm.sendDelay(1000) + + + sm.forcedInput(0) + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/4", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/5", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.forcedAction(1767, 0) + sm.showEffect("Skill/4212.img/skill/42121005/tile/begin", 0, 0, 0, -2, -2, False, 0) + sm.sendDelay(1400) + + + sm.showEffect("Skill/4212.img/skill/42121005/tile/0", 0, 0, 0, -2, -2, False, 0) + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/6", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(1440) + + + sm.showEffect("Skill/4212.img/skill/42121005/tile/end", 0, 0, 0, -2, -2, False, 0) + sm.sendDelay(960) + + + sm.forcedInput(2) + sm.sendDelay(1000) + + + sm.forcedInput(0) + sm.sendDelay(500) + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.warp(807100104, 0) +elif FIELD_ID == 807100104: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + OBJECT_1 = sm.sendNpcController(9131004, 228, 71) + sm.showNpcSpecialActionByObjectId(OBJECT_1, "back", 0) + sm.forcedInput(2) + sm.sendDelay(3500) + + + sm.forcedInput(3) + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/7", 0, 0, -100, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/8", 0, 0, -100, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/9", 0, 250, -150, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/10", 0, 0, -100, -2, -2, False, 0) + sm.sendDelay(2000) + + + sm.forcedAction(1769, 0) + sm.showEffect("Skill/4200.img/skill/42001000/effect", 0, 0, 0, -2, -2, False, 0) + sm.sendDelay(270) + + + sm.forcedAction(1770, 0) + sm.showEffect("Skill/4200.img/skill/42001005/effect", 0, 0, 0, -2, -2, False, 0) + sm.sendDelay(330) + + + sm.showEffect("Skill/4212.img/skill/42121008/effect", 0, 0, 0, -2, -2, False, 0) + sm.sendDelay(200) + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.warp(807100105, 0) +elif FIELD_ID == 807100105: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.sendDelay(1000) + if "1" not in sm.getQRValue(57376): + sm.levelUntil(10) + sm.createQuestWithQRValue(57376, "1") + sm.setJob(4200) + sm.resetStats() + # Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 DF 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 + sm.addSP(6, True) + # [INVENTORY_GROW] [01 1C ] + # [INVENTORY_GROW] [02 1C ] + # [INVENTORY_GROW] [03 1C ] + # [INVENTORY_GROW] [04 1C ] + sm.removeSkill(40021227) + sm.giveSkill(40021227, 1, 1) + # Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 38 02 00 00 FF 00 00 00 00 + # Inventory Operation with 1 operations. + # Unhandled Stat Changed [INSIGHT_EXP] Packet: 00 00 00 00 20 00 00 00 00 00 20 2B 00 00 FF 00 00 00 00 + # Unhandled Message [INC_NON_COMBAT_STAT_EXP_MESSAGE] Packet: 14 00 00 20 00 00 00 00 00 20 2B 00 00 + + sm.playURLVideoByScript("http://nxcache.nexon.net/maplestory/video/yt/JPKanna.html") + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.setStandAloneMode(False) + sm.startQuest(57471) + sm.completeQuest(57471) + sm.warp(807040000, 0) diff --git a/scripts/field/kenjiTutoDirection.py b/scripts/field/kenjiTutoDirection.py new file mode 100755 index 0000000..72b3f8a --- /dev/null +++ b/scripts/field/kenjiTutoDirection.py @@ -0,0 +1,240 @@ +# Cutsence for Hayato Tutorial +# Author: Tiger + +from net.swordie.ms.world.field.fieldeffect import GreyFieldType + +# npc +TAKEDA = 9131007 +AKECHI = 9131000 +PRINCESS_NO = 9131005 + +# mob +ODA_SOLDIER = 9421505 +AKECHI_SOLDIER = 9421507 + +if sm.getFieldID() == 807100000: # Honnou-ji Eastern Wall + + if sm.sendAskAccept("Would you like to skip the introduction?"): + sm.warp(807040000) + sm.dispose() + + sm.lockInGameUI(True, False) + #sm.sendDelay(1200) + sm.setFieldColour(GreyFieldType.Field, 0, 0, 0, 0) + sm.hideNpcByTemplateId(TAKEDA, True, True) + sm.hideUser(True) + sm.sendDelay(1200) + sm.showFieldEffect("Map/Effect.img/JPKenji/text0") + sm.sendDelay(8000) + sm.setFieldColour(GreyFieldType.Field, 255, 255, 255, 0) + sm.sendDelay(200) + sm.hideNpcByTemplateId(TAKEDA, False) + sm.hideUser(False) + sm.forcedInput(0) + + sm.forcedFlip(True) + sm.removeEscapeButton() + sm.forcedInput(1) + sm.sendDelay(3000) + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.forcedInput(0) + sm.sendDelay(100) + sm.sendNext("Finally, the has come! Today, we will put an end to the so-called Demon King. Today we wipe Oda Nobunaga from history!") + + sm.setBoxChat() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("My hands shake with anticipation. The disgrace of the Matsuyama clan will haunt me no more.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendNext("Clear your head, falcon. You get all emotional on me, and I'll shave your head bald.") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("The Mist Cutter yearns for vengeance. That is the only emotion I feel") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendNext("Hahahaha! You're just as serious as I'd heard you were. I like that. How about you start the attack on Honnou-ji?") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("The Eastern Door?") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendNext("Get over the wall and open up the eastern gate. My cavalry will be waiting for you on the other side, ready to trample the enemy into submission.") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("Alright but I hope your horsemen will forgive me when there are no enemies left to be trampled.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendNext("Haha, I wish I could adopt you! Good luck out there, soldier. Try not to beat them all!") + + sm.lockInGameUI(False, False) + +elif sm.getFieldID() == 807100011: + sm.lockInGameUI(True) + sm.hideUser(True) + sm.sendDelay(1200) + sm.showFieldEffect("Map/Effect.img/JPKenji/text1") + sm.sendDelay(6000) + sm.lockInGameUI(False) + sm.warpInstanceIn(807100001) + +elif sm.getFieldID() == 807100001: # Honnou-ji Eastern Grounds + sm.spawnMob(ODA_SOLDIER, 543, 32, False) + sm.spawnMob(AKECHI_SOLDIER, 543, 32, False) + + sm.spawnMob(ODA_SOLDIER, 210, 32, False) + sm.spawnMob(AKECHI_SOLDIER, 210, 32, False) + + sm.spawnMob(ODA_SOLDIER, 107, 32, False) + sm.spawnMob(AKECHI_SOLDIER, 107, 32, False) + + sm.spawnMob(ODA_SOLDIER, 495, 32, False) + sm.spawnMob(AKECHI_SOLDIER, 495, 32, False) + + sm.lockInGameUI(True, False) + sm.removeEscapeButton() + + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/0", 2000) + sm.sendDelay(2000) + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/1", 2300) + sm.sendDelay(2300) + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/2", 2300) + sm.sendDelay(2300) + + sm.setBoxChat() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + + sm.sendNext("Take down all the enemies and open the east gate!") + + sm.lockInGameUI(False, False) + sm.showFieldEffect("Map/Effect.img/aran/tutorialGuide2") + +elif sm.getFieldID() == 807100003: # Honnou-ji : Honnou-ji Courtyard + sm.lockInGameUI(True) + sm.removeEscapeButton() + sm.setFieldColour(GreyFieldType.Field, 0, 0, 0, 0) + sm.hideNpcByTemplateId(AKECHI, True) + sm.hideUser(True) + sm.sendDelay(1200) + sm.showFieldEffect("Map/Effect.img/JPKenji/text2") + sm.sendDelay(8000) + sm.setFieldColour(GreyFieldType.Field, 255, 255, 255, 0) + sm.hideUser(False) + sm.hideNpcByTemplateId(AKECHI, False) + sm.sendDelay(200) + + sm.forcedInput(1) + sm.sendDelay(1700) + + sm.forcedInput(0) + sm.sendDelay(1000) + + sm.setSpeakerID(AKECHI) + sm.flipDialogue() + sm.sendNext("A little deer comes to meet the tiger? You cannot possibly belong to the Oda clan. You are far too unkempt. What brings you to Honnou-ji?") + + sm.setPlayerAsSpeaker() + sm.sendSay("(This woman appears delicate, but her voice is deep and rough with callous intent. Could she be one of Oda's?)") + + sm.setPlayerAsSpeaker() + sm.sendSay("My name is Anegasaki Kenji, eldest son of Anegasaki Tomonobu, retainer to the Matsuyama clan. I have come to avenge my family and rescue the princess. Who are you, fair maiden?") + + sm.setSpeakerID(AKECHI) + sm.flipDialogue() + sm.sendSay("Hehe, am I truly so fair that you would mistake me for a maiden? I vaguely recall an unimportant family from the southwest named Matsuyama, though I thought I had put it from my memory long ago.") + + sm.setPlayerAsSpeaker() + sm.sendSay("Only Nobunaga's followers would be so sharp of tongue and empty of mind. I do not relish harming one so beautiful, but my katana is less discerning.") + + sm.setPlayerAsSpeaker() + sm.sendSay("I will give you one last chance to tell me your name. Bear in mind, it will be the last thing you say on this plane of existence.") + + sm.setSpeakerID(TAKEDA) + sm.flipDialogue() + sm.sendSay("No need to get caught up dealing with this louse, Hayato.") + + sm.spawnNpc(TAKEDA, 92, 32) + sm.sendDelay(100) + + sm.setPlayerAsSpeaker() + sm.sendSay("Master Shingen!") + + sm.setSpeakerID(TAKEDA) + sm.flipDialogue() + sm.sendSay("Honnou-ji has fallen on worse times than I'd hoped. Though I can't say I'm suprised, now that I see one of Oda's Four Heavenly Kinds sthanding before me. Wouldn't you agree, Akechi Mitsuhide?!") + + sm.sendDelay(500) + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/0", 2000) + sm.sendDelay(2000) + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/3", 2300) + sm.sendDelay(2300) + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/4", 2000) + sm.sendDelay(2000) + + sm.setSpeakerID(AKECHI) + sm.flipDialogue() + sm.sendNext("You are slightly less idiotic than your portrait made you out to be, Takeda Shingen. Yet you figured out what is going on here, and you figured out that I was the one who started this rebellion. Bravo, you goonish oaf. Bravo!") + + sm.setSpeakerID(TAKEDA) + sm.flipDialogue() + sm.sendSay("I've been told you're the kind of guy that'd stab his mother in the back for the right price. How about you and I team up, turn the tables on the Demon King?") + + sm.setPlayerAsSpeaker() + sm.sendSay("You would count yourself in league with this trickster?! This scoundrel who destroyed my family?! I will not let that happen! Prepared yourself, Akechi Mitsuhide!") + + sm.sendDelay(500) + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/5", 2000) + + sm.sendDelay(2000) + sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/6", 2300, TAKEDA) + sm.sendDelay(2300) + + sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/7", 2000, TAKEDA) + sm.sendDelay(2000) + + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/8", 2000) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/9", 2300, TAKEDA) + sm.sendDelay(2300) + + sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/10", 2000) + sm.sendDelay(2000) + + sm.forcedInput(1) + sm.sendDelay(800) + sm.forcedInput(0) + sm.hideUser(True) + + sm.sendDelay(300) + sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/11", 2000, AKECHI) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/12", 2000, AKECHI) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/13", 2000, TAKEDA) + sm.sendDelay(2000) + + sm.sendDelay(100) + sm.moveNpcByTemplateId(TAKEDA, True, 500, 0) + + sm.showEffect("Effect/DirectionJP3.img/effect/kenjiTuto/shingenAttack/0") + + # TODO: show Takeda move and hit AKECHI + + sm.sendDelay(100) + sm.removeNpc(TAKEDA) + sm.lockInGameUI(False) + sm.warp(807100004) \ No newline at end of file diff --git a/scripts/field/library_SaveFieldID.py b/scripts/field/library_SaveFieldID.py new file mode 100755 index 0000000..bf5832d --- /dev/null +++ b/scripts/field/library_SaveFieldID.py @@ -0,0 +1 @@ +# [Grand Athenaeum] Ariant : Middle of the Desert \ No newline at end of file diff --git a/scripts/field/lightning_tuto_0_0.py b/scripts/field/lightning_tuto_0_0.py new file mode 100755 index 0000000..4addcb2 --- /dev/null +++ b/scripts/field/lightning_tuto_0_0.py @@ -0,0 +1,22 @@ +# Hidden Street : Before the Final Battle (927020080) + +if sm.sendAskAccept("Would you like to skip the introduction?"): + sm.levelUntil(10) + sm.setSTR(4) + sm.setDEX(4) + sm.setAP(45) + sm.addMaxHP(50) + sm.warp(101000000) + sm.jobAdvance(2700) + sm.giveSkill(27001100) + sm.giveSkill(27001201) + sm.giveSkill(27000106) + sm.giveSkill(27000207) + sm.dispose() +sm.lockInGameUI(True) +sm.forcedInput(0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial/Scene0") +sm.sendDelay(3300) + +sm.lockInGameUI(False) +sm.warp(927020000, 0) diff --git a/scripts/field/lightning_tuto_10_0.py b/scripts/field/lightning_tuto_10_0.py new file mode 100755 index 0000000..779ccd7 --- /dev/null +++ b/scripts/field/lightning_tuto_10_0.py @@ -0,0 +1,6 @@ +sm.lockInGameUI(True) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene1") +sm.sendDelay(10000) + +sm.lockInGameUI(False) +sm.warp(910141010, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_11_0.py b/scripts/field/lightning_tuto_11_0.py new file mode 100755 index 0000000..febc1d8 --- /dev/null +++ b/scripts/field/lightning_tuto_11_0.py @@ -0,0 +1,57 @@ +LANIA = 1032201 +PENNY = 1032202 + +sm.lockInGameUI(True) +sm.showFieldEffect("lightning/screenMsg/1") +sm.forcedInput(0) + +sm.spawnNpc(LANIA, 230, -130) +sm.showNpcSpecialActionByTemplateId(LANIA, "summon", 0) + +sm.spawnNpc(PENNY, 234, -400) +sm.showNpcSpecialActionByTemplateId(PENNY, "summon", 0) +sm.sendDelay(2000) + +sm.removeEscapeButton() +sm.setSpeakerID(LANIA) +sm.sendNext("You remember everything I said, right?") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Fresh milk, three servings of pork, fishing bait, and...") + +sm.setSpeakerID(LANIA) +sm.sendSay("Thread! I need thread. We're going to be freezing if I don't have time to knit us scarves and socks.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Of course, of course. Red and white thread, yes. I apologize. My headaches...") +sm.sendSay("(My head aches more with each passing day, as if a fire were burning in my mind...)") + +sm.setSpeakerID(PENNY) +sm.sendSay("Mrow! Need me to scratch the shopping list into your arm?") + +sm.setSpeakerID(LANIA) +sm.sendSay("Don't be mean, Penny! And you! Don't forget my stuff this time. I don't want my feet to freeze off!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I will return with all you need, Lania. I swear it.") + +sm.setSpeakerID(LANIA) +sm.sendSay("I'll walk you out. Penny, you guard the house, okay?") + +sm.setSpeakerID(PENNY) +sm.sendSay("Mrow! Lania this, Lania that! What about little old me?") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("When I return, I swear I will catch you the king of all fish, Penny.") + +sm.setSpeakerID(PENNY) +sm.sendSay("Really?! I mean... you can't sway me that easily. Just... it better be a really fat one.") + +sm.setSpeakerID(LANIA) +sm.sendSay("I'm sure it'll be the biggest fish in the lake, Penny. Let's go, Luminous!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Y-yes. Let's. (My chest... It feels so tight...)") + +sm.forcedInput(1) +sm.moveNpcByTemplateId(LANIA, True, 400, 100) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_11_1.py b/scripts/field/lightning_tuto_11_1.py new file mode 100755 index 0000000..7b53131 --- /dev/null +++ b/scripts/field/lightning_tuto_11_1.py @@ -0,0 +1,8 @@ +LANIA = 1032201 +PENNY = 1032202 + +sm.forcedInput(0) +sm.lockInGameUI(False) +sm.removeNpc(LANIA) +sm.removeNpc(PENNY) +sm.warp(910141020) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_12_0.py b/scripts/field/lightning_tuto_12_0.py new file mode 100755 index 0000000..51ac64a --- /dev/null +++ b/scripts/field/lightning_tuto_12_0.py @@ -0,0 +1,27 @@ +LANIA = 1032201 + +sm.lockInGameUI(True) + +sm.spawnNpc(LANIA, 340, 0) +sm.showNpcSpecialActionByTemplateId(LANIA, "summon", 0) +sm.forcedInput(2) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.removeEscapeButton() +sm.setSpeakerID(LANIA) +sm.sendNext("The weather's beautiful! We should have a picnic before winter comes! Would you like that?") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Let's buy some ingredients from the market. I feel like cooking!") + +sm.setSpeakerID(LANIA) +sm.sendSay("Yes! I'll make a cream cheese spread and we can make fancy sandwiches!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(Yes, a home cooked meal is what I need to calm this turmoil inside.)") + +sm.moveNpcByTemplateId(LANIA, True, 400, 100) +sm.sendDelay(1500) + +sm.forcedInput(1) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_12_1.py b/scripts/field/lightning_tuto_12_1.py new file mode 100755 index 0000000..35eb297 --- /dev/null +++ b/scripts/field/lightning_tuto_12_1.py @@ -0,0 +1,38 @@ +LANIA = 1032201 + +sm.forcedInput(2) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.removeEscapeButton() +sm.setSpeakerID(LANIA) +sm.sendNext("Don't take too long, okay? I know how you like to dilly-dally in town!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I will return as swiftly as I can, dear Lania.") +sm.sendSay("Lania, since I've started living here, for the first time in my life I'm--ARGH!") + +sm.setSpeakerID(LANIA) +sm.sendSay("Luminous?") + +sm.forcedAction(4, 6000) +sm.showEffect("Effect/Direction8.img/effect/tuto/floodEffect/0", 5400, 0, 20, -2, -2, False, 0) +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg1/1", 1400, 0, -120, -2, -2, False, 0) +sm.moveNpcByTemplateId(LANIA, True, 50, 100) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene2") +sm.playExclSoundWithDownBGM("Bgm26.img/Flood", 100) +sm.sendDelay(500) + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg1/2", 0, 0, -120, 0, sm.getNpcObjectIdByTemplateId(LANIA), False, 0) +sm.sendDelay(2000) + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg1/3", 0, 0, -180, -2, -2, False, 0) +sm.sendDelay(2300) + +sm.faceOff(21066) +sm.showEffect("Effect/Direction8.img/effect/tuto/floodEffect/1", 0, 0, 0, -2, -2, False, 0) +sm.showEffect("Effect/Direction8.img/effect/tuto/floodEffect/2", 0, 0, 0, -2, -2, False, 0) +sm.sendDelay(3000) + +sm.removeNpc(LANIA) +sm.warp(910141060, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_13_0.py b/scripts/field/lightning_tuto_13_0.py new file mode 100755 index 0000000..d6eda12 --- /dev/null +++ b/scripts/field/lightning_tuto_13_0.py @@ -0,0 +1,6 @@ +sm.lockInGameUI(True) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene4") +sm.sendDelay(10000) + +sm.lockInGameUI(False) +sm.warp(910141030, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_14_0.py b/scripts/field/lightning_tuto_14_0.py new file mode 100755 index 0000000..2a32c31 --- /dev/null +++ b/scripts/field/lightning_tuto_14_0.py @@ -0,0 +1,81 @@ +LANIA = 1032203 +MENU_TEXT = ["Light Path", "Dark Path"] + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) + +sm.spawnNpc(LANIA, 0, 0) +sm.showNpcSpecialActionByTemplateId(LANIA, "summon", 0) +sm.sendDelay(1500) + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.playExclSoundWithDownBGM("Voice.img/Luminous_M/0", 100) +sm.sendNext("What have I done?") + +sm.moveCamera(False, 300, 0, 27) + +sm.sendNext("Lania...") + +sm.moveCamera(False, 300, 500, 27) + +sm.sendNext("Our home...") + +sm.moveCamera(True, 0, 0, 0) + +sm.sendNext("The forest... I destroyed it all.") +sm.sendSay("The Black Mage has cursed me! His dark power has corrupted my heart!") +sm.sendSay("But why now? Has the fiend broken free of his prison?!") +sm.sendSay("What can I do? The power of light is lost to me... ") + +answer = sm.sendAskSelectMenu(0, 0, MENU_TEXT) +if answer == 0: + # Light Side + sm.playExclSoundWithDownBGM("Voice.img/Luminous_M/2", 100) + sm.sendNext("I will not be swept away by this darkness. I will save Lania and this world... Even if it means my destruction.") + sm.levelUntil(10) + sm.giveSkill(20040218, 0, 0) + sm.jobAdvance(2700) + sm.giveSkill(20040216, 1, 1) + sm.giveSkill(20040217, 1, 1) + sm.giveSkill(20040221, 1, 1) + sm.giveSkill(20041222, 1, 1) + sm.giveSkill(27001100, 1, 20) + sm.giveSkill(27000106, 1, 5) + sm.setSTR(4) + sm.setDEX(4) + sm.setAP(35) + sm.giveItem(1142478) + sm.giveAndEquip(1052496) + sm.giveAndEquip(1072701) + sm.giveAndEquip(1102443) + sm.giveAndEquip(1352400) + sm.lockInGameUI(False) + sm.removeNpc(LANIA) + sm.warp(101000100) +else: + # Dark Side + sm.sendNext("Is this how the Black Mage understood the world? I see now that everyone else is beneath me!") + sm.sendSay("My soul was almost lost to the power of darkness. I see its appeal, but I would not have it erode my entire being. I will learn to harness it, and make it my own. ") + sm.sendSay("But first, I must master my new magic. My old weapons of Light will now be tools of the Dark.") + sm.levelUntil(10) + sm.giveSkill(20040218, 3, 3) + sm.jobAdvance(2700) + sm.giveSkill(20040216, 1, 1) + sm.giveSkill(20040217, 1, 1) + sm.giveSkill(20040221, 1, 1) + sm.giveSkill(20041222, 1, 1) + sm.giveSkill(27001201, 1, 20) + sm.giveSkill(27000207, 1, 5) + sm.setSTR(4) + sm.setDEX(4) + sm.setAP(35) + sm.giveItem(1142479) + sm.giveAndEquip(1052497) + sm.giveAndEquip(1072702) + sm.giveAndEquip(1102444) + sm.giveAndEquip(1352400) + sm.sendSay("Yes, it feels good to have a weapon in my hands once more. Now, who shall I test my new powers on first...") + sm.lockInGameUI(False) + sm.removeNpc(LANIA) + sm.warp(101020100) diff --git a/scripts/field/lightning_tuto_14_1.py b/scripts/field/lightning_tuto_14_1.py new file mode 100755 index 0000000..b0f853a --- /dev/null +++ b/scripts/field/lightning_tuto_14_1.py @@ -0,0 +1,41 @@ +# Created by MechAviv +# ID :: [910141030] +# Hidden Street : Front Yard Wreckage +if chr.getJob() == 2004: + OBJECT_1 = sm.getIntroNpcObjectID(1032203) + sm.setQuestEx(25505, "route", "0") + sm.sendDelay(1000) + sm.levelUntil(10) + sm.removeSkill(20040218) + sm.removeSkill(20041226) + sm.setJob(2700) + sm.giveSkill(20040216, 1, 1) + sm.giveSkill(20040217, 1, 1) + sm.giveSkill(20040221, 1, 1) + sm.giveSkill(20041222, 1, 1) + # Unhandled Stat Changed [INSIGHT_EXP] Packet: 00 00 00 00 20 00 00 00 00 00 D3 11 00 00 FF 00 00 00 00 + # Unhandled Message [INC_NON_COMBAT_STAT_EXP_MESSAGE] Packet: 14 00 00 20 00 00 00 00 00 D3 11 00 00 + # Unhandled Stat Changed [WILL_EXP] Packet: 00 00 00 00 40 00 00 00 00 00 D3 11 00 00 FF 00 00 00 00 + # Unhandled Message [INC_NON_COMBAT_STAT_EXP_MESSAGE] Packet: 14 00 00 40 00 00 00 00 00 D3 11 00 00 + sm.resetStats() + # Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 07 01 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 07 01 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 52 02 00 00 FF 00 00 00 00 + sm.giveSkill(27001100, 1, 20) + sm.giveSkill(27000106, 1, 5) + sm.addSP(3, True) + # [INVENTORY_GROW] [01 1C ] + # [INVENTORY_GROW] [02 1C ] + # [INVENTORY_GROW] [03 1C ] + # [INVENTORY_GROW] [04 1C ] + sm.giveItem(1142478) + sm.giveAndEquip(1052496) + sm.giveAndEquip(1072701) + sm.giveAndEquip(1102443) + + sm.sendNpcController(OBJECT_1, False) + sm.warp(101000100, 0) + sm.dispose() \ No newline at end of file diff --git a/scripts/field/lightning_tuto_14_2.py b/scripts/field/lightning_tuto_14_2.py new file mode 100755 index 0000000..c62cf3e --- /dev/null +++ b/scripts/field/lightning_tuto_14_2.py @@ -0,0 +1,41 @@ +# Created by MechAviv +# ID :: [910141030] +# Hidden Street : Front Yard Wreckage +if chr.getJob() == 2004: + OBJECT_1 = sm.getIntroNpcObjectID(1032203) + sm.setQuestEx(25505, "route", "1") + sm.sendDelay(1000) + sm.levelUntil(10) + sm.removeSkill(20040218) + sm.removeSkill(20041226) + sm.setJob(2700) + sm.giveSkill(20040216, 1, 1) + sm.giveSkill(20040217, 1, 1) + sm.giveSkill(20040221, 1, 1) + sm.giveSkill(20041222, 1, 1) + # Unhandled Stat Changed [INSIGHT_EXP] Packet: 00 00 00 00 20 00 00 00 00 00 D3 11 00 00 FF 00 00 00 00 + # Unhandled Message [INC_NON_COMBAT_STAT_EXP_MESSAGE] Packet: 14 00 00 20 00 00 00 00 00 D3 11 00 00 + # Unhandled Stat Changed [WILL_EXP] Packet: 00 00 00 00 40 00 00 00 00 00 D3 11 00 00 FF 00 00 00 00 + # Unhandled Message [INC_NON_COMBAT_STAT_EXP_MESSAGE] Packet: 14 00 00 40 00 00 00 00 00 D3 11 00 00 + sm.resetStats() + # Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 07 01 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 07 01 00 00 FF 00 00 00 00 + # Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 52 02 00 00 FF 00 00 00 00 + sm.giveSkill(27001201, 1, 20) + sm.giveSkill(27000207, 1, 5) + sm.addSP(3, True) + # [INVENTORY_GROW] [01 1C ] + # [INVENTORY_GROW] [02 1C ] + # [INVENTORY_GROW] [03 1C ] + # [INVENTORY_GROW] [04 1C ] + sm.giveItem(1142479) + sm.giveAndEquip(1052497) + sm.giveAndEquip(1072702) + sm.giveAndEquip(1102444) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.sendNpcController(OBJECT_1, False) + sm.warp(101020100, 9) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_1_0.py b/scripts/field/lightning_tuto_1_0.py new file mode 100755 index 0000000..8e99d30 --- /dev/null +++ b/scripts/field/lightning_tuto_1_0.py @@ -0,0 +1,12 @@ +# Hidden Street : Destroyed Temple of Time Entrance (927020000) | Used in Luminous' Intro +PHANTOM = 2159353 + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.removeEscapeButton() + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("The heavens have set the perfect stage for our final confrontation.") +sm.sendDelay(500) + +sm.forcedInput(1) diff --git a/scripts/field/lightning_tuto_1_1.py b/scripts/field/lightning_tuto_1_1.py new file mode 100755 index 0000000..6539798 --- /dev/null +++ b/scripts/field/lightning_tuto_1_1.py @@ -0,0 +1,55 @@ +# Hidden Street : Destroyed Temple of Time Entrance (927020000) | Used in Luminous' Intro +PHANTOM = 2159353 +sm.sendDelay(120) +sm.removeEscapeButton() +sm.setSpeakerID(PHANTOM) +sm.sendNext("A little over-dramatic, don't you think?") + +sm.spawnNpc(PHANTOM, 1210, 10) +sm.showNpcSpecialActionByTemplateId(PHANTOM, "summon", 0) +sm.forcedInput(2) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("You're late. Typical. One would think the greatest thief in the world could steal a watch, at least.") + +sm.setSpeakerID(PHANTOM) +sm.sendSay("There's such a thing as showing up fashionably late, you know. Besides, you're the big hero. I'm just along for the ride.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Call me what you will. We must all stand together, or perish.") + +sm.setSpeakerID(PHANTOM) +sm.sendSay("I knew I wasn't going to like you from the start. You're too stuffy.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Sure. Right back at you.") + +sm.setSpeakerID(PHANTOM) +sm.sendSay("I'm glad we're on the same page. And yet we were sent here together to wait for the end... Maybe Freud has a better sense of humor than I thought.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I still don't understand why I must stand idly by here with YOU. Perhaps he thought the situation would be enough to make us set aside our differences.") + +sm.setSpeakerID(PHANTOM) +sm.sendSay("That's the kind of good-hearted nonsense that gets people killed...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Enough chatter. I sense a dark presence.") + +sm.setSpeakerID(PHANTOM) +sm.sendSay("Don't waste your time moping around up here, staring into the distance. It's not as romantic as it seems...") +sm.sendDelay(300) + +sm.showNpcSpecialActionByTemplateId(PHANTOM, "teleportation", 0) +sm.sendDelay(840) + +sm.removeNpc(PHANTOM) +sm.sendDelay(1000) + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("Just one more step...") + +sm.forcedInput(1) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_1_2.py b/scripts/field/lightning_tuto_1_2.py new file mode 100755 index 0000000..0a8f2f8 --- /dev/null +++ b/scripts/field/lightning_tuto_1_2.py @@ -0,0 +1,14 @@ +# Hidden Street : Destroyed Temple of Time Entrance (927020000) | Used in Luminous' Intro +GUWARU = 2159354 +sm.removeEscapeButton() +sm.spawnNpc(GUWARU, 128, 10) +sm.flipNpcByTemplateId(GUWARU, False) +sm.showNpcSpecialActionByTemplateId(GUWARU, "summon", 0) + +sm.setSpeakerID(GUWARU) +sm.sendNext("Halt! This battlefield is for you and I.") + +sm.moveCamera(False, 450, -200, 18) + +sm.forcedInput(1) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_1_3.py b/scripts/field/lightning_tuto_1_3.py new file mode 100755 index 0000000..d467a6d --- /dev/null +++ b/scripts/field/lightning_tuto_1_3.py @@ -0,0 +1,95 @@ +# Hidden Street : Destroyed Temple of Time Entrance (927020000) | Used in Luminous' Intro +GUWARU = 2159354 +MAGNUS = 2159355 +sm.removeEscapeButton() +sm.setSpeakerID(GUWARU) +sm.sendNext("The light you possess is like a warm ray of sunshine to the spirits. It will be painful to see it extinguished...") + +sm.setPlayerAsSpeaker() +sm.sendSay("If you feel so strongly about my preservation, turn away from this insanity. Turn away from the Black Mage!") + +sm.setSpeakerID(GUWARU) +sm.sendSay("If doing what I believe is labeled as 'insanity,' then I will gladly bear the stigma. Though you and your kind will bear it with me...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Enough with the sophistry, #p2159354#.") + +sm.setSpeakerID(GUWARU) +sm.sendSay("I thought I would enjoy some pre-dinner conversation, but I will be happy to end you now.") +sm.sendDelay(500) + +sm.showNpcSpecialActionByTemplateId(GUWARU, "special", 0) +sm.playSound("LuminousTuto/Special1", 100) +sm.avatarOriented("Effect/OnUserEff.img/normalEffect/demonSlayer/chatBalloon0") +sm.sendDelay(1600) + +sm.playSound("LuminousTuto/Special2", 100) +sm.sendDelay(2280) + +sm.spawnNpc(MAGNUS, 0, 10) +sm.flipNpcByTemplateId(MAGNUS, False) +sm.showNpcSpecialActionByTemplateId(MAGNUS, "summon", 0) +sm.sendDelay(700) + +sm.removeNpc(GUWARU) + +sm.setSpeakerID(MAGNUS) +sm.flipSpeaker() +sm.sendNext("You served that fool up on a platter for me!") + +sm.setPlayerAsSpeaker() +sm.sendSay("#p2159355#! Y-you destroyed him!") + +sm.forcedAction(443, 540) +sm.showEffect("Skill/2711.img/skill/27111100/prepare", 540, -40, -25, -2, -2, False, 0) +sm.playSound("LuminousTuto/Use", 100) +sm.sendDelay(90) + +sm.showNpcSpecialActionByTemplateId(MAGNUS, "barrier", 0) +sm.sendDelay(450) + +sm.forcedAction(444, 3000) +sm.showEffect("Skill/2711.img/skill/27111100/keydown", 3000, -40, -25, -2, -2, False, 0) +sm.playSound("LuminousTuto/Loop", 100) +sm.sendDelay(30) + +for i in range(8): + sm.showEffect("Effect/OnUserEff.img/normalEffect/lightning/guard", 0, 0, 0, 0, sm.getNpcObjectIdByTemplateId(MAGNUS), False, 0) + sm.playSound("LuminousTuto/Hit", 100) + sm.sendDelay(270) + +sm.showEffect("Effect/OnUserEff.img/normalEffect/lightning/guard", 0, 0, 0, 0, sm.getNpcObjectIdByTemplateId(MAGNUS), False, 0) +sm.playSound("LuminousTuto/Loop", 100) +sm.playSound("LuminousTuto/Hit", 100) +sm.sendDelay(270) + + +for i in range(2): + sm.showEffect("Effect/OnUserEff.img/normalEffect/lightning/guard", 0, 0, 0, 0, sm.getNpcObjectIdByTemplateId(MAGNUS), False, 0) + sm.playSound("LuminousTuto/Hit", 100) + sm.sendDelay(270) + +sm.showEffect("Skill/2711.img/skill/27111101/keyedownend", 0, -40, -25, -2, -2, False, 0) +sm.playSound("LuminousTuto/End", 100) +sm.sendDelay(600) + +sm.setSpeakerID(MAGNUS) +sm.flipSpeaker() +sm.sendNext("How cute. Well, I've got to go kill your friends! See you!") + +sm.setPlayerAsSpeaker() +sm.sendSay("What are you talking about?!") + +sm.setSpeakerID(MAGNUS) +sm.flipSpeaker() +sm.sendSay("I don't have time to play with you! Ha. I'm done with this world, anyway.") + +sm.showNpcSpecialActionByTemplateId(MAGNUS, "teleportation", 0) +sm.sendDelay(450) + +sm.removeNpc(MAGNUS) +sm.setPlayerAsSpeaker() +sm.sendNext("I've no time left to worry about Magnus. The Black Mage awaits!") + +sm.lockInGameUI(False) +sm.warp(927020010, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_2_0.py b/scripts/field/lightning_tuto_2_0.py new file mode 100755 index 0000000..bfbfc04 --- /dev/null +++ b/scripts/field/lightning_tuto_2_0.py @@ -0,0 +1,6 @@ +# Hidden Street : Temple of Time Corridor (927020010) | Luminous Intro +sm.lockInGameUI(True) +sm.removeEscapeButton() +sm.curNodeEventEnd(True) +sm.showBalloonMsg("Effect/Direction8.img/effect/tuto/BalloonMsg0/2", 4000) +sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_2_1.py b/scripts/field/lightning_tuto_2_1.py new file mode 100755 index 0000000..034c36d --- /dev/null +++ b/scripts/field/lightning_tuto_2_1.py @@ -0,0 +1,49 @@ +# Hidden Street : Temple of Time Corridor (927020010) | Luminous Intro +VOID_PRIEST = 9300529 +VOID_PRIEST_2 = 9300530 + +coordinates = [ + [1200, 69], + [1100, 69], + [1000, 69], + [900, 69], + [800, 69], + [700, 69], + [600, 69], + [500, 69], + [400, 69], + [300, 69], + [200, 69], + [100, 69], + [1150, 69], + [950, 69], + [850, 69], +] + +coordinates2 = [ + [750, 69], + [650, 69], + [550, 69], + [450, 69], + [350, 69], + [250, 69], + [150, 69], +] + +sm.sendDelay(700) + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg0/3", 0, 0, -120, -2, -2, False, 0) +sm.sendDelay(2000) + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg0/4", 0, 0, -120, -2, -2, False, 0) +sm.sendDelay(2000) + +sm.giveSkill(20041226) + +for coord in coordinates: + sm.spawnMob(VOID_PRIEST, coord[0], coord[1], False) +for coord in coordinates2: + sm.spawnMob(VOID_PRIEST_2, coord[0], coord[1], False) + +sm.lockInGameUI(False) +sm.showFieldEffect("lightning/screenMsg/0") \ No newline at end of file diff --git a/scripts/field/lightning_tuto_3_0.py b/scripts/field/lightning_tuto_3_0.py new file mode 100755 index 0000000..4698a13 --- /dev/null +++ b/scripts/field/lightning_tuto_3_0.py @@ -0,0 +1,52 @@ +ARAN = 2159356 +BLACK_MAGE_MINION_1 = 2159360 +BLACK_MAGE_MINION_2 = 2159361 + +sm.removeSkill(20041226) +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.removeEscapeButton() +sm.forcedInput(0) + +sm.spawnNpc(ARAN, 1500, 50) +sm.showNpcSpecialActionByTemplateId(ARAN, "summon", 0) + +sm.spawnNpc(BLACK_MAGE_MINION_1, 1350, 50) +sm.showNpcSpecialActionByTemplateId(BLACK_MAGE_MINION_1, "summon", 0) + +sm.spawnNpc(BLACK_MAGE_MINION_2, 1300, 50) +sm.showNpcSpecialActionByTemplateId(BLACK_MAGE_MINION_2, "summon", 0) + +sm.showEffect("Effect/OnUserEff.img/normalEffect/demonSlayer/chatBalloon0", 1000, 0, 0, -2, -2, False, 0) +sm.sendDelay(1200) + +sm.showNpcSpecialActionByTemplateId(ARAN, "attack", 0) +sm.playSound("LuminousTuto/Use2", 100) +sm.sendDelay(450) + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg0/5", 0, 0, -120, -2, -2, False, 0) +sm.showNpcSpecialActionByTemplateId(BLACK_MAGE_MINION_1, "hit", 0) +sm.showNpcSpecialActionByTemplateId(BLACK_MAGE_MINION_2, "hit", 0) +sm.showEffect("Skill/2111.img/skill/21111021/hit/0", 0, -5, -50, 0, sm.getNpcObjectIdByTemplateId(BLACK_MAGE_MINION_1), False, 0) +sm.showEffect("Skill/2111.img/skill/21111021/hit/0", 0, -5, -50, 0, sm.getNpcObjectIdByTemplateId(BLACK_MAGE_MINION_2), False, 0) +sm.playSound("LuminousTuto/Use2", 100) +sm.sendDelay(270) + +sm.showEffect("Skill/2111.img/skill/21111021/hit/0", 0, -5, -50, 0, sm.getNpcObjectIdByTemplateId(BLACK_MAGE_MINION_1), False, 0) +sm.showEffect("Skill/2111.img/skill/21111021/hit/0", 0, -5, -50, 0, sm.getNpcObjectIdByTemplateId(BLACK_MAGE_MINION_2), False, 0) +sm.playSound("LuminousTuto/Use2", 100) +sm.sendDelay(900) + +sm.playSound("LuminousTuto/Use3", 100) +sm.showNpcSpecialActionByTemplateId(BLACK_MAGE_MINION_1, "die", 0) +sm.showNpcSpecialActionByTemplateId(BLACK_MAGE_MINION_2, "die", 0) +sm.showEffect("Skill/2111.img/skill/21111021/hit/0", 0, -5, -50, 0, sm.getNpcObjectIdByTemplateId(BLACK_MAGE_MINION_1), False, 0) +sm.showEffect("Skill/2111.img/skill/21111021/hit/0", 0, -5, -50, 0, sm.getNpcObjectIdByTemplateId(BLACK_MAGE_MINION_2), False, 0) +sm.playSound("LuminousTuto/Hit3", 100) +sm.sendDelay(2200) + +sm.forcedInput(2) +sm.removeNpc(BLACK_MAGE_MINION_1) +sm.removeNpc(BLACK_MAGE_MINION_2) + + diff --git a/scripts/field/lightning_tuto_3_1.py b/scripts/field/lightning_tuto_3_1.py new file mode 100755 index 0000000..4b355bd --- /dev/null +++ b/scripts/field/lightning_tuto_3_1.py @@ -0,0 +1,23 @@ +ARAN = 2159356 + +sm.removeEscapeButton() +sm.setSpeakerID(ARAN) +sm.sendNext("I figured you'd have your hands full right now, but here you are goofing around!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Aran! You're wounded! Where are Mercedes and Freud?") + +sm.setSpeakerID(ARAN) +sm.sendSay("Ah, it's nothing. Those two got a head start on me. They might even be fighting the Black Mage right now...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Can you go on?") + +sm.setSpeakerID(ARAN) +sm.sendSay("Aww, are you worried about me? I'm fine! Just... get in there, okay? You don't want to let Mercedes and Freud hog all the glory. I'll stay here and fend off anybody trying to get in...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("...Be careful.") + +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_3_2.py b/scripts/field/lightning_tuto_3_2.py new file mode 100755 index 0000000..f3e7a83 --- /dev/null +++ b/scripts/field/lightning_tuto_3_2.py @@ -0,0 +1,11 @@ +ARAN = 2159356 + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg0/7", 4000, 0, -100, -2, -2, False, 0) +sm.sendDelay(1500) + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg0/6", 2500, 0, -100, 0, sm.getNpcObjectIdByTemplateId(ARAN), False, 0) +sm.sendDelay(1500) + +sm.lockInGameUI(False) +sm.removeNpc(ARAN) +sm.warp(927020060, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_4_0.py b/scripts/field/lightning_tuto_4_0.py new file mode 100755 index 0000000..f1171f6 --- /dev/null +++ b/scripts/field/lightning_tuto_4_0.py @@ -0,0 +1,13 @@ +# Hidden Street : Black Mage's Antechamber (927020060) | Used in Luminous' Tutorial + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("Looks like Freud and Mercedes are already inside. " + "I hope I'm not too late.") +sm.sendDelay(750) + +sm.curNodeEventEnd(True) +sm.forcedInput(2) diff --git a/scripts/field/lightning_tuto_4_1.py b/scripts/field/lightning_tuto_4_1.py new file mode 100755 index 0000000..c51bccf --- /dev/null +++ b/scripts/field/lightning_tuto_4_1.py @@ -0,0 +1,10 @@ +sm.avatarOriented("Effect/OnUserEff.img/normalEffect/demonSlayer/chatBalloon0") +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene2") +sm.sendDelay(1000) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("The air feels like black sludge in my lungs. The Black Mage is close...") +sm.sendDelay(1000) + +sm.curNodeEventEnd(True) +sm.warp(927020090, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_5_0.py b/scripts/field/lightning_tuto_5_0.py new file mode 100755 index 0000000..e98d6d7 --- /dev/null +++ b/scripts/field/lightning_tuto_5_0.py @@ -0,0 +1,5 @@ +sm.lockInGameUI(True) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial/Scene1") +sm.sendDelay(9000) + +sm.warp(927020070, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_6_0.py b/scripts/field/lightning_tuto_6_0.py new file mode 100755 index 0000000..4fc9ca6 --- /dev/null +++ b/scripts/field/lightning_tuto_6_0.py @@ -0,0 +1,29 @@ +FREUD = 2159357 + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) + +sm.spawnNpc(FREUD, 300, -80) +sm.showNpcSpecialActionByTemplateId(FREUD, "summon", 0) + +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg1/6", 0, 0, -160, -2, -2, False, 0) +sm.sendDelay(1200) + +sm.moveCamera(False, 300, 0, -500) + +sm.showFieldEffect("lightning/screenMsg/2") +sm.playExclSoundWithDownBGM("Voice.img/DarkMage/0", 100) +sm.sendDelay(4000) + +sm.moveCamera(False, 300, 300, -100) + +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/0", 0, 0, -90, 0, sm.getNpcObjectIdByTemplateId(FREUD), False, 0) +sm.sendDelay(2100) + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("Freud! Mercedes!") +sm.sendDelay(300) + +sm.forcedInput(2) +sm.moveCamera(True, 180, 0, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_6_1.py b/scripts/field/lightning_tuto_6_1.py new file mode 100755 index 0000000..869f55f --- /dev/null +++ b/scripts/field/lightning_tuto_6_1.py @@ -0,0 +1,46 @@ +FREUD = 2159357 + +sm.forcedInput(0) + +sm.removeEscapeButton() +sm.setSpeakerID(FREUD) +sm.sendNext("We did all we could, but...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("What happened to Mercedes?") + +sm.setSpeakerID(FREUD) +sm.sendSay("She'll live, but I don't know how long. The Black Mage is too strong. We've only got one option.") + +sm.showEffect("Effect/Direction6.img/effect/tuto/balloonMsg0/10", 0, 0, -90, 0, sm.getNpcObjectIdByTemplateId(FREUD), False, 0) +sm.sendDelay(1800) + +sm.showEffect("Skill/2218.img/skill/22181003/affected", 0, 0, -90, 0, sm.getNpcObjectIdByTemplateId(FREUD), False, 0) +sm.sendDelay(1500) + +sm.setSpeakerID(FREUD) +sm.sendNext("#b(Listen to me, Luminous. I'm talking to you telepathically. Do you remember the seal spell I told you about?)#k") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("#b(You intend to trap the Black Mage?)#k") + +sm.setSpeakerID(FREUD) +sm.sendSay("#b(I intend to turn the power he stole from the Goddess of Time against him! But the only way to trigger the spell is to force the Black Mage to use his full power against one of us...)#k") +sm.sendSay("#b(I set the trap when I saw that we were losing. I don't think he noticed, but he won't use his full power against any of us. Not in this state...)#k") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("#b(Tell me what to do.)#k") + +sm.setSpeakerID(FREUD) +sm.sendSay("#b(Activate the seals. I'll keep the Black Mage busy, but hurry! There are 5 seals you need to activate.)#k") +sm.sendSay("#b(The first seal is off to the right. It will activate when you get close to it.)#k") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("#b(It will be done.)#k") + +sm.setSpeakerID(FREUD) +sm.sendSay("#b(Time will become unfrozen when all the seals are activated. Goddess of Time, give me your strength...)#k") + +sm.lockInGameUI(False) +sm.warp(927020071, 0) + diff --git a/scripts/field/lightning_tuto_6_2.py b/scripts/field/lightning_tuto_6_2.py new file mode 100755 index 0000000..46a4494 --- /dev/null +++ b/scripts/field/lightning_tuto_6_2.py @@ -0,0 +1,33 @@ +SEAL_CHECKER = 9300535 +SEAL_OF_TIME_1 = 2159363 +SEAL_OF_TIME_2 = 2159364 +SEAL_OF_TIME_3 = 2159365 +SEAL_OF_TIME_4 = 2159366 + +sm.giveSkill(20041222) +sm.setFuncKeyByScript(True, 20041222, 42) + +sm.spawnMob(SEAL_CHECKER, 550, -298, False) +sm.spawnMob(SEAL_CHECKER, 107, -508, False) +sm.spawnMob(SEAL_CHECKER, -195, -508, False) +sm.spawnMob(SEAL_CHECKER, -625, -298, False) + +sm.spawnNpc(SEAL_OF_TIME_1, 550, -310) +sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME_1, "summon", 0) + +sm.spawnNpc(SEAL_OF_TIME_2, 107, -520) +sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME_2, "summon", 0) + +sm.spawnNpc(SEAL_OF_TIME_3, -195, -520) +sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME_3, "summon", 0) + +sm.spawnNpc(SEAL_OF_TIME_4, -625, -310) +sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME_4, "summon", 0) +sm.showFieldEffect("lightning/screenMsg/4") + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("Time is frozen. I must activate the seals before the Black Mage notices.") +sm.sendSay("I must reach the light on the platform to the right. I can #b#k there if I press #r[Shift]#k.") + +sm.showFieldEffect("lightning/screenMsg/5") diff --git a/scripts/field/lightning_tuto_6_3.py b/scripts/field/lightning_tuto_6_3.py new file mode 100755 index 0000000..eda9113 --- /dev/null +++ b/scripts/field/lightning_tuto_6_3.py @@ -0,0 +1,46 @@ +FREUD = 2159357 + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.forcedInput(0) + +sm.spawnNpc(FREUD, 300, -80) +sm.showNpcSpecialActionByTemplateId(FREUD, "summon", 0) + +sm.removeEscapeButton() +sm.setSpeakerID(FREUD) +sm.sendNext("#b(What happened?)#k") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("#b(I activated all 5 seals.)#k") + +sm.setSpeakerID(FREUD) +sm.sendSay("#b(Now we have to force the Black Mage's hand. The only way to get him to use his full power is if you use your Light magic against him.)#k") + +sm.moveCamera(False, 300, 0, -500) + +sm.showFieldEffect("lightning/screenMsg/3") +sm.playExclSoundWithDownBGM("Voice.img/DarkMage/1", 100) +sm.sendDelay(4000) + +sm.moveCamera(True, 0, 0, 0) + +sm.forcedInput(1) +sm.sendDelay(1000) + +sm.forcedInput(0) +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg0/8", 0, 0, -100, -2, -2, False, 0) +sm.sendDelay(2300) + +sm.showEffect("Effect/Direction8.img/effect/tuto/BalloonMsg0/9", 0, 0, -100, -2, -2, False, 0) +sm.sendDelay(1500) + +sm.moveCamera(False, 300, 0, -500) + +sm.playExclSoundWithDownBGM("Voice.img/DarkMage/4", 100) +sm.showFieldEffect("demonSlayer/whiteOut") +sm.sendDelay(5000) + +sm.lockInGameUI(False) +sm.removeNpc(FREUD) +sm.warp(927020100) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_7_0.py b/scripts/field/lightning_tuto_7_0.py new file mode 100755 index 0000000..e3e5d75 --- /dev/null +++ b/scripts/field/lightning_tuto_7_0.py @@ -0,0 +1,5 @@ +sm.lockInGameUI(True) +sm.playVideoByScript("Luminous.avi") + +sm.warp(910141040) + diff --git a/scripts/field/lightning_tuto_8_0.py b/scripts/field/lightning_tuto_8_0.py new file mode 100755 index 0000000..a563581 --- /dev/null +++ b/scripts/field/lightning_tuto_8_0.py @@ -0,0 +1,7 @@ +sm.lockInGameUI(True) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial/Scene2") +sm.playExclSoundWithDownBGM("Voice.img/DarkMage/5", 100) +sm.sendDelay(7200) + +sm.lockInGameUI(False) +sm.warp(910141000, 0) \ No newline at end of file diff --git a/scripts/field/lightning_tuto_9_0.py b/scripts/field/lightning_tuto_9_0.py new file mode 100755 index 0000000..8c8e4c5 --- /dev/null +++ b/scripts/field/lightning_tuto_9_0.py @@ -0,0 +1,91 @@ +LANIA = 1032200 + +sm.lockInGameUI(True) +sm.curNodeEventEnd(True) +sm.forcedInput(4) +sm.showEffect("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon401", 0, 0, 20, -2, -2, False, 0) +sm.spawnNpc(LANIA, 800, -40) +sm.showNpcSpecialActionByTemplateId(LANIA, "summon", 0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") +sm.sendDelay(1000) + +sm.moveNpcByTemplateId(LANIA, True, 200, 100) +sm.moveCamera(False, 400, 540, -230) + +sm.removeEscapeButton() +sm.setSpeakerID(LANIA) +sm.sendNext("Is... is that a person?!") + +sm.moveNpcByTemplateId(LANIA, True, 600, 100) + +sm.moveCamera(True, 100, 0, 0) + +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") +sm.sendDelay(0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") +sm.sendDelay(0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") +sm.sendDelay(0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") +sm.sendDelay(0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") +sm.sendDelay(0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene0") +sm.sendDelay(0) + +sm.forcedInput(0) +sm.forcedAction(4, 2000) +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/1", 2000, 20, -100, -2, -2, False, 0) +sm.reservedEffect("Effect/Direction8.img/lightningTutorial2/Scene2") +sm.sendDelay(2000) + +sm.sendNext("Oh, thank goodness you're not dead! You're gonna be okay. This is a small forest located near #bEllinia#k. My name is Lania.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("What is this place? Ellinia? Take me to #bElluel#k.") + +sm.setSpeakerID(LANIA) +sm.sendSay("Elluel? I think I heard that in a fairy tale one time...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Where is the Black Mage? Has he invaded your town?") + +sm.setSpeakerID(LANIA) +sm.sendSay("Huh? I heard a story about five heroes defeating some evil old wizard called the Black Mage hundreds of years ago, but I think that was just a fairy tale too...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(This is madness. Could hundreds of years have passed by in the blink of an eye?!)\r\nI feel...odd.") + +sm.setSpeakerID(LANIA) +sm.sendSay("Hey, whoa, not on me!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I-I will be all right. Are you not too young to wander the woods alone? Where are your parents?") + +sm.setSpeakerID(LANIA) +sm.sendSay("I... don't know. Me and Penny have been here for as long as I can remember....") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I apologize. I meant no offense.") + +sm.setSpeakerID(LANIA) +sm.sendSay("It's okay! Penny's my best pal. She's also a cat, but at least she's pretty good at talking. I kinda miss talking to people though. Penny always just nags me.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I fear I am poor company. I've never been much for small talk.") + +sm.setSpeakerID(LANIA) +sm.sendSay("For somebody that's bad at words, you sure use a lot of big ones! Why don't you come back to my house? Me and Penny can make you something to eat.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(If the Black Mage is truly gone, perhaps I could find meaning in a simple life.)\r\nY-yes, I will accompany you. If it is not too much trouble.") + +sm.moveNpcByTemplateId(LANIA, False, 600, 100) +sm.sendDelay(1000) + +sm.forcedInput(2) +sm.sendDelay(1000) + +sm.removeNpc(LANIA) +sm.lockInGameUI(False) +sm.warp(910141050, 0) \ No newline at end of file diff --git a/scripts/field/lostSpirit_mapEnter.py b/scripts/field/lostSpirit_mapEnter.py new file mode 100755 index 0000000..86ca966 --- /dev/null +++ b/scripts/field/lostSpirit_mapEnter.py @@ -0,0 +1,5 @@ +# id 940200220 (Heart of the Forest : Rescue the Lost Spirit 1), field 940200220 +sm.showFieldEffect("aswan/stageEff/stage", 0) +sm.showFieldEffect("aswan/stageEff/number/1", 0) +sm.showFieldEffect("monsterPark/clear", 0) +sm.playSound("Party1/Clear", 100) diff --git a/scripts/field/mPark_stageEff.py b/scripts/field/mPark_stageEff.py new file mode 100755 index 0000000..d5f4049 --- /dev/null +++ b/scripts/field/mPark_stageEff.py @@ -0,0 +1,25 @@ +# Monster Park Maps + +from net.swordie.ms.constants import GameConstants +from net.swordie.ms.constants import WzConstants +from net.swordie.ms.enums import WeatherEffNoticeType + +stage = ((sm.getFieldID() % 1000) / 100) + 1 +if stage == 6: + sm.showEffect(WzConstants.EFFECT_MONSTER_PARK_FINAL_STAGE) +else: + sm.showEffect("" + WzConstants.EFFECT_MONSTER_PARK_STAGE_NUMBER + "" + str(stage)) + sm.showEffect(WzConstants.EFFECT_MONSTER_PARK_STAGE) +sm.chatScript("All monsters in the field must be eliminated before you can move to the next stage") + +while sm.hasMobsInField(): + mob = sm.waitForMobDeath() + #Exp based on mobTemplateId + exp = sm.getMPExpByMobId(mob.getTemplateId()) + + #Stores Exp from killing mobs + sm.setQRValue(GameConstants.MONSTER_PARK_EXP_QUEST, str(int(sm.getQRValue(GameConstants.MONSTER_PARK_EXP_QUEST)) + exp)) + + #displays the EXP message + sm.showWeatherNoticeToField("EXP reward "+ sm.formatNumber(sm.getQRValue(GameConstants.MONSTER_PARK_EXP_QUEST)) +" earned!", WeatherEffNoticeType.MonsterPark_ExpMsg) +sm.showEffectToField(WzConstants.EFFECT_CLEAR) \ No newline at end of file diff --git a/scripts/field/magicLibrary.py b/scripts/field/magicLibrary.py new file mode 100755 index 0000000..f46f2f1 --- /dev/null +++ b/scripts/field/magicLibrary.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# ID :: [101000010] +# Ellinia : Magic Library +if sm.hasQuest(25559): + sm.completeQuest(25559) +elif not "1" in sm.getQRValue(2790) and chr.getLevel() == 10: + sm.createQuestWithQRValue(2790, "1") \ No newline at end of file diff --git a/scripts/field/magnus_enter_HP.py b/scripts/field/magnus_enter_HP.py new file mode 100755 index 0000000..561efc6 --- /dev/null +++ b/scripts/field/magnus_enter_HP.py @@ -0,0 +1,2 @@ +sm.showHP() +# field scripts should be stopped by warpInstanceOut() \ No newline at end of file diff --git a/scripts/field/magnus_summon.py b/scripts/field/magnus_summon.py new file mode 100755 index 0000000..b7aad74 --- /dev/null +++ b/scripts/field/magnus_summon.py @@ -0,0 +1,14 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.createClock(BossConstants.MAGNUS_TIME) # 20min +sm.spawnMob(8880000, 1900, -1347, False, 362250000000) + +sm.invokeAtFixedRate(250, BossConstants.MAGNUS_GREEN_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.GreenMeteor, 1, BossConstants.MAGNUS_GREEN_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_GREEN_ATOM_AMOUNT, BossConstants.MAGNUS_GREEN_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.MAGNUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.BlueMeteor, 1, BossConstants.MAGNUS_BLUE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_BLUE_ATOM_AMOUNT, BossConstants.MAGNUS_BLUE_ATOM_PROP) + +sm.invokeAtFixedRate(750, BossConstants.MAGNUS_PURPLE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.PurpleMeteor, 1, BossConstants.MAGNUS_PURPLE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_PURPLE_ATOM_AMOUNT, BossConstants.MAGNUS_PURPLE_ATOM_PROP) diff --git a/scripts/field/magnus_summon_E.py b/scripts/field/magnus_summon_E.py new file mode 100755 index 0000000..2952945 --- /dev/null +++ b/scripts/field/magnus_summon_E.py @@ -0,0 +1,13 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.spawnMob(8880010, 1900, -1347, False) + +sm.invokeAtFixedRate(250, BossConstants.MAGNUS_GREEN_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.GreenMeteor, 1, BossConstants.MAGNUS_GREEN_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_GREEN_ATOM_AMOUNT, BossConstants.MAGNUS_GREEN_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.MAGNUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.BlueMeteor, 1, BossConstants.MAGNUS_BLUE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_BLUE_ATOM_AMOUNT, BossConstants.MAGNUS_BLUE_ATOM_PROP) + +sm.invokeAtFixedRate(750, BossConstants.MAGNUS_PURPLE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.PurpleMeteor, 1, BossConstants.MAGNUS_PURPLE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_PURPLE_ATOM_AMOUNT, BossConstants.MAGNUS_PURPLE_ATOM_PROP) diff --git a/scripts/field/magnus_summon_H.py b/scripts/field/magnus_summon_H.py new file mode 100755 index 0000000..aa7c42a --- /dev/null +++ b/scripts/field/magnus_summon_H.py @@ -0,0 +1,13 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.spawnMob(8880001, 1900, -1347, False) + +sm.invokeAtFixedRate(250, BossConstants.MAGNUS_GREEN_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.GreenMeteor, 1, BossConstants.MAGNUS_GREEN_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_GREEN_ATOM_AMOUNT, BossConstants.MAGNUS_GREEN_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.MAGNUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.BlueMeteor, 1, BossConstants.MAGNUS_BLUE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_BLUE_ATOM_AMOUNT, BossConstants.MAGNUS_BLUE_ATOM_PROP) + +sm.invokeAtFixedRate(750, BossConstants.MAGNUS_PURPLE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.PurpleMeteor, 1, BossConstants.MAGNUS_PURPLE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_PURPLE_ATOM_AMOUNT, BossConstants.MAGNUS_PURPLE_ATOM_PROP) diff --git a/scripts/field/magnus_summon_N.py b/scripts/field/magnus_summon_N.py new file mode 100755 index 0000000..a2908ec --- /dev/null +++ b/scripts/field/magnus_summon_N.py @@ -0,0 +1,14 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.createClock(BossConstants.MAGNUS_TIME) # 20min +sm.spawnMob(8880010, 1900, -1347, False, 6000000000) + +sm.invokeAtFixedRate(250, BossConstants.MAGNUS_GREEN_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.GreenMeteor, 1, BossConstants.MAGNUS_GREEN_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_GREEN_ATOM_AMOUNT, BossConstants.MAGNUS_GREEN_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.MAGNUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.BlueMeteor, 1, BossConstants.MAGNUS_BLUE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_BLUE_ATOM_AMOUNT, BossConstants.MAGNUS_BLUE_ATOM_PROP) + +sm.invokeAtFixedRate(750, BossConstants.MAGNUS_PURPLE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.PurpleMeteor, 1, BossConstants.MAGNUS_PURPLE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_PURPLE_ATOM_AMOUNT, BossConstants.MAGNUS_PURPLE_ATOM_PROP) diff --git a/scripts/field/map915020101.py b/scripts/field/map915020101.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/map915020201.py b/scripts/field/map915020201.py new file mode 100755 index 0000000..b83a56b --- /dev/null +++ b/scripts/field/map915020201.py @@ -0,0 +1,13 @@ +JOB_QUEST = 25112 +if sm.hasQuest(JOB_QUEST) or not sm.hasQuestCompleted(JOB_QUEST): + sm.setPlayerAsSpeaker() + sm.removeEscapeButton() + sm.lockInGameUI(True) + sm.sendNext("Aria's portrait... I was wonderinf if I'd run into you.") + sm.sendNext("You always wore that silly little smile to make your advisors think everything was alright." + "You always were too concerned about everybody else... And now you give me the skill book I was looking for. What a dear.") + + sm.lockInGameUI(False) + sm.setJob(2412) + sm.addSP(5) + sm.completeQuest(JOB_QUEST) diff --git a/scripts/field/map921110300.py b/scripts/field/map921110300.py new file mode 100755 index 0000000..d0f2e2d --- /dev/null +++ b/scripts/field/map921110300.py @@ -0,0 +1,8 @@ +SHADE_THIRD_JOB = 38074 + +if sm.hasQuest(38074): + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.flipSpeaker() + sm.sendNext("This castle used to be so grand, and now it's all in ruins. If I remember correctly there's a way in there somewhere.") + sm.completeQuestNoRewards(SHADE_THIRD_JOB) diff --git a/scripts/field/map921110301.py b/scripts/field/map921110301.py new file mode 100755 index 0000000..755bfa3 --- /dev/null +++ b/scripts/field/map921110301.py @@ -0,0 +1,16 @@ +import random + +if sm.hasQuestCompleted(38074) and not sm.hasQuestCompleted(38075): + sm.setPlayerAsSpeaker() + sm.removeEscapeButton() + sm.startQuest(38075) + + if not sm.hasReactors(): + position = random.randrange(8) + sm.spawnReactor(2119007, 936 + (position + 1)*175, 43) + for x in range(8): + if x != position: + sm.spawnReactor(2119008, 936 + (x + 1)*175, 43) + + sm.sendNext("I think I'm at the right place, but why are there so many boxes? I suppose I need to break them one at a time.") + sm.chatScript("Use normal attacks to break the wooden boxes.") diff --git a/scripts/field/map940200040.py b/scripts/field/map940200040.py new file mode 100755 index 0000000..f417841 --- /dev/null +++ b/scripts/field/map940200040.py @@ -0,0 +1,18 @@ +# There's something weird going on here, think it's just v176 vs v206 differences, but quest with no script is teleporting us here directly but it's skipping a step compared to in v206 +# you're supposed to turn in Lost Moonbeam at the Fox Tree to her little pet, and then that will teleport you here. We're getting teleported here when we accept from Silver +MOB = 9300810 + +sm.spawnMob(MOB, -230, 25, False) +sm.spawnMob(MOB, 80, 25, False) +sm.spawnMob(MOB, 490, 25, False) +sm.spawnMob(MOB, 800, 25, False) +sm.spawnMob(MOB, -200, -215, False) +sm.spawnMob(MOB, 200, -215, False) +sm.spawnMob(MOB, 600, -215, False) +sm.spawnMob(MOB, -200, -455, False) +sm.spawnMob(MOB, 200, -455, False) +sm.spawnMob(MOB, 600, -455, False) + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("There really are tigers around here? Moonbeam... I gotta get rid of all the #r#o9300810##k monsters first.") +sm.startQuestNoCheck(38021) diff --git a/scripts/field/map940200050.py b/scripts/field/map940200050.py new file mode 100755 index 0000000..18a39bd --- /dev/null +++ b/scripts/field/map940200050.py @@ -0,0 +1,56 @@ +MOONBEAM = 3002106 +MOONBEAM_CHAT = 3002103 +TIGER = 3002104 +if sm.hasMobsInField(): + sm.dispose() +else: + sm.setSpeakerID(2007) + if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.createQuestWithQRValue(37999, "SKIPPED_TIGER") + if sm.getQRValue(37999) != "SKIPPED_TIGER": + sm.lockInGameUI(True, False) + sm.forcedInput(0) + + sm.spawnNpc(MOONBEAM, -600, 20) + sm.showNpcSpecialActionByTemplateId(MOONBEAM, "summon") + + sm.spawnNpc(TIGER, -500, 20) + sm.showNpcSpecialActionByTemplateId(TIGER, "summon") + sm.sendDelay(1500) + + sm.removeEscapeButton() + sm.flipSpeaker() + sm.setSpeakerID(MOONBEAM_CHAT) + sm.sendNext("Hey, let go of me. I said, LEGGO!") + + sm.resetParam() + sm.removeEscapeButton() + sm.setSpeakerID(TIGER) + sm.sendSay("You, my bride. I marry today!") + + sm.flipSpeaker() + sm.setSpeakerID(MOONBEAM_CHAT) + sm.sendSay("I'm not gonna marry you! You're not even my type! If only I had my spirit, I'd take you out in one punch!") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Moonbeam!") + + sm.setSpeakerID(MOONBEAM_CHAT) + sm.sendSay("Shade? Oh, Shade! I was so scared! There was a tiger and he was super creepy and I couldn't do anything and it was terrible! *Sob sob*") + sm.sendDelay(500) + + sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg0/2", 0, 0, -135, TIGER) + sm.showBalloonMsg("Effect/Direction12.img/effect/tuto/BalloonMsg0/2", 0) + sm.sendDelay(2000) + + sm.sendNext("...Anyway, save me! I don't wanna get married to this ugly tiger!") + + sm.setSpeakerID(TIGER) + sm.sendSay("I, hurt. You, all die!") + sm.sendDelay(500) + + sm.removeNpc(MOONBEAM) + sm.removeNpc(TIGER) + sm.spawnMob(9300811, -300, 85, False) + sm.createQuestWithQRValue(38022, "") + sm.lockInGameUI(False) diff --git a/scripts/field/map940200060.py b/scripts/field/map940200060.py new file mode 100755 index 0000000..cf6d2e4 --- /dev/null +++ b/scripts/field/map940200060.py @@ -0,0 +1,35 @@ +# 940200060 +MOONBEAM = 3002100 + +if sm.getQRValue(37999) != "SKIPPED_ILLUST": + sm.lockInGameUI(True) + sm.hideUser(False) + sm.spawnNpc(MOONBEAM, 10, 20) + sm.showNpcSpecialActionByTemplateId(MOONBEAM, "summon") + sm.sendDelay(100) + + sm.moveNpcByTemplateId(MOONBEAM, False, 250, 100) + sm.forcedInput(2) + sm.sendDelay(4500) + + sm.moveNpcByTemplateId(MOONBEAM, True, 70, 100) + sm.forcedInput(0) + sm.sendDelay(2000) + + sm.removeEscapeButton() + sm.setSpeakerID(MOONBEAM) + sm.sendNext("Are all humans this slow? Is it because you don't have a tail?") + sm.sendSay("Ughh! You're too slow. I'm gonna go first. We're almost there and there's nothing too dangerous out here, so just follow me. Just follow this path. Don't go running off, okay? Good human, see you soon!") + + sm.moveNpcByTemplateId(MOONBEAM, False, 510, 100) + sm.sendDelay(3000) + + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("...Wow. Kid has some nerve dragging me to her town then to head off on her own. I might as well follow her, I'm pretty lost here.") + + sm.chatScript("Press the left and right keys to move.") + sm.removeNpc(MOONBEAM) +sm.createQuestWithQRValue(38000, "") +sm.levelUntil(10) + +sm.lockInGameUI(False) diff --git a/scripts/field/map_749080900.py b/scripts/field/map_749080900.py new file mode 100755 index 0000000..ccb6fa4 --- /dev/null +++ b/scripts/field/map_749080900.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Map ID :: 749080900 +# Alishan : Leshan +if sm.hasQuest(55234): + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendNext("-ort me... Dang it, they ALWAYS do that!") + + + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("I don't recognize this place at all. Why is it so hard for me to stay in Maple World?") + + + sm.completeQuest(55234) \ No newline at end of file diff --git a/scripts/field/map_865000000.py b/scripts/field/map_865000000.py new file mode 100755 index 0000000..0f26262 --- /dev/null +++ b/scripts/field/map_865000000.py @@ -0,0 +1,13 @@ +# San Commerci | Used to complete a Quest: [Commerci Republic] Ciao, Until Next Time +sm.showEffect("Map/EffectBT.img/dawnveil1/temaD") # San Commerci Theme Dungeon Effect + + +if sm.hasQuest(17614): # [Commerci Republic] Ciao, Until Next Time + sm.removeEscapeButton() + sm.sendNext("This place is huge! \r\n" + "How am I ever going to find Leon?") + sm.sendSayOkay("Maybe I can ask this guy for directions") + sm.completeQuest(17614) + +elif sm.hasQuest(17617): # [Commerci Republic] Missing Goods + sm.chatScript("You were told the impostor was last seen heading south") \ No newline at end of file diff --git a/scripts/field/map_865000002.py b/scripts/field/map_865000002.py new file mode 100755 index 0000000..aa92310 --- /dev/null +++ b/scripts/field/map_865000002.py @@ -0,0 +1,3 @@ +# id 865000002 (San Commerci : Daniella Merchant Union Office), field 865000002 +sm.startQuest(17912) +sm.createQuestWithQRValue(18418, "B=33228") diff --git a/scripts/field/map_865000003.py b/scripts/field/map_865000003.py new file mode 100755 index 0000000..a58a8ff --- /dev/null +++ b/scripts/field/map_865000003.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [865000003] +# San Commerci : Tremier Merchant Union Office + +sm.createQuestWithQRValue(17913, "1") \ No newline at end of file diff --git a/scripts/field/map_865000004.py b/scripts/field/map_865000004.py new file mode 100755 index 0000000..276cf5a --- /dev/null +++ b/scripts/field/map_865000004.py @@ -0,0 +1,35 @@ +# id 865000004 (null), field 865000004 +sm.lockInGameUI(True, False) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Man, I can't sleep tonight. The air's too... moist.") +sm.sendSay("I'm gonna take a walk, clear my head.") +sm.forcedInput(2) +sm.sendDelay(1500) +sm.forcedInput(0) +sm.sendNext("What's that noise? Maybe it's Leon...") +sm.sendDelay(2000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendNext("Aw, c'mon, daddy. It's not like that.") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("You can't just go around trusting strangers, Leon.") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("But #h0# isn't a stranger. #h0# is my sidekick! #h0# helped me!") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("How do you know the whole thing wasn't staged?") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Father...") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("Listen to me, son. One day, I'm going to pass the Merchant Union to you. You can't go around trusting every person who smiles at you.") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("I... I can't?") +sm.setParam(35) +sm.sendSay("(I knew it. Gilberto doesn't trust me. I have to think of a way to change his mind!)") +sm.completeQuestNoCheck(17623) +sm.completeQuestNoCheck(17712) +sm.startQuest(17720) +sm.lockInGameUI(False, True) +sm.warp(865000002) diff --git a/scripts/field/map_865010200.py b/scripts/field/map_865010200.py new file mode 100755 index 0000000..f215625 --- /dev/null +++ b/scripts/field/map_865010200.py @@ -0,0 +1,47 @@ +# Created by MechAviv +# ID :: [865010200] +# Commerci Republic : Berry + +if not sm.hasQuest(17608) and not sm.hasQuestCompleted(17608): + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, True, False, False) + sm.forcedInput(4) + sm.localEmotion(7, 7000, False) + sm.sendDelay(3000) + + + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.setSpeakerType(3) + sm.sendNext("Ugh... Where... am I...? ") + + + sm.forcedInput(2) + sm.sendDelay(1000) + + + sm.forcedInput(0) + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.setSpeakerType(3) + sm.sendNext("Oof my head. Hey, where's the ship...? What about Parbell...? How did I end up here? I... can't remember anything.") + + + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.setSpeakerType(3) + sm.sendSay("It looks like I'm not too badly hurt. This place looks like a fishing village. I should talk to someone and figure out where I am.") + + + sm.startQuest(17608) + sm.sendDelay(1000) + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.setStandAloneMode(False) + sm.showFieldEffect("Effect/EffectBT.img/dawnveil1/temaD", 0) \ No newline at end of file diff --git a/scripts/field/map_865020061.py b/scripts/field/map_865020061.py new file mode 100755 index 0000000..cfec2c8 --- /dev/null +++ b/scripts/field/map_865020061.py @@ -0,0 +1,121 @@ +# id 865020061 (Commerci Republic : Canal Battleground 5), field 865020061 +sm.createQuestWithQRValue(18418, "B=33252") +sm.lockInGameUI(True, True) +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("There are just too many of them.") +sm.createQuestWithQRValue(18418, "B=33253") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390234) # Leon Daniella +sm.sendSay("I'm too pretty to die!!") +sm.setParam(17) +sm.sendSay("Leon, don't give up!") +sm.setParam(5) +sm.sendSay("(The situation looks pretty hopeless, though... What can we do?)") +sm.sendDelay(1700) +sm.setInnerOverrideSpeakerTemplateID(9390208) # Riverson +sm.sendNext("Make choice! Surrender... or die!") +sm.setParam(17) +sm.sendSay("Ugh... This doesn't look good.") +sm.sendDelay(1700) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 240, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 140, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 40, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -40, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -140, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -240, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(1000) +sm.sendNext("What's going on?!") +sm.sendDelay(2000) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 240, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -140, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(800) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 40, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -40, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(800) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 140, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -240, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(800) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 40, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -40, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(800) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 340, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -240, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.sendDelay(1000) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 340, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 240, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 140, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, 40, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -40, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -140, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -240, 0, 0, 0, 0, 0) +sm.showEffect("Effect/DirectionBT.img/effect/Comerz/Boom1", 0, -340, 0, 0, 0, 0, 0) +sm.playSound("cannonshooter/Attack3", 100) +sm.setParam(5) +sm.sendNext("Support troops? Losing battle. Retreat!") +sm.setParam(17) +sm.sendSay("Did the prime minister send them?") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("I thought daddy was all out of troops.") +sm.startQuest(17631) +sm.spawnNpc(9390247, 985, 348) +sm.showNpcSpecialActionByTemplateId(9390247, "summon", 0) +sm.setParam(17) +sm.sendSay("Hey! I know you!") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390247) # Robed Lady +sm.sendSay("Oh. It's you.") +sm.setParam(17) +sm.sendSay("Why did you help us?") +sm.setParam(5) +sm.sendSay("Why do you think?") +sm.setParam(17) +sm.sendSay("Er, I don't know...") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("#h0#! Introduce me!") +sm.setParam(17) +sm.sendSay("Um, this is...") +sm.setParam(5) +sm.sendSay("This is the dashing Leon Daniella of the Daniella Merchant Union, at your service, my lady.") +sm.setInnerOverrideSpeakerTemplateID(9390247) # Robed Lady +sm.sendSay("You're from the Daniella Merchant Union?") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("I am if you want me to be. You saved my life. You have my eternal devotion.") +sm.setInnerOverrideSpeakerTemplateID(9390247) # Robed Lady +sm.sendSay("I don't want your eternal devotion! I want to be paid for saving your butt!") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("You really want my butt?") +sm.setInnerOverrideSpeakerTemplateID(9390247) # Robed Lady +sm.sendSay("No, I want your MONEY.") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Then you shall have my butt and my money! Do you also want to touch my hair? It's really soft.") +sm.setInnerOverrideSpeakerTemplateID(9390247) # Robed Lady +sm.sendSay("Maybe later. Thanks for the dough. Gotta jet.") +sm.setParam(17) +sm.sendSay("What a character...") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("So this is what it's like to be in love...") +sm.setParam(17) +sm.sendSay("(Oh, Leon... You have such terrible taste.)") +sm.completeQuestNoCheck(17631) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(18418, "B=33254") diff --git a/scripts/field/map_865030000.py b/scripts/field/map_865030000.py new file mode 100755 index 0000000..3ea56ae --- /dev/null +++ b/scripts/field/map_865030000.py @@ -0,0 +1,11 @@ +# id 865030000 (Commerci Republic : Suspicious Forest Entrance), field 865030000 +sm.startQuest(17930) +sm.playSound("Sound/FarmSE.img/boxResult", 100) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26# Burning Stage 10: 100% Bonus EXP! ", 50, 1500, 4, 0, -200, 1, 4, 2, 0, 0) +sm.createQuestWithQRValue(18418, "B=33263") +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) diff --git a/scripts/field/map_865090001.py b/scripts/field/map_865090001.py new file mode 100755 index 0000000..0d48a96 --- /dev/null +++ b/scripts/field/map_865090001.py @@ -0,0 +1,7 @@ +# Commerci Republic : Berry (Hidden Street) | 9390242 +if sm.hasQuest(17613): # [Commerci Republic] The Minister's Son + i = 0 + while i < 12: + sm.spawnMob(9390847, 996, 132, False) + i += 1 +sm.dispose() diff --git a/scripts/field/map_865090002.py b/scripts/field/map_865090002.py new file mode 100755 index 0000000..302c85c --- /dev/null +++ b/scripts/field/map_865090002.py @@ -0,0 +1,69 @@ +# id 865090002 (San Commerci : Daniella Merchant Union Office), field 865090002 +sm.lockInGameUI(True, False) +sm.startQuest(17621) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendNext("Time is money, and my time is worth a million mesos a minute. Now, please make an appointment.") +sm.startQuest(17621) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendSay("Actually, sir, this young Explorer got our stolen goods back.") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("Excuse me? Our goods were stolen?") +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendSay("Er, you see, sir, these cutthroat bandits stole the goods right out of my hands. I fought back and even tore my pants, but it was this young Explorer who saved me. I'll... be on my way now.") +sm.startQuest(17621) +sm.setParam(57) +sm.sendSay("#b(Tepes is a pretty convincing liar.)#k") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("Ah, well, in that case, I thank you for your help, young Explorer.") +sm.setParam(57) +sm.sendSay("Aw, shucks. Tepes is exaggerating... Like, a lot.") +sm.setParam(37) +sm.sendSay("It is a pleasure to meet you. I am #e#bGilberto Daniella#k#n, prime minister of the Commerci Republic and owner of the Daniella Merchant Union.") +sm.setParam(57) +sm.sendSay("The pleasure is mine. My name is #h0# and I am here on vacation.") +sm.setParam(37) +sm.sendSay("Ah, to be young and free again! But why did you want to see me?") +sm.setParam(57) +sm.sendSay("Um... Well... (Okay, I'm going to have to word this carefully.)") +sm.startQuest(17621) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Father! I'm hooooome!") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("How many times do I need to remind you to call me 'prime minister' in public, Leon?") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Sorry, pops. I mean, prime minister pops. I'm back from my voyage. Didn't even bruise my knees this time.") +sm.sendSay("Yo! #h0#, my best friend sidekick. You made it!") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("You two know each other? This young traveler retrieved some stole goods for us... Or defeated some bandits? I'm still not clear on the story.") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Way to go, #e#b#h0##k#n, buddy! First you saved me in Berry, like the excellent sidekick you are, and now you're impressing my daddy!") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("You exhibit magnificent skills for a mere traveler, #h0#. The union is in your debt.") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Mere traveler? Puh-lease, daddy-o. #e#b#h0##k#n's an ambassador of peace in place of Empress Cygnus AND my sidekick. At first I thought he was from the #bHeaven#k Empire. Pfft, 'traveler.'") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("#h0# is... what?") +sm.setParam(57) +sm.sendSay("(Yikes!) Er, yeah, I'm TRAVELING here in place of Empress Cygnus, in the interest of peace... ") +sm.setParam(37) +sm.sendSay("Just a moment ago, you clearly said you were a tourist...") +sm.setParam(57) +sm.sendSay("Look, I'm gonna level with you Prime Minister. Commerci hasn't had much in the way of interaction with the rest of Maple World and suddenly you guys are sending ships around the globe. Empress Cygnus is understandably concerned...") +sm.setParam(37) +sm.sendSay("And why, precisely, are you here?") +sm.setParam(57) +sm.sendSay("Like Leon said, I'm here as an ambassador of peace, on behalf of Empress Cygnus.") +sm.setParam(37) +sm.sendSay("An ambassador of peace, you say?") +sm.setParam(57) +sm.sendSay("Yes. Empress Cygnus wants to establish a treaty of peace and mutual cooperation with the Commerci Republic.") +sm.setParam(37) +sm.sendSay("I see. Well then, you've traveled a long way. Please make yourself at home and rest. The Union is still in your debt.") +sm.completeQuestNoCheck(17621) +sm.lockInGameUI(False, True) +sm.warp(865000002) diff --git a/scripts/field/map_865090003.py b/scripts/field/map_865090003.py new file mode 100755 index 0000000..e050c9e --- /dev/null +++ b/scripts/field/map_865090003.py @@ -0,0 +1,81 @@ +# Created by MechAviv +# ID :: [865090003] +# Unknown : Unknown + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.setStandAloneMode(True) +sm.hideUser(True) +sm.createFieldTextEffect("#fn나눔고딕 ExtraBold##fs26#That Evening", 100, 2500, 4, 0, 0, 1, 4, 0, 0, 0) +sm.sendDelay(3000) + +sm.OnOffLayer_On(3000, "0", 0, 0, 0, "Map/EffectBT.img/dawnveil1/storm", 4, 1, -1, 0) +sm.sendDelay(1000) + + +sm.playSound("Sound/SoundEff.img/thunder3", 100) +sm.sendDelay(1000) + + +sm.playSound("Sound/SoundEff.img/thunder2", 100) +sm.sendDelay(2000) + + +sm.playSound("Sound/SoundEff.img/thunder", 100) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.setSpeakerType(3) +sm.sendNext("Whoa, whoa, whoa! Mr. Great Explorer, sir! What's going on!?") + + +sm.setIntroBoxChat(9390200) +sm.setSpeakerType(3) +sm.sendSay("Well yuh sure weren't burdened with an over-abundance o' brains, now were yuhs? This right here is what we call a storm. Hold on to something so yuhs don't get gobbled up by the waves!") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.setSpeakerType(3) +sm.sendSay("(A 'safe and cozy' trip, my foot! I'll get you for this, Neinheart!)") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.setSpeakerType(3) +sm.sendSay("Aaaaaaaaaah! Mr. Parbell! #eThe ship's going to be torn apart!#n") + + +sm.setIntroBoxChat(9390200) +sm.setSpeakerType(3) +sm.sendSay("Dagnabbit! The mast looks like it's 'bout to give way! But we's so close to Commerci... Hey, greenhorn! What're yuh doin' layin' about at a time like this'un!") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.setSpeakerType(3) +sm.sendSay("#b(...You passed out, just like that.)#k") + + +sm.OnOffLayer_Off(3000, "0", 0) +sm.hideUser(False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.setStandAloneMode(False) +sm.warp(865010200, 0) diff --git a/scripts/field/map_913070000.py b/scripts/field/map_913070000.py new file mode 100755 index 0000000..7d8a928 --- /dev/null +++ b/scripts/field/map_913070000.py @@ -0,0 +1,36 @@ +# Limbert's General Store (913070000) +if sm.sendAskAccept("Would you like to skip the introduction?"): + sm.giveItem(1142399)# Newborn Light (Medal) + sm.giveItem(1052444)# Apprentice Knight of Light Robe + sm.giveItem(1302077)# Beginner Warrior's Sword + sm.giveAndEquip(1098000)# Soul Shield of Protection + sm.removeEscapeButton() + sm.addLevel(9) + sm.jobAdvance(5100) + sm.addAP(40) + sm.startQuestNoCheck(29976) + sm.completeQuestNoRewards(29976) + sm.completeQuestNoRewards(20036) + sm.warpInstanceOut(913070071, 0) + sm.dispose() + +sm.lockInGameUI(True) +sm.chatScript("Mr. Limbert's General Store") +sm.sendDelay(500) + +sm.chatScript("Month 3, Day 4") +sm.sendDelay(1000) + +sm.showBalloonMsg("Effect/Direction7.img/effect/tuto/step0/0", 2000) +sm.localEmotion(6, 10000, False) +sm.sendDelay(2000) + +sm.showBalloonMsg("Effect/Direction7.img/effect/tuto/step0/1", 2000) +sm.sendDelay(2000) + +sm.showBalloonMsg("Effect/Direction7.img/effect/tuto/step0/2", 3000) +sm.localEmotion(4, 8000, False) +sm.sendDelay(3000) + +sm.forcedInput(1) +# continue in portal_000.py \ No newline at end of file diff --git a/scripts/field/map_913070001.py b/scripts/field/map_913070001.py new file mode 100755 index 0000000..1f2c98b --- /dev/null +++ b/scripts/field/map_913070001.py @@ -0,0 +1,16 @@ +# Limbert's General Store (913070001) + +# Constants +QUEST = 20031 + +if not sm.hasQuest(QUEST) or not sm.hasQuestCompleted(QUEST): + sm.lockInGameUI(True) + sm.chatScript("Mr. Limbert's General Store") + sm.chatScript("Month 3, Day 7") + sm.progressMessageFont(3, 20, 20, 0, "Click on the lightbulb to start the quest. Quest Status Hotkey [Q] / Secondary Key [J]") + sm.sendDelay(1500) + + sm.avatarOriented("UI/tutorial.img/34") + sm.sendDelay(1200) + + sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/map_913070002.py b/scripts/field/map_913070002.py new file mode 100755 index 0000000..39ac286 --- /dev/null +++ b/scripts/field/map_913070002.py @@ -0,0 +1,5 @@ +# Limbert's General Store (913070002) used to unlock ui and few progress messages +sm.lockInGameUI(False) +sm.chatScript("Mr. Limbert's General Store") +sm.chatScript("Month 3, Day 8") +sm.dispose() \ No newline at end of file diff --git a/scripts/field/map_913070004.py b/scripts/field/map_913070004.py new file mode 100755 index 0000000..b7f9e1d --- /dev/null +++ b/scripts/field/map_913070004.py @@ -0,0 +1,25 @@ +# Manual Labor +if not sm.hasQuest(20034) or not sm.hasQuestCompleted(20034): + sm.lockInGameUI(True) + sm.chatScript("Mr. Limbert's General Store") + sm.chatScript("Month 3, Day 11") + sm.doEventAndSendDelay(1000, "forcedInput", 2) + + sm.doEventAndSendDelay(1000, "forcedInput", 1) + + sm.doEventAndSendDelay(2000, "showBalloonMsg", "Effect/Direction7.img/effect/tuto/step0/5", 2000) + + sm.doEventAndSendDelay(500, "forcedInput", 2) + + sm.forcedInput(0) + sm.doEventAndSendDelay(1000, "showBalloonMsg", "Effect/Direction7.img/effect/tuto/step0/6", 2000) + + sm.doEventAndSendDelay(1000, "showBalloonMsg", "Effect/Direction7.img/effect/tuto/step0/4", 2000) + + sm.doEventAndSendDelay(2000, "showBalloonMsg", "Effect/Direction7.img/effect/tuto/step0/7", 2000) + + sm.doEventAndSendDelay(1000, "showBalloonMsg", "Effect/Direction7.img/effect/tuto/step0/8", 2000) + + sm.chatScript("Someone suspicious is in the back yard...") + sm.lockInGameUI(False) + sm.startQuestNoCheck(20034) \ No newline at end of file diff --git a/scripts/field/map_913070050.py b/scripts/field/map_913070050.py new file mode 100755 index 0000000..483095e --- /dev/null +++ b/scripts/field/map_913070050.py @@ -0,0 +1,21 @@ +# Manual Labor + +# Constants +CYGNUS = 1106001 +JAAH = 1106005 + +if not sm.hasQuestCompleted(20034): + sm.lockInGameUI(True) + sm.chatScript("General Store Yard") + sm.forcedInput(2) + sm.showBalloonMsg("Effect/Direction7.img/effect/tuto/step0/4", 2000) + sm.sendDelay(2000) + + sm.localEmotion(6, 10000, False) + + sm.removeEscapeButton() + sm.setSpeakerID(JAAH) + sm.setPlayerAsSpeaker() + sm.sendNext("Huh? Who's that girl?") + + sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/field/map_commerzForest.py b/scripts/field/map_commerzForest.py new file mode 100755 index 0000000..04e30f5 --- /dev/null +++ b/scripts/field/map_commerzForest.py @@ -0,0 +1,20 @@ +# id 865030100 (Commerci Republic : Sospetto Forest Trail), field 865030100 +sm.playSound("Sound/FarmSE.img/boxResult", 100) +#sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs26# Burning Stage 6: 60% Bonus EXP! ", 50, 1500, 4, 0, -200, 1, 4, 2, 0, 0) +sm.closeUI(1128) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) diff --git a/scripts/field/meetWithDragon.py b/scripts/field/meetWithDragon.py new file mode 100755 index 0000000..52272c7 --- /dev/null +++ b/scripts/field/meetWithDragon.py @@ -0,0 +1,2 @@ +sm.lockInGameUI(True, False) +sm.reservedEffect("Effect/Direction4.img/meetWithDragon/Scene0") \ No newline at end of file diff --git a/scripts/field/meet_arcanaBoss.py b/scripts/field/meet_arcanaBoss.py new file mode 100755 index 0000000..efc163c --- /dev/null +++ b/scripts/field/meet_arcanaBoss.py @@ -0,0 +1,17 @@ +# id 940200270 (Arcana : Grove of the Spirit Tree), field 940200270 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(3003369, 292, 123) +sm.showNpcSpecialActionByTemplateId(3003369, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003369, "stand2", -1) +sm.resetNpcSpecialActionByTemplateId(3003369) +sm.showNpcSpecialActionByTemplateId(3003369, "appear", 0) +sm.sendDelay(4500) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("This aura... it's so much darker than the other tainted spirits...") +sm.sendDelay(900) +sm.sendNext("I won't allow you to corrupt this forest!") +sm.lockInGameUI(False, True) +sm.warp(940200280) diff --git a/scripts/field/merOutStandAlone.py b/scripts/field/merOutStandAlone.py new file mode 100755 index 0000000..4e50410 --- /dev/null +++ b/scripts/field/merOutStandAlone.py @@ -0,0 +1,24 @@ +# Frozen Fairy Forest : Blooming Forest (910150003) | Script used to spawn in 10 slimes in the map + +SLIME = 9300422 + +coordinates = [ +[-2058, 1], +[-2348, 1], +[-2812, 1], +[-2810, 1], +[-3040, 1], + +[-2589, -330], +[-2313, -330], +[-2450, -330], + +[-2121, -612], +[-1948, -612], +] + +sm.giveSkill(20021166, 1) # Give attacking skill +if sm.hasQuest(24001): # Danika's Request (Mercedes Intro Quest) + for coordinate in coordinates: + sm.spawnMob(SLIME, coordinate[0], coordinate[1], False, 5) # Spawn 10 slimes across the field +sm.dispose() diff --git a/scripts/field/merOutStandAlone.py_old b/scripts/field/merOutStandAlone.py_old new file mode 100755 index 0000000..4e50410 --- /dev/null +++ b/scripts/field/merOutStandAlone.py_old @@ -0,0 +1,24 @@ +# Frozen Fairy Forest : Blooming Forest (910150003) | Script used to spawn in 10 slimes in the map + +SLIME = 9300422 + +coordinates = [ +[-2058, 1], +[-2348, 1], +[-2812, 1], +[-2810, 1], +[-3040, 1], + +[-2589, -330], +[-2313, -330], +[-2450, -330], + +[-2121, -612], +[-1948, -612], +] + +sm.giveSkill(20021166, 1) # Give attacking skill +if sm.hasQuest(24001): # Danika's Request (Mercedes Intro Quest) + for coordinate in coordinates: + sm.spawnMob(SLIME, coordinate[0], coordinate[1], False, 5) # Spawn 10 slimes across the field +sm.dispose() diff --git a/scripts/field/merStandAlone.py b/scripts/field/merStandAlone.py new file mode 100755 index 0000000..98875d2 --- /dev/null +++ b/scripts/field/merStandAlone.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [910150002] +# Frozen Fairy Forest : Path of the Glowcaves + +# Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 diff --git a/scripts/field/merTutorDrecotion00.py b/scripts/field/merTutorDrecotion00.py new file mode 100755 index 0000000..7e53d5e --- /dev/null +++ b/scripts/field/merTutorDrecotion00.py @@ -0,0 +1,11 @@ +# Black Road | After the Battle +# Field ID: 910150000 + +sm.heal(True) # has less than full hp/mp at start for some reason + +if sm.sendAskYesNo("Would you like to skip the introduction?"): + sm.startQuestNoCheck(24005) + sm.warp(101050010) + sm.dispose() +sm.giveSkill(20021181, 1) +sm.playVideoByScript("Mercedes.avi") diff --git a/scripts/field/merTutorDrecotion01.py b/scripts/field/merTutorDrecotion01.py new file mode 100755 index 0000000..42f8209 --- /dev/null +++ b/scripts/field/merTutorDrecotion01.py @@ -0,0 +1,11 @@ +# Created by MechAviv +# ID :: [910150000] +# Black Road : After the Battle +# Black Road : After the Battle + +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/1", 2000, 0, -100, 0, -2, False, 0) +sm.sendDelay(2000) + + +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/merTutorDrecotion02.py b/scripts/field/merTutorDrecotion02.py new file mode 100755 index 0000000..b386fd1 --- /dev/null +++ b/scripts/field/merTutorDrecotion02.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# ID :: [910150000] +# Black Road : After the Battle + +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/2", 2000, 0, -100, 0, -2, False, 0) +sm.sendDelay(2000) + + +sm.forcedInput(2) +sm.curNodeEventEnd(True) diff --git a/scripts/field/merTutorDrecotion03.py b/scripts/field/merTutorDrecotion03.py new file mode 100755 index 0000000..abd11b1 --- /dev/null +++ b/scripts/field/merTutorDrecotion03.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# ID :: [910150000] +# Black Road : After the Battle + +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/3", 2000, 0, -100, 0, -2, False, 0) +sm.sendDelay(2000) + + +sm.forcedInput(2) +sm.curNodeEventEnd(True) diff --git a/scripts/field/merTutorDrecotion04.py b/scripts/field/merTutorDrecotion04.py new file mode 100755 index 0000000..d48713f --- /dev/null +++ b/scripts/field/merTutorDrecotion04.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# ID :: [910150000] +# Black Road : After the Battle + +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/4", 2000, 0, -100, 0, -2, False, 0) +sm.sendDelay(2000) + + +sm.forcedInput(2) +sm.curNodeEventEnd(True) diff --git a/scripts/field/merTutorDrecotion05.py b/scripts/field/merTutorDrecotion05.py new file mode 100755 index 0000000..1ae5135 --- /dev/null +++ b/scripts/field/merTutorDrecotion05.py @@ -0,0 +1,11 @@ +# Created by MechAviv +# ID :: [910150000] +# Black Road : After the Battle + +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/5", 2000, 0, -100, 0, -2, False, 0) +sm.sendDelay(2000) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.progressMessageFont(3, 20, 20, 0, "Press the left and right keys to move.") \ No newline at end of file diff --git a/scripts/field/merTutorDrecotion10.py b/scripts/field/merTutorDrecotion10.py new file mode 100755 index 0000000..dcf642e --- /dev/null +++ b/scripts/field/merTutorDrecotion10.py @@ -0,0 +1,13 @@ +# Created by MechAviv +# ID :: [910150001] +# Frozen Fairy Forest : Elluel +if not "1" in sm.getQuestEx(24006, "Eurel"): + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, True, False, False) + sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/6", 2000, 0, -100, 0, -2, False, 0) + sm.sendDelay(2000) + + + sm.forcedInput(2) + sm.setQuestEx(24006, "Eurel", "1") diff --git a/scripts/field/merTutorDrecotion12.py b/scripts/field/merTutorDrecotion12.py new file mode 100755 index 0000000..863761c --- /dev/null +++ b/scripts/field/merTutorDrecotion12.py @@ -0,0 +1,11 @@ +# Created by MechAviv +# ID :: [910150001] +# Frozen Fairy Forest : Elluel + +sm.showEffect("Effect/Direction5.img/effect/mercedesInIce/merBalloon/8", 2000, 0, -100, 0, -2, False, 0) +sm.sendDelay(2000) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.progressMessageFont(3, 20, 20, 0, "Press the Alt key to jump.") diff --git a/scripts/field/merTutorDrecotion20.py b/scripts/field/merTutorDrecotion20.py new file mode 100755 index 0000000..385c9ec --- /dev/null +++ b/scripts/field/merTutorDrecotion20.py @@ -0,0 +1,5 @@ +# Frozen Fairy Forest : Royal Chamber (910150004) | Used for the Mercedes In Ice Scene + +sm.lockInGameUI(True) +sm.showScene("Effect.wz/Direction5.img", "mersedesTutorial", "Scene0") # Shows the Mercedes in Ice scene +sm.invokeAfterDelay(14000, "showFadeTransition", 0, 500, 500) diff --git a/scripts/field/merTutorSleep01.py b/scripts/field/merTutorSleep01.py new file mode 100755 index 0000000..252b301 --- /dev/null +++ b/scripts/field/merTutorSleep01.py @@ -0,0 +1,4 @@ +# Map for Mercedes Scene + +sm.showScene("Effect.wz/Direction5.img", "mersedesTutorial", "Scene1") +sm.invokeAfterDelay(3500, "lockInGameUI", False) diff --git a/scripts/field/merTutorSleep02.py b/scripts/field/merTutorSleep02.py new file mode 100755 index 0000000..649bde0 --- /dev/null +++ b/scripts/field/merTutorSleep02.py @@ -0,0 +1,8 @@ +# Fairy Forest : King's Seat + +if sm.hasQuest(24005): # Cursed Slumber + sm.completeQuest(24005) # Cursed Slumber + sm.jobAdvance(2300) # Mercedes + sm.giveItem(1142336) + sm.removeSkill(20021166) # Remove the Beginner Stunning Strike Skill + sm.removeSkill(20021181) # Remove the Beginner Flash Jump Skill diff --git a/scripts/field/merchant_Enter.py b/scripts/field/merchant_Enter.py new file mode 100755 index 0000000..ec350b4 --- /dev/null +++ b/scripts/field/merchant_Enter.py @@ -0,0 +1,4 @@ +# [Grand Athenaeum] Ariant : Escort Hatsar's Servant +WEALTHY_MERCHANT = 8230000 + +sm.spawnMob(WEALTHY_MERCHANT, -1669, 245, False) \ No newline at end of file diff --git a/scripts/field/mihail_direc.py b/scripts/field/mihail_direc.py new file mode 100755 index 0000000..df081d7 --- /dev/null +++ b/scripts/field/mihail_direc.py @@ -0,0 +1,2 @@ +sm.reservedEffect("Effect/Direction7.img/mikhail/1st_Job") +sm.invokeAfterDelay(4000, "warpInstanceOut", 130000000, 0)# hacky \ No newline at end of file diff --git a/scripts/field/mirrorCave.py b/scripts/field/mirrorCave.py new file mode 100755 index 0000000..0005828 --- /dev/null +++ b/scripts/field/mirrorCave.py @@ -0,0 +1,2 @@ +if chr.getInstance() is not None: + sm.warpInstanceOut(140030000) \ No newline at end of file diff --git a/scripts/field/momiji_Enter.py b/scripts/field/momiji_Enter.py new file mode 100755 index 0000000..1ed57fb --- /dev/null +++ b/scripts/field/momiji_Enter.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# Map ID :: 807000000 +# Momijigaoka : Momijigaoka + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/field/moonrabbit_takeawayitem.py b/scripts/field/moonrabbit_takeawayitem.py new file mode 100755 index 0000000..0b5793b --- /dev/null +++ b/scripts/field/moonrabbit_takeawayitem.py @@ -0,0 +1,23 @@ +import time +from time import sleep + +xPos = -190 +yPos = -190 +moonBunnyId = 9300061 +riceCakeId = 4001101 +timeForDrop = 10 + + +sleep(3) +currentTime = int(time.time()*1000.0) +sm.setFieldProperty("lastHit", currentTime) +sm.spawnMob(moonBunnyId, -190, -190, False) +while sm.hasMobById(moonBunnyId): + currentTime = int(time.time()*1000.0) + lastHitTime = sm.getFieldProperty("lastHit") + timeSinceHit = (currentTime - lastHitTime) / 1000 + if(timeSinceHit > timeForDrop): + sm.dropItem(riceCakeId, xPos, yPos) + sm.setFieldProperty("lastHit", currentTime) + sleep(1) +sm.killMobs() diff --git a/scripts/field/murder.py b/scripts/field/murder.py new file mode 100755 index 0000000..0d52cc3 --- /dev/null +++ b/scripts/field/murder.py @@ -0,0 +1,26 @@ +# id 865020071 (Commerci Republic : Canal 1), field 865020071 +sm.lockInGameUI(True, True) +sm.forcedInput(2) +sm.sendDelay(5000) +sm.forcedInput(0) +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("Hey, is that...?!") +sm.showFieldEffect("Map/EffectBT.img/dawnveil1/Cut4_1", 0) +sm.sendDelay(2000) +sm.showFieldEffect("Map/EffectBT.img/dawnveil1/Cut4_2", 0) +sm.sendDelay(4000) +sm.sendNext("What's going on here?!") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390227) # Guild Assassin +sm.sendSay("A witness! Get rid of em.") +sm.lockInGameUI(False, True) +sm.startQuest(17654) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(17654) +sm.startQuest(17654) +sm.startQuest(17654) +sm.startQuest(17654) +sm.startQuest(17654) +sm.startQuest(17654) +sm.startQuest(17654) diff --git a/scripts/field/mushroom_bomb.py b/scripts/field/mushroom_bomb.py new file mode 100755 index 0000000..2792712 --- /dev/null +++ b/scripts/field/mushroom_bomb.py @@ -0,0 +1,21 @@ +# id 106031300 (Mushroom Castle : Violetta's Garden 1), field 106031300 +sm.lockInGameUI(True, True) +sm.spawnNpc(1302101, -300, 197) +sm.showNpcSpecialActionByTemplateId(1302101, "summon", 0) +sm.moveNpcByTemplateId(1302101, False, 150, 100) +sm.forcedInput(2) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Princess Violetta!", 2000, 0, 0, 0, 0, 4, 0, 4878499) +sm.forcedInput(0) +sm.moveNpcByTemplateId(1302101, True, 5, 100) +sm.sendDelay(2000) +sm.speechBalloon(True, 1, 0, "Please, just leave me alone!", 2000, 0, 0, 0, 0, 4, 1302101, 4878499) +sm.showNpcSpecialActionByTemplateId(1302101, "letitgo", 0) +sm.sendDelay(3000) +sm.showNpcSpecialActionByTemplateId(1302101, "mushroom", 0) +sm.sendDelay(2100) +sm.moveNpcByTemplateId(1302101, False, 300, 100) +sm.sendDelay(2000) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(106031310) diff --git a/scripts/field/nobu_aya.py b/scripts/field/nobu_aya.py new file mode 100755 index 0000000..7835475 --- /dev/null +++ b/scripts/field/nobu_aya.py @@ -0,0 +1,51 @@ +# id 811000010 (Momiji Hills : Master Room), field 811000010 +sm.lockInGameUI(True, True) +sm.hideUser(True) +sm.spawnNpc(9130105, 139, 161) +sm.showNpcSpecialActionByTemplateId(9130105, "summon", 0) +sm.spawnNpc(9130106, 483, 170) +sm.showNpcSpecialActionByTemplateId(9130106, "summon", 0) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sayMonologue("Fine. As you probably heard, I was given the mission to go spy on Princess No. ", 0) +sm.sayMonologue("Before going undercover, Nobukane gave me the family's holy artifact. ", 1) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130105) # Nobukane +sm.sendNext("I'm sorry... ") +sm.setInnerOverrideSpeakerTemplateID(9130106) # Ayame +sm.sendSay("It's all right. My life here was pretty great, but now I have a job to do. Thanks for the memories. ") +sm.setInnerOverrideSpeakerTemplateID(9130105) # Nobukane +sm.sendSay("Why do you speak as if we won't see each other again? Here, take this. It will guide you back to us. Take it. ") +sm.setInnerOverrideSpeakerTemplateID(9130106) # Ayame +sm.sendSay("Is this...?") +sm.setInnerOverrideSpeakerTemplateID(9130105) # Nobukane +sm.sendSay("This mirror has been passed down through generations of our family. Legends say that it will show you the way to overcome any hardship. I'm fairly certain it will help you. ") +sm.sendSay("You are family. We are family. ") +sm.sendSay("Princess No should know about this mirror as well. Tell her that you were here to steal it from us. ") +sm.setInnerOverrideSpeakerTemplateID(9130106) # Ayame +sm.sendSay("...Thank you. Thank you so much, Mr. Nobukane! ") +sm.setInnerOverrideSpeakerTemplateID(9130105) # Nobukane +sm.sendSay("Just come back. Come back safe. We will all be waiting for you. ") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sayMonologue("I took the mirror and went...", 0) +sm.sayMonologue("...to Princess No, my previous master.", 0) +sm.sayMonologue("As expected, she tried to get rid of me at first, but changed her tune when she saw the mirror.", 0) +sm.sayMonologue("She took me in but she still didn't fully trust me. She kept sending me further and further away on all these 'missions'.", 0) +sm.sayMonologue("And while I was gone... the Nobukane family was exterminated by Oda Nobunaga, and I heard that he kidnapped her.", 0) +sm.sayMonologue("I wanted to go right away, to see for myself, but... But there was nothing I could do. ", 1) +sm.sayMonologue("And then came that day...", 1) +sm.hideUser(False) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(811000011) diff --git a/scripts/field/nobu_saku.py b/scripts/field/nobu_saku.py new file mode 100755 index 0000000..6928288 --- /dev/null +++ b/scripts/field/nobu_saku.py @@ -0,0 +1,176 @@ +# Cut sence for Sengoku Questline (Investigating Hieizan) | Master Room (811000009) +# Author: Tiger + +from net.swordie.ms.world.field.fieldeffect import GreyFieldType + +SAKUNO = 9130124 +NOBUKANE = 9000430 +AYAME = 9130100 + +if sm.hasQuest(58909): # Tears of Princess Sakuno quest in-progress + sm.spawnNpc(NOBUKANE, 143, 187) + sm.spawnNpc(SAKUNO, 488, 187) + + sm.hideNpcByTemplateId(NOBUKANE, True, True) # hides Nobukane before showing it spawn (Prevents NPC Gliding) + + sm.lockInGameUI(True) + sm.hideUser(True) + sm.removeEscapeButton() + + sm.sendDelay(200) + sm.hideNpcByTemplateId(NOBUKANE, False, False) # shows Nobukane properly + + sm.sendDelay(500) + + # TODO: You can't dim the lights and grey the screen out at the same time.. + # sm.setFieldColour(GreyFieldType.Field, 100, 100, 100, 1200) + + sm.setFieldGrey(GreyFieldType.Field, True) + sm.sendDelay(1750) + + sm.setSpeakerID(SAKUNO) + + sm.flipDialogue() + sm.sendNext("Father, please reconsider! Sending Ayame to spy on Princess No\r\nagain is far too dangerous.") + + sm.flipDialogue() + sm.sendSay("I'm sure she's up to something, but I fear for Ayame's safety.") + + sm.setSpeakerID(NOBUKANE) + + sm.flipDialogue() + sm.sendSay("Shingen and all the other heads are unanimous. Ayame must take on the role of spy for the good of the country.") + + sm.flipDialogue() + sm.sendSay("I happen to agree with them, and I also concur that this is none of your business. Now, it's getting late, so go to bed.") + + sm.sendDelay(800) + sm.hideNpcByTemplateId(NOBUKANE, True, True) + + sm.sendDelay(1000) + sm.spawnNpc(AYAME, 587, 187) + sm.setFieldGrey(GreyFieldType.NPC, True) + + sm.sendDelay(1000) + + # TODO: figure out why ayame doesn't move... + # sm.moveNpcByTemplateId(AYAME, True, 5, 10) + + sm.setSpeakerID(AYAME) + + sm.flipDialogue() + sm.sendNext("Is he gone?") + + sm.setSpeakerID(SAKUNO) + + sm.flipDialogue() + sm.sendSay("...I am sorry, I have failed.") + + sm.setSpeakerID(AYAME) + + sm.flipDialogue() + sm.sendSay("No, it's okay. I DO have the closest ties to Princess No out of anyone here. It makes sense.") + + sm.flipDialogue() + sm.sendSay("And I know those stupid old generals are suspicious of me too,\r\nso the sooner I get away from those geezers, the better.") + + sm.flipDialogue() + sm.sendSay("Don't worry too much, Sakuno. I'll be fine. I'm ALWAYS fine.") + + sm.completeQuest(58909) # Tears of Princess Sakuno + + sm.setFieldGrey(GreyFieldType.Field, False) + sm.setFieldGrey(GreyFieldType.NPC, False) + + sm.sendDelay(500) + sm.hideUser(False) + + sm.sendDelay(500) + sm.removeNpc(NOBUKANE) + sm.removeNpc(SAKUNO) + sm.removeNpc(AYAME) + + sm.warp(811000008) + sm.lockInGameUI(False) + sm.dispose() # just in-case + +elif sm.hasQuestCompleted(58909): # has completed Tears of Princess Sakuno's quest + + sm.spawnNpc(NOBUKANE, 143, 187) + sm.spawnNpc(AYAME, 488, 187) + + sm.lockInGameUI(True) + sm.hideUser(True) + sm.removeEscapeButton() + + sm.sendDelay(1500) + sm.setFieldColour(GreyFieldType.Background, 45, 45, 45, 2000) # use background for now, field doesn't dim the npc name tags for some reason + + sm.sendDelay(2000) + sm.sayMonologue("Fine. As you probably heard, I was given the mission to go spy on Princess No.", False) + sm.sayMonologue("Before going undercover, Nobukane gave me the family's holy artifact", True) + + sm.setFieldColour(GreyFieldType.Background, 255, 255, 255, 1500) + + sm.setSpeakerID(NOBUKANE) + + sm.sendDelay(500) + sm.flipDialogue() + sm.sendNext("I'm sorry...") + + sm.setSpeakerID(AYAME) + + sm.flipDialogue() + sm.sendSay("It's all right. My life here was pretty great, but now I have a job to do. Thanks for the memories.") + + sm.setSpeakerID(NOBUKANE) + + sm.flipDialogue() + sm.sendSay("Why do you speak as if we won't see each other again? Here, take this. It will guide you back to us. Take it.") + + sm.setSpeakerID(AYAME) + + sm.flipDialogue() + sm.sendSay("Is this...?") + + sm.setSpeakerID(NOBUKANE) + + sm.flipDialogue() + sm.sendSay("This mirror has been passed through generations of our family. Legends say that it will show you the way to overcome any hardship. I'm fairly certain it will help you.") + + sm.flipDialogue() + sm.sendSay("You are family. We are family.") + + sm.flipDialogue() + sm.sendSay("Princess No should know about this mirror as well. Tell her that you were here to steal it from us.") + + sm.setSpeakerID(AYAME) + + sm.flipDialogue() + sm.sendSay("Thank you. Thank you so much, Mr. Nobukane!") + + sm.setSpeakerID(NOBUKANE) + + sm.flipDialogue() + sm.sendSay("Just come back. Come back safe. We will all be waiting for you.") + + sm.setFieldColour(GreyFieldType.Background, 30, 30, 30, 2000) + sm.sendDelay(2000) + + sm.sayMonologue("I took the mirror and went...", False) + sm.sayMonologue("...to Princess No, my previous master.", False) + sm.sayMonologue("As expected, she tried to get rid of me first, but changed her tune when she saw ther mirror.", False) + sm.sayMonologue("She took me in but she still didn't fully trust me. She kept sending me further and further away on all these 'missions'.", False) + sm.sayMonologue("And while I was gone... the Nobukane family was exterminated by Oda Nobunage, and I heard that he kidnapped her.", False) + sm.sayMonologue("I wanted to go right away, to see for myself, but... But there was nothing I could do.", True) + sm.sayMonologue("And then came that day...", True) + + sm.sendDelay(200) + sm.setFieldColour(GreyFieldType.Background, 255, 255, 255, 2000) + + # TODO: most likely complete "Where did Ayame Go" quest here (58910) + + sm.removeNpc(NOBUKANE) + sm.removeNpc(AYAME) + sm.lockInGameUI(False) + sm.warp(811000011) # Honnou-ji : Precinct of Honnou-ji diff --git a/scripts/field/normal_zakum_enter.py b/scripts/field/normal_zakum_enter.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/nou_aya.py b/scripts/field/nou_aya.py new file mode 100755 index 0000000..79d738c --- /dev/null +++ b/scripts/field/nou_aya.py @@ -0,0 +1,54 @@ +# Cutsence for Sengoku Era Questline | Honnou-ji : Precinct of Honnou-ji (811000011) +# Author: Tiger + +PRINCESS_NO = 9000435 +AYAME = 9130100 + +sm.lockInGameUI(True) +sm.hideUser(True) +sm.removeEscapeButton() + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.setSpeakerID(PRINCESS_NO) + +sm.flipDialogue() +sm.sendNext("Your next mission is in Echigo. You'll find the details in this letter.") + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.setSpeakerID(AYAME) + +sm.flipDialogue() +sm.sendSay("...How many of these errands are you going to send me on? They're so... petty.") + +sm.setSpeakerID(PRINCESS_NO) + +sm.flipDialogue() +sm.sendSay("......") + +sm.flipDialogue() +sm.sendSay("Patience, child. Prove yourself one last time.") + +sm.flipDialogue() +sm.sendSay("And I will trust you completely.") + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.blind(1, 200, 0, 1000) +sm.sendDelay(1000) + +sm.sayMonologue("She had the weirdest look on her face that day. One I've never seen before", False) +sm.sayMonologue("Then the Oda soldiers began moving in secret, and I knew something was up.", False) +sm.sayMonologue("That's why I went to Honnou-ji, to see what the Oda were up to.", False) +sm.sayMonologue("Oda Nobunaga was trying to sacrifice Princess Sakuno in Honnou-ji to summon the Demon King. I fought the Oda, but... it didn't get me very far.", True) + +sm.blind(0, 0, 0, 1000) + +sm.warp(811000012) # Honnou-ji : Precinct of Honnou-ji diff --git a/scripts/field/nou_haya.py b/scripts/field/nou_haya.py new file mode 100755 index 0000000..2a455b0 --- /dev/null +++ b/scripts/field/nou_haya.py @@ -0,0 +1,21 @@ +# Cutsence for Sengoku Era Questline | Honnou-ji : Precinct of Honnou-ji (811000012) +# Author: Tiger + +PRINCESS_NO = 9000435 +AYAME = 9130100 + +sm.lockInGameUI(True) +sm.hideUser(True) +sm.removeEscapeButton() + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.setSpeakerID(AYAME) + +sm.flipDialogue() +sm.sendNext("Where could she be? Ugh, did I really get messed up that bad?") + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) +sm.lockInGameUI(False) diff --git a/scripts/field/np_tuto_0_5.py b/scripts/field/np_tuto_0_5.py new file mode 100755 index 0000000..0163eb2 --- /dev/null +++ b/scripts/field/np_tuto_0_5.py @@ -0,0 +1,35 @@ +# Jett - Tutorial Skipper +def skip_tutorial(): + MAPLE_ADMINISTRATOR = 2007 + + quests_to_complete = [ + 23000, # Spill It, Headmaster! + 23001, # Request from a Kindergarten Teacher + 23002, # Request from a Police Officer + 23003, # Request from a Doctor + 23004, # Request from a Streetsweeper + 23005, # Request from a Mascot + 23010, # Mysterious Invitation + ] + + map_to_warp = 120000000 # Secret Plaza + target_level = 10 + + sm.setSpeakerID(MAPLE_ADMINISTRATOR) + sm.removeEscapeButton() + sm.lockInGameUI(True) + + if sm.sendAskYesNo("Would you like to skip the tutorial questline and instantly arrive at #m" + str(map_to_warp) + "#?"): + if sm.getChr().getLevel() < target_level: + sm.addLevel(target_level - sm.getChr().getLevel()) + + for quest in quests_to_complete: + sm.completeQuestNoRewards(quest) + + sm.warp(map_to_warp) + sm.jobAdvance(508) + + sm.lockInGameUI(False) + sm.dispose() + +skip_tutorial() \ No newline at end of file diff --git a/scripts/field/onUserEnter_863010000.py b/scripts/field/onUserEnter_863010000.py new file mode 100755 index 0000000..4754fde --- /dev/null +++ b/scripts/field/onUserEnter_863010000.py @@ -0,0 +1,3 @@ +# id 863010000 (Tynerum : Memories of the Heart Tree), field 863010000 +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(17801) diff --git a/scripts/field/onUserEnter_863010700.py b/scripts/field/onUserEnter_863010700.py new file mode 100755 index 0000000..b38f1ca --- /dev/null +++ b/scripts/field/onUserEnter_863010700.py @@ -0,0 +1 @@ +sm.spawnReactorInState(8630000,95,67,1) \ No newline at end of file diff --git a/scripts/field/pierre_Summon.py b/scripts/field/pierre_Summon.py new file mode 100755 index 0000000..8c8f704 --- /dev/null +++ b/scripts/field/pierre_Summon.py @@ -0,0 +1,10 @@ +from net.swordie.ms.enums import WeatherEffNoticeType +PIERRE = 8900100 +if chr.getInstance() is not None: + sm.spawnMob(PIERRE, 1155, 551, False) + sm.showFieldEffect("Map/Effect.img/rootabyss/firework") # "Welcome" effect + sm.showWeatherNotice("From the bottom of my heart, welcome to the tea party!", WeatherEffNoticeType.BossPierre, 10000) + + sm.waitForMobDeath(PIERRE) + if sm.hasQuest(30010): + sm.completeQuest(30010) #[Root Abyss] Defeat the Second Guardian \ No newline at end of file diff --git a/scripts/field/pierre_Summon1.py b/scripts/field/pierre_Summon1.py new file mode 100755 index 0000000..2b6c23c --- /dev/null +++ b/scripts/field/pierre_Summon1.py @@ -0,0 +1,10 @@ +from net.swordie.ms.enums import WeatherEffNoticeType +PIERRE = 8900000 +if chr.getInstance() is not None: + sm.spawnMob(PIERRE, 1155, 551, False) + sm.showFieldEffect("Map/Effect.img/rootabyss/firework") # "Welcome" effect + sm.showWeatherNotice("From the bottom of my heart, welcome to the tea party!", WeatherEffNoticeType.BossPierre, 10000) + + sm.waitForMobDeath(PIERRE) + if sm.hasQuest(30010): + sm.completeQuest(30010) #[Root Abyss] Defeat the Second Guardian \ No newline at end of file diff --git a/scripts/field/prisonBreak_1stageEnter.py b/scripts/field/prisonBreak_1stageEnter.py new file mode 100755 index 0000000..1ca5d48 --- /dev/null +++ b/scripts/field/prisonBreak_1stageEnter.py @@ -0,0 +1,6 @@ +# Hidden Tower (921160100) | Part of the Escape Party Quest + +from net.swordie.ms.enums import WeatherEffNoticeType + +sm.showWeatherNoticeToField("Sshh! You must escape the tower by quietly avoiding the obstacles.", WeatherEffNoticeType.EscapePQ) +sm.dispose() diff --git a/scripts/field/prisonBreak_mapEnter.py b/scripts/field/prisonBreak_mapEnter.py new file mode 100755 index 0000000..ea4c916 --- /dev/null +++ b/scripts/field/prisonBreak_mapEnter.py @@ -0,0 +1,23 @@ +# Used In All except the first map of the Escape Party Quest + +from net.swordie.ms.enums import WeatherEffNoticeType + +PRISON_GUARD_ANI = 9300454 + +stage = sm.getFieldID() % 1000 / 100 + +# Stage 1 is already done on prisonBreak_1stageEnter +if stage == 2: + sm.showWeatherNoticeToField("You must defeat all the guards. Otherwise, they will call other guard, and that is bad.", WeatherEffNoticeType.EscapePQ) +elif stage == 3: + sm.showWeatherNoticeToField("They created a maze to keep people from entering or escaping. You must find the door that leads to the Aerial Prison!", WeatherEffNoticeType.EscapePQ) +elif stage == 4: + sm.showWeatherNoticeToField("Defeat all the guards that are defending the door!", WeatherEffNoticeType.EscapePQ) +elif stage == 5: + sm.showWeatherNoticeToField("This is the last obstacle. Please press on to the Aerial Prison.", WeatherEffNoticeType.EscapePQ) +elif stage == 6: + sm.showWeatherNoticeToField("Open the prison door by defeating the guard and recovering the prison key.", WeatherEffNoticeType.EscapePQ) +elif stage == 7: + sm.showWeatherNoticeToField("Please free us by defeating the Prison Guard!", WeatherEffNoticeType.EscapePQ) + sm.spawnMob(PRISON_GUARD_ANI, -1281, -181, False) #Spawns the EscapePQ boss +sm.dispose() diff --git a/scripts/field/pyramidEnter.py b/scripts/field/pyramidEnter.py new file mode 100755 index 0000000..555f64e --- /dev/null +++ b/scripts/field/pyramidEnter.py @@ -0,0 +1,22 @@ +from time import sleep + +respawnsPerRound = 20 +Rounds = 20 + +sm.setPyramidPQLives(20) + +for x in range(1, Rounds + 1): + sm.setPyramidPQWave(x) + sm.startPyramidPQWave(x, respawnsPerRound) + while sm.hasMobsInField(): + sm.waitForMobDeath() + sleep(3) + if sm.getPyramidPQLives() <= 0: + sm.stopEvents() + sm.warpInstanceOut(910002000) + sm.dispose() + sleep(2) +sm.giveNX(200000) +sm.giveItem(4310212, 2) +sleep(1) +sm.warpInstanceOut(910002000) \ No newline at end of file diff --git a/scripts/field/q1601_summon.py b/scripts/field/q1601_summon.py new file mode 100755 index 0000000..1cdc330 --- /dev/null +++ b/scripts/field/q1601_summon.py @@ -0,0 +1,3 @@ +time = 7 *60 + +sm.setInstanceTime(time, 103020000, 2) \ No newline at end of file diff --git a/scripts/field/q25569_direction.py b/scripts/field/q25569_direction.py new file mode 100755 index 0000000..1931f44 --- /dev/null +++ b/scripts/field/q25569_direction.py @@ -0,0 +1,81 @@ +# Created by MechAviv +# ID :: [910142041] +# Ellinia : Magic Library + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +OBJECT_1 = sm.sendNpcController(1032208, -106, 182) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.forcedInput(1) +sm.sendDelay(30) + + +sm.forcedInput(0) +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("You got what you were looking for. Now please go!") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("This is rich. You give me an incomplete scroll, then order me to leave?") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Do you even know who I am, child?!") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("N-no! I don't want any trouble! I just have to clean the library before--") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Enough. BEGONE!") + + +sm.faceOff(21066) +sm.showEffect("Effect/Direction8.img/effect/tuto/floodEffect/1", 2100, 0, 0, -5, -2, False, 0) +sm.showEffect("Effect/Direction8.img/effect/tuto/floodEffect/2", 2100, 0, 0, -6, -2, False, 0) +sm.sendDelay(300) + + +sm.showEffect("Effect/Direction8.img/effect/story/roroEffect", 0, 0, 0, 0, OBJECT_1, False, 0) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "hit", 0) +sm.sendDelay(660) + + +sm.sendNpcController(OBJECT_1, False) +sm.sendDelay(1140) + + +sm.faceOff(0) +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Peace and quiet, at long last.") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Ah... W-what did I... just do? ") + +sm.startQuest(25569) +sm.completeQuest(25569) +sm.giveExp(758) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/field/q57141d.py b/scripts/field/q57141d.py new file mode 100755 index 0000000..13600a5 --- /dev/null +++ b/scripts/field/q57141d.py @@ -0,0 +1,74 @@ +# Field: Honnou-ji : Honnou-ji Eastern Wall Exterior (807050201) +# Quest: Honnou-ji Infiltration 2 (57437) +# Author: Tiger + +if sm.hasQuest(57437): # Honnou-ji Infiltration 2 + if sm.getFieldID() == 807050201: # Honnou-ji Eastern Wall Exterior + sm.lockInGameUI(True, True) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/21", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/22", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.lockInGameUI(False, False) + + elif sm.getFieldID() == 807050202: # Honnou-ji : Honnou-ji Temple + sm.lockInGameUI(True, True) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/23", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/24", 0, 450, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/25", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/26", 0, 450, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/27", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/28", 0, 450, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/29", 0, 450, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.lockInGameUI(False, False) + sm.warpInstanceIn(807050203, 0) # Honnou-ji : Honnou-ji Eastern Grounds + + elif sm.getFieldID() == 807050203: # Honnou-ji : Honnou-ji Eastern Grounds + sm.lockInGameUI(True, True) + + ODA_GUARDSMAN = 9130070 # Npc + MOB_ODA_GUARDSMAN = 9421567 # Mob + + sm.spawnNpc(ODA_GUARDSMAN, 40, 24) + sm.showNpcSpecialActionByObjectId(ODA_GUARDSMAN, "summon", 0) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/30", 0, 220, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/31", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/32", 0, 220, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.removeNpc(ODA_GUARDSMAN) + sm.spawnMob(MOB_ODA_GUARDSMAN, 40, 24, False) + sm.lockInGameUI(False, False) + + sm.waitForMobDeath(MOB_ODA_GUARDSMAN) + sm.warpInstanceOut(807050204, 0) # Honnou-ji : Honnou-ji Eastern Wall + + elif sm.getFieldID() == 807050204: # Honnou-ji : Honnou-ji Eastern Wall + # TODO: wtf after resucing princess sakuno, + # and created a quest value of "1" for quest (57437) + # Noae, should start the end script, but instead his status / quest + # Still thinks that we haven't rescued princess sakuno?? + sm.createQuestWithQRValue(57437, "1") # Honnou-ji Infiltration 2 diff --git a/scripts/field/q57433m.py b/scripts/field/q57433m.py new file mode 100755 index 0000000..cab007c --- /dev/null +++ b/scripts/field/q57433m.py @@ -0,0 +1,80 @@ +# Field: Hidden Street : Secret Place (807051100) +# Used for Kannas quest Fact of Fiction (57433) +# Author: Tiger + +# TODO: Find out what happens if player crashes. +# Do we respawn every mob? Or do we check the quest progress +# To see how many mobs they've already killed and then spawn the remaining. +# Also, should we be able to leave the portal if mobs are present in the field? + +# Npcs +ODA_SPIRIT_WALKER = 9130068 +BLACK_WINGS_NINJA = 9130069 + +# Mobs +MOB_BLACK_WINGS_NINJA = 9421566 +MOB_ODA_ONMYOUJI = 9421565 + +if sm.hasQuest(57433) and not sm.hasQuestCompleted(57433): # Fact of Fiction + sm.lockInGameUI(True, True) + + sm.spawnNpc(ODA_SPIRIT_WALKER, -80, 77) + sm.showNpcSpecialActionByObjectId(ODA_SPIRIT_WALKER, "summon", 0) + + sm.spawnNpc(ODA_SPIRIT_WALKER, 10, 77) + sm.showNpcSpecialActionByObjectId(ODA_SPIRIT_WALKER, "summon", 0) + + sm.spawnNpc(ODA_SPIRIT_WALKER, 100, 77) + sm.showNpcSpecialActionByObjectId(ODA_SPIRIT_WALKER, "summon", 0) + + sm.spawnNpc(ODA_SPIRIT_WALKER, 190, 77) + sm.showNpcSpecialActionByObjectId(ODA_SPIRIT_WALKER, "summon", 0) + + sm.spawnNpc(ODA_SPIRIT_WALKER, 280, 77) + sm.showNpcSpecialActionByObjectId(ODA_SPIRIT_WALKER, "summon", 0) + + sm.spawnNpc(BLACK_WINGS_NINJA, 370, 77) + sm.showNpcSpecialActionByObjectId(BLACK_WINGS_NINJA, "summon", 0) + + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/13", 0, 300, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/14", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/15", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/16", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/17", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/18", 0, 550, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/19", 0, 300, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + sm.showEffect("Effect/DirectionJP3.img/effect/kannaTuto/balloonMsg/20", 0, 0, -120, -2, -2, False, 0) + sm.sendDelay(2000) + + # Spawn Mobs First + sm.spawnMob(MOB_ODA_ONMYOUJI, -80, 77, False) + sm.spawnMob(MOB_ODA_ONMYOUJI, 10, 77, False) + sm.spawnMob(MOB_ODA_ONMYOUJI, 100, 77, False) + sm.spawnMob(MOB_ODA_ONMYOUJI, 190, 77, False) + sm.spawnMob(MOB_ODA_ONMYOUJI, 280, 77, False) + sm.spawnMob(MOB_BLACK_WINGS_NINJA, 370, 77, False) + + # Then we remove their Npcs + sm.removeNpc(ODA_SPIRIT_WALKER) + sm.removeNpc(ODA_SPIRIT_WALKER) + sm.removeNpc(ODA_SPIRIT_WALKER) + sm.removeNpc(ODA_SPIRIT_WALKER) + sm.removeNpc(ODA_SPIRIT_WALKER) + sm.removeNpc(BLACK_WINGS_NINJA) + + sm.lockInGameUI(False, False) diff --git a/scripts/field/q59000_tuto.py b/scripts/field/q59000_tuto.py new file mode 100755 index 0000000..d27742b --- /dev/null +++ b/scripts/field/q59000_tuto.py @@ -0,0 +1,37 @@ +# Arboren: Stump Town - Beast Tamer Starting Map + +sm.giveSkill(110001506, 1, 1); # Guardian Leap +sm.giveSkill(110001510, 1, 1); # Critter Select +sm.giveSkill(110001514, 1, 1); # Homeward Bound +sm.levelUntil(10) +sm.setJob(11212) +sm.resetAP(chr.getJob()) +sm.warp(100000000) +sm.dispose() + +''' +if not sm.hasQuest(59000): # The Town Prankster + if not sm.hasQuestCompleted(59000): # The Town Prankster + sm.removeEscapeButton() + sm.giveSkill(110001506, 1, 1); # Guardian Leap + sm.giveSkill(110001510, 1, 1); # Critter Select + sm.giveSkill(110001514, 1, 1); # Homeward Bound + if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.levelUntil(10) + sm.resetAP(chr.getJob()) + sm.warp(100000000) + sm.dispose() + else: + sm.setPlayerAsSpeaker() + sm.sendNext("Dun, dun, dun. Hero theme song! I'm #h #, I'm from a town hidden deeep within Arboren Forest!") + sm.sendNext("I've got the coolest ears and tail, dun dun dun. They're super heroic, dun dun dun.") + sm.sendNext("And I'm gonna be a hero somedaaaaay. A hero somedaaaaay! Drumroll!") + sm.sendNext("For reals. Granny Rosanna tells me bedtime stories every night...") + sm.sendNext("Stories about the #bfive brave heroes#k, who sealed away the terrifying #bBlack Mage#k! \r\n Pew, pew, kaboom! I'm gonna be a hero just like 'em someday soon!") + sm.setSpeakerID(9390305) + #todo effects + sm.sendNext("Who'd dig a hole here!?") + sm.setPlayerAsSpeaker() + sm.sendNext("Uh oh, what's this? I smell... the need for a Hero!") + sm.dispose() +''' \ No newline at end of file diff --git a/scripts/field/queen_summon0.py b/scripts/field/queen_summon0.py new file mode 100755 index 0000000..56c3a12 --- /dev/null +++ b/scripts/field/queen_summon0.py @@ -0,0 +1,10 @@ +# Root Abyss | Queen's Castle (Boss Map) +from net.swordie.ms.enums import WeatherEffNoticeType + +queenNormalChestId = 8920106 + +sm.showWeatherNotice("Attempt to wake the Crimson Queen.", WeatherEffNoticeType.SnowySnowAndSprinkledFlowerAndSoapBubbles, 10000) +sm.waitForMobDeath(8920100) +sm.spawnMob(queenNormalChestId, 37, 135, False) +if sm.hasQuest(30011): + sm.completeQuest(30011) # [Root Abyss] Defeat the Third Seal Guardian diff --git a/scripts/field/queen_summon1.py b/scripts/field/queen_summon1.py new file mode 100755 index 0000000..9662705 --- /dev/null +++ b/scripts/field/queen_summon1.py @@ -0,0 +1,8 @@ +# Root Abyss | Chaos Queen's Castle (Boss Map) +from net.swordie.ms.enums import WeatherEffNoticeType + +sm.showWeatherNotice("Attempt to wake the Crimson Queen.", WeatherEffNoticeType.SnowySnowAndSprinkledFlowerAndSoapBubbles, 10000) +sm.waitForMobDeath(8920000) +if sm.hasQuest(30011): + sm.completeQuest(30011) # [Root Abyss] Defeat the Third Seal Guardian + diff --git a/scripts/field/resetEvolvingSystem.py b/scripts/field/resetEvolvingSystem.py new file mode 100755 index 0000000..571f9a2 --- /dev/null +++ b/scripts/field/resetEvolvingSystem.py @@ -0,0 +1,10 @@ +# Hidden street : Evolution Lab +#if not sm.hasQuestCompleted(1802): + #TODO ugly workaround +# sm.deleteQuest(1802) +# sm.createQuestWithQRValue(1802, "done") +#if sm.hasQuest(1846): +# sm.warpInstanceIn(957020002) +if not sm.hasQuest(1845) or not sm.hasQuest(1847): + sm.startQuest(1845) + sm.startQuest(1847) \ No newline at end of file diff --git a/scripts/field/return_key.py b/scripts/field/return_key.py new file mode 100755 index 0000000..a5304aa --- /dev/null +++ b/scripts/field/return_key.py @@ -0,0 +1,11 @@ +# Sengoku Era Questline | Master Room (811000008) +# Author: Tiger + +SUKUNO = 9130124 +AYAME = 9130100 + +if sm.hasQuest(58908) or sm.hasQuestCompleted(58908): + sm.lockInGameUI(False) + sm.hideNpcByTemplateId(9130104, False, False) # respawns princess sakuno's npc +else: + sm.hideNpcByTemplateId(9130104, True, True) # removes princess sakuno upon entering map diff --git a/scripts/field/reundodraco.py b/scripts/field/reundodraco.py new file mode 100755 index 0000000..c02ff70 --- /dev/null +++ b/scripts/field/reundodraco.py @@ -0,0 +1,6 @@ +# Used to remove the Red Draco Morph Buff In Time Lane : Temple of Time +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +if sm.getnOptionByCTS(CharacterTemporaryStat.Morph) == 16: + sm.removeCTS(CharacterTemporaryStat.Morph) +sm.dispose() diff --git a/scripts/field/rien.py b/scripts/field/rien.py new file mode 100755 index 0000000..8313b23 --- /dev/null +++ b/scripts/field/rien.py @@ -0,0 +1,4 @@ +# 140000000 +if not "ck=1" in sm.getQRValue(21019) and sm.hasQuestCompleted(21101): + sm.lockInGameUI(False, False) + sm.addQRValue(21019, "ck=1") \ No newline at end of file diff --git a/scripts/field/rienArrow.py b/scripts/field/rienArrow.py new file mode 100755 index 0000000..9c5718e --- /dev/null +++ b/scripts/field/rienArrow.py @@ -0,0 +1,4 @@ +# 140010000 +if not "arr=o" in sm.getQRValue(21019): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow3") + sm.addQRValue(21019, "arr=o") \ No newline at end of file diff --git a/scripts/field/root_camera.py b/scripts/field/root_camera.py new file mode 100755 index 0000000..1164a4a --- /dev/null +++ b/scripts/field/root_camera.py @@ -0,0 +1,15 @@ +# Swamp : Silent Swamp (105010000) | Used for camera movement for the Root Abyss QuestLine + +AN_URGENT_SUMMONS = 30000 + +if sm.hasQuest(AN_URGENT_SUMMONS): + sm.lockInGameUI(True) + sm.moveCamera(170, 400, -850) + + sm.setPlayerAsSpeaker() + sm.removeEscapeButton() + sm.sendNext("Oh, there's a new area.") + + sm.moveCameraBack(200) + + sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/field/root_ereb01.py b/scripts/field/root_ereb01.py new file mode 100755 index 0000000..ecee3e3 --- /dev/null +++ b/scripts/field/root_ereb01.py @@ -0,0 +1,32 @@ +# Empress Road | Ereve (913080001) | Fake map used for Root Abyss Cutscene + +ALICIA = 1064024 +if sm.hasQuest(30013): + sm.lockInGameUI(True) + sm.showFieldEffect("Map/Effect.img/rootabyss/goEreb") + sm.showFieldEffect("Effect/Direction11.img/effect/meet/frame0/0") + sm.invokeAfterDelay(3000, "showFadeTransition", 2500, 0, 500) + + sm.spawnNpc(ALICIA, 275, 88) # Spawn Alicia + + sm.setSpeakerID(ALICIA) + sm.invokeAfterDelay(5500, "sendNext", "It's so nice and pleasant here!") +else: + sm.dispose() + + + sm.setPlayerAsSpeaker() + sm.sendNext("I hope you regain your powers soon.") + + sm.setSpeakerID(ALICIA) + sm.sendNext("So do I, \r\n" + "I believe Ereve will be a fine place to stay for the time being. " + "Thank you for everything you've done #h0#.") + + sm.setPlayerAsSpeaker() + sm.sendNext("Alright, I'll leave you be.") + + sm.lockInGameUI(False) + sm.completeQuest(30013) # [Root Abyss] World Tree Rescue + sm.warp(130000000, 0) # Ereve + sm.dispose() diff --git a/scripts/field/root_meet.py b/scripts/field/root_meet.py new file mode 100755 index 0000000..633de02 --- /dev/null +++ b/scripts/field/root_meet.py @@ -0,0 +1,21 @@ +# Root Abyss | Colossal Root - Quest Map where there is only the NPC, no portals to bosses. + +AN_URGENT_SUMMONS = 30000 # Quest Id + +if sm.hasQuest(30000): + sm.lockInGameUI(True) + sm.invokeAfterDelay(23500, "lockInGameUI", False) + sm.completeQuest(30000) # Complete Quest [Root Abyss] An Urgent Summons + + + sm.showScene("Effect.wz/Direction11.img", "meet", "Scene0") # Falling + sm.invokeAfterDelay(3000, "showScene", "Effect.wz/Direction11.img", "meet", "Scene1") # "Wake Up!!!" text + sm.invokeAfterDelay(9500, "showScene", "Effect.wz/Direction11.img", "meet", "Scene2") # "Mysterious Girl" + + # Custom Fade Out + sm.invokeAfterDelay(22500, "showFadeTransition", 1500, 0, 1500) + + +elif sm.hasQuest(30003): + sm.completeQuest(30003) +sm.dispose() diff --git a/scripts/field/root_qrcave.py b/scripts/field/root_qrcave.py new file mode 100755 index 0000000..c18d94d --- /dev/null +++ b/scripts/field/root_qrcave.py @@ -0,0 +1,112 @@ +# Root Abyss : Abyssal Cave (910700300) Map for Root Abyss Quest Line + +VELLUM = 1064017 +VELLUM_STONE = 1064028 +if sm.hasQuest(30006): + sm.removeEscapeButton() + #sm.lockInGameUI(True) + + sm.spawnNpc(VELLUM_STONE, 692, 443) + sm.flipNpcByTemplateId(VELLUM_STONE, True) + + sm.spawnNpc(VELLUM, 1000, 443) + sm.flipNpcByTemplateId(VELLUM, True) + sm.hideNpcByTemplateId(VELLUM, True) + + sm.sendDelay(2000) +else: + sm.dispose() + + # sm.lockInGameUI(True) + sm.setPlayerAsSpeaker() + sm.sendNext("What.. is this place?") + + sm.forcedMove(False, 577) + sm.sendDelay(3000) + + sm.moveCamera(200, 667, 443) + + sm.setSpeakerID(VELLUM) + sm.sendNext("Foolish creature! You dare challenge #rhis#k will?!") + + sm.setPlayerAsSpeaker() + sm.sendNext("W-who's there?!") + + sm.showNpcSpecialActionByTemplateId(VELLUM_STONE, "appearance") + sm.sendDelay(5000) + + sm.hideNpcByTemplateId(VELLUM_STONE, True) + sm.sendDelay(3000) + + sm.showEffectOnPosition("Effect/Direction11.img/bellum/appearance", 1500, 1060, 443) + sm.sendDelay(1450) + + sm.hideNpcByTemplateId(VELLUM, False) + sm.sendDelay(3000) + + sm.setSpeakerID(VELLUM) + sm.sendNext("#rHis#k majesty trusted me to be his Seal Guardian and YOU dare sully his plans. " + "I am called #bVellum#k. You will not live to remember it.") + + sm.setPlayerAsSpeaker() + sm.sendNext("Are you the one who put a seal on the World Tree?") + + sm.setSpeakerID(VELLUM) + sm.sendNext("The seal was #rhis majesty's#k idea. I am merely acting on his will.") + + sm.setPlayerAsSpeaker() + sm.sendNext("You keep saying #rhim#k. Are you talking about that demon with the eyepatch?") + + sm.setSpeakerID(VELLUM) + sm.sendNext("Silence! Your filthy mouth shall not even reference #rhis#k might!") + + sm.setPlayerAsSpeaker() + sm.sendNext("I'm not looking for a fight. The Demon Slayer is our ally. Why can't you just join us as well?") + + sm.setSpeakerID(VELLUM) + sm.sendNext("You dare put that filthy traitor on the same level as #rhim#k? I will grant your wish for a slow death!") + sm.sendDelay(900) + + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 250, 443) + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 380, 443) + sm.sendDelay(500) + + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 420, 443) + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 220, 443) + sm.sendDelay(400) + + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 270, 443) + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 370, 443) + sm.sendDelay(600) + + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 450, 443) + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 520, 443) + sm.sendDelay(600) + + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 360, 443) + sm.showEffectOnPosition("Effect/Direction11.img/effect/stone/0", 1320, 240, 443) + sm.sendDelay(600) + + sm.setPlayerAsSpeaker() + sm.sendNext("Looks like I'm going to have to use force.") + + sm.setSpeakerID(VELLUM) + sm.sendNext("YOU use force on ME? Ha!") + + sm.showNpcSpecialActionByTemplateId(VELLUM, "attack") + sm.sendDelay(2100) + + sm.showEffectOnPosition("Effect/Direction11.img/effect/skill/fire/0", 1620, 385, 443) + sm.forcedAction(4, 1500) + sm.sendDelay(2000) + + sm.setSpeakerID(VELLUM) + sm.sendNext("Do you now understand the power before you?") + + sm.sendNext("I am but ONE of the four Seal Guardians. You stand no chance against us.") + + sm.sendNext("Now that you have fully grasped the meaningless nature of your existence, leave. " + "And do not seek to return. I am only merciful once.") + + sm.lockInGameUI(False) + sm.warpInstanceOut(910700200, 0) # Quest Field (Colossal Root) diff --git a/scripts/field/root_secret.py b/scripts/field/root_secret.py new file mode 100755 index 0000000..d0fa4d6 --- /dev/null +++ b/scripts/field/root_secret.py @@ -0,0 +1,19 @@ +# Secret Swamp (Part of Root Abyss Quest Line) + +if sm.hasQuest(30000): + #sm.lockInGameUI(True) + sm.sendDelay(3000) + +elif sm.hasQuest(30003): + sm.setPlayerAsSpeaker() + sm.sendNext("Hmm.. It seems to work fine. Let's go back to tell her about the exit.") + sm.dispose() + +else: + sm.dispose() + + + sm.setPlayerAsSpeaker() + sm.sendNext("This fog is too thick! I gotta keep my senses sharp. Who knows what's lurking out there...") + + sm.lockInGameUI(False) diff --git a/scripts/field/russianRoulette_enter.py b/scripts/field/russianRoulette_enter.py new file mode 100755 index 0000000..a864f05 --- /dev/null +++ b/scripts/field/russianRoulette_enter.py @@ -0,0 +1,3 @@ +# using a map script cuz i cant get the clock to show up immediately after forcing a cc + +sm.sendAutoEventClock() \ No newline at end of file diff --git a/scripts/field/sc000025.py b/scripts/field/sc000025.py new file mode 100755 index 0000000..b8df16f --- /dev/null +++ b/scripts/field/sc000025.py @@ -0,0 +1,18 @@ +# id 811000025 (Hieizan : West Tower Central Shrine Entrance), field 811000025 +sm.lockInGameUI(True, True) +sm.sendDelay(500) +sm.spawnNpc(9130109, -36, 44) +sm.showNpcSpecialActionByTemplateId(9130109, "summon", 0) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9130109, True, 300, 100) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130109) # Mikagami +sm.sendNext("Hm? Who are you? ") +sm.sendSay("You can't go in. I'm not supposed to let anyone in. ") +sm.sendNext("Hm? Who are you? ") +sm.sendSay("You can't go in. I'm not supposed to let anyone in. ") +sm.lockInGameUI(False, True) +sm.closeUI(1128) +sm.startQuest(58938) +sm.createQuestWithQRValue(58973, "m035=clear;dr1=clear;m037=clear") diff --git a/scripts/field/sc000026.py b/scripts/field/sc000026.py new file mode 100755 index 0000000..d7b6bde --- /dev/null +++ b/scripts/field/sc000026.py @@ -0,0 +1,20 @@ +# id 811000026 (West Tower Central Shrine : Inside West Tower Central Shrine 1), field 811000026 +sm.lockInGameUI(True, True) +sm.spawnNpc(9130120, 91, 166) +sm.showNpcSpecialActionByTemplateId(9130120, "summon", 0) +sm.sendDelay(1000) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9130120, True, 200, 100) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130120) # Oura Shogun +sm.sendNext("Who goes there...?") +sm.sendSay("Nope, you're not gettin' past me... ") +sm.setParam(17) +sm.sendSay("I don't know why you're in my way, but I'm not here for you. I must go in.") +sm.setParam(5) +sm.sendSay("I done told you. Ahh, I guess I could use some exercise.") +sm.sendSay("Ahaha, this gets me every time!") +sm.lockInGameUI(False, True) +sm.closeUI(1128) +sm.createQuestWithQRValue(58973, "m035=clear;dr1=clear;m037=clear;m039=clear") diff --git a/scripts/field/sc000027.py b/scripts/field/sc000027.py new file mode 100755 index 0000000..b03adf5 --- /dev/null +++ b/scripts/field/sc000027.py @@ -0,0 +1,15 @@ +# id 811000027 (West Tower Central Shrine : Inside West Tower Central Shrine 2), field 811000027 +sm.showNpcSpecialActionByTemplateId(9130119, "summon", 0) +sm.lockInGameUI(True, True) +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130119) # Renka +sm.sendNext("......") +sm.sendSay("......") +sm.setParam(17) +sm.sendSay("Who is this girl? Why is she just standing there? ") +sm.setParam(5) +sm.sendSay("Enough!") +sm.lockInGameUI(False, True) +sm.closeUI(1128) +sm.createQuestWithQRValue(58973, "m035=clear;dr1=clear;m037=clear;m038=clear;m039=clear") diff --git a/scripts/field/sc000029.py b/scripts/field/sc000029.py new file mode 100755 index 0000000..ed6a1e8 --- /dev/null +++ b/scripts/field/sc000029.py @@ -0,0 +1,6 @@ +# id 811000029 (Small Shrine : Inside Small Shrine), field 811000029 +sm.showNpcSpecialActionByTemplateId(9130116, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9130109, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9130120, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9130118, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9130119, "summon", 0) diff --git a/scripts/field/sc000033.py b/scripts/field/sc000033.py new file mode 100755 index 0000000..54d6550 --- /dev/null +++ b/scripts/field/sc000033.py @@ -0,0 +1,4 @@ +# id 811000033 (Hieizan : Inside Small Shrine), field 811000033 +sm.closeUI(1128) +sm.startQuest(58940) +sm.createQuestWithQRValue(58973, "m040=clear;m035=clear;dr1=clear;dr2=clear;m037=clear;m038=clear;m039=clear") diff --git a/scripts/field/stageEnter_50.py b/scripts/field/stageEnter_50.py new file mode 100755 index 0000000..dcea112 --- /dev/null +++ b/scripts/field/stageEnter_50.py @@ -0,0 +1 @@ +sm.spawnMob(9309207 ,595 ,185 , False) \ No newline at end of file diff --git a/scripts/field/startEreb.py b/scripts/field/startEreb.py new file mode 100755 index 0000000..778709f --- /dev/null +++ b/scripts/field/startEreb.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [130000000] +# Empress' Road : Ereve + +sm.setTemporarySkillSet(0) \ No newline at end of file diff --git a/scripts/field/steal_truck.py b/scripts/field/steal_truck.py new file mode 100755 index 0000000..f3ec8f2 --- /dev/null +++ b/scripts/field/steal_truck.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# ID :: [865020001] +# Commerci Republic : Canal 1 + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.setStandAloneMode(True) +sm.forcedInput(2) +sm.curNodeEventEnd(True) \ No newline at end of file diff --git a/scripts/field/summonSchiller.py b/scripts/field/summonSchiller.py new file mode 100755 index 0000000..424770c --- /dev/null +++ b/scripts/field/summonSchiller.py @@ -0,0 +1,2 @@ +# Hidden Street - 2nd Job Advancement (Resistance) +sm.spawnNpc(2159100, 235, -14) \ No newline at end of file diff --git a/scripts/field/summon_ARCflyingmob.py b/scripts/field/summon_ARCflyingmob.py new file mode 100755 index 0000000..6cb302a --- /dev/null +++ b/scripts/field/summon_ARCflyingmob.py @@ -0,0 +1 @@ +# id 450001010 (Lake of Oblivion : Weathered Land of Happiness), field 450001010 diff --git a/scripts/field/summon_NPCkimoo.py b/scripts/field/summon_NPCkimoo.py new file mode 100755 index 0000000..efd9799 --- /dev/null +++ b/scripts/field/summon_NPCkimoo.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# ID :: [913000300] +# Hidden Street : Tiru Forest + +OBJECT_1 = sm.sendNpcEnterField(1102204, -1934, 66) +sm.sendNpcController(OBJECT_1, True) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +# [CLOCK] [07 00 2C 01 00 00 ] diff --git a/scripts/field/summon_aqupondo_5.py b/scripts/field/summon_aqupondo_5.py new file mode 100755 index 0000000..2c8bd99 --- /dev/null +++ b/scripts/field/summon_aqupondo_5.py @@ -0,0 +1,10 @@ +# Canal Battleground 5 (865020051) | Used for the Commerci Quest line +i = 0 +while i < 10: + sm.spawnMob(9390829, 500, 352, False) # Cutthroat Delfino + sm.spawnMob(9390830, 250, 352, False) # Sureshot Delfino + sm.spawnMob(9390831, 750, 352, False) # Voodoo Delfino + sm.spawnMob(9390832, 1000, 352, False) # Ripclaw Delfino + i += 1 +sm.spawnMob(9390812, 850, 352, False) # Riverson +sm.dispose() diff --git a/scripts/field/summon_arcanaBoss.py b/scripts/field/summon_arcanaBoss.py new file mode 100755 index 0000000..e61edcb --- /dev/null +++ b/scripts/field/summon_arcanaBoss.py @@ -0,0 +1,3 @@ +# id 940200260 (Arcana : Grove of the Spirit Tree), field 940200260 +sm.createQuestWithQRValue(34451, "clearB=1;clear=1") +sm.warp(940200270) diff --git a/scripts/field/summon_assa.py b/scripts/field/summon_assa.py new file mode 100755 index 0000000..dd29346 --- /dev/null +++ b/scripts/field/summon_assa.py @@ -0,0 +1,12 @@ +# id 865030121 (Commerci Republic : Deadly Trap), field 865030121 +sm.startQuest(17666) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(17666) +sm.startQuest(17666) +sm.startQuest(17666) +sm.startQuest(17666) +sm.startQuest(17666) +sm.closeUI(1128) +sm.startQuest(17666) +sm.startQuest(17931) +sm.startQuest(17666) diff --git a/scripts/field/summon_cygnusTuto1.py b/scripts/field/summon_cygnusTuto1.py new file mode 100755 index 0000000..3299adb --- /dev/null +++ b/scripts/field/summon_cygnusTuto1.py @@ -0,0 +1,3 @@ +# Created by MechAviv +# ID :: [130030103] +# Empress Road : Drill Hall \ No newline at end of file diff --git a/scripts/field/summon_cygnusTuto2.py b/scripts/field/summon_cygnusTuto2.py new file mode 100755 index 0000000..8a3557f --- /dev/null +++ b/scripts/field/summon_cygnusTuto2.py @@ -0,0 +1,4 @@ +# Created by MechAviv +# ID :: [130030105] +# Empress Road : Drill Hall + diff --git a/scripts/field/summon_hillaMob.py b/scripts/field/summon_hillaMob.py new file mode 100755 index 0000000..3085e8a --- /dev/null +++ b/scripts/field/summon_hillaMob.py @@ -0,0 +1,7 @@ +# id 863100105 (Tynerum : Hidden Crimsonheart 6), field 863100105 +sm.startQuest(17518) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(17518) +sm.startQuest(17518) +sm.startQuest(17518) +sm.startQuest(17518) diff --git a/scripts/field/summon_q20882.py b/scripts/field/summon_q20882.py new file mode 100755 index 0000000..bcd8b4c --- /dev/null +++ b/scripts/field/summon_q20882.py @@ -0,0 +1,7 @@ +# Hidden street - Secret Library (cygnus third job adv) +if sm.hasQuest(20882): + for i in range(15): + sm.spawnMob(9300470, -1, -29, False) # Black wing Henchman + sm.waitForMobDeath(9300470) + sm.spawnNpc(1104303, 100, -29) + sm.dispose() \ No newline at end of file diff --git a/scripts/field/summon_qmob.py b/scripts/field/summon_qmob.py new file mode 100755 index 0000000..3a2d8e2 --- /dev/null +++ b/scripts/field/summon_qmob.py @@ -0,0 +1,2 @@ +# id 865010001 (Commerci Republic : Daniella Stronghold), field 865010001 +sm.createQuestWithQRValue(18418, "B=33267") diff --git a/scripts/field/tangyoon.py b/scripts/field/tangyoon.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/test.py b/scripts/field/test.py new file mode 100755 index 0000000..b785c39 --- /dev/null +++ b/scripts/field/test.py @@ -0,0 +1,8 @@ +# test script +sm.setSpeakerType(3) +sm.setParam(4) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face8#Let me go, I have to get to the castle!") +sm.sendNext("#face8#Second dialogue!") \ No newline at end of file diff --git a/scripts/field/testDummyBigboss.py b/scripts/field/testDummyBigboss.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/field/treglo_summon.py b/scripts/field/treglo_summon.py new file mode 100755 index 0000000..2e7da80 --- /dev/null +++ b/scripts/field/treglo_summon.py @@ -0,0 +1,13 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.spawnMob(8880008, 1448, -1347, False, 10000000000) +sm.setDeathCount(5) +sm.setInstanceTime(BossConstants.MAGNUS_TIME) + + +sm.invokeAtFixedRate(250, BossConstants.MAGNUS_GREEN_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.GreenMeteor, 1, BossConstants.MAGNUS_GREEN_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_GREEN_ATOM_AMOUNT, BossConstants.MAGNUS_GREEN_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.MAGNUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.BlueMeteor, 1, BossConstants.MAGNUS_BLUE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_BLUE_ATOM_AMOUNT, BossConstants.MAGNUS_BLUE_ATOM_PROP) \ No newline at end of file diff --git a/scripts/field/undefined.py b/scripts/field/undefined.py new file mode 100755 index 0000000..0da3cea --- /dev/null +++ b/scripts/field/undefined.py @@ -0,0 +1,2 @@ +if chr is not None: + sm.chat("(Field) Not coded. Admin was lazy and didn't fix this :). ID: " + str(parentID)) diff --git a/scripts/field/undomorphdarco.py b/scripts/field/undomorphdarco.py new file mode 100755 index 0000000..b085fe6 --- /dev/null +++ b/scripts/field/undomorphdarco.py @@ -0,0 +1,6 @@ +# Used to remove the Red Draco Morph Buff In Leafre : Station +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +if sm.getnOptionByCTS(CharacterTemporaryStat.Morph) == 16: + sm.removeCTS(CharacterTemporaryStat.Morph) +sm.dispose() diff --git a/scripts/field/userEnter_251020000.py b/scripts/field/userEnter_251020000.py new file mode 100755 index 0000000..ba5ec53 --- /dev/null +++ b/scripts/field/userEnter_251020000.py @@ -0,0 +1,5 @@ +# SnowFro's Lair | Summon SnowFro + +if not sm.hasMobsInField(): + sm.spawnMob(9100024, -920, -255, False) +sm.dispose() diff --git a/scripts/field/userEnter_252000000.py b/scripts/field/userEnter_252000000.py new file mode 100755 index 0000000..11d16ed --- /dev/null +++ b/scripts/field/userEnter_252000000.py @@ -0,0 +1,3 @@ +# Golden Temple | Golden Temple (252000000) +sm.showFieldEffect("Map/Effect.img/temaD/enter/goldTemple") # Golden Temple Theme Dungeon Effect +sm.dispose() diff --git a/scripts/field/victor_summon.py b/scripts/field/victor_summon.py new file mode 100755 index 0000000..e2bca18 --- /dev/null +++ b/scripts/field/victor_summon.py @@ -0,0 +1,13 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import ObtacleAtomEnum + +sm.spawnMob(8880006, 1448, -1347, False, 10000000000) +sm.setDeathCount(5) +sm.setInstanceTime(BossConstants.MAGNUS_TIME) + + +sm.invokeAtFixedRate(250, BossConstants.MAGNUS_GREEN_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.GreenMeteor, 1, BossConstants.MAGNUS_GREEN_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_GREEN_ATOM_AMOUNT, BossConstants.MAGNUS_GREEN_ATOM_PROP) + +sm.invokeAtFixedRate(500, BossConstants.MAGNUS_BLUE_ATOM_EXECUTION_DELAY, 0, + "createObstacleAtom", ObtacleAtomEnum.BlueMeteor, 1, BossConstants.MAGNUS_BLUE_ATOM_DAMAGE, BossConstants.MAGNUS_OBSTACLE_ATOM_VELOCITY, BossConstants.MAGNUS_BLUE_ATOM_AMOUNT, BossConstants.MAGNUS_BLUE_ATOM_PROP) diff --git a/scripts/field/visitCity.py b/scripts/field/visitCity.py new file mode 100755 index 0000000..e78bc80 --- /dev/null +++ b/scripts/field/visitCity.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [102000003] | # ID :: [103000003] +# Perion : Warriors' Sanctuary | Kerning City : Hideout +if "1" not in sm.getQRValue(2849) and chr.getJob() == 0: + sm.createQuestWithQRValue(2849, "1") diff --git a/scripts/field/vonbonInsideMob.py b/scripts/field/vonbonInsideMob.py new file mode 100755 index 0000000..d0a4cf6 --- /dev/null +++ b/scripts/field/vonbonInsideMob.py @@ -0,0 +1,7 @@ +disembodiedVonBon = 8910001 +sm.spawnMob(disembodiedVonBon) +sm.createTimerGauge(15) +sm.invokeAfterDelay(30000, "warp", 105200510) +sm.waitForMobDeath(disembodiedVonBon) +sm.warp(105200510) +sm.stopEvents() \ No newline at end of file diff --git a/scripts/field/will_phase1.py b/scripts/field/will_phase1.py new file mode 100755 index 0000000..8423126 --- /dev/null +++ b/scripts/field/will_phase1.py @@ -0,0 +1,16 @@ +# will_phase1, fieldId 450008150 (Diffraction Hall) +BLUE_WILL = 8880303 +PURPLE_WILL = 8880304 + +sm.spawnMob(BLUE_WILL, 282, 159, 8400000000000) # Blue bar +sm.spawnMob(PURPLE_WILL, 282, -2020, 8400000000000) # Purple bar + +NEXT_FIELD = field.getId() + 100 +mobs = 2 +while mobs > 0: + mob = sm.waitForMobDeath() + templateId = mob.getTemplateId() + if templateId == BLUE_WILL or templateId == PURPLE_WILL: + mobs -= 1 + +chr.warp(NEXT_FIELD) \ No newline at end of file diff --git a/scripts/field/will_phase1_everyone.py b/scripts/field/will_phase1_everyone.py new file mode 100755 index 0000000..6e41d6d --- /dev/null +++ b/scripts/field/will_phase1_everyone.py @@ -0,0 +1,2 @@ +# will_phase1, fieldId 450008150 (Diffraction Hall) +# TODO set golden meter thing \ No newline at end of file diff --git a/scripts/field/will_phase2.py b/scripts/field/will_phase2.py new file mode 100755 index 0000000..563bb06 --- /dev/null +++ b/scripts/field/will_phase2.py @@ -0,0 +1,16 @@ +# will_phase2, fieldId 450008250 (The Deep Mirror) +fieldId = field.getId() +NEXT_FIELD = fieldId + 100 +WILL = 8880301 + +sm.spawnMob(WILL, 249, 215, 6300000000000) + +killed = False +while not killed: + mob = sm.waitForMobDeath() + templateId = mob.getTemplateId() + if templateId == WILL: + killed = True + +for chr in field.getChars(): + chr.warp(NEXT_FIELD) \ No newline at end of file diff --git a/scripts/field/will_phase2_everyone.py b/scripts/field/will_phase2_everyone.py new file mode 100755 index 0000000..ed4d6d0 --- /dev/null +++ b/scripts/field/will_phase2_everyone.py @@ -0,0 +1,2 @@ +# will_phase2_everyone, fieldId 450008250 (The Deep Mirror) +# TODO set gold thing \ No newline at end of file diff --git a/scripts/field/will_phase3.py b/scripts/field/will_phase3.py new file mode 100755 index 0000000..ecc18c2 --- /dev/null +++ b/scripts/field/will_phase3.py @@ -0,0 +1,4 @@ +# will_phase3, fieldId 450008350 (The Deep Mirror) +WILL = 8880302 + +sm.spawnMob(WILL, 282, 159, 10500000000000) diff --git a/scripts/field/xn_tuto_0_0.py b/scripts/field/xn_tuto_0_0.py new file mode 100755 index 0000000..7ccb606 --- /dev/null +++ b/scripts/field/xn_tuto_0_0.py @@ -0,0 +1,105 @@ +# Peacetime Edelstein : Edelstein Outskirts 1 ; Xenon Intro Childhood + +sm.removeEscapeButton() +isFemale = chr.getAvatarData().getAvatarLook().getGender() +# CHILDHOOD_SELF_MALE = 2159368 +# CHILDHOOD_SELF_FEMALE = 2159369 +CHILDHOOD_SELF = 2159368 + isFemale +CLAUDINE = 2159372 +BELLE = 2159373 +BRIGHTON = 2159374 +ELEX = 2159375 + +sm.setSpeakerID(2007) +if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes??"): + sm.jobAdvance(3600) + sm.giveItem(1142575) + sm.giveAndEquip(1353001) + sm.removeSkill(30021238) + sm.giveSkill(36000004, 1) + sm.addSP(-1) + sm.warp(310010000, 1) + sm.lockInGameUI(False) + sm.dispose() + +sm.lockInGameUI(True) +sm.hideUser(True) +sm.giveSkill(30021238, 1, 1) + +sm.spawnNpc(BRIGHTON, 358, -14) +sm.flipNpcByTemplateId(BRIGHTON, False) +sm.spawnNpc(CLAUDINE, 432, -14) +sm.flipNpcByTemplateId(CLAUDINE, False) +sm.spawnNpc(BELLE, 512, -14) +sm.flipNpcByTemplateId(BELLE, False) +sm.spawnNpc(ELEX, 585, -14) +sm.spawnNpc(CHILDHOOD_SELF, 672, -14) + +# TODO: Edelstein, long ago... + +sm.setSpeakerID(BELLE) +sm.sendNext("Okay, here we go.") + +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/0", 2000, BELLE) +sm.sendDelay(2000) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/1", 2000, ELEX) +sm.sendDelay(2000) + +sm.setSpeakerID(ELEX) +sm.sendNext("Red M-Forcer!") +sm.setSpeakerID(BELLE) +sm.sendSay("Yellow M-Forcer!") +sm.setSpeakerID(CLAUDINE) +sm.sendSay("Blue M-Forcer!") +sm.setSpeakerID(BRIGHTON) +sm.sendSay("Green M-Forcer!") +sm.setSpeakerID(CHILDHOOD_SELF) +sm.sendSay("Black M-Forcer!") + +sm.setSpeakerID(BELLE) +sm.sendSay("All together..") + +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/2", 2000, BELLE) +sm.sendDelay(2000) +# TODO: belle hops + +sm.sendNext("Oh! Awesome!") +sm.setSpeakerID(CLAUDINE) +sm.sendSay("Belle likes to pretend she's an M-Forcer.") +sm.setSpeakerID(BELLE) +sm.sendSay("It's so fun! THey are righteous heroes who protect places like Edelstein from evil! Like me!") +sm.setSpeakerID(BRIGHTON) +sm.sendSay("Too bad there's never anybody for ME to beat up") +sm.setSpeakerID(ELEX) +sm.sendSay("That's why we usually just yell at each other and dance around. It's super fun.") +sm.setSpeakerID(CHILDHOOD_SELF) +sm.sendSay("I can be the bad guy...") +sm.setSpeakerID(BELLE) +sm.sendSay("No way, #h #! We all have to be super righteous heroes! It's no fun if you're the bad guy.") +sm.setSpeakerID(CHILDHOOD_SELF) +sm.sendSay("Yes......") +sm.setSpeakerID(BRIGHTON) +sm.sendSay("Well, I guess as long as it's fun, it wouldn't matter. Maybe we can play more later.") +sm.setSpeakerID(CHILDHOOD_SELF) +sm.sendSay("I have to head home! Talk to you later!") +sm.setSpeakerID(BELLE) +sm.sendSay("See you tomorrow!") + +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/3", 2000, ELEX) +sm.sendDelay(2000) + +sm.moveNpcByTemplateId(CHILDHOOD_SELF, True, 1000, 1000) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/4", 2000, BRIGHTON) +sm.sendDelay(400) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/5", 2000, CHILDHOOD_SELF) +sm.sendDelay(2000) + +sm.warpInstanceIn(931050910) + +sm.removeNpc(BRIGHTON) +sm.removeNpc(CLAUDINE) +sm.removeNpc(BELLE) +sm.removeNpc(ELEX) +sm.removeNpc(CHILDHOOD_SELF) +sm.hideUser(False) +sm.lockInGameUI(False) diff --git a/scripts/field/xn_tuto_10_0.py b/scripts/field/xn_tuto_10_0.py new file mode 100755 index 0000000..cf8f4c0 --- /dev/null +++ b/scripts/field/xn_tuto_10_0.py @@ -0,0 +1,34 @@ +# Classified Lab : Silo ; Xenon Intro Escaping With Claudine + +ROO_D_AGGRESIVE = 2159381 +CLAUDINE_ARM_SLING = 2159384 + +sm.lockInGameUI(True) + +sm.forcedInput(2) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.sendDelay(30) + +sm.forcedInput(2) +sm.showEffect("Effect/Direction12.img/effect/tuto/sig", 0, 0, 0) +sm.showEffect("Effect/Direction12.img/effect/tuto/luti", 0, 0, 0) +sm.sendDelay(2600) + +sm.moveCamera(False, 1000, -436, 43) +sm.showBalloonMsg("Effect/Direction12.img/effect/tuto/BalloonMsg1/0", 900) +sm.sendDelay(1200) + +sm.showBalloonMsg("Effect/Direction12.img/effect/tuto/BalloonMsg2/15", 1200) +sm.forcedInput(0) +sm.sendDelay(1200) + +sm.showEffect("Effect/Direction12.img/effect/tuto/laser", 0, 0, 0) +sm.sendDelay(1800) + +sm.showEffectOnPosition("Effect/Direction12.img/effect/tuto/BalloonMsg2/16", 1200, -426, -100) +sm.sendDelay(1200) + +sm.lockInGameUI(False) +sm.warp(931050990) diff --git a/scripts/field/xn_tuto_11_0.py b/scripts/field/xn_tuto_11_0.py new file mode 100755 index 0000000..cbad5f9 --- /dev/null +++ b/scripts/field/xn_tuto_11_0.py @@ -0,0 +1,17 @@ +# Video Field (931050990) | A Black Field used for Effects/Videos + +job = sm.getChr().getJob() +if job == 2004: # Luminous Beginner Job ID + sm.lockInGameUI(True) + sm.showScene("Effect.wz/Direction8.img", "lightningTutorial", "Scene0") + sm.invokeAfterDelay(5000, "warpInstanceIn", 927020000, 0) # Warp into Instance + sm.invokeAfterDelay(4500, "showFadeTransition", 0, 500, 1500) +elif job == 2001: # Evan Beginner Job ID + sm.lockInGameUI(True) + sm.invokeAfterDelay(3000, "lockInGameUI", False) + + sm.showScene("Effect.wz/Direction4.img", "crash", "Scene0") +elif job == 3002: # Xenon Beginner Job ID + sm.lockInGameUI(True) + # TODO: play youtube video of xenon with beryl + sm.warpInstanceIn(931060060) diff --git a/scripts/field/xn_tuto_12_0.py b/scripts/field/xn_tuto_12_0.py new file mode 100755 index 0000000..9b84be4 --- /dev/null +++ b/scripts/field/xn_tuto_12_0.py @@ -0,0 +1,85 @@ +# Classified Lab : Silo ; Xenon Intro Rescued by Resistance + +BERYL_FORCEMOVE = 2159378 +BERYL = 2159379 +ROO_D_AGGRESIVE = 2159381 +CLAUDINE_ARM_SLING = 2159384 +BELLE_FIGHT = 2159385 +BRIGHTON_FIGHT = 2159386 +CHECKY_FIGHT = 2159387 +ELEX_FIGHT = 2159388 + +# TODO: make this nicer once figure out how to stop forceMoves, it might be spawn order +sm.removeEscapeButton() + +sm.spawnNpc(ROO_D_AGGRESIVE, -1044, 43) +sm.forcedInput(0) +sm.spawnNpc(CLAUDINE_ARM_SLING, -980, 43) # Magnetizes to ROO_D +sm.spawnNpc(BERYL, -767, 43) +sm.spawnNpc(ELEX_FIGHT, -670, 43) # -614 +sm.spawnNpc(BRIGHTON_FIGHT, -580, 43) # Magnetizes to Elex +sm.spawnNpc(BELLE_FIGHT, -476, 43) +sm.spawnNpc(CHECKY_FIGHT, -370, 43) + + +# ROO_D_AGGRESIVE is moving to the left upon spawning +# CLAUDINE_ARM_SLING is offset to the right and facing left +# BERYL is offset to the right +# ELEX_FIGHT is offset to the right +# BRIGHTON_FIGHT is offset to the right and facing right +# BELLE_FIGHT is offset to the right +# CHECKY_FIGHT is offset to the right and facing right + +sm.moveNpcByTemplateId(ROO_D_AGGRESIVE, False, 15, 2000000000) +sm.flipNpcByTemplateId(ROO_D_AGGRESIVE, False) +sm.flipNpcByTemplateId(CLAUDINE_ARM_SLING, False) +sm.flipNpcByTemplateId(BRIGHTON_FIGHT, True) +sm.flipNpcByTemplateId(CHECKY_FIGHT, True) + +sm.lockInGameUI(True) + +sm.forcedInput(0) +sm.sendDelay(300) +sm.forcedInput(2) +sm.sendDelay(300) +sm.forcedInput(0) + +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/17", 2400, 0, -200, BELLE_FIGHT) +sm.sendDelay(2400) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/18", 2400, 0, -200, BELLE_FIGHT) +sm.sendDelay(2400) + +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendNext("The cavalry is here!") +sm.setSpeakerID(CHECKY_FIGHT) +sm.sendSay("Save the hugs for later, Claudine. We've gotta get you out of here first!") + + +sm.showNpcEffectOnPosition("Effect/Direction12.img/effect/tuto/smogStart", 0, 0, CHECKY_FIGHT) +sm.sendDelay(1050) +sm.showEffect("Effect/Direction12.img/effect/tuto/smog", 3900, 450, 0) +sm.sendDelay(1500) + +sm.removeNpc(ROO_D_AGGRESIVE) +sm.removeNpc(CLAUDINE_ARM_SLING) +sm.removeNpc(ELEX_FIGHT) +sm.removeNpc(BRIGHTON_FIGHT) +sm.removeNpc(BELLE_FIGHT) +sm.removeNpc(CHECKY_FIGHT) +sm.hideUser(True) +sm.sendDelay(2220) + +sm.showEffect("Effect/Direction12.img/effect/tuto/smogEnd", 0, 450, 0) +sm.sendDelay(420) + +# something? +sm.sendDelay(600) +# something? +sm.sendDelay(600) + +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg0/1", 1200, BERYL) +sm.sendDelay(1200) +sm.removeNpc(BERYL) + +sm.lockInGameUI(False) +sm.warpInstanceIn(931060070, 0) diff --git a/scripts/field/xn_tuto_13_0.py b/scripts/field/xn_tuto_13_0.py new file mode 100755 index 0000000..03d6de7 --- /dev/null +++ b/scripts/field/xn_tuto_13_0.py @@ -0,0 +1,59 @@ +# Edelstein: Secret Square ; Xenon Intro Last Step +ROO_D_PEACEFUL = 2159380 +CLAUDINE_ARM_SLING = 2159384 +BELLE_FIGHT = 2159385 +BRIGHTON_FIGHT = 2159386 +CHECKY_FIGHT = 2159387 +ELEX_FIGHT = 2159388 + +sm.lockInGameUI(True) +sm.removeEscapeButton() + +sm.setSpeakerID(BELLE_FIGHT) +sm.sendNext("Claudine! We were worried sick.") +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendSay("Thanks Belle.") +sm.setSpeakerID(ELEX_FIGHT) +sm.sendSay("But... what's with Commander Glowstick over here? Looks friendly enough, I guess...") +sm.setSpeakerID(BRIGHTON_FIGHT) +sm.sendSay("I bet it's one of Gelimer's agents. They were going after you at first, Claudine. We can't trust anything that came out of that lab now...") +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendSay("These... robots saved my life. I heard the little one talking about memories being wiped. I think Gelimer was controlling them...") +sm.setSpeakerID(CHECKY_FIGHT) +sm.sendSay("You KNOW Gelimer had control. You just saw it! We can't risk the safety of Secret Plaza because you're feeling charitable. That could be what Gelimer wants.") + +sm.showBalloonMsg("Effect/Direction12.img/effect/story/BalloonMsg0/1", 1200) +sm.sendDelay(1200) +sm.setSpeakerID(ROO_D_PEACEFUL) +sm.sendNext("We can remove any control devices...") +sm.showBalloonMsg("Effect/Direction12.img/effect/story/BalloonMsg1/1", 1200) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/story/BalloonMsg1/1", 1200, CLAUDINE_ARM_SLING) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/story/BalloonMsg1/1", 1200, BELLE_FIGHT) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/story/BalloonMsg1/1", 1200, BRIGHTON_FIGHT) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/story/BalloonMsg1/1", 1200, CHECKY_FIGHT) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/story/BalloonMsg1/1", 1200, ELEX_FIGHT) +sm.sendDelay(1200) + +sm.setSpeakerID(ELEX_FIGHT) +sm.sendNext("Then remove it immediately. It's dangerous.") +sm.setSpeakerID(ROO_D_PEACEFUL) +sm.sendSay("It's not that simple. If I remove this, #h # may be weakened to the point of near-death. The risks are too great to move ahead without careful consideration.") +sm.setPlayerAsSpeaker() +sm.sendSay("I'm willing to take the risk. Roo-D, do it if you can.") +sm.setSpeakerID(ROO_D_PEACEFUL) +sm.sendSay("Really? Are you sure?") +sm.setPlayerAsSpeaker() +sm.sendSay("If Gelimer were to take control, I would be a danger to everyone around me. I can't let that happen. I will never be controlled again.") +sm.setSpeakerID(ROO_D_PEACEFUL) +sm.sendSay("Okay, I'll remove it...") +sm.sendSay("You might feel a little dizzy at first... but I'm almost done.") + +sm.jobAdvance(3600) +sm.giveItem(1142575) +sm.giveAndEquip(1353001) +sm.removeSkill(30021238) +sm.giveSkill(36000004, 1) +sm.addSP(-1) +sm.warp(310010000, 1) + +sm.lockInGameUI(False) diff --git a/scripts/field/xn_tuto_1_0.py b/scripts/field/xn_tuto_1_0.py new file mode 100755 index 0000000..0ed12a5 --- /dev/null +++ b/scripts/field/xn_tuto_1_0.py @@ -0,0 +1,68 @@ +# Peacetime Edelstein : Edelstein Outskirts 2 ; Xenon Intro Abduction Scene + +isFemale = chr.getAvatarData().getAvatarLook().getGender() + +sm.lockInGameUI(True) +sm.removeEscapeButton() +sm.hideUser(True) + +# CHILDHOOD_SELF_MALE = 2159368 +# CHILDHOOD_SELF_FEMALE = 2159369 +# ABDUCTED_CHILDHOOD_SELF_MALE = 2159370 +# ABDUCTED_CHILDHOOD_SELF_FEMALE = 2159371 +GELIMER_PEACETIME = 2159376 +CHILDHOOD_SELF = 2159368 + isFemale +ABDUCTED_CHILDHOOD_SELF = 2159370 + isFemale +CLAUDINE = 2159372 + + +# sm.spawnNpc(CHILDHOOD_SELF, -1050, -14) +sm.spawnNpc(CHILDHOOD_SELF, -1397, -14) +sm.spawnNpc(GELIMER_PEACETIME, -1808, -14) +sm.flipNpcByTemplateId(GELIMER_PEACETIME, False) + +# TODO: He won't move :() +# move CHILDHOOD_SELF left until on 2nd yellow flower after lamp post (track camera) +# sm.moveNpcByTemplateId(CHILDHOOD_SELF, True, 1000, 1000) +# sm.sendDelay(10000) + +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/story/BalloonMsg0/0", 2000, CHILDHOOD_SELF) +sm.sendDelay(2000) + +sm.setSpeakerID(CHILDHOOD_SELF) +sm.sendNext("Who is that grandpa? I don't think he's from this town...") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/6", 2000, GELIMER_PEACETIME) +sm.sendDelay(2000) +# TODO: two robots spawn around childhood self (not yet abducted) -> +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/0", 2000, CHILDHOOD_SELF) +sm.sendDelay(2000) +sm.removeNpc(CHILDHOOD_SELF) +# TODO: fix the position of this +sm.spawnNpc(ABDUCTED_CHILDHOOD_SELF, -1397, -14) +sm.setSpeakerID(GELIMER_PEACETIME) + +sm.sendNext("Finally, I find what I'm looking for... It's a good thing I looked all over town.") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/8", 2000, GELIMER_PEACETIME) +sm.sendDelay(2000) + +# TODO: They're not moving +# sm.moveNpcByTemplateId(ABDUCTED_CHILDHOOD_SELF, True, 1000, 1000) +# sm.moveNpcByTemplateId(GELIMER_PEACETIME, True, 1000, 1000) +# sm.sendDelay(10000) + +# TODO: fix below +# sm.moveCamera(False, 1000, -400, 0) +# move camera right until childhood self is on left edge -> claudine moves left onto screen, moves right left right left + +sm.spawnNpc(CLAUDINE, -530, -14) + +sm.setSpeakerID(CLAUDINE) +sm.sendNext("Did #h # already go home? I was going to return the dagger I borrowed.") +sm.sendSay("I'll give it back tomorrow.") + +sm.removeNpc(CLAUDINE) +sm.removeNpc(ABDUCTED_CHILDHOOD_SELF) +sm.removeNpc(GELIMER_PEACETIME) +sm.warp(931060080) +sm.hideUser(False) +sm.lockInGameUI(False) diff --git a/scripts/field/xn_tuto_2_0.py b/scripts/field/xn_tuto_2_0.py new file mode 100755 index 0000000..2bbe6df --- /dev/null +++ b/scripts/field/xn_tuto_2_0.py @@ -0,0 +1,5 @@ +# Hidden Street : Scene Change ; Xenon Intro Time Skip Map + +# TODO: Add this when GMS comes back up +# Black Screen -> DECADES LATER -> +sm.warpInstanceIn(931050920) diff --git a/scripts/field/xn_tuto_3_0.py b/scripts/field/xn_tuto_3_0.py new file mode 100755 index 0000000..b248356 --- /dev/null +++ b/scripts/field/xn_tuto_3_0.py @@ -0,0 +1,25 @@ +# Classified Lab : Laboratory ; Xenon Intro Abduction Result + +GELIMER_PRESENT = 2159377 + +sm.spawnNpc(GELIMER_PRESENT, -100, 0) +sm.flipNpcByTemplateId(GELIMER_PRESENT, False) +sm.lockInGameUI(True) + +sm.teleportInField(0, 0) +sm.showEffect("Effect/Direction12.img/effect/tuto/doorOpen", 0, 0, 0) + +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/8", 2000, GELIMER_PRESENT) +sm.sendDelay(2000) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/9", 2000, GELIMER_PRESENT) +sm.sendDelay(2000) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/10", 2000, GELIMER_PRESENT) +sm.sendDelay(2000) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/8", 2000, GELIMER_PRESENT) +sm.sendDelay(2000) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/7", 2000, GELIMER_PRESENT) +sm.sendDelay(2000) + +sm.warp(931060081) +sm.lockInGameUI(False) +sm.removeNpc(GELIMER_PRESENT) diff --git a/scripts/field/xn_tuto_4_0.py b/scripts/field/xn_tuto_4_0.py new file mode 100755 index 0000000..68f5035 --- /dev/null +++ b/scripts/field/xn_tuto_4_0.py @@ -0,0 +1,6 @@ +# No Name map used to show a text scene ; Xenon Intro + +# TODO: Finish this when GMS comes back up. + +# play black screen "The only things I've ever known were testing... and battle." +sm.warpInstanceIn(931050930) diff --git a/scripts/field/xn_tuto_5_0.py b/scripts/field/xn_tuto_5_0.py new file mode 100755 index 0000000..d2ba3f3 --- /dev/null +++ b/scripts/field/xn_tuto_5_0.py @@ -0,0 +1,19 @@ +# Classified Lab : Laboratory ; Upper Floor Before Break In + +GELIMER_PRESENT = 2159377 + +sm.lockInGameUI(True) +sm.removeEscapeButton() +sm.spawnNpc(GELIMER_PRESENT, -170, 0) +sm.flipNpcByTemplateId(GELIMER_PRESENT, False) +sm.sendDelay(1000) + +sm.moveCamera(False, 1000, 0, -25) +sm.setSpeakerID(GELIMER_PRESENT) +sm.sendNext("This is the last phase of testing. I know it's been a long time... are you ready?") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/11", 2000, GELIMER_PRESENT) +sm.sendDelay(2000) +sm.moveCamera(True, 1000, 0, 0) +sm.spawnMob(9300635, 166, -301, False) +sm.lockInGameUI(False) +sm.startQuestNoCheck(23600) diff --git a/scripts/field/xn_tuto_6_0.py b/scripts/field/xn_tuto_6_0.py new file mode 100755 index 0000000..187a727 --- /dev/null +++ b/scripts/field/xn_tuto_6_0.py @@ -0,0 +1,44 @@ +# Classified Lab : Silo ; Xenon Intro Resistance Break In + +CLAUDINE_FIGHT = 2159382 +CLAUDINE_CAGED = 2159383 +BELLE_FIGHT = 2159385 +BRIGHTON_FIGHT = 2159386 + +sm.lockInGameUI(True) +sm.removeEscapeButton() + + +sm.spawnNpc(CLAUDINE_FIGHT, 300, 43) +sm.spawnNpc(BRIGHTON_FIGHT, 400, 43) +sm.spawnNpc(BELLE_FIGHT, 500, 43) + +# TODO: 2 robots on the right claudine barely off screen she kills them -> move camera right showiung brighton and belle, just as we are about to see belle + +sm.moveCamera(False, 1000, 43, 43) +sm.setSpeakerID(BRIGHTON_FIGHT) +sm.sendNext("They just keep coming!") +sm.setSpeakerID(CLAUDINE_FIGHT) +sm.sendSay("We heard there was a hidden lab here, but this is something big!") +sm.setSpeakerID(BELLE_FIGHT) +sm.sendSay("With defenses like these, they must be hiding something big. And I'm going to find out what.") +sm.setSpeakerID(CLAUDINE_FIGHT) +sm.sendSay("You're cool as can be, aren't you Belle? Nothing fazes you.") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/2", 2000, CLAUDINE_FIGHT) +sm.sendDelay(2000) + +sm.flipNpcByTemplateId(CLAUDINE_FIGHT, False) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/12", 2000, CLAUDINE_FIGHT) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 2000, BRIGHTON_FIGHT) +# sm.sendDelay(2000) + +sm.moveNpcByTemplateId(BRIGHTON_FIGHT, False, 50, 100) +sm.sendDelay(1000) + +sm.moveNpcByTemplateId(BRIGHTON_FIGHT, True, 25, 100) +sm.removeNpc(CLAUDINE_FIGHT) +sm.spawnNpc(CLAUDINE_CAGED, 300, 43) +sm.sendDelay(30) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/13", 2000, BELLE_FIGHT) +sm.sendDelay(2000) +sm.forcedInput(2) # Interrupted by InGameDirectionResponse Event diff --git a/scripts/field/xn_tuto_6_1.py b/scripts/field/xn_tuto_6_1.py new file mode 100755 index 0000000..60f79be --- /dev/null +++ b/scripts/field/xn_tuto_6_1.py @@ -0,0 +1,69 @@ +GELIMER_PRESENT = 2159377 +BERYL_FORCEMOVE = 2159378 +BERYL = 2159379 +CLAUDINE_CAGED = 2159383 +BELLE_FIGHT = 2159385 +BRIGHTON_FIGHT = 2159386 + +isFemale = chr.getAvatarData().getAvatarLook().getGender() + +sm.removeEscapeButton() + +sm.forcedInput(0) +sm.setPlayerAsSpeaker() +sm.sendNext("Ready to attack on your command, Gelimer.") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/2", 2000, CLAUDINE_CAGED) +sm.sendDelay(2000) +sm.setSpeakerID(BELLE_FIGHT) +sm.sendNext("Get away from Claudine!") +sm.showBalloonMsg("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 2000) +sm.sendDelay(2000) +sm.setPlayerAsSpeaker() +sm.sendNext("Argh, M... My head! It... hurts.") +sm.showBalloonMsg("Effect/Direction12.img/effect/tuto/memory/" + str(0 + isFemale), 0) +sm.sendDelay(2000) +sm.showBalloonMsg("Effect/Direction12.img/effect/story/BalloonMsg0/1", 2000) +sm.sendDelay(2000) + +sm.sendNext("What was that?! Like... someone else's memory! My chest... I can't catch my breath...") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/story/BalloonMsg0/0", 2000, CLAUDINE_CAGED) + +sm.spawnNpc(GELIMER_PRESENT, -824, 43) +sm.spawnNpc(BERYL_FORCEMOVE, -824, 43) +sm.moveCamera(False, 1000, -1000, 43) +sm.moveNpcByTemplateId(GELIMER_PRESENT, False, 800, 200) +sm.moveNpcByTemplateId(BERYL_FORCEMOVE, False, 800, 180) +sm.moveCamera(False, 500, 1000, 43) +sm.sendDelay(5000) + +sm.setSpeakerID(GELIMER_PRESENT) +sm.sendNext("What are you doing?! Capture them! Capture them all!") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/2", 2000, BRIGHTON_FIGHT) +sm.sendDelay(2000) +sm.setSpeakerID(BRIGHTON_FIGHT) +sm.sendNext("Belle! Get out of here!") +sm.setSpeakerID(BELLE_FIGHT) +sm.sendSay("What about Claudine?") +sm.setSpeakerID(BRIGHTON_FIGHT) +sm.sendSay("She'll be okay! We need to get back-up!") +sm.showEffectOnPosition("Effect/Direction12.img/effect/tuto/smog", 10000, 550, 0) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg2/14", 2000, 0, -300, CLAUDINE_CAGED) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 2000, GELIMER_PRESENT) +sm.sendDelay(2000) +sm.removeNpc(BRIGHTON_FIGHT) +sm.removeNpc(BELLE_FIGHT) +sm.setSpeakerID(GELIMER_PRESENT) +sm.sendNext("Don't let them get away!") +sm.sendSay("Xenon! Watch this one! Beryl, you and I will chase down the rest of these rats!") + +sm.moveNpcByTemplateId(GELIMER_PRESENT, False, 800, 100) +sm.moveNpcByTemplateId(BERYL_FORCEMOVE, False, 800, 80) +sm.setPlayerAsSpeaker() +sm.sendNext("What happened earlier?") +sm.warpInstanceIn(931050950) + +sm.lockInGameUI(False) + +sm.removeNpc(GELIMER_PRESENT) +sm.removeNpc(BERYL_FORCEMOVE) +sm.removeNpc(CLAUDINE_CAGED) diff --git a/scripts/field/xn_tuto_7_0.py b/scripts/field/xn_tuto_7_0.py new file mode 100755 index 0000000..8240341 --- /dev/null +++ b/scripts/field/xn_tuto_7_0.py @@ -0,0 +1,13 @@ +# Classified Lab : Laboratory ; Xenon Intro Regaining Memories + +sm.removeEscapeButton() + +# player moves left and right a lot -> +sm.setPlayerAsSpeaker() +sm.sendNext("What was that memory? I cannot recall it... like it's covered in static...") +# -> .... above xenon + +sm.sendNext("I need to talk to that woman before Professor Gelimer returns. She must be in a cell.") +# -> xenon moves right -> when reach portal teleport to silo (CLAUDINE in bars map) + +sm.warpInstanceIn(931050960) diff --git a/scripts/field/xn_tuto_7_1.py b/scripts/field/xn_tuto_7_1.py new file mode 100755 index 0000000..b681f1e --- /dev/null +++ b/scripts/field/xn_tuto_7_1.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# Map ID :: 931050950 +# Classified Lab : Laboratory + +sm.curNodeEventEnd(True) +sm.warp(931050960, 0) diff --git a/scripts/field/xn_tuto_8_0.py b/scripts/field/xn_tuto_8_0.py new file mode 100755 index 0000000..88dcb0a --- /dev/null +++ b/scripts/field/xn_tuto_8_0.py @@ -0,0 +1,8 @@ +# Classified Lab : Prison ; Xenon Intro Claudine Interrogation + +ROO_D_PEACEFUL = 2159380 + +sm.lockInGameUI(True) + +sm.spawnNpc(ROO_D_PEACEFUL, 450, 196) +sm.forcedInput(2) # there's an InGameDirectionResponse Event that will interrupt us diff --git a/scripts/field/xn_tuto_8_1.py b/scripts/field/xn_tuto_8_1.py new file mode 100755 index 0000000..2a4516a --- /dev/null +++ b/scripts/field/xn_tuto_8_1.py @@ -0,0 +1,118 @@ +# Classified Lab : Prison ; Xenon Intro Claudine Interrogation, InGameDirectionResponse Event + +import time + +ROO_D_PEACEFUL = 2159380 +ROO_D_AGGRESIVE = 2159381 +CLAUDINE_ARM_SLING = 2159384 + +sm.removeEscapeButton() +sm.forcedInput(0) + +sm.setSpeakerID(ROO_D_PEACEFUL) +sm.sendNext("#h #, #h #! What brings you here?") +sm.setPlayerAsSpeaker() +sm.sendSay("Roo-D, I must ask that prisoner a question. I need you to keep this a secret, okay?") +sm.setSpeakerID(ROO_D_PEACEFUL) +sm.sendSay("You WERE acting funny when you saw her earlier. Do you... remember anything? Maybe something from your past?") +sm.setPlayerAsSpeaker() +sm.sendSay("What are you talking about? Roo-D, what do you know about my past?") +sm.setSpeakerID(ROO_D_PEACEFUL) +sm.sendSay("Ummm... take this for now.") +# TODO: -> show picture of sheathed dagger, figure this out when GMS comes back up + +sm.sendNext("She had this on her when we put her in the cell. I think it's an important clue to finding out who you are. You should go talk to her. I'll keep an eye out for Gelimer.") +sm.moveNpcByTemplateId(ROO_D_PEACEFUL, False, 600, 100) +sm.sendDelay(2000) +timeUntilHide = time.time() + 6 +sm.invokeAfterDelay(6000, "hideNpcByTemplateId", ROO_D_PEACEFUL, True, True) +sm.setPlayerAsSpeaker() +sm.sendNext("Thanks Roo-D.") +sm.forcedInput(2) +sm.sendDelay(1650) +sm.forcedInput(0) +if time.time() < timeUntilHide: + sm.sendDelay(int((timeUntilHide - time.time())*1000)) +sm.sendNext("Excuse me... I have something to ask you.") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/2/0", 2000, CLAUDINE_ARM_SLING) +sm.sendDelay(2000) + +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendNext("I'm not talking, you Black Wings scum!") +sm.setPlayerAsSpeaker() +sm.sendSay("(This sensation is familiar, yet distant. I am sure I have met this woman before.)") +sm.sendSay("(And this dagger... Have I held it before?)") +sm.sendSay("Umm, here.") +# TODO: -> show same picture of sheathed dagger ->, figure this out when GMS comes back up +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 2000, CLAUDINE_ARM_SLING) +sm.sendDelay(2000) + +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendNext("My dagger!") +sm.setPlayerAsSpeaker() +sm.sendSay("Tell me about this weapon. Does it hold special powers? Where did you get it?") +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendSay("Why do you want to know, Black Wing?") +sm.setPlayerAsSpeaker() +sm.sendSay("This item has caused a strange fluctuation in my memory circuits. Roo-D tells me it may have something to do with my past.") +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendSay("What? I don't understand...") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 2000, CLAUDINE_ARM_SLING) +sm.sendDelay(2000) +sm.sendNext("Wait, you said you recognize this dagger? Could you be...") + +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("#h #, #h #!") + +sm.hideNpcByTemplateId(ROO_D_PEACEFUL, False, False) +sm.moveNpcByTemplateId(ROO_D_PEACEFUL, True, 300, 100) + +sm.sendSay("Gelimer is coming back! Did she tell you anything?") +sm.setPlayerAsSpeaker() +sm.sendSay("No, nothing. And the... glitch earlier will not return to my mind.") +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("Too bad... I was hoping that would trigger your memory.") +sm.setPlayerAsSpeaker() +sm.sendSay("My memory? What are you talking about Roo-D?") +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("No time to explain now, #h #. This might be your last chance. You need to join this lady and get out of here! Otherwise, Gelimer's going to erase what's left of your memory.") +sm.setPlayerAsSpeaker() +sm.sendSay("He would erase my memory?") +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("Look, I know you're confused, but I made a promise to keep you safe!") +sm.setPlayerAsSpeaker() +sm.sendSay("Promise? With who?") +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("With you...") +sm.showBalloonMsg("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 2000) +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 2000, CLAUDINE_ARM_SLING) +sm.sendDelay(2000) + +sm.sendNext("Look, you came to me, before Gelimer took your memories. You wanted to leave! I know you don't remember that now, but you have to trust me.") +sm.sendSay("I've acted like Gelimer's loyal underling for a long time now, but today is our chance.") +sm.sendSay("I'm sure this lady is from your past. I could see it in your eyes.") +sm.sendSay("You have to get out of here, before you lost what little memory you have left.") +sm.setPlayerAsSpeaker() +sm.sendSay("That flash before... was that a memory of my past?") +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("I don't know, but you don't have time to think about it now. Gelimer is coming back here now, and when he gets here, he'll wipe your memory and hurt that woman. You need to thing about what you want...") +sm.setPlayerAsSpeaker() +sm.sendSay("I want to find my memories again.") +sm.sendSay("I don't even know why, but I know I want to protect her.") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg0/0", 2000, CLAUDINE_ARM_SLING) +sm.sendDelay(2000) + +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendNext("That's a good enough reason. Get out of here. I'll clean things up.") +sm.setPlayerAsSpeaker() +sm.sendSay("Roo-D, you should come with me. If Gelimer finds out you helped...") +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("I'm not built for combat. I'd only slow you down.") +sm.setPlayerAsSpeaker() +sm.sendSay("That's exactly why I can't leave you here by yourself. You're coming.") +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("...Fine, but we have to leave now!") + +sm.removeNpc(ROO_D_PEACEFUL) +sm.lockInGameUI(False) +sm.warpInstanceIn(931050970) diff --git a/scripts/field/xn_tuto_8_2.py b/scripts/field/xn_tuto_8_2.py new file mode 100755 index 0000000..9693004 --- /dev/null +++ b/scripts/field/xn_tuto_8_2.py @@ -0,0 +1,256 @@ +# Created by MechAviv +# Map ID :: 931050960 +# Classified Lab : Prison + +sm.sendDelay(1500) + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Excuse me... I have something to ask you.") + + +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/2", 900, 700, 50, 0, -2, True, 0) +sm.sendDelay(810) + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("I'm not talking, you Black Wings scum!") + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("(This sensation is familiar, yet distant. I am sure I have met this woman before.)") + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("(And this dagger... Have I held it before?)") + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Umm, here.") + + +sm.showFieldEffect("xenon/knife", 0) +sm.sendDelay(4200) + + +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 900, 700, 50, 0, -2, True, 0) +sm.sendDelay(810) + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("My dagger!") + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Tell me about this weapon. Does it hold special powers? Where did you get it?") + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Why do you want to know, Black Wing?") + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("This item has caused a strange fluctuation in my memory circuits. Roo-D tells me it may have something to do with my past.") + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("What? I don't understand...") + + +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 1200, 700, 50, 0, -2, True, 0) +sm.sendDelay(1200) + + +sm.setSpeakerID(2159384) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Wait, you said you recognize this dagger? Could you be...") + +OBJECT_1 = sm.sendNpcController(2159381, 1200, 180) +sm.showNpcSpecialActionByObjectId(OBJECT_1, "summon", 0) +sm.moveNpcByObjectId(OBJECT_1, True, 350, 100) +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("#h0#, #h0#!") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Gelimer is coming back! Did she tell you anything?") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("No, nothing. And the... glitch earlier will not return to my mind.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Too bad... I was hoping that would trigger your memory.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("My memory? What are you talking about Roo-D?") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("No time to explain now, #h0#. This might be your last chance. You need to join this lady and get out of here! Otherwise, Gelimer's going to erase what's left of your memory.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("He would erase my memory?") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("Look, I know you're confused, but I made a promise to keep you safe!") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Promise? With who?") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("With you...") + + +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 1200, 700, 50, 0, -2, True, 0) +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 1200, 0, -120, -2, -2, False, 0) +sm.sendDelay(1200) + + +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 32 00 00 00 FF 00 00 00 00 +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("Look, you came to me, before Gelimer took your memories. You wanted to leave! I know you don't remember that now, but you have to trust me.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I've acted like Gelimer's loyal underling for a long time now, but today is our chance.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I'm sure this lady is from your past. I could see it in your eyes.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("You have to get out of here, before you lose what little memory you have left.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("That flash before... was that a memory of my past?") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I don't know, but you don't have time to think about it now. Gelimer is coming back here now, and when he gets here, he'll wipe your memory and hurt that woman. You need to think about what you want...") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I want to find my memories again.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I-I don't even know why, but I know I want to protect her.") + + +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg0/1", 1200, 700, 50, 0, -2, True, 0) +sm.sendDelay(900) + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("That's a good enough reason. Get out of here. I'll clean things up.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Roo-D, you should come with me. If Gelimer finds out you helped...") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("I'm not built for combat. I'd only slow you down.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("That's exactly why I can't leave you here by yourself. You're coming.") + + +sm.setSpeakerID(2159381) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("...Fine, but we have to leave now!") + + +sm.curNodeEventEnd(True) +sm.warp(931050970, 0) diff --git a/scripts/field/xn_tuto_9_0.py b/scripts/field/xn_tuto_9_0.py new file mode 100755 index 0000000..9da7cb6 --- /dev/null +++ b/scripts/field/xn_tuto_9_0.py @@ -0,0 +1,35 @@ +# Classified Lab : Corridor ; Xenon Intro Escort Stage + +ROO_D_AGGRESIVE = 2159381 +CLAUDINE_ARM_SLING = 2159384 + +sm.lockInGameUI(True) +sm.removeEscapeButton() + +sm.forcedInput(2) +sm.sendDelay(30) + +sm.forcedInput(0) +sm.spawnNpc(CLAUDINE_ARM_SLING, -1601, 32) +sm.flipNpcByTemplateId(CLAUDINE_ARM_SLING, False) +sm.spawnNpc(ROO_D_AGGRESIVE, -1714, 32) +sm.moveNpcByTemplateId(ROO_D_AGGRESIVE, False, 15, 100) + +sm.setSpeakerID(ROO_D_AGGRESIVE) +sm.sendSay("This corridor leads to the Silo, and outside. We're going to run into a lot of Guard Robots on the way.") +sm.setPlayerAsSpeaker() +sm.sendSay("I will handle them. Don't worry.") +sm.setSpeakerID(CLAUDINE_ARM_SLING) +sm.sendSay("I'm afraid I'm not going to be much use in a fight with this injured arm... Are you sure about this?") +sm.setPlayerAsSpeaker() +sm.sendSay("Let's give it a try.") + +# TODO: spawn Mobs, six robots through map + +sm.moveNpcByTemplateId(CLAUDINE_ARM_SLING, False, 2100, 100) +sm.moveNpcByTemplateId(ROO_D_AGGRESIVE, False, 2100, 100) + +sm.lockInGameUI(False) + +sm.invokeAfterDelay(60000, "removeNpc", CLAUDINE_ARM_SLING) +sm.invokeAfterDelay(60000, "removeNpc", ROO_D_AGGRESIVE) diff --git a/scripts/field/xn_tuto_logo.py b/scripts/field/xn_tuto_logo.py new file mode 100755 index 0000000..330435f --- /dev/null +++ b/scripts/field/xn_tuto_logo.py @@ -0,0 +1,9 @@ +# # Hidden Street : Logo - Black Field used for Xenon Logo + +job = sm.getChr().getJob() +if job == 3002: # Xenon Beginner Job ID + sm.lockInGameUI(True) + sm.showScene("Effect.wz/Direction12.img", "XenonTutorial", "SceneLogo") + sm.invokeAfterDelay(9000, "warpInstanceIn", 931050900, 0) + sm.invokeAfterDelay(7000, "showFadeTransition", 0, 500, 1500) + sm.invokeAfterDelay(9000, "lockInGameUI", False) \ No newline at end of file diff --git a/scripts/field/zakum_summon_normal.py b/scripts/field/zakum_summon_normal.py new file mode 100755 index 0000000..43d9d89 --- /dev/null +++ b/scripts/field/zakum_summon_normal.py @@ -0,0 +1,10 @@ +sm.spawnMob(8800002, -54, 86, False) +#sm.showZakumPlatforms() + +for i in range(8): + sm.spawnMob(8800003 + i, -54, 86, False) + +if sm.waitForMobDeath(8800002): + sm.killMobs() + sm.dispose() + diff --git a/scripts/item/141060000_fishing.py b/scripts/item/141060000_fishing.py new file mode 100755 index 0000000..cc9c16a --- /dev/null +++ b/scripts/item/141060000_fishing.py @@ -0,0 +1,28 @@ +# Barbara's Fishing Kit (2431796) | Used during Riena Strait Quest Line + +smallfish = 4030027 +bigfish = 4030028 +randomInt = sm.getRandomIntBelow(3) + +if not sm.getFieldID() == 141060000: + sm.setSpeakerID(1510007) # Nora + sm.sendSayOkay("#b(Barbara said there was a great place to fish, just north of her house.)") + sm.dispose() +else: + sm.setSpeakerID(1510006) # Helmsman Tanya + + if randomInt == 0: # Big Fish Caught + sm.sendNext("#bNavigator, You caught #v"+ str(bigfish) +"##t"+ str(bigfish) +"#!") + sm.setSpeakerID(1510007) # Nora + sm.sendNext("#bGreat job!") + sm.giveItem(bigfish) + + elif randomInt == 1:# Small Fish Caught + sm.sendNext("#bYou caught #v"+ str(smallfish) +"##t"+ str(smallfish) +"#...") + sm.setSpeakerID(1510007) # Nora + sm.sendNext("#bI'm afraid this fish is too small for Barbara\r\n\r\nWe'll set it free.") + + elif randomInt == 2:# Nothing Caught + sm.sendNext("#bYou caught nothing..") + sm.setSpeakerID(1510007) # Nora + sm.sendNext("#bThat's too bad, nothing..\r\n\r\nLet's try again!") \ No newline at end of file diff --git a/scripts/item/5040004.py b/scripts/item/5040004.py new file mode 100755 index 0000000..a488d8f --- /dev/null +++ b/scripts/item/5040004.py @@ -0,0 +1 @@ +# id 5040004 (Hyper Teleport Rock), field 450001100 diff --git a/scripts/item/cash_5680260.py b/scripts/item/cash_5680260.py new file mode 100755 index 0000000..049ee90 --- /dev/null +++ b/scripts/item/cash_5680260.py @@ -0,0 +1,7 @@ +if sm.canHold(5000605) and sm.canHold(2120000): + sm.giveItem(5000605) + sm.giveItem(2120000, 1000) + sm.consumeItem(5680260) +else: + sm.setSpeakerID(1540809) + sm.sendSayOkay("Please make room in your inventory.") \ No newline at end of file diff --git a/scripts/item/cash_5680343.py b/scripts/item/cash_5680343.py new file mode 100755 index 0000000..20d5d1b --- /dev/null +++ b/scripts/item/cash_5680343.py @@ -0,0 +1,5 @@ +# Star Damage Skin +success = sm.addDamageSkin(5680343) +if success: + sm.chat("The Star Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(5680343) diff --git a/scripts/item/cash_5680382.py b/scripts/item/cash_5680382.py new file mode 100755 index 0000000..7fafcfd --- /dev/null +++ b/scripts/item/cash_5680382.py @@ -0,0 +1,4 @@ +# 5680382 - Epic Potential Scroll 50% Coupon + +sm.giveItem(2049708, 1) # Movement only within account +sm.consumeItem(5680382) diff --git a/scripts/item/cash_5680395.py b/scripts/item/cash_5680395.py new file mode 100755 index 0000000..4ba00ab --- /dev/null +++ b/scripts/item/cash_5680395.py @@ -0,0 +1,5 @@ +# Scorching Heat Damage Skin +success = sm.addDamageSkin(5680395) +if success: + sm.chat("The Scorching Heat Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(5680395) diff --git a/scripts/item/cash_5680474.py b/scripts/item/cash_5680474.py new file mode 100755 index 0000000..cbfe950 --- /dev/null +++ b/scripts/item/cash_5680474.py @@ -0,0 +1,5 @@ +if sm.canHold(2048310): + sm.giveItem(2048310) + sm.consumeItem(parentID) +else: + sm.sendSayOkay("Please make more room") \ No newline at end of file diff --git a/scripts/item/consume_02431768.py b/scripts/item/consume_02431768.py new file mode 100755 index 0000000..9d2a000 --- /dev/null +++ b/scripts/item/consume_02431768.py @@ -0,0 +1,13 @@ +# id 2431768 (Schoolboys' Note), field 101072200 +sm.createQuestWithQRValue(32158, "male=1") +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1500029) # Schoolboys' Note +sm.sendNext("#b#eI've hidden my secrets under the bookshelves. Don't get caught snooping around!#n#k") +sm.setParam(17) +sm.sendSay("Secrets under the bookshelves? I'd better go ask #bCootie#k about these.") +sm.startQuest(32133) +sm.startQuest(32134) +sm.setQRValue(32133, "1") +sm.updateQRValue(32133, False) +sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_02431769.py b/scripts/item/consume_02431769.py new file mode 100755 index 0000000..8d67ee7 --- /dev/null +++ b/scripts/item/consume_02431769.py @@ -0,0 +1,16 @@ +# id 2431769 (Schoolgirls' Note), field 101072700 +sm.createQuestWithQRValue(32158, "female=1;male=1") +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1500030) # Schoolgirls' Note +sm.sendNext("There are lots of pretty former students, but none of them hold a candle to me.") +sm.setParam(17) +sm.sendSay("...This is all useless kid stuff! How many more notes do I have to read?") +sm.setParam(5) +sm.sendNext("There are lots of pretty former students, but none of them hold a candle to me.") +sm.setParam(17) +sm.sendSay("...This is all useless kid stuff! How many more notes do I have to read?") +sm.startQuest(32134) +sm.setQRValue(32134, "1") +sm.updateQRValue(32134, False) +sm.consumeItem() diff --git a/scripts/item/consume_2020002.py b/scripts/item/consume_2020002.py new file mode 100755 index 0000000..e6aa020 --- /dev/null +++ b/scripts/item/consume_2020002.py @@ -0,0 +1,10 @@ +# Cake | (2020002) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cake' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cake' mount.") +sm.dispose() diff --git a/scripts/item/consume_2022455.py b/scripts/item/consume_2022455.py new file mode 100755 index 0000000..21f1f27 --- /dev/null +++ b/scripts/item/consume_2022455.py @@ -0,0 +1,10 @@ +# Happy New Year! | (2022455) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Happy New Year!' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Happy New Year!' mount.") +sm.dispose() diff --git a/scripts/item/consume_2210092.py b/scripts/item/consume_2210092.py new file mode 100755 index 0000000..e56b3a2 --- /dev/null +++ b/scripts/item/consume_2210092.py @@ -0,0 +1,10 @@ +# The Decapatruck | (2210092) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'The Decapatruck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'The Decapatruck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2350000.py b/scripts/item/consume_2350000.py new file mode 100755 index 0000000..393f411 --- /dev/null +++ b/scripts/item/consume_2350000.py @@ -0,0 +1,3 @@ +chr.getUser().addCharacterSlots(1) +chr.chatMessage("Your character slots have been increased by 1!") +sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2430050.py b/scripts/item/consume_2430050.py new file mode 100755 index 0000000..1267680 --- /dev/null +++ b/scripts/item/consume_2430050.py @@ -0,0 +1,10 @@ +# Balrog Mount Coupon | (2430050) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430071.py b/scripts/item/consume_2430071.py new file mode 100755 index 0000000..4ed1584 --- /dev/null +++ b/scripts/item/consume_2430071.py @@ -0,0 +1,9 @@ +randomInt = sm.getRandomIntBelow(1) +if randomInt == 0 and not sm.hasItem(4032616): + sm.giveItem(4032616) + sm.systemMessage("You've retrieved a Mirror of Insight from the shattered Opalescent Glass Marble.") + sm.avatarOriented("Effect/OnUserEff.img/itemEffect/quest/2430071") +else: + sm.systemMessage("The Opalescent Glass Marble has shattered. Nothing is inside.") + sm.avatarOriented("Effect/OnUserEff.img/itemEffect/quest/2430071") +sm.consumeItem(2430071) \ No newline at end of file diff --git a/scripts/item/consume_2430073.py b/scripts/item/consume_2430073.py new file mode 100755 index 0000000..a67969a --- /dev/null +++ b/scripts/item/consume_2430073.py @@ -0,0 +1,10 @@ +# Lion (15-Day) | (2430073) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Lion' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Lion' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430076.py b/scripts/item/consume_2430076.py new file mode 100755 index 0000000..4ec0f43 --- /dev/null +++ b/scripts/item/consume_2430076.py @@ -0,0 +1,10 @@ +# Red Truck (15-Day) | (2430076) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Red Truck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Red Truck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430080.py b/scripts/item/consume_2430080.py new file mode 100755 index 0000000..7b9575c --- /dev/null +++ b/scripts/item/consume_2430080.py @@ -0,0 +1,10 @@ +# Shinjo 20-Day Coupon | (2430080) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Shinjo' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Shinjo' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430091.py b/scripts/item/consume_2430091.py new file mode 100755 index 0000000..089ec51 --- /dev/null +++ b/scripts/item/consume_2430091.py @@ -0,0 +1,10 @@ +# Nightmare Coupon | (2430091) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nightmare' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nightmare' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430101.py b/scripts/item/consume_2430101.py new file mode 100755 index 0000000..b479604 --- /dev/null +++ b/scripts/item/consume_2430101.py @@ -0,0 +1,10 @@ +# Pink Bear Hot-Air Ballon Mount Coupon | (2430101) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hot-Air Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hot-Air Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430112.py b/scripts/item/consume_2430112.py new file mode 100755 index 0000000..9213976 --- /dev/null +++ b/scripts/item/consume_2430112.py @@ -0,0 +1,22 @@ +# Miracle Cube Fragment + +FRAGMENT = 2430112 +POT_SCROLL = 2049401 +ADV_POT_SCROLL = 2049400 + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= 10: + if sm.canHold(ADV_POT_SCROLL): + sm.giveItem(ADV_POT_SCROLL) + sm.consumeItem(FRAGMENT, 10) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +elif q >= 5: + if sm.canHold(POT_SCROLL): + sm.giveItem(POT_SCROLL) + sm.consumeItem(FRAGMENT, 5) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least 5 fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2430115.py b/scripts/item/consume_2430115.py new file mode 100755 index 0000000..ff6244f --- /dev/null +++ b/scripts/item/consume_2430115.py @@ -0,0 +1,22 @@ +# Dimensional pass | (2430115) + +from net.swordie.ms.enums import WeatherEffNoticeType + +DIMENSIONAL_PASS_COUNT = "DimensionalPassCount" + +#increment pass count +if field.hasProperty(DIMENSIONAL_PASS_COUNT): + field.setProperty(DIMENSIONAL_PASS_COUNT, field.getProperty(DIMENSIONAL_PASS_COUNT) + 1) +else: + field.setProperty(DIMENSIONAL_PASS_COUNT, 1); + +#Display how many passes the party has collected +sm.invokeForParty("chatScript","Your party has collected " + str(field.getProperty(DIMENSIONAL_PASS_COUNT)) + " passes in total." ) + +#Check if 20 passes is reached +if field.hasProperty(DIMENSIONAL_PASS_COUNT): + if field.getProperty(DIMENSIONAL_PASS_COUNT) == 20: + #show message that stage is finished + sm.invokeForParty("showWeatherNotice", "All of the passes have been gathered. Proceed to the next stage by going through the gate.", WeatherEffNoticeType.LudibriumPQ, 10000) + sm.invokeForParty("showFieldEffect", "quest/party/clear") + sm.showObjectFieldEffect("gate") \ No newline at end of file diff --git a/scripts/item/consume_2430117.py b/scripts/item/consume_2430117.py new file mode 100755 index 0000000..86877f5 --- /dev/null +++ b/scripts/item/consume_2430117.py @@ -0,0 +1,10 @@ +# Lion (1-year) | (2430117) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Lion' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Lion' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430118.py b/scripts/item/consume_2430118.py new file mode 100755 index 0000000..a25a2cd --- /dev/null +++ b/scripts/item/consume_2430118.py @@ -0,0 +1,10 @@ +# Red Truck (1-year) | (2430118) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Red Truck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Red Truck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430135.py b/scripts/item/consume_2430135.py new file mode 100755 index 0000000..6b97da4 --- /dev/null +++ b/scripts/item/consume_2430135.py @@ -0,0 +1,10 @@ +# OS4 Shuttle Driving License | (2430135) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'OS4 Shuttle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'OS4 Shuttle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430136.py b/scripts/item/consume_2430136.py new file mode 100755 index 0000000..612519a --- /dev/null +++ b/scripts/item/consume_2430136.py @@ -0,0 +1,10 @@ +# Owl 30-Day Coupon | (2430136) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Owl' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Owl' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430137.py b/scripts/item/consume_2430137.py new file mode 100755 index 0000000..b9ea023 --- /dev/null +++ b/scripts/item/consume_2430137.py @@ -0,0 +1,10 @@ +# Owl 1-Year Coupon | (2430137) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Owl ' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Owl ' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430145.py b/scripts/item/consume_2430145.py new file mode 100755 index 0000000..03429ac --- /dev/null +++ b/scripts/item/consume_2430145.py @@ -0,0 +1,10 @@ +# Mothership 30-Day Coupon | (2430145) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mothership' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mothership' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430147.py b/scripts/item/consume_2430147.py new file mode 100755 index 0000000..6b04942 --- /dev/null +++ b/scripts/item/consume_2430147.py @@ -0,0 +1,10 @@ +# OS3A Robot 30-Day Coupon | (2430147) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'OS3A Machine' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'OS3A Machine' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430148.py b/scripts/item/consume_2430148.py new file mode 100755 index 0000000..a486afd --- /dev/null +++ b/scripts/item/consume_2430148.py @@ -0,0 +1,10 @@ +# OS3A Robot 1-Year Coupon | (2430148) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'OS3A Machine' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'OS3A Machine' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430182.py b/scripts/item/consume_2430182.py new file mode 100755 index 0000000..0bb5d1b --- /dev/null +++ b/scripts/item/consume_2430182.py @@ -0,0 +1,15 @@ +import random + +al = chr.getAvatarData().getAvatarLook() +oldFace = al.getFace() +oldHair = al.getHair() + +while al.getHair() == oldHair: + hair = random.randint(30000, 50000) + sm.changeCharacterLook(hair) + +sm.changeCharacterLook(10) + +while al.getFace() == oldFace: + face = random.randint(20000, 29000) + sm.changeCharacterLook(face) \ No newline at end of file diff --git a/scripts/item/consume_2430200.py b/scripts/item/consume_2430200.py new file mode 100755 index 0000000..85f1ae9 --- /dev/null +++ b/scripts/item/consume_2430200.py @@ -0,0 +1,9 @@ +itemID = [4000660,4000661,4000662,4000663,2430200] + +for i in range(len(itemID)): + if not sm.hasItem(itemID[i]): + sm.sendSayOkay("You are missing some of the items required to make the #bDream Key") + sm.dispose() +for i in range(len(itemID)): + sm.consumeItem(itemID[i]) +sm.giveItem(4032923) \ No newline at end of file diff --git a/scripts/item/consume_2430201.py b/scripts/item/consume_2430201.py new file mode 100755 index 0000000..36cb751 --- /dev/null +++ b/scripts/item/consume_2430201.py @@ -0,0 +1,10 @@ +# Giant Bunny Riding Skill 60-Day Coupon | (2430201) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bunny Buddy Buggy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bunny Buddy Buggy' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430202.py b/scripts/item/consume_2430202.py new file mode 100755 index 0000000..281b6a1 --- /dev/null +++ b/scripts/item/consume_2430202.py @@ -0,0 +1,10 @@ +# Giant Bunny Riding Skill 15-Day Coupon | (2430202) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bunny Buddy Buggy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bunny Buddy Buggy' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430203.py b/scripts/item/consume_2430203.py new file mode 100755 index 0000000..1fe5625 --- /dev/null +++ b/scripts/item/consume_2430203.py @@ -0,0 +1,10 @@ +# Giant Bunny Riding Skill 30-Day Coupon | (2430203) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bunny Buddy Buggy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bunny Buddy Buggy' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430220.py b/scripts/item/consume_2430220.py new file mode 100755 index 0000000..d7e8f16 --- /dev/null +++ b/scripts/item/consume_2430220.py @@ -0,0 +1,5 @@ +from net.swordie.ms.enums import Stat + + +sm.addStat(Stat.fatigue, -30) +sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2430228.py b/scripts/item/consume_2430228.py new file mode 100755 index 0000000..c2a19ad --- /dev/null +++ b/scripts/item/consume_2430228.py @@ -0,0 +1,10 @@ +# Tiny Bunny Riding Skill 60-Day Coupon | (2430228) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bunny' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bunny' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430258.py b/scripts/item/consume_2430258.py new file mode 100755 index 0000000..bef5046 --- /dev/null +++ b/scripts/item/consume_2430258.py @@ -0,0 +1,10 @@ +# Law Officer 1 Year Use Coupon | (2430258) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Law Officer' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Law Officer' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430259.py b/scripts/item/consume_2430259.py new file mode 100755 index 0000000..08afa59 --- /dev/null +++ b/scripts/item/consume_2430259.py @@ -0,0 +1,10 @@ +# Balrog Mount Coupon | (2430259) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430264.py b/scripts/item/consume_2430264.py new file mode 100755 index 0000000..7760470 --- /dev/null +++ b/scripts/item/consume_2430264.py @@ -0,0 +1,10 @@ +# Witch's Broomstick Mount Coupon | (2430264) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Witch's Broomstick' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Witch's Broomstick' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430266.py b/scripts/item/consume_2430266.py new file mode 100755 index 0000000..f29228d --- /dev/null +++ b/scripts/item/consume_2430266.py @@ -0,0 +1,10 @@ +# Chicken Mount Coupon | (2430266) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Chicken' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Chicken' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430271.py b/scripts/item/consume_2430271.py new file mode 100755 index 0000000..3abf507 --- /dev/null +++ b/scripts/item/consume_2430271.py @@ -0,0 +1,10 @@ +# Owl Mount Coupon | (2430271) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Owl' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Owl' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430272.py b/scripts/item/consume_2430272.py new file mode 100755 index 0000000..8e90079 --- /dev/null +++ b/scripts/item/consume_2430272.py @@ -0,0 +1,10 @@ +# Low Rider Mount Coupon | (2430272) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Low Rider' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Low Rider' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430293.py b/scripts/item/consume_2430293.py new file mode 100755 index 0000000..104dd21 --- /dev/null +++ b/scripts/item/consume_2430293.py @@ -0,0 +1,10 @@ +# Nadeshiko Fly High Coupon | (2430293) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nadeshiko Fly High' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nadeshiko Fly High' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430294.py b/scripts/item/consume_2430294.py new file mode 100755 index 0000000..e327a76 --- /dev/null +++ b/scripts/item/consume_2430294.py @@ -0,0 +1,10 @@ +# Nadeshiko Fly High 90-Day Coupon | (2430294) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nadeshiko Fly High' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nadeshiko Fly High' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430295.py b/scripts/item/consume_2430295.py new file mode 100755 index 0000000..dc22d69 --- /dev/null +++ b/scripts/item/consume_2430295.py @@ -0,0 +1,10 @@ +# Pegasus Coupon | (2430295) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pegasus' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pegasus' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430296.py b/scripts/item/consume_2430296.py new file mode 100755 index 0000000..ac5c7ca --- /dev/null +++ b/scripts/item/consume_2430296.py @@ -0,0 +1,10 @@ +# Pegasus 90-Day Coupon | (2430296) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pegasus' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pegasus' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430297.py b/scripts/item/consume_2430297.py new file mode 100755 index 0000000..c143a85 --- /dev/null +++ b/scripts/item/consume_2430297.py @@ -0,0 +1,10 @@ +# Dragon Coupon | (2430297) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Dragon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Dragon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430298.py b/scripts/item/consume_2430298.py new file mode 100755 index 0000000..fae0939 --- /dev/null +++ b/scripts/item/consume_2430298.py @@ -0,0 +1,10 @@ +# Dragon 90-Day Coupon | (2430298) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Dragon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Dragon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430299.py b/scripts/item/consume_2430299.py new file mode 100755 index 0000000..e4742ca --- /dev/null +++ b/scripts/item/consume_2430299.py @@ -0,0 +1,10 @@ +# Magic Broom Coupon | (2430299) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Magic Broom' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Magic Broom' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430300.py b/scripts/item/consume_2430300.py new file mode 100755 index 0000000..15a1899 --- /dev/null +++ b/scripts/item/consume_2430300.py @@ -0,0 +1,10 @@ +# Magic Broom 90-Day Coupon | (2430300) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Magic Broom' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Magic Broom' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430301.py b/scripts/item/consume_2430301.py new file mode 100755 index 0000000..00ab21f --- /dev/null +++ b/scripts/item/consume_2430301.py @@ -0,0 +1,10 @@ +# Cloud Coupon | (2430301) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cloud' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cloud' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430302.py b/scripts/item/consume_2430302.py new file mode 100755 index 0000000..8bbe97f --- /dev/null +++ b/scripts/item/consume_2430302.py @@ -0,0 +1,10 @@ +# Cloud 90-Day Coupon | (2430302) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cloud' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cloud' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430303.py b/scripts/item/consume_2430303.py new file mode 100755 index 0000000..1d0083f --- /dev/null +++ b/scripts/item/consume_2430303.py @@ -0,0 +1,10 @@ +# Knight's Chariot Coupon | (2430303) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Knight's Chariot' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Knight's Chariot' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430304.py b/scripts/item/consume_2430304.py new file mode 100755 index 0000000..ec3c509 --- /dev/null +++ b/scripts/item/consume_2430304.py @@ -0,0 +1,10 @@ +# Knight's Chariot 90-Day Coupon | (2430304) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Knight's Chariot' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Knight's Chariot' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430305.py b/scripts/item/consume_2430305.py new file mode 100755 index 0000000..9fee0ab --- /dev/null +++ b/scripts/item/consume_2430305.py @@ -0,0 +1,10 @@ +# Nightmare Coupon | (2430305) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nightmare' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nightmare' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430306.py b/scripts/item/consume_2430306.py new file mode 100755 index 0000000..b2b1e73 --- /dev/null +++ b/scripts/item/consume_2430306.py @@ -0,0 +1,10 @@ +# Nightmare 90-Day Coupon | (2430306) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nightmare' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nightmare' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430307.py b/scripts/item/consume_2430307.py new file mode 100755 index 0000000..234e276 --- /dev/null +++ b/scripts/item/consume_2430307.py @@ -0,0 +1,10 @@ +# Balrog Coupon | (2430307) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430308.py b/scripts/item/consume_2430308.py new file mode 100755 index 0000000..88db5b2 --- /dev/null +++ b/scripts/item/consume_2430308.py @@ -0,0 +1,10 @@ +# Balrog 90-Day Coupon | (2430308) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430309.py b/scripts/item/consume_2430309.py new file mode 100755 index 0000000..e04651d --- /dev/null +++ b/scripts/item/consume_2430309.py @@ -0,0 +1,10 @@ +# Invisible Balrog Coupon | (2430309) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Invisible Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Invisible Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430310.py b/scripts/item/consume_2430310.py new file mode 100755 index 0000000..661218e --- /dev/null +++ b/scripts/item/consume_2430310.py @@ -0,0 +1,10 @@ +# Invisible Balrog 90-Day Coupon | (2430310) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Invisible Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Invisible Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430311.py b/scripts/item/consume_2430311.py new file mode 100755 index 0000000..c4b6091 --- /dev/null +++ b/scripts/item/consume_2430311.py @@ -0,0 +1,10 @@ +# Owl Coupon | (2430311) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Owl' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Owl' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430312.py b/scripts/item/consume_2430312.py new file mode 100755 index 0000000..d76d37c --- /dev/null +++ b/scripts/item/consume_2430312.py @@ -0,0 +1,10 @@ +# Owl 90-Day Coupon | (2430312) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Owl' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Owl' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430313.py b/scripts/item/consume_2430313.py new file mode 100755 index 0000000..008c0fe --- /dev/null +++ b/scripts/item/consume_2430313.py @@ -0,0 +1,10 @@ +# Helicopter Coupon | (2430313) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Helicopter' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Helicopter' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430314.py b/scripts/item/consume_2430314.py new file mode 100755 index 0000000..db86eae --- /dev/null +++ b/scripts/item/consume_2430314.py @@ -0,0 +1,10 @@ +# Helicopter 90-Day Coupon | (2430314) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Helicopter' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Helicopter' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430315.py b/scripts/item/consume_2430315.py new file mode 100755 index 0000000..97e8a26 --- /dev/null +++ b/scripts/item/consume_2430315.py @@ -0,0 +1,10 @@ +# Nina's Pentacle Coupon | (2430315) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nina's Pentacle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nina's Pentacle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430316.py b/scripts/item/consume_2430316.py new file mode 100755 index 0000000..7c7751b --- /dev/null +++ b/scripts/item/consume_2430316.py @@ -0,0 +1,10 @@ +# Nina's Pentacle 90-Day Coupon | (2430316) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nina's Pentacle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nina's Pentacle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430317.py b/scripts/item/consume_2430317.py new file mode 100755 index 0000000..a5d4161 --- /dev/null +++ b/scripts/item/consume_2430317.py @@ -0,0 +1,10 @@ +# Frog Coupon | (2430317) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Frog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Frog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430319.py b/scripts/item/consume_2430319.py new file mode 100755 index 0000000..2898178 --- /dev/null +++ b/scripts/item/consume_2430319.py @@ -0,0 +1,10 @@ +# Turtle Coupon | (2430319) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Turtle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Turtle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430320.py b/scripts/item/consume_2430320.py new file mode 100755 index 0000000..fc5eaa6 --- /dev/null +++ b/scripts/item/consume_2430320.py @@ -0,0 +1,10 @@ +# Turtle 90-Day Coupon | (2430320) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Turtle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Turtle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430323.py b/scripts/item/consume_2430323.py new file mode 100755 index 0000000..ef38918 --- /dev/null +++ b/scripts/item/consume_2430323.py @@ -0,0 +1,10 @@ +# Jr. Tank Coupon | (2430323) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Jr. Tank' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Jr. Tank' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430324.py b/scripts/item/consume_2430324.py new file mode 100755 index 0000000..e779ece --- /dev/null +++ b/scripts/item/consume_2430324.py @@ -0,0 +1,10 @@ +# Highway Patrol Car (4 Passengers) | (2430324) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Highway Patrol Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Highway Patrol Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430325.py b/scripts/item/consume_2430325.py new file mode 100755 index 0000000..dd684e5 --- /dev/null +++ b/scripts/item/consume_2430325.py @@ -0,0 +1,10 @@ +# Viking Coupon | (2430325) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Spirit Viking' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Spirit Viking' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430326.py b/scripts/item/consume_2430326.py new file mode 100755 index 0000000..64b09f5 --- /dev/null +++ b/scripts/item/consume_2430326.py @@ -0,0 +1,10 @@ +# Viking 90-Day Coupon | (2430326) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Spirit Viking' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Spirit Viking' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430335.py b/scripts/item/consume_2430335.py new file mode 100755 index 0000000..a931434 --- /dev/null +++ b/scripts/item/consume_2430335.py @@ -0,0 +1,10 @@ +# Rex's Hyena Coupon | (2430335) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rex's Hyena' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rex's Hyena' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430336.py b/scripts/item/consume_2430336.py new file mode 100755 index 0000000..11384cd --- /dev/null +++ b/scripts/item/consume_2430336.py @@ -0,0 +1,10 @@ +# Rex's Hyena 90-Day Coupon | (2430336) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rex's Hyena' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rex's Hyena' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430339.py b/scripts/item/consume_2430339.py new file mode 100755 index 0000000..76bdb75 --- /dev/null +++ b/scripts/item/consume_2430339.py @@ -0,0 +1,10 @@ +# Low Rider Coupon | (2430339) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Low Rider' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Low Rider' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430340.py b/scripts/item/consume_2430340.py new file mode 100755 index 0000000..c487478 --- /dev/null +++ b/scripts/item/consume_2430340.py @@ -0,0 +1,10 @@ +# Low Rider 90-Day Coupon | (2430340) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Low Rider' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Low Rider' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430341.py b/scripts/item/consume_2430341.py new file mode 100755 index 0000000..5343d09 --- /dev/null +++ b/scripts/item/consume_2430341.py @@ -0,0 +1,10 @@ +# Napoleon Coupon | (2430341) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Napolean' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Napolean' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430342.py b/scripts/item/consume_2430342.py new file mode 100755 index 0000000..8368036 --- /dev/null +++ b/scripts/item/consume_2430342.py @@ -0,0 +1,10 @@ +# Napoleon 90-Day Coupon | (2430342) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Napolean' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Napolean' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430345.py b/scripts/item/consume_2430345.py new file mode 100755 index 0000000..32e7e1b --- /dev/null +++ b/scripts/item/consume_2430345.py @@ -0,0 +1,10 @@ +# Highway Patrol Car (4 Passengers) 90-day Coupon | (2430345) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Highway Patrol Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Highway Patrol Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430354.py b/scripts/item/consume_2430354.py new file mode 100755 index 0000000..4cb58d1 --- /dev/null +++ b/scripts/item/consume_2430354.py @@ -0,0 +1,10 @@ +# Giant Rabbit Coupon | (2430354) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Giant Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Giant Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430355.py b/scripts/item/consume_2430355.py new file mode 100755 index 0000000..82a9448 --- /dev/null +++ b/scripts/item/consume_2430355.py @@ -0,0 +1,10 @@ +# Giant Rabbit 90-Day Coupon | (2430355) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Giant Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Giant Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430356.py b/scripts/item/consume_2430356.py new file mode 100755 index 0000000..5be4bdf --- /dev/null +++ b/scripts/item/consume_2430356.py @@ -0,0 +1,10 @@ +# Small Rabbit Coupon | (2430356) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Small Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Small Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430357.py b/scripts/item/consume_2430357.py new file mode 100755 index 0000000..6d35561 --- /dev/null +++ b/scripts/item/consume_2430357.py @@ -0,0 +1,10 @@ +# Small Rabbit 90-Day Coupon | (2430357) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Small Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Small Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430358.py b/scripts/item/consume_2430358.py new file mode 100755 index 0000000..80af6da --- /dev/null +++ b/scripts/item/consume_2430358.py @@ -0,0 +1,10 @@ +# Rabbit Rickshaw Coupon | (2430358) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rabbit Rickshaw' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rabbit Rickshaw' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430359.py b/scripts/item/consume_2430359.py new file mode 100755 index 0000000..0d83b69 --- /dev/null +++ b/scripts/item/consume_2430359.py @@ -0,0 +1,10 @@ +# Rabbit Rickshaw 90-Day Coupon | (2430359) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rabbit Rickshaw' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rabbit Rickshaw' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430360.py b/scripts/item/consume_2430360.py new file mode 100755 index 0000000..1904cb3 --- /dev/null +++ b/scripts/item/consume_2430360.py @@ -0,0 +1,10 @@ +# Chicken Coupon | (2430360) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Chicken' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Chicken' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430361.py b/scripts/item/consume_2430361.py new file mode 100755 index 0000000..5a69c2c --- /dev/null +++ b/scripts/item/consume_2430361.py @@ -0,0 +1,10 @@ +# Chicken 90-Day Coupon | (2430361) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Chicken' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Chicken' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430367.py b/scripts/item/consume_2430367.py new file mode 100755 index 0000000..ebcea55 --- /dev/null +++ b/scripts/item/consume_2430367.py @@ -0,0 +1,10 @@ +# Law Officer 3 Day Use Coupon | (2430367) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Law Officer' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Law Officer' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430403.py b/scripts/item/consume_2430403.py new file mode 100755 index 0000000..03b0419 --- /dev/null +++ b/scripts/item/consume_2430403.py @@ -0,0 +1,6 @@ +if sm.canHold(5211067): + sm.giveItem(5211067, 1, 1) # 1 Hour + sm.consumeItem(2430403) +else: + sm.setSpeakerID(1540809) + sm.sendSayOkay("Please make room in your inventory.") \ No newline at end of file diff --git a/scripts/item/consume_2430404.py b/scripts/item/consume_2430404.py new file mode 100755 index 0000000..12a379a --- /dev/null +++ b/scripts/item/consume_2430404.py @@ -0,0 +1,6 @@ +if sm.canHold(5211068): + sm.giveItem(5211068, 1, 1) # 1 Hour + sm.consumeItem(2430404) +else: + sm.setSpeakerID(1540809) + sm.sendSayOkay("Please make room in your inventory.") \ No newline at end of file diff --git a/scripts/item/consume_2430481.py b/scripts/item/consume_2430481.py new file mode 100755 index 0000000..1c8dbd3 --- /dev/null +++ b/scripts/item/consume_2430481.py @@ -0,0 +1,16 @@ +# Super Memory Cube Fragment + +REWARD = 5062000 # miracle cube +QUANTITY = 10 +FRAGMENT = 2430481 + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= QUANTITY: + if sm.canHold(REWARD): + sm.giveItem(REWARD) + sm.consumeItem(FRAGMENT, QUANTITY) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least " + str(QUANTITY) + " fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2430507.py b/scripts/item/consume_2430507.py new file mode 100755 index 0000000..23eb139 --- /dev/null +++ b/scripts/item/consume_2430507.py @@ -0,0 +1,10 @@ +# Rabbit Rickshaw Coupon | (2430507) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rabbit Rickshaw' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rabbit Rickshaw' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430508.py b/scripts/item/consume_2430508.py new file mode 100755 index 0000000..5ecf542 --- /dev/null +++ b/scripts/item/consume_2430508.py @@ -0,0 +1,10 @@ +# Giant Rabbit Coupon | (2430508) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Giant Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Giant Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430521.py b/scripts/item/consume_2430521.py new file mode 100755 index 0000000..542e9fd --- /dev/null +++ b/scripts/item/consume_2430521.py @@ -0,0 +1,10 @@ +# Small Rabbit 30-Day Coupon | (2430521) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Small Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Small Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430550.py b/scripts/item/consume_2430550.py new file mode 100755 index 0000000..8df43d0 --- /dev/null +++ b/scripts/item/consume_2430550.py @@ -0,0 +1,10 @@ +# Witch's Broomstick Mount Permanent Coupon | (2430550) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Witch's Broomstick' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Witch's Broomstick' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430555.py b/scripts/item/consume_2430555.py new file mode 100755 index 0000000..de5469e --- /dev/null +++ b/scripts/item/consume_2430555.py @@ -0,0 +1,10 @@ +# Maximus Rider (1 Day) | (2430555) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Maximus' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Maximus' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430556.py b/scripts/item/consume_2430556.py new file mode 100755 index 0000000..57e95d9 --- /dev/null +++ b/scripts/item/consume_2430556.py @@ -0,0 +1,10 @@ +# Maximus Mount 15 day coupon | (2430556) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Maximus' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Maximus' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430557.py b/scripts/item/consume_2430557.py new file mode 100755 index 0000000..ea1a620 --- /dev/null +++ b/scripts/item/consume_2430557.py @@ -0,0 +1,10 @@ +# Maximus Mount 1 year coupon | (2430557) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Maximus' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Maximus' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430666.py b/scripts/item/consume_2430666.py new file mode 100755 index 0000000..f1eeb5b --- /dev/null +++ b/scripts/item/consume_2430666.py @@ -0,0 +1,10 @@ +# Cretaceous Mount 1-year Coupon | (2430666) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cretaceous' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cretaceous' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430667.py b/scripts/item/consume_2430667.py new file mode 100755 index 0000000..176de27 --- /dev/null +++ b/scripts/item/consume_2430667.py @@ -0,0 +1,10 @@ +# Cretaceous Mount 15-day Coupon | (2430667) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cretaceous' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cretaceous' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430692.py b/scripts/item/consume_2430692.py new file mode 100755 index 0000000..1765acd --- /dev/null +++ b/scripts/item/consume_2430692.py @@ -0,0 +1,10 @@ +# Consumes Nebulite Box. +from net.swordie.ms.constants.ItemConstants import getRandomNebulite +from net.swordie.ms.enums import InvType + +if sm.hasItem(2430692) and sm.getEmptyInventorySlots(InvType.INSTALL): + sm.consumeItem(2430692) + sm.giveItem(getRandomNebulite()) +else: + sm.dispose() + diff --git a/scripts/item/consume_2430717.py b/scripts/item/consume_2430717.py new file mode 100755 index 0000000..28afef3 --- /dev/null +++ b/scripts/item/consume_2430717.py @@ -0,0 +1,10 @@ +# Balrog Mount | (2430717) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430750.py b/scripts/item/consume_2430750.py new file mode 100755 index 0000000..c3bacd7 --- /dev/null +++ b/scripts/item/consume_2430750.py @@ -0,0 +1,10 @@ +# Unlucky Buddy Mount 1-Year Coupon | (2430750) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Unlucky Buddy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Unlucky Buddy' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430751.py b/scripts/item/consume_2430751.py new file mode 100755 index 0000000..edca006 --- /dev/null +++ b/scripts/item/consume_2430751.py @@ -0,0 +1,10 @@ +# Unlucky Buddy Mount 15-Day Coupon | (2430751) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Unlucky Buddy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Unlucky Buddy' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430768.py b/scripts/item/consume_2430768.py new file mode 100755 index 0000000..dc81b0a --- /dev/null +++ b/scripts/item/consume_2430768.py @@ -0,0 +1,11 @@ +from net.swordie.ms.enums import InvType + +sm.setSpeakerID(9062004) +if sm.getSlotsLeftToAddByInvType(1) <= 0: + sm.sendSayOkay("You have already maxed your slots.") + sm.dispose() +if (sm.sendAskYesNo("#rYou may add up to " + str(sm.getSlotsLeftToAddByInvType(1)) + + " slots to your inventory, would you like to continue?")): + sm.addInventorySlotsByInvType(sm.getSlotsLeftToAddByInvType(1), 1) + sm.consumeItem() + sm.dispose() \ No newline at end of file diff --git a/scripts/item/consume_2430769.py b/scripts/item/consume_2430769.py new file mode 100755 index 0000000..7d47df3 --- /dev/null +++ b/scripts/item/consume_2430769.py @@ -0,0 +1,11 @@ +from net.swordie.ms.enums import InvType + +sm.setSpeakerID(9062004) +if sm.getSlotsLeftToAddByInvType(2) <= 0: + sm.sendSayOkay("You have already maxed your slots.") + sm.dispose() +if (sm.sendAskYesNo("#rYou may add up to " + str(sm.getSlotsLeftToAddByInvType(2)) + + " slots to your inventory, would you like to continue?")): + sm.addInventorySlotsByInvType(sm.getSlotsLeftToAddByInvType(2), 2) + sm.consumeItem() + sm.dispose() \ No newline at end of file diff --git a/scripts/item/consume_2430770.py b/scripts/item/consume_2430770.py new file mode 100755 index 0000000..a2e3f47 --- /dev/null +++ b/scripts/item/consume_2430770.py @@ -0,0 +1,10 @@ +from net.swordie.ms.enums import InvType + +sm.setSpeakerID(9062004) +if sm.getExpandableSlots(InvType.INSTALL) <= 0: + sm.sendSayOkay("You have already maxed your slots.") + sm.dispose() +if (sm.sendAskYesNo("#rYou may add up to " + str(sm.getExpandableSlots(InvType.INSTALL)) + + " slots to your inventory, would you like to continue?")): + sm.addInventorySlotsByInvType(8, 3) + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2430771.py b/scripts/item/consume_2430771.py new file mode 100755 index 0000000..f6e372e --- /dev/null +++ b/scripts/item/consume_2430771.py @@ -0,0 +1,10 @@ +from net.swordie.ms.enums import InvType + +sm.setSpeakerID(9062004) +if sm.getExpandableSlots(InvType.ETC) <= 0: + sm.sendSayOkay("You have already maxed your slots.") + sm.dispose() +if (sm.sendAskYesNo("#rYou may add up to " + str(sm.getExpandableSlots(InvType.ETC)) + + " slots to your inventory, would you like to continue?")): + sm.addInventorySlotsByInvType(8, 4) + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2430872.py b/scripts/item/consume_2430872.py new file mode 100755 index 0000000..4e0ec14 --- /dev/null +++ b/scripts/item/consume_2430872.py @@ -0,0 +1,6 @@ +# Moth-Eaten Scroll | (2430872) +if sm.hasQuest(25540): + sm.consumeItem(2430872) + sm.setQuestEx(25539, "read", "1") + sm.systemMessage("You read the Moth-Eaten Scroll.") + sm.chatScript("You read the Moth-Eaten Scroll.") diff --git a/scripts/item/consume_2430874.py b/scripts/item/consume_2430874.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/item/consume_2430875.py b/scripts/item/consume_2430875.py new file mode 100755 index 0000000..82aeb2f --- /dev/null +++ b/scripts/item/consume_2430875.py @@ -0,0 +1,10 @@ +# Honey Train Mount 7-Day Coupon | (2430875) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bee Train' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bee Train' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430876.py b/scripts/item/consume_2430876.py new file mode 100755 index 0000000..58d81df --- /dev/null +++ b/scripts/item/consume_2430876.py @@ -0,0 +1,10 @@ +# Honey Train Mount 30-Day Coupon | (2430876) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bee Train' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bee Train' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430877.py b/scripts/item/consume_2430877.py new file mode 100755 index 0000000..78b41b3 --- /dev/null +++ b/scripts/item/consume_2430877.py @@ -0,0 +1,10 @@ +# Honey Train Mount 1-Year Coupon | (2430877) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bee Train' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bee Train' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430878.py b/scripts/item/consume_2430878.py new file mode 100755 index 0000000..e913452 --- /dev/null +++ b/scripts/item/consume_2430878.py @@ -0,0 +1,10 @@ +# Orange Mushroom Surprise | (2430878) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Honey Train' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Honey Train' mount.") +sm.dispose() diff --git a/scripts/item/consume_2430915.py b/scripts/item/consume_2430915.py new file mode 100755 index 0000000..eed292f --- /dev/null +++ b/scripts/item/consume_2430915.py @@ -0,0 +1,16 @@ +# Bonus Potential Cube Fragment + +FRAGMENT = 2430915 +QUANTITY = 10 +REWARD = 2048310 # 60% bonus potential scroll + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= QUANTITY: + if sm.canHold(REWARD): + sm.giveItem(REWARD) + sm.consumeItem(FRAGMENT, QUANTITY) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least " + str(QUANTITY) + " fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2430922.py b/scripts/item/consume_2430922.py new file mode 100755 index 0000000..1be3e22 --- /dev/null +++ b/scripts/item/consume_2430922.py @@ -0,0 +1,10 @@ +# Sengoku Mount Coupon | (2430922) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hoshotsuki Kage' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hoshotsuki Kage' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431123.py b/scripts/item/consume_2431123.py new file mode 100755 index 0000000..840d4e7 --- /dev/null +++ b/scripts/item/consume_2431123.py @@ -0,0 +1,10 @@ +# The Decapatruck | (2431123) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'The Decapatruck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'The Decapatruck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431127.py b/scripts/item/consume_2431127.py new file mode 100755 index 0000000..7e465d4 --- /dev/null +++ b/scripts/item/consume_2431127.py @@ -0,0 +1,12 @@ +sm.setSpeakerID(9000138) + +items = [4033605,4033604,4033603,4033602,2020013,2022176,2022003,2431174,2433808,4001832,4310015,4021031,2502000,2430692,2022740,2022741,2022742,2022743,2022744,2022745,2022794,2022795,2022796,2022797,2022798,2022799] +rand = sm.getRandomIntBelow(len(items)) + +if not sm.canHold(4033605) and sm.canHold(2020013): + sm.sendSayOkay("Please make sure you have room in your inventory.") + +else: + item = items[rand] + sm.consumeItem(2431127) + sm.giveItem(item) \ No newline at end of file diff --git a/scripts/item/consume_2431128.py b/scripts/item/consume_2431128.py new file mode 100755 index 0000000..770bc52 --- /dev/null +++ b/scripts/item/consume_2431128.py @@ -0,0 +1,12 @@ +sm.setSpeakerID(9000138) + +items = [4033606,4033607,4033608,4033609,2020013,2022176,2022003,2431174,2433808,4001832,4310015,4021031,2502000,2430692,2022740,2022741,2022742,2022743,2022744,2022745,2022794,2022795,2022796,2022797,2022798,2022799] +rand = sm.getRandomIntBelow(len(items)) + +if not sm.canHold(4033606) and sm.canHold(2020013): + sm.sendSayOkay("Please make sure you have room in your inventory.") + +else: + item = items[rand] + sm.consumeItem(2431128) + sm.giveItem(item) \ No newline at end of file diff --git a/scripts/item/consume_2431151.py b/scripts/item/consume_2431151.py new file mode 100755 index 0000000..7d2cb4f --- /dev/null +++ b/scripts/item/consume_2431151.py @@ -0,0 +1,3 @@ +# Old Return To Town Scroll | (Part of the Root Abyss Quest Line) +sm.warp(105000000, 0) # Sleepywood +sm.consumeItem(parentID) diff --git a/scripts/item/consume_2431174.py b/scripts/item/consume_2431174.py new file mode 100755 index 0000000..63f047f --- /dev/null +++ b/scripts/item/consume_2431174.py @@ -0,0 +1,5 @@ +rand = 1 + sm.getRandomIntBelow(100) +sm.getChr().addHonorExp(rand) +sm.consumeItem(2431174) +sm.chat("You have gained "+str(rand)+" honor experience.") +sm.dispose() diff --git a/scripts/item/consume_2431267.py b/scripts/item/consume_2431267.py new file mode 100755 index 0000000..9515c5b --- /dev/null +++ b/scripts/item/consume_2431267.py @@ -0,0 +1,10 @@ +# Onyx Jaguar Mount Permanent Coupon | (2431267) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Onyx Jaguar' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Onyx Jaguar' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431268.py b/scripts/item/consume_2431268.py new file mode 100755 index 0000000..e2cd5b4 --- /dev/null +++ b/scripts/item/consume_2431268.py @@ -0,0 +1,10 @@ +# Onyx Jaguar Mount Permanent Coupon | (2431268) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Onyx Jaguar' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Onyx Jaguar' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431353.py b/scripts/item/consume_2431353.py new file mode 100755 index 0000000..c48e84c --- /dev/null +++ b/scripts/item/consume_2431353.py @@ -0,0 +1,10 @@ +# Black Wyvern Permanent Mount Coupon | (2431353) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431362.py b/scripts/item/consume_2431362.py new file mode 100755 index 0000000..41313f5 --- /dev/null +++ b/scripts/item/consume_2431362.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have this mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2431415.py b/scripts/item/consume_2431415.py new file mode 100755 index 0000000..474793d --- /dev/null +++ b/scripts/item/consume_2431415.py @@ -0,0 +1,10 @@ +# Mystical Butterflies Permanent Coupon | (2431415) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mystical Butterflies' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mystical Butterflies' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431422.py b/scripts/item/consume_2431422.py new file mode 100755 index 0000000..4ced4e0 --- /dev/null +++ b/scripts/item/consume_2431422.py @@ -0,0 +1,10 @@ +# Wyvern Grump Mount Permanent Coupon | (2431422) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Wyvern Grump' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Wyvern Grump' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431424.py b/scripts/item/consume_2431424.py new file mode 100755 index 0000000..319169b --- /dev/null +++ b/scripts/item/consume_2431424.py @@ -0,0 +1,10 @@ +# Snowflake Throne Mount Coupon | (2431424) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Snowflake Throne' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Snowflake Throne' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431426.py b/scripts/item/consume_2431426.py new file mode 100755 index 0000000..46149eb --- /dev/null +++ b/scripts/item/consume_2431426.py @@ -0,0 +1,10 @@ +# Moon and Stars Mount Coupon | (2431426) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Moon and Stars' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Moon and Stars' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431445.py b/scripts/item/consume_2431445.py new file mode 100755 index 0000000..fd1ec3f --- /dev/null +++ b/scripts/item/consume_2431445.py @@ -0,0 +1,16 @@ +# Memory Cube Fragment + +FRAGMENT = 2431445 +QUANTITY = 10 +REWARD = 2049406 # 100% chance + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= QUANTITY: + if sm.canHold(REWARD): + sm.giveItem(REWARD) + sm.consumeItem(FRAGMENT, QUANTITY) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least " + str(QUANTITY) + " fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2431456.py b/scripts/item/consume_2431456.py new file mode 100755 index 0000000..be45fa4 --- /dev/null +++ b/scripts/item/consume_2431456.py @@ -0,0 +1,10 @@ +# Black Wyvern | (2431456) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431457.py b/scripts/item/consume_2431457.py new file mode 100755 index 0000000..22b4c6b --- /dev/null +++ b/scripts/item/consume_2431457.py @@ -0,0 +1,10 @@ +# Black Wyvern | (2431457) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431473.py b/scripts/item/consume_2431473.py new file mode 100755 index 0000000..d9b0617 --- /dev/null +++ b/scripts/item/consume_2431473.py @@ -0,0 +1,10 @@ +# Permanent Pink Bean Balloon Mount Coupon | (2431473) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Pink Bean Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Pink Bean Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431474.py b/scripts/item/consume_2431474.py new file mode 100755 index 0000000..efaa843 --- /dev/null +++ b/scripts/item/consume_2431474.py @@ -0,0 +1,10 @@ +# Permanent Black Bean Balloon Mount Coupon | (2431474) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Black Bean Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Black Bean Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431490.py b/scripts/item/consume_2431490.py new file mode 100755 index 0000000..c16bb3e --- /dev/null +++ b/scripts/item/consume_2431490.py @@ -0,0 +1,10 @@ +# Double Green Frog Mount 30-Day Coupon | (2431490) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Double Green Frog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Double Green Frog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431496.py b/scripts/item/consume_2431496.py new file mode 100755 index 0000000..b871295 --- /dev/null +++ b/scripts/item/consume_2431496.py @@ -0,0 +1,10 @@ +# Witch's Broomstick Mount 30-Day Coupon | (2431496) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Witch's Broomstick' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Witch's Broomstick' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431498.py b/scripts/item/consume_2431498.py new file mode 100755 index 0000000..1c9ed2a --- /dev/null +++ b/scripts/item/consume_2431498.py @@ -0,0 +1,10 @@ +# Nimbus Cloud Mount 30-Day Coupon | (2431498) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nimbus Cloud' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nimbus Cloud' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431504.py b/scripts/item/consume_2431504.py new file mode 100755 index 0000000..baf6a30 --- /dev/null +++ b/scripts/item/consume_2431504.py @@ -0,0 +1,10 @@ +# Owl Mount 30-Day Coupon | (2431504) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Owl' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Owl' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431505.py b/scripts/item/consume_2431505.py new file mode 100755 index 0000000..d7f5b31 --- /dev/null +++ b/scripts/item/consume_2431505.py @@ -0,0 +1,10 @@ +# Low Rider Mount 30-Day Coupon | (2431505) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Low Rider' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Low Rider' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431528.py b/scripts/item/consume_2431528.py new file mode 100755 index 0000000..313e358 --- /dev/null +++ b/scripts/item/consume_2431528.py @@ -0,0 +1,10 @@ +# Snowflake Throne Mount 30-Day Coupon | (2431528) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Snowflake Throne' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Snowflake Throne' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431542.py b/scripts/item/consume_2431542.py new file mode 100755 index 0000000..d80c194 --- /dev/null +++ b/scripts/item/consume_2431542.py @@ -0,0 +1,10 @@ +# Moon and Stars Mount Coupon | (2431542) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Moon and Stars' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Moon and Stars' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431655.py b/scripts/item/consume_2431655.py new file mode 100755 index 0000000..1a618f2 --- /dev/null +++ b/scripts/item/consume_2431655.py @@ -0,0 +1,9 @@ +# Spirit of Rock Soul +souls = [2591089, 2591090, 2591091, 2591092, 2591093, 2591094, 2591095] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431655, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431655, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431656.py b/scripts/item/consume_2431656.py new file mode 100755 index 0000000..9666e71 --- /dev/null +++ b/scripts/item/consume_2431656.py @@ -0,0 +1,9 @@ +# Prison Guard Ani Soul +souls = [2591096, 2591097, 2591098, 2591099, 2591100, 2591101, 2591102] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431656, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431656, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431657.py b/scripts/item/consume_2431657.py new file mode 100755 index 0000000..0f197fa --- /dev/null +++ b/scripts/item/consume_2431657.py @@ -0,0 +1,9 @@ +# Dragon Rider Soul +souls = [2591103, 2591104, 2591105, 2591106, 2591107, 2591108, 2591109] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431657, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431657, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431658.py b/scripts/item/consume_2431658.py new file mode 100755 index 0000000..c174d6c --- /dev/null +++ b/scripts/item/consume_2431658.py @@ -0,0 +1,9 @@ +# Rex Soul Soul +souls = [2591110, 2591111, 2591112, 2591113, 2591114, 2591115, 2591116] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431658, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431658, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431659.py b/scripts/item/consume_2431659.py new file mode 100755 index 0000000..8837d87 --- /dev/null +++ b/scripts/item/consume_2431659.py @@ -0,0 +1,9 @@ +# Mu Gong Soul +souls = [2591117, 2591118, 2591119, 2591120, 2591121, 2591122, 2591123] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431659, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431659, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431660.py b/scripts/item/consume_2431660.py new file mode 100755 index 0000000..6984834 --- /dev/null +++ b/scripts/item/consume_2431660.py @@ -0,0 +1,9 @@ +# Balrog Soul +souls = [2591124, 2591125, 2591126, 2591127, 2591128, 2591129, 2591130, 2591130, 2591085] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431660, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431660, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431661.py b/scripts/item/consume_2431661.py new file mode 100755 index 0000000..9c67c8d --- /dev/null +++ b/scripts/item/consume_2431661.py @@ -0,0 +1,9 @@ +# pinkbean Soul +souls = [2591087, 2591140, 2591141, 2591142, 2591143, 2591144, 2591145, 2591146, 2591147] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431661, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431661, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431662.py b/scripts/item/consume_2431662.py new file mode 100755 index 0000000..4c276a9 --- /dev/null +++ b/scripts/item/consume_2431662.py @@ -0,0 +1,9 @@ +# Von Leon Soul +souls = [2591132, 2591133, 2591134, 2591135, 2591136, 2591137, 2591138, 2591139, 2591086] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431662, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431662, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431709.py b/scripts/item/consume_2431709.py new file mode 100755 index 0000000..eb3171d --- /dev/null +++ b/scripts/item/consume_2431709.py @@ -0,0 +1,9 @@ +# Xerxes Soul +souls = [2591164, 2591165, 2591166, 2591167, 2591168, 2591169, 2591170] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431709, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431709, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431710.py b/scripts/item/consume_2431710.py new file mode 100755 index 0000000..753deb5 --- /dev/null +++ b/scripts/item/consume_2431710.py @@ -0,0 +1,9 @@ +# Zakum Soul +souls = [2591171, 2591172, 2591173, 2591174, 2591175, 2591176, 2591177, 2591178, 2591163] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431710, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431710, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431711.py b/scripts/item/consume_2431711.py new file mode 100755 index 0000000..063a8af --- /dev/null +++ b/scripts/item/consume_2431711.py @@ -0,0 +1,9 @@ +# Cygnus Soul +souls = [2591088, 2591179, 2591180, 2591181, 2591182, 2591183, 2591184, 2591185, 2591186] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431711, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431711, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431733.py b/scripts/item/consume_2431733.py new file mode 100755 index 0000000..b0cfb4f --- /dev/null +++ b/scripts/item/consume_2431733.py @@ -0,0 +1,10 @@ +# Kupo's Ride Coupon | (2431733) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Kupo's Ride' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Kupo's Ride' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431745.py b/scripts/item/consume_2431745.py new file mode 100755 index 0000000..aa07f6b --- /dev/null +++ b/scripts/item/consume_2431745.py @@ -0,0 +1,10 @@ +# Kupo's Ride Permanent Coupon | (2431745) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Kupo's Ride' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Kupo's Ride' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431752.py b/scripts/item/consume_2431752.py new file mode 100755 index 0000000..fc9eee1 --- /dev/null +++ b/scripts/item/consume_2431752.py @@ -0,0 +1,9 @@ +# Ephenia Soul +souls = [2591203, 2591204, 2591205, 2591206, 2591207, 2591208, 2591209] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431752, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431752, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431753.py b/scripts/item/consume_2431753.py new file mode 100755 index 0000000..55d5cb0 --- /dev/null +++ b/scripts/item/consume_2431753.py @@ -0,0 +1,9 @@ +# Arkarium Soul +souls = [2591210, 2591211, 2591212, 2591213, 2591214, 2591215, 2591216, 2591217, 2591202] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431753, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431753, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431764.py b/scripts/item/consume_2431764.py new file mode 100755 index 0000000..0f2e59a --- /dev/null +++ b/scripts/item/consume_2431764.py @@ -0,0 +1,10 @@ +# Lord Pirate Prisoner Mount Coupon | (2431764) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Lord Pirate Prisoner' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Lord Pirate Prisoner' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431765.py b/scripts/item/consume_2431765.py new file mode 100755 index 0000000..680bdbd --- /dev/null +++ b/scripts/item/consume_2431765.py @@ -0,0 +1,10 @@ +# Shaken Wooden Horse Mount Coupon | (2431765) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Shaken Wooden Horse' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Shaken Wooden Horse' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431797.py b/scripts/item/consume_2431797.py new file mode 100755 index 0000000..013b536 --- /dev/null +++ b/scripts/item/consume_2431797.py @@ -0,0 +1,10 @@ +# Unicorn Mount Permanent Coupon | (2431797) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Unicorn' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Unicorn' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431799.py b/scripts/item/consume_2431799.py new file mode 100755 index 0000000..ad5fd30 --- /dev/null +++ b/scripts/item/consume_2431799.py @@ -0,0 +1,10 @@ +# Dragon Mount Permanent Coupon | (2431799) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Dragon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Dragon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431835.py b/scripts/item/consume_2431835.py new file mode 100755 index 0000000..f82376d --- /dev/null +++ b/scripts/item/consume_2431835.py @@ -0,0 +1,6 @@ +# Mystic Stolen Potion (2431835) + +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.heal(False) +sm.giveCTS(CharacterTemporaryStat.PAD, 30, -parentID, 180) # Item's rOption are negative as opposed to Skills diff --git a/scripts/item/consume_2431850.py b/scripts/item/consume_2431850.py new file mode 100755 index 0000000..64a1cb2 --- /dev/null +++ b/scripts/item/consume_2431850.py @@ -0,0 +1,6 @@ +#Mystic Stolen Boss (2431850) + +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.heal(False) +sm.giveCTS(CharacterTemporaryStat.PAD, 30, -parentID, 180) # Item's rOption are negative as opposed to Skills diff --git a/scripts/item/consume_2431855.py b/scripts/item/consume_2431855.py new file mode 100755 index 0000000..bafbd95 --- /dev/null +++ b/scripts/item/consume_2431855.py @@ -0,0 +1,6 @@ +# First Explorer Gift Box | (2431855) +sm.giveItem(2000013, 50) +sm.giveItem(2000014, 50) +sm.giveItem(1072850) +sm.giveItem(1052646) +sm.consumeItem(parentID) \ No newline at end of file diff --git a/scripts/item/consume_2431856.py b/scripts/item/consume_2431856.py new file mode 100755 index 0000000..720a46a --- /dev/null +++ b/scripts/item/consume_2431856.py @@ -0,0 +1,10 @@ +# Hog | (2431856) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431893.py b/scripts/item/consume_2431893.py new file mode 100755 index 0000000..7a7d08b --- /dev/null +++ b/scripts/item/consume_2431893.py @@ -0,0 +1,22 @@ +# Red Cube Fragment + +FRAGMENT = 2431893 +POT_SCROLL = 2049401 +ADV_POT_SCROLL = 2049400 + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= 10: + if sm.canHold(ADV_POT_SCROLL): + sm.giveItem(ADV_POT_SCROLL) + sm.consumeItem(FRAGMENT, 10) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +elif q >= 5: + if sm.canHold(POT_SCROLL): + sm.giveItem(POT_SCROLL) + sm.consumeItem(FRAGMENT, 5) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least 5 fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2431894.py b/scripts/item/consume_2431894.py new file mode 100755 index 0000000..0209302 --- /dev/null +++ b/scripts/item/consume_2431894.py @@ -0,0 +1,16 @@ +# Black Cube Fragment + +REWARD = 5062009 # red cube +QUANTITY = 10 +FRAGMENT = 2431894 + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= QUANTITY: + if sm.canHold(REWARD): + sm.giveItem(REWARD) + sm.consumeItem(FRAGMENT, QUANTITY) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least " + str(QUANTITY) + " fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2431895.py b/scripts/item/consume_2431895.py new file mode 100755 index 0000000..cc90ba1 --- /dev/null +++ b/scripts/item/consume_2431895.py @@ -0,0 +1,9 @@ +# Pianus Soul +souls = [2591234, 2591235, 2591236, 2591237, 2591238, 2591239, 2591240] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431895, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431895, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431896.py b/scripts/item/consume_2431896.py new file mode 100755 index 0000000..9cc9eac --- /dev/null +++ b/scripts/item/consume_2431896.py @@ -0,0 +1,9 @@ +# Hilla Soul +souls = [2591241, 2591242, 2591243, 2591244, 2591245, 2591246, 2591247, 2591248, 2591233] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431896, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431896, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431898.py b/scripts/item/consume_2431898.py new file mode 100755 index 0000000..66f482b --- /dev/null +++ b/scripts/item/consume_2431898.py @@ -0,0 +1,10 @@ +# Bouncing Car Mount Mount Permanent Coupon | (2431898) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bouncing Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bouncing Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431914.py b/scripts/item/consume_2431914.py new file mode 100755 index 0000000..0f3c0f2 --- /dev/null +++ b/scripts/item/consume_2431914.py @@ -0,0 +1,10 @@ +# Small Rabbit 30-Day Coupon | (2431914) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Small Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Small Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431915.py b/scripts/item/consume_2431915.py new file mode 100755 index 0000000..8536554 --- /dev/null +++ b/scripts/item/consume_2431915.py @@ -0,0 +1,10 @@ +# Pelican Mount Permanent Coupon | (2431915) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pelican' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pelican' mount.") +sm.dispose() diff --git a/scripts/item/consume_2431963.py b/scripts/item/consume_2431963.py new file mode 100755 index 0000000..8595b65 --- /dev/null +++ b/scripts/item/consume_2431963.py @@ -0,0 +1,9 @@ +# Black Slime Soul +souls = [2591265, 2591266, 2591267, 2591268, 2591269, 2591270, 2591271] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431963, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431963, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431964.py b/scripts/item/consume_2431964.py new file mode 100755 index 0000000..fe46f2e --- /dev/null +++ b/scripts/item/consume_2431964.py @@ -0,0 +1,9 @@ +# Magnus Soul +souls = [2591272, 2591273, 2591274, 2591275, 2591276, 2591277, 2591278, 2591279, 2591264] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2431964, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2431964, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2431965.py b/scripts/item/consume_2431965.py new file mode 100755 index 0000000..b2d6da7 --- /dev/null +++ b/scripts/item/consume_2431965.py @@ -0,0 +1,5 @@ +# Basic Damage Skin +success = sm.addDamageSkin(2431965) +if success: + sm.chat("The Basic Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2431965) diff --git a/scripts/item/consume_2431966.py b/scripts/item/consume_2431966.py new file mode 100755 index 0000000..049ae54 --- /dev/null +++ b/scripts/item/consume_2431966.py @@ -0,0 +1,5 @@ +# Digital Sunrise Damage Skin +success = sm.addDamageSkin(2431966) +if success: + sm.chat("The Digital Sunrise Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2431966) diff --git a/scripts/item/consume_2431967.py b/scripts/item/consume_2431967.py new file mode 100755 index 0000000..f5c9a57 --- /dev/null +++ b/scripts/item/consume_2431967.py @@ -0,0 +1,5 @@ +# Kritias Damage Skin +success = sm.addDamageSkin(2431967) +if success: + sm.chat("The Kritias Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2431967) diff --git a/scripts/item/consume_2432003.py b/scripts/item/consume_2432003.py new file mode 100755 index 0000000..be83613 --- /dev/null +++ b/scripts/item/consume_2432003.py @@ -0,0 +1,10 @@ +# Battle Flying Chair Mount Coupon | (2432003) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Battle Chair' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Battle Chair' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432006.py b/scripts/item/consume_2432006.py new file mode 100755 index 0000000..ca539d3 --- /dev/null +++ b/scripts/item/consume_2432006.py @@ -0,0 +1,10 @@ +# Battle Flying Chair Mount Coupon | (2432006) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Battle Chair' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Battle Chair' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432007.py b/scripts/item/consume_2432007.py new file mode 100755 index 0000000..737bce4 --- /dev/null +++ b/scripts/item/consume_2432007.py @@ -0,0 +1,10 @@ +# Hekaton's Fist Mount Coupon | (2432007) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hekaton's Fist' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hekaton's Fist' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432008.py b/scripts/item/consume_2432008.py new file mode 100755 index 0000000..059762e --- /dev/null +++ b/scripts/item/consume_2432008.py @@ -0,0 +1,10 @@ +# Hekaton's Fist Mount Coupon | (2432008) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hekaton's Fist' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hekaton's Fist' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432015.py b/scripts/item/consume_2432015.py new file mode 100755 index 0000000..809858c --- /dev/null +++ b/scripts/item/consume_2432015.py @@ -0,0 +1,10 @@ +# Red Sand Cloud Mount Coupon | (2432015) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Red Sandstorm' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Red Sandstorm' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432030.py b/scripts/item/consume_2432030.py new file mode 100755 index 0000000..d19fe25 --- /dev/null +++ b/scripts/item/consume_2432030.py @@ -0,0 +1,10 @@ +# Gargoyle Mount Permanent Coupon | (2432030) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Gargoyle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Gargoyle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432078.py b/scripts/item/consume_2432078.py new file mode 100755 index 0000000..be104d0 --- /dev/null +++ b/scripts/item/consume_2432078.py @@ -0,0 +1,10 @@ +# Hellhound Mount Permanent Coupon | (2432078) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hellhound' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hellhound' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432084.py b/scripts/item/consume_2432084.py new file mode 100755 index 0000000..3415748 --- /dev/null +++ b/scripts/item/consume_2432084.py @@ -0,0 +1,4 @@ +# Digitized Damage Skin +success = sm.addDamageSkin(2432084) +if success: + sm.chat("The Digitized Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432085.py b/scripts/item/consume_2432085.py new file mode 100755 index 0000000..c0d8f82 --- /dev/null +++ b/scripts/item/consume_2432085.py @@ -0,0 +1,10 @@ +# Dolphin Mount Permanent Coupon | (2432085) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Dolphin' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Dolphin' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432108.py b/scripts/item/consume_2432108.py new file mode 100755 index 0000000..8542c13 --- /dev/null +++ b/scripts/item/consume_2432108.py @@ -0,0 +1,10 @@ +# Knight's Chariot 90-Day Coupon | (2432108) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Knight's Chariot' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Knight's Chariot' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432131.py b/scripts/item/consume_2432131.py new file mode 100755 index 0000000..ea6b4e3 --- /dev/null +++ b/scripts/item/consume_2432131.py @@ -0,0 +1,5 @@ +# Party Quest Damage Skin +success = sm.addDamageSkin(2432131) +if success: + sm.chat("The Party Quest Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432131) diff --git a/scripts/item/consume_2432135.py b/scripts/item/consume_2432135.py new file mode 100755 index 0000000..0d4a4a4 --- /dev/null +++ b/scripts/item/consume_2432135.py @@ -0,0 +1,10 @@ +# Buddy Mount 30-Day Coupon | (2432135) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Buddy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Buddy' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432138.py b/scripts/item/consume_2432138.py new file mode 100755 index 0000000..661c2d5 --- /dev/null +++ b/scripts/item/consume_2432138.py @@ -0,0 +1,9 @@ +# Murgoth Soul +souls = [2591288, 2591289, 2591290, 2591291, 2591292, 2591293, 2591294, 2591295, 2591296] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2432138, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2432138, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2432151.py b/scripts/item/consume_2432151.py new file mode 100755 index 0000000..86a4219 --- /dev/null +++ b/scripts/item/consume_2432151.py @@ -0,0 +1,10 @@ +# Flying Bed Mount Permanent Coupon | (2432151) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Bed' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Bed' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432153.py b/scripts/item/consume_2432153.py new file mode 100755 index 0000000..0d7a0ad --- /dev/null +++ b/scripts/item/consume_2432153.py @@ -0,0 +1,5 @@ +# Hard Hitting Damage Skin +success = sm.addDamageSkin(2432153) +if success: + sm.chat("The Hard Hitting Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432153) diff --git a/scripts/item/consume_2432154.py b/scripts/item/consume_2432154.py new file mode 100755 index 0000000..e471570 --- /dev/null +++ b/scripts/item/consume_2432154.py @@ -0,0 +1,5 @@ +# Sweet Traditional Damage Skin +success = sm.addDamageSkin(2432154) +if success: + sm.chat("The Sweet Traditional Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432154) diff --git a/scripts/item/consume_2432167.py b/scripts/item/consume_2432167.py new file mode 100755 index 0000000..cbd0893 --- /dev/null +++ b/scripts/item/consume_2432167.py @@ -0,0 +1,10 @@ +# Vampire Phantom's Bat | (2432167) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Vampire Phantom's Bat' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Vampire Phantom's Bat' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432207.py b/scripts/item/consume_2432207.py new file mode 100755 index 0000000..71d4d39 --- /dev/null +++ b/scripts/item/consume_2432207.py @@ -0,0 +1,5 @@ +# Club Henesys Damage Skin +success = sm.addDamageSkin(2432207) +if success: + sm.chat("The Club Henesys Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432207) diff --git a/scripts/item/consume_2432218.py b/scripts/item/consume_2432218.py new file mode 100755 index 0000000..098530b --- /dev/null +++ b/scripts/item/consume_2432218.py @@ -0,0 +1,10 @@ +# Nina's Pentacle Mount Permanent Coupon | (2432218) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Nina's Pentacle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Nina's Pentacle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432242.py b/scripts/item/consume_2432242.py new file mode 100755 index 0000000..7a11568 --- /dev/null +++ b/scripts/item/consume_2432242.py @@ -0,0 +1,10 @@ +# The Decapatruck | (2432242) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'The Decapatruck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'The Decapatruck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432291.py b/scripts/item/consume_2432291.py new file mode 100755 index 0000000..b9b7e04 --- /dev/null +++ b/scripts/item/consume_2432291.py @@ -0,0 +1,10 @@ +# Skateboard Mount Permanent Coupon | (2432291) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Skateboard' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Skateboard' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432293.py b/scripts/item/consume_2432293.py new file mode 100755 index 0000000..20ee3a9 --- /dev/null +++ b/scripts/item/consume_2432293.py @@ -0,0 +1,10 @@ +# Pumpkin Carriage Mount Permanent Coupon | (2432293) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pumpkin Carriage' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pumpkin Carriage' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432295.py b/scripts/item/consume_2432295.py new file mode 100755 index 0000000..24434aa --- /dev/null +++ b/scripts/item/consume_2432295.py @@ -0,0 +1,10 @@ +# Vellum Mount Permanent Coupon | (2432295) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Vellum' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Vellum' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432309.py b/scripts/item/consume_2432309.py new file mode 100755 index 0000000..e8b6df2 --- /dev/null +++ b/scripts/item/consume_2432309.py @@ -0,0 +1,10 @@ +# Genie Mount Permanent Coupon | (2432309) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Genie' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Genie' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432316.py b/scripts/item/consume_2432316.py new file mode 100755 index 0000000..a8e4bcd --- /dev/null +++ b/scripts/item/consume_2432316.py @@ -0,0 +1,11 @@ +# Phantheon Return Scroll | (2432316) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +if sm.sendAskAccept("Want to go to Pantheon now?\r\n\r\n#r(You will be moved to Pantheon right away if you accept.)"): + sm.levelUntil(30) + + sm.warp(400000000, 0) + sm.startQuest(38028) + sm.completeQuest(38028) + sm.consumeItem(2432316, 1) + sm.dispose() diff --git a/scripts/item/consume_2432328.py b/scripts/item/consume_2432328.py new file mode 100755 index 0000000..94b4856 --- /dev/null +++ b/scripts/item/consume_2432328.py @@ -0,0 +1,10 @@ +# Naver Hat Mount 30-Day Coupon | (2432328) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Naver Hat' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Naver Hat' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432346.py b/scripts/item/consume_2432346.py new file mode 100755 index 0000000..a0268ff --- /dev/null +++ b/scripts/item/consume_2432346.py @@ -0,0 +1,8 @@ +sm.setSpeakerID(9062004) +if chr.getAccount().getTrunk().getSlotCount() >= 96: + sm.sendSayOkay("You have already maxed your slots.") + sm.dispose() +if (sm.sendAskYesNo("#rYou may add up to " + str((96-chr.getAccount().getTrunk().getSlotCount())) + + " slots to your inventory, would you like to continue?")): + sm.addStorageSlots(8) + sm.consumeItem(2432346) \ No newline at end of file diff --git a/scripts/item/consume_2432347.py b/scripts/item/consume_2432347.py new file mode 100755 index 0000000..54faad0 --- /dev/null +++ b/scripts/item/consume_2432347.py @@ -0,0 +1,10 @@ +# Neinheart Snowfield Permanent Mount Coupon | (2432347) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Neinheart Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Neinheart Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432348.py b/scripts/item/consume_2432348.py new file mode 100755 index 0000000..7bbabb4 --- /dev/null +++ b/scripts/item/consume_2432348.py @@ -0,0 +1,10 @@ +# Cygnus Snowfield Permanent Mount Coupon | (2432348) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cygnus Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cygnus Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432349.py b/scripts/item/consume_2432349.py new file mode 100755 index 0000000..32c4dea --- /dev/null +++ b/scripts/item/consume_2432349.py @@ -0,0 +1,10 @@ +# Orchid Snowfield Permanent Mount Coupon | (2432349) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Orchid Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Orchid Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432350.py b/scripts/item/consume_2432350.py new file mode 100755 index 0000000..67735e1 --- /dev/null +++ b/scripts/item/consume_2432350.py @@ -0,0 +1,10 @@ +# White Mage Snowfield 1-Day Mount Coupon | (2432350) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'White Mage Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'White Mage Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432351.py b/scripts/item/consume_2432351.py new file mode 100755 index 0000000..be1bec9 --- /dev/null +++ b/scripts/item/consume_2432351.py @@ -0,0 +1,10 @@ +# Hilla Snowfield Permanent Mount Coupon | (2432351) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hilla Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hilla Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432354.py b/scripts/item/consume_2432354.py new file mode 100755 index 0000000..3c6bb1c --- /dev/null +++ b/scripts/item/consume_2432354.py @@ -0,0 +1,5 @@ +# Merry Christmas Damage Skin +success = sm.addDamageSkin(2432354) +if success: + sm.chat("The Merry Christmas Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432354) diff --git a/scripts/item/consume_2432355.py b/scripts/item/consume_2432355.py new file mode 100755 index 0000000..a4ded50 --- /dev/null +++ b/scripts/item/consume_2432355.py @@ -0,0 +1,5 @@ +# Snow Blossom Damage Skin +success = sm.addDamageSkin(2432355) +if success: + sm.chat("The Snow Blossom Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432355) diff --git a/scripts/item/consume_2432359.py b/scripts/item/consume_2432359.py new file mode 100755 index 0000000..601df3e --- /dev/null +++ b/scripts/item/consume_2432359.py @@ -0,0 +1,10 @@ +# Archangel Michael Mount Permanent Coupon | (2432359) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Archangel Michael' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Archangel Michael' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432361.py b/scripts/item/consume_2432361.py new file mode 100755 index 0000000..5c6e31d --- /dev/null +++ b/scripts/item/consume_2432361.py @@ -0,0 +1,10 @@ +# Devil Lucifer Mount Permanent Coupon | (2432361) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Devil Lucifer' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Devil Lucifer' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432377.py b/scripts/item/consume_2432377.py new file mode 100755 index 0000000..cc74d07 --- /dev/null +++ b/scripts/item/consume_2432377.py @@ -0,0 +1,10 @@ +# Onyx Jaguar Mount Permanent Coupon | (2432377) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Onyx Jaguar' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Onyx Jaguar' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432379.py b/scripts/item/consume_2432379.py new file mode 100755 index 0000000..6911d7b --- /dev/null +++ b/scripts/item/consume_2432379.py @@ -0,0 +1,10 @@ +# Mystical Butterflies Permanent Coupon | (2432379) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mystical Butterflies' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mystical Butterflies' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432380.py b/scripts/item/consume_2432380.py new file mode 100755 index 0000000..9ed0141 --- /dev/null +++ b/scripts/item/consume_2432380.py @@ -0,0 +1,10 @@ +# Black Wyvern Permanent Mount Coupon | (2432380) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432381.py b/scripts/item/consume_2432381.py new file mode 100755 index 0000000..69f394f --- /dev/null +++ b/scripts/item/consume_2432381.py @@ -0,0 +1,10 @@ +# Permanent Pink Bean Balloon Mount Coupon | (2432381) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Pink Bean Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Pink Bean Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432382.py b/scripts/item/consume_2432382.py new file mode 100755 index 0000000..d6bda86 --- /dev/null +++ b/scripts/item/consume_2432382.py @@ -0,0 +1,10 @@ +# Permanent Black Bean Balloon Mount Coupon | (2432382) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Black Bean Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Black Bean Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432414.py b/scripts/item/consume_2432414.py new file mode 100755 index 0000000..de93faa --- /dev/null +++ b/scripts/item/consume_2432414.py @@ -0,0 +1,10 @@ +# Snowflake Throne Mount Coupon | (2432414) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Snowflake Throne' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Snowflake Throne' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432418.py b/scripts/item/consume_2432418.py new file mode 100755 index 0000000..c96ddfe --- /dev/null +++ b/scripts/item/consume_2432418.py @@ -0,0 +1,10 @@ +# BBQ Gigantic Rooster Mount 30-Day Coupon | (2432418) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'BBQ Gigantic Rooster' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'BBQ Gigantic Rooster' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432431.py b/scripts/item/consume_2432431.py new file mode 100755 index 0000000..0e71585 --- /dev/null +++ b/scripts/item/consume_2432431.py @@ -0,0 +1,10 @@ +# Dragon Knight Mount Permanent Coupon | (2432431) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Dragon Knight' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Dragon Knight' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432432.py b/scripts/item/consume_2432432.py new file mode 100755 index 0000000..7f82907 --- /dev/null +++ b/scripts/item/consume_2432432.py @@ -0,0 +1,10 @@ +# Dragon Knight Mount 90-Day Coupon | (2432432) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Dragon Knight' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Dragon Knight' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432449.py b/scripts/item/consume_2432449.py new file mode 100755 index 0000000..f433a84 --- /dev/null +++ b/scripts/item/consume_2432449.py @@ -0,0 +1,10 @@ +# Wing Boots Mount Permanent Coupon | (2432449) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Wing Boots' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Wing Boots' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432450.py b/scripts/item/consume_2432450.py new file mode 100755 index 0000000..a43b475 --- /dev/null +++ b/scripts/item/consume_2432450.py @@ -0,0 +1,10 @@ +# Wing Boots Mount 90-Day Coupon | (2432450) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Wing Boots' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Wing Boots' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432451.py b/scripts/item/consume_2432451.py new file mode 100755 index 0000000..6561c3b --- /dev/null +++ b/scripts/item/consume_2432451.py @@ -0,0 +1,10 @@ +# Planet B612 Permanent Riding Mount Coupon | (2432451) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Planet B612' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Planet B612' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432465.py b/scripts/item/consume_2432465.py new file mode 100755 index 0000000..b3f1130 --- /dev/null +++ b/scripts/item/consume_2432465.py @@ -0,0 +1,5 @@ +# Alicia Damage Skin +success = sm.addDamageSkin(2432465) +if success: + sm.chat("The Alicia Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432465) diff --git a/scripts/item/consume_2432479.py b/scripts/item/consume_2432479.py new file mode 100755 index 0000000..7f8f34c --- /dev/null +++ b/scripts/item/consume_2432479.py @@ -0,0 +1,5 @@ +# Dorothy Damage Skin +success = sm.addDamageSkin(2432479) +if success: + sm.chat("The Dorothy Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432479) diff --git a/scripts/item/consume_2432498.py b/scripts/item/consume_2432498.py new file mode 100755 index 0000000..a5646c5 --- /dev/null +++ b/scripts/item/consume_2432498.py @@ -0,0 +1,10 @@ +# Blue Flame Nightmare Permanent Coupon | (2432498) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Blue Flame Nightmare' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Blue Flame Nightmare' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432499.py b/scripts/item/consume_2432499.py new file mode 100755 index 0000000..c38be19 --- /dev/null +++ b/scripts/item/consume_2432499.py @@ -0,0 +1,10 @@ +# Blue Flame Nightmare 90-Day Coupon | (2432499) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Blue Flame Nightmare' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Blue Flame Nightmare' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432500.py b/scripts/item/consume_2432500.py new file mode 100755 index 0000000..2c0d0e4 --- /dev/null +++ b/scripts/item/consume_2432500.py @@ -0,0 +1,10 @@ +# Happy New Year! Permanent Coupon | (2432500) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Happy New Year!' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Happy New Year!' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432501.py b/scripts/item/consume_2432501.py new file mode 100755 index 0000000..360806e --- /dev/null +++ b/scripts/item/consume_2432501.py @@ -0,0 +1,10 @@ +# Happy New Year! 90-Day Coupon | (2432501) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Happy New Year!' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Happy New Year!' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432526.py b/scripts/item/consume_2432526.py new file mode 100755 index 0000000..1249fd9 --- /dev/null +++ b/scripts/item/consume_2432526.py @@ -0,0 +1,5 @@ +# Keyboard Warrior Damage Skin +success = sm.addDamageSkin(2432526) +if success: + sm.chat("The Keyboard Warrior Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432526) diff --git a/scripts/item/consume_2432527.py b/scripts/item/consume_2432527.py new file mode 100755 index 0000000..4b4986e --- /dev/null +++ b/scripts/item/consume_2432527.py @@ -0,0 +1,10 @@ +# Hot-Air Balloon O Mount 90-day Coupon | (2432527) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hot Air Balloon O' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hot Air Balloon O' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432528.py b/scripts/item/consume_2432528.py new file mode 100755 index 0000000..5cb4ddf --- /dev/null +++ b/scripts/item/consume_2432528.py @@ -0,0 +1,10 @@ +# Hot-Air Balloon X Mount 90-day Coupon | (2432528) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hot Air Balloon X' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hot Air Balloon X' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432532.py b/scripts/item/consume_2432532.py new file mode 100755 index 0000000..027e78f --- /dev/null +++ b/scripts/item/consume_2432532.py @@ -0,0 +1,5 @@ +# Spring Breeze Damage Skin +success = sm.addDamageSkin(2432532) +if success: + sm.chat("The Spring Breeze Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432532) diff --git a/scripts/item/consume_2432552.py b/scripts/item/consume_2432552.py new file mode 100755 index 0000000..e194ddc --- /dev/null +++ b/scripts/item/consume_2432552.py @@ -0,0 +1,10 @@ +# Honey Butterfly Mount Permanent Coupon | (2432552) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Honey Butterfly' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Honey Butterfly' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432575.py b/scripts/item/consume_2432575.py new file mode 100755 index 0000000..7310c82 --- /dev/null +++ b/scripts/item/consume_2432575.py @@ -0,0 +1,9 @@ +# Black Knight Soul +souls = [2591342, 2591343, 2591344, 2591345, 2591346, 2591347, 2591348, 2591349, 2591305] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2432575, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2432575, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2432576.py b/scripts/item/consume_2432576.py new file mode 100755 index 0000000..b05604e --- /dev/null +++ b/scripts/item/consume_2432576.py @@ -0,0 +1,9 @@ +# Mad Mage Soul +souls = [2591350, 2591351, 2591352, 2591353, 2591354, 2591355, 2591356, 2591357, 2591314] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2432576, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2432576, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2432577.py b/scripts/item/consume_2432577.py new file mode 100755 index 0000000..a98c394 --- /dev/null +++ b/scripts/item/consume_2432577.py @@ -0,0 +1,9 @@ +# Rampant Cyborg Soul +souls = [2591358, 2591359, 2591360, 2591361, 2591362, 2591363, 2591364, 2591365, 2591323] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2432577, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2432577, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2432578.py b/scripts/item/consume_2432578.py new file mode 100755 index 0000000..dee4754 --- /dev/null +++ b/scripts/item/consume_2432578.py @@ -0,0 +1,9 @@ +# Vicious Hunter Soul +souls = [2591366, 2591367, 2591368, 2591369, 2591370, 2591371, 2591372, 2591372, 2591332] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2432578, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2432578, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2432579.py b/scripts/item/consume_2432579.py new file mode 100755 index 0000000..18e18ca --- /dev/null +++ b/scripts/item/consume_2432579.py @@ -0,0 +1,9 @@ +# Bad Brawler Soul +souls = [2591374, 2591375, 2591376, 2591377, 2591378, 2591379, 2591380, 2591381, 2591341] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2432579, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2432579, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2432580.py b/scripts/item/consume_2432580.py new file mode 100755 index 0000000..5db3855 --- /dev/null +++ b/scripts/item/consume_2432580.py @@ -0,0 +1,10 @@ +# Hidden Balrog Mount Permanent Coupon | (2432580) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hidden Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hidden Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432581.py b/scripts/item/consume_2432581.py new file mode 100755 index 0000000..430fd46 --- /dev/null +++ b/scripts/item/consume_2432581.py @@ -0,0 +1,10 @@ +# Hidden Balrog Mount 90-Day Coupon | (2432581) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hidden Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hidden Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432582.py b/scripts/item/consume_2432582.py new file mode 100755 index 0000000..c679972 --- /dev/null +++ b/scripts/item/consume_2432582.py @@ -0,0 +1,10 @@ +# Flying Feet Mount Permanent Coupon | (2432582) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Feet' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Feet' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432583.py b/scripts/item/consume_2432583.py new file mode 100755 index 0000000..254057f --- /dev/null +++ b/scripts/item/consume_2432583.py @@ -0,0 +1,10 @@ +# Flying Feet Mount 90-Day Coupon | (2432583) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Feet' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Feet' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432591.py b/scripts/item/consume_2432591.py new file mode 100755 index 0000000..cc3b873 --- /dev/null +++ b/scripts/item/consume_2432591.py @@ -0,0 +1,4 @@ +# Cherry Blossoms Damage Skin +success = sm.addDamageSkin(2432591) +if success: + sm.chat("The Cherry Blossoms Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432592.py b/scripts/item/consume_2432592.py new file mode 100755 index 0000000..2afb9a1 --- /dev/null +++ b/scripts/item/consume_2432592.py @@ -0,0 +1,5 @@ +# Solo Troops Damage Skin +success = sm.addDamageSkin(2432592) +if success: + sm.chat("The Solo Troops Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432592) diff --git a/scripts/item/consume_2432635.py b/scripts/item/consume_2432635.py new file mode 100755 index 0000000..687ec3a --- /dev/null +++ b/scripts/item/consume_2432635.py @@ -0,0 +1,10 @@ +# [[FROZEN CONTENT]] Sven Mount 90-Day Coupon | (2432635) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the '[[FROZEN CONTENT]] Sven' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the '[[FROZEN CONTENT]] Sven' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432637.py b/scripts/item/consume_2432637.py new file mode 100755 index 0000000..ee24d1c --- /dev/null +++ b/scripts/item/consume_2432637.py @@ -0,0 +1,4 @@ +# Sweet Tea Cake Damage Skin +success = sm.addDamageSkin(2432637) +if success: + sm.chat("The Sweet Tea Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432638.py b/scripts/item/consume_2432638.py new file mode 100755 index 0000000..efb71c1 --- /dev/null +++ b/scripts/item/consume_2432638.py @@ -0,0 +1,4 @@ +# Hard-hitting Damage Skin +success = sm.addDamageSkin(2432638) +if success: + sm.chat("The Hard-hitting Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432639.py b/scripts/item/consume_2432639.py new file mode 100755 index 0000000..9e0d2e8 --- /dev/null +++ b/scripts/item/consume_2432639.py @@ -0,0 +1,4 @@ +# Keyboard Warrior Damage Skin +success = sm.addDamageSkin(2432639) +if success: + sm.chat("The Keyboard Warrior Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432640.py b/scripts/item/consume_2432640.py new file mode 100755 index 0000000..ec8db18 --- /dev/null +++ b/scripts/item/consume_2432640.py @@ -0,0 +1,5 @@ +# Reminiscence Damage Skin +success = sm.addDamageSkin(2432640) +if success: + sm.chat("The Reminiscence Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432640) diff --git a/scripts/item/consume_2432653.py b/scripts/item/consume_2432653.py new file mode 100755 index 0000000..1ca862d --- /dev/null +++ b/scripts/item/consume_2432653.py @@ -0,0 +1,10 @@ +# Flower Petal Prop Mount Permanent Coupon | (2432653) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flower Petal Prop' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flower Petal Prop' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432655.py b/scripts/item/consume_2432655.py new file mode 100755 index 0000000..ea8dab7 --- /dev/null +++ b/scripts/item/consume_2432655.py @@ -0,0 +1,6 @@ +# id 2432655 (Mushking's Summons), field 993017200 +sm.setSpeakerID(9010000) # Maple Administrator +sm.setParam(2) +res = sm.sendAskAccept("All set for Mushroom Castle?\r\n\r\n#r(You will be moved to the Mushroom Castle Entrance when you accept.)") +sm.warp(106030100) +sm.consumeItem(parentID) diff --git a/scripts/item/consume_2432658.py b/scripts/item/consume_2432658.py new file mode 100755 index 0000000..73fbd15 --- /dev/null +++ b/scripts/item/consume_2432658.py @@ -0,0 +1,4 @@ +# Sweet Tea Cake Damage Skin +success = sm.addDamageSkin(2432658) +if success: + sm.chat("The Sweet Tea Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432659.py b/scripts/item/consume_2432659.py new file mode 100755 index 0000000..e5315c8 --- /dev/null +++ b/scripts/item/consume_2432659.py @@ -0,0 +1,4 @@ +# Hard-hitting Damage Skin +success = sm.addDamageSkin(2432659) +if success: + sm.chat("The Hard-hitting Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432660.py b/scripts/item/consume_2432660.py new file mode 100755 index 0000000..d4ea099 --- /dev/null +++ b/scripts/item/consume_2432660.py @@ -0,0 +1,4 @@ +# Keyboard Warrior Damage Skin +success = sm.addDamageSkin(2432660) +if success: + sm.chat("The Keyboard Warrior Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432661.py b/scripts/item/consume_2432661.py new file mode 100755 index 0000000..f4d5813 --- /dev/null +++ b/scripts/item/consume_2432661.py @@ -0,0 +1,4 @@ +# Reminiscence Damage Skin +success = sm.addDamageSkin(2432661) +if success: + sm.chat("The Reminiscence Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432710.py b/scripts/item/consume_2432710.py new file mode 100755 index 0000000..dbf2d28 --- /dev/null +++ b/scripts/item/consume_2432710.py @@ -0,0 +1,5 @@ +# Orange Mushroom Damage Skin +success = sm.addDamageSkin(2432710) +if success: + sm.chat("The Orange Mushroom Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432710) diff --git a/scripts/item/consume_2432732.py b/scripts/item/consume_2432732.py new file mode 100755 index 0000000..8bb1394 --- /dev/null +++ b/scripts/item/consume_2432732.py @@ -0,0 +1,9 @@ +# id 2432732 (Special Metamorph Potion), field 811000008 +sm.setSpeakerID(9130103) # Ayame +sm.setParam(5) +sm.setParam(1) +res = sm.sendNext("Who do you want to be? #b\r\n#L0#Hayato #l\r\n#L1#Kanna #l\r\n#L2#Ayame #l") +sm.startQuest(58900) +sm.startQuest(58915) +sm.setParam(5) +sm.warp(811000099) diff --git a/scripts/item/consume_2432733.py b/scripts/item/consume_2432733.py new file mode 100755 index 0000000..cf7a17d --- /dev/null +++ b/scripts/item/consume_2432733.py @@ -0,0 +1,10 @@ +# Eagle Mount Permanent Coupon | (2432733) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Eagle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Eagle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432735.py b/scripts/item/consume_2432735.py new file mode 100755 index 0000000..f35f2ad --- /dev/null +++ b/scripts/item/consume_2432735.py @@ -0,0 +1,10 @@ +# Panda Mount Permanent Coupon | (2432735) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Panda' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Panda' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432736.py b/scripts/item/consume_2432736.py new file mode 100755 index 0000000..fce1d68 --- /dev/null +++ b/scripts/item/consume_2432736.py @@ -0,0 +1,10 @@ +# Panda Mount 90-Day Coupon | (2432736) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Panda' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Panda' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432748.py b/scripts/item/consume_2432748.py new file mode 100755 index 0000000..a4056d0 --- /dev/null +++ b/scripts/item/consume_2432748.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Blood Damage Skin | (2434533) +if sm.addDamageSkin(2434533): + sm.chat("'Blood Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2432749.py b/scripts/item/consume_2432749.py new file mode 100755 index 0000000..76425e5 --- /dev/null +++ b/scripts/item/consume_2432749.py @@ -0,0 +1,5 @@ +# Zombie Damage Skin +success = sm.addDamageSkin(2432749) +if success: + sm.chat("The Zombie Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432749) diff --git a/scripts/item/consume_2432751.py b/scripts/item/consume_2432751.py new file mode 100755 index 0000000..f39f7cc --- /dev/null +++ b/scripts/item/consume_2432751.py @@ -0,0 +1,10 @@ +# Helicopter Mount Permanent Coupon | (2432751) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Helicopter' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Helicopter' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432752.py b/scripts/item/consume_2432752.py new file mode 100755 index 0000000..8240272 --- /dev/null +++ b/scripts/item/consume_2432752.py @@ -0,0 +1,10 @@ +# Helicopter Mount 90-Day Coupon | (2432752) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Helicopter' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Helicopter' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432803.py b/scripts/item/consume_2432803.py new file mode 100755 index 0000000..c202eb6 --- /dev/null +++ b/scripts/item/consume_2432803.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Princess No Damage Skin (30-Days) | (2432803) +if sm.addDamageSkin(2432803): + sm.chat("'Princess No Damage Skin (30-Days)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2432804.py b/scripts/item/consume_2432804.py new file mode 100755 index 0000000..371af8b --- /dev/null +++ b/scripts/item/consume_2432804.py @@ -0,0 +1,5 @@ +# Princess No Damage Skin +success = sm.addDamageSkin(2432804) +if success: + sm.chat("The Princess No Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432804) diff --git a/scripts/item/consume_2432806.py b/scripts/item/consume_2432806.py new file mode 100755 index 0000000..55de8ca --- /dev/null +++ b/scripts/item/consume_2432806.py @@ -0,0 +1,10 @@ +# Your Highness Mount Permanent Coupon | (2432806) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Your Highness' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Your Highness' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432807.py b/scripts/item/consume_2432807.py new file mode 100755 index 0000000..6f123cf --- /dev/null +++ b/scripts/item/consume_2432807.py @@ -0,0 +1,10 @@ +# Your Highness 90-Day Coupon | (2432807) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Your Highness' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Your Highness' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432821.py b/scripts/item/consume_2432821.py new file mode 100755 index 0000000..a88f11f --- /dev/null +++ b/scripts/item/consume_2432821.py @@ -0,0 +1,10 @@ +# Water Scooter Mount Permanent Coupon | (2432821) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Water Scooter' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Water Scooter' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432836.py b/scripts/item/consume_2432836.py new file mode 100755 index 0000000..cf09d9f --- /dev/null +++ b/scripts/item/consume_2432836.py @@ -0,0 +1,5 @@ +# Crown Damage Skin +success = sm.addDamageSkin(2432836) +if success: + sm.chat("The Crown Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432836) diff --git a/scripts/item/consume_2432839.py b/scripts/item/consume_2432839.py new file mode 100755 index 0000000..9b2ab59 --- /dev/null +++ b/scripts/item/consume_2432839.py @@ -0,0 +1,10 @@ +# Hekaton's Fist Mount Coupon | (2432839) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hekaton's Fist' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hekaton's Fist' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432972.py b/scripts/item/consume_2432972.py new file mode 100755 index 0000000..beb797f --- /dev/null +++ b/scripts/item/consume_2432972.py @@ -0,0 +1,4 @@ +# Snowflake Damage Skin +success = sm.addDamageSkin(2432972) +if success: + sm.chat("The Snowflake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2432973.py b/scripts/item/consume_2432973.py new file mode 100755 index 0000000..45f2eee --- /dev/null +++ b/scripts/item/consume_2432973.py @@ -0,0 +1,5 @@ +# Monotone Damage Skin +success = sm.addDamageSkin(2432973) +if success: + sm.chat("The Monotone Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2432973) diff --git a/scripts/item/consume_2432994.py b/scripts/item/consume_2432994.py new file mode 100755 index 0000000..77e3a36 --- /dev/null +++ b/scripts/item/consume_2432994.py @@ -0,0 +1,10 @@ +# Beginner Convertible Mount | (2432994) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Beginner Convertible' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Beginner Convertible' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432995.py b/scripts/item/consume_2432995.py new file mode 100755 index 0000000..c7b032d --- /dev/null +++ b/scripts/item/consume_2432995.py @@ -0,0 +1,10 @@ +# Rising Sports Car Mount | (2432995) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rising Sports Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rising Sports Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432996.py b/scripts/item/consume_2432996.py new file mode 100755 index 0000000..dfbedd2 --- /dev/null +++ b/scripts/item/consume_2432996.py @@ -0,0 +1,10 @@ +# Soaring Sports Car Mount | (2432996) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Soaring Sports Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Soaring Sports Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432997.py b/scripts/item/consume_2432997.py new file mode 100755 index 0000000..6995b88 --- /dev/null +++ b/scripts/item/consume_2432997.py @@ -0,0 +1,10 @@ +# New Board Mount | (2432997) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'New Board' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'New Board' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432998.py b/scripts/item/consume_2432998.py new file mode 100755 index 0000000..ef92572 --- /dev/null +++ b/scripts/item/consume_2432998.py @@ -0,0 +1,10 @@ +# Fresh Board Mount | (2432998) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Fresh Board' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Fresh Board' mount.") +sm.dispose() diff --git a/scripts/item/consume_2432999.py b/scripts/item/consume_2432999.py new file mode 100755 index 0000000..9a5ac79 --- /dev/null +++ b/scripts/item/consume_2432999.py @@ -0,0 +1,10 @@ +# Junior Board Mount | (2432999) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Junior Board' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Junior Board' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433000.py b/scripts/item/consume_2433000.py new file mode 100755 index 0000000..1a65dcf --- /dev/null +++ b/scripts/item/consume_2433000.py @@ -0,0 +1,10 @@ +# Senior Board Mount | (2433000) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Senior Board' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Senior Board' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433001.py b/scripts/item/consume_2433001.py new file mode 100755 index 0000000..b1c632c --- /dev/null +++ b/scripts/item/consume_2433001.py @@ -0,0 +1,10 @@ +# Master Board Mount | (2433001) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Master Board' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Master Board' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433002.py b/scripts/item/consume_2433002.py new file mode 100755 index 0000000..d2af57c --- /dev/null +++ b/scripts/item/consume_2433002.py @@ -0,0 +1,10 @@ +# Prime Board Mount | (2433002) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Prime Board' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Prime Board' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433003.py b/scripts/item/consume_2433003.py new file mode 100755 index 0000000..e375143 --- /dev/null +++ b/scripts/item/consume_2433003.py @@ -0,0 +1,10 @@ +# Shining Balloon Mount | (2433003) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Shining Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Shining Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433006.py b/scripts/item/consume_2433006.py new file mode 100755 index 0000000..d6be49c --- /dev/null +++ b/scripts/item/consume_2433006.py @@ -0,0 +1,10 @@ +# Giant Rooster Mount 30-day Coupon | (2433006) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Gigant Rooster' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Gigant Rooster' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433026.py b/scripts/item/consume_2433026.py new file mode 100755 index 0000000..c3388db --- /dev/null +++ b/scripts/item/consume_2433026.py @@ -0,0 +1,16 @@ +# 2433026 - Storage Room 4 Slot Coupon +from net.swordie.ms.constants import GameConstants + +inc = 4 +trunk = chr.getAccount().getTrunk() +slots = trunk.getSlotCount() + +if slots >= GameConstants.MAX_TRUNK_SIZE: + sm.sendSayOkay("You already have the max amount of storage space!") +else: + if slots + inc > GameConstants.MAX_TRUNK_SIZE: + inc = GameConstants.MAX_TRUNK_SIZE - slots + if sm.sendAskYesNo("Do you want to increase your storage space? It will open up #b" + str(inc) + "#k more slots"): + trunk.addSlotCount(inc) + sm.consumeItem() + diff --git a/scripts/item/consume_2433038.py b/scripts/item/consume_2433038.py new file mode 100755 index 0000000..61d7954 --- /dev/null +++ b/scripts/item/consume_2433038.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# 분필 데미지스킨 | (2433038) +if sm.addDamageSkin(2433038): + sm.chat("'분필 데미지스킨' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433053.py b/scripts/item/consume_2433053.py new file mode 100755 index 0000000..f8263dd --- /dev/null +++ b/scripts/item/consume_2433053.py @@ -0,0 +1,10 @@ +# Jet Boat Mount Permanent Coupon | (2433053) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Jet Boat' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Jet Boat' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433060.py b/scripts/item/consume_2433060.py new file mode 100755 index 0000000..ae999f2 --- /dev/null +++ b/scripts/item/consume_2433060.py @@ -0,0 +1,10 @@ +# Permanent Gyrocopter Mount Coupon | (2433060) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Gyrocopter' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Gyrocopter' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433063.py b/scripts/item/consume_2433063.py new file mode 100755 index 0000000..d2ccaf5 --- /dev/null +++ b/scripts/item/consume_2433063.py @@ -0,0 +1,5 @@ +# Star Planet Damage Skin +success = sm.addDamageSkin(2433063) +if success: + sm.chat("The Star Planet Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433063) diff --git a/scripts/item/consume_2433081.py b/scripts/item/consume_2433081.py new file mode 100755 index 0000000..41c38a3 --- /dev/null +++ b/scripts/item/consume_2433081.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Halloween Damage Skin | (2433081) +if sm.addDamageSkin(2433081): + sm.chat("'Halloween Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433097.py b/scripts/item/consume_2433097.py new file mode 100755 index 0000000..4959e97 --- /dev/null +++ b/scripts/item/consume_2433097.py @@ -0,0 +1,10 @@ +# Crimson Nightmare Mount Permanent Coupon | (2433097) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Crimson Nightmare' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Crimson Nightmare' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433103.py b/scripts/item/consume_2433103.py new file mode 100755 index 0000000..9b6981c --- /dev/null +++ b/scripts/item/consume_2433103.py @@ -0,0 +1,3 @@ +sm.getChr().addHonorExp(1000) +sm.consumeItem(2433103) +sm.dispose() diff --git a/scripts/item/consume_2433107.py b/scripts/item/consume_2433107.py new file mode 100755 index 0000000..bdc0ce6 --- /dev/null +++ b/scripts/item/consume_2433107.py @@ -0,0 +1,4 @@ +# Damage Skin - Springtime Breeze +success = sm.addDamageSkin(2433107) +if success: + sm.chat("The Damage Skin - Springtime Breeze has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433113.py b/scripts/item/consume_2433113.py new file mode 100755 index 0000000..d302ac9 --- /dev/null +++ b/scripts/item/consume_2433113.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chinese Marshmallow Damage Skin | (2433113) +if sm.addDamageSkin(2433113): + sm.chat("'Chinese Marshmallow Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433128.py b/scripts/item/consume_2433128.py new file mode 100755 index 0000000..d3c46c7 --- /dev/null +++ b/scripts/item/consume_2433128.py @@ -0,0 +1,10 @@ +# Vampire Phantom's Bat | (2433128) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Vampire Phantom's Bat' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Vampire Phantom's Bat' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433158.py b/scripts/item/consume_2433158.py new file mode 100755 index 0000000..31c4265 --- /dev/null +++ b/scripts/item/consume_2433158.py @@ -0,0 +1,4 @@ +# Monotone Damage Skin +success = sm.addDamageSkin(2433158) +if success: + sm.chat("The Monotone Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433160.py b/scripts/item/consume_2433160.py new file mode 100755 index 0000000..76de5ff --- /dev/null +++ b/scripts/item/consume_2433160.py @@ -0,0 +1,4 @@ +# Lonely Single Damage Skin +success = sm.addDamageSkin(2433160) +if success: + sm.chat("The Lonely Single Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433168.py b/scripts/item/consume_2433168.py new file mode 100755 index 0000000..7bffa95 --- /dev/null +++ b/scripts/item/consume_2433168.py @@ -0,0 +1,10 @@ +# Permanent Hot-Air Balloon Mount Coupon | (2433168) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Hot-Air Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Hot-Air Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433169.py b/scripts/item/consume_2433169.py new file mode 100755 index 0000000..12ba10a --- /dev/null +++ b/scripts/item/consume_2433169.py @@ -0,0 +1,10 @@ +# Permanent Canoe Mount Coupon | (2433169) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Canoe' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Canoe' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433170.py b/scripts/item/consume_2433170.py new file mode 100755 index 0000000..11ff0d2 --- /dev/null +++ b/scripts/item/consume_2433170.py @@ -0,0 +1,10 @@ +# Permanent Minicopter Mount Coupon | (2433170) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Minicopter' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Minicopter' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433178.py b/scripts/item/consume_2433178.py new file mode 100755 index 0000000..1b86a16 --- /dev/null +++ b/scripts/item/consume_2433178.py @@ -0,0 +1,5 @@ +# Halloween (Bones) Damage Skin +success = sm.addDamageSkin(2433178) +if success: + sm.chat("The Halloween (Bones) Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433178) diff --git a/scripts/item/consume_2433182.py b/scripts/item/consume_2433182.py new file mode 100755 index 0000000..82afa98 --- /dev/null +++ b/scripts/item/consume_2433182.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Jack o' Lantern Damage Skin | (2433182) +if sm.addDamageSkin(2433182): + sm.chat("'Jack o' Lantern Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433183.py b/scripts/item/consume_2433183.py new file mode 100755 index 0000000..be21f74 --- /dev/null +++ b/scripts/item/consume_2433183.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Super Spooky Damage Skin | (2433183) +if sm.addDamageSkin(2433183): + sm.chat("'Super Spooky Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433184.py b/scripts/item/consume_2433184.py new file mode 100755 index 0000000..a610614 --- /dev/null +++ b/scripts/item/consume_2433184.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Wicked Witch Damage Skin | (2433184) +if sm.addDamageSkin(2433184): + sm.chat("'Wicked Witch Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433198.py b/scripts/item/consume_2433198.py new file mode 100755 index 0000000..27f3923 --- /dev/null +++ b/scripts/item/consume_2433198.py @@ -0,0 +1,10 @@ +# Permanent Feline Pirate Ship Mount Coupon | (2433198) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Feline Pirate Ship' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Feline Pirate Ship' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433214.py b/scripts/item/consume_2433214.py new file mode 100755 index 0000000..9f9e3f1 --- /dev/null +++ b/scripts/item/consume_2433214.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Noise Damage Skin | (2433214) +if sm.addDamageSkin(2433214): + sm.chat("'Noise Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433236.py b/scripts/item/consume_2433236.py new file mode 100755 index 0000000..6cb67b8 --- /dev/null +++ b/scripts/item/consume_2433236.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chalk Damage Skin | (2433236) +if sm.addDamageSkin(2433236): + sm.chat("'Chalk Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433251.py b/scripts/item/consume_2433251.py new file mode 100755 index 0000000..306896e --- /dev/null +++ b/scripts/item/consume_2433251.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Violetta's Charming Damage Skin | (2433251) +if sm.addDamageSkin(2433251): + sm.chat("'Violetta's Charming Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433252.py b/scripts/item/consume_2433252.py new file mode 100755 index 0000000..a89abaa --- /dev/null +++ b/scripts/item/consume_2433252.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Dragon's Fire Damage Skin | (2433252) +if sm.addDamageSkin(2433252): + sm.chat("'Dragon's Fire Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433260.py b/scripts/item/consume_2433260.py new file mode 100755 index 0000000..8f1d688 --- /dev/null +++ b/scripts/item/consume_2433260.py @@ -0,0 +1,4 @@ +# Digitized Damage Skin +success = sm.addDamageSkin(2433260) +if success: + sm.chat("The Digitized Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433261.py b/scripts/item/consume_2433261.py new file mode 100755 index 0000000..4465c16 --- /dev/null +++ b/scripts/item/consume_2433261.py @@ -0,0 +1,4 @@ +# Hard-Hitting Damage Skin +success = sm.addDamageSkin(2433261) +if success: + sm.chat("The Hard-Hitting Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433262.py b/scripts/item/consume_2433262.py new file mode 100755 index 0000000..5261d96 --- /dev/null +++ b/scripts/item/consume_2433262.py @@ -0,0 +1,4 @@ +# Keyboard Warrior Damage Skin +success = sm.addDamageSkin(2433262) +if success: + sm.chat("The Keyboard Warrior Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433263.py b/scripts/item/consume_2433263.py new file mode 100755 index 0000000..a0cb8f7 --- /dev/null +++ b/scripts/item/consume_2433263.py @@ -0,0 +1,4 @@ +# Singles Army Damage Skin +success = sm.addDamageSkin(2433263) +if success: + sm.chat("The Singles Army Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433264.py b/scripts/item/consume_2433264.py new file mode 100755 index 0000000..770d691 --- /dev/null +++ b/scripts/item/consume_2433264.py @@ -0,0 +1,4 @@ +# Sweet Tea Cake Damage Skin +success = sm.addDamageSkin(2433264) +if success: + sm.chat("The Sweet Tea Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433265.py b/scripts/item/consume_2433265.py new file mode 100755 index 0000000..b3b1c87 --- /dev/null +++ b/scripts/item/consume_2433265.py @@ -0,0 +1,4 @@ +# Reminiscence Damage Skin +success = sm.addDamageSkin(2433265) +if success: + sm.chat("The Reminiscence Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433266.py b/scripts/item/consume_2433266.py new file mode 100755 index 0000000..1306f40 --- /dev/null +++ b/scripts/item/consume_2433266.py @@ -0,0 +1,4 @@ +# Orange Mushroom Damage Skin +success = sm.addDamageSkin(2433266) +if success: + sm.chat("The Orange Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433267.py b/scripts/item/consume_2433267.py new file mode 100755 index 0000000..f56ec3b --- /dev/null +++ b/scripts/item/consume_2433267.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Blood Damage Skin | (2433267) +if sm.addDamageSkin(2433267): + sm.chat("'Blood Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433268.py b/scripts/item/consume_2433268.py new file mode 100755 index 0000000..14fd504 --- /dev/null +++ b/scripts/item/consume_2433268.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Zombie Damage Skin | (2433268) +if sm.addDamageSkin(2433268): + sm.chat("'Zombie Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433269.py b/scripts/item/consume_2433269.py new file mode 100755 index 0000000..b9fb617 --- /dev/null +++ b/scripts/item/consume_2433269.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Golden Damage Skin | (2433269) +if sm.addDamageSkin(2433269): + sm.chat("'Golden Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433270.py b/scripts/item/consume_2433270.py new file mode 100755 index 0000000..8912e83 --- /dev/null +++ b/scripts/item/consume_2433270.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Jett Damage Skin | (2433270) +if sm.addDamageSkin(2433270): + sm.chat("'Jett Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433271.py b/scripts/item/consume_2433271.py new file mode 100755 index 0000000..682f466 --- /dev/null +++ b/scripts/item/consume_2433271.py @@ -0,0 +1,4 @@ +# Basic Damage Skin +success = sm.addDamageSkin(2433271) +if success: + sm.chat("The Basic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433292.py b/scripts/item/consume_2433292.py new file mode 100755 index 0000000..a9ba7d2 --- /dev/null +++ b/scripts/item/consume_2433292.py @@ -0,0 +1,10 @@ +# Cake Mount | (2433292) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cake' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cake' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433293.py b/scripts/item/consume_2433293.py new file mode 100755 index 0000000..bc66caf --- /dev/null +++ b/scripts/item/consume_2433293.py @@ -0,0 +1,10 @@ +# Bling-Bling Rudolph Sled | (2433293) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bling Bling Rudolph Sled' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bling Bling Rudolph Sled' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433362.py b/scripts/item/consume_2433362.py new file mode 100755 index 0000000..a698342 --- /dev/null +++ b/scripts/item/consume_2433362.py @@ -0,0 +1,5 @@ +# Night Sky Damage Skin +success = sm.addDamageSkin(2433362) +if success: + sm.chat("The Night Sky Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433362) diff --git a/scripts/item/consume_2433441.py b/scripts/item/consume_2433441.py new file mode 100755 index 0000000..f354da6 --- /dev/null +++ b/scripts/item/consume_2433441.py @@ -0,0 +1,2 @@ +sm.addInventorySlotsByInvType(8, 1) +sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433446.py b/scripts/item/consume_2433446.py new file mode 100755 index 0000000..27977cd --- /dev/null +++ b/scripts/item/consume_2433446.py @@ -0,0 +1,9 @@ +# Pierre Soul +souls = [2591428, 2591429, 2591430, 2591431, 2591432, 2591433, 2591434, 2591435, 2591391] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2433446, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2433446, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2433456.py b/scripts/item/consume_2433456.py new file mode 100755 index 0000000..1354a25 --- /dev/null +++ b/scripts/item/consume_2433456.py @@ -0,0 +1,5 @@ +# Hangul Damage Skin +success = sm.addDamageSkin(2433456) +if success: + sm.chat("The Hangul Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433456) diff --git a/scripts/item/consume_2433459.py b/scripts/item/consume_2433459.py new file mode 100755 index 0000000..48662c6 --- /dev/null +++ b/scripts/item/consume_2433459.py @@ -0,0 +1,10 @@ +# Balrog Mount Coupon | (2433459) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Balrog' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Balrog' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433460.py b/scripts/item/consume_2433460.py new file mode 100755 index 0000000..a518511 --- /dev/null +++ b/scripts/item/consume_2433460.py @@ -0,0 +1,10 @@ +# Black Wyvern Permanent Mount Coupon | (2433460) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433461.py b/scripts/item/consume_2433461.py new file mode 100755 index 0000000..deac64e --- /dev/null +++ b/scripts/item/consume_2433461.py @@ -0,0 +1,10 @@ +# Moon and Stars Mount Coupon | (2433461) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Moon and Stars' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Moon and Stars' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433498.py b/scripts/item/consume_2433498.py new file mode 100755 index 0000000..3b429a4 --- /dev/null +++ b/scripts/item/consume_2433498.py @@ -0,0 +1,10 @@ +# Orchid's Support 90-Day Coupon | (2433498) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Orchid's Support' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Orchid's Support' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433499.py b/scripts/item/consume_2433499.py new file mode 100755 index 0000000..f569c2f --- /dev/null +++ b/scripts/item/consume_2433499.py @@ -0,0 +1,10 @@ +# Orchid's Support Permanent Coupon | (2433499) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Orchid's Support' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Orchid's Support' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433500.py b/scripts/item/consume_2433500.py new file mode 100755 index 0000000..e262be1 --- /dev/null +++ b/scripts/item/consume_2433500.py @@ -0,0 +1,10 @@ +# Athena Pierce's Support 90-Day Coupon | (2433500) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Athena Pierce's Support' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Athena Pierce's Support' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433501.py b/scripts/item/consume_2433501.py new file mode 100755 index 0000000..b60a747 --- /dev/null +++ b/scripts/item/consume_2433501.py @@ -0,0 +1,10 @@ +# Athena Pierce's Support Permanent Coupon | (2433501) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Athena Pierce's Support' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Athena Pierce's Support' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433511.py b/scripts/item/consume_2433511.py new file mode 100755 index 0000000..0d41063 --- /dev/null +++ b/scripts/item/consume_2433511.py @@ -0,0 +1,10 @@ +# Mystical Ram Mount Coupon | (2433511) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mystical Ram' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mystical Ram' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433515.py b/scripts/item/consume_2433515.py new file mode 100755 index 0000000..48c8a23 --- /dev/null +++ b/scripts/item/consume_2433515.py @@ -0,0 +1,9 @@ +# Von Bon Soul +souls = [2591436, 2591437, 2591438, 2591439, 2591440, 2591441, 2591442, 2591443, 2591400] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2433515, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2433515, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2433559.py b/scripts/item/consume_2433559.py new file mode 100755 index 0000000..56cbd66 --- /dev/null +++ b/scripts/item/consume_2433559.py @@ -0,0 +1,14 @@ +# Vampire Blood + +sm.setSpeakerID(9000138) + +buffs = [2023464, 2023465, 2023466, 2023467, 2023468] +rand = sm.getRandomIntBelow(len(buffs)) + +if not sm.canHold(2023464): + sm.sendSayOkay("Please make sure you have room in your inventory.") + +else: + buff = buffs[rand] + sm.consumeItem(2433559) + sm.giveItem(buff) \ No newline at end of file diff --git a/scripts/item/consume_2433571.py b/scripts/item/consume_2433571.py new file mode 100755 index 0000000..13ee35b --- /dev/null +++ b/scripts/item/consume_2433571.py @@ -0,0 +1,5 @@ +# Scribble Crush Damage Skin +success = sm.addDamageSkin(2433571) +if success: + sm.chat("The Scribble Crush Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433571) diff --git a/scripts/item/consume_2433588.py b/scripts/item/consume_2433588.py new file mode 100755 index 0000000..2160787 --- /dev/null +++ b/scripts/item/consume_2433588.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chinese Spring Fireworks Damage Skin | (2433588) +if sm.addDamageSkin(2433588): + sm.chat("'Chinese Spring Fireworks Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433591.py b/scripts/item/consume_2433591.py new file mode 100755 index 0000000..467a428 --- /dev/null +++ b/scripts/item/consume_2433591.py @@ -0,0 +1,9 @@ +# Crimson Queen Soul +souls = [2591444, 2591445, 2591446, 2591447, 2591448, 2591449, 2591450, 2591451, 2591409] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2433591, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2433591, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2433592.py b/scripts/item/consume_2433592.py new file mode 100755 index 0000000..e8bc1f7 --- /dev/null +++ b/scripts/item/consume_2433592.py @@ -0,0 +1,9 @@ +# Vellum Soul +souls = [2591452, 2591453, 2591454, 2591455, 2591456, 2591457, 2591458, 2591459, 2591418] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2433592, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2433592, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2433593.py b/scripts/item/consume_2433593.py new file mode 100755 index 0000000..4f21351 --- /dev/null +++ b/scripts/item/consume_2433593.py @@ -0,0 +1,9 @@ +# Lotus Soul +souls = [2591460, 2591461, 2591462, 2591463, 2591464, 2591465, 2591466, 2591467, 2591427] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2433593, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2433593, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2433623.py b/scripts/item/consume_2433623.py new file mode 100755 index 0000000..66df126 --- /dev/null +++ b/scripts/item/consume_2433623.py @@ -0,0 +1,8 @@ +# Black Cube Double Six Pack Coupon + +if sm.canHold(5062010): + sm.consumeItem(2433623) + sm.giveItem(5062010, 6) +else: + sm.sendSayOkay("Please make more space in your USE tab.") +sm.dispose() diff --git a/scripts/item/consume_2433658.py b/scripts/item/consume_2433658.py new file mode 100755 index 0000000..75cec1b --- /dev/null +++ b/scripts/item/consume_2433658.py @@ -0,0 +1,10 @@ +# Interstellar Agent Mount 30-Day Coupon | (2433658) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Interstellar Agent' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Interstellar Agent' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433659.py b/scripts/item/consume_2433659.py new file mode 100755 index 0000000..8ff81e7 --- /dev/null +++ b/scripts/item/consume_2433659.py @@ -0,0 +1,10 @@ +# Interstellar Agent Mount 30-Day Coupon | (2433659) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Interstellar Agent' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Interstellar Agent' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433666.py b/scripts/item/consume_2433666.py new file mode 100755 index 0000000..bebbe4b --- /dev/null +++ b/scripts/item/consume_2433666.py @@ -0,0 +1,4 @@ +# Mashmellow Damage Skin +success = sm.addDamageSkin(2433666) +if success: + sm.chat("The Mashmellow Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433682.py b/scripts/item/consume_2433682.py new file mode 100755 index 0000000..2bdbb6a --- /dev/null +++ b/scripts/item/consume_2433682.py @@ -0,0 +1,10 @@ +# Dong Dong Chiang Mount Coupon | (2433682) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Dong Dong Chiang' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Dong Dong Chiang' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433709.py b/scripts/item/consume_2433709.py new file mode 100755 index 0000000..9e12f22 --- /dev/null +++ b/scripts/item/consume_2433709.py @@ -0,0 +1,4 @@ +# Moon Bunny Damage Skin +success = sm.addDamageSkin(2433709) +if success: + sm.chat("The Moon Bunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433715.py b/scripts/item/consume_2433715.py new file mode 100755 index 0000000..441e770 --- /dev/null +++ b/scripts/item/consume_2433715.py @@ -0,0 +1,5 @@ +# Striped Damage Skin +success = sm.addDamageSkin(2433715) +if success: + sm.chat("The Striped Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433715) diff --git a/scripts/item/consume_2433733.py b/scripts/item/consume_2433733.py new file mode 100755 index 0000000..912bbda --- /dev/null +++ b/scripts/item/consume_2433733.py @@ -0,0 +1,10 @@ +# Mini Black Heaven Permanent Coupon | (2433733) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mini Black Heaven' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mini Black Heaven' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433734.py b/scripts/item/consume_2433734.py new file mode 100755 index 0000000..22f5381 --- /dev/null +++ b/scripts/item/consume_2433734.py @@ -0,0 +1,10 @@ +# Flying Pink Sheep 90-Day Coupon | (2433734) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Pink Sheep' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Pink Sheep' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433735.py b/scripts/item/consume_2433735.py new file mode 100755 index 0000000..b6da742 --- /dev/null +++ b/scripts/item/consume_2433735.py @@ -0,0 +1,10 @@ +# Flying Blue Sheep Permanent Coupon | (2433735) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Blue Sheep' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Blue Sheep' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433736.py b/scripts/item/consume_2433736.py new file mode 100755 index 0000000..b6ac80b --- /dev/null +++ b/scripts/item/consume_2433736.py @@ -0,0 +1,10 @@ +# Flying Pink Sheep Permanent Coupon | (2433736) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Flying Pink Sheep' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Flying Pink Sheep' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433775.py b/scripts/item/consume_2433775.py new file mode 100755 index 0000000..d42e08a --- /dev/null +++ b/scripts/item/consume_2433775.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Orchid Damage Skin | (2433775) +if sm.addDamageSkin(2433775): + sm.chat("'Orchid Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433776.py b/scripts/item/consume_2433776.py new file mode 100755 index 0000000..9f39282 --- /dev/null +++ b/scripts/item/consume_2433776.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Lotus Damage Skin | (2433776) +if sm.addDamageSkin(2433776): + sm.chat("'Lotus Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433777.py b/scripts/item/consume_2433777.py new file mode 100755 index 0000000..e732bf6 --- /dev/null +++ b/scripts/item/consume_2433777.py @@ -0,0 +1,5 @@ +# Black Heaven Damage Skin +success = sm.addDamageSkin(2433777) +if success: + sm.chat("The Black Heaven Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433777) diff --git a/scripts/item/consume_2433804.py b/scripts/item/consume_2433804.py new file mode 100755 index 0000000..e682992 --- /dev/null +++ b/scripts/item/consume_2433804.py @@ -0,0 +1,5 @@ +# Couples Army Damage Skin +success = sm.addDamageSkin(2433804) +if success: + sm.chat("The Couples Army Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433804) diff --git a/scripts/item/consume_2433808.py b/scripts/item/consume_2433808.py new file mode 100755 index 0000000..c523216 --- /dev/null +++ b/scripts/item/consume_2433808.py @@ -0,0 +1,4 @@ +sm.getChr().addHonorExp(10000) +sm.consumeItem(2433808) +sm.chat("You have gained 10000 honor experience.") +sm.dispose() diff --git a/scripts/item/consume_2433809.py b/scripts/item/consume_2433809.py new file mode 100755 index 0000000..5e6596c --- /dev/null +++ b/scripts/item/consume_2433809.py @@ -0,0 +1,10 @@ +# Feline Rickshaw Mount Permanent Coupon | (2433809) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Feline Rickshaw' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Feline Rickshaw' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433810.py b/scripts/item/consume_2433810.py new file mode 100755 index 0000000..38b150a --- /dev/null +++ b/scripts/item/consume_2433810.py @@ -0,0 +1,10 @@ +# Feline Rickshaw Mount 90-Day Coupon | (2433810) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Feline Rickshaw' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Feline Rickshaw' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433811.py b/scripts/item/consume_2433811.py new file mode 100755 index 0000000..151f55a --- /dev/null +++ b/scripts/item/consume_2433811.py @@ -0,0 +1,10 @@ +# Strawberry Cake Mount Permanent Coupon | (2433811) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Strawberry Cake' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Strawberry Cake' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433812.py b/scripts/item/consume_2433812.py new file mode 100755 index 0000000..5b34640 --- /dev/null +++ b/scripts/item/consume_2433812.py @@ -0,0 +1,10 @@ +# Strawberry Cake Mount 90-Day Coupon | (2433812) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Strawberry Cake' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Strawberry Cake' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433828.py b/scripts/item/consume_2433828.py new file mode 100755 index 0000000..2c2539e --- /dev/null +++ b/scripts/item/consume_2433828.py @@ -0,0 +1,5 @@ +# White Heaven Sun Damage Skin +success = sm.addDamageSkin(2433828) +if success: + sm.chat("The White Heaven Sun Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433828) diff --git a/scripts/item/consume_2433829.py b/scripts/item/consume_2433829.py new file mode 100755 index 0000000..d4dc7c2 --- /dev/null +++ b/scripts/item/consume_2433829.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# White Heaven Rain Damage Skin | (2433829) +if sm.addDamageSkin(2433829): + sm.chat("'White Heaven Rain Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433830.py b/scripts/item/consume_2433830.py new file mode 100755 index 0000000..014b5d5 --- /dev/null +++ b/scripts/item/consume_2433830.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# White Heaven Rainbow Damage Skin | (2433830) +if sm.addDamageSkin(2433830): + sm.chat("'White Heaven Rainbow Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433831.py b/scripts/item/consume_2433831.py new file mode 100755 index 0000000..188562e --- /dev/null +++ b/scripts/item/consume_2433831.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# White Heaven Snow Damage Skin | (2433831) +if sm.addDamageSkin(2433831): + sm.chat("'White Heaven Snow Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433832.py b/scripts/item/consume_2433832.py new file mode 100755 index 0000000..a70afa8 --- /dev/null +++ b/scripts/item/consume_2433832.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# White Heaven Lightning Damage Skin | (2433832) +if sm.addDamageSkin(2433832): + sm.chat("'White Heaven Lightning Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433833.py b/scripts/item/consume_2433833.py new file mode 100755 index 0000000..12a5630 --- /dev/null +++ b/scripts/item/consume_2433833.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# White Heaven Wind Damage Skin | (2433833) +if sm.addDamageSkin(2433833): + sm.chat("'White Heaven Wind Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433844.py b/scripts/item/consume_2433844.py new file mode 100755 index 0000000..eb1668c --- /dev/null +++ b/scripts/item/consume_2433844.py @@ -0,0 +1,9 @@ +# Gold Dragon Soul +souls = [2591468, 2591469, 2591470, 2591471, 2591472, 2591473, 2591474, 2591475, 2591484] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2433844, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2433844, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2433845.py b/scripts/item/consume_2433845.py new file mode 100755 index 0000000..77e34f6 --- /dev/null +++ b/scripts/item/consume_2433845.py @@ -0,0 +1,9 @@ +# Red Tiger Soul +souls = [2591476, 2591477, 2591478, 2591479, 2591480, 2591481, 2591482, 2591483, 2591485] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2433845, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2433845, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2433883.py b/scripts/item/consume_2433883.py new file mode 100755 index 0000000..2dab678 --- /dev/null +++ b/scripts/item/consume_2433883.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Earth Day Damage Skin | (2433883) +if sm.addDamageSkin(2433883): + sm.chat("'Earth Day Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433897.py b/scripts/item/consume_2433897.py new file mode 100755 index 0000000..6e0289b --- /dev/null +++ b/scripts/item/consume_2433897.py @@ -0,0 +1,4 @@ +# Monotone Damage Skin +success = sm.addDamageSkin(2433897) +if success: + sm.chat("The Monotone Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433900.py b/scripts/item/consume_2433900.py new file mode 100755 index 0000000..38bad3b --- /dev/null +++ b/scripts/item/consume_2433900.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Night Sky Damage Skin | (2433900) +if sm.addDamageSkin(2433900): + sm.chat("'Night Sky Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433901.py b/scripts/item/consume_2433901.py new file mode 100755 index 0000000..fc90105 --- /dev/null +++ b/scripts/item/consume_2433901.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Beasts of Fury Damage Skin | (2433901) +if sm.addDamageSkin(2433901): + sm.chat("'Beasts of Fury Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433902.py b/scripts/item/consume_2433902.py new file mode 100755 index 0000000..feb8b94 --- /dev/null +++ b/scripts/item/consume_2433902.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Beasts of Fury Damage Skin | (2433902) +if sm.addDamageSkin(2433902): + sm.chat("'Beasts of Fury Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433903.py b/scripts/item/consume_2433903.py new file mode 100755 index 0000000..f989553 --- /dev/null +++ b/scripts/item/consume_2433903.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Lovely Damage Skin\r\n | (2433903) +if sm.addDamageSkin(2433903): + sm.chat("'Lovely Damage Skin\r\n' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433904.py b/scripts/item/consume_2433904.py new file mode 100755 index 0000000..c30d774 --- /dev/null +++ b/scripts/item/consume_2433904.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Dried Out Damage Skin | (2433904) +if sm.addDamageSkin(2433904): + sm.chat("'Dried Out Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433905.py b/scripts/item/consume_2433905.py new file mode 100755 index 0000000..e0384f8 --- /dev/null +++ b/scripts/item/consume_2433905.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Heart Balloon Damage Skin\r\n | (2433905) +if sm.addDamageSkin(2433905): + sm.chat("'Heart Balloon Damage Skin\r\n' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433906.py b/scripts/item/consume_2433906.py new file mode 100755 index 0000000..ca14153 --- /dev/null +++ b/scripts/item/consume_2433906.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Scribble Crush Damage Skin | (2433906) +if sm.addDamageSkin(2433906): + sm.chat("'Scribble Crush Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433907.py b/scripts/item/consume_2433907.py new file mode 100755 index 0000000..e7e9517 --- /dev/null +++ b/scripts/item/consume_2433907.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Antique Fantasy Damage Skin\r\n | (2433907) +if sm.addDamageSkin(2433907): + sm.chat("'Antique Fantasy Damage Skin\r\n' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2433913.py b/scripts/item/consume_2433913.py new file mode 100755 index 0000000..256a011 --- /dev/null +++ b/scripts/item/consume_2433913.py @@ -0,0 +1,5 @@ +# Yeti and Pepe Damage Skin +success = sm.addDamageSkin(2433913) +if success: + sm.chat("The Yeti and Pepe Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433913) diff --git a/scripts/item/consume_2433919.py b/scripts/item/consume_2433919.py new file mode 100755 index 0000000..9e6a031 --- /dev/null +++ b/scripts/item/consume_2433919.py @@ -0,0 +1,4 @@ +# Orange Mushroom Damage Skin +success = sm.addDamageSkin(2433919) +if success: + sm.chat("The Orange Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2433924.py b/scripts/item/consume_2433924.py new file mode 100755 index 0000000..88c6382 --- /dev/null +++ b/scripts/item/consume_2433924.py @@ -0,0 +1,10 @@ +# Black Wyvern Permanent Mount Coupon | (2433924) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433946.py b/scripts/item/consume_2433946.py new file mode 100755 index 0000000..3eb82ed --- /dev/null +++ b/scripts/item/consume_2433946.py @@ -0,0 +1,10 @@ +# Penguin Pack Mount Permanent Coupon | (2433946) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Penguin Pack' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Penguin Pack' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433947.py b/scripts/item/consume_2433947.py new file mode 100755 index 0000000..4b5ff38 --- /dev/null +++ b/scripts/item/consume_2433947.py @@ -0,0 +1,10 @@ +# Penguin Pack Mount 90-Day Coupon | (2433947) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Penguin Pack' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Penguin Pack' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433948.py b/scripts/item/consume_2433948.py new file mode 100755 index 0000000..4983f9e --- /dev/null +++ b/scripts/item/consume_2433948.py @@ -0,0 +1,10 @@ +# Precious Pirates Mount Permanent Coupon | (2433948) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Precious Pirates' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Precious Pirates' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433949.py b/scripts/item/consume_2433949.py new file mode 100755 index 0000000..f37330a --- /dev/null +++ b/scripts/item/consume_2433949.py @@ -0,0 +1,10 @@ +# Precious Pirates Mount 90-Day Coupon | (2433949) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Precious Pirates' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Precious Pirates' mount.") +sm.dispose() diff --git a/scripts/item/consume_2433964.py b/scripts/item/consume_2433964.py new file mode 100755 index 0000000..75ef701 --- /dev/null +++ b/scripts/item/consume_2433964.py @@ -0,0 +1,16 @@ +# 2433964 - Storage Room 4 Slot Coupon +from net.swordie.ms.constants import GameConstants + +inc = 4 +trunk = chr.getAccount().getTrunk() +slots = trunk.getSlotCount() + +if slots >= GameConstants.MAX_TRUNK_SIZE: + sm.sendSayOkay("You already have the max amount of storage space!") +else: + if slots + inc > GameConstants.MAX_TRUNK_SIZE: + inc = GameConstants.MAX_TRUNK_SIZE - slots + if sm.sendAskYesNo("Do you want to increase your storage space? It will open up #b" + str(inc) + "#k more slots"): + trunk.addSlotCount(inc) + sm.consumeItem() + diff --git a/scripts/item/consume_2433980.py b/scripts/item/consume_2433980.py new file mode 100755 index 0000000..36bc106 --- /dev/null +++ b/scripts/item/consume_2433980.py @@ -0,0 +1,5 @@ +# Slime and Mushroom Damage Skin +success = sm.addDamageSkin(2433980) +if success: + sm.chat("The Slime and Mushroom Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433980) diff --git a/scripts/item/consume_2433981.py b/scripts/item/consume_2433981.py new file mode 100755 index 0000000..119425d --- /dev/null +++ b/scripts/item/consume_2433981.py @@ -0,0 +1,5 @@ +# Pink bean Damage Skin +success = sm.addDamageSkin(2433981) +if success: + sm.chat("The Pink bean Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433981) diff --git a/scripts/item/consume_2434004.py b/scripts/item/consume_2434004.py new file mode 100755 index 0000000..bfe30f6 --- /dev/null +++ b/scripts/item/consume_2434004.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Alishan Damage Skin | (2434004) +if sm.addDamageSkin(2434004): + sm.chat("'Alishan Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434021.py b/scripts/item/consume_2434021.py new file mode 100755 index 0000000..dde4fa4 --- /dev/null +++ b/scripts/item/consume_2434021.py @@ -0,0 +1,4 @@ +sm.getChr().addHonorExp(10000) +sm.consumeItem(2434021) +sm.chat("You have gained 10,000 honor experience.") +sm.dispose() diff --git a/scripts/item/consume_2434025.py b/scripts/item/consume_2434025.py new file mode 100755 index 0000000..2b35bdc --- /dev/null +++ b/scripts/item/consume_2434025.py @@ -0,0 +1,10 @@ +# Pink Bean Balloon Mount (30 Days) Coupon | (2434025) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pink Bean Balloon (30 Days)' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pink Bean Balloon (30 Days)' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434038.py b/scripts/item/consume_2434038.py new file mode 100755 index 0000000..e820be9 --- /dev/null +++ b/scripts/item/consume_2434038.py @@ -0,0 +1,7 @@ +if sm.canHold(1672069): + if sm.canHold(1662073): + sm.giveItem(1662073) + sm.giveItem(1672069) + sm.consumeItem(2434038) + else: sm.sendOkay("Please check that you have room in your inventory.") +else: sm.sendOkay("Please check that you have room in your inventory.") \ No newline at end of file diff --git a/scripts/item/consume_2434039.py b/scripts/item/consume_2434039.py new file mode 100755 index 0000000..0b91d1c --- /dev/null +++ b/scripts/item/consume_2434039.py @@ -0,0 +1,7 @@ +if sm.canHold(1672069): + if sm.canHold(1662072): + sm.giveItem(1662072) + sm.giveItem(1672069) + sm.consumeItem(2434039) + else: sm.sendOkay("Please check that you have room in your inventory.") +else: sm.sendOkay("Please check that you have room in your inventory.") \ No newline at end of file diff --git a/scripts/item/consume_2434078.py b/scripts/item/consume_2434078.py new file mode 100755 index 0000000..247ff47 --- /dev/null +++ b/scripts/item/consume_2434078.py @@ -0,0 +1,10 @@ +# Submarine Mount 90-Day Coupon | (2434078) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Submarine' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Submarine' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434080.py b/scripts/item/consume_2434080.py new file mode 100755 index 0000000..ce80bf1 --- /dev/null +++ b/scripts/item/consume_2434080.py @@ -0,0 +1,10 @@ +# Helicopter Star Mount 90-Day Coupon | (2434080) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Helicopter Star' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Helicopter Star' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434081.py b/scripts/item/consume_2434081.py new file mode 100755 index 0000000..33063b1 --- /dev/null +++ b/scripts/item/consume_2434081.py @@ -0,0 +1,4 @@ +# Moon Bunny Damage Skin +success = sm.addDamageSkin(2434081) +if success: + sm.chat("The Moon Bunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434125.py b/scripts/item/consume_2434125.py new file mode 100755 index 0000000..2dec745 --- /dev/null +++ b/scripts/item/consume_2434125.py @@ -0,0 +1,22 @@ +# Violet Cube Fragment + +FRAGMENT = 2434125 +REWARD1 = 5062009 # red cube +REWARD2 = 5062010 # black cube + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= 10: + if sm.canHold(REWARD2): + sm.giveItem(REWARD2) + sm.consumeItem(FRAGMENT, 10) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +elif q >= 5: + if sm.canHold(REWARD1): + sm.giveItem(REWARD1) + sm.consumeItem(FRAGMENT, 5) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least 5 fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2434132.py b/scripts/item/consume_2434132.py new file mode 100755 index 0000000..2fbf418 --- /dev/null +++ b/scripts/item/consume_2434132.py @@ -0,0 +1,10 @@ +# Genie Mount Permanent Coupon | (2434132) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Genie' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Genie' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434147.py b/scripts/item/consume_2434147.py new file mode 100755 index 0000000..b8ea990 --- /dev/null +++ b/scripts/item/consume_2434147.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Irena's Band Damage Skin | (2434147) +if sm.addDamageSkin(2434147): + sm.chat("'Irena's Band Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434157.py b/scripts/item/consume_2434157.py new file mode 100755 index 0000000..88597b5 --- /dev/null +++ b/scripts/item/consume_2434157.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Damien's Band Damage Skin | (2434157) +if sm.addDamageSkin(2434157): + sm.chat("'Damien's Band Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434234.py b/scripts/item/consume_2434234.py new file mode 100755 index 0000000..45246e2 --- /dev/null +++ b/scripts/item/consume_2434234.py @@ -0,0 +1,10 @@ +# Beefy's Food Truck Permanent Coupon | (2434234) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Beefy's Food Truck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Beefy's Food Truck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434235.py b/scripts/item/consume_2434235.py new file mode 100755 index 0000000..18c2d78 --- /dev/null +++ b/scripts/item/consume_2434235.py @@ -0,0 +1,10 @@ +# Transformed Cloud Mount Permanent Coupon | (2434235) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Transformed Cloud' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Transformed Cloud' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434236.py b/scripts/item/consume_2434236.py new file mode 100755 index 0000000..7ed8e7d --- /dev/null +++ b/scripts/item/consume_2434236.py @@ -0,0 +1,10 @@ +# I'm a Dolphin Mount Permanent Coupon | (2434236) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'I'm a Dolphin' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'I'm a Dolphin' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434239.py b/scripts/item/consume_2434239.py new file mode 100755 index 0000000..50fd783 --- /dev/null +++ b/scripts/item/consume_2434239.py @@ -0,0 +1,4 @@ +# Digitized Damage Skin +success = sm.addDamageSkin(2434239) +if success: + sm.chat("The Digitized Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434241.py b/scripts/item/consume_2434241.py new file mode 100755 index 0000000..1ead612 --- /dev/null +++ b/scripts/item/consume_2434241.py @@ -0,0 +1,10 @@ +# Mystical Ram Mount Coupon | (2434241) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mystical Ram' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mystical Ram' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434248.py b/scripts/item/consume_2434248.py new file mode 100755 index 0000000..f2e8673 --- /dev/null +++ b/scripts/item/consume_2434248.py @@ -0,0 +1,5 @@ +# Rainbow Boom Damage Skin +success = sm.addDamageSkin(2434248) +if success: + sm.chat("The Rainbow Boom Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434248) diff --git a/scripts/item/consume_2434257.py b/scripts/item/consume_2434257.py new file mode 100755 index 0000000..17fdc56 --- /dev/null +++ b/scripts/item/consume_2434257.py @@ -0,0 +1,8 @@ +# 2434257 - Storage Room 4 Slot Coupon + +sm.setSpeakerID(9062004) +if (sm.sendAskYesNo("#rYou may add up to " + str((96-chr.getAccount().getTrunk().getSlotCount())) + + " slots to your inventory, would you like to continue?")): + sm.addStorageSlots(4) + sm.consumeItem(2434257) + diff --git a/scripts/item/consume_2434265.py b/scripts/item/consume_2434265.py new file mode 100755 index 0000000..d790a06 --- /dev/null +++ b/scripts/item/consume_2434265.py @@ -0,0 +1,39 @@ +# id 2434265 (Mysterious Cryptic Gift Box), field 100051011 +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=18;date=20190708") +sm.createQuestWithQRValue(25980, "normal=#163#;hard=#") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=19;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=20;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=21;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=22;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=23;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=24;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=25;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=26;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=27;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=28;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=29;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=30;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=31;date=20190708") +sm.startQuest(35904) +sm.createQuestWithQRValue(16700, "count=32;date=20190708") +sm.createQuestWithQRValue(16700, "count=33;date=20190708") +sm.createQuestWithQRValue(16700, "count=34;date=20190708") +sm.createQuestWithQRValue(16700, "count=35;date=20190708") +sm.createQuestWithQRValue(16700, "count=36;date=20190708") +sm.createQuestWithQRValue(16700, "count=37;date=20190708") +sm.createQuestWithQRValue(16700, "count=38;date=20190708") +sm.createQuestWithQRValue(16700, "count=39;date=20190708") diff --git a/scripts/item/consume_2434270.py b/scripts/item/consume_2434270.py new file mode 100755 index 0000000..74a5aec --- /dev/null +++ b/scripts/item/consume_2434270.py @@ -0,0 +1,27 @@ +# Selective 8 Slot Coupon +invs = [ + # not sure about the inv id + ["Equip", 1], + ["Use", 2], + ["Set-up", 3], + ["Etc", 4] +] +text = "I can use the Slot Coupon to increase it by #b#e8 slots#n#k. Which slots do you want to add? Ook?\r\n" +i = 0 +while i < len(invs): + text += "\r\n#L" + str(i) + "#" + str(invs[i][0]) + "#l" + i += 1 +text += "\r\n#L4# #eLemme think about it some more.#n#l" +answer = sm.sendNext(text) + +if answer >= 4: + sm.sendSayOkay("It will disappear when the #e#rduration#n#k runs out, so make sure to use it before then.") + sm.dispose() +else: + inv = invs[answer][0] + if sm.sendAskYesNo(inv + " inventory can be expanded by #r8 slots#k. Add more " + inv + " slots? "): + invSlots = 48 + sm.sendSayOkay("Your "+ inv +" inventory has been expanded to " + str(invSlots) +" slots.") + # TODO: handle slot expand. + else: + sm.sendNext("Use it again if you want to add more slots.") \ No newline at end of file diff --git a/scripts/item/consume_2434274.py b/scripts/item/consume_2434274.py new file mode 100755 index 0000000..d47411b --- /dev/null +++ b/scripts/item/consume_2434274.py @@ -0,0 +1,5 @@ +# Marshmallow Damage Skin +success = sm.addDamageSkin(2434274) +if success: + sm.chat("The Marshmallow Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434274) diff --git a/scripts/item/consume_2434275.py b/scripts/item/consume_2434275.py new file mode 100755 index 0000000..623a235 --- /dev/null +++ b/scripts/item/consume_2434275.py @@ -0,0 +1,10 @@ +# Surfboard Mount Permanent Coupon | (2434275) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Surfboard' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Surfboard' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434276.py b/scripts/item/consume_2434276.py new file mode 100755 index 0000000..cb025e5 --- /dev/null +++ b/scripts/item/consume_2434276.py @@ -0,0 +1,10 @@ +# Surfboard Mount 90-Day Coupon | (2434276) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Surfboard' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Surfboard' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434277.py b/scripts/item/consume_2434277.py new file mode 100755 index 0000000..5bcf2cd --- /dev/null +++ b/scripts/item/consume_2434277.py @@ -0,0 +1,10 @@ +# Aurora Doe Mount Permanent Coupon | (2434277) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Aurora Doe' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Aurora Doe' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434289.py b/scripts/item/consume_2434289.py new file mode 100755 index 0000000..e92ccae --- /dev/null +++ b/scripts/item/consume_2434289.py @@ -0,0 +1,5 @@ +# Mu Lung Dojo Damage Skin +success = sm.addDamageSkin(2434289) +if success: + sm.chat("The Mu Lung Dojo Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434289) diff --git a/scripts/item/consume_2434325.py b/scripts/item/consume_2434325.py new file mode 100755 index 0000000..b3803b2 --- /dev/null +++ b/scripts/item/consume_2434325.py @@ -0,0 +1,18 @@ +# Scarecrow Summoning Sack (2434325) | Used to spawn a Dojo Dummy on Client's position +from net.swordie.ms.constants import GameConstants + +STRAW_DUMMY_ID = 9305650 +DURATION = GameConstants.DOJO_DUMMY_DURATION * 60 * 1000 + +if not sm.getChr().getField().isTown(): + sm.chat("You can only spawn a dummy in a Town Map") + +elif sm.hasMobsInField(): + sm.chat("You cannot spawn a dummy whilst there are other monsters or dummies in the map") + +else: + sm.spawnMob(STRAW_DUMMY_ID, chr.getPosition().getX(), chr.getPosition().getY(), False, 999999999999999999) + sm.invokeAfterDelay(DURATION, "removeMobByTemplateId", STRAW_DUMMY_ID) + sm.chatBlue("The Training Dummy will be removed after "+ str(GameConstants.DOJO_DUMMY_DURATION) +" minutes.") + sm.consumeItem() +sm.dispose() diff --git a/scripts/item/consume_2434326.py b/scripts/item/consume_2434326.py new file mode 100755 index 0000000..e1e8271 --- /dev/null +++ b/scripts/item/consume_2434326.py @@ -0,0 +1,18 @@ +# Scarecrow Summoning Sack (2434326) | Used to spawn a Dojo Dummy on Client's position +from net.swordie.ms.constants import GameConstants + +STRAW_DUMMY_ID = 9305651 +DURATION = GameConstants.DOJO_DUMMY_DURATION * 60 * 1000 + +if not sm.getChr().getField().isTown(): + sm.chat("You can only spawn a dummy in a Town Map") + +elif sm.hasMobsInField(): + sm.chat("You cannot spawn a dummy whilst there are other monsters or dummies in the map") + +else: + sm.spawnMob(STRAW_DUMMY_ID, chr.getPosition().getX(), chr.getPosition().getY(), False, 999999999999999999) + sm.invokeAfterDelay(DURATION, "removeMobByTemplateId", STRAW_DUMMY_ID) + sm.chatBlue("The Training Dummy will be removed after "+ str(GameConstants.DOJO_DUMMY_DURATION) +" minutes.") + sm.consumeItem() +sm.dispose() diff --git a/scripts/item/consume_2434327.py b/scripts/item/consume_2434327.py new file mode 100755 index 0000000..40cc609 --- /dev/null +++ b/scripts/item/consume_2434327.py @@ -0,0 +1,18 @@ +# Scarecrow Summoning Sack (2434327) | Used to spawn a Dojo Dummy on Client's position +from net.swordie.ms.constants import GameConstants + +STRAW_DUMMY_ID = 9305652 +DURATION = GameConstants.DOJO_DUMMY_DURATION * 60 * 1000 + +if not sm.getChr().getField().isTown(): + sm.chat("You can only spawn a dummy in a Town Map") + +elif sm.hasMobsInField(): + sm.chat("You cannot spawn a dummy whilst there are other monsters or dummies in the map") + +else: + sm.spawnMob(STRAW_DUMMY_ID, chr.getPosition().getX(), chr.getPosition().getY(), False, 999999999999999999) + sm.invokeAfterDelay(DURATION, "removeMobByTemplateId", STRAW_DUMMY_ID) + sm.chatBlue("The Training Dummy will be removed after "+ str(GameConstants.DOJO_DUMMY_DURATION) +" minutes.") + sm.consumeItem() +sm.dispose() diff --git a/scripts/item/consume_2434374.py b/scripts/item/consume_2434374.py new file mode 100755 index 0000000..53e1e53 --- /dev/null +++ b/scripts/item/consume_2434374.py @@ -0,0 +1,4 @@ +# Autumn Festival Full Moon Damage Skin +success = sm.addDamageSkin(2434374) +if success: + sm.chat("The Autumn Festival Full Moon Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434375.py b/scripts/item/consume_2434375.py new file mode 100755 index 0000000..b739efc --- /dev/null +++ b/scripts/item/consume_2434375.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Bonfire Damage Skin | (2434375) +if sm.addDamageSkin(2434375): + sm.chat("'Bonfire Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434377.py b/scripts/item/consume_2434377.py new file mode 100755 index 0000000..a51e6bf --- /dev/null +++ b/scripts/item/consume_2434377.py @@ -0,0 +1,10 @@ +# Stroller Mount Coupon | (2434377) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Stroller' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Stroller' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434379.py b/scripts/item/consume_2434379.py new file mode 100755 index 0000000..a668faa --- /dev/null +++ b/scripts/item/consume_2434379.py @@ -0,0 +1,10 @@ +# Cygnus Knights Palanquin Mount Permanent Coupon | (2434379) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cygnus Knights Palanquin' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cygnus Knights Palanquin' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434380.py b/scripts/item/consume_2434380.py new file mode 100755 index 0000000..b199b47 --- /dev/null +++ b/scripts/item/consume_2434380.py @@ -0,0 +1,10 @@ +# Cygnus Knights Palanquin Mount 90-Day Coupon | (2434380) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cygnus Knights Palanquin' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cygnus Knights Palanquin' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434390.py b/scripts/item/consume_2434390.py new file mode 100755 index 0000000..d336544 --- /dev/null +++ b/scripts/item/consume_2434390.py @@ -0,0 +1,5 @@ +# Teddy Damage Skin +success = sm.addDamageSkin(2434390) +if success: + sm.chat("The Teddy Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434390) diff --git a/scripts/item/consume_2434391.py b/scripts/item/consume_2434391.py new file mode 100755 index 0000000..8b96889 --- /dev/null +++ b/scripts/item/consume_2434391.py @@ -0,0 +1,5 @@ +# Mighty Ursus Damage Skin +success = sm.addDamageSkin(2434391) +if success: + sm.chat("The Mighty Ursus Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434391) diff --git a/scripts/item/consume_2434470.py b/scripts/item/consume_2434470.py new file mode 100755 index 0000000..b9f7e9c --- /dev/null +++ b/scripts/item/consume_2434470.py @@ -0,0 +1,9 @@ +# Ursus Soul +souls = [2591509, 2591510, 2591511, 2591512, 2591513, 2591514, 2591515, 2591516, 2591517] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2434470, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2434470, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2434499.py b/scripts/item/consume_2434499.py new file mode 100755 index 0000000..f461ff4 --- /dev/null +++ b/scripts/item/consume_2434499.py @@ -0,0 +1,4 @@ +# Autumn Festival Fireworks Damage Skin +success = sm.addDamageSkin(2434499) +if success: + sm.chat("The Autumn Festival Fireworks Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434515.py b/scripts/item/consume_2434515.py new file mode 100755 index 0000000..c068004 --- /dev/null +++ b/scripts/item/consume_2434515.py @@ -0,0 +1,10 @@ +# Wriggling Mount Permanent Coupon | (2434515) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Wriggling' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Wriggling' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434516.py b/scripts/item/consume_2434516.py new file mode 100755 index 0000000..0442241 --- /dev/null +++ b/scripts/item/consume_2434516.py @@ -0,0 +1,10 @@ +# Wriggling Mount 90-Day Coupon | (2434516) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Wriggling' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Wriggling' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434517.py b/scripts/item/consume_2434517.py new file mode 100755 index 0000000..f14caf0 --- /dev/null +++ b/scripts/item/consume_2434517.py @@ -0,0 +1,10 @@ +# Midnight Train Mount Permanent Coupon | (2434517) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Midnight Train' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Midnight Train' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434518.py b/scripts/item/consume_2434518.py new file mode 100755 index 0000000..cec049f --- /dev/null +++ b/scripts/item/consume_2434518.py @@ -0,0 +1,10 @@ +# Midnight Train Mount 90-Day Coupon | (2434518) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Midnight Train' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Midnight Train' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434525.py b/scripts/item/consume_2434525.py new file mode 100755 index 0000000..48f388b --- /dev/null +++ b/scripts/item/consume_2434525.py @@ -0,0 +1,10 @@ +# Star-Spangled Banner Hat Mount 30-Day Coupon | (2434525) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Star-Spangled Hat' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Star-Spangled Hat' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434526.py b/scripts/item/consume_2434526.py new file mode 100755 index 0000000..81b9e2f --- /dev/null +++ b/scripts/item/consume_2434526.py @@ -0,0 +1,10 @@ +# Raging Bull Mount 30-Day Coupon | (2434526) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Raging Bull' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Raging Bull' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434527.py b/scripts/item/consume_2434527.py new file mode 100755 index 0000000..7c3153d --- /dev/null +++ b/scripts/item/consume_2434527.py @@ -0,0 +1,10 @@ +# Merlion Mount 30-Day Coupon | (2434527) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Merlion' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Merlion' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434528.py b/scripts/item/consume_2434528.py new file mode 100755 index 0000000..22b84f6 --- /dev/null +++ b/scripts/item/consume_2434528.py @@ -0,0 +1,5 @@ +# USA Damage Skin +success = sm.addDamageSkin(2434528) +if success: + sm.chat("The USA Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434528) diff --git a/scripts/item/consume_2434529.py b/scripts/item/consume_2434529.py new file mode 100755 index 0000000..786127f --- /dev/null +++ b/scripts/item/consume_2434529.py @@ -0,0 +1,5 @@ +# Churro Damage Skin +success = sm.addDamageSkin(2434529) +if success: + sm.chat("The Churro Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434529) diff --git a/scripts/item/consume_2434530.py b/scripts/item/consume_2434530.py new file mode 100755 index 0000000..72766db --- /dev/null +++ b/scripts/item/consume_2434530.py @@ -0,0 +1,5 @@ +# Singapore Night Damage Skin +success = sm.addDamageSkin(2434530) +if success: + sm.chat("The Singapore Night Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434530) diff --git a/scripts/item/consume_2434533.py b/scripts/item/consume_2434533.py new file mode 100755 index 0000000..33f592c --- /dev/null +++ b/scripts/item/consume_2434533.py @@ -0,0 +1,4 @@ +# Blood Damage Skin +success = sm.addDamageSkin(2434533) +if success: + sm.chat("The Blood Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434534.py b/scripts/item/consume_2434534.py new file mode 100755 index 0000000..8a90304 --- /dev/null +++ b/scripts/item/consume_2434534.py @@ -0,0 +1,4 @@ +# Zombie Damage Skin +success = sm.addDamageSkin(2434534) +if success: + sm.chat("The Zombie Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434536.py b/scripts/item/consume_2434536.py new file mode 100755 index 0000000..b39dbcb --- /dev/null +++ b/scripts/item/consume_2434536.py @@ -0,0 +1,10 @@ +# Madhouse Wheelchair | (2434536) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Permanent Madhouse Wheelchair' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Permanent Madhouse Wheelchair' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434544.py b/scripts/item/consume_2434544.py new file mode 100755 index 0000000..bdbfa92 --- /dev/null +++ b/scripts/item/consume_2434544.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kanna Damage Skin | (2434544) +if sm.addDamageSkin(2434544): + sm.chat("'Kanna Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434545.py b/scripts/item/consume_2434545.py new file mode 100755 index 0000000..a4b215a --- /dev/null +++ b/scripts/item/consume_2434545.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Hayato Damage Skin | (2434545) +if sm.addDamageSkin(2434545): + sm.chat("'Hayato Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434546.py b/scripts/item/consume_2434546.py new file mode 100755 index 0000000..efecc06 --- /dev/null +++ b/scripts/item/consume_2434546.py @@ -0,0 +1,4 @@ +# Scribbler Damage Skin +success = sm.addDamageSkin(2434546) +if success: + sm.chat("The Scribbler Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434570.py b/scripts/item/consume_2434570.py new file mode 100755 index 0000000..a14ff8a --- /dev/null +++ b/scripts/item/consume_2434570.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Tot's Damage Skin | (2434570) +if sm.addDamageSkin(2434570): + sm.chat("'Tot's Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434574.py b/scripts/item/consume_2434574.py new file mode 100755 index 0000000..1685731 --- /dev/null +++ b/scripts/item/consume_2434574.py @@ -0,0 +1,5 @@ +# Full Moon Damage Skin +success = sm.addDamageSkin(2434574) +if success: + sm.chat("The Full Moon Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434574) diff --git a/scripts/item/consume_2434575.py b/scripts/item/consume_2434575.py new file mode 100755 index 0000000..dabd9dd --- /dev/null +++ b/scripts/item/consume_2434575.py @@ -0,0 +1,4 @@ +# Sunny Damage Skin +success = sm.addDamageSkin(2434575) +if success: + sm.chat("The Sunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434580.py b/scripts/item/consume_2434580.py new file mode 100755 index 0000000..f339694 --- /dev/null +++ b/scripts/item/consume_2434580.py @@ -0,0 +1,10 @@ +# Ooh Song Pyun Mount 30-Day Coupon | (2434580) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Ooh Song Pyun' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Ooh Song Pyun' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434581.py b/scripts/item/consume_2434581.py new file mode 100755 index 0000000..4ddffd4 --- /dev/null +++ b/scripts/item/consume_2434581.py @@ -0,0 +1,10 @@ +# Moon and Stars Mount 30-Day Coupon | (2434581) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Moon and Stars' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Moon and Stars' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434582.py b/scripts/item/consume_2434582.py new file mode 100755 index 0000000..b31918e --- /dev/null +++ b/scripts/item/consume_2434582.py @@ -0,0 +1,10 @@ +# Mystical Butterflies Mount 30-Day Coupon | (2434582) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mystical Butterflies' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mystical Butterflies' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434584.py b/scripts/item/consume_2434584.py new file mode 100755 index 0000000..5183faa --- /dev/null +++ b/scripts/item/consume_2434584.py @@ -0,0 +1,30 @@ +PIECE_OF_TIME = 2434584 +QUANTITY_REQ = 5 + + +items = [ + 1003797, # Royal Warrior Helm + 1003798, # Royal Dunwitch Hat + 1003799, # Royal Ranger Beret + 1003800, # Royal Assassin Hood + 1003801, # Royal Wanderer Hat +] + +msg = "Get your " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_TIME) + "# and Choose your Armor #b\r\n" +for i in range(len(items)): + msg += "#L" + str(i) + "##v" + str(items[i]) + "# #z" + str(items[i]) + "##l\r\n" +selection = sm.sendNext(msg) + +if sm.getQuantityOfItem(PIECE_OF_TIME) == 1: + piece_string = "Piece" +else: + piece_string = "Pieces" + +if not sm.hasItem(PIECE_OF_TIME, QUANTITY_REQ): + sm.sendSayOkay("I see that you have #b" + str(sm.getQuantityOfItem(PIECE_OF_TIME)) + "#k " + piece_string + " of Time. " + + "You need at least #b" + str(QUANTITY_REQ) + "#kto exchange for a piece of equipment.") +elif not sm.canHold(items[selection]): + sm.sendSayOkay("Please make space in your inventory.") +else: + sm.consumeItem(PIECE_OF_TIME, QUANTITY_REQ) + sm.giveItem(items[selection]) \ No newline at end of file diff --git a/scripts/item/consume_2434585.py b/scripts/item/consume_2434585.py new file mode 100755 index 0000000..8cd0baf --- /dev/null +++ b/scripts/item/consume_2434585.py @@ -0,0 +1,30 @@ +PIECE_OF_MOCKERY = 2434585 +QUANTITY_REQ = 5 + + +items = [ + 1042254, # Eagle Eye Warrior Armor + 1042255, # Eagle Eye Dunwitch Robe + 1042256, # Eagle Eye Ranger Cowl + 1042257, # Eagle Eye Assassin Shirt + 1042258, # Eagle Eye Wanderer Coat +] + +msg = "Get your " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_MOCKERY) + "# and Choose your Armor #b\r\n" +for i in range(len(items)): + msg += "#L" + str(i) + "##v" + str(items[i]) + "# #z" + str(items[i]) + "##l\r\n" +selection = sm.sendNext(msg) + +if sm.getQuantityOfItem(PIECE_OF_MOCKERY) == 1: + piece_string = "Piece" +else: + piece_string = "Pieces" + +if not sm.hasItem(PIECE_OF_MOCKERY, QUANTITY_REQ): + sm.sendSayOkay("I see that you have #b" + str(sm.getQuantityOfItem(PIECE_OF_MOCKERY)) + "#k " + piece_string + " of Mockery. " + + "You need at least #b" + str(QUANTITY_REQ) + "#kto exchange for a piece of equipment.") +elif not sm.canHold(items[selection]): + sm.sendSayOkay("Please make space in your inventory.") +else: + sm.consumeItem(PIECE_OF_MOCKERY, QUANTITY_REQ) + sm.giveItem(items[selection]) \ No newline at end of file diff --git a/scripts/item/consume_2434586.py b/scripts/item/consume_2434586.py new file mode 100755 index 0000000..6d68148 --- /dev/null +++ b/scripts/item/consume_2434586.py @@ -0,0 +1,29 @@ +PIECE_OF_ANGUISH = 2434586 +QUANTITY_REQ = 5 + +items = [ + 1062165, # Trixter Warrior Pants + 1062166, # Trixter Dunwitch Pants + 1062167, # Trixter Ranger Pants + 1062168, # Trixter Assassin Pants + 1062169, # Trixter Wanderer Pants +] + +msg = "Get your " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_ANGUISH) + "# and choose your armor #b\r\n" +for i in range(len(items)): + msg += "#L" + str(i) + "##v" + str(items[i]) + "# #z" + str(items[i]) + "##l\r\n" +selection = sm.sendNext(msg) + +if sm.getQuantityOfItem(PIECE_OF_ANGUISH) == 1: + piece_string = "Piece" +else: + piece_string = "Pieces" + +if not sm.hasItem(PIECE_OF_ANGUISH, QUANTITY_REQ): + sm.sendSayOkay("I see that you have #b" + str(sm.getQuantityOfItem(PIECE_OF_ANGUISH)) + "#k " + piece_string + " of Anguish. " + + "You need at least #b" + str(QUANTITY_REQ) + "#kto exchange for a piece of equipment.") +elif not sm.canHold(items[selection]): + sm.sendSayOkay("Please make space in your inventory.") +else: + sm.consumeItem(PIECE_OF_ANGUISH, QUANTITY_REQ) + sm.giveItem(items[selection]) \ No newline at end of file diff --git a/scripts/item/consume_2434587.py b/scripts/item/consume_2434587.py new file mode 100755 index 0000000..1720b8d --- /dev/null +++ b/scripts/item/consume_2434587.py @@ -0,0 +1,56 @@ +PIECE_OF_DESTRUCTION = 2434587 +QUANTITY_REQ = 15 + +items = [ + 1212127, # Fafnir Mana Cradle + 1222058, # Fafnir Angelic Shooter + 1232057, # Fafnir Death Bringer + 1242060, # Fafnir Split Edge + 1252015, # Fafnir Scepter + 1262016, # Fafnir Psy-limiter + 1272015, # Fafnir Chain + 1282015, # Fafnir Lucent Gauntlet + 1302275, # Fafnir Mistilteinn + 1312153, # Fafnir Twin Cleaver + 1322203, # Fafnir Guardian Hammer + 1332225, # Fafnir Damascus + 1342082, # Fafnir Rapid Edge + 1362090, # Fafnir Ciel Claire + 1372177, # Fafnir Mana Taker + 1382208, # Fafnir Mana Crown + 1402196, # Fafnir Penitent Tears + 1412135, # Fafnir Battle Cleaver + 1422140, # Fafnir Lightning Striker + 1432167, # Fafnir Brionak + 1442223, # Fafnir Moon Glaive + 1452205, # Fafnir Wind Chaser + 1462193, # Fafnir Windwing Shooter + 1472214, # Fafnir Risk Holder + 1482168, # Fafnir Perry Talon + 1492179, # Fafnir Zeliska + 1522094, # Fafnir Dual Windwing + 1532098, # Fafnir Lost Cannon + 1542063, # Fafnir Raven Ring + 1552063, # Fafnir Indigo Flash + 1582016, # Fafnir Big Mountain + 1592018, # Fafnir Ancient Bow +] + +msg = "Get your " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_DESTRUCTION) + "# and Choose your Weapon #b\r\n" +for i in range(len(items)): + msg += "#L" + str(i) + "##v" + str(items[i]) + "# #z" + str(items[i]) + "##l\r\n" +selection = sm.sendNext(msg) + +if sm.getQuantityOfItem(PIECE_OF_DESTRUCTION) == 1: + piece_string = "Piece" +else: + piece_string = "Pieces" + +if not sm.hasItem(PIECE_OF_DESTRUCTION, QUANTITY_REQ): + sm.sendSayOkay("I see that you have #b" + str(sm.getQuantityOfItem(PIECE_OF_DESTRUCTION)) + "#k " + piece_string + " of Destruction. " + + "You need at least #b" + str(QUANTITY_REQ) + "#k to exchange for a piece of equipment.") +elif not sm.canHold(items[selection]): + sm.sendSayOkay("Please make space in your inventory.") +else: + sm.consumeItem(PIECE_OF_DESTRUCTION, QUANTITY_REQ) + sm.giveItem(items[selection]) \ No newline at end of file diff --git a/scripts/item/consume_2434588.py b/scripts/item/consume_2434588.py new file mode 100755 index 0000000..08ea531 --- /dev/null +++ b/scripts/item/consume_2434588.py @@ -0,0 +1,50 @@ +PIECE_OF_RUIN = 2434588 +QUANTITY_REQ = 15 + +items = [ + 1212014, + 1222014, + 1232014, + 1242014, + 1242042, + 1252014, + 1262015, + 1272014, + 1282014, + 1302152, + 1312065, + 1322096, + 1332130, + 1342036, + 1362019, + 1372084, + 1382104, + 1402095, + 1412065, + 1422066, + 1432086, + 1442116, + 1452111, + 1462099, + 1472122, + 1482084, + 1492085, + 1522018, + 1532018, + 1542015, + 1552015, + 1582015 +] + +msg = "Get your " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_RUIN) + "# and Choose your Weapon #b\r\n" +for i in range(len(items)): + msg += "#L" + str(i) + "##v" + str(items[i]) + "# #z" + str(items[i]) + "##l\r\n" +selection = sm.sendNext(msg) + +if not sm.hasItem(PIECE_OF_RUIN, QUANTITY_REQ): + sm.sendSayOkay("You need at least " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_RUIN) + "#.") +elif not sm.canHold(items[selection]): + sm.sendSayOkay("Please make space in your inventory.") +else: + sm.consumeItem(PIECE_OF_RUIN, QUANTITY_REQ) + sm.giveItem(items[selection]) \ No newline at end of file diff --git a/scripts/item/consume_2434589.py b/scripts/item/consume_2434589.py new file mode 100755 index 0000000..18b69e6 --- /dev/null +++ b/scripts/item/consume_2434589.py @@ -0,0 +1,44 @@ +PIECE_OF_DARKNESS = 2434589 +QUANTITY_REQ = 5 + + +items = [ + 1003172, + 1003173, + 1003174, + 1003175, + 1003176, + 1102275, + 1102276, + 1102277, + 1102278, + 1102279, + 1082295, + 1082296, + 1082297, + 1082298, + 1082299, + 1052314, + 1052315, + 1052316, + 1052317, + 1052318, + 1072485, + 1072486, + 1072487, + 1072488, + 1072489, +] + +msg = "Get your " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_DARKNESS) + "# and Choose your Weapon #b\r\n" +for i in range(len(items)): + msg += "#L" + str(i) + "##v" + str(items[i]) + "# #z" + str(items[i]) + "##l\r\n" +selection = sm.sendNext(msg) + +if not sm.hasItem(PIECE_OF_DARKNESS, QUANTITY_REQ): + sm.sendSayOkay("You need at least " + str(QUANTITY_REQ) + " #v" + str(PIECE_OF_DARKNESS) + "#.") +elif not sm.canHold(items[selection]): + sm.sendSayOkay("Please make space in your inventory.") +else: + sm.consumeItem(PIECE_OF_DARKNESS, QUANTITY_REQ) + sm.giveItem(items[selection]) \ No newline at end of file diff --git a/scripts/item/consume_2434601.py b/scripts/item/consume_2434601.py new file mode 100755 index 0000000..781fb8b --- /dev/null +++ b/scripts/item/consume_2434601.py @@ -0,0 +1,5 @@ +# Invisible Damage Skin +success = sm.addDamageSkin(2434601) +if success: + sm.chat("The Invisible Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434601) diff --git a/scripts/item/consume_2434603.py b/scripts/item/consume_2434603.py new file mode 100755 index 0000000..f686e32 --- /dev/null +++ b/scripts/item/consume_2434603.py @@ -0,0 +1,10 @@ +# High Quality Single Passenger Classic Car Mount | (2434603) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'High Quality Single Passenger Classic Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'High Quality Single Passenger Classic Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434618.py b/scripts/item/consume_2434618.py new file mode 100755 index 0000000..e6a3287 --- /dev/null +++ b/scripts/item/consume_2434618.py @@ -0,0 +1,10 @@ +# Demon Mask Mount | (2434618) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Demon Mask' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Demon Mask' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434619.py b/scripts/item/consume_2434619.py new file mode 100755 index 0000000..4b59a12 --- /dev/null +++ b/scripts/item/consume_2434619.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Nine-Tailed Fox Damage Skin | (2434619) +if sm.addDamageSkin(2434619): + sm.chat("'Nine-Tailed Fox Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434649.py b/scripts/item/consume_2434649.py new file mode 100755 index 0000000..affed6c --- /dev/null +++ b/scripts/item/consume_2434649.py @@ -0,0 +1,10 @@ +# Wind Breaker Mount Permanent Coupon | (2434649) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Wind Breaker' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Wind Breaker' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434650.py b/scripts/item/consume_2434650.py new file mode 100755 index 0000000..0254b99 --- /dev/null +++ b/scripts/item/consume_2434650.py @@ -0,0 +1,10 @@ +# Wind Breaker Mount 90-Day Coupon | (2434650) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Wind Breaker' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Wind Breaker' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434654.py b/scripts/item/consume_2434654.py new file mode 100755 index 0000000..2a1040f --- /dev/null +++ b/scripts/item/consume_2434654.py @@ -0,0 +1,5 @@ +# Murgoth Damage Skin +success = sm.addDamageSkin(2434654) +if success: + sm.chat("The Murgoth Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434654) diff --git a/scripts/item/consume_2434660.py b/scripts/item/consume_2434660.py new file mode 100755 index 0000000..83b027f --- /dev/null +++ b/scripts/item/consume_2434660.py @@ -0,0 +1,10 @@ +# High Quality Classic Car | (2434660) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'High Quality Classic Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'High Quality Classic Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434662.py b/scripts/item/consume_2434662.py new file mode 100755 index 0000000..1fc8732 --- /dev/null +++ b/scripts/item/consume_2434662.py @@ -0,0 +1,5 @@ +# Jelly Beans Damage Skin +success = sm.addDamageSkin(2434662) +if success: + sm.chat("The Jelly Beans Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434662) diff --git a/scripts/item/consume_2434663.py b/scripts/item/consume_2434663.py new file mode 100755 index 0000000..cb8c557 --- /dev/null +++ b/scripts/item/consume_2434663.py @@ -0,0 +1,5 @@ +# Donut Damage Skin +success = sm.addDamageSkin(2434663) +if success: + sm.chat("The Donut Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434663) diff --git a/scripts/item/consume_2434664.py b/scripts/item/consume_2434664.py new file mode 100755 index 0000000..0817680 --- /dev/null +++ b/scripts/item/consume_2434664.py @@ -0,0 +1,5 @@ +# Soft-ServeDamage Skin +success = sm.addDamageSkin(2434664) +if success: + sm.chat("The Soft-Serve Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434664) diff --git a/scripts/item/consume_2434674.py b/scripts/item/consume_2434674.py new file mode 100755 index 0000000..1965642 --- /dev/null +++ b/scripts/item/consume_2434674.py @@ -0,0 +1,10 @@ +# Mad Mimet Mount 30-Day Coupon | (2434674) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mad Mimet' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mad Mimet' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434710.py b/scripts/item/consume_2434710.py new file mode 100755 index 0000000..0ee32a3 --- /dev/null +++ b/scripts/item/consume_2434710.py @@ -0,0 +1,5 @@ +# MVP Special Damage Skin +success = sm.addDamageSkin(2434710) +if success: + sm.chat("The MVP Special Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434710) diff --git a/scripts/item/consume_2434728.py b/scripts/item/consume_2434728.py new file mode 100755 index 0000000..991774e --- /dev/null +++ b/scripts/item/consume_2434728.py @@ -0,0 +1,10 @@ +# Demolishizer Mount Coupon | (2434728) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Demolishizer' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Demolishizer' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434735.py b/scripts/item/consume_2434735.py new file mode 100755 index 0000000..7c77158 --- /dev/null +++ b/scripts/item/consume_2434735.py @@ -0,0 +1,10 @@ +# Pterosaur Mount (Permanent) Coupon | (2434735) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pterosaur' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pterosaur' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434736.py b/scripts/item/consume_2434736.py new file mode 100755 index 0000000..9c24e44 --- /dev/null +++ b/scripts/item/consume_2434736.py @@ -0,0 +1,10 @@ +# Pterosaur Mount (90 Day) Coupon | (2434736) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pterosaur' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pterosaur' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434737.py b/scripts/item/consume_2434737.py new file mode 100755 index 0000000..34e55e1 --- /dev/null +++ b/scripts/item/consume_2434737.py @@ -0,0 +1,10 @@ +# Origami Boat Mount (Permanent) Coupon | (2434737) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Origami Boat' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Origami Boat' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434738.py b/scripts/item/consume_2434738.py new file mode 100755 index 0000000..b9f6da2 --- /dev/null +++ b/scripts/item/consume_2434738.py @@ -0,0 +1,10 @@ +# Origami Boat Mount (90 Day) Coupon | (2434738) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Origami Boat' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Origami Boat' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434741.py b/scripts/item/consume_2434741.py new file mode 100755 index 0000000..5cdeb1b --- /dev/null +++ b/scripts/item/consume_2434741.py @@ -0,0 +1,4 @@ +# Slime and Mushroom Damage Skin +success = sm.addDamageSkin(2434741) +if success: + sm.chat("The Slime and Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434742.py b/scripts/item/consume_2434742.py new file mode 100755 index 0000000..7824c95 --- /dev/null +++ b/scripts/item/consume_2434742.py @@ -0,0 +1,4 @@ +# Pink Bean Damage Skin +success = sm.addDamageSkin(2434742) +if success: + sm.chat("The Pink Bean Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434761.py b/scripts/item/consume_2434761.py new file mode 100755 index 0000000..c036860 --- /dev/null +++ b/scripts/item/consume_2434761.py @@ -0,0 +1,10 @@ +# Pulverizer Mount Coupon | (2434761) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Pulverizer' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Pulverizer' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434762.py b/scripts/item/consume_2434762.py new file mode 100755 index 0000000..f70a030 --- /dev/null +++ b/scripts/item/consume_2434762.py @@ -0,0 +1,10 @@ +# Mini Black Heaven Mount Coupon | (2434762) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mini Black Heaven' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mini Black Heaven' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434782.py b/scripts/item/consume_2434782.py new file mode 100755 index 0000000..cab5dae --- /dev/null +++ b/scripts/item/consume_2434782.py @@ -0,0 +1,16 @@ +# White Bonus Potential Fragment + +FRAGMENT = 2434782 +QUANTITY = 10 +REWARD = 2048307 # 100% bonus potential scroll + +q = sm.getQuantityOfItem(FRAGMENT) + +if q >= QUANTITY: + if sm.canHold(REWARD): + sm.giveItem(REWARD) + sm.consumeItem(FRAGMENT, QUANTITY) + else: + sm.systemMessage("Make sure you have enough space in your inventory..") +else: + sm.systemMessage("One must have at least " + str(QUANTITY) + " fragments to unleash the magic powers..") \ No newline at end of file diff --git a/scripts/item/consume_2434817.py b/scripts/item/consume_2434817.py new file mode 100755 index 0000000..47b9dff --- /dev/null +++ b/scripts/item/consume_2434817.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Cube Damage Skin | (2434817) +if sm.addDamageSkin(2434817): + sm.chat("'Cube Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434818.py b/scripts/item/consume_2434818.py new file mode 100755 index 0000000..a7644ae --- /dev/null +++ b/scripts/item/consume_2434818.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# One Winter Night Damage Skin | (2434818) +if sm.addDamageSkin(2434818): + sm.chat("'One Winter Night Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434824.py b/scripts/item/consume_2434824.py new file mode 100755 index 0000000..7cdc614 --- /dev/null +++ b/scripts/item/consume_2434824.py @@ -0,0 +1,5 @@ +# Monster Park Damage Skin +success = sm.addDamageSkin(2434824) +if success: + sm.chat("The Monster Park Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434824) diff --git a/scripts/item/consume_2434868.py b/scripts/item/consume_2434868.py new file mode 100755 index 0000000..8bc61db --- /dev/null +++ b/scripts/item/consume_2434868.py @@ -0,0 +1,5 @@ +# Christmas Lights Damage Skin +success = sm.addDamageSkin(2434868) +if success: + sm.chat("The Christmas Lights Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2434868) diff --git a/scripts/item/consume_2434871.py b/scripts/item/consume_2434871.py new file mode 100755 index 0000000..a266903 --- /dev/null +++ b/scripts/item/consume_2434871.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chess Damage Skin | (2434871) +if sm.addDamageSkin(2434871): + sm.chat("'Chess Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434873.py b/scripts/item/consume_2434873.py new file mode 100755 index 0000000..1651e1c --- /dev/null +++ b/scripts/item/consume_2434873.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Secret Damage Skin_Music | (2434873) +if sm.addDamageSkin(2434873): + sm.chat("'Secret Damage Skin_Music ' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434877.py b/scripts/item/consume_2434877.py new file mode 100755 index 0000000..34c4df5 --- /dev/null +++ b/scripts/item/consume_2434877.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Secret Damage Skin_Special Character | (2434877) +if sm.addDamageSkin(2434877): + sm.chat("'Secret Damage Skin_Special Character ' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2434914.py b/scripts/item/consume_2434914.py new file mode 100755 index 0000000..145e654 --- /dev/null +++ b/scripts/item/consume_2434914.py @@ -0,0 +1,10 @@ +# Neinheart Snowfield Mount 90-Day Coupon | (2434914) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Neinheart Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Neinheart Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434915.py b/scripts/item/consume_2434915.py new file mode 100755 index 0000000..9b439f1 --- /dev/null +++ b/scripts/item/consume_2434915.py @@ -0,0 +1,10 @@ +# Cygnus Snowfield Mount 90-Day Coupon | (2434915) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cygnus Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cygnus Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434918.py b/scripts/item/consume_2434918.py new file mode 100755 index 0000000..26f44fb --- /dev/null +++ b/scripts/item/consume_2434918.py @@ -0,0 +1,10 @@ +# Orchid Snowfield Mount 90-Day Coupon | (2434918) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Orchid Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Orchid Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434923.py b/scripts/item/consume_2434923.py new file mode 100755 index 0000000..d66aaab --- /dev/null +++ b/scripts/item/consume_2434923.py @@ -0,0 +1,10 @@ +# White Mage Snowfield 90-Day Mount Coupon | (2434923) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'White Mage Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'White Mage Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434924.py b/scripts/item/consume_2434924.py new file mode 100755 index 0000000..75750f2 --- /dev/null +++ b/scripts/item/consume_2434924.py @@ -0,0 +1,10 @@ +# Hilla Snowfield Mount 90-Day Coupon | (2434924) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hilla Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hilla Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434925.py b/scripts/item/consume_2434925.py new file mode 100755 index 0000000..74660b3 --- /dev/null +++ b/scripts/item/consume_2434925.py @@ -0,0 +1,10 @@ +# Neinheart Snowfield Permanent Mount Coupon | (2434925) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Neinheart Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Neinheart Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434926.py b/scripts/item/consume_2434926.py new file mode 100755 index 0000000..8ec4650 --- /dev/null +++ b/scripts/item/consume_2434926.py @@ -0,0 +1,10 @@ +# Cygnus Snowfield Permanent Mount Coupon | (2434926) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cygnus Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cygnus Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434927.py b/scripts/item/consume_2434927.py new file mode 100755 index 0000000..e62f75f --- /dev/null +++ b/scripts/item/consume_2434927.py @@ -0,0 +1,10 @@ +# Orchid Snowfield Permanent Mount Coupon | (2434927) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Orchid Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Orchid Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434928.py b/scripts/item/consume_2434928.py new file mode 100755 index 0000000..2ddd79d --- /dev/null +++ b/scripts/item/consume_2434928.py @@ -0,0 +1,10 @@ +# Hilla Snowfield Permanent Mount Coupon | (2434928) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Hilla Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Hilla Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434967.py b/scripts/item/consume_2434967.py new file mode 100755 index 0000000..150f514 --- /dev/null +++ b/scripts/item/consume_2434967.py @@ -0,0 +1,10 @@ +# Rudolph Sleigh Mount (Permanent) Coupon | (2434967) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rudolph Sleigh' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rudolph Sleigh' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434968.py b/scripts/item/consume_2434968.py new file mode 100755 index 0000000..96d36c0 --- /dev/null +++ b/scripts/item/consume_2434968.py @@ -0,0 +1,10 @@ +# Rudolph Sleigh Mount (90 Day) Coupon | (2434968) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Rudolph Sleigh' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Rudolph Sleigh' mount.") +sm.dispose() diff --git a/scripts/item/consume_2434971.py b/scripts/item/consume_2434971.py new file mode 100755 index 0000000..e076b16 --- /dev/null +++ b/scripts/item/consume_2434971.py @@ -0,0 +1,5 @@ +# Poison Flower Monsterbloom + +chr.getAccount().getMonsterCollection().addMobAndUpdateClient(9300174, chr) +sm.consumeItem() +sm.dispose() diff --git a/scripts/item/consume_2434975.py b/scripts/item/consume_2434975.py new file mode 100755 index 0000000..c8748b6 --- /dev/null +++ b/scripts/item/consume_2434975.py @@ -0,0 +1,4 @@ +# Merry Christmas Damage Skin +success = sm.addDamageSkin(2434975) +if success: + sm.chat("The Merry Christmas Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434976.py b/scripts/item/consume_2434976.py new file mode 100755 index 0000000..6be56c7 --- /dev/null +++ b/scripts/item/consume_2434976.py @@ -0,0 +1,4 @@ +# Snowflake Damage Skin +success = sm.addDamageSkin(2434976) +if success: + sm.chat("The Snowflake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434979.py b/scripts/item/consume_2434979.py new file mode 100755 index 0000000..722a605 --- /dev/null +++ b/scripts/item/consume_2434979.py @@ -0,0 +1,4 @@ +# Striped Damage Skin +success = sm.addDamageSkin(2434979) +if success: + sm.chat("The Striped Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2434980.py b/scripts/item/consume_2434980.py new file mode 100755 index 0000000..ba2fde7 --- /dev/null +++ b/scripts/item/consume_2434980.py @@ -0,0 +1,4 @@ +# Crown Damage Skin +success = sm.addDamageSkin(2434980) +if success: + sm.chat("The Crown Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435024.py b/scripts/item/consume_2435024.py new file mode 100755 index 0000000..c6cb18b --- /dev/null +++ b/scripts/item/consume_2435024.py @@ -0,0 +1,4 @@ +# Striped Damage Skin +success = sm.addDamageSkin(2435024) +if success: + sm.chat("The Striped Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435025.py b/scripts/item/consume_2435025.py new file mode 100755 index 0000000..a689006 --- /dev/null +++ b/scripts/item/consume_2435025.py @@ -0,0 +1,4 @@ +# Yeti and Pepe Damage Skin +success = sm.addDamageSkin(2435025) +if success: + sm.chat("The Yeti and Pepe Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435026.py b/scripts/item/consume_2435026.py new file mode 100755 index 0000000..365ff09 --- /dev/null +++ b/scripts/item/consume_2435026.py @@ -0,0 +1,4 @@ +# Slime and Mushroom Damage Skin +success = sm.addDamageSkin(2435026) +if success: + sm.chat("The Slime and Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435027.py b/scripts/item/consume_2435027.py new file mode 100755 index 0000000..cf7806d --- /dev/null +++ b/scripts/item/consume_2435027.py @@ -0,0 +1,4 @@ +# Rainbow Boom Damage Skin +success = sm.addDamageSkin(2435027) +if success: + sm.chat("The Rainbow Boom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435029.py b/scripts/item/consume_2435029.py new file mode 100755 index 0000000..a7a7395 --- /dev/null +++ b/scripts/item/consume_2435029.py @@ -0,0 +1,4 @@ +# Marshmallow Damage Skin +success = sm.addDamageSkin(2435029) +if success: + sm.chat("The Marshmallow Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435031.py b/scripts/item/consume_2435031.py new file mode 100755 index 0000000..74a9685 --- /dev/null +++ b/scripts/item/consume_2435031.py @@ -0,0 +1,9 @@ +# Pink Mong Soul +souls = [2591528, 2591529, 2591530, 2591531, 2591532, 2591533, 2591534] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2435031, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2435031, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2435043.py b/scripts/item/consume_2435043.py new file mode 100755 index 0000000..4107cce --- /dev/null +++ b/scripts/item/consume_2435043.py @@ -0,0 +1,4 @@ +# Heroes Phantom Damage Skin +success = sm.addDamageSkin(2435043) +if success: + sm.chat("The Heroes Phantom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435044.py b/scripts/item/consume_2435044.py new file mode 100755 index 0000000..a78b74c --- /dev/null +++ b/scripts/item/consume_2435044.py @@ -0,0 +1,4 @@ +# Heroes Mercedes Damage Skin +success = sm.addDamageSkin(2435044) +if success: + sm.chat("The Heroes Mercedes Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435045.py b/scripts/item/consume_2435045.py new file mode 100755 index 0000000..97d5fbe --- /dev/null +++ b/scripts/item/consume_2435045.py @@ -0,0 +1,4 @@ +# Sweet Tea Cake Damage Skin +success = sm.addDamageSkin(2435045) +if success: + sm.chat("The Sweet Tea Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435046.py b/scripts/item/consume_2435046.py new file mode 100755 index 0000000..7427962 --- /dev/null +++ b/scripts/item/consume_2435046.py @@ -0,0 +1,5 @@ +# Fireworks Damage Skin +success = sm.addDamageSkin(2435046) +if success: + sm.chat("The Fireworks Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435046) diff --git a/scripts/item/consume_2435047.py b/scripts/item/consume_2435047.py new file mode 100755 index 0000000..8a8cad6 --- /dev/null +++ b/scripts/item/consume_2435047.py @@ -0,0 +1,5 @@ +# Heart Balloon Damage Skin +success = sm.addDamageSkin(2435047) +if success: + sm.chat("The Heart Balloon Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435047) diff --git a/scripts/item/consume_2435089.py b/scripts/item/consume_2435089.py new file mode 100755 index 0000000..58cb305 --- /dev/null +++ b/scripts/item/consume_2435089.py @@ -0,0 +1,10 @@ +# Steam Cylinder Wing Mount (Permanent) Coupon | (2435089) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Steam Cylinder Wing' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Steam Cylinder Wing' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435090.py b/scripts/item/consume_2435090.py new file mode 100755 index 0000000..d06410f --- /dev/null +++ b/scripts/item/consume_2435090.py @@ -0,0 +1,10 @@ +# Steam Cylinder Wing Mount (90 Day) Coupon | (2435090) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Steam Cylinder Wing' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Steam Cylinder Wing' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435091.py b/scripts/item/consume_2435091.py new file mode 100755 index 0000000..9e61c74 --- /dev/null +++ b/scripts/item/consume_2435091.py @@ -0,0 +1,10 @@ +# Snow Blossom Pentacle Mount (Permanent) Coupon | (2435091) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Snow Blossom Pentacle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Snow Blossom Pentacle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435092.py b/scripts/item/consume_2435092.py new file mode 100755 index 0000000..b82b02a --- /dev/null +++ b/scripts/item/consume_2435092.py @@ -0,0 +1,10 @@ +# Snow Blossom Pentacle Mount (90 Day) Coupon | (2435092) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Snow Blossom Pentacle' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Snow Blossom Pentacle' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435101.py b/scripts/item/consume_2435101.py new file mode 100755 index 0000000..d336972 --- /dev/null +++ b/scripts/item/consume_2435101.py @@ -0,0 +1,4 @@ +# Couples Army Damage Skin +success = sm.addDamageSkin(2435101) +if success: + sm.chat("The Couples Army Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435102.py b/scripts/item/consume_2435102.py new file mode 100755 index 0000000..df90b8f --- /dev/null +++ b/scripts/item/consume_2435102.py @@ -0,0 +1,4 @@ +# Gentle Springtime Breeze Damage Skin +success = sm.addDamageSkin(2435102) +if success: + sm.chat("The Gentle Springtime Breeze Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435112.py b/scripts/item/consume_2435112.py new file mode 100755 index 0000000..8fe7ea9 --- /dev/null +++ b/scripts/item/consume_2435112.py @@ -0,0 +1,10 @@ +# Frog Wagon Mount (Permanent) Coupon | (2435112) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Frog Wagon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Frog Wagon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435113.py b/scripts/item/consume_2435113.py new file mode 100755 index 0000000..cfcf46f --- /dev/null +++ b/scripts/item/consume_2435113.py @@ -0,0 +1,10 @@ +# Ostrich Wagon Mount (Permanent) Coupon | (2435113) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Ostrich Wagon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Ostrich Wagon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435114.py b/scripts/item/consume_2435114.py new file mode 100755 index 0000000..6132ceb --- /dev/null +++ b/scripts/item/consume_2435114.py @@ -0,0 +1,10 @@ +# Camel Wagon Mount (Permanent) Coupon | (2435114) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Camel Wagon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Camel Wagon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435117.py b/scripts/item/consume_2435117.py new file mode 100755 index 0000000..465ba7a --- /dev/null +++ b/scripts/item/consume_2435117.py @@ -0,0 +1,4 @@ +# Rainbow Boom Damage Skin +success = sm.addDamageSkin(2435117) +if success: + sm.chat("The Rainbow Boom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435140.py b/scripts/item/consume_2435140.py new file mode 100755 index 0000000..6dc988e --- /dev/null +++ b/scripts/item/consume_2435140.py @@ -0,0 +1,4 @@ +# Neon Sign Damage Skin +success = sm.addDamageSkin(2435140) +if success: + sm.chat("The Neon Sign Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435141.py b/scripts/item/consume_2435141.py new file mode 100755 index 0000000..f06fdc3 --- /dev/null +++ b/scripts/item/consume_2435141.py @@ -0,0 +1,5 @@ +# Freeze Tag Damage Skin +success = sm.addDamageSkin(2435141) +if success: + sm.chat("The Freeze Tag Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435141) diff --git a/scripts/item/consume_2435157.py b/scripts/item/consume_2435157.py new file mode 100755 index 0000000..7ca0a95 --- /dev/null +++ b/scripts/item/consume_2435157.py @@ -0,0 +1,5 @@ +# Calligraphy Damage Skin +success = sm.addDamageSkin(2435157) +if success: + sm.chat("The Calligraphy Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435157) diff --git a/scripts/item/consume_2435158.py b/scripts/item/consume_2435158.py new file mode 100755 index 0000000..4faafb0 --- /dev/null +++ b/scripts/item/consume_2435158.py @@ -0,0 +1,4 @@ +# Explosion Damage Skin +success = sm.addDamageSkin(2435158) +if success: + sm.chat("The Explosion Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435159.py b/scripts/item/consume_2435159.py new file mode 100755 index 0000000..70cd93e --- /dev/null +++ b/scripts/item/consume_2435159.py @@ -0,0 +1,5 @@ +# Snow-wing Damage Skin +success = sm.addDamageSkin(2435159) +if success: + sm.chat("The Snow-wing Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435159) diff --git a/scripts/item/consume_2435160.py b/scripts/item/consume_2435160.py new file mode 100755 index 0000000..bc74a77 --- /dev/null +++ b/scripts/item/consume_2435160.py @@ -0,0 +1,4 @@ +# Miho Damage Skin +success = sm.addDamageSkin(2435160) +if success: + sm.chat("The Miho Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435162.py b/scripts/item/consume_2435162.py new file mode 100755 index 0000000..8e6adb1 --- /dev/null +++ b/scripts/item/consume_2435162.py @@ -0,0 +1,5 @@ +# Antique Gold Damage Skin +success = sm.addDamageSkin(2435162) +if success: + sm.chat("The Antique Gold Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435162) diff --git a/scripts/item/consume_2435163.py b/scripts/item/consume_2435163.py new file mode 100755 index 0000000..f0a706c --- /dev/null +++ b/scripts/item/consume_2435163.py @@ -0,0 +1,16 @@ +import random + +items = [ + 3015022, + +] + + +question = sm.sendAskYesNo("#eWould you like to receive a #rrandom Damage Skin?") +randitem = random.choice(items) +if question and sm.canHold(randitem): + sm.giveItem(randitem) + sm.consumeItem(2435163) +else: + sm.sendNext("#e#dYour inventory is full.") + diff --git a/scripts/item/consume_2435166.py b/scripts/item/consume_2435166.py new file mode 100755 index 0000000..d49082c --- /dev/null +++ b/scripts/item/consume_2435166.py @@ -0,0 +1,4 @@ +# Moon Bunny Damage Skin +success = sm.addDamageSkin(2435166) +if success: + sm.chat("The Moon Bunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435168.py b/scripts/item/consume_2435168.py new file mode 100755 index 0000000..563e015 --- /dev/null +++ b/scripts/item/consume_2435168.py @@ -0,0 +1,4 @@ +# Couples Army Damage Skin +success = sm.addDamageSkin(2435168) +if success: + sm.chat("The Couples Army Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435170.py b/scripts/item/consume_2435170.py new file mode 100755 index 0000000..920438d --- /dev/null +++ b/scripts/item/consume_2435170.py @@ -0,0 +1,4 @@ +# Orange Mushroom Damage Skin +success = sm.addDamageSkin(2435170) +if success: + sm.chat("The Orange Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435171.py b/scripts/item/consume_2435171.py new file mode 100755 index 0000000..f2af4fb --- /dev/null +++ b/scripts/item/consume_2435171.py @@ -0,0 +1,4 @@ +# Sunny Damage Skin +success = sm.addDamageSkin(2435171) +if success: + sm.chat("The Sunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435172.py b/scripts/item/consume_2435172.py new file mode 100755 index 0000000..b91e975 --- /dev/null +++ b/scripts/item/consume_2435172.py @@ -0,0 +1,4 @@ +# Digitized Damage Skin +success = sm.addDamageSkin(2435172) +if success: + sm.chat("The Digitized Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435173.py b/scripts/item/consume_2435173.py new file mode 100755 index 0000000..3ed13e0 --- /dev/null +++ b/scripts/item/consume_2435173.py @@ -0,0 +1,4 @@ +# Snowflake Damage Skin +success = sm.addDamageSkin(2435173) +if success: + sm.chat("The Snowflake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435174.py b/scripts/item/consume_2435174.py new file mode 100755 index 0000000..a1b20cb --- /dev/null +++ b/scripts/item/consume_2435174.py @@ -0,0 +1,4 @@ +# Keyboard Warrior Damage Skin +success = sm.addDamageSkin(2435174) +if success: + sm.chat("The Keyboard Warrior Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435175.py b/scripts/item/consume_2435175.py new file mode 100755 index 0000000..126cec8 --- /dev/null +++ b/scripts/item/consume_2435175.py @@ -0,0 +1,4 @@ +# Reminiscence Damage Skin +success = sm.addDamageSkin(2435175) +if success: + sm.chat("The Reminiscence Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435176.py b/scripts/item/consume_2435176.py new file mode 100755 index 0000000..daea378 --- /dev/null +++ b/scripts/item/consume_2435176.py @@ -0,0 +1,4 @@ +# Crown Damage Skin +success = sm.addDamageSkin(2435176) +if success: + sm.chat("The Crown Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435177.py b/scripts/item/consume_2435177.py new file mode 100755 index 0000000..11e733e --- /dev/null +++ b/scripts/item/consume_2435177.py @@ -0,0 +1,4 @@ +# Monotone Damage Skin +success = sm.addDamageSkin(2435177) +if success: + sm.chat("The Monotone Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435179.py b/scripts/item/consume_2435179.py new file mode 100755 index 0000000..7782a7a --- /dev/null +++ b/scripts/item/consume_2435179.py @@ -0,0 +1,5 @@ +# Candy Damage Skin +success = sm.addDamageSkin(2435179) +if success: + sm.chat("The Candy Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435179) diff --git a/scripts/item/consume_2435182.py b/scripts/item/consume_2435182.py new file mode 100755 index 0000000..9942450 --- /dev/null +++ b/scripts/item/consume_2435182.py @@ -0,0 +1,5 @@ +# Music Score Damage Skin +success = sm.addDamageSkin(2435182) +if success: + sm.chat("The Music Score Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435182) diff --git a/scripts/item/consume_2435184.py b/scripts/item/consume_2435184.py new file mode 100755 index 0000000..3d0b141 --- /dev/null +++ b/scripts/item/consume_2435184.py @@ -0,0 +1,5 @@ +# Forest of Tenacity Damage Skin +success = sm.addDamageSkin(2435184) +if success: + sm.chat("The Forest of Tenacity Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435184) diff --git a/scripts/item/consume_2435193.py b/scripts/item/consume_2435193.py new file mode 100755 index 0000000..d2d5acc --- /dev/null +++ b/scripts/item/consume_2435193.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Krakian Damage Skin | (2435193) +if sm.addDamageSkin(2435193): + sm.chat("'Krakian Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435194.py b/scripts/item/consume_2435194.py new file mode 100755 index 0000000..4c1a0c6 --- /dev/null +++ b/scripts/item/consume_2435194.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Crimson Knight Damage Skin | (2435194) +if sm.addDamageSkin(2435194): + sm.chat("'Crimson Knight Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435195.py b/scripts/item/consume_2435195.py new file mode 100755 index 0000000..ba48ed1 --- /dev/null +++ b/scripts/item/consume_2435195.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Corrupted Magician Damage Skin | (2435195) +if sm.addDamageSkin(2435195): + sm.chat("'Corrupted Magician Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435196.py b/scripts/item/consume_2435196.py new file mode 100755 index 0000000..002fd20 --- /dev/null +++ b/scripts/item/consume_2435196.py @@ -0,0 +1,5 @@ +# Crow Damage Skin +success = sm.addDamageSkin(2435196) +if success: + sm.chat("The Crow Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435196) diff --git a/scripts/item/consume_2435198.py b/scripts/item/consume_2435198.py new file mode 100755 index 0000000..817b88a --- /dev/null +++ b/scripts/item/consume_2435198.py @@ -0,0 +1,4 @@ +# Black Mage Snapback Coupon +if sm.canHold(1004714): + sm.giveItem(1004714) + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435199.py b/scripts/item/consume_2435199.py new file mode 100755 index 0000000..0ff05f1 --- /dev/null +++ b/scripts/item/consume_2435199.py @@ -0,0 +1,4 @@ +# Black Mage Chat Ring Coupon +if sm.canHold(1115021): + sm.giveItem(1115021) + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435200.py b/scripts/item/consume_2435200.py new file mode 100755 index 0000000..3ddaf73 --- /dev/null +++ b/scripts/item/consume_2435200.py @@ -0,0 +1,4 @@ +# Black Mage Label Ring Coupon +if sm.canHold(1115110): + sm.giveItem(1115110) + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435202.py b/scripts/item/consume_2435202.py new file mode 100755 index 0000000..99c37ab --- /dev/null +++ b/scripts/item/consume_2435202.py @@ -0,0 +1,10 @@ +# Superhero Mount (90 Day) Coupon | (2435202) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Superhero' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Superhero' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435203.py b/scripts/item/consume_2435203.py new file mode 100755 index 0000000..d77e5ed --- /dev/null +++ b/scripts/item/consume_2435203.py @@ -0,0 +1,10 @@ +# Superhero Mount (Permanent) Coupon | (2435203) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Superhero' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Superhero' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435204.py b/scripts/item/consume_2435204.py new file mode 100755 index 0000000..54e281c --- /dev/null +++ b/scripts/item/consume_2435204.py @@ -0,0 +1,10 @@ +# Orange Snail Mount (90 Day) Coupon | (2435204) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Orange Snail' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Orange Snail' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435205.py b/scripts/item/consume_2435205.py new file mode 100755 index 0000000..7ee4765 --- /dev/null +++ b/scripts/item/consume_2435205.py @@ -0,0 +1,10 @@ +# Orange Snail Mount (Permanent) Coupon | (2435205) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Orange Snail' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Orange Snail' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435213.py b/scripts/item/consume_2435213.py new file mode 100755 index 0000000..2fe6713 --- /dev/null +++ b/scripts/item/consume_2435213.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Antellion Damage Skin | (2435213) +if sm.addDamageSkin(2435213): + sm.chat("'Antellion Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435214.py b/scripts/item/consume_2435214.py new file mode 100755 index 0000000..044e961 --- /dev/null +++ b/scripts/item/consume_2435214.py @@ -0,0 +1,10 @@ +# Beefy's Food Truck Permanent Coupon | (2435214) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Beefy's Food Truck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Beefy's Food Truck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435216.py b/scripts/item/consume_2435216.py new file mode 100755 index 0000000..7b532ca --- /dev/null +++ b/scripts/item/consume_2435216.py @@ -0,0 +1,10 @@ +# The Decapatruck | (2435216) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'The Decapatruck' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'The Decapatruck' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435222.py b/scripts/item/consume_2435222.py new file mode 100755 index 0000000..21a828b --- /dev/null +++ b/scripts/item/consume_2435222.py @@ -0,0 +1,5 @@ +# Festival Tortoise Damage Skin +success = sm.addDamageSkin(2435222) +if success: + sm.chat("The Festival Tortoise Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435222) diff --git a/scripts/item/consume_2435293.py b/scripts/item/consume_2435293.py new file mode 100755 index 0000000..72d9e79 --- /dev/null +++ b/scripts/item/consume_2435293.py @@ -0,0 +1,5 @@ +# April Fools' Damage Skin +success = sm.addDamageSkin(2435293) +if success: + sm.chat("The April Fools' Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435293) diff --git a/scripts/item/consume_2435295.py b/scripts/item/consume_2435295.py new file mode 100755 index 0000000..3d711e3 --- /dev/null +++ b/scripts/item/consume_2435295.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2435313.py b/scripts/item/consume_2435313.py new file mode 100755 index 0000000..8a5bb6e --- /dev/null +++ b/scripts/item/consume_2435313.py @@ -0,0 +1,5 @@ +# Blackheart Day Damage Skin +success = sm.addDamageSkin(2435313) +if success: + sm.chat("The Blackheart Day Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435313) diff --git a/scripts/item/consume_2435316.py b/scripts/item/consume_2435316.py new file mode 100755 index 0000000..966ff61 --- /dev/null +++ b/scripts/item/consume_2435316.py @@ -0,0 +1,5 @@ +# Haste Damage Skin +success = sm.addDamageSkin(2435316) +if success: + sm.chat("The Haste Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435316) diff --git a/scripts/item/consume_2435325.py b/scripts/item/consume_2435325.py new file mode 100755 index 0000000..82243b1 --- /dev/null +++ b/scripts/item/consume_2435325.py @@ -0,0 +1,4 @@ +# Murgoth Damage Skin +success = sm.addDamageSkin(2435325) +if success: + sm.chat("The Murgoth Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435326.py b/scripts/item/consume_2435326.py new file mode 100755 index 0000000..47267bd --- /dev/null +++ b/scripts/item/consume_2435326.py @@ -0,0 +1,5 @@ +# Nine-Tailed Fox Damage Skin +success = sm.addDamageSkin(2435326) +if success: + sm.chat("The Nine-Tailed Fox Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435326) diff --git a/scripts/item/consume_2435331.py b/scripts/item/consume_2435331.py new file mode 100755 index 0000000..e9edcdc --- /dev/null +++ b/scripts/item/consume_2435331.py @@ -0,0 +1,5 @@ +# Bubble April Fools' Damage Skin +success = sm.addDamageSkin(2435331) +if success: + sm.chat("The Bubble April Fools' Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435331) diff --git a/scripts/item/consume_2435332.py b/scripts/item/consume_2435332.py new file mode 100755 index 0000000..223697f --- /dev/null +++ b/scripts/item/consume_2435332.py @@ -0,0 +1,5 @@ +# Retro April Fools' Damage Skin +success = sm.addDamageSkin(2435332) +if success: + sm.chat("The Retro April Fools' Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435332) diff --git a/scripts/item/consume_2435333.py b/scripts/item/consume_2435333.py new file mode 100755 index 0000000..c0ba0fc --- /dev/null +++ b/scripts/item/consume_2435333.py @@ -0,0 +1,5 @@ +# Monochrome April Fools' Damage Skin +success = sm.addDamageSkin(2435333) +if success: + sm.chat("The Monochrome April Fools' Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435333) diff --git a/scripts/item/consume_2435334.py b/scripts/item/consume_2435334.py new file mode 100755 index 0000000..9e6f914 --- /dev/null +++ b/scripts/item/consume_2435334.py @@ -0,0 +1,5 @@ +# Sparkling April Fools' Damage Skin +success = sm.addDamageSkin(2435334) +if success: + sm.chat("The Sparkling April Fools' Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435334) diff --git a/scripts/item/consume_2435335.py b/scripts/item/consume_2435335.py new file mode 100755 index 0000000..830f87f --- /dev/null +++ b/scripts/item/consume_2435335.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Candles Damage Skin | (2435335) +if sm.addDamageSkin(2435335): + sm.chat("'Candles Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435336.py b/scripts/item/consume_2435336.py new file mode 100755 index 0000000..d32485d --- /dev/null +++ b/scripts/item/consume_2435336.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Cupcakes Damage Skin | (2435336) +if sm.addDamageSkin(2435336): + sm.chat("'Cupcakes Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435369.py b/scripts/item/consume_2435369.py new file mode 100755 index 0000000..43a708d --- /dev/null +++ b/scripts/item/consume_2435369.py @@ -0,0 +1,9 @@ +# Damien Soul +souls = [2591573, 2591574, 2591575, 2591576, 2591577, 2591578, 2591579, 2591580, 2591572] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2435369, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2435369, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2435374.py b/scripts/item/consume_2435374.py new file mode 100755 index 0000000..6183fbb --- /dev/null +++ b/scripts/item/consume_2435374.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Monkey Damage Skin | (2435374) +if sm.addDamageSkin(2435374): + sm.chat("'Monkey Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435375.py b/scripts/item/consume_2435375.py new file mode 100755 index 0000000..c4f25bb --- /dev/null +++ b/scripts/item/consume_2435375.py @@ -0,0 +1,10 @@ +# Happy Car Mount Permanent Coupon | (2435375) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Happy Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Happy Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435376.py b/scripts/item/consume_2435376.py new file mode 100755 index 0000000..9ab133b --- /dev/null +++ b/scripts/item/consume_2435376.py @@ -0,0 +1,10 @@ +# Happy Car Mount 90-Day Coupon | (2435376) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Happy Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Happy Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435377.py b/scripts/item/consume_2435377.py new file mode 100755 index 0000000..086fd88 --- /dev/null +++ b/scripts/item/consume_2435377.py @@ -0,0 +1,10 @@ +# Kingdom Carriage Riding Pass(Permanent) | (2435377) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Kingdom Carriage' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Kingdom Carriage' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435378.py b/scripts/item/consume_2435378.py new file mode 100755 index 0000000..fcb7f2f --- /dev/null +++ b/scripts/item/consume_2435378.py @@ -0,0 +1,10 @@ +# Kingdom Carriage Riding Pass | (2435378) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Kingdom Carriage' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Kingdom Carriage' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435380.py b/scripts/item/consume_2435380.py new file mode 100755 index 0000000..3d2fbce --- /dev/null +++ b/scripts/item/consume_2435380.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Math Symbol Damage Skin Coupon | (2435380) +if sm.addDamageSkin(2435380): + sm.chat("'Math Symbol Damage Skin Coupon' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435382.py b/scripts/item/consume_2435382.py new file mode 100755 index 0000000..7351e20 --- /dev/null +++ b/scripts/item/consume_2435382.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Secret Question Mark Damage Skin Coupon | (2435382) +if sm.addDamageSkin(2435382): + sm.chat("'Secret Question Mark Damage Skin Coupon' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435408.py b/scripts/item/consume_2435408.py new file mode 100755 index 0000000..192e438 --- /dev/null +++ b/scripts/item/consume_2435408.py @@ -0,0 +1,5 @@ +# 13th Anniversary Maple Leaf Damage Skin +success = sm.addDamageSkin(2435408) +if success: + sm.chat("The 13th Anniversary Maple Leaf Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435408) diff --git a/scripts/item/consume_2435424.py b/scripts/item/consume_2435424.py new file mode 100755 index 0000000..4906c0e --- /dev/null +++ b/scripts/item/consume_2435424.py @@ -0,0 +1,4 @@ +# Henesys Damage Skin +success = sm.addDamageSkin(2435424) +if success: + sm.chat("The Henesys Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435425.py b/scripts/item/consume_2435425.py new file mode 100755 index 0000000..86146fa --- /dev/null +++ b/scripts/item/consume_2435425.py @@ -0,0 +1,4 @@ +# Leafre Damage Skin +success = sm.addDamageSkin(2435425) +if success: + sm.chat("The Leafre Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435427.py b/scripts/item/consume_2435427.py new file mode 100755 index 0000000..25c75e9 --- /dev/null +++ b/scripts/item/consume_2435427.py @@ -0,0 +1,5 @@ +# Cyber Damage Skin +success = sm.addDamageSkin(2435427) +if success: + sm.chat("The Cyber Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435427) diff --git a/scripts/item/consume_2435428.py b/scripts/item/consume_2435428.py new file mode 100755 index 0000000..f531e52 --- /dev/null +++ b/scripts/item/consume_2435428.py @@ -0,0 +1,5 @@ +# Cosmic Damage Skin +success = sm.addDamageSkin(2435428) +if success: + sm.chat("The Cosmic Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435428) diff --git a/scripts/item/consume_2435429.py b/scripts/item/consume_2435429.py new file mode 100755 index 0000000..a558783 --- /dev/null +++ b/scripts/item/consume_2435429.py @@ -0,0 +1,5 @@ +# Choco Donut Damage Skin +success = sm.addDamageSkin(2435429) +if success: + sm.chat("The Choco Donut Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435429) diff --git a/scripts/item/consume_2435430.py b/scripts/item/consume_2435430.py new file mode 100755 index 0000000..5883a1e --- /dev/null +++ b/scripts/item/consume_2435430.py @@ -0,0 +1,5 @@ +# Blue Fire Damage Skin +success = sm.addDamageSkin(2435430) +if success: + sm.chat("The Blue Fire Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435430) diff --git a/scripts/item/consume_2435431.py b/scripts/item/consume_2435431.py new file mode 100755 index 0000000..1855d7f --- /dev/null +++ b/scripts/item/consume_2435431.py @@ -0,0 +1,5 @@ +# Algebraic Damage Skin +success = sm.addDamageSkin(2435431) +if success: + sm.chat("The Algebraic Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435431) diff --git a/scripts/item/consume_2435432.py b/scripts/item/consume_2435432.py new file mode 100755 index 0000000..c060d27 --- /dev/null +++ b/scripts/item/consume_2435432.py @@ -0,0 +1,5 @@ +# Purple Damage Skin +success = sm.addDamageSkin(2435432) +if success: + sm.chat("The Purple Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435432) diff --git a/scripts/item/consume_2435433.py b/scripts/item/consume_2435433.py new file mode 100755 index 0000000..e4cb47f --- /dev/null +++ b/scripts/item/consume_2435433.py @@ -0,0 +1,5 @@ +# Nanopixel Damage Skin +success = sm.addDamageSkin(2435433) +if success: + sm.chat("The Nanopixel Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435433) diff --git a/scripts/item/consume_2435456.py b/scripts/item/consume_2435456.py new file mode 100755 index 0000000..cc30318 --- /dev/null +++ b/scripts/item/consume_2435456.py @@ -0,0 +1,5 @@ +# Lovely Damage Skin +success = sm.addDamageSkin(2435456) +if success: + sm.chat("The Lovely Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435456) diff --git a/scripts/item/consume_2435461.py b/scripts/item/consume_2435461.py new file mode 100755 index 0000000..e5a0e22 --- /dev/null +++ b/scripts/item/consume_2435461.py @@ -0,0 +1,4 @@ +# Balloon Damage Skin +success = sm.addDamageSkin(2435461) +if success: + sm.chat("The Balloon Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435473.py b/scripts/item/consume_2435473.py new file mode 100755 index 0000000..3dc33d4 --- /dev/null +++ b/scripts/item/consume_2435473.py @@ -0,0 +1,4 @@ +# Bubble April Fools' Damage Skin +success = sm.addDamageSkin(2435473) +if success: + sm.chat("The Bubble April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435474.py b/scripts/item/consume_2435474.py new file mode 100755 index 0000000..8ea8499 --- /dev/null +++ b/scripts/item/consume_2435474.py @@ -0,0 +1,4 @@ +# Sparkling April Fools' Damage Skin +success = sm.addDamageSkin(2435474) +if success: + sm.chat("The Sparkling April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435477.py b/scripts/item/consume_2435477.py new file mode 100755 index 0000000..d4c8b29 --- /dev/null +++ b/scripts/item/consume_2435477.py @@ -0,0 +1,4 @@ +# Rainbow Boom Damage Skin +success = sm.addDamageSkin(2435477) +if success: + sm.chat("The Rainbow Boom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435478.py b/scripts/item/consume_2435478.py new file mode 100755 index 0000000..f07d0a9 --- /dev/null +++ b/scripts/item/consume_2435478.py @@ -0,0 +1,4 @@ +# Gentle Springtime Breeze Damage Skin +success = sm.addDamageSkin(2435478) +if success: + sm.chat("The Gentle Springtime Breeze Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435486.py b/scripts/item/consume_2435486.py new file mode 100755 index 0000000..ae5b989 --- /dev/null +++ b/scripts/item/consume_2435486.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# TuTu Damage Skin | (2435486) +if sm.addDamageSkin(2435486): + sm.chat("'TuTu Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435487.py b/scripts/item/consume_2435487.py new file mode 100755 index 0000000..2ad439f --- /dev/null +++ b/scripts/item/consume_2435487.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Nene Damage Skin | (2435487) +if sm.addDamageSkin(2435487): + sm.chat("'Nene Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435488.py b/scripts/item/consume_2435488.py new file mode 100755 index 0000000..3594667 --- /dev/null +++ b/scripts/item/consume_2435488.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Lingling Damage Skin | (2435488) +if sm.addDamageSkin(2435488): + sm.chat("'Lingling Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435489.py b/scripts/item/consume_2435489.py new file mode 100755 index 0000000..5dac1ba --- /dev/null +++ b/scripts/item/consume_2435489.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Sheriff Damage Skin | (2435489) +if sm.addDamageSkin(2435489): + sm.chat("'Sheriff Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435490.py b/scripts/item/consume_2435490.py new file mode 100755 index 0000000..27844a3 --- /dev/null +++ b/scripts/item/consume_2435490.py @@ -0,0 +1,4 @@ +# Marshmallow Damage Skin +success = sm.addDamageSkin(2435490) +if success: + sm.chat("The Marshmallow Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435493.py b/scripts/item/consume_2435493.py new file mode 100755 index 0000000..41446d4 --- /dev/null +++ b/scripts/item/consume_2435493.py @@ -0,0 +1,5 @@ +# Monster Balloon Damage Skin +success = sm.addDamageSkin(2435493) +if success: + sm.chat("The Monster Balloon Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435493) diff --git a/scripts/item/consume_2435510.py b/scripts/item/consume_2435510.py new file mode 100755 index 0000000..d2ccaf5 --- /dev/null +++ b/scripts/item/consume_2435510.py @@ -0,0 +1,5 @@ +# Star Planet Damage Skin +success = sm.addDamageSkin(2433063) +if success: + sm.chat("The Star Planet Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2433063) diff --git a/scripts/item/consume_2435511.py b/scripts/item/consume_2435511.py new file mode 100755 index 0000000..f490c44 --- /dev/null +++ b/scripts/item/consume_2435511.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Remnant of the Goddess Damage Skin | (2435511) +if sm.addDamageSkin(2435511): + sm.chat("'Remnant of the Goddess Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435521.py b/scripts/item/consume_2435521.py new file mode 100755 index 0000000..5f29838 --- /dev/null +++ b/scripts/item/consume_2435521.py @@ -0,0 +1,5 @@ +# Crystal Damage Skin +success = sm.addDamageSkin(2435521) +if success: + sm.chat("The Crystal Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435521) diff --git a/scripts/item/consume_2435523.py b/scripts/item/consume_2435523.py new file mode 100755 index 0000000..05c815a --- /dev/null +++ b/scripts/item/consume_2435523.py @@ -0,0 +1,5 @@ +# Chocolate Damage Skin +success = sm.addDamageSkin(2435523) +if success: + sm.chat("The Chocolate Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435523) diff --git a/scripts/item/consume_2435524.py b/scripts/item/consume_2435524.py new file mode 100755 index 0000000..0fc9b79 --- /dev/null +++ b/scripts/item/consume_2435524.py @@ -0,0 +1,5 @@ +# Spark Damage Skin +success = sm.addDamageSkin(2435524) +if success: + sm.chat("The Spark Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435524) diff --git a/scripts/item/consume_2435538.py b/scripts/item/consume_2435538.py new file mode 100755 index 0000000..fde1b16 --- /dev/null +++ b/scripts/item/consume_2435538.py @@ -0,0 +1,5 @@ +# Royal Damage Skin +success = sm.addDamageSkin(2435538) +if success: + sm.chat("The Royal Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435538) diff --git a/scripts/item/consume_2435542.py b/scripts/item/consume_2435542.py new file mode 100755 index 0000000..2fba36f --- /dev/null +++ b/scripts/item/consume_2435542.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435542) +if sm.addDamageSkin(2435542): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435543.py b/scripts/item/consume_2435543.py new file mode 100755 index 0000000..3387e45 --- /dev/null +++ b/scripts/item/consume_2435543.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Epic Lulz Damage Skin | (2435543) +if sm.addDamageSkin(2435543): + sm.chat("'Epic Lulz Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435544.py b/scripts/item/consume_2435544.py new file mode 100755 index 0000000..af8070b --- /dev/null +++ b/scripts/item/consume_2435544.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435544) +if sm.addDamageSkin(2435544): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435545.py b/scripts/item/consume_2435545.py new file mode 100755 index 0000000..e13f461 --- /dev/null +++ b/scripts/item/consume_2435545.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Summer Damage Skin | (2435545) +if sm.addDamageSkin(2435545): + sm.chat("'Summer Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435546.py b/scripts/item/consume_2435546.py new file mode 100755 index 0000000..91027c5 --- /dev/null +++ b/scripts/item/consume_2435546.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Blaster Damage Skin | (2435546) +if sm.addDamageSkin(2435546): + sm.chat("'Blaster Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435548.py b/scripts/item/consume_2435548.py new file mode 100755 index 0000000..cb5d857 --- /dev/null +++ b/scripts/item/consume_2435548.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435548) +if sm.addDamageSkin(2435548): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435549.py b/scripts/item/consume_2435549.py new file mode 100755 index 0000000..1866eea --- /dev/null +++ b/scripts/item/consume_2435549.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435549) +if sm.addDamageSkin(2435549): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435553.py b/scripts/item/consume_2435553.py new file mode 100755 index 0000000..79031bb --- /dev/null +++ b/scripts/item/consume_2435553.py @@ -0,0 +1,10 @@ +# Monster Hot Air Balloon | (2435553) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Monster Hot Air Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Monster Hot Air Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435554.py b/scripts/item/consume_2435554.py new file mode 100755 index 0000000..6dbe402 --- /dev/null +++ b/scripts/item/consume_2435554.py @@ -0,0 +1,10 @@ +# Monster Hot Air Balloon | (2435554) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Monster Hot Air Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Monster Hot Air Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435555.py b/scripts/item/consume_2435555.py new file mode 100755 index 0000000..8345fd1 --- /dev/null +++ b/scripts/item/consume_2435555.py @@ -0,0 +1,10 @@ +# Protect the Harp Seal | (2435555) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Protect the Harp Seal' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Protect the Harp Seal' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435556.py b/scripts/item/consume_2435556.py new file mode 100755 index 0000000..8448844 --- /dev/null +++ b/scripts/item/consume_2435556.py @@ -0,0 +1,10 @@ +# Protect the Harp Seal | (2435556) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Protect the Harp Seal' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Protect the Harp Seal' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435565.py b/scripts/item/consume_2435565.py new file mode 100755 index 0000000..2fa073f --- /dev/null +++ b/scripts/item/consume_2435565.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Heroes Aran Damage Skin | (2435565) +if sm.addDamageSkin(2435565): + sm.chat("'Heroes Aran Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435566.py b/scripts/item/consume_2435566.py new file mode 100755 index 0000000..431cd40 --- /dev/null +++ b/scripts/item/consume_2435566.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Heroes Luminous Damage Skin | (2435566) +if sm.addDamageSkin(2435566): + sm.chat("'Heroes Luminous Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435567.py b/scripts/item/consume_2435567.py new file mode 100755 index 0000000..b5282a0 --- /dev/null +++ b/scripts/item/consume_2435567.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Heroes Evan Damage Skin | (2435567) +if sm.addDamageSkin(2435567): + sm.chat("'Heroes Evan Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435568.py b/scripts/item/consume_2435568.py new file mode 100755 index 0000000..68bad4e --- /dev/null +++ b/scripts/item/consume_2435568.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Heroes Shade Damage Skin | (2435568) +if sm.addDamageSkin(2435568): + sm.chat("'Heroes Shade Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435571.py b/scripts/item/consume_2435571.py new file mode 100755 index 0000000..71f4296 --- /dev/null +++ b/scripts/item/consume_2435571.py @@ -0,0 +1,4 @@ +# Striped Damage Skin +success = sm.addDamageSkin(2435571) +if success: + sm.chat("The Striped Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435583.py b/scripts/item/consume_2435583.py new file mode 100755 index 0000000..7ef9500 --- /dev/null +++ b/scripts/item/consume_2435583.py @@ -0,0 +1,10 @@ +# Halfblood Wings Coupon | (2435583) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Halfblood Wings' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Halfblood Wings' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435665.py b/scripts/item/consume_2435665.py new file mode 100755 index 0000000..637792f --- /dev/null +++ b/scripts/item/consume_2435665.py @@ -0,0 +1,4 @@ +# Heroes Phantom Damage Skin +success = sm.addDamageSkin(2435665) +if success: + sm.chat("The Heroes Phantom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435666.py b/scripts/item/consume_2435666.py new file mode 100755 index 0000000..e0aab9a --- /dev/null +++ b/scripts/item/consume_2435666.py @@ -0,0 +1,4 @@ +# Heroes Mercedes Damage Skin +success = sm.addDamageSkin(2435666) +if success: + sm.chat("The Heroes Mercedes Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435673.py b/scripts/item/consume_2435673.py new file mode 100755 index 0000000..4d014ca --- /dev/null +++ b/scripts/item/consume_2435673.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Cygnus Water Warrior Damage Skin | (2435673) +if sm.addDamageSkin(2435673): + sm.chat("'Cygnus Water Warrior Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435674.py b/scripts/item/consume_2435674.py new file mode 100755 index 0000000..9422118 --- /dev/null +++ b/scripts/item/consume_2435674.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Resistance Water Warrior Damage Skin | (2435674) +if sm.addDamageSkin(2435674): + sm.chat("'Resistance Water Warrior Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435719.py b/scripts/item/consume_2435719.py new file mode 100755 index 0000000..c8dafad --- /dev/null +++ b/scripts/item/consume_2435719.py @@ -0,0 +1,7 @@ +# Tradable Nodestone - 2435902 + +from net.swordie.ms.constants import QuestConstants + +sm.openNodestone(parentID) +if sm.hasQuestCompleted(QuestConstants.FIFTH_JOB_QUEST): + sm.consumeItem(parentID) diff --git a/scripts/item/consume_2435725.py b/scripts/item/consume_2435725.py new file mode 100755 index 0000000..b0843c3 --- /dev/null +++ b/scripts/item/consume_2435725.py @@ -0,0 +1,4 @@ +# Musical Score Damage Skin +success = sm.addDamageSkin(2435725) +if success: + sm.chat("The Musical Score Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435727.py b/scripts/item/consume_2435727.py new file mode 100755 index 0000000..553bae5 --- /dev/null +++ b/scripts/item/consume_2435727.py @@ -0,0 +1,4 @@ +# Sunny Damage Skin +success = sm.addDamageSkin(2435727) +if success: + sm.chat("The Sunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435729.py b/scripts/item/consume_2435729.py new file mode 100755 index 0000000..826dcba --- /dev/null +++ b/scripts/item/consume_2435729.py @@ -0,0 +1,10 @@ +# Izuna Mount (90 Day) | (2435729) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Izuna (90 Day)' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Izuna (90 Day)' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435730.py b/scripts/item/consume_2435730.py new file mode 100755 index 0000000..8b459e1 --- /dev/null +++ b/scripts/item/consume_2435730.py @@ -0,0 +1,10 @@ +# Izuna Mount | (2435730) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Izuna' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Izuna' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435731.py b/scripts/item/consume_2435731.py new file mode 100755 index 0000000..bf5bf91 --- /dev/null +++ b/scripts/item/consume_2435731.py @@ -0,0 +1,10 @@ +# Kurama Mount (90 Day) | (2435731) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Kurama (90 Day)' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Kurama (90 Day)' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435732.py b/scripts/item/consume_2435732.py new file mode 100755 index 0000000..b78c4e5 --- /dev/null +++ b/scripts/item/consume_2435732.py @@ -0,0 +1,10 @@ +# Kurama Mount | (2435732) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Kurama' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Kurama' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435734.py b/scripts/item/consume_2435734.py new file mode 100755 index 0000000..43e1647 --- /dev/null +++ b/scripts/item/consume_2435734.py @@ -0,0 +1,10 @@ +# For quest 1465. TODO add exp thing +STONES = [2435734, 2435735, 2435736] + +sm.completeQuest(1465) +sm.setPlayerAsSpeaker() +sm.sendSayOkay("I should go back to the Memory Keeper to inform him of my progress") + +for stone in STONES: + while sm.hasItem(stone): + sm.consumeItem(stone) \ No newline at end of file diff --git a/scripts/item/consume_2435735.py b/scripts/item/consume_2435735.py new file mode 100755 index 0000000..43e1647 --- /dev/null +++ b/scripts/item/consume_2435735.py @@ -0,0 +1,10 @@ +# For quest 1465. TODO add exp thing +STONES = [2435734, 2435735, 2435736] + +sm.completeQuest(1465) +sm.setPlayerAsSpeaker() +sm.sendSayOkay("I should go back to the Memory Keeper to inform him of my progress") + +for stone in STONES: + while sm.hasItem(stone): + sm.consumeItem(stone) \ No newline at end of file diff --git a/scripts/item/consume_2435736.py b/scripts/item/consume_2435736.py new file mode 100755 index 0000000..43e1647 --- /dev/null +++ b/scripts/item/consume_2435736.py @@ -0,0 +1,10 @@ +# For quest 1465. TODO add exp thing +STONES = [2435734, 2435735, 2435736] + +sm.completeQuest(1465) +sm.setPlayerAsSpeaker() +sm.sendSayOkay("I should go back to the Memory Keeper to inform him of my progress") + +for stone in STONES: + while sm.hasItem(stone): + sm.consumeItem(stone) \ No newline at end of file diff --git a/scripts/item/consume_2435781.py b/scripts/item/consume_2435781.py new file mode 100755 index 0000000..9fff90d --- /dev/null +++ b/scripts/item/consume_2435781.py @@ -0,0 +1,10 @@ +# Black Wyvern Permanent Mount Coupon | (2435781) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435782.py b/scripts/item/consume_2435782.py new file mode 100755 index 0000000..88ea42a --- /dev/null +++ b/scripts/item/consume_2435782.py @@ -0,0 +1,10 @@ +# Bouncing Car Mount Mount Permanent Coupon | (2435782) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Bouncing Car' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Bouncing Car' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435783.py b/scripts/item/consume_2435783.py new file mode 100755 index 0000000..d516bf9 --- /dev/null +++ b/scripts/item/consume_2435783.py @@ -0,0 +1,10 @@ +# Onyx Jaguar Mount Permanent Coupon | (2435783) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Onyx Jaguar' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Onyx Jaguar' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435784.py b/scripts/item/consume_2435784.py new file mode 100755 index 0000000..34a78d1 --- /dev/null +++ b/scripts/item/consume_2435784.py @@ -0,0 +1,10 @@ +# Mystical Butterflies Permanent Coupon | (2435784) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mystical Butterflies' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mystical Butterflies' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435785.py b/scripts/item/consume_2435785.py new file mode 100755 index 0000000..e6e3dd1 --- /dev/null +++ b/scripts/item/consume_2435785.py @@ -0,0 +1,10 @@ +# Monster Hot Air Balloon | (2435785) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Monster Hot Air Balloon' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Monster Hot Air Balloon' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435786.py b/scripts/item/consume_2435786.py new file mode 100755 index 0000000..fc80e59 --- /dev/null +++ b/scripts/item/consume_2435786.py @@ -0,0 +1,10 @@ +# Protect the Harp Seal | (2435786) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Protect the Harp Seal' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Protect the Harp Seal' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435789.py b/scripts/item/consume_2435789.py new file mode 100755 index 0000000..cee44e7 --- /dev/null +++ b/scripts/item/consume_2435789.py @@ -0,0 +1,10 @@ +# Black Wyvern 90-Day Mount Coupon | (2435789) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Black Wyvern' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Black Wyvern' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435790.py b/scripts/item/consume_2435790.py new file mode 100755 index 0000000..e92134e --- /dev/null +++ b/scripts/item/consume_2435790.py @@ -0,0 +1,10 @@ +# Onyx Jaguar Mount 90-Day Coupon | (2435790) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Onyx Jaguar' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Onyx Jaguar' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435791.py b/scripts/item/consume_2435791.py new file mode 100755 index 0000000..58ec83b --- /dev/null +++ b/scripts/item/consume_2435791.py @@ -0,0 +1,10 @@ +# Mystical Butterflies 90-Day Mount Coupon | (2435791) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mystical Butterflies' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mystical Butterflies' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435802.py b/scripts/item/consume_2435802.py new file mode 100755 index 0000000..f78dd08 --- /dev/null +++ b/scripts/item/consume_2435802.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Dragon Fireworks Damage Skin | (2435802) +if sm.addDamageSkin(2435802): + sm.chat("'Dragon Fireworks Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435832.py b/scripts/item/consume_2435832.py new file mode 100755 index 0000000..74ede17 --- /dev/null +++ b/scripts/item/consume_2435832.py @@ -0,0 +1,5 @@ +# Chrome Damage Skin +success = sm.addDamageSkin(2435832) +if success: + sm.chat("The Chrome Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435832) diff --git a/scripts/item/consume_2435833.py b/scripts/item/consume_2435833.py new file mode 100755 index 0000000..fbbef02 --- /dev/null +++ b/scripts/item/consume_2435833.py @@ -0,0 +1,5 @@ +# Neon Lights Damage Skin +success = sm.addDamageSkin(2435833) +if success: + sm.chat("The Neon Lights Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435833) diff --git a/scripts/item/consume_2435834.py b/scripts/item/consume_2435834.py new file mode 100755 index 0000000..3f3a17d --- /dev/null +++ b/scripts/item/consume_2435834.py @@ -0,0 +1,4 @@ +# Monotone Damage Skin +success = sm.addDamageSkin(2435834) +if success: + sm.chat("The Monotone Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435835.py b/scripts/item/consume_2435835.py new file mode 100755 index 0000000..1e314c0 --- /dev/null +++ b/scripts/item/consume_2435835.py @@ -0,0 +1,5 @@ +# Explosion Damage Skin +success = sm.addDamageSkin(2435835) +if success: + sm.chat("The Explosion Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435835) diff --git a/scripts/item/consume_2435836.py b/scripts/item/consume_2435836.py new file mode 100755 index 0000000..a2b2ab7 --- /dev/null +++ b/scripts/item/consume_2435836.py @@ -0,0 +1,5 @@ +# Neon Sign Damage Skin +success = sm.addDamageSkin(2435836) +if success: + sm.chat("The Neon Sign Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435836) diff --git a/scripts/item/consume_2435839.py b/scripts/item/consume_2435839.py new file mode 100755 index 0000000..66bed3d --- /dev/null +++ b/scripts/item/consume_2435839.py @@ -0,0 +1,5 @@ +# Cosmic(Cards) Damage Skin +success = sm.addDamageSkin(2435839) +if success: + sm.chat("The Cosmic(Cards) Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435839) diff --git a/scripts/item/consume_2435840.py b/scripts/item/consume_2435840.py new file mode 100755 index 0000000..7f72262 --- /dev/null +++ b/scripts/item/consume_2435840.py @@ -0,0 +1,5 @@ +# Gilded Damage Skin +success = sm.addDamageSkin(2435840) +if success: + sm.chat("The Gilded Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435840) diff --git a/scripts/item/consume_2435841.py b/scripts/item/consume_2435841.py new file mode 100755 index 0000000..109651f --- /dev/null +++ b/scripts/item/consume_2435841.py @@ -0,0 +1,5 @@ +# Batty Damage Skin +success = sm.addDamageSkin(2435841) +if success: + sm.chat("The Batty Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435841) diff --git a/scripts/item/consume_2435849.py b/scripts/item/consume_2435849.py new file mode 100755 index 0000000..fba3c27 --- /dev/null +++ b/scripts/item/consume_2435849.py @@ -0,0 +1,5 @@ +# Monochrome April Fools' Damage Skin +success = sm.addDamageSkin(2435849) +if success: + sm.chat("The Monochrome April Fools' Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435849) diff --git a/scripts/item/consume_2435850.py b/scripts/item/consume_2435850.py new file mode 100755 index 0000000..c876cab --- /dev/null +++ b/scripts/item/consume_2435850.py @@ -0,0 +1,5 @@ +# Moon Bunny Damage Skin +success = sm.addDamageSkin(2435850) +if success: + sm.chat("The Moon Bunny Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435850) diff --git a/scripts/item/consume_2435902.py b/scripts/item/consume_2435902.py new file mode 100755 index 0000000..c407abb --- /dev/null +++ b/scripts/item/consume_2435902.py @@ -0,0 +1,7 @@ +# Nodestone | (2435902) +from net.swordie.ms.constants import QuestConstants + +if sm.hasQuestCompleted(QuestConstants.FIFTH_JOB_QUEST): + if sm.hasItem(parentID): + sm.openNodestone(2435902) + sm.consumeItem(parentID) diff --git a/scripts/item/consume_2435905.py b/scripts/item/consume_2435905.py new file mode 100755 index 0000000..1ee2e9e --- /dev/null +++ b/scripts/item/consume_2435905.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Cat Paw Damage Skin | (2435905) +if sm.addDamageSkin(2435905): + sm.chat("'Cat Paw Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435906.py b/scripts/item/consume_2435906.py new file mode 100755 index 0000000..825461d --- /dev/null +++ b/scripts/item/consume_2435906.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Cat Face Damage Skin | (2435906) +if sm.addDamageSkin(2435906): + sm.chat("'Cat Face Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435907.py b/scripts/item/consume_2435907.py new file mode 100755 index 0000000..1c893d6 --- /dev/null +++ b/scripts/item/consume_2435907.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435907) +if sm.addDamageSkin(2435907): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435908.py b/scripts/item/consume_2435908.py new file mode 100755 index 0000000..8fabb63 --- /dev/null +++ b/scripts/item/consume_2435908.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435908) +if sm.addDamageSkin(2435908): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435946.py b/scripts/item/consume_2435946.py new file mode 100755 index 0000000..48a3c4c --- /dev/null +++ b/scripts/item/consume_2435946.py @@ -0,0 +1,10 @@ +# Friendly Ghost Mount (90 Day) | (2435946) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Friendly Ghost (90 Day)' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Friendly Ghost (90 Day)' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435947.py b/scripts/item/consume_2435947.py new file mode 100755 index 0000000..6420bb9 --- /dev/null +++ b/scripts/item/consume_2435947.py @@ -0,0 +1,10 @@ +# Friendly Ghost Mount | (2435947) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Friendly Ghost' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Friendly Ghost' mount.") +sm.dispose() diff --git a/scripts/item/consume_2435948.py b/scripts/item/consume_2435948.py new file mode 100755 index 0000000..8216fc2 --- /dev/null +++ b/scripts/item/consume_2435948.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Halloween Town Damage Skin | (2435948) +if sm.addDamageSkin(2435948): + sm.chat("'Halloween Town Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435949.py b/scripts/item/consume_2435949.py new file mode 100755 index 0000000..d8a33f4 --- /dev/null +++ b/scripts/item/consume_2435949.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Too Spooky Damage Skin | (2435949) +if sm.addDamageSkin(2435949): + sm.chat("'Too Spooky Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435950.py b/scripts/item/consume_2435950.py new file mode 100755 index 0000000..f163f20 --- /dev/null +++ b/scripts/item/consume_2435950.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435951) +if sm.addDamageSkin(2435951): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435951.py b/scripts/item/consume_2435951.py new file mode 100755 index 0000000..52c7eaf --- /dev/null +++ b/scripts/item/consume_2435951.py @@ -0,0 +1,4 @@ +# Damage Skin Item ID does not have a name +success = sm.addDamageSkin(2435951) +if success: + sm.chat("The The Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2435952.py b/scripts/item/consume_2435952.py new file mode 100755 index 0000000..bf8e6de --- /dev/null +++ b/scripts/item/consume_2435952.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435952) +if sm.addDamageSkin(2435952): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435953.py b/scripts/item/consume_2435953.py new file mode 100755 index 0000000..5ec22fe --- /dev/null +++ b/scripts/item/consume_2435953.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2435953) +if sm.addDamageSkin(2435953): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435954.py b/scripts/item/consume_2435954.py new file mode 100755 index 0000000..411d894 --- /dev/null +++ b/scripts/item/consume_2435954.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Masque's Puzzle Damage Skin | (2435954) +if sm.addDamageSkin(2435954): + sm.chat("'Masque's Puzzle Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435955.py b/scripts/item/consume_2435955.py new file mode 100755 index 0000000..84802d1 --- /dev/null +++ b/scripts/item/consume_2435955.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Wandering Soul Damage Skin | (2435955) +if sm.addDamageSkin(2435955): + sm.chat("'Wandering Soul Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435956.py b/scripts/item/consume_2435956.py new file mode 100755 index 0000000..78ae7fc --- /dev/null +++ b/scripts/item/consume_2435956.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# War of Roses Damage Skin | (2435956) +if sm.addDamageSkin(2435956): + sm.chat("'War of Roses Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435957.py b/scripts/item/consume_2435957.py new file mode 100755 index 0000000..c98e58e --- /dev/null +++ b/scripts/item/consume_2435957.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Snow Monster Damage Skin | (2435957) +if sm.addDamageSkin(2435957): + sm.chat("'Snow Monster Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2435958.py b/scripts/item/consume_2435958.py new file mode 100755 index 0000000..7d03725 --- /dev/null +++ b/scripts/item/consume_2435958.py @@ -0,0 +1,5 @@ +# Leafre Damage Skin +success = sm.addDamageSkin(2435958) +if success: + sm.chat("The Leafre Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435958) diff --git a/scripts/item/consume_2435959.py b/scripts/item/consume_2435959.py new file mode 100755 index 0000000..72c2426 --- /dev/null +++ b/scripts/item/consume_2435959.py @@ -0,0 +1,5 @@ +# Henesys Damage Skin +success = sm.addDamageSkin(2435959) +if success: + sm.chat("The Henesys Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435959) diff --git a/scripts/item/consume_2435960.py b/scripts/item/consume_2435960.py new file mode 100755 index 0000000..edde52e --- /dev/null +++ b/scripts/item/consume_2435960.py @@ -0,0 +1,5 @@ +# Fried Chicken Damage Skin +success = sm.addDamageSkin(2435960) +if success: + sm.chat("The Fried Chicken Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435960) diff --git a/scripts/item/consume_2435965.py b/scripts/item/consume_2435965.py new file mode 100755 index 0000000..3d711e3 --- /dev/null +++ b/scripts/item/consume_2435965.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2435967.py b/scripts/item/consume_2435967.py new file mode 100755 index 0000000..3d711e3 --- /dev/null +++ b/scripts/item/consume_2435967.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2435972.py b/scripts/item/consume_2435972.py new file mode 100755 index 0000000..0313488 --- /dev/null +++ b/scripts/item/consume_2435972.py @@ -0,0 +1,5 @@ +# Vanishing Journey Damage Skin +success = sm.addDamageSkin(2435972) +if success: + sm.chat("The Vanishing Journey Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2435972) diff --git a/scripts/item/consume_2436023.py b/scripts/item/consume_2436023.py new file mode 100755 index 0000000..204c7f0 --- /dev/null +++ b/scripts/item/consume_2436023.py @@ -0,0 +1,5 @@ +# Chu Chu Damage Skin +success = sm.addDamageSkin(2436023) +if success: + sm.chat("The Chu Chu Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436023) diff --git a/scripts/item/consume_2436024.py b/scripts/item/consume_2436024.py new file mode 100755 index 0000000..3c6ef9f --- /dev/null +++ b/scripts/item/consume_2436024.py @@ -0,0 +1,5 @@ +# Lachelein Damage Skin +success = sm.addDamageSkin(2436024) +if success: + sm.chat("The Lachelein Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436024) diff --git a/scripts/item/consume_2436026.py b/scripts/item/consume_2436026.py new file mode 100755 index 0000000..c9eb49f --- /dev/null +++ b/scripts/item/consume_2436026.py @@ -0,0 +1,5 @@ +# Poison Flame Damage Skin +success = sm.addDamageSkin(2436026) +if success: + sm.chat("The Poison Flame Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436026) diff --git a/scripts/item/consume_2436027.py b/scripts/item/consume_2436027.py new file mode 100755 index 0000000..c6503ce --- /dev/null +++ b/scripts/item/consume_2436027.py @@ -0,0 +1,5 @@ +# Blue Strike Damage Skin +success = sm.addDamageSkin(2436027) +if success: + sm.chat("The Blue Strike Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436027) diff --git a/scripts/item/consume_2436028.py b/scripts/item/consume_2436028.py new file mode 100755 index 0000000..02a5427 --- /dev/null +++ b/scripts/item/consume_2436028.py @@ -0,0 +1,5 @@ +# Music Power Damage Skin +success = sm.addDamageSkin(2436028) +if success: + sm.chat("The Music Power Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436028) diff --git a/scripts/item/consume_2436029.py b/scripts/item/consume_2436029.py new file mode 100755 index 0000000..f1b9f79 --- /dev/null +++ b/scripts/item/consume_2436029.py @@ -0,0 +1,5 @@ +# Collage Power Damage Skin +success = sm.addDamageSkin(2436029) +if success: + sm.chat("The Collage Power Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436029) diff --git a/scripts/item/consume_2436034.py b/scripts/item/consume_2436034.py new file mode 100755 index 0000000..15935bf --- /dev/null +++ b/scripts/item/consume_2436034.py @@ -0,0 +1,4 @@ +# Mighty Ursus Damage Skin +success = sm.addDamageSkin(2436034) +if success: + sm.chat("The Mighty Ursus Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436035.py b/scripts/item/consume_2436035.py new file mode 100755 index 0000000..0c73e86 --- /dev/null +++ b/scripts/item/consume_2436035.py @@ -0,0 +1,4 @@ +# Orange Mushroom Damage Skin +success = sm.addDamageSkin(2436035) +if success: + sm.chat("The Orange Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436036.py b/scripts/item/consume_2436036.py new file mode 100755 index 0000000..0edef00 --- /dev/null +++ b/scripts/item/consume_2436036.py @@ -0,0 +1,4 @@ +# Yeti and Pepe Damage Skin +success = sm.addDamageSkin(2436036) +if success: + sm.chat("The Yeti and Pepe Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436038.py b/scripts/item/consume_2436038.py new file mode 100755 index 0000000..0124c37 --- /dev/null +++ b/scripts/item/consume_2436038.py @@ -0,0 +1,4 @@ +# Keyboard Warrior Damage Skin +success = sm.addDamageSkin(2436038) +if success: + sm.chat("The Keyboard Warrior Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436039.py b/scripts/item/consume_2436039.py new file mode 100755 index 0000000..504cdb4 --- /dev/null +++ b/scripts/item/consume_2436039.py @@ -0,0 +1,9 @@ +# Lucid Soul +souls = [2591591, 2591592, 2591593, 2591594, 2591595, 2591596, 2591597, 2591598, 2591590] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2436039): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2436039, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2436041.py b/scripts/item/consume_2436041.py new file mode 100755 index 0000000..3863916 --- /dev/null +++ b/scripts/item/consume_2436041.py @@ -0,0 +1,5 @@ +# Phantom Damage Skin +success = sm.addDamageSkin(2436041) +if success: + sm.chat("The Phantom Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436041) diff --git a/scripts/item/consume_2436042.py b/scripts/item/consume_2436042.py new file mode 100755 index 0000000..29507a7 --- /dev/null +++ b/scripts/item/consume_2436042.py @@ -0,0 +1,5 @@ +# Mercedes Damage Skin +success = sm.addDamageSkin(2436042) +if success: + sm.chat("The Mercedes Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436042) diff --git a/scripts/item/consume_2436044.py b/scripts/item/consume_2436044.py new file mode 100755 index 0000000..5c3b9dc --- /dev/null +++ b/scripts/item/consume_2436044.py @@ -0,0 +1,5 @@ +# Miho Damage Skin +success = sm.addDamageSkin(2436044) +if success: + sm.chat("The Miho Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436044) diff --git a/scripts/item/consume_2436045.py b/scripts/item/consume_2436045.py new file mode 100755 index 0000000..ee2a941 --- /dev/null +++ b/scripts/item/consume_2436045.py @@ -0,0 +1,5 @@ +# Starlight Aurora Damage Skin +success = sm.addDamageSkin(2436045) +if success: + sm.chat("The Starlight Aurora Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436045) diff --git a/scripts/item/consume_2436067.py b/scripts/item/consume_2436067.py new file mode 100755 index 0000000..827eb70 --- /dev/null +++ b/scripts/item/consume_2436067.py @@ -0,0 +1,10 @@ +# Giant Rabbit Coupon | (2436067) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Giant Rabbit' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Giant Rabbit' mount.") +sm.dispose() diff --git a/scripts/item/consume_2436083.py b/scripts/item/consume_2436083.py new file mode 100755 index 0000000..56005b5 --- /dev/null +++ b/scripts/item/consume_2436083.py @@ -0,0 +1,4 @@ +# Twilight Damage Skin +success = sm.addDamageSkin(2436083) +if success: + sm.chat("The Twilight Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436084.py b/scripts/item/consume_2436084.py new file mode 100755 index 0000000..3fe46db --- /dev/null +++ b/scripts/item/consume_2436084.py @@ -0,0 +1,4 @@ +# Unyielding Fury Damage Skin +success = sm.addDamageSkin(2436084) +if success: + sm.chat("The Unyielding Fury Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436085.py b/scripts/item/consume_2436085.py new file mode 100755 index 0000000..111eba4 --- /dev/null +++ b/scripts/item/consume_2436085.py @@ -0,0 +1,4 @@ +# Chestnut Damage Skin +success = sm.addDamageSkin(2436085) +if success: + sm.chat("The Chestnut Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436089.py b/scripts/item/consume_2436089.py new file mode 100755 index 0000000..1a949f5 --- /dev/null +++ b/scripts/item/consume_2436089.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Highlighter Damage Skin | (2436089) +if sm.addDamageSkin(2436089): + sm.chat("'Highlighter Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436096.py b/scripts/item/consume_2436096.py new file mode 100755 index 0000000..8733070 --- /dev/null +++ b/scripts/item/consume_2436096.py @@ -0,0 +1,4 @@ +# Candy Damage Skin +success = sm.addDamageSkin(2436096) +if success: + sm.chat("The Candy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436097.py b/scripts/item/consume_2436097.py new file mode 100755 index 0000000..c1008c9 --- /dev/null +++ b/scripts/item/consume_2436097.py @@ -0,0 +1,4 @@ +# Fireworks Damage Skin +success = sm.addDamageSkin(2436097) +if success: + sm.chat("The Fireworks Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436098.py b/scripts/item/consume_2436098.py new file mode 100755 index 0000000..c6d939b --- /dev/null +++ b/scripts/item/consume_2436098.py @@ -0,0 +1,4 @@ +# Calligraphy Damage Skin +success = sm.addDamageSkin(2436098) +if success: + sm.chat("The Calligraphy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436099.py b/scripts/item/consume_2436099.py new file mode 100755 index 0000000..604c02f --- /dev/null +++ b/scripts/item/consume_2436099.py @@ -0,0 +1,4 @@ +# Teddy Damage Skin +success = sm.addDamageSkin(2436099) +if success: + sm.chat("The Teddy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436100.py b/scripts/item/consume_2436100.py new file mode 100755 index 0000000..e362f1f --- /dev/null +++ b/scripts/item/consume_2436100.py @@ -0,0 +1,4 @@ +# Sweet Tea Cake Damage Skin +success = sm.addDamageSkin(2436100) +if success: + sm.chat("The Sweet Tea Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436101.py b/scripts/item/consume_2436101.py new file mode 100755 index 0000000..9576cdc --- /dev/null +++ b/scripts/item/consume_2436101.py @@ -0,0 +1,4 @@ +# Striped Damage Skin +success = sm.addDamageSkin(2436101) +if success: + sm.chat("The Striped Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436103.py b/scripts/item/consume_2436103.py new file mode 100755 index 0000000..0fe225c --- /dev/null +++ b/scripts/item/consume_2436103.py @@ -0,0 +1,4 @@ +# Gilded Moonlight Damage Skin +success = sm.addDamageSkin(2436103) +if success: + sm.chat("The Gilded Moonlight Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436131.py b/scripts/item/consume_2436131.py new file mode 100755 index 0000000..9da943e --- /dev/null +++ b/scripts/item/consume_2436131.py @@ -0,0 +1,4 @@ +# Hangul Day Traditional Damage Skin +success = sm.addDamageSkin(2436131) +if success: + sm.chat("The Hangul Day Traditional Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436132.py b/scripts/item/consume_2436132.py new file mode 100755 index 0000000..bb3bd37 --- /dev/null +++ b/scripts/item/consume_2436132.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Illumination Damage Skin | (2436132) +if sm.addDamageSkin(2436132): + sm.chat("'Illumination Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436133.py b/scripts/item/consume_2436133.py new file mode 100755 index 0000000..92e8e4e --- /dev/null +++ b/scripts/item/consume_2436133.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chick Damage Skin | (2436133) +if sm.addDamageSkin(2436133): + sm.chat("'Chick Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436134.py b/scripts/item/consume_2436134.py new file mode 100755 index 0000000..0a7ae97 --- /dev/null +++ b/scripts/item/consume_2436134.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# null | (2436134) +if sm.addDamageSkin(2436134): + sm.chat("'null' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436136.py b/scripts/item/consume_2436136.py new file mode 100755 index 0000000..4feff43 --- /dev/null +++ b/scripts/item/consume_2436136.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# 'Magical' Bottle for Souls | (2436136) +if sm.addDamageSkin(2436136): + sm.chat("''Magical' Bottle for Souls' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436140.py b/scripts/item/consume_2436140.py new file mode 100755 index 0000000..333a3ba --- /dev/null +++ b/scripts/item/consume_2436140.py @@ -0,0 +1,4 @@ +# Gingko Leaf Damage Skin +success = sm.addDamageSkin(2436140) +if success: + sm.chat("The Gingko Leaf Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436182.py b/scripts/item/consume_2436182.py new file mode 100755 index 0000000..975543d --- /dev/null +++ b/scripts/item/consume_2436182.py @@ -0,0 +1,4 @@ +# Silly Ghost Damage Skin +success = sm.addDamageSkin(2436182) +if success: + sm.chat("The Silly Ghost Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436188.py b/scripts/item/consume_2436188.py new file mode 100755 index 0000000..31d316a --- /dev/null +++ b/scripts/item/consume_2436188.py @@ -0,0 +1,10 @@ +# Protect the Harp Seal | (2436188) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Protect the Harp Seal' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Protect the Harp Seal' mount.") +sm.dispose() diff --git a/scripts/item/consume_2436206.py b/scripts/item/consume_2436206.py new file mode 100755 index 0000000..a7e9c39 --- /dev/null +++ b/scripts/item/consume_2436206.py @@ -0,0 +1,4 @@ +# Detective Damage Skin +success = sm.addDamageSkin(2436206) +if success: + sm.chat("The Detective Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436212.py b/scripts/item/consume_2436212.py new file mode 100755 index 0000000..1cf943f --- /dev/null +++ b/scripts/item/consume_2436212.py @@ -0,0 +1,4 @@ +# Hallowkitty Damage Skin +success = sm.addDamageSkin(2436212) +if success: + sm.chat("The Hallowkitty Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436227.py b/scripts/item/consume_2436227.py new file mode 100755 index 0000000..2691089 --- /dev/null +++ b/scripts/item/consume_2436227.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Lucid Butterfly Damage Skin (30 Day) | (2436227) +if sm.addDamageSkin(2436227): + sm.chat("'Lucid Butterfly Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436228.py b/scripts/item/consume_2436228.py new file mode 100755 index 0000000..b65706c --- /dev/null +++ b/scripts/item/consume_2436228.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Lucid Butterfly Damage Skin | (2436228) +if sm.addDamageSkin(2436228): + sm.chat("'Lucid Butterfly Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436229.py b/scripts/item/consume_2436229.py new file mode 100755 index 0000000..8a78cc7 --- /dev/null +++ b/scripts/item/consume_2436229.py @@ -0,0 +1,5 @@ +# Pig Bar Damage Skin +success = sm.addDamageSkin(2436229) +if success: + sm.chat("The Pig Bar Damage Skin has been added to your account's damage skin collection.") + # sm.consumeItem(2436229) diff --git a/scripts/item/consume_2436230.py b/scripts/item/consume_2436230.py new file mode 100755 index 0000000..3633f03 --- /dev/null +++ b/scripts/item/consume_2436230.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Cozy Christmas Damage Skin | (2436230) +if sm.addDamageSkin(2436230): + sm.chat("'Cozy Christmas Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436258.py b/scripts/item/consume_2436258.py new file mode 100755 index 0000000..afbe326 --- /dev/null +++ b/scripts/item/consume_2436258.py @@ -0,0 +1,4 @@ +# Relic Damage Skin +success = sm.addDamageSkin(2436258) +if success: + sm.chat("The Relic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436259.py b/scripts/item/consume_2436259.py new file mode 100755 index 0000000..bea3465 --- /dev/null +++ b/scripts/item/consume_2436259.py @@ -0,0 +1,4 @@ +# Hieroglyph Damage Skin +success = sm.addDamageSkin(2436259) +if success: + sm.chat("The Hieroglyph Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436268.py b/scripts/item/consume_2436268.py new file mode 100755 index 0000000..634f713 --- /dev/null +++ b/scripts/item/consume_2436268.py @@ -0,0 +1,4 @@ +# Steamed Bun Damage Skin +success = sm.addDamageSkin(2436268) +if success: + sm.chat("The Steamed Bun Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436300.py b/scripts/item/consume_2436300.py new file mode 100755 index 0000000..d8d0824 --- /dev/null +++ b/scripts/item/consume_2436300.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Sweetheart Choco Damage Skin | (2436300) +if sm.addDamageSkin(2436300): + sm.chat("'Sweetheart Choco Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436310.py b/scripts/item/consume_2436310.py new file mode 100755 index 0000000..3b56c43 --- /dev/null +++ b/scripts/item/consume_2436310.py @@ -0,0 +1,10 @@ +# White Mage Snowfield Permanent Mount Coupon | (2436310) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'White Mage Snowfield' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'White Mage Snowfield' mount.") +sm.dispose() diff --git a/scripts/item/consume_2436314.py b/scripts/item/consume_2436314.py new file mode 100755 index 0000000..4e952cd --- /dev/null +++ b/scripts/item/consume_2436314.py @@ -0,0 +1,10 @@ +# Mad Mimet Mount 30-Day Coupon | (2436314) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mad Mimet' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mad Mimet' mount.") +sm.dispose() diff --git a/scripts/item/consume_2436315.py b/scripts/item/consume_2436315.py new file mode 100755 index 0000000..73ee8fa --- /dev/null +++ b/scripts/item/consume_2436315.py @@ -0,0 +1,10 @@ +# Mad Mimet Mount Permanent Coupon | (2436315) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Mad Mimet' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Mad Mimet' mount.") +sm.dispose() diff --git a/scripts/item/consume_2436324.py b/scripts/item/consume_2436324.py new file mode 100755 index 0000000..8951e70 --- /dev/null +++ b/scripts/item/consume_2436324.py @@ -0,0 +1,6 @@ +# Within Account Nodestone +from net.swordie.ms.constants import QuestConstants + +sm.openNodestone(parentID) +if sm.hasQuestCompleted(QuestConstants.FIFTH_JOB_QUEST): + sm.consumeItem(parentID) diff --git a/scripts/item/consume_2436360.py b/scripts/item/consume_2436360.py new file mode 100755 index 0000000..847a034 --- /dev/null +++ b/scripts/item/consume_2436360.py @@ -0,0 +1,4 @@ +# Neon Lights Damage Skin +success = sm.addDamageSkin(2436360) +if success: + sm.chat("The Neon Lights Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436400.py b/scripts/item/consume_2436400.py new file mode 100755 index 0000000..113d2ba --- /dev/null +++ b/scripts/item/consume_2436400.py @@ -0,0 +1,4 @@ +# Breakthrough Damage Skin +success = sm.addDamageSkin(2436400) +if success: + sm.chat("The Breakthrough Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436474.py b/scripts/item/consume_2436474.py new file mode 100755 index 0000000..5d9613f --- /dev/null +++ b/scripts/item/consume_2436474.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# XOXO Damage Skin | (2436474) +if sm.addDamageSkin(2436474): + sm.chat("'XOXO Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436475.py b/scripts/item/consume_2436475.py new file mode 100755 index 0000000..86c5d78 --- /dev/null +++ b/scripts/item/consume_2436475.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Full of Hearts Damage Skin | (2436475) +if sm.addDamageSkin(2436475): + sm.chat("'Full of Hearts Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436476.py b/scripts/item/consume_2436476.py new file mode 100755 index 0000000..f0ca37b --- /dev/null +++ b/scripts/item/consume_2436476.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Full of Stars Damage Skin | (2436476) +if sm.addDamageSkin(2436476): + sm.chat("'Full of Stars Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436477.py b/scripts/item/consume_2436477.py new file mode 100755 index 0000000..d87dc4a --- /dev/null +++ b/scripts/item/consume_2436477.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# XOXO Damage Skin (30 Day) | (2436477) +if sm.addDamageSkin(2436477): + sm.chat("'XOXO Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436478.py b/scripts/item/consume_2436478.py new file mode 100755 index 0000000..d70130c --- /dev/null +++ b/scripts/item/consume_2436478.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Full of Hearts Damage Skin (30 Day) | (2436478) +if sm.addDamageSkin(2436478): + sm.chat("'Full of Hearts Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436479.py b/scripts/item/consume_2436479.py new file mode 100755 index 0000000..53c060d --- /dev/null +++ b/scripts/item/consume_2436479.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Full of Stars Damage Skin (30 Day) | (2436479) +if sm.addDamageSkin(2436479): + sm.chat("'Full of Stars Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436516.py b/scripts/item/consume_2436516.py new file mode 100755 index 0000000..3c115cd --- /dev/null +++ b/scripts/item/consume_2436516.py @@ -0,0 +1,6 @@ +# Epic Potential Scroll 50% Override Pack +if sm.canHold(2049705, 10): + sm.consumeItem(parentID) + sm.giveItem(2049705, 10) +else: + sm.sendNext("Make some space in your USE inventory.") \ No newline at end of file diff --git a/scripts/item/consume_2436530.py b/scripts/item/consume_2436530.py new file mode 100755 index 0000000..7ae9258 --- /dev/null +++ b/scripts/item/consume_2436530.py @@ -0,0 +1,4 @@ +# Festival Tortoise Damage Skin +success = sm.addDamageSkin(2436530) +if success: + sm.chat("The Festival Tortoise Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436531.py b/scripts/item/consume_2436531.py new file mode 100755 index 0000000..406be40 --- /dev/null +++ b/scripts/item/consume_2436531.py @@ -0,0 +1,4 @@ +# Scribbler Damage Skin +success = sm.addDamageSkin(2436531) +if success: + sm.chat("The Scribbler Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436553.py b/scripts/item/consume_2436553.py new file mode 100755 index 0000000..9de27e8 --- /dev/null +++ b/scripts/item/consume_2436553.py @@ -0,0 +1,4 @@ +# Returned Legend Damage Skin +success = sm.addDamageSkin(2436553) +if success: + sm.chat("The Returned Legend Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436560.py b/scripts/item/consume_2436560.py new file mode 100755 index 0000000..fb21342 --- /dev/null +++ b/scripts/item/consume_2436560.py @@ -0,0 +1,4 @@ +# Mecha Damage Skin +success = sm.addDamageSkin(2436560) +if success: + sm.chat("The Mecha Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436561.py b/scripts/item/consume_2436561.py new file mode 100755 index 0000000..abcffd4 --- /dev/null +++ b/scripts/item/consume_2436561.py @@ -0,0 +1,4 @@ +# Spark Damage Skin +success = sm.addDamageSkin(2436561) +if success: + sm.chat("The Spark Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436563.py b/scripts/item/consume_2436563.py new file mode 100755 index 0000000..5854c8c --- /dev/null +++ b/scripts/item/consume_2436563.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Rocket Damage Skin | (2436563) +if sm.addDamageSkin(2436563): + sm.chat("'Rocket Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436578.py b/scripts/item/consume_2436578.py new file mode 100755 index 0000000..caf6d49 --- /dev/null +++ b/scripts/item/consume_2436578.py @@ -0,0 +1,4 @@ +# Foamy Friends Damage Skin +success = sm.addDamageSkin(2436578) +if success: + sm.chat("The Foamy Friends Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436596.py b/scripts/item/consume_2436596.py new file mode 100755 index 0000000..cdf7fc1 --- /dev/null +++ b/scripts/item/consume_2436596.py @@ -0,0 +1,4 @@ +# Crystalline Damage Skin +success = sm.addDamageSkin(2436596) +if success: + sm.chat("The Crystalline Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436611.py b/scripts/item/consume_2436611.py new file mode 100755 index 0000000..d368712 --- /dev/null +++ b/scripts/item/consume_2436611.py @@ -0,0 +1,4 @@ +# Magpie's Feather Damage Skin +success = sm.addDamageSkin(2436611) +if success: + sm.chat("The Magpie's Feather Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436616.py b/scripts/item/consume_2436616.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/item/consume_2436643.py b/scripts/item/consume_2436643.py new file mode 100755 index 0000000..55c924f --- /dev/null +++ b/scripts/item/consume_2436643.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Color Pop Damage Skin | (2436643) +if sm.addDamageSkin(2436643): + sm.chat("'Color Pop Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436644.py b/scripts/item/consume_2436644.py new file mode 100755 index 0000000..32f11f4 --- /dev/null +++ b/scripts/item/consume_2436644.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Color Pop Damage Skin (30 Day) | (2436644) +if sm.addDamageSkin(2436644): + sm.chat("'Color Pop Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436645.py b/scripts/item/consume_2436645.py new file mode 100755 index 0000000..08e5004 --- /dev/null +++ b/scripts/item/consume_2436645.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Intense Damage Skin | (2436645) +if sm.addDamageSkin(2436645): + sm.chat("'Intense Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436646.py b/scripts/item/consume_2436646.py new file mode 100755 index 0000000..74073a3 --- /dev/null +++ b/scripts/item/consume_2436646.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Intense Damage Skin (30 Day) | (2436646) +if sm.addDamageSkin(2436646): + sm.chat("'Intense Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436651.py b/scripts/item/consume_2436651.py new file mode 100755 index 0000000..b687cce --- /dev/null +++ b/scripts/item/consume_2436651.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Ink Damage Skin | (2436651) +if sm.addDamageSkin(2436651): + sm.chat("'Ink Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436652.py b/scripts/item/consume_2436652.py new file mode 100755 index 0000000..23ab3ef --- /dev/null +++ b/scripts/item/consume_2436652.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Ink Damage Skin (30 Day) | (2436652) +if sm.addDamageSkin(2436652): + sm.chat("'Ink Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436653.py b/scripts/item/consume_2436653.py new file mode 100755 index 0000000..f4591da --- /dev/null +++ b/scripts/item/consume_2436653.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Reverse Damage Skin | (2436653) +if sm.addDamageSkin(2436653): + sm.chat("'Reverse Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436654.py b/scripts/item/consume_2436654.py new file mode 100755 index 0000000..e140656 --- /dev/null +++ b/scripts/item/consume_2436654.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Reverse Damage Skin (30 Day) | (2436654) +if sm.addDamageSkin(2436654): + sm.chat("'Reverse Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436655.py b/scripts/item/consume_2436655.py new file mode 100755 index 0000000..fa77366 --- /dev/null +++ b/scripts/item/consume_2436655.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Neon Easter Egg Damage Skin | (2436655) +if sm.addDamageSkin(2436655): + sm.chat("'Neon Easter Egg Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436656.py b/scripts/item/consume_2436656.py new file mode 100755 index 0000000..78d183d --- /dev/null +++ b/scripts/item/consume_2436656.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Neon Easter Egg Damage Skin (30 Day) | (2436656) +if sm.addDamageSkin(2436656): + sm.chat("'Neon Easter Egg Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436657.py b/scripts/item/consume_2436657.py new file mode 100755 index 0000000..03dbbdc --- /dev/null +++ b/scripts/item/consume_2436657.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Watercolor Damage Skin | (2436657) +if sm.addDamageSkin(2436657): + sm.chat("'Watercolor Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436658.py b/scripts/item/consume_2436658.py new file mode 100755 index 0000000..727aade --- /dev/null +++ b/scripts/item/consume_2436658.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Watercolor Damage Skin (30 Day) | (2436658) +if sm.addDamageSkin(2436658): + sm.chat("'Watercolor Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436679.py b/scripts/item/consume_2436679.py new file mode 100755 index 0000000..0589851 --- /dev/null +++ b/scripts/item/consume_2436679.py @@ -0,0 +1,4 @@ +# Arcana Damage Skin +success = sm.addDamageSkin(2436679) +if success: + sm.chat("The Arcana Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436680.py b/scripts/item/consume_2436680.py new file mode 100755 index 0000000..9083367 --- /dev/null +++ b/scripts/item/consume_2436680.py @@ -0,0 +1,4 @@ +# Imperial Damage Skin +success = sm.addDamageSkin(2436680) +if success: + sm.chat("The Imperial Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436681.py b/scripts/item/consume_2436681.py new file mode 100755 index 0000000..c6b74ac --- /dev/null +++ b/scripts/item/consume_2436681.py @@ -0,0 +1,4 @@ +# Fafnir Damage Skin +success = sm.addDamageSkin(2436681) +if success: + sm.chat("The Fafnir Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436682.py b/scripts/item/consume_2436682.py new file mode 100755 index 0000000..74231e5 --- /dev/null +++ b/scripts/item/consume_2436682.py @@ -0,0 +1,4 @@ +# AbsoLab Damage Skin +success = sm.addDamageSkin(2436682) +if success: + sm.chat("The AbsoLab Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436687.py b/scripts/item/consume_2436687.py new file mode 100755 index 0000000..e5d906d --- /dev/null +++ b/scripts/item/consume_2436687.py @@ -0,0 +1,4 @@ +# Snow-wing Damage Skin +success = sm.addDamageSkin(2436687) +if success: + sm.chat("The Snow-wing Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436688.py b/scripts/item/consume_2436688.py new file mode 100755 index 0000000..0252b1e --- /dev/null +++ b/scripts/item/consume_2436688.py @@ -0,0 +1,4 @@ +# Hard-hitting Damage Skin +success = sm.addDamageSkin(2436688) +if success: + sm.chat("The Hard-hitting Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436721.py b/scripts/item/consume_2436721.py new file mode 100755 index 0000000..c077cb7 --- /dev/null +++ b/scripts/item/consume_2436721.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Sheep Damage Skin | (2436721) +if sm.addDamageSkin(2436721): + sm.chat("'Sheep Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436740.py b/scripts/item/consume_2436740.py new file mode 100755 index 0000000..c44f0d3 --- /dev/null +++ b/scripts/item/consume_2436740.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Japanese Kanji Character Damage Skin | (2436740) +if sm.addDamageSkin(2436740): + sm.chat("'Japanese Kanji Character Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436741.py b/scripts/item/consume_2436741.py new file mode 100755 index 0000000..28152a5 --- /dev/null +++ b/scripts/item/consume_2436741.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chinese Text Damage Skin (30 Day) | (2436741) +if sm.addDamageSkin(2436741): + sm.chat("'Chinese Text Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436742.py b/scripts/item/consume_2436742.py new file mode 100755 index 0000000..4ac9b21 --- /dev/null +++ b/scripts/item/consume_2436742.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chinese Text Damage Skin | (2436742) +if sm.addDamageSkin(2436742): + sm.chat("'Chinese Text Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436743.py b/scripts/item/consume_2436743.py new file mode 100755 index 0000000..737bfed --- /dev/null +++ b/scripts/item/consume_2436743.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chinese Text Damage Skin (30 Day) | (2436743) +if sm.addDamageSkin(2436743): + sm.chat("'Chinese Text Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436744.py b/scripts/item/consume_2436744.py new file mode 100755 index 0000000..df74890 --- /dev/null +++ b/scripts/item/consume_2436744.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chinese Text Damage Skin | (2436744) +if sm.addDamageSkin(2436744): + sm.chat("'Chinese Text Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436745.py b/scripts/item/consume_2436745.py new file mode 100755 index 0000000..1b20430 --- /dev/null +++ b/scripts/item/consume_2436745.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Chinese Text Damage Skin (30 Day) | (2436745) +if sm.addDamageSkin(2436745): + sm.chat("'Chinese Text Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436746.py b/scripts/item/consume_2436746.py new file mode 100755 index 0000000..c4f83dd --- /dev/null +++ b/scripts/item/consume_2436746.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Roman Numeral Damage Skin | (2436746) +if sm.addDamageSkin(2436746): + sm.chat("'Roman Numeral Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436747.py b/scripts/item/consume_2436747.py new file mode 100755 index 0000000..37f9ba0 --- /dev/null +++ b/scripts/item/consume_2436747.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Roman Numeral Damage Skin (30 Day) | (2436747) +if sm.addDamageSkin(2436747): + sm.chat("'Roman Numeral Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436748.py b/scripts/item/consume_2436748.py new file mode 100755 index 0000000..3f93d2c --- /dev/null +++ b/scripts/item/consume_2436748.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Knife Wound Damage Skin | (2436748) +if sm.addDamageSkin(2436748): + sm.chat("'Knife Wound Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436749.py b/scripts/item/consume_2436749.py new file mode 100755 index 0000000..f7566b1 --- /dev/null +++ b/scripts/item/consume_2436749.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Knife Wound Damage Skin (30 Day) | (2436749) +if sm.addDamageSkin(2436749): + sm.chat("'Knife Wound Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436785.py b/scripts/item/consume_2436785.py new file mode 100755 index 0000000..c7dfa33 --- /dev/null +++ b/scripts/item/consume_2436785.py @@ -0,0 +1,4 @@ +# Honeybee Damage Skin +success = sm.addDamageSkin(2436785) +if success: + sm.chat("The Honeybee Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436808.py b/scripts/item/consume_2436808.py new file mode 100755 index 0000000..3119219 --- /dev/null +++ b/scripts/item/consume_2436808.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Aspire Industries Damage Skin | (2436808) +if sm.addDamageSkin(2436808): + sm.chat("'Aspire Industries Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436810.py b/scripts/item/consume_2436810.py new file mode 100755 index 0000000..ccde635 --- /dev/null +++ b/scripts/item/consume_2436810.py @@ -0,0 +1,4 @@ +# Evolution Damage Skin +success = sm.addDamageSkin(2436810) +if success: + sm.chat("The Evolution Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436830.py b/scripts/item/consume_2436830.py new file mode 100755 index 0000000..5bfe968 --- /dev/null +++ b/scripts/item/consume_2436830.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Gifts of the Ryuul Damage Skin | (2436830) +if sm.addDamageSkin(2436830): + sm.chat("'Gifts of the Ryuul Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436831.py b/scripts/item/consume_2436831.py new file mode 100755 index 0000000..bb25d2a --- /dev/null +++ b/scripts/item/consume_2436831.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Petal Damage Skin | (2436831) +if sm.addDamageSkin(2436831): + sm.chat("'Petal Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436832.py b/scripts/item/consume_2436832.py new file mode 100755 index 0000000..70d2692 --- /dev/null +++ b/scripts/item/consume_2436832.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# aa | (2436832) +if sm.addDamageSkin(2436832): + sm.chat("'aa' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436884.py b/scripts/item/consume_2436884.py new file mode 100755 index 0000000..d59aac8 --- /dev/null +++ b/scripts/item/consume_2436884.py @@ -0,0 +1,9 @@ +from net.swordie.ms.client.character.union import Union + +union = chr.getUnion() +if union.getPresets() < Union.MAX_PRESETS: + # TODO: set proper quest value + sm.consumeItem(parentID) + union.addPreset() +else: + sm.sendNext("You're already on the maximum amount of presets!") \ No newline at end of file diff --git a/scripts/item/consume_2436951.py b/scripts/item/consume_2436951.py new file mode 100755 index 0000000..3f922f6 --- /dev/null +++ b/scripts/item/consume_2436951.py @@ -0,0 +1,4 @@ +# Constellation Damage Skin +success = sm.addDamageSkin(2436951) +if success: + sm.chat("The Constellation Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436952.py b/scripts/item/consume_2436952.py new file mode 100755 index 0000000..59e8e22 --- /dev/null +++ b/scripts/item/consume_2436952.py @@ -0,0 +1,4 @@ +# Extraterrestrial Damage Skin +success = sm.addDamageSkin(2436952) +if success: + sm.chat("The Extraterrestrial Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436953.py b/scripts/item/consume_2436953.py new file mode 100755 index 0000000..aa52a47 --- /dev/null +++ b/scripts/item/consume_2436953.py @@ -0,0 +1,4 @@ +# Frozen Treat Damage Skin +success = sm.addDamageSkin(2436953) +if success: + sm.chat("The Frozen Treat Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2436980.py b/scripts/item/consume_2436980.py new file mode 100755 index 0000000..0c7ed0b --- /dev/null +++ b/scripts/item/consume_2436980.py @@ -0,0 +1,9 @@ +# Elunite Elemental Soul +souls = [2591602, 2591603, 2591604, 2591605, 2591606, 2591607, 2591608, 2591609, 2591610] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2436980, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2436980, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2436984.py b/scripts/item/consume_2436984.py new file mode 100755 index 0000000..13dc884 --- /dev/null +++ b/scripts/item/consume_2436984.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Treasures of Eluna Damage Skin | (2436984) +if sm.addDamageSkin(2436984): + sm.chat("'Treasures of Eluna Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2436986.py b/scripts/item/consume_2436986.py new file mode 100755 index 0000000..f7d2a4e --- /dev/null +++ b/scripts/item/consume_2436986.py @@ -0,0 +1,4 @@ +# Damage Skin Item ID does not have a name +success = sm.addDamageSkin(2436986) +if success: + sm.chat("The The Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437009.py b/scripts/item/consume_2437009.py new file mode 100755 index 0000000..aba3f4e --- /dev/null +++ b/scripts/item/consume_2437009.py @@ -0,0 +1,4 @@ +# Party Quest Damage Skin +success = sm.addDamageSkin(2437009) +if success: + sm.chat("The Party Quest Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437022.py b/scripts/item/consume_2437022.py new file mode 100755 index 0000000..7477101 --- /dev/null +++ b/scripts/item/consume_2437022.py @@ -0,0 +1,4 @@ +# Solar Eclipse Damage Skin +success = sm.addDamageSkin(2437022) +if success: + sm.chat("The Solar Eclipse Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437023.py b/scripts/item/consume_2437023.py new file mode 100755 index 0000000..d7de2b9 --- /dev/null +++ b/scripts/item/consume_2437023.py @@ -0,0 +1,4 @@ +# Prism Damage Skin +success = sm.addDamageSkin(2437023) +if success: + sm.chat("The Prism Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437024.py b/scripts/item/consume_2437024.py new file mode 100755 index 0000000..805e3ac --- /dev/null +++ b/scripts/item/consume_2437024.py @@ -0,0 +1,4 @@ +# Starry Sky Damage Skin +success = sm.addDamageSkin(2437024) +if success: + sm.chat("The Starry Sky Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437025.py b/scripts/item/consume_2437025.py new file mode 100755 index 0000000..ec5ad80 --- /dev/null +++ b/scripts/item/consume_2437025.py @@ -0,0 +1,1882 @@ +import random + +items = [ + 3015022, + 3015023, + 3015020, + 3015021, + 3015018, + 3015019, + 3015016, + 3015017, + 3015014, + 3015015, + 3015012, + 3015013, + 3015010, + 3015011, + 3015008, + 3015038, + 3015039, + 3015036, + 3015034, + 3015032, + 3015033, + 3015030, + 3015031, + 3015028, + 3015029, + 3015026, + 3015027, + 3015024, + 3015025, + 3015004, + 3015005, + 3015002, + 3015003, + 3015000, + 3015001, + 3015082, + 3015083, + 3015081, + 3015074, + 3015075, + 3015072, + 3015073, + 3015102, + 3015103, + 3015096, + 3015094, + 3015095, + 3015092, + 3015090, + 3015091, + 3015088, + 3015089, + 3015054, + 3015055, + 3015052, + 3015053, + 3015050, + 3015051, + 3015048, + 3015049, + 3015044, + 3015045, + 3015042, + 3015043, + 3015040, + 3015041, + 3015070, + 3015071, + 3015068, + 3015069, + 3015066, + 3015067, + 3015064, + 3015065, + 3015062, + 3015063, + 3015060, + 3015061, + 3015058, + 3015059, + 3015056, + 3015144, + 3015166, + 3015167, + 3015164, + 3015165, + 3015162, + 3015163, + 3015160, + 3015161, + 3015159, + 3015156, + 3015157, + 3015154, + 3015155, + 3015152, + 3015118, + 3015119, + 3015116, + 3015117, + 3015114, + 3015115, + 3015112, + 3015111, + 3015108, + 3015109, + 3015107, + 3015104, + 3015105, + 3015130, + 3015131, + 3015128, + 3015129, + 3015126, + 3015127, + 3015125, + 3015122, + 3015120, + 3015214, + 3015215, + 3015212, + 3015213, + 3015210, + 3015208, + 3015209, + 3015206, + 3015207, + 3015204, + 3015205, + 3015202, + 3015203, + 3015200, + 3015201, + 3015224, + 3015225, + 3015223, + 3015220, + 3015218, + 3015219, + 3015216, + 3015217, + 3015182, + 3015183, + 3015180, + 3015181, + 3015178, + 3015174, + 3015175, + 3015172, + 3015173, + 3015170, + 3015171, + 3015168, + 3015169, + 3015198, + 3015199, + 3015196, + 3015195, + 3015192, + 3015193, + 3015190, + 3015191, + 3015188, + 3015189, + 3015186, + 3015187, + 3015184, + 3015185, + 3015278, + 3015279, + 3015276, + 3015277, + 3015272, + 3015270, + 3015271, + 3015268, + 3015269, + 3015266, + 3015267, + 3015264, + 3015265, + 3015295, + 3015292, + 3015293, + 3015290, + 3015291, + 3015288, + 3015289, + 3015286, + 3015287, + 3015284, + 3015285, + 3015283, + 3015246, + 3015247, + 3015244, + 3015245, + 3015243, + 3015240, + 3015241, + 3015238, + 3015239, + 3015236, + 3015237, + 3015234, + 3015235, + 3015263, + 3015254, + 3015255, + 3015253, + 3015250, + 3015251, + 3015248, + 3015249, + 3015342, + 3015343, + 3015340, + 3015341, + 3015338, + 3015339, + 3015332, + 3015333, + 3015330, + 3015331, + 3015328, + 3015329, + 3015358, + 3015359, + 3015356, + 3015357, + 3015354, + 3015355, + 3015350, + 3015348, + 3015349, + 3015346, + 3015347, + 3015344, + 3015310, + 3015311, + 3015309, + 3015306, + 3015304, + 3015305, + 3015302, + 3015303, + 3015300, + 3015301, + 3015298, + 3015299, + 3015296, + 3015297, + 3015326, + 3015327, + 3015325, + 3015314, + 3015315, + 3015312, + 3015404, + 3015405, + 3015398, + 3015399, + 3015396, + 3015397, + 3015394, + 3015392, + 3015422, + 3015423, + 3015420, + 3015421, + 3015418, + 3015416, + 3015417, + 3015414, + 3015412, + 3015413, + 3015410, + 3015411, + 3015408, + 3015409, + 3015374, + 3015375, + 3015372, + 3015370, + 3015371, + 3015368, + 3015369, + 3015366, + 3015367, + 3015364, + 3015365, + 3015362, + 3015363, + 3015360, + 3015361, + 3015390, + 3015391, + 3015388, + 3015389, + 3015387, + 3015378, + 3015379, + 3015376, + 3015377, + 3015470, + 3015471, + 3015468, + 3015469, + 3015466, + 3015467, + 3015464, + 3015465, + 3015460, + 3015458, + 3015459, + 3015482, + 3015481, + 3015476, + 3015474, + 3015475, + 3015472, + 3015473, + 3015438, + 3015436, + 3015437, + 3015434, + 3015435, + 3015432, + 3015433, + 3015431, + 3015429, + 3015452, + 3015453, + 3015450, + 3015448, + 3015449, + 3015446, + 3015447, + 3015444, + 3015445, + 3015440, + 3015526, + 3015524, + 3015525, + 3015522, + 3015523, + 3015520, + 3015521, + 3015550, + 3015551, + 3015548, + 3015549, + 3015547, + 3015544, + 3015545, + 3015542, + 3015543, + 3015540, + 3015541, + 3015538, + 3015539, + 3015502, + 3015503, + 3015500, + 3015501, + 3015498, + 3015499, + 3015496, + 3015497, + 3015518, + 3015516, + 3015517, + 3015514, + 3015512, + 3015513, + 3015510, + 3015511, + 3015508, + 3015509, + 3015506, + 3015507, + 3015504, + 3015505, + 3015598, + 3015599, + 3015596, + 3015597, + 3015594, + 3015595, + 3015592, + 3015593, + 3015590, + 3015591, + 3015588, + 3015589, + 3015586, + 3015587, + 3015614, + 3015615, + 3015612, + 3015613, + 3015610, + 3015611, + 3015608, + 3015609, + 3015606, + 3015607, + 3015604, + 3015605, + 3015602, + 3015603, + 3015600, + 3015566, + 3015567, + 3015564, + 3015565, + 3015562, + 3015560, + 3015561, + 3015558, + 3015559, + 3015556, + 3015557, + 3015554, + 3015555, + 3015552, + 3015553, + 3015582, + 3015583, + 3015580, + 3015581, + 3015579, + 3015572, + 3015573, + 3015570, + 3015571, + 3015568, + 3015569, + 3015662, + 3015663, + 3015660, + 3015661, + 3015658, + 3015659, + 3015654, + 3015652, + 3015653, + 3015650, + 3015651, + 3015648, + 3015649, + 3015676, + 3015674, + 3015675, + 3015672, + 3015673, + 3015670, + 3015671, + 3015668, + 3015669, + 3015666, + 3015667, + 3015664, + 3015665, + 3015630, + 3015631, + 3015628, + 3015629, + 3015627, + 3015622, + 3015618, + 3015616, + 3015617, + 3015646, + 3015647, + 3015644, + 3015645, + 3015642, + 3015643, + 3015640, + 3015641, + 3015638, + 3015639, + 3015636, + 3015637, + 3015635, + 3015632, + 3015633, + 3015722, + 3015721, + 3015716, + 3015717, + 3015714, + 3015715, + 3015712, + 3015713, + 3015742, + 3015743, + 3015738, + 3015739, + 3015694, + 3015695, + 3015692, + 3015693, + 3015690, + 3015691, + 3015688, + 3015689, + 3015687, + 3015710, + 3015711, + 3015708, + 3015706, + 3015707, + 3015704, + 3015705, + 3015702, + 3015703, + 3015700, + 3015701, + 3015698, + 3015699, + 3015696, + 3015697, + 3015790, + 3015791, + 3015788, + 3015789, + 3015786, + 3015787, + 3015776, + 3015777, + 3015806, + 3015807, + 3015804, + 3015805, + 3015802, + 3015803, + 3015800, + 3015801, + 3015798, + 3015799, + 3015796, + 3015797, + 3015794, + 3015795, + 3015792, + 3015793, + 3015758, + 3015759, + 3015756, + 3015757, + 3015754, + 3015755, + 3015752, + 3015753, + 3015750, + 3015748, + 3015749, + 3015747, + 3015744, + 3015745, + 3015774, + 3015775, + 3015772, + 3015773, + 3015770, + 3015771, + 3015768, + 3015769, + 3015766, + 3015767, + 3015764, + 3015762, + 3015763, + 3015761, + 3015850, + 3015848, + 3015849, + 3015846, + 3015847, + 3015844, + 3015845, + 3015842, + 3015840, + 3015841, + 3015866, + 3015867, + 3015864, + 3015865, + 3015862, + 3015863, + 3015860, + 3015861, + 3015858, + 3015859, + 3015856, + 3015857, + 3015822, + 3015823, + 3015821, + 3015818, + 3015819, + 3015816, + 3015817, + 3015814, + 3015815, + 3015812, + 3015813, + 3015810, + 3015811, + 3015838, + 3015839, + 3015836, + 3015837, + 3015834, + 3015835, + 3015832, + 3015833, + 3015826, + 3015827, + 3015824, + 3015825, + 3015918, + 3015919, + 3015916, + 3015917, + 3015915, + 3015913, + 3015906, + 3015907, + 3015904, + 3015934, + 3015935, + 3015932, + 3015933, + 3015930, + 3015931, + 3015928, + 3015929, + 3015926, + 3015927, + 3015924, + 3015925, + 3015922, + 3015923, + 3015920, + 3015921, + 3015886, + 3015887, + 3015884, + 3015885, + 3015882, + 3015883, + 3015880, + 3015881, + 3015878, + 3015876, + 3015877, + 3015874, + 3015873, + 3015902, + 3015903, + 3015900, + 3015901, + 3015898, + 3015899, + 3015896, + 3015897, + 3015894, + 3015895, + 3015890, + 3015891, + 3015888, + 3015889, + 3015978, + 3015979, + 3015976, + 3015977, + 3015974, + 3015975, + 3015972, + 3015973, + 3015970, + 3015971, + 3015968, + 3015969, + 3015998, + 3015999, + 3015996, + 3015997, + 3015994, + 3015995, + 3015993, + 3015991, + 3015948, + 3015944, + 3015942, + 3015943, + 3015940, + 3015941, + 3015938, + 3015939, + 3015936, + 3015937, + 3015967, + 3015962, + 3015961, + 3015958, + 3015959, + 3015956, + 3015957, + 3015955, + 3015953, + 3016100, + 3016101, + 3016206, + 3016207, + 3016204, + 3016205, + 3016202, + 3016203, + 3016200, + 3016218, + 3016219, + 3016216, + 3016217, + 3016215, + 3016213, + 3016210, + 3016208, + 3016209, + 3017006, + 3017007, + 3017004, + 3017005, + 3017002, + 3017003, + 3017000, + 3017001, + 3017022, + 3017023, + 3017020, + 3017021, + 3017018, + 3017019, + 3017016, + 3017017, + 3017014, + 3017015, + 3017012, + 3017013, + 3017010, + 3017011, + 3017008, + 3017009, + 3017070, + 3017071, + 3017068, + 3017069, + 3017066, + 3017067, + 3017064, + 3017065, + 3017062, + 3017063, + 3017060, + 3017061, + 3017058, + 3017059, + 3017056, + 3017057, + 3017072, + 3017073, + 3017038, + 3017039, + 3017036, + 3017037, + 3017034, + 3017035, + 3017032, + 3017033, + 3017030, + 3017031, + 3017028, + 3017029, + 3017027, + 3017024, + 3017025, + 3017054, + 3017055, + 3017052, + 3017053, + 3017050, + 3017051, + 3017048, + 3017049, + 3017046, + 3017047, + 3017044, + 3017045, + 3017042, + 3017043, + 3017040, + 3017041, + 3018026, + 3018027, + 3018024, + 3018025, + 3018022, + 3018023, + 3018020, + 3018021, + 3018018, + 3018019, + 3018017, + 3018046, + 3018044, + 3018045, + 3018042, + 3018043, + 3018038, + 3018039, + 3018036, + 3018037, + 3018034, + 3018035, + 3018015, + 3018013, + 3018010, + 3018011, + 3018008, + 3018009, + 3018006, + 3018007, + 3018004, + 3018005, + 3018002, + 3018003, + 3018000, + 3018001, + 3018094, + 3018095, + 3018093, + 3018090, + 3018091, + 3018089, + 3018086, + 3018087, + 3018084, + 3018085, + 3018083, + 3018080, + 3018111, + 3018108, + 3018109, + 3018106, + 3018107, + 3018104, + 3018105, + 3018102, + 3018103, + 3018100, + 3018101, + 3018098, + 3018096, + 3018097, + 3018062, + 3018060, + 3018061, + 3018058, + 3018059, + 3018056, + 3018057, + 3018054, + 3018055, + 3018052, + 3018053, + 3018050, + 3018051, + 3018049, + 3018078, + 3018079, + 3018076, + 3018074, + 3018075, + 3018070, + 3018071, + 3018066, + 3018067, + 3018064, + 3018065, + 3018152, + 3018153, + 3018150, + 3018151, + 3018149, + 3018146, + 3018144, + 3018145, + 3018174, + 3018175, + 3018172, + 3018173, + 3018171, + 3018167, + 3018126, + 3018127, + 3018122, + 3018123, + 3018120, + 3018121, + 3018118, + 3018119, + 3018116, + 3018117, + 3018114, + 3018115, + 3018112, + 3018113, + 3018142, + 3018143, + 3018140, + 3018141, + 3018138, + 3018139, + 3018136, + 3018137, + 3018134, + 3018135, + 3018132, + 3018133, + 3018130, + 3018131, + 3018129, + 3018222, + 3018223, + 3018221, + 3018219, + 3018216, + 3018214, + 3018212, + 3018213, + 3018210, + 3018211, + 3018209, + 3018238, + 3018239, + 3018236, + 3018232, + 3018230, + 3018231, + 3018228, + 3018229, + 3018226, + 3018227, + 3018224, + 3018225, + 3018186, + 3018187, + 3018184, + 3018185, + 3018182, + 3018183, + 3018181, + 3018178, + 3018179, + 3018176, + 3018177, + 3018200, + 3018201, + 3018199, + 3018196, + 3018197, + 3018195, + 3018286, + 3018285, + 3018282, + 3018283, + 3018280, + 3018281, + 3018278, + 3018279, + 3018277, + 3018272, + 3018302, + 3018303, + 3018300, + 3018301, + 3018298, + 3018299, + 3018297, + 3018294, + 3018292, + 3018293, + 3018291, + 3018250, + 3018251, + 3018248, + 3018246, + 3018247, + 3018244, + 3018245, + 3018242, + 3018243, + 3018240, + 3018241, + 3018270, + 3018268, + 3018266, + 3018267, + 3018264, + 3018265, + 3018258, + 3018259, + 3018256, + 3018257, + 3018344, + 3018339, + 3018364, + 3018365, + 3018363, + 3018360, + 3018361, + 3018358, + 3018318, + 3018319, + 3018316, + 3018317, + 3018314, + 3018315, + 3018313, + 3018310, + 3018311, + 3018308, + 3018309, + 3018306, + 3018307, + 3018305, + 3018334, + 3018335, + 3018332, + 3018324, + 3018325, + 3018322, + 3018323, + 3018320, + 3018321, + 3018370, + 3018368, + 3018369, + 3018390, + 3018389, + 3010029, + 3010028, + 3010031, + 3010030, + 3010025, + 3010024, + 3010026, + 3010021, + 3010020, + 3010023, + 3010022, + 3010017, + 3010016, + 3010019, + 3010018, + 3010045, + 3010044, + 3010047, + 3010046, + 3010041, + 3010040, + 3010043, + 3010036, + 3010033, + 3010032, + 3010035, + 3010034, + 3010013, + 3010012, + 3010015, + 3010014, + 3010009, + 3010008, + 3010011, + 3010010, + 3010005, + 3010004, + 3010007, + 3010006, + 3010001, + 3010000, + 3010003, + 3010002, + 3010093, + 3010092, + 3010095, + 3010094, + 3010085, + 3010084, + 3010086, + 3010081, + 3010080, + 3010083, + 3010082, + 3010109, + 3010108, + 3010111, + 3010110, + 3010105, + 3010104, + 3010107, + 3010106, + 3010101, + 3010100, + 3010103, + 3010102, + 3010097, + 3010096, + 3010099, + 3010098, + 3010061, + 3010060, + 3010063, + 3010062, + 3010057, + 3010056, + 3010058, + 3010053, + 3010052, + 3010055, + 3010054, + 3010049, + 3010048, + 3010051, + 3010050, + 3010077, + 3010079, + 3010078, + 3010073, + 3010072, + 3010075, + 3010074, + 3010069, + 3010068, + 3010071, + 3010065, + 3010064, + 3010067, + 3010066, + 3010157, + 3010156, + 3010152, + 3010155, + 3010154, + 3010149, + 3010148, + 3010151, + 3010145, + 3010144, + 3010146, + 3010173, + 3010172, + 3010175, + 3010174, + 3010169, + 3010168, + 3010171, + 3010170, + 3010164, + 3010166, + 3010161, + 3010162, + 3010125, + 3010124, + 3010127, + 3010126, + 3010121, + 3010120, + 3010123, + 3010122, + 3010117, + 3010116, + 3010119, + 3010118, + 3010113, + 3010112, + 3010115, + 3010114, + 3010141, + 3010140, + 3010143, + 3010142, + 3010137, + 3010136, + 3010139, + 3010138, + 3010133, + 3010132, + 3010135, + 3010134, + 3010129, + 3010128, + 3010131, + 3010130, + 3010220, + 3010222, + 3010216, + 3010219, + 3010218, + 3010213, + 3010212, + 3010215, + 3010214, + 3010208, + 3010211, + 3010237, + 3010236, + 3010239, + 3010238, + 3010233, + 3010232, + 3010235, + 3010234, + 3010229, + 3010228, + 3010231, + 3010230, + 3010225, + 3010224, + 3010227, + 3010226, + 3010189, + 3010188, + 3010191, + 3010185, + 3010184, + 3010186, + 3010181, + 3010180, + 3010183, + 3010182, + 3010177, + 3010179, + 3010178, + 3010205, + 3010207, + 3010206, + 3010201, + 3010200, + 3010203, + 3010202, + 3010197, + 3010196, + 3010193, + 3010192, + 3010195, + 3010194, + 3010285, + 3010284, + 3010287, + 3010286, + 3010281, + 3010283, + 3010282, + 3010277, + 3010276, + 3010279, + 3010278, + 3010273, + 3010272, + 3010275, + 3010274, + 3010301, + 3010302, + 3010297, + 3010296, + 3010299, + 3010298, + 3010289, + 3010288, + 3010290, + 3010253, + 3010252, + 3010255, + 3010254, + 3010249, + 3010248, + 3010251, + 3010250, + 3010245, + 3010244, + 3010247, + 3010246, + 3010241, + 3010240, + 3010243, + 3010242, + 3010269, + 3010268, + 3010271, + 3010270, + 3010264, + 3010267, + 3010266, + 3010261, + 3010260, + 3010263, + 3010262, + 3010257, + 3010256, + 3010259, + 3010258, + 3010349, + 3010348, + 3010351, + 3010350, + 3010345, + 3010344, + 3010347, + 3010346, + 3010341, + 3010340, + 3010343, + 3010342, + 3010337, + 3010336, + 3010339, + 3010338, + 3010365, + 3010364, + 3010360, + 3010357, + 3010359, + 3010358, + 3010353, + 3010352, + 3010355, + 3010354, + 3010317, + 3010316, + 3010319, + 3010318, + 3010313, + 3010315, + 3010314, + 3010308, + 3010311, + 3010304, + 3010307, + 3010306, + 3010333, + 3010332, + 3010335, + 3010334, + 3010329, + 3010328, + 3010331, + 3010330, + 3010325, + 3010324, + 3010327, + 3010326, + 3010321, + 3010320, + 3010323, + 3010322, + 3010412, + 3010410, + 3010405, + 3010404, + 3010406, + 3010403, + 3010402, + 3010429, + 3010431, + 3010430, + 3010425, + 3010424, + 3010427, + 3010421, + 3010423, + 3010422, + 3010417, + 3010416, + 3010419, + 3010381, + 3010380, + 3010383, + 3010382, + 3010377, + 3010376, + 3010379, + 3010378, + 3010373, + 3010372, + 3010375, + 3010374, + 3010369, + 3010368, + 3010371, + 3010370, + 3010397, + 3010396, + 3010399, + 3010398, + 3010393, + 3010392, + 3010395, + 3010394, + 3010389, + 3010388, + 3010391, + 3010390, + 3010385, + 3010384, + 3010387, + 3010386, + 3010473, + 3010472, + 3010471, + 3010465, + 3010464, + 3010467, + 3010466, + 3010493, + 3010492, + 3010495, + 3010494, + 3010491, + 3010490, + 3010445, + 3010444, + 3010447, + 3010446, + 3010441, + 3010440, + 3010443, + 3010442, + 3010437, + 3010436, + 3010439, + 3010438, + 3010433, + 3010432, + 3010435, + 3010434, + 3010462, + 3010457, + 3010459, + 3010458, + 3010452, + 3010455, + 3010454, + 3010449, + 3010448, + 3010451, + 3010450, + 3010541, + 3010540, + 3010543, + 3010542, + 3010537, + 3010536, + 3010539, + 3010538, + 3010533, + 3010532, + 3010535, + 3010534, + 3010529, + 3010531, + 3010530, + 3010557, + 3010556, + 3010559, + 3010558, + 3010553, + 3010552, + 3010555, + 3010554, + 3010549, + 3010548, + 3010551, + 3010550, + 3010545, + 3010544, + 3010547, + 3010546, + 3010511, + 3010505, + 3010504, + 3010506, + 3010501, + 3010500, + 3010503, + 3010502, + 3010499, + 3010525, + 3010524, + 3010527, + 3010526, + 3010521, + 3010520, + 3010523, + 3010522, + 3010517, + 3010516, + 3010519, + 3010518, + 3010513, + 3010512, + 3010515, + 3010514, + 3010607, + 3010606, + 3010601, + 3010600, + 3010602, + 3010597, + 3010596, + 3010598, + 3010593, + 3010592, + 3010595, + 3010620, + 3010623, + 3010622, + 3010613, + 3010612, + 3010615, + 3010609, + 3010608, + 3010611, + 3010610, + 3010573, + 3010572, + 3010575, + 3010574, + 3010569, + 3010568, + 3010571, + 3010570, + 3010565, + 3010564, + 3010567, + 3010566, + 3010561, + 3010560, + 3010563, + 3010562, + 3010589, + 3010591, + 3010590, + 3010585, + 3010584, + 3010587, + 3010581, + 3010580, + 3010583, + 3010582, + 3010577, + 3010576, + 3010579, + 3010578, + 3010670, + 3010661, + 3010663, + 3010662, + 3010656, + 3010659, + 3010685, + 3010687, + 3010686, + 3010681, + 3010680, + 3010683, + 3010682, + 3010677, + 3010676, + 3010679, + 3010678, + 3010673, + 3010672, + 3010675, + 3010674, + 3010637, + 3010636, + 3010639, + 3010638, + 3010635, + 3010634, + 3010631, + 3010624, + 3010653, + 3010652, + 3010655, + 3010654, + 3010651, + 3010644, + 3010641, + 3010640, + 3010643, + 3010642, + 3010733, + 3010732, + 3010735, + 3010734, + 3010728, + 3010725, + 3010724, + 3010727, + 3010726, + 3010721, + 3010720, + 3010723, + 3010722, + 3010749, + 3010748, + 3010751, + 3010750, + 3010744, + 3010747, + 3010743, + 3010742, + 3010737, + 3010736, + 3010738, + 3010700, + 3010703, + 3010702, + 3010697, + 3010699, + 3010698, + 3010693, + 3010692, + 3010695, + 3010694, + 3010688, + 3010691, + 3010690, + 3010719, + 3010708, + 3010705, + 3010704, + 3010707, + 3010706, + 3010797, + 3010798, + 3010795, + 3010785, + 3010784, + 3010787, + 3010786, + 3010812, + 3010815, + 3010814, + 3010809, + 3010808, + 3010811, + 3010810, + 3010804, + 3010807, + 3010801, + 3010800, + 3010803, + 3010802, + 3010765, + 3010764, + 3010767, + 3010766, + 3010761, + 3010760, + 3010763, + 3010762, + 3010757, + 3010756, + 3010758, + 3010752, + 3010755, + 3010754, + 3010783, + 3010769, + 3010768, + 3010861, + 3010860, + 3010863, + 3010862, + 3010857, + 3010856, + 3010859, + 3010858, + 3010853, + 3010852, + 3010855, + 3010854, + 3010849, + 3010848, + 3010851, + 3010850, + 3010878, + 3010873, + 3010872, + 3010875, + 3010874, + 3010869, + 3010868, + 3010871, + 3010870, + 3010865, + 3010864, + 3010867, + 3010829, + 3010828, + 3010831, + 3010830, + 3010825, + 3010824, + 3010827, + 3010826, + 3010821, + 3010820, + 3010823, + 3010822, + 3010817, + 3010816, + 3010819, + 3010818, + 3010844, + 3010841, + 3010840, + 3010843, + 3010842, + 3010837, + 3010836, + 3010839, + 3010838, + 3010833, + 3010832, + 3010835, + 3010834, + 3010925, + 3010924, + 3010927, + 3010926, + 3010941, + 3010943, + 3010942, + 3010937, + 3010939, + 3010938, + 3010933, + 3010932, + 3010934, + 3010929, + 3010928, + 3010931, + 3010930, + 3010893, + 3010892, + 3010894, + 3010889, + 3010888, + 3010891, + 3010890, + 3010885, + 3010884, + 3010887, + 3010886, + 3010881, + 3010880, + 3010883, + 3010882, + 3010985, + 3010984, + 3010987, + 3010986, + 3010981, + 3010980, + 3010983, + 3010982, + 3010976, + 3010979, + 3010978, + 3011000, + 3010999, + 3010957, + 3010956, + 3010959, + 3010958, + 3010953, + 3010948, + 3010945, + 3010947, + 3010946, + 3010973, + 3010972, + 3010974, + 3010969, + 3010968, + 3010971, + 3010970, + 3010965, + 3010964, + 3010967, + 3010966, + 3010961, + 3010960, + 3010962, + 3012015, + 3012009, + 3012008, + 3012011, + 3012010, + 3012005, + 3012007, + 3012006, + 3012001, + 3012000, + 3012003, + 3012002, + 3012029, + 3012028, + 3012031, + 3012030, + 3012026, + 3012021, + 3012020, + 3012017, + 3012018, + 3012036, + 3012032, + 3012034, + 3013005, + 3013001, + 3013000, + 3013002, + 3013009, + 3013008, + 3014013, + 3014015, + 3014014, + 3014009, + 3014011, + 3014010, + 3014005, + 3014004, + 3014006, + 3014001, + 3014000, + 3014003, + 3014002, + 3014029, + 3014028, + 3014030, + 3014024, + 3014027, + 3014026, + 3014021, + 3014020, + 3014023, + 3014022, + 3014017, + 3014016, + 3014019, + 3014018 +] + + +question = sm.sendAskYesNo("#eWould you like to receive a #rrandom Chair?") +randitem = random.choice(items) +if question and sm.canHold(randitem): + sm.giveItem(randitem) + sm.consumeItem(2437025) +else: + sm.sendNext("#e#dYour inventory is full or you don't have enough NX.") + diff --git a/scripts/item/consume_2437049.py b/scripts/item/consume_2437049.py new file mode 100755 index 0000000..9243a75 --- /dev/null +++ b/scripts/item/consume_2437049.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Summer Sands Damage Skin | (2437049) +if sm.addDamageSkin(2437049): + sm.chat("'Summer Sands Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437050.py b/scripts/item/consume_2437050.py new file mode 100755 index 0000000..bf7f562 --- /dev/null +++ b/scripts/item/consume_2437050.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Summer Sands Damage Skin (30 Day) | (2437050) +if sm.addDamageSkin(2437050): + sm.chat("'Summer Sands Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437051.py b/scripts/item/consume_2437051.py new file mode 100755 index 0000000..0403500 --- /dev/null +++ b/scripts/item/consume_2437051.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Tropical Sunset Damage Skin | (2437051) +if sm.addDamageSkin(2437051): + sm.chat("'Tropical Sunset Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437052.py b/scripts/item/consume_2437052.py new file mode 100755 index 0000000..74a9d0c --- /dev/null +++ b/scripts/item/consume_2437052.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Tropical Sunset Damage Skin (30 Day) | (2437052) +if sm.addDamageSkin(2437052): + sm.chat("'Tropical Sunset Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437164.py b/scripts/item/consume_2437164.py new file mode 100755 index 0000000..0fa0721 --- /dev/null +++ b/scripts/item/consume_2437164.py @@ -0,0 +1,4 @@ +# Cadena Damage Skin +success = sm.addDamageSkin(2437164) +if success: + sm.chat("The Cadena Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437166.py b/scripts/item/consume_2437166.py new file mode 100755 index 0000000..a41c351 --- /dev/null +++ b/scripts/item/consume_2437166.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Note Damage Skin | (2437166) +if sm.addDamageSkin(2437166): + sm.chat("'Note Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437167.py b/scripts/item/consume_2437167.py new file mode 100755 index 0000000..01e6ae3 --- /dev/null +++ b/scripts/item/consume_2437167.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Note Damage Skin (30 Day) | (2437167) +if sm.addDamageSkin(2437167): + sm.chat("'Note Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437168.py b/scripts/item/consume_2437168.py new file mode 100755 index 0000000..6c24cb2 --- /dev/null +++ b/scripts/item/consume_2437168.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Crayon Damage Skin | (2437168) +if sm.addDamageSkin(2437168): + sm.chat("'Crayon Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437169.py b/scripts/item/consume_2437169.py new file mode 100755 index 0000000..43cc03a --- /dev/null +++ b/scripts/item/consume_2437169.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Crayon Damage Skin (30 Day) | (2437169) +if sm.addDamageSkin(2437169): + sm.chat("'Crayon Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437238.py b/scripts/item/consume_2437238.py new file mode 100755 index 0000000..fbaf040 --- /dev/null +++ b/scripts/item/consume_2437238.py @@ -0,0 +1,4 @@ +# Black Rose Damage Skin +success = sm.addDamageSkin(2437238) +if success: + sm.chat("The Black Rose Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437244.py b/scripts/item/consume_2437244.py new file mode 100755 index 0000000..88fe7d9 --- /dev/null +++ b/scripts/item/consume_2437244.py @@ -0,0 +1,4 @@ +# Freeze Tag Damage Skin +success = sm.addDamageSkin(2437244) +if success: + sm.chat("The Freeze Tag Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437264.py b/scripts/item/consume_2437264.py new file mode 100755 index 0000000..92a3eb3 --- /dev/null +++ b/scripts/item/consume_2437264.py @@ -0,0 +1,70 @@ +# id 2437264 (Medicine), field 402000002 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face6##b(The bitter taste of the medicine takes me back to a time when I was at my weakest.)#k") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/8", 128) +sm.sendSay("#face6##b(That was the day I met the boss... After waking up from one long nightmare to another, I had never felt so helpless.)#k") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/9", 128) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.bgmVolume(0, 2000) +sm.sendDelay(2000) +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.onLayer(900, "00", 0, -80, 12, "Effect/Direction19.img/effect/cadena_dir/0", 4, False, -1, False) +sm.sendDelay(1000) +sm.sendNext("#face8#Let me go, I have to get to the castle!") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/0", 128) +sm.sendSay("#face9#I don't have time for this!") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/1", 128) +sm.setInnerOverrideSpeakerTemplateID(3001250) +sm.sendSay("#face2#Calm yourself!") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/10", 128) +sm.sendSay("#face2#There's no one left there to save. You were the only survivor.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/11", 128) +sm.offLayer(300, "00", False) +sm.onLayer(900, "01", 0, -80, 12, "Effect/Direction19.img/effect/cadena_dir/1", 4, False, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendSay("#face10#W-what?") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/2", 128) +sm.setInnerOverrideSpeakerTemplateID(3001250) +sm.sendSay("#face2#They're all dead. It's been years since the castle was taken. The General found you and saw you were still breathing, but no one else was so lucky.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/12", 128) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendSay("#face10#...") +sm.setInnerOverrideSpeakerTemplateID(3001250) +sm.sendSay("#face2#...When the general brought you here, you were hanging onto life by a thread.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/13", 128) +sm.sendSay("#face2#In the end, you survived, but the medicine that saved your life also put you into a coma.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/14", 128) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendSay("#face10#Why... Why did you save me?") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/3", 128) +sm.setInnerOverrideSpeakerTemplateID(3001250) +sm.sendSay("#face2#I didn't do it out of the goodness of my heart if that's what you're thinking. It was a favor to the general. You should be grateful to him.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/15", 128) +sm.offLayer(300, "01", False) +sm.onLayer(900, "02", 0, -80, 12, "Effect/Direction19.img/effect/cadena_dir/2", 4, False, -1, False) +sm.sendDelay(500) +sm.sendNext("#face2#Anyway, I've kept my promise. You're alive and awake. I've no more obligation to protect you. You'd better learn to fend for yourself.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/16", 128) +sm.offLayer(300, "02", False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendNext("#face0##b(Not long after I awoke, I started working for the local branch of Shadowdealers. The naive and cowardly royal I was before was dead. I would need a new name...)#k") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/4", 128) +sm.sendSay("#face0##b(I reinvented myself as Cadena, and took up the chain as my weapon. In doing so, I vowed that I would never be helpless again.)#k") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/5", 128) +sm.sendSay("#face0##b(My only thought was of be56coming stronger, no matter the cost. I would climb the Shadowdealers' ranks until there was no one above me.)#k") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/6", 128) +sm.sendSay("#face0##b(I'm going to get stronger and stronger... And someday I'll claw my way to the top of this darkness. I will never forget my vow, or this throbbing pain in my heart.)#k") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q2/Male/7", 128) +sm.completeQuest(34603) +sm.consumeItem(2437264) +sm.lockInGameUI(False, True) \ No newline at end of file diff --git a/scripts/item/consume_2437268.py b/scripts/item/consume_2437268.py new file mode 100755 index 0000000..b7bc013 --- /dev/null +++ b/scripts/item/consume_2437268.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Maple Damage Skin | (2437268) +if sm.addDamageSkin(2437268): + sm.chat("'Maple Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437269.py b/scripts/item/consume_2437269.py new file mode 100755 index 0000000..d9ea520 --- /dev/null +++ b/scripts/item/consume_2437269.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Maple Damage Skin (30 Day) | (2437269) +if sm.addDamageSkin(2437269): + sm.chat("'Maple Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437270.py b/scripts/item/consume_2437270.py new file mode 100755 index 0000000..bcf28a8 --- /dev/null +++ b/scripts/item/consume_2437270.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Embroidery Damage Skin | (2437270) +if sm.addDamageSkin(2437270): + sm.chat("'Embroidery Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437271.py b/scripts/item/consume_2437271.py new file mode 100755 index 0000000..e992801 --- /dev/null +++ b/scripts/item/consume_2437271.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Embroidery Damage Skin (30 Day) | (2437271) +if sm.addDamageSkin(2437271): + sm.chat("'Embroidery Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437274.py b/scripts/item/consume_2437274.py new file mode 100755 index 0000000..f8e4e2e --- /dev/null +++ b/scripts/item/consume_2437274.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Dice Master Damage Skin | (2437274) +if sm.addDamageSkin(2437274): + sm.chat("'Dice Master Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437478.py b/scripts/item/consume_2437478.py new file mode 100755 index 0000000..a80d348 --- /dev/null +++ b/scripts/item/consume_2437478.py @@ -0,0 +1,9 @@ +# Papulatus Soul +souls = [2591620, 2591621, 2591622, 2591623, 2591624, 2591625, 2591626, 2591627, 2591619] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2437478, 10): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2437478, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2437482.py b/scripts/item/consume_2437482.py new file mode 100755 index 0000000..1490cef --- /dev/null +++ b/scripts/item/consume_2437482.py @@ -0,0 +1,4 @@ +# Illium Damage Skin +success = sm.addDamageSkin(2437482) +if success: + sm.chat("The Illium Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437484.py b/scripts/item/consume_2437484.py new file mode 100755 index 0000000..ddd9463 --- /dev/null +++ b/scripts/item/consume_2437484.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Custom Kitty Damage Skin | (2437484) +if sm.addDamageSkin(2437484): + sm.chat("'Custom Kitty Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437488.py b/scripts/item/consume_2437488.py new file mode 100755 index 0000000..26b6f6c --- /dev/null +++ b/scripts/item/consume_2437488.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Ribbon Damage Skin | (2437488) +if sm.addDamageSkin(2437488): + sm.chat("'Ribbon Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437489.py b/scripts/item/consume_2437489.py new file mode 100755 index 0000000..8fb9c02 --- /dev/null +++ b/scripts/item/consume_2437489.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Ribbon Damage Skin (30 Day) | (2437489) +if sm.addDamageSkin(2437489): + sm.chat("'Ribbon Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437490.py b/scripts/item/consume_2437490.py new file mode 100755 index 0000000..bc67c9d --- /dev/null +++ b/scripts/item/consume_2437490.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Acorn Damage Skin | (2437490) +if sm.addDamageSkin(2437490): + sm.chat("'Acorn Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437491.py b/scripts/item/consume_2437491.py new file mode 100755 index 0000000..ea91c33 --- /dev/null +++ b/scripts/item/consume_2437491.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Acorn Damage Skin (30 Day) | (2437491) +if sm.addDamageSkin(2437491): + sm.chat("'Acorn Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437495.py b/scripts/item/consume_2437495.py new file mode 100755 index 0000000..02d221e --- /dev/null +++ b/scripts/item/consume_2437495.py @@ -0,0 +1,4 @@ +# Stormcloud Damage Skin +success = sm.addDamageSkin(2437495) +if success: + sm.chat("The Stormcloud Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437496.py b/scripts/item/consume_2437496.py new file mode 100755 index 0000000..84c9268 --- /dev/null +++ b/scripts/item/consume_2437496.py @@ -0,0 +1,4 @@ +# Rainfall Damage Skin +success = sm.addDamageSkin(2437496) +if success: + sm.chat("The Rainfall Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437515.py b/scripts/item/consume_2437515.py new file mode 100755 index 0000000..64a8484 --- /dev/null +++ b/scripts/item/consume_2437515.py @@ -0,0 +1,4 @@ +# Palm Frond Damage Skin +success = sm.addDamageSkin(2437515) +if success: + sm.chat("The Palm Frond Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437521.py b/scripts/item/consume_2437521.py new file mode 100755 index 0000000..bbaa8ff --- /dev/null +++ b/scripts/item/consume_2437521.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Christmas Cane Damage Skin | (2437521) +if sm.addDamageSkin(2437521): + sm.chat("'Christmas Cane Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437522.py b/scripts/item/consume_2437522.py new file mode 100755 index 0000000..c42f69b --- /dev/null +++ b/scripts/item/consume_2437522.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Christmas Cane Damage Skin (30 Day) | (2437522) +if sm.addDamageSkin(2437522): + sm.chat("'Christmas Cane Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437523.py b/scripts/item/consume_2437523.py new file mode 100755 index 0000000..ecc168b --- /dev/null +++ b/scripts/item/consume_2437523.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Snow Crystal Damage Skin | (2437523) +if sm.addDamageSkin(2437523): + sm.chat("'Snow Crystal Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437524.py b/scripts/item/consume_2437524.py new file mode 100755 index 0000000..463f80c --- /dev/null +++ b/scripts/item/consume_2437524.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Snow Crystal Damage Skin (30 Day) | (2437524) +if sm.addDamageSkin(2437524): + sm.chat("'Snow Crystal Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437527.py b/scripts/item/consume_2437527.py new file mode 100755 index 0000000..ddc3aac --- /dev/null +++ b/scripts/item/consume_2437527.py @@ -0,0 +1,4 @@ +# Slime and Mushroom Damage Skin +success = sm.addDamageSkin(2437527) +if success: + sm.chat("The Slime and Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437604.py b/scripts/item/consume_2437604.py new file mode 100755 index 0000000..3749b44 --- /dev/null +++ b/scripts/item/consume_2437604.py @@ -0,0 +1,5 @@ +if sm.canHold(2000005): + sm.giveItem(2000005, 100) + sm.consumeItem(parentID) +else: + sm.sendSayOkay("Please make more room") \ No newline at end of file diff --git a/scripts/item/consume_2437691.py b/scripts/item/consume_2437691.py new file mode 100755 index 0000000..8458285 --- /dev/null +++ b/scripts/item/consume_2437691.py @@ -0,0 +1,4 @@ +# Lightning Damage Skin +success = sm.addDamageSkin(2437691) +if success: + sm.chat("The Lightning Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437697.py b/scripts/item/consume_2437697.py new file mode 100755 index 0000000..db92c7d --- /dev/null +++ b/scripts/item/consume_2437697.py @@ -0,0 +1,4 @@ +# Returned Legend Damage Skin +success = sm.addDamageSkin(2437697) +if success: + sm.chat("The Returned Legend Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437700.py b/scripts/item/consume_2437700.py new file mode 100755 index 0000000..053c5e0 --- /dev/null +++ b/scripts/item/consume_2437700.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kaleidoscope Damage Skin | (2437700) +if sm.addDamageSkin(2437700): + sm.chat("'Kaleidoscope Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437701.py b/scripts/item/consume_2437701.py new file mode 100755 index 0000000..9b4d9e0 --- /dev/null +++ b/scripts/item/consume_2437701.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kaleidoscope Damage Skin (30 Day) | (2437701) +if sm.addDamageSkin(2437701): + sm.chat("'Kaleidoscope Damage Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437703.py b/scripts/item/consume_2437703.py new file mode 100755 index 0000000..97db5f6 --- /dev/null +++ b/scripts/item/consume_2437703.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Winter Night Skin (30 Day) | (2437703) +if sm.addDamageSkin(2437703): + sm.chat("'Winter Night Skin (30 Day)' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437707.py b/scripts/item/consume_2437707.py new file mode 100755 index 0000000..753cf3c --- /dev/null +++ b/scripts/item/consume_2437707.py @@ -0,0 +1,4 @@ +# Twilight Damage Skin +success = sm.addDamageSkin(2437707) +if success: + sm.chat("The Twilight Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437708.py b/scripts/item/consume_2437708.py new file mode 100755 index 0000000..027c858 --- /dev/null +++ b/scripts/item/consume_2437708.py @@ -0,0 +1,4 @@ +# Unyielding Fury Damage Skin +success = sm.addDamageSkin(2437708) +if success: + sm.chat("The Unyielding Fury Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437709.py b/scripts/item/consume_2437709.py new file mode 100755 index 0000000..137a8b9 --- /dev/null +++ b/scripts/item/consume_2437709.py @@ -0,0 +1,4 @@ +# Chestnut Damage Skin +success = sm.addDamageSkin(2437709) +if success: + sm.chat("The Chestnut Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437710.py b/scripts/item/consume_2437710.py new file mode 100755 index 0000000..139f018 --- /dev/null +++ b/scripts/item/consume_2437710.py @@ -0,0 +1,4 @@ +# Fireworks Damage Skin +success = sm.addDamageSkin(2437710) +if success: + sm.chat("The Fireworks Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437712.py b/scripts/item/consume_2437712.py new file mode 100755 index 0000000..e7302f3 --- /dev/null +++ b/scripts/item/consume_2437712.py @@ -0,0 +1,4 @@ +# Teddy Damage Skin +success = sm.addDamageSkin(2437712) +if success: + sm.chat("The Teddy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437716.py b/scripts/item/consume_2437716.py new file mode 100755 index 0000000..622efeb --- /dev/null +++ b/scripts/item/consume_2437716.py @@ -0,0 +1,4 @@ +# MapleStory Damage Skin (KR) +success = sm.addDamageSkin(2437716) +if success: + sm.chat("The MapleStory Damage Skin (KR) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437727.py b/scripts/item/consume_2437727.py new file mode 100755 index 0000000..4d4c3a3 --- /dev/null +++ b/scripts/item/consume_2437727.py @@ -0,0 +1,4 @@ +# Murgoth Damage Skin +success = sm.addDamageSkin(2437727) +if success: + sm.chat("The Murgoth Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437735.py b/scripts/item/consume_2437735.py new file mode 100755 index 0000000..0f78d0b --- /dev/null +++ b/scripts/item/consume_2437735.py @@ -0,0 +1,4 @@ +# Rice Cake Damage Skin +success = sm.addDamageSkin(2437735) +if success: + sm.chat("The Rice Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437736.py b/scripts/item/consume_2437736.py new file mode 100755 index 0000000..90dce49 --- /dev/null +++ b/scripts/item/consume_2437736.py @@ -0,0 +1,4 @@ +# Popcorn Damage Skin +success = sm.addDamageSkin(2437736) +if success: + sm.chat("The Popcorn Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437750.py b/scripts/item/consume_2437750.py new file mode 100755 index 0000000..05f4ed3 --- /dev/null +++ b/scripts/item/consume_2437750.py @@ -0,0 +1,11 @@ +# id 2437750 (Arcane Symbol Selector Coupon), field 450001000 +sm.setSpeakerID(9010000) # Maple Administrator +res = sm.sendNext("Please select the #bArcane Symbol#k you'd like!\r\n\r\n#L5# #b#i1712001:# #t1712001:# x1#k#l") +if res == 0: + if sm.sendAskYesNo("Do you want to claim the #b#i1712001:# #t1712001:# 1#k?"): + if sm.canHold(1712001): + sm.consumeItem(parentID) + sm.giveItem(1712001) + sm.sendNext("\r\nI gave you the #b#t1712001:# 1#k!\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/4/0##b#e\r\n#i1712001:# #t1712001:# 1#n#k") + else: + sm.sendNext("Please make some space in your EQUIP tab.") \ No newline at end of file diff --git a/scripts/item/consume_2437760.py b/scripts/item/consume_2437760.py new file mode 100755 index 0000000..7d6db91 --- /dev/null +++ b/scripts/item/consume_2437760.py @@ -0,0 +1,11 @@ +# id 2437760 (Arcane Symbol x5 Selector Coupon), field 450001000 +sm.setSpeakerID(9010000) # Maple Administrator +res = sm.sendNext("Please select the #bArcane Symbol#k you'd like!\r\n\r\n#L5# #b#i1712001:# #t1712001:# x5#k#l") +if res == 0: + if sm.sendAskYesNo("Do you want to claim the #b#i1712001:# #t1712001:# 1#k?"): + if sm.canHold(1712001, 5): + sm.consumeItem(parentID) + sm.giveItem(1712001, 5) + sm.sendNext("\r\nI gave you the #b#t1712001:# 5#k!\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/4/0##b#e\r\n#i1712001:# #t1712001:# 5#n#k") + else: + sm.sendNext("Please make some space in your EQUIP tab.") \ No newline at end of file diff --git a/scripts/item/consume_2437767.py b/scripts/item/consume_2437767.py new file mode 100755 index 0000000..da20d12 --- /dev/null +++ b/scripts/item/consume_2437767.py @@ -0,0 +1,4 @@ +# Foamy Friends Damage Skin +success = sm.addDamageSkin(2437767) +if success: + sm.chat("The Foamy Friends Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437768.py b/scripts/item/consume_2437768.py new file mode 100755 index 0000000..1ce5d04 --- /dev/null +++ b/scripts/item/consume_2437768.py @@ -0,0 +1,4 @@ +# Constellation Damage Skin +success = sm.addDamageSkin(2437768) +if success: + sm.chat("The Constellation Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437769.py b/scripts/item/consume_2437769.py new file mode 100755 index 0000000..899b686 --- /dev/null +++ b/scripts/item/consume_2437769.py @@ -0,0 +1,4 @@ +# Solar Eclipse Damage Skin +success = sm.addDamageSkin(2437769) +if success: + sm.chat("The Solar Eclipse Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437851.py b/scripts/item/consume_2437851.py new file mode 100755 index 0000000..973c531 --- /dev/null +++ b/scripts/item/consume_2437851.py @@ -0,0 +1,4 @@ +# Hallowkitty Damage Skin +success = sm.addDamageSkin(2437851) +if success: + sm.chat("The Hallowkitty Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437854.py b/scripts/item/consume_2437854.py new file mode 100755 index 0000000..74d9fae --- /dev/null +++ b/scripts/item/consume_2437854.py @@ -0,0 +1,4 @@ +# Pew Pew Damage Skin (Ver. 2) +success = sm.addDamageSkin(2437854) +if success: + sm.chat("The Pew Pew Damage Skin (Ver. 2) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2437856.py b/scripts/item/consume_2437856.py new file mode 100755 index 0000000..8a3b3f5 --- /dev/null +++ b/scripts/item/consume_2437856.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Frigid Ice Damage Skin | (2437856) +if sm.addDamageSkin(2437856): + sm.chat("'Frigid Ice Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2437877.py b/scripts/item/consume_2437877.py new file mode 100755 index 0000000..d17e393 --- /dev/null +++ b/scripts/item/consume_2437877.py @@ -0,0 +1,4 @@ +# Master Crimson Damage Skin +success = sm.addDamageSkin(2437877) +if success: + sm.chat("The Master Crimson Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438032.py b/scripts/item/consume_2438032.py new file mode 100755 index 0000000..86534cc --- /dev/null +++ b/scripts/item/consume_2438032.py @@ -0,0 +1,4 @@ +# Cadena Damage Skin +success = sm.addDamageSkin(2438032) +if success: + sm.chat("The Cadena Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438085.py b/scripts/item/consume_2438085.py new file mode 100755 index 0000000..d4b7799 --- /dev/null +++ b/scripts/item/consume_2438085.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Hong Bao Damage Skin | (2438085) +if sm.addDamageSkin(2438085): + sm.chat("'Hong Bao Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438086.py b/scripts/item/consume_2438086.py new file mode 100755 index 0000000..6c39a02 --- /dev/null +++ b/scripts/item/consume_2438086.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Nyen Damage Skin | (2438086) +if sm.addDamageSkin(2438086): + sm.chat("'Nyen Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438087.py b/scripts/item/consume_2438087.py new file mode 100755 index 0000000..c726b19 --- /dev/null +++ b/scripts/item/consume_2438087.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Vengeful Nyen Damage Skin | (2438087) +if sm.addDamageSkin(2438087): + sm.chat("'Vengeful Nyen Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438088.py b/scripts/item/consume_2438088.py new file mode 100755 index 0000000..a6e2839 --- /dev/null +++ b/scripts/item/consume_2438088.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Zodiac Dog Damage Skin | (2438088) +if sm.addDamageSkin(2438088): + sm.chat("'Zodiac Dog Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438089.py b/scripts/item/consume_2438089.py new file mode 100755 index 0000000..5c7d3ef --- /dev/null +++ b/scripts/item/consume_2438089.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Red-Orange Damage Skin | (2438089) +if sm.addDamageSkin(2438089): + sm.chat("'Red-Orange Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438143.py b/scripts/item/consume_2438143.py new file mode 100755 index 0000000..7cf97a6 --- /dev/null +++ b/scripts/item/consume_2438143.py @@ -0,0 +1,4 @@ +# Transcendent of Time Damage Skin +success = sm.addDamageSkin(2438143) +if success: + sm.chat("The Transcendent of Time Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438144.py b/scripts/item/consume_2438144.py new file mode 100755 index 0000000..04b5154 --- /dev/null +++ b/scripts/item/consume_2438144.py @@ -0,0 +1,4 @@ +# Superstar Damage Skin +success = sm.addDamageSkin(2438144) +if success: + sm.chat("The Superstar Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438158.py b/scripts/item/consume_2438158.py new file mode 100755 index 0000000..c69d3b4 --- /dev/null +++ b/scripts/item/consume_2438158.py @@ -0,0 +1,4 @@ +# Gilded Moonlight Damage Skin +success = sm.addDamageSkin(2438158) +if success: + sm.chat("The Gilded Moonlight Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438159.py b/scripts/item/consume_2438159.py new file mode 100755 index 0000000..bbb4fe7 --- /dev/null +++ b/scripts/item/consume_2438159.py @@ -0,0 +1,4 @@ +# Basic Damage Skin +success = sm.addDamageSkin(2438159) +if success: + sm.chat("The Basic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438160.py b/scripts/item/consume_2438160.py new file mode 100755 index 0000000..9b0054f --- /dev/null +++ b/scripts/item/consume_2438160.py @@ -0,0 +1,4 @@ +# Digitized Damage Skin +success = sm.addDamageSkin(2438160) +if success: + sm.chat("The Digitized Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438161.py b/scripts/item/consume_2438161.py new file mode 100755 index 0000000..5f7ac68 --- /dev/null +++ b/scripts/item/consume_2438161.py @@ -0,0 +1,4 @@ +# Kritias Damage Skin +success = sm.addDamageSkin(2438161) +if success: + sm.chat("The Kritias Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438162.py b/scripts/item/consume_2438162.py new file mode 100755 index 0000000..5d97445 --- /dev/null +++ b/scripts/item/consume_2438162.py @@ -0,0 +1,4 @@ +# Party Quest Damage Skin +success = sm.addDamageSkin(2438162) +if success: + sm.chat("The Party Quest Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438163.py b/scripts/item/consume_2438163.py new file mode 100755 index 0000000..2614971 --- /dev/null +++ b/scripts/item/consume_2438163.py @@ -0,0 +1,4 @@ +# Hard-hitting Damage Skin +success = sm.addDamageSkin(2438163) +if success: + sm.chat("The Hard-hitting Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438164.py b/scripts/item/consume_2438164.py new file mode 100755 index 0000000..00041be --- /dev/null +++ b/scripts/item/consume_2438164.py @@ -0,0 +1,4 @@ +# Sweet Tea Cake Damage Skin +success = sm.addDamageSkin(2438164) +if success: + sm.chat("The Sweet Tea Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438165.py b/scripts/item/consume_2438165.py new file mode 100755 index 0000000..cf042fc --- /dev/null +++ b/scripts/item/consume_2438165.py @@ -0,0 +1,4 @@ +# Club Henesys Damage Skin +success = sm.addDamageSkin(2438165) +if success: + sm.chat("The Club Henesys Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438167.py b/scripts/item/consume_2438167.py new file mode 100755 index 0000000..99e0f09 --- /dev/null +++ b/scripts/item/consume_2438167.py @@ -0,0 +1,4 @@ +# Snowflake Damage Skin +success = sm.addDamageSkin(2438167) +if success: + sm.chat("The Snowflake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438168.py b/scripts/item/consume_2438168.py new file mode 100755 index 0000000..0890d37 --- /dev/null +++ b/scripts/item/consume_2438168.py @@ -0,0 +1,4 @@ +# Alicia's Damage Skin +success = sm.addDamageSkin(2438168) +if success: + sm.chat("The Alicia's Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438169.py b/scripts/item/consume_2438169.py new file mode 100755 index 0000000..890753d --- /dev/null +++ b/scripts/item/consume_2438169.py @@ -0,0 +1,4 @@ +# Dorothy's Damage Skin +success = sm.addDamageSkin(2438169) +if success: + sm.chat("The Dorothy's Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438170.py b/scripts/item/consume_2438170.py new file mode 100755 index 0000000..19d4bad --- /dev/null +++ b/scripts/item/consume_2438170.py @@ -0,0 +1,4 @@ +# Keyboard Warrior Damage Skin +success = sm.addDamageSkin(2438170) +if success: + sm.chat("The Keyboard Warrior Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438171.py b/scripts/item/consume_2438171.py new file mode 100755 index 0000000..f45ea7a --- /dev/null +++ b/scripts/item/consume_2438171.py @@ -0,0 +1,4 @@ +# Gentle Springtime Breeze Damage Skin +success = sm.addDamageSkin(2438171) +if success: + sm.chat("The Gentle Springtime Breeze Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438172.py b/scripts/item/consume_2438172.py new file mode 100755 index 0000000..609ed8f --- /dev/null +++ b/scripts/item/consume_2438172.py @@ -0,0 +1,4 @@ +# Singles Army Damage Skin +success = sm.addDamageSkin(2438172) +if success: + sm.chat("The Singles Army Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438173.py b/scripts/item/consume_2438173.py new file mode 100755 index 0000000..53b6b20 --- /dev/null +++ b/scripts/item/consume_2438173.py @@ -0,0 +1,4 @@ +# Reminiscence Damage Skin +success = sm.addDamageSkin(2438173) +if success: + sm.chat("The Reminiscence Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438174.py b/scripts/item/consume_2438174.py new file mode 100755 index 0000000..c6b54e6 --- /dev/null +++ b/scripts/item/consume_2438174.py @@ -0,0 +1,4 @@ +# Orange Mushroom Damage Skin +success = sm.addDamageSkin(2438174) +if success: + sm.chat("The Orange Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438175.py b/scripts/item/consume_2438175.py new file mode 100755 index 0000000..8eb0fff --- /dev/null +++ b/scripts/item/consume_2438175.py @@ -0,0 +1,4 @@ +# Crown Damage Skin +success = sm.addDamageSkin(2438175) +if success: + sm.chat("The Crown Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438176.py b/scripts/item/consume_2438176.py new file mode 100755 index 0000000..f25f0ce --- /dev/null +++ b/scripts/item/consume_2438176.py @@ -0,0 +1,4 @@ +# Monotone Damage Skin +success = sm.addDamageSkin(2438176) +if success: + sm.chat("The Monotone Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438177.py b/scripts/item/consume_2438177.py new file mode 100755 index 0000000..6b95578 --- /dev/null +++ b/scripts/item/consume_2438177.py @@ -0,0 +1,4 @@ +# Star Planet Damage Skin +success = sm.addDamageSkin(2438177) +if success: + sm.chat("The Star Planet Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438179.py b/scripts/item/consume_2438179.py new file mode 100755 index 0000000..e3894ab --- /dev/null +++ b/scripts/item/consume_2438179.py @@ -0,0 +1,4 @@ +# Hangul Day Damage Skin +success = sm.addDamageSkin(2438179) +if success: + sm.chat("The Hangul Day Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438181.py b/scripts/item/consume_2438181.py new file mode 100755 index 0000000..fed822b --- /dev/null +++ b/scripts/item/consume_2438181.py @@ -0,0 +1,4 @@ +# Striped Damage Skin +success = sm.addDamageSkin(2438181) +if success: + sm.chat("The Striped Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438182.py b/scripts/item/consume_2438182.py new file mode 100755 index 0000000..77b275e --- /dev/null +++ b/scripts/item/consume_2438182.py @@ -0,0 +1,4 @@ +# Couples Army Damage Skin +success = sm.addDamageSkin(2438182) +if success: + sm.chat("The Couples Army Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438184.py b/scripts/item/consume_2438184.py new file mode 100755 index 0000000..27e9d9c --- /dev/null +++ b/scripts/item/consume_2438184.py @@ -0,0 +1,4 @@ +# Yeti and Pepe Damage Skin +success = sm.addDamageSkin(2438184) +if success: + sm.chat("The Yeti and Pepe Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438185.py b/scripts/item/consume_2438185.py new file mode 100755 index 0000000..4013268 --- /dev/null +++ b/scripts/item/consume_2438185.py @@ -0,0 +1,4 @@ +# Slime and Mushroom Damage Skin +success = sm.addDamageSkin(2438185) +if success: + sm.chat("The Slime and Mushroom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438186.py b/scripts/item/consume_2438186.py new file mode 100755 index 0000000..f0dba08 --- /dev/null +++ b/scripts/item/consume_2438186.py @@ -0,0 +1,4 @@ +# Pink Bean Damage Skin +success = sm.addDamageSkin(2438186) +if success: + sm.chat("The Pink Bean Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438188.py b/scripts/item/consume_2438188.py new file mode 100755 index 0000000..0901345 --- /dev/null +++ b/scripts/item/consume_2438188.py @@ -0,0 +1,4 @@ +# Rainbow Boom Damage Skin +success = sm.addDamageSkin(2438188) +if success: + sm.chat("The Rainbow Boom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438190.py b/scripts/item/consume_2438190.py new file mode 100755 index 0000000..4412e8a --- /dev/null +++ b/scripts/item/consume_2438190.py @@ -0,0 +1,4 @@ +# Marshmallow Damage Skin +success = sm.addDamageSkin(2438190) +if success: + sm.chat("The Marshmallow Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438191.py b/scripts/item/consume_2438191.py new file mode 100755 index 0000000..6391ce5 --- /dev/null +++ b/scripts/item/consume_2438191.py @@ -0,0 +1,4 @@ +# Mu Lung Dojo Damage Skin +success = sm.addDamageSkin(2438191) +if success: + sm.chat("The Mu Lung Dojo Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438192.py b/scripts/item/consume_2438192.py new file mode 100755 index 0000000..eb20827 --- /dev/null +++ b/scripts/item/consume_2438192.py @@ -0,0 +1,4 @@ +# Teddy Ursus Damage Skin +success = sm.addDamageSkin(2438192) +if success: + sm.chat("The Teddy Ursus Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438193.py b/scripts/item/consume_2438193.py new file mode 100755 index 0000000..f2339fb --- /dev/null +++ b/scripts/item/consume_2438193.py @@ -0,0 +1,4 @@ +# Mighty Ursus Damage Skin +success = sm.addDamageSkin(2438193) +if success: + sm.chat("The Mighty Ursus Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438194.py b/scripts/item/consume_2438194.py new file mode 100755 index 0000000..07e2154 --- /dev/null +++ b/scripts/item/consume_2438194.py @@ -0,0 +1,4 @@ +# Scorching Heat Damage Skin +success = sm.addDamageSkin(2438194) +if success: + sm.chat("The Scorching Heat Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438195.py b/scripts/item/consume_2438195.py new file mode 100755 index 0000000..da425c5 --- /dev/null +++ b/scripts/item/consume_2438195.py @@ -0,0 +1,4 @@ +# USA Damage Skin +success = sm.addDamageSkin(2438195) +if success: + sm.chat("The USA Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438196.py b/scripts/item/consume_2438196.py new file mode 100755 index 0000000..b9206b4 --- /dev/null +++ b/scripts/item/consume_2438196.py @@ -0,0 +1,4 @@ +# Churro Damage Skin +success = sm.addDamageSkin(2438196) +if success: + sm.chat("The Churro Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438197.py b/scripts/item/consume_2438197.py new file mode 100755 index 0000000..0755a62 --- /dev/null +++ b/scripts/item/consume_2438197.py @@ -0,0 +1,4 @@ +# Singapore Night Damage Skin +success = sm.addDamageSkin(2438197) +if success: + sm.chat("The Singapore Night Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438198.py b/scripts/item/consume_2438198.py new file mode 100755 index 0000000..1977bae --- /dev/null +++ b/scripts/item/consume_2438198.py @@ -0,0 +1,4 @@ +# Scribbler Damage Skin +success = sm.addDamageSkin(2438198) +if success: + sm.chat("The Scribbler Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438199.py b/scripts/item/consume_2438199.py new file mode 100755 index 0000000..f725e17 --- /dev/null +++ b/scripts/item/consume_2438199.py @@ -0,0 +1,4 @@ +# Full Moon Damage Skin +success = sm.addDamageSkin(2438199) +if success: + sm.chat("The Full Moon Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438200.py b/scripts/item/consume_2438200.py new file mode 100755 index 0000000..51e0598 --- /dev/null +++ b/scripts/item/consume_2438200.py @@ -0,0 +1,4 @@ +# Sunny Damage Skin +success = sm.addDamageSkin(2438200) +if success: + sm.chat("The Sunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438202.py b/scripts/item/consume_2438202.py new file mode 100755 index 0000000..100db4d --- /dev/null +++ b/scripts/item/consume_2438202.py @@ -0,0 +1,4 @@ +# Murgoth Damage Skin +success = sm.addDamageSkin(2438202) +if success: + sm.chat("The Murgoth Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438205.py b/scripts/item/consume_2438205.py new file mode 100755 index 0000000..62c453c --- /dev/null +++ b/scripts/item/consume_2438205.py @@ -0,0 +1,4 @@ +# MVP Special Damage Skin +success = sm.addDamageSkin(2438205) +if success: + sm.chat("The MVP Special Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438207.py b/scripts/item/consume_2438207.py new file mode 100755 index 0000000..981d298 --- /dev/null +++ b/scripts/item/consume_2438207.py @@ -0,0 +1,4 @@ +# Monster Park Damage Skin +success = sm.addDamageSkin(2438207) +if success: + sm.chat("The Monster Park Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438211.py b/scripts/item/consume_2438211.py new file mode 100755 index 0000000..f2bce04 --- /dev/null +++ b/scripts/item/consume_2438211.py @@ -0,0 +1,4 @@ +# Heroes Phantom Damage Skin +success = sm.addDamageSkin(2438211) +if success: + sm.chat("The Heroes Phantom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438212.py b/scripts/item/consume_2438212.py new file mode 100755 index 0000000..8e81f03 --- /dev/null +++ b/scripts/item/consume_2438212.py @@ -0,0 +1,4 @@ +# Heroes Mercedes Damage Skin +success = sm.addDamageSkin(2438212) +if success: + sm.chat("The Heroes Mercedes Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438215.py b/scripts/item/consume_2438215.py new file mode 100755 index 0000000..dd7d948 --- /dev/null +++ b/scripts/item/consume_2438215.py @@ -0,0 +1,4 @@ +# Neon Sign Damage Skin +success = sm.addDamageSkin(2438215) +if success: + sm.chat("The Neon Sign Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438216.py b/scripts/item/consume_2438216.py new file mode 100755 index 0000000..295ef67 --- /dev/null +++ b/scripts/item/consume_2438216.py @@ -0,0 +1,4 @@ +# Freeze Tag Damage Skin +success = sm.addDamageSkin(2438216) +if success: + sm.chat("The Freeze Tag Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438217.py b/scripts/item/consume_2438217.py new file mode 100755 index 0000000..5d9529a --- /dev/null +++ b/scripts/item/consume_2438217.py @@ -0,0 +1,4 @@ +# Candy Damage Skin +success = sm.addDamageSkin(2438217) +if success: + sm.chat("The Candy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438219.py b/scripts/item/consume_2438219.py new file mode 100755 index 0000000..3e4c6d7 --- /dev/null +++ b/scripts/item/consume_2438219.py @@ -0,0 +1,4 @@ +# Calligraphy Damage Skin +success = sm.addDamageSkin(2438219) +if success: + sm.chat("The Calligraphy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438220.py b/scripts/item/consume_2438220.py new file mode 100755 index 0000000..cd776cf --- /dev/null +++ b/scripts/item/consume_2438220.py @@ -0,0 +1,4 @@ +# Explosion Damage Skin +success = sm.addDamageSkin(2438220) +if success: + sm.chat("The Explosion Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438221.py b/scripts/item/consume_2438221.py new file mode 100755 index 0000000..7338b3f --- /dev/null +++ b/scripts/item/consume_2438221.py @@ -0,0 +1,4 @@ +# Snow-wing Damage Skin +success = sm.addDamageSkin(2438221) +if success: + sm.chat("The Snow-wing Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438222.py b/scripts/item/consume_2438222.py new file mode 100755 index 0000000..6443814 --- /dev/null +++ b/scripts/item/consume_2438222.py @@ -0,0 +1,4 @@ +# Miho Damage Skin +success = sm.addDamageSkin(2438222) +if success: + sm.chat("The Miho Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438224.py b/scripts/item/consume_2438224.py new file mode 100755 index 0000000..dbf23a2 --- /dev/null +++ b/scripts/item/consume_2438224.py @@ -0,0 +1,4 @@ +# Musical Score Damage Skin +success = sm.addDamageSkin(2438224) +if success: + sm.chat("The Musical Score Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438225.py b/scripts/item/consume_2438225.py new file mode 100755 index 0000000..6a05025 --- /dev/null +++ b/scripts/item/consume_2438225.py @@ -0,0 +1,4 @@ +# Moon Bunny Damage Skin +success = sm.addDamageSkin(2438225) +if success: + sm.chat("The Moon Bunny Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438226.py b/scripts/item/consume_2438226.py new file mode 100755 index 0000000..9252506 --- /dev/null +++ b/scripts/item/consume_2438226.py @@ -0,0 +1,4 @@ +# Forest of Tenacity Damage Skin +success = sm.addDamageSkin(2438226) +if success: + sm.chat("The Forest of Tenacity Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438227.py b/scripts/item/consume_2438227.py new file mode 100755 index 0000000..bf0ec49 --- /dev/null +++ b/scripts/item/consume_2438227.py @@ -0,0 +1,4 @@ +# Festival Tortoise Damage Skin +success = sm.addDamageSkin(2438227) +if success: + sm.chat("The Festival Tortoise Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438228.py b/scripts/item/consume_2438228.py new file mode 100755 index 0000000..068eb77 --- /dev/null +++ b/scripts/item/consume_2438228.py @@ -0,0 +1,4 @@ +# April Fools' Damage Skin +success = sm.addDamageSkin(2438228) +if success: + sm.chat("The April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438229.py b/scripts/item/consume_2438229.py new file mode 100755 index 0000000..4957851 --- /dev/null +++ b/scripts/item/consume_2438229.py @@ -0,0 +1,4 @@ +# Blackheart Day Damage Skin +success = sm.addDamageSkin(2438229) +if success: + sm.chat("The Blackheart Day Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438231.py b/scripts/item/consume_2438231.py new file mode 100755 index 0000000..2436953 --- /dev/null +++ b/scripts/item/consume_2438231.py @@ -0,0 +1,4 @@ +# Retro April Fools' Damage Skin +success = sm.addDamageSkin(2438231) +if success: + sm.chat("The Retro April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438232.py b/scripts/item/consume_2438232.py new file mode 100755 index 0000000..e446b17 --- /dev/null +++ b/scripts/item/consume_2438232.py @@ -0,0 +1,4 @@ +# Monochrome April Fools' Damage Skin +success = sm.addDamageSkin(2438232) +if success: + sm.chat("The Monochrome April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438233.py b/scripts/item/consume_2438233.py new file mode 100755 index 0000000..7486f6e --- /dev/null +++ b/scripts/item/consume_2438233.py @@ -0,0 +1,4 @@ +# Sparkling April Fools' Damage Skin +success = sm.addDamageSkin(2438233) +if success: + sm.chat("The Sparkling April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438234.py b/scripts/item/consume_2438234.py new file mode 100755 index 0000000..4c9a8cd --- /dev/null +++ b/scripts/item/consume_2438234.py @@ -0,0 +1,4 @@ +# Haste Damage Skin +success = sm.addDamageSkin(2438234) +if success: + sm.chat("The Haste Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438235.py b/scripts/item/consume_2438235.py new file mode 100755 index 0000000..9c34050 --- /dev/null +++ b/scripts/item/consume_2438235.py @@ -0,0 +1,4 @@ +# 12th Anniversary Maple Leaf Damage Skin +success = sm.addDamageSkin(2438235) +if success: + sm.chat("The 12th Anniversary Maple Leaf Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438236.py b/scripts/item/consume_2438236.py new file mode 100755 index 0000000..87009a2 --- /dev/null +++ b/scripts/item/consume_2438236.py @@ -0,0 +1,4 @@ +# Cyber Damage Skin +success = sm.addDamageSkin(2438236) +if success: + sm.chat("The Cyber Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438237.py b/scripts/item/consume_2438237.py new file mode 100755 index 0000000..c82117f --- /dev/null +++ b/scripts/item/consume_2438237.py @@ -0,0 +1,4 @@ +# Cosmic Damage Skin +success = sm.addDamageSkin(2438237) +if success: + sm.chat("The Cosmic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438238.py b/scripts/item/consume_2438238.py new file mode 100755 index 0000000..f341b62 --- /dev/null +++ b/scripts/item/consume_2438238.py @@ -0,0 +1,4 @@ +# Choco Donut Damage Skin +success = sm.addDamageSkin(2438238) +if success: + sm.chat("The Choco Donut Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438240.py b/scripts/item/consume_2438240.py new file mode 100755 index 0000000..b958944 --- /dev/null +++ b/scripts/item/consume_2438240.py @@ -0,0 +1,4 @@ +# Monster Balloon Damage Skin +success = sm.addDamageSkin(2438240) +if success: + sm.chat("The Monster Balloon Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438241.py b/scripts/item/consume_2438241.py new file mode 100755 index 0000000..93ddcf8 --- /dev/null +++ b/scripts/item/consume_2438241.py @@ -0,0 +1,4 @@ +# Bubble April Fools' Damage Skin +success = sm.addDamageSkin(2438241) +if success: + sm.chat("The Bubble April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438242.py b/scripts/item/consume_2438242.py new file mode 100755 index 0000000..293e2cf --- /dev/null +++ b/scripts/item/consume_2438242.py @@ -0,0 +1,4 @@ +# Sparkling April Fools' Damage Skin +success = sm.addDamageSkin(2438242) +if success: + sm.chat("The Sparkling April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438243.py b/scripts/item/consume_2438243.py new file mode 100755 index 0000000..a2abfeb --- /dev/null +++ b/scripts/item/consume_2438243.py @@ -0,0 +1,4 @@ +# Henesys Damage Skin +success = sm.addDamageSkin(2438243) +if success: + sm.chat("The Henesys Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438244.py b/scripts/item/consume_2438244.py new file mode 100755 index 0000000..dba2c95 --- /dev/null +++ b/scripts/item/consume_2438244.py @@ -0,0 +1,4 @@ +# Leafre Damage Skin +success = sm.addDamageSkin(2438244) +if success: + sm.chat("The Leafre Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438245.py b/scripts/item/consume_2438245.py new file mode 100755 index 0000000..a992cbd --- /dev/null +++ b/scripts/item/consume_2438245.py @@ -0,0 +1,4 @@ +# Algebraic Damage Skin +success = sm.addDamageSkin(2438245) +if success: + sm.chat("The Algebraic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438246.py b/scripts/item/consume_2438246.py new file mode 100755 index 0000000..4002b1c --- /dev/null +++ b/scripts/item/consume_2438246.py @@ -0,0 +1,4 @@ +# Blue Flame Damage Skin +success = sm.addDamageSkin(2438246) +if success: + sm.chat("The Blue Flame Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438247.py b/scripts/item/consume_2438247.py new file mode 100755 index 0000000..c107536 --- /dev/null +++ b/scripts/item/consume_2438247.py @@ -0,0 +1,4 @@ +# Purple Damage Skin +success = sm.addDamageSkin(2438247) +if success: + sm.chat("The Purple Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438248.py b/scripts/item/consume_2438248.py new file mode 100755 index 0000000..94a9d03 --- /dev/null +++ b/scripts/item/consume_2438248.py @@ -0,0 +1,4 @@ +# Nanopixel Damage Skin +success = sm.addDamageSkin(2438248) +if success: + sm.chat("The Nanopixel Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438249.py b/scripts/item/consume_2438249.py new file mode 100755 index 0000000..0e0dcc4 --- /dev/null +++ b/scripts/item/consume_2438249.py @@ -0,0 +1,4 @@ +# Royal Damage Skin +success = sm.addDamageSkin(2438249) +if success: + sm.chat("The Royal Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438250.py b/scripts/item/consume_2438250.py new file mode 100755 index 0000000..7193d82 --- /dev/null +++ b/scripts/item/consume_2438250.py @@ -0,0 +1,4 @@ +# Chrome Damage Skin (Ver. 1) +success = sm.addDamageSkin(2438250) +if success: + sm.chat("The Chrome Damage Skin (Ver. 1) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438251.py b/scripts/item/consume_2438251.py new file mode 100755 index 0000000..ac21c3f --- /dev/null +++ b/scripts/item/consume_2438251.py @@ -0,0 +1,4 @@ +# Neon Lights Damage Skin +success = sm.addDamageSkin(2438251) +if success: + sm.chat("The Neon Lights Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438252.py b/scripts/item/consume_2438252.py new file mode 100755 index 0000000..71ecca4 --- /dev/null +++ b/scripts/item/consume_2438252.py @@ -0,0 +1,4 @@ +# Spades Damage Skin +success = sm.addDamageSkin(2438252) +if success: + sm.chat("The Spades Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438253.py b/scripts/item/consume_2438253.py new file mode 100755 index 0000000..d1f3afe --- /dev/null +++ b/scripts/item/consume_2438253.py @@ -0,0 +1,4 @@ +# Gilded Damage Skin +success = sm.addDamageSkin(2438253) +if success: + sm.chat("The Gilded Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438254.py b/scripts/item/consume_2438254.py new file mode 100755 index 0000000..eac3920 --- /dev/null +++ b/scripts/item/consume_2438254.py @@ -0,0 +1,4 @@ +# Batty Damage Skin +success = sm.addDamageSkin(2438254) +if success: + sm.chat("The Batty Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438255.py b/scripts/item/consume_2438255.py new file mode 100755 index 0000000..86ee200 --- /dev/null +++ b/scripts/item/consume_2438255.py @@ -0,0 +1,4 @@ +# Monochrome April Fools' Damage Skin +success = sm.addDamageSkin(2438255) +if success: + sm.chat("The Monochrome April Fools' Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438256.py b/scripts/item/consume_2438256.py new file mode 100755 index 0000000..24ad963 --- /dev/null +++ b/scripts/item/consume_2438256.py @@ -0,0 +1,4 @@ +# Vanishing Journey Damage Skin +success = sm.addDamageSkin(2438256) +if success: + sm.chat("The Vanishing Journey Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438257.py b/scripts/item/consume_2438257.py new file mode 100755 index 0000000..257935f --- /dev/null +++ b/scripts/item/consume_2438257.py @@ -0,0 +1,4 @@ +# Chu Chu Damage Skin +success = sm.addDamageSkin(2438257) +if success: + sm.chat("The Chu Chu Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438258.py b/scripts/item/consume_2438258.py new file mode 100755 index 0000000..3baa1f0 --- /dev/null +++ b/scripts/item/consume_2438258.py @@ -0,0 +1,4 @@ +# Lachelein Damage Skin +success = sm.addDamageSkin(2438258) +if success: + sm.chat("The Lachelein Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438259.py b/scripts/item/consume_2438259.py new file mode 100755 index 0000000..974ad10 --- /dev/null +++ b/scripts/item/consume_2438259.py @@ -0,0 +1,4 @@ +# Poison Flame Damage Skin +success = sm.addDamageSkin(2438259) +if success: + sm.chat("The Poison Flame Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438260.py b/scripts/item/consume_2438260.py new file mode 100755 index 0000000..a53c4cf --- /dev/null +++ b/scripts/item/consume_2438260.py @@ -0,0 +1,4 @@ +# Blue Shock Damage Skin +success = sm.addDamageSkin(2438260) +if success: + sm.chat("The Blue Shock Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438261.py b/scripts/item/consume_2438261.py new file mode 100755 index 0000000..b64450a --- /dev/null +++ b/scripts/item/consume_2438261.py @@ -0,0 +1,4 @@ +# Music Power Damage Skin +success = sm.addDamageSkin(2438261) +if success: + sm.chat("The Music Power Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438263.py b/scripts/item/consume_2438263.py new file mode 100755 index 0000000..312b238 --- /dev/null +++ b/scripts/item/consume_2438263.py @@ -0,0 +1,4 @@ +# Starlight Aurora Damage Skin +success = sm.addDamageSkin(2438263) +if success: + sm.chat("The Starlight Aurora Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438264.py b/scripts/item/consume_2438264.py new file mode 100755 index 0000000..f316c9c --- /dev/null +++ b/scripts/item/consume_2438264.py @@ -0,0 +1,4 @@ +# Chestnut Damage Skin +success = sm.addDamageSkin(2438264) +if success: + sm.chat("The Chestnut Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438265.py b/scripts/item/consume_2438265.py new file mode 100755 index 0000000..c4071c5 --- /dev/null +++ b/scripts/item/consume_2438265.py @@ -0,0 +1,4 @@ +# Twilight Damage Skin +success = sm.addDamageSkin(2438265) +if success: + sm.chat("The Twilight Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438266.py b/scripts/item/consume_2438266.py new file mode 100755 index 0000000..56d411a --- /dev/null +++ b/scripts/item/consume_2438266.py @@ -0,0 +1,4 @@ +# Unyielding Fury Damage Skin +success = sm.addDamageSkin(2438266) +if success: + sm.chat("The Unyielding Fury Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438267.py b/scripts/item/consume_2438267.py new file mode 100755 index 0000000..293e0e0 --- /dev/null +++ b/scripts/item/consume_2438267.py @@ -0,0 +1,4 @@ +# Gilded Moonlight Damage Skin +success = sm.addDamageSkin(2438267) +if success: + sm.chat("The Gilded Moonlight Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438268.py b/scripts/item/consume_2438268.py new file mode 100755 index 0000000..ab70e5c --- /dev/null +++ b/scripts/item/consume_2438268.py @@ -0,0 +1,4 @@ +# Hangul Day Traditional Damage Skin +success = sm.addDamageSkin(2438268) +if success: + sm.chat("The Hangul Day Traditional Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438269.py b/scripts/item/consume_2438269.py new file mode 100755 index 0000000..94af395 --- /dev/null +++ b/scripts/item/consume_2438269.py @@ -0,0 +1,4 @@ +# Gingko Leaf Damage Skin +success = sm.addDamageSkin(2438269) +if success: + sm.chat("The Gingko Leaf Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438270.py b/scripts/item/consume_2438270.py new file mode 100755 index 0000000..ddea3ea --- /dev/null +++ b/scripts/item/consume_2438270.py @@ -0,0 +1,4 @@ +# Detective Damage Skin +success = sm.addDamageSkin(2438270) +if success: + sm.chat("The Detective Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438272.py b/scripts/item/consume_2438272.py new file mode 100755 index 0000000..1ce2a1d --- /dev/null +++ b/scripts/item/consume_2438272.py @@ -0,0 +1,4 @@ +# Pew Pew Damage Skin +success = sm.addDamageSkin(2438272) +if success: + sm.chat("The Pew Pew Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438274.py b/scripts/item/consume_2438274.py new file mode 100755 index 0000000..46ee09a --- /dev/null +++ b/scripts/item/consume_2438274.py @@ -0,0 +1,4 @@ +# Relic Damage Skin +success = sm.addDamageSkin(2438274) +if success: + sm.chat("The Relic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438275.py b/scripts/item/consume_2438275.py new file mode 100755 index 0000000..8791d9e --- /dev/null +++ b/scripts/item/consume_2438275.py @@ -0,0 +1,4 @@ +# Hieroglyph Damage Skin +success = sm.addDamageSkin(2438275) +if success: + sm.chat("The Hieroglyph Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438276.py b/scripts/item/consume_2438276.py new file mode 100755 index 0000000..33279ee --- /dev/null +++ b/scripts/item/consume_2438276.py @@ -0,0 +1,4 @@ +# Breakthrough Damage Skin +success = sm.addDamageSkin(2438276) +if success: + sm.chat("The Breakthrough Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438282.py b/scripts/item/consume_2438282.py new file mode 100755 index 0000000..9b23982 --- /dev/null +++ b/scripts/item/consume_2438282.py @@ -0,0 +1,4 @@ +# Returned Legend Damage Skin +success = sm.addDamageSkin(2438282) +if success: + sm.chat("The Returned Legend Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438283.py b/scripts/item/consume_2438283.py new file mode 100755 index 0000000..b1cab78 --- /dev/null +++ b/scripts/item/consume_2438283.py @@ -0,0 +1,4 @@ +# Mecha Damage Skin +success = sm.addDamageSkin(2438283) +if success: + sm.chat("The Mecha Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438284.py b/scripts/item/consume_2438284.py new file mode 100755 index 0000000..8d96d40 --- /dev/null +++ b/scripts/item/consume_2438284.py @@ -0,0 +1,4 @@ +# Foamy Friends Damage Skin +success = sm.addDamageSkin(2438284) +if success: + sm.chat("The Foamy Friends Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438285.py b/scripts/item/consume_2438285.py new file mode 100755 index 0000000..cd3dea5 --- /dev/null +++ b/scripts/item/consume_2438285.py @@ -0,0 +1,4 @@ +# Magpie's Feather Damage Skin +success = sm.addDamageSkin(2438285) +if success: + sm.chat("The Magpie's Feather Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438286.py b/scripts/item/consume_2438286.py new file mode 100755 index 0000000..7b56a22 --- /dev/null +++ b/scripts/item/consume_2438286.py @@ -0,0 +1,4 @@ +# Persimmon Tree Damage Skin +success = sm.addDamageSkin(2438286) +if success: + sm.chat("The Persimmon Tree Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438287.py b/scripts/item/consume_2438287.py new file mode 100755 index 0000000..664c618 --- /dev/null +++ b/scripts/item/consume_2438287.py @@ -0,0 +1,4 @@ +# Arcana Damage Skin +success = sm.addDamageSkin(2438287) +if success: + sm.chat("The Arcana Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438288.py b/scripts/item/consume_2438288.py new file mode 100755 index 0000000..3908ec6 --- /dev/null +++ b/scripts/item/consume_2438288.py @@ -0,0 +1,4 @@ +# Imperial Damage Skin +success = sm.addDamageSkin(2438288) +if success: + sm.chat("The Imperial Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438289.py b/scripts/item/consume_2438289.py new file mode 100755 index 0000000..e51bbe3 --- /dev/null +++ b/scripts/item/consume_2438289.py @@ -0,0 +1,4 @@ +# Fafnir Damage Skin +success = sm.addDamageSkin(2438289) +if success: + sm.chat("The Fafnir Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438290.py b/scripts/item/consume_2438290.py new file mode 100755 index 0000000..e104dff --- /dev/null +++ b/scripts/item/consume_2438290.py @@ -0,0 +1,4 @@ +# AbsoLab Damage Skin +success = sm.addDamageSkin(2438290) +if success: + sm.chat("The AbsoLab Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438293.py b/scripts/item/consume_2438293.py new file mode 100755 index 0000000..c68ced9 --- /dev/null +++ b/scripts/item/consume_2438293.py @@ -0,0 +1,4 @@ +# Honeybee Damage Skin +success = sm.addDamageSkin(2438293) +if success: + sm.chat("The Honeybee Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438294.py b/scripts/item/consume_2438294.py new file mode 100755 index 0000000..496dde2 --- /dev/null +++ b/scripts/item/consume_2438294.py @@ -0,0 +1,4 @@ +# Evolution Damage Skin +success = sm.addDamageSkin(2438294) +if success: + sm.chat("The Evolution Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438295.py b/scripts/item/consume_2438295.py new file mode 100755 index 0000000..bdfb44b --- /dev/null +++ b/scripts/item/consume_2438295.py @@ -0,0 +1,4 @@ +# Constellation Damage Skin +success = sm.addDamageSkin(2438295) +if success: + sm.chat("The Constellation Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438296.py b/scripts/item/consume_2438296.py new file mode 100755 index 0000000..36885a5 --- /dev/null +++ b/scripts/item/consume_2438296.py @@ -0,0 +1,4 @@ +# Extraterrestrial Damage Skin +success = sm.addDamageSkin(2438296) +if success: + sm.chat("The Extraterrestrial Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438297.py b/scripts/item/consume_2438297.py new file mode 100755 index 0000000..31324bd --- /dev/null +++ b/scripts/item/consume_2438297.py @@ -0,0 +1,4 @@ +# Frozen Treat Damage Skin +success = sm.addDamageSkin(2438297) +if success: + sm.chat("The Frozen Treat Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438298.py b/scripts/item/consume_2438298.py new file mode 100755 index 0000000..053a2fe --- /dev/null +++ b/scripts/item/consume_2438298.py @@ -0,0 +1,4 @@ +# Solar Eclipse Damage Skin +success = sm.addDamageSkin(2438298) +if success: + sm.chat("The Solar Eclipse Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438299.py b/scripts/item/consume_2438299.py new file mode 100755 index 0000000..5406e9a --- /dev/null +++ b/scripts/item/consume_2438299.py @@ -0,0 +1,4 @@ +# Prism Damage Skin +success = sm.addDamageSkin(2438299) +if success: + sm.chat("The Prism Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438300.py b/scripts/item/consume_2438300.py new file mode 100755 index 0000000..e7ead34 --- /dev/null +++ b/scripts/item/consume_2438300.py @@ -0,0 +1,4 @@ +# Starry Sky Damage Skin +success = sm.addDamageSkin(2438300) +if success: + sm.chat("The Starry Sky Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438301.py b/scripts/item/consume_2438301.py new file mode 100755 index 0000000..b34459b --- /dev/null +++ b/scripts/item/consume_2438301.py @@ -0,0 +1,4 @@ +# Party Quest Damage Skin +success = sm.addDamageSkin(2438301) +if success: + sm.chat("The Party Quest Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438302.py b/scripts/item/consume_2438302.py new file mode 100755 index 0000000..6152767 --- /dev/null +++ b/scripts/item/consume_2438302.py @@ -0,0 +1,4 @@ +# Cadena Damage Skin +success = sm.addDamageSkin(2438302) +if success: + sm.chat("The Cadena Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438303.py b/scripts/item/consume_2438303.py new file mode 100755 index 0000000..3e4e347 --- /dev/null +++ b/scripts/item/consume_2438303.py @@ -0,0 +1,4 @@ +# Black Rose Damage Skin +success = sm.addDamageSkin(2438303) +if success: + sm.chat("The Black Rose Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438306.py b/scripts/item/consume_2438306.py new file mode 100755 index 0000000..5d3e2b5 --- /dev/null +++ b/scripts/item/consume_2438306.py @@ -0,0 +1,4 @@ +# Stormcloud Damage Skin +success = sm.addDamageSkin(2438306) +if success: + sm.chat("The Stormcloud Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438307.py b/scripts/item/consume_2438307.py new file mode 100755 index 0000000..e2af3df --- /dev/null +++ b/scripts/item/consume_2438307.py @@ -0,0 +1,4 @@ +# Drizzly Damage Skin +success = sm.addDamageSkin(2438307) +if success: + sm.chat("The Drizzly Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438308.py b/scripts/item/consume_2438308.py new file mode 100755 index 0000000..4418c03 --- /dev/null +++ b/scripts/item/consume_2438308.py @@ -0,0 +1,4 @@ +# Luxe Damage Skin +success = sm.addDamageSkin(2438308) +if success: + sm.chat("The Luxe Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438309.py b/scripts/item/consume_2438309.py new file mode 100755 index 0000000..d56b2c5 --- /dev/null +++ b/scripts/item/consume_2438309.py @@ -0,0 +1,4 @@ +# Palm Frond Damage Skin +success = sm.addDamageSkin(2438309) +if success: + sm.chat("The Palm Frond Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438310.py b/scripts/item/consume_2438310.py new file mode 100755 index 0000000..790a7f5 --- /dev/null +++ b/scripts/item/consume_2438310.py @@ -0,0 +1,4 @@ +# Illium Damage Skin +success = sm.addDamageSkin(2438310) +if success: + sm.chat("The Illium Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438311.py b/scripts/item/consume_2438311.py new file mode 100755 index 0000000..68340c9 --- /dev/null +++ b/scripts/item/consume_2438311.py @@ -0,0 +1,4 @@ +# Lightning Damage Skin +success = sm.addDamageSkin(2438311) +if success: + sm.chat("The Lightning Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438312.py b/scripts/item/consume_2438312.py new file mode 100755 index 0000000..dc6858e --- /dev/null +++ b/scripts/item/consume_2438312.py @@ -0,0 +1,4 @@ +# MapleStory Damage Skin +success = sm.addDamageSkin(2438312) +if success: + sm.chat("The MapleStory Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438313.py b/scripts/item/consume_2438313.py new file mode 100755 index 0000000..f01dc62 --- /dev/null +++ b/scripts/item/consume_2438313.py @@ -0,0 +1,4 @@ +# Rice Cake Damage Skin +success = sm.addDamageSkin(2438313) +if success: + sm.chat("The Rice Cake Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438314.py b/scripts/item/consume_2438314.py new file mode 100755 index 0000000..8786948 --- /dev/null +++ b/scripts/item/consume_2438314.py @@ -0,0 +1,4 @@ +# Popcorn Damage Skin +success = sm.addDamageSkin(2438314) +if success: + sm.chat("The Popcorn Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438315.py b/scripts/item/consume_2438315.py new file mode 100755 index 0000000..4ac2923 --- /dev/null +++ b/scripts/item/consume_2438315.py @@ -0,0 +1,4 @@ +# Pew Pew Damage Skin (Ver. 2) +success = sm.addDamageSkin(2438315) +if success: + sm.chat("The Pew Pew Damage Skin (Ver. 2) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438347.py b/scripts/item/consume_2438347.py new file mode 100755 index 0000000..38f3800 --- /dev/null +++ b/scripts/item/consume_2438347.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Tweed Damage Skin | (2438347) +if sm.addDamageSkin(2438347): + sm.chat("'Tweed Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438348.py b/scripts/item/consume_2438348.py new file mode 100755 index 0000000..a760ff8 --- /dev/null +++ b/scripts/item/consume_2438348.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Baseball Jacket Damage Skin | (2438348) +if sm.addDamageSkin(2438348): + sm.chat("'Baseball Jacket Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438352.py b/scripts/item/consume_2438352.py new file mode 100755 index 0000000..08890f3 --- /dev/null +++ b/scripts/item/consume_2438352.py @@ -0,0 +1,4 @@ +# Ark Damage Skin +success = sm.addDamageSkin(2438352) +if success: + sm.chat("The Ark Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438353.py b/scripts/item/consume_2438353.py new file mode 100755 index 0000000..de33399 --- /dev/null +++ b/scripts/item/consume_2438353.py @@ -0,0 +1,4 @@ +# Ark Damage Skin +success = sm.addDamageSkin(2438353) +if success: + sm.chat("The Ark Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438378.py b/scripts/item/consume_2438378.py new file mode 100755 index 0000000..fa19cfb --- /dev/null +++ b/scripts/item/consume_2438378.py @@ -0,0 +1,4 @@ +# Woof Woof Damage Skin +success = sm.addDamageSkin(2438378) +if success: + sm.chat("The Woof Woof Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438379.py b/scripts/item/consume_2438379.py new file mode 100755 index 0000000..79a950e --- /dev/null +++ b/scripts/item/consume_2438379.py @@ -0,0 +1,4 @@ +# Heartthrob Damage Skin +success = sm.addDamageSkin(2438379) +if success: + sm.chat("The Heartthrob Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438396.py b/scripts/item/consume_2438396.py new file mode 100755 index 0000000..2a0a60b --- /dev/null +++ b/scripts/item/consume_2438396.py @@ -0,0 +1,9 @@ +# Will Soul +souls = [2591641, 2591642, 2591643, 2591644, 2591645, 2591646, 2591647, 2591648, 2591640] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2438396): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2438396, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2438413.py b/scripts/item/consume_2438413.py new file mode 100755 index 0000000..a9f1e80 --- /dev/null +++ b/scripts/item/consume_2438413.py @@ -0,0 +1,4 @@ +# Discovery Damage Skin +success = sm.addDamageSkin(2438413) +if success: + sm.chat("The Discovery Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438414.py b/scripts/item/consume_2438414.py new file mode 100755 index 0000000..8998fd2 --- /dev/null +++ b/scripts/item/consume_2438414.py @@ -0,0 +1,4 @@ +# Discovery Damage Skin +success = sm.addDamageSkin(2438414) +if success: + sm.chat("The Discovery Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438415.py b/scripts/item/consume_2438415.py new file mode 100755 index 0000000..61c9050 --- /dev/null +++ b/scripts/item/consume_2438415.py @@ -0,0 +1,4 @@ +# Esfera Damage Skin +success = sm.addDamageSkin(2438415) +if success: + sm.chat("The Esfera Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438416.py b/scripts/item/consume_2438416.py new file mode 100755 index 0000000..64a1795 --- /dev/null +++ b/scripts/item/consume_2438416.py @@ -0,0 +1,4 @@ +# Esfera Damage Skin +success = sm.addDamageSkin(2438416) +if success: + sm.chat("The Esfera Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438417.py b/scripts/item/consume_2438417.py new file mode 100755 index 0000000..f5685e7 --- /dev/null +++ b/scripts/item/consume_2438417.py @@ -0,0 +1,4 @@ +# Heavenly Damage Skin +success = sm.addDamageSkin(2438417) +if success: + sm.chat("The Heavenly Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438418.py b/scripts/item/consume_2438418.py new file mode 100755 index 0000000..4fe442b --- /dev/null +++ b/scripts/item/consume_2438418.py @@ -0,0 +1,4 @@ +# Heavenly Damage Skin +success = sm.addDamageSkin(2438418) +if success: + sm.chat("The Heavenly Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438419.py b/scripts/item/consume_2438419.py new file mode 100755 index 0000000..a5e62d4 --- /dev/null +++ b/scripts/item/consume_2438419.py @@ -0,0 +1,4 @@ +# Hybrid Damage Skin +success = sm.addDamageSkin(2438419) +if success: + sm.chat("The Hybrid Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438420.py b/scripts/item/consume_2438420.py new file mode 100755 index 0000000..dde3d72 --- /dev/null +++ b/scripts/item/consume_2438420.py @@ -0,0 +1,4 @@ +# Hybrid Damage Skin +success = sm.addDamageSkin(2438420) +if success: + sm.chat("The Hybrid Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438421.py b/scripts/item/consume_2438421.py new file mode 100755 index 0000000..3564c23 --- /dev/null +++ b/scripts/item/consume_2438421.py @@ -0,0 +1,4 @@ +# Pink Bean Damage Skin +success = sm.addDamageSkin(2438421) +if success: + sm.chat("The Pink Bean Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438460.py b/scripts/item/consume_2438460.py new file mode 100755 index 0000000..6f68dc2 --- /dev/null +++ b/scripts/item/consume_2438460.py @@ -0,0 +1,4 @@ +# Red Circuit Damage Skin +success = sm.addDamageSkin(2438460) +if success: + sm.chat("The Red Circuit Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438461.py b/scripts/item/consume_2438461.py new file mode 100755 index 0000000..2ed52d1 --- /dev/null +++ b/scripts/item/consume_2438461.py @@ -0,0 +1,4 @@ +# Reminiscence Damage Skin +success = sm.addDamageSkin(2438461) +if success: + sm.chat("The Reminiscence Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438467.py b/scripts/item/consume_2438467.py new file mode 100755 index 0000000..bc40aa4 --- /dev/null +++ b/scripts/item/consume_2438467.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Graffiti Damage Skin | (2438467) +if sm.addDamageSkin(2438467): + sm.chat("'Graffiti Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438469.py b/scripts/item/consume_2438469.py new file mode 100755 index 0000000..d7fc6fb --- /dev/null +++ b/scripts/item/consume_2438469.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Skull Damage Skin | (2438469) +if sm.addDamageSkin(2438469): + sm.chat("'Skull Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438471.py b/scripts/item/consume_2438471.py new file mode 100755 index 0000000..2b7ee7a --- /dev/null +++ b/scripts/item/consume_2438471.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Valentine's Day Damage Skin | (2438471) +if sm.addDamageSkin(2438471): + sm.chat("'Valentine's Day Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438473.py b/scripts/item/consume_2438473.py new file mode 100755 index 0000000..17b91af --- /dev/null +++ b/scripts/item/consume_2438473.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# White Chocolate Damage Skin | (2438473) +if sm.addDamageSkin(2438473): + sm.chat("'White Chocolate Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438477.py b/scripts/item/consume_2438477.py new file mode 100755 index 0000000..694754f --- /dev/null +++ b/scripts/item/consume_2438477.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Pastel Easter Egg Damage Skin | (2438477) +if sm.addDamageSkin(2438477): + sm.chat("'Pastel Easter Egg Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438485.py b/scripts/item/consume_2438485.py new file mode 100755 index 0000000..a382a0d --- /dev/null +++ b/scripts/item/consume_2438485.py @@ -0,0 +1,4 @@ +# Red Circuit Damage Skin +success = sm.addDamageSkin(2438485) +if success: + sm.chat("The Red Circuit Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438491.py b/scripts/item/consume_2438491.py new file mode 100755 index 0000000..7fed82e --- /dev/null +++ b/scripts/item/consume_2438491.py @@ -0,0 +1,4 @@ +# Choco Bonbon Damage Skin +success = sm.addDamageSkin(2438491) +if success: + sm.chat("The Choco Bonbon Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438492.py b/scripts/item/consume_2438492.py new file mode 100755 index 0000000..5f4c9ca --- /dev/null +++ b/scripts/item/consume_2438492.py @@ -0,0 +1,4 @@ +# Choco Bonbon Damage Skin +success = sm.addDamageSkin(2438492) +if success: + sm.chat("The Choco Bonbon Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438529.py b/scripts/item/consume_2438529.py new file mode 100755 index 0000000..627264d --- /dev/null +++ b/scripts/item/consume_2438529.py @@ -0,0 +1,4 @@ +# Twelve Branches Damage Skin +success = sm.addDamageSkin(2438529) +if success: + sm.chat("The Twelve Branches Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438530.py b/scripts/item/consume_2438530.py new file mode 100755 index 0000000..b2a0f2e --- /dev/null +++ b/scripts/item/consume_2438530.py @@ -0,0 +1,4 @@ +# Twelve Branches Damage Skin +success = sm.addDamageSkin(2438530) +if success: + sm.chat("The Twelve Branches Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438592.py b/scripts/item/consume_2438592.py new file mode 100755 index 0000000..41228fb --- /dev/null +++ b/scripts/item/consume_2438592.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Round 'n' Round Damage Skin | (2438592) +if sm.addDamageSkin(2438592): + sm.chat("'Round 'n' Round Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438594.py b/scripts/item/consume_2438594.py new file mode 100755 index 0000000..4b03c85 --- /dev/null +++ b/scripts/item/consume_2438594.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Garden Damage Skin | (2438594) +if sm.addDamageSkin(2438594): + sm.chat("'Garden Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438596.py b/scripts/item/consume_2438596.py new file mode 100755 index 0000000..115f383 --- /dev/null +++ b/scripts/item/consume_2438596.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Cake Icing Damage Skin | (2438596) +if sm.addDamageSkin(2438596): + sm.chat("'Cake Icing Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438604.py b/scripts/item/consume_2438604.py new file mode 100755 index 0000000..0f9ca86 --- /dev/null +++ b/scripts/item/consume_2438604.py @@ -0,0 +1,4 @@ +# Lightning Damage Skin +success = sm.addDamageSkin(2438604) +if success: + sm.chat("The Lightning Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438637.py b/scripts/item/consume_2438637.py new file mode 100755 index 0000000..96408c1 --- /dev/null +++ b/scripts/item/consume_2438637.py @@ -0,0 +1,4 @@ +# Doodle Damage Skin +success = sm.addDamageSkin(2438637) +if success: + sm.chat("The Doodle Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438655.py b/scripts/item/consume_2438655.py new file mode 100755 index 0000000..1266c9f --- /dev/null +++ b/scripts/item/consume_2438655.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Golden Damage Skin | (2438655) +if sm.addDamageSkin(2438655): + sm.chat("'Golden Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438659.py b/scripts/item/consume_2438659.py new file mode 100755 index 0000000..436ce90 --- /dev/null +++ b/scripts/item/consume_2438659.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Stamp Damage Skin | (2438659) +if sm.addDamageSkin(2438659): + sm.chat("'Stamp Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438661.py b/scripts/item/consume_2438661.py new file mode 100755 index 0000000..77a84c7 --- /dev/null +++ b/scripts/item/consume_2438661.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Mustache Damage Skin | (2438661) +if sm.addDamageSkin(2438661): + sm.chat("'Mustache Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438671.py b/scripts/item/consume_2438671.py new file mode 100755 index 0000000..b97d415 --- /dev/null +++ b/scripts/item/consume_2438671.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# High Noon Damage Skin | (2438671) +if sm.addDamageSkin(2438671): + sm.chat("'High Noon Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438676.py b/scripts/item/consume_2438676.py new file mode 100755 index 0000000..461f93c --- /dev/null +++ b/scripts/item/consume_2438676.py @@ -0,0 +1,4 @@ +# Soccer Uniform Damage Skin +success = sm.addDamageSkin(2438676) +if success: + sm.chat("The Soccer Uniform Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438713.py b/scripts/item/consume_2438713.py new file mode 100755 index 0000000..faaa51b --- /dev/null +++ b/scripts/item/consume_2438713.py @@ -0,0 +1,4 @@ +# Soccer Uniform Damage Skin +success = sm.addDamageSkin(2438713) +if success: + sm.chat("The Soccer Uniform Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438759.py b/scripts/item/consume_2438759.py new file mode 100755 index 0000000..0823c82 --- /dev/null +++ b/scripts/item/consume_2438759.py @@ -0,0 +1,4 @@ +# 12th Anniversary Damage Skin +success = sm.addDamageSkin(2438759) +if success: + sm.chat("The 12th Anniversary Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438761.py b/scripts/item/consume_2438761.py new file mode 100755 index 0000000..eb4a81e --- /dev/null +++ b/scripts/item/consume_2438761.py @@ -0,0 +1,4 @@ +# Blue Flame Damage Skin +success = sm.addDamageSkin(2438761) +if success: + sm.chat("The Blue Flame Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438871.py b/scripts/item/consume_2438871.py new file mode 100755 index 0000000..97739a8 --- /dev/null +++ b/scripts/item/consume_2438871.py @@ -0,0 +1,4 @@ +# Basic Damage Skin +success = sm.addDamageSkin(2438871) +if success: + sm.chat("The Basic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438872.py b/scripts/item/consume_2438872.py new file mode 100755 index 0000000..c1b2648 --- /dev/null +++ b/scripts/item/consume_2438872.py @@ -0,0 +1,4 @@ +# Basic Damage Skin +success = sm.addDamageSkin(2438872) +if success: + sm.chat("The Basic Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438880.py b/scripts/item/consume_2438880.py new file mode 100755 index 0000000..5c8bc3e --- /dev/null +++ b/scripts/item/consume_2438880.py @@ -0,0 +1,4 @@ +# Monster Damage Skin +success = sm.addDamageSkin(2438880) +if success: + sm.chat("The Monster Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438881.py b/scripts/item/consume_2438881.py new file mode 100755 index 0000000..7fd432c --- /dev/null +++ b/scripts/item/consume_2438881.py @@ -0,0 +1,4 @@ +# Monster Damage Skin +success = sm.addDamageSkin(2438881) +if success: + sm.chat("The Monster Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438884.py b/scripts/item/consume_2438884.py new file mode 100755 index 0000000..0e57b93 --- /dev/null +++ b/scripts/item/consume_2438884.py @@ -0,0 +1,4 @@ +# 14th Street Damage Skin +success = sm.addDamageSkin(2438884) +if success: + sm.chat("The 14th Street Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438885.py b/scripts/item/consume_2438885.py new file mode 100755 index 0000000..cb63b29 --- /dev/null +++ b/scripts/item/consume_2438885.py @@ -0,0 +1,4 @@ +# 14th Street Damage Skin +success = sm.addDamageSkin(2438885) +if success: + sm.chat("The 14th Street Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438924.py b/scripts/item/consume_2438924.py new file mode 100755 index 0000000..61fea01 --- /dev/null +++ b/scripts/item/consume_2438924.py @@ -0,0 +1,4 @@ +# Ark Damage Skin +success = sm.addDamageSkin(2438924) +if success: + sm.chat("The Ark Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438925.py b/scripts/item/consume_2438925.py new file mode 100755 index 0000000..0247d9d --- /dev/null +++ b/scripts/item/consume_2438925.py @@ -0,0 +1,4 @@ +# Cadena Damage Skin +success = sm.addDamageSkin(2438925) +if success: + sm.chat("The Cadena Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438926.py b/scripts/item/consume_2438926.py new file mode 100755 index 0000000..e349860 --- /dev/null +++ b/scripts/item/consume_2438926.py @@ -0,0 +1,4 @@ +# Illium Damage Skin +success = sm.addDamageSkin(2438926) +if success: + sm.chat("The Illium Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2438929.py b/scripts/item/consume_2438929.py new file mode 100755 index 0000000..98dfdb2 --- /dev/null +++ b/scripts/item/consume_2438929.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Droplet Damage Skin | (2438929) +if sm.addDamageSkin(2438929): + sm.chat("'Droplet Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438930.py b/scripts/item/consume_2438930.py new file mode 100755 index 0000000..abb41c4 --- /dev/null +++ b/scripts/item/consume_2438930.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Gummy Bear Damage Skin | (2438930) +if sm.addDamageSkin(2438930): + sm.chat("'Gummy Bear Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2438931.py b/scripts/item/consume_2438931.py new file mode 100755 index 0000000..add6073 --- /dev/null +++ b/scripts/item/consume_2438931.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# 14th Anniversary Damage Skin | (2438931) +if sm.addDamageSkin(2438931): + sm.chat("'14th Anniversary Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439031.py b/scripts/item/consume_2439031.py new file mode 100755 index 0000000..8262c35 --- /dev/null +++ b/scripts/item/consume_2439031.py @@ -0,0 +1,14 @@ +# id 2439031 (Elva's Potion Notebook), field 867202300 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +res = sm.sendNext("#e[Elva's Special Potion Recipe Notebook]#n\r\n#L9# Special Super Elixir#l") +res = sm.sendNext("#eSpecial Super Elixir#n\r\nInstantly increases stamina and energy!\r\n\r\n#e1. Ingredients#n\r\n 1) Eyeful antennae\r\n #L0# [Habitat] Lives beneath the forest in tunnels. Attracted to shiny objects, particularly treasure.#l\r\n [Effects] Strengthens the muscles and bones. Improves vitality.\r\n 2) Optusa leaves\r\n #L1# [Habitat] Found near holes where warm air collects. #l\r\n [Effects] Warms the body and calms the cardiovascular system.\r\n 3) Leatty Crystals\r\n #L2# [Habitat] Follows snowstorms. Often found near yeti habitats or along frozen rivers.#l\r\n [Effects] Speeds up natural healing processes.\r\n 4) Clear Actinops Blood \r\n #L3# [Habitat] Lives near local lakes and rivers, but difficult to find due to its transparency.#l\r\n [Effects] Reduces inflammation and helps wounds heal. Contains toxins. May cause paralysis if consumed excessively.\r\n#e2. Instructions#n\r\n 1) Roast the Optusa leaves over low heat.\r\n 2) Melt down 10 Leatty Crystals and mix thoroughly with 10ml of Actinops blood. Add the Optusa leaves and bring to a boil over low heat.\r\n 3) Add 20 Eyeful antennae once boiling. Boil until the antennae dissolve.") +sm.setParam(57) +sm.sendNext("#b(Wonder if people can really eat this stuff...) ") +sm.sendSay("#b(Well, she did ask for them.) ") +sm.createQuestWithQRValue(64114, "chk1=1") +sm.setParam(56) +res = sm.sendNext("#bIf I'm going to hunt Eyefuls, I should keep a close eye on my valuables.\r\n \r\n#L11# 'I'd better get going.' (You will be moved automatically once you accept.)#l\r\n#L12# Let's head out a little later.#l") +sm.warp(867202820) diff --git a/scripts/item/consume_2439129.py b/scripts/item/consume_2439129.py new file mode 100755 index 0000000..7d20ee5 --- /dev/null +++ b/scripts/item/consume_2439129.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Summer Sea Damage Skin | (2439129) +if sm.addDamageSkin(2439129): + sm.chat("'Summer Sea Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439132.py b/scripts/item/consume_2439132.py new file mode 100755 index 0000000..44bfc19 --- /dev/null +++ b/scripts/item/consume_2439132.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Popsicle Damage Skin | (2439132) +if sm.addDamageSkin(2439132): + sm.chat("'Popsicle Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439157.py b/scripts/item/consume_2439157.py new file mode 100755 index 0000000..0e65d7d --- /dev/null +++ b/scripts/item/consume_2439157.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Abrup's Snowstorm Damage Skin | (2439157) +if sm.addDamageSkin(2439157): + sm.chat("'Abrup's Snowstorm Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439164.py b/scripts/item/consume_2439164.py new file mode 100755 index 0000000..b470be0 --- /dev/null +++ b/scripts/item/consume_2439164.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Fembris Damage Skin | (2439164) +if sm.addDamageSkin(2439164): + sm.chat("'Fembris Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439167.py b/scripts/item/consume_2439167.py new file mode 100755 index 0000000..de2f391 --- /dev/null +++ b/scripts/item/consume_2439167.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Frostflail Yeti | (2439167) +if sm.addDamageSkin(2439167): + sm.chat("'Frostflail Yeti' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439170.py b/scripts/item/consume_2439170.py new file mode 100755 index 0000000..0566ce5 --- /dev/null +++ b/scripts/item/consume_2439170.py @@ -0,0 +1,6 @@ +# id 2439170 (Mastery Box), field 863100003 +sm.setSpeakerID(9010000) # Maple Administrator +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(2080009) # Illiad +res = sm.sendNext("What do you wish to do?\r\n #L0# Claim #i4000999##t4000999# x500#l\r\n #L1# Use #i2431935##t2431935##l\r\n #L2# Use #i2431936##t2431936##l") +sm.sendSayOkay("Either you haven't learned any 4th job skills, or you don't have any skills to use a book on. Check again.") diff --git a/scripts/item/consume_2439256.py b/scripts/item/consume_2439256.py new file mode 100755 index 0000000..94eff6b --- /dev/null +++ b/scripts/item/consume_2439256.py @@ -0,0 +1,4 @@ +# Shinsoo Damage Skin +success = sm.addDamageSkin(2439256) +if success: + sm.chat("The Shinsoo Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439264.py b/scripts/item/consume_2439264.py new file mode 100755 index 0000000..afd15b9 --- /dev/null +++ b/scripts/item/consume_2439264.py @@ -0,0 +1,4 @@ +# Foggy Damage Skin +success = sm.addDamageSkin(2439264) +if success: + sm.chat("The Foggy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439265.py b/scripts/item/consume_2439265.py new file mode 100755 index 0000000..07cb3ff --- /dev/null +++ b/scripts/item/consume_2439265.py @@ -0,0 +1,4 @@ +# Foggy Damage Skin +success = sm.addDamageSkin(2439265) +if success: + sm.chat("The Foggy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439277.py b/scripts/item/consume_2439277.py new file mode 100755 index 0000000..183cbca --- /dev/null +++ b/scripts/item/consume_2439277.py @@ -0,0 +1,4 @@ +# Alliance Damage Skin +success = sm.addDamageSkin(2439277) +if success: + sm.chat("The Alliance Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439298.py b/scripts/item/consume_2439298.py new file mode 100755 index 0000000..ce3e968 --- /dev/null +++ b/scripts/item/consume_2439298.py @@ -0,0 +1,4 @@ +# Shinsoo Damage Skin +success = sm.addDamageSkin(2439298) +if success: + sm.chat("The Shinsoo Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439336.py b/scripts/item/consume_2439336.py new file mode 100755 index 0000000..32401b7 --- /dev/null +++ b/scripts/item/consume_2439336.py @@ -0,0 +1,4 @@ +# Foggy Damage Skin +success = sm.addDamageSkin(2439336) +if success: + sm.chat("The Foggy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439337.py b/scripts/item/consume_2439337.py new file mode 100755 index 0000000..ffb42d5 --- /dev/null +++ b/scripts/item/consume_2439337.py @@ -0,0 +1,4 @@ +# Foggy Damage Skin +success = sm.addDamageSkin(2439337) +if success: + sm.chat("The Foggy Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439338.py b/scripts/item/consume_2439338.py new file mode 100755 index 0000000..56354ee --- /dev/null +++ b/scripts/item/consume_2439338.py @@ -0,0 +1,4 @@ +# Alliance Damage Skin +success = sm.addDamageSkin(2439338) +if success: + sm.chat("The Alliance Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439372.py b/scripts/item/consume_2439372.py new file mode 100755 index 0000000..3d711e3 --- /dev/null +++ b/scripts/item/consume_2439372.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2439373.py b/scripts/item/consume_2439373.py new file mode 100755 index 0000000..131fcc9 --- /dev/null +++ b/scripts/item/consume_2439373.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Bitty Baby Feet Damage Skin | (2439373) +if sm.addDamageSkin(2439373): + sm.chat("'Bitty Baby Feet Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439376.py b/scripts/item/consume_2439376.py new file mode 100755 index 0000000..90b10b5 --- /dev/null +++ b/scripts/item/consume_2439376.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Pink Princess Damage Skin | (2439376) +if sm.addDamageSkin(2439376): + sm.chat("'Pink Princess Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439381.py b/scripts/item/consume_2439381.py new file mode 100755 index 0000000..f6684bc --- /dev/null +++ b/scripts/item/consume_2439381.py @@ -0,0 +1,4 @@ +# Master Stellar Damage Skin +success = sm.addDamageSkin(2439381) +if success: + sm.chat("The Master Stellar Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439392.py b/scripts/item/consume_2439392.py new file mode 100755 index 0000000..efb6d06 --- /dev/null +++ b/scripts/item/consume_2439392.py @@ -0,0 +1,4 @@ +# Labyrinth Flame Damage Skin +success = sm.addDamageSkin(2439392) +if success: + sm.chat("The Labyrinth Flame Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439393.py b/scripts/item/consume_2439393.py new file mode 100755 index 0000000..0ca1e14 --- /dev/null +++ b/scripts/item/consume_2439393.py @@ -0,0 +1,4 @@ +# Labyrinth Flame Damage Skin +success = sm.addDamageSkin(2439393) +if success: + sm.chat("The Labyrinth Flame Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439394.py b/scripts/item/consume_2439394.py new file mode 100755 index 0000000..cc3fa08 --- /dev/null +++ b/scripts/item/consume_2439394.py @@ -0,0 +1,4 @@ +# Labyrinth Flame Damage Skin +success = sm.addDamageSkin(2439394) +if success: + sm.chat("The Labyrinth Flame Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439395.py b/scripts/item/consume_2439395.py new file mode 100755 index 0000000..9618fac --- /dev/null +++ b/scripts/item/consume_2439395.py @@ -0,0 +1,4 @@ +# Labyrinth Flame Damage Skin +success = sm.addDamageSkin(2439395) +if success: + sm.chat("The Labyrinth Flame Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439407.py b/scripts/item/consume_2439407.py new file mode 100755 index 0000000..8619086 --- /dev/null +++ b/scripts/item/consume_2439407.py @@ -0,0 +1,4 @@ +# Living Chain Damage Skin +success = sm.addDamageSkin(2439407) +if success: + sm.chat("The Living Chain Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439408.py b/scripts/item/consume_2439408.py new file mode 100755 index 0000000..3e60e18 --- /dev/null +++ b/scripts/item/consume_2439408.py @@ -0,0 +1,4 @@ +# Living Chain Damage Skin +success = sm.addDamageSkin(2439408) +if success: + sm.chat("The Living Chain Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439442.py b/scripts/item/consume_2439442.py new file mode 100755 index 0000000..5bdf2cd --- /dev/null +++ b/scripts/item/consume_2439442.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Custom Puppy Damage Skin | (2439442) +if sm.addDamageSkin(2439442): + sm.chat("'Custom Puppy Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439523.py b/scripts/item/consume_2439523.py new file mode 100755 index 0000000..9e9c31f --- /dev/null +++ b/scripts/item/consume_2439523.py @@ -0,0 +1,4 @@ +# 8-Bit Damage Skin +success = sm.addDamageSkin(2439523) +if success: + sm.chat("The 8-Bit Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439551.py b/scripts/item/consume_2439551.py new file mode 100755 index 0000000..4f6f67f --- /dev/null +++ b/scripts/item/consume_2439551.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Devil Font Damage Skin | (2439551) +if sm.addDamageSkin(2439551): + sm.chat("'Devil Font Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439554.py b/scripts/item/consume_2439554.py new file mode 100755 index 0000000..cac7f29 --- /dev/null +++ b/scripts/item/consume_2439554.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Trick or Treat Damage Skin | (2439554) +if sm.addDamageSkin(2439554): + sm.chat("'Trick or Treat Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439556.py b/scripts/item/consume_2439556.py new file mode 100755 index 0000000..6d87cda --- /dev/null +++ b/scripts/item/consume_2439556.py @@ -0,0 +1,4 @@ +# Trick or Treat Damage Skin +success = sm.addDamageSkin(2439556) +if success: + sm.chat("The Trick or Treat has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439567.py b/scripts/item/consume_2439567.py new file mode 100755 index 0000000..d719c67 --- /dev/null +++ b/scripts/item/consume_2439567.py @@ -0,0 +1,9 @@ +# Verus Hilla Soul +souls = [2591660, 2591661, 2591662, 2591663, 2591664, 2591665, 2591666, 2591667, 2591659] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2439567): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2439567, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2439568.py b/scripts/item/consume_2439568.py new file mode 100755 index 0000000..cab299e --- /dev/null +++ b/scripts/item/consume_2439568.py @@ -0,0 +1,9 @@ +# Darknell Soul +souls = [2591677, 2591678, 2591679, 2591680, 2591681, 2591682, 2591683, 2591684, 2591676] +rand = sm.getRandomIntBelow(len(souls)) +if not sm.hasItem(2439568): + sm.sendSayOkay("You need at least 10 soul fragments to create a soul.") +else: + soul = souls[rand] + sm.consumeItem(2439568, 10) + sm.giveItem(soul) \ No newline at end of file diff --git a/scripts/item/consume_2439572.py b/scripts/item/consume_2439572.py new file mode 100755 index 0000000..841fdeb --- /dev/null +++ b/scripts/item/consume_2439572.py @@ -0,0 +1,4 @@ +# Star Planet Damage Skin +success = sm.addDamageSkin(2439572) +if success: + sm.chat("The Star Planet Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439616.py b/scripts/item/consume_2439616.py new file mode 100755 index 0000000..3df9741 --- /dev/null +++ b/scripts/item/consume_2439616.py @@ -0,0 +1,4 @@ +# Challenge Damage Skin: Season 1 +success = sm.addDamageSkin(2439616) +if success: + sm.chat("The Challenge Damage Skin: Season 1 has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439617.py b/scripts/item/consume_2439617.py new file mode 100755 index 0000000..e00601c --- /dev/null +++ b/scripts/item/consume_2439617.py @@ -0,0 +1,4 @@ +# Challenge Damage Skin: Season 1 +success = sm.addDamageSkin(2439617) +if success: + sm.chat("The Challenge Damage Skin: Season 1 has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439652.py b/scripts/item/consume_2439652.py new file mode 100755 index 0000000..14743eb --- /dev/null +++ b/scripts/item/consume_2439652.py @@ -0,0 +1,4 @@ +# Harvest Damage Skin +success = sm.addDamageSkin(2439652) +if success: + sm.chat("The Harvest Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439665.py b/scripts/item/consume_2439665.py new file mode 100755 index 0000000..0045d36 --- /dev/null +++ b/scripts/item/consume_2439665.py @@ -0,0 +1,4 @@ +# Harvest Damage Skin +success = sm.addDamageSkin(2439665) +if success: + sm.chat("The Harvest Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439683.py b/scripts/item/consume_2439683.py new file mode 100755 index 0000000..3d3ac3b --- /dev/null +++ b/scripts/item/consume_2439683.py @@ -0,0 +1,4 @@ +# Hangul Day Damage Skin (KR) +success = sm.addDamageSkin(2439683) +if success: + sm.chat("The Hangul Day Damage Skin (KR) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439684.py b/scripts/item/consume_2439684.py new file mode 100755 index 0000000..3817445 --- /dev/null +++ b/scripts/item/consume_2439684.py @@ -0,0 +1,4 @@ +# Hangul Day Damage Skin (KR) +success = sm.addDamageSkin(2439684) +if success: + sm.chat("The Hangul Day Damage Skin (KR) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439685.py b/scripts/item/consume_2439685.py new file mode 100755 index 0000000..1dae199 --- /dev/null +++ b/scripts/item/consume_2439685.py @@ -0,0 +1,4 @@ +# Hangul Day Traditional Damage Skin (KR) +success = sm.addDamageSkin(2439685) +if success: + sm.chat("The Hangul Day Traditional Damage Skin (KR) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439686.py b/scripts/item/consume_2439686.py new file mode 100755 index 0000000..fe933e4 --- /dev/null +++ b/scripts/item/consume_2439686.py @@ -0,0 +1,4 @@ +# Hangul Day Traditional Damage Skin (KR) +success = sm.addDamageSkin(2439686) +if success: + sm.chat("The Hangul Day Traditional Damage Skin (KR) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439697.py b/scripts/item/consume_2439697.py new file mode 100755 index 0000000..7b545b2 --- /dev/null +++ b/scripts/item/consume_2439697.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# 3D Effect Damage Skin | (2439697) +if sm.addDamageSkin(2439697): + sm.chat("'3D Effect Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439700.py b/scripts/item/consume_2439700.py new file mode 100755 index 0000000..db99d53 --- /dev/null +++ b/scripts/item/consume_2439700.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Black Damage Skin | (2439700) +if sm.addDamageSkin(2439700): + sm.chat("'Black Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439768.py b/scripts/item/consume_2439768.py new file mode 100755 index 0000000..089c7f8 --- /dev/null +++ b/scripts/item/consume_2439768.py @@ -0,0 +1,4 @@ +# Hallowkitty Damage Skin V2 +success = sm.addDamageSkin(2439768) +if success: + sm.chat("The Hallowkitty Damage Skin V2 has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439769.py b/scripts/item/consume_2439769.py new file mode 100755 index 0000000..b014107 --- /dev/null +++ b/scripts/item/consume_2439769.py @@ -0,0 +1,4 @@ +# Hallowkitty Damage Skin V2 +success = sm.addDamageSkin(2439769) +if success: + sm.chat("The Hallowkitty Damage Skin V2 has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439800.py b/scripts/item/consume_2439800.py new file mode 100755 index 0000000..384cffc --- /dev/null +++ b/scripts/item/consume_2439800.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Jolly Holiday Damage Skin | (2439800) +if sm.addDamageSkin(2439800): + sm.chat("'Jolly Holiday Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439804.py b/scripts/item/consume_2439804.py new file mode 100755 index 0000000..3d711e3 --- /dev/null +++ b/scripts/item/consume_2439804.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2439805.py b/scripts/item/consume_2439805.py new file mode 100755 index 0000000..4178510 --- /dev/null +++ b/scripts/item/consume_2439805.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Golden Tinsel Damage Skin | (2439805) +if sm.addDamageSkin(2439805): + sm.chat("'Golden Tinsel Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439894.py b/scripts/item/consume_2439894.py new file mode 100755 index 0000000..ac7642e --- /dev/null +++ b/scripts/item/consume_2439894.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Lunar New Year Damage Skin | (2439894) +if sm.addDamageSkin(2439894): + sm.chat("'Lunar New Year Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439897.py b/scripts/item/consume_2439897.py new file mode 100755 index 0000000..8cd7212 --- /dev/null +++ b/scripts/item/consume_2439897.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Valentine Damage Skin | (2439897) +if sm.addDamageSkin(2439897): + sm.chat("'Valentine Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439898.py b/scripts/item/consume_2439898.py new file mode 100755 index 0000000..fdc636b --- /dev/null +++ b/scripts/item/consume_2439898.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Valentine Damage Skin | (2439898) +if sm.addDamageSkin(2439898): + sm.chat("'Valentine Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439899.py b/scripts/item/consume_2439899.py new file mode 100755 index 0000000..1ab51fd --- /dev/null +++ b/scripts/item/consume_2439899.py @@ -0,0 +1,4 @@ +# Valentine Damage Skin (30 Day) | (2439899) +if sm.addDamageSkin(2439899): + sm.chat("'Valentine Damage Skin' Damage Skin has been added to your account's damage skin collection.") + sm.consumeItem() \ No newline at end of file diff --git a/scripts/item/consume_2439906.py b/scripts/item/consume_2439906.py new file mode 100755 index 0000000..3d711e3 --- /dev/null +++ b/scripts/item/consume_2439906.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2439907.py b/scripts/item/consume_2439907.py new file mode 100755 index 0000000..f630f66 --- /dev/null +++ b/scripts/item/consume_2439907.py @@ -0,0 +1,9 @@ +# Tiptoe Piggy Mount 90-Day Coupon | (2439907) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Tiptoe Piggy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Tiptoe Piggy' mount." + str(sm.getSkillByItem())) diff --git a/scripts/item/consume_2439908.py b/scripts/item/consume_2439908.py new file mode 100755 index 0000000..094349d --- /dev/null +++ b/scripts/item/consume_2439908.py @@ -0,0 +1,9 @@ +# Tiptoe Piggy Mount 90-Day Coupon | (2439908) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Tiptoe Piggy' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Tiptoe Piggy' mount." + str(sm.getSkillByItem())) diff --git a/scripts/item/consume_2439909.py b/scripts/item/consume_2439909.py new file mode 100755 index 0000000..3d711e3 --- /dev/null +++ b/scripts/item/consume_2439909.py @@ -0,0 +1,9 @@ +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the mount.") +sm.dispose() diff --git a/scripts/item/consume_2439913.py b/scripts/item/consume_2439913.py new file mode 100755 index 0000000..ae130d7 --- /dev/null +++ b/scripts/item/consume_2439913.py @@ -0,0 +1,8 @@ +# Glacier | (2430050)x +if sm.hasSkill(2439913): + sm.chat("You already have the 'Glacier' mount.") +else: + sm.consumeItem() + sm.giveSkill(2439913) + sm.chat("Successfully added the 'Galcier' mount.") +sm.dispose() diff --git a/scripts/item/consume_2439925.py b/scripts/item/consume_2439925.py new file mode 100755 index 0000000..f08b830 --- /dev/null +++ b/scripts/item/consume_2439925.py @@ -0,0 +1,4 @@ +# Detective Yettson and Peplock Damage Skin +success = sm.addDamageSkin(2439925) +if success: + sm.chat("The Detective Yettson and Peplock Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439926.py b/scripts/item/consume_2439926.py new file mode 100755 index 0000000..e2a676f --- /dev/null +++ b/scripts/item/consume_2439926.py @@ -0,0 +1,4 @@ +# Detective Yettson and Peplock Damage Skin +success = sm.addDamageSkin(2439926) +if success: + sm.chat("The Detective Yettson and Peplock Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439927.py b/scripts/item/consume_2439927.py new file mode 100755 index 0000000..dc22450 --- /dev/null +++ b/scripts/item/consume_2439927.py @@ -0,0 +1,4 @@ +# Pew Pew Damage Skin (Ver. 3) +success = sm.addDamageSkin(2439927) +if success: + sm.chat("The Pew Pew Damage Skin (Ver. 3) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2439928.py b/scripts/item/consume_2439928.py new file mode 100755 index 0000000..f9f9a2b --- /dev/null +++ b/scripts/item/consume_2439928.py @@ -0,0 +1,4 @@ +# Pew Pew Damage Skin (Ver. 3) +success = sm.addDamageSkin(2439928) +if success: + sm.chat("The Pew Pew Damage Skin (Ver. 3) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2460446.py b/scripts/item/consume_2460446.py new file mode 100755 index 0000000..627264d --- /dev/null +++ b/scripts/item/consume_2460446.py @@ -0,0 +1,4 @@ +# Twelve Branches Damage Skin +success = sm.addDamageSkin(2438529) +if success: + sm.chat("The Twelve Branches Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2481004.py b/scripts/item/consume_2481004.py new file mode 100755 index 0000000..40b3a02 --- /dev/null +++ b/scripts/item/consume_2481004.py @@ -0,0 +1,10 @@ +# Cake | (2481004) +if sm.getSkillByItem() == 0:# Check whether item has an vehicleID stored, 0 if false. + sm.chat("An Error occurred whilst trying to find the mount.") +elif sm.hasSkill(sm.getSkillByItem()): + sm.chat("You already have the 'Cake' mount.") +else: + sm.consumeItem() + sm.giveSkill(sm.getSkillByItem()) + sm.chat("Successfully added the 'Cake' mount.") +sm.dispose() diff --git a/scripts/item/consume_2630153.py b/scripts/item/consume_2630153.py new file mode 100755 index 0000000..590cf9e --- /dev/null +++ b/scripts/item/consume_2630153.py @@ -0,0 +1,4 @@ +# Coral Reef Damage Skin +success = sm.addDamageSkin(2630153) +if success: + sm.chat("The Coral Reef Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2630156.py b/scripts/item/consume_2630156.py new file mode 100755 index 0000000..6680c70 --- /dev/null +++ b/scripts/item/consume_2630156.py @@ -0,0 +1,4 @@ +# Shimmerlight Damage Skin +success = sm.addDamageSkin(2630156) +if success: + sm.chat("The Shimmerlight Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2630159.py b/scripts/item/consume_2630159.py new file mode 100755 index 0000000..99581e1 --- /dev/null +++ b/scripts/item/consume_2630159.py @@ -0,0 +1,3 @@ +# id 2630159 (Hay), field 101082200 +sm.setSpeakerID(9010000) # Maple Administrator +sm.setParam(5) diff --git a/scripts/item/consume_2630301.py b/scripts/item/consume_2630301.py new file mode 100755 index 0000000..67fdc70 --- /dev/null +++ b/scripts/item/consume_2630301.py @@ -0,0 +1,4 @@ +# Bunny Blossom Damage Skin +success = sm.addDamageSkin(2630301) +if success: + sm.chat("The Bunny Blossom Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2630304.py b/scripts/item/consume_2630304.py new file mode 100755 index 0000000..dabaec1 --- /dev/null +++ b/scripts/item/consume_2630304.py @@ -0,0 +1,4 @@ +# Rock Spirit Damage Skin +success = sm.addDamageSkin(2630304) +if success: + sm.chat("The Rock Spirit Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2630381.py b/scripts/item/consume_2630381.py new file mode 100755 index 0000000..06556af --- /dev/null +++ b/scripts/item/consume_2630381.py @@ -0,0 +1,4 @@ +# 빙고 데미지스킨 (보존용) +success = sm.addDamageSkin(2630381) +if success: + sm.chat("The damage skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2630390.py b/scripts/item/consume_2630390.py new file mode 100755 index 0000000..234a39a --- /dev/null +++ b/scripts/item/consume_2630390.py @@ -0,0 +1,4 @@ +# 빙고 데미지스킨 (보존용) +success = sm.addDamageSkin(2630390) +if success: + sm.chat("The 빙고 데미지스킨 (보존용) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2630393.py b/scripts/item/consume_2630393.py new file mode 100755 index 0000000..8ec3000 --- /dev/null +++ b/scripts/item/consume_2630393.py @@ -0,0 +1,4 @@ +# 모멘텀 데미지스킨 (보존용) +success = sm.addDamageSkin(2630393) +if success: + sm.chat("The 모멘텀 데미지스킨 (보존용) has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_2630446.py b/scripts/item/consume_2630446.py new file mode 100755 index 0000000..ea9191b --- /dev/null +++ b/scripts/item/consume_2630446.py @@ -0,0 +1,3 @@ +success = sm.addDamageSkin(2460446) +if success: + sm.chat("The Cold Drink Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_3800993.py b/scripts/item/consume_3800993.py new file mode 100755 index 0000000..c2f7164 --- /dev/null +++ b/scripts/item/consume_3800993.py @@ -0,0 +1,4 @@ +# Damage Skin Item ID does not have a name +success = sm.addDamageSkin(3800993) +if success: + sm.chat("The The Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_3801003.py b/scripts/item/consume_3801003.py new file mode 100755 index 0000000..06ddbf4 --- /dev/null +++ b/scripts/item/consume_3801003.py @@ -0,0 +1,4 @@ +# Damage Skin Item ID does not have a name +success = sm.addDamageSkin(3801003) +if success: + sm.chat("The The Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_3801113.py b/scripts/item/consume_3801113.py new file mode 100755 index 0000000..d81bb1d --- /dev/null +++ b/scripts/item/consume_3801113.py @@ -0,0 +1,4 @@ +# Damage Skin Item ID does not have a name +success = sm.addDamageSkin(3801113) +if success: + sm.chat("The The Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/consume_5680343.py b/scripts/item/consume_5680343.py new file mode 100755 index 0000000..0c9d80c --- /dev/null +++ b/scripts/item/consume_5680343.py @@ -0,0 +1,4 @@ +# Star Damage Skin +success = sm.addDamageSkin(5680343) +if success: + sm.chat("The Star Damage Skin has been added to your account's damage skin collection.") diff --git a/scripts/item/consume_5680395.py b/scripts/item/consume_5680395.py new file mode 100755 index 0000000..678c8f6 --- /dev/null +++ b/scripts/item/consume_5680395.py @@ -0,0 +1,4 @@ +# Scorching Heat Damage Skin +success = sm.addDamageSkin(5680395) +if success: + sm.chat("The Scorching Heat Damage Skin has been added to your account's damage skin collection.") \ No newline at end of file diff --git a/scripts/item/undefined.py b/scripts/item/undefined.py new file mode 100755 index 0000000..f4a0379 --- /dev/null +++ b/scripts/item/undefined.py @@ -0,0 +1,2 @@ +sm.sendSayOkay("(Item) Not coded. Admin was lazy and didn't fix this :). ID: " + str(parentID)) +sm.dispose() diff --git a/scripts/npc/1012009.py b/scripts/npc/1012009.py new file mode 100755 index 0000000..459f58d --- /dev/null +++ b/scripts/npc/1012009.py @@ -0,0 +1 @@ +sm.openTrunk(1012009) \ No newline at end of file diff --git a/scripts/npc/1033001.py b/scripts/npc/1033001.py new file mode 100755 index 0000000..6d0cbd2 --- /dev/null +++ b/scripts/npc/1033001.py @@ -0,0 +1,2 @@ +# Ethos (1033001) | Frozen Fairy Forest : Elluel | Part of Mercedes Intro Questline + diff --git a/scripts/npc/1033002.py b/scripts/npc/1033002.py new file mode 100755 index 0000000..7ca2184 --- /dev/null +++ b/scripts/npc/1033002.py @@ -0,0 +1 @@ +# Erwin (1033002) | Frozen Fairy Forest : Elluel | Part of Mercedes Intro Questline diff --git a/scripts/npc/1033103.py b/scripts/npc/1033103.py new file mode 100755 index 0000000..6ad01c7 --- /dev/null +++ b/scripts/npc/1033103.py @@ -0,0 +1 @@ +# Klas (1033103) | Frozen Fairy Forest : Elluel | Part of Mercedes Intro Questline diff --git a/scripts/npc/1033104.py b/scripts/npc/1033104.py new file mode 100755 index 0000000..1d69c7a --- /dev/null +++ b/scripts/npc/1033104.py @@ -0,0 +1 @@ +# Deet (1033104) | Frozen Fairy Forest : Elluel | Part of Mercedes Intro Questline diff --git a/scripts/npc/1033105.py b/scripts/npc/1033105.py new file mode 100755 index 0000000..a8b6ee1 --- /dev/null +++ b/scripts/npc/1033105.py @@ -0,0 +1 @@ +# Roa (1033105) | Frozen Fairy Forest : Elluel | Part of Mercedes Intro Questline diff --git a/scripts/npc/1052005.py b/scripts/npc/1052005.py new file mode 100755 index 0000000..243170d --- /dev/null +++ b/scripts/npc/1052005.py @@ -0,0 +1,160 @@ +from net.swordie.ms.scripts import ScriptUtil as su + + +mapleLeafID = 4001126 +mesosBagID = 4031138 + +mapleItemEquips = [ + 1003863, # - Onyx Maple Hat + 1012376, # - Onyx Maple Gum + 1052612, # - Onyx Maple Suit + 1102562, # - Onyx Maple Cape + 1113034, # - Onyx Maple Ring + 1122252, # - Onyx Maple Pendant + 1132228 # - Onyx Maple Buckle + +] +mapleItemWeapons = [ + 1212066, # - Onyx Maple Rod + 1222061, # - Onyx Maple Soul Shooter + 1232060, # - Onyx Maple Devil Sword + 1242065, # - Onyx Maple Chain Sword + 1252064, # - Onyx Maple Scepter + 1302277, # - Onyx Maple Sword + 1312155, # - Onyx Maple Axe + 1322205, # - Onyx Maple Mace + 1332227, # - Onyx Maple Cutter + 1352825, # - Onyx Maple Claw + 1362092, # - Onyx Maple Cane + 1372179, # - Onyx Maple Wand + 1382211, # - Onyx Maple Staff + 1402199, # - Onyx Maple Two-handed Sword + 1412137, # - Onyx Maple Two-handed Axe + 1422142, # - Onyx Maple Maul + 1432169, # - Onyx Maple Spear + 1442225, # - Onyx Maple Polearm + 1452207, # - Onyx Maple Longbow + 1462195, # - Onyx Maple Crossbow + 1472216, # - Onyx Maple Steer + 1482170, # - Onyx Maple Grip + 1492181, # - Onyx Maple Shooter + 1522096, # - Pearl Maple Twin Angels + 1532100, # - Onyx Maple Cannon + 1542070, # - Scarlet Katana + 1552070 # - Onyx Maple Fan + +] + + +strBuyOptions = "What would you like to buy?#b\r\n#L0#Vampire Blood\r\n#L1#Onyx Maple Equips\r\n#L2#Onyx Maple Weapons\r\n#L3#Trade Maple Leaves for Experience " + +buyOptionsSelection = sm.sendSayOkay(strBuyOptions) +buyEquipSelection = -2 +buyEquipYesNo = -1 + +#========================== +# Vampire Blood +#========================== + +if buyOptionsSelection == 0: + answer = sm.sendAskNumber("How much #v2433559##bVampire Blood #kdo you wish to purchase?\r\n#r 500 #bMaple Leaves #kEach", 0, 1, 1000) + + totalCost = answer * 500 + + if sm.getQuantityOfItem(4001126) < totalCost: + sm.sendSayOkay("You do not have enough #v4001126##bMaple Leaves.") + sm.dispose() + + if not sm.canHold(2433559, answer): + sm.sendSayOkay("Please make sure you have room in your inventory.") + + else: + sm.consumeItemFromDiffStacks(4001126, totalCost) + sm.giveItem(2433559, answer) + sm.sendSayOkay("Enjoy your #v2433559##bVampire Blood #k!") + +#========================== +# EQUIPMENT +#========================== + +if buyOptionsSelection == 1: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemEquips: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemEquips[buyEquipSelection]) + "\r\n " +su.getItemImg(mapleLeafID)+" #b5000 \r\n "+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose() + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemEquips[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + + +#========================== +# WEAPONS +#========================== + +if buyOptionsSelection == 2: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemWeapons: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemWeapons[buyEquipSelection]) + " \r\n" +su.getItemImg(mapleLeafID)+" #b5000 \r\n"+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose(); + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemWeapons[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + +#========================== +# Trade Maple Leaves For Experience +#========================== + +if buyOptionsSelection == 3: + answer = sm.sendAskNumber("How many #v4001126##bMaple Leaves #kdo you wish to trade?", 0, 1, 1000) + + totalExp = answer * 35 # EXP Per Maple leaf. + totalQty = answer * 1 # Leaves Per EXP Tick. + + if sm.getQuantityOfItem(4001126) < totalQty: + sm.sendSayOkay("You do not have enough#v4001126##bMaple Leaves.\r\n#kYou only have#r#c4001126#\r\n.") + sm.dispose() + + else: + sm.consumeItemFromDiffStacks(4001126, totalQty) + sm.giveExp(totalExp) + sm.sendSayOkay("Thank you for the #v4001126##bMaple Leaves.\r\n#kEnjoy the experience!") \ No newline at end of file diff --git a/scripts/npc/1052101.py b/scripts/npc/1052101.py new file mode 100755 index 0000000..e0dad1d --- /dev/null +++ b/scripts/npc/1052101.py @@ -0,0 +1,160 @@ +from net.swordie.ms.scripts import ScriptUtil as su + + +mapleLeafID = 4001126 +mesosBagID = 4031138 + +mapleItemEquips = [ + 1003863, # - Onyx Maple Hat + 1012376, # - Onyx Maple Gum + 1052612, # - Onyx Maple Suit + 1102562, # - Onyx Maple Cape + 1113034, # - Onyx Maple Ring + 1122252, # - Onyx Maple Pendant + 1132228 # - Onyx Maple Buckle + +] +mapleItemWeapons = [ + 1212066, # - Onyx Maple Rod + 1222061, # - Onyx Maple Soul Shooter + 1232060, # - Onyx Maple Devil Sword + 1242065, # - Onyx Maple Chain Sword + 1252064, # - Onyx Maple Scepter + 1302277, # - Onyx Maple Sword + 1312155, # - Onyx Maple Axe + 1322205, # - Onyx Maple Mace + 1332227, # - Onyx Maple Cutter + 1352825, # - Onyx Maple Claw + 1362092, # - Onyx Maple Cane + 1372179, # - Onyx Maple Wand + 1382211, # - Onyx Maple Staff + 1402199, # - Onyx Maple Two-handed Sword + 1412137, # - Onyx Maple Two-handed Axe + 1422142, # - Onyx Maple Maul + 1432169, # - Onyx Maple Spear + 1442225, # - Onyx Maple Polearm + 1452207, # - Onyx Maple Longbow + 1462195, # - Onyx Maple Crossbow + 1472216, # - Onyx Maple Steer + 1482170, # - Onyx Maple Grip + 1492181, # - Onyx Maple Shooter + 1522096, # - Pearl Maple Twin Angels + 1532100, # - Onyx Maple Cannon + 1542070, # - Scarlet Katana + 1552070 # - Onyx Maple Fan + +] + + +strBuyOptions = "What would you like to buy?#b\r\n#L0#Vampire Blood\r\n#L1#Onyx Maple Equips\r\n#L2#Onyx Maple Weapons\r\n#L3#Trade Maple Leaves for Experience " + +buyOptionsSelection = sm.sendSayOkay(strBuyOptions) +buyEquipSelection = -1 +buyEquipYesNo = -1 + +#========================== +# Vampire Blood +#========================== + +if buyOptionsSelection == 0: + answer = sm.sendAskNumber("How much #v2433559##bVampire Blood #kdo you wish to purchase?\r\n#r 500 #bMaple Leaves #kEach", 0, 1, 1000) + + totalCost = answer * 500 + + if sm.getQuantityOfItem(4001126) < totalCost: + sm.sendSayOkay("You do not have enough #v4001126##bMaple Leaves.") + sm.dispose() + + if not sm.canHold(2433559, answer): + sm.sendSayOkay("Please make sure you have room in your inventory.") + + else: + sm.consumeItemFromDiffStacks(4001126, totalCost) + sm.giveItem(2433559, answer) + sm.sendSayOkay("Enjoy your #v2433559##bVampire Blood #k!") + +#========================== +# EQUIPMENT +#========================== + +if buyOptionsSelection == 1: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemEquips: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemEquips[buyEquipSelection]) + "\r\n " +su.getItemImg(mapleLeafID)+" #b5000 \r\n "+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose() + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemEquips[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + + +#========================== +# WEAPONS +#========================== + +if buyOptionsSelection == 2: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemWeapons: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemWeapons[buyEquipSelection]) + " \r\n" +su.getItemImg(mapleLeafID)+" #b5000 \r\n"+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose(); + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemWeapons[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + +#========================== +# Trade Maple Leaves For Experience +#========================== + +if buyOptionsSelection == 3: + answer = sm.sendAskNumber("How many #v4001126##bMaple Leaves #kdo you wish to trade?", 0, 1, 1000) + + totalExp = answer * 35 # EXP Per Maple leaf. + totalQty = answer * 1 # Leaves Per EXP Tick. + + if sm.getQuantityOfItem(4001126) < totalQty: + sm.sendSayOkay("You do not have enough#v4001126##bMaple Leaves.\r\n#kYou only have#r#c4001126#\r\n.") + sm.dispose() + + else: + sm.consumeItemFromDiffStacks(4001126, totalQty) + sm.giveExp(totalExp) + sm.sendSayOkay("Thank you for the #v4001126##bMaple Leaves.\r\n#kEnjoy the experience!") \ No newline at end of file diff --git a/scripts/npc/1064017.py b/scripts/npc/1064017.py new file mode 100755 index 0000000..aaf069f --- /dev/null +++ b/scripts/npc/1064017.py @@ -0,0 +1,41 @@ +# Vellum NPC (1064017) | Used for the Root Abyss Quest Line + +VELLUM = 1064017 +if sm.hasQuest(30006): + sm.setSpeakerID(VELLUM) + sm.sendNext("Foolish creature! You dare challenge #rhis#k will?!") +else: + sm.dispose() + + + sm.setPlayerAsSpeaker() + sm.sendNext("What are you?!") + + sm.setSpeakerID(VELLUM) + sm.sendNext("#rHis#k majesty trusted me to be his Seal Guardian and YOU dare sully his plans. " + "I am called #bVellum#k. You will not live to remember it.") + + sm.setPlayerAsSpeaker() + sm.sendNext("Are you the one who put a seal on the World Tree?") + + sm.setSpeakerID(VELLUM) + sm.sendNext("The seal was #rhis majesty's#k idea. I am merely acting on his will.") + + sm.setPlayerAsSpeaker() + sm.sendNext("You keep saying #rhim#k. Are you talking about that demon with the eyepatch?") + + sm.setSpeakerID(VELLUM) + sm.sendNext("Silence! Your filthy mouth shall not even reference #rhis#k might!") + + sm.setPlayerAsSpeaker() + sm.sendNext("I'm not looking for a fight. The Demon Slayer is our ally. Why can't you just join us as well?") + + sm.setSpeakerID(VELLUM) + sm.sendNext("You dare put that filthy traitor on the same level as #rhim#k? I will grant your wish for a slow death!") + + sm.sendNext("I am but one of the four guardians. You stand no chance against any of us. " + "Accept your meaningless existence and leave to never return.") + + sm.warp(910700200, 0) # Quest Field (Colossal Root) + sm.lockInGameUI(False) + sm.dispose() diff --git a/scripts/npc/1082003.py b/scripts/npc/1082003.py new file mode 100755 index 0000000..5cf0183 --- /dev/null +++ b/scripts/npc/1082003.py @@ -0,0 +1,5 @@ +# Ralphio (1082003) | Gold Beach Resort +if sm.hasQuestCompleted(2964): + sm.sendSayOkay("Thank you so much for returning me my Ring! you got me out of a lot of trouble") +else: + sm.sendSayOkay("I wouldn't trust #p1082004#, he seems suspicious.") diff --git a/scripts/npc/1082004.py b/scripts/npc/1082004.py new file mode 100755 index 0000000..3cba329 --- /dev/null +++ b/scripts/npc/1082004.py @@ -0,0 +1,6 @@ +# Tofu (1082004) | Gold Beach Resort +if sm.hasQuestCompleted(2973): # [Gold Beach] Going Tribal : This is where Tofu's NPC changes from the native to the city guy + sm.sendSayOkay("Thank you for your help.") +else: + sm.sendSayOkay("Me Tofu. My tribe UgaUga own this Gold Beach.") + diff --git a/scripts/npc/1096001.py b/scripts/npc/1096001.py new file mode 100755 index 0000000..1ac4f5e --- /dev/null +++ b/scripts/npc/1096001.py @@ -0,0 +1,2 @@ +# Reiting (1096001) | +sm.sendSayOkay("I hate cleaning...") \ No newline at end of file diff --git a/scripts/npc/1103000.py b/scripts/npc/1103000.py new file mode 100755 index 0000000..0ff461e --- /dev/null +++ b/scripts/npc/1103000.py @@ -0,0 +1,2 @@ +# Dunamis (1103000) | +sm.sendSayOkay("Thank you so much...") diff --git a/scripts/npc/141000000_contimove.py b/scripts/npc/141000000_contimove.py new file mode 100755 index 0000000..bc0dfcf --- /dev/null +++ b/scripts/npc/141000000_contimove.py @@ -0,0 +1,5 @@ +# Puro (1511001) | Glacial Observatory +response = sm.sendAskYesNo("You want to head back to Rien?") + +if response: + sm.warp(140000000,0) diff --git a/scripts/npc/1512000.py b/scripts/npc/1512000.py new file mode 100755 index 0000000..53852bb --- /dev/null +++ b/scripts/npc/1512000.py @@ -0,0 +1,2 @@ +# Baby Penguin (1512000) | Barbara's House +sm.sendSayOkay("Tweep!") diff --git a/scripts/npc/1512001.py b/scripts/npc/1512001.py new file mode 100755 index 0000000..e884510 --- /dev/null +++ b/scripts/npc/1512001.py @@ -0,0 +1,2 @@ +# Baby Penguin (1512001) | Barbara's House +sm.sendSayOkay("Tweeeep!!") diff --git a/scripts/npc/1512002.py b/scripts/npc/1512002.py new file mode 100755 index 0000000..42f8ae0 --- /dev/null +++ b/scripts/npc/1512002.py @@ -0,0 +1,2 @@ +# Baby Malamute (1512002) | Barbara's House +sm.sendSayOkay("Grrr-ruff!") \ No newline at end of file diff --git a/scripts/npc/1512003.py b/scripts/npc/1512003.py new file mode 100755 index 0000000..979a306 --- /dev/null +++ b/scripts/npc/1512003.py @@ -0,0 +1,2 @@ +# Baby Malamute (1512003) | Barbara's House +sm.sendSayOkay("Ruff ruff?!") diff --git a/scripts/npc/1512004.py b/scripts/npc/1512004.py new file mode 100755 index 0000000..fdb5c31 --- /dev/null +++ b/scripts/npc/1512004.py @@ -0,0 +1,2 @@ +# Baby Seal (1512004) | Barbara's House +sm.sendSayOkay("Eooww?") diff --git a/scripts/npc/1512005.py b/scripts/npc/1512005.py new file mode 100755 index 0000000..a821b99 --- /dev/null +++ b/scripts/npc/1512005.py @@ -0,0 +1,2 @@ +# Baby Seal (1512005) | Barbara's House +sm.sendSayOkay("Arf arf!") diff --git a/scripts/npc/1530051.py b/scripts/npc/1530051.py new file mode 100755 index 0000000..fc1ea92 --- /dev/null +++ b/scripts/npc/1530051.py @@ -0,0 +1,25 @@ +sm.setSpeakerType(2) +sm.setParam(546) +sm.setColor(1) +sm.setSpeakerID(9000139) # Kitty +sm.setInnerOverrideSpeakerTemplateID(9000139) # Kitty +if sm.hasQuestCompleted(14256): + if sm.sendAskYesNo("Would you like to go to #bThe Celestial Halloween Party#k?"): + sm.warp(993034000) +else: + sm.sendNext("HEY! Hands off my cat she's very scared right now..") + sm.setParam(547) + sm.sendNext("what the heckie") + sm.setSpeakerType(2) + sm.setParam(546) + sm.setSpeakerID(9000139) + sm.sendNext("we're trapped here.. something dark is keeping the main doors locked and we don't know what to do..") + sm.setParam(547) + sm.sendNext("well maybe I could be of some help? will you let me pet that damn cat then?") + sm.setParam(546) + sm.setSpeakerID(9000139) + if sm.sendAskYesNo("I'll think about it.\r\nBut will you help us get out of this nightmare?"): + sm.sendNext("Thank u uwu") + else: + sm.sendNext("You don't have to be mean about it wtf? fine no kitty pets for you.") + diff --git a/scripts/npc/1530629.py b/scripts/npc/1530629.py new file mode 100755 index 0000000..da94d0a --- /dev/null +++ b/scripts/npc/1530629.py @@ -0,0 +1,22 @@ +#Snow Day Coin NPC + +sm.setSpeakerID(9010040) + +if sm.sendNext: + selection = sm.sendNext("The snowdrop events are happening now!\r\n#b" + "#L0#Get Snowdrop Coins\r\n" + "#L1#Spend Snowdrop Coins\r\n" + "#L2#Spend Event Coins\r\n") + + if selection == 0: + selection = sm.sendNext("Here you can find your progress regarding Snowdrop Coin daily challenges. Claim them all by simply clicking on one of the daily lines!\r\n" + chr.getAccount().getDailyStatusToNPC()) + if selection == 0: + #chr.getAccount().completeDaily(0) + chr.getAccount().claimDailies() + if selection == 1: + sm.invokeAfterDelay(1, "openShop", 9010040) + sm.dispose() + + if selection == 2: + sm.invokeAfterDelay(1, "openShop", 9010040) + sm.dispose() \ No newline at end of file diff --git a/scripts/npc/1540417.py b/scripts/npc/1540417.py new file mode 100755 index 0000000..0a93746 --- /dev/null +++ b/scripts/npc/1540417.py @@ -0,0 +1,8 @@ +# Quick Move Pokemon + +PCcafe = 193000000 + +if sm.getFieldID() == PCcafe: + sm.sendNext("I am not coded\r\n#b") +elif sm.sendAskYesNo("Would you like to be teleported to the Internet Cafe?\r\n#b"): + sm.warp(193000000) \ No newline at end of file diff --git a/scripts/npc/2011Halloween.py b/scripts/npc/2011Halloween.py new file mode 100755 index 0000000..b52aab6 --- /dev/null +++ b/scripts/npc/2011Halloween.py @@ -0,0 +1,11 @@ +sm.setSpeakerID(9000095) # Witchy Woman +sm.sendNext("Do you want to test your knowledge?") + +response = sm.sendAskYesNo("Let's get started shall we") + +if response == 1: + sm.setHintText("This is a hint") + sm.setAnswer("Yes") +else: + sm.sendNext("nvm") +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/2011Haloween.py b/scripts/npc/2011Haloween.py new file mode 100755 index 0000000..c895c38 --- /dev/null +++ b/scripts/npc/2011Haloween.py @@ -0,0 +1,78 @@ +import random + +items = [ + 1000015,1000014,1000013,1000012,1000011,1000010,1000009,1000008,1000007,1000006,1000005,1000004,1000003,1000002,1000001,1000000,1000031,1000030,1000029,1000028,1000027,1000026,1000024,1000023,1000022,1000021,1000020,1000019,1000018,1000017,1000016,1000046,1000045, +1000044,1000043,1000042,1000041,1000035,1000032,1000062,1000061,1000060,1000059,1000058,1000051,1000050,1000079,1000077,1000076,1000074,1000072,1000071,1000070,1000069,1000095,1000094,1000092,1000091,1000090,1000089,1000088,1000087,1000086,1000085,1000084,1000083, +1000082,1000081,1000080,1000111,1000109,1000108,1000107,1000106,1000105,1000104,1000103,1000102,1000101,1000100,1000099,1000097,1000096,1000113,1000112,1001007,1001006,1001005,1001004,1001003,1001002,1001001,1001000,1001023,1001022,1001021,1001020,1001019,1001018, +1001017,1001016,1001015,1001014,1001013,1001012,1001011,1001010,1001009,1001008,1001039,1001038,1001037,1001036,1001034,1001033,1001032,1001031,1001030,1001029,1001028,1001027,1001026,1001025,1001024,1001055,1001049,1001048,1001047,1001046,1001045,1001044,1001043, +1001042,1001041,1001040,1001071,1001070,1001069,1001068,1001066,1001065,1001064,1001063,1001062,1001061,1001058,1001087,1001085,1001084,1001083,1001082,1001077,1001076,1001075,1001103,1001101,1001100,1001099,1001098,1001097,1001095,1001094,1001093,1001092,1001091, +1001090,1001089,1001088,1001119,1001118,1001117,1001116,1001113,1001112,1001111,1001110,1001109,1001108,1001107,1001106,1001105,1001104,1001135,1001134,1001133,1001132,1001131,1001130,1001129,1001128,1001127,1001126,1001125,1001124,1001123,1001122,1001120,1002015, +1002000,1002031,1002018,1002032,1002079,1002078,1002077,1002076,1002071,1002070,1002191,1002190,1002189,1002188,1002187,1002186,1002206,1002205,1002204,1002203,1002202,1002201,1002200,1002199,1002198,1002197,1002196,1002195,1002194,1002193,1002192,1002223,1002222, +1002221,1002220,1002219,1002239,1002238,1002237,1002236,1002235,1002234,1002233,1002232,1002231,1002230,1002229,1002228,1002227,1002226,1002225,1002224,1002255,1002251,1002250,1002241,1002240,1002266,1002265,1002264,1002263,1002262,1002261,1002260,1002259,1002258, +1002257,1002256,1002280,1002279,1002303,1002302,1002301,1002300,1002299,1002298,1002297,1002296,1002295,1002294,1002293,1002292,1002291,1002290,1002319,1002318,1002317,1002316,1002315,1002314,1002313,1002312,1002311,1002310,1002309,1002308,1002307,1002306,1002305, +1002304,1002335,1002334,1002333,1002332,1002331,1002322,1002321,1002320,1002351,1002350,1002349,1002348,1002347,1002346,1002345,1002344,1002343,1002342,1002341,1002337,1002336,1002367,1002362,1002361,1002360,1002359,1002358,1002356,1002355,1002354,1002353,1002352, +1002376,1002375,1002374,1002373,1002372,1002371,1002370,1002369,1002368,1002397,1002396,1002389,1002388,1002387,1002386,1002385,1002384,1002415,1002414,1002413,1002412,1002411,1002410,1002409,1002431,1002429,1002428,1002427,1002426,1002423,1002422,1002421,1002420, +1002417,1002416,1002447,1002446,1002445,1002444,1002443,1002442,1002440,1002439,1002438,1002437,1002435,1002434,1002433,1002432,1002463,1002462,1002461,1002460,1002459,1002458,1002457,1002456,1002451,1002450,1002449,1002479,1002478,1002477,1002476,1002472,1002470, +1002469,1002468,1002467,1002466,1002465,1002464,1002495,1002493,1002491,1002490,1002489,1002488,1002487,1002486,1002485,1002484,1002482,1002481,1002480,1002507,1002506,1002505,1002504,1002503,1002502,1002501,1002500,1002499,1002498,1002497,1002496,1002526,1002525, +1002524,1002523,1002522,1002521,1002520,1002519,1002513,1002512,1002543,1002542,1002536,1002534,1002559,1002558,1002557,1002556,1002555,1002552,1002549,1002548,1002545,1002544,1002575,1002570,1002569,1002568,1002567,1002566,1002565,1002560,1002591,1002590,1002583, +1002582,1002576,1002607,1002605,1002599,1002598,1002597,1002596,1002594,1002593,1002592,1002609,1002608,1002654,1002653,1002650,1002667,1002666,1002665,1002661,1002660,1002679,1002678,1002674,1002673,1002672,1002703,1002701,1002700,1002698,1002697,1002696,1002695, +1002694,1002693,1002692,1002691,1002715,1002714,1002713,1002712,1002711,1002710,1002709,1002708,1002706,1002705,1002704,1002735,1002734,1002727,1002726,1002725,1002724,1002722,1002721,1002720,1002748,1002747,1002746,1002745,1002742,1002741,1002738,1002736,1002761, +1002760,1002759,1002756,1002755,1002754,1002753,1002752,1002775,1002774,1002771,1002770,1002796,1002785,1002784,1002811,1002804,1002803,1002831,1002824,1002823,1002822,1002821,1002820,1002847,1002846,1002845,1002844,1002843,1002842,1002840,1002839,1002837,1002836, +1002835,1002834,1002863,1002849,1002878,1002877,1002876,1002870,1002891,1002890,1002889,1002888,1002887,1002886,1002885,1002884,1002882,1002907,1002903,1002923,1002922,1002921,1002920,1002919,1002913,1002912,1002943,1002942,1002941,1002937,1002930,1002929,1002928, +1002957,1002956,1002955,1002954,1002953,1002952,1002951,1002950,1002945,1002944,1002975,1002974,1002973,1002970,1002969,1002968,1002967,1002962,1002961,1002960,1002987,1002985,1002984,1002983,1002979,1002978,1002976,1003006,1003005,1003001,1003000,1002999,1002998, +1002995,1003022,1003015,1003014,1003013,1003010,1003009,1003008,1003038,1003030,1003029,1003054,1003053,1003052,1003051,1003050,1003049,1003048,1003047,1003044,1003043,1003071,1003070,1003060,1003059,1003058,1003057,1003084,1003083,1003082,1003080,1003079,1003078, +1003077,1003074,1003072,1003103,1003101,1003092,1003089,1003109,1003135,1003133,1003132,1003131,1003130,1003123,1003122,1003121,1003120,1003149,1003148,1003147,1003146,1003145,1003144,1003141,1003136,1003163,1003161,1003182,1003171,1003170,1003196,1003194,1003193, +1003192,1003187,1003186,1003185,1003215,1003214,1003211,1003210,1003208,1003207,1003204,1003203,1003202,1003226,1003223,1003222,1003221,1003220,1003218,1003217,1003216,1003247,1003241,1003240,1003239,1003238,1003237,1003235,1003234,1003233,1003232,1003263,1003256, +1003255,1003254,1003253,1003252,1003251,1003250,1003249,1003279,1003278,1003277,1003276,1003272,1003271,1003269,1003268,1003265,1003264,1003295,1003358,1003357,1003356,1003355,1003354,1003353,1003352,1003368,1003367,1003362,1003390,1003387,1003386,1003377,1003376, +1003404,1003403,1003402,1003401,1003400,1003399,1003398,1003393,1003392,1003422,1003421,1003417,1003416,1003463,1003462,1003461,1003460,1003459,1003487,1003486,1003485,1003484,1003483,1003482,1003503,1003496,1003495,1003494,1003493,1003492,1003490,1003489,1003519, +1003518,1003517,1003516,1003510,1003509,1003508,1003506,1003505,1003504,1003533,1003532,1003531,1003520,1003549,1003548,1003547,1003546,1003545,1003544,1003543,1003542,1003541,1003539,1003538,1003536,1003560,1003559,1003597,1003596,1003595,1003594,1003588,1003587, +1003586,1003626,1003643,1003642,1003641,1003640,1003639,1003636,1003658,1003657,1003656,1003655,1003654,1003673,1003672,1003671,1003670,1003669,1003668,1003667,1003666,1003688,1003687,1003686,1003685,1003684,1003683,1003682,1003681,1003711,1003710,1003709,1003708, +1003707,1003706,1003705,1003704,1003703,1003702,1003701,1003700,1003699,1003727,1003714,1003713,1003712,1003743,1003742,1003739,1003738,1003737,1003736,1003735,1003730,1003729,1003728,1003759,1003756,1003750,1003749,1003775,1003763,1003761,1003760,1003790,1003789, +1003779,1003778,1003777,1003776,1003807,1003804,1003803,1003802,1003792,1003820,1003819,1003818,1003817,1003816,1003815,1003809,1003808,1003839,1003838,1003837,1003836,1003831,1003830,1003829,1003827,1003826,1003825,1003855,1003853,1003852,1003851,1003850,1003849, +1003848,1003847,1003846,1003845,1003844,1003843,1003842,1003867,1003865,1003862,1003861,1003860,1003859,1003884,1003883,1003882,1003881,1003878,1003877,1003876,1003875,1003874,1003873,1003903,1003902,1003901,1003900,1003899,1003897,1003892,1003890,1003889,1003919, +1003918,1003917,1003915,1003914,1003913,1003912,1003910,1003909,1003907,1003906,1003905,1003904,1003935,1003934,1003920,1003951,1003950,1003949,1003948,1003945,1003944,1003943,1003942,1003941,1003940,1003937,1003936,1003967,1003966,1003965,1003964,1003963,1003962, +1003958,1003957,1003955,1003954,1003953,1003952,1003975,1003972,1003971,1003968,1003998,1004015,1004014,1004004,1004003,1004002,1004001,1004000,1004029,1004028,1004027,1004026,1004024,1004018,1004017,1004016,1004047,1004046,1004045,1004044,1004043,1004042,1004041, +1004040,1004039,1004038,1004036,1004035,1004034,1004059,1004048,1004074,1004073,1004094,1004093,1004092,1004091,1004090,1004089,1004088,1004081,1004111,1004110,1004109,1004108,1004106,1004099,1004126,1004125,1004124,1004123,1004122,1004120,1004117,1004113,1004143, +1004142,1004141,1004140,1004139,1004137,1004136,1004158,1004157,1004156,1004148,1004147,1004146,1004145,1004144,1004175,1004171,1004170,1004169,1004168,1004167,1004166,1004165,1004164,1004191,1004190,1004181,1004180,1004179,1004178,1004177,1004176,1004205,1004204, +1004203,1004202,1004201,1004200,1004199,1004198,1004197,1004195,1004194,1004193,1004192,1004213,1004212,1004211,1004209,1004239,1004254,1004253,1004252,1004251,1004250,1004269,1004268,1004285,1004284,1004283,1004282,1004281,1004279,1004276,1004275,1004303,1004302 +,1004301,1004299,1004298,1004296,1004295,1004294,1004319,1004318,1004317,1004316,1004315,1004314,1004313,1004312,1004311,1004310,1004309,1004308,1004307,1004306,1004305,1004304,1004332,1004329,1004328,1004327,1004326,1004325,1004324,1004323,1004322,1004321,1004320, +1004343,1004342,1004341,1004340,1004339,1004338,1004337,1004336,1004399,1004398,1004397,1004396,1004395,1004394,1004393,1004386,1004385,1004384,1004414,1004413,1004411,1004408,1004407,1004406,1004405,1004403,1004402,1004401,1004400,1004431,1004430,1004429,1004428, +1004419,1004418,1004417,1004416,1004447,1004446,1004445,1004443,1004442,1004441,1004440,1004439,1004438,1004434,1004433,1004432,1004463,1004462,1004461,1004460,1004459,1004458,1004456,1004455,1004454,1004453,1004450,1004448,1004479,1004478,1004472,1004471,1004470, +1004469,1004468,1004467,1004490,1004489,1004488,1004487,1004486,1004483,1004482,1004480,1004511,1004510,1004508,1004506,1004505,1004504,1004503,1004502,1004501,1004500,1004499,1004527,1004526,1004525,1004524,1004515,1004513,1004512,1004543,1004541,1004540,1004539, +1004538,1004537,1004536,1004535,1004534,1004533,1004532,1004530,1004528,1004559,1004558,1004557,1004548,1004547,1004546,1004545,1004544,1004575,1004574,1004571,1004570,1004569,1004568,1004566,1004565,1004564,1004563,1004562,1004561,1004560,1004591,1004590,1004589, +1004581,1004580,1004578,1004577,1004576,1004603,1004602,1004601,1004600,1004599,1004598,1004597,1004592,1004620,1004619,1004618,1004614,1004613,1004612,1004610,1004609,1004639,1004638,1004636,1004635,1004634,1004633,1004627,1004648,1004646,1004645,1004643,1004642, +1004641,1004640,1004671,1004665,1004662,1004661,1004660,1004659,1004687,1004686,1004685,1004684,1004683,1004682,1004681,1004680,1004679,1004678,1004677,1004676,1004673,1004672,1004703,1004702,1004701,1004700,1004698,1004697,1004694,1004693,1004692,1004691,1004690, +1004689,1004688,1004718,1004717,1004716,1004714,1004713,1004712,1004711,1004708,1004706,1004734,1004733,1004732,1004731,1004730,1004729,1004728,1004727,1004726,1004725,1004724,1004723,1004722,1004721,1004720,1004751,1004750,1004749,1004748,1004747,1004739,1004738, +1004737,1004763,1004762,1004761,1004760,1004759,1004758,1004757,1004756,1004754,1004753,1004752,1004779,1004778,1004777,1004776,1004775,1004774,1004799,1004798,1004797,1004796,1004795,1004794,1004793,1004792,1004791,1004790,1004789,1004788,1004787,1004815,1004814, +1004813,1004807,1004806,1004805,1004804,1004803,1004802,1004801,1004800,1004831,1004830,1004829,1004828,1004827,1004826,1004825,1004824,1004823,1004821,1004820,1004819,1004818,1004817,1004816,1004847,1004846,1004845,1004844,1004843,1004842,1004841,1004840,1004839, +1004835,1004834,1004833,1004832,1004863,1004862,1004861,1004860,1004859,1004858,1004857,1004856,1004855,1004854,1004853,1004852,1004851,1004850,1004849,1004848,1004879,1004878,1004877,1004876,1004875,1004874,1004873,1004872,1004871,1004870,1004869,1004868,1004867 +,1004866,1004865,1004895,1004894,1004893,1004892,1004891,1004890,1004889,1004888,1004887,1004885,1004884,1004883,1004882,1004881,1004880,1004911,1004910,1004909,1004900,1004899,1004898,1004897,1004927,1004926,1004925,1004924,1004923,1004922,1004921,1004920,1004919, +1004916,1004912,1004942,1004941,1004940,1004939,1004938,1004937,1004936,1004935,1004934,1004933,1004932,1004931,1004930,1004929,1004928,1004959,1004958,1004957,1004956,1004955,1004954,1004953,1004952,1004951,1004950,1004949,1004948,1004947,1004946,1004945,1004975, +1004974,1004973,1004972,1004971,1004970,1004969,1004968,1004967,1004966,1004965,1004964,1004961,1004991,1004989,1004988,1004987,1004985,1004984,1004983,1004982,1004981,1004980,1004978,1004977,1004976,1005007,1005006,1005005,1005004,1005003,1005002,1005001,1005000, +1004999,1004998,1004997,1004996,1004995,1004994,1004993,1004992,1005023,1005022,1005021,1005020,1005019,1005018,1005017,1005016,1005015,1005014,1005013,1005012,1005011,1005010,1005009,1005008,1005039,1005038,1005037,1005036,1005035,1005034,1005033,1005032,1005027, +1005026,1005025,1005024,1005055,1005054,1005053,1005052,1005051,1005050,1005049,1005048,1005047,1005046,1005045,1005044,1005043,1005042,1005041,1005040,1005071,1005070,1005069,1005068,1005067,1005066,1005065,1005064,1005063,1005062,1005061,1005060,1005058,1005057, +1005056,1005087,1005086,1005085,1005084,1005083,1005082,1005081,1005080,1005079,1005078,1005077,1005076,1005075,1005074,1005073,1005072,1005103,1005102,1005101,1005100,1005099,1005098,1005097,1005096,1005095,1005094,1005093,1005092,1005091,1005090,1005089,1005088, +1005119,1005118,1005117,1005116,1005115,1005114,1005113,1005112,1005111,1005110,1005135,1005134,1005131,1005130,1005129,1005128,1005127,1005126,1005125,1005124,1005123,1005122,1005121,1005120,1005151,1005150,1005149,1005145,1005144,1005143,1005142,1005141,1005140, +1005139,1005138,1005137,1005136,1005167,1005166,1005164,1005163,1005162,1005161,1005160,1005159,1005158,1005157,1005156,1005155,1005154,1005153,1005152,1005183,1005182,1005181,1005180,1005179,1005178,1005177,1005176,1005174,1005173,1005172,1005171,1005170,1005169, +1005168,1005195,1005194,1005193,1005192,1005190,1005189,1005188,1005187,1005186,1005185,1005184,1005212,1005211,1005210,1005209,1005208,1005207,1005206,1005205,1005204,1005203,1005231,1005228,1005224,1005223,1005222,1005221,1005220,1005219,1005218,1005217,1005247, +1005246,1005245,1005244,1005243,1005239,1005238,1005237,1005236,1005235,1005234,1005233,1005232,1005263,1005262,1005261,1005260,1005259,1005258,1005257,1005256,1005255,1005254,1005253,1005252,1005279,1005278,1005277,1005276,1005275,1005274,1005273,1005272,1005271, +1005270,1005269,1005268,1005267,1005295,1005294,1005293,1005292,1005291,1005290,1005289,1005288,1005287,1005286,1005285,1005284,1005283,1005281,1005280,1005311,1005310,1005309,1005308,1005307,1005301,1005300,1005299,1005298,1005297,1005296,1005327,1005326,1005325, +1005324,1005323,1005322,1005320,1005319,1005318,1005317,1005316,1005315,1005314,1005312,1005342,1005341,1005340,1005339,1005338,1005337,1005336,1005335,1005334,1005333,1005330,1005329,1005328,1005358,1005357,1005356,1005355,1005354,1005353,1005352,1005375,1005374, +1005373,1005372,1005371,1005370,1005369,1005368,1005367,1005366,1005365,1005364,1005363,1005362,1005361,1005391,1005388,1005387,1005386,1005381,1005380,1005379,1005378,1005407,1005406,1005405,1005404,1005403,1005402,1005401,1005400,1005399,1005398,1005397,1005395, +1005394,1005393,1005392,1005423,1005422,1005421,1005420,1005419,1005418,1005417,1005416,1005415,1005414,1005413,1005412,1005411,1005410,1005409,1005408,1005439,1005438,1005437,1005436,1005435,1005434,1005433,1005432,1005431,1005430,1005429,1005428,1005427,1005426, +1005425,1005424,1005455,1005447,1005446,1005445,1005444,1005443,1005442,1005441,1005440,1005471,1005470,1005469,1005468,1005467,1005466,1005465,1005464,1005463,1005462,1005461,1005460,1005459,1005458,1005457,1005456,1005487,1005486,1005483,1005482,1005481,1005480, +1005479,1005478,1005477,1005476,1005475,1005474,1005473,1005472,1005502,1005501,1005500,1005499,1005498,1005496,1005495,1005493,1005492,1005490,1005489,1005488,1005514,1005513,1005511,1005510,1005509,1005508,1005507,1005506,1005505,1005504,1005535,1005534,1005533, +1005532,1005531,1005530,1005529,1005528,1005527,1005526,1005525,1005524,1005523,1005522,1005521,1005551,1005550,1005549,1005548,1005547,1005546,1005545,1005544,1005543,1005542,1005541,1005540,1005539,1005538,1005537,1005536,1005566,1005565,1005564,1005563,1005562, +1005561,1005560,1005559,1005558,1005555,1005554,1005583,1005582,1005581,1005579,1005578,1005577,1005576,1005575,1005598,1005597,1005596,1005595,1005594,1005593,1005592,1005591,1005588,1005587,1005586,1005585,1005584,1005600,1005618,1005617,1005616,1005658,1005656, +1005655,1005654,1005653,1005652,1005651,1005650,1005649,1005669,1005668,1005667,1005666,1005665,1005664 +] + + +question = sm.sendAskYesNo("#eWould you like to spend #r2k NX#n #efor a random #bHat?") +randitem = random.choice(items) +if question and sm.canHold(randitem) and chr.getUser().getNxPrepaid() >= 2000: + sm.giveItem(randitem) + sm.deductNX(-2000) +else: + sm.sendNext("#e#dYour inventory is full or you don't have enough NX.") + \ No newline at end of file diff --git a/scripts/npc/2041016.py b/scripts/npc/2041016.py new file mode 100755 index 0000000..f273d92 --- /dev/null +++ b/scripts/npc/2041016.py @@ -0,0 +1,70 @@ +from net.swordie.ms.enums import InvType + +eeScroll=0 +listitem = [] +itemID = [] +newlist = [] +selection = sm.sendNext("#e#n \r\n \r\n Hey #h #. I am in charge of Equip Enchancing. Please choose of the options below: \r\n \r\n \r\n#b#L1#Use Equip Enchancement.#l \r\n#L0##bUse Sccisors of Karma#l \r\n#L2#Restore Equipment Trace.#l") +if selection == 0: + selection = sm.sendNext("Please choose what you would like to do:\r\n\r\n#L0##bApply Scissor of Karama for certain item.#l\r\n#L1#Apply Scissors of Karma for all available equips(4,000 NX per equip).#l"); + if selection == 0: + newlist = [] + listitem = eval(sm.getScissorEquips()) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP)) + newlist.append('#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("No equips to scissor") + sm.dispose() + selection = sm.sendNext(''.join(newlist)) + itemToScissor = str(sm.getItemIDByBagIndex(selection, InvType.EQUIP)) + if sm.sendAskAccept("You have selected #v"+itemToScissor+"# #e #t"+itemToScissor+"##n. This will cost 4,000 NX.#"): + sm.applyScissor(selection) + elif selection == 1: + sm.applyScissorToAll() +elif selection == 1: + newlist = [] + listitem = eval(sm.getAllEEScrolls()) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.CONSUME)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("You do not have any equip enhancement scrolls.") + sm.dispose() + eeScroll = sm.sendNext(''.join(newlist)) + newlist = [] + itemID = [] + listitem = eval(sm.getEquipsForEE()) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("No equips to enhance") + sm.dispose() + selection = sm.sendNext(''.join(newlist)) + if sm.isEqpEligibleForAddedChance(selection) > 0: + selectionNX = sm.sendNext("Added chance.\r\nThis will multiply your chances of succeeding by #1.5x#n.\r\n#L0#Do not add extra chance#l\r\n#L1#Increase chance (Cost: #e"+str(sm.isEqpEligibleForAddedChance(selection))+"#n NX)#l") + if selectionNX == 0: + sm.EnchantItem(selection, eeScroll, selection, 0) + elif selectionNX == 1: + sm.EnchantItem(selection, eeScroll, selection, 1) + else: + sm.EnchantItem(selection, eeScroll, selection, 0) + +elif selection == 2: + newlist = [] + listitem = eval(sm.getEquipmentTracesByIndex()) + for x in range(len(listitem)): + item = sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP) + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP)) + newlist.append('#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("No equips to restore") + sm.dispose() + selection = sm.sendNext(''.join(newlist)) + itemToRestore = str(sm.getItemIDByBagIndex(selection, InvType.EQUIP)) + if sm.sendAskAccept("You have selected #v"+itemToRestore+"# #e #t"+itemToRestore+"##n. This will cost TBD NX.#"): + sm.restoreEquipTrace(selection) \ No newline at end of file diff --git a/scripts/npc/2091012.py b/scripts/npc/2091012.py new file mode 100755 index 0000000..86bc728 --- /dev/null +++ b/scripts/npc/2091012.py @@ -0,0 +1,241 @@ +from net.swordie.ms.constants import ItemConstants + +# Lao (2091012) | Mu Lung Dojo Hall + +# Dojo Array Start + +itemsDojo = [ + [5062500,5062006,2070018,2046897], + [2431174,2433808,4001832,4310015,4021031,2502000,2430692,2022740,2022741,2022742,2022743,2022744,2022745,2022794,2022795,2022796,2022797,2022798,2022799,3700080,3700096,3010425,3700049,5220000,5220100,3010412,3010521], + [1002790,1002791,1002792,1002793,1002794,1052160,1052161,1052162,1052163,1052164,1072361,1072362,1072363,1072364,1072365,1082239,1082240,1082241,1082242,1082243], + [1212012,1222012,1232012,1242012,1252012,1312038,1322061,1332075,1332076,1342012,1362017,1372045,1382059,1402047,1412034,1422038,1432049,1442067,1452059,1462051,1472071,1482024,1492025,1522016,1532016,1542012,1552057], + [1002776,1002777,1002778,1002779,1002780,1032031,1052155,1052156,1052157,1052158,1052159,1072356,1072357,1072358,1072359,1072360,1082234,1082235,1082236,1082237,1082238,1092057,1092058,1092059,1122012], + [1212011,1222011,1232011,1242011,1252011,1312037,1322060,1332074,1332075,1342011,1362016,1372044,1382057,1402046,1412033,1422037,1432047,1442063,1452057,1462050,1472068,1482023,1492023,1522015,1532015,1542013,1552013], + [1003280,1003281,1003282,1003283,1003284,1052374,1052375,1052376,1052377,1052378,1072544,1072545,1072546,1072547,1072548,1082328,1082329,1082330,1082331,1082332], + [1212017,1222017,1232017,1242017,1252018,1302173,1312072,1322107,1332148,1332149,1342040,1362022,1372100,1382124,1402111,1412071,1422073,1432099,1442136,1452129,1462118,1472141,1482102,1492101,1522020,1532037,1542033,1552033], + [1003285,1003286,1003287,1003288,1003289,1032108,1052379,1052380,1052381,1052382,1052383,1072549,1072550,1072551,1072552,1072553,1082333,1082334,1082335,1082336,1082337,1092092,1092093,1092094,1122148], + [1212018,1222018,1232018,1242018,1252022,1302174,1312073,1322108,1332150,1332151,1342041,1362023,1372101,1382125,1402112,1412072,1422074,1432100,1442137,1452130,1462119,1472142,1482103,1492102,1522021,1532038,1542034,1552034], +] + +costDojoPoints = [ + [400000,400000,100000,2000000], + [20000,400000,5000,100000,50000,8000,15000,7000,7000,7000,7000,7000,7000,35000,35000,35000,35000,35000,35000,5000000,12000000,50000000,100000000,20000,400000,100000000,500000000], + [100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000,100000], + [250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000,250000], + [125000,125000,125000,125000,125000,200000,125000,125000,125000,125000,125000,125000,125000,125000,125000,125000,125000,125000,125000,125000,125000,100000,100000,100000,250000], + [500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000,500000], + [175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000,175000], + [750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000,750000], + [200000,200000,200000,200000,200000,240000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,200000,150000,150000,150000,400000], + [1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000,1000000], +] + +# Dojo Array Finish + +dojoHall = 925020001 + +if sm.getFieldID() == dojoHall: + selection = sm.sendNext("My master is the strongest person in Mu Lung. His challenges grant Dojo Points Which you can spend here.\r\nYou currently have #r"+ str(sm.getDojoPoints()) +" #bDojo Points\r\n#b" + "#L0#Trade a Bamboo Luck Sack for 1,000,000 Dojo Points.#l\r\n" + "#L1#Trade 1,000,000 Dojo Points for a Bamboo Luck Sack.#l\r\n" + "#L2#Spend Dojo Points.#l\r\n") + + if selection == 0: + answer = sm.sendAskNumber("How many #b#v 3993002 # #t 3993002 #(s)#k #kdo you wish purchase?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1000000 + + if sm.getDojoPoints() <= totalQty: + sm.sendSayOkay("You do not have enough #bDojo Points#k.") + sm.dispose() + + else: + sm.deductDojoPoints(totalQty) + sm.giveItem(3993002, Total) + sm.sendSayOkay("Thank you for your purchase!\r\nYou have #r"+ str(sm.getDojoPoints()) +"#b Dojo Points#k left.") + sm.dispose() + + if selection == 1: + answer = sm.sendAskNumber("How many #b#v 3993002 # #t 3993002 #(s)#k #kdo you wish sell?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1000000 + + + if not sm.hasItem(3993002, Total): + sm.sendSayOkay("You do not have enough #b#v 3993002 # #t 3993002 #(s)#k.") + sm.dispose() + + else: + sm.consumeItem(3993002, Total) + sm.giveDojoPoints(totalQty) + sm.sendSayOkay("Thank you for your purchase!\r\nYou now have #r"+ str(sm.getDojoPoints()) +"#b Dojo Points#k.") + sm.dispose() + + if selection == 2: + + selection1 = sm.sendNext("Which category of items would you like to purchase from?\r\nYou currently have #r"+ str(sm.getDojoPoints()) +" #bDojo Points\r\n" + "#L0#Useables.#l\r\n" + "#L1#Other.#l\r\n" + "#L2#Reverse Armors.#l\r\n" + "#L3#Reverse Weapons.#l\r\n" + "#L4#Timeless Armors.#l\r\n" + "#L5#Timeless Weapons.#l\r\n" + "#L6#Abyss Armors.#l\r\n" + "#L7#Abyss Weapons.#l\r\n" + "#L8#Fearless Armors.#l\r\n" + "#L9#Fearless Weapons.#l\r\n") + + listStr = "What item would you like to purchase? #b" + + i = 0 + + while i < len(itemsDojo[selection1]): + listStr += "\r\n#L" + str(i) + "##v" + str(itemsDojo[selection1][i]) + "#" "#z" + str(itemsDojo[selection1][i]) + "# #r(" + str(costDojoPoints[selection1][i]) + " Dojo Points)#b" + + i += 1 + + selection2 = sm.sendNext(listStr) + + if selection1 == 0 or selection1 == 1: + materialStr = "So you want #b#v" + str(itemsDojo[selection1][selection2]) + "##z" + str(itemsDojo[selection1][selection2]) + "#s? \r\n #kThat will cost you.\r\n" + + else: + materialStr = "So you want a #b#v" + str(itemsDojo[selection1][selection2]) + "##z" + str(itemsDojo[selection1][selection2]) + "#? \r\n#kThat will cost you.\r\n" + + i = 0 + + if costDojoPoints[selection1][selection2] > 0: + materialStr += "\r\n#i4001620# #r" + str(costDojoPoints[selection1][selection2]) + " #bDojo Points" + + if (selection1 == 0 or selection1 == 1) and not ItemConstants.isThrowingItem(itemsDojo[selection1][selection2]): + sm.chat("a") + materialStr += "\r\n\r\nHow many do you wish to purchase?" + amount = sm.sendAskNumber(materialStr, 1, 1, 50000) + + TotalCost = (amount * costDojoPoints[selection1][selection2]) + TotalQty = amount + + if sm.getDojoPoints() <= TotalCost: + sm.sendSayOkay("I'm afraid you cannot afford this purchase.") + sm.dispose() + + else: + if not sm.canHold(itemsDojo[selection1][selection2]): + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + + else: + i = 0 + if costDojoPoints[selection1][selection2] > 0: + sm.deductDojoPoints(TotalCost) + sm.giveItem(itemsDojo[selection1][selection2], TotalQty) + sm.sendSayOkay("Come and see me if you need anything else.") + + else: + response = sm.sendAskYesNo(materialStr) + + + + if sm.getDojoPoints() <= costDojoPoints[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford this purchase.") + sm.dispose() + + else: + if not sm.canHold(itemsDojo[selection1][selection2]): + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + + else: + i = 0 + if costDojoPoints[selection1][selection2] > 0: + sm.deductDojoPoints(costDojoPoints[selection1][selection2]) + sm.giveItem(itemsDojo[selection1][selection2]) + sm.sendSayOkay("Come and see me if you need anything else.") + +elif sm.sendNext: + selection = sm.sendNext("Hey there would you like to come try your luck at Mu Lung Dojo?\r\n#b" + "#L0#Yes, Teleport me to Dojo now.#l\r\n" + "#L1#No, I would like to purchase something.#l\r\n") + if selection == 0: # + sm.warp(925020001) + if selection == 1: + + selection1 = sm.sendNext("Which category of items would you like to purchase from?\r\nYou currently have #r"+ str(sm.getDojoPoints()) +" #bDojo Points\r\n" + "#L0#Useables.#l\r\n" + "#L1#Other.#l\r\n" + "#L2#Reverse Armors.#l\r\n" + "#L3#Reverse Weapons.#l\r\n" + "#L4#Timeless Armors.#l\r\n" + "#L5#Timeless Weapons.#l\r\n" + "#L6#Abyss Armors.#l\r\n" + "#L7#Abyss Weapons.#l\r\n" + "#L8#Fearless Armors.#l\r\n" + "#L9#Fearless Weapons.#l\r\n") + + listStr = "What item would you like to purchase? #b" + + i = 0 + + while i < len(itemsDojo[selection1]): + listStr += "\r\n#L" + str(i) + "##v" + str(itemsDojo[selection1][i]) + "#" "#z" + str(itemsDojo[selection1][i]) + "# #r(" + str(costDojoPoints[selection1][i]) + " Dojo Points)#b" + + i += 1 + + selection2 = sm.sendNext(listStr) + + if selection1 == 0 or selection1 == 1: + materialStr = "So you want #b#v" + str(itemsDojo[selection1][selection2]) + "##z" + str(itemsDojo[selection1][selection2]) + "#s? \r\n #kThat will cost you.\r\n" + + else: + materialStr = "So you want a #b#v" + str(itemsDojo[selection1][selection2]) + "##z" + str(itemsDojo[selection1][selection2]) + "#? \r\n#kThat will cost you.\r\n" + + i = 0 + + if costDojoPoints[selection1][selection2] > 0: + materialStr += "\r\n#i4001620# #r" + str(costDojoPoints[selection1][selection2]) + " #bDojo Points" + + if selection1 == 0 or selection1 == 1: + materialStr += "\r\n\r\nHow many do you wish to purchase?" + amount = sm.sendAskNumber(materialStr, 1, 1, 50000) + + TotalCost = (amount * costDojoPoints[selection1][selection2]) + TotalQty = amount + + if sm.getDojoPoints() <= TotalCost: + sm.sendSayOkay("I'm afraid you cannot afford this purchase.") + sm.dispose() + + else: + if not sm.canHold(itemsDojo[selection1][selection2]): + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + + else: + i = 0 + if costDojoPoints[selection1][selection2] > 0: + sm.deductDojoPoints(TotalCost) + sm.giveItem(itemsDojo[selection1][selection2], TotalQty) + sm.sendSayOkay("Come and see me if you need anything else.") + + else: + response = sm.sendAskYesNo(materialStr) + + + + if sm.getDojoPoints() <= costDojoPoints[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford this purchase.") + sm.dispose() + + else: + if not sm.canHold(itemsDojo[selection1][selection2]): + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + + else: + i = 0 + if costDojoPoints[selection1][selection2] > 0: + sm.deductDojoPoints(costDojoPoints[selection1][selection2]) + sm.giveItem(itemsDojo[selection1][selection2]) + sm.sendSayOkay("Come and see me if you need anything else.") diff --git a/scripts/npc/2121012.py b/scripts/npc/2121012.py new file mode 100755 index 0000000..850d3af --- /dev/null +++ b/scripts/npc/2121012.py @@ -0,0 +1,15 @@ +sm.setSpeakerID(9400534) # Goddess Avaracia +sm.sendNext("Are you ready to begin?") + +sm.setPlayerAsSpeaker() # Player +sm.sendNext("What are you talking about? Who are you?") + +sm.setSpeakerID(9400534) # Goddess Avaracia +response = sm.sendAskYesNo("There isn't much time to explain, will you help me?") + +if response == 1: + sm.sendNext("Please go eliminate 100 #r#o9390010##k, They need to be dealt with.") + sm.startQuest(14524) +else: + sm.sendSayOkay("I guess you aren't up for the task") +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/2159481.py b/scripts/npc/2159481.py new file mode 100755 index 0000000..7a418c1 --- /dev/null +++ b/scripts/npc/2159481.py @@ -0,0 +1,61 @@ +import random + +items = [1050004,1050012,1050013,1050014,1050015,1050032,1050033,1050034,1050040,1050041,1050042,1050043,1050044,1050016,1050017,1050019,1050020,1050065,1050066,1050071,1050079,1050050,1050057,1050101,1050109,1050110,1050111,1050084,1050085,1050086,1050087,1050128, +1050129,1050135,1050136,1050137,1050138,1050139,1050140,1050141,1050142,1050143,1050112,1050113,1050114,1050115,1050116,1050117,1050118,1050119,1050120,1050121,1050122,1050123,1050124,1050125,1050126,1050160,1050161,1050168,1050170,1050171,1050145,1050146,1050147, +1050148,1050152,1050153,1050154,1050156,1050157,1050158,1050159,1050193,1050177,1050178,1050179,1050186,1050187,1050188,1050190,1050226,1050227,1050228,1050229,1050232,1050234,1050235,1050208,1050209,1050210,1050215,1050220,1050221,1050256,1050241,1050242,1050246, +1050247,1050248,1050255,1050291,1050292,1050293,1050296,1050297,1050298,1050299,1050300,1050301,1050302,1050303,1050283,1050284,1050285,1050321,1050322,1050335,1050304,1050305,1050310,1050311,1050312,1050314,1050315,1050316,1050318,1050319,1050353,1050354,1050355, +1050356,1050359,1050360,1050361,1050362,1050364,1050365,1050366,1050367,1050336,1050337,1050338,1050339,1050340,1050341,1050343,1050346,1050351,1050384,1050385,1050386,1050387,1050388,1050389,1050390,1050391,1050392,1050393,1050394,1050395,1050396,1050397,1050398, +1050399,1050368,1050370,1050371,1050372,1050373,1050375,1050376,1050377,1050378,1050380,1050381,1050382,1050383,1050416,1050417,1050418,1050419,1050420,1050421,1050422,1050423,1050424,1050426,1050427,1050428,1050429,1050430,1050431,1050400,1050401,1050402,1050403, +1050404,1050405,1050406,1050407,1050408,1050409,1050410,1050411,1050412,1050413,1050414,1050415,1050451,1050452,1050453,1050454,1050455,1050456,1050461,1050462,1050463,1050432,1050433,1050434,1050435,1050436,1050437,1050438,1050439,1050440,1050441,1050442,1050443, +1050444,1050445,1050446,1050447,1050480,1050481,1050482,1050484,1050485,1050486,1050487,1050488,1050489,1050491,1050492,1050493,1050495,1050464,1050468,1050469,1050470,1050471,1050472,1050473,1050474,1050475,1050476,1050477,1050478,1050479,1050512,1050513,1050514, +1050515,1050516,1050517,1050518,1050519,1050520,1050521,1050522,1050523,1050524,1050525,1050526,1050496,1050497,1050498,1050499,1050500,1050502,1050503,1050504,1050505,1050506,1050507,1050508,1050509,1050510,1050511,1050544,1050545,1050546,1050547,1050548,1050549, +1050550,1050551,1050552,1050553,1050554,1050555,1050556,1050557,1050558,1050559,1050528,1050530,1050531,1050532,1050533,1050534,1050535,1050536,1050537,1050538,1050539,1050541,1050542,1050543,1050560,1050561,1051002,1051028,1051029,1051035,1051036,1051018,1051019, +1051020,1051021,1051022,1051059,1051060,1051061,1051070,1051071,1051040,1051048,1051049,1051050,1051051,1051088,1051089,1051099,1051100,1051072,1051073,1051074,1051075,1051076,1051081,1051086,1051087,1051120,1051121,1051122,1051123,1051124,1051125,1051126,1051127, +1051128,1051129,1051130,1051131,1051132,1051133,1051134,1051135,1051108,1051109,1051110,1051111,1051112,1051113,1051114,1051115,1051116,1051117,1051118,1051119,1051154,1051155,1051156,1051157,1051158,1051159,1051160,1051161,1051162,1051163,1051164,1051166,1051167, +1051136,1051137,1051138,1051139,1051141,1051142,1051143,1051144,1051145,1051146,1051147,1051148,1051149,1051185,1051188,1051189,1051190,1051192,1051193,1051195,1051196,1051197,1051198,1051169,1051170,1051171,1051173,1051174,1051175,1051176,1051179,1051180,1051182, +1051183,1051218,1051219,1051220,1051221,1051227,1051228,1051229,1051231,1051200,1051206,1051208,1051209,1051211,1051212,1051252,1051253,1051254,1051255,1051256,1051261,1051262,1051232,1051233,1051235,1051238,1051280,1051282,1051284,1051285,1051290,1051292,1051294, +1051295,1051264,1051265,1051270,1051271,1051276,1051277,1051278,1051279,1051312,1051296,1051297,1051301,1051302,1051304,1051311,1051345,1051347,1051348,1051349,1051350,1051351,1051352,1051357,1051358,1051359,1051332,1051333,1051376,1051382,1051383,1051384,1051385, +1051386,1051387,1051389,1051390,1051391,1051362,1051363,1051365,1051366,1051367,1051368,1051369,1051370,1051371,1051372,1051373,1051374,1051375,1051408,1051409,1051410,1051411,1051415,1051420,1051422,1051423,1051392,1051405,1051406,1051407,1051440,1051441,1051442, +1051444,1051445,1051446,1051447,1051448,1051450,1051451,1051452,1051453,1051454,1051455,1051424,1051425,1051426,1051429,1051430,1051431,1051432,1051434,1051435,1051436,1051437,1051439,1051472,1051473,1051474,1051475,1051476,1051477,1051478,1051479,1051480,1051481, +1051482,1051483,1051484,1051485,1051486,1051487,1051456,1051457,1051458,1051459,1051460,1051461,1051462,1051463,1051464,1051465,1051466,1051467,1051468,1051469,1051470,1051471,1051504,1051505,1051506,1051507,1051508,1051509,1051510,1051511,1051512,1051513,1051514, +1051515,1051519,1051488,1051489,1051490,1051491,1051492,1051494,1051495,1051496,1051497,1051498,1051499,1051500,1051501,1051502,1051503,1051536,1051537,1051538,1051539,1051540,1051541,1051542,1051543,1051544,1051545,1051546,1051547,1051548,1051549,1051551,1051520, +1051521,1051522,1051523,1051528,1051529,1051530,1051531,1051535,1051568,1051572,1051573,1051574,1051575,1051576,1051577,1051578,1051579,1051580,1051581,1051582,1051583,1051552,1051553,1051554,1051555,1051556,1051559,1051560,1051561,1051563,1051564,1051565,1051566, +1051567,1051600,1051601,1051602,1051603,1051604,1051605,1051606,1051607,1051608,1051609,1051610,1051612,1051613,1051614,1051615,1051584,1051585,1051586,1051587,1051588,1051589,1051590,1051591,1051592,1051593,1051594,1051595,1051596,1051598,1051632,1051633,1051616, +1051617,1051618,1051619,1051620,1051621,1051622,1051623,1051624,1051625,1051626,1051627,1051628,1051629,1051630,1051631,1052016,1052017,1052018,1052019,1052020,1052021,1052022,1052023,1052024,1052025,1052026,1052027,1052028,1052029,1052030,1052031,1052000,1052001, +1052002,1052003,1052004,1052005,1052006,1052007,1052008,1052009,1052010,1052011,1052012,1052013,1052014,1052015,1052048,1052049,1052050,1052051,1052052,1052053,1052054,1052055,1052056,1052057,1052058,1052059,1052060,1052061,1052062,1052063,1052032,1052033,1052034, +1052035,1052036,1052037,1052038,1052039,1052040,1052041,1052042,1052043,1052044,1052045,1052046,1052047,1052082,1052083,1052084,1052085,1052086,1052087,1052089,1052090,1052091,1052092,1052093,1052094,1052064,1052065,1052066,1052067,1052068,1052069,1052070,1052073, +1052074,1052077,1052078,1052079,1052144,1052145,1052147,1052151,1052152,1052153,1052154,1052135,1052136,1052137,1052142,1052143,1052176,1052178,1052179,1052180,1052182,1052183,1052186,1052168,1052169,1052170,1052171,1052172,1052174,1052175,1052209,1052210,1052211, +1052212,1052213,1052214,1052218,1052192,1052193,1052194,1052195,1052196,1052197,1052198,1052199,1052200,1052201,1052203,1052204,1052205,1052206,1052207,1052245,1052246,1052248,1052253,1052255,1052224,1052225,1052228,1052229,1052231,1052232,1052233,1052234,1052236, +1052275,1052282,1052283,1052284,1052286,1052268,1052306,1052309,1052289,1052290,1052291,1052292,1052293,1052294,1052295,1052296,1052298,1052338,1052339,1052340,1052343,1052345,1052348,1052349,1052324,1052329,1052330,1052331,1052332,1052368,1052369,1052370,1052372, +1052373,1052354,1052355,1052356,1052367,1052408,1052410,1052411,1052412,1052435,1052438,1052439,1052440,1052442,1052443,1052445,1052446,1052447,1052416,1052417,1052418,1052419,1052421,1052423,1052424,1052425,1052426,1052474,1052448,1052449,1052455,1052458,1052459, +1052503,1052531,1052536,1052537,1052538,1052539,1052540,1052541,1052542,1052543,1052565,1052566,1052567,1052568,1052571,1052574,1052575,1052544,1052549,1052550,1052551,1052552,1052554,1052594,1052595,1052597,1052598,1052599,1052601,1052602,1052603,1052604,1052605, +1052576,1052577,1052579,1052585,1052586,1052587,1052624,1052626,1052627,1052628,1052629,1052630,1052634,1052636,1052610,1052618,1052619,1052656,1052657,1052660,1052661,1052662,1052663,1052664,1052665,1052666,1052667,1052668,1052671,1052643,1052644,1052654,1052655, +1052692,1052693,1052698,1052674,1052675,1052676,1052677,1052678,1052679,1052680,1052681,1052682,1052684,1052685,1052724,1052725,1052726,1052727,1052728,1052707,1052708,1052754,1052762,1052746,1052747,1052749,1052750,1052771,1052772,1052773,1052774,1052779,1052780, +1052781,1052782,1052811,1052812,1052852,1052853,1052854,1052855,1052856,1052857,1052858,1052859,1052837,1052838,1052841,1052842,1052843,1052844,1052845,1052846,1052891,1052892,1052894,1052895,1052864,1052865,1052870,1052871,1052872,1052873,1052874,1052876,1052912, +1052916,1052917,1052920,1052921,1052922,1052923,1052924,1052925,1052926,1052896,1052897,1052898,1052899,1052901,1052902,1052903,1052904,1052909,1052910,1052911,1052946,1052947,1052948,1052949,1052951,1052954,1052955,1052956,1052957,1052958,1052959,1052939,1052940, +1052941,1052942,1052976,1052977,1052960,1052961,1052965,1052966,1052967,1052970,1052975,1053014,1053015,1053016,1053017,1053018,1053022,1053023,1052994,1052995,1052996,1052997,1052998,1052999,1053000,1053001,1053006,1053040,1053041,1053042,1053045,1053046,1053047, +1053048,1053049,1053050,1053051,1053052,1053053,1053054,1053055,1053024,1053025,1053028,1053031,1053032,1053033,1053034,1053035,1053038,1053039,1053082,1053083,1053084,1053085,1053086,1053087,1053056,1053057,1053058,1053059,1053060,1053061,1053062,1053068,1053069, +1053104,1053105,1053106,1053107,1053108,1053109,1053110,1053114,1053115,1053116,1053117,1053118,1053119,1053088,1053089,1053090,1053091,1053092,1053093,1053094,1053095,1053096,1053097,1053098,1053099,1053102,1053103,1053138,1053141,1053142,1053143,1053144,1053145, +1053146,1053147,1053148,1053120,1053121,1053124,1053125,1053126,1053127,1053130,1053131,1053132,1053133,1053134,1053168,1053169,1053170,1053171,1053172,1053173,1053174,1053175,1053176,1053177,1053180,1053183,1053155,1053156,1053157,1053158,1053159,1053162,1053163, +1053164,1053165,1053166,1053167,1053200,1053201,1053202,1053203,1053205,1053207,1053208,1053209,1053210,1053215,1053184,1053186,1053187,1053192,1053194,1053195,1053196,1053197,1053198,1053199,1053232,1053234,1053239,1053240,1053241,1053242,1053243,1053244,1053245, +1053246,1053247,1053216,1053217,1053218,1053219,1053220,1053221,1053222,1053225,1053226,1053227,1053228,1053229,1053230,1053231,1053264,1053265,1053266,1053267,1053268,1053269,1053270,1053277,1053278,1053279,1053250,1053251,1053252,1053253,1053254,1053255,1053256, +1053257,1053258,1053259,1053260,1053261,1053262,1053263,1053296,1053301,1053302,1053303,1053304,1053305,1053306,1053307,1053308,1053309,1053310,1053280,1053281,1053282,1053283,1053285,1053286,1053287,1053288,1053289,1053290,1053291,1053292,1053293,1053294,1053295, +1053328,1053329,1053330,1053335,1053336,1053338,1053339,1053343,1053314,1053315,1053316,1053317,1053318,1053321,1053322,1053323,1053324,1053325,1053363,1053364,1053365,1053366,1053367,1053371,1053372,1053373,1053374,1053375,1053344,1053345,1053346,1053347,1053351, +1053352,1053353,1053354,1053355,1053356,1053357,1053393,1053397,1053398,1053399,1053400,1053401,1053403,1053404,1053405,1053406,1053376,1053377,1053378,1053379,1053380,1053381,1053382,1053383,1053384,1053385,1053386,1053387,1053388,1053389,1053390,1053391,1053424, +1053434,1053435,1053436,1053437,1053411,1053412,1053413,1053414,1053415,1053416,1053420,1053421,1053422,1053423,1053457,1053458,1053459,1053460,1053463,1053464,1053465,1053466,1053467,1053468,1053469,1053470,1053471,1053440,1053441,1053442,1053443,1053444,1053445, +1053446,1053447,1053449,1053450,1053454,1053488,1053489,1053490,1053491,1053492,1053493,1053498,1053499,1053500,1053501,1053502,1053503,1053472,1053473,1053474,1053475,1053477,1053479,1053480,1053481,1053482,1053483,1053484,1053485,1053486,1053487,1053520,1053521, +1053522,1053523,1053527,1053528,1053529,1053530,1053531,1053532,1053533,1053534,1053504,1053505,1053506,1053507,1053508,1053509,1053510,1053511,1053513,1053514,1053515,1053516,1053517,1053518,1053519,1053552,1053553,1053554,1053555,1053563,1053566,1053567,1053537, +1053540,1053543,1053545,1053546,1053547,1053548,1053549,1053550,1053551,1053584,1053585,1053586,1053587,1053588,1053589,1053590,1053592,1053593,1053594,1053595,1053596,1053597,1053598,1053568,1053569,1053570,1053571,1053572,1053573,1053574,1053575,1053576,1053577, +1053578,1053579,1053580,1053581,1053582,1053583,1053616,1053617,1053618,1053619,1053621,1053622,1053625,1053626,1053631,1053600,1053601,1053602,1053605,1053606,1053610,1053611,1053612,1053613,1053614,1053615,1053648,1053649,1053650,1053651,1053632,1053633,1053634, +1053640,1053646,1053647 + +] + + +question = sm.sendAskYesNo("#eWould you like to spend #r2k NX#n #efor a random #bHat?") +randitem = random.choice(items) +if question and sm.canHold(randitem) and chr.getUser().getNxPrepaid() >= 2000: + sm.giveItem(randitem) + sm.deductNX(-2000) +else: + sm.sendNext("#e#dYour inventory is full or you don't have enough NX.") \ No newline at end of file diff --git a/scripts/npc/2210013.py b/scripts/npc/2210013.py new file mode 100755 index 0000000..fd6a306 --- /dev/null +++ b/scripts/npc/2210013.py @@ -0,0 +1,7 @@ +# Chino (2210013) | Colossus Road : Chino's Lift: The Road Up & Down + +sm.setPlayerAsSpeaker() +sm.sendNext("Hey..") + +sm.setSpeakerID(parentID) +sm.sendSayOkay("No.") \ No newline at end of file diff --git a/scripts/npc/2230202.py b/scripts/npc/2230202.py new file mode 100755 index 0000000..4305b39 --- /dev/null +++ b/scripts/npc/2230202.py @@ -0,0 +1,47 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type + +destinations = [ + ["Legendary", 250, 924045000, 20, EventType.Hekaton], +] + +runsPerDay = 1 + +if sm.getFieldID() == 302090500: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.sendAskYesNo + + dialog = "Do you want to head to '#bTrueffet#k' to fight \r\n#bHekaton#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Trueffet (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bHekaton#k.") + + if sm.partyHasCoolDown(destinations[response][4], runsPerDay): + sm.sendNext("You or one of your party member has already attempted facing \r\n#bHekaton#k within the past 7 Days.") + sm.dispose() + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.HEKATON_TIME) + sm.addCoolDownInXDaysForParty(destinations[response][4], 1, 7) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/2nd_bowman.py b/scripts/npc/2nd_bowman.py new file mode 100755 index 0000000..3dea9ee --- /dev/null +++ b/scripts/npc/2nd_bowman.py @@ -0,0 +1,21 @@ +# [Job Adv] Level 30 Bowman + +sm.setSpeakerID(1012100) + +if (sm.getJob() != "BOWMAN"): + sm.sendSayOkay("lol go away") +else: + message = "Congratulations on reaching level 30! bithc pikc a job\r\n\r\n" + message += "#b#L0#Trail of the Hunter#l\r\n" + message += "#b#L1#Trail of the Crossbowman#l\r\n" + + choice = sm.sendNext(message) + + if choice == 0: + sm.jobAdvance(310) + sm.sendNext("ok you bowman now") + elif choice == 1: + sm.jobAdvance(320) + sm.sendNext("ok you use bolt now") + + diff --git a/scripts/npc/2nd_magician.py b/scripts/npc/2nd_magician.py new file mode 100755 index 0000000..95f7e23 --- /dev/null +++ b/scripts/npc/2nd_magician.py @@ -0,0 +1,23 @@ +# [Job Adv] Level 30 Magician + +sm.setSpeakerID(1012100) + +if (sm.getJob() != "MAGICIAN"): + sm.sendSayOkay("lol go away") +else: + message = "Congratulations on reaching level 30! bithc pikc a job\r\n\r\n" + message += "#b#L0#Path of Fire and Poison#l\r\n" + message += "#b#L1#Path of Ice and Lightning#l\r\n" + message += "#b#L2#Path of the Cleric#l\r\n" + + choice = sm.sendNext(message) + + if choice == 0: + sm.jobAdvance(210) + sm.sendNext("lol u farted") + elif choice == 1: + sm.jobAdvance(220) + sm.sendNext("wow ice") + elif choice == 2: + sm.jobAdvance(230) + sm.sendNext("lol imagine healing") \ No newline at end of file diff --git a/scripts/npc/2nd_pirate.py b/scripts/npc/2nd_pirate.py new file mode 100755 index 0000000..0e5a0d7 --- /dev/null +++ b/scripts/npc/2nd_pirate.py @@ -0,0 +1,19 @@ +# [Job Adv] Level 30 Pirate + +sm.setSpeakerID(1012100) + +if (sm.getJob() != "PIRATE"): + sm.sendSayOkay("lol go away") +else: + message = "Congratulations on reaching level 30! bithc pikc a job\r\n\r\n" + message += "#b#L0#Brawler of the High Seas#l\r\n" + message += "#b#L1#Gunslinger of the Seven Seas#l\r\n" + + choice = sm.sendNext(message) + + if choice == 0: + sm.jobAdvance(510) + sm.sendNext("ok you punch") + elif choice == 1: + sm.jobAdvance(520) + sm.sendNext("ok you gun") \ No newline at end of file diff --git a/scripts/npc/2nd_thief.py b/scripts/npc/2nd_thief.py new file mode 100755 index 0000000..8dbb21a --- /dev/null +++ b/scripts/npc/2nd_thief.py @@ -0,0 +1,19 @@ +# [Job Adv] Level 30 Thief + +sm.setSpeakerID(1012100) + +if (sm.getJob() != "MAGICIAN"): + sm.sendSayOkay("lol go away") +else: + message = "Congratulations on reaching level 30! bithc pikc a job\r\n\r\n" + message += "#b#L0#Path of the Assassin#l\r\n" + message += "#b#L1#Path of the Bandit#l\r\n" + + choice = sm.sendNext(message) + + if choice == 0: + sm.jobAdvance(410) + sm.sendNext("ok u ass ass in") + elif choice == 1: + sm.jobAdvance(420) + sm.sendNext("ok stabby") \ No newline at end of file diff --git a/scripts/npc/2nd_warrior.py b/scripts/npc/2nd_warrior.py new file mode 100755 index 0000000..6d07fa9 --- /dev/null +++ b/scripts/npc/2nd_warrior.py @@ -0,0 +1,23 @@ +# [Job Adv] Level 30 Warrior + +sm.setSpeakerID(1012100) + +if (sm.getJob() != "WARRIOR"): + sm.sendSayOkay("lol go away") +else: + message = "Congratulations on reaching level 30! bithc pikc a job\r\n\r\n" + message += "#b#L0#Way of the Fighter#l\r\n" + message += "#b#L1#Way of the Page#l\r\n" + message += "#b#L2#Way of the Spearman#l\r\n" + + choice = sm.sendNext(message) + + if choice == 0: + sm.jobAdvance(110) + sm.sendNext("ok you use sord") + elif choice == 1: + sm.jobAdvance(120) + sm.sendNext("ok you use pole") + elif choice == 2: + sm.jobAdvance(130) + sm.sendNext("ok you use big hammer") \ No newline at end of file diff --git a/scripts/npc/3003123.py b/scripts/npc/3003123.py new file mode 100755 index 0000000..b12c444 --- /dev/null +++ b/scripts/npc/3003123.py @@ -0,0 +1 @@ +sm.sendSayOkay("......") \ No newline at end of file diff --git a/scripts/npc/3003323.py b/scripts/npc/3003323.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/npc/3jobExit.py b/scripts/npc/3jobExit.py new file mode 100755 index 0000000..f3e8866 --- /dev/null +++ b/scripts/npc/3jobExit.py @@ -0,0 +1,6 @@ +# Sparkling Crystal - Hidden Street : Dimensional World + +response = sm.sendAskYesNo("Do you really want to leave?") + +if response: + sm.warpInstanceOut(211000001) # El Nath : Chief's Residence diff --git a/scripts/npc/701220350_check.py b/scripts/npc/701220350_check.py new file mode 100755 index 0000000..9bca86d --- /dev/null +++ b/scripts/npc/701220350_check.py @@ -0,0 +1,45 @@ +# Bookshelf (9310600) | Hidden Street : Secret Library + +BOOK_OF_DEMONS = 4034637 +WISE_CHIEF_PRIEST = 9310053 +GOBLIN_DEMON = 9310578 +BLUE_DEMON = 9310577 +NINE_TAILED_FOX = 9310579 + +if not sm.hasItem(BOOK_OF_DEMONS): + sm.removeEscapeButton() + sm.setBoxChat() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + if not sm.canHold(BOOK_OF_DEMONS): + sm.sendNext("Let's make some space in my inventory.. I think I see the book right there.") + sm.dispose() + sm.sendNext("Huh? This is the #rBook of Demons#k") + + sm.giveItem(BOOK_OF_DEMONS) + sm.warpInstanceIn(701220350) # hidden library + + sm.lockInGameUI(True, False) + + sm.sendNext("Eureka! This must be the book the #p"+ str(WISE_CHIEF_PRIEST) +"# needs. I'd better go give it to him.") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Wait, #b#h0##k! I have a gift for you!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("Why are you holding a mirror? Is that for me?") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("It's no ordinary mirror.\r\n" + "It shows a person's true form, human or demon.\r\n" + "Perhaps you'll find it useful someday.") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("That's amazing! Thanks! Now I better run and deliver this book to the #p"+ str(WISE_CHIEF_PRIEST) +"#.") + + sm.warpInstanceOut(701220300, 2) # Sutra 5-6 + sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/npc/9000019.py b/scripts/npc/9000019.py new file mode 100755 index 0000000..f063ab4 --- /dev/null +++ b/scripts/npc/9000019.py @@ -0,0 +1,3 @@ +from net.swordie.ms.enums import UIType + +sm.openUI(UIType.UI_STARPLANET_MISSION_RPS) \ No newline at end of file diff --git a/scripts/npc/9000095.py b/scripts/npc/9000095.py new file mode 100755 index 0000000..b52aab6 --- /dev/null +++ b/scripts/npc/9000095.py @@ -0,0 +1,11 @@ +sm.setSpeakerID(9000095) # Witchy Woman +sm.sendNext("Do you want to test your knowledge?") + +response = sm.sendAskYesNo("Let's get started shall we") + +if response == 1: + sm.setHintText("This is a hint") + sm.setAnswer("Yes") +else: + sm.sendNext("nvm") +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/9000139.py b/scripts/npc/9000139.py new file mode 100755 index 0000000..cd97488 --- /dev/null +++ b/scripts/npc/9000139.py @@ -0,0 +1 @@ +cm.sendNext("Hewwo") \ No newline at end of file diff --git a/scripts/npc/9000289.py b/scripts/npc/9000289.py new file mode 100755 index 0000000..7f60c8e --- /dev/null +++ b/scripts/npc/9000289.py @@ -0,0 +1,267 @@ +# Sylph Ring NPC + +from net.swordie.ms.loaders import ItemData + +sylphRings = [1114200,1114219,1114201,1114205,1114206,1114202,1114212,1114211,1114210,1114230] +stageOne = 1114200 +stageTwo = 1114219 +stageThree = 1114201 +stageFour = 1114205 +stageFive = 1114206 +stageSix = 1114202 +stageSeven = 1114212 +stageEight = 1114211 +stageNine = 1114210 +stageTen = 1114230 +freudsJournal = 4460005 + +if sm.hasItem(stageTen) or chr.getEquippedInventory().containsItem(stageTen): + sm.sendSayOkay("So you finally completed your #bSylph Ring#k mortal... I for one have also finished my research. I Wish you luck on your future endeavors.") + +else: + response = sm.sendNext("Welcome mortal one. You come seeking power as I have come seeking knowledge. I will " + "trade you a #bSylph Ring#k for a #bFreud's Journal#k.#b\r\n" + "#L0#What is a Sylph Ring.#l\r\n" + "#L1#Yes I would like a Sylph Ring.#l\r\n#r" + "#L2#I would like to upgrade my Sylph Ring.#l\r\n") + + if response == 0: + + sm.sendSayOkay("A Sylph Ring is a very powerful ring that only I can infuse with power. To make this ring " + "reach its full potential I will require #r10 #bFreud's Journals#k for within those journals " + "lay the power to fully awaken the Sylph.") + sm.dispose() + + elif response == 1: + + for x in range (len(sylphRings)): + if sm.hasItem(sylphRings[x]): + sm.sendSayOkay("Mortal I can not give you something you already possess. If you wish to upgrade your ring" + " you may talk to me again then select the #rUpgrade#k option.") + sm.dispose() + + if not sm.hasItem(freudsJournal): + sm.sendSayOkay("Do not try my patience mortal I can sense that you do not possess a #bFreud's Journal#k.") + sm.dispose() + + if not sm.canHold(stageOne): + sm.sendSayOkay("Mortal how do you expect to carry a #bSylph Ring#k while your inventory is full.") + sm.dispose() + + for x in range (len(sylphRings)): + if chr.getEquippedInventory().containsItem(sylphRings[x]): + sm.sendSayOkay("Mortal I can not give you something you already possess. If you wish to upgrade your ring" + " unequip it and then you may talk to me again by selecting the #rUpgrade#k option.") + sm.dispose() + + if sm.hasItem(freudsJournal): + answer = sm.sendAskYesNo("Ahhhh yes mortal one I can feel the radiating energy from your #bFreud's Journal#k. Do you" + " wish to claim your #bSylph Ring#k?") + + if answer: + sm.sendSayOkay("It is done then mortal... The ring is now yours. Return to me when you acquire more " + "#bFreud's Journals#k so that we may unravel the mysteries of the Sylph together.") + sm.consumeItem(freudsJournal) + sm.giveItem(stageOne) + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif response == 2: + + if not sm.canHold(stageOne): + sm.sendSayOkay("Mortal how do you expect to upgrade your #bSylph Ring#k while your inventory is full.") + sm.dispose() + + if not sm.hasItem(freudsJournal): + sm.sendSayOkay("Do not try my patience mortal I can sense that you do not possess a #bFreud's Journal#k.") + sm.dispose() + + for x in range (len(sylphRings)): + if chr.getEquippedInventory().containsItem(sylphRings[x]): + sm.sendSayOkay("Mortal I can not upgrade you ring while it is equipped please" + " unequip it and then you may talk to me again.") + sm.dispose() + + if sm.hasItem(freudsJournal): + + if sm.hasItem(stageOne): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageOne) + sm.giveItem(stageTwo) + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageTwo): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageTwo) + sm.giveItem(stageThree) + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageThree): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageThree) + sm.giveItem(stageFour) + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageFour): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageFour) + sm.giveItem(stageFive) + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageFive): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageFive) + + def giveRing(): + Ring = ItemData.getEquipDeepCopyFromID(stageSix, False) + Ring.setSocket(0, 4311) + chr.addItemToInventory(Ring) + + giveRing() + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageSix): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageSix) + + def giveRing(): + Ring = ItemData.getEquipDeepCopyFromID(stageSeven, False) + Ring.setSocket(0, 4311) + Ring.setOptionBase(1, 40601) + chr.addItemToInventory(Ring) + + giveRing() + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageSeven): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageSeven) + + def giveRing(): + Ring = ItemData.getEquipDeepCopyFromID(stageEight, False) + Ring.setSocket(0, 4311) + Ring.setOptionBase(0, 40601) + Ring.setOptionBase(1, 30291) + chr.addItemToInventory(Ring) + + giveRing() + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageEight): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageEight) + + def giveRing(): + Ring = ItemData.getEquipDeepCopyFromID(stageNine, False) + Ring.setSocket(0, 4311) + Ring.setOptionBase(0, 40601) + Ring.setOptionBase(1, 30291) + Ring.setOptionBase(2, 42051) + chr.addItemToInventory(Ring) + + giveRing() + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + elif sm.hasItem(stageNine): + + stage1 = sm.sendAskYesNo("Do you wish to unlock the hidden power within your #bSylph Ring#k?") + + if stage1: + sm.consumeItem(freudsJournal) + sm.consumeItem(stageNine) + + def giveRing(): + Ring = ItemData.getEquipDeepCopyFromID(stageTen, False) + Ring.setSocket(0, 4311) + Ring.setSocket(1, 4311) + Ring.setSocket(2, 4311) + Ring.setOptionBase(0, 40601) + Ring.setOptionBase(1, 30291) + Ring.setOptionBase(2, 42051) + chr.addItemToInventory(Ring) + + giveRing() + + sm.sendSayOkay("It is done then mortal... The ring has been infused with magical energies. Return to me when you acquire more " + "#bFreud's Journals#k so that we may further delve into the mysteries of the Sylph together.") + sm.dispose() + + else: + sm.sendSayOkay("Do not waste my time mortal.") + + else: + sm.sendSayOkay("Do not waste my time mortal. I know you do not possess a #bSylph Ring#k") \ No newline at end of file diff --git a/scripts/npc/9000386.py b/scripts/npc/9000386.py new file mode 100755 index 0000000..b408ca4 --- /dev/null +++ b/scripts/npc/9000386.py @@ -0,0 +1,156 @@ + +mapleLeafID = 4001126 +mesosBagID = 4031138 + +mapleItemEquips = [ + 1003863, # - Onyx Maple Hat + 1012376, # - Onyx Maple Gum + 1052612, # - Onyx Maple Suit + 1102562, # - Onyx Maple Cape + 1113034, # - Onyx Maple Ring + 1122252, # - Onyx Maple Pendant + 1132228 # - Onyx Maple Buckle + +] +mapleItemWeapons = [ + 1212066, # - Onyx Maple Rod + 1222061, # - Onyx Maple Soul Shooter + 1232060, # - Onyx Maple Devil Sword + 1242065, # - Onyx Maple Chain Sword + 1252064, # - Onyx Maple Scepter + 1302277, # - Onyx Maple Sword + 1312155, # - Onyx Maple Axe + 1322205, # - Onyx Maple Mace + 1332227, # - Onyx Maple Cutter + 1352825, # - Onyx Maple Claw + 1362092, # - Onyx Maple Cane + 1372179, # - Onyx Maple Wand + 1382211, # - Onyx Maple Staff + 1402199, # - Onyx Maple Two-handed Sword + 1412137, # - Onyx Maple Two-handed Axe + 1422142, # - Onyx Maple Maul + 1432169, # - Onyx Maple Spear + 1442225, # - Onyx Maple Polearm + 1452207, # - Onyx Maple Longbow + 1462195, # - Onyx Maple Crossbow + 1472216, # - Onyx Maple Steer + 1482170, # - Onyx Maple Grip + 1492181, # - Onyx Maple Shooter + 1522096, # - Pearl Maple Twin Angels + 1532100, # - Onyx Maple Cannon + 1542070, # - Scarlet Katana + 1552070 # - Onyx Maple Fan + +] + +buyOptionsSelection = sm.sendNext(strBuyOptions) +buyEquipSelection = -1 +buyEquipYesNo = -1 +strBuyOptions = "What would you like to buy?#b\r\n#L0#Vampire Blood\r\n#L1#Onyx Maple Equips\r\n#L2#Onyx Maple Weapons\r\n#L3#Trade Maple Leaves for Experience " + +#========================== +# Vampire Blood +#========================== + +if buyOptionsSelection == 0: + answer = sm.sendAskNumber("How much #v2433559##bVampire Blood #kdo you wish to purchase?\r\n#r 500 #bMaple Leaves #kEach", 0, 1, 1000) + + totalCost = answer * 500 + + if sm.getQuantityOfItem(4001126) < totalCost: + sm.sendSayOkay("You do not have enough #v4001126##bMaple Leaves.") + sm.dispose() + + if not sm.canHold(2433559, answer): + sm.sendSayOkay("Please make sure you have room in your inventory.") + + else: + sm.consumeItemFromDiffStacks(4001126, totalCost) + sm.giveItem(2433559, answer) + sm.sendSayOkay("Enjoy your #v2433559##bVampire Blood #k!") + +#========================== +# EQUIPMENT +#========================== + +if buyOptionsSelection == 1: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemEquips: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemEquips[buyEquipSelection]) + "\r\n " +su.getItemImg(mapleLeafID)+" #b5000 \r\n "+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose() + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemEquips[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + + +#========================== +# WEAPONS +#========================== + +if buyOptionsSelection == 2: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemWeapons: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemWeapons[buyEquipSelection]) + " \r\n" +su.getItemImg(mapleLeafID)+" #b5000 \r\n"+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose() + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemWeapons[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + +#========================== +# Trade Maple Leaves For Experience +#========================== + +if buyOptionsSelection == 3: + answer = sm.sendAskNumber("How many #v4001126##bMaple Leaves #kdo you wish to trade?", 0, 1, 1000) + + totalExp = answer * 35 # EXP Per Maple leaf. + totalQty = answer * 1 # Leaves Per EXP Tick. + + if sm.getQuantityOfItem(4001126) < totalQty: + sm.sendSayOkay("You do not have enough#v4001126##bMaple Leaves.\r\n#kYou only have#r#c4001126#\r\n.") + sm.dispose() + + else: + sm.consumeItemFromDiffStacks(4001126, totalQty) + sm.giveExp(totalExp) + sm.sendSayOkay("Thank you for the #v4001126##bMaple Leaves.\r\n#kEnjoy the experience!") \ No newline at end of file diff --git a/scripts/npc/9010034.py b/scripts/npc/9010034.py new file mode 100755 index 0000000..6b65221 --- /dev/null +++ b/scripts/npc/9010034.py @@ -0,0 +1,99 @@ + + +# Vote Item NPC \\ Cygnus \\ 9010034 \\ Free Market + +VoteShop = { #[itemid, price, expiration time] + 0 : [5211067, 5, 24], + 1 : [5211068, 2, 1], + 2 : [5360042, 1, 2], + 3 : [5211068, 5, 4], + 4 : [5360042, 2, 4], + 5 : [5211068, 7, 12], + 6 : [5360042, 3, 6], + 7 : [5211060, 20, 24], + 8 : [5211046, 10, 3], + 9 : [5050100, 10, 0], + 10 : [5051001, 5, 0], + 11 : [2023604, 4, 0], + 12 : [2023380, 5, 0], + 13 : [1122171, 6, 12], + 14 : [1122219, 5, 72], + 15 : [1122219, 10, 168], + 16 : [2022035, 4, 24], + +} + +votePrice = 1 +votecoinId = 4310195 +secondaryPendantPrice = 20 + +if sm.sendNext: + selection = sm.sendNext("Hello my name is Cygnus, This shop is where you can spend your #bVote Points#k.\r\n" + "\r\n#eYou have#r " + str(sm.getVotePoints()) + " #bVote Points.\r\n#n#b" + "#L0#I'd like to my Trade Vote Points for Vote Coins\r\n" + "#L1#I'd like to my Trade Vote Coins for Vote Points\r\n" + "#L2#I'd like to purchase items from the Vote Shop\r\n" + "#L3#I'd like to purchase a 7 Day Pendant Slot (Character)\r\n") + + items = [] + if selection == 0: + amount = sm.sendAskNumber("#b#eA Vote Coin costs #r(1)#b Vote Point.\r\n" + "You currently have #e#r" + str(sm.getVotePoints()) + " #bVote Points\r\n" + "#k#eHow many would you like exchange?", 1, 1, 100) + price = amount * votePrice + if sm.getVotePoints() >= price and chr.canHold(votecoinId, amount): + sm.deductVotePoints(price) + sm.giveItem(votecoinId, amount) + sm.dispose() + else: + sm.sendNext("You do not have enough #bVote points#k or you do not have room in your inventory for this item.") + sm.dispose() + + elif selection == 1: + amount = sm.sendAskNumber("#b#eA Vote Point costs #r(1)#b Vote Coin.\r\n" + "You currently have #r" + str(sm.getQuantityOfItem(votecoinId)) + " #bVote Coins.\r\n" + "#kHow many would you like exchange?", 1, 1, 100) + if sm.getQuantityOfItem(votecoinId) >= amount: + sm.deductVotePoints(votePrice * amount) + chr.consumeItem(votecoinId, amount); + sm.dispose() + else: + sm.sendNext("You do not have enough Vote Coins for this exchange.") + sm.dispose() + + elif selection == 2: + items = VoteShop + elif selection == 3: + answer = sm.sendAskYesNo("Are you sure you want to purchase a permanent secondary pendant slot for #r" + str(secondaryPendantPrice) + "#b Vote Points#k.") + if answer and sm.getVotePoints() >= secondaryPendantPrice: + if sm.setSecondaryPendantDateInXDays(7): + sm.deductVotePoints(secondaryPendantPrice) + sm.sendSayOkay("Please re-log for your secondary pendant slot to take effect.") + sm.dispose() + else: + sm.sendSayOkay("You already own a secondary pendant slot") + sm.dispose() + else: + sm.sendNext("You do not have enough #bVote Points#k.") + sm.dispose() + + # output = "Choose the item you would like to buy \r\n" + # for x in range (len(items)): + # output += "#b" + su.addSelectItem(x) + su.getItemImg(items[x][0]) + " " + su.getItemName(items[x][0]) + " #r#e(" + str(items[x][1]) + ") VP#n" + # if items[x][2] >= 24: + # output += " for " + str(items[x][2] / 24) + " Day(s)" + # elif items[x][2] >= 1: + # output += " for " + str(items[x][2] / 1) + " Hour(s)" + # output += "\r\n" + #selection = sm.sendNext(output) + #itemId = items[selection][0] + #text = "how many #r" + su.getItemName(itemId) + " #bwould you like to buy?" + #amount = sm.sendAskNumber(text, 1, 1, 100) + #totalPrice = items[selection][1] * amount + #answer = sm.sendAskYesNo("are you sure you wanna buy " + str(amount) + " #b" + su.getItemName(itemId) + " #kfor #r(" + str(totalPrice) + ") VP") + #if answer and sm.canHold(itemId, amount) and sm.getVotePoints() >= totalPrice: + # sm.giveItem(itemId, amount, items[selection][2]) + # sm.deductVotePoints(totalPrice) + # chr.checkAndRemoveExpiredItems(); + #else: + # sm.sendNext("You do not have enough Vote Points or cannot hold this item") diff --git a/scripts/npc/9010036.py b/scripts/npc/9010036.py new file mode 100755 index 0000000..9dc17b5 --- /dev/null +++ b/scripts/npc/9010036.py @@ -0,0 +1,130 @@ +from net.swordie.ms.scripts import ScriptUtil as su + +# NX Item NPC \\ Lilin \\ 9010036 \\ Free Market + +cubes = { #[itemid, price, expiration time] + 0 : [2711000, 750, 0], + 1 : [2711003, 2000, 0], + 2 : [5062001, 4000, 0], + 3 : [5062009, 11000, 0], + 4 : [2711004, 15000, 0], + 5 : [5062005, 20000, 0], + 6 : [5062006, 30000, 0], + 7 : [5062500, 30000, 0], + 8 : [2702000, 250, 0], + 9 : [5062800, 4000, 0], +} + +scrolls = { #[itemid, price] + 0 : [2049300, 250000, 0], + 1 : [2049301, 10000, 0], + 2 : [2049419, 15000, 0], + 3 : [2048305, 180000, 0], + 4 : [2048306, 300000, 0], + 5 : [2049100, 2500, 0], + 6 : [2048079, 7000, 0], + 7 : [2048080, 7000, 0], +} + +scrollingTools = { #[itemid, price] + 0 : [5610000, 5000, 0], + 1 : [5610001, 6000, 0], + 2 : [2532000, 25000, 0], + 3 : [2531000, 50000, 0], + 4 : [2530000, 17500, 0], + 5 : [5068000, 17500, 0], + 6 : [2470003, 8000, 0], +} + +GameEnhancing = { + 0 : [5133000, 1000, 0], + 1 : [5610001, 6000, 0], + 2 : [2532000, 25000, 0], + 3 : [2531000, 50000, 0], + 4 : [2530000, 17500, 0], + 5 : [5068000, 17500, 0], + 6 : [2470003, 8000, 0], +} +hiredMerchants = { + 0 : [5030000, 7000, 24], + 1 : [5030000, 28000, 168], + 2 : [5030000, 42000, 336], +} + +messagingItems = { + 0 : [5072000, 2000, 0], + 1 : [5077000, 10000, 0], + 2 : [5076000, 10000, 0], +} + +etcItems = { + 0 : [2434327, 10000, 0], + 1 : [2434326, 15000, 0], + 2 : [2434325, 20000, 0], + 3 : [2502000, 1000, 0], +} + +gach = { + 0 : [5220000, 1500, 0], + 1 : [5220100, 30000, 0] +} + +coupons = { + 0 : [2434257, 4000, 0], + 1 : [2430768, 4000, 0], + 2 : [2430769, 4000, 0], + 3 : [2430771, 4000, 0], + 4 : [2430770, 4000, 0], + 5 : [2350000, 4000, 0] +} + +if sm.sendNext: + selection = sm.sendNext("Hello my name is Lilin, This shop is where you can spend your #bNX#k.\r\n" + "\r\n#eYou have#r " + str(sm.getNX()) + " #bNX.\r\n#n#b" + "#L0#Cubes\r\n" + "#L1#Scrolls\r\n" + "#L2#Scrolling Tools\r\n" + "#L3#Game-enhancing\r\n" + "#L4#Hired Merchants\r\n" + "#L5#ETC\r\n" + "#L6#Messaging\r\n" + "#L7#Gachapon\r\n" + "#L8#Expansion Slots\r\n") + + items = [] + if selection == 0: + items = cubes + elif selection == 1: + items = scrolls + elif selection == 2: + items = scrollingTools + elif selection == 3: + items = GameEnhancing + elif selection == 4: + items = hiredMerchants + elif selection == 5: + items = etcItems + elif selection == 6: + items = messagingItems + elif selection == 7: + items = gach + elif selection == 8: + items = coupons + + output = "Choose the item you would like to buy \r\n" + for x in range (len(items)): + output += "#b" + su.addSelectItem(x) + su.getItemImg(items[x][0]) + " " + su.getItemName(items[x][0]) + " #r#e(" + str(items[x][1]) + ") NX#n" + if items[x][2] > 0: + output += " for " + str(items[x][2] / 24) + " days" + output += "\r\n" + selection = sm.sendNext(output) + itemId = items[selection][0] + text = "how many #r" + su.getItemName(itemId) + " #bwould you like to buy?" + amount = sm.sendAskNumber(text, 1, 1, 1000) + totalPrice = items[selection][1] * amount + answer = sm.sendAskYesNo("are you sure you wanna buy " + str(amount) + " #b" + su.getItemName(itemId) + " #kfor #r(" + str(totalPrice) + ") NX") + if answer and sm.canHold(itemId, amount) and chr.getUser().getMaplePoints() >= totalPrice: + sm.giveItem(itemId, amount, items[selection][2]) + chr.addNx(-totalPrice) + else: + sm.sendNext("You do not have enough nx or cannot hold this item") diff --git a/scripts/npc/9010038.py b/scripts/npc/9010038.py new file mode 100755 index 0000000..140c5c7 --- /dev/null +++ b/scripts/npc/9010038.py @@ -0,0 +1,156 @@ + +mapleLeafID = 4001126 +mesosBagID = 4031138 + +mapleItemEquips = [ + 1003863, # - Onyx Maple Hat + 1012376, # - Onyx Maple Gum + 1052612, # - Onyx Maple Suit + 1102562, # - Onyx Maple Cape + 1113034, # - Onyx Maple Ring + 1122252, # - Onyx Maple Pendant + 1132228 # - Onyx Maple Buckle + +] +mapleItemWeapons = [ + 1212066, # - Onyx Maple Rod + 1222061, # - Onyx Maple Soul Shooter + 1232060, # - Onyx Maple Devil Sword + 1242065, # - Onyx Maple Chain Sword + 1252064, # - Onyx Maple Scepter + 1302277, # - Onyx Maple Sword + 1312155, # - Onyx Maple Axe + 1322205, # - Onyx Maple Mace + 1332227, # - Onyx Maple Cutter + 1352825, # - Onyx Maple Claw + 1362092, # - Onyx Maple Cane + 1372179, # - Onyx Maple Wand + 1382211, # - Onyx Maple Staff + 1402199, # - Onyx Maple Two-handed Sword + 1412137, # - Onyx Maple Two-handed Axe + 1422142, # - Onyx Maple Maul + 1432169, # - Onyx Maple Spear + 1442225, # - Onyx Maple Polearm + 1452207, # - Onyx Maple Longbow + 1462195, # - Onyx Maple Crossbow + 1472216, # - Onyx Maple Steer + 1482170, # - Onyx Maple Grip + 1492181, # - Onyx Maple Shooter + 1522096, # - Pearl Maple Twin Angels + 1532100, # - Onyx Maple Cannon + 1542070, # - Scarlet Katana + 1552070 # - Onyx Maple Fan + +] + +buyOptionsSelection = sm.sendNext(strBuyOptions) +buyEquipSelection = -1 +buyEquipYesNo = -1 +strBuyOptions = "What would you like to buy?#b\r\n#L0#Vampire Blood\r\n#L1#Onyx Maple Equips\r\n#L2#Onyx Maple Weapons\r\n#L3#Trade Maple Leaves for Experience " + +#========================== +# Vampire Blood +#========================== + +if buyOptionsSelection == 0: + answer = sm.sendAskNumber("How much #v2433559##bVampire Blood #kdo you wish to purchase?\r\n#r 500 #bMaple Leaves #kEach", 0, 1, 1000) + + totalCost = answer * 500 + + if sm.getQuantityOfItem(4001126) < totalCost: + sm.sendSayOkay("You do not have enough #v4001126##bMaple Leaves.") + sm.dispose() + + if not sm.canHold(2433559, answer): + sm.sendSayOkay("Please make sure you have room in your inventory.") + + else: + sm.consumeItemFromDiffStacks(4001126, totalCost) + sm.giveItem(2433559, answer) + sm.sendSayOkay("Enjoy your #v2433559##bVampire Blood #k!") + +#========================== +# EQUIPMENT +#========================== + +if buyOptionsSelection == 1: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemEquips: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemEquips[buyEquipSelection]) + "\r\n " +su.getItemImg(mapleLeafID)+" #b5000 \r\n "+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose() + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemEquips[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + + +#========================== +# WEAPONS +#========================== + +if buyOptionsSelection == 2: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b" + i = 0 + for itemEquip in mapleItemWeapons: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n" + i+=1 + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList) + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemWeapons[buyEquipSelection]) + " \r\n" +su.getItemImg(mapleLeafID)+" #b5000 \r\n"+su.getItemImg(mesosBagID)+" #b 10 Million Mesos" + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr) + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID) + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory") + sm.dispose(); + else: + sm.deductMesos(10000000) + chr.consumeItemFromDiffStacks(mapleLeafID,5000) + sm.giveItem(mapleItemWeapons[buyEquipSelection]) + sm.dispose() + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos") + sm.dispose() + +#========================== +# Trade Maple Leaves For Experience +#========================== + +if buyOptionsSelection == 3: + answer = sm.sendAskNumber("How many #v4001126##bMaple Leaves #kdo you wish to trade?", 0, 1, 1000) + + totalExp = answer * 35 # EXP Per Maple leaf. + totalQty = answer * 1 # Leaves Per EXP Tick. + + if sm.getQuantityOfItem(4001126) < totalQty: + sm.sendSayOkay("You do not have enough#v4001126##bMaple Leaves.\r\n#kYou only have#r#c4001126#\r\n.") + sm.dispose() + + else: + sm.consumeItemFromDiffStacks(4001126, totalQty) + sm.giveExp(totalExp) + sm.sendSayOkay("Thank you for the #v4001126##bMaple Leaves.\r\n#kEnjoy the experience!") \ No newline at end of file diff --git a/scripts/npc/9010047.py b/scripts/npc/9010047.py new file mode 100755 index 0000000..80b5c1b --- /dev/null +++ b/scripts/npc/9010047.py @@ -0,0 +1,60 @@ +#Secondary transfer NPC - 9010047 - Script name = 9010047.py +# On selection 1 and 2 - NX deduction is handled on the SecondaryFunction. +from net.swordie.ms.client.character.items import BodyPart + +STONE_SHIELD = 1092068 +PRICE = 100000 + +selection = sm.sendNext("Hello my name is Gale, I am in charge of transferring potentials between your secondaries.\r\n" + "\r\n#eYou have#r " + str(sm.getNX()) + " #bNX#n.\r\n\r\n" + "#L0#Purchase a secondary#l \r\n" + "#L1#Buy a Stone Shield #e#r(100,000) NX#b#n#l \r\n" + "#L2#Transfer Equipped Secondary potential to the first stone shield in your inventory #e#r(100,000) NX#b#n#l \r\n" + "#L3#Transfer the first Stone Shield's potential in your inventory to your current equipped secondary #e#r(100,000) NX#b#n #r\r\n#e(This will overwrite your equipped secondaries potential)#n.#l" + "#L4##d#eUnequip your current secondary weapon.#l") + +if selection == 0: + sm.invokeAfterDelay(1, "openShop", 9072100) + sm.dispose() +elif selection == 1: + if not sm.canHold(1092068): + sm.sendSayOkay("You do not have space in your equip inventory.") + sm.dispose() + if sm.getNX() >= PRICE: + sm.deductNX(PRICE) + sm.giveItem(1092068) + sm.sendSayOkay("Thank you for your purchase!") + else: + sm.sendSayOkay("You do not have enough #rNX#k.") + +elif selection == 2: + result = sm.SecondaryFunction(1) + if result == -1: + sm.sendSayOkay("Either there is no stone shield in your inventory or the stone shield lacks potential.") + elif result == -2: + sm.sendSayOkay("You do not have a secondary currently equipped.") + elif result == -3: + sm.sendSayOkay("You do not have enough #rNX#k to perform this action.") + elif result == -4: + sm.sendSayOkay("Your first Stone Shield in your inventory already has potential. Please put a Stone Shield that does not have potential in first slot of your inventory.") + + else: + sm.sendSayOkay("I have transferred your secondaries potential to the first Stone Shield in your inventory.") + +elif selection == 3: + result = sm.SecondaryFunction(0) + if result == -1: + sm.sendSayOkay("Either there is no stone shield in your inventory or the stone shield lacks a potential.") + elif result == -2: + sm.sendSayOkay("You do not have a secondary currently equipped.") + elif result == -3: + sm.sendSayOkay("You do not have enough #rNX#k to perform this action.") + else: + sm.sendSayOkay("I have transferred your Stone Shield's potential to your equipped secondary.") + +elif selection == 4: + currentSecondary = chr.getEquippedItemByBodyPart(BodyPart.Shield) + if currentSecondary is not None and chr.canHold(currentSecondary.getItemId()): + sm.unequip(currentSecondary) + else: + sm.sendNext("You are not equipped with a secondary weapon or cannot hold it in your equip inventory.") \ No newline at end of file diff --git a/scripts/npc/9010063.py b/scripts/npc/9010063.py new file mode 100755 index 0000000..6137cec --- /dev/null +++ b/scripts/npc/9010063.py @@ -0,0 +1,179 @@ +# Dressing Room NPC + +equip_type = 0 +equip_page = 0 +page_limit = 300 +expire_time = 5 + +# flags +flag_main = 1 +flag_browse = 1 +flag_search = 0 +# select category +# select specific page +# go back to categories + +# name, buy_cost, rent_cost +categories = [ + ["Hats", 2, 0], + ["Tops", 2, 0], + ["Bottoms", 2, 0], + ["Overalls", 2, 0], + ["Shoes", 2, 0], + ["Gloves", 2, 0], + ["Capes", 2, 0], + ["Weapons", 2, 0], + ["Face Accessories", 2, 0], + ["Eye Accessories", 2, 0], + ["Rings", 2, 0] +] + +selected_item = 0 + +def prompt_main(): + text = "#eYou currently have #b" + str(sm.getVotePoints()) +" Vote Points#n\r\nPlease select a category\r\n" + count = 0 + for category in categories: + if count == 4: + text += "\n#b#L" + repr(count) + "#" + str(category[0]) + "#l" + text += "\t\t\t\t\t\t\t#e#r#L999#Search for an item#l#n\r\n" + else: + text += "\n#b#L" + repr(count) + "#" + str(category[0]) + "#l\r\n" + count += 1 + return text + +def prompt_equips(type, page, limit): + equip_tuple = sm.getDressingRoomEquips(type, page, limit) + + size = equip_tuple.getLeft() + equips = equip_tuple.getRight() + + fromIndex = page + toIndex = page + limit + + if (toIndex > size): + toIndex = size + + text = "Displaying " + repr(fromIndex) + " - " + repr(toIndex) + " of " + repr(size) + " " + categories[type][0] + " \r\n" + for equip in equips: + item_id = equip.getItemId() + text += "#b#L" + repr(item_id) + "##v" + repr(item_id) + "# #z" + repr(item_id) + "##l#k\r\n" + text += "\r\n" + + if page != 0: + text += "#b#L9998#Previous Page\r\n" + + if (toIndex) < size: + text += "#b#L9999#Next Page#l\r\n" + + text += "#b#L10000#Back to Categories#l" + + return text + +def prompt_options(item_id): + selected_item = item_id + text = ( + "You've selected #v{0}# #b#z{0}##k.\r\n\r\n" + "Please select what you would like to do:\r\n" + "#L1#Buy for #b{1}#k VP#l\r\n" + "#L2#Rent for #b{2}#k VP#l\r\n\r\n" + "#L0#Go back to the list#l" + ).format( + item_id, + categories[sm.getDressingRoomEquipType(item_id)][1], + categories[sm.getDressingRoomEquipType(item_id)][2] + ) + + return text + +def prompt_search(): + text = ( + "Please enter the name of the item you want to search for:" + ) + + return text + +def message_done(item_id, cost, rent): + buy_text = "bought" if not rent else "rented" + text = ( + "You've {0} #v{1}# #b#z{1}##k.\r\n\r\n" + "#b{2}#k Vote Points will be deducted from your account.\r\n\r\n" + ).format(buy_text, item_id, cost) + + if rent: + text += "The item will expire in #b{0} minutes#k.".format(expire_time) + + return text + + +while flag_main == 1: + selection_main = sm.sendNext(prompt_main()) + + if selection_main != 999: + flag_browse = 1 + while flag_browse == 1: + selection_equips = sm.sendNext(prompt_equips(selection_main, equip_page, page_limit)) + if selection_equips == 9998: # previous + equip_page -= page_limit + elif selection_equips == 9999: # next + equip_page += page_limit + elif selection_equips == 10000: # exit + flag_browse = 0 + else: + flag_browse = 0 + selection_options = sm.sendNext(prompt_options(selection_equips)) + item = selection_equips + if selection_options == 0: # exit - return to list + flag_browse = 1 + elif selection_options != 0: + cost = categories[selection_main][selection_options] + if sm.getVotePoints() < cost: + sm.sendNext("You do not have enough vote points!") + else: + if selection_options == 1: # buy + sm.giveItem(item) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, False)) + flag_main = 0 # exit npc + elif selection_options == 2: # rent + sm.giveItemWithExpireDate(item, 1, False, 5) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, True)) + flag_main = 0 # exit npc + elif selection_main == 999: + flag_search = 1 + search_result = sm.sendAskText(prompt_search(), "", 0, 12) + search_tuple = sm.getDressingRoomEquipsSearch(search_result) + + size = search_tuple.getLeft() + equips = search_tuple.getRight() + + text_list = "Displaying {0} results for query '{1}'.\r\n".format(size, search_result) + for id, string in equips.items(): + text_list += "#b#L" + repr(id) + "##v" + repr(id) + "# #z" + repr(id) + "##l#k\r\n" + + if (size == 0): + sm.sendNext("There were no results for '{0}'.".format(search_result)) + else: + selection_equips = sm.sendNext(text_list) + + selection_options = sm.sendNext(prompt_options(selection_equips)) + item = selection_equips + cost = categories[sm.getDressingRoomEquipType(selection_equips)][1] + if selection_options == 0: # exit - return to list + flag_browse = 1 + elif selection_options != 0: + cost = categories[sm.getDressingRoomEquipType(selection_equips)][selection_options] + if sm.getVotePoints() < cost: + sm.sendNext("You do not have enough vote points!") + else: + if selection_options == 1: # buy + sm.giveItem(item) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, False)) + flag_main = 0 # exit npc + elif selection_options == 2: # rent + sm.giveItemWithExpireDate(item, 1, False, 5) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, True)) + flag_main = 0 # exit npc \ No newline at end of file diff --git a/scripts/npc/9010095.py b/scripts/npc/9010095.py new file mode 100755 index 0000000..febcf08 --- /dev/null +++ b/scripts/npc/9010095.py @@ -0,0 +1 @@ +sm.sendSayOkay("test") \ No newline at end of file diff --git a/scripts/npc/9030000.py b/scripts/npc/9030000.py new file mode 100755 index 0000000..c25226d --- /dev/null +++ b/scripts/npc/9030000.py @@ -0,0 +1,9 @@ +# Fredrick and quick move NPC + +Freemarket = 910000000 + +if sm.getFieldID() == Freemarket: + sm.getItemsFromTrunkEmployee() +elif sm.sendAskYesNo("Would you like to be teleported to the Free Market?\r\n#b"): + sm.setReturnField() + sm.warp(910000000) \ No newline at end of file diff --git a/scripts/npc/9031015.py b/scripts/npc/9031015.py new file mode 100755 index 0000000..04ac644 --- /dev/null +++ b/scripts/npc/9031015.py @@ -0,0 +1,9 @@ +#Quick move ardent and Pflame NPC + +Ardentmill = 910001000 + +if sm.getFieldID() == Ardentmill: + sm.sendNext("I am not coded\r\n#b") +elif sm.sendAskYesNo("Would you like to teleported to Ardentmill?\r\n#b"): + sm.setReturnField() + sm.warp(910001000) \ No newline at end of file diff --git a/scripts/npc/9062015.py b/scripts/npc/9062015.py new file mode 100755 index 0000000..febcf08 --- /dev/null +++ b/scripts/npc/9062015.py @@ -0,0 +1 @@ +sm.sendSayOkay("test") \ No newline at end of file diff --git a/scripts/npc/9071009.py b/scripts/npc/9071009.py new file mode 100755 index 0000000..94d6298 --- /dev/null +++ b/scripts/npc/9071009.py @@ -0,0 +1 @@ +# 9071009 - Monster Park Electronic display \ No newline at end of file diff --git a/scripts/npc/9072100.py b/scripts/npc/9072100.py new file mode 100755 index 0000000..1c558bd --- /dev/null +++ b/scripts/npc/9072100.py @@ -0,0 +1,9 @@ +sm.setSpeakerID(9071000) +sm.sendNext("SwordieMS uses stateless python scripts!") +sm.setPlayerAsSpeaker() +sm.sendSay("You've kept me waiting, #e#b#h0##k#n. Shame on you! And after I went though all the trouble to " + "obtain a brilliant #t1112726##n, too. You can make it up to me by accepting my challenge. " + "\r\n#i1112726:# #t1112726#") +sm.setSpeakerID(9071004) +sm.sendSay("Ayayaya") +sm.chat("I have ended") diff --git a/scripts/npc/9072201.py b/scripts/npc/9072201.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/npc/9072302.py b/scripts/npc/9072302.py new file mode 100755 index 0000000..939456f --- /dev/null +++ b/scripts/npc/9072302.py @@ -0,0 +1,222 @@ +from net.swordie.ms.enums import EventType + +sm.setSpeakerID(9270035) + +options = ["I want to go somewhere","I want to buy something","Trade Golden Maple Leaf","Trade Maple Leaf Gold","Vote in-game", "View achievements", "View rankings and speed runs"] + +options2 = ["Town Maps","Monster Maps","Boss Entrances","Party Quest Entrances"] + +options3 = ["Trade Mesos for Golden Maple Leaf","Trade Golden Maple Leaf for Mesos"] + +options4 = ["Trade NX for Maple Leaf Gold","Trade Maple Leaf Gold for NX"] + +options5 = ["Shop (Mesos)","Talk to Agent W (Donation Points)","Talk to Lilin (Cash)","Talk to Cygnus (Vote Points)","Buy item buffs (Mesos)","Talk to Bo (Nebulites)","Talk to Vega (Scrolls)","Talk to Fredrick (My Free Market Shop)"] + +maps = [ +[300000000, 680000000, 230000000, 910001000, 260000000, 541000000, 610050000, 540000000, +211060010, 863100000, 105300000, 310000000, 211000000, 101072000, 101000000, 101050000, +130000000, 820000000, 223000000, 410000000, 141000000, 120040000, 209000000, 682000000, +310070000, 401000000, 100000000, 271010000, 251000000, 744000000, 551000000, 103000000, +224000000, 241000000, 240000000, 104000000, 220000000, 150000000, 261000000, 701220000, +807000000, 701210000, 250000000, 800000000, 600000000, 120000000, 200000000, 800040000, +400000000, 102000000, 140000000, 865000000, 801000000, 105000000, 866190000, 693000020, +270000000, 860000000, 273000000, 701100000, 320000000], # Town Maps + +[240070300, 800020110, 610040000, 270030000, 860000032, 101040300, 211060000, 240040500, 551030100, +271000300, 211061000, 910170000, 211041100, 240010501, 270020000, 106030700, 910160000, 120040000, +910160000, 610030010, 863000100, 240093100, 920020100, 910180000, 807050501, 272000300, 682010200, 541000300, +241000200, 220050300, 102040200, 240010700, 241000210, 241000220, 701220500, 272010000, 910028500, +910028600, 706041000, 706041005, 273050000, 231040400, 401050000, 541020000, 502010010], # Monster Maps + +#[ [211042300, "Zakum"], [262030000, "Hilla"], +#[105200000, "Root Abyss"], [211070000, "Von Leon"], [272020110, "Arkarium"], [401060000, "Easy Magnus"], +#[401060000, "Normal/Hard Magnus"], [270050000, "Pink Bean"], [271030600, "Cygnus"], [350060300, "Lotus"], +#[863010000, "Gollux"], [211041700, "Ranmaru"], [811000008, "Princess No"], [970000106, "Hekaton"], +#[970072200, ["Ursus"], [105300303, "Damien"], [610030010, "Crimsonwood Keep"], [450004000, "Lucid"], +#[927030060, "Black Mage"]] # Boss Maps + [[105100100, "Balrog"], [211042300, "Zakum"], [240050400, "Horntail"], [270050000, "Pink Bean"], [211070000, "Von Leon"], [262030000, "Hilla"], [272020110, "Arkarium"], + [105200000, "Root Abyss"], [401060000, "Magnus"], [271030600, "Cygnus"], [211041700, "Ranmaru"], [811000008, "Princess No"], [350060300, "Lotus"], + [863010000, "Gollux"], [970072200, "Ursus"], [302090500, "Hekaton"], [105300303, "Damien"]], + + [[861000000, "Alien Party Quest"], [610030020, "Crimsonwood Keep"], [956000100, "Picture World Guild Party Quest"], [610030020, "Guild Party Quest"]] +] + +pqEventTypeIDs = [0, 1, 2, 16, 40, 41, 42, 43, 45, 46, 47, 50] + +list = "Hello #r#h0##k! How can I help you today?" +i = 0 +while i < len(options): + list += "\r\n#b#L" +str(i)+ "#" + str(options[i]) + i += 1 +i = 0 +option = sm.sendNext(list) +if option == 0: # I want to go somewhere (maps) + list = "These are your options: " + while i < len(options2): + list += "\r\n#b#L" +str(i)+ "#" + str(options2[i]) + i += 1 + i = 0 + ans1 = sm.sendNext(list) + list = "These are your options: " + if ans1 == 1: # town/monster maps + while i < len(maps[ans1]): + list += "\r\n#L" + str(i) + "##b#m" + str(maps[ans1][i]) + "#" + i += 1 + if ans1 == 0: # town/monster maps + while i < len(maps[ans1]): + list += "\r\n#L" + str(i) + "##b#m" + str(maps[ans1][i]) + "#" + i += 1 + else: # boss maps + while i < len(maps[ans1]): + list += "\r\n#L" + str(i) + "##b" + str(maps[ans1][i][1]) + i += 1 + + + ans2 = sm.sendNext(list) + if ans1 == 0: + sm.warp(maps[ans1][ans2], 1) + elif ans1 == 1: + sm.warp(maps[ans1][ans2], 1) + elif ans1 == 2 or ans1 == 3: # boss maps + sm.warp(maps[ans1][ans2][0], 1) + +if option == 1: + list = "These are your options: " + while i < len(options5): + list += "\r\n#b#L" +str(i)+ "#" + str(options5[i]) + i += 1 + i = 0 + ans1 = sm.sendNext(list) + list = "These are your options: " + if ans1 == 0: + sm.openShop(9201060) + sm.dispose() + if ans1 == 1: + sm.invokeAfterDelay(10, "openNpc", 9000039) + sm.dispose() + if ans1 == 2: + sm.invokeAfterDelay(10, "openNpc", 9010036) + sm.dispose() + if ans1 == 3: + sm.invokeAfterDelay(10, "openNpc", 9010034) + sm.dispose() + if ans1 == 4: #Create Item Buff Shop + sm.dispose() + if ans1 == 5: + sm.invokeAfterDelay(10, "openNpc", 9201182) + sm.dispose() + if ans1 == 6: + sm.invokeAfterDelay(10, "openNpc", 2041016) + sm.dispose() + if ans1 == 7: + sm.invokeAfterDelay(10, "openNpc", 9030000) + sm.dispose() + +if option == 2: + list = "You currently have #r"+ str(sm.getMesos()) +"#b Mesos#k\r\nThese are your options: " + while i < len(options3): + list += "\r\n#b#L" +str(i)+ "#" + str(options3[i]) + i += 1 + i = 0 + ans1 = sm.sendNext(list) + list = "These are your options: " + + if ans1 == 0: + answer = sm.sendAskNumber("How many #b#v 4034382 # #t 4034382 #(s)#k #kdo you wish purchase?", 0, 1, 10) + + Total = answer * 1 + totalQty = answer * 1100000000 + + if sm.getMesos() <= totalQty: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.canHold(4034382, Total): + sm.sendSayOkay("Please make room in your inventory first.") + + else: + sm.deductMesos(totalQty) + sm.giveItem(4034382, Total) + sm.sendSayOkay("Thank you for your purchase!\r\nYou have #r"+ str(sm.getMesos()) +"#b Mesos#k left.") + sm.dispose() + + if ans1 == 1: + canSell = (9 -(sm.getMesos()/1000000000)) + answer = sm.sendAskNumber("How many #b#v 4034382 # #t 4034382 #(s)#k #kdo you wish sell?", 0, 1, canSell) + + Total = answer * 1 + totalQty = answer * 1000000000 + + + if not sm.hasItem(4034382, Total): + sm.sendSayOkay("You do not have enough #b#v 4034382 # #t 4034382 #(s)#k.") + sm.dispose() + + else: + sm.consumeItem(4034382, Total) + sm.giveMesos(totalQty) + sm.chat("You have gained mesos. (+"+ str(totalQty) +")") + sm.sendSayOkay("Thank you for your purchase!\r\nYou now have #r"+ str(sm.getMesos()) +"#b Mesos#k.") + sm.dispose() + +if option == 3: + list = "You currently have #r"+ str(sm.getNX()) +"#b NX#k\r\nThese are your options: " + while i < len(options4): + list += "\r\n#b#L" +str(i)+ "#" + str(options4[i]) + i += 1 + i = 0 + ans1 = sm.sendNext(list) + list = "These are your options: " + + if ans1 == 0: + answer = sm.sendAskNumber("How many #b#v 4430000 # #t 4430000 #(s)#k #kdo you wish purchase?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1100000 + + if sm.getNX() <= totalQty: + sm.sendSayOkay("You do not have enough #bNX#k.") + sm.dispose() + + elif not sm.canHold(4430000, Total): + sm.sendSayOkay("Please make room in your inventory first.") + + else: + sm.deductNX(totalQty) + sm.giveItem(4430000, Total) + sm.sendSayOkay("Thank you for your purchase!\r\nYou have #r"+ str(sm.getNX()) +"#b NX#k left.") + sm.dispose() + + if ans1 == 1: + answer = sm.sendAskNumber("How many #b#v 4430000 # #t 4430000 #(s)#k #kdo you wish sell?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1000000 + + + if not sm.hasItem(4430000, Total): + sm.sendSayOkay("You do not have enough #b#v 4430000 # #t 4430000 #(s)#k.") + sm.dispose() + + else: + sm.consumeItem(4430000, Total) + sm.giveNX(totalQty) + sm.sendSayOkay("Thank you for your purchase!\r\nYou now have #r"+ str(sm.getNX()) +"#b NX#k.") + sm.dispose() + +if option == 4: + sm.dispose() +if option == 5: + sm.sendNext("Here are all the achievements. Bolded achievements are the ones you already completed.\r\n"+sm.getAchievements()) +if option == 6: + eventCooldowns = "" + for i in pqEventTypeIDs: + eType = EventType.getByVal(i) + if eType is not None and sm.getEventAmountDone(eType) > 0: + eventCooldowns += ("PQs will reset in: " + sm.getTimeUntilEventReset(eType) + "\r\n\r\n") + break + for i in range(100): + eType = EventType.getByVal(i) + if i not in pqEventTypeIDs and eType is not None and sm.getEventAmountDone(eType) > 0: + eventCooldowns += ("" + eType.name() + ": " + sm.getTimeUntilEventReset(eType) + "\r\n") + sm.sendSayOkay(eventCooldowns) diff --git a/scripts/npc/9075301.py b/scripts/npc/9075301.py new file mode 100755 index 0000000..88b9d2b --- /dev/null +++ b/scripts/npc/9075301.py @@ -0,0 +1,5 @@ +# ESS (9075301) | Evo Lab initiator +from net.swordie.ms.enums import UIType + +sm.openUI(UIType.UI_EVOLVING_SYSTEM) +sm.updateCores() \ No newline at end of file diff --git a/scripts/npc/9075308.py b/scripts/npc/9075308.py new file mode 100755 index 0000000..ffc994e --- /dev/null +++ b/scripts/npc/9075308.py @@ -0,0 +1,3 @@ +# Evo lab Link 1 +#if sm.hasQuestCompleted(1847): +sm.warp(957010000) \ No newline at end of file diff --git a/scripts/npc/9075309.py b/scripts/npc/9075309.py new file mode 100755 index 0000000..7aa2652 --- /dev/null +++ b/scripts/npc/9075309.py @@ -0,0 +1,3 @@ +# Evo lab Link 2 +#if sm.hasQuestCompleted(1848): +sm.warp(957011000) \ No newline at end of file diff --git a/scripts/npc/9075310.py b/scripts/npc/9075310.py new file mode 100755 index 0000000..5ef19bb --- /dev/null +++ b/scripts/npc/9075310.py @@ -0,0 +1,3 @@ +# Evo lab Link 3 +#if sm.hasQuestCompleted(1848): +sm.warp(957012000) \ No newline at end of file diff --git a/scripts/npc/9075311.py b/scripts/npc/9075311.py new file mode 100755 index 0000000..3c39d90 --- /dev/null +++ b/scripts/npc/9075311.py @@ -0,0 +1,3 @@ +# Evo lab Link 4 +#if sm.hasQuestCompleted(1848): +sm.warp(957013000) \ No newline at end of file diff --git a/scripts/npc/9075312.py b/scripts/npc/9075312.py new file mode 100755 index 0000000..e388d7f --- /dev/null +++ b/scripts/npc/9075312.py @@ -0,0 +1,3 @@ +# Evo lab Link 4 +#if sm.hasQuestCompleted(1848): +sm.warp(957014000) \ No newline at end of file diff --git a/scripts/npc/9075313.py b/scripts/npc/9075313.py new file mode 100755 index 0000000..e18f55e --- /dev/null +++ b/scripts/npc/9075313.py @@ -0,0 +1,3 @@ +# Evo lab Link 5 +#if sm.hasQuestCompleted(1848): +sm.warp(957015000) \ No newline at end of file diff --git a/scripts/npc/9075314.py b/scripts/npc/9075314.py new file mode 100755 index 0000000..879a6bf --- /dev/null +++ b/scripts/npc/9075314.py @@ -0,0 +1,3 @@ +# Evo lab Link 6 +#if sm.hasQuestCompleted(1848): +sm.warp(957016000) \ No newline at end of file diff --git a/scripts/npc/9075315.py b/scripts/npc/9075315.py new file mode 100755 index 0000000..1d015ff --- /dev/null +++ b/scripts/npc/9075315.py @@ -0,0 +1,3 @@ +# Evo lab Link 7 +#if sm.hasQuestCompleted(1848): +sm.warp(957017000) \ No newline at end of file diff --git a/scripts/npc/9075316.py b/scripts/npc/9075316.py new file mode 100755 index 0000000..2451410 --- /dev/null +++ b/scripts/npc/9075316.py @@ -0,0 +1,3 @@ +# Evo lab Link 8 +#if sm.hasQuestCompleted(1848): +sm.warp(957018000) \ No newline at end of file diff --git a/scripts/npc/9075317.py b/scripts/npc/9075317.py new file mode 100755 index 0000000..3999b8a --- /dev/null +++ b/scripts/npc/9075317.py @@ -0,0 +1,3 @@ +# Evo lab Link 9 +#if sm.hasQuestCompleted(1848): +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/npc/9090008.py b/scripts/npc/9090008.py new file mode 100755 index 0000000..e9b7337 --- /dev/null +++ b/scripts/npc/9090008.py @@ -0,0 +1,160 @@ +from net.swordie.ms.scripts import ScriptUtil as su; + + +mapleLeafID = 4001126 +mesosBagID = 4031138 + +mapleItemEquips = [ + 1003863, # - Onyx Maple Hat + 1012376, # - Onyx Maple Gum + 1052612, # - Onyx Maple Suit + 1102562, # - Onyx Maple Cape + 1113034, # - Onyx Maple Ring + 1122252, # - Onyx Maple Pendant + 1132228 # - Onyx Maple Buckle + +]; +mapleItemWeapons = [ + 1212066, # - Onyx Maple Rod + 1222061, # - Onyx Maple Soul Shooter + 1232060, # - Onyx Maple Devil Sword + 1242065, # - Onyx Maple Chain Sword + 1252064, # - Onyx Maple Scepter + 1302277, # - Onyx Maple Sword + 1312155, # - Onyx Maple Axe + 1322205, # - Onyx Maple Mace + 1332227, # - Onyx Maple Cutter + 1352825, # - Onyx Maple Claw + 1362092, # - Onyx Maple Cane + 1372179, # - Onyx Maple Wand + 1382211, # - Onyx Maple Staff + 1402199, # - Onyx Maple Two-handed Sword + 1412137, # - Onyx Maple Two-handed Axe + 1422142, # - Onyx Maple Maul + 1432169, # - Onyx Maple Spear + 1442225, # - Onyx Maple Polearm + 1452207, # - Onyx Maple Longbow + 1462195, # - Onyx Maple Crossbow + 1472216, # - Onyx Maple Steer + 1482170, # - Onyx Maple Grip + 1492181, # - Onyx Maple Shooter + 1522096, # - Pearl Maple Twin Angels + 1532100, # - Onyx Maple Cannon + 1542070, # - Scarlet Katana + 1552070 # - Onyx Maple Fan + +]; + + +strBuyOptions = "What would you like to buy?#b\r\n#L0#Vampire Blood\r\n#L1#Onyx Maple Equips\r\n#L2#Onyx Maple Weapons\r\n#L3#Trade Maple Leaves for Experience "; + +buyOptionsSelection = sm.sendSayOkay(strBuyOptions); +buyEquipSelection = -1; +buyEquipYesNo = -1; + +#========================== +# Vampire Blood +#========================== + +if buyOptionsSelection == 0: + answer = sm.sendAskNumber("How much #v2433559##bVampire Blood #kdo you wish to purchase?\r\n#r 500 #bMaple Leaves #kEach", 0, 1, 1000) + + totalCost = answer * 500 + + if sm.getQuantityOfItem(4001126) < totalCost: + sm.sendSayOkay("You do not have enough #v4001126##bMaple Leaves.") + sm.dispose() + + if not sm.canHold(2433559, answer): + sm.sendSayOkay("Please make sure you have room in your inventory.") + + else: + sm.consumeItemFromDiffStacks(4001126, totalCost) + sm.giveItem(2433559, answer) + sm.sendSayOkay("Enjoy your #v2433559##bVampire Blood #k!") + +#========================== +# EQUIPMENT +#========================== + +if buyOptionsSelection == 1: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b"; + i = 0; + for itemEquip in mapleItemEquips: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n"; + i+=1; + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList); + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemEquips[buyEquipSelection]) + "\r\n " +su.getItemImg(mapleLeafID)+" #b5000 \r\n "+su.getItemImg(mesosBagID)+" #b 10 Million Mesos"; + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr); + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID); + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory"); + sm.dispose(); + else: + sm.deductMesos(10000000); + chr.consumeItemFromDiffStacks(mapleLeafID,5000); + sm.giveItem(mapleItemEquips[buyEquipSelection]); + sm.dispose(); + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos"); + sm.dispose(); + + +#========================== +# WEAPONS +#========================== + +if buyOptionsSelection == 2: + strItemEquipsList = "What would you like to buy?\r\n\r\nEach item will cost: \r\n"+su.getItemImg(mapleLeafID)+" #b5000\r\n"+su.getItemImg(mesosBagID)+" #b10 Million Mesos\r\n\r\n#b"; + i = 0; + for itemEquip in mapleItemWeapons: + strItemEquipsList += su.addSelectItem(i)+su.getItemImg(itemEquip)+" "+su.getItemName(itemEquip)+"\r\n"; + i+=1; + + buyEquipSelection = sm.sendSayOkay(strItemEquipsList); + + +if buyEquipSelection >= 0: + buyEquipStr = "Are you sure you want to buy: " + su.getItemImg(mapleItemWeapons[buyEquipSelection]) + " \r\n" +su.getItemImg(mapleLeafID)+" #b5000 \r\n"+su.getItemImg(mesosBagID)+" #b 10 Million Mesos"; + buyEquipYesNo = sm.sendAskYesNo(buyEquipStr); + +if buyEquipYesNo == True: + mapleLeafQuantity = sm.getQuantityOfItem(mapleLeafID); + if mapleLeafQuantity >= 5000 and sm.getMesos() >= 10000000: + if chr.getEquipInventory().getEmptySlots() <= 0: + sm.sendSayOkay("Make room in your inventory"); + sm.dispose(); + else: + sm.deductMesos(10000000); + chr.consumeItemFromDiffStacks(mapleLeafID,5000); + sm.giveItem(mapleItemWeapons[buyEquipSelection]); + sm.dispose(); + else: + sm.sendSayOkay("You do not have enough maple leaves or mesos"); + sm.dispose(); + +#========================== +# Trade Maple Leaves For Experience +#========================== + +if buyOptionsSelection == 3: + answer = sm.sendAskNumber("How many #v4001126##bMaple Leaves #kdo you wish to trade?", 0, 1, 1000) + + totalExp = answer * 35 # EXP Per Maple leaf. + totalQty = answer * 1 # Leaves Per EXP Tick. + + if sm.getQuantityOfItem(4001126) < totalQty: + sm.sendSayOkay("You do not have enough#v4001126##bMaple Leaves.\r\n#kYou only have#r#c4001126#\r\n.") + sm.dispose() + + else: + sm.consumeItemFromDiffStacks(4001126, totalQty) + sm.giveExp(totalExp) + sm.sendSayOkay("Thank you for the #v4001126##bMaple Leaves.\r\n#kEnjoy the experience!") \ No newline at end of file diff --git a/scripts/npc/9131005.py b/scripts/npc/9131005.py new file mode 100755 index 0000000..31fe000 --- /dev/null +++ b/scripts/npc/9131005.py @@ -0,0 +1,13 @@ +# Princess No (9131005) | +sm.setPlayerAsSpeaker() +sm.removeEscapeButton() +sm.sendNext("Please step aside, madam. I have no quarrel with you.") +sm.setSpeakerID(parentID) +sm.sendNext("How dar you speak to me in such a familiar tongue. I am Kichou, daughter of the Saitou Dousan, lawful wife of the Demon King!") +sm.setPlayerAsSpeaker() +sm.sendNext("The tales of your beauty are not exaggerations, Lady Nou, but you ust stand aside. Your husband is my sworn enemy.") +sm.setSpeakerID(parentID) +sm.sendNext("Cocky little brat, are you trying to pick a fight with me?") +sm.warp(807040000) + + diff --git a/scripts/npc/9201324.py b/scripts/npc/9201324.py new file mode 100755 index 0000000..7d8e366 --- /dev/null +++ b/scripts/npc/9201324.py @@ -0,0 +1,16 @@ +sm.setSpeakerID(9201324) +sm.sendNext("I seem to have lost my pet, could you help me find her? I'll need to know you're trustworthy first!.") +if sm.sendAskYesNo("Are you ready for your question?"): + question = sm.sendAskText("What is the colour of Athena Pierce's bow?", "", 1, 20) + if question == "Blue": + sm.sendNext("I'm so glad I can trust you! Hurry now, I really miss her.") + sm.sendNext("Take this item with you so she knows that you can be trusted.") + sm.sendNext("I heard from an adventurer they might have seen her deep under the waves in a cave.") + sm.sendNext("Please return her safely to me.") + if sm.canHold(4161080): + sm.giveItem(4161080) + else: + sm.sendNext("You don't have pocket space for my item!") + +else: + sm.sendNext("Please return why you can answer my question!") \ No newline at end of file diff --git a/scripts/npc/9201492.py b/scripts/npc/9201492.py new file mode 100755 index 0000000..51c08a0 --- /dev/null +++ b/scripts/npc/9201492.py @@ -0,0 +1,14 @@ +import random + +items = [1050004 + +] + + +if sm.sendAskYesNo("#eHey, i'm a retarded bitch but i can give you any #e#bOverall#n #ein the game!"): + question = sm.sendAskYesNo("#eWould you like to spend #r2k NX#n #efor a random #bOverall?") + if question: + sm.giveItem(random.choice(items)) + sm.deductNX(-2000) + else: + sm.sendNext("no") \ No newline at end of file diff --git a/scripts/npc/9201610.py b/scripts/npc/9201610.py new file mode 100755 index 0000000..75b243f --- /dev/null +++ b/scripts/npc/9201610.py @@ -0,0 +1,20 @@ +import random + +items = [1020000,1021000,1022015,1022014,1022013,1022012,1022011,1022010,1022009,1022008,1022007,1022006,1022005,1022004,1022003,1022002,1022001,1022000,1022031,1022030,1022029, +1022028,1022027,1022026,1022025,1022024,1022023,1022022,1022021,1022020,1022019,1022018,1022017,1022016,1022047,1022046,1022045,1022044,1022043,1022042,1022041,1022040,1022039, +1022038,1022037,1022036,1022035,1022034,1022033,1022032,1022063,1022062,1022061,1022059,1022057,1022056,1022055,1022054,1022053,1022052,1022051,1022050,1022049,1022048,1022079, +1022075,1022074,1022072,1022071,1022070,1022069,1022068,1022066,1022065,1022064,1022095,1022090,1022087,1022086,1022085,1022084,1022083,1022081,1022110,1022109,1022108,1022104, +1022102,1022122,1022121,1022142,1022158,1022174,1022173,1022188,1022187,1022184,1022183,1022177,1022176,1022207,1022201,1022196,1022194,1022223,1022230,1022229,1022227,1022250, +1022249,1022248,1022247,1022244,1022243,1022270,1022269,1022267,1022266,1022265,1022263,1022262,1022259,1022258,1022257,1022287,1022286,1022285,1022284,1022283,1022282,1022280, +1022279,1022276,1022275,1022274,1022297,1022296,1022295,1022292,1022288 + +] + + +question = sm.sendAskYesNo("#eWould you like to spend #r2k NX#n #efor a random #bEye Acessory?") +randitem = random.choice(items) +if question and sm.canHold(randitem) and chr.getUser().getNxPrepaid() >= 2000: + sm.giveItem(randitem) + sm.deductNX(-2000) +else: + sm.sendNext("#e#dYour inventory is full or you don't have enough NX.") \ No newline at end of file diff --git a/scripts/npc/9209005.py b/scripts/npc/9209005.py new file mode 100755 index 0000000..7be6faf --- /dev/null +++ b/scripts/npc/9209005.py @@ -0,0 +1,27 @@ +# Fishing Npc (9209005 Tae Gong) + +from net.swordie.ms.constants import GameConstants + +FISH_NET = 2270008 +NET_COST = 3000000 + +FISHING_MAP = GameConstants.FISHING_MAP + +opts = ["Go to Fishing Map", "Buy fishing nets", "Exchange ", "Exchange ", "Exchange "] +menu = sm.sendNext("What would you like to do?\r\n#b" + sm.menu(opts) + "#k") + +def exchangeFish(opt): + sm.sendNext("TODO: ") + +if menu == 0: + sm.warp(FISHING_MAP) +elif menu == 1: + if sm.sendAskYesNo("It requires " + str(net_cost) + " mesos for 120 nets. Do you want to purchase?"): + if sm.getMesos() >= NET_COST and sm.canHold(FISH_NET): + sm.deductMesos(NET_COST) + sm.giveItem(FISH_NET, 120) + sm.sendSayOkay("Happy Fishing!") + else: + sm.sendNext("Seems like you don't have enough mesos or enough space in your USE inventory.") +elif menu >= 2 and menu <= 4: + exchangeFish(menu) diff --git a/scripts/npc/9270064.py b/scripts/npc/9270064.py new file mode 100755 index 0000000..fcc9d80 --- /dev/null +++ b/scripts/npc/9270064.py @@ -0,0 +1,139 @@ +from net.swordie.ms.enums import InvType + +potList = ["STR %", "DEX %", "INT %", "LUK %", "All Stat %", "STR", "DEX", "INT", "LUK", "ATT", "Magic ATT", "All Stat","Max MP","Max HP", "HP %", "MP %", "Boss Damage", "IED", "ATT %", "Magic ATT %", "Damage %", "STR Per 10 levels", "DEX Per 10 levels", "INT Per 10 levels", "LUK Per 10 levels", "Min Crit", "Max Crit", "#rProceed with current list"] +cubeList = [[2710000, "Occult Cube", 700], [2711005, "Master Craftsman's Cube", 2000], [5062009, "Red Cube", 11000], [5062000, "Miracle Cube", 15000], [5062005, "Enlightning Miracle Cube", 20000], [5062006, "Platinum Miracle Cube", 30000], [5062500, "Bonus Potential Cube", 30000]] +playerPotList = [] +eeScroll=0 +tempList = [] +listitem = [] +itemID = [] +newlist = [] +bagIndex = 0 +bPotCube = 5062500 +requirementsArr = [{}, {}, {}, {}, {}] +circulatorsList = [[2702000, "Ability Circulator", 250], [5062800, "Miracle Circulator", 4000]] + +action = sm.sendNext("Hello there I can help you cube your items or inner potential.\r\n#b#L0# I'd like to cube my equips.#l\r\n#L1# I'd like to reset my inner ability.#l") +if action == 0: + def checkWhatIsIt(str): + if str.count("%") > 0: + return "%" + else: + return "+" + def FilterPots(givenPots, toFilterIn): + toFilterIn = toFilterIn.split("\r\n") + for x in range(len(givenPots)): + print "\n".join(s for s in givenPots if toFilterIn[x] in s) + for x in range(len(cubeList)): + newlist.append('#L'+str(x)+'##v'+str(cubeList[x][0])+'#'+'#t'+str(cubeList[x][0])+'##l\r\n') + selection = sm.sendNext("Hey #h #. I am in charge of Auto Cubing. Please choose of the cubes below:\r\n\r\n\r\n"+''.join(newlist)) + selectedCube = selection + newlist = [] + if cubeList[selectedCube][0] == bPotCube: + listitem = eval(sm.getItemsEligibleForBonusPot()) + else: + listitem = eval(sm.getItemsEligibleForBasePot(cubeList[selectedCube][0])) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("No equips to cube.") + sm.dispose() + selection = sm.sendNext(''.join(newlist)) + bagIndex = selection + itemToCube = str(sm.getItemIDByBagIndex(selection, InvType.EQUIP)) + selection = sm.sendNext("You have selected #v"+itemToCube+"# #e #t"+itemToCube+"##n.\r\n\r\How would you like to cube the item?:\r\n#L0#Manually cube the item.#l\r\n#L1#Cube using an automated, pre-setup potential lines.#l") + if cubeList[selectedCube][0] == 5062500: + bonus = True + else: + bonus = False + if selection == 0: + while sm.sendNext("#fs12#"+ sm.getPotentialLines(bagIndex, False, bonus) + "\r\nPress any line to re-cube.") > -1: + if sm.hasItem(cubeList[selectedCube][0]): + if sm.getQuantityOfItem(cubeList[selectedCube][0]) <= 1: + sm.setBoxChat() + sm.sendNext("You are almost out of cubes.") + sm.setSpeakerID(9270064) + sm.consumeCube(bagIndex, cubeList[selectedCube][0]) + sm.consumeItem(cubeList[selectedCube][0]) + + else: + if chr.getUser().getMaplePoints() >= cubeList[selectedCube][2]: + sm.consumeCube(bagIndex, cubeList[selectedCube][0]) + chr.addNx(-cubeList[selectedCube][2]) + else: + sm.sendSayOkay("You do not have enough NX to cube.") + break + elif selection == 1: + choice = 0 + while choice < len(potList) - 1: + text = "" + for x in range(len(potList)): + text += "#L" + str(x) + "##b" + potList[x] + "#l\r\n" + choice = sm.sendNext(text) + if choice < len(potList) - 1: + amount = sm.sendAskNumber("How much " + potList[choice] + " would you like to cube for?", 1, 1, 100) + # + outPut = "" + for k in range (len(requirementsArr)): + outPut += "#bCombo " + str(k + 1) + ":\r\n" + for key, value in requirementsArr[k].items(): + outPut += "#r" + ("{}: {}".format(key, value)) + ", " + outPut += "\r\n" + combo = sm.sendAskNumber(outPut + "What combo would you like to add this stat to?", 0, 1, 5) + requirementsArr[combo - 1][potList[choice]] = amount + if choice == len(potList) - 1: + chosenStatsSay = "Once one of these combinations is achieved the npc will automatically stop cubing.\r\n" + outPut = "" + for k in range (len(requirementsArr)): + outPut += "#bCombo " + str(k) + ":\r\n" + for key, value in requirementsArr[k].items(): + outPut += "#r" + ("{}: {}".format(key, value)) + ", " + outPut += "\r\n" + chosenStatsSay += outPut + sm.sendNext(chosenStatsSay) + while sm.sendNext("#fs12#"+ sm.getPotentialLines(bagIndex, False, bonus) + "\r\nPress any line to re-cube.") > -1: + if sm.itemHasWantedStatsList(requirementsArr, bagIndex, bonus): + sm.setNpcOverrideBoxChat(9270064) + sm.sendNext("The item has achieved the required stats.") + sm.dispose() + if sm.hasItem(cubeList[selectedCube][0]): + sm.consumeCube(bagIndex, cubeList[selectedCube][0]) + sm.consumeItem(cubeList[selectedCube][0]) + + else: + if chr.getUser().getMaplePoints() >= cubeList[selectedCube][2]: + sm.consumeCube(bagIndex, cubeList[selectedCube][0]) + chr.addNx(-cubeList[selectedCube][2]) + else: + sm.sendSayOkay("You do not have enough NX to cube.") + sm.dispose() +elif action == 1: + newlist = "" + for x in range(len(circulatorsList)): + newlist += ('#L'+str(x)+'##v'+str(circulatorsList[x][0])+'#'+'#t'+str(circulatorsList[x][0])+'##l\r\n') + circulatorChoice = sm.sendNext(newlist) + while sm.sendNext("#fs12#" + sm.getInnerAbilityLines() + "\r\nPress any line to reset your inner ability.") > -1: + if sm.hasItem(circulatorsList[circulatorChoice][0]): + if sm.getQuantityOfItem(circulatorsList[circulatorChoice][0]) <= 1: + sm.setNpcOverrideBoxChat(9270064) + sm.sendNext("You are almost out of circulators.") + sm.setSpeakerID(9270064) + if sm.resetInnerAbility(circulatorsList[circulatorChoice][0]): + sm.consumeItem(circulatorsList[circulatorChoice][0]) + else: + sm.sendNext("You cannot reset your Inner Ability with this circulator.") + sm.dispose() + + else: + if sm.getHonorExp() >= circulatorsList[circulatorChoice][2]: + if sm.resetInnerAbility(circulatorsList[circulatorChoice][0]): + sm.consumeItem(circulatorsList[circulatorChoice][0]) + sm.deductHonorExp(circulatorsList[circulatorChoice][2]) + else: + sm.sendNext("You cannot reset your Inner Ability with this circulator.") + sm.dispose() + else: + sm.sendSayOkay("You do not have enough Honor Exp to reset your Inner Ability.") + sm.dispose() \ No newline at end of file diff --git a/scripts/npc/9310041.py b/scripts/npc/9310041.py new file mode 100755 index 0000000..23fa5d0 --- /dev/null +++ b/scripts/npc/9310041.py @@ -0,0 +1,53 @@ +# Zhikeseng (9310041) | Mount Song-Shaolin Area : Temple Plaza + +INTERCEPTED_MESSAGE = 4034635 +ELDER_JUNG = 9310049 +WISE_CHIEF_PRIEST = 9310053 +NOT_A_DEMON = 62002 + +sm.removeEscapeButton() +sm.setSpeakerID(parentID) +sm.setBoxChat() +if sm.hasQuest(62001): + if sm.hasQuest(NOT_A_DEMON): + sm.sendSayOkay("I'm waiting...") + + elif sm.hasQuestCompleted(NOT_A_DEMON): + sm.sendSayOkay("Turns out you're a human after all...") + + else: + sm.sendNext("Hello! Goodbye! Shaolin Temple is closed! Come back and visit us again real soon!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerNoEscape() + if not sm.hasItem(INTERCEPTED_MESSAGE): + sm.sendNext("#b(I don't think I can enter just by word from elder Jung, I should find that message before heading here again.") + sm.diposse() + sm.sendNext("Wait, I need to deliver this message to the #b#p"+ str(WISE_CHIEF_PRIEST) +"##k! #b#p"+ str(ELDER_JUNG) +"##k from Mount Song Hamlet sent me!") + + sm.setSpeakerID(parentID) + sm.setBoxChat() + sm.sendNext("The #b#p"+ str(WISE_CHIEF_PRIEST) +"##k? The #b#p"+ str(WISE_CHIEF_PRIEST) +"##k, you say? " + "Why didn't you say so! The #b#p"+ str(WISE_CHIEF_PRIEST) +"##k is exactly the person who gave me orders not to let anyone in!") + + sm.sendNext("Just look around. Even the censers are possessed by evil spirits, and you look even scarier than they do.") + + sm.sendNext("You probably have a legion of demons tap-dancing inside you, so I can't let you in. Bye-bye now!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerNoEscape() + sm.sendNext("Alright.. Listen up motherfucker.\r\n" + "My look is 'singular' not 'scary' and I'm NOT possessed.") + + sm.setSpeakerID(parentID) + sm.setBoxChat() + response = sm.sendAskYesNo("That's what the last guy said, before he burst into flames and tried to eat my robe. " + "If you REALLY want to enter the temple to talk to The #b#p"+ str(WISE_CHIEF_PRIEST) +"##k, you're going to have to prove you're human.") + + if response: + sm.sendNext("Then defeat 100 Censers and bring me the Prayer Beads they stole. " + "I'll be able to tell if you're human because they glow when humans hold them.") + sm.startQuestNoCheck(NOT_A_DEMON) # [Shaolin Temple] Not a demon + +else: + sm.sendSayOkay("Hello! Goodbye! Shaolin Temple is closed! Come back and visit us again real soon!") \ No newline at end of file diff --git a/scripts/npc/9330278.py b/scripts/npc/9330278.py new file mode 100755 index 0000000..266593a --- /dev/null +++ b/scripts/npc/9330278.py @@ -0,0 +1,479 @@ +if sm.sendNext: + selection = sm.sendNext("Hi. I have the best totems around. Want to take a look?\r\nYou currently have #r"+ str(sm.getFriendPoints()) +" #bFriendship Points\r\n" + "#L0#Trade #r1000#b Friendship Points for #v 04310126 # #t 04310126 #(s)\r\n" + "#L1#Trade #v 04310126 # #t 04310126 #(s) for #r1000#b Friendship Points\r\n\r\n" + "#L2##v 1202086 # #z 1202086 ##r (1000 Friendship Points)#b\r\n" + "#L3##v 1202085 # #z 1202085 ##r (1000 Friendship Points)#b\r\n" + "#L4##v 1202084 # #z 1202084 ##r (1000 Friendship Points)#b\r\n" + "#L5##v 1202083 # #z 1202083 ##r (1000 Friendship Points)#b\r\n" + "#L6##v 1202124 # #z 1202124 ##r (5000 Friendship Points)#b\r\n" + "#L7##v 1202089 # #z 1202089 ##r (6000 Friendship Points)#b\r\n" + "#L8##v 1202090 # #z 1202090 ##r (6000 Friendship Points)#b\r\n" + "#L9##v 1202091 # #z 1202091 ##r (6000 Friendship Points)#b\r\n" + "#L10##v 1182162 # #z 1182162 ##r (6000 Friendship Points)#b\r\n" + "#L11##v 1202094 # #z 1202094 ##r (10000 Friendship Points)#b\r\n" + "#L12##v 1202095 # #z 1202095 ##r (10000 Friendship Points)#b\r\n" + "#L13##v 1202096 # #z 1202096 ##r (10000 Friendship Points)#b\r\n" + "#L14##v 1202097 # #z 1202097 ##r (10000 Friendship Points)#b\r\n" + "#L15##v 1202050 # #z 1202050 ##r (15000 Friendship Points)#b\r\n" + "#L16##v 1202054 # #z 1202054 ##r (15000 Friendship Points)#b\r\n" + "#L17##v 1202058 # #z 1202058 ##r (15000 Friendship Points)#b\r\n" + "#L18##v 1202062 # #z 1202062 ##r (15000 Friendship Points)#b\r\n" + "#L19##v 1202236 # #z 1202236 ##r (500000 Friendship Points)#b\r\n") + + + if selection == 0: + answer = sm.sendAskNumber("How many #b#v 04310126 # #t 04310126 #(s)#k #kdo you wish purchase?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1000 # Cost Per Coin + + if sm.getFriendPoints() < totalQty: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + else: + sm.deductFriendPoints(totalQty) + sm.giveItem(4310126, Total) + sm.sendSayOkay("Thank you for your purchase!\r\nYou have #r"+ str(sm.getFriendPoints()) +"#b Friendship Points#k left.") + sm.dispose() + + if selection == 1: + answer = sm.sendAskNumber("How many #b#v 04310126 # #t 04310126 #(s)#k #kdo you wish sell?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1000 # Cost Per Coin + + + if not sm.hasItem(4310126, Total): + sm.sendSayOkay("You do not have enough #b#v 04310126 # #t 04310126 #(s)#k.") + sm.dispose() + + else: + sm.consumeItem(4310126, Total) + sm.giveFriendPoints(totalQty) + sm.sendSayOkay("Thank you for your purchase!\r\nYou now have #r"+ str(sm.getFriendPoints()) +"#b Friendship Points#k.") + sm.dispose() + + if selection == 2: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202086 # #z 1202086 ##k?\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() <= 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.canHold(1202086): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.deductMesos(50000000) + sm.giveItem(1202086) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 3: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202085 # #z 1202085 ##k?\r\n\r\n#b#v 1202086 # #t 1202086 #\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() < 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.hasItem(1202086): + sm.sendSayOkay("You do not possess a #b#v 1202086 # #t 1202086 #.") + sm.dispose() + + elif not sm.canHold(1202085): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.consumeItem(1202086) + sm.deductMesos(50000000) + sm.giveItem(1202085) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 4: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202084 # #z 1202084 ##k?\r\n\r\n#b#v 1202085 # #t 1202085 #\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() < 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif not sm.hasItem(1202085): + sm.sendSayOkay("You do not possess a #b#v 1202085 # #t 1202085 #.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.canHold(1202084): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.consumeItem(1202085) + sm.deductMesos(50000000) + sm.giveItem(1202084) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 5: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202083 # #z 1202083 ##k?\r\n\r\n#b#v 1202084 # #t 1202084 #\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() < 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.hasItem(1202084): + sm.sendSayOkay("You do not possess a #b#v 1202084 # #t 1202084 #.") + sm.dispose() + + elif not sm.canHold(1202083): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.deductMesos(50000000) + sm.consumeItem(1202084) + sm.giveItem(1202083) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 6: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202124 # #z 1202124 ##k?\r\n\r\n#b#v 1202083 # #t 1202083 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 5000 #b Friendship Points") + if sm.getFriendPoints() < 5000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202083): + sm.sendSayOkay("You do not possess a #b#v 1202083 # #t 1202083 #.") + sm.dispose() + elif not sm.canHold(1202124): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(5000) + sm.deductMesos(100000000) + sm.consumeItem(1202083) + sm.giveItem(1202124) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 7: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202089 # #z 1202089 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202094): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.deductMesos(100000000) + sm.consumeItem(1202124) + sm.giveItem(1202089) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 8: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202090 # #z 1202090 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202090): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.deductMesos(100000000) + sm.consumeItem(1202124) + sm.giveItem(1202090) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 9: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202091 # #z 1202091 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202091): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.deductMesos(100000000) + sm.consumeItem(1202124) + sm.giveItem(1202091) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 10: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1182162 # #z 1182162 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1182162): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.consumeItem(1202124) + sm.deductMesos(100000000) + sm.giveItem(1182162) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 11: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202094 # #z 1202094 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202094): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202094) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 12: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202095 # #z 1202095 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202095): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202095) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 13: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202096 # #z 1202096 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202096): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202096) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 14: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202097 # #z 1202097 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202097): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202097) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 15: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202050 # #z 1202050 ##k?\r\n\r\n#b#v 1202094 # #t 1202094 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202094): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202050): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202094) + sm.giveItem(1202050) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 16: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202054 # #z 1202054 ##k?\r\n\r\n#b#v 1202095 # #t 1202095 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202095): + sm.sendSayOkay("You do not possess a #b#v 1202095 # #t 1202095 #.") + sm.dispose() + elif not sm.canHold(1202054): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202095) + sm.deductMesos(250000000) + sm.giveItem(1202054) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 17: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202058 # #z 1202058 ##k?\r\n\r\n#b#v 1202097 # #t 1202097 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202097): + sm.sendSayOkay("You do not possess a #b#v 1202097 # #t 1202097 #.") + sm.dispose() + elif not sm.canHold(1202058): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202097) + sm.deductMesos(250000000) + sm.giveItem(1202058) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 18: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202062 # #z 1202062 ##k?\r\n\r\n#b#v 1202096 # #t 1202096 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202096): + sm.sendSayOkay("You do not possess a #b#v 1202096 # #t 1202096 #.") + sm.dispose() + elif not sm.canHold(1202062): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202096) + sm.deductMesos(250000000) + sm.giveItem(1202062) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 19: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202236 # #z 1202236 ##k?\r\nMy prices are not cheap this is what I require.\r\n\r\n#b#v 4460005 # #t 4460005 #\r\n\r\n#b#v 1202062 # #t 1202062 #\r\n\r\n#b#v 1202058 # #t 1202058 #\r\n\r\n#b#v 1202054 # #t 1202054 #\r\n\r\n#b#v 1202050 # #t 1202050 #\r\n\r\n#b#v 4031138 # #r1,000,000,000 #bMesos\r\n\r\n#v 4031866 # #r10,000,000 #bNX\r\n\r\n#v 3800453 ##r 500000 #b Friendship Points") + if sm.getFriendPoints() < 500000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 1000000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif sm.getNX() < 10000000: + sm.sendSayOkay("You do not have enough #bNXs#k.") + sm.dispose() + elif not sm.hasItem(4460005): + sm.sendSayOkay("You do not possess a #b#v 1202062 # #t 1202062 #.") + sm.dispose() + elif not sm.hasItem(1202058): + sm.sendSayOkay("You do not possess a #b#v 1202058 # #t 1202058 #.") + sm.dispose() + elif not sm.hasItem(1202054): + sm.sendSayOkay("You do not possess a #b#v 1202054 # #t 1202054 #.") + sm.dispose() + elif not sm.hasItem(1202050): + sm.sendSayOkay("You do not possess a #b#v 1202050 # #t 1202050 #.") + sm.dispose() + elif not sm.hasItem(1202062): + sm.sendSayOkay("You do not possess a #b#v 1202050 # #t 1202050 #.") + sm.dispose() + elif not sm.canHold(1202236): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(500000) + sm.deductMesos(1000000000) + sm.deductNX(10000000) + sm.consumeItem(1202050) + sm.consumeItem(1202054) + sm.consumeItem(1202058) + sm.consumeItem(1202062) + sm.consumeItem(4460005) + sm.giveItem(1202236) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() \ No newline at end of file diff --git a/scripts/npc/9390124.py b/scripts/npc/9390124.py new file mode 100755 index 0000000..08f7f89 --- /dev/null +++ b/scripts/npc/9390124.py @@ -0,0 +1,8 @@ +sm.sendSayOkay("#bLegendary Gollux #rGuide#k:\r\n\r\nKilling #bLegendary Gollux's#r Shoulders #kor #rAbdomen #kwill reduce the " + "amount of attacks that #bLegendary Gollux #kis able to use and will result in earning more #bGollux Coins#k. " + "Skipping the #rShoulders #kand #rAbdomen#k will also result in a faster clear time but less #bGollux Coins#k." + "\r\n\r\nKilling 0 #rShoulder(s) #kor #rAbdomen#k Parts will earn you\r\n #r15 #bGollux Coins#k on completion.\r\n" + "\r\nKilling 1 #rShoulder(s) #kor #rAbdomen#k Parts will earn you\r\n #r20 #bGollux Coins#k on completion.\r\n" + "\r\nKilling 2 #rShoulder(s) #kor #rAbdomen#k Parts will earn you\r\n #r25 #bGollux Coins#k on completion.\r\n" + "\r\nKilling 3 #rShoulder(s) #kor #rAbdomen#k Parts will earn you\r\n #r30 #bGollux Coins#k on completion.\r\n") +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/9390126.py b/scripts/npc/9390126.py new file mode 100755 index 0000000..fd29779 --- /dev/null +++ b/scripts/npc/9390126.py @@ -0,0 +1,50 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Legendary", 240, 863010100, 20, EventType.Gollux, 172800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 863010000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(9390124) + + dialog = "Do you want to head to the '#bRoad to Gollux#k' to fight \r\n#bLegendary Gollux#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Road to Gollux (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face the #bLegendary Gollux#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing the \r\n#bLegendary Gollux#k within the past 48 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.GOLLUX_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) diff --git a/scripts/npc/9390208.py b/scripts/npc/9390208.py new file mode 100755 index 0000000..f035133 --- /dev/null +++ b/scripts/npc/9390208.py @@ -0,0 +1 @@ +# Riverson (9390208) diff --git a/scripts/npc/9390225.py b/scripts/npc/9390225.py new file mode 100755 index 0000000..3bdeb1f --- /dev/null +++ b/scripts/npc/9390225.py @@ -0,0 +1,2 @@ +if sm.sendAskYesNo("Are you sure you want to leave the voyage before it is completed?"): + sm.warpInstanceOut(865000001) \ No newline at end of file diff --git a/scripts/npc/9390232.py b/scripts/npc/9390232.py new file mode 100755 index 0000000..18fa2e9 --- /dev/null +++ b/scripts/npc/9390232.py @@ -0,0 +1 @@ +# Delfino Mercenary (9390232) diff --git a/scripts/npc/9390233.py b/scripts/npc/9390233.py new file mode 100755 index 0000000..181d7e2 --- /dev/null +++ b/scripts/npc/9390233.py @@ -0,0 +1 @@ +# Delfino Mercenary (9390233) diff --git a/scripts/npc/9400534.py b/scripts/npc/9400534.py new file mode 100755 index 0000000..9ebceb8 --- /dev/null +++ b/scripts/npc/9400534.py @@ -0,0 +1 @@ +sm.sendNext("test") \ No newline at end of file diff --git a/scripts/npc/About_NLC.py b/scripts/npc/About_NLC.py new file mode 100755 index 0000000..92aefe2 --- /dev/null +++ b/scripts/npc/About_NLC.py @@ -0,0 +1,48 @@ + # Icebyrd Slimm: NLC Mayor (9201050) | NLC Town Center (600000000) + # Quest: Welcome to New Leaf City Quiz (4900) + # Author: Tiger + +while True: + selection = sm.sendNext("What up! Name's Icebyrd Slimm, mayor of New Leaf City! Happy to see you accepted my invite. So, what can I do for you? \r\n#b" + "#L0#What is this place? #l\r\n" + "#L1#Who is Professor Foxwit? #l\r\n" + "#L2#What's a Foxwit Door? #l\r\n" + "#L3#Where are the MesoGears? #l\r\n" + "#L4#What is the Krakian Jungle? #l\r\n" + "#L5#What's a Gear Portal? #l\r\n" + "#L6#What do the street signs mean? #l\r\n" + "#L7#What's the deal with Jack Masque? #l\r\n" + "#L8#Lita Lawless looks like a tough cookie, what's her story?#l\r\n" + "#L9#When will new boroughs open up in the city? #l\r\n" + "#L10#I want to take the quiz!#l#k") + + if selection == 0: + sm.sendNext("I've always dreamed of building a city. Not just any city, but one where everyone was welcome. I used to live in Kerning City, so I decided to see if I could create a city. As I went along in finding the means to do so, I encountered many people, some of whom I've come to regard as friends. Like Professor Foxwit-he's our resident genius; saved him from a group of man-eating plants. Jack Masque is an old hunting buddy from Amoria-almost too smooth of a talker for his own good. Lita and I are old friends from Kerning City-she's saved me a few times with that weapon of hers; so I figured she was a perfect choice for Town Sheriff. It took a bit of persuasion, but she came to believe her destiny lies here. About our resident explorer, Barricade came searching for something; he agreed to bring whatever he found to the museum. I'd heard stories about him and his brother when I was still in Kerning City. And Elpam...well, let's just say he's not from around here. At all. We've spoken before, and he seems to mean well, so I've allowed him to stay. I just realized that I've rambled quite a bit! What else would you like to know?") + elif selection == 1: + sm.sendNext("A pretty spry guy for being 97. He' s a time-traveler I ran into outside the city one day. Old guy had a bit of trouble with some jungle creatures-like they tried to eat him. In return for me saving him, he agreed to build a time museum. I get the feeling that he's come here for another reason, as he's mentioned more than a few times that New Leaf City has an interesting role to play in the future. Maybe you can find out a bit more... ") + elif selection == 2: + sm.sendNext("Heh, I asked the same thing when I saw the Professor building them. They're warp points. Pressing Up will warp you to another location. I recommend getting the hang of them, they're our transport system.") + elif selection == 3: + sm.sendNext("The MesoGears are beneath Bigger Ben. It's a monster-infested section of Bigger Ben that Barricade discovered. It seems to reside in a separate section of the tower-quite strange if you ask me. I hear he needs a bit of help exploring it, you should see him. Be careful though, the Wolf Spiders in there are no joke.") + elif selection == 4: + sm.sendNext("Ah...well. The Krakian Jungle is located on the outskirts of New Leaf City. Many new and powerful creatures roam those areas, so you'd better be prepared to fight if you head out there. It's at the left end of town. Rumors abound that the Jungle leads to a lost city, but we haven't found anything yet.") + elif selection == 5: + sm.sendNext("Well, when John found himself in the MesoGears portion of Bigger Ben, he stood on one and went to another location. However, he could only head back and forth-they don't cycle through like the Foxwit Door. Ancient tech for you.") + elif selection == 6: + sm.sendNext("Well, you'll see them just about everywhere. They're areas under construction. The Red lights mean it's not finished, but the Green lights mean it's open. Check back often, we're always building!") + elif selection == 7: + sm.sendNext("Ah, Jack. You know those guys that are too cool for school? The ones who always seem to get away with everything? AND get the girl? Well, that's Jack, but without the girl. He thinks he blew his chance, and began wearing that mask to hide his true identity. My lips are sealed about who he is, but he's from Amoria. He might tell you a bit more if you ask him.") + elif selection == 8: + sm.sendNext("I've known Lita for a while, thought we've just recently rekindled our friendship. I didn't see her for a quite a bit, but I understand why. She trained for a very, very long time as a Thief. Matter of fact, that's how we first met? I was besieged a group of wayward Mushrooms, and she jumped in to help. When it was time to a pick a sheriff, it was a no-brainer. She's made a promise to help others in their training and protect the city, so if you're interested in a bit of civic duty, speak with her. ") + elif selection == 9: + sm.sendNext("Soon, my friend. Even though you can't see them, the city developers are hard at work. When they're ready, we'll open them. I know you're looking forward to it and so am I!") + elif selection == 10: + if chr.getLevel() >= 15: # TODO: quiz quest + # If hasn't completed quest 4900? + # start quest 4900, send "No problem. I'll give you a something nice if you answer them correctly!" + # if completed send "You've already solved my questions. Enjoy your trip in NLC!!!" + sm.sendNext("TODO: Quiz") + break # Apparently it only ends the loop once you start the quiz + else: + sm.sendNext("Sorry but this quiz is only available for level 15 and above. Please come back to me when you are ready to take this quiz.") + break diff --git a/scripts/npc/Akayrum_accept.py b/scripts/npc/Akayrum_accept.py new file mode 100755 index 0000000..1ec94b4 --- /dev/null +++ b/scripts/npc/Akayrum_accept.py @@ -0,0 +1,53 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Easy", 140, 272020200, 5, EventType.EArkarium, 64800000], + ["Normal", 170, 272020210, 5, EventType.Arkarium, 64800000], +] + +runsPerDay = 1 + +if not 272020200 <= sm.getFieldID() <= 272020210: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to '#bArkarium's Altar#k' to fight \r\n#bArkarium#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Arkarium's Altar (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bArkarium#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bArkarium#k within the past 18 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.ARKARIUM_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if 272020200 <= sm.getFieldID() <= 272020210: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(272020110) \ No newline at end of file diff --git a/scripts/npc/ArcherMaster.py b/scripts/npc/ArcherMaster.py new file mode 100755 index 0000000..b6963b3 --- /dev/null +++ b/scripts/npc/ArcherMaster.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# [Athena Pierce] | [1012100] +# Henesys : Bowman Instructional School + +sm.setSpeakerID(1012100) +sm.sendSayOkay("Welcome to the Bowman Instructional School.") \ No newline at end of file diff --git a/scripts/npc/DimensionInavde.py b/scripts/npc/DimensionInavde.py new file mode 100755 index 0000000..29099ff --- /dev/null +++ b/scripts/npc/DimensionInavde.py @@ -0,0 +1,91 @@ +# [Piston] | [9020009] +# Hidden Street : Stormfront + +from net.swordie.ms.enums import EventType + +mapId = 940021000 +runsADay = 5 + +if sm.getFieldID() == 940020000: + selection = sm.sendSayOkay("Some creeps from Maple World have invaded Grandis. We need to find a way to drive them back.\r\n" + "#L0##bEnter Dimensional Invasion " + str(sm.getEventAmountDone(EventType.DIPQ)) + "/" + str(runsADay) + " Attempted today #l\r\n" + "#L1##bTrade in Dimension Glove fragments\r\n") + + if selection == 0: + if chr.getLevel() < 120: + sm.sendSayOkay("You must be level #b120#k to enter the Dimensional Invasion Party Quest.") + sm.dispose() + + if sm.getEventAmountDone(EventType.DIPQ) >= runsADay: + sm.sendSayOkay("You are currently on cooldown for the Dimensional Invasion Party Quest") + sm.dispose() + + if not sm.getParty() is not None: + sm.sendSayOkay("Please create a party before entering.") + sm.dispose() + + if not sm.canHold(2431127): + sm.sendSayOkay("Please make sure you have room in your inventory to receive your rewards at the end of the Party Quest.") + + else: + sm.addCoolDownInXays(EventType.DIPQ, 1, 1) + sm.warpInstanceIn(mapId, True) + sm.setInstanceTime(60*60) + + if selection == 1: + selection2 = sm.sendSayOkay("Please select the glove you would like.\r\n" + "#L0##bDimension Glove\r\n" + "#L1##bHigh Quality Dimension Glove\r\n") + + if selection == 0: + sm.sendAskYesNo("Would you like to trade your #bDimension Glove fragments#k for a #bDimension Glove#k.") + + if not sm.hasItem(4033605): + sm.sendSayOkay("You do not possess a #v4033605##zv4033605#") + sm.dispose() + if not sm.hasItem(4033604): + sm.sendSayOkay("You do not possess a #v4033604##zv4033604#") + sm.dispose() + if not sm.hasItem(4033603): + sm.sendSayOkay("You do not possess a #v4033603##zv4033603#") + sm.dispose() + if not sm.hasItem(4033602): + sm.sendSayOkay("You do not possess a #v4033602##zv4033602#") + sm.dispose() + if not sm.canHold(1082488): + sm.sendSayOkay("Please make room in your EQUIP inventory.") + sm.dispose() + + else: + sm.consumeItem(4033605) + sm.consumeItem(4033604) + sm.consumeItem(4033603) + sm.consumeItem(4033602) + sm.giveItem(1082488) + + + if selection == 1: + sm.sendAskYesNo("Would you like to trade your #bHigh Quality Dimension#k Glove fragments for a #bHigh Quality Dimension Glove#k.") + + if not sm.hasItem(4033606): + sm.sendSayOkay("You do not possess a #v4033606##zv4033606#") + sm.dispose() + if not sm.hasItem(4033607): + sm.sendSayOkay("You do not possess a #v4033607##zv4033607#") + sm.dispose() + if not sm.hasItem(4033608): + sm.sendSayOkay("You do not possess a #v4033608##zv4033608#") + sm.dispose() + if not sm.hasItem(4033609): + sm.sendSayOkay("You do not possess a #v4033609##zv4033609#") + sm.dispose() + if not sm.canHold(1082488): + sm.sendSayOkay("Please make room in your EQUIP inventory.") + sm.dispose() + + else: + sm.consumeItem(4033606) + sm.consumeItem(4033607) + sm.consumeItem(4033608) + sm.consumeItem(4033609) + sm.giveItem(1082489) diff --git a/scripts/npc/EmiliaQuest.py b/scripts/npc/EmiliaQuest.py new file mode 100755 index 0000000..27079a4 --- /dev/null +++ b/scripts/npc/EmiliaQuest.py @@ -0,0 +1,101 @@ +# Dressing Room for Hair/Face/Eyes + +# Hair +# Male: 30000, 33000, 35000, 36000, 40000, 43000, 45000, 46000, 60000 +# Female: 31000, 34000, 37000, 38000, 41000, 44000, 47000, 48000, 61000 +# Unisex/Special: 32000, 39000, 42000 + +# Face +# Male: 20000, 23000, 25000, 27000, 50000, 53000 +# Female: 21000, 24000, 26000, 28000, 51000, 54000 + +from net.swordie.ms.loaders import StyleRoom +from net.swordie.ms.ServerConfig import SERVER_NAME + +hair_male = StyleRoom.getMaleHair() +hair_female = StyleRoom.getFemaleHair() +hair_special = StyleRoom.getSpecialHair() + +face_male = StyleRoom.getMaleFace() +face_female = StyleRoom.getFemaleFace() + +# id, gender_string, list +hair_categories = [ + [0, "Male Hair", hair_male], + [1, "Female Hair", hair_female], + [2, "Special Hair", hair_special] +] + +# id, gender_string, list +face_categories = [ + [0, "Male Face", face_male], + [1, "Female Face", face_female], +] + +# vars +selected_list = [] +al = chr.getAvatarData().getAvatarLook() + + +def prompt_category(category_name, category_list): + text = ( + "What type of #b{}#k would you like to browse?\r\n#b" + ).format(category_name) + + for c in category_list: + text += "\n#b#L" + repr(c[0]) + "#" + c[1] + "#l\r\n" + + return text + +# SCRIPT_START + +text_menu = ( + "Welcome to #b{}'s Style Room!#k \r\n\r\nWhat would you like to change?\r\n#b" + "#L0#Hair#l\r\n" + "#L1#Face#l\r\n" + "#L2#Hair Color#l\r\n" + "#L3#Eye Color#l\r\n" + "#L4#Skin Color#l\r\n" + +).format(SERVER_NAME) + +selection_menu = sm.sendNext(text_menu) +selected_category = [] +options = [] + +if selection_menu == 0: # hair + selected_category = hair_categories + selection_category = sm.sendNext(prompt_category("Hair", selected_category)) +elif selection_menu == 1: # face + selected_category = face_categories + selection_category = sm.sendNext(prompt_category("Face", selected_category)) +elif selection_menu == 2: # hair color + hair = al.getHair() - (al.getHair() % 10) + for x in range (8): + options.append(hair + x) +elif selection_menu == 3: # face color + face = al.getFace() - ((al.getFace() % 1000 / 100) * 100) # it rounds the number + for x in range (9): + options.append(face + x * 100) +elif selection_menu == 4: # skin + options = [0, 1, 2, 3, 4, 5] + for x in range (6): + options.append(x) + +if selection_menu < 2: + option = selected_category[selection_category] + category_name = option[1] + category_list = option[2] + + text_category = "Select a category you'd like to browse!" + for idx, category in enumerate(category_list): + text_category += "\r\n#b#L" + repr(idx) + "#" + category_name + " " + repr(idx + 1) + "#l" + selection_number = sm.sendNext(text_category) + for hair in category_list[selection_number]: + # sm.printStyle(hair) + options.append(hair.getId()) + +if len(options) > 0: + answer = sm.sendAskAvatar("Choose your new look!", False, False, options) + if answer < len(options): + sm.changeCharacterLook(options[answer]) \ No newline at end of file diff --git a/scripts/npc/Enter_Darkportal_H.py b/scripts/npc/Enter_Darkportal_H.py new file mode 100755 index 0000000..260940a --- /dev/null +++ b/scripts/npc/Enter_Darkportal_H.py @@ -0,0 +1,10 @@ +# Demon's Doorway (9201131) | Blue Mushroom Forest 2 + +quest = 28238 # Treasure, and Amdusias the Demon Quest +mapid = 677000002 # Amdusias Strolling Path (Map before Boss Map) + +if sm.hasQuest(quest): + if sm.sendAskYesNo("Would you like to enter?"): + sm.warp(mapid, 0) +else: + sm.sendSayOkay("#b(A strange doorway)") diff --git a/scripts/npc/Enter_Darkportal_M.py b/scripts/npc/Enter_Darkportal_M.py new file mode 100755 index 0000000..bc7bdd9 --- /dev/null +++ b/scripts/npc/Enter_Darkportal_M.py @@ -0,0 +1,10 @@ +# Demon's Doorway (9201129) | Close to the Sky + +quest = 28198 # Treasure, and Marbas the Demon Quest +mapid = 677000000 # Marbas Strolling Path (Map before Boss Map) + +if sm.hasQuest(quest): + if sm.sendAskYesNo("Would you like to enter?"): + sm.warp(mapid, 0) +else: + sm.sendSayOkay("#b(A strange doorway)") \ No newline at end of file diff --git a/scripts/npc/Enter_Darkportal_P.py b/scripts/npc/Enter_Darkportal_P.py new file mode 100755 index 0000000..0c805e4 --- /dev/null +++ b/scripts/npc/Enter_Darkportal_P.py @@ -0,0 +1,11 @@ +# Demon's Doorway (9201132) | Ribbon Pig Beach + +quest = 28256 # Treasure, and Crocell the Demon Quest +mapid = 677000006 # Crocell Strolling Path (Map before Boss Map) + +if sm.hasQuest(quest): + if sm.sendAskYesNo("Would you like to enter?"): + sm.warp(mapid, 0) +else: + sm.sendSayOkay("#b(A strange doorway)") + diff --git a/scripts/npc/Enter_Darkportal_T.py b/scripts/npc/Enter_Darkportal_T.py new file mode 100755 index 0000000..71512e8 --- /dev/null +++ b/scripts/npc/Enter_Darkportal_T.py @@ -0,0 +1,10 @@ +# Demon's Doorway (9201130) | Caution Falling Down + +quest = 28219 # Treasure, and Valefor the Demon Quest +mapid = 677000008 # Valefor Strolling Path (Map before Boss Map) + +if sm.hasQuest(quest): + if sm.sendAskYesNo("Would you like to enter?"): + sm.warp(mapid, 0) +else: + sm.sendSayOkay("#b(A strange doorway)") diff --git a/scripts/npc/Enter_Darkportal_W.py b/scripts/npc/Enter_Darkportal_W.py new file mode 100755 index 0000000..be5c500 --- /dev/null +++ b/scripts/npc/Enter_Darkportal_W.py @@ -0,0 +1,10 @@ +# Demon's Doorway (9201128) | Big Rocky Road + +quest = 28179 # Treasure, and Andras the Demon Quest +mapid = 677000004 # Andras Strolling Path (Map before Boss Map) + +if sm.hasQuest(quest): + if sm.sendAskYesNo("Would you like to enter?"): + sm.warp(mapid, 0) +else: + sm.sendSayOkay("#b(A strange doorway)") \ No newline at end of file diff --git a/scripts/npc/Enter_krease.py b/scripts/npc/Enter_krease.py new file mode 100755 index 0000000..6275f6d --- /dev/null +++ b/scripts/npc/Enter_krease.py @@ -0,0 +1,2 @@ +# Ericsson (2012018) | Orbis Park +sm.sendSayOkay("Chryse is not available") diff --git a/scripts/npc/Event00.py b/scripts/npc/Event00.py new file mode 100755 index 0000000..92c6022 --- /dev/null +++ b/scripts/npc/Event00.py @@ -0,0 +1,3 @@ +#Quick Move Event Manager + +sm.sendNext("I used to be a adventurer like you... Until I took a arrow to the knee.") \ No newline at end of file diff --git a/scripts/npc/Event05.py b/scripts/npc/Event05.py new file mode 100755 index 0000000..bf02f71 --- /dev/null +++ b/scripts/npc/Event05.py @@ -0,0 +1,2 @@ +# Mr. Pickall (9000008) | Kerning City +sm.sendSayOkay("No lock is safe from me.") diff --git a/scripts/npc/Event_PinkZakumOut.py b/scripts/npc/Event_PinkZakumOut.py new file mode 100755 index 0000000..d0a247f --- /dev/null +++ b/scripts/npc/Event_PinkZakumOut.py @@ -0,0 +1,14 @@ +# Researcher H +# Pink Zakum : Pink Zakum Raid + +REVIVE_MAPS = [689011000, 689011001] + +message = "Are you sure you want to leave? You won't be able to return.\r\n" + +if sm.getFieldID() in REVIVE_MAPS: + message += "Remember, you can rejoin the battle by entering the portal!\r\n#L0#Yes, warp me out.#l\r\n#L1#Nevermind, I'll head back to Pink Zakum.#l" +else: + message += "#L0#Yes, I want to go back to where I was!#l\r\n#L1#Okay, I'll stay a little longer.#l" + +if sm.sendNext(message) == 0: + chr.warp(sm.getPreviousFieldID(), 0, False) \ No newline at end of file diff --git a/scripts/npc/Event_PinkZakumreward.py b/scripts/npc/Event_PinkZakumreward.py new file mode 100755 index 0000000..3b67c29 --- /dev/null +++ b/scripts/npc/Event_PinkZakumreward.py @@ -0,0 +1,23 @@ +# Head Researcher Wynn +# Pink Zakum : Pink Zakum Exit + +fid = sm.getFieldID() +returnmap = sm.getPreviousFieldID() + +if fid == returnmap: + returnmap = 100000000 # henesys until i figure out how to manage return maps more effectively + +if sm.getFieldID() == 689010000: # waiting map + if sm.isPinkZakumOpen(): + response = sm.sendNext("The event will start soon!\r\n#L0#I want to go back to where I was.#l\r\n#L1#Cool! I'll wait#l") + if response == 0: + sm.warpNoReturn(returnmap, 0) + elif sm.sendAskYesNo("Have you heard of the terrifying Zakum? This one's pink! He's not so scary anymore.\r\nWould you like to go back to your previous map?"): + sm.warpNoReturn(returnmap, 0) +elif sm.isPinkZakumWinner(): + sm.sendNext("Good job defeating the Pink Zakum!") + # TODO give reward + sm.warpNoReturn(returnmap, 0) +else: + sm.sendSayOkay("I'll send you back to where you were, thanks for participating!") + sm.warpNoReturn(returnmap, 0) \ No newline at end of file diff --git a/scripts/npc/FighterMaster.py b/scripts/npc/FighterMaster.py new file mode 100755 index 0000000..0b88f4a --- /dev/null +++ b/scripts/npc/FighterMaster.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# [Dances with Balrog] | [1022000] +# Perion : Warriors' Sanctuary + +sm.setSpeakerID(1022000) +sm.sendSayOkay("Welcome to the Warriors' Sanctuary. There isn't much to see here, but Warriors don't need deocration! Go talk to FangBlade if you aren't going to train.") \ No newline at end of file diff --git a/scripts/npc/Fritto_out.py b/scripts/npc/Fritto_out.py new file mode 100755 index 0000000..a6a780f --- /dev/null +++ b/scripts/npc/Fritto_out.py @@ -0,0 +1,2 @@ +sm.sendSayOkay("I will send you back to your previous location.") +sm.warpInstanceOut(chr.getPreviousFieldID()) \ No newline at end of file diff --git a/scripts/npc/FutureGate_taxi.py b/scripts/npc/FutureGate_taxi.py new file mode 100755 index 0000000..685fe48 --- /dev/null +++ b/scripts/npc/FutureGate_taxi.py @@ -0,0 +1,10 @@ +maps = [273030300, 273020400, 273050000, 273040300, 273060300] + + +selList = "Where would you like to go?" +i = 0 +while i < len(maps): + selList += "\r\n#L" + str (i) + "##m" + str (maps[i]) + "##l" + i += 1 +answer = sm.sendNext(selList) +sm.warp(maps[answer], 0) diff --git a/scripts/npc/GL_Food Fight.py b/scripts/npc/GL_Food Fight.py new file mode 100755 index 0000000..158e9a1 --- /dev/null +++ b/scripts/npc/GL_Food Fight.py @@ -0,0 +1,22 @@ +import random + +items = [1010009,1010008,1010007,1010006,1010005,1010004,1010003,1010002,1010001,1010000,1011007,1011006,1011003,1011002,1011001,1011000,1011008,1012010,1012009,1012008,1012007,1012006,1012005,1012004,1012003,1012002,1012001,1012000,1012031,1012030,1012029, +1012028,1012027,1012026,1012025,1012024,1012023,1012022,1012021,1012047,1012044,1012043,1012042,1012041,1012040,1012039,1012038,1012037,1012036,1012035,1012034,1012033,1012032,1012063,1012062,1012057,1012056,1012055,1012054,1012053,1012052,1012051,1012050, +1012049,1012048,1012075,1012074,1012090,1012085,1012083,1012082,1012081,1012080,1012105,1012104,1012100,1012099,1012097,1012096,1012127,1012126,1012125,1012124,1012123,1012122,1012121,1012114,1012113,1012112,1012137,1012134,1012133,1012131,1012129,1012128, +1012159,1012147,1012166,1012165,1012160,1012180,1012179,1012176,1012192,1012208,1012253,1012275,1012298,1012289,1012315,1012366,1012379,1012374,1012390,1012388,1012384,1012415,1012413,1012412,1012431,1012430,1012429,1012428,1012427,1012437,1012436,1012435, +1012434,1012433,1012432,1012462,1012450,1012479,1012475,1012474,1012473,1012472,1012468,1012495,1012494,1012489,1012488,1012487,1012486,1012485,1012482,1012511,1012510,1012509,1012507,1012506,1012503,1012502,1012501,1012527,1012526,1012525,1012518,1012517, +1012515,1012514,1012534,1012533,1012528,1012557,1012556,1012555,1012552,1012551,1012544,1012573,1012572,1012571,1012569,1012568,1012567,1012562,1012589,1012579,1012607,1012603,1012602,1012601,1012597,1012596,1012595,1012594,1012593,1012592,1012623,1012621, +1012620,1012619,1012618,1012617,1012616,1012615,1012614,1012612,1012611,1012610,1012609,1012608,1012639,1012638,1012637,1012636,1012635,1012634,1012633,1012631,1012630,1012629,1012628,1012626,1012625,1012624,1012654,1012653,1012652,1012651,1012650,1012649, +1012647,1012646,1012645,1012644,1012642,1012641,1012669,1012668,1012663,1012662,1012661,1012660,1012659,1012658,1012657,1012656,1012687,1012686,1012685,1012684,1012683,1012682,1012681,1012680,1012679,1012678,1012677,1012676,1012675,1012674,1012673,1012672, +1012703,1012702,1012701,1012700,1012699,1012698,1012697,1012696,1012695,1012694,1012692,1012691,1012690,1012689,1012688,1012719,1012718,1012717,1012716,1012715,1012714,1012713,1012712,1012711,1012710,1012709,1012708,1012706,1012704,1012723,1012722,1012721 + +] + + +question = sm.sendAskYesNo("#eWould you like to spend #r2k NX#n #efor a random #bHat?") +randitem = random.choice(items) +if question and sm.canHold(randitem) and chr.getUser().getNxPrepaid() >= 2000: + sm.giveItem(randitem) + sm.deductNX(-2000) +else: + sm.sendNext("#e#dYour inventory is full or you don't have enough NX.") diff --git a/scripts/npc/Gachapierrot.py b/scripts/npc/Gachapierrot.py new file mode 100755 index 0000000..c1fe28f --- /dev/null +++ b/scripts/npc/Gachapierrot.py @@ -0,0 +1,16 @@ +# The Great Gachapierrot + +from net.swordie.ms.world.gach.result import GachaponDlgType + +answer = sm.sendNext("Try out the new and improved Great Gachapierrot! Which service would you like to use ?\r\n#b#L0#Use a Gachapon Ticket.#l\r\n#L3#Mount Gachapon Ticket Exchange.#l#k\r\n#r#L4#Use a Powergacha Ticket(Event Quest).") + +if answer == 0: + sm.sendGachaponDlg(GachaponDlgType.TOWN) +elif answer == 1: + sm.sendGachaponDlg(GachaponDlgType.CHAIR) +elif answer == 2: + sm.sendGachaponDlg(GachaponDlgType.NEBULITE) +elif answer == 3: + sm.sendGachaponDlg(GachaponDlgType.MOUNT) +elif answer == 4: + sm.sendGachaponDlg(GachaponDlgType.SPECIAL) diff --git a/scripts/npc/GoSchool.py b/scripts/npc/GoSchool.py new file mode 100755 index 0000000..b9b6a3b --- /dev/null +++ b/scripts/npc/GoSchool.py @@ -0,0 +1,5 @@ +# Schrodinger (9330189) | Perion +response = sm.sendAskYesNo("Do you wish to visit the #b#m"+ str(744000000) +"##k?") + +if response: + sm.warp(744000000, 0) diff --git a/scripts/npc/GolluxOutReqeust.py b/scripts/npc/GolluxOutReqeust.py new file mode 100755 index 0000000..1d92b9c --- /dev/null +++ b/scripts/npc/GolluxOutReqeust.py @@ -0,0 +1,7 @@ +sm.setSpeakerID(9390124) +if sm.sendAskYesNo: + if sm.sendAskYesNo("Do you wish to leave this place?"): + sm.WarpInstanceOut(863010000) + sm.dispose() + else: + sm.dispose() diff --git a/scripts/npc/HW_macha.py b/scripts/npc/HW_macha.py new file mode 100755 index 0000000..f9fc98b --- /dev/null +++ b/scripts/npc/HW_macha.py @@ -0,0 +1 @@ +sm.sendSayOkay("Would you like a mas") #9401040 Olivia Boss \ No newline at end of file diff --git a/scripts/npc/LionCastle_accept.py b/scripts/npc/LionCastle_accept.py new file mode 100755 index 0000000..26e2f26 --- /dev/null +++ b/scripts/npc/LionCastle_accept.py @@ -0,0 +1,54 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Easy", 160, 211070102, 5, EventType.EVonLeon, 43200000], + ["Normal", 160, 211070102, 5, EventType.VonLeon, 43200000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 211070000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to the '#bAudience Room#k' to fight \r\n#bVon Leon#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Audience Room (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bVon Leon#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bVon Leon#k within the past 12 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.VON_LEON_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + sm.dispose() + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) + +elif sm.getFieldID() == 211070100 or sm.getFieldID() == 211070102: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(211070000) \ No newline at end of file diff --git a/scripts/npc/M_info.py b/scripts/npc/M_info.py new file mode 100755 index 0000000..02fd401 --- /dev/null +++ b/scripts/npc/M_info.py @@ -0,0 +1,66 @@ +if sm.getFieldID() == 993073000: + sm.sendSayOkay("No") +else: + sm.setReturnField(chr.getFieldID()) + options = ["Warp me!"] + + options2 = ["Town Maps","Free Market","Boss Entrances","Jump Quests"] + + maps = [ + [ + 300000000, 680000000, 230000000, 910001000, 260000000, 541000000, 540000000, 211060010, + 105300000, 310000000, 211000000, 101072000, 101000000, 101050000, 130000000, 820000000, 223000000, 410000000, + 141000000, 120040000, 209000000, 310070000, 401000000, 100000000, 271010000, 251000000, 744000000, 551000000, + 103000000, 224000000, 241000000, 240000000, 104000000, 220000000, 150000000, 261000000, 701220000, 807000000, + 701210000, 250000000, 800000000, 600000000, 120000000, 200000000, 800040000, 400000000, 102000000, 914040000, + 865000000, 801000000, 105000000, 866190000, 270000000, 273000000, 701100000, 320000000 + ], # Town Maps + + [ + 910000000 + ], # Free Market + + [ + [120040000, "Black Bean"], [105100100, "Balrog"], + [105200000, "Root Abyss"], [211070000, "Von Leon"], [272020110, "Arkarium"], [401000001, "Easy Magnus"], + [401060000, "Normal/Hard Magnus"], [270050000, "Pink Bean"], [271040000, "Cygnus"], + [211041700, "Ranmaru"], [105300303, "Damien"], [992000000, "Dorothy"], [450007240, "Will"] + ], + + [ + 280020000, 910130000, 220000006, 100000202, 921110000, 992017000, 910360000 + ], #Jump Quests + + ] + + list = "I can warp you to any #bTown, #dBoss#k or #rJump Quest#k !" + i = 0 + while i < len(options): + list += "\r\n#b#L" +str(i)+ "#" + str(options[i]) + i += 1 + i = 0 + option = sm.sendNext(list) + if option == 0: # I want to go somewhere (maps) + list = "Where would you like to go? " + while i < len(options2): + list += "\r\n#b#L" +str(i)+ "#" + str(options2[i]) + i += 1 + i = 0 + ans1 = sm.sendNext(list) + list = "These are your options: " + if ans1 == 2: # boss maps + while i < len(maps[ans1]): + list += "\r\n#L" + str(i) + "##b" + str(maps[ans1][i][1]) + i += 1 + else: # town/monster maps + while i < len(maps[ans1]): + list += "\r\n#L" + str(i) + "##b#m" + str(maps[ans1][i]) + "#" + i += 1 + ans2 = sm.sendNext(list) + if ans1 == 2: # boss maps + sm.warp(maps[ans1][ans2][0], 1) + else: + sm.warp(maps[ans1][ans2], 0) + + else: + sm.sendSayOkay("This option currently is uncoded.") \ No newline at end of file diff --git a/scripts/npc/MagicianMaster.py b/scripts/npc/MagicianMaster.py new file mode 100755 index 0000000..2bb6390 --- /dev/null +++ b/scripts/npc/MagicianMaster.py @@ -0,0 +1,2 @@ +# Grendel the Really Old (1032001) | Ellinia Magic Library +sm.sendSayOkay("You grow wiser with each mistake.") diff --git a/scripts/npc/Malay_Warp.py b/scripts/npc/Malay_Warp.py new file mode 100755 index 0000000..0b1a94e --- /dev/null +++ b/scripts/npc/Malay_Warp.py @@ -0,0 +1 @@ +#Entrance script for Spooky World Raid \ No newline at end of file diff --git a/scripts/npc/MalaysiaBoss_GL.py b/scripts/npc/MalaysiaBoss_GL.py new file mode 100755 index 0000000..ca25b87 --- /dev/null +++ b/scripts/npc/MalaysiaBoss_GL.py @@ -0,0 +1,2 @@ +sm.sendAskYesNo("Do you want to go to the Spooky World Entrance?") +sm.warp(551030200) \ No newline at end of file diff --git a/scripts/npc/Manji.py b/scripts/npc/Manji.py new file mode 100755 index 0000000..f15bd5b --- /dev/null +++ b/scripts/npc/Manji.py @@ -0,0 +1,6 @@ +# Manji (1022002) | Perion +if sm.getChr().getLevel() < 50: + sm.sendSayOkay("Leave now.. before you get hurt.") +else: + if sm.sendAskYesNo("You appear strong. Would you like to head to the Balrog Temple?"): + sm.warp(105100100, 0) \ No newline at end of file diff --git a/scripts/npc/NLC_Taxi.py b/scripts/npc/NLC_Taxi.py new file mode 100755 index 0000000..73ead1c --- /dev/null +++ b/scripts/npc/NLC_Taxi.py @@ -0,0 +1,7 @@ +map = 610010000 +if sm.getFieldID() == 610010000: + map = 600000000 +response = sm.sendAskYesNo("Would you like to go to #m" + str(map) + "m#?") + +if response: + sm.warp(map, 0) diff --git a/scripts/npc/NLC_ticketing.py b/scripts/npc/NLC_ticketing.py new file mode 100755 index 0000000..92e9677 --- /dev/null +++ b/scripts/npc/NLC_ticketing.py @@ -0,0 +1,11 @@ +# Train trip to/from NLC doesn't display a script# +map = 600010001 +string = "New Leaf City" +if sm.getFieldID() == 600010001: + map = 103000100 + string = "Kerning City" + +response = sm.sendAskYesNo("Would you like to take the train to " + string + "?") + +if response: + sm.warp(map, 0) \ No newline at end of file diff --git a/scripts/npc/NPC_unionShop.py b/scripts/npc/NPC_unionShop.py new file mode 100755 index 0000000..0ff773c --- /dev/null +++ b/scripts/npc/NPC_unionShop.py @@ -0,0 +1 @@ +sm.openShop(9010107) \ No newline at end of file diff --git a/scripts/npc/PQout1.py b/scripts/npc/PQout1.py new file mode 100755 index 0000000..0f794bd --- /dev/null +++ b/scripts/npc/PQout1.py @@ -0,0 +1 @@ +sm.warp(956050000) \ No newline at end of file diff --git a/scripts/npc/PTjob2N.py b/scripts/npc/PTjob2N.py new file mode 100755 index 0000000..152d14f --- /dev/null +++ b/scripts/npc/PTjob2N.py @@ -0,0 +1,18 @@ +# Phantom 2nd job adv +if not sm.hasQuest(25103): + sm.giveItem(1142376) + sm.startQuestNoCheck(25103) + sm.jobAdvance(2410) + sm.giveSkill(20031209) + sm.giveSkill(20031260) + sm.giveSkill(24100003) + sm.addMaxHP(300) + sm.addMaxMP(150) + + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("Let's see... 'A History of Ribbon Pigs' first edition... that's not it. 'The Great Mushroom Uprising'... why did I even steal this? Ah, there we are! I'll be back to my old self in no time!") + sm.sendSay("Judgment Draw was in here as well? Lucky me! I believe that one will show up in the... Beginner Skill window?") +else: + sm.chat("You are not 1st job Phantom.") +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/PTjob4N.py b/scripts/npc/PTjob4N.py new file mode 100755 index 0000000..be67c78 --- /dev/null +++ b/scripts/npc/PTjob4N.py @@ -0,0 +1,2 @@ +if chr.getJob() == 2411 and chr.getLevel() >= 100: + sm.jobAdvance(2412) \ No newline at end of file diff --git a/scripts/npc/PinkBeen_Out.py b/scripts/npc/PinkBeen_Out.py new file mode 100755 index 0000000..52d3603 --- /dev/null +++ b/scripts/npc/PinkBeen_Out.py @@ -0,0 +1,10 @@ +if sm.getFieldID() == 270050100: + response = sm.sendAskYesNo("Are you sure you want to leave the battlefield?") + + if response: + sm.warpInstanceOut(270050000) +if sm.getFieldID() == 270051100: + response = sm.sendAskYesNo("Are you sure you want to leave the battlefield?") + + if response: + sm.warpInstanceOut(270050000) \ No newline at end of file diff --git a/scripts/npc/PinkBeen_Summon.py b/scripts/npc/PinkBeen_Summon.py new file mode 100755 index 0000000..dd6ac8a --- /dev/null +++ b/scripts/npc/PinkBeen_Summon.py @@ -0,0 +1,23 @@ +# is spawned by the pink bean warp-in npc + +chaos = 0 +CHAOS_MAP = 270051100 +if sm.getFieldID() == CHAOS_MAP: + chaos = 100 + +FINAL_STATUE = 8820002 + chaos +IMMORTAL_PINKBEAN = 8820000 + chaos +INITIAL_MOB = 8820009 + chaos +KRITAS = 2141000 + +PX = 9 +PY = -42 + +sm.sendSayOkay("You have disturbed great forces.. You will live to regret this!") +sm.removeNpc(KRITAS) # TODO add the wz effect that accompanies pink bean dying +sm.spawnMob(INITIAL_MOB, PX, PY, False) + +sm.spawnMob(IMMORTAL_PINKBEAN, PX, PY, False) # this is the pink bean that taunts you while while you kill the statues + +mob = sm.waitForMobDeath(FINAL_STATUE) +sm.killMob(IMMORTAL_PINKBEAN, True) \ No newline at end of file diff --git a/scripts/npc/PinkBeen_accept.py b/scripts/npc/PinkBeen_accept.py new file mode 100755 index 0000000..1b7f329 --- /dev/null +++ b/scripts/npc/PinkBeen_accept.py @@ -0,0 +1,49 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type + +destinations = [ + ["Normal", 160, 270050100, 5, EventType.PinkBean, 64800000], + ["Chaos", 160, 270051100, 5, EventType.CPinkBean, 64800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 270050000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head further '#bDeep Inside the Temple#k' to fight \r\n#bPink Bean#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo further Deep Inside the Temple (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bPinkbean#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bPinkbean#k within the past 18 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.PINKBEAN_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/PirateMaster.py b/scripts/npc/PirateMaster.py new file mode 100755 index 0000000..9692b7d --- /dev/null +++ b/scripts/npc/PirateMaster.py @@ -0,0 +1,5 @@ +# Kyrin (1090000) | Navigation Room +if sm.getChr().getJob() == 0: + sm.sendSayOkay("Speak to me if you want to become a Pirate.") +else: + sm.sendSayOkay("You seem to have made a choice already,\r\nThe wrong choice..") diff --git a/scripts/npc/Polo_Out.py b/scripts/npc/Polo_Out.py new file mode 100755 index 0000000..f7c6ba3 --- /dev/null +++ b/scripts/npc/Polo_Out.py @@ -0,0 +1,2 @@ +sm.sendSayOkay("I will send you back to your previous location.") +sm.warp(chr.getPreviousFieldID()) \ No newline at end of file diff --git a/scripts/npc/ProofKern.py b/scripts/npc/ProofKern.py new file mode 100755 index 0000000..e73fd87 --- /dev/null +++ b/scripts/npc/ProofKern.py @@ -0,0 +1,2 @@ +# Nana (9201023) | +sm.sendSayOkay("Hihi, I'm Nana the love fairy!") diff --git a/scripts/npc/Raid_party.py b/scripts/npc/Raid_party.py new file mode 100755 index 0000000..a19f0ef --- /dev/null +++ b/scripts/npc/Raid_party.py @@ -0,0 +1,210 @@ +# Vote Points & Donation Points NPC + +# Format to follow for items +# ItemID, Quantity/Duration, Cost, Time-sensitive (0 : false | 1 : enabled) + +# =========================================== +# VP Items +# =========================================== + +vp_exp = [ + [5360042, 240, 4, 1], + [5360000, 1440, 8, 1], + [2022463, 30, 2, 1], + [2022461, 30, 2, 1], + [5211048, 240, 4, 1], + [5211046, 1440, 8, 1], + [2023380, 30, 4, 1] +] + +vp_cosmetics = [ + [5062400, 1, 1, 0], + [2430182, 50, 2, 0], + [2210010, 8, 3, 0], + [5072000, 20, 1, 0], + [5072000, 20, 1, 0], + [5073000, 20, 1, 0], + [5076000, 20, 3, 0], + [5077000, 20, 3, 0] +] + +vp_game_changers = [ + [2435383, 9999999, 24, 0], + [1202236, 240, 2, 1], + [5680729, 1, 8, 0], + [1202089, 10080, 8, 1], + [1202090, 10080, 8, 1], + [1202091, 1080, 8, 1] +] + +vp_pet_shop = [ + [5190000, 1, 1, 0], + [5190001, 1, 1, 0], + [5190006, 1, 1, 0], + [5190009, 1, 1, 0], + [5190010, 1, 1, 0], + [5190011, 1, 1, 0], + [5190002, 1, 1, 0], + [5190003, 1, 1, 0], + [5190004, 1, 1, 0], + [5190005, 1, 1, 0] +] + +# =========================================== +# DP Items +# =========================================== + +# Format to follow for items +# ItemID, Quantity/Duration, Cost, Time-sensitive (0 : false | 1 : enabled) + +dp_exp = [ + [2450015, 30, 250, 0], # 3x Exp 30 Min + [2450016, 60, 400, 0], # 3x Exp 60 Min + [2023722, 30, 250, 0], # 2x Meso Buff 30 min +] + +dp_cosmetics = [ + [5552000, 1, 200, 0], # Hair Slot + [5553000, 1, 200, 0], # Face Slot + [5155000, 1, 1000, 0], # Carta's Indigo Pearl + [5155004, 1, 1000, 0], # Carta's Teal Pearl + [5155005, 1, 1000, 0], # Carta's Scarlet Pearl +] + +# TODO: wz edit pet-vacs string to change names +# and have 2 different pvacs one for 1 day and a 2nd for 7 days. + +dp_game_changers = [ + [5680047, 1, 100, 1], # Pvac // 1 Day (time-sensitive) + [5680047, 1, 600, 1], # Pvac // 7 Day (time-sensitive) + [1202236, 1, 8000, 0], # Frenzy Totem + [4034803, 1, 1000, 0], # Name Change Coupon + [2435383, 1, 4000, 0], # Pendant Slot Permanent Coupon + [1122303, 1, 1000, 0], # Hellia Necklace + [1132183, 1, 1000, 0], # Avenger Quiver Belt + [1152101, 1, 1000, 0], # Doom Shoulder + [1113171, 1, 1000, 0] # Grin Ring +] + + +dp_surprise_box = [ + [5068300, 1, 250, 0], # Pet Box + [2435163, 1, 300, 0], # Random Damage Skin + [5190013, 1, 1000, 0] # Open Pet Shop Skill +] + +# =============================================== + +main_menu = sm.options("Trade in Vote Points", "Trade in Donation Points") + +# Options for vote point menu +vp_menu = sm.options("Exp / Drop Coupons", "Cosmetics", "Game Changers", "Pet Items") +# Options for donation point menu +dp_menu = sm.options("Exp / Drop Coupons", "Cosmetics", "Game Changers", "Surprise Box") + +# for sub-menu item options +option = "" +def showOptions(text, items, duration): + option = text + "\r\n#b" + for x in range (len(items)): + name = items[x][0] + qty = items[x][1] + cost = items[x][2] + if duration: + option += "#L" + str(x) + "##i" + str(name) + "# #z" + str(name) + "# (" + str(qty) + " Min)" + " (" + str(cost) + " Points)" + "#l \r\n" + else: + option += "#L" + str(x) + "##i" + str(name) + "# #z" + str(name) + "# (" + str(qty) + ")" + " (" + str(cost) + " Points)" + "#l \r\n" + + return sm.sendNext(option) + +def exchange(opt, items, duration, donation): + name = items[opt][0] + qty = items[opt][1] + cost = items[opt][2] + timed = items[opt][3] + + currency = sm.getVotePoints() + currencyName = "vote points" + if donation: + currency = sm.getDonationPoints() + currencyName = "donation points" + + durOrQty = "" + if duration: + durOrQty = "(#b" + str(qty) + " min#k)" + else: + durOrQty = "(#b" + str(qty) + "#kx)" + + timeMsg = "" + if timed == 1: + timeMsg = "\r\n\r\n(#rThis is a time-sensitive item, duration until expire will start as soon as item is in your inventory!!#k)" + + if sm.sendAskYesNo("You currently have #b" + str(currency) + " " + currencyName + "#k.\r\nAre you sure you want the following item(s)?:\r\n " + durOrQty + " of #b#z " + str(name) + "##k #i" + str(name) + "# for #r" + str(cost) + "#k " + currencyName + "?" + timeMsg): + if currency >= cost: + if sm.canHold(name): + if duration: + if timed == 1: # is time sensitive + sm.giveItemWithExpireDate(name, 1, False, qty) + else: + sm.giveItem(name, 1) + else: + if timed == 1: + sm.giveItemWithExpireDate(name, 1, False, qty) + else: + sm.giveItem(name, qty) + + if donation: # is donation points + sm.deductDonationPoints(cost) + else: + sm.deductVotePoints(cost) + sm.sendSayOkay("You have obtained " + durOrQty + " #b#z" + str(name) + "##k for #r" + str(cost) + "#k " + currencyName + ".") + else: + sm.sendNext("Please make sure you have enough space in your inventory") + else: + sm.sendNext("You don't have enough " + currencyName + ". You need #r" + str(cost) + "#k " + currencyName + ".") + + +def showAndExchange(msg, items, has_duration, donation): + selection = showOptions(msg, items, has_duration) + exchange(selection, items, has_duration, donation) + +# =========================== Vote Points ========================================================= + +def votePointOptions(): + type = False + prompt = "You currently have #b" + str(sm.getVotePoints()) + " vote points#k.\r\nWhat would you like to buy with your vote points?\r\n\r\n(#dYou can obtain vote points by voting for us every 12 hours through our website or discord#k!)\r\n" + selection = sm.sendNext(prompt + "#b" + vp_menu + "#k") + + if selection == 0: + showAndExchange("What would you like from the Exp / Drop coupon shop?", vp_exp, True, type) # items have have a duration + elif selection == 1: + showAndExchange("What would you like from the Cosmetics shop?", vp_cosmetics, False, type) # items don't have a duration + elif selection == 2: + showAndExchange("What would you like from the Game Changers shop?", vp_game_changers, True, type) + elif selection == 3: + showAndExchange("What would you like from the Pet shop?", vp_pet_shop, False, type) + + +# =========================== Donation Points ====================================================== + +def donationPointOptions(): + type = True # is DP + prompt = "You currently have #b" + str(sm.getDonationPoints()) + " donation points#k.\r\nWhat would you like to buy with your donation points?\r\n\r\n(#dYou can obtain donation points by visiting our website and purchasing them by clicking on the store#k.)\r\n" + selection = sm.sendNext(prompt + "#b" + dp_menu + "#k") + + if selection == 0: + showAndExchange("What would you like from the Exp / Drop coupon shop?", dp_exp, True, type) # items have have a duration + elif selection == 1: + showAndExchange("What would you like from the Cosmetics shop?", dp_cosmetics, False, type) # items don't have a duration + elif selection == 2: + showAndExchange("What would you like from the Game Changers shop?", dp_game_changers, True, type) + elif selection == 3: + showAndExchange("What would you like from the Surprise Box shop?", dp_surprise_box, False, type) + +# =================================================================================================== + +selection = sm.sendNext("Hey! What would you have me do?\r\n#b" + main_menu + "#k") +if selection: + donationPointOptions() +else: + votePointOptions() \ No newline at end of file diff --git a/scripts/npc/Ranmaru_check_eNum.py b/scripts/npc/Ranmaru_check_eNum.py new file mode 100755 index 0000000..581c95c --- /dev/null +++ b/scripts/npc/Ranmaru_check_eNum.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("Would you like to enter?") + +if response: + sm.warp(807300100, 0) \ No newline at end of file diff --git a/scripts/npc/SecJob_Schiller.py b/scripts/npc/SecJob_Schiller.py new file mode 100755 index 0000000..7634e33 --- /dev/null +++ b/scripts/npc/SecJob_Schiller.py @@ -0,0 +1,20 @@ +sm.setSpeakerID(parentID) +sm.sendNext("Oh my, What's this? I gave specific instructions to make sure no one else used the airport at this time. But I say, are you a member of the Resistance?") +sm.setPlayerAsSpeaker() +sm.sendNext("#b(You are surprised Schiller doesn't immediately recognize you. You certainly remember him.)") +sm.setSpeakerID(parentID) +sm.sendNext("Come ot think of it. You do look familiar... Where have I seen you before?") +sm.setPlayerAsSpeaker() +sm.sendNext("I couldn't fight you the last time we met, but i plan to fix that today.") +sm.setSpeakerID(parentID) +sm.sendNext("You! I remember now! You stole that one test subject! Do you have any idea how much I suffered because of that? I was demoted... five times! Now I'm stuck doing menial jobs like this. Time for you to pay.. oh yea.") +if sm.hasQuest(23162): + sm.giveItem(4034787) +elif sm.hasQuest(23025): + sm.giveItem(4032739) +elif sm.hasQuest(23024): + sm.giveItem(4032738) +elif sm.hasQuest(23023): + sm.giveItem(4032737) +sm.warpInstanceOut(310000000) +sm.removeNpc(parentID) \ No newline at end of file diff --git a/scripts/npc/ShanghaiGate.py b/scripts/npc/ShanghaiGate.py new file mode 100755 index 0000000..e2c897b --- /dev/null +++ b/scripts/npc/ShanghaiGate.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("Would you like to travel to Shanghai?") + +if response: + sm.warp(701102000, 0) diff --git a/scripts/npc/ShanghaiMapleGate.py b/scripts/npc/ShanghaiMapleGate.py new file mode 100755 index 0000000..9b6a1c3 --- /dev/null +++ b/scripts/npc/ShanghaiMapleGate.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("Would you like to go back to Victoria Island?") + +if response: + sm.warp(104020000, 0) \ No newline at end of file diff --git a/scripts/npc/Shaolin_notice.py b/scripts/npc/Shaolin_notice.py new file mode 100755 index 0000000..ae973e8 --- /dev/null +++ b/scripts/npc/Shaolin_notice.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("Would you like to go to the Chief Priest waiting area?") + +if response: + sm.warp(701220601) # waiting map \ No newline at end of file diff --git a/scripts/npc/Sky_Train.py b/scripts/npc/Sky_Train.py new file mode 100755 index 0000000..49773ab --- /dev/null +++ b/scripts/npc/Sky_Train.py @@ -0,0 +1,3 @@ +# id 2085000 (Matada ), field 240080000 +sm.setSpeakerID(2085000) # Matada +res = sm.sendNext("I wish I could soar through the sky... You know, if you are interested in flying, go see Chief Tatamo in Leafre.\r\n#b#L0# Can I purchase a tablet?") diff --git a/scripts/npc/SockerCreate.py b/scripts/npc/SockerCreate.py new file mode 100755 index 0000000..9b8c3f1 --- /dev/null +++ b/scripts/npc/SockerCreate.py @@ -0,0 +1,122 @@ +from net.swordie.ms.enums import InvType + +alienCube = 5750000 +alienCubePrice = 7000 +shop = [ + [5750000, 7000], # Alien Cube for 7000 cash + [2930000, 3000], # Socket Creator 3000 cash + [5750001, 20000] # Nebulite Diffuser 20000 cash +] +newlist = [] +itemID = [] + + +menu = sm.menu("#i5750000# Alien Cube #r(7000 cash)#k#b" , + "#i2930000# Socket Creator #r(3000 cash)#k#b", + "#i5750001# Nebulite Diffuser #r(20000 cash)#k#b", + "Fuse Nebulite", + "Fuse Nebulite (multiple)", + "Use an Alien Cube", + "Remove Nebulites from inventory", + "Use a nebulite", + "Remove Nebulite from equipment") + + +def buy(opt, items): + name = items[opt][0] + cost = items[opt][1] + if sm.sendAskYesNo("Are you sure you want to buy #z " + str(name) + "# #i" + str(name) + "# for #r" + str(cost) + "#k cash?"): + if chr.getUser().getMaplePoints() >= cost: + if sm.canHold(name): + sm.giveItem(name) + chr.deductNx(cost) + sm.sendSayOkay("You have obtained #b#z" + str(name) + "##k for #r" + str(cost) + "#k nx cash.") + else: + sm.sendNext("Please make sure you have enough space in your inventory") + else: + sm.sendNext("You don't have enough cash. You need #r" + str(cost) + "#k nx.") + +def fuseNeb(opt, multi): + if multi: + sm.sendNext("TODO: Fuse Multiple Nebulites") + else: + sm.sendNext("TODO: Fuse Nebulite") + +def useAlienCube(items): + listitem = eval(sm.getNebsFromInv()) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.INSTALL)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("You do not posses any nebulites in your inventory.") + sm.dispose() + nebSlot = sm.sendNext(''.join(newlist)) + neb = chr.getInventoryByType(InvType.INSTALL).getItemBySlot(nebSlot) + while sm.sendNext("#L0##fs12#"+ "#i" + str(neb.getItemId()) + "##t" + str(neb.getItemId()) + "#\r\n") > -1: + if sm.hasItem(alienCube): + if sm.getQuantityOfItem(alienCube) <= 1: + while sm.sendAskText("You are almost out of cubes. Once your cubes are up - I will use your NX to cube.\r\ntype 'OK' to continue", "", 1, 5) != "OK": + pass + nebSlot = sm.cubeNeb(nebSlot) + neb = chr.getInventoryByType(InvType.INSTALL).getItemBySlot(nebSlot) + sm.consumeItem(alienCube) + + else: + if chr.getUser().getMaplePoints() >= alienCubePrice: + nebSlot = sm.cubeNeb(nebSlot) + neb = chr.getInventoryByType(InvType.INSTALL).getItemBySlot(nebSlot) + chr.addNx(-alienCubePrice) + else: + sm.sendSayOkay("You do not have enough NX to cube.") + break + +def removeNebFromInventory(opt, items): + sm.sendNext("TODO: Remove Nebulite from inventory") + +def useNebulite(opt, items): + newlist = [] + itemID = [] + listitem = eval(sm.getItemsEligibleForNeb()) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("No equips to apply Nebulites to.") + sm.dispose() + equipSlot = sm.sendNext(''.join(newlist)) + newlist = [] + itemID = [] + listitem = eval(sm.getNebsFromInv()) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.INSTALL)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("You do not posses any Nebulites in your inventory.") + sm.dispose() + nebSlot = sm.sendNext(''.join(newlist)) + sm.fuseNebuliteIntoEquip(equipSlot, nebSlot) + + +def removeNebEquipment(opt, items): + sm.sendNext("TODO: Remove Nebulite equipment") + + +selection = sm.sendNext("#b" + menu + "#k") + +if 0 <= selection <= len(shop) - 1 : + buy(selection, shop) +elif selection == 3: + fuseNeb(selection, False) +elif selection == 4: + fuseNeb(selection, True) +elif selection == 5: + useAlienCube(shop) +elif selection == 6: + removeNebFromInventory(selection, shop) +elif selection == 7: + useNebulite(selection, shop) +elif selection == 8: + removeNebEquipment(selection, shop) diff --git a/scripts/npc/SongOfHawar.py b/scripts/npc/SongOfHawar.py new file mode 100755 index 0000000..5bb0873 --- /dev/null +++ b/scripts/npc/SongOfHawar.py @@ -0,0 +1,12 @@ +# id 9400593 (Hawalu), field 867201100 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendNext("Let's softly, gently head to the forest") +sm.sendSay("Ever so quietly so we don't wake") +sm.sendSay("Do you need me to perk you up? What should I sing?") +res = sm.sendNext("Do you want me to sing you a song?#b\r\n#L0# Who Lives in Windsleep Forest#l\r\n#L1# Yummy Meat#l\r\n#L2# Abrup, Land of Snow#l\r\n#L3# The Wind Blows#l\r\n#L10# Did an Eyeful steal your necklace?#l\r\n#L11# What do you mean by ancestors living in Windsleep Forest?#l\r\n#L20# I'm okay right now. Maybe later.#l") +sm.createQuestWithQRValue(64063, "chk1=1;chk2=1;chk3=1") +sm.createQuestWithQRValue(64063, "chk1=2;chk2=1;chk3=1") +sm.createQuestWithQRValue(64272, "0=2") diff --git a/scripts/npc/Stage0_visitor_gooutcube.py b/scripts/npc/Stage0_visitor_gooutcube.py new file mode 100755 index 0000000..d841b34 --- /dev/null +++ b/scripts/npc/Stage0_visitor_gooutcube.py @@ -0,0 +1,17 @@ +# OSSS Researcher (9250155) | Eastern Besieged Henesys + +DamageTest = 910080010 + +if sm.getFieldID() == DamageTest: + selection = sm.sendNext("Are you ready to leave this place?\r\n#b" + "#L0#I'd like to test my damage.#l\r\n" + "#L1#Leave this place.#l\r\n") + + if selection == 0: # I'd like to test my damage. + sm.sendSayOkay("Not Coded Yet.") + + elif selection == 1: # Leave this place + sm.warpInstanceOut(925020001) # Dojo Hall + +elif sm.sendAskYesNo("Would you like to test your damage?"): + sm.warpInstanceIn(910080010) # Eastern Besieged Henesys diff --git a/scripts/npc/StageNpcCheckSengo.py b/scripts/npc/StageNpcCheckSengo.py new file mode 100755 index 0000000..98c1c2f --- /dev/null +++ b/scripts/npc/StageNpcCheckSengo.py @@ -0,0 +1,14 @@ +# Oda Nobunaga | Event Hall + +SchoolDojo = 744000020 + +if sm.getFieldID() == SchoolDojo: + + selection = sm.sendNext("Are you ready to leave this place?\r\n#b" + "#L0#Leave this place.#l\r\n") + + if selection == 0: # Leave this place + sm.warp(910000000) # Sengoku High + +elif sm.sendAskYesNo("You dare wish to challenge my school?\r\n#bDo you wish to be teleported to Sengoku High?"): + sm.warp(744000020) diff --git a/scripts/npc/Sunstone.py b/scripts/npc/Sunstone.py new file mode 100755 index 0000000..7eda46d --- /dev/null +++ b/scripts/npc/Sunstone.py @@ -0,0 +1,4 @@ + # Sunstone Grave (9201071) | MesoGears: Fire Chamber (600020400) + # Author: Tiger + +sm.sendSayOkay("Tempt Fate. Discover the path.") diff --git a/scripts/npc/TheSeedRanking.py b/scripts/npc/TheSeedRanking.py new file mode 100755 index 0000000..8840266 --- /dev/null +++ b/scripts/npc/TheSeedRanking.py @@ -0,0 +1,21 @@ +# Tower of Oz Weekly Ranking Bulletin Board | Tower of Oz (992000000) +from net.swordie.ms.enums import UIType + +answer = sm.sendNext("#e[Tower of Oz Ranking Board] #n\r\n#b" + "#L0#Tower of Oz Exploration Ranking#l\r\n" + "#L1#Tower of Oz Exploration Ranking Reward#l\r\n" + "#L2#Your Deepest Floor#l") + +if answer == 0: + sm.openUI(UIType.UI_TOWERRANK) + +elif answer == 1: + sm.sendNext("#e[Tower of Oz Exploration Ranking Reward]\r\n\r\n#b" + "Ranking Reset: Every Monday at midnight\r\n#n" + "Make it into the #etop 30#n before the reset to get a reward for the week.") + sm.sendPrev("#b#e1st: #i1190502# Tower of Oz Legend Emblem\r\n" + "2nd - 10th: #i1190500# Tower of Oz Master Emblem\r\n" + "11th - 30th: #i1190501# Tower of Oz Expert Emblem\r\n\r\n#n#k" + "Usable until next #e#bMonday at midnight#n#k, beginning when you obtain the reward.") +else: + sm.sendSayOkay("Your deepest floor is #b#e[FLOOR]") # [FLOOR] for now diff --git a/scripts/npc/Thomas.py b/scripts/npc/Thomas.py new file mode 100755 index 0000000..5121c42 --- /dev/null +++ b/scripts/npc/Thomas.py @@ -0,0 +1,15 @@ +# Thomas | Amoria Ambassador + +if sm.getFieldID() == 100000000: + response = sm.sendAskYesNo("I can take you to Amoria Village. Are you ready to go?") +else: + response = sm.sendAskYesNo("I can take you to back Henesys. Are you ready to go?") + + +if response: + if sm.getFieldID() == 100000000: + sm.warp(680000000, 0) + else: + sm.warp(100000000, 0) +else: + sm.sendSayOkay("Ok, feel free to hang around until you're ready to go!") diff --git a/scripts/npc/UIOpen.py b/scripts/npc/UIOpen.py new file mode 100755 index 0000000..1f55e14 --- /dev/null +++ b/scripts/npc/UIOpen.py @@ -0,0 +1,17 @@ +# Medina (2183003) | Azwan Refuge Zone : Azwan + +selection = sm.sendNext("#e#n \r\n \r\n Can you handle the rest of Hilla's forces in Azwan? \r\n \r\n \r\n#L0##bGo clear out whoever's left.#l \r\n #L1#Face Hilla herself(Level 120 and above).#l") +if selection == 0: + if sm.getChr().getLevel() < 120: + sm.sendSayOkay("You have to be above level 120 to participate in the fight for Azwan") + sm.dispose() + else: + sm.warp(262000300, 0) + sm.dispose() +elif selection == 1: + if sm.getChr().getLevel() < 120: + sm.sendSayOkay("You have to be above level 120 to participate in Hilla") + sm.dispose() + else: + sm.warp(262030000, 0) + sm.dispose() \ No newline at end of file diff --git a/scripts/npc/UIOpen_Start.py b/scripts/npc/UIOpen_Start.py new file mode 100755 index 0000000..3801381 --- /dev/null +++ b/scripts/npc/UIOpen_Start.py @@ -0,0 +1,3 @@ +from net.swordie.ms.enums import UIType + +sm.openUI(UIType.UI_ASWANSTART) \ No newline at end of file diff --git a/scripts/npc/UMcoolgirl.py b/scripts/npc/UMcoolgirl.py new file mode 100755 index 0000000..fe56049 --- /dev/null +++ b/scripts/npc/UMcoolgirl.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 913050010 +# NPC ID :: 1105012 +# Lilin + +sm.setSpeakerID(1105012) +sm.sendSayOkay("This is the furthest I've ever been from my village. Ereve is so nice, I can see why people don't return home.") \ No newline at end of file diff --git a/scripts/npc/VanLeon_Summon.py b/scripts/npc/VanLeon_Summon.py new file mode 100755 index 0000000..e19804f --- /dev/null +++ b/scripts/npc/VanLeon_Summon.py @@ -0,0 +1,10 @@ +# Von Leon : Lion King + +VON_LEON_NPC = 2161000 + +if sm.sendAskYesNo("Are you the warriors who came to defeat me? Or are you from the Anti Black Mage Alliance? It doesn't matter who you are ...There's no need for chitchatting if we are sure about each other's purpose...\r\nBring it on, you fools!"): + sm.removeNpc(VON_LEON_NPC) + if sm.getFieldID() == 211070100: + sm.spawnMob(8840007, 28, -181, False) + elif sm.getFieldID() == 211070102: + sm.spawnMob(8840000, 28, -181, False) \ No newline at end of file diff --git a/scripts/npc/VcoreUI.py b/scripts/npc/VcoreUI.py new file mode 100755 index 0000000..415053e --- /dev/null +++ b/scripts/npc/VcoreUI.py @@ -0,0 +1,3 @@ +from net.swordie.ms.enums import UIType + +sm.openUI(UIType.V_NODES) \ No newline at end of file diff --git a/scripts/npc/WUkerning.py b/scripts/npc/WUkerning.py new file mode 100755 index 0000000..ac2d21d --- /dev/null +++ b/scripts/npc/WUkerning.py @@ -0,0 +1,9 @@ +# Lakelis (90761100) | First Time Together Waiting Room +sm.setSpeakerID(parentID) +selection = sm.sendNext("#e#n \r\n \r\n #b#L0#I want to attempt this party quest.#l \r\n #L1#How many more times can I attempt this party quest today?#l") + +if selection == 0: + sm.warpPartyIn(933011000) +elif selection == 1: + #TODO finish this + sm.sendNext("Todo") \ No newline at end of file diff --git a/scripts/npc/WUkerning_exit.py b/scripts/npc/WUkerning_exit.py new file mode 100755 index 0000000..f6e4026 --- /dev/null +++ b/scripts/npc/WUkerning_exit.py @@ -0,0 +1,6 @@ +# Nella (9076112) | First Time Together Stage 1 Exit +sm.setSpeakerID(parentID) +response = sm.sendAskYesNo("Are you sure you want to leave your party behind and go back to the waiting room?") + +if response == 1: + sm.warpInstanceOut(933010000) \ No newline at end of file diff --git a/scripts/npc/WUkerning_next.py b/scripts/npc/WUkerning_next.py new file mode 100755 index 0000000..0cffbd6 --- /dev/null +++ b/scripts/npc/WUkerning_next.py @@ -0,0 +1,4 @@ +# Cloto (9076111) | First Time Together Stage 1 Information +sm.setSpeakerID(parentID) +sm.sendNext("Hello and welcome to the first stage. As you can see, this place is full of Ligators. Each Ligator will drop one #bcoupon#k when defeated. Each party member, except for the party leader, must come talk to me and then bring me the exact number of #bcoupons#k that I ask for. Once everyone #bcompletes their individual missions#k, the party can move on to the next stage. Good luck!") + diff --git a/scripts/npc/WUmoonrabbit.py b/scripts/npc/WUmoonrabbit.py new file mode 100755 index 0000000..af84733 --- /dev/null +++ b/scripts/npc/WUmoonrabbit.py @@ -0,0 +1,32 @@ +# Tory (1012112) | Moon Bunny's Rice Cake Waiting Room + +ENTRANCE_MAP = 933000000 + +pqItems = [ +4001117, # Old Metal Key +4001120, # Rookie Pirate Mark +4001121, # Rising Pirate Mark +4001122, # Veteran Pirate Mark +] + +def startMoonBunny(): + sm.warpInstanceIn(933001000, True) + +if sm.getFieldID() == ENTRANCE_MAP: + sm.setSpeakerID(parentID) + selection = sm.sendNext("#e#n \r\n Hi I'm Tory! \r\n #b#L0#Go to Primrose Hill.#l \r\n #L1#How many more times can I try Primrose Hill?#l") +if selection == 0: + if sm.checkParty() and selection == 0: + for item in pqItems: + if sm.hasItem(item): + sm.consumeItem(item, sm.getQuantityOfItem(item)) + startMoonBunny() +elif selection == 1: + sm.sendSayOkay("#Not yet available") + + + +else: + response = sm.sendAskYesNo("Do you want to help me fight Lord Pirate?") + if response: + sm.warp(ENTRANCE_MAP) \ No newline at end of file diff --git a/scripts/npc/WUmoonrabbit_tiger.py b/scripts/npc/WUmoonrabbit_tiger.py new file mode 100755 index 0000000..988892d --- /dev/null +++ b/scripts/npc/WUmoonrabbit_tiger.py @@ -0,0 +1,33 @@ +pqItems = [ +4000884, # Primrose Seed +# We dont remove Rice Cakes cause you use them to buy the Equip item +] + +def endMoonBunny(): + sm.warpInstanceOut(933000000) + + +if sm.getFieldID() == 933001000: + sm.setSpeakerID(parentID) + if field.getProperty("stage") == 2: + selection = sm.sendNext("Yum, yum! This is so tasty. Please bring me more #bMoon Bunny's Rice Cakes. \r\n #k#L1#I want to leave this place") + else: + selection = sm.sendNext("Yum, yum! This is so tasty. Please bring me more #bMoon Bunny's Rice Cakes. \r\n #k#L0#I want to leave this place") +if selection == 0: + for item in pqItems: + if sm.hasItem(item): + sm.consumeItem(item, sm.getQuantityOfItem(item)) + endMoonBunny() +elif selection == 1: + for item in pqItems: + if sm.hasItem(item): + sm.consumeItem(item, sm.getQuantityOfItem(item)) + endMoonBunny() + # Idk what to reward here so I'll put placeholders? + sm.giveMesos(500 + (sm.getChr().getLevel() * 20)) + sm.giveExp(500 + (sm.getChr().getLevel() * 100)) + # PQPoints soonTM + + + + diff --git a/scripts/npc/Zakum00.py b/scripts/npc/Zakum00.py new file mode 100755 index 0000000..3e1c59f --- /dev/null +++ b/scripts/npc/Zakum00.py @@ -0,0 +1,26 @@ +# Adobis - Door to Zakum field + +sm.setSpeakerType(4) +sm.setSpeakerID(2030008) +res = sm.sendNext("Well... Okay. It seems you fulfill the requirements. What would you like to do?\r\n#b#L2# Receive an offering for Zakum.#l\r\n#b#L3# Go to El Nath.#l") +#b#L0# Investigate dead mine caves. #l +#b#L1# Explore Zakum Dungeon.#l + +if res == 2: + mode = sm.sendNext("Which Zakum are you making an offering to ?\r\n#b#L0# Easy Zakum#l\r\n#L1# Normal/Chaos Zakum#l") + mode_name = "Easy " if mode == 0 else "" + item = 4001796 if mode == 0 else 4001017 + sm.sendNext("You need an offering for "+mode_name+"Zakum..") + sm.sendSay("Since I have lots of #b#t{0}##k{1}".format(str(item), + (" that is needed for Zakum's offering, I will just give it for free." + if mode == 0 else ",, I'll just give you some. Not good for anything besides offerings anyway."))) + # if sm.hasItem(item): + # sm.sendSayOkay("You've already had it.") + # el + if sm.canHold(item): + sm.giveItem(item, 5) + sm.sendSay("Just drop this on "+mode_name+"Zakum's Altar.") + else: + sm.sendSayOkay("Please make more space in your ETC inventory.") +elif res == 3: + sm.warp(211000000) diff --git a/scripts/npc/Zakum02.py b/scripts/npc/Zakum02.py new file mode 100755 index 0000000..af5cbf8 --- /dev/null +++ b/scripts/npc/Zakum02.py @@ -0,0 +1,4 @@ +# npc at the end of the second Zakum JQ map + +sm.sendSayOkay("Yeah okay whatever, you made it. Stop disturbing me, I'm busy.") +sm.warp(211042300, 2) \ No newline at end of file diff --git a/scripts/npc/Zakum04.py b/scripts/npc/Zakum04.py new file mode 100755 index 0000000..1c555fa --- /dev/null +++ b/scripts/npc/Zakum04.py @@ -0,0 +1,6 @@ +# Ali +# Adobis's Mission I: The Room of Tragedy +# not sure what function this room has but it has no portals + +sm.sendNext("Why are you here? You shouldn't be here..") +sm.warp(211000000) # warps to El Nath \ No newline at end of file diff --git a/scripts/npc/Zakum06.py b/scripts/npc/Zakum06.py new file mode 100755 index 0000000..e4662a1 --- /dev/null +++ b/scripts/npc/Zakum06.py @@ -0,0 +1,3 @@ +# Amon - (Easy/Chaos) Zakum's Altar +if sm.sendAskYesNo("Are you sure you want to exit? If you come back, you'll have to start all over."): + sm.warpInstanceOut(211042300, 2) # Zakum entrance diff --git a/scripts/npc/__init__.py b/scripts/npc/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/npc/acc_product.py b/scripts/npc/acc_product.py new file mode 100755 index 0000000..2af4cce --- /dev/null +++ b/scripts/npc/acc_product.py @@ -0,0 +1,62 @@ +# Hidden Street - Ardentmill :: 910001000 +# Intaglio :: Master of Accessory Crafting :: 9031004 + +MINING_SKILL = 92010000 +SMITHING_CRAFT_SKILL = 92020000 +ACCESSORY_CRAFT_SKILL = 92030000 +ALCHEMY_CRAFT_SKILL = 92040000 +FEE = [5000, 15000, 25000, 40000, 60000, 85000, 115000, 150000, 190000, 235000] + +if not sm.hasSkill(ACCESSORY_CRAFT_SKILL): + selection = sm.sendSay("The brilliant radiance! The crystalline purity! The prismatic beauty! Are you a Jeweler too, my friend? Shall we seek the mysteries of Accessory Crafting together?\r\n#L0#Hear an explanation about #b#eAccessory Crafting#n.#l\r\n#L1#Learn #eAccessory Crafting#n.#k#l") + if selection == 0: + sm.sendNext("Where to begin, where to begin? I could tell you about the inherent beauty of jewels, but...that could take all night.\r\nIn short, Accessory Crafting is the art of taking a raw jewel or mineral, and shaping it until its true beauty comes shining through. Even the roughest gemstone has the power to become not only elegant, but powerful.") + elif selection == 1: + if not sm.hasSkill(MINING_SKILL): + sm.sendSayOkay("Oh, no. You simply MUST learn Mining from #bCole#k before I can teach you to be a Jeweler. He'll teach you how to get all the minerals and jewels you need to make shining, glowing accessories.") + sm.dispose() + + if sm.hasSkill(SMITHING_CRAFT_SKILL) or sm.hasSkill(ALCHEMY_CRAFT_SKILL): + sm.sendNext("Don't you know you can't learn Accessory Crafting if you've already learned Smithing and Alchemy? Shh... All you need to do is delete one of your current Professions, and we can study Accessory Crafting together!") + sm.dispose() + + learn = sm.sendAskYesNo("Oh, you're ready to learn #bAccessory Crafting#k?\r\nSince you're so cute, I'll give you a discount. #b5,000 Mesos#k to become my student.\r\n") + if learn: + if sm.getMesos() < 5000: + sm.sendNext("You don't have #b 5000 Mesos#k? I wish I could, but I just can't teach you for free.") + sm.dispose() + + sm.giveMesos(-5000) + sm.giveSkill(ACCESSORY_CRAFT_SKILL, 0x1000000, 13) + sm.playSound("profession/levelup") + sm.sendNext("Oh! Wonderful! And that's how you do Accessory Crafting. Practice, practice, practice, and when you've gained enough Mastery, I'll teach you some more.") + else: + sm.sendNext("What? Why not?! I was looking forward to sharing my knowledge with you!") +else: + selection = sm.sendSay("The brilliant radiance! The crystalline purity! The prismatic beauty! Are you a Jeweler too, my friend? Shall we seek the mysteries of Accessory Crafting together?\r\n#L2##bRaise #eAccessory Crafting#n level.#l\r\n#L3#Unlearn Accessory Crafting.#k#l") + if selection == 2: + if sm.isAbleToLevelUpMakingSkill(ACCESSORY_CRAFT_SKILL): + levelup = sm.sendAskYesNo("Looks like you're ready to level up your Accessory Crafting. I'll take #b" + str(FEE[sm.getMakingSkillLevel(ACCESSORY_CRAFT_SKILL)]) + " Mesos#k as tuition. Ready to learn?") + if levelup: + if sm.getMesos() < FEE[sm.getMakingSkillLevel(ACCESSORY_CRAFT_SKILL)]: + sm.sendNext("You don't have enough mesos.") + sm.dispose() + sm.giveMesos(-FEE[sm.getMakingSkillLevel(ACCESSORY_CRAFT_SKILL)]) + sm.makingSkillLevelUp(ACCESSORY_CRAFT_SKILL) + sm.sendNext("Your Accessory Crafting skill is now Lv. " + str(sm.getMakingSkillLevel(ACCESSORY_CRAFT_SKILL)) +".") + else: + sm.sendNext("Sure, take some time to think it over. I'll be here.") + sm.dispose() + else: + sm.sendNext("Oh, you're not ready to level up your Profession just yet. Keep at it, though!") + elif selection == 3: + unlearn = sm.sendAskYesNo("You want to delete your Accessory Crafting skill? Are you tired of me already? All the effort you've put into raising your level and Mastery will be lost... All that...effort...gone... Are you really doing this?") + if unlearn: + sm.removeSkill(ACCESSORY_CRAFT_SKILL) + # set quest value 11496, "0" + # start quest 3263 + # complete quest 3263 + # remove quest 3263 + sm.sendNext("It's been reset... You are so cold... But if you ever change your mind, I'll be here.") + else: + sm.sendSayOkay("Oh, thank you, thank you, thank you!") \ No newline at end of file diff --git a/scripts/npc/aishaShop.py b/scripts/npc/aishaShop.py new file mode 100755 index 0000000..b61fbbd --- /dev/null +++ b/scripts/npc/aishaShop.py @@ -0,0 +1 @@ +sm.openShop(9070101) \ No newline at end of file diff --git a/scripts/npc/alchemy.py b/scripts/npc/alchemy.py new file mode 100755 index 0000000..3d355b8 --- /dev/null +++ b/scripts/npc/alchemy.py @@ -0,0 +1,64 @@ +# Hidden Street - Ardentmill :: 910001000 +# Ally :: Master of Alchemy :: 9031005 + +HERBALISM_SKILL = 92000000 +MINING_SKILL = 92010000 +SMITHING_CRAFT_SKILL = 92020000 +ACCESSORY_CRAFT_SKILL = 92030000 +ALCHEMY_CRAFT_SKILL = 92040000 +FEE = [5000, 15000, 25000, 40000, 60000, 85000, 115000, 150000, 190000, 235000] + +if not sm.hasSkill(ALCHEMY_CRAFT_SKILL): + selection = sm.sendSay("Hello. Are you interested in Alchemy?\r\n#L0##bListen to an explanation about #eAlchemy#n.#l\r\n#L1#Learn #eAlchemy#n.#k#l") + if selection == 0: + sm.sendNext("Alchemy is the science of turning herb oils into potions. You can make potions to recover HP and MP, potions to make you stronger--potions the likes of which you've never imagined.") + elif selection == 1: + if not sm.hasSkill(HERBALISM_SKILL): + sm.sendSayOkay("You cannot learn alchemy without learning herbalism first.") + sm.dispose() + + if sm.hasSkill(SMITHING_CRAFT_SKILL) or sm.hasSkill(ACCESSORY_CRAFT_SKILL): + sm.sendNext("You cannot learn Alchemy if you have already learned Smithing and Accessory Crafting. You must unlearn one of those two Professions if you wish to learn Alchemy.") + sm.dispose() + + learn = sm.sendAskYesNo("Do you really want to learn #bAlchemy#k?\r\nYou must pay #b5,000 Mesos#k to learn this Profession. \r\n#b") + if learn: + if sm.getMesos() < 5000: + sm.sendNext("Umm... I don't think you have enough money... I'm sorry, but please bring #b5000 Mesos#k.") + sm.dispose() + + sm.giveMesos(-5000) + sm.giveSkill(ALCHEMY_CRAFT_SKILL, 0x1000000, 13) + sm.playSound("profession/levelup") + sm.sendNext("Congratulations! You are now an Alchemist. Brew up some potions to increase your Mastery. When you're ready, I'll teach you something new.") + else: + sm.sendNext("Think carefully before you choose a Profession. Such things take effort and time, after all. Come see me when you are ready.") +else: + selection = sm.sendSay("Hello. Are you interested in Alchemy?\r\n#L2##bRaise #eAlchemy#n level.#l\r\n#L3#Unlearn Alchemy.#k#l") + if selection == 2: + if sm.isAbleToLevelUpMakingSkill(ALCHEMY_CRAFT_SKILL): + levelup = sm.sendAskYesNo("Looks like you're ready to level up your Alchemy. I'll take #b" + str(FEE[sm.getMakingSkillLevel(ALCHEMY_CRAFT_SKILL)]) + " Mesos#k as tuition. Ready to learn?") + if levelup: + if sm.getMesos() < FEE[sm.getMakingSkillLevel(ALCHEMY_CRAFT_SKILL)]: + sm.sendNext("You don't have enough mesos.") + sm.dispose() + + sm.giveMesos(-FEE[sm.getMakingSkillLevel(ALCHEMY_CRAFT_SKILL)]) + sm.makingSkillLevelUp(ALCHEMY_CRAFT_SKILL) + sm.sendNext("Your Alchemy skill is now Lv. " + str(sm.getMakingSkillLevel(ALCHEMY_CRAFT_SKILL)) +".") + else: + sm.sendNext("Sure, take some time to think it over. I'll be here.") + sm.dispose() + else: + sm.sendNext("You're not ready to learn more Alchemy yet. Work on improving your Mastery first.") + elif selection == 3: + unlearn = sm.sendAskYesNo("All your knowledge of Alchemy will be wiped away. You Alchemy level and Mastery will both be reset to 0. Are you sure you want to do this?") + if unlearn: + sm.removeSkill(ALCHEMY_CRAFT_SKILL) + # set quest value 11497, "0" + # start quest 3263 + # complete quest 3263 + # remove quest 3263 + sm.sendNext("Your Alchemy skill has been reset. Come back if you ever want to learn it again.") + else: + sm.sendSayOkay("Yes. It would be a shame to lose all that hard work.") \ No newline at end of file diff --git a/scripts/npc/alicia_aquaris.py b/scripts/npc/alicia_aquaris.py new file mode 100755 index 0000000..0972d15 --- /dev/null +++ b/scripts/npc/alicia_aquaris.py @@ -0,0 +1,53 @@ +# Alicia's Soul | Tower of Oz (992000000) + +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +####################################### + # THIS IS TEMPORARY UNTIL OZ IS CODED # + ####################################### + +# Mode, Required Level, Map ID, Death Count, Event Type + +destinations = [ + ["Normal", 120, 992050000, 20, EventType.Dorothy], +] + +runsPerDay = 1 + +if sm.getFieldID() == 992000000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.sendAskYesNo + + dialog = "Do you want to head to the '#bUndersea 50F#k' to fight \r\n#bDorothy#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Undersea 50F (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bDorothy#k.") + + if sm.partyHasCoolDown(destinations[response][4], runsPerDay): + sm.sendNext("You or one of your party member has already attempted facing \r\n#bDorothy#k within the past 24 Hours.") + sm.dispose() + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.DOROTHY_TIME) + sm.addCoolDownInXDaysForParty(destinations[response][4], 1, 1) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) diff --git a/scripts/npc/aqupondo.py b/scripts/npc/aqupondo.py new file mode 100755 index 0000000..b9d3656 --- /dev/null +++ b/scripts/npc/aqupondo.py @@ -0,0 +1,4 @@ +# Leon Daniella (9390234) | Canal Battleground 5 +if sm.getFieldID() == 865020051: + if sm.sendAskYesNo("Would you like to return to #b#m865020300##k?"): + sm.warpInstanceOut(865020300) diff --git a/scripts/npc/arcana_flower.py b/scripts/npc/arcana_flower.py new file mode 100755 index 0000000..d442bcb --- /dev/null +++ b/scripts/npc/arcana_flower.py @@ -0,0 +1,5 @@ +# id 3003337 (Whispering Flower), field 450005100 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003337) # Whispering Flower +sm.sendNext("If nothing is done, all will wither and die. Me, you, everyone.\r\n - Pessimistic Spirit") diff --git a/scripts/npc/arcana_rock_free.py b/scripts/npc/arcana_rock_free.py new file mode 100755 index 0000000..3917bae --- /dev/null +++ b/scripts/npc/arcana_rock_free.py @@ -0,0 +1,6 @@ +# id 3003333 (Rock Spirit), field 450005431 +sm.closeUI(1128) +sm.startQuest(34474) +sm.startQuest(34484) +sm.createQuestWithQRValue(34474, "fin=1") +sm.warp(940200414) diff --git a/scripts/npc/arcana_rock_free2.py b/scripts/npc/arcana_rock_free2.py new file mode 100755 index 0000000..131aecf --- /dev/null +++ b/scripts/npc/arcana_rock_free2.py @@ -0,0 +1,4 @@ +# id 3003335 (Rock Spirit), field 450005432 +sm.startQuest(34486) +sm.createQuestWithQRValue(34474, "fin=5") +sm.warp(940200415) diff --git a/scripts/npc/archer4th_warp.py b/scripts/npc/archer4th_warp.py new file mode 100755 index 0000000..7a5f07b --- /dev/null +++ b/scripts/npc/archer4th_warp.py @@ -0,0 +1,20 @@ +# Bowman 4th Job NPC Warp Script + +MANON_PREV_MAP = 240020400 +GRIFFEY_PREV_MAP = 240020100 +MANONS_DARK_FOREST = 924000200 +DARK_GRIFFEY_FOREST = 924000201 + + +sm.setSpeakerID(parentID) +sm.sendNext("Is it in you to become a hero? The only way to find out is for you to take action...") +if not sm.hasQuest(1455): + sm.dispose() + +selection = sm.sendNext("If you agree to take this test, I will send you to Manon and Girffey. Of course, if you are capable of visit Manon Forest or Griffey Forest on your own, plese feel free to do so. What would you like to do?\r\n\r\n#L0##bPlease send me to Manon Forest.\r\n#L1#Please send me to Griffey Forest.#l\r\n#L2#It's nothing. I will go there on my own.#l#n") +if selection == 0: + sm.sendNext("Would you like to go to Manon Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(MANONS_DARK_FOREST, False) +elif selection == 1: + sm.sendNext("Would you like to go to Griffey Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(DARK_GRIFFEY_FOREST, False) diff --git a/scripts/npc/awake.py b/scripts/npc/awake.py new file mode 100755 index 0000000..e4adf9f --- /dev/null +++ b/scripts/npc/awake.py @@ -0,0 +1,49 @@ +# 140090000 +LILIN = 1202000 + +if not "helper=clear" in sm.getQRValue(21019): + sm.setSpeakerID(LILIN) + sm.flipSpeaker() + sm.sendNext("You've finally awoken...!") + + sm.setPlayerAsSpeaker() + sm.sendSay("And you are...?") + + sm.setSpeakerID(LILIN) + sm.flipSpeaker() + sm.sendSay("The hero who fought against the Black Mage... I've been waiting for you to wake up!") + + sm.setPlayerAsSpeaker() + sm.sendSay("Who... Who are you? And what are you talking about?") + sm.sendSay("And who am I...? I can't remember anything... Ouch, my head hurts!") + + sm.reservedEffect("Effect/Direction1.img/aranTutorial/face") + sm.addQRValue(21019, "helper=clear") +else: + sm.setSpeakerID(LILIN) + sm.flipSpeaker() + sm.sendNext("Are you alright? ") + + sm.setPlayerAsSpeaker() + sm.sendSay("I can't remember anything. Where am I? And who are you...?") + + sm.setSpeakerID(LILIN) + sm.flipSpeaker() + sm.sendSay( + "Stay calm. There is no need to panic. You can't remember anything because the curse of the Black Mage erased " + "your memory. I'll tell you everything you need to know...step by step.") + sm.sendSay( + "You're a hero who fought the Black Mage and saved Maple World hundreds of years ago. But at the very last " + "moment, the curse of the Black Mage put you to sleep for a long, long time. That's when you lost all of your " + "memories.") + sm.sendSay( + "This island is called Rien, and it's where the Black Mage trapped you. Despite its name, this island is " + "always covered in ice and snow because of the Black Mage's curse. You were found deep inside the Ice Cave.") + sm.sendSay( + "My name is Lilin and I belong to the clan of Rien. The Rien Clan has been waiting for a hero to return for a " + "long time now, and we finally found you. You've finally returned!") + sm.sendSay( + "I've said too much. It's okay if you don't really understand everything I just told you. You'll get it " + "eventually. For now, #byou should head to town#k. I'll stay by your side and help you until you get there.") + sm.hireTutor(True) + sm.warp(140090100, 1) diff --git a/scripts/npc/ayame_sc.py b/scripts/npc/ayame_sc.py new file mode 100755 index 0000000..c499e78 --- /dev/null +++ b/scripts/npc/ayame_sc.py @@ -0,0 +1,51 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Princess No",245, 811000100, 20, EventType.PrincessNO, 172800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 811000008: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to '#bHieizan Temple#k' to fight \r\n#bPrincess No#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Hieizan Temple (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bPrincess No#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bPrincess No#k within the past 48 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.PRINCESSNO_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(811000008) \ No newline at end of file diff --git a/scripts/npc/babyPig.py b/scripts/npc/babyPig.py new file mode 100755 index 0000000..5f15c9f --- /dev/null +++ b/scripts/npc/babyPig.py @@ -0,0 +1,10 @@ +# Baby Pig (1013200) | Hidden Street Lush Forest + +if sm.hasQuest(22005) and not sm.hasQuestCompleted(22005): # Rescuing the Piglet Quest + if sm.canHold(4032449): + sm.giveItem(4032449) + sm.hideNpcByTemplateId(1013200, True, True) # removes Piglet npc + sm.dispose() + else: + sm.sendSay("Please make room in your Etc Inventory.") + sm.dispose() diff --git a/scripts/npc/babyfood.py b/scripts/npc/babyfood.py new file mode 100755 index 0000000..13cbdb1 --- /dev/null +++ b/scripts/npc/babyfood.py @@ -0,0 +1,2 @@ +# Pam (2081004) | Pam's House +sm.sendSayOkay("Hmmm... baby formula? Don't you think you're past that age?") diff --git a/scripts/npc/backToVictoria.py b/scripts/npc/backToVictoria.py new file mode 100755 index 0000000..3b88bc3 --- /dev/null +++ b/scripts/npc/backToVictoria.py @@ -0,0 +1,7 @@ +map = 104020000 +if sm.getFieldID() != 120040000: + map = 120040000 + + +if sm.sendAskYesNo("Would you like to go to #m" + str(map) + "#?"): + sm.warp(map, 0) diff --git a/scripts/npc/balog_InOut.py b/scripts/npc/balog_InOut.py new file mode 100755 index 0000000..4b1e778 --- /dev/null +++ b/scripts/npc/balog_InOut.py @@ -0,0 +1,6 @@ +# Mu Young (1061018) | Balrog Boss Map + +response = sm.sendAskYesNo("Are you sure you want to leave the battlefield?") + +if response: + sm.WarpInstanceOut(105100100) \ No newline at end of file diff --git a/scripts/npc/balog_accept.py b/scripts/npc/balog_accept.py new file mode 100755 index 0000000..3af4132 --- /dev/null +++ b/scripts/npc/balog_accept.py @@ -0,0 +1,49 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Easy", 50, BossConstants.BALROG_EASY_BATTLE_MAP, 10, EventType.Balrog, 21600000], + ["Hard", 70, BossConstants.BALROG_HARD_BATTLE_MAP, 10, EventType.NBalrog, 21600000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 105100100: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to the '#bBalrog's Tomb#k' to fight the\r\n#bBalrog#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Balrog's Tomb (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bBalrog#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bBalrog#k within the past 6 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.BALROG_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/balog_scroll.py b/scripts/npc/balog_scroll.py new file mode 100755 index 0000000..ad0973b --- /dev/null +++ b/scripts/npc/balog_scroll.py @@ -0,0 +1,42 @@ +# Suspicious Man (1061016) | Stairway to the Underground Temple + +items = [ +2040728, +2040729, +2040730, +2040731, +2040732, +2040733, +2040734, +2040735, +2040736, +2040737, +2040738, +2040739 +] +balrogLeather = 4001261 + +if sm.hasItem(balrogLeather): + sm.sendNext("Hello #h0#. I see you have #c"+ str(balrogLeather) +"# Piece"+ ("s" if sm.getQuantityOfItem(balrogLeather) > 1 else "") +" of Balrog Leather, interested in exchanging those for items?") +else: + sm.sendNext("Hello #h0#. I can exchange #z"+str(balrogLeather)+"#for items") + + +selString = "Alright, this is what I can offer you\r\n#b" +i = 0 +while i < len(items): + selString += "#L"+ str(i) +"##z"+ str(items[i]) +"##l\r\n" + i += 1 +selection = sm.sendNext(selString) + +quantity = sm.sendAskNumber("How many of your #b#z"+ str(balrogLeather) +"##k are you willing to trade for my #b#z"+ str(items[selection]) +"##k?" + "\r\nyou have #c"+ str(balrogLeather) +"# Piece"+ ("s" if sm.getQuantityOfItem(balrogLeather) > 1 else "") +" of Balrog Leather", 1, 1, 100) + +if not sm.canHold(items[selection]): + sm.sendSayOkay("You don't have enough space in your inventory.") +elif sm.getQuantityOfItem(balrogLeather) < quantity: + sm.sendSayOkay("You don't fool me\r\nYou do not have enough leather pieces.") +else: + sm.giveItem(items[selection], quantity) + sm.consumeItem(balrogLeather, quantity) + sm.sendSayOkay("Thank you for your redemption") diff --git a/scripts/npc/banbanEnter.py b/scripts/npc/banbanEnter.py new file mode 100755 index 0000000..25e07e9 --- /dev/null +++ b/scripts/npc/banbanEnter.py @@ -0,0 +1,51 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Normal", 100, 105200100, 5, EventType.VonBon, 64800000], + ["Chaos", 220, 105200500, 5, EventType.CVonBon, 64800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 105200000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(1064002) + + dialog = "Do you want to head to the '#bEast Garden#k' to fight \r\n#bVon Bon#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the East Garden (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bVon Bon#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing #bVon Bon#k within the past 18 Hours.\r\n\r\nYou have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.ROOTABYSS_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/bell.py b/scripts/npc/bell.py new file mode 100755 index 0000000..82d6c65 --- /dev/null +++ b/scripts/npc/bell.py @@ -0,0 +1,6 @@ +BELLE = 2151002 + +sm.setSpeakerID(BELLE) + +sm.sendNext("What is it?\r\n\r\n#L0##bI want to talk to you.") +sm.sendNext("Hmm...you want to talk? All right, I love animals, you know...especially cats. They're just so elegant and graceful.") \ No newline at end of file diff --git a/scripts/npc/bellumEnter.py b/scripts/npc/bellumEnter.py new file mode 100755 index 0000000..95a571b --- /dev/null +++ b/scripts/npc/bellumEnter.py @@ -0,0 +1,51 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Normal", 100, 105200400, 5, EventType.Vellum, 64800000], + ["Chaos", 220, 105200800, 5, EventType.CVellum, 64800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 105200000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(1064002) + + dialog = "Do you want to head to the '#bWest Garden#k' to fight \r\n#bVellum#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the West Garden (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bVellum#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing #bVellum#k within the past 18 Hours.\r\n\r\nYou have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.ROOTABYSS_TIME) + #sm.addCoolDownInXDaysForParty(destinations[response][4], 1, 1) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) diff --git a/scripts/npc/bing00.py b/scripts/npc/bing00.py new file mode 100755 index 0000000..5bf1167 --- /dev/null +++ b/scripts/npc/bing00.py @@ -0,0 +1,50 @@ +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type + +destinations = [ + ["Normal", 235, 861000100, 5, EventType.AlienPQ], +] + +runsADay = 5 + +if sm.getFieldID() == 861000000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.sendAskYesNo + + dialog = "Do you want to participate in the Alien Party Quest?\r\n" + + for i in range(len(destinations)): + dialog += "#b#L0#Enter Alien Party Quest - " + str(sm.getEventAmountDone(EventType.getByVal(50))) + "/" + str(runsADay) + " Attempted today\r\n" + + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + if not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to participate in the Alien Party Quest.") + sm.dispose() + + if sm.partyHasCoolDown(destinations[response][4], runsADay): + sm.sendNext("You or one of your party member has already attempted the Alien Party Quest within the past 24 Hours.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True, -384, -41) + sm.setInstanceTime(5*60) + sm.addCoolDownInXDaysForParty(destinations[response][4], 1, 1) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.warpInstanceOut(861000000) \ No newline at end of file diff --git a/scripts/npc/black_bean_start.py b/scripts/npc/black_bean_start.py new file mode 100755 index 0000000..ab71f6d --- /dev/null +++ b/scripts/npc/black_bean_start.py @@ -0,0 +1,39 @@ +from time import sleep + +# Mode, Required Level, Map ID, Death Count + +destinations = [ + ["Easy", 10, 555001400, 5], +] + +if sm.getFieldID() == 120040000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.sendAskYesNo + + dialog = "Do you want to head to '#bShady Beach#k' to fight \r\n#bBlack Bean#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Shady Beach (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bBlack Bean#k.") + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True, -207, -169) + sm.setInstanceTime(20*60) + sleep(1) + sm.spawnMob(9420620, -500, 116, False, 200000000) \ No newline at end of file diff --git a/scripts/npc/blockbusterUiOpen.py b/scripts/npc/blockbusterUiOpen.py new file mode 100755 index 0000000..d1e8f8f --- /dev/null +++ b/scripts/npc/blockbusterUiOpen.py @@ -0,0 +1,4 @@ +# ESS (9075301) | Evo Lab initiator +from net.swordie.ms.enums import UIType + +sm.openUI(UIType.BLOCKBUSTER_SELECT_UI) \ No newline at end of file diff --git a/scripts/npc/bloodyqueenEnter.py b/scripts/npc/bloodyqueenEnter.py new file mode 100755 index 0000000..0dc9021 --- /dev/null +++ b/scripts/npc/bloodyqueenEnter.py @@ -0,0 +1,51 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Normal", 100, 105200300, 5, EventType.Queen, 64800000], + ["Chaos", 220, 105200700, 5, EventType.CQueen, 64800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 105200000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(1064002) + + dialog = "Do you want to head to the '#bSouth Garden#k' to fight the\r\n#bCrimson Queen#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the South Garden (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face the #bCrimson Queen#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing the #bCrimson Queen#k within the past 18 Hours.\r\n\r\nYou have #b" + timeUntilReset + "#k left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], 2, True) + sm.setInstanceTime(BossConstants.ROOTABYSS_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/boss_bellderos.py b/scripts/npc/boss_bellderos.py new file mode 100755 index 0000000..d54bf5a --- /dev/null +++ b/scripts/npc/boss_bellderos.py @@ -0,0 +1,32 @@ +answer = sm.sendSay("Where would you like to go to?#b \r\n#L0#Velderoth's Sitting Room#l\r\n#L1#Continue to Magnus#l\r\n#L2#Forge a Dragon King Relic\r\n#L3#Nevermind#l") + +# sm.chat("Response was " + str(response) + "\r\rAnswer was " + str(answer)) +if answer == 0: + if sm.getParty() is None: + sm.sendSay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSay("Please have your party leader enter if you wish to face Velderoth.") + elif sm.checkParty(): + sm.warpInstanceIn(401053100, True) +elif answer == 1: + sm.warp(401060000) +elif answer == 2: + if not sm.hasItem(4033403): + sm.sendSayOkay("You do not possess a #v4033403# #b#z4033403##k.") + sm.dispose() + elif not sm.hasItem(4033404): + sm.sendSayOkay("You do not possess a #v4033404# #b#z4033404##k.") + sm.dispose() + elif not sm.hasItem(4033405): + sm.sendSayOkay("You do not possess a #v4033405# #b#z4033405##k.") + sm.dispose() + elif not sm.canHold(4033406): + sm.sendSayOkay("Please make room in your inventory first.") + sm.dispose() + else: + sm.consumeItem(4033403) + sm.consumeItem(4033404) + sm.consumeItem(4033405) + sm.giveItem(4033406) + sm.chat("You have gained a Dragon King Relic") + sm.dispose() diff --git a/scripts/npc/boss_treglo.py b/scripts/npc/boss_treglo.py new file mode 100755 index 0000000..855c896 --- /dev/null +++ b/scripts/npc/boss_treglo.py @@ -0,0 +1,9 @@ +answer = sm.sendSay("Are you ready to face #bTreglow#k?#b\r\n#L0#Enter Treglow's Laboratory#l") + +if answer == 0: + if sm.getParty() is None: + sm.sendSay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSay("Please have your party leader enter if you wish to face Treglow.") + elif sm.checkParty(): + sm.warpInstanceIn(401052200, True) \ No newline at end of file diff --git a/scripts/npc/boss_victor.py b/scripts/npc/boss_victor.py new file mode 100755 index 0000000..7720c9d --- /dev/null +++ b/scripts/npc/boss_victor.py @@ -0,0 +1,9 @@ +answer = sm.sendSay("Are you ready to face #bVictor#k?#b\r\n#L0#Enter Victor's Workshop#l") + +if answer == 0: + if sm.getParty() is None: + sm.sendSay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSay("Please have your party leader enter if you wish to face Victor.") + elif sm.checkParty(): + sm.warpInstanceIn(401051200, True) \ No newline at end of file diff --git a/scripts/npc/bush1.py b/scripts/npc/bush1.py new file mode 100755 index 0000000..eff2de4 --- /dev/null +++ b/scripts/npc/bush1.py @@ -0,0 +1,25 @@ +# a pile of flowers (1043000) | Forest of Endurance : Stage 2 (910130001) +# Forest of Endurance (Quest 2050) +# Author: Tiger + +import random + +rewards = [ + 4020005, # Sapphire Ore + 4020006, # Topaz Ore + 4020004, # Opal ore + 4020001, # Amethyst Ore + 4020003, # Emerald Ore + 4020000, # Garnet Ore + 4020002 # AquaMarine Ore + ] + +if sm.hasQuest(2050): # Forest of Endurance - The Pink Anthurium Quest + response = sm.sendAskYesNo("Are you sure you want to take #bPink Anthurium#k with you?") + + if response: + sm.giveItem(4031020, 1) # Pink Anthurium + sm.warp(101000000) # Ellinia +else: + sm.giveItem(random.choice(rewards), 2) + sm.warp(101000000) # Ellinia diff --git a/scripts/npc/bush2.py b/scripts/npc/bush2.py new file mode 100755 index 0000000..be6a83b --- /dev/null +++ b/scripts/npc/bush2.py @@ -0,0 +1,23 @@ +# a pile of herbs (1043001) | Forest of Endurance : Stage 5 (910130102) +# Forest of Endurance - The Double-Rooted Reg Ginseng (Quest 2051) +# Author: Tiger + +import random + +rewards = [ + [4020007, 2], # Diamond Ore + [4020008, 2], # Black Crystal Ore + [4010006, 2], # Gold Ore + [1032013, 1] # Red Hearted Earrings + ] + +if sm.hasQuest(2051): + response = sm.sendAskYesNo("Are you sure you want to take #bDouble-Rooted Red Ginseng#k with you?") + + if response: + sm.giveItem(4031032, 1) # Double-Rooted Reg Ginseng + sm.warp(101000000) # Ellinia +else: + rand = random.choice(rewards) + sm.giveItem(rand[0], rand[1]) + sm.warp(101000000) # Ellinia diff --git a/scripts/npc/cannon_forewarning.py b/scripts/npc/cannon_forewarning.py new file mode 100755 index 0000000..a3eca8f --- /dev/null +++ b/scripts/npc/cannon_forewarning.py @@ -0,0 +1,2 @@ +# Valerie (1095003) | Nautilus Harbor +sm.sendSayOkay("If you want to be a Cannon Shooter, please talk to Kyrin.") diff --git a/scripts/npc/captinsg01.py b/scripts/npc/captinsg01.py new file mode 100755 index 0000000..92d506d --- /dev/null +++ b/scripts/npc/captinsg01.py @@ -0,0 +1,3 @@ +answer = sm.sendAskYesNo("Would you like to leave") +if answer: + sm.warpInstanceOut(541010060) \ No newline at end of file diff --git a/scripts/npc/characterNameChange.py b/scripts/npc/characterNameChange.py new file mode 100755 index 0000000..43af0ad --- /dev/null +++ b/scripts/npc/characterNameChange.py @@ -0,0 +1,8 @@ +# Mr.Newname (ID: 902016) + +if chr.getLevel() < 33: + sm.sendSayOkay("You may use #i4034803##b#t4034803##k from Lv. 33+. Please try again after reaching at least Lv. 33.") +elif sm.hasItem(4034803): + sm.openUI(1110) +else: + sm.sendSayOkay("You need a #i4034803##b#t4034803##k to change your name.") \ No newline at end of file diff --git a/scripts/npc/cheki.py b/scripts/npc/cheki.py new file mode 100755 index 0000000..6f2e121 --- /dev/null +++ b/scripts/npc/cheki.py @@ -0,0 +1,6 @@ +CHECKY = 2151004 + +sm.setSpeakerID(CHECKY) + +sm.sendNext("What is it?\r\n\r\n#L0##bI want to talk to you.") +sm.sendNext("Are you still wondering what kind of face is beneath this mask?") \ No newline at end of file diff --git a/scripts/npc/con1.py b/scripts/npc/con1.py new file mode 100755 index 0000000..f3283cc --- /dev/null +++ b/scripts/npc/con1.py @@ -0,0 +1,3 @@ +# Konpei | Near the Hideout +if sm.sendAskYesNo("Would you like to go to the Hideout?"): + sm.warp(801040000) diff --git a/scripts/npc/con2.py b/scripts/npc/con2.py new file mode 100755 index 0000000..9e8343b --- /dev/null +++ b/scripts/npc/con2.py @@ -0,0 +1,3 @@ +# Konpei | Near the Hideout +if sm.sendAskYesNo("Would you like to go back to Showa Town?"): + sm.warp(801000000, 11) diff --git a/scripts/npc/contimoveAnyway.py b/scripts/npc/contimoveAnyway.py new file mode 100755 index 0000000..ed7d24c --- /dev/null +++ b/scripts/npc/contimoveAnyway.py @@ -0,0 +1,25 @@ +MAPS = [ + ["Victoria Island Station", 104020100], + ["Ereve Sky Ferry", 130000210], + ["Orbis Station", 200000100], + ["Ludibrium Station", 220000100], + ["Ariant Station", 260000100], + ["Leafre Station", 240000100], + ["#rEdelstein#k", 310000010] +] + +text = "Welcome aboard. Please let me know where you would like to go. #b\r\n\r\n" +i = 0 +while i < len(MAPS): + text += "\r\n#L" + str(i) + "#" + str(MAPS[i][0]) + "#l" + i += 1 + +answer = sm.sendNext(text) + +if sm.sendAskYesNo("Would you like to go directly to " + str(MAPS[answer][0]) + "?"): + sm.createQuestWithQRValue(25010, str(MAPS[answer][1])) + sm.warp(150000001, 0) + sm.dispose() +else: + sm.sendNext("Ah, so you wish to go somewhere else. Please tell me your destination.") + sm.dispose() \ No newline at end of file diff --git a/scripts/npc/contimoveEdeGo.py b/scripts/npc/contimoveEdeGo.py new file mode 100755 index 0000000..da929e9 --- /dev/null +++ b/scripts/npc/contimoveEdeGo.py @@ -0,0 +1,6 @@ +map = [200090710, 200090610] + + +sm.sendSay("Where would you like to go? \r\n#L0#Victoria Island#l\r\n#L1#Orbis#l") + +sm.warp(map[answer], 0) \ No newline at end of file diff --git a/scripts/npc/contimoveEliEde.py b/scripts/npc/contimoveEliEde.py new file mode 100755 index 0000000..e5bea14 --- /dev/null +++ b/scripts/npc/contimoveEliEde.py @@ -0,0 +1,6 @@ +map = 200090701 + +response = sm.sendAskYesNo("Do you want to go to Edelstein?") + +if response: + sm.warp(map, 0) diff --git a/scripts/npc/contimoveOrbEde.py b/scripts/npc/contimoveOrbEde.py new file mode 100755 index 0000000..0ce2a3b --- /dev/null +++ b/scripts/npc/contimoveOrbEde.py @@ -0,0 +1,6 @@ +map = 200090600 + +response = sm.sendAskYesNo("Would you like to go to Edelstein?") + +if response: + sm.warp(map, 0) diff --git a/scripts/npc/contimoveOrbEre.py b/scripts/npc/contimoveOrbEre.py new file mode 100755 index 0000000..305bfe6 --- /dev/null +++ b/scripts/npc/contimoveOrbEre.py @@ -0,0 +1,6 @@ +map = 200090020 + +response = sm.sendAskYesNo("Would you like to go #m" + str (map) + "m#?") + +if response: + sm.warp(map, 0) diff --git a/scripts/npc/contimoveRieRit.py b/scripts/npc/contimoveRieRit.py new file mode 100755 index 0000000..e4fa89f --- /dev/null +++ b/scripts/npc/contimoveRieRit.py @@ -0,0 +1,16 @@ +# Puro (1200003) | Snow Island : Penguin Port + +victoriaIslandPrice = 800 + +answer = sm.sendNext("Heading Out? \r\n\r\n#b" + "#L0##eTheme Dungeon: Riena Strait#n (Price: 0 mesos)\r\n" + "#L1#Victoria Island (Price: "+ str(victoriaIslandPrice) +" mesos)#l") + +if answer == 0: + sm.warp(141000000, 0) +elif answer == 1: + if sm.getMesos() < victoriaIslandPrice: + sm.sendSayOkay("You will need more money for my services.") + else: + sm.deductMesos(800) + sm.warp(104000000, 0) diff --git a/scripts/npc/contimoveRitRie.py b/scripts/npc/contimoveRitRie.py new file mode 100755 index 0000000..eba4761 --- /dev/null +++ b/scripts/npc/contimoveRitRie.py @@ -0,0 +1,5 @@ +# Puro (1200004) | Lith Harbor +response = sm.sendAskYesNo("Would you like to go to #b#m"+ str(140000000) +"##k?") + +if response: + sm.warp(140000000, 0) diff --git a/scripts/npc/craft_nodestone.py b/scripts/npc/craft_nodestone.py new file mode 100755 index 0000000..5fae7ea --- /dev/null +++ b/scripts/npc/craft_nodestone.py @@ -0,0 +1,22 @@ +from net.swordie.ms.constants import GameConstants +from net.swordie.ms.constants import ItemConstants + +req_shards = GameConstants.NODE_STONE_CRAFT_REQ +current_shards = chr.getNodeShards() +ARCHELLE = 1540945 + +sm.setSpeakerID(ARCHELLE) + +quantity = sm.sendAskNumber("Do you want to create some Nodestones?#b\r\n\r\nNode shards required to craft a Nodestone: " + str(req_shards) + + "\r\nYour current node shards: " + str(current_shards) + "\r\n\r\n#kHow many would you like to craft?", 1, 0, current_shards // req_shards) +req_shards *= quantity +if quantity > 0: + if req_shards > current_shards: + sm.sendSayOkay("It seems you do not have enough node shards. I need #b" + str(req_shards) + "#k to craft " + "a Nodestone, but you only have #b" + str(current_shards) + "#k.") + elif not sm.canHold(ItemConstants.NODESTONE, quantity): + sm.sendSayOkay("Please make some more space in your USE inventory.") + else: + chr.addNodeShards(-req_shards) + sm.sendSayOkay("You used #b " + str(req_shards) + "#k to successfully craft #b" + str(quantity) + " #kNodestones.") + sm.giveItem(ItemConstants.NODESTONE, quantity) \ No newline at end of file diff --git a/scripts/npc/crane.py b/scripts/npc/crane.py new file mode 100755 index 0000000..54cfc53 --- /dev/null +++ b/scripts/npc/crane.py @@ -0,0 +1,9 @@ +map = 200090300 +string = "Mu Lung?" +if sm.getFieldID() == 250000100: + map = 200090310 + string = "Orbis?" +response = sm.sendAskYesNo("Would you like to go to " + (string)) + +if response: + sm.warp(map, 0) \ No newline at end of file diff --git a/scripts/npc/createCygnus.py b/scripts/npc/createCygnus.py new file mode 100755 index 0000000..5e5773a --- /dev/null +++ b/scripts/npc/createCygnus.py @@ -0,0 +1,3 @@ +# Shinsoo (1101001) | Ereve +sm.useItem(2022458) +sm.sendSayOkay("Don't stop training. Every ounce of your energy is required to protect the world of Maple...") diff --git a/scripts/npc/crimsonRidley.py b/scripts/npc/crimsonRidley.py new file mode 100755 index 0000000..a85c489 --- /dev/null +++ b/scripts/npc/crimsonRidley.py @@ -0,0 +1,4 @@ +# id 2134012 (Ridley), field 301000000 +sm.setSpeakerID(2134012) # Ridley +if sm.sendAskYesNo("Return to where you were?"): + sm.warp(100000000) diff --git a/scripts/npc/crossHunter_bomb.py b/scripts/npc/crossHunter_bomb.py new file mode 100755 index 0000000..f8868c6 --- /dev/null +++ b/scripts/npc/crossHunter_bomb.py @@ -0,0 +1,5 @@ +from net.swordie.ms.enums import WeatherEffNoticeType + +sm.createQuestWithQRValue(1641, "bomb") +sm.showWeatherNotice("Watch out!", WeatherEffNoticeType.SilentCrusade) +sm.showEffect("Map/Effect.img/crossHunter/bomb") \ No newline at end of file diff --git a/scripts/npc/cygnus_accept.py b/scripts/npc/cygnus_accept.py new file mode 100755 index 0000000..b242b47 --- /dev/null +++ b/scripts/npc/cygnus_accept.py @@ -0,0 +1,52 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown, Hour String + +destinations = [ + ["Normal", 120, 271041100, 20, EventType.Cygnus, 64800000, 18], + ["Chaos", 230, 271040100, 20, EventType.CCygnus, 129600000, 36], +] + +runsPerDay = 1 + +if sm.getFieldID() == 271040000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to '#bCygnus's Chamber#k' to fight \r\n#bCygnus#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Cygnus's Chamber (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bCygnus#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bCygnus#k within the past " + str(destinations[response][6]) + " Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.CYGNUS_TIME, 271040000) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(271040000) \ No newline at end of file diff --git a/scripts/npc/cygnus_lv120.py b/scripts/npc/cygnus_lv120.py new file mode 100755 index 0000000..115a9b2 --- /dev/null +++ b/scripts/npc/cygnus_lv120.py @@ -0,0 +1,2 @@ +# Kidan (1102003) | Ereve Knight's Chamber +sm.sendSayOkay("Welcome to the Hall of Knights.") diff --git a/scripts/npc/davyJohn_enter.py b/scripts/npc/davyJohn_enter.py new file mode 100755 index 0000000..7228be7 --- /dev/null +++ b/scripts/npc/davyJohn_enter.py @@ -0,0 +1,38 @@ +# Guon (2094000) | Spiegelmann's Guest House + +from net.swordie.ms.constants import CustomConstants +from net.swordie.ms.constants import GameConstants +from net.swordie.ms.enums import EventType + +pqItems = [ +4001117, # Old Metal Key +4001120, # Rookie Pirate Mark +4001121, # Rising Pirate Mark +4001122, # Veteran Pirate Mark +] +runsPerDay = 3 + +if sm.isPartyLeader(): + sm.sendNext("Are you willing to help me in the fight against Davy John?#b\r\n" + "\r\n" + "#L0#Enter the Lord Pirate Party Quest#l") + if sm.partyHasCoolDown(EventType.Pirate_PQ, runsPerDay): + sm.sendNext("One of your party member has a cooldown for this pq.") + sm.dispose() + if sm.checkParty() and sm.checkPartyLevelReq(CustomConstants.MIN_LEVEL_FOR_PQ): + + # check for items + for item in pqItems: + if sm.hasItem(item): + quantity = sm.getQuantityOfItem(item) + sm.consumeItem(item, quantity) + + # for each party member, create a LORD_PIRATE_QUEST with qrValue = "0" + for partyMember in sm.getParty().getMembers(): + sm.createQuestWithQRValue(partyMember.getChr(), GameConstants.LORD_PIRATE_QUEST, "0", False) + + sm.addCoolDownInXDaysForParty(EventType.Pirate_PQ, 1, 1) + sm.warpInstanceIn(925100000, 0, True) # Lord Pirate PQ First Map + +else: + sm.sendSayOkay("Please have your party leader talk to me.") diff --git a/scripts/npc/davyJohn_play.py b/scripts/npc/davyJohn_play.py new file mode 100755 index 0000000..5444774 --- /dev/null +++ b/scripts/npc/davyJohn_play.py @@ -0,0 +1,99 @@ +# Guon (2094002) | Inside the Lord Pirate Party Quest + +from net.swordie.ms.constants import GameConstants +from net.swordie.ms.constants import WzConstants + +pqItems = [ +4001117, # Old Metal Key +4001120, # Rookie Pirate Mark +4001121, # Rising Pirate Mark +4001122, # Veteran Pirate Mark +] + +ROOKIE_PIRATE_MARK = 4001120 # Stage 0 +RISING_PIRATE_MARK = 4001121 # Stage 1 +VETERAN_PIRATE_MARK = 4001122 # Stage 2 +count = 5 + +stage = int(sm.getQRValue(GameConstants.LORD_PIRATE_QUEST)) + + +if sm.getFieldID() == 925100100: # Hidden Street: Through the Head of the Ship! + item = 0 + if stage == 0: + item = ROOKIE_PIRATE_MARK + elif stage == 1: + item = RISING_PIRATE_MARK + elif stage == 2: + item = VETERAN_PIRATE_MARK + + nextItem = 0 + if stage == 0: + nextItem = RISING_PIRATE_MARK + elif stage == 1: + nextItem = VETERAN_PIRATE_MARK + + if sm.isPartyLeader(): + if stage == 3: + sm.sendNext("Make your way through the portal on the right") + + else: + if sm.hasItem(item, count): + if stage == 2: + sm.sendNext("Great you may now continue to the next stage!") + sm.invokeForParty("showEffectToField", WzConstants.EFFECT_CLEAR) + + else: + sm.sendNext("Alright, next up I need "+ str(count) +" #v"+ str(nextItem) +"##b#t"+ str(nextItem) +"##k.") + sm.consumeItem(item, count) + sm.invokeForParty("setQRValue", GameConstants.LORD_PIRATE_QUEST, str(int(sm.getQRValue(GameConstants.LORD_PIRATE_QUEST)) + 1)) + + else: + sm.sendNext("Please bring me "+ str(count) +" #v"+ str(item) +"##b#t"+ str(item) +"##k.") + else: + sm.sendSayOkay("Please, have your party leader speak to me.") + + +elif sm.getFieldID() == 925100500: # Hidden Street: The Captain's Dignity + if not sm.hasMobsInField(): + if not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader speak to me.") + else: + sm.sendNext("You have done us a great favour, what ever can we do to repay you?") + sm.warpInstanceIn(925100700, True) + # For all party members + for partyMembers in sm.getParty().getMembers(): + # Sets the Stage2 progress back to 0 + if partyMembers.getChr() is None: + continue + + sm.setQRValue(partyMembers.getChr(), GameConstants.LORD_PIRATE_QUEST, "0") + + # Gives all party members Exp + sm.giveExp(sm.getPQExp(partyMembers.getChr())) + + # Checks & deletes all items in the array: pqItems + for item in pqItems: + if sm.hasItem(item): + quantity = sm.getQuantityOfItem(item) + sm.consumeItem(item, quantity) + + else: + sm.sendSayOkay("Please get rid of the Captain!") + +elif sm.getFieldID() == 925100700: #pq exist of completion + sm.giveNX(200000) + sm.giveItem(4310212, 2) + sm.warpInstanceOut(910002000) + sm.setQRValue(GameConstants.LORD_PIRATE_QUEST, "0") + +else: + response = sm.sendAskYesNo("Are you sure you want to leave?") + if response: + if not sm.getParty() is None: + sm.warpInstanceOut(910002000) + for partyMembers in sm.getParty().getMembers(): + sm.setQRValue(partyMembers.getChr(), GameConstants.LORD_PIRATE_QUEST, "0", True) + else: + sm.warpInstanceOut(910002000, 0) + sm.setQRValue(GameConstants.LORD_PIRATE_QUEST, "0") diff --git a/scripts/npc/desc_tree.py b/scripts/npc/desc_tree.py new file mode 100755 index 0000000..5bf588c --- /dev/null +++ b/scripts/npc/desc_tree.py @@ -0,0 +1,12 @@ +import random + +# Cliff +# Happyville + +rand = [ +"It's pretty far to the ground from up here...", +"Should I jump?", +"No one would miss me if I was gone..", +"Santa never pays attention to me anymore."] + +sm.sendSayOkay(random.choice(rand)) \ No newline at end of file diff --git a/scripts/npc/dimensionGate.py b/scripts/npc/dimensionGate.py new file mode 100755 index 0000000..82e6927 --- /dev/null +++ b/scripts/npc/dimensionGate.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("Would you like to go to Pantheon?") + +if response: + sm.warp(400000001, 1) \ No newline at end of file diff --git a/scripts/npc/dojang_enter.py b/scripts/npc/dojang_enter.py new file mode 100755 index 0000000..c68c5ff --- /dev/null +++ b/scripts/npc/dojang_enter.py @@ -0,0 +1,34 @@ +# So Gong (2091011) | Mu Lung Dojo Hall + +dojoHall = 925020001 + +if sm.getFieldID() == dojoHall: + selection = sm.sendNext("My master is the strongest person in Mu Lung, and YOU wish to challenge HIM? I have a feeling you'll regret this.\r\n#b" + "#L0#I want to challenge Mu Lung Dojo.#l\r\n" + "#L1#What is Mu Lung Dojo?#l\r\n" + "#L2#What rewards can I get from Mu Lung Dojo?#l\r\n" + "#L3#How many attempts do I have left today?#l\r\n" + "#L4#I'd like to enter the Unity Training Center.#l\r\n") + + if selection == 0: # I want to challenge Mu Lung Dojo + if not sm.getParty() is None: + sm.sendSayOkay("Please leave your party before attempting the Mu Lung Dojo") + else: + sm.warpInstanceIn(925070100) # Dojo Floor 1 + sm.setInstanceTime(900, 925020002) + + elif selection == 1: # What is Mu Lung Dojo? + sm.sendSayOkay("#r//TODO") + elif selection == 2: # What rewards can I get from Mu Lung Dojo? + sm.sendSayOkay("#r//TODO") + elif selection == 3: # How many attempts do I have left today? + sm.sendSayOkay("#r//TODO") + elif selection == 4: # I'd like to enter the Unity Training Center. + sm.sendSayOkay("#r//TODO") + + +else: + response = sm.sendAskYesNo("Are you giving up already?") + + if response: + sm.warpInstanceOut(dojoHall) \ No newline at end of file diff --git a/scripts/npc/dooat.py b/scripts/npc/dooat.py new file mode 100755 index 0000000..ab99843 --- /dev/null +++ b/scripts/npc/dooat.py @@ -0,0 +1,22 @@ +# Guon (2094000) | Spiegelmann's Guest House + +from net.swordie.ms.constants import CustomConstants +from net.swordie.ms.enums import EventType + +runsPerDay = 3 + +if sm.isPartyLeader(): + if sm.partyHasCoolDown(EventType.Pyramid_PQ, runsPerDay): + sm.sendNext("One of your party member has a cooldown for this pq.") + sm.dispose() + + sm.sendNext("Will you help me defend nett's pyramid?#b\r\n" + "\r\n" + "#L0#Enter Nett's Pyramid Party Quest.#l") + if sm.checkParty() and sm.checkPartyLevelReq(CustomConstants.MIN_LEVEL_FOR_PQ): + + sm.warpInstanceIn(926010100, 0, True) # Pyramid PQ First Map + sm.addCoolDownInXDaysForParty(EventType.Pyramid_PQ, 1, 1) + +else: + sm.sendSayOkay("Please have your party leader talk to me.") diff --git a/scripts/npc/dragonEgg.py b/scripts/npc/dragonEgg.py new file mode 100755 index 0000000..93265fe --- /dev/null +++ b/scripts/npc/dragonEgg.py @@ -0,0 +1,4 @@ +# dragon Egg (1013002) | +#todo effects +sm.warp(900020110, 0) +sm.dispose() diff --git a/scripts/npc/dragon_dream.py b/scripts/npc/dragon_dream.py new file mode 100755 index 0000000..f91e144 --- /dev/null +++ b/scripts/npc/dragon_dream.py @@ -0,0 +1,7 @@ +# Dragon +sm.setSpeakerID(1013001) +sm.sendNext("You, who is destined to be a Dragon Master... You have finally arrived.") +sm.sendNext("Go and fulfill your duties as the Dragon Master...") +#todo effects +sm.warp(100030100, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/dreamBreaker_NPC.py b/scripts/npc/dreamBreaker_NPC.py new file mode 100755 index 0000000..4058ce5 --- /dev/null +++ b/scripts/npc/dreamBreaker_NPC.py @@ -0,0 +1,10 @@ +sel = sm.sendSayOkay("Hello friendo, what can I do for you today?\r\n\r\n#L0#Defend dreams#l\r\n#L1#Fight lucid#l") +if sel == 0: + sm.sendSayOkay("Alan please add Dream Defender") +else: + if sm.getParty() is None: + sm.sendSay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSay("Please have your party leader enter if you wish to face Lucid.") + elif sm.checkParty(): + sm.warpInstanceIn(450004150, True) \ No newline at end of file diff --git a/scripts/npc/dressing_room.py b/scripts/npc/dressing_room.py new file mode 100755 index 0000000..7926197 --- /dev/null +++ b/scripts/npc/dressing_room.py @@ -0,0 +1,179 @@ +# Dressing Room NPC + +equip_type = 0 +equip_page = 0 +page_limit = 100 +expire_time = 5 + +# flags +flag_main = 1 +flag_browse = 1 +flag_search = 0 +# select category +# select specific page +# go back to categories + +# name, buy_cost, rent_cost +categories = [ + ["Hats", 2, 0], + ["Tops", 2, 0], + ["Bottoms", 2, 0], + ["Overalls", 2, 0], + ["Shoes", 2, 0], + ["Gloves", 2, 0], + ["Capes", 2, 0], + ["Weapons", 2, 0], + ["Face Accessories", 2, 0], + ["Eye Accessories", 2, 0], + ["Rings", 2, 0] +] + +selected_item = 0 + +def prompt_main(): + text = "#eYou currently have #b" + str(sm.getVotePoints()) +" Vote Points#n\r\nPlease select a category\r\n" + count = 0 + for category in categories: + if count == 4: + text += "\n#b#L" + repr(count) + "#" + str(category[0]) + "#l" + text += "\t\t\t\t\t\t\t#e#r#L999#Search for an item#l#n\r\n" + else: + text += "\n#b#L" + repr(count) + "#" + str(category[0]) + "#l\r\n" + count += 1 + return text + +def prompt_equips(type, page, limit): + equip_tuple = sm.getDressingRoomEquips(type, page, limit) + + size = equip_tuple.getLeft() + equips = equip_tuple.getRight() + + fromIndex = page + toIndex = page + limit + + if (toIndex > size): + toIndex = size + + text = "Displaying " + repr(fromIndex) + " - " + repr(toIndex) + " of " + repr(size) + " " + categories[type][0] + " \r\n" + for equip in equips: + item_id = equip.getItemId() + text += "#b#L" + repr(item_id) + "##v" + repr(item_id) + "# #z" + repr(item_id) + "##l#k\r\n" + text += "\r\n" + + if page != 0: + text += "#b#L9998#Previous Page\r\n" + + if (toIndex) < size: + text += "#b#L9999#Next Page#l\r\n" + + text += "#b#L10000#Back to Categories#l" + + return text + +def prompt_options(item_id): + selected_item = item_id + text = ( + "You've selected #v{0}# #b#z{0}##k.\r\n\r\n" + "Please select what you would like to do:\r\n" + "#L1#Buy for #b{1}#k VP#l\r\n" + "#L2#Rent for #b{2}#k VP#l\r\n\r\n" + "#L0#Go back to the list#l" + ).format( + item_id, + categories[sm.getDressingRoomEquipType(item_id)][1], + categories[sm.getDressingRoomEquipType(item_id)][2] + ) + + return text + +def prompt_search(): + text = ( + "Please enter the name of the item you want to search for:" + ) + + return text + +def message_done(item_id, cost, rent): + buy_text = "bought" if not rent else "rented" + text = ( + "You've {0} #v{1}# #b#z{1}##k.\r\n\r\n" + "#b{2}#k Vote Points will be deducted from your account.\r\n\r\n" + ).format(buy_text, item_id, cost) + + if rent: + text += "The item will expire in #b{0} minutes#k.".format(expire_time) + + return text + + +while flag_main == 1: + selection_main = sm.sendNext(prompt_main()) + + if selection_main != 999: + flag_browse = 1 + while flag_browse == 1: + selection_equips = sm.sendNext(prompt_equips(selection_main, equip_page, page_limit)) + if selection_equips == 9998: # previous + equip_page -= page_limit + elif selection_equips == 9999: # next + equip_page += page_limit + elif selection_equips == 10000: # exit + flag_browse = 0 + else: + flag_browse = 0 + selection_options = sm.sendNext(prompt_options(selection_equips)) + item = selection_equips + if selection_options == 0: # exit - return to list + flag_browse = 1 + elif selection_options != 0: + cost = categories[selection_main][selection_options] + if sm.getVotePoints() < cost: + sm.sendNext("You do not have enough vote points!") + else: + if selection_options == 1: # buy + sm.giveItem(item) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, False)) + flag_main = 0 # exit npc + elif selection_options == 2: # rent + sm.giveItemWithExpireDate(item, 1, False, 5) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, True)) + flag_main = 0 # exit npc + elif selection_main == 999: + flag_search = 1 + search_result = sm.sendAskText(prompt_search(), "", 0, 12) + search_tuple = sm.getDressingRoomEquipsSearch(search_result) + + size = search_tuple.getLeft() + equips = search_tuple.getRight() + + text_list = "Displaying {0} results for query '{1}'.\r\n".format(size, search_result) + for id, string in equips.items(): + text_list += "#b#L" + repr(id) + "##v" + repr(id) + "# #z" + repr(id) + "##l#k\r\n" + + if (size == 0): + sm.sendNext("There were no results for '{0}'.".format(search_result)) + else: + selection_equips = sm.sendNext(text_list) + + selection_options = sm.sendNext(prompt_options(selection_equips)) + item = selection_equips + cost = categories[sm.getDressingRoomEquipType(selection_equips)][1] + if selection_options == 0: # exit - return to list + flag_browse = 1 + elif selection_options != 0: + cost = categories[sm.getDressingRoomEquipType(selection_equips)][selection_options] + if sm.getVotePoints() < cost: + sm.sendNext("You do not have enough vote points!") + else: + if selection_options == 1: # buy + sm.giveItem(item) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, False)) + flag_main = 0 # exit npc + elif selection_options == 2: # rent + sm.giveItemWithExpireDate(item, 1, False, 5) + sm.deductVotePoints(cost) + sm.sendNext(message_done(item, cost, True)) + flag_main = 0 # exit npc diff --git a/scripts/npc/ds_tuto_ClickObj.py b/scripts/npc/ds_tuto_ClickObj.py new file mode 100755 index 0000000..9b43d2e --- /dev/null +++ b/scripts/npc/ds_tuto_ClickObj.py @@ -0,0 +1,42 @@ +MASTEMA = 2159307 +sm.removeEscapeButton() +if sm.hasQuest(23200): + sm.setSpeakerID(2159328) + sm.setPlayerAsSpeaker() + sm.sendNext("#bMother! Where are you?!#k") + sm.completeQuestNoRewards(23200) + sm.startQuestNoCheck(23201) +elif sm.hasQuest(23201): + sm.setSpeakerID(2159329) + sm.setPlayerAsSpeaker() + sm.sendNext("Damien! Answer me!") + sm.completeQuestNoRewards(23201) + sm.startQuestNoCheck(23202) +elif sm.hasQuest(23202): + sm.completeQuestNoRewards(23202) + sm.deleteQuest(23202) + + sm.lockInGameUI(True) + sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/4", 1000) + sm.sendDelay(1000) + + sm.setSpeakerID(MASTEMA) + sm.setPlayerAsSpeaker() + sm.sendNext("#bThis is...#k") + + sm.showFieldEffect("demonSlayer/pendant", 0) + sm.sendDelay(4200) + + sm.sendNext("#bMother... Damien...#k") + sm.sendSay("#b...#k") + + sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/5", 2000) + sm.sendDelay(2000) + + sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/6", 2000) + sm.sendDelay(2000) + + sm.lockInGameUI(False) + sm.warpInstanceIn(927000081, 0) +else: + sm.systemMessage("It's too far away to see clearly. I must get closer.") diff --git a/scripts/npc/dualBladeJob.py b/scripts/npc/dualBladeJob.py new file mode 100755 index 0000000..4ea94b9 --- /dev/null +++ b/scripts/npc/dualBladeJob.py @@ -0,0 +1,11 @@ +# Dark Lord | Kerning City Hideout +if sm.getChr().getLevel() >= 10 and sm.getChr().getJob() == 0: + if sm.sendAskYesNo("Would you like to become a Thief?"): + sm.giveItem(1472000) + sm.giveItem(1332007) + sm.giveItem(2070000, 3000) + sm.setJob(400) + sm.addSP(3) + sm.completeQuest(1400) + + diff --git a/scripts/npc/elizaHarp1.py b/scripts/npc/elizaHarp1.py new file mode 100755 index 0000000..af06ece --- /dev/null +++ b/scripts/npc/elizaHarp1.py @@ -0,0 +1,4 @@ +# Harp String (2012027) | Eliza's Garden (920020000) +# Author: Tiger + +sm.playSound("orbis/do", 100) diff --git a/scripts/npc/elizaHarp2.py b/scripts/npc/elizaHarp2.py new file mode 100755 index 0000000..ec87e2f --- /dev/null +++ b/scripts/npc/elizaHarp2.py @@ -0,0 +1,4 @@ +# Harp String (2012028) | Eliza's Garden (920020000) +# Author: Tiger + +sm.playSound("orbis/re", 100) diff --git a/scripts/npc/elizaHarp3.py b/scripts/npc/elizaHarp3.py new file mode 100755 index 0000000..f918591 --- /dev/null +++ b/scripts/npc/elizaHarp3.py @@ -0,0 +1,4 @@ +# Harp String (2012029) | Eliza's Garden (920020000) +# Author: Tiger + +sm.playSound("orbis/mi", 100) diff --git a/scripts/npc/elizaHarp4.py b/scripts/npc/elizaHarp4.py new file mode 100755 index 0000000..0fcb486 --- /dev/null +++ b/scripts/npc/elizaHarp4.py @@ -0,0 +1,4 @@ +# Harp String (2012030) | Eliza's Garden (920020000) +# Author: Tiger + +sm.playSound("orbis/pa", 100) diff --git a/scripts/npc/elizaHarp5.py b/scripts/npc/elizaHarp5.py new file mode 100755 index 0000000..896662c --- /dev/null +++ b/scripts/npc/elizaHarp5.py @@ -0,0 +1,4 @@ +# Harp String (2012031) | Eliza's Garden (920020000) +# Author: Tiger + +sm.playSound("orbis/sol", 100) diff --git a/scripts/npc/elizaHarp6.py b/scripts/npc/elizaHarp6.py new file mode 100755 index 0000000..2cf7152 --- /dev/null +++ b/scripts/npc/elizaHarp6.py @@ -0,0 +1,4 @@ +# Harp String (2012032) | Eliza's Garden (920020000) +# Author: Tiger + +sm.playSound("orbis/la", 100) diff --git a/scripts/npc/elizaHarp7.py b/scripts/npc/elizaHarp7.py new file mode 100755 index 0000000..3619234 --- /dev/null +++ b/scripts/npc/elizaHarp7.py @@ -0,0 +1,4 @@ +# Harp String (2012033) | Eliza's Garden (920020000) +# Author: Tiger + +sm.playSound("orbis/si", 100) diff --git a/scripts/npc/enterEvolvingSystem.py b/scripts/npc/enterEvolvingSystem.py new file mode 100755 index 0000000..88b9d2b --- /dev/null +++ b/scripts/npc/enterEvolvingSystem.py @@ -0,0 +1,5 @@ +# ESS (9075301) | Evo Lab initiator +from net.swordie.ms.enums import UIType + +sm.openUI(UIType.UI_EVOLVING_SYSTEM) +sm.updateCores() \ No newline at end of file diff --git a/scripts/npc/enterGreatElf.py b/scripts/npc/enterGreatElf.py new file mode 100755 index 0000000..6db2fb4 --- /dev/null +++ b/scripts/npc/enterGreatElf.py @@ -0,0 +1,3 @@ +if sm.getChr().getJob() >= 2300: + sm.warp(910150100) +# else: diff --git a/scripts/npc/enterTraining.py b/scripts/npc/enterTraining.py new file mode 100755 index 0000000..e345dd3 --- /dev/null +++ b/scripts/npc/enterTraining.py @@ -0,0 +1,14 @@ +# Created by MechAviv +# ID :: [4000021] +# Maple Road : Entrance to Adventurer Training Center + +sm.setSpeakerID(12100) +selection = sm.sendNext("This is the perfect place to train your basic skills. Where do you want to train?\r\n#b#L0#Adventurer Training Center 1#l\r\n#b#L1#Adventurer Training Center 2#l\r\n#b#L2#Adventurer Training Center 3#l\r\n#b#L3#Adventurer Training Center 4#l") +if selection == 0: + sm.warp(4000022, 4) +elif selection == 1: + sm.warp(4000023, 4) +elif selection == 2: + sm.warp(4000024, 4) +elif selection == 3: + sm.warp(4000025, 4) \ No newline at end of file diff --git a/scripts/npc/enter_TimeGap.py b/scripts/npc/enter_TimeGap.py new file mode 100755 index 0000000..3858ac2 --- /dev/null +++ b/scripts/npc/enter_TimeGap.py @@ -0,0 +1,9 @@ +# Mastema (2450017) | Demon 4th job advancement +sm.setSpeakerID(parentID) +if sm.getChr().getLevel() >= 100 \ + and sm.getChr().getJob() == 3111 \ + and sm.sendAskYesNo("Are you ready, #h #? If you are, I'll send you to the past through the Crack in Time. " + "You were powerful in the past, #h #, so be careful."): + + sm.sendNext("Good luck, #h #") + sm.warpInstanceIn(927000100, False) \ No newline at end of file diff --git a/scripts/npc/equip_product.py b/scripts/npc/equip_product.py new file mode 100755 index 0000000..9771ffa --- /dev/null +++ b/scripts/npc/equip_product.py @@ -0,0 +1,63 @@ +# Hidden Street - Ardentmill :: 910001000 +# Gere :: Master of Smithing :: 9031003 + +MINING_SKILL = 92010000 +SMITHING_CRAFT_SKILL = 92020000 +ACCESSORY_CRAFT_SKILL = 92030000 +ALCHEMY_CRAFT_SKILL = 92040000 +FEE = [5000, 15000, 25000, 40000, 60000, 85000, 115000, 150000, 190000, 235000] + +if not sm.hasSkill(SMITHING_CRAFT_SKILL): + selection = sm.sendSay("I am #bGere#k, master Blacksmith. What do you want?\r\n#L0#Hear an explanation about #b#eSmithing#n.#l\r\n#L1#Learn #eSmithing#n.#k#l") + if selection == 0: + sm.sendNext("Smithing is the art of forging the minerals and gems you get from Mining into durable armor and punishing weapons. I'll show you how to shape these raw materials into equipment you've never seen before.") + elif selection == 1: + if not sm.hasSkill(MINING_SKILL): + sm.sendSayOkay("How do you plan to learn Smithing if you don't even know the Mining Profession? Seek out #bCole#k, learn what he has to teach. Then maybe you will be ready.") + sm.dispose() + + if sm.hasSkill(ACCESSORY_CRAFT_SKILL) or sm.hasSkill(ALCHEMY_CRAFT_SKILL): + sm.sendNext("Well now, it seems you've already learned Accessory Crafting or Alchemy. Your reach is exceeding your grasp, isn't it? If you really want to learn it, forget one of the other Professions.") + sm.dispose() + + learn = sm.sendAskYesNo("You want to learn #bSmithing#k? Show me how earnest you are by coughing up some dough!\r\nIt's #b 5,000 Mesos#k... Are you really ready to do this?\r\n") + if learn: + if sm.getMesos() < 5000: + sm.sendNext("If you can't even gather #b5000 Mesos#k, how can you hope to become a Blacksmith?") + sm.dispose() + + sm.giveMesos(-5000) + sm.giveSkill(SMITHING_CRAFT_SKILL, 0x1000000, 13) + sm.playSound("profession/levelup") + sm.sendNext("To be honest, I didn't think you could learn Smithing. Well, you've only learned the most basic skill level. If you can manage to increase your Mastery, I can teach you more.") + else: + sm.sendNext("It's good to be cautious. Come back after you've thought it through.") +else: + selection = sm.sendSay("I am #bGere#k, master Blacksmith. What do you want?\r\n#L2##bRaise #eSmithing#n level.#l\r\n#L3#Unlearn Smithing.#k#l") + if selection == 2: + if sm.isAbleToLevelUpMakingSkill(SMITHING_CRAFT_SKILL): + levelup = sm.sendAskYesNo("Looks like you're ready to level up your Smithing. I'll take #b" + str(FEE[sm.getMakingSkillLevel(SMITHING_CRAFT_SKILL)]) + " Mesos#k as tuition. Ready to learn?") + if levelup: + if sm.getMesos() < FEE[sm.getMakingSkillLevel(SMITHING_CRAFT_SKILL)]: + sm.sendNext("You don't have enough mesos.") + sm.dispose() + + sm.giveMesos(-FEE[sm.getMakingSkillLevel(SMITHING_CRAFT_SKILL)]) + sm.makingSkillLevelUp(SMITHING_CRAFT_SKILL) + sm.sendNext("Your Smithing skill is now Lv. " + str(sm.getMakingSkillLevel(SMITHING_CRAFT_SKILL)) +".") + else: + sm.sendNext("Sure, take some time to think it over. I'll be here.") + sm.dispose() + else: + sm.sendNext("You're not ready to level up your Profession. Come back when you've increased your Mastery.") + elif selection == 3: + unlearn = sm.sendAskYesNo("You will forget everything I've taught you about Smithing. Everything you've worked towards, gone. Do you really want to do this?") + if unlearn: + sm.removeSkill(SMITHING_CRAFT_SKILL) + # set quest value 11495, "0" + # start quest 3263 + # complete quest 3263 + # remove quest 3263 + sm.sendNext("Very well. You are no longer a Blacksmith.") + else: + sm.sendSayOkay("For once, you say something sensible.") \ No newline at end of file diff --git a/scripts/npc/eunwolhouse_item.py b/scripts/npc/eunwolhouse_item.py new file mode 100755 index 0000000..d353596 --- /dev/null +++ b/scripts/npc/eunwolhouse_item.py @@ -0,0 +1,40 @@ +items = [1004039, 1102650] +removeitems = [0] + +if sm.hasQuest(38023): + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("Wow, this is... really nice. This medal means they've accepted me. No more tests, no more suspicion. Is this... what having a family is like?") + sm.sendSay("It's been so long. The Black Mage, the seal, Maple World. Everything feels like a dream. I've gotten used to things around here. Maybe someday I can go back to Maple World... but do I even want to?") + sm.giveItem(1142671) + sm.completeQuestNoRewards(32024) + sm.completeQuest(38023) + sm.giveExp(4000) +elif sm.hasQuest(38018): + sm.lockInGameUI(True, False) + sm.forcedInput(0) + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("Their special gift is... #rfox ears and a tail#k? Huh. Well, um... could be worse, I guess.") + sm.sendSay("I really, really don't like this, but not accepting it would be out of line. And I might as well give it a try...") + + sm.avatarLookSet(items) + sm.sendDelay(1000) + + sm.sendNext("......!") + + sm.avatarLookSet(removeitems) + sm.sendSay("...No, I can't do this! Not after what I've been through. I... I like it here, but I don't want to lose who I am. I don't like this. I... I should hide this before I do anything else.") + + sm.completeQuest(38018) + sm.giveExp(3000) + sm.lockInGameUI(False) + + sm.warp(940200030, 0) +elif sm.hasQuest(38008): + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("What...is this? They wrapped something in this leaf. It's quite heavy and warm. Maybe a little wet, too. Something's dripping from it. Wait, this mushy texture... Is this...?") + sm.sendSay("Did they seriously give me #rraw liver#k? This is my special gift? Right, something about #rbeast livers#k being the best...") + sm.sendSay("Well... People eat raw fish, so maybe this isn't all that bad. I can eat this... I can... Ugh, why do my tastebuds have to put up with this?") + sm.giveExp(1200) + sm.completeQuest(38008) + sm.startQuest(38009) diff --git a/scripts/npc/euwol_Phantom.py b/scripts/npc/euwol_Phantom.py new file mode 100755 index 0000000..e6464ad --- /dev/null +++ b/scripts/npc/euwol_Phantom.py @@ -0,0 +1,3 @@ +if sm.hasQuest(25110): + sm.jobAdvance(2411) + sm.completeQuest(25110) \ No newline at end of file diff --git a/scripts/npc/everything00.py b/scripts/npc/everything00.py new file mode 100755 index 0000000..cae888e --- /dev/null +++ b/scripts/npc/everything00.py @@ -0,0 +1,24 @@ +sm.setSpeakerID(2143000) + +answer = sm.sendNext("So you want to go to the Hallowed Ground? Oh yeah, we discovered a new Hallowed Ground. I hear the" + "key to the Cygnus Garden can be found there. Please continue doing your best to bring peace to our world.\r\n#b" + "#L0#Hallowed Ground of Dawn#l\r\n" + "#L1#Hallowed Ground of Blaze#l\r\n" + "#L2#Hallowed Ground of Wind#l\r\n" + "#L3#Hallowed Ground of Night#l\r\n" + "#L4#Hallowed Ground of Thunder#l\r\n") + +if answer == 0: + sm.warpInstanceIn(271030201) + +elif answer == 1: + sm.warpInstanceIn(271030202) + +elif answer == 2: + sm.warpInstanceIn(271030203) + +elif answer == 3: + sm.warpInstanceIn(271030204) + +elif answer == 4: + sm.warpInstanceIn(271030205) diff --git a/scripts/npc/extreme_welcome.py b/scripts/npc/extreme_welcome.py new file mode 100755 index 0000000..6ce30f3 --- /dev/null +++ b/scripts/npc/extreme_welcome.py @@ -0,0 +1,2 @@ +# Spiegelette (9071006) | Monster Park +sm.sendSayOkay("Hey! welcome to #rMonster Park#k\r\nAn amazing way to get nice goodies and a lot of exp!") diff --git a/scripts/npc/face_henesys1.py b/scripts/npc/face_henesys1.py new file mode 100755 index 0000000..92de97b --- /dev/null +++ b/scripts/npc/face_henesys1.py @@ -0,0 +1,20 @@ +import os.path +path = "C:/Users/Downloads/v207-master/v207-master/wz/Character.wz/Face" +files = os.listdir(path) +face = [] +for x in files: + face.append(int(x[3:8])) + + + +text = "I'll change your face\r\n#b" +for i in range(60): + text += "#L" + str(i+1) + "#Selection " + str(i) + "#l\r\n" +selection = sm.sendSayOkay(text) - 1 + +if selection <= 60: + min = 100*selection + max = min + 100 + a = face[min:max] + choice = sm.sendAskAvatar("Choose your face!", False, False, a) + sm.changeCharacterLook(a[choice]) \ No newline at end of file diff --git a/scripts/npc/fairy_dosy.py b/scripts/npc/fairy_dosy.py new file mode 100755 index 0000000..8a18f36 --- /dev/null +++ b/scripts/npc/fairy_dosy.py @@ -0,0 +1,13 @@ +# id 1500017 (Tosh the Fairy), field 101073010 +sm.setSpeakerType(3) +if not sm.hasMobsInField(): + sm.setParam(5) + sm.setInnerOverrideSpeakerTemplateID(1500017) # Tosh the Fairy + sm.sendNext("I-I was so scared...") + sm.sendSay("Me and the others were rehearsing a play when the Mandrakies went all crazy on us. I closed my eyes when one of them chomped on my leg and then I woke up here!") + sm.setParam(17) + sm.sendSay("#b(One student's better than nothing. I'd better get this kid back to Ellinel.)#k") + sm.warp(101073000) + sm.completeQuest(32123) +else: + sm.sendNext("Please kill all the mobs, I can't get out like this!") diff --git a/scripts/npc/fairy_epony.py b/scripts/npc/fairy_epony.py new file mode 100755 index 0000000..03fbbd0 --- /dev/null +++ b/scripts/npc/fairy_epony.py @@ -0,0 +1,19 @@ +# id 1500019 (Ephony the Fairy), field 101073110 +sm.setSpeakerType(3) + +if not sm.hasMobsInField(): + sm.setParam(5) + sm.setInnerOverrideSpeakerTemplateID(1500019) # Ephony the Fairy + sm.sendNext("Whew! You saved me! I thought those monsters were gonna eat me up.") + sm.setInnerOverrideSpeakerTemplateID(1500020) # Phiny the Fairy + sm.sendSay("A-are you a h-hero?") + sm.setParam(17) + sm.sendSay("#b(There were five missing in total... Where are the other kids?)#k") + sm.setParam(5) + sm.sendSay("Ya gotta get Woonie and Tracy! I saw a shadow monster that was gonna eat them!") + sm.setParam(17) + sm.sendSay("#bA shadow monster?#k") + sm.warp(101073201) + sm.completeQuest(32126) +else: + sm.sendNext("Please kill all the mobs, we can't get out like this!") diff --git a/scripts/npc/fairy_uny.py b/scripts/npc/fairy_uny.py new file mode 100755 index 0000000..d5488f8 --- /dev/null +++ b/scripts/npc/fairy_uny.py @@ -0,0 +1,14 @@ +# id 1500016 (Woonie the Fairy), field 101073300 +sm.setSpeakerType(3) + +if not sm.hasMobsInField(): + sm.setParam(5) + sm.setInnerOverrideSpeakerTemplateID(1500016) # Woonie the Fairy + sm.sendNext("You saved our lives... And our dignity. Thank you so much.") + sm.setInnerOverrideSpeakerTemplateID(1500018) # Tracy the Fairy + sm.sendSay("I shall never forget your kindness!") + sm.warp(101073200) + sm.completeQuest(32128) +else: + sm.setInnerOverrideSpeakerTemplateID(1500016) # Woonie the Fairy + sm.sendNext("Please defeat the mole king!") diff --git a/scripts/npc/farm_coin.py b/scripts/npc/farm_coin.py new file mode 100755 index 0000000..9340ae2 --- /dev/null +++ b/scripts/npc/farm_coin.py @@ -0,0 +1,26 @@ +# Clara +from net.swordie.ms.loaders import ItemData + +sendStr = "Your equips:\r\n" +for equip in chr.getEquippedInventory().getItems(): + itemId = str(equip.getItemId()) + sendStr += "#i " + itemId + "##z" + itemId + "#\r\n" + for i in range(6): + opt = equip.getOptions().get(i) + if opt == 0: + sendStr += "" + else: + tier = opt // 10000 + sendStr += "(" + str(opt) + ") - " + if tier <= 1: + sendStr += "#b(Rare) #k" + elif tier == 2: + sendStr += "#d(Epic) #k" + elif tier == 3: + sendStr += "#r(Unique) #k" + else: + sendStr += "#g(Legendary) #k" + pOpt = ItemData.getItemOptionById(opt) + sendStr += pOpt.getString(equip.getrLevel()) + sendStr += "\r\n" +sm.sendSayOkay(sendStr) diff --git a/scripts/npc/fire_kit.py b/scripts/npc/fire_kit.py new file mode 100755 index 0000000..bdde6fd --- /dev/null +++ b/scripts/npc/fire_kit.py @@ -0,0 +1,6 @@ +if sm.hasQuest(2566): + if sm.hasItem(4032985): + sm.chatScript("You already have the Ignition Device.") + else: + sm.giveItem(4032985) + sm.chatScript("Ignition Device. Bring ") \ No newline at end of file diff --git a/scripts/npc/flower_in.py b/scripts/npc/flower_in.py new file mode 100755 index 0000000..8d9cab2 --- /dev/null +++ b/scripts/npc/flower_in.py @@ -0,0 +1,6 @@ +# Mysterious Statue, Sleepywood (105000000) +response = sm.sendAskYesNo("Once I lay my hand on the statue, a strange light covers me and it feels like I'm being sucked " + + "into somewhere else. Is it okay to be moved to somewhere else randomly just like that?") + +if response: + sm.warp(910530000) diff --git a/scripts/npc/flower_out.py b/scripts/npc/flower_out.py new file mode 100755 index 0000000..f5e6e8a --- /dev/null +++ b/scripts/npc/flower_out.py @@ -0,0 +1,6 @@ +# Mysterious Statue, Forest of Tenacity 1 (910530000) +response = sm.sendAskYesNo("Once I lay my hand on the statue, a strange light covers me and it feels like I'm being sucked " + + "into where I originally came from. Am I done here? Is it okay to go back to where I came from?") + +if response: + sm.warp(105000000) diff --git a/scripts/npc/flyminidraco.py b/scripts/npc/flyminidraco.py new file mode 100755 index 0000000..17e81be --- /dev/null +++ b/scripts/npc/flyminidraco.py @@ -0,0 +1,12 @@ +# Corba (2082003) | Leafre Station +answer = sm.sendNext("If you had wings, I'm sure you could go there. " + "But, that alone won't be enough. " + "If you want to fly though the wind that's sharper than a blade, you'll need tough scales as well. " + "I'm the only Halfling left that knows the way back... " + "If you want to go there, I can transform you. " + "No matter what you are, for this moment, you will become a #bDragon#k...\r\n" + "#L0##bI want to become a dragon.#k#l") + +if answer == 0: + sm.warp(200090500) + sm.useItem(2210016) # Become Red Flying Draco diff --git a/scripts/npc/friend00.py b/scripts/npc/friend00.py new file mode 100755 index 0000000..87d9fef --- /dev/null +++ b/scripts/npc/friend00.py @@ -0,0 +1,17 @@ +# Mr. Goldstein | Buddy List Admin + +sm.sendNext("I see... you don't have as many friends as I thought you would. Hahaha, just kidding! Anyway if you feel like changing your mind, please feel free to come back and we'll talk business. If you make a lot of friends, then you know ... hehe ...") +response = sm.sendAskYesNo("I hope I can make as much as yesterday... well, hello! Don't you want to extend your buddy list? You look like someone who'd have a whole lot of friends... well, what do you think? With some money I can make it happen for you. Remember, though, it only applies to one character at a time, so it won't affect any of your other characters on your account. Do you want to extend your buddy list?") +if response: + response = sm.sendAskYesNo("Alright, good call! It's not that expensive actually. #b250,000 mesos and I'll add 5 more slots to your buddy list#k. And no, I won't be selling them individually. Once you buy it, it's going to be permanently on your buddy list. So if you're one of those that needs more space there, then you might as well do it. What do you think? Will you spend 250,000 mesos for it?") + if response: + # Check Buddy Capacity //TODO + if sm.getMesos() < 250000: + sm.sendSayOkay("Hey... are you sure you have #b250,000 mesos#k? If so, then check and see if you have extended your buddy list to the max. Even if you pay up, the most you can have on your buddy list is #b100#k.") + else: + sm.giveMesos(-250000) + sm.sendSay("Alright! Your buddy list will have 5 extra slots by now. Check and see for it yourself. And if you still need more room on your buddy list, you know who to find. Of course, it isn't going to be for free ... well, so long ...") + else: + sm.sendSayOkay("Let me know when you want to increase your buddy list.") +else: + sm.sendSayOkay("Let me know when you want to increase your buddy list.") diff --git a/scripts/npc/gachaponbox1.py b/scripts/npc/gachaponbox1.py new file mode 100755 index 0000000..fd8b031 --- /dev/null +++ b/scripts/npc/gachaponbox1.py @@ -0,0 +1,68 @@ +# Toh Relicseeker - FM Beauty NPC + +from net.swordie.ms.loaders import StringData + +FreeMarket = 910000000 + +if sm.getFieldID() == FreeMarket: + al = chr.getAvatarData().getAvatarLook() + selection = sm.sendNext("Hi my name is Toh I really love to make people look their best. Maybe I could help you look good too.\r\n#b" + "#L0#Change my Hairstyle.\r\n#b" + "#L1#Change my Face.\r\n#b" + "#L2#Change my Eye Color.\r\n#b" + "#L3#Change my Skin Color.\r\n#b" + "#L4#Change my Hair Color.\r\n#b" + "#L5#Change my Gender.\r\n#b") + if selection == 0: # Hairstyle + options = [] + hairColor = al.getHair() % 10 + if al.getGender() == 0: # Male + for x in range(100): + options.append(30000 + 10 * x) + else: # Female + for x in range(100): + options.append(31000 + 10 * x) + options = list(map(lambda x: x + hairColor, options)) + + elif selection == 1: #face + options = [] + eyeColor = al.getFace() % 10 + if al.getGender() == 0: # Male + for x in range(60): + options.append(20000 + x) + else: # Female + for x in range(37): + options.append(21000 + x) + options = list(map(lambda x: x + eyeColor, options)) + + + elif selection == 2: # eye color + face = al.getFace() - ((al.getFace() % 1000 / 100) * 100) #it rounds the number + options = [] + for x in range (9): + options.append(face + x * 100) + + elif selection == 3: # skin + options = [] + for x in range (5): + options.append(x) + + elif selection == 4: #Hair color + hair = al.getHair() - (al.getHair() % 10) + options = [] + for x in range (9): + options.append(hair + x) + + +if selection == 5: + answer = sm.sendAskYesNo("Are you sure you want to change your gender?") + if answer: + chr.changeGender() + sm.sendNext("Please change channel in order for the gender change to take in effect.") +else: + for id in options: + if StringData.getItemStringById(id) is None: + options.remove(id) + answer = sm.sendAskAvatar("Choose your new look!", False, False, options) + if answer < len(options): + sm.changeCharacterLook(options[answer]) \ No newline at end of file diff --git a/scripts/npc/getAboard.py b/scripts/npc/getAboard.py new file mode 100755 index 0000000..6893d17 --- /dev/null +++ b/scripts/npc/getAboard.py @@ -0,0 +1,9 @@ +maps = [200000120, 200000130, 200000141, 200000110, 200000150, 200000161, 200000170] + +list = "Hey, where would you like to go? #b" +i = 0 +while i < len(maps): + list += "\r\n#L" + str(i) + "##m" + str(maps[i]) + "#" + i += 1 +answer = sm.sendNext(list) +sm.warp(maps[answer], 0) diff --git a/scripts/npc/get_ticket.py b/scripts/npc/get_ticket.py new file mode 100755 index 0000000..c4da3ec --- /dev/null +++ b/scripts/npc/get_ticket.py @@ -0,0 +1,18 @@ +maps = { + 2012013 : [220000100, "Ludibrium"], + 1032008 : [200000100, "Orbis"], + 2012021 : [240000100, "Leafre"], + 2012001 : [104020110, "Victoria Island"], + 2041000 : [220000100, "Orbis"], + 2012025 : [260000100, "Ariant"], + 2102000 : [200000100, "Orbis"], +} + +if parentID in maps: + vals = maps[parentID] + if sm.sendAskYesNo("Would you like to go to " + vals[1] + "?"): + sm.warp(vals[0], 0) +else: + sm.sendSayOkay("Not coded :(") + + diff --git a/scripts/npc/giveEggEvan.py b/scripts/npc/giveEggEvan.py new file mode 100755 index 0000000..05c53b9 --- /dev/null +++ b/scripts/npc/giveEggEvan.py @@ -0,0 +1,9 @@ +if sm.hasQuest(22007): + if not sm.hasItem(4032451): + if sm.canHold(4032451): + sm.giveItem(4032451) + sm.dispose() + else: + sm.sendSay("Please make room in your Etc Inventory.") + sm.dispose() +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/giveKineWeapon.py b/scripts/npc/giveKineWeapon.py new file mode 100755 index 0000000..dae4afe --- /dev/null +++ b/scripts/npc/giveKineWeapon.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001000 +# Hideout :: HQ +JAY = 1531001 + +sm.setNpcOverrideBoxChat(JAY) +if sm.sendAskYesNo("You lost your gear? Ugh, dude! Don't trash my stuff! It takes time to hack those things together. Here, I have backups of your primary and secondary, but only the basic models. TRY to respect these, hmm?"): + sm.giveItem(1353200) + sm.giveItem(1262000) \ No newline at end of file diff --git a/scripts/npc/give_4034141.py b/scripts/npc/give_4034141.py new file mode 100755 index 0000000..1f4e91a --- /dev/null +++ b/scripts/npc/give_4034141.py @@ -0,0 +1,6 @@ +# id 9201268 (Hayato), field 811000030 +sm.setSpeakerID(9201268) # Hayato +sm.setParam(2) +sm.sendNext("Oh, great swordsman Hayato... could you get me the #i4034141# #t4034141#?") +sm.setParam(1) +sm.sendPrev("Hm, that was too easy! Ah, well, here's the #i4034141# #t4034141#.") diff --git a/scripts/npc/giveupRiding.py b/scripts/npc/giveupRiding.py new file mode 100755 index 0000000..25d624b --- /dev/null +++ b/scripts/npc/giveupRiding.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# [Kiridu] | [1102002] +# Empress' Road : Ereve + +sm.setSpeakerID(1102002) +sm.sendSayOkay("I have no idea what you're saying.") \ No newline at end of file diff --git a/scripts/npc/glpqEnter.py b/scripts/npc/glpqEnter.py new file mode 100755 index 0000000..02a22ad --- /dev/null +++ b/scripts/npc/glpqEnter.py @@ -0,0 +1,5 @@ +# Gate (9201114) | Gate (CWKPQ 'portal') + +HALL_TO_INNER_SANCTUM = 610030020 + +sm.warp(HALL_TO_INNER_SANCTUM) diff --git a/scripts/npc/glpqStart.py b/scripts/npc/glpqStart.py new file mode 100755 index 0000000..185c003 --- /dev/null +++ b/scripts/npc/glpqStart.py @@ -0,0 +1,48 @@ +from net.swordie.ms.enums import EventType +from net.swordie.ms.constants import BossConstants + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + [250, 610030200, 25, EventType.CWKPQ, 604800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 610030020: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want participate in the '#bCrimson Wood Keep Party Quest#k'?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Crimson Wood Keep #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to participate in the #bCrimson Wood Keep Party Quest#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][3], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][3]) + sm.sendNext("You or one of your party member has already attempted the \r\n#bCrimson Wood Keep Party Quest#k within the past 7 Days.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][0], sm.getParty()): + sm.setPartyDeathCount(destinations[response][2]) + sm.warpInstanceIn(destinations[response][1], True) + sm.setInstanceTime(BossConstants.CWKPQ_TIME_ROOM_1) + sm.addCooldownTimeForParty(destinations[response][3], destinations[response][4]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/glpqStory.py b/scripts/npc/glpqStory.py new file mode 100755 index 0000000..93980da --- /dev/null +++ b/scripts/npc/glpqStory.py @@ -0,0 +1,19 @@ + +FieldProperties = ["WarriorSigil","ArcherSigil","MageSigil","ThiefSigil","PirateSigil"] +if sm.getFieldID() == 610030100: + sm.sendNext("Agh, you have made it in. Let me tell you real quick: they've caught us already. Master Guardians are about to come here in about a minute. We'd better hurry.") + sm.sendNext("The portal to the Twisted Masters is busted. We have to find an alternate way, one that will take us through many death traps.") + sm.sendNext("You can find the portal somewhere around here... you'd better find it, quick. I'll catch up.") +if sm.getFieldID() == 610030200: + + if sm.fieldHasProperty("Stage1Cleared"): + sm.sendSayOkay("Proceed to the next stage.") + + for x in range(len(FieldProperties)): + if not sm.fieldHasProperty(str(FieldProperties[x])): + sm.chatRed("Some of the Sigils have not been activated yet") + + else: + sm.setFieldProperty("Stage1Cleared",True) + sm.chatBlue("The Antellion grants you access to the next portal! Proceed!") + sm.spawnNpc() \ No newline at end of file diff --git a/scripts/npc/goKinoc.py b/scripts/npc/goKinoc.py new file mode 100755 index 0000000..7b8bb03 --- /dev/null +++ b/scripts/npc/goKinoc.py @@ -0,0 +1,17 @@ +# Created by MechAviv +# Map ID :: 100000000 +# NPC ID :: 9110000 +# Perry +maps = [["Showa Town", 100000000], ["Ninja Castle", 100000000], ["Six Path Crossway", 100000000]]# TODO +sm.setSpeakerID(9110000) +selection = sm.sendNext("Welcome! Where to?\r\n#L0# To Showa Town#l\r\n#L1# To Ninja Castle#l\r\n#L2# To Six Path Crossway#l") + + +sm.setSpeakerID(9110000) +if sm.sendAskYesNo(maps[selection][0] + "? Drive safely!"): + sm.warp(maps[selection][1]) +else: + sm.setSpeakerID(9110000) + sm.sendNext("I hope the ride wasn't too uncomfortable. I can't upgrade the seating without charging fares.") + + diff --git a/scripts/npc/goToLehel.py b/scripts/npc/goToLehel.py new file mode 100755 index 0000000..0769fa0 --- /dev/null +++ b/scripts/npc/goToLehel.py @@ -0,0 +1,6 @@ +# id 3003165 (Muto), field 993017200 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003165) # Muto +res = sm.sendAskYesNo("#bMuto#k... Full now... #bMove#k?\r\n\r\n(You can follow the Arcane River to its next stop when Muto moves.)") +sm.warp(450003700) diff --git a/scripts/npc/goVeritas.py b/scripts/npc/goVeritas.py new file mode 100755 index 0000000..379cd69 --- /dev/null +++ b/scripts/npc/goVeritas.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("Would you like to go Veritas?") + +if response: + sm.warp(230050000,1) diff --git a/scripts/npc/go_tree1.py b/scripts/npc/go_tree1.py new file mode 100755 index 0000000..6f2e7eb --- /dev/null +++ b/scripts/npc/go_tree1.py @@ -0,0 +1,12 @@ +# Branch Snowman +# Happyville + +import random + +rand = [ +"How are those snowmen over by the fire not melting?", +"I think I want to be a vegan..", +"How am I supposed to fullfill my rock-climbing dream with these twigs for arms??" +] + +sm.sendSayOkay(random.choice(rand)) \ No newline at end of file diff --git a/scripts/npc/go_tree2.py b/scripts/npc/go_tree2.py new file mode 100755 index 0000000..88c105c --- /dev/null +++ b/scripts/npc/go_tree2.py @@ -0,0 +1,13 @@ +# Metal Bucket Snowman +# Happyville + +import random + +rand = [ +"Where is my other arm..?", +"Can no one find my other arm?", +"Some poor chap put a bucket on my head..", +"That idiot really thinks he's a reindeer.. HAH" +] + +sm.sendSayOkay(random.choice(rand)) \ No newline at end of file diff --git a/scripts/npc/go_tree3.py b/scripts/npc/go_tree3.py new file mode 100755 index 0000000..abde35c --- /dev/null +++ b/scripts/npc/go_tree3.py @@ -0,0 +1,13 @@ +# Straw Hat Snowman +# Happyville + +import random + +rand = [ +"No arms never stopped anyone from shoveling snow!", +"Is it just me or does Cliff look distraught?", +"Humans are so silly", +"I used to be only white snow.." +] + +sm.sendSayOkay(random.choice(rand)) \ No newline at end of file diff --git a/scripts/npc/go_victoria.py b/scripts/npc/go_victoria.py new file mode 100755 index 0000000..690b1c4 --- /dev/null +++ b/scripts/npc/go_victoria.py @@ -0,0 +1,8 @@ +# I think this is called by many different NPCs + +say = "I haven't received any instructions yet! Tell staff that I'm not working and maybe they'll thank you with a reward!" + +if parentID == 2002000: # Rupi + say = "Isn't it cold? I love it! Snow is my favorite form of water!" + +sm.sendSayOkay(say) \ No newline at end of file diff --git a/scripts/npc/go_xmas.py b/scripts/npc/go_xmas.py new file mode 100755 index 0000000..9af03be --- /dev/null +++ b/scripts/npc/go_xmas.py @@ -0,0 +1,2 @@ +# Rooney (1022101) | +sm.sendSayOkay("Happy Holidays!") diff --git a/scripts/npc/go_xmas06.py b/scripts/npc/go_xmas06.py new file mode 100755 index 0000000..dd25e8b --- /dev/null +++ b/scripts/npc/go_xmas06.py @@ -0,0 +1,4 @@ +# Simon | Temple Guide - Hanukkah +# Happyville + +sm.sendSayOkay("Shalom!") \ No newline at end of file diff --git a/scripts/npc/gold_chan.py b/scripts/npc/gold_chan.py new file mode 100755 index 0000000..65b7296 --- /dev/null +++ b/scripts/npc/gold_chan.py @@ -0,0 +1,7 @@ +# Chan : Golden Temple Guard +# Golden Temple +# Forest of Training 4 +# Stands outside the portal to the SnowFro boss +# ID 9000075 + +sm.sendSayOkay("These monkey's are butt-ugly.") \ No newline at end of file diff --git a/scripts/npc/gold_dao.py b/scripts/npc/gold_dao.py new file mode 100755 index 0000000..38250ba --- /dev/null +++ b/scripts/npc/gold_dao.py @@ -0,0 +1,7 @@ +# Dao (9000080) | Ravana's Golden Altar + +if sm.getFieldID() == 252030100: + if sm.sendAskYesNo("Would you like to leave?"): + sm.warpInstanceOut(252030000) +else: + sm.sendSayOkay("Enter if you wish.") \ No newline at end of file diff --git a/scripts/npc/goldrich.py b/scripts/npc/goldrich.py new file mode 100755 index 0000000..aa40ef6 --- /dev/null +++ b/scripts/npc/goldrich.py @@ -0,0 +1,2 @@ +# Gold Richie (2084001) | Lith Harbor +sm.sendSayOkay("Heya! It's me! Gold Richie, I'm one of the richest person alive!") diff --git a/scripts/npc/goto_141060000.py b/scripts/npc/goto_141060000.py new file mode 100755 index 0000000..7c3ea3a --- /dev/null +++ b/scripts/npc/goto_141060000.py @@ -0,0 +1,14 @@ +# Helmsman Tanya (1510006) | All over Riena Strait + +portal = { +141000000 : 1, # Glacial Observatory +141010000 : 2, # Ice Station 1 +141010400 : 7, # Nora's Cove +141020000 : 3, # Ice Station 2 +141040000 : 5, # Barbara's House +141030000 : 4, # Ice Station 3 +141050000 : 6, # Glacier Cutter Base +} + +if sm.sendAskYesNo("Navigator, would you like to set sail?"): + sm.warp(141060000, portal[sm.getFieldID()]) diff --git a/scripts/npc/guild_move.py b/scripts/npc/guild_move.py new file mode 100755 index 0000000..94b7c52 --- /dev/null +++ b/scripts/npc/guild_move.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("Would you like to go to the guild headquarters?") + +if response: + sm.warp(200000301, 0) diff --git a/scripts/npc/guild_proc.py b/scripts/npc/guild_proc.py new file mode 100755 index 0000000..f80b81c --- /dev/null +++ b/scripts/npc/guild_proc.py @@ -0,0 +1,25 @@ +from net.swordie.ms.constants import GameConstants + +guild = chr.getGuild() + +if chr.isGuildMaster(): + if guild.getMaxMembers() < GameConstants.MAX_GUILD_MEMBERS: + if sm.sendAskYesNo("Would you like to increase your guild's max capacity? You currently have " + + str(guild.getMaxMembers()) + " members, but I can increase it by 10 for 500,000 mesos."): + if sm.getMesos() < 500000: + sm.sendSayOkay("You do not have enough mesos.") + else: + sm.incrementMaxGuildMembers(10) + sm.deductMesos(500000) + else: + sm.sendSayOkay("Be sure to come back if you change your mind!") + +elif guild is None: + if sm.sendAskYesNo("Would you like to create a guild? This will cost 5 million mesos."): + if sm.getMesos() < 5000000: + sm.sendSayOkay("You do not have enough mesos.") + else: + sm.showGuildCreateWindow() +else: + sm.sendSayOkay("Hey there, I'm in charge of everything guild related. If you want anything done to your guild, " + "you can ask your guild master to come to me.") diff --git a/scripts/npc/guild_union.py b/scripts/npc/guild_union.py new file mode 100755 index 0000000..f1cd099 --- /dev/null +++ b/scripts/npc/guild_union.py @@ -0,0 +1,30 @@ +# Lenario - Manager of Guild Union + +GUILD_ALLIANCE_COST = 5000000 +otherMember = None + +if chr.getParty() is not None: + for pm in chr.getParty().getOnlineMembers(): + other = pm.getChr() + if other is not None and other is not chr and other.getGuild() is not None \ + and other.getGuild().getAlliance() is None and other.getGuild().isGuildMaster(other): + otherMember = other +if chr.getGuild() is None or chr.getGuild().getAlliance() is not None or not chr.getGuild().isGuildMaster(chr) \ + or chr.getParty() is None or otherMember is None: + sm.sendSayOkay("I'm in charge of guild alliances. If you wish to create an alliance, make a party with another " + "guild leader and talk to me again. It will cost you 5 million mesos.") +else: + # for chr + other: guild exists, has no alliance, and have the party members as masters + if sm.sendAskYesNo("I see that you have another guild master in your party. Would you like to create an alliance " + "with them?"): + if sm.getMesos() < GUILD_ALLIANCE_COST: + sm.sendSayOkay("It seems that you're missing some mesos. Make sure you have at least 5 million mesos before " + "trying to create a guild alliance.") + else: + text = sm.sendAskText("Please input your desired alliance name.", "", 4, 20) + while not sm.checkAllianceName(text): + sm.sendAskText("That alliance name is already in use.", "", 4, 20) + else: + sm.createAlliance(text, otherMember) + sm.sendSayOkay("Your alliance has successfully been created!") + diff --git a/scripts/npc/hair_ariant1.py b/scripts/npc/hair_ariant1.py new file mode 100755 index 0000000..959d194 --- /dev/null +++ b/scripts/npc/hair_ariant1.py @@ -0,0 +1,17 @@ +# Ariant VIP Hair +# Male: Afro, Cabana, Dreadlocks, Kravitz Locks, Line Scratch, Mane, Matinee, Natural, Tornade +# Female: Bridget, Celeb, Edgy, Lana, Penelope, Rae, Boyish, Desert Flower, Tighty Bun + +options = [] + +al = chr.getAvatarData().getAvatarLook() +hairColour = al.getHair() % 10 +if al.getGender() == 0: # Male + options = [30320, 30330, 30150, 30900, 30170, 30180, 30820, 30410, 30460] +else: # Female + options = [31090, 31190, 31040, 31420, 31330, 31340, 31620, 31660] +options = list(map(lambda x: x + hairColour, options)) +answer = sm.sendAskAvatar("Choose your new hairstyle!", False, False, options) + +if answer < len(options): + sm.changeCharacterLook(options[answer]) \ No newline at end of file diff --git a/scripts/npc/hair_edel1.py b/scripts/npc/hair_edel1.py new file mode 100755 index 0000000..101a5ea --- /dev/null +++ b/scripts/npc/hair_edel1.py @@ -0,0 +1,16 @@ +# Amoria Hair Salon +# Male: Astro, //Babby, //Battle Mage, Bowling, Cabana, Grand Lionman, Rockstar, Roving Rockstar, //SHaggy Dragon, Slick Dean, Tornade +# Female: Carla, Cecelia Twist, Daisy Do, Jolie, Lori, Minnie, Rose, Roxy, Sunflower Power, Wild Hunter, Zessica +options = [] + +al = chr.getAvatarData().getAvatarLook() +hairColour = al.getHair() % 10 +if al.getGender() == 0: # Male + options = [30350, 30760, 30330, 30560, 30040, 30730, 30470, 30460] +else: # Female + options = [31310, 31490, 37810, 31130, 31160, 31500, 31230, 31320, 31560, 34190, 31530] +options = list(map(lambda x: x + hairColour, options)) +answer = sm.sendAskAvatar("Choose your new hairstyle!", False, False, options) + +if answer < len(options): + sm.changeCharacterLook(options[answer]) diff --git a/scripts/npc/hair_henesys1.py b/scripts/npc/hair_henesys1.py new file mode 100755 index 0000000..78ee2fa --- /dev/null +++ b/scripts/npc/hair_henesys1.py @@ -0,0 +1,17 @@ +# Natalie - Henesys Hair Salon +# Male: Aran cut, Catalyst, Evan hair (m), gaga hair, shaggy wax, the coco, the mo rawk +# Female: Dual blade, front braid, grace, hime, laguna beach, lively wave, long with bangs, wavy bob, wavy ponytail + +options = [] + +al = chr.getAvatarData().getAvatarLook() +hairColour = al.getHair() % 10 +if al.getGender() == 0: # Male + options = [43140, 40250, 33040, 30060, 32350, 33170, 30210, 33100, 30610] +else: # Female + options = [32360, 34400, 31820, 34270, 31860, 34210, 34250, 34490, 31360] +options = list(map(lambda x: x + hairColour, options)) +answer = sm.sendAskAvatar("Choose your new hairstyle!", False, False, options) + +if answer < len(options): + sm.changeCharacterLook(options[answer]) diff --git a/scripts/npc/hair_henesys2.py b/scripts/npc/hair_henesys2.py new file mode 100755 index 0000000..1e7a4a9 --- /dev/null +++ b/scripts/npc/hair_henesys2.py @@ -0,0 +1,9 @@ +option = list(range(8)) +al = chr.getAvatarData().getAvatarLook() +hairNoColour = (al.getHair() / 10) * 10 + +option = list(map(lambda x: (x + hairNoColour), option)) +answer = sm.sendAskAvatar("I can change your hair colour to anything you'd like!", False, False, option) + +if (answer < len(option)): + sm.changeCharacterLook(option[answer]) \ No newline at end of file diff --git a/scripts/npc/hair_kerning1.py b/scripts/npc/hair_kerning1.py new file mode 100755 index 0000000..cf46f38 --- /dev/null +++ b/scripts/npc/hair_kerning1.py @@ -0,0 +1,17 @@ +# Kerning VIP Hair +# Male: Antagonist, Aran Cut, Cornrow, Dragon Tail, Rockstar, Short Top Tail, Male Runway Hair +# Female: Annie, Aran Hair, Curly Stream, Gardener, Pei Pei, Penelope, Ravishing Ravon, Shaggy Dog, Super Diva + +options = [] + +al = chr.getAvatarData().getAvatarLook() +hairColour = al.getHair() % 10 +if al.getGender() == 0: # Male + options = [30130, 33040, 30850, 30780, 30040, 30920, 30860] +else: # Female + options = [31060, 34090, 31520, 31880, 31140, 31330, 31440, 31760, 31750] +options = list(map(lambda x: x + hairColour, options)) +answer = sm.sendAskAvatar("Choose your new hairstyle!", False, False, options) + +if answer < len(options): + sm.changeCharacterLook(options[answer]) \ No newline at end of file diff --git a/scripts/npc/hair_ludi1.py b/scripts/npc/hair_ludi1.py new file mode 100755 index 0000000..4b46dc2 --- /dev/null +++ b/scripts/npc/hair_ludi1.py @@ -0,0 +1,17 @@ +# Ludi VIP Hair +# Male: Afro, Bowl Cut, Fuzz, Hector, Julian, //Tentacle, Trip Scratch, URban +# Female: Apple Hair, Candy Heart, Eye-skimming Bang, Female Runway, Lovely Ladyhawk, Naomi, Pigtails, Ayu +options = [] + +al = chr.getAvatarData().getAvatarLook() +hairColour = al.getHair() % 10 +if al.getGender() == 0: # Male + options = [30250, 30190, 30660, 30870, 30840, 30160, 30640] +else: # Female + options = [31810, 31550, 31830, 31840, 31680, 31290, 31270, 31870] +options = list(map(lambda x: x + hairColour, options)) +answer = sm.sendAskAvatar("Choose your new hairstyle!", False, False, options) + + +if answer < len(options): + sm.changeCharacterLook(options[answer]) \ No newline at end of file diff --git a/scripts/npc/hair_royal.py b/scripts/npc/hair_royal.py new file mode 100755 index 0000000..e2adf48 --- /dev/null +++ b/scripts/npc/hair_royal.py @@ -0,0 +1,2 @@ +# Big Headward | Henesys Hair Salon +sm.sendSayOkay("Hello!\r\nI'm Big Headward") \ No newline at end of file diff --git a/scripts/npc/henrite.py b/scripts/npc/henrite.py new file mode 100755 index 0000000..ff99f45 --- /dev/null +++ b/scripts/npc/henrite.py @@ -0,0 +1,6 @@ +BRIGHTON = 2151001 + +sm.setSpeakerID(2151001) + +sm.sendNext("What is it?\r\n\r\n#L0##bI want to talk to you.") +sm.sendNext("Well... I'm not really that good with words, you see... I'm not the best person to hang around with.") \ No newline at end of file diff --git a/scripts/npc/herb_in.py b/scripts/npc/herb_in.py new file mode 100755 index 0000000..b6dad3c --- /dev/null +++ b/scripts/npc/herb_in.py @@ -0,0 +1,46 @@ +# Shane (1032003) | Ellinia (101000000) +# The Pink Anthurium (Quest 2050) | The Double-Rooted Reg Ginseng (Quest 2051) +# Author: Tiger + +mesos = chr.getLevel() * 200 + +if sm.hasQuest(2050): # Forest of Endurance - The Pink Anthurium + response = sm.sendAskYesNo("You want my herbs, do you? What kind of farmer would just let people trample over his family land? But... I could use the money. I need at least #r" + str(mesos) + "#k mesos to feel good about this.") + if response: + if sm.getMesos() > mesos: + sm.deductMesos(mesos) + sm.warp(910130000) # The Forest of Endurance Stage 1 + else: + sm.sendSayOkay("Sorry but it doesn't look like you have enough mesos!") + else: + sm.sendSayOkay("Alright, see you next time.") + +elif sm.hasQuestCompleted(2050) and not sm.hasQuest(2051): # free of charge if completed quest already + response = sm.sendAskYesNo("Would you like to enter The Forest of Endurance?") + if response: + sm.warp(910130000) # The Forest of Endurance Stage 1 + else: + sm.sendSayOkay("Alright, see you next time.") + +elif sm.hasQuest(2051): # Forest of Endurance - The Double-Rooted Reg Ginseng + response = sm.sendAskYesNo("Back again?! Well, I'm going to need at least #r" + str(mesos) + "#k mesos if you want me to turn a blind eye. I don't care if you ARE working for #b#p" + str(1103003) + "##k. What do you say?") + if response: + if sm.getMesos() > mesos: + sm.deductMesos(mesos) + sm.warp(910130100) # The Forest of Endurance Stage 3 + else: + sm.sendSayOkay("Sorry but it doesn't look like you have enough mesos!") + +else: # If has never started quest 2050 + response = sm.sendAskYesNo("Hi, i'm Shane. I can let you into the Forest of Patience for a small fee. Would you like to enter for #b" + str(mesos) + "#k mesos?") + if response: + if chr.getLevel() > 25: + if sm.getMesos() > mesos: + sm.deductMesos(mesos) + sm.warp(910130000) # The Forest of Endurance Stage 1 + else: + sm.sendSayOkay("Sorry but it doesn't look like you have enough mesos!") + else: + sm.sendSayOkay("You must be a higher level to enter the Forest of Endurance.") + else: + sm.sendSayOkay("Alright, see you next time.") diff --git a/scripts/npc/herb_out.py b/scripts/npc/herb_out.py new file mode 100755 index 0000000..7512fe4 --- /dev/null +++ b/scripts/npc/herb_out.py @@ -0,0 +1,5 @@ +# Louis (1032004) | Forest of Endurance : Stage 1 - 5 (910130000 - 910130102) +# Author: Tiger + +if sm.sendAskYesNo("Would you like to return to Ellinia?"): + sm.warp(101000000); diff --git a/scripts/npc/herbalism.py b/scripts/npc/herbalism.py new file mode 100755 index 0000000..0f5a882 --- /dev/null +++ b/scripts/npc/herbalism.py @@ -0,0 +1,40 @@ +# Hidden Street - Ardentmill :: 910001000 +# Saffron :: Master of Herbalism :: 9031001 + +HERBALISM_SKILL = 92000000 +FEE = [5000, 15000, 25000, 40000, 60000, 85000, 115000, 150000, 190000, 235000] + +if not sm.hasSkill(HERBALISM_SKILL): + selection = sm.sendSay("Hello. What can I help you with?\r\n#L0#Hear an explanation about #b#eHerbalism#n.#l\r\n#L1#Learn #eHerbalism#n.#k#l") + if selection == 0: + sm.sendNext("Herbalism lets you gather herbs. You can buy Oil Bottles from #p9031007# to refine the herbs and use them as materials to craft equipment, accessories, alchemy tools, and the like.") + if selection == 1: + learn = sm.sendAskYesNo("To learn #bHerbalism#k, you must pay #b5,000 Mesos#k. You sure you want to learn it?\r\n") + if learn: + if sm.getMesos() < FEE[0]: + sm.sendNext("Umm... I don't think you have enough money... I'm sorry, but please bring #b5000 Mesos#k.") + sm.dispose() + + sm.giveMesos(-FEE[0]) + sm.giveSkill(HERBALISM_SKILL, 0x1000000, 10) + sm.playSound("profession/levelup") + sm.sendNext("Congratulations! You're an Herbalist. See me again when you've increased your Mastery and I'll level up your Herbalism skill.") + else: + sm.sendNext("Ah, it's smart not to rush into anything. Come back after you've pondered it some more.") +else: + selection = sm.sendSay("Hello. What can I help you with?\r\n#L2##bLevel up #eHerbalism#n.#l\r\n#L3##bTrade #t4022023#.#k#l") + if selection == 2: + if sm.isAbleToLevelUpMakingSkill(HERBALISM_SKILL): + levelup = sm.sendAskYesNo("Looks like you're ready to level up your Herbalism. I'll take #b" + str(FEE[sm.getMakingSkillLevel(HERBALISM_SKILL)]) + " Mesos#k as tuition. Ready to learn?") + if levelup: + if sm.getMesos() < FEE[sm.getMakingSkillLevel(HERBALISM_SKILL)]: + sm.sendNext("You don't have enough mesos.") + sm.dispose() + sm.giveMesos(-FEE[sm.getMakingSkillLevel(HERBALISM_SKILL)]) + sm.makingSkillLevelUp(HERBALISM_SKILL) + sm.sendNext("Your Herbalism skill is now Lv. " + str(sm.getMakingSkillLevel(HERBALISM_SKILL)) +".") + else: + sm.sendNext("Sure, take some time to think it over. I'll be here.") + sm.dispose() + else: + sm.sendNext("Have you been working on your Mastery? You can't level up this Profession yet.") \ No newline at end of file diff --git a/scripts/npc/hillah_accept.py b/scripts/npc/hillah_accept.py new file mode 100755 index 0000000..5db8e0e --- /dev/null +++ b/scripts/npc/hillah_accept.py @@ -0,0 +1,55 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown, Hour String + +destinations = [ + ["Normal", 120, 262030100, 5, EventType.Hilla, 43200000, 12], + ["Hard", 170, 262031100, 5, EventType.HHilla, 64800000, 18], +] + +runsPerDay = 1 + +if sm.getFieldID() == 262030000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.sendAskYesNo + + dialog = "Do you want to head to '#bHilla's Tower#k' to fight \r\n#bHilla#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Hilla's Tower (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bHilla#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bHilla#k within the past " + str(destinations[response][6]) + " Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.HILLA_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if 262030100 <= sm.getFieldID() <= 262031300: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(262000000) \ No newline at end of file diff --git a/scripts/npc/himmel.py b/scripts/npc/himmel.py new file mode 100755 index 0000000..2e912f3 --- /dev/null +++ b/scripts/npc/himmel.py @@ -0,0 +1,4 @@ +# Hidden Street - Ardentmill :: 910001000 +# Grant Elder :: 9031000 +sm.sendNext("Interested in Professions, eh? Let me give you a brief introduction.\nOur town is home to 5 master artisans who practice #bHerbalism, Mining, Smithing, Accessory Crafting, and Alchemy#k. The Master Artisan Association has a rule that limits each individual to 2 Professions, and each Profession you learn must complement each other. Accordingly, you can select and learn up to #r2 Professions#k.") +sm.sendPrev("#b - Herbalism + Alchemy\n- Mining + Smithing\n- Mining + Accessory Crafting#k\n\nYou can learn any of these 3 combinations of Professions. It is up to you to choose your own path from there.") \ No newline at end of file diff --git a/scripts/npc/holyStone.py b/scripts/npc/holyStone.py new file mode 100755 index 0000000..c52372b --- /dev/null +++ b/scripts/npc/holyStone.py @@ -0,0 +1,15 @@ +# Holy Stone - Holy Ground at the Snowfield (3rd job) + +questIDs = [1431, 1432, 1433, 1435, 1436, 1437, 1439, 1440, 1442, 1443, 1445, 1446, 1447, 1448] + +hasQuest = False +for qid in questIDs: + if sm.hasQuest(qid): + hasQuest = True + break +if hasQuest: + if sm.sendAskYesNo("#b(A mysterious energy surrounds this stone. Do you want to investigate?)"): + sm.warpInstanceIn(910540000, 0) +else: + sm.sendSayOkay("#b(A mysterious energy surrounds this stone)#k") + diff --git a/scripts/npc/hontale_Bdoor.py b/scripts/npc/hontale_Bdoor.py new file mode 100755 index 0000000..8293f5b --- /dev/null +++ b/scripts/npc/hontale_Bdoor.py @@ -0,0 +1,8 @@ +# Stump at the Room of Maze +# Cave of Life | Room of Maze +# Warps players into the Horntail jump quest + +if sm.isPartyLeader(): + sm.warpInstanceIn(240050101, 1) +else: + sm.systemMessage("Only your party leader may enter..") \ No newline at end of file diff --git a/scripts/npc/hontale_accept.py b/scripts/npc/hontale_accept.py new file mode 100755 index 0000000..fa56e3d --- /dev/null +++ b/scripts/npc/hontale_accept.py @@ -0,0 +1,53 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.constants import GameConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown, Hour String + +destinations = [ + ["Easy", 130, 240060000, 5, EventType.EHorntail, 21600000, 6], + ["Normal", 130, 240060002, 5, EventType.Horntail, 43200000, 12], + ["Chaos", 130, 240060001, 5, EventType.CHorntail, 43200000, 12], +] + +runsPerDay = 1 + +if sm.getFieldID() == 240050400: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to '#bHorntaial's Cave#k' to fight \r\n#bHorntail#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Horntail's Cave (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bHorntail#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bHorntail#k within the past " + str(destinations[response][6]) + " Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.HORNTAIL_NORMAL_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + sm.createQuestWithQRValue(GameConstants.EASY_HORNTAIL_QUEST, "1") + sm.setPartyQRValue(GameConstants.EASY_HORNTAIL_QUEST, "1") + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) diff --git a/scripts/npc/hontale_enterToE.py b/scripts/npc/hontale_enterToE.py new file mode 100755 index 0000000..5daf6b7 --- /dev/null +++ b/scripts/npc/hontale_enterToE.py @@ -0,0 +1,9 @@ +# Encrypted Slate of the Squad(2083000) | Cave of Life, Cave Entrance + +ROOM_OF_MAZE = 240050100 + +if sm.isPartyLeader(): + if sm.sendAskYesNo("The letters on the slate glitter and the backdoor opens. Do you want to go to the secret path?"): + sm.invokeForParty("warp", 240050400) +else: + sm.sendSayOkay("Only the party leader may proceed to the Horntail quest.") \ No newline at end of file diff --git a/scripts/npc/hontale_out.py b/scripts/npc/hontale_out.py new file mode 100755 index 0000000..abd4a87 --- /dev/null +++ b/scripts/npc/hontale_out.py @@ -0,0 +1,5 @@ +# Crystal of Roots(2083002) | Cave of Life, Entrance to Horntail's Cave +if sm.getFieldID() == 240050400: + sm.warp(240040700, 0) +elif sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.warpInstanceOut(240050400, 0) \ No newline at end of file diff --git a/scripts/npc/hotel1.py b/scripts/npc/hotel1.py new file mode 100755 index 0000000..1f1cc6d --- /dev/null +++ b/scripts/npc/hotel1.py @@ -0,0 +1,32 @@ +# Hotel Receptionist (1061100) | Sleepywood Hotel + + +array = [# Name, MesoCost, Map ID + ["Regular", 499, 105000011], + ["VIP", 999, 105000012] + ] + +sm.sendNext("Welcome. We're the Sleepywood Hotel. " + "Our hotel works hard to serve you the best at all times. " + "If you are tired and worn out from hunting, how about a relaxing stay at our hotel?") + + +selection = sm.sendNext("We offer two kinds of rooms for our service. " + "Please choose the one of your liking.\r\n#b" + "#L0#"+ array[0][0] +" sauna (" + str(array[0][1]) + " mesos)#l\r\n" + "#L1#"+ array[1][0] +" sauna (" + str(array[1][1]) + " mesos)#l") + +if selection == 0: + response = sm.sendAskYesNo("You have chosen the regular sauna. \r\n" + "Your HP and MP will recover fast and you can even purchase some items there. " + "Are you sure you want to go in?") +elif selection == 1: + response = sm.sendAskYesNo("You've chosen the VIP sauna. \r\n" + "Your HP and MP will recover even faster than that of the regular sauna and you can even find a special item in there. " + "Are you sure you want to go in?") + +if sm.getMesos() < array[selection][1]: + sm.sendSayOkay("I'm sorry. It looks like you don't have enough mesos. It will cost you at least " + str(array[selection][1]) + " mesos to stay at our "+ array[selection][0] +" sauna.") +else: + sm.warp(array[selection][2], 0) + sm.deductMesos(array[selection][1]) diff --git a/scripts/npc/huntingZoneIn.py b/scripts/npc/huntingZoneIn.py new file mode 100755 index 0000000..b4b6589 --- /dev/null +++ b/scripts/npc/huntingZoneIn.py @@ -0,0 +1,44 @@ +maps = { + 102040600 : 931050410, + 260010201 : 931050415, + 261010002 : 931050434, + 261010103 : 931050435, + 261020500 : 931050417, + 261020200 : 931050424, + 240010200 : 931050419, + 240010600 : 931050420, + 240020101 : 931050426, + 240020401 : 931050425, + 240020200 : 931050422, + 220040200 : 931050413, + 211041400 : 931050428, + 250010502 : 931050436, + 251010500 : 931050418, + 220080000 : 931050427, + 230040410 : 931050429, + 240040400 : 931050430, + 270010500 : 931050431, + 270020500 : 931050432, + 270030500 : 931050433, +} + +# TODO add a timer for these maps + +MYSTIC_GATE = 9073008 +time = 6 * 60 +map = sm.getFieldID() + +sm.setSpeakerID(MYSTIC_GATE) + +if sm.canWarpSilentCrusade(maps[map]): + response = sm.sendAskYesNo("Do you want to enter?") + + if not sm.getFieldID() in maps: + sm.sendSayOkay("Sorry, I haven't been coded for this map yet. Please notify the devs") + sm.dispose() + + if response: + sm.warpInstanceIn(maps[sm.getFieldID()], 0) + sm.setInstanceTime(time) +else: + sm.sendSayOkay("I must rest, too many brave fighters have battled here today.") \ No newline at end of file diff --git a/scripts/npc/iceman_Reward.py b/scripts/npc/iceman_Reward.py new file mode 100755 index 0000000..d80d159 --- /dev/null +++ b/scripts/npc/iceman_Reward.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 100000000 +# NPC ID :: 2159018 +# Von + +sm.setSpeakerID(2159018) +selection = sm.sendNext("#eParty Quest: The Ice Knight's Curse#n\r\nShhh! The Ice Knight will find us if we're too loud! If he curses you, you'll end up like my friend. Do you want that? No? Then help my friend break his curse!\r\n#b#L0# Okay, I'll help your friend.#l\r\n#L1# I need more details.#l\r\n#L2# Look, I just want the Ice Knight's special item.#l\r\n#L3# I want to know how many attempts I have left.#l") \ No newline at end of file diff --git a/scripts/npc/illex.py b/scripts/npc/illex.py new file mode 100755 index 0000000..f333776 --- /dev/null +++ b/scripts/npc/illex.py @@ -0,0 +1,6 @@ +ELEX = 2151000 + +sm.setSpeakerID(ELEX) + +sm.sendNext("What is it?\r\n\r\n#L0##bI want to talk to you.") +sm.sendNext("It's important to keep a balance between power and skills.") \ No newline at end of file diff --git a/scripts/npc/infoArcher.py b/scripts/npc/infoArcher.py new file mode 100755 index 0000000..6a6077a --- /dev/null +++ b/scripts/npc/infoArcher.py @@ -0,0 +1,20 @@ +# Created by MechAviv +# [Athena Pierce] | [10200] +# Maple Road : Split Road of Destiny + +sm.setSpeakerID(10200) +sm.sendNext("Bowmen are blessed with dexterity and power, taking charge of long-distance attacks, providing support for those at the front line of the battle. Very adept at using landscape as part of the arsenal.") + + +sm.setSpeakerID(10200) +if sm.sendAskYesNo("Would you like to experience what it's like to be a Bowman?"): + sm.setTemporarySkillSet(0) + + sm.createQuestWithQRValue(32219, "4000026") + # Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 + sm.warp(1020300, 0) +else: + sm.setSpeakerID(10200) + sm.sendNext("If you wish to experience what it's like to be a Bowman, come see me again.") + + diff --git a/scripts/npc/infoMagician.py b/scripts/npc/infoMagician.py new file mode 100755 index 0000000..7e65209 --- /dev/null +++ b/scripts/npc/infoMagician.py @@ -0,0 +1,19 @@ +# Created by MechAviv +# [Grendel the Really Old] | [10201] +# Maple Road : Split Road of Destiny + +sm.setSpeakerID(10201) +sm.sendNext("Magicians are armed with flashy element-based spells and secondary magic that aids party as a whole. After the 2nd job adv., the elemental-based magic will provide ample amount of damage to enemies of opposite element.") + + +sm.setSpeakerID(10201) +if sm.sendAskYesNo("Would you like to experience what it's like to be a Magician?"): + sm.setTemporarySkillSet(0) + sm.createQuestWithQRValue(32219, "4000026") + # Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 + sm.warp(1020200, 0) +else: + sm.setSpeakerID(10201) + sm.sendNext("If you wish to experience what it's like to be a Magician, come see me again.") + + diff --git a/scripts/npc/infoPirate.py b/scripts/npc/infoPirate.py new file mode 100755 index 0000000..1b2e2b0 --- /dev/null +++ b/scripts/npc/infoPirate.py @@ -0,0 +1,17 @@ +# Created by MechAviv +# [Kyrin] | [10204] +# Maple Road : Split Road of Destiny + +sm.setSpeakerID(10204) +sm.sendNext("Pirates are blessed with outstanding dexterity and power, utilizing their guns for long-range attacks while using their power in melee combat situations. Gunslingers use elemental-based bullets for added damage, while Brawlers transform into a different being for maximum effect.") + + +sm.setSpeakerID(10204) +if sm.sendAskYesNo("Would you like to experience what it's like to be a Pirate?"): + sm.setTemporarySkillSet(0) + sm.createQuestWithQRValue(32219, "4000026") + # Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 + sm.warp(1020500, 0) +else: + sm.setSpeakerID(10204) + sm.sendNext("If you wish to experience what it's like to be a Pirate, come see me again.") \ No newline at end of file diff --git a/scripts/npc/infoRogue.py b/scripts/npc/infoRogue.py new file mode 100755 index 0000000..110fc0d --- /dev/null +++ b/scripts/npc/infoRogue.py @@ -0,0 +1,19 @@ +# Created by MechAviv +# [Dark Lord] | [10203] +# Maple Road : Split Road of Destiny + +sm.setSpeakerID(10203) +sm.sendNext("Thieves are a perfect blend of luck, dexterity, and power that are adept at surprise attacks against helpless enemies. A high level of avoidability and speed allows Thieves to attack enemies from various angles.") + + +sm.setSpeakerID(10203) +if sm.sendAskYesNo("Would you like to experience what it's like to be a Thief?"): + sm.setTemporarySkillSet(0) + + sm.createQuestWithQRValue(32219, "4000026") + sm.warp(1020400, 0) +else: + sm.setSpeakerID(10203) + sm.sendNext("If you wish to experience what it's like to be a Thief, come see me again.") + + diff --git a/scripts/npc/infoSwordman.py b/scripts/npc/infoSwordman.py new file mode 100755 index 0000000..fcb1da7 --- /dev/null +++ b/scripts/npc/infoSwordman.py @@ -0,0 +1,17 @@ +# Created by MechAviv +# [Dances with Balrog] | [10202] +# Maple Road : Split Road of Destiny + +sm.setSpeakerID(10202) +sm.sendNext("Warriors possess an enormous power with stamina to back it up, and they shine the brightest in melee combat situation. Regular attacks are powerful to begin with, and armed with complex skills, the job is perfect for explosive attacks.") + + +sm.setSpeakerID(10202) +if sm.sendAskYesNo("Would you like to experience what it's like to be a Warrior?"): + sm.setTemporarySkillSet(0) + sm.createQuestWithQRValue(32219, "4000026") + # Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 + sm.warp(1020100, 0) +else: + sm.setSpeakerID(10202) + sm.sendNext("If you wish to experience what it's like to be a Warrior, come see me again.") \ No newline at end of file diff --git a/scripts/npc/intoResiTR.py b/scripts/npc/intoResiTR.py new file mode 100755 index 0000000..8420868 --- /dev/null +++ b/scripts/npc/intoResiTR.py @@ -0,0 +1,21 @@ +# Resistance Training Room Entrance +ELEVATOR_CONTROL = 2151007 +FERDI = 2151010 +preQs = [23103, 23104, 23105, 23106, 23118] +preQsDemon = [23231, 23232, 23233, 23234] +maps = [310010100, 310010200, 310010300, 310010400, 931000400] + +sm.setSpeakerID(ELEVATOR_CONTROL) +selection = sm.sendNext("An elevator that will take you to your desired training room. Choose the floor you'd like to go to.\r\n\r\n#b#L0#Underground 2nd Floor Training Room A#l\r\n#L1#Underground 3rd Floor Training Room B#l\r\n#L2#Underground 4th Floor Training Room C#l\r\n#L3#Underground 5th Floor Training Room D#l\r\n#L4#Underground 6th Floor Training Room E#l") + +if selection == 4 and sm.hasQuest(preQs[selection]): + # TODO: can you come in here anymore after turning in quest? + sm.warpInstanceIn(maps[selection], False) + sm.setInstanceTime(5*60) + sm.dispose() + +if (not sm.hasQuest(preQs[selection]) and not sm.hasQuestCompleted(preQs[selection]) and not sm.hasQuest(preQsDemon[selection]) and not sm.hasQuestCompleted(preQsDemon[selection])): + sm.setSpeakerID(2151010) + sm.sendSayOkay("You are not at the right level to go there yet.") + sm.dispose() +sm.warp(maps[selection], 1) diff --git a/scripts/npc/inv-seller.py b/scripts/npc/inv-seller.py new file mode 100755 index 0000000..a7fffb3 --- /dev/null +++ b/scripts/npc/inv-seller.py @@ -0,0 +1,117 @@ +# Custom NPC script used for @sell player command +# Author: Clueless Cow + +from net.swordie.ms.loaders import ItemData +from net.swordie.ms.constants import ItemConstants +from net.swordie.ms.enums import InvType + +def disposeAll(): + sm.dispose() + chr.dispose() + +def sellItemsFromTab(invType = InvType.EQUIP): + # query inv info + inventory = chr.getInventoryByType(invType) + invItems = inventory.getItems() + tabName = "" + if invType == InvType.CONSUME: + tabName = "CONSUME" + elif invType == InvType.ETC: + tabName = "ETC" + else: + tabName = "EQUIPMENT" + + # empty inv + if len(invItems) == 0: + sm.sendSayOkay("You have no item to sell") + disposeAll() + return + + # has at least 1 item in inv + if len(invItems) == 1: + # only has 1 item, proceed to ask for confirmation + sellingItems = list(invItems) + _itemId = invItems.get(0).getItemId() + confirmed = sm.sendAskYesNo("Are you sure you want to sell #i{}# #z{}#".format(_itemId, _itemId)) + else: + # has more than 1 item, prompt mode selection + optionList = "Please select what you want to sell in your {} tab:\r\n#L1##rEverything#k#l\r\n#L2##gSell between selected items#k#l\r\n#L3#Maybe later#l\r\n".format(tabName) + option = sm.sendNext(optionList) + if option: + if option == 1: + # sell everything + sellingItems = list(invItems) + confirmed = sm.sendAskYesNo("Are you sure you want to sell #rEVERYTHING#k in your Equipment inventory?") + if option == 2: + # sell from/to + sortedItems = list(invItems) + sortedItems.sort(key=lambda x: x.getBagIndex()) + itemListTemplate = "This option will sell all available items between STARTING item and ENDING item.\r\nPlease select #r#k item:\r\n" + for item in sortedItems: + itemListTemplate += "#L{}##i{}# #z{}##l\r\n".format(item.getBagIndex(), item.getItemId(), item.getItemId()) + startIndex = sm.sendNext(itemListTemplate.replace("", "STARTING")) + endIndex = sm.sendNext(itemListTemplate.replace("", "ENDING")) + if startIndex > endIndex: + startIndex, endIndex = endIndex, startIndex + sellingItems = filter(lambda x: (startIndex <= x.getBagIndex() <= endIndex), sortedItems) + soldItemsTemplate = "You will sell the following items:\r\n" + for item in sellingItems: + soldItemsTemplate += "#i{}# #z{}#\r\n".format(item.getItemId(), item.getItemId(), item.getBagIndex()) + confirmed = sm.sendAskYesNo(soldItemsTemplate) + else: + # 'maybe later' option / no response + disposeAll() + return + # finish asking for selling items, proceed to actually sell it + if not confirmed: + sm.sendSayOkay("Thank you for using my service") + disposeAll() + return + + # player confirmed + totalMesos = 0 + for item in sellingItems: + cost = 0 + id = item.getItemId() + quantity = item.getQuantity() + if ItemConstants.isEquip(id): + cost = item.getPrice() * quantity + else: + info = ItemData.getItemInfoByID(id) + if info: + cost = info.getPrice() * quantity + else: + continue + totalMesos += cost + + if chr.canAddMoney(totalMesos): + # remove item from inv + for soldItem in sellingItems: + _id = soldItem.getItemId() + _quantity = soldItem.getQuantity() + if ItemConstants.isEquip(_id): + chr.consumeItem(soldItem) + else: + chr.consumeItem(_id, _quantity) + # add money + chr.addMoney(totalMesos) + sm.sendSayOkay("You've received {} mesos. Thank you for using my service!".format(totalMesos)) + disposeAll() + return + else: + sm.sendSayOkay("#rYou've reached maximum meso cap.#k Please deposit at least {} mesos and run the command again!".format(totalMesos)) + disposeAll() + return + +inventoryList = "Please which inventory you want to sell:\r\n#L1#Equipment#l\r\n#L2#Consume#l\r\n#L3#ETC#l\r\n" +selectedInv = sm.sendNext(inventoryList) + +if selectedInv == 1: + sellItemsFromTab(InvType.EQUIP) +elif selectedInv == 2: + sellItemsFromTab(InvType.CONSUME) +elif selectedInv == 3: + sellItemsFromTab(InvType.ETC) +else: + sm.sendSayOkay("Invalid inventory. Please run the command again!") + disposeAll() diff --git a/scripts/npc/ipia_teleport.py b/scripts/npc/ipia_teleport.py new file mode 100755 index 0000000..9e2a040 --- /dev/null +++ b/scripts/npc/ipia_teleport.py @@ -0,0 +1,4 @@ +# Ifia : Queen +# Warps to Von Leon boss battle + +sm.warp(211070000, 1) # Audience Room Corridor \ No newline at end of file diff --git a/scripts/npc/item2607.py b/scripts/npc/item2607.py new file mode 100755 index 0000000..8c507a0 --- /dev/null +++ b/scripts/npc/item2607.py @@ -0,0 +1,4 @@ +if sm.hasQuest(2607): + if not sm.hasItem(4033178): + sm.giveItem(4033178) + sm.sendNext("(The Owl passes you a seal, a look of utmost indifference on his face. Then it flaps its wings and shoos you away.)") \ No newline at end of file diff --git a/scripts/npc/jaguar_in.py b/scripts/npc/jaguar_in.py new file mode 100755 index 0000000..4a3ce8a --- /dev/null +++ b/scripts/npc/jaguar_in.py @@ -0,0 +1,14 @@ +# Black Jack - Resistance Headquarters : Secret Plaza + +from net.swordie.ms.constants import JobConstants + +BLACK_JACK = 2151008 + +sm.setSpeakerID(BLACK_JACK) +if not JobConstants.isWildHunter(sm.getChr().getJob()): + sm.sendSayOkay("Grrrr....(You can't enter. Only Wild Hunters may enter.)") + sm.dispose() + +response = sm.sendAskYesNo("Do you want to enter the jaguar habitat?") +if response: + sm.warp(931000500, 0) \ No newline at end of file diff --git a/scripts/npc/jane.py b/scripts/npc/jane.py new file mode 100755 index 0000000..c0e1c2c --- /dev/null +++ b/scripts/npc/jane.py @@ -0,0 +1 @@ +sm.sendSayOkay("Hey!") diff --git a/scripts/npc/jett00.py b/scripts/npc/jett00.py new file mode 100755 index 0000000..6abea32 --- /dev/null +++ b/scripts/npc/jett00.py @@ -0,0 +1,9 @@ +sm.sendSayOkay("#bAlien Party Quest#k can give you a variety of useful equipment." + " To get this equipment you must clear each stage. Upon clearing each stage you will have a #b2.5#k% chance to receive one of the items listed bellow and a #b0.5#k% chance to receive one of the special items from stage 5 " + "\r\n\r\n#b#e" + "#v1032191# #z1032191#.\r\n" + "#v1113038# #z1113038#.\r\n" + "#v1122256# #z1122256#.\r\n\r\n" + "#k#nThese are the items you can receive from killing the Visitor Boss in stage 5\r\n\r\n#b#e" + "#v1003893# #z1003893#.\r\n" + "#v1132230# #z1132230#.\r\n") \ No newline at end of file diff --git a/scripts/npc/jett_tuto_10_1.py b/scripts/npc/jett_tuto_10_1.py new file mode 100755 index 0000000..e0891d8 --- /dev/null +++ b/scripts/npc/jett_tuto_10_1.py @@ -0,0 +1,66 @@ +# Created by MechAviv +# Map ID :: 620100041 +# Nautilus : Wrecked Airship 1 + +if "1" not in sm.getQRValue(5673): + sm.setSpeakerID(9270086) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipBoxChat() + sm.sendNext("Check that portal over yonder. That thing I saw was heading in that direction.") +else: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.setSpeakerID(9270086) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipBoxChat() + sm.sendNext("What are you thinking, crashing that hunk of junk on my beaches? You're helpin' me clean up.") + + + sm.curNodeEventEnd(True) + sm.setSpeakerID(9270086) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipBoxChat() + sm.sendSay("You came hurtling out of the sky at a thousand miles an hour, explode, and you think I'M gonna take care of this myself?") + + + sm.setSpeakerID(9270086) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.boxChatPlayerAsSpeaker() + sm.sendSay("Have you seen a guy with clothes like mine? He was with me... ") + + + sm.setSpeakerID(9270086) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipBoxChat() + sm.sendSay("I swear I saw something black and red dive out of that wreckage before I came up. Red hair, maybe?") + + + sm.sendDelay(1000) + + + sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/15", 2000, 0, -100, -2, -2, False, 0) + sm.sendDelay(1500) + + + sm.setSpeakerID(9270086) + sm.setSpeakerType(3) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.boxChatPlayerAsSpeaker() + sm.sendNext("#b(That sorta sounds like #p9270083#. He must be scouting the area for enemies. Couldn't ask for a better captain.)#k") + + + sm.createQuestWithQRValue(5673, "1") + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/npc/jett_tuto_11_0.py b/scripts/npc/jett_tuto_11_0.py new file mode 100755 index 0000000..931114a --- /dev/null +++ b/scripts/npc/jett_tuto_11_0.py @@ -0,0 +1,72 @@ +# Created by MechAviv +# Map ID :: 620100041 +# Nautilus : Wrecked Airship 1 +# NPC ID :: 9270086 +# Black Bark + +if "1" not in sm.getQRValue(5673): + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, True, False, False) + + sm.setSpeakerID(9270086) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.setSpeakerType(3) + sm.sendNext("What are you thinking, crashing that hunk of junk on my beaches? You're helpin' me clean up.") + + + sm.curNodeEventEnd(True) + sm.setSpeakerID(9270086) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.setSpeakerType(3) + sm.sendSay("You came hurtling out of the sky at a thousand miles an hour, explode, and you think I'M gonna take care of this myself?") + + + sm.setSpeakerID(9270086) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.setSpeakerType(3) + sm.sendSay("Have you seen a guy with clothes like mine? He was with me... ") + + + sm.setSpeakerID(9270086) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.setSpeakerType(3) + sm.sendSay("I swear I saw something black and red dive out of that wreckage before I came up. Red hair, maybe?") + + + sm.sendDelay(1000) + + + sm.showEffect("Effect/DirectionNewPirate.img/newPirate/balloonMsg1/15", 2000, 0, -100, -2, -2, False, 0) + sm.sendDelay(1500) + + + sm.setSpeakerID(9270086) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.setSpeakerType(3) + sm.sendNext("#b(That sorta sounds like #p9270083#. He must be scouting the area for enemies. Couldn't ask for a better captain.)#k") + + + sm.createQuestWithQRValue(5673, "1") + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) +else: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, True, False, False) + + sm.setSpeakerID(9270086) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.setSpeakerType(3) + sm.sendNext("Check that portal over yonder. That thing I saw was heading in that direction.") + + + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/npc/job4_item.py b/scripts/npc/job4_item.py new file mode 100755 index 0000000..3f40eb5 --- /dev/null +++ b/scripts/npc/job4_item.py @@ -0,0 +1,23 @@ +selection = sm.sendNext("...Can I help you?" + "\r\n\r\n#b" + "#L0#Find the ingredients for the Flying Potion (Dragon moss Extract)#l") + +if selection == 0: + if sm.hasQuest(3759) and not sm.hasItem(4032531): + sm.sendNext("So, have you progressed in the investigation of the Dragon Rider?") + sm.sendSay("What? You met#b Matada#k? Well, well, well. I suppose he's finally returned, after having traveled the world. Not that he's ever done anything for this town, but perhaps he missed his home?") + sm.setPlayerAsSpeaker() + sm.sendSay("To pursue the Dragon Rider, you'll have to be able to fly... To do so, you'll need the#b Dragon Moss Extract") + sm.setSpeakerID(parentID) + sm.sendSay("The Dragon Moss Extract? That's an ingredient used in specialty medicine from the Halfingerers. Sure, I'll give you some if you need it, but are you sure it'll let you fly?") + sm.setPlayerAsSpeaker() + sm.sendSay("Yes. Matada said it's a key ingredient to make a potion for flying.") + sm.setSpeakerID(parentID) + sm.sendSay("Oh, I see. Alright. I'll give you some, I hope you knock some sense into that Dragon Rider!") + sm.sendSay("Please keep looking into it, will you?") + if sm.canHold(4032531): + sm.giveItem(4032531) + else: + sm.sendSayOkay("Please make some room in your ETC inventory.") + else: + sm.sendSayOkay("I'm sorry, I can't give you Dragon Moss Extract at the moment.") \ No newline at end of file diff --git a/scripts/npc/job_cygnus.py b/scripts/npc/job_cygnus.py new file mode 100755 index 0000000..32a0673 --- /dev/null +++ b/scripts/npc/job_cygnus.py @@ -0,0 +1,32 @@ +# TODO: {serverName} Custom Beginnings - Cygnus + +speaker = 2007 # maple administrator + +# JobOptions: { string jobName, string jobDesc, int jobId } +options = [ + ["Dawn Warrior", "one with the spirit of light", 1100], + ["Wind Archer", "one with the spirit of wind", 1300], + ["Blaze Wizard", "one with the spirit of fire", 1200], + ["Night Walker", "one with the spirit of darkness", 1400], + ["Thunder Breaker", "one with the spirit of lightning", 1500], +] + +optionText = "It's time for you to pick a job.\r\nAs a #bCygnus Knight#k, you have the option of the " + str(len(options)) + " following options:" + +for idx, job in enumerate(options): + optionText += "\r\n#b#L" + str(job[2]) + "#" + job[0] + "#k, " + job[1] + "#l" + +choice = sm.sendNext(optionText) + + +for job in options: + if (choice == job[2]): + response = sm.sendAskYesNo("So, you wish to become a #b" + job[0] + "#k?") + if response: + sm.jobAdvance(job[2]) + sm.doJobEnd() + sm.sendSayOkay("You are now a #b" + job[0] + "#k!") + else: + # executes the current script again + sm.dispose() + sm.startScript("job_cygnus", "npc") diff --git a/scripts/npc/job_explorer.py b/scripts/npc/job_explorer.py new file mode 100755 index 0000000..f7a97df --- /dev/null +++ b/scripts/npc/job_explorer.py @@ -0,0 +1,32 @@ +# TODO: {serverName} Custom Beginnings - Explorer + +speaker = 2007 # maple administrator + +# JobOptions: { string jobName, string jobDesc, int jobId } +options = [ + ["Warrior", "powerful and defensive", 100], + ["Bowman", "long-ranged and controlled", 300], + ["Magician", "intelligent and magical", 200], + ["Thief", "speedy and sneaky", 400], + ["Pirate", "fancy and unique", 500], + ["Jett", "Not like the other heroes", 508], +] + +optionText = "It's time for you to pick a job!\r\nAs an #bExplorer#k, you have the option of the " + str(len(options)) + " following options:" + +for idx, job in enumerate(options): + optionText += "\r\n#b#L" + str(job[2]) + "#" + job[0] + "#k, " + job[1] + "#l" +choice = sm.sendNext(optionText) + + +for job in options: + if (choice == job[2]): + response = sm.sendAskYesNo("So, you wish to become a #b" + job[0] + "#k?") + if response: + sm.jobAdvance(job[2]) + sm.doJobEnd() + sm.sendSayOkay("You are now a #b" + job[0] + "#k!") + else: + # executes the current script again + sm.dispose() + sm.startScript("job_explorer", "npc") \ No newline at end of file diff --git a/scripts/npc/job_resistance.py b/scripts/npc/job_resistance.py new file mode 100755 index 0000000..fb4ed87 --- /dev/null +++ b/scripts/npc/job_resistance.py @@ -0,0 +1,30 @@ +# TODO: {serverName} Custom Beginnings - Resistance + +speaker = 2007 # maple administrator + +# JobOptions: { string jobName, string jobDesc, int jobId } +options = [ + ["Battle Mage", "", 3200], + ["Wild Hunter", "", 3300], + ["Mechanic", "", 3500], + ["Blaster", "", 3700], +] + +optionText = "It's time for you to pick a job.\r\nAs a member of the #bResistance#k, you have the option of the " + str(len(options)) + " following options:" + +for idx, job in enumerate(options): + optionText += "\r\n#b#L" + str(job[2]) + "#" + job[0] + "#k " + job[1] + "#l" +choice = sm.sendNext(optionText) + + +for job in options: + if (choice == job[2]): + response = sm.sendAskYesNo("So, you wish to become a #b" + job[0] + "#k?") + if response: + sm.jobAdvance(job[2]) + sm.doJobEnd() + sm.sendSayOkay("You are now a #b" + job[0] + "#k!") + else: + # executes the current script again + sm.dispose() + sm.startScript("job_resistance", "npc") \ No newline at end of file diff --git a/scripts/npc/juliet_start.py b/scripts/npc/juliet_start.py new file mode 100755 index 0000000..2c1bd7f --- /dev/null +++ b/scripts/npc/juliet_start.py @@ -0,0 +1,66 @@ +# Juliet (2112003) | PQ site +from net.swordie.ms.enums import UIType +sm.setSpeakerID(2112003) +if sm.getFieldID() != 910002000: + selection = sm.sendNext("#e#n \r\n" + "Magatia faces a grave threat. We need brave adventurers to help us.\r\n\r\n" + "#b#L0#Listen to Juliet's story.#l \r\n" + "#L1#Start the quest.#l \r\n" + "#L2#Find a party.#l\r\n" + "#L3#Make a necklace with Alcadno Marbles.#l \r\n" + "#L4#Combine two necklaces into one.#l") + #Listen to Story + if selection == 0: + sm.sendNext("Romeo and I are in love. But I am an Alcadno, and he is a Zenumist. There's no hope for us to be together...") + sm.sendNext("The Alcadno and the Zenumist were not always enemies! There must be a way to bring peace to our two sides!") + sm.sendNext("But in spite of everything I've tried, Magatia is#b on the verge of war#k. It's all because#b someone stole the power source of both Zenumist and Alcadno#k. And the two sides are blaming each other for it!") + sm.sendNext("I got a tip that the real thief is#b a third party#k. If we're ever going to have peace -- and love for me and Romeo -- we need to find#b the thirs party#k and stop his evil plan!") + sm.sendNext("Fight for the peace of Magatia! \r\n" + "#e-Level#n: 70+ #r(Recommended: 70 - 99)#k \r\n" + "#e-Time Limit#n: 20 min \r\n" + "#e-Players#n: 4 \r\n" + "#e-Reward#n: \r\n" + "#i1122117# Juliet's Pendant \r\n" + "(Can be obtained from #bJuliet#k once you collect #r2#b Alcadno Marbles#k.) \r\n" + "#i1122118# Symbol of Eternal Love \r\n" + "(Can be traded for 1 #bRomeo's Pendant#k and 1 #bJuliet's Pendant#k)") + #Enter PQ + #TODO add pq + elif selection == 1: + if sm.isPartyLeader(): + sm.warpPartyIn(926100000) + else: + sm.sendNext("The party leader can proceed to the next stage.") + + #Search for party + elif selection == 2: + sm.openUI(UIType.PARTYSEARCH) + + #Craft juliet pendant + elif selection == 3: + if sm.hasItem(4001160, 2): + if sm.canHold(1122117): + sm.consumeItem(4001160, 2) + sm.giveItem(1122117) + else: + sm.sendNext("Please make some space in your equipment inventory.") + else: + sm.sendNext("To make Juliet's Pendant, we need 2 Alcadno Marbles. You seem to be missing a few.") + + #Combine two necklaces + elif selection == 4: + if sm.hasItem(1122116) and sm.hasItem(1122117): + if sm.canHold(1122118): + sm.consumeItem(1122116) + sm.consumeItem(1122117) + sm.giveItem(1122118) + else: + sm.sendNext("Please make some space in your equipment inventory.") + else: + sm.sendNext("You need Romeo's Pendant and Juliet's Pendant to combine them.") + +else: + selection = sm.sendNext("Brave Maplers, please help us preserve the fragile peace of Magatia!\r\n\r\n" + "#b#L10#Go to #m261000021# to listen to Juliet's story.#l") + if selection == 10: + sm.warp(261000021) \ No newline at end of file diff --git a/scripts/npc/jump_tree.py b/scripts/npc/jump_tree.py new file mode 100755 index 0000000..fc49b23 --- /dev/null +++ b/scripts/npc/jump_tree.py @@ -0,0 +1,8 @@ +# id 1302023 (Jump Pad), field 106030101 +sm.lockInGameUI(True, True) +sm.setSpeakerID(1302023) # Jump Pad +sm.setParam(57) +sm.setColor(1) +sm.sendNext("The device to get up to the Spirit Viking's airship is around here somewhere... Aha! Got it!") +sm.lockInGameUI(False, True) +sm.warp(106030102) diff --git a/scripts/npc/kannaTutoDirection.py b/scripts/npc/kannaTutoDirection.py new file mode 100755 index 0000000..aa649b9 --- /dev/null +++ b/scripts/npc/kannaTutoDirection.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# Map ID :: 807100111 +# NPC ID :: 9131011 +# Altar +if True:#sm.getFieldID() == 807100111: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.showFieldEffect("JPKanna/magicCircle1", 0) + sm.sendDelay(7000) + + + sm.setSpeakerID(9131011) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.sendNext("The barrier is weakening. It must have worked.") + + + sm.setSpeakerID(9131011) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.sendSay("Now I just have to destroy the altar in the basement.") + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.warp(807100112, 0) diff --git a/scripts/npc/kasandra.py b/scripts/npc/kasandra.py new file mode 100755 index 0000000..e8cd9d6 --- /dev/null +++ b/scripts/npc/kasandra.py @@ -0,0 +1,9 @@ +# ghostWalk = 20031211 +# chump = 20031212 +# shroudWalk = 20031205 +# +# if sm.sendAskYesNo("Would you like to reset your AP?"): +# sm.resetAP(False) +# sm.removeSkill(ghostWalk) +# sm.removeSkill(chump) +# sm.giveSkill(shroudWalk) \ No newline at end of file diff --git a/scripts/npc/kenjiTutoGate.py b/scripts/npc/kenjiTutoGate.py new file mode 100755 index 0000000..507f4c3 --- /dev/null +++ b/scripts/npc/kenjiTutoGate.py @@ -0,0 +1,7 @@ +# Honnou-ji Eastern Gate | Honnou-ji Eastern grounds +# Author: Tiger + +if not sm.hasMobsInField(): + sm.warpInstanceOut(807100002) # Honnou-ji Eastern Grounds +else: + sm.chat("You must clear the gate!") # TODO: gms-like convo (Don't even think there is a msg here...) diff --git a/scripts/npc/kenjiTutoShingen.py b/scripts/npc/kenjiTutoShingen.py new file mode 100755 index 0000000..f9cfe97 --- /dev/null +++ b/scripts/npc/kenjiTutoShingen.py @@ -0,0 +1,26 @@ +# Takeda Shingen | Honnou-ji Eastern Wall +# Author: Tiger + +if sm.getFieldID() == 807100002: # Honnou-ji Eastern Grounds + sm.setBoxChat() + sm.removeEscapeButton() + sm.sendNext("You did all right, samurai. I'll let you join my side for now.") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("The battles goes well. I fear the Uesugi troops barged in too early. They may require assistance.") + + sm.setSpeakerID(parentID) + + sm.setBoxChat() + sm.sendNext("Wouldn't suprise me. Kenshin couldn't keep her men under control if she had a stack of gold for each of them. It's not like her to be early though...") + + sm.setBoxChat() + sm.sendNext("It's not important. We're doing well so far and I hate to beak good momentum. Men, prepare for the final charge! TO THE TEMPLE!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("We shall meet again, Tiger of Kai!") + +else: + sm.sendNext("Get to the Honnou-ji Outer wall and open the Eastern Door.") diff --git a/scripts/npc/kenta_enter.py b/scripts/npc/kenta_enter.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/npc/king_summer.py b/scripts/npc/king_summer.py new file mode 100755 index 0000000..e588ebe --- /dev/null +++ b/scripts/npc/king_summer.py @@ -0,0 +1,22 @@ +sm.setSpeakerID(9201324) +if sm.getChr().getLevel() < 160: + sm.sendNext("Please return to me when you're a bit stronger..") +else: + if sm.hasItem(4161080): + sm.sendNext("I heard from an adventurer they might have seen her deep under the waves in a cave.") + else: + sm.sendNext("I seem to have lost my pet, could you help me find her? I'll need to know you're trustworthy first!.") + if sm.sendAskYesNo("Are you ready for your question?"): + question = sm.sendAskText("What is the colour of Athena Pierce's bow?", "", 1, 20) + if question == "Blue": + sm.sendNext("I'm so glad I can trust you! Hurry now, I really miss her.") + sm.sendNext("Take this item with you so she knows that you can be trusted.") + sm.sendNext("I heard from an adventurer they might have seen her deep under the waves in a cave.") + sm.sendNext("Please return her safely to me.") + if sm.canHold(4161080): + sm.giveItem(4161080) + else: + sm.sendNext("You don't have pocket space for my item!") + + else: + sm.sendNext("Please return why you can answer my question!") \ No newline at end of file diff --git a/scripts/npc/lens_henesys1.py b/scripts/npc/lens_henesys1.py new file mode 100755 index 0000000..3678079 --- /dev/null +++ b/scripts/npc/lens_henesys1.py @@ -0,0 +1,11 @@ +al = chr.getAvatarData().getAvatarLook() +face = al.getFace() - (al.getFace() % 1000 - al.getFace() % 100) # Default Black Lenses +options = [0, 100, 200, 300, 400, 500, 600, 700, 800] +options = list(map(lambda x: x + face, options)) +answer = sm.sendAskAvatar( + "With our specialized machine, you can see the results of your potential treatment in advance. " + "What kind of lens would you like to wear? Please choose the style of your liking.", + False, False, options) + +if answer < len(options): + sm.changeCharacterLook(options[answer]) \ No newline at end of file diff --git a/scripts/npc/levelUP.py b/scripts/npc/levelUP.py new file mode 100755 index 0000000..73689f2 --- /dev/null +++ b/scripts/npc/levelUP.py @@ -0,0 +1,6 @@ +question = sm.sendAskYesNo("Would you like to buy #e24 Hour#k #bPet Vac #i5680047# #kfor #r100 #i4310258#?") +if question and sm.canHold(5680047) and sm.hasItem(4310258, 100): + sm.giveItemWithExpireDate(5680047, 1, False, 24 * 60) #4 hours + sm.consumeItem(4310258, 100) +else: + sm.sendNext("#e#dYour inventory is full or you don't have 100 #i4310258#.") \ No newline at end of file diff --git a/scripts/npc/lilin.py b/scripts/npc/lilin.py new file mode 100755 index 0000000..2832328 --- /dev/null +++ b/scripts/npc/lilin.py @@ -0,0 +1,12 @@ +# Created by MechAviv +# [Lilin] | [1201000] +# Snow Island : Rien + +sm.setSpeakerID(1201000) +selection = sm.sendNext("What is it?\r\n\r\n#b#L0# I want to talk to you.#l") +if selection == 0: + sm.setSpeakerID(1201000) + selection2 = sm.sendNext("What do you want to talk about?\r\n\r\n#b#L0# How's life been treating you lately?#l") + if selection2 == 0: + sm.setSpeakerID(1201000) + sm.sendNext("Aran, you seem to have a lot of free time lately, what with all your slacking off. Can you do me a favor? I want the flower from the top of Zakum's head. If you get me that, then we can have a nice cup of tea and chit chat.") diff --git a/scripts/npc/link2_Clear.py b/scripts/npc/link2_Clear.py new file mode 100755 index 0000000..23374bb --- /dev/null +++ b/scripts/npc/link2_Clear.py @@ -0,0 +1,5 @@ +# Link 2 Control Device | Evolution System link 2 +#TODO check for disguise +#TODO make script GMS like +sm.sendSayOkay("Accepted.") +sm.createQuestWithQRValue(1832, "Access") \ No newline at end of file diff --git a/scripts/npc/lucid_accept.py b/scripts/npc/lucid_accept.py new file mode 100755 index 0000000..fca34ee --- /dev/null +++ b/scripts/npc/lucid_accept.py @@ -0,0 +1,6 @@ +# id 3003208 (Protective Mask), field 450004000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003208) # Protective Mask +res = sm.sendNext("#e#n\r\nSomething terrible will happen if Lucid is not stopped.\r\n#b \r\n#L0# I want to enter Boss: Lucid (Story).#l \r\n#L1# I want to enter Boss: Lucid (Normal).#l \r\n#L2# I want to enter Boss: Lucid (Hard).#l \r\n#L3# I want to enter Boss: Lucid (Normal) Practice Mode.#l \r\n#L4# I want to enter Boss: Lucid (Hard) Practice Mode.#l") +sm.warp(450004700) diff --git a/scripts/npc/ludi026.py b/scripts/npc/ludi026.py new file mode 100755 index 0000000..a562380 --- /dev/null +++ b/scripts/npc/ludi026.py @@ -0,0 +1,403 @@ +# Wisp (2040030) | Eos Tower Entrance + + +sm.sendNext("Hello there, I'm #bMar the Fairy#k of Victoria Island's main disciple. " + "Mar the Fairy summoned me here to see if the pets are being taken care of here in Ludibrium. " + "What can I do for you?\r\n" + "feel free to ask me questions.") + + +sm.sendNext("What do you want to know more of?#b\r\n" + "#L0#Tell me more about Pets.#l\r\n" + "#L1#How do I raise Pets?#l\r\n" + "#L2#Do Pets die too?#l\r\n" + "#L3#What are the commands for Brown and Black Kitty?#l\r\n" + "#L4#What are the commands for Brown Puppy?#l\r\n" + "#L5#What are the commands for Pink and White Bunny?#l\r\n" + "#L6#What are the commands for Mini Kargo?#l\r\n" + "#L7#What are the commands for Rudolph and Dasher?#l\r\n" + "#L8#What are the commands for Black Pig?#l\r\n" + "#L9#What are the commands for Panda?#l\r\n" + "#L10#What are the commands for Husky?#l\r\n" + "#L11#What are the commands for Dino Boy and Dino Girl?#l\r\n" + "#L12#What are the commands for Monkey?#l\r\n" + "#L13#What are the commands for Turkey?#l\r\n" + "#L14#What are the commands for White Tiger?#l\r\n" + "#L15#What are the commands for Penguin?#l\r\n" + "#L16#What are the commands for Golden Pig?#l\r\n" + "#L17#What are the commands for Robot?#l\r\n" + "#L18#What are the commands for Mini Yeti?#l\r\n" + "#L19#What are the commands for Jr. Balrog?#l\r\n" + "#L20#What are the commands for Baby Dragon?#l\r\n" + "#L21#What are the commands for Green/Red/Blue Dragon?#l\r\n" + "#L22#What are the commands for Black Dragon?#l\r\n" + "#L23#What are the commands for Jr. Reaper?#l\r\n" + "#L24#What are the commands for Porcupine?#l\r\n" + "#L25#What are the commands for Snowman?#l\r\n" + "#L26#What are the commands for Skunk?#l\r\n" + "#L27#Please teach me about transferring pet ability points.#l") + +selection = answer +if selection == 0: + sm.sendNext("So you want to know more about Pets. Long ago I made a doll, " + "sprayed Water of Life on it, and cast spell on it to create a magical animal. " + "I know it sounds unbelievable, but it's a doll that became an actual living thing. " + "They understand and follow people very well.") + sm.sendNext("But Water of Life only comes out little at the very bottom of the World Tree, so I can't give him too much time in life... " + "I know, it's very unfortunate... but even if it becomes a doll again I can always bring life back into it so be good to it while you're with it.") + sm.sendNext("Oh yeah, they'll react when you give them special commands. You can scold them, love them... it all\r\ndepends on how you take care of them. " + "They are afraid to leave their masters so be nice to them, show them love. They can get sad and lonely fast...") + sm.sendNext("Depending on the command you give, pets can love it, hate, and display other kinds of reactions to it. " + "If you give the pet a command and it follows you well, your intimacy goes up. " + "Double click on the pet and you can check the intimacy, level, fullness and etc...") + sm.sendNext("Talk to the pet, pay attention to it and its intimacy level will go up and eventually his overall level will go up too. " + "As the intimacy level rises, the pet's overall level will rise soon after. " + "As the overall level rises, one day the pet may even talk like a person a little bit, so try hard raising it. " + "Of course it won't be easy doing so...") + sm.sendNext("It may be a live doll but they also have life so they can feel the hunger too. " + "#bFullness#k shows the level of hunger the pet's in. 100 is the max, and the lower it gets, " + "it means that the pet is getting hungrier. After a while, it won't even follow your command and be on the offensive, " + "so watch out over that.") + sm.sendNext("Oh yes! Pets can't eat the normal human food. " + "Instead my disciple #bDoofus#k sells #bPet Food#k at the Henesys Market so if you need food for your pet, find Henesys. " + "It'll be a good idea to buy the food in advance and feed the pet before it gets really hungry.") + sm.sendNext("Oh, and if you don't feed the pet for a long period of time, it goes back home by itself. " + "You can take it out of its home and feed it but it's not really good for the pet's health, " + "so try feeding him on a regular basis so it doesn't go down to that level, alright? I think this will do.") + sm.sendNext("Dying... well, they aren't technically ALIVE per se, so I don't know if dying is the right term to use. " + "They are dolls with my magical power and the power of Water of Life to become a live object. " + "Of course while it's alive, it's just like a live animal...") + sm.sendNext("After some time... that's correct, they stop moving. " + "They just turn back to being a doll, after the effect of magic dies down and Water of Life dries out. " + "But that doesn't mean it's stopped forever, because once you pour Water of Life over, it's going to be back alive.") + sm.sendNext("Even if it someday moves again, it's sad to see them stop altogether. " + "Please be nice to them while they are alive and moving. Feed them well, too. " + "Isn't it nice to know that there's something alive that follows and listens to only you?") +if selection == 1: + sm.sendNext("Depending on the command you give, pets can love it, hate, and display other kinds of reactions to it. " + "If you give the pet a command and it follows you well, your intimacy goes up. " + "Double click on the pet and you can check the intimacy, level, fullness and etc...") +if selection == 2: + sm.sendNext("Dying... well, they aren't technically ALIVE per se, so I don't know if dying is the right term to use. " + "They are dolls with my magical power and the power of Water of Life to become a live object. " + "Of course while it's alive, it's just like a live animal...") +if selection == 3: + sm.sendNext("These are the commands for #rBrown Kitty and Black Kitty#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bcutie#k (Level 10 ~ 30)\r\n" + "#bup, stand, rise#k (Level 20 ~ 30)") + sm.dispose() +if selection == 4: + sm.sendNext("These are the commands for #rBrown Puppy#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, baddog, dummy#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n#bpee#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bdown#k (Level 10 ~ 30)\r\n" + "#bup, stand, rise#k (Level 20 ~ 30)") + sm.dispose() +if selection == 5: + sm.sendNext("These are the commands for #rPink Bunny and White Bunny#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bhug#k (Level 10 ~ 30)\r\n" + "#bsleep, sleepy, gotobed#k (Level 20 ~ 30)") + sm.dispose() +if selection == 6: + sm.sendNext("These are the commands for #rMini Kargo#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpee#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bthelook, charisma#k (Level 10 ~ 30)\r\n" + "#bdown#k (Level 10 ~ 30)\r\n" + "#bgoodboy, goodgirl#k (Level 20 ~ 30)") + sm.dispose() +if selection == 7: + sm.sendNext("These are the commands for #rRudolph and Dasher#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bup, stand#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#bmerryxmas, merrychristmas#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 11 ~ 30)\r\n" + "#blonely, alone#k (Level 11 ~ 30)\r\n" + "#bcutie#k (Level 11 ~ 30)\r\n" + "#bmush, go#k (Level 21 ~ 30)") + sm.dispose() +if selection == 8: + sm.sendNext("These are the commands for #rBlack Pig#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bhand#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bsmile#k (Level 10 ~ 30)\r\n" + "#bthelook, charisma#k (Level 20 ~ 30)") + sm.dispose() +if selection == 9: + sm.sendNext("These are the commands for #rPanda#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bchill, relax#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bletsplay#k (Level 10 ~ 30)\r\n" + "#bmeh, bleh#k (Level 10 ~ 30)\r\n" + "#bsleep#k (Level 20 ~ 30)") + sm.dispose() +if selection == 10: + sm.sendNext("These are the commands for #rHusky#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, baddog, dummy#k (Level 1 ~ 30)\r\n" + "#bhand#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bdown#k (Level 10 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bup, stand, rise#k (Level 20 ~ 30)") + sm.dispose() +if selection == 11: + sm.sendNext("These are the commands for #rDino Boy and Dino Girl#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bsmile, laugh#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bcutie#k (Level 10 ~ 30)\r\n" + "#bsleep, nap, sleepy#k (Level 20 ~ 30)") + sm.dispose() +if selection == 12: + sm.sendNext("These are the commands for #rMonkey#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#brest#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpee#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bup, stand#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bplay#k (Level 10 ~ 30)\r\n" + "#bmelong#k (Level 10 ~ 30)\r\n" + "#bsleep, gotobed, sleepy#k (Level 20 ~ 30)") + sm.dispose() +if selection == 13: + sm.sendNext("These are the commands for #rTurkey#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno, rudeboy, mischief#k (Level 1 ~ 30)\r\n" + "#bstupid#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bup, stand#k (Level 1 ~ 30)\r\n" + "#btalk, chat, gobble#k (Level 10 ~ 30)\r\n" + "#byes, goodboy#k (Level 10 ~ 30)\r\n" + "#bsleepy, birdnap, doze#k (Level 20 ~ 30)\r\n" + "#bbirdeye, thanksgiving, fly, friedbird, imhungry#k (Level 30)") + sm.dispose() +if selection == 14: + sm.sendNext("These are the commands for #rWhite Tiger#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#brest, chill#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bactsad, sadlook#k (Level 10 ~ 30)\r\n" + "#bwait#k (Level 20 ~ 30)") + sm.dispose() +if selection == 15: + sm.sendNext("These are the commands for #rPenguin#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bhug, hugme#k (Level 10 ~ 30)\r\n" + "#bwing, hand#k (Level 10 ~ 30)\r\n" + "#bsleep#k (Level 20 ~ 30)\r\n" + "#bkiss, smooch, muah#k (Level 20 ~ 30)\r\n" + "#bfly#k (Level 20 ~ 30)\r\n" + "#bcute, adorable#k (Level 20 ~ 30)") + sm.dispose() +if selection == 16: + sm.sendNext("These are the commands for #rGolden Pig#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 11 ~ 30)\r\n" + "#bloveme, hugme#k (Level 11 ~ 30)\r\n" + "#bsleep, sleepy, gotobed#k (Level 21 ~ 30)\r\n" + "#bignore / impressed / outofhere#k (Level 21 ~ 30)\r\n" + "#broll, showmethemoney#k (Level 21 ~ 30)") + sm.dispose() +if selection == 17: + sm.sendNext("These are the commands for #rRobot#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#battack, charge#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bgood, thelook, charisma#k (Level 11 ~ 30)\r\n" + "#bspeack, talk, chat, say#k (Level 11 ~ 30)\r\n" + "#bdisguise, change, transform#k (Level 11 ~ 30)") + sm.dispose() +if selection == 18: + sm.sendNext("These are the commands for #rMini Yeti#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bdance, boogie, shakeit#k (Level 1 ~ 30)\r\n" + "#bcute, cutie, pretty, adorable#k (Level 1 ~ 30)\r\n" + "#biloveyou, likeyou, mylove#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 11 ~ 30)\r\n" + "#bsleep, nap, sleepy, gotobed#k (Level 11 ~ 30)") + sm.dispose() +if selection == 19: + sm.sendNext("These are the commands for #rJr. Balrog#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bliedown#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#biloveyou|mylove|likeyou#k (Level 1 ~ 30)\r\n" + "#bcute|cutie|pretty|adorable#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bsmirk|crooked|laugh#k (Level 1 ~ 30)\r\n" + "#bmelong#k (Level 11 ~ 30)\r\n" + "#bgood|thelook|charisma#k (Level 11 ~ 30)\r\n" + "#bspeak|talk|chat|say#k (Level 11 ~ 30)\r\n" + "#bsleep|nap|sleepy#k (Level 11 ~ 30)\r\n" + "#bgas#k (Level 21 ~ 30)") + sm.dispose() +if selection == 20: + sm.sendNext("These are the commands for #rBaby Dragon#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#biloveyou|loveyou#k (Level 1 ~ 30)\r\n#bpoop#k (Level 1 ~ 30)\r\n" + "#bstupid|ihateyou|dummy#k (Level 1 ~ 30)\r\n#bcutie#k (Level 11 ~ 30)\r\n" + "#btalk|chat|say#k (Level 11 ~ 30)\r\n" + "#bsleep|sleepy|gotobed#k (Level 11 ~ 30)") + sm.dispose() +if selection == 21: + sm.sendNext("These are the commands for #rGreen/Red/Blue Dragon#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 15 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 15 ~ 30)\r\n" + "#biloveyou|loveyou#k (Level 15 ~ 30)\r\n" + "#bpoop#k (Level 15 ~ 30)\r\n" + "#bstupid|ihateyou|dummy#k (Level 15 ~ 30)\r\n" + "#btalk|chat|say#k (Level 15 ~ 30)\r\n" + "#bsleep|sleepy|gotobed#k (Level 15 ~ 30)\r\n" + "#bchange#k (Level 21 ~ 30)") + sm.dispose() +if selection == 22: + sm.sendNext("These are the commands for #rBlack Dragon#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 15 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 15 ~ 30)\r\n" + "#biloveyou|loveyou#k (Level 15 ~ 30)\r\n" + "#bpoop#k (Level 15 ~ 30)\r\n" + "#bstupid|ihateyou|dummy#k (Level 15 ~ 30)\r\n" + "#btalk|chat|say#k (Level 15 ~ 30)\r\n" + "#bsleep|sleepy|gotobed#k (Level 15 ~ 30)\r\n" + "#bcutie, change#k (Level 21 ~ 30)") + sm.dispose() +if selection == 23: + sm.sendNext("These are the commands for #rJr. Reaper#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#bplaydead, poop#k (Level 1 ~ 30)\r\n" + "#btalk|chat|say#k (Level 1 ~ 30)\r\n" + "#biloveyou, hug#k (Level 1 ~ 30)\r\n" + "#bsmellmyfeet, rockout, boo#k (Level 1 ~ 30)\r\n" + "#btrickortreat#k (Level 1 ~ 30)\r\n" + "#bmonstermash#k (Level 1 ~ 30)") + sm.dispose() +if selection == 24: + sm.sendNext("These are the commands for #rPorcupine#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#biloveyou|hug|goodboy#k (Level 1 ~ 30)\r\n" + "#btalk|chat|say#k (Level 1 ~ 30)\r\n" + "#bcushion|sleep|knit|poop#k (Level 1 ~ 30)\r\n" + "#bcomb|beach#k (Level 10 ~ 30)\r\n" + "#btreeninja#k (Level 20 ~ 30)\r\n" + "#bdart#k (Level 20 ~ 30)") + sm.dispose() +if selection == 25: + sm.sendNext("These are the commands for #rSnowman#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#bloveyou, mylove, ilikeyou#k (Level 1 ~ 30)\r\n" + "#bmerrychristmas#k (Level 1 ~ 30)\r\n" + "#bcutie, adorable, cute, pretty#k (Level 1 ~ 30)\r\n" + "#bcomb, beach/bad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say/sleep, sleepy, gotobed#k (Level 10 ~ 30)\r\n" + "#bchang#k (Level 20 ~ 30)") + sm.dispose() +if selection == 26: + sm.sendNext("These are the commands for #rSkunk#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad/no/badgirl/badboy#k (Level 1 ~ 30)\r\n" + "#brestandrelax, poop#k (Level 1 ~ 30)\r\n" + "#btalk/chat/say, iloveyou#k (Level 1 ~ 30)\r\n" + "#bsnuggle/hug, sleep, goodboy#k (Level 1 ~ 30)\r\n" + "#bfatty, blind, badbreath#k (Level 10 ~ 30)\r\n" + "#bsuitup, bringthefunk#k (Level 20 ~ 30)") + sm.dispose() +if selection == 27: + sm.sendNext("In order to transfer the pet ability points, closeness and level, " + "Pet AP Reset Scroll is required. If you take this\r\n" + "scroll to Mar the Fairy in Ellinia, she will transfer the level and closeness of the pet to another one. " + "I am especially giving it to you because I can feel your heart for your pet. However, I can't give this out for free. " + "I can give you this book for 250,000 mesos. Oh, I almost forgot! Even if you have this book, it is no use if you do not have a new pet to transfer the Ability points.") + + if sm.sendAskYesNo("250,000 mesos will be deducted. Do you really want to buy?"): + if sm.getMesos() < 250000 or not sm.canHold(4160011): + sm.sendSayOkay("Please check if your inventory has empty slot or you don't have enough mesos.") + else: + sm.sendSayOkay("Thank you for your purchase.") + sm.deductMesos(250000) + sm.giveItem(4160011) diff --git a/scripts/npc/ludi028.py b/scripts/npc/ludi028.py new file mode 100755 index 0000000..48ad1d3 --- /dev/null +++ b/scripts/npc/ludi028.py @@ -0,0 +1,24 @@ +# Weaver (2040032) | Ludibrium Pet Walkway + + +selection = sm.sendNext("Do you have any business with me?#b\r\n" + "#L0#Please tell me about this place.#l\r\n" + "#L1#I'm here through a word from Mar the Fairy...#l") + +if selection == 0: + if sm.hasItem(4031128): + sm.sendNext("Jump over obstacles with your pet, and take that letter to my brother Trainer Neru. " + "Give him the letter and something good is going to happen to your pet.") + else: + if sm.sendAskYesNo("This is the road where you can go take a walk with your pet. " + "You can just walk around with it, or you can train your pet to go through the obstacles here. " + "If you aren't too close with your pet yet, that may present a problem and he will not follow your command as much... " + "\r\nSo, what do you think? Wanna train your pet?"): + sm.giveItem(4031128) + sm.sendSayOkay("Ok, here's the letter. " + "He wouldn't know I sent you if you just went there straight, " + "so go through the obstacles with your pet, go to the very top, and then talk to Trainer Neru to give him the letter. " + "It won't be hard if you pay attention to your pet while going through obstacles. " + "Good luck!") +elif selection == 1: + sm.sendSayOkay("Hey, are you sure you've met #bMar the Fairy#k? Don't lie to me if you've never met her before because it's obvious. That wasn't even a good lie!!") \ No newline at end of file diff --git a/scripts/npc/ludi029.py b/scripts/npc/ludi029.py new file mode 100755 index 0000000..03dd514 --- /dev/null +++ b/scripts/npc/ludi029.py @@ -0,0 +1,15 @@ +# Neru (2040033) | Ludibrium Pet Walkway +if sm.hasItem(4031128): + sm.sendNext("Eh, that's my brother's letter! " + "Probably scolding me for thinking I'm not working and stuff...Eh? " + "Ahhh...you followed my brother's advice and trained your pet and got up here, huh? " + "Nice!! Since you worked hard to get here, I'll boost your intimacy level with your pet.") + sm.consumeItem(4031128) + sm.sendSayOkay("What do you think? Don't you think you have gotten much closer with your pet? " + "If you have time, train your pet again on this obstacle course...of course, with my brother's permission.") + # Pet Closeness Gained +else: + sm.sendSayOkay("My brother told me to take care of the pet obstacle course, " + "but ... since I'm so far away from him, I can't help but wanting to goof around ...hehe, " + "since I don't see him in sight, might as well just chill for a few minutes.") + diff --git a/scripts/npc/ludi_move.py b/scripts/npc/ludi_move.py new file mode 100755 index 0000000..e5675ab --- /dev/null +++ b/scripts/npc/ludi_move.py @@ -0,0 +1,25 @@ +# Eos Magic Rock (2040024) | Ludibrium Eos Tower + +maps = [ +221023200, # Eos Tower F100 +221022300, # Eos Tower F91 +221022100, # Eos Tower F70 +221021700, # Eos Tower F66 +221021500, # Eos Tower F35 +221021100, # Eos Tower F31 +221020900, # Eos Tower F10 +221020000 # Eos Tower F1 +] + +mapString = "Where do you want to go?\r\n\r\n#b" +i = 0 +while i < len(maps): + if maps[i] == sm.getFieldID(): + i += 1 + continue + else: + mapString += "#L"+ str(i) +"##m"+ str(maps[i]) +"##l\r\n" + i += 1 +answer = sm.sendNext(mapString) + +sm.warp(maps[answer], 0) diff --git a/scripts/npc/mParkShuttle.py b/scripts/npc/mParkShuttle.py new file mode 100755 index 0000000..bda53e4 --- /dev/null +++ b/scripts/npc/mParkShuttle.py @@ -0,0 +1,11 @@ +# Monster Park Shuttle + +map = 100000000 +if sm.getFieldID() != 951000000: + map = 951000000 + + +response = sm.sendAskYesNo("Would you like to go to #m" + str(map) + "#?") + +if response: + sm.warp(map, 0) diff --git a/scripts/npc/mPark_retire.py b/scripts/npc/mPark_retire.py new file mode 100755 index 0000000..f1b3836 --- /dev/null +++ b/scripts/npc/mPark_retire.py @@ -0,0 +1,3 @@ +# Spiegelmann (9071005) | In Monster Park Maps +if sm.sendAskYesNo("Do you want to leave?"): + sm.warpInstanceOut(951000000) diff --git a/scripts/npc/magnus_boss.py b/scripts/npc/magnus_boss.py new file mode 100755 index 0000000..31f2634 --- /dev/null +++ b/scripts/npc/magnus_boss.py @@ -0,0 +1,57 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Normal", 160, 401060200, 20, EventType.NMagnus, 64800000], + ["Hard", 220, 401060100, 20, EventType.HMagnus, 64800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 401060000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(3001032) + + dialog = "Do you want to head to '#bTyrant's Throne Room#k' to fight \r\n#bMagnus#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Tyrant's Throne Room (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bMagnus#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bMagnus#k within the past 18 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif not sm.hasItem(4033406): + sm.sendSayOkay("You do not possess a #b#v 4033406 # #z 4033406 ##k.") + sm.dispose() + + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.MAGNUS_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + sm.consumeItem(4033406) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/magnus_out.py b/scripts/npc/magnus_out.py new file mode 100755 index 0000000..1630c41 --- /dev/null +++ b/scripts/npc/magnus_out.py @@ -0,0 +1,6 @@ +sm.setSpeakerID(3001021) +response = sm.sendAskYesNo("Do you wish to leave the battlefield?") + +if response: + sm.WarpInstanceOut(401060000) + sm.dispose() diff --git a/scripts/npc/make_alert.py b/scripts/npc/make_alert.py new file mode 100755 index 0000000..27be28a --- /dev/null +++ b/scripts/npc/make_alert.py @@ -0,0 +1,1936 @@ +# Henesys START +itemsHene = [ +[1452002, 1452003, 1452001, 1452000, 1452005, 1452006, 1452007], # Bows +[1462001, 1462002, 1462003, 1462000, 1462004, 1462005, 1462006, 1462007], # Xbows +[1082012, 1082013, 1082016, 1082048, 1082068, 1082071, 1082084, 1082089], # Gloves +[1082015,1082014,1082017,1082018,1082049,1082050,1082069,1082070,1082072,1082073,1082085,1082083,1082090,1082091], # Gloves Upgrades +[4003001,4003001,4003000], # Materials +[2060000,2061000,2060001,2061001,2060002,2061002] # Arrows +] + +nonEquipSuffixHene = ["with Tree Branches", "with Firewood", "(packs of 15)"] + +costHene = [ +[ # Bow Materials + [4003001,4000000], + [4011001,4003000], + [4003001,4000016], + [4011001,4021006,4003000], + [4011001,4011006,4021003,4021006,4003000], + [4011004,4021000,4021004,4003000], + [4021008,4011001,4011006,4003000,4000014] +], + +[ # Xbow Materials + [4003001,4003000], + [4011001,4003001,4003000], + [4011001,4003001,4003000], + [4011001,4021006,4021002,4003000], + [4011001,4011005,4021006,4003001,4003000], + [4021008,4011001,4011006,4021006,4003000], + [4021008,4011004,4003001,4003000], + [4021008,4011006,4021006,4003001,4003000] +], + +[ # Gloves Materials + [4000021,4000009], + [4000021,4000009,4011001], + [4000021,4000009,4011006], + [4000021,4011006,4021001], + [4011000,4011001,4000021,4003000], + [4011001,4021000,4021002,4000021,4003000], + [4011004,4011006,4021002,4000030,4003000], + [4011006,4011007,4021006,4000030,4003000] +], + +[ # Gloves Upgrade Materials + [1082013,4021003], + [1082013,4021000], + [1082016,4021000], + [1082016,4021008], + [1082048,4021003], + [1082048,4021008], + [1082068,4011002], + [1082068,4011006], + [1082071,4011006], + [1082071,4021008], + [1082084,4011000,4021000], + [1082084,4011006,4021008], + [1082089,4021000,4021007], + [1082089,4021007,4021008] +], + +[ # Create Material + [4000003], + [4000018], + [4011000,4011001] +], + +[ # Create Arrows + [4003001,4003004], + [4003001,4003004], + [4011000,4003001,4003004], + [4011000,4003001,4003004], + [4011001,4003001,4003005], + [4011001,4003001,4003005] +] +] + +costQHene = [ +[ # Bow Material Quantity + [5,30], + [1,3], + [30,50], + [2,2,8], + [5,5,3,3,30], + [7,6,3,35], + [1,10,3,40,50] +], + +[ # Xbow Material Quantity + [7,2], + [1,20,5], + [1,50,8], + [2,1,1,10], + [5,5,3,50,15], + [1,8,4,2,30], + [2,6,30,30], + [2,5,3,40,40] +], + +[ # Gloves Material Quantity + [15,20], + [20,20,2], + [40,50,2], + [50,2,1], + [1,3,60,15], + [3,1,3,80,25], + [3,1,2,40,35], + [2,1,8,50,50] +], + +[ # Glove Upgrade Materials Quantity + [1,2], + [1,1], + [1,3], + [1,1], + [1,3], + [1,1], + [1,4], + [1,2], + [1,4], + [1,2], + [1,1,5], + [1,2,2], + [1,5,1], + [1,2,2] +], + +[ # Create Materials Quantity + [10], + [5], + [1, 1] +], + +[ # Create Arrows Quantity + [1,1], + [1,1], + [1,3,10], + [1,3,10], + [1,5,15], + [1,5,15] +] +] + +costmesoHene = [ +[800,2000,3000,5000,30000,40000,80000], # Meso Cost Bow +[1000,2000,3000,10000,30000,50000,80000,200000], # Meso Cost Xbow +[5000,10000,15000,20000,30000,40000,50000,70000], # Meso Cost Glove +[7000,7000,10000,12000,15000,20000,22000,25000,30000,40000,55000,60000,70000,80000], # Meso Cost Upgrade Glove +[0,0,0], # Meso Cost Materials +[0,0,0,0,0,0] # Meso Cost Arrows +] +# Henesys END + + + +# Perion START +itemsPerion = [ +[4011000,4011001,4011002,4011003,4011004,4011005,4011006], # Mineral Refine +[4021000,4021001,4021002,4021003,4021004,4021005,4021006,4021007,4021008], # Jewel Refine +[1002042,1002041,1002002,1002044,1002003,1002040,1002007,1002052,1002011,1002058,1002009,1002056,1002087,1002088,1002049,1002050,1002047,1002048,1002099,1002098,1002085,1002028,1002022,1002101], # Helmet Refine +[1092014,1092013,1092010,1092011] # Shield Refine +] + +costPerion = [ +[ # Mineral Refine Materials + [4010000], + [4010001], + [4010002], + [4010003], + [4010004], + [4010005], + [4010006] +], + +[ # Jewel Refine Materials + [4020000], + [4020001], + [4020002], + [4020003], + [4020004], + [4020005], + [4020006], + [4020007], + [4020008] +], + +[ # Refine Helmet Materials + [1002001,4011002], + [1002001,4021006], + [1002043,4011001], + [1002043,4011002], + [1002039,4011001], + [1002039,4011002], + [1002051,4011001], + [1002051,4011002], + [1002059,4011001], + [1002059,4011002], + [1002055,4011001], + [1002055,4011002], + [1002027,4011002], + [1002027,4011006], + [1002005,4011006], + [1002005,4011005], + [1002004,4021000], + [1002004,4021005], + [1002021,4011002], + [1002021,4011006], + [1002086,4011002], + [1002086,4011004], + [1002100,4011007,4011001], + [1002100,4011007,4011002] +], + +[ # Refine Shield Materials + [1092012,4011003], + [1092012,4011002], + [1092009,4011007,4011004], + [1092009,4011007,4011003] +] +] + +costQPerion = [ +[ # Refine Mineral Materials Quantity + [10], + [10], + [10], + [10], + [10], + [10], + [10] +], + +[ # Refine Jewel Materials Quantity + [10], + [10], + [10], + [10], + [10], + [10], + [10], + [10], + [10] +], + +[ # Refine Helmet Materials Quantity + [1,1], + [1,1], + [1,1], + [1,1], + [1,1], + [1,1], + [1,2], + [1,2], + [1,3], + [1,3], + [1,3], + [1,3], + [1,4], + [1,4], + [1,5], + [1,5], + [1,3], + [1,3], + [1,5], + [1,6], + [1,5], + [1,4], + [1,1,7], + [1,1,7] +], + +[ # Refine Shield Materials Quantity + [1,10], + [1,10], + [1,1,15], + [1,1,15] +] +] + +costmesoPerion = [ +[300,300,300,500,500,500,800], # Meso Cost Mineral +[500,500,500,500,500,500,500,1000,3000],# Meso Cost Jewel +[500,300,500,800,500,800,1000,1500,1500,2000,1500,2000,2000,4000,4000,5000,8000,10000,12000,15000,20000,25000,30000,30000], # Meso Cost Helmet +[100000,100000,120000,120000] # Meso Cost Shield +] +# Perion END + + + +# Kerning Item START +itemsKerningItem = [ +[1082002,1082029,1082030,1082031,1082032,1082037,1082042,1082046,1082075,1082065,1082092], # Create Gloves +[1082033,1082034,1082038,1082039,1082043,1082044,1082047,1082045,1082076,1082074,1082067,1082066,1082093,1082094], # Upgrade Gloves +[1472001,1472004,1472007,1472008,1472011,1472014,1472018], # Create Claws +[1472002,1472003,1472005,1472006,1472009,1472010,1472012,1472013,1472015,1472016,1472017,1472019,1472020], # Upgrade Claws +[4003001,4003001,4003000] # Create Materials +] + +nonEquipSuffixKerningItem = ["with Tree Branches", "with Firewood", "(packs of 15)"] + +costKerningItem = [ +[ # Create Gloves Materials + [4000021], + [4000021,4000018], + [4000021,4000015], + [4000021,4000020], + [4011000,4000021], + [4011000,4011001,4000021], + [4011001,4000021,4003000], + [4011001,4011000,4000021,4003000], + [4021000,4000014,4000021,4003000], + [4021005,4021008,4000030,4003000], + [4011007,4011000,4021007,4000030,4003000] +], + +[ # Upgrade Gloves Materials + [1082032,4011002], + [1082032,4021004], + [1082037,4011002], + [1082037,4021004], + [1082042,4011004], + [1082042,4011006], + [1082046,4011005], + [1082046,4011006], + [1082075,4011006], + [1082075,4021008], + [1082065,4021000], + [1082065,4011006,4021008], + [1082092,4011001,4000014], + [1082092,4011006,4000027] +], + +[ # Create Claw Materials + [4011001,4000021,4003000], + [4011000,4011001,4000021,4003000], + [1472000,4011001,4000021,4003001], + [4011000,4011001,4000021,4003000], + [4011000,4011001,4000021,4003000], + [4011000,4011001,4000021,4003000], + [4011000,4011001,4000030,4003000] +], + +[ # Upgrade Claw Materials + [1472001,4011002], + [1472001,4011006], + [1472004,4011001], + [1472004,4011003], + [1472008,4011002], + [1472008,4011003], + [1472011,4011004], + [1472011,4021008], + [1472014,4021000], + [1472014,4011003], + [1472014,4021008], + [1472018,4021000], + [1472018,4021005] +], + +[ # Create Materials Materials + [4000003], + [4000018], + [4011000,4011001] +] +] + +costQKerningItem = [ +[ # Create Gloves Materials Quantity + [15], + [30,20], + [30,20], + [30,20], + [2,40], + [2,1,10], + [2,50,10], + [3,1,60,15], + [3,200,80,30], + [3,1,40,30], + [1,8,1,50,50] +], + +[ # Upgrade Gloves Materials Quantity + [1,1], + [1,1], + [1,2], + [1,2], + [1,2], + [1,1], + [1,3], + [1,2], + [1,4], + [1,2], + [1,5], + [1,2,1], + [1,7,200], + [1,7,150] +], + +[ # Create Claw Materials Quantity + [1,20,5], + [2,1,30,10], + [1,3,20,30], + [3,2,50,20], + [4,2,80,25], + [3,2,100,30], + [4,2,40,35] +], + +[ # Upgrade Claw Materials Quantity + [1,1], + [1,1], + [1,2], + [1,2], + [1,3], + [1,3], + [1,4], + [1,1], + [1,5], + [1,5], + [1,2], + [1,6], + [1,6] +], + +[ # Create Materials Materials Quantity + [10], + [5], + [1,1] +] +] + +costmesoKerningItem = [ +[1000,7000,7000,7000,10000,15000,25000,30000,40000,50000,70000],# Create Gloves meso +[5000,7000,10000,12000,15000,20000,22000,25000,40000,50000,55000,60000,70000,80000],# Upgrade Gloves meso +[2000,3000,5000,15000,30000,40000,50000], # Create Claw meso +[1000,2000,3000,5000,10000,15000,20000,25000,30000,30000,35000,40000,40000],# Upgrade Claw meso +[0,0,0] # Materials meso +] +# Kerning Item END + + + +# Kerning Ore START +itemsKerningOre = [ +[4011000,4011001,4011002,4011003,4011004,4011005,4011006], # Mineral Refine +[4021000,4021001,4021002,4021003,4021004,4021005,4021006,4021007,4021008], # Jewel Refine +[1472023,1472024,1472025], # Claw Refine +] + +costKerningOre = [ +[ # Mineral Refine Material + [4010000], + [4010001], + [4010002], + [4010003], + [4010004], + [4010005], + [4010006] +], + +[ # Jewel Refine Material + [4020000], + [4020001], + [4020002], + [4020003], + [4020004], + [4020005], + [4020006], + [4020007], + [4020008] +], + +[ # Claw Upgrade Material + [1472022,4011007,4021000,2012000], + [1472022,4011007,4021005,2012002], + [1472022,4011007,4021008,4000046] +] +] + +costQKerningOre = [ +[ # Mineral Refine Material Quantity + [10], + [10], + [10], + [10], + [10], + [10], + [10] +], + +[ # Jewel Refine Material Quantity + [10], + [10], + [10], + [10], + [10], + [10], + [10], + [10], + [10] +], + +[ # Claw Upgrade Material Quantity + [1,1,8,10], + [1,1,8,10], + [1,1,3,5] +] +] + +costmesoKerningOre = [ +[300,300,300,500,500,500,800], # Mineral Meso Cost +[500,500,500,500,500,500,500,1000,3000],# Jewel Meso Cost +[80000,80000,100000]# Claw Upgrade Meso Cost +] +# Kerning Ore END + + + +# ElNath Item START +itemsElNathItem = [ +[1072147,1072148,1072149,1072154,1072155,1072156,1072210,1072211,1072212], # Warrior Shoes +[1072136,1072137,1072138,1072139,1072157,1072158,1072159,1072160,1072177,1072178,1072179], # Magician Shoes +[1072144,1072145,1072146,1072164,1072165,1072166,1072167,1072182,1072183,1072184,1072185], # Archer Shoes +[1072150,1072151,1072152,1072161,1072162,1072163,1072172,1072173,1072174], # Thief Shoes +[1072306,1072309,1072312] # Pirate Shoes +] + +costElNathItem = [ +[ # Warrior Shoes Materials + [4021008,4011007,4021005,4000030,4003000], # x + [4021008,4011007,4011005,4000030,4003000], + [4021008,4011007,4021000,4000030,4003000], + [4005000,4005002,4011002,4000048,4003000], + [4005000,4005002,4011005,4000048,4003000], # x + [4005000,4005002,4021008,4000048,4003000], + [4005000,4005002,4021000,4000030,4003000], + [4005000,4005002,4021002,4000030,4003000], + [4005000,4005002,4021008,4000030,4003000] # x +], + +[ # Magician Shoes Materials + [4021009,4011006,4011005,4000030,4003000], + [4021009,4011006,4021003,4000030,4003000], + [4021009,4011006,4011003,4000030,4003000], + [4021009,4011006,4021002,4000030,4003000], + [4005001,4005003,4021002,4000051,4003000], + [4005001,4005003,4021000,4000051,4003000], + [4005001,4005003,4011003,4000051,4003000], + [4005001,4005003,4011006,4000051,4003000], + [4005001,4005003,4021003,4000030,4003000], + [4005001,4005003,4021001,4000030,4003000], + [4005001,4005003,4021008,4000030,4003000] +], + +[ # Archer Shoes Materials + [4011006,4021000,4021007,4000030,4003000], + [4011006,4021005,4021007,4000030,4003000], + [4011006,4021003,4021007,4000030,4003000], + [4005002,4005000,4021005,4000055,4003000], + [4005002,4005000,4021004,4000055,4003000], + [4005002,4005000,4021003,4000055,4003000], + [4005002,4005000,4021008,4000055,4003000], + [4005002,4005000,4021002,4000030,4003000], + [4005002,4005000,4021000,4000030,4003000], + [4005002,4005000,4021003,4000030,4003000], + [4005002,4021008,4000030,4003000] +], + +[ # Thief Shoes Materials + [4021007,4011007,4021000,4000030,4003000], + [4021007,4011007,4011006,4000030,4003000], + [4021007,4011007,4021008,4000030,4003000], + [4005003,4005000,4021001,4000051,4003000], + [4005003,4005002,4021005,4000051,4003000], + [4005002,4005003,4021000,4000051,4003000], + [4005000,4005003,4021003,4000030,4003000], + [4005002,4005003,4021000,4000030,4003000], + [4005003,4005002,4021008,4000030,4003000] +], + +[ # Pirate Shoes Materials + [4021008,4011007,4021005,4000030,4003000], + [4005000,4005002,4011005,4000048,4003000], + [4005000,4005002,4021008,4000030,4003000] +] +] + +costQElNathItem = [ +[ # Warrior Shoes Materials Quantity + [1,1,8,80,55], # x + [1,1,8,80,55], + [1,1,8,80,55], + [1,3,5,100,55], + [2,2,5,100,55], # x + [3,1,1,100,55], + [2,3,7,90,65], + [3,2,7,90,65], + [4,1,2,90,65] # x +], + +[ # Archer Shoes Materials Quantity + [1,1,8,80,55], + [1,1,8,80,55], + [1,1,8,80,55], + [1,3,5,100,55], + [2,2,5,100,55], + [3,1,1,100,55], + [2,3,7,90,65], + [3,2,7,90,65], + [4,1,2,90,65] +], + +[ # Magician Shoes Materials Quantity + [5,8,1,75,50], + [5,8,1,75,50], + [5,8,1,75,50], + [1,3,5,100,55], + [2,2,5,100,55], + [2,2,5,100,55], + [3,1,1,100,55], + [2,3,7,90,60], + [3,2,7,90,60], + [4,1,7,90,60], + [5,2,90,60] +], + +[ # Thief Shoes Materials Quantity + [1,1,8,75,50], + [1,1,5,75,50], + [1,1,1,75,50], + [1,3,5,100,55], + [1,3,5,100,55], + [1,3,5,100,55], + [3,2,7,90,60], + [3,2,7,90,60], + [3,2,7,90,60] +], + +[ # Pirate Shoes Materials Quantity + [1,1,8,80,55], + [2,2,5,100,55], + [4,1,2,90,65] +] +] + +costmesoElNathItem = [ +[60000,60000,60000,70000,70000,70000,80000,80000,80000], +[60000,60000,60000,70000,70000,70000,70000,80000,80000,80000,80000], +[60000,60000,60000,60000,70000,70000,70000,70000,80000,80000,80000], +[60000,60000,60000,70000,70000,70000,80000,80000,80000], +[60000,70000,80000] +] +# ElNath Item END + + + +# ElNath Refine START +itemsElNathRefine = [ +[4011000,4011001,4011002,4011003,4011004,4011005,4011006], # Mineral Refine +[4021000,4021001,4021002,4021003,4021004,4021005,4021006,4021007,4021008], # Jewel Refine +[4011007,4021009], # Rock Refine +[4005000,4005001,4005002,4005003,4005004], # Crystal Refine +[4003001,4003001,4003000], # Material Refine +[2060000,2061000,2060001,2061001,2060002,2061002] # Create Arrows +] + +nonEquipSuffixElNathRefine = ["with Tree Branches", "with Firewood", "(packs of 15)"] + +costElNathRefine = [ +[ # Mineral Refine Materials + [4010000], + [4010001], + [4010002], + [4010003], + [4010004], + [4010005], + [4010006] +], + +[ # Jewel Refine Materials + [4020000], + [4020001], + [4020002], + [4020003], + [4020004], + [4020005], + [4020006], + [4020007], + [4020008] +], + +[ # Rock Refine Materials + [4011000,4011001,4011002,4011003,4011004,4011005,4011006], + [4021000,4021001,4021002,4021003,4021004,4021005,4021006,4021007,4021008] +], + +[ # Crystal Refine Materials + [4004000], + [4004001], + [4004002], + [4004003], + [4004004] +], + +[ # Material Refine Materials + [4000003], + [4000018], + [4011000,4011001] +], + +[ # Create Arrows Materials + [4003001,4003004], + [4003001,4003004], + [4011000,4003001,4003004], + [4011000,4003001,4003004], + [4011001,4003001,4003005], + [4011001,4003001,4003005] +] +] + +costQElNathRefine = [ +[ # Mineral Refine Material Quantity + [10], + [10], + [10], + [10], + [10], + [10], + [10] +], + +[ # Jewel Refine Material Quantity + [10], + [10], + [10], + [10], + [10], + [10], + [10], + [10], + [10] +], + +[ # Rock Refine Material Quantity + [1,1,1,1,1,1,1], + [1,1,1,1,1,1,1,1,1] +], + +[ # Crystal Refine Material Quantity + [10], + [10], + [10], + [10], + [10] +], + +[ # Refine Material Material Quantity + [10], + [5], + [1,1] +], + +[ # Create Arrow Material Quantity + [1,1], + [1,1], + [1,3,10], + [1,3,10], + [1,5,15], + [1,5,15] +] +] + +costmesoElNathRefine = [ +[300,300,300,500,500,500,800], # Mineral Refine Meso Cost +[500,500,500,500,500,500,500,1000,3000], # Jewel Refine Meso Cost +[10000,15000], # Rock Refine Meso Cost +[5000,5000,5000,5000,1000000], # Crystal Refine Meso Cost +[0,0,0],# Material Refine Meso Cost +[0,0,0,0,0,0], # Create Arrows Meso Cost +] +# ElNath Refine END + + + +# Ludibrium Shoes START +itemsLudiShoes = [ +[1072003,1072039,1072040,1072041,1072002,1072112,1072113,1072000,1072126,1072127,1072132,1072133,1072134,1072135], # Warrior Shoes +[1072075,1072076,1072077,1072078,1072089,1072090,1072091,1072114,1072115,1072116,1072117,1072140,1072141,1072142,1072143,1072136,1072137,1072138,1072139], # Magician Shoes +[1072079,1072080,1072081,1072082,1072083,1072101,1072102,1072103,1072118,1072119,1072120,1072121,1072122,1072123,1072124,1072125], # Archer Shoes +[1072032,1072033,1072035,1072036,1072104,1072105,1072106,1072107,1072108,1072109,1072110,1072128,1072130,1072129,1072131], # Thief Shoes +[1072294,1072297,1072300,1072303] # Pirate Shoes +] + +costLudiShoes = [ +[ # Warrior Shoes + [4021003,4011001,4000021,4003000], # x + [4011002,4011001,4000021,4003000], + [4011004,4011001,4000021,4003000], + [4021000,4011001,4000021,4003000], + [4011001,4021004,4000021,4000030,4003000], # x + [4011002,4021004,4000021,4000030,4003000], + [4021008,4021004,4000021,4000030,4003000], + [4011003,4000021,4000030,4003000,4000103], + [4011005,4021007,4000030,4003000,4000104], + [4011002,4021007,4000030,4003000,4000105], # x + [4021008,4011001,4021003,4000030,4003000], + [4021008,4011001,4011002,4000030,4003000], + [4021008,4011001,4011005,4000030,4003000], + [4021008,4011001,4011006,4000030,4003000] # x +], + +[ # Magician Shoes + [4021000,4000021,4003000], + [4021002,4000021,4003000], + [4011004,4000021,4003000], + [4021008,4000021,4003000], + [4021001,4021006,4000021,4000030,4003000], + [4021000,4021006,4000021,4000030,4003000], + [4021008,4021006,4000021,4000030,4003000], + [4021000,4000030,4000110,4003000], + [4021005,4000030,4000111,4003000], + [4011006,4021007,4000030,4000100,4003000], + [4021008,4021007,4000030,4000112,4003000], + [4021009,4011006,4021000,4000030,4003000], + [4021009,4011006,4021005,4000030,4003000], + [4021009,4011006,4021001,4000030,4003000], + [4021009,4011006,4021003,4000030,4003000] +], + +[ # Archer Shoes + [4000021,4021000,4003000], + [4000021,4021005,4003000], + [4000021,4021003,4003000], + [4000021,4021004,4003000], + [4000021,4021006,4003000], + [4021002,4021006,4000030,4000021,4003000], + [4021003,4021006,4000030,4000021,4003000], + [4021000,4021006,4000030,4000021,4003000], + [4021000,4003000,4000030,4000106], + [4021006,4003000,4000030,4000107], + [4011003,4003000,4000030,4000108], + [4021002,4003000,4000030,4000099], + [4011001,4021006,4021008,4000030,4003000,4000033], + [4011001,4021006,4021008,4000030,4003000,4000032], + [4011001,4021006,4021008,4000030,4003000,4000041], + [4011001,4021006,4021008,4000030,4003000,4000042] +], + +[ # Thief Shoes + [4011000,4000021,4003000], + [4011001,4000021,4003000], + [4011004,4000021,4003000], + [4011006,4000021,4003000], + [4021000,4021004,4000021,4000030,4003000], + [4021003,4021004,4000021,4000030,4003000], + [4021002,4021004,4000021,4000030,4003000], + [4021000,4000030,4000113,4003000], + [4021003,4000030,4000095,4003000], + [4021006,4000030,4000096,4003000], + [4021005,4000030,4000097,4003000], + [4011007,4021005,4000030,4000114,4003000], + [4011007,4021000,4000030,4000115,4003000], + [4011007,4021003,4000030,4000109,4003000], + [4011007,4021001,4000030,4000036,4003000] +], + +[ # Pirate Shoes + [4021003,4011001,4000021,4003000], + [4011001,4021004,4000021,4000030,4003000], + [4011002,4021007,4000030,4003000,4000105], + [4021008,4011001,4011006,4000030,4003000] +] +] + +costQLudiShoes = [ +[ # Warrior Shoes + [4,2,45,15],# x + [4,2,45,15], + [4,2,45,15], + [4,2,45,15], + [3,1,30,20,25], # x + [3,1,30,20,25], + [2,1,30,20,25], + [4,100,40,30,100], + [4,1,40,30,100], + [4,1,40,30,100],# x + [1,3,6,65,45], + [1,3,6,65,45], + [1,3,6,65,45], + [1,3,6,65,45] # x +], + +[ # Magician Shoes + [2,50,15], + [2,50,15], + [2,50,15], + [1,50,15], + [3,1,30,15,20], + [3,1,30,15,20], + [2,1,40,25,20], + [4,40,100,25], + [4,40,100,25], + [2,1,40,100,25], + [2,1,40,100,30], + [1,3,3,60,40], + [1,3,3,60,40], + [1,3,3,60,40], + [1,3,3,60,40] +], + +[ # Archer Shoes + [50,2,15], + [50,2,15], + [50,2,15], + [50,2,15], + [50,2,15], + [3,1,15,30,20], + [3,1,15,30,20], + [3,1,15,30,20], + [4,30,45,100], + [4,30,45,100], + [5,30,45,100], + [5,30,45,100], + [3,3,1,60,35,80], + [3,3,1,60,35,150], + [3,3,1,60,35,100], + [3,3,1,60,35,250] +], + +[ # Thief Shoes + [3,50,15], + [3,50,15], + [2,50,15], + [2,50,15], + [3,1,30,15,20], + [3,1,30,15,20], + [3,1,30,15,20], + [5,45,100,30], + [4,45,100,30], + [4,45,100,30], + [4,45,100,30], + [2,3,50,100,35], + [2,3,50,100,35], + [2,3,50,100,35], + [2,3,50,80,35] +], + +[ # Pirate Shoes + [4,2,45,15], + [3,1,30,20,25], + [4,1,40,30,100], + [1,3,6,65,45] +] +] + +costmesoLudiShoes = [ +[20000,20000,20000,20000,22000,22000,25000,38000,38000,38000,50000,50000,50000,50000], # Warrior Shoes +[19000,19000,19000,19000,19000,19000,20000,20000,20000,32000,32000,40000,40000,50000,50000,50000,50000],# Magician Shoes +[18000,18000,18000,18000,20000,20000,22000,30000,30000,35000,40000,50000,50000,50000,50000],# Archer Shoes +[19000,19000,19000,21000,20000,20000,20000,40000,32000,35000,35000,50000,50000,50000,50000],# Thief Shoes +[20000,22000,38000,50000] # Pirate Shoes +] +# Ludibrium Shoes END + + + +# Ludirbium Gloves START +itemsLudiGloves = [ +[1082007,1082008,1082023,1082009], # Warrior +[1082051,1082054,1082062,1082081], # Magician +[1082048,1082068,1082071,1082084], # Archer +[1082042,1082046,1082075,1082065], # Thief +[1082189,1082192,1082195,1082198] # Pirate +] + +costLudiGloves = [ +[ # Warrior + [4011000,4011001,4003000], + [4000021,4011001,4003000], + [4000021,4011001,4003000], + [4011001,4021007,4000030,4003000] +], + +[ # Magician + [4000021,4021006,4021000], + [4000021,4011006,4011001,4021000], + [4000021,4021000,4021006,4003000], + [4021000,4011006,4000030,4003000] +], + +[ # Archer + [4000021,4011006,4021001], + [4011000,4011001,4000021,4003000], + [4011001,4021000,4021002,4000021,4003000], + [4011004,4011006,4021002,4000030,4003000] +], + +[ # Thief + [4011001,4000021,4003000], + [4011001,4011000,4000021,4003000], + [4021000,4000101,4000021,4003000], + [4021005,4021008,4000030,4003000] +], + +[ # Pirate + [4011000,4011001,4003000], + [4000021,4011001,4003000], + [4000021,4011001,4003000], + [4011001,4021007,4000030,4003000] +] +] + +costQLudiGloves = [ +[ # Warrior + [3,2,15], + [30,4,15], + [50,5,40], + [3,2,30,45] +], + +[ # Magician + [60,1,2], + [70,1,3,2], + [80,3,3,30], + [3,2,35,40] +], + +[ # Archer + [50,2,1], + [1,3,60,15], + [3,1,3,80,25], + [3,1,2,40,35] +], + +[ # Thief + [2,50,10], + [3,1,60,15], + [3,100,80,30], + [3,1,40,30] +], + +[ # Pirate + [3,2,15], + [30,4,15], + [50,5,40], + [3,2,30,45] +] +] + +costmesoLudiGloves = [ +[18000,27000,36000,45000], # Warrior +[22500,27000,36000,45000], # Magician +[18000,27000,36000,45000], # Archer +[22500,27000,36000,45000], # Thief +[18000,27000,36000,45000], # Pirate +] +# Ludibrium Gloves END + + + +# Ellinia Item START +itemsElliniaItem = [ +[1082019,1082020,1082026,1082051,1082054,1082062,1082081,1082086], # Create Gloves +[1082021,1082022,1082027,1082028,1082052,1082053,1082055,1082056,1082063,1082064,1082082,1082080,1082087,1082088], # Upgrade Gloves +[1002065,1002013], # Upgrade Hat +[1372005,1372006,1372002,1372004,1372003,1372001,1372000,1372007], # Create Wand +[1382000,1382003,1382005,1382004,1382002,1382001] # Create Staff +] + +costElliniaItem = [ +[ # Create Gloves + [4000021], + [4000021,4011001], + [4000021,4011006], + [4000021,4021006,4021000], + [4000021,4011006,4011001,4021000], + [4000021,4021000,4021006,4003000], + [4021000,4011006,4000030,4003000], + [4011007,4011001,4021007,4000030,4003000] +], + +[ # Upgrade Gloves + [1082020,4011001], + [1082020,4021001], + [1082026,4021000], + [1082026,4021008], + [1082051,4021005], + [1082051,4021008], + [1082054,4021005], + [1082054,4021008], + [1082062,4021002], + [1082062,4021008], + [1082081,4021002], + [1082081,4021008], + [1082086,4011004,4011006], + [1082086,4021008,4011006] +], + +[ # Hat Upgrade + [1002064,4011001], + [1002064,4011006] +], + +[ # Create Wand + [4003001], + [4003001,4000001], + [4011001,4000009,4003000], + [4011002,4003002,4003000], + [4011002,4021002,4003000], + [4021006,4011002,4011001,4003000], + [4021006,4021005,4021007,4003003,4003000], + [4011006,4021003,4021007,4021002,4003002,4003000] +], + +[ # Create Staff + [4003001], + [4021005,4011001,4003000], + [4021003,4011001,4003000], + [4003001,4011001,4003000], + [4021006,4021001,4011001,4003000], + [4011001,4021006,4021001,4021005,4003000,4000010,4003003] +] +] + +costQElliniaItem = [ +[ # Create Gloves + [15], + [30,1], + [50,2], + [60,1,2], + [70,1,3,2], + [80,3,3,30], + [3,2,35,40], + [1,8,1,50,50] +], + +[ # Upgrade Gloves + [1,1], + [1,2], + [1,3], + [1,1], + [1,3], + [1,1], + [1,3], + [1,1], + [1,4], + [1,2], + [1,5], + [1,3], + [1,3,5], + [1,2,3] +], + +[ # Upgrade Hat + [1,3], + [1,3] +], + +[ # Create Wand + [5], + [10,50], + [1,30,5], + [2,1,10], + [3,1,10], + [5,3,1,15], + [5,5,1,1,20], + [4,3,2,1,1,30] +], + +[ # Create Staff + [5], + [1,1,5], + [1,1,5], + [50,1,10], + [2,1,1,15], + [8,5,5,5,30,50,1] +] +] + +costmesoElliniaItem = [ +[7000,15000,20000,25000,30000,40000,50000,70000], # Create Gloves +[20000,25000,30000,40000,35000,40000,40000,45000,45000,50000,55000,60000,70000,80000], # Upgrade Gloves +[40000,50000], # Upgrade Hat +[1000,3000,5000,12000,30000,60000,120000,200000], # Create Wand +[2000,2000,2000,5000,12000,180000] # Create Staff +] +# Ellinia Item END + + + +# Ariant Refine START +itemsAriantRefine = [ +[4011000,4011001,4011002,4011003,4011004,4011005,4011006,4011008], # Mineral Refine +[4021000,4021001,4021002,4021003,4021004,4021005,4021006,4021007,4021008], # Jewel Refine +[4005000,4005001,4005002,4005003], # Crystal Refine +] + +costAriantRefine = [ +[4010000,4010001,4010002,4010003,4010004,4010005,4010006,4010007], # Mineral Refine +[4020000,4020001,4020002,4020003,4020004,4020005,4020006,4020007,4020008], # Jewel Refine +[4004000,4004001,4004002,4004003] # Crystal Refine +] + +costQAriantRefine = [ +[10,10,10,10,10,10,10,10], # Mineral Refine +[10,10,10,10,10,10,10,10,10], # Jewel Refine +[10,10,10,10] # Crystal Refine +] + +costmesoAriantRefine = [ +[270,270,270,450,450,450,720,270], # Mineral Refine +[450,450,450,450,450,450,450,900,2700], # Jewel Refine +[4500,4500,4500,4500] # Crystal Refine +] +# Ariant Refine END + + + +if parentID == 1012002: + # Vicious | Item Maker + selection1 = sm.sendNext("Hello. I am Vicious, retired Sniper. However, I used to be the top student of Athena Pierce. Though I no longer hunt, I can make some archer items that will be useful for you...\r\n#b" + "#L0#Create a bow#l \r\n" + "#L1#Create a crossbow#l \r\n" + "#L2#Create gloves#l \r\n" + "#L3#Upgrade gloves#l \r\n" + "#L4#Create materials#l \r\n" + "#L5#Create arrows#l \r\n" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsHene[selection1]): + if selection1 == 4: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsHene[selection1][i]) + "# " + str(nonEquipSuffixHene[i]) + else: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsHene[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + + if selection1 == 4 or selection1 == 5: + materialStr = "You want #z" + str(itemsHene[selection1][selection2]) + "#s? \r\nIn that case, I'm going to need specific items from you in order to make it." + else: + materialStr = "You want a #z" + str(itemsHene[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costHene[selection1][selection2]): + materialStr += "\r\n" + str(costQHene[selection1][selection2][i]) + "x #z" + str(costHene[selection1][selection2][i]) + "#" + i += 1 + if costmesoHene[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoHene[selection1][selection2]) + " mesos" + if selection1 == 4 or selection1 == 5: + materialStr += "\r\n\r\nHow many do you want me to make?" + selection3 = sm.sendAskNumber(materialStr, 1, 1, 50) + else: + response = sm.sendAskYesNo(materialStr) + + + if response: + multiplier = 1 + if selection1 == 4 or selection1 == 5: + multiplier = selection3 + + if sm.getMesos() < costmesoHene[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costHene[selection1][selection2]): + complete = sm.hasItem(costHene[selection1][selection2][i], (costQHene[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsHene[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costHene[selection1][selection2]): + sm.consumeItem(costHene[selection1][selection2][i], (costQHene[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoHene[selection1][selection2] > 0: + sm.giveMesos(-(costmesoHene[selection1][selection2] * multiplier)) + + if itemsHene[selection1][selection2] >= 2060000 and itemsHene[selection1][selection2] <= 2060002: + multiplier2 = 1000 - (itemsHene[selection1][selection2] - 2060000) * 100 + elif itemsHene[selection1][selection2] >= 2061000 and itemsHene[selection1][selection2] <= 2061002: + multiplier2 = 1000 - (itemsHene[selection1][selection2] - 2061000) * 100 + elif itemsHene[selection1][selection2] == 4003000: + multiplier2 = 15 + else: + multiplier2 = 1 + + sm.giveItem(itemsHene[selection1][selection2], (multiplier * multiplier2)) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 1022003: + +# Mr. Thunder | Repair Durability + selection1 = sm.sendNext("hm? Who might you be? Oh, you've heard about my forging skills? In that case, I'd be glad to process some of your ores... for a fee.#b" + "\r\n#L0#Refine a mineral ore#l" + "\r\n#L1#Refine a jewel ore#l" + "\r\n#L2#Upgrade a helmet#l" + "\r\n#L3#Upgrade a shield#l" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsPerion[selection1]): + listStr += "\r\n#L" + str(i) + "##z" + str(itemsPerion[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + if selection1 == 0 or selection1 == 1: + materialStr = "You want #z" + str(itemsPerion[selection1][selection2]) + "#s? \r\nIn that case, I'm going to need specific items from you in order to make it." + else: + materialStr = "You want a #z" + str(itemsPerion[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costPerion[selection1][selection2]): + materialStr += "\r\n" + str(costQPerion[selection1][selection2][i]) + "x #z" + str(costPerion[selection1][selection2][i]) + "#" + i += 1 + if costmesoPerion[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoPerion[selection1][selection2]) + " mesos" + if selection1 == 0 or selection1 == 1: + materialStr += "\r\n\r\nHow many do you want me to make?" + selection3 = sm.sendAskNumber(materialStr, 1, 1, 50) + else: + response = sm.sendAskYesNo(materialStr) + + + if response: + multiplier = 1 + if selection1 == 0 or selection1 == 1: + multiplier = selection3 + + if sm.getMesos() < costmesoPerion[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costPerion[selection1][selection2]): + complete = sm.hasItem(costPerion[selection1][selection2][i], (costQPerion[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsPerion[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costPerion[selection1][selection2]): + sm.consumeItem(costPerion[selection1][selection2][i], (costQPerion[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoPerion[selection1][selection2] > 0: + sm.giveMesos(-(costmesoPerion[selection1][selection2] * multiplier)) + + + sm.giveItem(itemsPerion[selection1][selection2], multiplier) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 1052002: + +# JM From Tha Streetz | Item Creator + selection1 = sm.sendNext("Pst... If you have the right goods, I can turn it into something nice...#b" + "\r\n#L0#Create a glove#l" + "\r\n#L1#Upgrade a glove#l" + "\r\n#L2#Create a claw#l" + "\r\n#L3#Upgrade a claw#l" + "\r\n#L4#Create materials#l" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsKerningItem[selection1]): + if selection1 == 4: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsKerningItem[selection1][i]) + "# " + str(nonEquipSuffixKerningItem[i]) + else: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsKerningItem[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + if selection1 == 4: + materialStr = "You want #z" + str(itemsKerningItem[selection1][selection2]) + "#s? \r\nIn that case, I'm going to need specific items from you in order to make it." + else: + materialStr = "You want a #z" + str(itemsKerningItem[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costKerningItem[selection1][selection2]): + materialStr += "\r\n" + str(costQKerningItem[selection1][selection2][i]) + "x #z" + str(costKerningItem[selection1][selection2][i]) + "#" + i += 1 + if costmesoKerningItem[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoKerningItem[selection1][selection2]) + " mesos" + if selection1 == 4: + materialStr += "\r\n\r\nHow many do you want me to make?" + selection3 = sm.sendAskNumber(materialStr, 1, 1, 50) + else: + response = sm.sendAskYesNo(materialStr) + + + if response: + multiplier = 1 + if selection1 == 4: + multiplier = selection3 + + if sm.getMesos() < costmesoKerningItem[selection1][selection2]: + sm.sendSayOkay("Where's the mesos, man?!") + sm.dispose() + + i = 0 + while i < len(costKerningItem[selection1][selection2]): + complete = sm.hasItem(costKerningItem[selection1][selection2][i], (costQKerningItem[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsKerningItem[selection1][selection2]) == False: + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + i = 0 + while i < len(costKerningItem[selection1][selection2]): + sm.consumeItem(costKerningItem[selection1][selection2][i], (costQKerningItem[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoKerningItem[selection1][selection2] > 0: + sm.giveMesos(-(costmesoKerningItem[selection1][selection2] * multiplier)) + + multiplier2 = 1 + if itemsKerningItem[selection1][selection2] == 4003000: + multiplier2 = 15 + + sm.giveItem(itemsKerningItem[selection1][selection2], (multiplier * multiplier2)) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 1052003: + +# Chris | Ore Refiner + selection1 = sm.sendNext("Yes, I do own this forge. If you're willing to pay, I can offer you some of my services.#b" + "\r\n#L0#Refine a mineral ore#l" + "\r\n#L1#Refine a jewel ore#l" + "\r\n#L2#Upgrade a claw#l" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsKerningOre[selection1]): + listStr += "\r\n#L" + str(i) + "##z" + str(itemsKerningOre[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + if selection1 == 0 or selection1 == 1: + materialStr = "You want #z" + str(itemsKerningOre[selection1][selection2]) + "#s? \r\nIn that case, I'm going to need specific items from you in order to make it." + else: + materialStr = "You want a #z" + str(itemsKerningOre[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costKerningOre[selection1][selection2]): + materialStr += "\r\n" + str(costQKerningOre[selection1][selection2][i]) + "x #z" + str(costKerningOre[selection1][selection2][i]) + "#" + i += 1 + if costmesoKerningOre[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoKerningOre[selection1][selection2]) + " mesos" + if selection1 == 0 or selection1 == 1: + materialStr += "\r\n\r\nHow many do you want me to make?" + selection3 = sm.sendAskNumber(materialStr, 1, 1, 50) + else: + response = sm.sendAskYesNo(materialStr) + + + if response: + multiplier = 1 + if selection1 == 0 or selection1 == 1: + multiplier = selection3 + + if sm.getMesos() < costmesoKerningOre[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costKerningOre[selection1][selection2]): + complete = sm.hasItem(costKerningOre[selection1][selection2][i], (costQKerningOre[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsKerningOre[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costKerningOre[selection1][selection2]): + sm.consumeItem(costKerningOre[selection1][selection2][i], (costQKerningOre[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoKerningOre[selection1][selection2] > 0: + sm.giveMesos(-(costmesoKerningOre[selection1][selection2] * multiplier)) + + + sm.giveItem(itemsKerningOre[selection1][selection2], multiplier) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 2020002: + +# Gordon | Shoemaker + selection1 = sm.sendNext("Hello there. El Nath winters are incredibly cold, you're going to need a warm pair of shoes to survive.#b" + "\r\n#L0#Create warrior shoes#l" + "\r\n#L1#Create magician shoes#l" + "\r\n#L2#Create archer shoes#l" + "\r\n#L3#Create thief shoes#l" + "\r\n#L4#Create pirate shoes#l" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsElNathItem[selection1]): + listStr += "\r\n#L" + str(i) + "##z" + str(itemsElNathItem[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + materialStr = "You want a #z" + str(itemsElNathItem[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costElNathItem[selection1][selection2]): + materialStr += "\r\n" + str(costQElNathItem[selection1][selection2][i]) + "x #z" + str(costElNathItem[selection1][selection2][i]) + "#" + i += 1 + if costmesoElNathItem[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoElNathItem[selection1][selection2]) + " mesos" + response = sm.sendAskYesNo(materialStr) + + + if response: + multiplier = 1 + + if sm.getMesos() < costmesoElNathItem[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costElNathItem[selection1][selection2]): + complete = sm.hasItem(costElNathItem[selection1][selection2][i], (costQElNathItem[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsElNathItem[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costElNathItem[selection1][selection2]): + sm.consumeItem(costElNathItem[selection1][selection2][i], (costQElNathItem[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoElNathItem[selection1][selection2] > 0: + sm.giveMesos(-(costmesoElNathItem[selection1][selection2] * multiplier)) + + + sm.giveItem(itemsElNathItem[selection1][selection2], multiplier) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 2020000 or parentID == 2040016: + +# Vogen | Refining Expert & Pi | Refining Expert + selection1 = sm.sendNext("Hm? Who might you be? Oh, you've heard about my forging skills? In that case, I'd be glad to process some of your ores... for a fee.#b\r\n#b" + "#L0#Refine a mineral ore#l \r\n" + "#L1#Refine a jewel ore#l \r\n" + "#L2#Refine a rare jewel ore#l \r\n" + "#L3#Refine a crystal ore#l \r\n" + "#L4#Create materials#l \r\n" + "#L5#Create arrows#l \r\n" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsElNathRefine[selection1]): + if selection1 == 4: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsElNathRefine[selection1][i]) + "# " + str(nonEquipSuffixElNathRefine[i]) + else: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsElNathRefine[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + if selection1 == 4 or selection1 == 5: + materialStr = "You want #z" + str(itemsElNathRefine[selection1][selection2]) + "#s? \r\nIn that case, I'm going to need specific items from you in order to make it." + else: + materialStr = "You want a #z" + str(itemsElNathRefine[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costElNathRefine[selection1][selection2]): + materialStr += "\r\n" + str(costQElNathRefine[selection1][selection2][i]) + "x #z" + str(costElNathRefine[selection1][selection2][i]) + "#" + i += 1 + if costmesoElNathRefine[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoElNathRefine[selection1][selection2]) + " mesos" + materialStr += "\r\n\r\nHow many do you want me to make?" + selection3 = sm.sendAskNumber(materialStr, 1, 1, 50) + + + multiplier = selection3 + + if sm.getMesos() < costmesoElNathRefine[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costElNathRefine[selection1][selection2]): + complete = sm.hasItem(costElNathRefine[selection1][selection2][i], (costQElNathRefine[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsElNathRefine[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costElNathRefine[selection1][selection2]): + sm.consumeItem(costElNathRefine[selection1][selection2][i], (costQElNathRefine[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoElNathRefine[selection1][selection2] > 0: + sm.giveMesos(-(costmesoElNathRefine[selection1][selection2] * multiplier)) + + if itemsElNathRefine[selection1][selection2] >= 2060000 and itemsElNathRefine[selection1][selection2] <= 2060002: + multiplier2 = 1000 - (itemsElNathRefine[selection1][selection2] - 2060000) * 100 + elif itemsElNathRefine[selection1][selection2] >= 2061000 and itemsElNathRefine[selection1][selection2] <= 2061002: + multiplier2 = 1000 - (itemsElNathRefine[selection1][selection2] - 2061000) * 100 + elif itemsElNathRefine[selection1][selection2] == 4003000: + multiplier2 = 15 + else: + multiplier2 = 1 + + sm.giveItem(itemsElNathRefine[selection1][selection2], (multiplier * multiplier2)) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + + + +elif parentID == 2040021: + +# Tara | Shoe maker + selection1 = sm.sendNext("Hello, and welcome to the Ludibrium Shoe Store. How can I help you today? #b" + "\r\n#L0#Create warrior shoes#l" + "\r\n#L1#Create magician shoes#l" + "\r\n#L2#Create archer shoes#l" + "\r\n#L3#Create thief shoes#l" + "\r\n#L4#Create pirate shoes#l" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsLudiShoes[selection1]): + listStr += "\r\n#L" + str(i) + "##z" + str(itemsLudiShoes[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + materialStr = "You want a #z" + str(itemsLudiShoes[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costLudiShoes[selection1][selection2]): + materialStr += "\r\n" + str(costQLudiShoes[selection1][selection2][i]) + "x #z" + str(costLudiShoes[selection1][selection2][i]) + "#" + i += 1 + if costmesoLudiShoes[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoLudiShoes[selection1][selection2]) + " mesos" + response = sm.sendAskYesNo(materialStr) + + + if response: + multiplier = 1 + + if sm.getMesos() < costmesoLudiShoes[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costLudiShoes[selection1][selection2]): + complete = sm.hasItem(costLudiShoes[selection1][selection2][i], (costQLudiShoes[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsLudiShoes[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costLudiShoes[selection1][selection2]): + sm.consumeItem(costLudiShoes[selection1][selection2][i], (costQLudiShoes[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoLudiShoes[selection1][selection2] > 0: + sm.giveMesos(-(costmesoLudiShoes[selection1][selection2] * multiplier)) + + + sm.giveItem(itemsLudiShoes[selection1][selection2], multiplier) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 2040020: + +# Sarah | Glove maker + selection1 = sm.sendNext("Hello, and welcome to the Ludibrium Glove Store. How can I help you today?#b" + "\r\n#L0#Create warrior gloves#l" + "\r\n#L1#Create magician gloves#l" + "\r\n#L2#Create archer gloves#l" + "\r\n#L3#Create thief gloves#l" + "\r\n#L4#Create pirate gloves#l" + ) + + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsLudiGloves[selection1]): + listStr += "\r\n#L" + str(i) + "##z" + str(itemsLudiGloves[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + materialStr = "You want a #z" + str(itemsLudiGloves[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costLudiGloves[selection1][selection2]): + materialStr += "\r\n" + str(costQLudiGloves[selection1][selection2][i]) + "x #z" + str(costLudiGloves[selection1][selection2][i]) + "#" + i += 1 + if costmesoLudiGloves[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoLudiGloves[selection1][selection2]) + " mesos" + response = sm.sendAskYesNo(materialStr) + + + if response: + multiplier = 1 + + if sm.getMesos() < costmesoLudiGloves[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costLudiGloves[selection1][selection2]): + complete = sm.hasItem(costLudiGloves[selection1][selection2][i], (costQLudiGloves[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsLudiGloves[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costLudiGloves[selection1][selection2]): + sm.consumeItem(costLudiGloves[selection1][selection2][i], (costQLudiGloves[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoLudiGloves[selection1][selection2] > 0: + sm.giveMesos(-(costmesoLudiGloves[selection1][selection2] * multiplier)) + + + sm.giveItem(itemsLudiGloves[selection1][selection2], multiplier) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 1032002: + +# Francois | Item Creator + selection1 = sm.sendNext("Welcome to my eco-safe refining operation! What would you like today?#b" + "\r\n#L0#Create gloves#l" + "\r\n#L1#Upgrade gloves#l" + "\r\n#L2#Upgrade a hat#l" + "\r\n#L3#Create a wand#l" + "\r\n#L4#Create a staff#l" + ) + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsElliniaItem[selection1]): + listStr += "\r\n#L" + str(i) + "##z" + str(itemsElliniaItem[selection1][i]) + "#" + i += 1 + sm.sendNext(listStr) + + selection2 = answer + materialStr = "You want a #z" + str(itemsElliniaItem[selection1][selection2]) + "#? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costElliniaItem[selection1][selection2]): + materialStr += "\r\n" + str(costQElliniaItem[selection1][selection2][i]) + "x #z" + str(costElliniaItem[selection1][selection2][i]) + "#" + i += 1 + if costmesoElliniaItem[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoElliniaItem[selection1][selection2]) + " mesos" + response = sm.sendAskYesNo(materialStr) + + if response: + multiplier = 1 + + if sm.getMesos() < costmesoElliniaItem[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costElliniaItem[selection1][selection2]): + complete = sm.hasItem(costElliniaItem[selection1][selection2][i], (costQElliniaItem[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsElliniaItem[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costElliniaItem[selection1][selection2]): + sm.consumeItem(costElliniaItem[selection1][selection2][i], (costQElliniaItem[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoElliniaItem[selection1][selection2] > 0: + sm.giveMesos(-(costmesoElliniaItem[selection1][selection2] * multiplier)) + + + sm.giveItem(itemsElliniaItem[selection1][selection2], multiplier) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() + + + +elif parentID == 2100001: + +# Muhammad | Jewel Refiner + selection1 = sm.sendNext("Are you here to refine the ores of a mineral or a jewel? It doesn't matter how many ores you have, if you don't have them refined by a master like me, then they won't see the light of day. What do you think, do you want to refine them right now?\r\n#b" + "#L0#Refine a mineral ore#l \r\n" + "#L1#Refine a jewel ore#l \r\n" + "#L2#Refine a crystal ore#l \r\n" + ) + + listStr = "What item would you like to make? #b" + i = 0 + while i < len(itemsElNathRefine[selection1]): + if selection1 == 4: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsElNathRefine[selection1][i]) + "# " + str(nonEquipSuffixElNathRefine[i]) + else: + listStr += "\r\n#L" + str(i) + "##z" + str(itemsElNathRefine[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + + materialStr = "You want #z" + str(itemsElNathRefine[selection1][selection2]) + "#s? \r\nIn that case, I'm going to need specific items from you in order to make it." + i = 0 + while i < len(costElNathRefine[selection1][selection2]): + materialStr += "\r\n" + str(costQElNathRefine[selection1][selection2][i]) + "x #z" + str(costElNathRefine[selection1][selection2][i]) + "#" + i += 1 + if costmesoElNathRefine[selection1][selection2] > 0: + materialStr += "\r\n#i4031138#" + str(costmesoElNathRefine[selection1][selection2]) + " mesos" + materialStr += "\r\n\r\nHow many do you want me to make?" + selection3 = sm.sendAskNumber(materialStr, 1, 1, 50) + + + multiplier = selection3 + if sm.getMesos() < costmesoElNathRefine[selection1][selection2]: + sm.sendSayOkay("I'm afraid you cannot afford my services.") + sm.dispose() + + i = 0 + while i < len(costElNathRefine[selection1][selection2]): + complete = sm.hasItem(costElNathRefine[selection1][selection2][i], (costQElNathRefine[selection1][selection2][i] * multiplier)) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsElNathRefine[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costElNathRefine[selection1][selection2]): + sm.consumeItem(costElNathRefine[selection1][selection2][i], (costQElNathRefine[selection1][selection2][i] * multiplier)) + i += 1 + if costmesoElNathRefine[selection1][selection2] > 0: + sm.giveMesos(-(costmesoElNathRefine[selection1][selection2] * multiplier)) + + sm.giveItem(itemsElNathRefine[selection1][selection2], multiplier) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + + +else: + sm.sendSayOkay("I'm an uncoded NPC, I'm lost. \r\nWhere am I?\r\nI believe my ID is "+str(parentID)) diff --git a/scripts/npc/mapleChat_NPC.py b/scripts/npc/mapleChat_NPC.py new file mode 100755 index 0000000..e070194 --- /dev/null +++ b/scripts/npc/mapleChat_NPC.py @@ -0,0 +1,51 @@ +from net.swordie.ms.enums import InvType + +potList = ["STR","DEX","INT","LUK", "ATT", "Magic ATT", "All Stats", "Accuracy", "Avoidability","Max MP","Max HP", "Proceed with current list"] + +cubeList = [[2711005, "Master Craftsman's Cube", 2000], [2710000, "Occult Cube", 700], [5062009, "Red Cube", 11000], [5062000, "Miracle Cube", 15000]] +playerPotList = [] +eeScroll=0 +tempList = [] +listitem = [] +itemID = [] +newlist = [] +bagIndex = 0 + +def checkWhatIsIt(str): + if str.count("%") > 0: + return "%" + else: + return "+" +def FilterPots(givenPots, toFilterIn): + toFilterIn = toFilterIn.split("\r\n") + for x in range(len(givenPots)): + print "\n".join(s for s in givenPots if toFilterIn[x] in s) +for x in range(len(cubeList)): + newlist.append('#L'+str(x)+'##v'+str(cubeList[x][0])+'#'+'#t'+str(cubeList[x][0])+'#\r\n') +selection = sm.sendNext("#e#n \r\n \r\n Hey #h #. I am in charge of Auto Cubing. Please choose of the cubes below: \r\n \r\n \r\n"+''.join(newlist)) +selectedCube = selection +newlist = [] +listitem = eval(sm.getScissorEquips()) +for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#") +selection = sm.sendNext(''.join(newlist)) +bagIndex = selection +itemToCube = str(sm.getItemIDByBagIndex(selection, InvType.EQUIP)) +selection = sm.sendNext("You have selected #v"+itemToCube+"# #e #t"+itemToCube+"##n.\r\n\r\How would you like to cube the item?:\r\n#L0#Manually cube the item.#l\r\n#L1#Cube using an automated, pre-setup potential lines.#l") +if selection == 0: + while sm.sendNext("You have selected #v"+itemToCube+"# #e #t"+itemToCube+"##n.\r\n\r\nThe current potentials for this item is:\r\n" + sm.getPotentialLines(bagIndex, 0) + "\r\nPress next to re-cube.") > -1: + if sm.hasItem(cubeList[selectedCube][0]): + if sm.getQuantityOfItem(cubeList[selectedCube][0]) <= 2: + while sm.sendAskText("You are almost out of cubes. Once your cubes are up - I will use your NX to cube.\r\ntype 'OK' to continue", "", 1, 5) != "OK": + pass + sm.consumeCube(bagIndex, cubeList[selectedCube][0]) + sm.consumeItem(cubeList[selectedCube][0]) + + else: + if chr.getAccount().getNxCredit() > cubeList[selectedCube][2]: + sm.consumeCube(bagIndex, cubeList[selectedCube][0]) + chr.addNx(-cubeList[selectedCube][2]) + else: + sm.sendSayOkay("You do not have enough NX to cube.") + break diff --git a/scripts/npc/mapleEquipBuildup.py b/scripts/npc/mapleEquipBuildup.py new file mode 100755 index 0000000..d8ad0f2 --- /dev/null +++ b/scripts/npc/mapleEquipBuildup.py @@ -0,0 +1,51 @@ +from net.swordie.ms.enums import InvType +from net.swordie.ms.scripts import ScriptUtil as su; + +tinkerersChestId = 4033667 +tinkerersBeltsId = 1132211 +tinkerersShouldersId = 1152120 + +if not sm.hasItem(tinkerersChestId): + sm.sendNext("You do not have a #b" + su.getItemImg(tinkerersChestId) + " " + su.getItemName(tinkerersChestId) + "#k") + sm.dispose() + +if not sm.canHold(1132211): + sm.sendNext("Please make sure you have room in your inventory first.") + sm.dispose() + +text = "Hello my name is Yulia, I just love these Tinkerer's so much but I have too many. If you could bring me some boxes to store them in I would be happy to trade some with you.#b\r\n#L0# I want to upgrade my Tinkerer equip. #l\r\n" +text += "#L1# I want to get a Tinkerer equip. #l" + +selection = sm.sendNext(text) + +if selection == 0: + + itemsEligibleForUpgrade = eval(sm.getItemsEligibleForTinkerersUpgrade()) + itemsEligibleForUpgrade.sort() + itemsIDs = [] + + for x in range(len(itemsEligibleForUpgrade)): + itemsIDs.append(sm.getItemIDByBagIndex(itemsEligibleForUpgrade[x], InvType.EQUIP)) + + outPut = "Choose the equip you wish to upgrade:\r\n" + + for i in range(len(itemsIDs)): + outPut += su.addSelectItem(itemsEligibleForUpgrade[i]) + " " + su.getItemImg(itemsIDs[i]) + "\r\n" + + itemSelection = sm.sendNext(outPut) + sm.upgradeTinkerersItem(itemSelection) + +elif selection == 1: + + text = "Which one would you like?\r\n#b#L0# I want a Tinkerer Belt. #l\r\n" + text += "#L1# I want a Tinkerer Shoulder. #l" + + selection2 = sm.sendNext(text) + + if selection2 == 0: + sm.giveItem(tinkerersBeltsId) + + elif selection2 == 1: + sm.giveItem(tinkerersShouldersId) + +sm.consumeItem(tinkerersChestId) diff --git a/scripts/npc/matius.py b/scripts/npc/matius.py new file mode 100755 index 0000000..3271421 --- /dev/null +++ b/scripts/npc/matius.py @@ -0,0 +1,6 @@ +# Matthias +if sm.hasQuest(20807): + if sm.sendAskYesNo("Would you like to try the first test?"): + sm.warp(913070800, 0) + sm.createClockForMultiple(300, 913070800) + sm.addEvent(sm.invokeAfterDelay(300 *1000, "warp", 913070800, 0)) \ No newline at end of file diff --git a/scripts/npc/mc_guestHouse_move.py b/scripts/npc/mc_guestHouse_move.py new file mode 100755 index 0000000..208489a --- /dev/null +++ b/scripts/npc/mc_guestHouse_move.py @@ -0,0 +1,3 @@ +# Spiegelmann (2042010) | PQ site +sm.setSpeakerID(2042010) +sm.sendNext("#e #n \r\n This party quest is currently unavailable.") \ No newline at end of file diff --git a/scripts/npc/mentoringNPC.py b/scripts/npc/mentoringNPC.py new file mode 100755 index 0000000..70d5279 --- /dev/null +++ b/scripts/npc/mentoringNPC.py @@ -0,0 +1,134 @@ +from net.swordie.ms.enums import InvType + +selection = sm.sendNext("#fs14##bGame Manager:#n\r\n#fs12#\r\n#kHello There! I am the game manager. Below you can find game settings that you can adjust to make your gameplay as best as possible for your needs.\r\n#k#L0#- Ignore an Item#l\r\n#L1#- Get mob drops by name#l\r\n#L2#- Check drops from mobs on current map#l\r\n#L3#- Search what monsters drop an item#l\r\n#L4#- Check Map Ownership#l\r\n#L6#- Disable Remote Skills#l" + + "\r\n#L7# Select damage skins.#l" + "\r\n#L5#- Sell items#l") +temp = "" +if selection == 0: + ignoredDrops = set(chr.getIgnoredDrops()) + for i in ignoredDrops: + temp += "#L"+str(i)+"##z"+str(i)+"##l\r\n" + ignoredDropsShow = ''.join(temp) + selection = sm.sendNext("Your ignored items:\r\n"+ignoredDropsShow+ "\r\n\r\nClick on an item to remove it from the ignore list.\r\n#L90#Add an item to ignore.#l") + + if selection != 90: + if chr.existsInIgnoredDrops(selection): + chr.removeIgnoredDrop(selection) + chr.chatMessage("Removed from ignore list.") + + if selection == 90: + toSearch = sm.sendAskText("Enter an item name or part of it:", "", 3, 100) + searchResults = sm.searchItems(toSearch) + if not searchResults: + sm.sendSayOkay("No items were found.") + sm.dispose() + if len(searchResults) > 150: + sm.sendNext("Too many results. Please be more specific in your search.") + sm.dispose() + somestr="" + for key, value in searchResults.items(): + somestr += "#L"+str(key)+"##z"+str(key)+"##l\r\n" + + selectedItem = sm.sendNext(somestr) + if chr.existsInIgnoredDrops(selectedItem) == False: + chr.addIgnoredDrop(selectedItem) + chr.chatMessage("Added an item to ignore list") + else: + chr.chatMessage("You already have this item in your ignore list.") + sm.dispose() + +elif selection == 1: + toSearch = sm.sendAskText("Enter a monster name or part of it:", "", 3, 50) + searchResults = sm.searchMobs(toSearch) + if not searchResults: + sm.sendSayOkay("No monsters were found.") + sm.dispose() + if len(searchResults) > 150: + sm.sendNext("Too many results. Please be more specific in your search.") + sm.dispose() + somestr="" + for key, value in searchResults.items(): + somestr += "#L"+str(key)+"##eID:#n "+str(key)+" #eName:#n "+value+"#l\r\n" + mobSelected = sm.sendNext(somestr) + sm.sendSayOkay(sm.getDropPercentageByMobForNPC(mobSelected)) + + +elif selection == 2: + searchResults = sm.searchMobsByField() + if not searchResults: + sm.sendSayOkay("No monsters were found.") + sm.dispose() + if len(searchResults) > 150: + sm.sendNext("Too many results.") + sm.dispose() + somestr="" + for key, value in searchResults.items(): + somestr += "#L"+str(key)+"##eID:#n "+str(key)+" #eName:#n "+value+"#l\r\n" + mobSelected = sm.sendNext(somestr) + sm.sendSayOkay(sm.getDropPercentageByMobForNPC(mobSelected)) + +elif selection == 3: + toSearch = sm.sendAskText("Enter an item name or part of it:", "", 3, 100) + searchResults = sm.searchItems(toSearch) + if not searchResults: + sm.sendSayOkay("No items were found.") + sm.dispose() + if len(searchResults) > 150: + sm.sendNext("Too many results. Please be more specific in your search.") + sm.dispose() + somestr="" + for key, value in searchResults.items(): + somestr += "#L"+str(key)+"##eID:#n "+str(key)+" #eName:#n "+value+"#l\r\n" + itemSelected = sm.sendNext(somestr) + searchResults = sm.searchDrop(itemSelected) + if not searchResults: + sm.sendSayOkay("No monsters were found dropping this item.") + sm.dispose() + if len(searchResults) > 150: + sm.sendNext("Too many monsters are dropping this item. Are you searching for a global-drop item?") + sm.dispose() + somestr="" + for key, value in searchResults.items(): + somestr += "#L"+str(key)+"##eID:#n "+str(key)+" #eName:#n "+value+"#l\r\n" + mobSelected = sm.sendNext(somestr) + sm.sendSayOkay(sm.getDropPercentageByMobForNPC(mobSelected)) + +elif selection == 4: + sm.sendSayOkay("The current map owner is #e"+chr.getField().getOwner().getName()+"#n." + "\r\n\r\nOther AFK Players:" + sm.getCharsNoOwner()) + +elif selection == 5: + selection = sm.sendNext("Sell:\r\n#L1#Equips#l\r\n#L2#Use#l\r\n#L4#Etc#l\r\n#L3#Setup#l\r\n#L5#Cash#l\r\n") + inventory = InvType.getInvTypeByVal(selection) + outPut = "" + itemsBagIndexes = eval(sm.getItemsByInventory(inventory)) + itemsBagIndexes.sort() + itemsIds = [] + for x in range(len(itemsBagIndexes)): + itemsIds.append(sm.getItemIDByBagIndex(itemsBagIndexes[x], inventory)) + for x in range(len(itemsIds)): + outPut += "#L" + str(x) + "##i" + str(itemsIds[x]) + "##l\r\n" + choice = sm.sendNext(outPut) + startIndex = itemsBagIndexes[choice] + outPut = "" + j = choice + while j < (len(itemsIds)): + outPut += "#L" + str(itemsBagIndexes[j]) + "##i" + str(itemsIds[j]) + "##l\r\n" + j += 1 + endIndex = sm.sendNext(outPut) + sm.sellMass(startIndex, endIndex, inventory) + +elif selection == 6: + if chr.isRemoteEffects(): + chr.setRemoteEffects(False) + else: + chr.setRemoteEffects(True) + chr.chatMessage("Remote Skills toggled " + str(chr.isRemoteEffects())) + +elif selection == 7: + damageSkins = chr.getAccount().getDamageSkinsItemIds() + damageSkins.add(2431965) + outPut = "" + for x in range(len(damageSkins)): + outPut += "#L" + str(x) + "##i" + str(damageSkins[x]) + "##l\r\n" + choice = sm.sendNext(outPut) + chr.setDamageSkinAndBroadCast(damageSkins[choice]) \ No newline at end of file diff --git a/scripts/npc/merTutorAfrien.py b/scripts/npc/merTutorAfrien.py new file mode 100755 index 0000000..b451223 --- /dev/null +++ b/scripts/npc/merTutorAfrien.py @@ -0,0 +1,53 @@ +# Afrien NPC (1033201) | Used for Mercedes storyline + +sm.setPlayerAsSpeaker() +sm.sendNext("Afrien? Freud? Are you okay?!") + +sm.setSpeakerID(1033201) +sm.sendSay("Mercedes... You survived.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Of course! I managed to seal him away. I can't let myself die after that! But what about you? And the others? Where are they?") + +sm.setSpeakerID(1033201) +sm.sendSay("We may have #bdefeated the Black Mage#k, but he sent everyone flying in different directions with that last spell. We're lucky we ended up in the same place.") + +sm.setPlayerAsSpeaker() +sm.sendSay("You're right... I didn't realize how far away we ended up. At least we're safe.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Now that the fight is over, I feel so weak... Not just that, but i feel so cold...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Come to think of it, has it always been snowy here? There's all this heat, and yet snow is falling... Strange...") + +sm.setSpeakerID(1033201) +sm.sendSay("You can't feel it, Mercedes? The #rgreat curse#k... It's been placed upon you, Freud, and the others.") + +sm.setPlayerAsSpeaker() +sm.sendSay("C-curse?") + +sm.setSpeakerID(1033201) +sm.sendSay("There's an icy cold curse clinging to you. You might have been able to shrug it off if you weren't weak from fighting the Black Mage. It looks like he's not letting us off so easily...") + +sm.setPlayerAsSpeaker() +sm.sendSay("You should be able to survive it, at least. But I'm worried about Freud... He's too weak.") + +sm.setSpeakerID(1033201) +sm.sendSay("I'll take care of him. For now, I'm more worried about you, Mercedes. #bYou're the ruler of the Elves#k. If the curse is on you, #rwon't it be placed upon all of the Elves#k?") + +sm.setPlayerAsSpeaker() +sm.sendSay("...!") + +sm.setSpeakerID(1033201) +sm.sendSay("Hurry back to #bElluel#k. If the #bBlack Mage's curse is on all of the Elves#k, then you must return to your people.") + +sm.setPlayerAsSpeaker() +sm.sendSay("All right! Afrien... We will meet again!") + +sm.setSpeakerID(1033201) +sm.sendSay("...I pray you're right.") + +sm.setPlayerAsSpeaker() +if sm.sendAskYesNo("#b(The other heroes will make it through somehow. For now, return to town using your return skill.)"): + sm.warpInstanceIn(910150001, 0) \ No newline at end of file diff --git a/scripts/npc/merTutorElder.py b/scripts/npc/merTutorElder.py new file mode 100755 index 0000000..35f0609 --- /dev/null +++ b/scripts/npc/merTutorElder.py @@ -0,0 +1,100 @@ +# Philius NPC (1033202) | Used for Mercedes storyline + +if sm.getQRValue(24007) != "1": + sm.setPlayerAsSpeaker() + sm.sendNext("Elders! You're okay! But...but the village...!") + + sm.setSpeakerID(1033202) + sm.sendSay("A fierce, frozen curse has fallen upon the town. Your Highness, I see it has fallen upon you as well.") + + sm.setSpeakerID(1033203) + sm.sendSay("I sense it from you most of all! Is this the power of the Black Mage?!") + + sm.setSpeakerID(1033204) + sm.sendSay("The children are already trapped in ice, and soon, the adults will follow them. It takes longer to freeze the stronger Elves, which is why we are still all right, but our time is limited...") + + sm.setPlayerAsSpeaker() + sm.sendSay("This is my fault. We sealed the Black Mage, but he managed to #rcurse#k us anyway...") + + sm.setSpeakerID(1033203) + sm.sendSay("So it is his doing?!") + + sm.setSpeakerID(1033204) + sm.sendSay("I knew this was his doing...") + + sm.setSpeakerID(1033202) + sm.sendSay("The Black Mage has cursed our sovereign, and the curse has spread to all Elves...") + + sm.setPlayerAsSpeaker() + sm.sendSay("I should have been more careful. Please, I didn't mean for this to happen...") + + sm.setSpeakerID(1033202) + sm.sendSay("What a fearful being, this Black Mage. Even form beyond the seal, he wields such power... It is a miracle we were able to seal him at all") + + sm.setSpeakerID(1033204) + sm.sendSay("There was no way you could stop this, Your Majesty. Nobody could have.") + + sm.setSpeakerID(1033203) + sm.sendSay("That's right! It's not your fault, My Liege! You sealed him! YOU'RE the hero!") + + sm.setPlayerAsSpeaker() + sm.sendSay("I shouldn't have fought the Black Mage in the first place! If I'd let him be, this wouldn't have happened to the Elves. I've failed my people!") + + sm.setSpeakerID(1033204) + sm.sendSay("Don't say such things, Your Highness! Even if you'd let him be, the Black Mage would have come for us sooner or later.") + + sm.setSpeakerID(1033202) + sm.sendSay("It's our fault. We are your council. We should have better prepared you to face the Black Mage.") + + sm.setSpeakerID(1033203) + sm.sendSay("I'm supposed to be the Elder of War, but even I was too weak to join the fight. I'm the one who failed you, Your Highness...") + + sm.setPlayerAsSpeaker() + sm.sendSay("No, this isn't your fault! I'm the one who decided to face the Black Mage. I don't regret fighting...I regret failling to protect my people.") + + sm.setSpeakerID(1033202) + sm.sendSay("In that case, we all regret failing to do this, Your Majesty.") + + sm.setSpeakerID(1033204) + sm.sendSay("This is not your burden alone. The decision to fight the Black Mage was the decision of the Elves, and so we will all share in the results, whatever they may be.") + + sm.setSpeakerID(1033203) + sm.sendSay("No one blames you, Your Highness!") + + sm.setPlayerAsSpeaker() + sm.sendSay("Everyone...") + + sm.setSpeakerID(1033202) + sm.sendSay("Regardless of this wicked curse, we will survive. We will overcome this together.") + + sm.setSpeakerID(1033202) + sm.sendSay("Long as Your Highness is safe, the hope for the Elves lives on.") + + sm.setPlayerAsSpeaker() + sm.sendSay("Is there a way?") + + sm.setSpeakerID(1033202) + sm.sendSay("We can't stop the curse now. But we are the Elves. We may outlive it.") + + sm.setSpeakerID(1033202) + sm.sendSay("Your Highness, we should seal Elluel before the curse can spread beyond the village. We cannot avoid it, but we can keep it from spreading beyone the Elves. #bWe Elves will all slumber here, undisturbed by the outside world#k.") + + sm.setSpeakerID(1033204) + sm.sendSay("We don't know how long the curse will last, but time is on our side. Your Highness, we've nothing to worry about.") + + sm.setSpeakerID(1033203) + sm.sendSay("Eventually we will awaken together, and the Black Mage will be a distant memory!") + + sm.setSpeakerID(1033202) + sm.sendSay("Not even the curse of the Black Mage can last forever. In the end, we will be the victors.") + + sm.setPlayerAsSpeaker() + sm.sendSay("Yes! We will win!") + + sm.setSpeakerID(1033202) + sm.sendSay("Of course we will. Ah... I'm growing weak. Your Highness, it is time to seal the village. It is the only way we can rest in peace.") + + sm.setSpeakerID(1033202) + sm.sendSay("There are some things we should take care of first. I believe #p1033204# wants to speak with you.") + sm.createQuestWithQRValue(24007, "1") + # sm.startQuestNoCheck(24000) diff --git a/scripts/npc/merTutorFred.py b/scripts/npc/merTutorFred.py new file mode 100755 index 0000000..f7c0518 --- /dev/null +++ b/scripts/npc/merTutorFred.py @@ -0,0 +1,2 @@ +# Freud NPC (1033200) | Used for Mercedes storyline +sm.openNpc(1033201) # Afrien \ No newline at end of file diff --git a/scripts/npc/mesoMarket.py b/scripts/npc/mesoMarket.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/npc/mihail_potionBox.py b/scripts/npc/mihail_potionBox.py new file mode 100755 index 0000000..e7b9300 --- /dev/null +++ b/scripts/npc/mihail_potionBox.py @@ -0,0 +1,16 @@ +# General Store Attic (913070010) + +# Constants +QUEST = 20031 +ITEM1 = 4033194 +ITEM2 = 4033195 + +if (not sm.hasQuest(QUEST) or (sm.hasItem(ITEM1) or sm.hasItem(ITEM2))): + sm.sendSayOkay("I'd better get back downstairs with the potion box before old-man Limbert's heart finally explodes with rage.") +else: + if sm.sendAskYesNo("All these potions are disgusting! Should we even be selling them?\r\nTake the Potion Box?"): + sm.giveItem(ITEM1) + sm.giveItem(ITEM2) + sm.sendNext("Is this a letter? Must be held together by all the dust...\r\n From 'Chromile'... It doesn't say who it's for... Maybe Limbert will want it.") + else: + sm.sendNext("This has gotta be the box...") \ No newline at end of file diff --git a/scripts/npc/mike.py b/scripts/npc/mike.py new file mode 100755 index 0000000..7ff2c8d --- /dev/null +++ b/scripts/npc/mike.py @@ -0,0 +1,3 @@ +# Mike | Sleepywood (105000000) + +sm.sendSayOkay("Six Path Crossway is just up ahead.") \ No newline at end of file diff --git a/scripts/npc/minigame00.py b/scripts/npc/minigame00.py new file mode 100755 index 0000000..c32f1ee --- /dev/null +++ b/scripts/npc/minigame00.py @@ -0,0 +1,32 @@ +# Casey (1012008) | Henesys Park + +items = [ +4080000, # Slime & Mushroom Omok Set +4080001, # Slime & Octopus Omok Set +4080002, # Slime & Pig Omok Set +4080003, # Octopus & Mushroom Omok Set +4080004, # Pig & Octopus Omok Set +4080005, # Pig & Mushroom Omok Set +4080006, # Bloctopus & Pink Teddy Omok Set +4080007, # Bloctopus & Trixter Omok Set +4080008, # Pink Teddy & Trixter Omok Set +4080009, # Panda Teddy & Blocktopus Omok Set +4080010, # Panda Teddy & Pink Teddy Omok Set +4080011, # Panda Teddy & Trixter Omok Set +4080100, # A set of Match Cards +] +mesocost = 5000 + +selStr = "Hello! I am the MiniGame Master!\r\nIf you're here to purchase minigames, you're at the right place!\r\nIt will cost you "+ str(mesocost) +" meso per item\r\n\r\n#b" +i = 0 +while i < len(items): + selStr += "#L"+ str(i) +"##z"+ str(items[i]) +"##l\r\n" + i += 1 +answer = sm.sendNext(selStr) + +if not sm.canHold(items[answer]) or sm.getMesos() < mesocost: + sm.sendSayOkay("I'm sorry, it seems that either you don't have enough money, or you don't have enough space") +else: + sm.sendSayOkay("Great Choice! Here you go") + sm.deductMesos(mesocost) + sm.giveItem(items[answer]) diff --git a/scripts/npc/mining.py b/scripts/npc/mining.py new file mode 100755 index 0000000..8b1323c --- /dev/null +++ b/scripts/npc/mining.py @@ -0,0 +1,48 @@ +# Hidden Street - Ardentmill :: 910001000 +# Gere :: Master of Mining :: 9031002 + +Pickaxe = 1512000 +MINING_SKILL = 92010000 +FEE = [5000, 15000, 25000, 40000, 60000, 85000, 115000, 150000, 190000, 235000] + +if not sm.hasSkill(MINING_SKILL): + selection = sm.sendSay("Now what can I do for ya?\r\n#L0##bHear an explanation about #eMining#n.#l\r\n#L1#Learn #eMining#n.#k#l") + if selection == 0: + sm.sendNext("If you're looking to get yourself some minerals, all you need is the Mining skill. Refine the minerals you collect in one of them molds #p9031006# sells, then use them to craft all sorts of useful items.") + elif selection == 1: + learn = sm.sendAskYesNo("Do you really want to learn #bMining#k? It'll cost you some money... #b5,000 Mesos#k, to be exact.\r\n") + if learn: + if sm.getMesos() < 5000: + sm.sendNext("You don't got enough Mesos. I need #b5000 Mesos#k from every student, no exceptions.") + sm.dispose() + + if not sm.canHold(Pickaxe): + sm.sendNext("You don't have enough inventory slots in your equip tab.") + sm.dispose() + + sm.giveMesos(-5000) + sm.giveSkill(MINING_SKILL, 0x1000000, 10) + sm.giveItem(Pickaxe) + sm.playSound("profession/levelup") + sm.sendNext("Okay, them's the basics of Mining. Work on increasing your Mastery, and I'll teach you some new tricks.") + else: + sm.sendNext("It's good to be cautious. Come back after you've thought it through.") +else: + selection = sm.sendSay("Now what can I do for ya?\r\n#L2##bLevel up #eMining#n.#l\r\n#L3##bTrade #t4011010#.#k#l") + if selection == 2: + if sm.isAbleToLevelUpMakingSkill(MINING_SKILL): + levelup = sm.sendAskYesNo("Looks like you're ready to level up your Mining. I'll take #b" + str(FEE[sm.getMakingSkillLevel(MINING_SKILL)]) + " Mesos#k as tuition. Ready to learn?") + if levelup: + if sm.getMesos() < FEE[sm.getMakingSkillLevel(MINING_SKILL)]: + sm.sendNext("You don't have enough mesos.") + sm.dispose() + sm.giveMesos(-FEE[sm.getMakingSkillLevel(MINING_SKILL)]) + sm.makingSkillLevelUp(MINING_SKILL) + sm.sendNext("Your Mining skill is now Lv. " + str(sm.getMakingSkillLevel(MINING_SKILL)) +".") + else: + sm.sendNext("Sure, take some time to think it over. I'll be here.") + sm.dispose() + else: + sm.sendNext("You're not ready to level up your Profession. Come back when you've increased your Mastery.") + elif selection == 3: + sm.sendSayOkay("#b100 #t4011010#s#k can be traded for 1 #i2028067:##b#t2028067##k. Please dig up some more #t4011010#s.") \ No newline at end of file diff --git a/scripts/npc/moonrabbit.py b/scripts/npc/moonrabbit.py new file mode 100755 index 0000000..943b7dc --- /dev/null +++ b/scripts/npc/moonrabbit.py @@ -0,0 +1,31 @@ +# Guon (2094000) | Spiegelmann's Guest House + +from net.swordie.ms.constants import CustomConstants +from net.swordie.ms.enums import EventType + +pqItems = [ + 4001101, +] +runsPerDay = 300 + +if sm.isPartyLeader(): + sm.sendNext("Are you willing to help me to defend moon bunny?#b\r\n" + "\r\n" + "#L0#Enter the Moon Bunny Party Quest#l") + if sm.partyHasCoolDown(EventType.MoonBunny, runsPerDay): + sm.sendNext("One of your party member has a cooldown for this pq.") + sm.dispose() + if sm.checkParty() and sm.checkPartyLevelReq(CustomConstants.MIN_LEVEL_FOR_PQ): + + # check for items + for item in pqItems: + if sm.hasItem(item): + quantity = sm.getQuantityOfItem(item) + sm.consumeItem(item, quantity) + + + sm.addCoolDownInXDaysForParty(EventType.MoonBunny, 1, 1) + sm.warpInstanceIn(910010000, 0, True) # Moon Bunny PQ First Map + +else: + sm.sendSayOkay("Please have your party leader talk to me.") diff --git a/scripts/npc/moonrabbit_bonus.py b/scripts/npc/moonrabbit_bonus.py new file mode 100755 index 0000000..16b7cb2 --- /dev/null +++ b/scripts/npc/moonrabbit_bonus.py @@ -0,0 +1,5 @@ +pqLobby = 910002000 + +sm.giveNX(200000) +sm.giveItem(4310212, 1) +sm.warp(pqLobby) \ No newline at end of file diff --git a/scripts/npc/moonrabbit_tiger.py b/scripts/npc/moonrabbit_tiger.py new file mode 100755 index 0000000..570fccd --- /dev/null +++ b/scripts/npc/moonrabbit_tiger.py @@ -0,0 +1,25 @@ +# Guon (2094000) | Spiegelmann's Guest House + +riceCakeId = 4001101 +amountRequired = 10 +moonBunnyId = 9300061 + +if sm.isPartyLeader(): + selection = sm.sendNext("#b#L0# I wanna finish the pq.\r\n" + + "#L1# I wanna leave.") + + if selection == 0: + if not sm.hasItem(4001101, 10): + sm.sendNext("Bring me 10 rice cakes to finish the pq.") + sm.dispose() + if not sm.hasMobById(moonBunnyId): + sm.sendNext("I needed you to keep him alive!") + sm.dispose() + if sm.checkParty(): + sm.consumeItem(riceCakeId, 10) + sm.stopEvents() + sm.warpInstanceOut(910010300, 0) # Moon Bunny PQ Exit + elif selection == 1: + sm.warpInstanceOut(910002000, 0) +else: + sm.sendSayOkay("Please have your party leader talk to me.") diff --git a/scripts/npc/nautil_black.py b/scripts/npc/nautil_black.py new file mode 100755 index 0000000..f8c2922 --- /dev/null +++ b/scripts/npc/nautil_black.py @@ -0,0 +1,2 @@ +# Muirhat (1092007) | Nautilus +sm.sendSayOkay("If you want to become a Pirate, talk to #r#p"+ str(1090000) +"##k in the #b#m"+ str(120000101) +"##k.") diff --git a/scripts/npc/nexonstarNpc_1.py b/scripts/npc/nexonstarNpc_1.py new file mode 100755 index 0000000..fa4d206 --- /dev/null +++ b/scripts/npc/nexonstarNpc_1.py @@ -0,0 +1,18 @@ +sm.setSpeakerType(1) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9001137) # Machine Wheel +if sm.getFieldID() == 100000000: + if sm.sendAskYesNo("Would you like to go to the Celestial Event Hall?"): + sm.warp(450013840) +else: + selection = sm.sendNext("What would you like to do?#b\r\n#L0#Join the current Event #l\r\n#L1#Spend my Event Coins#l\r\n#L2#Go back to Henesys!#l") + if selection == 0: + sm.sendNext("There is no Event going on") + elif selection == 1: + sm.sendNext("Open shop spot") + elif selection == 2: + sm.warp(100000000) + + + diff --git a/scripts/npc/nineheart.py b/scripts/npc/nineheart.py new file mode 100755 index 0000000..84d6ee0 --- /dev/null +++ b/scripts/npc/nineheart.py @@ -0,0 +1,12 @@ +TIME = 300 + +if sm.hasQuest(20320): + sm.setSpeakerID(1101002) + if sm.sendAskYesNo("Are you ready to enter the Test area?"): + sm.warpInstanceIn(913070200) + sm.setInstanceTime(TIME) +elif sm.hasQuest(20411): + sm.setSpeakerID(1101002) + if sm.sendAskYesNo("Are you ready, are you okay to leave?"): + sm.warp(913070100, 0) + sm.setInstanceTime(TIME) \ No newline at end of file diff --git a/scripts/npc/npc_2162000.py b/scripts/npc/npc_2162000.py new file mode 100755 index 0000000..9b8a263 --- /dev/null +++ b/scripts/npc/npc_2162000.py @@ -0,0 +1,4 @@ +# Cecilia | Gardener +# Rose Garden : Gardener's Spot + +sm.sendSayOkay("I've had the chills for so long... It's very cold, as you know..") \ No newline at end of file diff --git a/scripts/npc/npc_3003132.py b/scripts/npc/npc_3003132.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/npc/npc_9062117.py b/scripts/npc/npc_9062117.py new file mode 100755 index 0000000..0390d9f --- /dev/null +++ b/scripts/npc/npc_9062117.py @@ -0,0 +1,2 @@ +# 9062117 - Peaceful Maple Tree +sm.sendSayOkay("I'm a tree.") \ No newline at end of file diff --git a/scripts/npc/npc_9111063.py b/scripts/npc/npc_9111063.py new file mode 100755 index 0000000..0ec391d --- /dev/null +++ b/scripts/npc/npc_9111063.py @@ -0,0 +1,17 @@ +# Created by MechAviv +# Map ID :: 100000000 +# NPC ID :: 9111063 +# Heart of Zipangu + +sm.setSpeakerID(0) +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.setSpeakerType(3) + +if sm.sendNext("\r\n\r\n#L0# #m100000000# awaits.#l") == 0: + sm.setNpcOverrideBoxChat(9111063) + sm.setSpeakerType(3) + if sm.sendAskYesNo("Shall I transport you to #m100000000#?"): + sm.warp(100000000, 5) \ No newline at end of file diff --git a/scripts/npc/npc_9130115.py b/scripts/npc/npc_9130115.py new file mode 100755 index 0000000..b378398 --- /dev/null +++ b/scripts/npc/npc_9130115.py @@ -0,0 +1,14 @@ +# id 9130115 (100-Generation Blacksmith), field 801000000 +sm.setSpeakerID(9130115) # 100-Generation Blacksmith +sm.sendNext("Hello, hello! My family has practiced the art of smithing for 100 generations. How may I help you?") +sm.setParam(2) +sm.sendSay("I hear you can fix this #i4034138##t4034138#.") +sm.setParam(0) +sm.sendSay("Is this...? I never thought I would see it myself. The final page of our legacy blacksmithing guide is about this...") +sm.setParam(2) +sm.sendSay("Is something wrong?") +sm.setParam(0) +res = sm.sendNext("Hm? No, no... Well, it's just that it's been tough for a blacksmith around here lately. I'll have to charge a pretty hefty price. 1,000,000 mesos will see it done in a jiffy. \r\n#b\r\n#L0# Pay 1,000,000 to fix it. #l\r\n#L1# Doesn't seem worth the money. #l") +sm.sendNext("#b*THUNK THINK* Okay, it's done.#k") +sm.sendPrev("It's almost done!") +sm.warp(807000000) diff --git a/scripts/npc/npc_9390201.py b/scripts/npc/npc_9390201.py new file mode 100755 index 0000000..b0cea9c --- /dev/null +++ b/scripts/npc/npc_9390201.py @@ -0,0 +1,15 @@ +# Created by MechAviv +# [Mayor Berry] | [9390201] +# Commerci Republic : Berry + +sm.setSpeakerID(9390201) +selection = sm.sendNext("What's goin' on over there?\r\n#b\r\n#L0# How's the fishing going?#l\r\n#L1# Do you know anything about the Commerci Republic?#l") +if selection == 0: + sm.dispose() +elif selection == 1: + sm.setSpeakerID(9390201) + sm.sendNext("You're in the Commerci Republic right now! Follow that there coastal road southeast to get to #e#bSan Commerci#k#n. That's the capital.") + + + sm.setSpeakerID(9390201) + sm.sendPrev("San Commerci is a hub for traders all around the Republic. That Gilberto Daniella grew it up from a tiny fishing village into a boomin' jewel of the sea. It's 'cause of him my fish go for such good prices.") diff --git a/scripts/npc/npc_9390217.py b/scripts/npc/npc_9390217.py new file mode 100755 index 0000000..face505 --- /dev/null +++ b/scripts/npc/npc_9390217.py @@ -0,0 +1,2 @@ +# Tepes (9390217) | San Commerci +sm.sendNext("What is it?") diff --git a/scripts/npc/npc_9390219.py b/scripts/npc/npc_9390219.py new file mode 100755 index 0000000..4eb9669 --- /dev/null +++ b/scripts/npc/npc_9390219.py @@ -0,0 +1,174 @@ +# Sweetwater Merchant // 9390219 + +# Sweetwater Array START + +itemsSW = [ + [ # Sweetwater Item IDs + 1003976, 1012438, 1022211, 1032224, 1052669, 1072870, 1082556, 1102623, 1113078, 1122269, 1132247, 1152160, + 1212089, 1222084, 1232084, 1242090, 1252033, 1262029, 1302297, 1312173, 1322223, 1332247, 1342090, 1362109, + 1372195, 1382231, 1402220, 1412152, 1422158, 1432187, 1442242, 1452226, 1462213, 1472235, 1482189, 1492199, + 1522113, 1532118, 1542072, 1552072, 1582025 + ] +] + +costSW = [ + [ # Sweetwater Materials + [1003984, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1012439, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1022212, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1032225, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1052673, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1072874, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1082559, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1122272, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1122272, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1132248, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1152161, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1212090, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1222085, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1232085, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1242091, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1252032, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1262038, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1302299, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1312174, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1322224, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1332249, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1342091, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1362110, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1372196, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1382232, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1402222, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1412153, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1422159, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1432189, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1442243, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1452227, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1462214, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1472236, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1482190, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1492200, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1522114, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1532119, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1542073, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1552073, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031], + [1582024, 4310100, 4310093, 4310097, 4021029, 4021030, 4310092, 4310091, 4031846, 4310156, 4021031] + ] + +] + +costQSW = [ + [ # Sweetwater Material Quantity + [1, 1000, 100, 45, 5, 15, 50, 100, 22, 45, 751], + [1, 1000, 100, 45, 5, 15, 50, 100, 22, 45, 751], + [1, 1000, 100, 45, 5, 15, 50, 100, 22, 45, 751], + [1, 1000, 100, 45, 5, 15, 50, 100, 22, 45, 751], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 60, 5, 15, 50, 100, 30, 60, 1000], + [1, 1000, 100, 60, 5, 15, 50, 100, 30, 60, 1000], + [1, 1000, 100, 60, 5, 15, 50, 100, 30, 60, 1000], + [1000, 100, 60, 5, 15, 50, 100, 30, 60, 1000], + [1, 1000, 100, 45, 5, 15, 50, 100, 22, 45, 751], + [1, 1000, 100, 60, 5, 15, 50, 100, 30, 60, 1000], + [1, 1000, 100, 30, 2, 7, 50, 100, 15, 30, 500], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + [1, 1000, 100, 90, 5, 15, 50, 100, 45, 90, 1000], + + ] + +] + +costmesoSW = [ + [ # Sweetwater Meso Cost + 1503759398,1503759398,1503759398,1503759398,3000000000,2000000000,2000000000,2000000000,2000000000,1503759398,2000000000,500000000,3000000000,3000000000, + 3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000, + 3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000,3000000000 + ] +] + +# Sweetwater Array END + +if sm.sendNext: + selection1 = sm.sendNext("Hello. I am Pietreno, Sweetwater extraordinaire. I can make you the finest wares but... for a cost. \r\n#b" + "#L0#Purchase Sweetwater#l \r\n" + "#L1#Transpose#l \r\n") + + listStr = "Which #bSweetwater#k item would you like me to create? #b" + i = 0 + while i < len(itemsSW[selection1]): + listStr += "\r\n#L" + str(i) + "##v" + str(itemsSW[selection1][i]) + "# #z" + str(itemsSW[selection1][i]) + "#" + i += 1 + selection2 = sm.sendNext(listStr) + materialStr = "So you would like to purchase a #v" + str(itemsSW[selection1][selection2]) + "##b#z" + str(itemsSW[selection1][selection2]) + "# #k? \r\nI will require some very powerful items to create this for you.\r\n" + i = 0 + while i < len(costSW[selection1][selection2]): + materialStr += "\r\n#b#v" + str(costSW[selection1][selection2][i]) + "# #r "+ str(costQSW[selection1][selection2][i]) +"x#b #z" + str(costSW[selection1][selection2][i]) + "#" + i += 1 + if costmesoSW[selection1][selection2] > 0: + materialStr += "\r\n#i4031138# #r" + str(costmesoSW[selection1][selection2]) + " #bMesos" + if selection1 == 4 or selection1 == 5: + materialStr += "\r\n\r\nHow many do you want me to make?" + else: + response = sm.sendAskYesNo(materialStr) + + + if response: + + if sm.getMesos() < costmesoSW[selection1][selection2]: + sm.sendSayOkay("I'm afraid you do not have the required #bMesos #kfor my services.") + sm.dispose() + + i = 0 + while i < len(costSW[selection1][selection2]): + complete = sm.getTotalItemQty(costSW[selection1][selection2][i]) <= (costQSW[selection1][selection2][i]) + i += 1 + if complete == False: + break + + if complete == False: + sm.sendSayOkay("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require.") + else: + if sm.canHold(itemsSW[selection1][selection2]) == False: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") + sm.dispose() + else: + i = 0 + while i < len(costSW[selection1][selection2]): + sm.consumeItem(costSW[selection1][selection2][i], (costQSW[selection1][selection2][i])) + i += 1 + if costmesoSW[selection1][selection2] > 0: + sm.giveMesos(-(costmesoSW[selection1][selection2])) + + sm.giveItem(itemsSW[selection1][selection2]) + sm.sendSayOkay("A perfect item, as usual. Come and see me if you need anything else.") + else: + sm.sendSayOkay("Let me know when you are ready to create something.") + sm.dispose() diff --git a/scripts/npc/npc_9400530.py b/scripts/npc/npc_9400530.py new file mode 100755 index 0000000..34124fd --- /dev/null +++ b/scripts/npc/npc_9400530.py @@ -0,0 +1,2 @@ +# Retro World Console +sm.sendSayOkay("Pre-BB was the best time for Maplestory!") \ No newline at end of file diff --git a/scripts/npc/npc_9400570.py b/scripts/npc/npc_9400570.py new file mode 100755 index 0000000..327d171 --- /dev/null +++ b/scripts/npc/npc_9400570.py @@ -0,0 +1,5 @@ +# id 9400570 (Abrup Portal), field 867200110 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9400570) # Abrup Portal +sm.sendSayOkay("Sorry! One person at a time. You'll have to leave your party.") diff --git a/scripts/npc/npc_9400624.py b/scripts/npc/npc_9400624.py new file mode 100755 index 0000000..8bd7441 --- /dev/null +++ b/scripts/npc/npc_9400624.py @@ -0,0 +1,6 @@ +# id 9400624 (Open Journal), field 867201801 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400624) # Open Journal +sm.sendSayOkay("The last journal entry is from a month ago.") diff --git a/scripts/npc/npc_9400626.py b/scripts/npc/npc_9400626.py new file mode 100755 index 0000000..98f33bd --- /dev/null +++ b/scripts/npc/npc_9400626.py @@ -0,0 +1,6 @@ +# id 9400626 (Slippers), field 867201801 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400626) # Slippers +sm.sendSayOkay("Where is the other side...?") diff --git a/scripts/npc/npc_9400628.py b/scripts/npc/npc_9400628.py new file mode 100755 index 0000000..e128aee --- /dev/null +++ b/scripts/npc/npc_9400628.py @@ -0,0 +1,48 @@ +# id 9400628 (Frames), field 867201801 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.sendDelay(500) +sm.onLayer(1000, "0", 0, 0, 15, "Map/EffectPL.img/MONAD1/illust/0", 4, False, -1, False) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bI guess this is the lady's granddaughter... They look happy. ") +sm.sendSay("#bBlue-gray skin with tribal markings... She must be half-demon. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#T-this girl is... ") +sm.offLayer(1000, "0", False) +sm.sendDelay(4000) +sm.playSound("Sound/Mob.img/9402270/Attack7", 128) +sm.sendDelay(3000) +sm.playSound("Sound/Mob.img/9402245/Attack2", 128) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack1", 128) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402250/Attack5", 128) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack2", 128) +sm.sendDelay(1000) +sm.sendNext("#face3#What?! ") +sm.setParam(57) +sm.sendSay("#bShh! ") +sm.playSound("Sound/Mob.img/9402250/Attack4", 128) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402252/Attack2", 128) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402246/skill1", 128) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402241/Attack1", 128) +sm.sendDelay(1000) +sm.forcedMove(True, 300) +sm.sendDelay(251) +sm.forcedMove(False, 80) +sm.sendDelay(251) +sm.forcedMove(True, 300) +sm.sendDelay(251) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.createQuestWithQRValue(64085, "dir=1") +sm.lockInGameUI(False, True) +sm.warp(867201802) diff --git a/scripts/npc/npc_horizonPortal.py b/scripts/npc/npc_horizonPortal.py new file mode 100755 index 0000000..7dc55a7 --- /dev/null +++ b/scripts/npc/npc_horizonPortal.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# [Horizon Portal] | [1540941] +# Henesys : Bowman Instructional School + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSayOkay("There's a strange energy flowing from this portal. This could definitely teleport me... somewhere.\r\n\r\n#b(Press the up arrow key to enter the portal.)#k") \ No newline at end of file diff --git a/scripts/npc/npc_kid1.py b/scripts/npc/npc_kid1.py new file mode 100755 index 0000000..ad7159b --- /dev/null +++ b/scripts/npc/npc_kid1.py @@ -0,0 +1 @@ +sm.spawnMob(100000) \ No newline at end of file diff --git a/scripts/npc/oldBook1.py b/scripts/npc/oldBook1.py new file mode 100755 index 0000000..29d29c4 --- /dev/null +++ b/scripts/npc/oldBook1.py @@ -0,0 +1,47 @@ +# Alcaster (2020005) | El Nath + +items = [ + # itemId, meso + [2050003, 300], # Holy Water + [2050004, 400], # All Cure + [4006000, 5000], # Magic Rock + [4006001, 5000] # Summon Rock +] + + +if sm.hasQuestCompleted(3035): # Alcaster's Book of Ancient Quest - (Last quest of the questline) + sm.sendNext("What is it?\r\n#b" + "#L0#I want to buy something really rare.#l") + + + text = "Thanks to you. #bThe Book of Ancient#k is safely sealed. " \ + "As a result, I used up about half of the power I have accumulated over the last 800 years...but can now die in peace. " \ + "Would you happen to be looking for rare items by any chance? As a sign of appreciation for your hard work. " \ + "I'll sell some items in my possession to you and ONLY you. Pick out the one you want!\r\n #b" + for i in range(len(items)): + text += "#L"+ str(i) +"##z"+ str(items[i][0]) +"# - "+ str(items[i][1]) +" mesos#l\r\n" + selection = sm.sendNext(text) + + + number = sm.sendAskNumber("#b#z"+ str(items[selection][0]) +"##k?\r\n" + "Since you helped me, I'll sell it to you for cheap. \r\n" + "It'll cost you #b"+ str(items[selection][1]) +" mesos#k each. \r\n" + "How many would you like?", + 1, 1, 100) + + + totalCost = number * items[selection][1] # amount selected * meso cost + if not sm.canHold(items[selection][0]): # Not enough space + sm.sendSayOkay("Please make some more space in your inventory.") + + elif sm.getMesos() < totalCost: # Too little mesos + sm.sendSayOkay("It seems you don't have enough mesos.") + + else: # can afford & can hold + sm.giveItem(items[selection][0], number) + sm.deductMesos(totalCost) + sm.sendSayOkay("Thanks for your purchase.") + + +else: + sm.sendSayOkay("I worry about #bThe Book of Ancient#k...") \ No newline at end of file diff --git a/scripts/npc/oldBook5.py b/scripts/npc/oldBook5.py new file mode 100755 index 0000000..a3dcd22 --- /dev/null +++ b/scripts/npc/oldBook5.py @@ -0,0 +1,31 @@ + # Spiruna (2032001) | Old Man's House (200050001) + # The Book of Ancient is Back (Quest 3034) + # Author: Tiger + +mesos = 500000 + +if sm.hasQuestCompleted(3034): # The Book of Ancient is Back + response = sm.sendAskYesNo("You've been so much of a help to me... If you have any #t" + str(4004004) + "#, I can refine it for you for only #b" + str(mesos) + " meso#k each.") + + if response: + answer = sm.sendAskNumber("Okay, so how many do you want me to make?", 1, 1, 100) + + totalCost = answer * mesos + totalQty = answer * 10 + + if not sm.canHold(4005004): # Not enough space + sm.sendSayOkay("Please make some more space in your inventory.") + + elif sm.getMesos() < totalCost: # Too little mesos + sm.sendSayOkay("I'm sorry, but I am NOT doing this for free.") + + elif not sm.hasItem(4004004, totalQty): # Does not have enough Dark Crystal Ores, TODO: check if this looks right (for 5 DC you need 50 DCO?) + sm.sendSayOkay("I need that ore to refine the Crystal. No exceptions..") + + else: # can afford & can hold + sm.consumeItem(4004004, totalQty) + sm.giveItem(4005004, answer) + sm.deductMesos(totalCost) + sm.sendSayOkay("Use it wisely.") +else: + sm.sendSayOkay("Go away, I'm trying to meditate.") diff --git a/scripts/npc/open_accP.py b/scripts/npc/open_accP.py new file mode 100755 index 0000000..aaba69e --- /dev/null +++ b/scripts/npc/open_accP.py @@ -0,0 +1,8 @@ +from net.swordie.ms.enums import UIType + +ACCESSORY_CRAFT_SKILL = 92030000 + +if sm.hasSkill(ACCESSORY_CRAFT_SKILL): + sm.openUI(UIType.UI_MAKING_SKILL) +else: + sm.systemMessage("Only Jewelers can use this.") diff --git a/scripts/npc/open_alchemy.py b/scripts/npc/open_alchemy.py new file mode 100755 index 0000000..ff14939 --- /dev/null +++ b/scripts/npc/open_alchemy.py @@ -0,0 +1,8 @@ +from net.swordie.ms.enums import UIType + +ALCHEMY_CRAFT_SKILL = 92040000 + +if sm.hasSkill(ALCHEMY_CRAFT_SKILL): + sm.openUI(UIType.UI_MAKING_SKILL) +else: + sm.systemMessage("Only Alchemists can use this.") diff --git a/scripts/npc/open_equipP.py b/scripts/npc/open_equipP.py new file mode 100755 index 0000000..0e5d645 --- /dev/null +++ b/scripts/npc/open_equipP.py @@ -0,0 +1,9 @@ +from net.swordie.ms.enums import UIType + +SMITHING_CRAFT_SKILL = 92020000 + +if sm.hasSkill(SMITHING_CRAFT_SKILL): + sm.openUI(UIType.UI_MAKING_SKILL) +else: + sm.systemMessage("Only Blacksmiths can use this.") + diff --git a/scripts/npc/open_herb.py b/scripts/npc/open_herb.py new file mode 100755 index 0000000..b738eb0 --- /dev/null +++ b/scripts/npc/open_herb.py @@ -0,0 +1,8 @@ +from net.swordie.ms.enums import UIType + +HERBALISM_SKILL = 92000000 + +if sm.hasSkill(HERBALISM_SKILL): + sm.openUI(UIType.UI_MAKING_SKILL) +else: + sm.systemMessage("Only Herbalists can use this.") \ No newline at end of file diff --git a/scripts/npc/open_mining.py b/scripts/npc/open_mining.py new file mode 100755 index 0000000..72fb76e --- /dev/null +++ b/scripts/npc/open_mining.py @@ -0,0 +1,8 @@ +from net.swordie.ms.enums import UIType + +MINING_SKILL = 92010000 + +if sm.hasSkill(MINING_SKILL): + sm.openUI(UIType.UI_MAKING_SKILL) +else: + sm.systemMessage("Only Miners can use this.") diff --git a/scripts/npc/ossyria3_1.py b/scripts/npc/ossyria3_1.py new file mode 100755 index 0000000..7685b84 --- /dev/null +++ b/scripts/npc/ossyria3_1.py @@ -0,0 +1,21 @@ +# Orbis Magic Spot (2012014) | Orbis Tower <20th/16th/8th/1st Floor> + +maps = [ + 200080200, # Orbis Tower <20th Floor> + 200080600, # Orbis Tower <16th Floor> + 200081400, # Orbis Tower <8th Floor> + 200082100 # Orbis Tower <1st Floor> + ] + +mapString = "Where do you want to go?\r\n\r\n#b" +i = 0 +while i < len(maps): + if maps[i] == sm.getFieldID(): + i += 1 + continue + else: + mapString += "#L"+ str(i) +"##m"+ str(maps[i]) +"##l\r\n" + i += 1 +answer = sm.sendNext(mapString) + +sm.warp(maps[answer], 0) diff --git a/scripts/npc/ossyria_taxi.py b/scripts/npc/ossyria_taxi.py new file mode 100755 index 0000000..f8503da --- /dev/null +++ b/scripts/npc/ossyria_taxi.py @@ -0,0 +1,48 @@ +if sm.getFieldID() == 211000000: + map = [211060000, 211040200, 211041400, 300000100] + selection = sm.sendNext("Where would you like to go?" + "\r\n#L0#Desolate Moor#l" + "\r\n#L1#Ice Valley II#l" + "\r\n#L2#Forest of Dead Trees IV#l" + "\r\n#L3#Small Forest#l") + sm.warp(map[selection], 0) + sm.dispose() + +elif sm.getFieldID() == 300000100: + map = [211000000, 220000000] + selection = sm.sendNext("Where would you like to go?" + "\r\n#L0#El Nath#l" + "\r\n#L1#Ludibrium#l") + sm.warp(map[selection], 0) + sm.dispose() + +elif sm.getFieldID() == 220000000: + map = [220050300, 300000100] + selection = sm.sendNext("Where would you like to go?" + "\r\n#L0#Path of Time#l" + "\r\n#L1#Small Forest#l") + sm.warp(map[selection], 0) + sm.dispose() + +elif sm.getFieldID() == 240000000: + map = [240030000, 240040500] + selection = sm.sendNext("Where would you like to go?" + "\r\n#L0#Entrance to Dragon Forest#l" + "\r\n#L1#Entrance to Dragon Nest#l") + sm.warp(map[selection], 0) + sm.dispose() + +else: + currentMap = sm.getFieldID() + +if currentMap == 220050300: + map = 220000000 +elif currentMap == 105030000: + map = 105000000 +elif currentMap == 105000000: + map = 105030000 +elif currentMap == 211060000: + map = 211000000 +response = sm.sendAskYesNo("Would you like to go to #m" + str(map) + "m#?") +if response: + sm.warp(map, 0) diff --git a/scripts/npc/outSecondDH.py b/scripts/npc/outSecondDH.py new file mode 100755 index 0000000..28a2acc --- /dev/null +++ b/scripts/npc/outSecondDH.py @@ -0,0 +1,6 @@ +response = sm.sendAskYesNo("Are you done with the Knighthood Exam? Should I let you out?") + +if response: + sm.warp(130020000) +else: + sm.sendSayOkay("Okay, good luck hunting.") \ No newline at end of file diff --git a/scripts/npc/out_evolvingSystem.py b/scripts/npc/out_evolvingSystem.py new file mode 100755 index 0000000..d687084 --- /dev/null +++ b/scripts/npc/out_evolvingSystem.py @@ -0,0 +1,2 @@ +# ESS (9075301) | Evo Lab initiator +sm.warpInstanceOut(957000000) \ No newline at end of file diff --git a/scripts/npc/out_tree.py b/scripts/npc/out_tree.py new file mode 100755 index 0000000..b997033 --- /dev/null +++ b/scripts/npc/out_tree.py @@ -0,0 +1,9 @@ + # Scarf Snowman (2001004) | The Hill of Christmas (209000001 - 209000015) + # Author: Tiger + +response = sm.sendAskYesNo("Have you decorated your tree nicely? It's an interesting experience, to say the least, decorating a Christmas tree with other people. Don't cha think? Oh yeah ... are you suuuuure you want to leave this place?") + +if response: + sm.warp(209000000) # Hidden Street - Happyville +else: + sm.sendNext("You need more time decorating trees, huh? If you ever feel like leaving this place, feel free to come talk to me~") diff --git a/scripts/npc/out_treglo.py b/scripts/npc/out_treglo.py new file mode 100755 index 0000000..620f438 --- /dev/null +++ b/scripts/npc/out_treglo.py @@ -0,0 +1,5 @@ +response = sm.sendAskYesNo("Are you sure you want to leave?") + +if response: + sm.WarpInstanceOut(401052104) + sm.dispose() diff --git a/scripts/npc/out_victor.py b/scripts/npc/out_victor.py new file mode 100755 index 0000000..824ee58 --- /dev/null +++ b/scripts/npc/out_victor.py @@ -0,0 +1,5 @@ +response = sm.sendAskYesNo("Are you sure you want to leave?") + +if response: + sm.WarpInstanceOut(401051104) + sm.dispose() diff --git a/scripts/npc/owen.py b/scripts/npc/owen.py new file mode 100755 index 0000000..b33eca4 --- /dev/null +++ b/scripts/npc/owen.py @@ -0,0 +1,24 @@ +# Arwen the Fairy (1032100) | Ellinia + +squishyLiquid = 4000004 # goes for 14meso per item in Shops +squishyLiquidQ = 100 + +slimeid = 100006 +mesoReward = 5000 + +if sm.getQuantityOfItem(squishyLiquid) >= 100: + if sm.sendAskYesNo("Hey, I see you got "+ str(squishyLiquidQ) +" pieces of #b#z"+ str(squishyLiquid) +"##k!\r\nDo you want to trade them for a reward?"): + if sm.getQuantityOfItem(squishyLiquid) >= 100: + sm.sendSayOkay("There you go!\r\n"+ str(mesoReward) +" mesos, for your hard work.\r\n\r\nIf you want to make more money, talk to me again at anytime!") + sm.giveMesos(mesoReward) + sm.consumeItem(squishyLiquid, squishyLiquidQ) + +else: + if sm.sendAskYesNo("Hey you!\r\nAre you willing to help me?"): + sm.sendNext("Ellinia used to be a peaceful time, but lately it has turned into chaos. Ellinia has been surrounded by #r#o"+ str(slimeid) +"##k. " + "You may believe this is a bad thing, but for me, however.. it's not bad at all. " + "I am researching how these slimes come to life.\r\n" + "If you could bring me "+ str(squishyLiquidQ) +" #b#z"+ str(squishyLiquid) +"##k. " + "It would allow me to do a lot of research, I will certainly reward you!") + else: + sm.sendSayOkay("Alright, let me know if you change your mind!") \ No newline at end of file diff --git a/scripts/npc/pantheonMapleGate.py b/scripts/npc/pantheonMapleGate.py new file mode 100755 index 0000000..49d7ea4 --- /dev/null +++ b/scripts/npc/pantheonMapleGate.py @@ -0,0 +1,8 @@ +response = sm.sendAskYesNo("Would you like to go back to Victoria Island?") + +if response: + if sm.hasQuest(38030): + sm.setQRValue(38030, "clear", False) + sm.warp(100000000, 23) + sm.dispose() + sm.warp(104020000, 0) diff --git a/scripts/npc/party2_enter.py b/scripts/npc/party2_enter.py new file mode 100755 index 0000000..df94255 --- /dev/null +++ b/scripts/npc/party2_enter.py @@ -0,0 +1,42 @@ +# Red sign | Party quest entrance +from net.swordie.ms.enums import UIType +selection = sm.sendNext("#e#n \r\n\r\n" + "You can't go any higher because of the extremely dangerous creatures above. Would you like to collaborate with party members to complete the quest? If so, please have your #bparty leader#k talk to me. \r\n\r\n" + "#b#L0#I want to participate in the party quest.#l \r\n" + "#L1#I want to find party members.#l \r\n" + "#L2#I want to receive the Broken Glasses.#l \r\n" + "#L3#I would like to hear more details.#l \r\n") +#warp inside PQ +if selection == 0: + if not sm.getFieldID() == 910002000: + #TODO edit party size back and add party level + if sm.getPartySize() >= 1: + if sm.isPartyLeader(): + sm.clearPartyInfo(922010100) + sm.warpPartyIn(922010100) + else: + sm.sendNext("Please have your party leader speak to me.") + else: + sm.sendNext("You cannot participate in the quest because you do not have at least 3 party members. If you're having trouble finding party members, try using Party Search.") + else: + sm.sendNext("If you're up for the challenge, I'll bring you to the top of the tower.") + sm.warp(221023300) + +#Look for party members +elif selection == 1: + sm.openUI(UIType.PARTYSEARCH) + +#Reward shop +elif selection == 2: +#TODO add times helped + sm.sendNext("I am offering 1x #i1022073# #bBroken Glasses#k for every 5 times you help me. If you help me #b5 more times#k, #byou can receive Broken Glasses#k.") + +#Explanation +elif selection == 3: + sm.sendNext("#e#n \r\n" + "A Dimensional Crack has appeared in #b#m220000000##k! We desperately need brave adventurers who can defeat the monsters pouring through. Please, party with some dependable allies to save #m220000000#!" + "You must pass through several stages by defeating monsters and solving quizzes, and ultimately defeat #r#o2600622##k. \r\n" + "#e-Level#n: 120 or above #r(Recommended Level: 120 - 139)\r\n" + "#e-Time Limit#n: 20 min \r\n" + "#e-Number of Players#n: 3 to 6 \r\n" + "#e-Reward#n: #i1022073# Broken Glasses #b(obtained every 5 times you participate)#k, various Use Etc and Equip items.") diff --git a/scripts/npc/party2_out.py b/scripts/npc/party2_out.py new file mode 100755 index 0000000..71b4020 --- /dev/null +++ b/scripts/npc/party2_out.py @@ -0,0 +1,9 @@ +# Sgt. Anderson(2040047) | Abandoned tower : Exiting Ludibrium Dimension pq +sm.setSpeakerID(2040047) +response = sm.sendAskYesNo("Are you sure you want to leave your party behind and leave the quest?") + +if response == 0: + sm.sendNext("Thank you for choosing to stay here and finish this quest.") +elif response == 1: + sm.sendNext("Okay, I will send you back to the 101st floor of the Eos tower.") + sm.warpInstanceOut(221023300) \ No newline at end of file diff --git a/scripts/npc/party2_play.py b/scripts/npc/party2_play.py new file mode 100755 index 0000000..33a1364 --- /dev/null +++ b/scripts/npc/party2_play.py @@ -0,0 +1,89 @@ +# Red Balloon(2040036)/ Lime Balloon(2040039) | Ludibrium dimension pq stage npc + +DIMENSIONAL_PASS_COUNT = "DimensionalPassCount" +STAGE_2_CLEARED = "Stage2Cleared" +STAGE_3_ORDER = "Stage3Order" +stage3OrderArray = [0, 0, 0, 0, 0, 0] +STAGE_4_CLEARED = "Stage4Cleared" +STAGE_5_CLEARED = "Stage5Cleared" + +#Stage 1 +if sm.getFieldID() == 922010100: + sm.setSpeakerID(2040036) + if field.hasProperty(DIMENSIONAL_PASS_COUNT): + if field.getProperty(DIMENSIONAL_PASS_COUNT) >= 20: + sm.sendNext("You have collected all the passes. Please proceed to the next stage through the portal.") + else: + sm.sendNext("Please talk to me again after collecting all #r20#k Dimensional passes from the monsters in this stage.") + else: + sm.sendNext("Welcome! Please start by defeating the monsters in this stage and collecting the Dimensional passes they hold.") + +#Stage 2 +elif sm.getFieldID() == 922010400: + sm.setSpeakerID(2040039) + if field.hasProperty(STAGE_2_CLEARED): + if field.getProperty(STAGE_2_CLEARED) == True: + sm.sendNext("You have defeated all the monsters lurking in the darkness. Please proceed to the next stage through the portal.") + else: + sm.sendNext("Please speak to me again after defeating all the Dark Eyes and Shadow Eyes hiding in the darkness.") + else: + sm.sendNext("Please speak to me again after defeating all the Dark Eyes and Shadow Eyes hiding in the darkness.") + +#Stage 3 +elif sm.getFieldID() == 922010600: + sm.sendNext("The boxes contain hidden portals, try to get to the top!") + +#Stage 4 +elif sm.getFieldID() == 922010700: + if field.hasProperty(STAGE_4_CLEARED): + if field.getProperty(STAGE_4_CLEARED) == True: + sm.sendNext("Wow, not a single Rombad left! I'm impressed! Please proceed to the next stage through the portal.") + sm.showObjectFieldEffect("gate") + else: + sm.sendNext("Please talk to me after defeating all monsters in this stage.") + else: + sm.sendNext("Please talk to me after defeating all monsters in this stage.") + +#Stage 5 +elif sm.getFieldID() == 922010800: + if field.hasProperty(STAGE_5_CLEARED): + pos = chr.getPosition() + pos.getX + #Floor 3 + if pos.getY() <= -550: + #Box 1 + if pos.getX() >= -20 and pos.getX() <= 30: + sm.sendNext("On box 1") + #Box 2 + elif pos.getX() >= 75 and pos.getX() <= 125: + sm.sendNext("On box 2") + #Floor 2 + elif pos.getY() <= -300: + #Box 3 + if pos.getX() >= -120 and pos.getX() <= -70: + sm.sendNext("On box 3") + #Box 4 + elif pos.getX() >= -35 and pos.getX() <= 20: + sm.sendNext("On box 4") + #Box 5 + elif pos.getX() >= 55 and pos.getX() <= 110: + sm.sendNext("On box 5") + #Floor 1 + elif pos.getY() <= -140: + #Box 6 + if pos.getX() >= -240 and pos.getX() <= -190: + sm.sendNext("On box 6") + #Box 7 + elif pos.getX() >= -160 and pos.getX() <= -110: + sm.sendNext("On box 7") + #Box 8 + elif pos.getX() >= -80 and pos.getX() <= -35: + sm.sendNext("On box 8") + #Box 9 + elif pos.getX() >= 5 and pos.getX() <= 55: + sm.sendNext("On box 9") + else: + sm.sendNext("In the fifth stage, you will find a number of platforms. Of these platforms, #b3 are connected to the portal that leads to the next stage. 3 members of your party must stand in the center of these 3 platforms.#k Remember, exactly 3 members must be on a platform. No more, no less. While they are on the platform, the party leader must #bdouble-click on me to check whether the members have chosen the right platform#k. Good luck!") + field.setProperty(STAGE_5_CLEARED, False) + #sm.showObjectFieldEffect("gate") + diff --git a/scripts/npc/party_ludimaze_goal.py b/scripts/npc/party_ludimaze_goal.py new file mode 100755 index 0000000..4b33320 --- /dev/null +++ b/scripts/npc/party_ludimaze_goal.py @@ -0,0 +1,3 @@ +# Pietri : ludi maze room 16 +if sm.sendAskYesNo("?"): + sm.warp(910002000, 0) \ No newline at end of file diff --git a/scripts/npc/periPatrol02.py b/scripts/npc/periPatrol02.py new file mode 100755 index 0000000..b042712 --- /dev/null +++ b/scripts/npc/periPatrol02.py @@ -0,0 +1,10 @@ +# Perion Warning Post (1022107) | Dusty Wind Hill +if sm.hasQuest(22530): + if not sm.canHold(1952000): + sm.sendSayOkay("You need inventory space.") + else: + sm.completeQuestNoRewards(22530) + sm.giveItem(1952000) + sm.sendSayOkay("You examine the sign. Finished the guard's request.") +else: + sm.sendSayOkay("It's a sign.") diff --git a/scripts/npc/pet_letter.py b/scripts/npc/pet_letter.py new file mode 100755 index 0000000..94472f1 --- /dev/null +++ b/scripts/npc/pet_letter.py @@ -0,0 +1,16 @@ +# Trainer Frod (1012007) | Pet-Walking Road +if sm.hasItem(4031035): + sm.sendNext("Eh, that's my brother's letter! " + "Probably scolding me for thinking I'm not working and stuff...Eh? " + "Ahhh...you followed my brother's advice and trained your pet and got up here, huh? " + "Nice!! Since you worked hard to get here, I'll boost your intimacy level with your pet.") + sm.consumeItem(4031035) + sm.sendSayOkay("What do you think? Don't you think you have gotten much closer with your pet? " + "If you have time, train your pet again on this obstacle course...of course, with my brother's permission.") +else: + sm.sendSayOkay("My brother told me to take care of the pet obstacle course, " + "but ... since I'm so far away from him, I can't help but wanting to goof around ...hehe, " + "since I don't see him in sight, might as well just chill for a few minutes.") + +# Pet Closeness Gained +sm.dispose() diff --git a/scripts/npc/pet_lifeitem.py b/scripts/npc/pet_lifeitem.py new file mode 100755 index 0000000..4b2739a --- /dev/null +++ b/scripts/npc/pet_lifeitem.py @@ -0,0 +1,25 @@ +# Trainer Bartos (1012006) | Pet-Walking Road + + +selection = sm.sendNext("Do you have any business with me?#b\r\n" + "#L0#Please tell me about this place.#l\r\n" + "#L1#I'm here through a word from Mar the Fairy...#l") + +if selection == 0: + if sm.hasItem(4031035): + sm.sendNext("Jump over obstacles with your pet, and take that letter to my brother Trainer Frod. " + "Give him the letter and something good is going to happen to your pet.") + else: + if sm.sendAskYesNo("This is the road where you can go take a walk with your pet. " + "You can just walk around with it, or you can train your pet to go through the obstacles here. " + "If you aren't too close with your pet yet, that may present a problem and he will not follow your command as much... " + "\r\nSo, what do you think? Wanna train your pet?"): + sm.giveItem(4031035) + sm.sendSayOkay("Ok, here's the letter. " + "He wouldn't know I sent you if you just went there straight, " + "so go through the obstacles with your pet, go to the very top, and then talk to Trainer Frod to give him the letter. " + "It won't be hard if you pay attention to your pet while going through obstacles. " + "Good luck!") + +if selection == 1: + sm.sendSayOkay("Hey, are you sure you've met #bMar the Fairy#k? Don't lie to me if you've never met her before because it's obvious. That wasn't even a good lie!!") diff --git a/scripts/npc/petmaster.py b/scripts/npc/petmaster.py new file mode 100755 index 0000000..5d62203 --- /dev/null +++ b/scripts/npc/petmaster.py @@ -0,0 +1,379 @@ +# Wisp (2040030) | Eos Tower Entrance + + +sm.sendNext("Hello there, I'm #bMar the Fairy#k of Victoria Island's main disciple. " + "Mar the Fairy summoned me here to see if the pets are being taken care of here in Ludibrium. " + "What can I do for you?\r\n" + "feel free to ask me questions.") + + +sm.sendNext("What do you want to know more of?#b\r\n" + "#L0#Tell me more about Pets.#l\r\n" + "#L1#How do I raise Pets?#l\r\n" + "#L2#Do Pets die too?#l\r\n" + "#L3#What are the commands for Brown and Black Kitty?#l\r\n" + "#L4#What are the commands for Brown Puppy?#l\r\n" + "#L5#What are the commands for Pink and White Bunny?#l\r\n" + "#L6#What are the commands for Mini Kargo?#l\r\n" + "#L7#What are the commands for Rudolph and Dasher?#l\r\n" + "#L8#What are the commands for Black Pig?#l\r\n" + "#L9#What are the commands for Panda?#l\r\n" + "#L10#What are the commands for Husky?#l\r\n" + "#L11#What are the commands for Dino Boy and Dino Girl?#l\r\n" + "#L12#What are the commands for Monkey?#l\r\n" + "#L13#What are the commands for Turkey?#l\r\n" + "#L14#What are the commands for White Tiger?#l\r\n" + "#L15#What are the commands for Penguin?#l\r\n" + "#L16#What are the commands for Golden Pig?#l\r\n" + "#L17#What are the commands for Robot?#l\r\n" + "#L18#What are the commands for Mini Yeti?#l\r\n" + "#L19#What are the commands for Jr. Balrog?#l\r\n" + "#L20#What are the commands for Baby Dragon?#l\r\n" + "#L21#What are the commands for Green/Red/Blue Dragon?#l\r\n" + "#L22#What are the commands for Black Dragon?#l\r\n" + "#L23#What are the commands for Jr. Reaper?#l\r\n" + "#L24#What are the commands for Porcupine?#l\r\n" + "#L25#What are the commands for Snowman?#l\r\n" + "#L26#What are the commands for Skunk?#l\r\n" + "#L27#Please teach me about transferring pet ability points.#l") + +selection = answer +if selection == 0: + sm.sendNext("So you want to know more about Pets. Long ago I made a doll, " + "sprayed Water of Life on it, and cast spell on it to create a magical animal. " + "I know it sounds unbelievable, but it's a doll that became an actual living thing. " + "They understand and follow people very well.") + sm.sendNext("But Water of Life only comes out little at the very bottom of the World Tree, so I can't give him too much time in life... " + "I know, it's very unfortunate... but even if it becomes a doll again I can always bring life back into it so be good to it while you're with it.") + sm.sendNext("Oh yeah, they'll react when you give them special commands. You can scold them, love them... it all\r\ndepends on how you take care of them. " + "They are afraid to leave their masters so be nice to them, show them love. They can get sad and lonely fast...") + sm.sendNext("Depending on the command you give, pets can love it, hate, and display other kinds of reactions to it. " + "If you give the pet a command and it follows you well, your intimacy goes up. " + "Double click on the pet and you can check the intimacy, level, fullness and etc...") + sm.sendNext("Talk to the pet, pay attention to it and its intimacy level will go up and eventually his overall level will go up too. " + "As the intimacy level rises, the pet's overall level will rise soon after. " + "As the overall level rises, one day the pet may even talk like a person a little bit, so try hard raising it. " + "Of course it won't be easy doing so...") + sm.sendNext("It may be a live doll but they also have life so they can feel the hunger too. " + "#bFullness#k shows the level of hunger the pet's in. 100 is the max, and the lower it gets, " + "it means that the pet is getting hungrier. After a while, it won't even follow your command and be on the offensive, " + "so watch out over that.") + sm.sendNext("Oh yes! Pets can't eat the normal human food. " + "Instead my disciple #bDoofus#k sells #bPet Food#k at the Henesys Market so if you need food for your pet, find Henesys. " + "It'll be a good idea to buy the food in advance and feed the pet before it gets really hungry.") + sm.sendNext("Oh, and if you don't feed the pet for a long period of time, it goes back home by itself. " + "You can take it out of its home and feed it but it's not really good for the pet's health, " + "so try feeding him on a regular basis so it doesn't go down to that level, alright? I think this will do.") + sm.sendNext("Dying... well, they aren't technically ALIVE per se, so I don't know if dying is the right term to use. " + "They are dolls with my magical power and the power of Water of Life to become a live object. " + "Of course while it's alive, it's just like a live animal...") + sm.sendNext("After some time... that's correct, they stop moving. " + "They just turn back to being a doll, after the effect of magic dies down and Water of Life dries out. " + "But that doesn't mean it's stopped forever, because once you pour Water of Life over, it's going to be back alive.") + sm.sendNext("Even if it someday moves again, it's sad to see them stop altogether. " + "Please be nice to them while they are alive and moving. Feed them well, too. " + "Isn't it nice to know that there's something alive that follows and listens to only you?") +if selection == 1: + sm.sendNext("Depending on the command you give, pets can love it, hate, and display other kinds of reactions to it. " + "If you give the pet a command and it follows you well, your intimacy goes up. " + "Double click on the pet and you can check the intimacy, level, fullness and etc...") +if selection == 2: + sm.sendNext("Dying... well, they aren't technically ALIVE per se, so I don't know if dying is the right term to use. " + "They are dolls with my magical power and the power of Water of Life to become a live object. " + "Of course while it's alive, it's just like a live animal...") +if selection == 3: + sm.sendNext("These are the commands for #rBrown Kitty and Black Kitty#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bcutie#k (Level 10 ~ 30)\r\n" + "#bup, stand, rise#k (Level 20 ~ 30)") +if selection == 4: + sm.sendNext("These are the commands for #rBrown Puppy#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, baddog, dummy#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n#bpee#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bdown#k (Level 10 ~ 30)\r\n" + "#bup, stand, rise#k (Level 20 ~ 30)") +if selection == 5: + sm.sendNext("These are the commands for #rPink Bunny and White Bunny#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bhug#k (Level 10 ~ 30)\r\n" + "#bsleep, sleepy, gotobed#k (Level 20 ~ 30)") +if selection == 6: + sm.sendNext("These are the commands for #rMini Kargo#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpee#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 10 ~ 30)\r\n" + "#bthelook, charisma#k (Level 10 ~ 30)\r\n" + "#bdown#k (Level 10 ~ 30)\r\n" + "#bgoodboy, goodgirl#k (Level 20 ~ 30)") +if selection == 7: + sm.sendNext("These are the commands for #rRudolph and Dasher#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bup, stand#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#bmerryxmas, merrychristmas#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#btalk, say, chat#k (Level 11 ~ 30)\r\n" + "#blonely, alone#k (Level 11 ~ 30)\r\n" + "#bcutie#k (Level 11 ~ 30)\r\n" + "#bmush, go#k (Level 21 ~ 30)") +if selection == 8: + sm.sendNext("These are the commands for #rBlack Pig#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1~30)\r\n" + "#bhand#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bsmile#k (Level 10 ~ 30)\r\n" + "#bthelook, charisma#k (Level 20 ~ 30)") +if selection == 9: + sm.sendNext("These are the commands for #rPanda#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bchill, relax#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bletsplay#k (Level 10 ~ 30)\r\n" + "#bmeh, bleh#k (Level 10 ~ 30)\r\n" + "#bsleep#k (Level 20 ~ 30)") +if selection == 10: + sm.sendNext("These are the commands for #rHusky#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, baddog, dummy#k (Level 1 ~ 30)\r\n" + "#bhand#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bdown#k (Level 10 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bup, stand, rise#k (Level 20 ~ 30)") +if selection == 11: + sm.sendNext("These are the commands for #rDino Boy and Dino Girl#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bsmile, laugh#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bcutie#k (Level 10 ~ 30)\r\n" + "#bsleep, nap, sleepy#k (Level 20 ~ 30)") +if selection == 12: + sm.sendNext("These are the commands for #rMonkey#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#brest#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpee#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bup, stand#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bplay#k (Level 10 ~ 30)\r\n" + "#bmelong#k (Level 10 ~ 30)\r\n" + "#bsleep, gotobed, sleepy#k (Level 20 ~ 30)") +if selection == 13: + sm.sendNext("These are the commands for #rTurkey#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno, rudeboy, mischief#k (Level 1 ~ 30)\r\n" + "#bstupid#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bup, stand#k (Level 1 ~ 30)\r\n" + "#btalk, chat, gobble#k (Level 10 ~ 30)\r\n" + "#byes, goodboy#k (Level 10 ~ 30)\r\n" + "#bsleepy, birdnap, doze#k (Level 20 ~ 30)\r\n" + "#bbirdeye, thanksgiving, fly, friedbird, imhungry#k (Level 30)") +if selection == 14: + sm.sendNext("These are the commands for #rWhite Tiger#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#brest, chill#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bactsad, sadlook#k (Level 10 ~ 30)\r\n" + "#bwait#k (Level 20 ~ 30)") +if selection == 15: + sm.sendNext("These are the commands for #rPenguin#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 10 ~ 30)\r\n" + "#bhug, hugme#k (Level 10 ~ 30)\r\n" + "#bwing, hand#k (Level 10 ~ 30)\r\n" + "#bsleep#k (Level 20 ~ 30)\r\n" + "#bkiss, smooch, muah#k (Level 20 ~ 30)\r\n" + "#bfly#k (Level 20 ~ 30)\r\n" + "#bcute, adorable#k (Level 20 ~ 30)") +if selection == 16: + sm.sendNext("These are the commands for #rGolden Pig#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 11 ~ 30)\r\n" + "#bloveme, hugme#k (Level 11 ~ 30)\r\n" + "#bsleep, sleepy, gotobed#k (Level 21 ~ 30)\r\n" + "#bignore / impressed / outofhere#k (Level 21 ~ 30)\r\n" + "#broll, showmethemoney#k (Level 21 ~ 30)") +if selection == 17: + sm.sendNext("These are the commands for #rRobot#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bup, stand, rise#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#bbad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#battack, charge#k (Level 1 ~ 30)\r\n" + "#biloveyou#k (Level 1 ~ 30)\r\n" + "#bgood, thelook, charisma#k (Level 11 ~ 30)\r\n" + "#bspeack, talk, chat, say#k (Level 11 ~ 30)\r\n" + "#bdisguise, change, transform#k (Level 11 ~ 30)") +if selection == 18: + sm.sendNext("These are the commands for #rMini Yeti#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad, no, badboy, badgirl#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bdance, boogie, shakeit#k (Level 1 ~ 30)\r\n" + "#bcute, cutie, pretty, adorable#k (Level 1 ~ 30)\r\n" + "#biloveyou, likeyou, mylove#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say#k (Level 11 ~ 30)\r\n" + "#bsleep, nap, sleepy, gotobed#k (Level 11 ~ 30)") +if selection == 19: + sm.sendNext("These are the commands for #rJr. Balrog#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bliedown#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#biloveyou|mylove|likeyou#k (Level 1 ~ 30)\r\n" + "#bcute|cutie|pretty|adorable#k (Level 1 ~ 30)\r\n" + "#bpoop#k (Level 1 ~ 30)\r\n" + "#bsmirk|crooked|laugh#k (Level 1 ~ 30)\r\n" + "#bmelong#k (Level 11 ~ 30)\r\n" + "#bgood|thelook|charisma#k (Level 11 ~ 30)\r\n" + "#bspeak|talk|chat|say#k (Level 11 ~ 30)\r\n" + "#bsleep|nap|sleepy#k (Level 11 ~ 30)\r\n" + "#bgas#k (Level 21 ~ 30)") +if selection == 20: + sm.sendNext("These are the commands for #rBaby Dragon#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#biloveyou|loveyou#k (Level 1 ~ 30)\r\n#bpoop#k (Level 1 ~ 30)\r\n" + "#bstupid|ihateyou|dummy#k (Level 1 ~ 30)\r\n#bcutie#k (Level 11 ~ 30)\r\n" + "#btalk|chat|say#k (Level 11 ~ 30)\r\n" + "#bsleep|sleepy|gotobed#k (Level 11 ~ 30)") +if selection == 21: + sm.sendNext("These are the commands for #rGreen/Red/Blue Dragon#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 15 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 15 ~ 30)\r\n" + "#biloveyou|loveyou#k (Level 15 ~ 30)\r\n" + "#bpoop#k (Level 15 ~ 30)\r\n" + "#bstupid|ihateyou|dummy#k (Level 15 ~ 30)\r\n" + "#btalk|chat|say#k (Level 15 ~ 30)\r\n" + "#bsleep|sleepy|gotobed#k (Level 15 ~ 30)\r\n" + "#bchange#k (Level 21 ~ 30)") +if selection == 22: + sm.sendNext("These are the commands for #rBlack Dragon#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 15 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 15 ~ 30)\r\n" + "#biloveyou|loveyou#k (Level 15 ~ 30)\r\n" + "#bpoop#k (Level 15 ~ 30)\r\n" + "#bstupid|ihateyou|dummy#k (Level 15 ~ 30)\r\n" + "#btalk|chat|say#k (Level 15 ~ 30)\r\n" + "#bsleep|sleepy|gotobed#k (Level 15 ~ 30)\r\n" + "#bcutie, change#k (Level 21 ~ 30)") +if selection == 23: + sm.sendNext("These are the commands for #rJr. Reaper#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#bplaydead, poop#k (Level 1 ~ 30)\r\n" + "#btalk|chat|say#k (Level 1 ~ 30)\r\n" + "#biloveyou, hug#k (Level 1 ~ 30)\r\n" + "#bsmellmyfeet, rockout, boo#k (Level 1 ~ 30)\r\n" + "#btrickortreat#k (Level 1 ~ 30)\r\n" + "#bmonstermash#k (Level 1 ~ 30)") +if selection == 24: + sm.sendNext("These are the commands for #rPorcupine#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bno|bad|badgirl|badboy#k (Level 1 ~ 30)\r\n" + "#biloveyou|hug|goodboy#k (Level 1 ~ 30)\r\n" + "#btalk|chat|say#k (Level 1 ~ 30)\r\n" + "#bcushion|sleep|knit|poop#k (Level 1 ~ 30)\r\n" + "#bcomb|beach#k (Level 10 ~ 30)\r\n" + "#btreeninja#k (Level 20 ~ 30)\r\n" + "#bdart#k (Level 20 ~ 30)") +if selection == 25: + sm.sendNext("These are the commands for #rSnowman#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bstupid, ihateyou, dummy#k (Level 1 ~ 30)\r\n" + "#bloveyou, mylove, ilikeyou#k (Level 1 ~ 30)\r\n" + "#bmerrychristmas#k (Level 1 ~ 30)\r\n" + "#bcutie, adorable, cute, pretty#k (Level 1 ~ 30)\r\n" + "#bcomb, beach/bad, no, badgirl, badboy#k (Level 1 ~ 30)\r\n" + "#btalk, chat, say/sleep, sleepy, gotobed#k (Level 10 ~ 30)\r\n" + "#bchang#k (Level 20 ~ 30)") +if selection == 26: + sm.sendNext("These are the commands for #rSkunk#k. " + "The level mentioned next to the command shows the pet level required for it to respond.\r\n" + "#bsit#k (Level 1 ~ 30)\r\n" + "#bbad/no/badgirl/badboy#k (Level 1 ~ 30)\r\n" + "#brestandrelax, poop#k (Level 1 ~ 30)\r\n" + "#btalk/chat/say, iloveyou#k (Level 1 ~ 30)\r\n" + "#bsnuggle/hug, sleep, goodboy#k (Level 1 ~ 30)\r\n" + "#bfatty, blind, badbreath#k (Level 10 ~ 30)\r\n" + "#bsuitup, bringthefunk#k (Level 20 ~ 30)") +if selection == 27: + sm.sendNext("In order to transfer the pet ability points, closeness and level, " + "Pet AP Reset Scroll is required. If you take this\r\n" + "scroll to Mar the Fairy in Ellinia, she will transfer the level and closeness of the pet to another one. " + "I am especially giving it to you because I can feel your heart for your pet. However, I can't give this out for free. " + "I can give you this book for 250,000 mesos. Oh, I almost forgot! Even if you have this book, it is no use if you do not have a new pet to transfer the Ability points.") + + if sm.sendAskYesNo("250,000 mesos will be deducted. Do you really want to buy?"): + if sm.getMesos() < 250000 or not sm.canHold(4160011): + sm.sendSayOkay("Please check if your inventory has empty slot or you don't have enough mesos.") + else: + sm.sendSayOkay("Thank you for your purchase.") + sm.deductMesos(250000) + sm.giveItem(4160011) diff --git a/scripts/npc/pierreEnter.py b/scripts/npc/pierreEnter.py new file mode 100755 index 0000000..043d5d2 --- /dev/null +++ b/scripts/npc/pierreEnter.py @@ -0,0 +1,51 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Normal", 100, 105200200, 5, EventType.Clown, 64800000], + ["Chaos", 220, 105200600, 5, EventType.CClown, 64800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 105200000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(1064002) + + dialog = "Do you want to head to the '#bWest Garden#k' to fight \r\n#bPierre#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the West Garden (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bPierre#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing #bPierre#k within the past 18 Hours.\r\n\r\nYou have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.ROOTABYSS_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/pirate4th_warp.py b/scripts/npc/pirate4th_warp.py new file mode 100755 index 0000000..225af7c --- /dev/null +++ b/scripts/npc/pirate4th_warp.py @@ -0,0 +1,20 @@ +# Pirate 4th Job NPC Warp Script + +MANON_PREV_MAP = 240020400 +GRIFFEY_PREV_MAP = 240020100 +MANONS_DARK_FOREST = 924000200 +DARK_GRIFFEY_FOREST = 924000201 + + +sm.setSpeakerID(parentID) +sm.sendNext("Is it in you to become a hero? The only way to find out is for you to take action...") +if not sm.hasQuest(1459): + sm.dispose() + +selection = sm.sendNext("If you agree to take this test, I will send you to Manon and Girffey. Of course, if you are capable of visit Manon Forest or Griffey Forest on your own, plese feel free to do so. What would you like to do?\r\n\r\n#L0##bPlease send me to Manon Forest.\r\n#L1#Please send me to Griffey Forest.#l\r\n#L2#It's nothing. I will go there on my own.#l#n") +if selection == 0: + sm.sendNext("Would you like to go to Manon Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(MANONS_DARK_FOREST, False) +elif selection == 1: + sm.sendNext("Would you like to go to Griffey Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(DARK_GRIFFEY_FOREST, False) diff --git a/scripts/npc/platformer_enter.py b/scripts/npc/platformer_enter.py new file mode 100755 index 0000000..6d1f550 --- /dev/null +++ b/scripts/npc/platformer_enter.py @@ -0,0 +1,50 @@ +# Maplerunner - Entry | Forest of Tenacity +# Author: shavit + +from net.swordie.ms.enums import UIType + +REQUIRED_QUEST = 34515 +REQUIRED_LEVEL = 33 + +TWO_PUNCH_CAT = 9070200 + +# Settings +sm.setSpeakerID(TWO_PUNCH_CAT) +sm.flipDialogue() +sm.setBoxChat() + +def first_dialog(): + sm.sendNext("Oh, it's you! " + "You're that goat with superhuman powers, aren't you? " + "It's an honor!") + + sm.sendNext("What are you doing hiding inside a human's body? " + "Ah, I get it. " + "You don't want the other animals to know who you really are!") + + sm.sendNext("Don't worry, your secret's safe with me. " + "But honestly, you'd be a great role model for some of the slackers around here.") + + sm.sendNext("Since you're not in your true goat form, I imagine you're a bit limited right now. " + "When you're out of that human body, I'd personally like to see #gwhat you're all about#k.") + + sm.sendNext("I think I get why you're pretending to be a human. " + "Discipline. I like that. Mad respect. " + "Anyway, good luck.") + + sm.sendNext("Oh, don't forget that you can use the #rDimensional Mirror #kwhen you're coming back!") + + sm.setQRValue(REQUIRED_QUEST, "1") + +if sm.getChr().getLevel() < REQUIRED_LEVEL: + sm.sendSayOkay("I'm sorry buddy, but this content is available starting from level %d and above." % REQUIRED_LEVEL) + sm.dispose() + +if not sm.hasQuestCompleted(REQUIRED_QUEST): + sm.sendSayOkay("You will have to finish the pre-entry quest attempting Maplerunner.") + sm.dispose() + +if sm.getQRValue(REQUIRED_QUEST) != "1": + first_dialog() + +sm.openUI(UIType.UI_PLATFORM_STAGE_SELECT) \ No newline at end of file diff --git a/scripts/npc/prisonBreak_enter.py b/scripts/npc/prisonBreak_enter.py new file mode 100755 index 0000000..fd017a1 --- /dev/null +++ b/scripts/npc/prisonBreak_enter.py @@ -0,0 +1,31 @@ +from net.swordie.ms.constants import CustomConstants +from net.swordie.ms.enums import EventType + +# Jenn (9020005) | Spiegelmann's Guest House + +pqItems = [ + +] + +runsPerDay = 3 + +if sm.isPartyLeader(): + sm.sendNext("Can you help me escape?#b\r\n" + "\r\n" + "#L0#Enter the Escape Party Quest#l") +else: + sm.sendSayOkay("Please have your party leader talk to me.") + sm.dispose() + +if sm.partyHasCoolDown(EventType.Escape_PQ, runsPerDay): + sm.sendNext("One of your party member has a cooldown for this pq.") + sm.dispose() + +if sm.checkParty() and sm.checkPartyLevelReq(CustomConstants.MIN_LEVEL_FOR_PQ): + # check for items + for item in pqItems: + if sm.hasItem(item): + quantity = sm.getQuantityOfItem(item) + sm.consumeItem(item, quantity) + sm.warpInstanceIn(921160100, 0, True) # Escape! - PQ first map + sm.addCoolDownInXDaysForParty(EventType.Escape_PQ, 1, 1) diff --git a/scripts/npc/promessa.py b/scripts/npc/promessa.py new file mode 100755 index 0000000..88bc113 --- /dev/null +++ b/scripts/npc/promessa.py @@ -0,0 +1,7 @@ +if not sm.hasQuestCompleted(23611): + sm.setSpeakerID(2300001) + response = sm.sendAskYesNo("You can't Return to Veritas until you complete your 2nd Job Advancement. Until then, you'll have to use the portal at the Aquarium. Are you sure you want to leave?") + if response: + sm.warp(310000000) +else: + sm.warp(310000000) diff --git a/scripts/npc/q1803_clear.py b/scripts/npc/q1803_clear.py new file mode 100755 index 0000000..c1392db --- /dev/null +++ b/scripts/npc/q1803_clear.py @@ -0,0 +1,3 @@ +# Power Control Device (9075105) | +sm.sendSayOkay("Evolution System initiating.") +sm.createQuestWithQRValue(1808, "find") \ No newline at end of file diff --git a/scripts/npc/q20850_check3.py b/scripts/npc/q20850_check3.py new file mode 100755 index 0000000..cfb8a2b --- /dev/null +++ b/scripts/npc/q20850_check3.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# [Kimu] | [1102204] +# Hidden Street : Tiru Forest +OBJECT_1 = sm.getIntroNpcObjectID(1102204) +sm.setSpeakerID(1102204) +sm.setPlayerAsSpeaker() +sm.sendNext("Kimu! You haven't seen the Master of Disguise, have you?") + + +sm.setSpeakerID(1102204) +sm.sendSay("Nope! Nothing to report! Search somewhere else!") + + +sm.setSpeakerID(1102204) +sm.setPlayerAsSpeaker() +sm.sendSay("Yeah, okay. Oh, by the way, thanks for the cape earlier. It's really helped me out.") + + +sm.setSpeakerID(1102204) +sm.sendSay("You betcha! Anytime, pal!") + + +sm.setSpeakerID(1102204) +sm.setPlayerAsSpeaker() +sm.sendSay("... You never gave me a cape.") + + +sm.setSpeakerID(1102204) +sm.sendSay("Argh! But my disguise was perfect! Very well, I guess we have no choice but to fight. Behold the power of the #rBlack Wings#k!") + + +sm.sendNpcController(OBJECT_1, False) +sm.spawnMob(9300743, -1934, 88, False) \ No newline at end of file diff --git a/scripts/npc/q23005ing.py b/scripts/npc/q23005ing.py new file mode 100755 index 0000000..94cb38a --- /dev/null +++ b/scripts/npc/q23005ing.py @@ -0,0 +1,6 @@ +# Flier board | Edelstein + +if sm.hasItem(4032783): + # TODO: add dialog here before consuming item + sm.consumeItem(4032783, 1) + sm.addQRValue(23006, "1") \ No newline at end of file diff --git a/scripts/npc/q62003_check.py b/scripts/npc/q62003_check.py new file mode 100755 index 0000000..d2210fa --- /dev/null +++ b/scripts/npc/q62003_check.py @@ -0,0 +1,26 @@ +CHIEF_PRIESTS_WOES = 62003 + +if sm.hasQuest(CHIEF_PRIESTS_WOES): + sm.setPlayerAsSpeaker() + if parentID == 9310585: + if "check1" not in sm.getQRValue(CHIEF_PRIESTS_WOES): + sm.addQRValue(CHIEF_PRIESTS_WOES, "check1") + sm.sendNext("People must be making a lot of offerings. Look at that altar! It's so... grandiose!") + + elif parentID == 9310586: + if "check2" not in sm.getQRValue(CHIEF_PRIESTS_WOES): + sm.addQRValue(CHIEF_PRIESTS_WOES, "check2") + sm.sendNext("That censer over there sure is releasing a lot of smoke. Is it haunted?") + + elif parentID == 9310587: + if "check3" not in sm.getQRValue(CHIEF_PRIESTS_WOES): + sm.addQRValue(CHIEF_PRIESTS_WOES, "check3") + sm.sendNext("There's a lot of weird stuff coming out of that window. \r\n" + "Something terrible must be happening inside the depository.") + + if "check1" in sm.getQRValue(CHIEF_PRIESTS_WOES) and \ + "check2" in sm.getQRValue(CHIEF_PRIESTS_WOES) and \ + "check3" in sm.getQRValue(CHIEF_PRIESTS_WOES): + + sm.giveExp(1010226) + sm.completeQuest(CHIEF_PRIESTS_WOES) \ No newline at end of file diff --git a/scripts/npc/q62013_item.py b/scripts/npc/q62013_item.py new file mode 100755 index 0000000..f87bd34 --- /dev/null +++ b/scripts/npc/q62013_item.py @@ -0,0 +1,16 @@ +BLUE_DEMON = 9310577 +KID_SHOES = 4034657 +MOUNT_SONG_HAMLET = 701210000 + +sm.removeEscapeButton() +sm.setBoxChat() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Those are the shoes that the #p"+ str(BLUE_DEMON) +"# lost. Return them to their owner in #m"+ str(MOUNT_SONG_HAMLET) +".") + +if not sm.canHold(KID_SHOES): + sm.sendNext("I should make some room in my inventory before grabbing the shoes.") + sm.dispose() + +sm.chatScript("Go to [Mount Song Hamlet] and find the owner of the shoes.") +sm.giveItem(KID_SHOES) diff --git a/scripts/npc/rank_user.py b/scripts/npc/rank_user.py new file mode 100755 index 0000000..3bf17b2 --- /dev/null +++ b/scripts/npc/rank_user.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# [FangBlade] | [9901000] +# Perion : Warriors' Sanctuary + +sm.setSpeakerID(9901000) +sm.sendSayOkay("Hello, I am #bFangBlade#k, and I am LEVEL 200.") \ No newline at end of file diff --git a/scripts/npc/reactor_8659135.py b/scripts/npc/reactor_8659135.py new file mode 100755 index 0000000..897e0a7 --- /dev/null +++ b/scripts/npc/reactor_8659135.py @@ -0,0 +1,16 @@ +# id 9400569 (Building Debris), field 867200400 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("guide135", False, 0, 0) +sm.sendDelay(120) +sm.forcedFlip(True) +sm.sendDelay(120) +sm.forcedAction(1946, 9999) +sm.showNpcSpecialActionByTemplateId(9400569, "state2", -1) +sm.forcedAction(1947, 9999) +sm.showNpcSpecialActionByTemplateId(9400569, "state3", -1) +sm.forcedAction(1948, 9999) +sm.resetNpcSpecialActionByTemplateId(9400569) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/reactordrop1", 128) +sm.showNpcSpecialActionByTemplateId(9400569, "hit", 0) +sm.sendDelay(900) +sm.lockInGameUI(False, True) diff --git a/scripts/npc/reactor_8659136.py b/scripts/npc/reactor_8659136.py new file mode 100755 index 0000000..fb9a935 --- /dev/null +++ b/scripts/npc/reactor_8659136.py @@ -0,0 +1,17 @@ +# id 9400577 (Building Debris), field 867200400 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("guide136", False, 0, 0) +sm.sendDelay(120) +sm.forcedFlip(True) +sm.sendDelay(120) +sm.forcedAction(1946, 9999) +sm.showNpcSpecialActionByTemplateId(9400577, "state2", -1) +sm.forcedAction(1947, 9999) +sm.showNpcSpecialActionByTemplateId(9400577, "state3", -1) +sm.forcedAction(1948, 9999) +sm.resetNpcSpecialActionByTemplateId(9400577) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/reactordrop2", 128) +sm.showNpcSpecialActionByTemplateId(9400577, "hit", 0) +sm.sendDelay(900) +sm.lockInGameUI(False, True) +sm.showNpcSpecialActionByTemplateId(9400578, "summon", 0) diff --git a/scripts/npc/reactor_8659137.py b/scripts/npc/reactor_8659137.py new file mode 100755 index 0000000..cbf078a --- /dev/null +++ b/scripts/npc/reactor_8659137.py @@ -0,0 +1,16 @@ +# id 9400578 (Building Debris), field 867200400 +sm.lockInGameUI(True, False) +sm.setMapTaggedObjectVisible("guide137", False, 0, 0) +sm.sendDelay(120) +sm.forcedFlip(True) +sm.sendDelay(120) +sm.forcedAction(1946, 9999) +sm.showNpcSpecialActionByTemplateId(9400578, "state2", -1) +sm.forcedAction(1947, 9999) +sm.showNpcSpecialActionByTemplateId(9400578, "state3", -1) +sm.forcedAction(1948, 9999) +sm.resetNpcSpecialActionByTemplateId(9400578) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/reactordrop3", 128) +sm.showNpcSpecialActionByTemplateId(9400578, "hit", 0) +sm.sendDelay(900) +sm.lockInGameUI(False, True) diff --git a/scripts/npc/remove_DirtytreasureMap.py b/scripts/npc/remove_DirtytreasureMap.py new file mode 100755 index 0000000..2635ce5 --- /dev/null +++ b/scripts/npc/remove_DirtytreasureMap.py @@ -0,0 +1,2 @@ +# Jack (1092010) | Nautilus +sm.sendSayOkay("(Scratch scratch...)") diff --git a/scripts/npc/rescue_nora.py b/scripts/npc/rescue_nora.py new file mode 100755 index 0000000..cfb6d3f --- /dev/null +++ b/scripts/npc/rescue_nora.py @@ -0,0 +1,43 @@ +# Nora the Explorer (1514002) | Nora's Cove + +if not sm.hasMobsInField(): + sm.sendNext("You have to be calm... very calm... Mother and Father, please give me strength...") + + sm.sendSay("Huh? The monsters are gone! Where have they gone to?") + + sm.sendSay("Brave warrior! You saved me! I don't know how to thank you but... Thank you so much.") + + sm.sendSay("My name is #bNora#k, an Archaeologist.\r\n\r\n" + "I came to Rien because my interest is in the Riena Straits" + "I was doing research on the mysterious fossil found here, but it started to move and attack me." + "I was to scared back then.") + + sm.sendSay("But why were you there, brave warrior?") + + sm.setPlayerAsSpeaker() + sm.sendSay("#b(I told Nora that I was in search of a witch to help the residents here.)#k") + + sm.setSpeakerID(parentID) + sm.sendSay("A witch? Are you saying the appearance of the monsters and the rising of the sea levels is all done by the witch?") + + sm.sendSay("No way. " + "These fossils fell off as the eternal frost started to melt due to the rising temperature and as the foundation rock plate was influenced by the ores with its magical power." + "Which means, these monsters appeared naturally. They have not been summoned by anyone.") + + sm.sendSay("As for the rising of the sea levels.. Would that be really the work of the witch? Wouldn't there be other reasons behind it?") + + sm.sendSay("I have a favor to ask. Can I come along as you investigate the area? Please take me as your colleague!") + + sm.setPlayerAsSpeaker() + sm.sendSay("#b(The knowledge of this young scholar would be a good help when solving problems.)") + + sm.setSpeakerID(parentID) + sm.sendSay("Thank you! You will not regret it.\r\n" + "(You will be transported to the 1st Observatory.)") + + #sm.completeQuest(32170) # [Riena Strait] Nerd Rescue + #sm.startQuestNoCheck(32194) # Seems to be a quest needed 'in progress' to make nora appear in other maps + sm.createQuestWithQRValue(32194, "1") + + sm.warpInstanceOut(141010000,0) # Ice Station 1 + diff --git a/scripts/npc/rita_Field.py b/scripts/npc/rita_Field.py new file mode 100755 index 0000000..72d8f40 --- /dev/null +++ b/scripts/npc/rita_Field.py @@ -0,0 +1,11 @@ +# [Grand Athenaeum] Warp out +sm.removeEscapeButton() +sm.setSpeakerID(2500001) + +answer = sm.sendSay("Return to the Grand Athenaeum?\r\n\r\n#b#L0#Return to the Grand Athenaeum. #l\r\n#L1#Not just yet.") +if answer == 0: + sm.sendNext("Remembering this location...") + sm.warp(302000000, 0) +elif answer == 1: + sm.addEscapeButton() + sm.sendSayOkay("You can go back if you still have stories to experience.") diff --git a/scripts/npc/rita_library.py b/scripts/npc/rita_library.py new file mode 100755 index 0000000..a1d111f --- /dev/null +++ b/scripts/npc/rita_library.py @@ -0,0 +1,8 @@ +# Grand Athenaeum - Dimension Library +from net.swordie.ms.enums import UIType + +if sm.hasQuestCompleted(32662): + sm.openUI(UIType.UI_DIMENSION_LIBRARY) +else: + sm.setSpeakerID(2500001) + sm.sendSayOkay("Chirp chirp! Talk to Thales the Librarian first.") \ No newline at end of file diff --git a/scripts/npc/rogue4th_warp.py b/scripts/npc/rogue4th_warp.py new file mode 100755 index 0000000..48714e2 --- /dev/null +++ b/scripts/npc/rogue4th_warp.py @@ -0,0 +1,20 @@ +# Thief 4th Job NPC Warp Script + +MANON_PREV_MAP = 240020400 +GRIFFEY_PREV_MAP = 240020100 +MANONS_DARK_FOREST = 924000200 +DARK_GRIFFEY_FOREST = 924000201 + + +sm.setSpeakerID(parentID) +sm.sendNext("Is it in you to become a hero? The only way to find out is for you to take action...") +if not sm.hasQuest(1457): + sm.dispose() + +selection = sm.sendNext("If you agree to take this test, I will send you to Manon and Girffey. Of course, if you are capable of visit Manon Forest or Griffey Forest on your own, plese feel free to do so. What would you like to do?\r\n\r\n#L0##bPlease send me to Manon Forest.\r\n#L1#Please send me to Griffey Forest.#l\r\n#L2#It's nothing. I will go there on my own.#l#n") +if selection == 0: + sm.sendNext("Would you like to go to Manon Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(MANONS_DARK_FOREST, False) +elif selection == 1: + sm.sendNext("Would you like to go to Griffey Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(DARK_GRIFFEY_FOREST, False) diff --git a/scripts/npc/rootaBossOut.py b/scripts/npc/rootaBossOut.py new file mode 100755 index 0000000..ef507a5 --- /dev/null +++ b/scripts/npc/rootaBossOut.py @@ -0,0 +1,13 @@ +sm.setSpeakerID(1064002) +sm.sendAskYesNo + +dialog = str() + +if sm.hasMobsInField(): + dialog = "Are you sure you want to leave the battlefield and abandon your party members?" + +else: + dialog = "Are you sure you want to leave the battlefield?" + +if sm.sendAskYesNo(dialog): + sm.WarpInstanceOut(105200000) \ No newline at end of file diff --git a/scripts/npc/roro_Check1.py b/scripts/npc/roro_Check1.py new file mode 100755 index 0000000..8e430fb --- /dev/null +++ b/scripts/npc/roro_Check1.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# [Magic Library Checker] | [1032218] +# Ellinia : Magic Library +if "1" not in sm.getQuestEx(25566, "c1"): + sm.setQuestEx(25566, "c1", "1") + sm.chatScript("You search the Magic Library.") \ No newline at end of file diff --git a/scripts/npc/roro_Check2.py b/scripts/npc/roro_Check2.py new file mode 100755 index 0000000..b0f5361 --- /dev/null +++ b/scripts/npc/roro_Check2.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# [Magic Library Checker] | [1032219] +# Ellinia : Magic Library +if "1" not in sm.getQuestEx(25566, "c2"): + sm.setQuestEx(25566, "c2", "1") + sm.chatScript("You search the Magic Library.") diff --git a/scripts/npc/roro_Check3.py b/scripts/npc/roro_Check3.py new file mode 100755 index 0000000..2f9e315 --- /dev/null +++ b/scripts/npc/roro_Check3.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# [Magic Library Checker] | [1032220] +# Ellinia : Magic Library +if "1" not in sm.getQuestEx(25566, "c3"): + sm.setQuestEx(25566, "c3", "1") + sm.chatScript("You search the Magic Library.") \ No newline at end of file diff --git a/scripts/npc/rouletteNPC.py b/scripts/npc/rouletteNPC.py new file mode 100755 index 0000000..1b6b300 --- /dev/null +++ b/scripts/npc/rouletteNPC.py @@ -0,0 +1,9 @@ +# russian roulette npc. +# custom function to work with in game event +# unsure what real function is + +if sm.getFieldID()== 910030000: # verify in event map + response = sm.sendNext("Hey! This is MapleStory Russian Roulette!\r\n#L0#What is that?#l\r\n#L1#Redeem rewards!#l") + # todo +else: + sm.sendSayOkay("Wanna give me a twirl, handsome?") \ No newline at end of file diff --git a/scripts/npc/rouletteNPC_2015.py b/scripts/npc/rouletteNPC_2015.py new file mode 100755 index 0000000..794a645 --- /dev/null +++ b/scripts/npc/rouletteNPC_2015.py @@ -0,0 +1,21 @@ +import random + +halloweenItems = [3018231,3018238,3018239,3018240,3018241,3018242,3018243,3018246,1702423,1112142,1112253,1052644,1004002,1702469,1702470,1702471,1702473,1702458,1702472,1702478,1702477,1702529,1702390,1012501,1102774,1102576,1102588,1004482,1052864,1051376,1032228,1072871,1702180,1102211,1102273,1004873,1050441,1073183,1102974,1051509,1702726,1053094,1053093,1702714,1004841,1702710,1115032,1115121,1115079,1115168] +randomHalloweenItem = random.choice(halloweenItems) + +sm.setSpeakerType(2) +sm.setParam(548) +sm.setColor(2) +sm.setInnerOverrideSpeakerTemplateID(9010063) # Machine Wheel +sm.sendNext("Would you like to spin the Celestial Wheel of mystery?\r\nYou're going to need 10 #i4310244#") +if sm.hasItem(4310244, 10): + if sm.canHold(randomHalloweenItem): + sm.sendNext("It looks like you have 10 #bGhost coins#k! Spin the wheel?") + sm.sendNext("You rolled a #i" + str(randomHalloweenItem) + "#!") + sm.consumeItem(4310244, 10) + sm.giveItem(randomHalloweenItem) + else: + sm.sendNext("Please check if you have enough available inventory space, silly!") + +else: + sm.sendNext("It looks like you don't have 10 #bGhost Coins#k!") \ No newline at end of file diff --git a/scripts/npc/rowen.py b/scripts/npc/rowen.py new file mode 100755 index 0000000..dda3432 --- /dev/null +++ b/scripts/npc/rowen.py @@ -0,0 +1,2 @@ +# Rowen the Fairy (1032101) | Ellinia +sm.sendSayOkay("Hello, I'm Rowen the Fairy!") diff --git a/scripts/npc/say_1012121.py b/scripts/npc/say_1012121.py new file mode 100755 index 0000000..306920f --- /dev/null +++ b/scripts/npc/say_1012121.py @@ -0,0 +1,2 @@ +# Clothes Collector (1012121) | Henesys Market +sm.sendSayOkay("You don't have anything for the Clothes Collector.") diff --git a/scripts/npc/sell_ticket.py b/scripts/npc/sell_ticket.py new file mode 100755 index 0000000..50f51e3 --- /dev/null +++ b/scripts/npc/sell_ticket.py @@ -0,0 +1 @@ +sm.sendNext("I hope you enjoy your stay.") diff --git a/scripts/npc/shammos2.py b/scripts/npc/shammos2.py new file mode 100755 index 0000000..e8915c7 --- /dev/null +++ b/scripts/npc/shammos2.py @@ -0,0 +1,2 @@ +# Message from Shammos (2022006) | Shammos PQ +sm.sendNext("Haha! FOOLS! I have betrayed you and have unsealed Rex, the Hoblin King!") \ No newline at end of file diff --git a/scripts/npc/shammos_Next1.py b/scripts/npc/shammos_Next1.py new file mode 100755 index 0000000..ce2d493 --- /dev/null +++ b/scripts/npc/shammos_Next1.py @@ -0,0 +1,2 @@ +# Shammos (2022009) | Shammos PQ +sm.sendNext("Let's go!") diff --git a/scripts/npc/shaolin_collector.py b/scripts/npc/shaolin_collector.py new file mode 100755 index 0000000..29109f3 --- /dev/null +++ b/scripts/npc/shaolin_collector.py @@ -0,0 +1,8 @@ +# id 9310597 (Zarak), field 701220000 +sm.setSpeakerType(3) +sm.setParam(56) +sm.setColor(1) +res = sm.sendNext("Talk to Zarak.\r\n#L1#What's a demon orb?#l\r\n#L0#Tell me more about collecting demon orbs.#l\r\n#L2#I'll help. Count me in!#l") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendSayOkay("I'm studying how demons are formed. Demon orbs are tightly condensed balls of demonic energy. I'm hoping they'll reveal the background and emotions of the demons you get them from.") diff --git a/scripts/npc/skin_henesys1.py b/scripts/npc/skin_henesys1.py new file mode 100755 index 0000000..64cdd24 --- /dev/null +++ b/scripts/npc/skin_henesys1.py @@ -0,0 +1,6 @@ +# Ms. Tan (1012105) | Henesys Skin-Care +sm.sendNext("Well, hello! Welcome to the Henesys Skin-Care! " + "Would you like to have a firm, tight, healthy looking skin like mine? " + "With a #b#t5153000##k, you can let us take care of the rest and have the kind of skin you've always wanted!") + +sm.sendSayOkay("You don't seem to have any #b#t5153000##k.") diff --git a/scripts/npc/soulWeapon.py b/scripts/npc/soulWeapon.py new file mode 100755 index 0000000..530915f --- /dev/null +++ b/scripts/npc/soulWeapon.py @@ -0,0 +1,6 @@ +# Murgoth +# Soul Researcher +# Multiple Boss Lobby Maps (Balrog, Pink Bean, etc) + +sm.sendSayOkay("Souls are my specialty, I always find the truth..") + diff --git a/scripts/npc/strangeGallery_out.py b/scripts/npc/strangeGallery_out.py new file mode 100755 index 0000000..d532dcd --- /dev/null +++ b/scripts/npc/strangeGallery_out.py @@ -0,0 +1,15 @@ + +from net.swordie.ms.constants import CustomConstants + + + +if sm.isPartyLeader(): + sm.sendNext("Do you wish to participate in the Halloween Party Quest?#b\r\n" + "\r\n" + "#L0#Enter Halloween Party Quest.#l") + if sm.checkParty() and sm.checkPartyLevelReq(CustomConstants.MIN_LEVEL_FOR_PQ): + + sm.warpInstanceIn(922900400, 0, True) # HGPQ 1st Map + +else: + sm.sendSayOkay("Please have your party leader talk to me.") diff --git a/scripts/npc/subway_in.py b/scripts/npc/subway_in.py new file mode 100755 index 0000000..447b494 --- /dev/null +++ b/scripts/npc/subway_in.py @@ -0,0 +1,5 @@ +# The Ticket Gate (1052007) | Kerning City Subway : Subway Ticketing Booth + +sm.sendNext("Where do you want to go?\r\n\r\n#L0#Subway Construction Site#l") + +sm.warpInstanceIn(931050400) \ No newline at end of file diff --git a/scripts/npc/talk2152014.py b/scripts/npc/talk2152014.py new file mode 100755 index 0000000..4e0d803 --- /dev/null +++ b/scripts/npc/talk2152014.py @@ -0,0 +1,4 @@ +FATTIE = 2159014 + +sm.setSpeakerID(FATTIE) +sm.sendSayOkay("I'm so hot, I'm probably blinding you. I also like balloons. And now, I won't share my balloons with you, so don't even ask.") \ No newline at end of file diff --git a/scripts/npc/talk2159000.py b/scripts/npc/talk2159000.py new file mode 100755 index 0000000..0839d21 --- /dev/null +++ b/scripts/npc/talk2159000.py @@ -0,0 +1,9 @@ +JUN = 2159000 +VON = 2159002 + +sm.setSpeakerID(JUN) +sm.sendNext("I'm glad you made it. Safety in numbers, right? I feel like we're being watched... Shouldn't we think about heading back? The grown-ups in town say the mines aren't safe...") + +sm.setSpeakerID(VON) +sm.flipDialogue() +sm.sendPrev("Sheesh, why are you such a scaredy cat? We've come all this way! We should at least do something before we go back.") \ No newline at end of file diff --git a/scripts/npc/talk2159001.py b/scripts/npc/talk2159001.py new file mode 100755 index 0000000..3c6331d --- /dev/null +++ b/scripts/npc/talk2159001.py @@ -0,0 +1,41 @@ +# Introduction quest portal for resistance +JUN_ID = 2159000 +ULRIKA_ID = 2159001 +VON_ID = 2159002 + +sm.setSpeakerID(ULRIKA_ID) +sm.sendNext("There you are, #h #! You're late. Get over here.") + +sm.setSpeakerID(VON_ID) +sm.flipDialogue() +sm.sendSay("What was the hold up? You scared or something?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Don't be ridiculous.") + +sm.setSpeakerID(JUN_ID) +sm.flipDialogue() +sm.sendSay("You're not s-s-scared at all? I am, a little b-b-bit... The grown-ups warned us never to venture into the #bVerne Mines#k... Plus, there are all those #rBlack Wings#k around, watching us, I just know it.") + +sm.setSpeakerID(VON_ID) +sm.flipDialogue() +sm.sendSay("We snuck here, Jun. No one saw us. No one's watching us, okay? Come on, when else would we have ever gotten the chance to leave #bEdelstein#k? Don't be a chicken.") + +sm.setSpeakerID(JUN_ID) +sm.flipDialogue() +sm.sendSay("But what if we get in trouble?") + +sm.setSpeakerID(ULRIKA_ID) +sm.sendSay("Jun, we're already here. If we're going to get in trouble, let's at least have some fun first. Let's play hide-and-seek!") + +sm.setPlayerAsSpeaker() +sm.sendSay("Hide and seek?") + +sm.setSpeakerID(VON_ID) +sm.flipDialogue() +sm.sendSay("Ugh, la-ame.") + +sm.setSpeakerID(ULRIKA_ID) +sm.sendSay("Don't be a brat, Von. What? Are you scared to hide all by yourself in these big, bad caves? *snicker*\r\n#h0#, since you were late, you're it. Count to 10 and then come find us. No peeking.") + +sm.warp(931000001, 1) \ No newline at end of file diff --git a/scripts/npc/talk2159002.py b/scripts/npc/talk2159002.py new file mode 100755 index 0000000..adf8620 --- /dev/null +++ b/scripts/npc/talk2159002.py @@ -0,0 +1,5 @@ +VON = 2159002 + +sm.setSpeakerID(VON) +sm.sendNext("If Jun's too chiken, let's leave him here. But why's it have to be hide-and-seek? Let's play something cool...") +sm.sendPrev("That's not what I said...") \ No newline at end of file diff --git a/scripts/npc/talk2159003.py b/scripts/npc/talk2159003.py new file mode 100755 index 0000000..1e5dd0a --- /dev/null +++ b/scripts/npc/talk2159003.py @@ -0,0 +1,9 @@ +# Jun - Dangerous Hide-and-Seek : Neglected Rocky Mountain (931000001) +if "exp1=1" not in sm.getQRValue(23007): + sm.sendNext("Eep! You found me.") + sm.sendSay("Eh, I wanted to go further into the wagon, but my head wouldn't fit.") + sm.sendSay("Did you find Ulrika and Von yet? Von is really, really good at hiding.\r\n\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 5 exp") + sm.giveExp(5) + sm.addQRValue(23007, "exp1=1") +else: + sm.sendNext("Did you find Ulrika and Von yet? Von is really, really good at hiding.") diff --git a/scripts/npc/talk2159004.py b/scripts/npc/talk2159004.py new file mode 100755 index 0000000..39755bb --- /dev/null +++ b/scripts/npc/talk2159004.py @@ -0,0 +1,8 @@ +# Ulrika - Dangerous Hide-and-Seek : Neglected Rocky Mountain (931000001) +if "exp2=1" not in sm.getQRValue(23007): + sm.sendNext("Haha, you found me. Guess I should've found a better hiding spot.") + sm.sendSay("Have you found Jun and Von yet? Von's going to be pretty hard to find. Better keep your eyes open.\r\n\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 5 exp") + sm.giveExp(5) + sm.addQRValue(23007, "exp2=1") +else: + sm.sendNext("Have you found Jun and Von yet? Von's going to be pretty hard to find. Better keep your eyes open.") diff --git a/scripts/npc/talk2159006.py b/scripts/npc/talk2159006.py new file mode 100755 index 0000000..acabc83 --- /dev/null +++ b/scripts/npc/talk2159006.py @@ -0,0 +1,35 @@ +# Vita | Dangerous Hide-and-Seek : Suspicious Laboratory +if "vel00=1" not in sm.getQRValue(23007): + sm.sendNext("Stay back!") + sm.sendSay("How did you get here? This place is prohibited!") + + sm.setPlayerAsSpeaker() + sm.sendSay("Who's talking? Where are you?!") + + sm.resetParam() + sm.sendSay("Look up.") + sm.addQRValue(23007, "vel00=1") + sm.reservedEffect("Effect/Direction4.img/Resistance/ClickVel") +elif "vel00=2" not in sm.getQRValue(23007): + sm.sendNext("My name is #bVita#k. I'm one of #rDoctor Gelimer's#k test subjects. But that's not important right now. You have to get out of here before someone sees you!") + + sm.setPlayerAsSpeaker() + sm.sendSay("Wait, what are you talking about? Someone's doing experiments on you?! And who's Gelimer?") + + sm.resetParam() + sm.sendSay("You've never heard of Doctor Gelimer, the Black Wings' mad scientist? This is his lab, where he conducts experiments...on people.") + + sm.setPlayerAsSpeaker() + sm.sendSay("Experiments...on people? Are you serious?") + + sm.resetParam() + sm.sendSay("Yes! And if he catches you here, he won't be merciful. Get out of here! Quickly!") + + sm.setPlayerAsSpeaker() + sm.sendSay("What? But what about you?!") + + sm.resetParam() + sm.sendSay("Shhh! Did you hear that? Someone's coming! It's got to be Doctor Gelimer! Oh no!") + + sm.addQRValue(23007, "vel00=2") + sm.warp(931000011, 0) diff --git a/scripts/npc/talk2159007.py b/scripts/npc/talk2159007.py new file mode 100755 index 0000000..d3feb36 --- /dev/null +++ b/scripts/npc/talk2159007.py @@ -0,0 +1,21 @@ +if sm.getFieldID() == 931000020: + sm.sendSayOkay("It's been...a really long time since I've been outside the laboratory.") + sm.dispose() +sm.sendNext("Whoa. Wh-what happened? The glass is broken... Did that vibration earlier break it?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Now, there's nothing stopping you right? Let's get out of here!") + +sm.resetParam() +sm.sendSay("But...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Do you WANT to stay here or something?") + +sm.resetParam() +sm.sendSay("Of course not!") + +sm.setPlayerAsSpeaker() +sm.sendSay("Then hurry up! Let's go!") + +sm.warp(931000020, 1) \ No newline at end of file diff --git a/scripts/npc/talk2159008.py b/scripts/npc/talk2159008.py new file mode 100755 index 0000000..5b45e81 --- /dev/null +++ b/scripts/npc/talk2159008.py @@ -0,0 +1,32 @@ +sm.setSpeakerID(2159008) +sm.sendNext("Little rats. I say, how DARE you try to escape this place?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Shoot, we were spotted!") + +sm.setSpeakerID(2159008) +sm.sendSay("Now, now, children. Don't make this harder than it needs to be. Just walk towards me, nice and easy... Wait, you're not one of the test subjects. You're one of the townspeople, aren't you?") + +sm.setPlayerAsSpeaker() +sm.sendSay("That's right. I'm a resident of Edelstein, not a test subject. You can't boss ME around.") + +sm.setSpeakerID(2159008) +sm.sendSay("Oh my, oh my. I told them to make sure the townspeople kept their kids away from the mines... Alas, it's too late now. I can't allow you to tell anyone about this laboratory, so I guess you'll just have to stay here and...help with the experiments. *snicker*") + +sm.setPlayerAsSpeaker() +sm.sendSay("Hmph. Big words, but let's see if you can catch me first.") + +sm.setSpeakerID(2159008) +sm.sendSay("Why, you insolent, little-- Ahem, ahem, ahem. Your words don't matter. Time for me to pull out the big guns. I do hope you're ready. If not, you will suffer.") + +sm.getChr().heal(-sm.getChr().getHP()/2) +sm.setPlayerAsSpeaker() +sm.sendSay("#b(Oh no! Schiller's attack HALVED your HP! He's tougher than you anticipated.)#k") + +sm.setSpeakerID(2159008) +sm.sendSay("I say, got any more big words, kiddo? I'll make sure Gelimer performs some especially atrocious experiments on you. But I'll be nice if you come with me quiet-like.") + +sm.setSpeakerID(2159010) +sm.sendSay("Hold it right there!") + +sm.warp(931000021, 1) \ No newline at end of file diff --git a/scripts/npc/talk2159009.py b/scripts/npc/talk2159009.py new file mode 100755 index 0000000..645d845 --- /dev/null +++ b/scripts/npc/talk2159009.py @@ -0,0 +1 @@ +# ? \ No newline at end of file diff --git a/scripts/npc/talk2159010.py b/scripts/npc/talk2159010.py new file mode 100755 index 0000000..27ea94d --- /dev/null +++ b/scripts/npc/talk2159010.py @@ -0,0 +1,41 @@ + +sm.flipSpeaker() +sm.sendNext("Looks like we lost him. Of course, I could've easily handled him, no problemo, but I wasn't sure I could protect you kiddos at the same time. *chuckle* What're you two doing here anyway? Didn't your parents warn you to steer clear of the mines?") + +sm.setSpeakerID(2159007) +sm.flipDialogue() +sm.sendSay("It's my fault! #h0# was just trying to help! #h0# rescued me!") + +sm.flipSpeaker() +sm.setSpeakerID(2159010) +sm.sendSay("Rescued you, eh? Hm, you are dressed kind of funny, little girl. Ooooh. Were you a prisoner of the Black Wings ?") + +sm.setSpeakerID(2159007) +sm.flipDialogue() +sm.sendSay("#b(Vita quickly explains the situation.)#k") + +sm.flipSpeaker() +sm.setSpeakerID(2159010) +sm.sendSay("Ah, yes, I knew the Black Wings were up to something dangerous. I knew it all along. I must tell the others so we can devise a plan.") + +sm.setPlayerAsSpeaker() +sm.sendSay("But who are you? Where did you come from? And why did you rescue us?") + +sm.flipSpeaker() +sm.setSpeakerID(2159010) +sm.sendSay("I suppose I can't hide it after everything you've seen today, including but not limited to my heroic rescue and brazen bravery. *cough* You know our grand city of Edelstein is currently under the control of the Black Wings, right?") +sm.sendSay("The stolen mines, the occupation of City Hall, the existence of the Watchmen... They are all signs that we no longer have our liberty. Despite all that, the Black Wings will never rule our hearts!") +sm.sendSay("I am a proud member of the Resistance, a group secretly fighting and undermining the Black Wings. I cannot tell you who I am, but I go by the codename of J. ") +sm.sendSay("Now, please return to town and stay away from the mines. As for you, Vita, come with me. If you're left unprotected, I fear the Black Wings will come look for you. No one can keep you safe like I can! Now, keep my words a secret. The fate of the Resistance depends on your discretion.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Wait, before you go, tell me one thing. How can I join the Resistance?") + +sm.flipSpeaker() +sm.setSpeakerID(2159010) +sm.sendSay("Ah, little youngling, so you wish to fight the Black Wings, do you? Your heart is noble, but there is little you can do to aid our efforts until you reach Lv. 10. Do so, and I will have someone from the Resistance contact you. That's a promise, kiddo. Now, I must be off, but perhaps we will meet again someday!") + +sm.startQuest(23007) +sm.completeQuest(23007) +sm.giveExp(90) +sm.warp(310000000, 8) \ No newline at end of file diff --git a/scripts/npc/talk2159011.py b/scripts/npc/talk2159011.py new file mode 100755 index 0000000..b1c1380 --- /dev/null +++ b/scripts/npc/talk2159011.py @@ -0,0 +1,13 @@ +# 931000001 +sm.setSpeakerID(2159011) + +if not ("exp1=1" in sm.getQRValue(23007) and "exp2=1" in sm.getQRValue(23007) and "exp3=1" in sm.getQRValue(23007) and "exp4=1" in sm.getQRValue(23007)): + sm.sendSayOkay("#bFind your hiding friends before continuing.#k") + sm.dispose() + +if sm.sendAskYesNo("#b(What a suspicious hole. Maybe Von is hiding inside. Peek inside?)#k"): + sm.giveExp(35) + sm.warp(931000010, 0) + +else: + sm.sendSayOkay("#b(Even Von wouldn't hide here, right?)#k") diff --git a/scripts/npc/talk2159012.py b/scripts/npc/talk2159012.py new file mode 100755 index 0000000..92b94ed --- /dev/null +++ b/scripts/npc/talk2159012.py @@ -0,0 +1,32 @@ +# 931000011 +if "talk=1" not in sm.getQRValue(23007): + sm.addQRValue(23007, "talk=1") + sm.removeEscapeButton() + + sm.setSpeakerID(2159012) + sm.sendNext("The experiment is going well, quite well. The endless supply of Rue is certainly speeding things along. Joining the Black Wings was a wise decision, a wise decision indeed. Muahaha!") + + sm.setSpeakerID(2159008) + sm.sendSay("I say, you have great foresight about these things.") + + sm.setSpeakerID(2159012) + sm.sendSay("The android the Black Wings wanted will be completed soon. Oh yes, very soon. Then, the next stage will begin! I will conduct an experiment wilder than their wildest dreams!") + + sm.setSpeakerID(2159008) + sm.sendSay("Pardon? The next stage?") + + sm.setSpeakerID(2159012) + sm.sendSay("Teeheehee, do you still not comprehend what I'm trying to create? Look around! Here's a clue: it's eons more interesting than a simple android. Eons more interesting.") + + sm.setSpeakerID(2159008) + sm.sendSay("What?? All these test subjects... I say, sir, just what are you planning to do?") + + sm.setSpeakerID(2159012) + sm.sendSay("Now, now, you may not understand the grandness of my experiments. I don't expect you to. No, I don't expect you to. Just focus on your job and make sure none of the test subjects run away.") + sm.sendSay("Hey... Did you hear that?") + + sm.setSpeakerID(2159008) + sm.sendSay("Huh? Well... Now that you mention it, I do hear something. Yes, I do hear something...") + + # Tremble (FieldEffect here) - (0, 500, 30). + sm.reservedEffect("Effect/Direction4.img/Resistance/TalkInLab") \ No newline at end of file diff --git a/scripts/npc/talk2159013.py b/scripts/npc/talk2159013.py new file mode 100755 index 0000000..127a338 --- /dev/null +++ b/scripts/npc/talk2159013.py @@ -0,0 +1,4 @@ +CUTIE = 2159013 + +sm.setSpeakerID(CUTIE) +sm.sendSayOkay("My heart is pouding, but this is kind of exciting. We're going to get in so much trouble if we're caught, though.") \ No newline at end of file diff --git a/scripts/npc/talk2159015.py b/scripts/npc/talk2159015.py new file mode 100755 index 0000000..9926b73 --- /dev/null +++ b/scripts/npc/talk2159015.py @@ -0,0 +1,7 @@ +# Cutie - Dangerous Hide-and-Seek : Neglected Rocky Mountain (931000001) +if "exp3=1" not in sm.getQRValue(23007): + sm.sendNext("Aw shucks. You found me. Wow, you're really good at this game!\r\n\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 3 exp") + sm.giveExp(3) + sm.addQRValue(23007, "exp3=1") +else: + sm.sendNext("Hehehe... I should have hidden somewhere else.") diff --git a/scripts/npc/talk2159016.py b/scripts/npc/talk2159016.py new file mode 100755 index 0000000..da748f1 --- /dev/null +++ b/scripts/npc/talk2159016.py @@ -0,0 +1,7 @@ +# Fattie - Dangerous Hide-and-Seek : Neglected Rocky Mountain (931000001) +if "exp4=1" not in sm.getQRValue(23007): + sm.sendNext("D'oh! You found me. But I'm tiny! Are you a professional at this game or something?\r\n\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 3 exp") + sm.giveExp(3) + sm.addQRValue(23007, "exp4=1") +else: + sm.sendNext("Drats. Might as well eat another piece of candy.") diff --git a/scripts/npc/talkHelena.py b/scripts/npc/talkHelena.py new file mode 100755 index 0000000..7a8d375 --- /dev/null +++ b/scripts/npc/talkHelena.py @@ -0,0 +1,10 @@ +# 914000100 +HELENA = 1209000 + +if not "1" == sm.getQRValue(21002): + sm.setSpeakerID(HELENA) + sm.sendNext("Aran, you're awake! How are you feeling? Hm? You want to know what's been going on?") + sm.sendSay("We're almost done preparing for the escape. You don't have to worry. Everyone I could possibly find has boarded the ark, and Shinsoo has agreed to guide the way. We'll head to Victoria Island as soon as we finish the remaining preparations.") + sm.sendSay("The other heroes? They've left to fight the Black Mage. They're buying us time to escape. What? You want to fight with them? No! You can't! You're hurt. You must leave with us!") + sm.reservedEffect("Effect/Direction1.img/aranTutorial/Trio") + sm.setQRValue(21002, "1", False) \ No newline at end of file diff --git a/scripts/npc/talk_sugarMaple.py b/scripts/npc/talk_sugarMaple.py new file mode 100755 index 0000000..985f0d7 --- /dev/null +++ b/scripts/npc/talk_sugarMaple.py @@ -0,0 +1 @@ +sm.sendSayOkay("i'm a hoe") \ No newline at end of file diff --git a/scripts/npc/talk_vasilituto.py b/scripts/npc/talk_vasilituto.py new file mode 100755 index 0000000..795fa29 --- /dev/null +++ b/scripts/npc/talk_vasilituto.py @@ -0,0 +1,10 @@ +# Vasily (10305) | Maple Road : Port +if sm.hasQuestCompleted(32214): + if sm.sendAskYesNo("Thanks to you, we're ready to set sail to Lith Harbor"): + sm.warp(4000032, 0) +elif sm.hasQuest(32214): + if sm.sendAskYesNo("I'll let you on board. Go defeat the monsters rampaging my ship."): + sm.warp(4000033, 0) +else: + sm.sendSayOkay("It's not time to board yet.") +sm.dispose() \ No newline at end of file diff --git a/scripts/npc/tangyoon_end.py b/scripts/npc/tangyoon_end.py new file mode 100755 index 0000000..1316b4e --- /dev/null +++ b/scripts/npc/tangyoon_end.py @@ -0,0 +1,9 @@ +response = sm.sendAskYesNo("Are you sure you want to leave?") +if response: + if not sm.getParty() is None: + sm.warpInstanceOut(910002000) + for partyMembers in sm.getParty().getMembers(): + sm.setQRValue(partyMembers.getChr(), GameConstants.LORD_PIRATE_QUEST, "0") + else: + sm.warp(910002000, 0) + sm.setQRValue(GameConstants.LORD_PIRATE_QUEST, "0") \ No newline at end of file diff --git a/scripts/npc/tangyoon_start.py b/scripts/npc/tangyoon_start.py new file mode 100755 index 0000000..f506fef --- /dev/null +++ b/scripts/npc/tangyoon_start.py @@ -0,0 +1,18 @@ +# Guon (2094000) | Spiegelmann's Guest House + +from net.swordie.ms.constants import GameConstants + +if sm.isPartyLeader(): + sm.sendNext("Will you help me cook my meal?#b\r\n" + "\r\n" + "#L0#Enter Chef Tangyoon's Party Quest#l") + if sm.checkParty(): + + # for each party member, create a LORD_PIRATE_QUEST with qrValue = "0" + for partyMember in sm.getParty().getMembers(): + sm.createQuestWithQRValue(partyMember.getChr(), GameConstants.LORD_PIRATE_QUEST, "0", False) + + sm.warpInstanceIn(912080100, 0, True) + +else: + sm.sendSayOkay("Please have your party leader talk to me.") diff --git a/scripts/npc/taxi5.py b/scripts/npc/taxi5.py new file mode 100755 index 0000000..da361bb --- /dev/null +++ b/scripts/npc/taxi5.py @@ -0,0 +1 @@ +sm.sendAskSlideMenu(5) \ No newline at end of file diff --git a/scripts/npc/test.py b/scripts/npc/test.py new file mode 100755 index 0000000..3232fab --- /dev/null +++ b/scripts/npc/test.py @@ -0,0 +1,480 @@ +sm.setSpeakerID(9201324) +if sm.sendNext: + selection = sm.sendNext("Hi. I have the best totems around. Want to take a look?\r\nYou currently have #r"+ str(sm.getFriendPoints()) +" #bFriendship Points\r\n" + "#L0#Trade #r1000#b Friendship Points for #v 04310126 # #t 04310126 #(s)\r\n" + "#L1#Trade #v 04310126 # #t 04310126 #(s) for #r1000#b Friendship Points\r\n\r\n" + "#L2##v 1202086 # #z 1202086 ##r (1000 Friendship Points)#b\r\n" + "#L3##v 1202085 # #z 1202085 ##r (1000 Friendship Points)#b\r\n" + "#L4##v 1202084 # #z 1202084 ##r (1000 Friendship Points)#b\r\n" + "#L5##v 1202083 # #z 1202083 ##r (1000 Friendship Points)#b\r\n" + "#L6##v 1202124 # #z 1202124 ##r (5000 Friendship Points)#b\r\n" + "#L7##v 1202089 # #z 1202089 ##r (6000 Friendship Points)#b\r\n" + "#L8##v 1202090 # #z 1202090 ##r (6000 Friendship Points)#b\r\n" + "#L9##v 1202091 # #z 1202091 ##r (6000 Friendship Points)#b\r\n" + "#L10##v 1182162 # #z 1182162 ##r (6000 Friendship Points)#b\r\n" + "#L11##v 1202094 # #z 1202094 ##r (10000 Friendship Points)#b\r\n" + "#L12##v 1202095 # #z 1202095 ##r (10000 Friendship Points)#b\r\n" + "#L13##v 1202096 # #z 1202096 ##r (10000 Friendship Points)#b\r\n" + "#L14##v 1202097 # #z 1202097 ##r (10000 Friendship Points)#b\r\n" + "#L15##v 1202050 # #z 1202050 ##r (15000 Friendship Points)#b\r\n" + "#L16##v 1202054 # #z 1202054 ##r (15000 Friendship Points)#b\r\n" + "#L17##v 1202058 # #z 1202058 ##r (15000 Friendship Points)#b\r\n" + "#L18##v 1202062 # #z 1202062 ##r (15000 Friendship Points)#b\r\n" + "#L19##v 1202236 # #z 1202236 ##r (500000 Friendship Points)#b\r\n") + + + if selection == 0: + answer = sm.sendAskNumber("How many #b#v 04310126 # #t 04310126 #(s)#k #kdo you wish purchase?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1000 # Cost Per Coin + + if sm.getFriendPoints() < totalQty: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + else: + sm.deductFriendPoints(totalQty) + sm.giveItem(4310126, Total) + sm.sendSayOkay("Thank you for your purchase!\r\nYou have #r"+ str(sm.getFriendPoints()) +"#b Friendship Points#k left.") + sm.dispose() + + if selection == 1: + answer = sm.sendAskNumber("How many #b#v 04310126 # #t 04310126 #(s)#k #kdo you wish sell?", 0, 1, 1000) + + Total = answer * 1 + totalQty = answer * 1000 # Cost Per Coin + + + if not sm.hasItem(4310126, Total): + sm.sendSayOkay("You do not have enough #b#v 04310126 # #t 04310126 #(s)#k.") + sm.dispose() + + else: + sm.consumeItem(4310126, Total) + sm.giveFriendPoints(totalQty) + sm.sendSayOkay("Thank you for your purchase!\r\nYou now have #r"+ str(sm.getFriendPoints()) +"#b Friendship Points#k.") + sm.dispose() + + if selection == 2: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202086 # #z 1202086 ##k?\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() <= 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.canHold(1202086): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.deductMesos(50000000) + sm.giveItem(1202086) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 3: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202085 # #z 1202085 ##k?\r\n\r\n#b#v 1202086 # #t 1202086 #\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() < 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.hasItem(1202086): + sm.sendSayOkay("You do not possess a #b#v 1202086 # #t 1202086 #.") + sm.dispose() + + elif not sm.canHold(1202085): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.consumeItem(1202086) + sm.deductMesos(50000000) + sm.giveItem(1202085) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 4: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202084 # #z 1202084 ##k?\r\n\r\n#b#v 1202085 # #t 1202085 #\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() < 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif not sm.hasItem(1202085): + sm.sendSayOkay("You do not possess a #b#v 1202085 # #t 1202085 #.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.canHold(1202084): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.consumeItem(1202085) + sm.deductMesos(50000000) + sm.giveItem(1202084) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 5: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202083 # #z 1202083 ##k?\r\n\r\n#b#v 1202084 # #t 1202084 #\r\n\r\n#b#v 4031138 # #r50,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 1000 #b Friendship Points") + if sm.getFriendPoints() < 1000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + + elif sm.getMesos() < 50000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + + elif not sm.hasItem(1202084): + sm.sendSayOkay("You do not possess a #b#v 1202084 # #t 1202084 #.") + sm.dispose() + + elif not sm.canHold(1202083): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + + else: + sm.deductFriendPoints(1000) + sm.deductMesos(50000000) + sm.consumeItem(1202084) + sm.giveItem(1202083) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 6: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202124 # #z 1202124 ##k?\r\n\r\n#b#v 1202083 # #t 1202083 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 5000 #b Friendship Points") + if sm.getFriendPoints() < 5000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202083): + sm.sendSayOkay("You do not possess a #b#v 1202083 # #t 1202083 #.") + sm.dispose() + elif not sm.canHold(1202124): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(5000) + sm.deductMesos(100000000) + sm.consumeItem(1202083) + sm.giveItem(1202124) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 7: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202089 # #z 1202089 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202094): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.deductMesos(100000000) + sm.consumeItem(1202124) + sm.giveItem(1202089) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 8: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202090 # #z 1202090 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202090): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.deductMesos(100000000) + sm.consumeItem(1202124) + sm.giveItem(1202090) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 9: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202091 # #z 1202091 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202091): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.deductMesos(100000000) + sm.consumeItem(1202124) + sm.giveItem(1202091) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 10: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1182162 # #z 1182162 ##k?\r\n\r\n#b#v 1202124 # #t 1202124 #\r\n\r\n#b#v 4031138 # #r100,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 6000 #b Friendship Points") + if sm.getFriendPoints() < 6000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 100000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202124): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1182162): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(6000) + sm.consumeItem(1202124) + sm.deductMesos(100000000) + sm.giveItem(1182162) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 11: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202094 # #z 1202094 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202094): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202094) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 12: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202095 # #z 1202095 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202095): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202095) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 13: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202096 # #z 1202096 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202096): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202096) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 14: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202097 # #z 1202097 ##k?\r\n\r\n#b#v 1202089 # #t 1202089 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 30000 #b Friendship Points") + if sm.getFriendPoints() < 10000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202089): + sm.sendSayOkay("You do not possess a #b#v 1202089 # #t 1202089 #.") + sm.dispose() + elif not sm.canHold(1202097): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(10000) + sm.consumeItem(1202089) + sm.deductMesos(250000000) + sm.giveItem(1202097) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 15: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202050 # #z 1202050 ##k?\r\n\r\n#b#v 1202094 # #t 1202094 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202094): + sm.sendSayOkay("You do not possess a #b#v 1202124 # #t 1202124 #.") + sm.dispose() + elif not sm.canHold(1202050): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202094) + sm.giveItem(1202050) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 16: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202054 # #z 1202054 ##k?\r\n\r\n#b#v 1202095 # #t 1202095 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202095): + sm.sendSayOkay("You do not possess a #b#v 1202095 # #t 1202095 #.") + sm.dispose() + elif not sm.canHold(1202054): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202095) + sm.deductMesos(250000000) + sm.giveItem(1202054) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 17: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202058 # #z 1202058 ##k?\r\n\r\n#b#v 1202097 # #t 1202097 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202097): + sm.sendSayOkay("You do not possess a #b#v 1202097 # #t 1202097 #.") + sm.dispose() + elif not sm.canHold(1202058): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202097) + sm.deductMesos(250000000) + sm.giveItem(1202058) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 18: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202062 # #z 1202062 ##k?\r\n\r\n#b#v 1202096 # #t 1202096 #\r\n\r\n#b#v 4031138 # #r250,000,000 #bMesos\r\n\r\n#b#v 3800453 ##r 15000 #b Friendship Points") + if sm.getFriendPoints() < 15000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 250000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif not sm.hasItem(1202096): + sm.sendSayOkay("You do not possess a #b#v 1202096 # #t 1202096 #.") + sm.dispose() + elif not sm.canHold(1202062): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(15000) + sm.consumeItem(1202096) + sm.deductMesos(250000000) + sm.giveItem(1202062) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() + + if selection == 19: + selection = sm.sendAskYesNo("Do you wish to purchase a #b#v 1202236 # #z 1202236 ##k?\r\nMy prices are not cheap this is what I require.\r\n\r\n#b#v 4460005 # #t 4460005 #\r\n\r\n#b#v 1202062 # #t 1202062 #\r\n\r\n#b#v 1202058 # #t 1202058 #\r\n\r\n#b#v 1202054 # #t 1202054 #\r\n\r\n#b#v 1202050 # #t 1202050 #\r\n\r\n#b#v 4031138 # #r1,000,000,000 #bMesos\r\n\r\n#v 4031866 # #r10,000,000 #bNX\r\n\r\n#v 3800453 ##r 500000 #b Friendship Points") + if sm.getFriendPoints() < 500000: + sm.sendSayOkay("You do not have enough #bFriendship Points#k.") + sm.dispose() + elif sm.getMesos() < 1000000000: + sm.sendSayOkay("You do not have enough #bMesos#k.") + sm.dispose() + elif sm.getNX() < 10000000: + sm.sendSayOkay("You do not have enough #bNXs#k.") + sm.dispose() + elif not sm.hasItem(4460005): + sm.sendSayOkay("You do not possess a #b#v 1202062 # #t 1202062 #.") + sm.dispose() + elif not sm.hasItem(1202058): + sm.sendSayOkay("You do not possess a #b#v 1202058 # #t 1202058 #.") + sm.dispose() + elif not sm.hasItem(1202054): + sm.sendSayOkay("You do not possess a #b#v 1202054 # #t 1202054 #.") + sm.dispose() + elif not sm.hasItem(1202050): + sm.sendSayOkay("You do not possess a #b#v 1202050 # #t 1202050 #.") + sm.dispose() + elif not sm.hasItem(1202062): + sm.sendSayOkay("You do not possess a #b#v 1202050 # #t 1202050 #.") + sm.dispose() + elif not sm.canHold(1202236): + sm.sendSayOkay("Make sure you have room in your inventory.") + sm.dispose() + else: + sm.deductFriendPoints(500000) + sm.deductMesos(1000000000) + sm.deductNX(10000000) + sm.consumeItem(1202050) + sm.consumeItem(1202054) + sm.consumeItem(1202058) + sm.consumeItem(1202062) + sm.consumeItem(4460005) + sm.giveItem(1202236) + sm.sendSayOkay("Thank you for your purchase!") + sm.dispose() \ No newline at end of file diff --git a/scripts/npc/tourNotice.py b/scripts/npc/tourNotice.py new file mode 100755 index 0000000..f5ae8b4 --- /dev/null +++ b/scripts/npc/tourNotice.py @@ -0,0 +1,95 @@ +from net.swordie.ms.constants import TipConstants + +if sm.sendNext: + selection = sm.sendNext("Hello I'm the Information Board. What would you like to know?\r\n\r\nYou have been online for " + str(sm.getOnlineTimeInHours()) + "\r\n" + "#L0##rSeasonal Information\r\n" + "#L1#Seasonal Leaderboards\r\n" + "#L2#Server Tips\r\n" + "#L4##n#bItem Enhancement Costs\r\n" + "#L5#Superior Item Enhancement Costs\r\n" + "#L6#Special Item Information\r\n" + "#L7#Boss Information\r\n" + "#L8#Pierce Information\r\n" + "#L9#Acheivement Information\r\n") + if selection == 0: + + sm.sendSayOkay("#eSeason 1 will begin on June 1st 2020#n\r\n\r\nSeasons will occur in the same world doing this will prevent all wipes so the server will never have to wipe and the player can choose to continue playing their Non-Seasonal Characters without fear of it ever being wiped." + "\r\n\r\nSeasonal characters will have a different interaction with Non-Seasonal Characters to prevent gaining items and leeching from Non-Seasonal Characters.\r\n\r\n#eThis List Below Shows All Changed Interactions Between Seasonal and Non Seasonal.\r\n\r\n" + "\r\n\r\n#bYou will not be able to Trade with Non-Seasonal Characters.\r\n\r\nYou will not see items dropped by Non-Seasonal Characters.\r\n\r\nYou will not be able to loot items from monsters that Non-Seasonal Characters have killed.\r\n\r\nYou will only be allowed to trade NX Equips with Non-Seasonal Characters.\r\n\r\n" + "You will not have a shared storage or cash shop inventory with your Non-Seasonal Characters.\r\n\r\nYou will not be able to join parties of Non-Seasonal Characters.\r\n\r\n" + "You will gain items at the end of the season for Beating the game I.E. Completing CWKPQ.\r\n\r\nAt the end of the season your Characters will become Non-Seasonal Characters thus making it able to interact with other Non-Seasonal characters.\r\n\r\n" + "You will have a icon next to your name in chat indicating you are a Seasonal Character.\r\n\r\nCannot Use link skills from Non-Seasonal Characters on your account.\r\n\r\nYou may choose to make your characters Seasonal or Non-Seasonal in the character creation when making new characters.\r\n\r\n" + "Seasonal Characters will not be able to enter CWKPQ with Non-Seasonal Character parties.\r\n\r\nSeasonal Characters will not share the same Achievements and Pierce stats as their Non-Seasonal Characters.\r\n\r\n" + "The only things you may use from your Non-Seasonal Characters are as follows. Donation Points, Vote Points and NX Equips.") + sm.dispose() + + if selection == 1: + + sm.sendSayOkay("#eSeasonal Leaderboards will begin on June 1st 2020.") + sm.dispose() + + if selection == 2: + # tip = "" + # # prefix + # for tips in TipConstants.tips: + # tip_len = len(tips) + # if tip_len % 2 == 0: + # prefix = "#b" + # else: + # prefix = "" + # tip += prefix + tips + "#k\r\n\r\n" + # sm.sendSayOkay(str(tip)) + sm.sendSayOkay("Information to be added.") + sm.dispose() + + if selection == 3: + sm.sendSayOkay("Information to be added.") + sm.dispose() + + if selection == 4: + sm.sendSayOkay("Information to be added.") + sm.dispose() + + if selection == 5: + equipmentLevel = sm.sendAskNumber("Enter the Equipment's Level.", 1, 0, 255) + mesoCost = pow(equipmentLevel, 3.2394) + mesoCost = "{0:,.0f}".format(mesoCost) + sm.sendSay("Rank | Success % | Destruction % | Meso | NX\r\n\r\n" + " 1 | 50% | 0% | "+mesoCost+" | 1,170,000\r\n" + " 2 | 50% | 0% | "+mesoCost+" | 1,170,000\r\n" + " 3 | 45% | 0% | "+mesoCost+" | 1,170,000\r\n" + " 4 | 40% | 0% | "+mesoCost+" | 1,170,000\r\n" + " 5 | 40% | 0% | "+mesoCost+" | 1,170,000\r\n" + " 6 | 40% | 1.8% | "+mesoCost+" | 1,170,000\r\n" + " 7 | 40% | 3.0% | "+mesoCost+" | 1,170,000\r\n" + " 8 | 40% | 4.2% | "+mesoCost+" | 1,170,000\r\n" + " 9 | 40% | 6.0% | "+mesoCost+" | 1,170,000\r\n" + "10 | 37% | 9.5% | "+mesoCost+" | 1,170,000\r\n" + "11 | 35% | 13.0% | "+mesoCost+" | 1,170,000\r\n" + "12 | 35% | 16.2% | "+mesoCost+" | 1,170,000\r\n" + "13 | 3% | 48.5% | "+mesoCost+" | 1,170,000\r\n" + "14 | 2% | 49.0% | "+mesoCost+" | 1,170,000\r\n" + "15 | 1% | 50.0% | "+mesoCost+" | 1,170,000\r\n" + ) + sm.sendSayOkay("Information to be added.") + sm.dispose() + + if selection == 6: + + sm.sendSayOkay("Information to be added.") + sm.dispose() + + if selection == 7: + + sm.sendSayOkay("Information to be added.") + sm.dispose() + + if selection == 8: + + sm.sendSayOkay("Information to be added.") + sm.dispose() + + if selection == 9: + + sm.sendSayOkay("Information to be added.") + sm.dispose() diff --git a/scripts/npc/trademaster.py b/scripts/npc/trademaster.py new file mode 100755 index 0000000..43d84e4 --- /dev/null +++ b/scripts/npc/trademaster.py @@ -0,0 +1,53 @@ +# Created by MechAviv +# [Maestra Fiametta] | [9390220] +# Commerci Republic : San Commerci +from net.swordie.ms.enums import EventType + +names = ["Rosa (Ship level 1 Required) -", "Herb Town (Ship level 6 Required) -", "Rein Harbor (Ship level 12 Required) -", "Lith Harbor (Ship level 18 Required) -", "Dolce (Ship level 24 Required) -"] +runsADay = [15, 12, 10, 7, 5] +shipLevel = [1, 6, 12, 18, 24] +mapId = 865000000 + +if sm.getShipLevel() == 0: + response = sm.sendAskYesNo("Welcome to the #eSan Commerci: Trading Post#n\r\n\r\nI see this is your first time here so let me explain some things first. " + "By completing voyages you can earn #e#bCommerci Denaros#k#n Which you can spend by talking to #e#bJavert#k#n over on the right." + "\r\n\r\n#e#kWould you like to receive a Level #r1#k ship?") + if response: + sm.giveShipLevel(1) + sm.flipSpeaker() + sm.setPlayerAsSpeaker() + sm.sendSayOkay("#e#kCongragulations you have received a Level #r1#k ship.\r\n\r\n Talk to #bMaestra#k to begin your voyaging adventures.") + sm.dispose() +else: + say = "#eShip level: #r" + str(sm.getShipLevel()) + "#k\r\nShip EXP: #r" + str(sm.getShipExp()) + "/100#k\r\n\r\n#nAs you complete more voyages your ships EXP will increase unlocking more voyages that you can attempt.\r\n" + for x in range(len(names)): + say += "#L" + str(x) + "##b" + names[x] + " " + str(sm.getEventAmountDone(EventType.getByVal(40 + x))) + "/" + str(runsADay[x]) + " Attempted today""#l\r\n" + selection = sm.sendSay(say) + + if sm.getShipLevel() < (selection * 6): + sm.sendSayOkay("#eYour ship must be level #r" + str(selection * 6) + "#k to go on this voyage.") + sm.dispose() + if chr.getLevel() < 220: + sm.sendSayOkay("You must be level #b220#k to go on a voyage.") + sm.dispose() + if sm.getEventAmountDone(EventType.getByVal(40 + selection)) >= runsADay[selection]: + sm.sendSayOkay("You are currently on cooldown") + sm.dispose() + if sm.getParty() is not None: + sm.sendSayOkay("Please leave your party.") + sm.dispose() + + else: + sm.setDeathCount(3) + sm.setInstanceTime(60*10) + sm.addCoolDownInXays(EventType.getByVal(40 + selection), 1, 1) + if selection == 0: + sm.warpInstanceIn(865000200) + if selection == 1: + sm.warpInstanceIn(865000900) + if selection == 2: + sm.warpInstanceIn(865000300) + if selection == 3: + sm.warpInstanceIn(865000100) + if selection == 4: + sm.warpInstanceIn(865000400) \ No newline at end of file diff --git a/scripts/npc/undefined.py b/scripts/npc/undefined.py new file mode 100755 index 0000000..4ccae3c --- /dev/null +++ b/scripts/npc/undefined.py @@ -0,0 +1 @@ +sm.sendSayOkay("(Npc) Not coded. Admin was lazy and didn't fix this :). ID: " + str(parentID)) diff --git a/scripts/npc/unionRaid_IN.py b/scripts/npc/unionRaid_IN.py new file mode 100755 index 0000000..71db729 --- /dev/null +++ b/scripts/npc/unionRaid_IN.py @@ -0,0 +1,14 @@ +# +# @author PacketBakery +# @npc Dame Appropiation - Legion Manager +# + +from net.swordie.ms.enums import UIType + +if sm.sendAskYesNo("#r#eA duel with a dragon#n#k awaits you! Be careful, " + "he's a big'un.\r\nWould you like to #b#eenter the Legion Raid#n#k?"): + sm.createQuestWithQRValue(16014, "map=" + str(sm.getFieldID())) + sm.closeUI(UIType.UNION_BOARD) + sm.warp(921172000) +else: + sm.sendSayOkay("Talk to me after you've thought it over.") diff --git a/scripts/npc/unionRaid_OUT.py b/scripts/npc/unionRaid_OUT.py new file mode 100755 index 0000000..6d7622f --- /dev/null +++ b/scripts/npc/unionRaid_OUT.py @@ -0,0 +1,12 @@ +# Npc 9010108 Dame Appropriation +# Field 921172200 Legion Raid: Legion Raid Exit + +if sm.getUnionCoin() > 0: + coins = int(sm.getQRValue(18797, "PT")) + sm.getUnionCoin() + sm.sendSayOk("You already collected #b" + str(sm.getUnionCoin()) + " #k of #b#i4310229:##t4310229##k? That's impressive!\r\nI'll go ahead and update your #bWeekly Coin Rank#k!\r\n\r\n#bThis Week's Coin Total#k#e: " + str(coins) + "#n\r\n\r\nThen I'll send you back to where you came from. Bye!") + sm.giveItem(4310229, sm.getUnionCoin()) + sm.addUnionCoin(coins) +else: + sm.sendNext("Uh, it doesn't look like you've earned any Legion Coins. If you're having a tough time with raiding, just come back later. Your Legion members will continue the raid even after you've left.") + sm.sendSayOkay("I'll send you back to where you were. See you later.") +sm.warp(int(sm.getQRValue(16014, "map"))) \ No newline at end of file diff --git a/scripts/npc/unityPortal.py b/scripts/npc/unityPortal.py new file mode 100755 index 0000000..3732816 --- /dev/null +++ b/scripts/npc/unityPortal.py @@ -0,0 +1,9 @@ +from net.swordie.ms.enums import DimensionalPortalType + +current = sm.getFieldID() +response = sm.sendAskSlideMenu(0) +mapID = DimensionalPortalType.getByVal(response).getMapID() + +if mapID != 0 and sm.getFieldID() == current: + sm.setReturnField() + sm.warp(mapID) diff --git a/scripts/npc/unknown_shop.py b/scripts/npc/unknown_shop.py new file mode 100755 index 0000000..09740fb --- /dev/null +++ b/scripts/npc/unknown_shop.py @@ -0,0 +1 @@ +sm.sendSayOkay("This shop is empty! ID = " + str(parentID)) \ No newline at end of file diff --git a/scripts/npc/urusEnter.py b/scripts/npc/urusEnter.py new file mode 100755 index 0000000..db917bf --- /dev/null +++ b/scripts/npc/urusEnter.py @@ -0,0 +1,55 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown, Hour String + +destinations = [ + ["Legendary", 230, 970072300, 20, EventType.Ursus, 259200000, 72], +] + +runsPerDay = 1 + +if sm.getFieldID() == 970072200: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to '#bUrsus's Battleground#k' to fight \r\n#bUrsus#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Ursus's Battleground (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if not sm.canHold(4310199): + sm.sendSayOkay("You or someone in your party does not have room in their inventory for #bStigma Coins#k.") + sm.dispose() + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bUrsus#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bUrsus#k within the past " + str(destinations[response][6]) + " Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.URSUS_TIME, 970072200) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(970072200) \ No newline at end of file diff --git a/scripts/npc/urusReward.py b/scripts/npc/urusReward.py new file mode 100755 index 0000000..b5cfd76 --- /dev/null +++ b/scripts/npc/urusReward.py @@ -0,0 +1,60 @@ +from net.swordie.ms.enums import InvType +from net.swordie.ms.scripts import ScriptUtil as su; + +ursusEssenceId = 4009349 +ursusHatId = 1004597 +ursusSandalId = 1073090 +ursusGloveId = 1082666 + +if not sm.hasItem(ursusEssenceId): + sm.sendNext("You do not have a #b" + su.getItemImg(ursusEssenceId) + " " + su.getItemName(ursusEssenceId) + "#k") + sm.dispose() + +if not sm.canHold(1004598): + sm.sendNext("Please make sure you have room in your inventory first.") + sm.dispose() + +text = "The names #bJawad#k, what can I do for you?#b\r\n#L0# I want to upgrade my Ursus equip. #l\r\n" +text += "#L1# I want to get a Ursus equip. #l" + +selection = sm.sendNext(text) + +if selection == 0: + + itemsEligibleForUpgrade = eval(sm.getItemsEligibleForUrsusUpgrade()) + itemsEligibleForUpgrade.sort() + itemsIDs = [] + + for x in range(len(itemsEligibleForUpgrade)): + itemsIDs.append(sm.getItemIDByBagIndex(itemsEligibleForUpgrade[x], InvType.EQUIP)) + + if not itemsIDs: + sm.sendSayOkay("No equips to upgrade.") + sm.dispose() + + outPut = "Choose the equip you wish to upgrade:\r\n" + + for i in range(len(itemsIDs)): + outPut += su.addSelectItem(itemsEligibleForUpgrade[i]) + " " + su.getItemImg(itemsIDs[i]) + "\r\n" + + itemSelection = sm.sendNext(outPut) + sm.upgradeUrsusItem(itemSelection) + +elif selection == 1: + + text = "Which one would you like?\r\n#b#L0# I want a Ursus Hat. #l\r\n" + text += "#L1# I want a Ursus Glove. #l\r\n" + text += "#L2# I want a Ursus Slipper. #l" + + selection2 = sm.sendNext(text) + + if selection2 == 0: + sm.giveItem(ursusHatId) + + elif selection2 == 1: + sm.giveItem(ursusGloveId) + + elif selection2 == 2: + sm.giveItem(ursusSandalId) + +sm.consumeItem(ursusEssenceId) diff --git a/scripts/npc/victoria_taxi.py b/scripts/npc/victoria_taxi.py new file mode 100755 index 0000000..8fdc800 --- /dev/null +++ b/scripts/npc/victoria_taxi.py @@ -0,0 +1,6 @@ +maps = [104000000, 100000000, 103000000, 101000000, 102000000] + +selection = sm.sendNext("Where would you like to go? \r\n#L0#Lith Harbor#l\r\n#L1#Henesys#l\r\n#L2#Kerning City#l" + + "\r\n#L3#Ellinia#l\r\n#L4#Perion#l") + +sm.warp(maps[selection], 0) diff --git a/scripts/npc/viking_cannon1.py b/scripts/npc/viking_cannon1.py new file mode 100755 index 0000000..b745729 --- /dev/null +++ b/scripts/npc/viking_cannon1.py @@ -0,0 +1,52 @@ +# id 1302008 (Cannon), field 106030500 +sm.setSpeakerType(3) +sm.setParam(2) +res = sm.sendAskYesNo("Hop in the cannon to go to #m106030102#?") +sm.createQuestWithQRValue(1470, "on=1;exp=142712615") +sm.createQuestWithQRValue(1470, "on=1;exp=142713129") +sm.createQuestWithQRValue(1470, "on=1;exp=142713643") +sm.createQuestWithQRValue(1470, "on=1;exp=142714157") +sm.createQuestWithQRValue(1470, "on=1;exp=142714671") +sm.createQuestWithQRValue(1470, "on=1;exp=142715185") +sm.createQuestWithQRValue(1470, "on=1;exp=142715699") +sm.createQuestWithQRValue(1470, "on=1;exp=142716213") +sm.createQuestWithQRValue(1470, "on=1;exp=142716727") +sm.createQuestWithQRValue(1470, "on=1;exp=142717241") +sm.createQuestWithQRValue(1470, "on=1;exp=142717755") +sm.createQuestWithQRValue(1470, "on=1;exp=142718269") +sm.createQuestWithQRValue(1470, "on=1;exp=142718783") +sm.createQuestWithQRValue(1470, "on=1;exp=142719297") +sm.createQuestWithQRValue(1470, "on=1;exp=142719811") +sm.createQuestWithQRValue(1470, "on=1;exp=142720325") +sm.createQuestWithQRValue(1470, "on=1;exp=142720839") +sm.createQuestWithQRValue(1470, "on=1;exp=142721353") +sm.createQuestWithQRValue(1470, "on=1;exp=142721867") +sm.createQuestWithQRValue(1470, "on=1;exp=142722381") +sm.createQuestWithQRValue(1470, "on=1;exp=142722895") +sm.createQuestWithQRValue(1470, "on=1;exp=142723409") +sm.createQuestWithQRValue(1470, "on=1;exp=142723923") +sm.createQuestWithQRValue(1470, "on=1;exp=142724437") +sm.createQuestWithQRValue(1470, "on=1;exp=142724951") +sm.createQuestWithQRValue(1470, "on=1;exp=142725465") +sm.createQuestWithQRValue(1470, "on=1;exp=142725979") +sm.createQuestWithQRValue(1470, "on=1;exp=142726493") +sm.createQuestWithQRValue(1470, "on=1;exp=142727007") +sm.createQuestWithQRValue(1470, "on=1;exp=142727521") +sm.createQuestWithQRValue(1470, "on=1;exp=142728035") +sm.createQuestWithQRValue(1470, "on=1;exp=142728549") +sm.createQuestWithQRValue(1470, "on=1;exp=142729063") +sm.createQuestWithQRValue(1470, "on=1;exp=142729577") +sm.createQuestWithQRValue(1470, "on=1;exp=142730091") +sm.createQuestWithQRValue(1470, "on=1;exp=142730605") +sm.createQuestWithQRValue(1470, "on=1;exp=142731119") +sm.createQuestWithQRValue(1470, "on=1;exp=142731633") +sm.createQuestWithQRValue(1470, "on=1;exp=142732147") +sm.createQuestWithQRValue(1470, "on=1;exp=142732661") +sm.createQuestWithQRValue(1470, "on=1;exp=142733175") +sm.createQuestWithQRValue(1470, "on=1;exp=142733689") +sm.createQuestWithQRValue(1470, "on=1;exp=142734203") +sm.createQuestWithQRValue(1470, "on=1;exp=142734717") +sm.createQuestWithQRValue(1470, "on=1;exp=142735231") +sm.createQuestWithQRValue(1470, "on=1;exp=142735745") +sm.createQuestWithQRValue(1470, "on=1;exp=142736259") +sm.warp(106030302) diff --git a/scripts/npc/visitor_movenpc.py b/scripts/npc/visitor_movenpc.py new file mode 100755 index 0000000..1ff5130 --- /dev/null +++ b/scripts/npc/visitor_movenpc.py @@ -0,0 +1,31 @@ + +# Stage Items +items = [1032191, 1113038, 1122256] +rand = sm.getRandomIntBelow(len(items)) +random = sm.getRandomIntBelow(30) + +# Boss Items +items2 = [1003893, 1132230] +rand2 = sm.getRandomIntBelow(len(items)) +random2 = sm.getRandomIntBelow(200) + +if sm.hasMobsInField(sm.getFieldID()): + sm.chatRed("You must kill all the mobs in the map before proceeding") +else: + if sm.getFieldID() == 861000500: + sm.warpInstanceOut(861000000) + if random2 == 1: + item2 = items2[rand] + sm.giveItem(item2) + else: + if sm.isPartyLeader(): + sm.setInstanceTime(5*60) + sm.warp(sm.getFieldID() + 100) + if random == 1: + item = items[rand] + sm.giveItem(item) + else: + sm.warp(sm.getFieldID() + 100) + if random == 1: + item = items[rand] + sm.giveItem(item) \ No newline at end of file diff --git a/scripts/npc/wanted_premier.py b/scripts/npc/wanted_premier.py new file mode 100755 index 0000000..2673c72 --- /dev/null +++ b/scripts/npc/wanted_premier.py @@ -0,0 +1,12 @@ +# id 1302026 (Wanted), field 106030100 +sm.lockInGameUI(True, True) +sm.zoomCamera(1000, 4000, 800, 360, 270) +sm.sendDelay(1500) +sm.setSpeakerID(1302026) # Wanted +sm.setParam(57) +sm.setColor(1) +sm.sendNext("This is a wanted poster for that traitor the Prime Minister... Seems they haven't caught him yet.") +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.startQuest(30050) +sm.lockInGameUI(False, True) diff --git a/scripts/npc/warrior4th_warp.py b/scripts/npc/warrior4th_warp.py new file mode 100755 index 0000000..10407b8 --- /dev/null +++ b/scripts/npc/warrior4th_warp.py @@ -0,0 +1,20 @@ +# Warrior 4th Job NPC Warp Script + +MANON_PREV_MAP = 240020400 +GRIFFEY_PREV_MAP = 240020100 +MANONS_DARK_FOREST = 924000200 +DARK_GRIFFEY_FOREST = 924000201 + + +sm.setSpeakerID(parentID) +sm.sendNext("Is it in you to become a hero? The only way to find out is for you to take action...") +if not sm.hasQuest(1451): + sm.dispose() + +selection = sm.sendNext("If you agree to take this test, I will send you to Manon and Girffey. Of course, if you are capable of visit Manon Forest or Griffey Forest on your own, plese feel free to do so. What would you like to do?\r\n\r\n#L0##bPlease send me to Manon Forest.\r\n#L1#Please send me to Griffey Forest.#l\r\n#L2#It's nothing. I will go there on my own.#l#n") +if selection == 0: + sm.sendNext("Would you like to go to Manon Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(MANONS_DARK_FOREST, False) +elif selection == 1: + sm.sendNext("Would you like to go to Griffey Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(DARK_GRIFFEY_FOREST, False) diff --git a/scripts/npc/watermelon_out.py b/scripts/npc/watermelon_out.py new file mode 100755 index 0000000..eacd74d --- /dev/null +++ b/scripts/npc/watermelon_out.py @@ -0,0 +1,177 @@ +import random +from net.swordie.ms.enums import InvType +from net.swordie.ms.loaders import ItemData +from net.swordie.ms.util import FileTime + +rlsPrice = 1000 +rlsId = 4000306 +damageSkinPrice = 500 +chairPrice = 100 +pvacHourlyPrice = 15 +pvacItemId = 4030003 +secondaryPendantPrice = 2000 +accSecondaryPendantPrice = 5000 +nameChangePrice = 1000 +errorMessage = "You do not have enough #bDonation Points#k or you do not have room in your inventory for this item." + +items = { #[itemid, price, expiration time] + 0 : [2434039, 5000, 0], + 1 : [2434038, 5000, 0], + 3 : [5360042, 3000, 0], + 4 : [5211122, 3000, 0], + 2 : [1122303, 1000, 0], + 5 : [1113171, 1000, 0], +} + +damageSkins = [2431966, 2432084, 2431967, 2432131, 2432153, 2432638, 2432659, 2432154, 2432637, 2432658, 2432207, 2432354, 2432355, 2432972, 2432465, 2432479, 2432526, 2432639, 2432660, 2432532, 2432592, 2432640, 2432661, 2432710, 2432836, 2432973, 2433063, 2433178, 2433456, 2435960, 2433715, 2433804, 5680343, 2433913, 2433980, 2433981, 2436229, 2434248, 2433362, 2434274, 2434289, 2434390, 2434391, 5680395, 2434528, 2434529, 2434530, 2433571, 2434574, 2433828, 2432804, 2434654, 2435326, 2432749, 2434710, 2433777, 2434824, 2434662, 2434664, 2434868, 2436041, 2436042, 2435046, 2435047, 2435836, 2435141, 2435179, 2435162, 2435157, 2435835, 2435159, 2436044, 2434663, 2435182, 2435850, 2435184, 2435222, 2435293, 2435313, 2435331, 2435332, 2435333, 2435334, 2435316, 2435408, 2435427, 2435428, 2435429, 2435456, 2435493, 2435331, 2435334, 2435959, 2435958, 2435431, 2435430, 2435432, 2435433, 2434601, 2435521, 2435523, 2435524, 2435538, 2435832, 2435833, 2435839, 2435840, 2435841, 2435849, 2435972, 2436023, 2436024, 2436026, 2436027, 2436028, 2436029, 2436045] + +if sm.sendNext: + selection = sm.sendNext("Hello my name is Agent W, This shop is where you can spend your #bDonation Points#k or exchange them for #i4000306# Red Packet(s). " + "\r\n\r\n#eYou have #r" + str(sm.getDonationPoints()) + " #bDonation points.\r\n#n#b" + "#L9##r#eI'd like to redeem my Donation key.#b#n\r\n" + "#L0#I'd like to exchange my Donation Points for a Red Packet(s).\r\n" + "#L1#I'd like to exchange my Red Packet(s) for Donation Points.\r\n" + "#L2#I'd like to purchase items.\r\n" + "#L3#I'd like to purchase a random damage skin.\r\n" + "#L4#I'd like to purchase a random chair.\r\n" + "#L5#I'd like to purchase a Pet Vac.\r\n" + "#L6#I'd like to purchase a permanent pendant slot (Character).\r\n" + "#L8#I'd like to purchase a permanent pendant slot (Account).\r\n" + "#L7#I'd like to purchase a name change.\r\n" + "#L10#I'd like to purchase a donor slot.\r\n") + if selection == 0: + amount = sm.sendAskNumber("A Red Packet costs #r(1000)#b Donation Points.\r\n" + "You currently have #e#r" + str(sm.getDonationPoints()) + " #bDonation points#n\r\n" + "How many would you like exchange1?", 1, 1, 100) + price = amount * rlsPrice + if sm.getDonationPoints() >= price and chr.canHold(rlsId, amount): + sm.deductDonationPoints(price) + sm.giveItem(rlsId, amount) + else: + sm.sendNext("You do not have enough #bDonation points#k or you do not have room in your inventory for this item.") + + elif selection == 1: + amount = sm.sendAskNumber("A Red Packet costs #r(1000)#b Donation Points. \r\n" + "You currently have #r#e" + str(sm.getQuantityOfItem(rlsId)) + " #bRed Packets \r\n" + "#nHow many would you like exchange2?", 1, 1, 100) + if sm.getQuantityOfItem(rlsId) >= amount: + sm.addDonationPoints(rlsPrice * amount) + sm.consumeItem(rlsId, amount); + else: + sm.sendNext("You do not have enough Red Packets for this exchange.") + + elif selection == 2: + outPut = "You currently have #e#r" + str(sm.getDonationPoints()) + " #bDonation points#n\r\n" + "Which item would you like to purchase?" + for x in range (len(items)): + outPut += "#b" + su.addSelectItem(x) + su.getItemImg(items[x][0]) + " " + su.getItemName(items[x][0]) + " for #r" + str(items[x][1]) + " #bDonation Points" + "\r\n" + selection = sm.sendNext(outPut) + itemId = items[selection][0] + price = items[selection][1] + answer = sm.sendAskYesNo("Would you like to purchase " + " #b" + su.getItemName(itemId) + " #kfor #r" + str(price) + " #bDonation Points#k?") + if answer and sm.canHold(itemId) and sm.getDonationPoints() >= price: + sm.giveItem(itemId, 1, items[selection][2]) + sm.deductDonationPoints(price) + else: + sm.sendNext(errorMessage) + + elif selection == 3: + answer = sm.sendAskYesNo("Are you sure you want to exchange #r" + str(damageSkinPrice) + " #bDonation Points#k for a random damage skin?\r\n\r\n#ePlease note that this will give you a random damage skin from all existing damage skins in the current game version.\r\n\r\nFurthermore use damage skins wisely as they are not account wide they are only character bound.") + if answer and sm.canHold(damageSkins[0]) and sm.getDonationPoints() >= damageSkinPrice: + sm.giveItem(random.choice(damageSkins)) + sm.deductDonationPoints(damageSkinPrice) + else: + sm.sendNext(errorMessage) + + elif selection == 4: + answer = sm.sendAskYesNo("Are you sure you want to exchange #r" + str(chairPrice) + " #bDonation Points#k for a random chair?\r\n\r\n#ePlease note that this will give you a random chair from all existing chairs in the current game version.") + if answer and sm.canHold(3015609) and sm.getDonationPoints() >= chairPrice: #id is a random chair + chairId = random.randint(3010002, 3015609) + item = ItemData.getItemDeepCopy(chairId) + while item is None: #reroll item id until itemid exist since chairs ids are not consistent + chairId = random.randint(3010002, 3010695) + item = ItemData.getItemDeepCopy(chairId) + sm.giveItem(chairId) + sm.deductDonationPoints(chairPrice) + else: + sm.sendNext(errorMessage) + + elif selection == 5: + hours = sm.sendAskNumber("For every #r" + str(pvacHourlyPrice) + "#b Donation Points#k your #rPet Vac#k will gain #r1 #bHour.#k\r\n" + "You currently have #e#r" + str(sm.getDonationPoints()) + " #bDonation points#n\r\n" + "How many Hour(s) would you like your #rPet Vac#k to be?", 1, 1, 1000) + totalPrice = pvacHourlyPrice * hours + answer = sm.sendAskYesNo("Are you sure you want your #rPet Vac#k to last #r" + str(hours) + "#b Hour(s) #kfor #r" + str(totalPrice) + "#bDonation Points#k?") + if answer and sm.canHold(pvacItemId) and sm.getDonationPoints() >= totalPrice: #id is a random chair + sm.giveItem(pvacItemId, 1, hours) + sm.deductDonationPoints(totalPrice) + else: + sm.sendNext(errorMessage) + + elif selection == 6: + answer = sm.sendAskYesNo("Are you sure you want to purchase a permanent secondary pendant slot for #r" + str(secondaryPendantPrice) + "#bDonation Points#k.") + if answer and sm.getDonationPoints() >= secondaryPendantPrice: + if sm.setSecondaryPendantDate(FileTime.fromType(FileTime.Type.MAX_TIME)): + sm.deductDonationPoints(secondaryPendantPrice) + sm.sendSayOkay("Please re-log for your secondary pendant slot to take effect.") + else: + sm.sendSayOkay("You already own a secondary pendant slot") + else: + sm.sendNext("You do not have enough #bDonation Points#k.") + + elif selection == 7: + name = sm.sendAskText("#b#eWhat name would you like to change your character to?", "", 4, 13) + if sm.getDonationPoints() >= nameChangePrice: + if not sm.setName(name): + sm.sendSayOkay("You cannot use this name or this name is already in use.") + sm.dispose() + else: + sm.deductDonationPoints(nameChangePrice) + sm.sendSayOkay("Please re-log for your new name to take take effect.") + else: + sm.sendSayOkay("You do not have enough #bDonation Points#k.") + + elif selection == 8: + answer = sm.sendAskYesNo("Are you sure you want to purchase a permanent secondary pendant slot for #r" + str( + accSecondaryPendantPrice) + " #bDonation Points#k.") + if answer and sm.getDonationPoints() >= accSecondaryPendantPrice: + if sm.setAccSecondaryPendantDate(FileTime.fromType(FileTime.Type.MAX_TIME)): + sm.deductDonationPoints(accSecondaryPendantPrice) + sm.sendSayOkay("Please re-log for your secondary pendant slot to take effect.") + else: + sm.sendSayOkay("You already own a secondary pendant slot") + else: + sm.sendNext("You do not have enough #bDonation Points#k.") + + elif selection == 9: + dpkey = sm.sendAskText("Here you can redeem your key, if you donated through our site.\r\nPlease enter the key you received on e-mail:", "", 4, 81) + if sm.isDonationKeyExists(dpkey): + if sm.commitDonationKey(dpkey): + sm.sendSayOkay("Thank you! The key has been validated and redeemed.") + else: + sm.sendSayOkay("An error occured while attempting to redeem your donation points. Please contact an Administrator..") + else: + sm.sendSayOkay("This key does not exists.") + + elif selection == 10: + newlist = [] + itemID = [] + listitem = eval(sm.getItemsByInventory(InvType.EQUIP)) + listitem.sort() + for x in range(len(listitem)): + itemID.append(sm.getItemIDByBagIndex(listitem[x], InvType.EQUIP)) + newlist.append('\n#L'+str(listitem[x])+'##v'+str(itemID[x])+'#'+"#t"+str(itemID[x])+"#\r\n") + if not newlist: + sm.sendSayOkay("I was unable to find any equips in your equip inventory.") + sm.dispose() + selection = sm.sendNext(''.join(newlist)) + if sm.sendAskYesNo("This will cost " + str(sm.getDonorSlotCost(selection)) + " donor points. Are you sure?"): + result = sm.doDonorSlot(selection) # DP Reduction and everything is handled in this function. + if result == -3: + sm.sendSayOkay("Your equip needs to not have any upgrade slots remaining.") + elif result == -2: + sm.sendSayOkay("Sorry. You do not have enough Donation Points.") + elif result == -1: + sm.sendSayOkay("The selected equip has already maxed out his available donor slots.") + else: + sm.sendSayOkay("Success! I have given the equip another slot to use. Enjoy!") \ No newline at end of file diff --git a/scripts/npc/wedding_enter.py b/scripts/npc/wedding_enter.py new file mode 100755 index 0000000..ed021e7 --- /dev/null +++ b/scripts/npc/wedding_enter.py @@ -0,0 +1,5 @@ +# id 9201594 (Nana K), field 101000000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9201594) # Nana K +res = sm.sendNext("#e#n\r\nThe world is just bursting at the seams with love! And the best place to feel the love is right here in the #eNew Wedding Hall#k#n! You can choose from the #eHouse Wedding Hall, Las Vegas Wedding Hall, Japan Wedding Hall, or China Wedding Hall#k#n to move your ceremony there and experience the magic yourself!#k\r\n#b#L0# Go to #m620110000#.(#t5250500#)#l\r\n#b#L2# End conversation.#l") diff --git a/scripts/npc/welcome_ereb00.py b/scripts/npc/welcome_ereb00.py new file mode 100755 index 0000000..83e3333 --- /dev/null +++ b/scripts/npc/welcome_ereb00.py @@ -0,0 +1,6 @@ +# Kisha | Welcome to Ereve +KISHA = 1102105 +sm.setSpeakerID(KISHA) + +sm.sendSayOkay("Another new Cygnus Knight? Fortune smiles on us. " +"I am Kisha. I hope to see you progress into a fine knight.") \ No newline at end of file diff --git a/scripts/npc/welcome_ereb01.py b/scripts/npc/welcome_ereb01.py new file mode 100755 index 0000000..9eb298d --- /dev/null +++ b/scripts/npc/welcome_ereb01.py @@ -0,0 +1,5 @@ +# Kisha | Welcome to Ereve +KIDAN = 1102115 +sm.setSpeakerID(KIDAN) + +sm.sendSayOkay("You will need to train hard to be a servant of the Empress.") \ No newline at end of file diff --git a/scripts/npc/wendelinHeal.py b/scripts/npc/wendelinHeal.py new file mode 100755 index 0000000..09ad376 --- /dev/null +++ b/scripts/npc/wendelinHeal.py @@ -0,0 +1,8 @@ +WENDELLINE = 2151006 + +sm.setSpeakerID(WENDELLINE) +if sm.sendAskYesNo("Are you hurt? Allow me to treat you. Treatment is alway free for members of the Resistance."): + chr.heal(chr.getMaxHP()) + sm.sendSayOkay("There you go. You're fully healed.") +else: + sm.sendNext("So you don't need treatment?") \ No newline at end of file diff --git a/scripts/npc/will_enterGate.py b/scripts/npc/will_enterGate.py new file mode 100755 index 0000000..8401d8d --- /dev/null +++ b/scripts/npc/will_enterGate.py @@ -0,0 +1,44 @@ +# Will entry NPC (will_enterGate) + +# mode, req level, map, death count +destinations = [ + # actual map is -50, with some direction stuff + ["Normal", 210, 450008150, 10], + ["Hard", 235, 450008450, 10], +] +TIME = 30 * 60 # 30 minutes + +def is_party_eligible(reqlevel, party): + # TODO: check prequest + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() + +dialog = "Are you ready to head to the #bDiffraction Hall#k to fight Will?\r\n" + +for i in range(len(destinations)): + dialog += "#L%d#Go to the #bDiffraction Hall (%s Mode).#k (Lv. %d or above)#l\r\n" % (i, destinations[i][0], destinations[i][1]) + +dialog += "#L99#Never mind." +response = sm.sendSay(dialog) + +if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + +elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face Damien.") + +elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.warpInstanceIn(destinations[response][2], True) + sm.setDeathCount(destinations[response][3]) + sm.setInstanceTime(TIME) + + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level %d." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/npc/will_out.py b/scripts/npc/will_out.py new file mode 100755 index 0000000..63cbc56 --- /dev/null +++ b/scripts/npc/will_out.py @@ -0,0 +1,5 @@ + +response = sm.sendAskYesNo("Are you sure you want to leave? Your whole party will be ported out.") + +if response: + sm.warpInstanceOut(450007240) diff --git a/scripts/npc/witchMaladyGL.py b/scripts/npc/witchMaladyGL.py new file mode 100755 index 0000000..bbc782b --- /dev/null +++ b/scripts/npc/witchMaladyGL.py @@ -0,0 +1,3 @@ +# Witch Malady - Sleepywood + +sm.sendSayOkay("Get out of my face before I curse you and all your offspring!!") \ No newline at end of file diff --git a/scripts/npc/wizard4th_warp.py b/scripts/npc/wizard4th_warp.py new file mode 100755 index 0000000..905a2d3 --- /dev/null +++ b/scripts/npc/wizard4th_warp.py @@ -0,0 +1,20 @@ +# Magician 4th Job NPC Warp Script + +MANON_PREV_MAP = 240020400 +GRIFFEY_PREV_MAP = 240020100 +MANONS_DARK_FOREST = 924000200 +DARK_GRIFFEY_FOREST = 924000201 + + +sm.setSpeakerID(parentID) +sm.sendNext("Is it in you to become a hero? The only way to find out is for you to take action...") +if not sm.hasQuest(1453): + sm.dispose() + +selection = sm.sendNext("If you agree to take this test, I will send you to Manon and Girffey. Of course, if you are capable of visit Manon Forest or Griffey Forest on your own, plese feel free to do so. What would you like to do?\r\n\r\n#L0##bPlease send me to Manon Forest.\r\n#L1#Please send me to Griffey Forest.#l\r\n#L2#It's nothing. I will go there on my own.#l#n") +if selection == 0: + sm.sendNext("Would you like to go to Manon Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(MANONS_DARK_FOREST, False) +elif selection == 1: + sm.sendNext("Would you like to go to Griffey Forest? I will send you there. Come back if you can't find the other monster on your own.") + sm.warpInstanceIn(DARK_GRIFFEY_FOREST, False) diff --git a/scripts/npc/world_trip.py b/scripts/npc/world_trip.py new file mode 100755 index 0000000..b62a60d --- /dev/null +++ b/scripts/npc/world_trip.py @@ -0,0 +1,8 @@ +# Spinel | World Tour Guide + +if sm.canHold(1452002): + sm.sendNext("You CAN hold an Equip.") +else: + sm.sendNext("You CANNOT hold an Equip.") + + diff --git a/scripts/npc/xmas_tree2.py b/scripts/npc/xmas_tree2.py new file mode 100755 index 0000000..5d5a966 --- /dev/null +++ b/scripts/npc/xmas_tree2.py @@ -0,0 +1,12 @@ +# Christmas Tree +# Happyville + +import random + +rand = [ +"I'm ornament to be with you! Haha~!", +"Put your big package under me!", +"Is Santa gonna come see me this year?" +] + +sm.sendSayOkay(random.choice(rand)) \ No newline at end of file diff --git a/scripts/npc/zakum_accept.py b/scripts/npc/zakum_accept.py new file mode 100755 index 0000000..e75766c --- /dev/null +++ b/scripts/npc/zakum_accept.py @@ -0,0 +1,57 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Easy", 50, 280030200, 5, EventType.EasyZakum, 21600000], + ["Normal", 75, 280030100, 5, EventType.NormalZakum, 21600000], + ["Chaos", 120, 280030000, 5, EventType.ChaosZakum, 43200000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 211042400: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(2030008) + + dialog = "Do you want to head to '#bZakum's Altar#k' to fight \r\n#bZakum#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Zakum's Altar (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bZakum#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing #bZakum#k recently.\r\n\r\n You have #e#r" + timeUntilReset + "#n#k left on your cooldown.") + sm.dispose() + + elif not sm.hasItem(4001017): + sm.sendSayOkay("You do not possess a #b#v 4001017 # #z 4001017 ##k.") + sm.dispose() + + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + # sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setPartyDeathCount(destinations[response][3]) + sm.setInstanceTime(BossConstants.ZAKUM_TIME_LIMIT) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/portal/101020400_east00.py b/scripts/portal/101020400_east00.py new file mode 100755 index 0000000..1dbdbcd --- /dev/null +++ b/scripts/portal/101020400_east00.py @@ -0,0 +1,4 @@ +# 101020400 + +sm.warp(101020401, 10) +sm.dispose() diff --git a/scripts/portal/101020400_east01.py b/scripts/portal/101020400_east01.py new file mode 100755 index 0000000..f89155d --- /dev/null +++ b/scripts/portal/101020400_east01.py @@ -0,0 +1,3 @@ +# 101020400 +sm.warp(101020407, 7) +sm.dispose() diff --git a/scripts/portal/101030000_down.py b/scripts/portal/101030000_down.py new file mode 100755 index 0000000..6b925da --- /dev/null +++ b/scripts/portal/101030000_down.py @@ -0,0 +1,14 @@ +# Portal to enter Ellinel Fairy Academy + +FANZY = 1040002 # NPC ID +FAIRYNAPPERS = 32101 # QUEST ID +MIDSUMMER_NIGHTS_FOREST_PATH_TO_ELLINEL = 101074000 # MAP ID + +sm.setSpeakerID(FANZY) + +if sm.hasQuest(FAIRYNAPPERS) or sm.hasQuestCompleted(FAIRYNAPPERS): + response = sm.sendAskYesNo("Would you like to enter #b[Theme Dungeon: Ellinel Fairy Academy]#k?") + if response: + sm.warp(MIDSUMMER_NIGHTS_FOREST_PATH_TO_ELLINEL) +else: + sm.sendSayOkay("We still have a business to take care of, remember?\r\n\r\n#b(You must talk to Fanzy and complete his quests to enter.)#k") \ No newline at end of file diff --git a/scripts/portal/101050100_PT.py b/scripts/portal/101050100_PT.py new file mode 100755 index 0000000..ae55fb7 --- /dev/null +++ b/scripts/portal/101050100_PT.py @@ -0,0 +1,3 @@ +# 101050100 +sm.warp(101050000, 9) +sm.dispose() diff --git a/scripts/portal/101070000_up.py b/scripts/portal/101070000_up.py new file mode 100755 index 0000000..bc6ca3e --- /dev/null +++ b/scripts/portal/101070000_up.py @@ -0,0 +1,10 @@ +# Portal to leave Ellinel Fairy Academy + +FANZY = 1040002 # NPC ID +MIDSUMMER_NIGHTS_FOREST_PATH_FROM_ELLINEL = 101074001 # MAP ID + +sm.setSpeakerID(FANZY) + +response = sm.sendAskYesNo("Head back to #bNorth Forest: Giant Tree#k?") +if response: + sm.warp(MIDSUMMER_NIGHTS_FOREST_PATH_FROM_ELLINEL) \ No newline at end of file diff --git a/scripts/portal/101070100_east.py b/scripts/portal/101070100_east.py new file mode 100755 index 0000000..c459d73 --- /dev/null +++ b/scripts/portal/101070100_east.py @@ -0,0 +1,6 @@ +# Poral from Radiant Lake Path 1 to Ellinel Lake Shore +ACADEMIA = 32105 # QUEST ID +if sm.hasQuest(ACADEMIA) or sm.hasQuestCompleted(ACADEMIA): + sm.warp(101070010) +else: + sm.warp(101070000) \ No newline at end of file diff --git a/scripts/portal/101071000_west.py b/scripts/portal/101071000_west.py new file mode 100755 index 0000000..3b5bb54 --- /dev/null +++ b/scripts/portal/101071000_west.py @@ -0,0 +1,6 @@ +# Poral from Above the lake 1 to Ellinel Lake Shore +ACADEMIA = 32105 # QUEST ID +if sm.hasQuest(ACADEMIA) or sm.hasQuestCompleted(ACADEMIA): + sm.warp(101070010) +else: + sm.warp(101070000) \ No newline at end of file diff --git a/scripts/portal/101072000_east.py b/scripts/portal/101072000_east.py new file mode 100755 index 0000000..def19a5 --- /dev/null +++ b/scripts/portal/101072000_east.py @@ -0,0 +1,3 @@ +# Elliniel Academy Lobby portal to + +sm.warp(101072100) diff --git a/scripts/portal/103030100_in00.py b/scripts/portal/103030100_in00.py new file mode 100755 index 0000000..107be54 --- /dev/null +++ b/scripts/portal/103030100_in00.py @@ -0,0 +1,4 @@ +# 103030100 + +sm.chatRed("There seems to be a mysterious presence blocking you from entering.") +sm.dispose() diff --git a/scripts/portal/106030100_IP.py b/scripts/portal/106030100_IP.py new file mode 100755 index 0000000..974fa17 --- /dev/null +++ b/scripts/portal/106030100_IP.py @@ -0,0 +1,3 @@ +# 106030100 +sm.warp(106030000, 2) +sm.dispose() diff --git a/scripts/portal/106030200_out00.py b/scripts/portal/106030200_out00.py new file mode 100755 index 0000000..a0b4c9b --- /dev/null +++ b/scripts/portal/106030200_out00.py @@ -0,0 +1,3 @@ +# 106030200 +sm.warp(106030000, 1) +sm.dispose() diff --git a/scripts/portal/106030201_east00.py b/scripts/portal/106030201_east00.py new file mode 100755 index 0000000..f2293c3 --- /dev/null +++ b/scripts/portal/106030201_east00.py @@ -0,0 +1,3 @@ +# 106030201 +sm.warp(106030210, 1) +sm.dispose() diff --git a/scripts/portal/106030211_west00.py b/scripts/portal/106030211_west00.py new file mode 100755 index 0000000..274f58d --- /dev/null +++ b/scripts/portal/106030211_west00.py @@ -0,0 +1,3 @@ +# 310070230 +sm.warp(106030210, 2) +sm.dispose() diff --git a/scripts/portal/106030302_out00.py b/scripts/portal/106030302_out00.py new file mode 100755 index 0000000..8745190 --- /dev/null +++ b/scripts/portal/106030302_out00.py @@ -0,0 +1,3 @@ +# 106030302 +sm.warp(106030102, 1) +sm.dispose() diff --git a/scripts/portal/106030501_in00.py b/scripts/portal/106030501_in00.py new file mode 100755 index 0000000..f9bb99f --- /dev/null +++ b/scripts/portal/106030501_in00.py @@ -0,0 +1,3 @@ +# 106030501 +sm.warp(106030600, 2) +sm.dispose() diff --git a/scripts/portal/106030600_east00.py b/scripts/portal/106030600_east00.py new file mode 100755 index 0000000..06b9644 --- /dev/null +++ b/scripts/portal/106030600_east00.py @@ -0,0 +1,4 @@ +# 106030600 + +sm.warp(106030600, 3) +sm.dispose() diff --git a/scripts/portal/106031500_hide00.py b/scripts/portal/106031500_hide00.py new file mode 100755 index 0000000..c823789 --- /dev/null +++ b/scripts/portal/106031500_hide00.py @@ -0,0 +1,4 @@ +# id 1 (hide00), field 106031500 +sm.lockInGameUI(True, True) +sm.forcedInput(0) +sm.sendDelay(500) diff --git a/scripts/portal/106031502_hide01.py b/scripts/portal/106031502_hide01.py new file mode 100755 index 0000000..5d45f16 --- /dev/null +++ b/scripts/portal/106031502_hide01.py @@ -0,0 +1,4 @@ +# id 2 (hide01), field 106031502 +sm.lockInGameUI(True, True) +sm.forcedInput(0) +sm.sendDelay(500) diff --git a/scripts/portal/106031503_hide01.py b/scripts/portal/106031503_hide01.py new file mode 100755 index 0000000..f99a7e4 --- /dev/null +++ b/scripts/portal/106031503_hide01.py @@ -0,0 +1,4 @@ +# id 3 (hide01), field 106031503 +sm.lockInGameUI(True, True) +sm.forcedInput(0) +sm.sendDelay(500) diff --git a/scripts/portal/141060000_pt00.py b/scripts/portal/141060000_pt00.py new file mode 100755 index 0000000..6a21ca5 --- /dev/null +++ b/scripts/portal/141060000_pt00.py @@ -0,0 +1,9 @@ +# 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.warp(141000000, 1) # Middle of Strait : Glacial Observatory + +# Ride Vehicle Check +if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1930000: # Riena Skiff used in Riena Strait + sm.removeCTS(CharacterTemporaryStat.RideVehicle) + diff --git a/scripts/portal/141060000_pt01.py b/scripts/portal/141060000_pt01.py new file mode 100755 index 0000000..3cd7c02 --- /dev/null +++ b/scripts/portal/141060000_pt01.py @@ -0,0 +1,9 @@ +# 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.warp(141010000, 0) # Middle of Strait : Ice Station 1 + +# Ride Vehicle Check +if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1930000: # Riena Skiff used in Riena Strait + sm.removeCTS(CharacterTemporaryStat.RideVehicle) + diff --git a/scripts/portal/141060000_pt02.py b/scripts/portal/141060000_pt02.py new file mode 100755 index 0000000..c9e33a2 --- /dev/null +++ b/scripts/portal/141060000_pt02.py @@ -0,0 +1,10 @@ +# 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.warp(141020000, 0) # Middle of Strait : Ice Station 2 + +# Ride Vehicle Check +if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1930000: # Riena Skiff used in Riena Strait + sm.removeCTS(CharacterTemporaryStat.RideVehicle) + + diff --git a/scripts/portal/141060000_pt03.py b/scripts/portal/141060000_pt03.py new file mode 100755 index 0000000..9432a9c --- /dev/null +++ b/scripts/portal/141060000_pt03.py @@ -0,0 +1,10 @@ +# 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.warp(141030000, 0) # Middle of Strait : Ice Station 3 + +# Ride Vehicle Check +if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1930000: # Riena Skiff used in Riena Strait + sm.removeCTS(CharacterTemporaryStat.RideVehicle) + + diff --git a/scripts/portal/141060000_pt04.py b/scripts/portal/141060000_pt04.py new file mode 100755 index 0000000..e2a6a2f --- /dev/null +++ b/scripts/portal/141060000_pt04.py @@ -0,0 +1,9 @@ +# 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.warp(141040000, 0) # Middle of Strait : Barbara's House + +# Ride Vehicle Check +if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1930000: # Riena Skiff used in Riena Strait + sm.removeCTS(CharacterTemporaryStat.RideVehicle) + diff --git a/scripts/portal/141060000_pt05.py b/scripts/portal/141060000_pt05.py new file mode 100755 index 0000000..0347289 --- /dev/null +++ b/scripts/portal/141060000_pt05.py @@ -0,0 +1,10 @@ +# 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.warp(141050000, 0) # Middle of Strait : Glacial Observatory + +# Ride Vehicle Check +if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1930000: # Riena Skiff used in Riena Strait + sm.removeCTS(CharacterTemporaryStat.RideVehicle) + + diff --git a/scripts/portal/141060000_ptq1.py b/scripts/portal/141060000_ptq1.py new file mode 100755 index 0000000..efceec7 --- /dev/null +++ b/scripts/portal/141060000_ptq1.py @@ -0,0 +1,9 @@ +# 141060000 +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +if sm.hasQuest(32170): + sm.warpInstanceIn(141010400, 0, False) # Nora's Cove + + # Ride Vehicle Check + if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1930000: # Riena Skiff used in Riena Strait + sm.removeCTS(CharacterTemporaryStat.RideVehicle) \ No newline at end of file diff --git a/scripts/portal/1580_PCS01.py b/scripts/portal/1580_PCS01.py new file mode 100755 index 0000000..1a7b423 --- /dev/null +++ b/scripts/portal/1580_PCS01.py @@ -0,0 +1,14 @@ +# id 3 (pcs01), field 867201580 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bPeytour said that the Grim Vale is actually a safe place to camp because of the tight terrain. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Really...? ") +sm.sendSay("#face0#Oh wait, that does make sense. We seem to be clear for the moment, at least. ") +sm.setParam(57) +sm.sendSay("#bThat's right. ") +sm.setParam(37) +sm.sendSay("#face0#I suppose falling down here actually improved our situation. Ha, how funny. ") +sm.createQuestWithQRValue(64080, "chk1=0") diff --git a/scripts/portal/1580_PCS02.py b/scripts/portal/1580_PCS02.py new file mode 100755 index 0000000..1a4b5dd --- /dev/null +++ b/scripts/portal/1580_PCS02.py @@ -0,0 +1,2 @@ +# id 4 (pcs02), field 867201580 +sm.createQuestWithQRValue(64080, "chk1=0;chk2=1") diff --git a/scripts/portal/1580_PCS03.py b/scripts/portal/1580_PCS03.py new file mode 100755 index 0000000..b5d1d0b --- /dev/null +++ b/scripts/portal/1580_PCS03.py @@ -0,0 +1,2 @@ +# id 5 (pcs03), field 867201580 +sm.createQuestWithQRValue(64080, "chk1=0;chk2=1;chk3=1") diff --git a/scripts/portal/200020001_out00.py b/scripts/portal/200020001_out00.py new file mode 100755 index 0000000..420a249 --- /dev/null +++ b/scripts/portal/200020001_out00.py @@ -0,0 +1 @@ +sm.warpInstanceOut(200000000) \ No newline at end of file diff --git a/scripts/portal/240010102_out00.py b/scripts/portal/240010102_out00.py new file mode 100755 index 0000000..f84072c --- /dev/null +++ b/scripts/portal/240010102_out00.py @@ -0,0 +1,3 @@ +# 240010102 +sm.warp(240010101, 0) +sm.dispose() diff --git a/scripts/portal/240090000_mid.py b/scripts/portal/240090000_mid.py new file mode 100755 index 0000000..0a9ecc8 --- /dev/null +++ b/scripts/portal/240090000_mid.py @@ -0,0 +1,20 @@ +# 240090000 + +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +KUPOS_RIDE = 1932165 +KUPO = 2210002 +TIME = 20 + +if sm.hasQuestCompleted(31339) or sm.hasQuest(31339): + sm.warpInstanceIn(240090800, 0) # Kupo's Ride The Road Up + sm.rideVehicle(KUPOS_RIDE) + sm.lockInGameUI(True, False) + sm.createStopWatch(TIME) + sm.setInstanceTime(TIME, 240091000, 2) + sm.invokeAfterDelay(TIME*999, "lockInGameUI", False) + sm.invokeAfterDelay(TIME*1000, "removeCTS", CharacterTemporaryStat.RideVehicle) +else: + sm.setSpeakerID(KUPO) + sm.sendSayOkay("Hey Hey Hey.. Where do you think you are going, buddy?\r\n" + "This path isn't meant for you. Sorry") \ No newline at end of file diff --git a/scripts/portal/240091000_west.py b/scripts/portal/240091000_west.py new file mode 100755 index 0000000..a9ed1fd --- /dev/null +++ b/scripts/portal/240091000_west.py @@ -0,0 +1,13 @@ +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +KUPOS_RIDE = 1932165 +KUPO = 2210002 +TIME = 20 + +sm.warpInstanceIn(240090801, 0) # Kupo's Ride The Road Down +sm.rideVehicle(KUPOS_RIDE) +sm.lockInGameUI(True, False) +sm.createStopWatch(TIME) +sm.invokeAfterDelay(TIME*999, "lockInGameUI", False) +sm.invokeAfterDelay(TIME*1000, "removeCTS", CharacterTemporaryStat.RideVehicle) +sm.setInstanceTime(TIME, 240090000, 4) diff --git a/scripts/portal/240091300_south.py b/scripts/portal/240091300_south.py new file mode 100755 index 0000000..4283926 --- /dev/null +++ b/scripts/portal/240091300_south.py @@ -0,0 +1,9 @@ +CHRISTOPHER = 2210012 + +if sm.hasQuestCompleted(31351): # Clean up 7 + sm.warp(240091400, 1) +else: + sm.setSpeakerID(CHRISTOPHER) + sm.sendSayOkay("Oh Hey! No no no..\r\n" + "You don't want to go in there! That place is full of wasps and really strong ones too.. " + "It seems as if they are draining energy from the Mountain.\r\n") \ No newline at end of file diff --git a/scripts/portal/240091500_up.py b/scripts/portal/240091500_up.py new file mode 100755 index 0000000..607f309 --- /dev/null +++ b/scripts/portal/240091500_up.py @@ -0,0 +1,11 @@ +# 240091500 + +CHINO = 2210004 +TIME = 20 + +if sm.hasQuestCompleted(31342) or sm.hasQuest(31342): + sm.warpInstanceIn(240091600, 0) + sm.setInstanceTime(TIME, 240092000, 0) +else: + sm.setSpeakerID(CHINO) + sm.sendSayOkay("Where do you think you're going buddy? That lift is for me.\r\n\r\n#fs 18##eNO ONE ELSE!") \ No newline at end of file diff --git a/scripts/portal/240092000_down.py b/scripts/portal/240092000_down.py new file mode 100755 index 0000000..dfa8751 --- /dev/null +++ b/scripts/portal/240092000_down.py @@ -0,0 +1,5 @@ +# 223000000 +TIME = 20 + +sm.warpInstanceIn(240091601, 0) +sm.setInstanceTime(TIME, 240091500, 2) \ No newline at end of file diff --git a/scripts/portal/240092000_east.py b/scripts/portal/240092000_east.py new file mode 100755 index 0000000..8e8081b --- /dev/null +++ b/scripts/portal/240092000_east.py @@ -0,0 +1,6 @@ +if sm.hasQuestCompleted(31351): # Clean up 7 + sm.warp(240092100, 1) +elif sm.hasQuestCompleted(31348): + sm.warp(240092101, 1) +else: + sm.warp(240092100, 1) \ No newline at end of file diff --git a/scripts/portal/240092100_in.py b/scripts/portal/240092100_in.py new file mode 100755 index 0000000..1a8cace --- /dev/null +++ b/scripts/portal/240092100_in.py @@ -0,0 +1 @@ +sm.warp(240093000, 2) \ No newline at end of file diff --git a/scripts/portal/240092200_down.py b/scripts/portal/240092200_down.py new file mode 100755 index 0000000..c10f1be --- /dev/null +++ b/scripts/portal/240092200_down.py @@ -0,0 +1,6 @@ +if sm.hasQuestCompleted(31351): # Clean up 7 + sm.warp(240092100, 2) +elif sm.hasQuestCompleted(31348): + sm.warp(240092101, 2) +else: + sm.warp(240092100, 2) \ No newline at end of file diff --git a/scripts/portal/240092300_west.py b/scripts/portal/240092300_west.py new file mode 100755 index 0000000..4f930d2 --- /dev/null +++ b/scripts/portal/240092300_west.py @@ -0,0 +1,8 @@ +if sm.hasQuest(31348): # Colossal Clean Up 4 + sm.warpInstanceIn(924030000) # Hidden Street : Stone Colossus + +elif sm.hasQuestCompleted(31348): # Colossal Clean Up 4 + sm.warp(240092400) # Stone Colossus Torso 3 + +else: + sm.chat("This path is blocked by a mysterious presence.") \ No newline at end of file diff --git a/scripts/portal/240093000_out.py b/scripts/portal/240093000_out.py new file mode 100755 index 0000000..e832cf9 --- /dev/null +++ b/scripts/portal/240093000_out.py @@ -0,0 +1,6 @@ +if sm.hasQuestCompleted(31351): # Clean up 7 + sm.warp(240092100, 3) +elif sm.hasQuestCompleted(31348): + sm.warp(240092101, 3) +else: + sm.warp(240092100, 3) \ No newline at end of file diff --git a/scripts/portal/240093200_in.py b/scripts/portal/240093200_in.py new file mode 100755 index 0000000..284acf9 --- /dev/null +++ b/scripts/portal/240093200_in.py @@ -0,0 +1,5 @@ +if sm.checkParty(): + if sm.hasQuest(31351): # [Stone Colossus] Colossal Clean Up 7 + sm.warpInstanceIn(240093310, True) + elif sm.hasQuestCompleted(31351): + sm.warpInstanceIn(240093300, True) diff --git a/scripts/portal/240093300_out.py b/scripts/portal/240093300_out.py new file mode 100755 index 0000000..81b471c --- /dev/null +++ b/scripts/portal/240093300_out.py @@ -0,0 +1,2 @@ +if sm.checkParty(): + sm.warpInstanceOut(240093200) \ No newline at end of file diff --git a/scripts/portal/240093310_out.py b/scripts/portal/240093310_out.py new file mode 100755 index 0000000..81b471c --- /dev/null +++ b/scripts/portal/240093310_out.py @@ -0,0 +1,2 @@ +if sm.checkParty(): + sm.warpInstanceOut(240093200) \ No newline at end of file diff --git a/scripts/portal/260010601_out00.py b/scripts/portal/260010601_out00.py new file mode 100755 index 0000000..f1f8801 --- /dev/null +++ b/scripts/portal/260010601_out00.py @@ -0,0 +1,3 @@ +# 260010601 +sm.warp(260010600, 0) +sm.dispose() diff --git a/scripts/portal/301070010_out.py b/scripts/portal/301070010_out.py new file mode 100755 index 0000000..947b41b --- /dev/null +++ b/scripts/portal/301070010_out.py @@ -0,0 +1,5 @@ +# id 4 (out00), field 301070010 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(2134012) # Ridley +res = sm.sendAskYesNo("You defeated Master Red Nirg. If you leave right now, you will need to defeat Master Red Nirg again to check the barrier. Are you going to leave?") diff --git a/scripts/portal/310_stop01.py b/scripts/portal/310_stop01.py new file mode 100755 index 0000000..4e92143 --- /dev/null +++ b/scripts/portal/310_stop01.py @@ -0,0 +1,2 @@ +# id 1 (stop01), field 867200310 +sm.createQuestWithQRValue(64015, "chk1=1;chk2=1;slaDir=0;chk3=1;chk4=0;chk5=0;chk6=0;chk7=0") diff --git a/scripts/portal/330_popup05.py b/scripts/portal/330_popup05.py new file mode 100755 index 0000000..7492b69 --- /dev/null +++ b/scripts/portal/330_popup05.py @@ -0,0 +1,2 @@ +# id 6 (popup05), field 867200330 +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/burning2", 128) diff --git a/scripts/portal/330_popup06.py b/scripts/portal/330_popup06.py new file mode 100755 index 0000000..d983051 --- /dev/null +++ b/scripts/portal/330_popup06.py @@ -0,0 +1,37 @@ +# id 7 (popup06), field 867200330 +sm.lockInGameUI(True, False) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/burning3", 128) +sm.sendDelay(1000) +sm.speechBalloon(False, 0, 0, "#fs12##bI'll be there soon!", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.forcedInput(3) +sm.sendDelay(300) +sm.sendDelay(500) +sm.forcedInput(0) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.speechBalloon(False, 0, 0, "#fs12##bWhat?!", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.sendDelay(1000) +sm.forcedInput(3) +sm.sendDelay(1500) +sm.sendDelay(100) +sm.forcedInput(6) +sm.sendDelay(100) +sm.forcedMove(False, 250) +sm.sendDelay(1650) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/destroytower", 128) +sm.setMapTaggedObjectVisible("hideRope01", False, 0, 0) +sm.forcedInput(6) +sm.sendDelay(150) +sm.forcedMove(False, 150) +sm.sendDelay(900) +sm.forcedInput(6) +sm.sendDelay(150) +sm.forcedMove(False, 200) +sm.sendDelay(1500) +sm.sendDelay(300) +sm.forcedInput(0) +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "#fs12##bNo, there's no time. We have to get down fast!", 2000, 1, 0, 0, 0, 4, 0, 4878499) +sm.lockInGameUI(False, True) diff --git a/scripts/portal/330_popup07.py b/scripts/portal/330_popup07.py new file mode 100755 index 0000000..63dd218 --- /dev/null +++ b/scripts/portal/330_popup07.py @@ -0,0 +1,19 @@ +# id 8 (popup07), field 867200330 +sm.lockInGameUI(True, False) +sm.moveNpcByTemplateId(9400580, False, 150, 100) +sm.moveNpcByTemplateId(9400593, False, 150, 100) +sm.createQuestWithQRValue(64015, "chk1=1;chk2=1;slaDir=1;chk3=1;chk4=1;chk5=1;chk6=1;chk7=1;chk8=1") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#You made it! My hero! Let's get back down so I can thank you properly.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.sendNext("#face5#Thank you. If it weren't for you, we would've... well, I'd really rather not think about that! ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face0#I definitely owe you for your courage.") +sm.completeQuestNoCheck(64015) +sm.createQuestWithQRValue(64009, "money=0") +sm.warp(867200401) diff --git a/scripts/portal/3th_jobQuestMap.py b/scripts/portal/3th_jobQuestMap.py new file mode 100755 index 0000000..22c24da --- /dev/null +++ b/scripts/portal/3th_jobQuestMap.py @@ -0,0 +1,18 @@ +# 3rd job advancement portal for explorers +from net.swordie.ms.constants import JobConstants + +mapID = 0 +job = chr.getJob() +if JobConstants.isAdventurerWarrior(job): + mapID = 910540100 +elif JobConstants.isAdventurerMage(job): + mapID = 910540200 +elif JobConstants.isAdventurerArcher(job): + mapID = 910540300 +elif JobConstants.isAdventurerThief(job): + mapID = 910540400 +elif JobConstants.isAdventurerPirate(job): + mapID = 910540500 +if mapID != 0: + sm.warp(mapID, 0) +sm.dispose() diff --git a/scripts/portal/410000001_out00.py b/scripts/portal/410000001_out00.py new file mode 100755 index 0000000..32b60a5 --- /dev/null +++ b/scripts/portal/410000001_out00.py @@ -0,0 +1,2 @@ +# 410000001 +sm.warp(410000000, 5) diff --git a/scripts/portal/450001005_PS00.py b/scripts/portal/450001005_PS00.py new file mode 100755 index 0000000..acc836d --- /dev/null +++ b/scripts/portal/450001005_PS00.py @@ -0,0 +1,20 @@ +KIMA = 3003110 + +sm.setSpeakerID(KIMA) +if sm.hasQuestCompleted(34107) and (sm.hasQuestCompleted(34108) or sm.hasQuest(34108)): + sm.warp(450001105) + sm.dispose() +elif sm.hasQuestCompleted(34107): + sm.sendAskYesNo("...Steering this boat is one of the few things that I enjoy doing...") +elif sm.hasQuestCompleted(34106) and not sm.hasQuestCompleted(34107): + sm.sendSayOkay("Don't just enter my boat! Talk to me first...") + sm.dispose() +else: + sm.sendSayOkay("Sorry I don't remember how to row this boat. If only the #bTree of Memories#k was back to it's original state...") + sm.dispose() + +if sm.sendNext("...Alright, here we go..."): + sm.warpInstanceIn(450001310, 0) # left side of the map + sm.rideVehicle(1932393) + sm.progressMessageFont(3, 20, 20, 0, "Use the direction keys to steer the boat.") + sm.addPopUpSay(KIMA, 6000, "Cross this lake, and you'll arrive at a massive cliff. I don't know what's behind it.", "") \ No newline at end of file diff --git a/scripts/portal/450001007_PCS01.py b/scripts/portal/450001007_PCS01.py new file mode 100755 index 0000000..3019c14 --- /dev/null +++ b/scripts/portal/450001007_PCS01.py @@ -0,0 +1,6 @@ +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +sm.warpInstanceOut(450001105, 0) +# Ride Vehicle Check +if sm.getnOptionByCTS(CharacterTemporaryStat.RideVehicle) == 1932393: # Paper Boat + sm.removeCTS(CharacterTemporaryStat.RideVehicle) \ No newline at end of file diff --git a/scripts/portal/450001100_PS00.py b/scripts/portal/450001100_PS00.py new file mode 100755 index 0000000..565e71c --- /dev/null +++ b/scripts/portal/450001100_PS00.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(34114): + sm.warp(450001200, 2) +else: + sm.chat("This path is blocked") \ No newline at end of file diff --git a/scripts/portal/450001105_PS00.py b/scripts/portal/450001105_PS00.py new file mode 100755 index 0000000..9f4d918 --- /dev/null +++ b/scripts/portal/450001105_PS00.py @@ -0,0 +1 @@ +sm.warp(450001005, 2) \ No newline at end of file diff --git a/scripts/portal/450001105_PS01.py b/scripts/portal/450001105_PS01.py new file mode 100755 index 0000000..ace276d --- /dev/null +++ b/scripts/portal/450001105_PS01.py @@ -0,0 +1 @@ +sm.warp(450001107, 1) \ No newline at end of file diff --git a/scripts/portal/450001107_PCS03.py b/scripts/portal/450001107_PCS03.py new file mode 100755 index 0000000..b748002 --- /dev/null +++ b/scripts/portal/450001107_PCS03.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(34108) and not sm.hasQuestCompleted(34109): + sm.warpInstanceIn(450001370, 0) +else: + sm.warp(450001100, 1) \ No newline at end of file diff --git a/scripts/portal/450001210_PS00.py b/scripts/portal/450001210_PS00.py new file mode 100755 index 0000000..55c249d --- /dev/null +++ b/scripts/portal/450001210_PS00.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(34116): + sm.warp(450001215, 1) +else: + sm.chat("I should probably ask Rino what to do.") \ No newline at end of file diff --git a/scripts/portal/450001215_PS00.py b/scripts/portal/450001215_PS00.py new file mode 100755 index 0000000..60dd487 --- /dev/null +++ b/scripts/portal/450001215_PS00.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(34117): + sm.warp(450001218, 1) +else: + sm.chat("I should probably ask Rino what to do.") \ No newline at end of file diff --git a/scripts/portal/450001218_PS00.py b/scripts/portal/450001218_PS00.py new file mode 100755 index 0000000..d7317b3 --- /dev/null +++ b/scripts/portal/450001218_PS00.py @@ -0,0 +1,6 @@ +if sm.hasQuestCompleted(34119): + sm.warp(450001219, 1) +elif sm.hasQuestCompleted(34118): + sm.warpInstanceIn(450001380, 0) +else: + sm.chat("I should probably ask Rino what to do.") \ No newline at end of file diff --git a/scripts/portal/450001219_PS00.py b/scripts/portal/450001219_PS00.py new file mode 100755 index 0000000..1ef20ae --- /dev/null +++ b/scripts/portal/450001219_PS00.py @@ -0,0 +1,2 @@ +if sm.hasQuestCompleted(34119): + sm.warp(450001230, 1) \ No newline at end of file diff --git a/scripts/portal/450001219_PS01.py b/scripts/portal/450001219_PS01.py new file mode 100755 index 0000000..86b2d98 --- /dev/null +++ b/scripts/portal/450001219_PS01.py @@ -0,0 +1,2 @@ +if sm.hasQuestCompleted(34119): + sm.warp(450001240, 1) \ No newline at end of file diff --git a/scripts/portal/450001240_PS00.py b/scripts/portal/450001240_PS00.py new file mode 100755 index 0000000..cf4092d --- /dev/null +++ b/scripts/portal/450001240_PS00.py @@ -0,0 +1 @@ +sm.warp(450001250, 1) \ No newline at end of file diff --git a/scripts/portal/450001250_PCS00.py b/scripts/portal/450001250_PCS00.py new file mode 100755 index 0000000..fb8b016 --- /dev/null +++ b/scripts/portal/450001250_PCS00.py @@ -0,0 +1,6 @@ +# id 2 (PCS00), field 450001250 +if sm.hasQuestCompleted(34120): + sm.warp(450002021, 1) +else: + sm.progressMessageFont(3, 20, 20, 0, "You must be Lv. 210 or higher to enter this area.") + sm.warp(450001250) diff --git a/scripts/portal/450001320_PCS00.py b/scripts/portal/450001320_PCS00.py new file mode 100755 index 0000000..311bdf6 --- /dev/null +++ b/scripts/portal/450001320_PCS00.py @@ -0,0 +1,3 @@ +# id 1 (PCS00), field 450001320 +sm.createQuestWithQRValue(34125, "310=2;320=2") +sm.warp(450001390) diff --git a/scripts/portal/450001350_PCS00.py b/scripts/portal/450001350_PCS00.py new file mode 100755 index 0000000..8457c82 --- /dev/null +++ b/scripts/portal/450001350_PCS00.py @@ -0,0 +1 @@ +sm.warpInstanceIn(450001360) \ No newline at end of file diff --git a/scripts/portal/807000000_honogi.py b/scripts/portal/807000000_honogi.py new file mode 100755 index 0000000..99ae949 --- /dev/null +++ b/scripts/portal/807000000_honogi.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Map ID :: 807000000 +# Momijigaoka : Momijigaoka + +sm.systemMessage("You cannot move right now.") \ No newline at end of file diff --git a/scripts/portal/865010200_pc00.py b/scripts/portal/865010200_pc00.py new file mode 100755 index 0000000..036e30e --- /dev/null +++ b/scripts/portal/865010200_pc00.py @@ -0,0 +1,4 @@ +# 865010200 +if sm.hasQuestCompleted(17612) and not sm.hasQuestCompleted(17613): + sm.startQuest(17613) # [Commerci Republic] The Minister's Son + sm.warpInstanceIn(865090001, 1) \ No newline at end of file diff --git a/scripts/portal/865020001_pc00.py b/scripts/portal/865020001_pc00.py new file mode 100755 index 0000000..d565300 --- /dev/null +++ b/scripts/portal/865020001_pc00.py @@ -0,0 +1,4 @@ +from net.swordie.ms.scripts import ScriptType + +sm.openNpc(9390223) # Crew Impostor +sm.dispose(ScriptType.Portal) diff --git a/scripts/portal/865020051_out00.py b/scripts/portal/865020051_out00.py new file mode 100755 index 0000000..66bf7e3 --- /dev/null +++ b/scripts/portal/865020051_out00.py @@ -0,0 +1,2 @@ +# 865020051 +sm.warpInstanceOut(865020300) # Canal 4 diff --git a/scripts/portal/910090305_out00.py b/scripts/portal/910090305_out00.py new file mode 100755 index 0000000..79a0fc8 --- /dev/null +++ b/scripts/portal/910090305_out00.py @@ -0,0 +1,2 @@ +# id 1 (out00), field 910090305 +sm.warp(100051010) diff --git a/scripts/portal/910090350_pcs00.py b/scripts/portal/910090350_pcs00.py new file mode 100755 index 0000000..10d2da3 --- /dev/null +++ b/scripts/portal/910090350_pcs00.py @@ -0,0 +1,3 @@ +# id 1 (pcs00), field 910090350 +sm.sm.getOffFieldEffectFromWz("hillah/fail") +sm.warp(100051043) diff --git a/scripts/portal/910090350_talk1.py b/scripts/portal/910090350_talk1.py new file mode 100755 index 0000000..1163db5 --- /dev/null +++ b/scripts/portal/910090350_talk1.py @@ -0,0 +1,2 @@ +# id 2 (910090350_talk1), field 910090350 +sm.createQuestWithQRValue(35927, "count=0;talk1=1;talk2=0") diff --git a/scripts/portal/910090350_talk2.py b/scripts/portal/910090350_talk2.py new file mode 100755 index 0000000..39028f0 --- /dev/null +++ b/scripts/portal/910090350_talk2.py @@ -0,0 +1,2 @@ +# id 3 (910090350_talk2), field 910090350 +sm.createQuestWithQRValue(35927, "count=0;talk1=1;talk2=1") diff --git a/scripts/portal/924000200_out00.py b/scripts/portal/924000200_out00.py new file mode 100755 index 0000000..dd71114 --- /dev/null +++ b/scripts/portal/924000200_out00.py @@ -0,0 +1,4 @@ +if sm.hasQuest(1451) or sm.hasQuest(1453) or sm.hasQuest(1455) or sm.hasQuest(1457) or sm.hasQuest(1459): + sm.warp(240010501) +else: + sm.warp(240020400) diff --git a/scripts/portal/924000201_out00.py b/scripts/portal/924000201_out00.py new file mode 100755 index 0000000..9de47d3 --- /dev/null +++ b/scripts/portal/924000201_out00.py @@ -0,0 +1,4 @@ +if sm.hasQuest(1451) or sm.hasQuest(1453) or sm.hasQuest(1455) or sm.hasQuest(1457) or sm.hasQuest(1459): + sm.warp(240010501) +else: + sm.warp(240010100) diff --git a/scripts/portal/940200040_east00.py b/scripts/portal/940200040_east00.py new file mode 100755 index 0000000..e0204d0 --- /dev/null +++ b/scripts/portal/940200040_east00.py @@ -0,0 +1,9 @@ +# Bad Signs is supposed to be completed on a thought bubble pop up after killing all the tigers but it isn't +if sm.hasMobsInField(): + sm.chatScript("You need to complete the quest first.") +else: + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("It's my fault. I should've kept a closer eye on you... Please be safe. I'm coming to save you!") + sm.giveExp(5000) + sm.completeQuest(38021) + sm.warp(940200050, 0) diff --git a/scripts/portal/940200500_west00.py b/scripts/portal/940200500_west00.py new file mode 100755 index 0000000..dcb0376 --- /dev/null +++ b/scripts/portal/940200500_west00.py @@ -0,0 +1,5 @@ +# 940200500_west00 +if sm.hasQuest(34600) or sm.hasQuestCompleted(34600): + sm.warp(940200501) +else: + sm.chat("Click the lightbulb above your head to start a quest.") \ No newline at end of file diff --git a/scripts/portal/970072200_west.py b/scripts/portal/970072200_west.py new file mode 100755 index 0000000..6f80850 --- /dev/null +++ b/scripts/portal/970072200_west.py @@ -0,0 +1 @@ +sm.warp(100000000) \ No newline at end of file diff --git a/scripts/portal/BPReturn_Akayrum.py b/scripts/portal/BPReturn_Akayrum.py new file mode 100755 index 0000000..1466a56 --- /dev/null +++ b/scripts/portal/BPReturn_Akayrum.py @@ -0,0 +1,3 @@ +# 272000000 +sm.warp(270000000, 6) +sm.dispose() diff --git a/scripts/portal/BPReturn_Hillah.py b/scripts/portal/BPReturn_Hillah.py new file mode 100755 index 0000000..395df03 --- /dev/null +++ b/scripts/portal/BPReturn_Hillah.py @@ -0,0 +1 @@ +sm.warp(262010000, 0) diff --git a/scripts/portal/BPReturn_Hon1.py b/scripts/portal/BPReturn_Hon1.py new file mode 100755 index 0000000..537143c --- /dev/null +++ b/scripts/portal/BPReturn_Hon1.py @@ -0,0 +1 @@ +sm.warp(240040700, 2) diff --git a/scripts/portal/BPReturn_Hontale.py b/scripts/portal/BPReturn_Hontale.py new file mode 100755 index 0000000..1512c82 --- /dev/null +++ b/scripts/portal/BPReturn_Hontale.py @@ -0,0 +1 @@ +sm.warp(240040600, 5) diff --git a/scripts/portal/BPReturn_Magnus.py b/scripts/portal/BPReturn_Magnus.py new file mode 100755 index 0000000..0e6e815 --- /dev/null +++ b/scripts/portal/BPReturn_Magnus.py @@ -0,0 +1,5 @@ +# 101020400 + +def init(): + sm.warp(401000000, 1) + sm.dispose() \ No newline at end of file diff --git a/scripts/portal/BPReturn_Magnus2.py b/scripts/portal/BPReturn_Magnus2.py new file mode 100755 index 0000000..5d99fb9 --- /dev/null +++ b/scripts/portal/BPReturn_Magnus2.py @@ -0,0 +1,3 @@ +# 401060000 +sm.warp(401053002, 2) +sm.dispose() diff --git a/scripts/portal/BPReturn_Vanleon.py b/scripts/portal/BPReturn_Vanleon.py new file mode 100755 index 0000000..72c33f7 --- /dev/null +++ b/scripts/portal/BPReturn_Vanleon.py @@ -0,0 +1,5 @@ +# Lion King's Castle +# Roof of the Fourth Tower +# Warps to fourth tower + +sm.warp(211060800, 8) \ No newline at end of file diff --git a/scripts/portal/BPReturn_Will.py b/scripts/portal/BPReturn_Will.py new file mode 100755 index 0000000..d37110e --- /dev/null +++ b/scripts/portal/BPReturn_Will.py @@ -0,0 +1,2 @@ +# pt01 in field 450007240 (Esfera : Radiant Throne) +sm.warp(450007230, 2) \ No newline at end of file diff --git a/scripts/portal/BPReturn_Zakum.py b/scripts/portal/BPReturn_Zakum.py new file mode 100755 index 0000000..a59577d --- /dev/null +++ b/scripts/portal/BPReturn_Zakum.py @@ -0,0 +1,11 @@ + +oldFieldID = sm.getReturnField() +if oldFieldID == 0 or oldFieldID == 211042300: + sm.chat("(Portal) Cannot find your previous map ID, warping to Henesys.") + map = 100000000 + portal = 0 +else: + map = oldFieldID + portal = 0 +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/CWPQ_Portal4.py b/scripts/portal/CWPQ_Portal4.py new file mode 100755 index 0000000..94ed7be --- /dev/null +++ b/scripts/portal/CWPQ_Portal4.py @@ -0,0 +1,3 @@ +# 930100400 +sm.warp(930100500, 0) +sm.dispose() diff --git a/scripts/portal/CWPQ_bonus_out.py b/scripts/portal/CWPQ_bonus_out.py new file mode 100755 index 0000000..61fb36e --- /dev/null +++ b/scripts/portal/CWPQ_bonus_out.py @@ -0,0 +1,3 @@ +# 930100500 +sm.warp(930100000, 0) +sm.dispose() diff --git a/scripts/portal/CWminiGame_enter.py b/scripts/portal/CWminiGame_enter.py new file mode 100755 index 0000000..6d5981b --- /dev/null +++ b/scripts/portal/CWminiGame_enter.py @@ -0,0 +1,4 @@ +# id 10 (miniGame), field 301000000 +sm.setSpeakerType(8) +sm.setParam(16) +sm.sendSayOkay("I don't have any reason to be here right now.") diff --git a/scripts/portal/CaravanP1_Goal.py b/scripts/portal/CaravanP1_Goal.py new file mode 100755 index 0000000..68ca1ea --- /dev/null +++ b/scripts/portal/CaravanP1_Goal.py @@ -0,0 +1,10 @@ +# id 17 (CaravanP1_Goal), field 867200500 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face2#Did you hear? We're almost to town! I'm so relieved... and I know I'm not the only one! ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face1#I know this must have been hard for you, but you did great. Thanks for everything, #h0#.") +sm.completeQuestNoCheck(64033) +sm.warp(867200502) diff --git a/scripts/portal/CaravanP1_chk0.py b/scripts/portal/CaravanP1_chk0.py new file mode 100755 index 0000000..2c084bb --- /dev/null +++ b/scripts/portal/CaravanP1_chk0.py @@ -0,0 +1,4 @@ +# id 16 (CaravanP1_chk0), field 867200500 +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Pt=Caravan_chk0;Ec=0;weather=0;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk0;Ec=0;weather=0;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk0;Ec=1;weather=0;max=16;food=450") diff --git a/scripts/portal/CaravanP1_chk1.py b/scripts/portal/CaravanP1_chk1.py new file mode 100755 index 0000000..04d3cff --- /dev/null +++ b/scripts/portal/CaravanP1_chk1.py @@ -0,0 +1,37 @@ +# id 1 (CaravanP1_chk1), field 867200500 +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Pt=Caravan_chk1;Ec=1;weather=0;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk1;Ec=1;weather=0;max=16;food=450") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Chief. Since our knights are protecting the caravan, I will assume command here. ") +sm.sendSay("#face0#I will need you to provide directions to our destination, of course. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#No. My villagers form the majority of this group, so I will remain in charge. ") +sm.sendSay("#face0#Since you are unfamiliar with the land and the weather, Captain, it would be better if you focused on matters of defense. ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Chief, have you ever led this many people? ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Captain, have you ever lead your dispatch through a snowstorm like this?") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#The snowstorm is closing in. We have no time to waste.") +sm.sendSay("#face0#We should increase our pace, and leave the food to delay the monsters.") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Are you mad? You want to throw away the food we worked so hard to gather?!") +sm.sendSay("#face0#We'll continue as we have, and send the knights and hunters to protect the caravan.") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Weren't you just talking about how dangerous the snowstorm is?") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Kan... Vice Captain Butler... Please compose yourselves. If we're to survive this journey, we must work together without so much infighting.") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#If we give up our food, it will slow our people as hunger sets in.") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#Giving up the food will delay the monsters and give us more room to maneuver.") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0##h0#, it might be better not to take a side in this situation. ") +sm.sendSay("#face0#I hate to put this on you, but can you help us out? ") +sm.sendSay("#face0#I will leave our fate in your capable hands.") +sm.setParam(35) +sm.sendSay("Go to #m867200600#.") +sm.warp(867200600) diff --git a/scripts/portal/CaravanP1_chk10.py b/scripts/portal/CaravanP1_chk10.py new file mode 100755 index 0000000..5f8fea8 --- /dev/null +++ b/scripts/portal/CaravanP1_chk10.py @@ -0,0 +1,7 @@ +# id 10 (CaravanP1_chk10), field 867200500 +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk9;Ec=10;weather=1;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk9;Ec=10;weather=1;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=Caravan_chk10;Ec=10;weather=1;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk10;Ec=10;weather=1;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk10;Ec=11;weather=1;max=16;food=240") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=75;happy2=100;happy3=98;man0=56;man1=33;man2=38;man3=73") diff --git a/scripts/portal/CaravanP1_chk11.py b/scripts/portal/CaravanP1_chk11.py new file mode 100755 index 0000000..f7e2439 --- /dev/null +++ b/scripts/portal/CaravanP1_chk11.py @@ -0,0 +1,12 @@ +# id 11 (CaravanP1_chk11), field 867200500 +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=Caravan_chk11;Ec=11;weather=1;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk11;Ec=11;weather=1;max=16;food=240") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#I'll give you a tip I've never given anyone else. If you encounter a yeti, always fight it up close. ") +sm.sendSay("#face0#Because of their thick fur and hide, ranged attacks won't do much good. It's a natural defense against archers like myself. ") +sm.sendSay("#face0#Remember that! ") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk11;Ec=12;weather=1;max=16;food=240") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=90;happy2=100;happy3=98;man0=56;man1=33;man2=38;man3=73") diff --git a/scripts/portal/CaravanP1_chk12.py b/scripts/portal/CaravanP1_chk12.py new file mode 100755 index 0000000..08abf0a --- /dev/null +++ b/scripts/portal/CaravanP1_chk12.py @@ -0,0 +1,7 @@ +# id 12 (CaravanP1_chk12), field 867200500 +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk11;Ec=12;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk11;Ec=12;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;speed=20;man=200;prog=0;Pt=Caravan_chk12;Ec=12;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk12;Ec=12;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk12;Ec=13;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=90;happy2=100;happy3=100;man0=56;man1=33;man2=38;man3=73") diff --git a/scripts/portal/CaravanP1_chk13.py b/scripts/portal/CaravanP1_chk13.py new file mode 100755 index 0000000..40fbb13 --- /dev/null +++ b/scripts/portal/CaravanP1_chk13.py @@ -0,0 +1,16 @@ +# id 13 (CaravanP1_chk13), field 867200500 +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;speed=20;man=200;prog=0;Pt=Caravan_chk13;Ec=13;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk13;Ec=13;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk13;Ec=13;weather=2;max=16;food=240") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face1#You're going hunting again? Splendid, I'll join you! My noble soul aches for the thrill of combat! ") +sm.sendSay("#face0#Gillie, I leave Alika in your capable hands. Protect her with your life! ") +sm.sendSay("#face0#I can't be away from Alika for too long, #h0#, so let's make quick work of these brutes! ") +sm.setParam(35) +sm.sendSay("Go to #m867200650#.") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk13;Ec=13;weather=2;max=16;food=240") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=100;happy3=100;man0=56;man1=33;man2=38;man3=73") +sm.warp(867200650) diff --git a/scripts/portal/CaravanP1_chk14.py b/scripts/portal/CaravanP1_chk14.py new file mode 100755 index 0000000..fd17aa0 --- /dev/null +++ b/scripts/portal/CaravanP1_chk14.py @@ -0,0 +1,11 @@ +# id 14 (CaravanP1_chk14), field 867200500 +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk13;Ec=14;weather=3;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk13;Ec=14;weather=3;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=Caravan_chk14;Ec=14;weather=3;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk14;Ec=14;weather=3;max=16;food=240") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#So... that's how you think of me. I will remember this! ") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk14;Ec=15;weather=3;max=16;food=240") diff --git a/scripts/portal/CaravanP1_chk15.py b/scripts/portal/CaravanP1_chk15.py new file mode 100755 index 0000000..0ac112e --- /dev/null +++ b/scripts/portal/CaravanP1_chk15.py @@ -0,0 +1,10 @@ +# id 15 (CaravanP1_chk15), field 867200500 +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=Caravan_chk15;Ec=15;weather=3;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk15;Ec=15;weather=3;max=16;food=240") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Don't be ridiculous, #h0#. Every one of us owes you a debt we can never repay. ") +sm.sendSay("#face0#Everyone trusts you now. It... hurts me a little, I admit. They've put their faith in you, a newcomer, over me, their chief for years and years. But it's because you've proven yourself, and even I can agree with that. ") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk15;Ec=16;weather=3;max=16;food=240") diff --git a/scripts/portal/CaravanP1_chk2.py b/scripts/portal/CaravanP1_chk2.py new file mode 100755 index 0000000..babbe2e --- /dev/null +++ b/scripts/portal/CaravanP1_chk2.py @@ -0,0 +1,26 @@ +# id 2 (CaravanP1_chk2), field 867200500 +sm.createQuestWithQRValue(64006, "WC=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk1;Ec=2;weather=1;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk1;Ec=2;weather=1;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=Caravan_chk2;Ec=2;weather=1;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk2;Ec=2;weather=1;max=16;food=450") +sm.createQuestWithQRValue(49000, "count=0;Quest=0;day=152843;QET=20190622191818;state=2") +sm.createQuestWithQRValue(49000, "count=0;Quest=0;day=152843;QET=20190622191818;state=1") +sm.createQuestWithQRValue(49000, "count=0;Quest=0;day=152843;QET=20190622201819;state=1") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Asking for help is an important way to deal with a situation if you're not fully informed. ") +sm.sendSay("#face0#Janyt is an Afinas Devata with healing abilities. Call her for help. ") +sm.setInnerOverrideSpeakerTemplateID(9400584) # Janyt +sm.sendSay("#face0#Have no fear. The protection of Afinas is upon you. ") +sm.setParam(57) +sm.sendSay("#bThank you, Janyt. ") +sm.setParam(37) +sm.sendSay("#face0#I am but a humble servant who shares the the blessings I've received from Afinas. ") +sm.setParam(57) +sm.sendSay("#bBut to have such powers at such a young age. It's impressive. ") +sm.setParam(37) +sm.sendSay("#face0#All thanks to Afinas. ") +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk2;Ec=3;weather=1;max=16;food=450") +sm.createQuestWithQRValue(64007, "happy0=65;happy1=50;happy2=60;happy3=55;man0=56;man1=33;man2=38;man3=73") diff --git a/scripts/portal/CaravanP1_chk3.py b/scripts/portal/CaravanP1_chk3.py new file mode 100755 index 0000000..ef2f5c4 --- /dev/null +++ b/scripts/portal/CaravanP1_chk3.py @@ -0,0 +1,12 @@ +# id 3 (CaravanP1_chk3), field 867200500 +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=Caravan_chk3;Ec=3;weather=1;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk3;Ec=3;weather=1;max=16;food=450") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Indeed! Think about it... His mission was on the verge of failure, and his dispatch was left in shambles. Butler can hardly report back like this, right? ") +sm.sendSay("#face0#He probably feels like Abrup is a massive trap, with no way out. ") +sm.sendSay("#face0#And then all of a sudden, you show up. With how capable you've proved to be, he's got to be thinking about how to use you. ") +sm.sendSay("#face1#I'm not saying you should never trust him, of course. But you need to consider his motivations when making your decisions.") +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk3;Ec=4;weather=1;max=16;food=450") diff --git a/scripts/portal/CaravanP1_chk4.py b/scripts/portal/CaravanP1_chk4.py new file mode 100755 index 0000000..e7133c1 --- /dev/null +++ b/scripts/portal/CaravanP1_chk4.py @@ -0,0 +1,13 @@ +# id 4 (CaravanP1_chk4), field 867200500 +sm.createQuestWithQRValue(64006, "WC=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk3;Ec=4;weather=2;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=2;speed=20;man=200;prog=0;Pt=CaravanP1_chk3;Ec=4;weather=2;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=2;speed=20;man=200;prog=0;Pt=Caravan_chk4;Ec=4;weather=2;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=2;speed=20;man=200;prog=0;Pt=CaravanP1_chk4;Ec=4;weather=2;max=16;food=450") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#You make a pretty good leader, y'know? Better than Chief Kan or that arrogant Butler, anyway. ") +sm.sendSay("#face0#Yeah, you might just have what it takes. Just nosy enough...") +sm.createQuestWithQRValue(64006, "WC=2;speed=20;man=200;prog=0;Pt=CaravanP1_chk4;Ec=5;weather=2;max=16;food=450") +sm.createQuestWithQRValue(64007, "happy0=65;happy1=60;happy2=60;happy3=55;man0=56;man1=33;man2=38;man3=73") diff --git a/scripts/portal/CaravanP1_chk5.py b/scripts/portal/CaravanP1_chk5.py new file mode 100755 index 0000000..badcbb6 --- /dev/null +++ b/scripts/portal/CaravanP1_chk5.py @@ -0,0 +1,35 @@ +# id 5 (CaravanP1_chk5), field 867200500 +sm.createQuestWithQRValue(64006, "WC=2;speed=20;man=200;prog=0;Pt=Caravan_chk5;Ec=5;weather=2;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=2;speed=20;man=200;prog=0;Pt=CaravanP1_chk5;Ec=5;weather=2;max=16;food=450") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk5;Ec=5;weather=2;max=16;food=450") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Good decision. ") +sm.sendSay("#face0#But remember that our food is limited, so not everyone can have his or her fill. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0##h0#, are you distributing food? ") +sm.sendSay("#face0#If you would, please make sure the children and wounded get their portions first. They need all the help they can get. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#If you let your emotions decide for you, you may end up losing everyone's trust. ") +sm.sendSay("#face0#It is tradition in Kaptafel to allow our hunters to eat first, guaranteeing their strength to continue hunting. It's a tradition that has kept us alive through many harsh winters. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Then, at least let the children eat first. They do not understand such things, and hunger hits them the hardest. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#...#h0#, the decision is yours. ") +sm.createQuestWithQRValue(64005, "FoodL=3") +sm.createQuestWithQRValue(64005, "FoodL=3;FoodM=2") +sm.createQuestWithQRValue(64005, "FoodL=3;FoodM=2;FoodS=0") +sm.createQuestWithQRValue(64005, "FoodL=3;FoodM=2;FoodS=0;FoodNone=1") +sm.createQuestWithQRValue(64007, "happy0=75;happy1=60;happy2=60;happy3=55;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=75;happy1=70;happy2=60;happy3=55;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=75;happy1=70;happy2=70;happy3=55;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=75;happy1=70;happy2=70;happy3=65;man0=56;man1=33;man2=38;man3=73") +sm.sendNext("#face0#Good. We shall distribute the remaining food. ") +sm.sendSay("#face0#It seems that everyone is satisfied.") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk5;Ec=5;weather=2;max=16;food=250") +sm.createQuestWithQRValue(64007, "happy0=85;happy1=70;happy2=70;happy3=65;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=85;happy1=70;happy2=90;happy3=65;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=85;happy1=70;happy2=90;happy3=95;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk5;Ec=6;weather=2;max=16;food=250") diff --git a/scripts/portal/CaravanP1_chk6.py b/scripts/portal/CaravanP1_chk6.py new file mode 100755 index 0000000..2102e3a --- /dev/null +++ b/scripts/portal/CaravanP1_chk6.py @@ -0,0 +1,10 @@ +# id 6 (CaravanP1_chk6), field 867200500 +sm.createQuestWithQRValue(64006, "WC=2;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk5;Ec=6;weather=3;max=16;food=250") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk5;Ec=6;weather=3;max=16;food=250") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=Caravan_chk6;Ec=6;weather=3;max=16;food=250") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk6;Ec=6;weather=3;max=16;food=250") +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200621#.") +sm.warp(867200621) diff --git a/scripts/portal/CaravanP1_chk7.py b/scripts/portal/CaravanP1_chk7.py new file mode 100755 index 0000000..79d2fe8 --- /dev/null +++ b/scripts/portal/CaravanP1_chk7.py @@ -0,0 +1,11 @@ +# id 7 (CaravanP1_chk7), field 867200500 +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=Caravan_chk7;Ec=7;weather=3;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk7;Ec=7;weather=3;max=16;food=240") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#So, you understand my concerns? Hahh... ") +sm.sendSay("#face0#Thank you. Everyone thinks I always side with Kan. Really, I just want to mediate between them and him. Though sometimes I wonder... should I be on his side? It's complicated. ") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk7;Ec=8;weather=3;max=16;food=240") +sm.createQuestWithQRValue(64007, "happy0=85;happy1=70;happy2=100;happy3=95;man0=56;man1=33;man2=38;man3=73") diff --git a/scripts/portal/CaravanP1_chk8.py b/scripts/portal/CaravanP1_chk8.py new file mode 100755 index 0000000..9b8f207 --- /dev/null +++ b/scripts/portal/CaravanP1_chk8.py @@ -0,0 +1,10 @@ +# id 8 (CaravanP1_chk8), field 867200500 +sm.createQuestWithQRValue(64006, "WC=3;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk7;Ec=8;weather=0;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk7;Ec=8;weather=0;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;speed=20;man=200;prog=0;Pt=Caravan_chk8;Ec=8;weather=0;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk8;Ec=8;weather=0;max=16;food=240") +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200622#.") +sm.warp(867200622) diff --git a/scripts/portal/CaravanP1_chk9.py b/scripts/portal/CaravanP1_chk9.py new file mode 100755 index 0000000..a7b2195 --- /dev/null +++ b/scripts/portal/CaravanP1_chk9.py @@ -0,0 +1,16 @@ +# id 9 (CaravanP1_chk9), field 867200500 +sm.createQuestWithQRValue(64006, "WC=4;k1=0;speed=20;man=200;prog=0;Pt=Caravan_chk9;Ec=9;weather=0;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk9;Ec=9;weather=0;max=16;food=240") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=1;speed=20;man=200;prog=0;Pt=CaravanP1_chk9;Ec=9;weather=0;max=16;food=240") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400585) # Afinas Soldier +sm.sendNext("Oh, what a relief! I'm so glad you're with us. Let me just report to Vice Captain Butler first... ") +sm.setParam(35) +sm.sendSay("Go to #m867200630#.") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;speed=20;man=200;prog=0;Pt=CaravanP1_chk9;Ec=9;weather=0;max=16;food=240") +sm.createQuestWithQRValue(64007, "happy0=95;happy1=70;happy2=100;happy3=95;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=95;happy1=75;happy2=100;happy3=95;man0=56;man1=33;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=95;happy1=75;happy2=100;happy3=98;man0=56;man1=33;man2=38;man3=73") +sm.warp(867200630) diff --git a/scripts/portal/CaravanP2_Goal.py b/scripts/portal/CaravanP2_Goal.py new file mode 100755 index 0000000..ea6e858 --- /dev/null +++ b/scripts/portal/CaravanP2_Goal.py @@ -0,0 +1,10 @@ +# id 20 (CaravanP2_Goal), field 867200550 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400583) # Gillie +sm.sendNext("#face0#We've been through a lot, but we finally made it. ") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendSay("#face0#It's all thanks to Cayne! And #h0#, of course! ") +sm.completeQuestNoCheck(64041) +sm.warp(867200552) diff --git a/scripts/portal/CaravanP2_chk0.py b/scripts/portal/CaravanP2_chk0.py new file mode 100755 index 0000000..93a30b6 --- /dev/null +++ b/scripts/portal/CaravanP2_chk0.py @@ -0,0 +1,4 @@ +# id 21 (CaravanP2_chk0), field 867200550 +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=Caravan_chk0;Ec=0;max=20;weather=0;food=320") +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk0;Ec=0;max=20;weather=0;food=320") +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk0;Ec=1;max=20;weather=0;food=320") diff --git a/scripts/portal/CaravanP2_chk1.py b/scripts/portal/CaravanP2_chk1.py new file mode 100755 index 0000000..889b3dc --- /dev/null +++ b/scripts/portal/CaravanP2_chk1.py @@ -0,0 +1,12 @@ +# id 1 (CaravanP2_chk1), field 867200550 +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=Caravan_chk1;Ec=1;max=20;weather=0;food=320") +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk1;Ec=1;max=20;weather=0;food=320") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#This is true, we can gather more. ") +sm.sendSay("#face0#But when will we have the time to hunt? And what if someone is injured? All of this could have been avoided. ") +sm.sendSay("#face0#I trust you will make wiser decisions in the future. ") +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk1;Ec=2;max=20;weather=0;food=320") +sm.createQuestWithQRValue(64007, "happy0=95;happy1=100;happy2=100;happy3=100;man0=56;man1=32;man2=38;man3=73") diff --git a/scripts/portal/CaravanP2_chk10.py b/scripts/portal/CaravanP2_chk10.py new file mode 100755 index 0000000..dbb965c --- /dev/null +++ b/scripts/portal/CaravanP2_chk10.py @@ -0,0 +1,12 @@ +# id 10 (CaravanP2_chk10), field 867200550 +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk9;Ec=10;max=20;weather=1;food=329") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk9;Ec=10;max=20;weather=1;food=329") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=Caravan_chk10;Ec=10;max=20;weather=1;food=329") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk10;Ec=10;max=20;weather=1;food=329") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Good to hear. Never forget that there are people who are depending on you for survival. ") +sm.sendSay("#face0#And remember, you have the full support of Afinas at your back. Assuming we can trust your judgment, of course.") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk10;Ec=11;max=20;weather=1;food=329") diff --git a/scripts/portal/CaravanP2_chk11.py b/scripts/portal/CaravanP2_chk11.py new file mode 100755 index 0000000..771a8d0 --- /dev/null +++ b/scripts/portal/CaravanP2_chk11.py @@ -0,0 +1,12 @@ +# id 11 (CaravanP2_chk11), field 867200550 +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=Caravan_chk11;Ec=11;max=20;weather=1;food=329") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk11;Ec=11;max=20;weather=1;food=329") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face2#I'm happy to hear that. Having you with us has given us all so much hope. And it feels like we're all united in our goal to preserve Abrup!") +sm.sendSay("#face1#I'm sure we'll meet the lady who sent the letter soon. I'll help you find her. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face1#I suppose I've been a good influence on you, eh? Eh? ") +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk11;Ec=12;max=20;weather=1;food=329") diff --git a/scripts/portal/CaravanP2_chk12.py b/scripts/portal/CaravanP2_chk12.py new file mode 100755 index 0000000..a1bcb79 --- /dev/null +++ b/scripts/portal/CaravanP2_chk12.py @@ -0,0 +1,17 @@ +# id 12 (CaravanP2_chk12), field 867200550 +sm.createQuestWithQRValue(64006, "WC=5;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk11;Ec=12;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk11;Ec=12;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=Caravan_chk12;Ec=12;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk12;Ec=12;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=2;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk12;Ec=12;max=20;weather=2;food=329") +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200980#.") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk12;Ec=12;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=100;happy3=100;man0=66;man1=32;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=100;happy3=100;man0=66;man1=42;man2=38;man3=73") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=100;happy3=100;man0=66;man1=42;man2=48;man3=73") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=100;happy3=100;man0=66;man1=42;man2=48;man3=83") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk12;Ec=12;max=20;weather=2;food=329") +sm.warp(867200980) diff --git a/scripts/portal/CaravanP2_chk13.py b/scripts/portal/CaravanP2_chk13.py new file mode 100755 index 0000000..dc5595e --- /dev/null +++ b/scripts/portal/CaravanP2_chk13.py @@ -0,0 +1,9 @@ +# id 13 (CaravanP2_chk13), field 867200550 +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=Caravan_chk13;Ec=13;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk13;Ec=13;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64005, "FoodL=3;FoodM=1;FoodS=0;FoodNone=3") +sm.createQuestWithQRValue(64005, "FoodL=3;FoodM=2;FoodS=0;FoodNone=3") +sm.createQuestWithQRValue(64005, "FoodL=3;FoodM=2;FoodS=1;FoodNone=3") +sm.createQuestWithQRValue(64005, "FoodL=3;FoodM=2;FoodS=1;FoodNone=0") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk13;Ec=13;max=20;weather=2;food=90") +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk13;Ec=14;max=20;weather=2;food=90") diff --git a/scripts/portal/CaravanP2_chk14.py b/scripts/portal/CaravanP2_chk14.py new file mode 100755 index 0000000..7cc5404 --- /dev/null +++ b/scripts/portal/CaravanP2_chk14.py @@ -0,0 +1,13 @@ +# id 14 (CaravanP2_chk14), field 867200550 +sm.createQuestWithQRValue(64006, "WC=6;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk13;Ec=14;max=20;weather=3;food=90") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk13;Ec=14;max=20;weather=3;food=90") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=Caravan_chk14;Ec=14;max=20;weather=3;food=90") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk14;Ec=14;max=20;weather=3;food=90") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4#We can always find more food, but we can't bring back lost lives. ") +sm.sendSay("#face0#I know you're looking out for all of the villagers. But please consider the lives of everyone we meet. ") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk14;Ec=15;max=20;weather=3;food=90") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=80;happy3=100;man0=66;man1=42;man2=48;man3=83") diff --git a/scripts/portal/CaravanP2_chk15.py b/scripts/portal/CaravanP2_chk15.py new file mode 100755 index 0000000..71f198a --- /dev/null +++ b/scripts/portal/CaravanP2_chk15.py @@ -0,0 +1,8 @@ +# id 15 (CaravanP2_chk15), field 867200550 +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=Caravan_chk15;Ec=15;max=20;weather=3;food=90") +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk15;Ec=15;max=20;weather=3;food=90") +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200960#.") +sm.warp(867200960) diff --git a/scripts/portal/CaravanP2_chk16.py b/scripts/portal/CaravanP2_chk16.py new file mode 100755 index 0000000..507191d --- /dev/null +++ b/scripts/portal/CaravanP2_chk16.py @@ -0,0 +1,10 @@ +# id 16 (CaravanP2_chk16), field 867200550 +sm.createQuestWithQRValue(64006, "WC=7;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk15;Ec=16;max=20;weather=0;food=90") +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk15;Ec=16;max=20;weather=0;food=90") +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=Caravan_chk16;Ec=16;max=20;weather=0;food=90") +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk16;Ec=16;max=20;weather=0;food=90") +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200961#.") +sm.warp(867200961) diff --git a/scripts/portal/CaravanP2_chk17.py b/scripts/portal/CaravanP2_chk17.py new file mode 100755 index 0000000..c8dc9ad --- /dev/null +++ b/scripts/portal/CaravanP2_chk17.py @@ -0,0 +1,6 @@ +# id 17 (CaravanP2_chk17), field 867200550 +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=Caravan_chk17;Ec=17;max=20;weather=0;food=90") +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk17;Ec=17;max=20;weather=0;food=90") +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk17;Ec=18;max=20;weather=0;food=90") +sm.createQuestWithQRValue(64007, "happy0=95;happy1=100;happy2=80;happy3=100;man0=66;man1=42;man2=48;man3=83") +sm.createQuestWithQRValue(64007, "happy0=95;happy1=100;happy2=85;happy3=100;man0=66;man1=42;man2=48;man3=83") diff --git a/scripts/portal/CaravanP2_chk18.py b/scripts/portal/CaravanP2_chk18.py new file mode 100755 index 0000000..c4cfbdb --- /dev/null +++ b/scripts/portal/CaravanP2_chk18.py @@ -0,0 +1,18 @@ +# id 18 (CaravanP2_chk18), field 867200550 +sm.createQuestWithQRValue(64006, "WC=8;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk17;Ec=18;max=20;weather=1;food=90") +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk17;Ec=18;max=20;weather=1;food=90") +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=Caravan_chk18;Ec=18;max=20;weather=1;food=90") +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk18;Ec=18;max=20;weather=1;food=90") +sm.lockInGameUI(True, False) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk18;Ec=19;max=20;weather=1;food=90") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=85;happy3=100;man0=66;man1=42;man2=48;man3=83") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=90;happy3=100;man0=66;man1=42;man2=48;man3=83") diff --git a/scripts/portal/CaravanP2_chk19.py b/scripts/portal/CaravanP2_chk19.py new file mode 100755 index 0000000..32fba95 --- /dev/null +++ b/scripts/portal/CaravanP2_chk19.py @@ -0,0 +1,9 @@ +# id 19 (CaravanP2_chk19), field 867200550 +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=Caravan_chk19;Ec=19;max=20;weather=1;food=90") +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk19;Ec=19;max=20;weather=1;food=90") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1#I will! You hang in there too.") +sm.createQuestWithQRValue(64006, "WC=9;k1=0;k2=0;k3=0;k4=0;k5=0;speed=20;k6=0;k7=0;man=239;prog=0;Pt=CaravanP2_chk19;Ec=20;max=20;weather=1;food=90") diff --git a/scripts/portal/CaravanP2_chk2.py b/scripts/portal/CaravanP2_chk2.py new file mode 100755 index 0000000..fe92747 --- /dev/null +++ b/scripts/portal/CaravanP2_chk2.py @@ -0,0 +1,15 @@ +# id 2 (CaravanP2_chk2), field 867200550 +sm.createQuestWithQRValue(64006, "WC=0;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk1;Ec=2;max=20;weather=1;food=320") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk1;Ec=2;max=20;weather=1;food=320") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=Caravan_chk2;Ec=2;max=20;weather=1;food=320") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk2;Ec=2;max=20;weather=1;food=320") +sm.lockInGameUI(True, False) +sm.sendDelay(500) +sm.sendDelay(5000) +sm.sendDelay(500) +sm.sendDelay(5000) +sm.sendDelay(500) +sm.sendDelay(5000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk2;Ec=3;max=20;weather=1;food=320") +sm.createQuestWithQRValue(64007, "happy0=100;happy1=100;happy2=100;happy3=100;man0=56;man1=32;man2=38;man3=73") diff --git a/scripts/portal/CaravanP2_chk3.py b/scripts/portal/CaravanP2_chk3.py new file mode 100755 index 0000000..b039551 --- /dev/null +++ b/scripts/portal/CaravanP2_chk3.py @@ -0,0 +1,15 @@ +# id 3 (CaravanP2_chk3), field 867200550 +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=Caravan_chk3;Ec=3;max=20;weather=1;food=320") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=320") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=1;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=320") +sm.createQuestWithQRValue(64193, "pMeat=0") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#We must complete this mission as fast as possible. 3 minutes. You have 3 minutes to bring back as much food as you can. ") +sm.setParam(35) +sm.sendSay("Go to #m867200900#.") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=1;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=420") +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=3;max=20;weather=1;food=420") +sm.warp(867200900) diff --git a/scripts/portal/CaravanP2_chk4.py b/scripts/portal/CaravanP2_chk4.py new file mode 100755 index 0000000..757a82d --- /dev/null +++ b/scripts/portal/CaravanP2_chk4.py @@ -0,0 +1,31 @@ +# id 4 (CaravanP2_chk4), field 867200550 +sm.createQuestWithQRValue(64006, "WC=1;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=4;max=20;weather=2;food=528") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk3;Ec=4;max=20;weather=2;food=528") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=Caravan_chk4;Ec=4;max=20;weather=2;food=528") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk4;Ec=4;max=20;weather=2;food=528") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400592) # Aruhi +sm.sendNext("#face1#Nothing! I've been doing my job, really! ") +sm.sendSay("#face1#You... you think I'm useless, don't you? Just like everyone else... HIC! ") +sm.setParam(57) +sm.sendSay("#bThat's not what I think. I'm just concerned about your ability to keep watch if you're... ") +sm.setParam(37) +sm.sendSay("#face1#...Okay. Okay, I did, a little. HIC! But I can handle it! ") +sm.setParam(57) +sm.sendSay("#b...I see. Please return to your posting. ") +sm.setParam(37) +sm.sendNext("#face1#You... you don't really trust me, do you? HIC! You think I'm just rambling! ") +sm.sendSay("#face0#Right. Well, that's fine... No one listens to what I say anyways... ") +sm.sendSay("#face0#It doesn't matter... But! But, I really saw it with my own two eyes. ") +sm.sendSay("#face1#I mean, it was hard to see through the snow and fog... but I saw it! That giant shadow swept through the forest like it was swimming! ") +sm.sendSay("#face1#Of course, no one would want to believe that! But we must face reality, to be able to... prepare... ") +sm.setParam(57) +sm.sendSay("#bI also saw that shadow while I was coming down the mountain. But none of the villagers seemed to see it. I didn't ask everyone, but... ") +sm.sendSay("#bI was putting off asking people, honestly. I didn't want to stress anyone further by asking about giant monsters... ") +sm.sendSay("#bBut I have to do it, to learn as much as I can about what we're up against. ") +sm.setParam(37) +sm.sendSay("#face1#See? I don't lie.") +sm.createQuestWithQRValue(64020, "chk1=1;chk2=1") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk4;Ec=5;max=20;weather=2;food=528") diff --git a/scripts/portal/CaravanP2_chk5.py b/scripts/portal/CaravanP2_chk5.py new file mode 100755 index 0000000..8b5fc32 --- /dev/null +++ b/scripts/portal/CaravanP2_chk5.py @@ -0,0 +1,8 @@ +# id 5 (CaravanP2_chk5), field 867200550 +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=Caravan_chk5;Ec=5;max=20;weather=2;food=528") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk5;Ec=5;max=20;weather=2;food=528") +sm.createQuestWithQRValue(64005, "FoodL=2;FoodM=2;FoodS=0;FoodNone=1") +sm.createQuestWithQRValue(64005, "FoodL=2;FoodM=1;FoodS=0;FoodNone=1") +sm.createQuestWithQRValue(64005, "FoodL=2;FoodM=1;FoodS=0;FoodNone=3") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk5;Ec=5;max=20;weather=2;food=329") +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk5;Ec=6;max=20;weather=2;food=329") diff --git a/scripts/portal/CaravanP2_chk6.py b/scripts/portal/CaravanP2_chk6.py new file mode 100755 index 0000000..b3e5ee5 --- /dev/null +++ b/scripts/portal/CaravanP2_chk6.py @@ -0,0 +1,13 @@ +# id 6 (CaravanP2_chk6), field 867200550 +sm.createQuestWithQRValue(64006, "WC=2;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk5;Ec=6;max=20;weather=3;food=329") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk5;Ec=6;max=20;weather=3;food=329") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=Caravan_chk6;Ec=6;max=20;weather=3;food=329") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk6;Ec=6;max=20;weather=3;food=329") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Really? Thank you! Thank you... ") +sm.sendSay("I'm not sure if it's fair to the others to accept this, but thank you so much. ") +sm.sendSay("Actually, Ullan hasn't eaten since we left Kaptafel yesterday. I gave her some of my portion, but that wasn't enough. Thank you so much.") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk6;Ec=7;max=20;weather=3;food=329") diff --git a/scripts/portal/CaravanP2_chk7.py b/scripts/portal/CaravanP2_chk7.py new file mode 100755 index 0000000..38a02c9 --- /dev/null +++ b/scripts/portal/CaravanP2_chk7.py @@ -0,0 +1,4 @@ +# id 7 (CaravanP2_chk7), field 867200550 +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=Caravan_chk7;Ec=7;max=20;weather=3;food=329") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk7;Ec=7;max=20;weather=3;food=329") +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk7;Ec=8;max=20;weather=3;food=329") diff --git a/scripts/portal/CaravanP2_chk8.py b/scripts/portal/CaravanP2_chk8.py new file mode 100755 index 0000000..1f19a72 --- /dev/null +++ b/scripts/portal/CaravanP2_chk8.py @@ -0,0 +1,12 @@ +# id 8 (CaravanP2_chk8), field 867200550 +sm.createQuestWithQRValue(64006, "WC=3;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk7;Ec=8;max=20;weather=0;food=329") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk7;Ec=8;max=20;weather=0;food=329") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=Caravan_chk8;Ec=8;max=20;weather=0;food=329") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;man=199;prog=0;Pt=CaravanP2_chk8;Ec=8;max=20;weather=0;food=329") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=1;man=199;prog=0;Pt=CaravanP2_chk8;Ec=8;max=20;weather=0;food=329") +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200920#.") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;man=199;prog=0;Pt=CaravanP2_chk8;Ec=8;max=20;weather=0;food=329") +sm.warp(867200920) diff --git a/scripts/portal/CaravanP2_chk9.py b/scripts/portal/CaravanP2_chk9.py new file mode 100755 index 0000000..07a12e7 --- /dev/null +++ b/scripts/portal/CaravanP2_chk9.py @@ -0,0 +1,10 @@ +# id 9 (CaravanP2_chk9), field 867200550 +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;man=199;prog=0;Pt=Caravan_chk9;Ec=9;max=20;weather=0;food=329") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;man=199;prog=0;Pt=CaravanP2_chk9;Ec=9;max=20;weather=0;food=329") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=1;man=199;prog=0;Pt=CaravanP2_chk9;Ec=9;max=20;weather=0;food=329") +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200940#.") +sm.createQuestWithQRValue(64006, "WC=4;k1=0;k2=0;k3=0;k5=0;speed=20;k6=0;k7=0;man=199;prog=0;Pt=CaravanP2_chk9;Ec=9;max=20;weather=0;food=329") +sm.warp(867200940) diff --git a/scripts/portal/ComeBackHome.py b/scripts/portal/ComeBackHome.py new file mode 100755 index 0000000..568b658 --- /dev/null +++ b/scripts/portal/ComeBackHome.py @@ -0,0 +1 @@ +sm.warpInstanceIn(910000000) \ No newline at end of file diff --git a/scripts/portal/Curbrock_Out.py b/scripts/portal/Curbrock_Out.py new file mode 100755 index 0000000..3885d85 --- /dev/null +++ b/scripts/portal/Curbrock_Out.py @@ -0,0 +1,3 @@ +# Curbrock Exit Portal + +sm.warpInstanceOut(chr.getPreviousFieldID()) \ No newline at end of file diff --git a/scripts/portal/DI_out.py b/scripts/portal/DI_out.py new file mode 100755 index 0000000..a611ef6 --- /dev/null +++ b/scripts/portal/DI_out.py @@ -0,0 +1 @@ +sm.warp(sm.getReturnField()) \ No newline at end of file diff --git a/scripts/portal/DemianOut.py b/scripts/portal/DemianOut.py new file mode 100755 index 0000000..7633705 --- /dev/null +++ b/scripts/portal/DemianOut.py @@ -0,0 +1,15 @@ +# Damien leave NPC + +WORLD_TREE_SUMMIT = 105300303 + +BLACK_HEAVEN_CORE_ENTRANCE = 350060300 +BLACK_HEAVEN_CORE_LAST_HARD = 350060600 + +sm.setSpeakerID(1530621) +response = sm.sendAskYesNo("Are you sure you want to leave the battlefield?") +if response: + sm.WarpInstanceOut(WORLD_TREE_SUMMIT) +else: + sm.dispose() + + diff --git a/scripts/portal/DemonZoneOut.py b/scripts/portal/DemonZoneOut.py new file mode 100755 index 0000000..9ee3ca1 --- /dev/null +++ b/scripts/portal/DemonZoneOut.py @@ -0,0 +1,5 @@ +# Exit Blackgate City +if not sm.getReturnField() is None: + sm.warp(sm.getReturnField()) +else: + sm.warp(100000000, 19) \ No newline at end of file diff --git a/scripts/portal/DragonEggNotice.py b/scripts/portal/DragonEggNotice.py new file mode 100755 index 0000000..a963448 --- /dev/null +++ b/scripts/portal/DragonEggNotice.py @@ -0,0 +1,14 @@ +# Portal for Evan Intro | Hidden Street: Lush Forest (900020110) +# Author: Tiger + +from net.swordie.ms.constants import GameConstants + +# Custom QR value to prevent sayImage from loop repeatedly when portal script is run + +if not "2" in sm.getQRValue(GameConstants.EVAN_INTRO2): + sm.createQuestWithQRValue(GameConstants.EVAN_INTRO2, "1") + +if "1" in sm.getQRValue(GameConstants.EVAN_INTRO2): + sm.sendSayImage("UI/tutorial/evan/8/0") + sm.setQRValue(GameConstants.EVAN_INTRO2, "2") + diff --git a/scripts/portal/ES_Out.py b/scripts/portal/ES_Out.py new file mode 100755 index 0000000..319b146 --- /dev/null +++ b/scripts/portal/ES_Out.py @@ -0,0 +1 @@ +sm.warp(chr.getPreviousFieldID()) \ No newline at end of file diff --git a/scripts/portal/EnterSWmer.py b/scripts/portal/EnterSWmer.py new file mode 100755 index 0000000..10f3678 --- /dev/null +++ b/scripts/portal/EnterSWmer.py @@ -0,0 +1,5 @@ +map = 105000000 +portal = 7 + +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/EnterStageSengo.py b/scripts/portal/EnterStageSengo.py new file mode 100755 index 0000000..0fa63c7 --- /dev/null +++ b/scripts/portal/EnterStageSengo.py @@ -0,0 +1,11 @@ +Sengoku = 744000020 +sm.setSpeakerID(9330279) + +if sm.getFieldID() == Sengoku: + selection = sm.sendNext("You dare wish challenge Sengoku High?.\r\n#b" + "#L0#I want to challenge Sengoku High.#l\r\n") + if selection == 0: + if not sm.getParty(): + sm.sendSayOkay("You must leave your party first.") + else: + sm.warpInstanceIn(744000041) diff --git a/scripts/portal/Event_PinkZakumR.py b/scripts/portal/Event_PinkZakumR.py new file mode 100755 index 0000000..17e2146 --- /dev/null +++ b/scripts/portal/Event_PinkZakumR.py @@ -0,0 +1,5 @@ +# Pink Zakum : Pink Zakum Revive +# Return portal + +sm.returnPinkZakum() # warps to pink zakum if ongoing, else to previous field ID +sm.sendAutoEventClock() \ No newline at end of file diff --git a/scripts/portal/Exit_SparringMapNpc_Tiger.py b/scripts/portal/Exit_SparringMapNpc_Tiger.py new file mode 100755 index 0000000..807df53 --- /dev/null +++ b/scripts/portal/Exit_SparringMapNpc_Tiger.py @@ -0,0 +1 @@ +sm.warpInstanceOut(925020001) \ No newline at end of file diff --git a/scripts/portal/FCPzone_start.py b/scripts/portal/FCPzone_start.py new file mode 100755 index 0000000..dad75aa --- /dev/null +++ b/scripts/portal/FCPzone_start.py @@ -0,0 +1,5 @@ +# id 2 (FCPzone_start), field 301050300 +sm.setSpeakerType(8) +sm.setParam(16) +res = sm.sendAskYesNo("Maybe I should get a little tougher first...") +sm.warp(301000000) diff --git a/scripts/portal/FourthJobResi.py b/scripts/portal/FourthJobResi.py new file mode 100755 index 0000000..88b29a0 --- /dev/null +++ b/scripts/portal/FourthJobResi.py @@ -0,0 +1,21 @@ +# Portal to the 4th Job Advancement for Main Resistance + +GELIMERS_KEY_CARD = 4032743 + +if not sm.hasItem(GELIMERS_KEY_CARD): + sm.chat("The entrance is locked. It can only be unlocked by Gelimer.") + sm.dispose() + +validJobIDs = { + 3211: 931000300, + 3311: 931000301, + 3511: 931000302, + 3711: 931000303, +} + +charJobID = sm.getChr().getJob() +if charJobID not in validJobIDs: + sm.dispose() + +sm.warpInstanceIn(validJobIDs[charJobID], 0, False) +sm.setInstanceTime(15*60) diff --git a/scripts/portal/GiantBossQuit1.py b/scripts/portal/GiantBossQuit1.py new file mode 100755 index 0000000..1d92b9c --- /dev/null +++ b/scripts/portal/GiantBossQuit1.py @@ -0,0 +1,7 @@ +sm.setSpeakerID(9390124) +if sm.sendAskYesNo: + if sm.sendAskYesNo("Do you wish to leave this place?"): + sm.WarpInstanceOut(863010000) + sm.dispose() + else: + sm.dispose() diff --git a/scripts/portal/In_diera.py b/scripts/portal/In_diera.py new file mode 100755 index 0000000..d18a5c1 --- /dev/null +++ b/scripts/portal/In_diera.py @@ -0,0 +1,3 @@ +# 865000000 +sm.warp(865000002, 1) +sm.dispose() diff --git a/scripts/portal/Library_out.py b/scripts/portal/Library_out.py new file mode 100755 index 0000000..aade19d --- /dev/null +++ b/scripts/portal/Library_out.py @@ -0,0 +1,5 @@ +# Grand Athenaeum +if not sm.getReturnField() is None: + sm.warp(sm.getReturnField()) +else: + sm.warp(100000000, 19) \ No newline at end of file diff --git a/scripts/portal/MD_high.py b/scripts/portal/MD_high.py new file mode 100755 index 0000000..568f08a --- /dev/null +++ b/scripts/portal/MD_high.py @@ -0,0 +1,4 @@ +if sm.getFieldID() == 551030000: + sm.warpInstanceIn(551030001, 3, True) +else: + sm.warpInstanceOut(551030000, 3) diff --git a/scripts/portal/NextStageSengo.py b/scripts/portal/NextStageSengo.py new file mode 100755 index 0000000..421f7cf --- /dev/null +++ b/scripts/portal/NextStageSengo.py @@ -0,0 +1,9 @@ +currentMap = sm.getFieldID() +if sm.hasMobsInField(): + sm.chat("Kill all monsters first.") +elif currentMap / 10000 == 74400 and not currentMap == 744000000: + sm.warp(currentMap+1, 0) + +elif currentMap == 744000000: + sm.warp(744000020, 1) +sm.dispose() diff --git a/scripts/portal/NextStg.py b/scripts/portal/NextStg.py new file mode 100755 index 0000000..f725238 --- /dev/null +++ b/scripts/portal/NextStg.py @@ -0,0 +1,8 @@ +fieldID = sm.getFieldID() +if fieldID == 811000500: + sm.warpInstanceOut(811000008) +elif not sm.hasMobsInField(): + sm.warp(fieldID + 100) +else: + sm.chat("The portal is not opened yet.") +sm.dispose() diff --git a/scripts/portal/OutElfKingRoom.py b/scripts/portal/OutElfKingRoom.py new file mode 100755 index 0000000..a5f2ce8 --- /dev/null +++ b/scripts/portal/OutElfKingRoom.py @@ -0,0 +1,3 @@ +# 101050010 +sm.warp(101050000, 7) +sm.dispose() diff --git a/scripts/portal/P1_BacktoEvent2.py b/scripts/portal/P1_BacktoEvent2.py new file mode 100755 index 0000000..8efc9af --- /dev/null +++ b/scripts/portal/P1_BacktoEvent2.py @@ -0,0 +1,2 @@ +# id 9 (E2_Block), field 867236100 +sm.createQuestWithQRValue(64203, "count=0;event3_camera=1") diff --git a/scripts/portal/P1_E1_Fire00.py b/scripts/portal/P1_E1_Fire00.py new file mode 100755 index 0000000..5cb7724 --- /dev/null +++ b/scripts/portal/P1_E1_Fire00.py @@ -0,0 +1,10 @@ +# id 7 (E1_Fire00), field 867236100 +sm.createQuestWithQRValue(64272, "25=1;26=1;27=1;0=4;2=2") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") +sm.createQuestWithQRValue(64272, "25=1;26=2;27=1;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=1;26=2;27=2;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=1;26=3;27=2;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=1;26=3;27=3;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=1;26=4;27=3;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=1;26=4;27=4;0=4;2=2") diff --git a/scripts/portal/P1_E2_Fire00.py b/scripts/portal/P1_E2_Fire00.py new file mode 100755 index 0000000..ec2dc8f --- /dev/null +++ b/scripts/portal/P1_E2_Fire00.py @@ -0,0 +1,2 @@ +# id 4 (E2_Fire00), field 867236100 +sm.createQuestWithQRValue(64272, "25=6;26=4;27=4;0=4;2=2") diff --git a/scripts/portal/P2_E2_Fire00.py b/scripts/portal/P2_E2_Fire00.py new file mode 100755 index 0000000..4aa32a2 --- /dev/null +++ b/scripts/portal/P2_E2_Fire00.py @@ -0,0 +1,2 @@ +# id 9 (E2_Fire00), field 867236150 +sm.createQuestWithQRValue(64272, "25=8;26=5;27=5;0=4;2=2") diff --git a/scripts/portal/P2_E3_Fire00.py b/scripts/portal/P2_E3_Fire00.py new file mode 100755 index 0000000..fa35a44 --- /dev/null +++ b/scripts/portal/P2_E3_Fire00.py @@ -0,0 +1,2 @@ +# id 6 (E3_Fire00), field 867236150 +sm.createQuestWithQRValue(64272, "25=10;26=5;27=5;0=4;2=2") diff --git a/scripts/portal/P2_Event2_Start.py b/scripts/portal/P2_Event2_Start.py new file mode 100755 index 0000000..f039080 --- /dev/null +++ b/scripts/portal/P2_Event2_Start.py @@ -0,0 +1,2 @@ +# id 11 (P2_Event2_00), field 867236150 +sm.createQuestWithQRValue(64204, "RushMob=1;P2_fall=2;LadderMob=1") diff --git a/scripts/portal/P2_Event3_Start.py b/scripts/portal/P2_Event3_Start.py new file mode 100755 index 0000000..4dfcb28 --- /dev/null +++ b/scripts/portal/P2_Event3_Start.py @@ -0,0 +1,2 @@ +# id 8 (P2_Event3_00), field 867236150 +sm.createQuestWithQRValue(64204, "RushMob=1;P2_fall=3;LadderMob=1") diff --git a/scripts/portal/P3_Fire00.py b/scripts/portal/P3_Fire00.py new file mode 100755 index 0000000..cfcf160 --- /dev/null +++ b/scripts/portal/P3_Fire00.py @@ -0,0 +1,8 @@ +# id 3 (P3_Fire), field 867236200 +sm.createQuestWithQRValue(64272, "25=31;26=6;27=6;0=4;2=2") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") +sm.createQuestWithQRValue(64272, "25=31;26=7;27=6;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=31;26=7;27=7;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=31;26=8;27=7;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=31;26=8;27=8;0=4;2=2") diff --git a/scripts/portal/P3_ForceFire.py b/scripts/portal/P3_ForceFire.py new file mode 100755 index 0000000..34c93a5 --- /dev/null +++ b/scripts/portal/P3_ForceFire.py @@ -0,0 +1,2 @@ +# id 4 (P3_Force), field 867236200 +sm.createQuestWithQRValue(64272, "25=28;26=5;27=5;0=4;2=2") diff --git a/scripts/portal/PCS_q17640.py b/scripts/portal/PCS_q17640.py new file mode 100755 index 0000000..0da1abe --- /dev/null +++ b/scripts/portal/PCS_q17640.py @@ -0,0 +1,36 @@ +# id 13 (q17640), field 865000000 +sm.setSpeakerType(8) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390211) # Kentucky +sm.sendNext("Welcome!") +sm.setParam(17) +sm.sendSay("I'm here for Leon Daniella's items.") +sm.setParam(5) +sm.sendSay("Aha, yes. Let me get everything together. This, and that, and this...") +sm.setParam(17) +sm.sendSay("(Ugh, there's so much junk.) Say, do you think I could have those delivered to the dock?") +sm.setParam(5) +sm.sendSay("Of course. I'll have them delivered right away.") +sm.setParam(17) +sm.sendSay("Great, thank you. (What the heck, they deliver?!)") +sm.setParam(57) +sm.setColor(1) +sm.sendSay("Hm? You..!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390204) # Robed Lady +sm.sendSay("Oh, it's you.") +sm.setParam(57) +sm.sendSay("What are you doing here? I hope you didn't forget you're still a wanted criminal?") +sm.setParam(37) +sm.sendSay("Hey, if I didn't save you that day, you wouldn't be standing here.") +sm.setParam(57) +sm.sendSay("Hm... Fine, you win. For now. I'll be going...") +sm.setParam(37) +sm.sendSay("Whoa, not so fast. Where are you headed?") +sm.setParam(57) +sm.sendSay("Time for some pirate-hunting. Why?") +sm.setParam(37) +sm.sendSay("No, it's nothing... Goodbye.") +sm.setParam(57) +sm.sendSay("Uh... Okay. I should head back to Leon.") +sm.createQuestWithQRValue(18418, "B=33264") diff --git a/scripts/portal/PF_nextStage.py b/scripts/portal/PF_nextStage.py new file mode 100755 index 0000000..1066d88 --- /dev/null +++ b/scripts/portal/PF_nextStage.py @@ -0,0 +1,3 @@ +# id 1 (next00), field 867201960 +sm.completeQuestNoCheck(64089) +sm.warp(867201980) diff --git a/scripts/portal/PH02.py b/scripts/portal/PH02.py new file mode 100755 index 0000000..348e921 --- /dev/null +++ b/scripts/portal/PH02.py @@ -0,0 +1 @@ +# id 6 (PH02), field 450001012 diff --git a/scripts/portal/PL_JBS_enter2.py b/scripts/portal/PL_JBS_enter2.py new file mode 100755 index 0000000..b0070be --- /dev/null +++ b/scripts/portal/PL_JBS_enter2.py @@ -0,0 +1,14 @@ +# id 6 (P1toP2), field 867236100 +sm.createQuestWithQRValue(64202, "event2_camera=0;event2_wall=1") +sm.createQuestWithQRValue(64202, "event2_camera=1;event2_wall=1") +sm.lockInGameUI(True, False) +sm.forcedInput(0) +sm.sendDelay(1500) +sm.lockInGameUI(False, True) +sm.lockInGameUI(True, False) +sm.forcedInput(0) +sm.zoomCamera(3000, 1000, 3000, 177, 385) +sm.sendDelay(1500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") diff --git a/scripts/portal/PL_JBS_enter4.py b/scripts/portal/PL_JBS_enter4.py new file mode 100755 index 0000000..0a43697 --- /dev/null +++ b/scripts/portal/PL_JBS_enter4.py @@ -0,0 +1,6 @@ +# id 2 (enterPhase4_00), field 867236200 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 350) +sm.sendDelay(300) +sm.lockInGameUI(False, True) +sm.warp(867236220) diff --git a/scripts/portal/PL_JBS_enter5.py b/scripts/portal/PL_JBS_enter5.py new file mode 100755 index 0000000..de0c343 --- /dev/null +++ b/scripts/portal/PL_JBS_enter5.py @@ -0,0 +1,8 @@ +# id 1 (gotoPhase5), field 867236250 +sm.createQuestWithQRValue(64272, "25=34;26=12;27=11;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=34;26=12;27=12;0=4;2=2") +sm.createQuestWithQRValue(64206, "count=1;ScreenMob=1") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(16150, "") +sm.createQuestWithQRValue(64272, "25=34;26=13;27=12;0=4;2=2") +sm.createQuestWithQRValue(64272, "25=34;26=13;27=13;0=4;2=2") diff --git a/scripts/portal/PPinkOut.py b/scripts/portal/PPinkOut.py new file mode 100755 index 0000000..ce2a76e --- /dev/null +++ b/scripts/portal/PPinkOut.py @@ -0,0 +1 @@ +sm.warpInstanceOut(270050000) \ No newline at end of file diff --git a/scripts/portal/PQout1.py b/scripts/portal/PQout1.py new file mode 100755 index 0000000..326eab3 --- /dev/null +++ b/scripts/portal/PQout1.py @@ -0,0 +1,5 @@ +# Party Quest Entrance leave +if not sm.getReturnField() is None: + sm.warp(sm.getReturnField()) +else: + sm.warp(100000000, 19) \ No newline at end of file diff --git a/scripts/portal/PTjob3M.py b/scripts/portal/PTjob3M.py new file mode 100755 index 0000000..757dd40 --- /dev/null +++ b/scripts/portal/PTjob3M.py @@ -0,0 +1 @@ +sm.warpInstanceOut(260010601, 2) \ No newline at end of file diff --git a/scripts/portal/PTjob4M_2.py b/scripts/portal/PTjob4M_2.py new file mode 100755 index 0000000..7120711 --- /dev/null +++ b/scripts/portal/PTjob4M_2.py @@ -0,0 +1 @@ +sm.warp(915010201) \ No newline at end of file diff --git a/scripts/portal/PTtutor100_0.py b/scripts/portal/PTtutor100_0.py new file mode 100755 index 0000000..1aefb7b --- /dev/null +++ b/scripts/portal/PTtutor100_0.py @@ -0,0 +1,3 @@ +if sm.hasQuest(25000): + sm.warpInstanceIn(915000200, 2) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/PTtutor200_0.py b/scripts/portal/PTtutor200_0.py new file mode 100755 index 0000000..383a89a --- /dev/null +++ b/scripts/portal/PTtutor200_0.py @@ -0,0 +1,13 @@ +GUARD1 = 9300498 +GUARD2 = 9300507 + +if sm.hasQuest(25000): + #sm.removeEscapeButton() + #sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("This portal leads straight into Ereve. The place is going to be positively crawling with knights. Sounds like just my kind of place.") + #sm.startQuestNoCheck(25003) + sm.levelUntil(10) + sm.jobAdvance(2400) + sm.completeQuest(25000) + sm.warpInstanceIn(100000000, 1) + sm.dispose() \ No newline at end of file diff --git a/scripts/portal/PTtutor300_0.py b/scripts/portal/PTtutor300_0.py new file mode 100755 index 0000000..014d659 --- /dev/null +++ b/scripts/portal/PTtutor300_0.py @@ -0,0 +1,7 @@ +GUARD1 = 9300498 +GUARD2 = 9300507 + +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("This will be a cakewalk. I hope...") +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/PTtutor300_2.py b/scripts/portal/PTtutor300_2.py new file mode 100755 index 0000000..daea320 --- /dev/null +++ b/scripts/portal/PTtutor300_2.py @@ -0,0 +1,71 @@ +sm.setSpeakerID(1402001) +sm.sendNext("Who're you? You new?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Kidan! Old pal! You really don't remember me? We say hello all the time!") + +sm.setSpeakerID(1402001) +sm.sendSay("Oh, um, sorry about that...") + +sm.setPlayerAsSpeaker() +sm.sendSay("It's okay old chum, I know you're seeing countless people coming through. It can't be easy to remember all of them, but I was hoping you'd at least remember ME. ") + +sm.setSpeakerID(1402001) +sm.sendSay("H-hey! I said I was sorry! This place is like a madhouse right now. You can't blame a guy for missing a few faces.") + +sm.setPlayerAsSpeaker() +sm.sendSay("It's really that bad?") + +sm.setSpeakerID(1402001) +sm.sendSay("Of course! We've got some new royal lady claiming that Empress Cygnus may be a fake! How could anyone feel at ease?!") + +sm.setPlayerAsSpeaker() +sm.sendSay("That's a good point. That's why I'm here!") + +sm.setSpeakerID(1402001) +sm.sendSay("It's got me pretty worried too. Even the Empress looked worried. She was white as a ghost when I saw her.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Not looking forward to having a new empress, Kidan?") + +sm.setSpeakerID(1402001) +sm.sendSay("I would never wish ill of Empress Cygnus! We would not be where we are today without her leadership. But if this new woman's claims are true...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Do you really think there is another member of the Empress's bloodline?") + +sm.setSpeakerID(1402001) +sm.sendSay("This Hilla woman insisted that she was a descendant to the last Empress.") + +sm.setPlayerAsSpeaker() +sm.sendSay("That would explain the foul mood.") + +sm.setSpeakerID(1402001) +sm.sendSay("Indeed. If Shinsoo were here, she could clear this up. Unfortunately she is not. ") +sm.sendSay("Why did that woman insist on holding the conference today of all days?!") + +sm.setPlayerAsSpeaker() +sm.sendSay("It seems awfully convenient, doesn't it?") + +sm.setSpeakerID(1402001) +sm.sendSay("I hope this works out. What are we going to do if Cygnus isn't the real empress? I have devoted myself to her.") +sm.sendSay("Ereve can't split into two. It would be chaos.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Don't worry too much, Kidan. I have a feeling these things will all work out.") + +sm.setSpeakerID(1402001) +sm.sendSay("I wish I had your optimism. At any rate, this Hilla character must be quite confident to call all these people here.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Confidence is required of both truthsayers and liars. You never know. Maybe someone INCREDIBLE will come swooping in to clear this up.") + +sm.setSpeakerID(1402001) +sm.sendSay("What does that mean? Why are you talking like that?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Don't worry yourself! I'm sure I'll see you after everything is said and done.") + +sm.setSpeakerID(1402001) +sm.sendSay("Uh...okay, see you.") +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/PTtutor400_0.py b/scripts/portal/PTtutor400_0.py new file mode 100755 index 0000000..53ad2d7 --- /dev/null +++ b/scripts/portal/PTtutor400_0.py @@ -0,0 +1,3 @@ +sm.flipDialoguePlayerAsSpeaker() +sm.sendSayOkay("I'm late, I'm late! I can't be late!") +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/Pianus.py b/scripts/portal/Pianus.py new file mode 100755 index 0000000..781225f --- /dev/null +++ b/scripts/portal/Pianus.py @@ -0,0 +1,7 @@ +if sm.hasQuest(1666): + sm.warpInstanceIn(931050429) + sm.setInstanceTime(6 * 60, 230040410, 0) +else: + map = 230040420 + portal = 2 + sm.warp(map, portal) diff --git a/scripts/portal/Pinkin.py b/scripts/portal/Pinkin.py new file mode 100755 index 0000000..1b6bd78 --- /dev/null +++ b/scripts/portal/Pinkin.py @@ -0,0 +1,3 @@ +# pink bean exit portal (yes, the name would suggest otherwise) + +sm.warp(270050300, 2) \ No newline at end of file diff --git a/scripts/portal/Platformer_exit.py b/scripts/portal/Platformer_exit.py new file mode 100755 index 0000000..c7a31cd --- /dev/null +++ b/scripts/portal/Platformer_exit.py @@ -0,0 +1,5 @@ +# Maplerunner exit portal, to Henesys +# Author: shavit +HENESYS = 100000000 + +sm.warp(HENESYS) \ No newline at end of file diff --git a/scripts/portal/Populatus00.py b/scripts/portal/Populatus00.py new file mode 100755 index 0000000..72ccf51 --- /dev/null +++ b/scripts/portal/Populatus00.py @@ -0,0 +1,5 @@ +if sm.hasQuest(1662): + sm.warpInstanceIn(931050427) # Silent Crusade Papu boss map + sm.setInstanceTime(6 * 60, 220080000, 0) +else: + sm.chat("This portal needs to be scripted.") \ No newline at end of file diff --git a/scripts/portal/Portal_down.py b/scripts/portal/Portal_down.py new file mode 100755 index 0000000..9fc53aa --- /dev/null +++ b/scripts/portal/Portal_down.py @@ -0,0 +1 @@ +sm.teleportToPortal(3) \ No newline at end of file diff --git a/scripts/portal/Portal_up.py b/scripts/portal/Portal_up.py new file mode 100755 index 0000000..58e44aa --- /dev/null +++ b/scripts/portal/Portal_up.py @@ -0,0 +1 @@ +sm.teleportToPortal(8) \ No newline at end of file diff --git a/scripts/portal/Pre_stg.py b/scripts/portal/Pre_stg.py new file mode 100755 index 0000000..c7fd7ea --- /dev/null +++ b/scripts/portal/Pre_stg.py @@ -0,0 +1,30 @@ +# \\ Princess No \\ Next Map \\ 2 \\ 3 \\ 3 \\ 4 \\ + +if sm.getFieldID() == 811000200: + if sm.hasMobsInField(): + sm.chat("You must kill all monsters before proceeding.") + else: + sm.warp(811000300) +elif sm.getFieldID() == 811000300: + if sm.hasMobsInField(): + sm.chat("You must kill all monsters before proceeding.") + else: + sm.warp(811000400) +elif sm.getFieldID() == 811000400: + if sm.hasMobsInField(): + sm.chat("You must kill all monsters before proceeding.") + else: + sm.warp(811000500) +elif sm.getFieldID() == 811000500: + + sm.sendAskYesNo + + dialog = str() + + if sm.hasMobsInField(): + dialog = "Are you sure you want to leave the battlefield?" + if not sm.hasMobsInField(): + dialog = "Are you sure you want to leave the battlefield?" + if sm.sendAskYesNo(dialog): + sm.WarpInstanceOut(811000008) + diff --git a/scripts/portal/Ranmaru_ptlNPC.py b/scripts/portal/Ranmaru_ptlNPC.py new file mode 100755 index 0000000..5dbced4 --- /dev/null +++ b/scripts/portal/Ranmaru_ptlNPC.py @@ -0,0 +1,54 @@ +# Ranmaru entry NPC + +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown, Hour String + +destinations = [ + ["Normal", 120, 807300210, 20, EventType.Ranmaru, 64800000, 18], + ["Chaos", 230, 807300110, 20, EventType.CRanmaru, 129600000, 36], +] + +runsPerDay = 1 + +if sm.getFieldID() == 807300100: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to '#bSecret Altar#k' to fight \r\n#bMori Ranmaru#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Secret Altar (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bMori Ranmaru#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bMori Ranmaru#k within the past " + str(destinations[response][6]) + " Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.RANMARU_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(807300100) \ No newline at end of file diff --git a/scripts/portal/Ranmaru_ptlNPC2.py b/scripts/portal/Ranmaru_ptlNPC2.py new file mode 100755 index 0000000..d9e0d43 --- /dev/null +++ b/scripts/portal/Ranmaru_ptlNPC2.py @@ -0,0 +1,54 @@ +# Ranmaru entry NPC + +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown, Hour String + +destinations = [ + ["Normal", 120, 807300210, 20, EventType.Ranmaru, 64800000, 18], + ["Chaos", 240, 807300110, 20, EventType.CRanmaru, 129600000, 36], +] + +runsPerDay = 1 + +if sm.getFieldID() == 807300100: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + dialog = "Do you want to head to '#bSecret Altar#k' to fight \r\n#bMori Ranmaru#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Secret Altar (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bMori Ranmaru#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bMori Ranmaru#k within the past " + str(destinations[response][6]) + " Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.RANMARU_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(807300100) \ No newline at end of file diff --git a/scripts/portal/Resi_tutor11.py b/scripts/portal/Resi_tutor11.py new file mode 100755 index 0000000..3c6331d --- /dev/null +++ b/scripts/portal/Resi_tutor11.py @@ -0,0 +1,41 @@ +# Introduction quest portal for resistance +JUN_ID = 2159000 +ULRIKA_ID = 2159001 +VON_ID = 2159002 + +sm.setSpeakerID(ULRIKA_ID) +sm.sendNext("There you are, #h #! You're late. Get over here.") + +sm.setSpeakerID(VON_ID) +sm.flipDialogue() +sm.sendSay("What was the hold up? You scared or something?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Don't be ridiculous.") + +sm.setSpeakerID(JUN_ID) +sm.flipDialogue() +sm.sendSay("You're not s-s-scared at all? I am, a little b-b-bit... The grown-ups warned us never to venture into the #bVerne Mines#k... Plus, there are all those #rBlack Wings#k around, watching us, I just know it.") + +sm.setSpeakerID(VON_ID) +sm.flipDialogue() +sm.sendSay("We snuck here, Jun. No one saw us. No one's watching us, okay? Come on, when else would we have ever gotten the chance to leave #bEdelstein#k? Don't be a chicken.") + +sm.setSpeakerID(JUN_ID) +sm.flipDialogue() +sm.sendSay("But what if we get in trouble?") + +sm.setSpeakerID(ULRIKA_ID) +sm.sendSay("Jun, we're already here. If we're going to get in trouble, let's at least have some fun first. Let's play hide-and-seek!") + +sm.setPlayerAsSpeaker() +sm.sendSay("Hide and seek?") + +sm.setSpeakerID(VON_ID) +sm.flipDialogue() +sm.sendSay("Ugh, la-ame.") + +sm.setSpeakerID(ULRIKA_ID) +sm.sendSay("Don't be a brat, Von. What? Are you scared to hide all by yourself in these big, bad caves? *snicker*\r\n#h0#, since you were late, you're it. Count to 10 and then come find us. No peeking.") + +sm.warp(931000001, 1) \ No newline at end of file diff --git a/scripts/portal/Resi_tutor31.py b/scripts/portal/Resi_tutor31.py new file mode 100755 index 0000000..ab4e9ca --- /dev/null +++ b/scripts/portal/Resi_tutor31.py @@ -0,0 +1,35 @@ +# Vita | Dangerous Hide-and-Seek : Suspicious Laboratory +if "vel00=1" not in sm.getQRValue(23007): + sm.sendNext("Stay back!") + sm.sendSay("How did you get here? This place is prohibited!") + + sm.setPlayerAsSpeaker() + sm.sendSay("Who's talking? Where are you?!") + + sm.resetParam() + sm.sendSay("Look up.") + sm.addQRValue(23007, "vel00=1") + sm.reservedEffect("Effect/Direction4.img/Resistance/ClickVel") +# elif "vel00=2" not in sm.getQRValue(23007): +# sm.sendNext("My name is #bVita#k. I'm one of #rDoctor Gelimer's#k test subjects. But that's not important right now. You have to get out of here before someone sees you!") + +# sm.setPlayerAsSpeaker() +# sm.sendSay("Wait, what are you talking about? Someone's doing experiments on you?! And who's Gelimer?") + +# sm.resetParam() +# sm.sendSay("You've never heard of Doctor Gelimer, the Black Wings' mad scientist? This is his lab, where he conducts experiments...on people.") + +# sm.setPlayerAsSpeaker() +# sm.sendSay("Experiments...on people? Are you serious?") + +# sm.resetParam() +# sm.sendSay("Yes! And if he catches you here, he won't be merciful. Get out of here! Quickly!") + +# sm.setPlayerAsSpeaker() +# sm.sendSay("What? But what about you?!") + +# sm.resetParam() +# sm.sendSay("Shhh! Did you hear that? Someone's coming! It's got to be Doctor Gelimer! Oh no!") + +# sm.addQRValue(23007, "vel00=2") +# sm.warp(931000011, 0) diff --git a/scripts/portal/Resi_tutor61.py b/scripts/portal/Resi_tutor61.py new file mode 100755 index 0000000..5b45e81 --- /dev/null +++ b/scripts/portal/Resi_tutor61.py @@ -0,0 +1,32 @@ +sm.setSpeakerID(2159008) +sm.sendNext("Little rats. I say, how DARE you try to escape this place?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Shoot, we were spotted!") + +sm.setSpeakerID(2159008) +sm.sendSay("Now, now, children. Don't make this harder than it needs to be. Just walk towards me, nice and easy... Wait, you're not one of the test subjects. You're one of the townspeople, aren't you?") + +sm.setPlayerAsSpeaker() +sm.sendSay("That's right. I'm a resident of Edelstein, not a test subject. You can't boss ME around.") + +sm.setSpeakerID(2159008) +sm.sendSay("Oh my, oh my. I told them to make sure the townspeople kept their kids away from the mines... Alas, it's too late now. I can't allow you to tell anyone about this laboratory, so I guess you'll just have to stay here and...help with the experiments. *snicker*") + +sm.setPlayerAsSpeaker() +sm.sendSay("Hmph. Big words, but let's see if you can catch me first.") + +sm.setSpeakerID(2159008) +sm.sendSay("Why, you insolent, little-- Ahem, ahem, ahem. Your words don't matter. Time for me to pull out the big guns. I do hope you're ready. If not, you will suffer.") + +sm.getChr().heal(-sm.getChr().getHP()/2) +sm.setPlayerAsSpeaker() +sm.sendSay("#b(Oh no! Schiller's attack HALVED your HP! He's tougher than you anticipated.)#k") + +sm.setSpeakerID(2159008) +sm.sendSay("I say, got any more big words, kiddo? I'll make sure Gelimer performs some especially atrocious experiments on you. But I'll be nice if you come with me quiet-like.") + +sm.setSpeakerID(2159010) +sm.sendSay("Hold it right there!") + +sm.warp(931000021, 1) \ No newline at end of file diff --git a/scripts/portal/Sky_BossOut.py b/scripts/portal/Sky_BossOut.py new file mode 100755 index 0000000..6a74476 --- /dev/null +++ b/scripts/portal/Sky_BossOut.py @@ -0,0 +1,5 @@ +# id 1 (out00), field 240080500 +sm.setSpeakerID(2085002) # Crimson Sky Doorway +res = sm.sendAskYesNo("Would you like to return to the Crimson Sky Dock?") +sm.startQuest(7812) +sm.warp(240080000) diff --git a/scripts/portal/Sky_Out.py b/scripts/portal/Sky_Out.py new file mode 100755 index 0000000..4aee24e --- /dev/null +++ b/scripts/portal/Sky_Out.py @@ -0,0 +1,39 @@ +# id 1 (out00), field 240080200 +sm.setSpeakerID(2085001) # Crimson Sky Doorway +res = sm.sendAskYesNo("Do you wish to abandon the battle and leave the Crimson Sky area? To enter again, you must form a new party.") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.showFieldEffect("quest/party/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.lockInGameUI(True, False) +sm.lockInGameUI(False, True) +sm.warp(240080300) diff --git a/scripts/portal/StageOutSengo.py b/scripts/portal/StageOutSengo.py new file mode 100755 index 0000000..2b4b44d --- /dev/null +++ b/scripts/portal/StageOutSengo.py @@ -0,0 +1,2 @@ +sm.sendAskYesNo("Do you wish to leave this place?") +sm.warp(744000020) \ No newline at end of file diff --git a/scripts/portal/TD_MC_first.py b/scripts/portal/TD_MC_first.py new file mode 100755 index 0000000..06da31a --- /dev/null +++ b/scripts/portal/TD_MC_first.py @@ -0,0 +1 @@ +sm.warp(106030100) \ No newline at end of file diff --git a/scripts/portal/TD_MC_jump.py b/scripts/portal/TD_MC_jump.py new file mode 100755 index 0000000..9360ecb --- /dev/null +++ b/scripts/portal/TD_MC_jump.py @@ -0,0 +1,5 @@ +# bouncy thingy in Mushroom Castle | Shadow Cliffs +# warps to outer castle wall + +sm.warp(106020600) + diff --git a/scripts/portal/ThirdJobResi.py b/scripts/portal/ThirdJobResi.py new file mode 100755 index 0000000..bc40e0b --- /dev/null +++ b/scripts/portal/ThirdJobResi.py @@ -0,0 +1,8 @@ +# 310050100 +if sm.hasQuest(23033) or sm.hasQuest(23034) or sm.hasQuest(23035) or sm.hasQuest(23164): + sm.warp(931000200, 1) + sm.chat("Destroy the Energy Conducting Device!") + if not sm.hasMobsInField(931000200): + sm.invokeAfterDelay(500, "spawnMob", 9001032, 680, 18, False) +else: + sm.chat("This seems to be a forbidden area. Better stay away.") \ No newline at end of file diff --git a/scripts/portal/UMFieldOut.py b/scripts/portal/UMFieldOut.py new file mode 100755 index 0000000..461557d --- /dev/null +++ b/scripts/portal/UMFieldOut.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Map ID :: 913050010 +# Ereve : Conference Room of the Alliance + +sm.warpOutByUnityPortal() \ No newline at end of file diff --git a/scripts/portal/WUenterHubPortal.py b/scripts/portal/WUenterHubPortal.py new file mode 100755 index 0000000..025b137 --- /dev/null +++ b/scripts/portal/WUenterHubPortal.py @@ -0,0 +1,8 @@ +# Portal to Cross world party quest +sm.setSpeakerID(9076003) +response = sm.sendNext("What Party quest would you like to do? \r\n#L0#Moon Bunny's rice cake#l \r\n #L1#First Time together#l") + +if response == 0: + sm.warp(933000000, 0) +elif response == 1: + sm.warp(933010000, 0) \ No newline at end of file diff --git a/scripts/portal/WUexitHub.py b/scripts/portal/WUexitHub.py new file mode 100755 index 0000000..f2fc6df --- /dev/null +++ b/scripts/portal/WUexitHub.py @@ -0,0 +1,2 @@ +# Portal from Cross world party quest to party quest entrance map +sm.warp(910002000) \ No newline at end of file diff --git a/scripts/portal/Zakum05.py b/scripts/portal/Zakum05.py new file mode 100755 index 0000000..48272a5 --- /dev/null +++ b/scripts/portal/Zakum05.py @@ -0,0 +1 @@ +sm.warp(211042400) diff --git a/scripts/portal/Zakumgo.py b/scripts/portal/Zakumgo.py new file mode 100755 index 0000000..9ddaa23 --- /dev/null +++ b/scripts/portal/Zakumgo.py @@ -0,0 +1,3 @@ +# 211042200 +sm.warp(211042300, 0) +sm.dispose() diff --git a/scripts/portal/__init__.py b/scripts/portal/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/portal/amoria_out.py b/scripts/portal/amoria_out.py new file mode 100755 index 0000000..016fa41 --- /dev/null +++ b/scripts/portal/amoria_out.py @@ -0,0 +1,2 @@ +# 680000000 - Amoria -> Henesys +sm.warp(100000000) \ No newline at end of file diff --git a/scripts/portal/aranTutorAloneX.py b/scripts/portal/aranTutorAloneX.py new file mode 100755 index 0000000..c2a3ea5 --- /dev/null +++ b/scripts/portal/aranTutorAloneX.py @@ -0,0 +1,2 @@ +# 914000000 +sm.warp(914000100, 1) \ No newline at end of file diff --git a/scripts/portal/aranTutorArrow0.py b/scripts/portal/aranTutorArrow0.py new file mode 100755 index 0000000..1fe62ff --- /dev/null +++ b/scripts/portal/aranTutorArrow0.py @@ -0,0 +1,4 @@ +# 914000100 +if not "arr0=o" in sm.getQRValue(21002): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow3") + sm.addQRValue(21002, "arr0=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorArrow1.py b/scripts/portal/aranTutorArrow1.py new file mode 100755 index 0000000..8d3b0e0 --- /dev/null +++ b/scripts/portal/aranTutorArrow1.py @@ -0,0 +1,4 @@ +# 914000200 +if not "arr1=o" in sm.getQRValue(21002): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow1") + sm.addQRValue(21002, "arr1=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorArrow2.py b/scripts/portal/aranTutorArrow2.py new file mode 100755 index 0000000..64f7cef --- /dev/null +++ b/scripts/portal/aranTutorArrow2.py @@ -0,0 +1,4 @@ +# 914000200 +if not "arr2=o" in sm.getQRValue(21002): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow1") + sm.addQRValue(21002, "arr2=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorArrow3.py b/scripts/portal/aranTutorArrow3.py new file mode 100755 index 0000000..636d709 --- /dev/null +++ b/scripts/portal/aranTutorArrow3.py @@ -0,0 +1,4 @@ +# 914000220 +if not "arr3=o" in sm.getQRValue(21002): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow1") + sm.addQRValue(21002, "arr3=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorGuide0.py b/scripts/portal/aranTutorGuide0.py new file mode 100755 index 0000000..8580017 --- /dev/null +++ b/scripts/portal/aranTutorGuide0.py @@ -0,0 +1,5 @@ +# 914000200 +if not "normal=o" in sm.getQRValue(21002): + sm.showFieldEffect("aran/tutorialGuide1") + sm.systemMessage("To use a Regular Attack on monsters, press the Ctrl key.") + sm.addQRValue(21002, "normal=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorGuide1.py b/scripts/portal/aranTutorGuide1.py new file mode 100755 index 0000000..f4061fa --- /dev/null +++ b/scripts/portal/aranTutorGuide1.py @@ -0,0 +1,5 @@ +# 914000210 +if not "chain=o" in sm.getQRValue(21002): + sm.showFieldEffect("aran/tutorialGuide1") + sm.systemMessage("You can use Consecutive Attacks by pressing the Ctrl key multiple times.") + sm.addQRValue(21002, "chain=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorGuide2.py b/scripts/portal/aranTutorGuide2.py new file mode 100755 index 0000000..3eb99d1 --- /dev/null +++ b/scripts/portal/aranTutorGuide2.py @@ -0,0 +1,5 @@ +# 914000220 +if not "cmd=o" in sm.getQRValue(21002): + sm.showFieldEffect("aran/tutorialGuide3") + sm.systemMessage("You can use a Command Attack by pressing both the arrow key and the attack key after a Consecutive Attack.") + sm.addQRValue(21002, "cmd=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorLost.py b/scripts/portal/aranTutorLost.py new file mode 100755 index 0000000..d95e4fe --- /dev/null +++ b/scripts/portal/aranTutorLost.py @@ -0,0 +1,4 @@ +# 914000300 +if not "fin=o" in sm.getQRValue(21002): + sm.reservedEffect("Effect/Direction1.img/aranTutorial/ClickChild") + sm.addQRValue(21002, "fin=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorMono0.py b/scripts/portal/aranTutorMono0.py new file mode 100755 index 0000000..ecdb0aa --- /dev/null +++ b/scripts/portal/aranTutorMono0.py @@ -0,0 +1,4 @@ +# 914000000 +if not "mo1=o" in sm.getQRValue(21002): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/legendBalloon1") + sm.addQRValue(21002, "mo1=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorMono1.py b/scripts/portal/aranTutorMono1.py new file mode 100755 index 0000000..f299f80 --- /dev/null +++ b/scripts/portal/aranTutorMono1.py @@ -0,0 +1,5 @@ +# 914000000 +if not "mo2=o" in sm.getQRValue(21002): + sm.playSound("Aran/balloon") + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/legendBalloon2") + sm.addQRValue(21002, "mo2=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorMono2.py b/scripts/portal/aranTutorMono2.py new file mode 100755 index 0000000..c4411c1 --- /dev/null +++ b/scripts/portal/aranTutorMono2.py @@ -0,0 +1,4 @@ +# 914000000 +if not "mo3=o" in sm.getQRValue(21002): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/legendBalloon3") + sm.addQRValue(21002, "mo3=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorMono3.py b/scripts/portal/aranTutorMono3.py new file mode 100755 index 0000000..1cd59cb --- /dev/null +++ b/scripts/portal/aranTutorMono3.py @@ -0,0 +1,4 @@ +# 914000200 +if not "mo4=o" in sm.getQRValue(21002): + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/legendBalloon6") + sm.addQRValue(21002, "mo4=o") \ No newline at end of file diff --git a/scripts/portal/aranTutorOut1.py b/scripts/portal/aranTutorOut1.py new file mode 100755 index 0000000..7677531 --- /dev/null +++ b/scripts/portal/aranTutorOut1.py @@ -0,0 +1,7 @@ +# 914000100 +sm.removeSkill(20000017) +sm.removeSkill(20000018) +sm.giveSkill(20000017) +sm.giveSkill(20000018) +sm.setQRValue(21002, "arr0=o;mo1=o;mo2=o;mo3=o", False) +sm.warp(914000200, 1) \ No newline at end of file diff --git a/scripts/portal/aranTutorOut2.py b/scripts/portal/aranTutorOut2.py new file mode 100755 index 0000000..9d4a56a --- /dev/null +++ b/scripts/portal/aranTutorOut2.py @@ -0,0 +1,7 @@ +# 914000200 +sm.killMobs() +sm.removeSkill(20000014) +sm.removeSkill(20000015) +sm.giveSkill(20000014) +sm.giveSkill(20000015) +sm.warp(914000210, 1) \ No newline at end of file diff --git a/scripts/portal/aranTutorOut3.py b/scripts/portal/aranTutorOut3.py new file mode 100755 index 0000000..cdf3409 --- /dev/null +++ b/scripts/portal/aranTutorOut3.py @@ -0,0 +1,5 @@ +# 914000210 +sm.killMobs() +sm.removeSkill(20000016) +sm.giveSkill(20000016) +sm.warp(914000220, 1) \ No newline at end of file diff --git a/scripts/portal/arcanaCave_next.py b/scripts/portal/arcanaCave_next.py new file mode 100755 index 0000000..60103eb --- /dev/null +++ b/scripts/portal/arcanaCave_next.py @@ -0,0 +1,4 @@ +# id 1 (next00), field 940200320 +sm.startQuest(34476) +sm.completeQuestNoCheck(34476) +sm.warp(450005000) diff --git a/scripts/portal/arcana_landing2.py b/scripts/portal/arcana_landing2.py new file mode 100755 index 0000000..7aa11e0 --- /dev/null +++ b/scripts/portal/arcana_landing2.py @@ -0,0 +1,3 @@ +# id 2 (pt_landing2), field 940200206 +sm.startQuest(34454) +sm.warp(450005100) diff --git a/scripts/portal/arcane_water.py b/scripts/portal/arcane_water.py new file mode 100755 index 0000000..fef4a83 --- /dev/null +++ b/scripts/portal/arcane_water.py @@ -0,0 +1,2 @@ +# id 1 (PCS99), field 450001310 +sm.playSound("Sound/Foot.img/water/2", 200) diff --git a/scripts/portal/arisan_out.py b/scripts/portal/arisan_out.py new file mode 100755 index 0000000..09c1f87 --- /dev/null +++ b/scripts/portal/arisan_out.py @@ -0,0 +1,12 @@ +# Created by MechAviv +# Map ID :: 749080900 +# Alishan : Leshan + +sm.setSpeakerID(0) +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.setSpeakerType(8) +if sm.sendAskAccept("Hmm... I wonder where this goes? Only one way to find out!"): + sm.warp(100000000) \ No newline at end of file diff --git a/scripts/portal/ark_mPark_Next.py b/scripts/portal/ark_mPark_Next.py new file mode 100755 index 0000000..050f258 --- /dev/null +++ b/scripts/portal/ark_mPark_Next.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Map ID :: 940205100 +# Ravaged Base Remnants : Ravaged Eastern Base 1 + +# Unhandled User Effect [PlayPortalSE] Packet: 0D +# Unhandled Message [47] Packet: 2F 04 00 00 00 B8 58 08 00 00 00 00 00 23 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 35 31 39 34 58 68 08 00 00 00 00 00 27 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 35 31 39 34 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0B 00 6D 6F 62 5F 6B 69 6C 6C 3D 32 32 D0 22 11 00 00 00 00 00 63 04 00 00 18 02 B0 0D 0A 78 8B D6 D4 01 0D 00 66 69 65 6C 64 5F 65 6E 74 65 72 3D 31 +sm.warp(940205200, 0) diff --git a/scripts/portal/aswan_in.py b/scripts/portal/aswan_in.py new file mode 100755 index 0000000..f72bce3 --- /dev/null +++ b/scripts/portal/aswan_in.py @@ -0,0 +1,2 @@ +# Enter azwan through Sahel(The Burning Sands) +sm.warp(262010000) diff --git a/scripts/portal/babyPigOut.py b/scripts/portal/babyPigOut.py new file mode 100755 index 0000000..11e25eb --- /dev/null +++ b/scripts/portal/babyPigOut.py @@ -0,0 +1 @@ +sm.warpInstanceOut(100030300, 0) \ No newline at end of file diff --git a/scripts/portal/back_Ludi.py b/scripts/portal/back_Ludi.py new file mode 100755 index 0000000..ecf6e22 --- /dev/null +++ b/scripts/portal/back_Ludi.py @@ -0,0 +1,3 @@ +# 223000000 +sm.warp(220000000, 12) +sm.dispose() diff --git a/scripts/portal/back_hillah.py b/scripts/portal/back_hillah.py new file mode 100755 index 0000000..2658973 --- /dev/null +++ b/scripts/portal/back_hillah.py @@ -0,0 +1 @@ +sm.warpInstanceOut(262030300) \ No newline at end of file diff --git a/scripts/portal/balogTemple.py b/scripts/portal/balogTemple.py new file mode 100755 index 0000000..d9ea4be --- /dev/null +++ b/scripts/portal/balogTemple.py @@ -0,0 +1,3 @@ +# Bottom Portal | Cursed Temple - Another Door + +sm.warp(105100000, 2) \ No newline at end of file diff --git a/scripts/portal/balog_end.py b/scripts/portal/balog_end.py new file mode 100755 index 0000000..21cf964 --- /dev/null +++ b/scripts/portal/balog_end.py @@ -0,0 +1,5 @@ +# balrog win map exit portal + +from net.swordie.ms.constants import BossConstants + +sm.warpInstanceOut(BossConstants.BALROG_ENTRY_MAP) \ No newline at end of file diff --git a/scripts/portal/banbanGoInside.py b/scripts/portal/banbanGoInside.py new file mode 100755 index 0000000..2b1d8ce --- /dev/null +++ b/scripts/portal/banbanGoInside.py @@ -0,0 +1,2 @@ +if chr.getField().hasProperty("enablevonbonportal") and chr.getField().getProperty("enablevonbonportal"): + sm.warp(105200520) \ No newline at end of file diff --git a/scripts/portal/bedroom_out.py b/scripts/portal/bedroom_out.py new file mode 100755 index 0000000..a2dde75 --- /dev/null +++ b/scripts/portal/bedroom_out.py @@ -0,0 +1,2 @@ +if sm.hasQuest(2570): + sm.warp(120000101, 0) \ No newline at end of file diff --git a/scripts/portal/berry_out.py b/scripts/portal/berry_out.py new file mode 100755 index 0000000..35ff341 --- /dev/null +++ b/scripts/portal/berry_out.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# ID :: [865010200] +# Commerci Republic : Berry +sm.setSpeakerID(9010000) +sm.flipDialogue() +sm.setSpeakerType(8) +if sm.sendAskYesNo("Would you like to leave the Commerci Republic?"): + sm.dispose() \ No newline at end of file diff --git a/scripts/portal/bh_bossOut.py b/scripts/portal/bh_bossOut.py new file mode 100755 index 0000000..13fc0e7 --- /dev/null +++ b/scripts/portal/bh_bossOut.py @@ -0,0 +1,39 @@ + +# Chaos Lotus Reward / Leave + +BLACK_HEAVEN_CORE_ENTRANCE = 350060300 +BLACK_HEAVEN_CORE_LAST_HARD = 350060600 + +absoLabCoinID = 4310156 + +if sm.hasMobsInField(chr.getFieldID()) or (sm.getFieldID() != 350060600 and sm.getFieldID() != 350060900): + response = sm.sendAskYesNo("Do you wish to leave the battlefield and abandon your allies?") + if response: + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + sm.dispose() + +if not sm.canHold(absoLabCoinID): + sm.sendSayOkay("Please make room in your inventory to receive your #bAbsoLab Coins.") + sm.dispose() + +if not sm.hasMobsInField(chr.getFieldID()): + #sm.doLog() + + if chr.getParty().getMembers().size() == 1: + sm.giveItem(absoLabCoinID, 72) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 2: + sm.giveItem(absoLabCoinID, 64) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 3: + sm.giveItem(absoLabCoinID, 58) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 4: + sm.giveItem(absoLabCoinID, 58) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 5: + sm.giveItem(absoLabCoinID, 55) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 6: + sm.giveItem(absoLabCoinID, 52) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) \ No newline at end of file diff --git a/scripts/portal/bh_bossOutN.py b/scripts/portal/bh_bossOutN.py new file mode 100755 index 0000000..e47b3ad --- /dev/null +++ b/scripts/portal/bh_bossOutN.py @@ -0,0 +1,40 @@ + +# Normal Lotus Reward / Leave + +BLACK_HEAVEN_CORE_ENTRANCE = 350060300 +BLACK_HEAVEN_CORE_LAST_HARD = 350060600 + +absoLabCoinID = 4310156 + + +if sm.hasMobsInField(chr.getFieldID()) or (sm.getFieldID() != 350060600 and sm.getFieldID() != 350060900): + response = sm.sendAskYesNo("Do you wish to leave the battlefield and abandon your allies?") + if response: + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + sm.dispose() + +if not sm.canHold(absoLabCoinID): + sm.sendSayOkay("Please make room in your inventory to receive your #bAbsoLab Coins.") + sm.dispose() + +if not sm.hasMobsInField(chr.getFieldID()): + #sm.doLog() + if chr.getParty().getMembers().size() == 1: + sm.giveItem(absoLabCoinID, 25) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 2: + sm.giveItem(absoLabCoinID, 22) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 3: + sm.giveItem(absoLabCoinID, 20) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 4: + sm.giveItem(absoLabCoinID, 20) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 5: + sm.giveItem(absoLabCoinID, 19) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + if chr.getParty().getMembers().size() == 6: + sm.giveItem(absoLabCoinID, 18) + sm.warpInstanceOut(BLACK_HEAVEN_CORE_ENTRANCE) + diff --git a/scripts/portal/bh_bossinmap1.py b/scripts/portal/bh_bossinmap1.py new file mode 100755 index 0000000..83cd7fa --- /dev/null +++ b/scripts/portal/bh_bossinmap1.py @@ -0,0 +1 @@ +sm.teleportToPortal(2) \ No newline at end of file diff --git a/scripts/portal/bh_bossinmap1n.py b/scripts/portal/bh_bossinmap1n.py new file mode 100755 index 0000000..83cd7fa --- /dev/null +++ b/scripts/portal/bh_bossinmap1n.py @@ -0,0 +1 @@ +sm.teleportToPortal(2) \ No newline at end of file diff --git a/scripts/portal/bh_bossinmap2.py b/scripts/portal/bh_bossinmap2.py new file mode 100755 index 0000000..9fc53aa --- /dev/null +++ b/scripts/portal/bh_bossinmap2.py @@ -0,0 +1 @@ +sm.teleportToPortal(3) \ No newline at end of file diff --git a/scripts/portal/bh_bossinmap2n.py b/scripts/portal/bh_bossinmap2n.py new file mode 100755 index 0000000..9fc53aa --- /dev/null +++ b/scripts/portal/bh_bossinmap2n.py @@ -0,0 +1 @@ +sm.teleportToPortal(3) \ No newline at end of file diff --git a/scripts/portal/bh_bossinmap3.py b/scripts/portal/bh_bossinmap3.py new file mode 100755 index 0000000..7f473b8 --- /dev/null +++ b/scripts/portal/bh_bossinmap3.py @@ -0,0 +1 @@ +sm.teleportToPortal(5) \ No newline at end of file diff --git a/scripts/portal/bh_bossinmap3n.py b/scripts/portal/bh_bossinmap3n.py new file mode 100755 index 0000000..7f473b8 --- /dev/null +++ b/scripts/portal/bh_bossinmap3n.py @@ -0,0 +1 @@ +sm.teleportToPortal(5) \ No newline at end of file diff --git a/scripts/portal/bh_bossinmap4.py b/scripts/portal/bh_bossinmap4.py new file mode 100755 index 0000000..f87f00d --- /dev/null +++ b/scripts/portal/bh_bossinmap4.py @@ -0,0 +1 @@ +sm.teleportToPortal(4) \ No newline at end of file diff --git a/scripts/portal/bh_bossinmap4n.py b/scripts/portal/bh_bossinmap4n.py new file mode 100755 index 0000000..f87f00d --- /dev/null +++ b/scripts/portal/bh_bossinmap4n.py @@ -0,0 +1 @@ +sm.teleportToPortal(4) \ No newline at end of file diff --git a/scripts/portal/bhb1_sc1.py b/scripts/portal/bhb1_sc1.py new file mode 100755 index 0000000..df4e542 --- /dev/null +++ b/scripts/portal/bhb1_sc1.py @@ -0,0 +1,3 @@ +# 350060160 +sm.teleportInField(2) #portal Id +sm.dispose() diff --git a/scripts/portal/bhb1_sc2.py b/scripts/portal/bhb1_sc2.py new file mode 100755 index 0000000..1774c44 --- /dev/null +++ b/scripts/portal/bhb1_sc2.py @@ -0,0 +1,2 @@ +sm.teleportInField(3) #portal Id +sm.dispose() diff --git a/scripts/portal/bhb1_sc3.py b/scripts/portal/bhb1_sc3.py new file mode 100755 index 0000000..7f3efe5 --- /dev/null +++ b/scripts/portal/bhb1_sc3.py @@ -0,0 +1,4 @@ +# 350060160 + +sm.teleportInField(5) #Portal Id +sm.dispose() diff --git a/scripts/portal/bhb1_sc4.py b/scripts/portal/bhb1_sc4.py new file mode 100755 index 0000000..2efdcd3 --- /dev/null +++ b/scripts/portal/bhb1_sc4.py @@ -0,0 +1,2 @@ +sm.teleportInField(4) #Portal Id +sm.dispose() diff --git a/scripts/portal/bhb_scbossOut.py b/scripts/portal/bhb_scbossOut.py new file mode 100755 index 0000000..3481f4e --- /dev/null +++ b/scripts/portal/bhb_scbossOut.py @@ -0,0 +1,3 @@ +# 105200310 (+ other RA bosses) +if sm.sendAskYesNo("Would you like to leave?"): + sm.warpInstanceOut(350060000) # Entrance Core diff --git a/scripts/portal/bhb_scenario.py b/scripts/portal/bhb_scenario.py new file mode 100755 index 0000000..76e235d --- /dev/null +++ b/scripts/portal/bhb_scenario.py @@ -0,0 +1,10 @@ +# 350060000 Portal at Gelimer's Lab | Used to open an NPC dialogue that will warp the player inside the Lotus Boss + +FirstBossMap = 350060160 + +sm.setSpeakerID(1540496) # Lotus Hologram +response = sm.sendAskYesNo("Are you sure you want to battle me?") + +if response: + if sm.checkParty(): + sm.warpInstanceIn(FirstBossMap, True) diff --git a/scripts/portal/blackHeaven_boss.py b/scripts/portal/blackHeaven_boss.py new file mode 100755 index 0000000..03ab92c --- /dev/null +++ b/scripts/portal/blackHeaven_boss.py @@ -0,0 +1,54 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Normal", 230, 350060700, 5, EventType.Lotus, 216000000], + ["Chaos", 240, 350060400, 5, EventType.CLotus, 216000000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 350060300: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(9075005) + + dialog = "Do you want to head to the '#bBlack Heaven Core#k' to fight \r\n#bLotus#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Black Heaven Core (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bLotus#k.") + sm.dispose() + + elif response != 99 and sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bLotus#k within the past 60 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.LOTUS_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) +else: + if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(807300100) \ No newline at end of file diff --git a/scripts/portal/blackHeaven_boss_back.py b/scripts/portal/blackHeaven_boss_back.py new file mode 100755 index 0000000..d68db42 --- /dev/null +++ b/scripts/portal/blackHeaven_boss_back.py @@ -0,0 +1 @@ +sm.warp(310070490, 4) \ No newline at end of file diff --git a/scripts/portal/blackbean_portal.py b/scripts/portal/blackbean_portal.py new file mode 100755 index 0000000..f83bc30 --- /dev/null +++ b/scripts/portal/blackbean_portal.py @@ -0,0 +1,2 @@ +if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.WarpInstanceOut(120040000) \ No newline at end of file diff --git a/scripts/portal/blackdracoout.py b/scripts/portal/blackdracoout.py new file mode 100755 index 0000000..e002e6f --- /dev/null +++ b/scripts/portal/blackdracoout.py @@ -0,0 +1,3 @@ +# 272000600 +sm.warp(272000500, 2) +sm.dispose() diff --git a/scripts/portal/bmbossfield_out.py b/scripts/portal/bmbossfield_out.py new file mode 100755 index 0000000..ade53a8 --- /dev/null +++ b/scripts/portal/bmbossfield_out.py @@ -0,0 +1,4 @@ +response = sm.sendAskYesNo("If you leave now, your whole party will be warped out. Are you sure you want to leave?") + +if response: + sm.warpInstanceOut(450012500) \ No newline at end of file diff --git a/scripts/portal/book.py b/scripts/portal/book.py new file mode 100755 index 0000000..9f1e63d --- /dev/null +++ b/scripts/portal/book.py @@ -0,0 +1,5 @@ +# id 5 (book3), field 701220350 +sm.setSpeakerType(8) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Huh? This is the #r#t4034637##k") diff --git a/scripts/portal/bossBlackMage_pt.py b/scripts/portal/bossBlackMage_pt.py new file mode 100755 index 0000000..72ef470 --- /dev/null +++ b/scripts/portal/bossBlackMage_pt.py @@ -0,0 +1,40 @@ +# Damien entry NPC + +# mode, req level, map, death count +destinations = [ + ["Normal", 245, 450013100, 10], +] + +def is_party_eligible(reqlevel, party): + # TODO: check prequest + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() + +dialog = "Do you want to head to the #rTemple of Darkness#k to fight the Black Mage??\r\n" + +for i in range(len(destinations)): + dialog += "#L%d#Go to the Temple of Darkness (%s Mode). (Lv. %d+)#l\r\n" % (i, destinations[i][0], destinations[i][1]) + +dialog += "#L99#Never mind." +response = sm.sendSay(dialog) + +if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + +elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face the Black Mage.") + +elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.warpInstanceIn(destinations[response][2], True) + sm.setDeathCount(destinations[response][3]) + + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level %d." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/portal/cannon_tuto_06.py b/scripts/portal/cannon_tuto_06.py new file mode 100755 index 0000000..4a7f4ff --- /dev/null +++ b/scripts/portal/cannon_tuto_06.py @@ -0,0 +1,13 @@ +MONKEY = 1096003 + +sm.lockInGameUI(False) +sm.lockInGameUI(True) +sm.forcedInput(4) + +sm.removeEscapeButton() + +sm.setSpeakerID(MONKEY) +sm.reservedEffect("Effect/Direction4.img/cannonshooter/face00") +sm.sendNext("Ook! Ook!") + +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/portal/cannon_tuto_07.py b/scripts/portal/cannon_tuto_07.py new file mode 100755 index 0000000..b49011f --- /dev/null +++ b/scripts/portal/cannon_tuto_07.py @@ -0,0 +1,5 @@ +sm.lockInGameUI(True) +sm.spawnNpc(1096012, -51, -97) +sm.showNpcSpecialActionByTemplateId(1096012, "summon", 0) +sm.forcedInput(0) +sm.forcedInput(2) \ No newline at end of file diff --git a/scripts/portal/cannon_tuto_09.py b/scripts/portal/cannon_tuto_09.py new file mode 100755 index 0000000..953552c --- /dev/null +++ b/scripts/portal/cannon_tuto_09.py @@ -0,0 +1,14 @@ +CUTTER = 1096005 + +sm.removeEscapeButton() +sm.setSpeakerID(CUTTER) +sm.sendNext("All right! Let's go!") + +sm.startQuest(2572) +sm.removeNpc(1096012) +sm.playSound("cannonshooter/fire", 100) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/flying/0", 7000, 0, 0, -2, -2, False, 0) +sm.showEffect("Effect/Direction4.img/effect/cannonshooter/flying1/0", 7000, 0, 0, -2, -2, False, 0) +sm.sendDelay(800) + +sm.warp(912060300, 0) \ No newline at end of file diff --git a/scripts/portal/cannon_tuto_10.py b/scripts/portal/cannon_tuto_10.py new file mode 100755 index 0000000..16d3ee0 --- /dev/null +++ b/scripts/portal/cannon_tuto_10.py @@ -0,0 +1 @@ +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/portal/captinsg00.py b/scripts/portal/captinsg00.py new file mode 100755 index 0000000..7dfef41 --- /dev/null +++ b/scripts/portal/captinsg00.py @@ -0,0 +1,3 @@ +answer = sm.sendAskYesNo("Would you like to fight Cap Latanica?") +if answer: + sm.warpInstanceIn(541010100) \ No newline at end of file diff --git a/scripts/portal/check_25856.py b/scripts/portal/check_25856.py new file mode 100755 index 0000000..947f07a --- /dev/null +++ b/scripts/portal/check_25856.py @@ -0,0 +1,3 @@ +# id 1 (exit00), field 940010020 +sm.startQuest(25913) +sm.warp(400030000) diff --git a/scripts/portal/check_Portal0.py b/scripts/portal/check_Portal0.py new file mode 100755 index 0000000..8b4997b --- /dev/null +++ b/scripts/portal/check_Portal0.py @@ -0,0 +1,3 @@ +# 272000100 +sm.warp(272000200, 1) +sm.dispose() diff --git a/scripts/portal/check_Portal1.py b/scripts/portal/check_Portal1.py new file mode 100755 index 0000000..cd7787a --- /dev/null +++ b/scripts/portal/check_Portal1.py @@ -0,0 +1,3 @@ +# 272000200 +sm.warp(272000300, 1) +sm.dispose() diff --git a/scripts/portal/check_Portal2.py b/scripts/portal/check_Portal2.py new file mode 100755 index 0000000..2fcaed6 --- /dev/null +++ b/scripts/portal/check_Portal2.py @@ -0,0 +1,3 @@ +# 272000300 +sm.warp(272000310, 1) +sm.dispose() diff --git a/scripts/portal/check_Portal3.py b/scripts/portal/check_Portal3.py new file mode 100755 index 0000000..184e7d1 --- /dev/null +++ b/scripts/portal/check_Portal3.py @@ -0,0 +1,3 @@ +# 272000310 +sm.warp(272000400, 1) +sm.dispose() diff --git a/scripts/portal/check_Portal5.py b/scripts/portal/check_Portal5.py new file mode 100755 index 0000000..7c751ed --- /dev/null +++ b/scripts/portal/check_Portal5.py @@ -0,0 +1,3 @@ +# 272000500 +sm.warp(272000600, 1) +sm.dispose() diff --git a/scripts/portal/check_Portal6.py b/scripts/portal/check_Portal6.py new file mode 100755 index 0000000..ddc7ae7 --- /dev/null +++ b/scripts/portal/check_Portal6.py @@ -0,0 +1,3 @@ +# 272010000 +sm.warp(272010100, 1) +sm.dispose() diff --git a/scripts/portal/check_eNum.py b/scripts/portal/check_eNum.py new file mode 100755 index 0000000..d16d04b --- /dev/null +++ b/scripts/portal/check_eNum.py @@ -0,0 +1,3 @@ +# 272020100 +sm.warp(272020110, 1) +sm.dispose() diff --git a/scripts/portal/check_q20828.py b/scripts/portal/check_q20828.py new file mode 100755 index 0000000..645d845 --- /dev/null +++ b/scripts/portal/check_q20828.py @@ -0,0 +1 @@ +# ? \ No newline at end of file diff --git a/scripts/portal/collision_1820_1.py b/scripts/portal/collision_1820_1.py new file mode 100755 index 0000000..5b5bd1a --- /dev/null +++ b/scripts/portal/collision_1820_1.py @@ -0,0 +1,7 @@ +# id 3 (coll01), field 867201820 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bGood job! ") +sm.sendSay("#bStay right behind me!") +sm.createQuestWithQRValue(64088, "coll1=1") diff --git a/scripts/portal/collision_1820_2.py b/scripts/portal/collision_1820_2.py new file mode 100755 index 0000000..a293615 --- /dev/null +++ b/scripts/portal/collision_1820_2.py @@ -0,0 +1,13 @@ +# id 4 (coll02), field 867201820 +sm.lockInGameUI(True, False) +sm.createQuestWithQRValue(64088, "coll1=1;coll2=1") +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(This might be too far for a jump.)") +sm.sendDelay(2000) +sm.sendNext("#bWe can probably bounce across on that. ") +sm.spawnNpc(9400580, 1690, -500) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.lockInGameUI(False, True) diff --git a/scripts/portal/collision_1820_3.py b/scripts/portal/collision_1820_3.py new file mode 100755 index 0000000..7a101b7 --- /dev/null +++ b/scripts/portal/collision_1820_3.py @@ -0,0 +1,18 @@ +# id 5 (coll03), field 867201820 +sm.lockInGameUI(True, False) +sm.createQuestWithQRValue(64088, "coll1=1;coll2=1;coll3=1") +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, do what I did! Jump on that!") +sm.moveNpcByTemplateId(9400580, True, 50, 100) +sm.sendDelay(500) +sm.setMapTaggedObjectVisible("alika01", True, 1, 0) +sm.sendDelay(2000) +sm.setMapTaggedObjectVisible("alika01", False, 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face3#Haaaaa! ") +sm.setParam(57) +sm.sendSay("#bGood job! ") +sm.lockInGameUI(False, True) diff --git a/scripts/portal/collision_1820_4.py b/scripts/portal/collision_1820_4.py new file mode 100755 index 0000000..4d09b3a --- /dev/null +++ b/scripts/portal/collision_1820_4.py @@ -0,0 +1,19 @@ +# id 6 (coll04), field 867201820 +sm.lockInGameUI(True, False) +sm.createQuestWithQRValue(64088, "coll1=1;coll2=1;coll3=1;coll4=1") +sm.sendDelay(900) +sm.setMapTaggedObjectVisible("alika02", True, 1, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face3#Hyaaaaa! ") +sm.sendDelay(1500) +sm.setMapTaggedObjectVisible("alika02", False, 0, 0) +sm.spawnNpc(9400580, 135, -690) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.sendNext("#face1#The wind is here, too... ") +sm.sendSay("#face2#I guess we have the winds on our side! ") +sm.moveNpcByTemplateId(9400580, True, 150, 30) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/portal/collision_1820_5.py b/scripts/portal/collision_1820_5.py new file mode 100755 index 0000000..7923f57 --- /dev/null +++ b/scripts/portal/collision_1820_5.py @@ -0,0 +1,93 @@ +# id 7 (coll05), field 867201820 +sm.lockInGameUI(True, False) +sm.createQuestWithQRValue(64088, "coll1=1;coll2=1;coll3=1;coll4=1;coll5=1") +sm.createQuestWithQRValue(64088, "coll1=1;coll2=1;coll3=1;coll4=1;coll5=1;chk1=1") +sm.spawnNpc(9400580, -340, -585) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400676, 200, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 120, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 50, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -30, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -100, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, -180, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -280, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400675, -350, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400674, -430, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400641, -500, 400) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400675, -560, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400641, -620, 400) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400667, -800, 400) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400672, -850, 400) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400674, -910, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400675, -970, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400666, -1050, 400) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.spawnNpc(9400674, -1120, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, -1200, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400672, -1250, 400) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400668, -1400, 400) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400642, False, 200, 10) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400675, False, 200, 10) +sm.moveNpcByTemplateId(9400674, False, 200, 10) +sm.moveNpcByTemplateId(9400641, False, 200, 10) +sm.moveNpcByTemplateId(9400675, False, 200, 10) +sm.moveNpcByTemplateId(9400641, False, 200, 10) +sm.moveNpcByTemplateId(9400667, False, 200, 10) +sm.moveNpcByTemplateId(9400672, False, 200, 10) +sm.moveNpcByTemplateId(9400674, False, 200, 10) +sm.moveNpcByTemplateId(9400675, False, 200, 10) +sm.moveNpcByTemplateId(9400666, False, 200, 10) +sm.moveNpcByTemplateId(9400674, False, 200, 10) +sm.moveNpcByTemplateId(9400676, False, 200, 10) +sm.moveNpcByTemplateId(9400672, False, 200, 10) +sm.moveNpcByTemplateId(9400668, False, 200, 10) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#What in the world is that... ") +sm.sendDelay(1500) +sm.setParam(57) +sm.sendNext("#bWhere would they be going? ") +sm.setParam(37) +sm.sendSay("#face5##h0#... ") +sm.sendDelay(1500) +sm.sendNext("#face5#Do you see those ribbons? ") +sm.sendDelay(2000) +sm.sendNext("#face5#Are they headed to... ") +sm.setParam(57) +sm.sendSay("#b...No way. ") +sm.setParam(37) +sm.sendSay("#face5#Svarti? ") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bWait a sec. Let me go look! ") +sm.lockInGameUI(False, True) +sm.setMapTaggedObjectVisible("up00", True, 0, 0) diff --git a/scripts/portal/collision_D5.py b/scripts/portal/collision_D5.py new file mode 100755 index 0000000..2a2f3e5 --- /dev/null +++ b/scripts/portal/collision_D5.py @@ -0,0 +1,3 @@ +# id 11 (Colldir05), field 867200400 +sm.completeQuestNoCheck(64023) +sm.warp(867200405) diff --git a/scripts/portal/collision_E2.py b/scripts/portal/collision_E2.py new file mode 100755 index 0000000..fddac63 --- /dev/null +++ b/scripts/portal/collision_E2.py @@ -0,0 +1,25 @@ +# id 3 (pcs02), field 867200310 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400667, 1350, 76) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.moveNpcByTemplateId(9400667, True, 450, 200) +sm.sendDelay(500) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400667, "jumpattack", 2160) +sm.sendDelay(2500) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/burning1", 128) +sm.setMapTaggedObjectVisible("fire1", True, 0, 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400667, "hit", 200) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400667, "ear", 1680) +sm.sendDelay(1700) +sm.flipNpcByTemplateId(9400667, False) +sm.moveNpcByTemplateId(9400667, False, 100, 300) +sm.sendDelay(500) +sm.setMapTaggedObjectVisible("guide1", True, 0, 0) +sm.sendDelay(500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64015, "chk1=1;chk2=1;slaDir=1;chk3=1;chk4=0;chk5=0;chk6=0;chk7=0") diff --git a/scripts/portal/comerz_potal00.py b/scripts/portal/comerz_potal00.py new file mode 100755 index 0000000..c15dc98 --- /dev/null +++ b/scripts/portal/comerz_potal00.py @@ -0,0 +1,3 @@ +# 865000000 +sm.warp(865020000, 3) +sm.dispose() diff --git a/scripts/portal/commerce_move.py b/scripts/portal/commerce_move.py new file mode 100755 index 0000000..e28094e --- /dev/null +++ b/scripts/portal/commerce_move.py @@ -0,0 +1 @@ +sm.teleportInField(0, 0) \ No newline at end of file diff --git a/scripts/portal/connect1.py b/scripts/portal/connect1.py new file mode 100755 index 0000000..00cb399 --- /dev/null +++ b/scripts/portal/connect1.py @@ -0,0 +1 @@ +sm.openNpc(9075308) \ No newline at end of file diff --git a/scripts/portal/connect2.py b/scripts/portal/connect2.py new file mode 100755 index 0000000..5c9f26f --- /dev/null +++ b/scripts/portal/connect2.py @@ -0,0 +1 @@ +sm.openNpc(9075309) \ No newline at end of file diff --git a/scripts/portal/connect3.py b/scripts/portal/connect3.py new file mode 100755 index 0000000..fad075a --- /dev/null +++ b/scripts/portal/connect3.py @@ -0,0 +1 @@ +sm.openNpc(9075310) \ No newline at end of file diff --git a/scripts/portal/connect4.py b/scripts/portal/connect4.py new file mode 100755 index 0000000..3cbc65d --- /dev/null +++ b/scripts/portal/connect4.py @@ -0,0 +1 @@ +sm.openNpc(9075311) \ No newline at end of file diff --git a/scripts/portal/connect5.py b/scripts/portal/connect5.py new file mode 100755 index 0000000..5cc9308 --- /dev/null +++ b/scripts/portal/connect5.py @@ -0,0 +1 @@ +sm.openNpc(9075312) \ No newline at end of file diff --git a/scripts/portal/connect6.py b/scripts/portal/connect6.py new file mode 100755 index 0000000..15a590e --- /dev/null +++ b/scripts/portal/connect6.py @@ -0,0 +1 @@ +sm.openNpc(9075313) \ No newline at end of file diff --git a/scripts/portal/connect7.py b/scripts/portal/connect7.py new file mode 100755 index 0000000..b2b5dbf --- /dev/null +++ b/scripts/portal/connect7.py @@ -0,0 +1 @@ +sm.openNpc(9075314) \ No newline at end of file diff --git a/scripts/portal/connect8.py b/scripts/portal/connect8.py new file mode 100755 index 0000000..b2b5dbf --- /dev/null +++ b/scripts/portal/connect8.py @@ -0,0 +1 @@ +sm.openNpc(9075314) \ No newline at end of file diff --git a/scripts/portal/connect9.py b/scripts/portal/connect9.py new file mode 100755 index 0000000..1296b80 --- /dev/null +++ b/scripts/portal/connect9.py @@ -0,0 +1 @@ +sm.openNpc(9075315) \ No newline at end of file diff --git a/scripts/portal/connect_UIOpen.py b/scripts/portal/connect_UIOpen.py new file mode 100755 index 0000000..c3c30a2 --- /dev/null +++ b/scripts/portal/connect_UIOpen.py @@ -0,0 +1,3 @@ +# Azwan refuge zone entrance + +sm.openNpc(2183003) \ No newline at end of file diff --git a/scripts/portal/contactDragon.py b/scripts/portal/contactDragon.py new file mode 100755 index 0000000..678403d --- /dev/null +++ b/scripts/portal/contactDragon.py @@ -0,0 +1,2 @@ +#todo effects +sm.warp(900010200, 0) \ No newline at end of file diff --git a/scripts/portal/crane_MR.py b/scripts/portal/crane_MR.py new file mode 100755 index 0000000..dcdc0a7 --- /dev/null +++ b/scripts/portal/crane_MR.py @@ -0,0 +1,3 @@ +# 200090300 +sm.warp(250000100, 0) +sm.dispose() diff --git a/scripts/portal/crane_SS.py b/scripts/portal/crane_SS.py new file mode 100755 index 0000000..3a72477 --- /dev/null +++ b/scripts/portal/crane_SS.py @@ -0,0 +1,4 @@ +# 200090310 + +sm.warp(200000141, 0) +sm.dispose() diff --git a/scripts/portal/createTower.py b/scripts/portal/createTower.py new file mode 100755 index 0000000..0d8b5c0 --- /dev/null +++ b/scripts/portal/createTower.py @@ -0,0 +1,2 @@ +# id 9 (create01), field 867200330 +sm.setMapTaggedObjectVisible("hideRope01", True, 0, 0) diff --git a/scripts/portal/crimsonNext.py b/scripts/portal/crimsonNext.py new file mode 100755 index 0000000..cf5de33 --- /dev/null +++ b/scripts/portal/crimsonNext.py @@ -0,0 +1,5 @@ +if sm.hasQuest(31258): + sm.warpInstanceIn(301070010, 4) + sm.spawnMob(8148012, 138, 38, False) +else: + sm.warp(301070000, 4) diff --git a/scripts/portal/crimsonPZ.py b/scripts/portal/crimsonPZ.py new file mode 100755 index 0000000..b0d3512 --- /dev/null +++ b/scripts/portal/crimsonPZ.py @@ -0,0 +1 @@ +sm.warp(301060000, 1) diff --git a/scripts/portal/crimsonWood2.py b/scripts/portal/crimsonWood2.py new file mode 100755 index 0000000..95336fc --- /dev/null +++ b/scripts/portal/crimsonWood2.py @@ -0,0 +1 @@ +sm.warp(301020000, 1) diff --git a/scripts/portal/crimsonWood3.py b/scripts/portal/crimsonWood3.py new file mode 100755 index 0000000..80f9d88 --- /dev/null +++ b/scripts/portal/crimsonWood3.py @@ -0,0 +1 @@ +sm.warp(301030000, 1) diff --git a/scripts/portal/crimsonWood4.py b/scripts/portal/crimsonWood4.py new file mode 100755 index 0000000..36da0a4 --- /dev/null +++ b/scripts/portal/crimsonWood4.py @@ -0,0 +1 @@ +sm.warp(301040000, 1) diff --git a/scripts/portal/crossHunterAgit.py b/scripts/portal/crossHunterAgit.py new file mode 100755 index 0000000..b8a11e9 --- /dev/null +++ b/scripts/portal/crossHunterAgit.py @@ -0,0 +1 @@ +sm.warp(931050500, 1) \ No newline at end of file diff --git a/scripts/portal/cyg_tutoPortal.py b/scripts/portal/cyg_tutoPortal.py new file mode 100755 index 0000000..c19d1ce --- /dev/null +++ b/scripts/portal/cyg_tutoPortal.py @@ -0,0 +1,8 @@ +# 130030101 - Forest of Beginnings -> Physical Training Yard +KIMU = 1102004 + +if sm.hasQuest(20827): # What's Next? + sm.warp(130030102) +else: + sm.setSpeakerID(KIMU) + sm.sendSayOkay("Proceed with the quest #bWhat's Next#k to continue.") \ No newline at end of file diff --git a/scripts/portal/cygnusre01.py b/scripts/portal/cygnusre01.py new file mode 100755 index 0000000..8b9f4f1 --- /dev/null +++ b/scripts/portal/cygnusre01.py @@ -0,0 +1,3 @@ +# 100000200 - Henesys Park -> Pet-Walking Road +sm.warp(100000202, 5) +sm.dispose() diff --git a/scripts/portal/davy_exit.py b/scripts/portal/davy_exit.py new file mode 100755 index 0000000..e6a32ab --- /dev/null +++ b/scripts/portal/davy_exit.py @@ -0,0 +1,6 @@ +ENTRANCE_MAP = 251010404 + +if sm.getFieldID() == ENTRANCE_MAP: + sm.warp(910002000) +else: + sm.chat("unscripted portal davy_exit") \ No newline at end of file diff --git a/scripts/portal/davy_next0.py b/scripts/portal/davy_next0.py new file mode 100755 index 0000000..e6c5861 --- /dev/null +++ b/scripts/portal/davy_next0.py @@ -0,0 +1,5 @@ +# 925100000 - First Map of the Lord Pirate PQ +if sm.getReactorQuantity() > 7 and sm.hasMobsInField(): + sm.chat("The portal is not opened.") +else: + sm.warpInstanceIn(sm.getFieldID() + 100, 0, True) diff --git a/scripts/portal/davy_next1.py b/scripts/portal/davy_next1.py new file mode 100755 index 0000000..84dd4ad --- /dev/null +++ b/scripts/portal/davy_next1.py @@ -0,0 +1,7 @@ +from net.swordie.ms.constants import GameConstants + +# 925100100 - Second Map of the Lord Pirate PQ +if int(sm.getQRValue(GameConstants.LORD_PIRATE_QUEST)) < 3: + sm.chat("The portal is not opened.") +else: + sm.warpInstanceIn(sm.getFieldID() + 100, 0, True) \ No newline at end of file diff --git a/scripts/portal/davy_next2.py b/scripts/portal/davy_next2.py new file mode 100755 index 0000000..2a51162 --- /dev/null +++ b/scripts/portal/davy_next2.py @@ -0,0 +1,5 @@ +# 925100200 - Third Map of the Lord Pirate PQ +if sm.getReactorQuantity() > 8 or sm.hasMobsInField(): # due to invisible reactor hidden on the map + sm.chat("The portal is not opened.") +else: + sm.warpInstanceIn(sm.getFieldID() + 100, 0, True) diff --git a/scripts/portal/davy_next3.py b/scripts/portal/davy_next3.py new file mode 100755 index 0000000..d3a220f --- /dev/null +++ b/scripts/portal/davy_next3.py @@ -0,0 +1,5 @@ +# 925100300 - Fourth Map of the Lord Pirate PQ +if sm.getReactorQuantity() > 8 or sm.hasMobsInField(): # due to invisible reactor hidden on the map + sm.chat("The portal is not opened.") +else: + sm.warpInstanceIn(sm.getFieldID() + 100, 0, True) diff --git a/scripts/portal/davy_next4.py b/scripts/portal/davy_next4.py new file mode 100755 index 0000000..0200ee2 --- /dev/null +++ b/scripts/portal/davy_next4.py @@ -0,0 +1,5 @@ +# 925100400 - Fifth Map of the Lord Pirate PQ +if sm.getReactorQuantity() > 1: + sm.chat("The portal is not opened.") +else: + sm.warpInstanceIn(sm.getFieldID() + 100, 0, True) #Boss Map of Lord Pirate PQ diff --git a/scripts/portal/demonOutCheck.py b/scripts/portal/demonOutCheck.py new file mode 100755 index 0000000..e78581a --- /dev/null +++ b/scripts/portal/demonOutCheck.py @@ -0,0 +1 @@ +sm.warpInstanceOut(310010000, 0) \ No newline at end of file diff --git a/scripts/portal/dir01_867201540.py b/scripts/portal/dir01_867201540.py new file mode 100755 index 0000000..f93f992 --- /dev/null +++ b/scripts/portal/dir01_867201540.py @@ -0,0 +1,17 @@ +# id 2 (dir01), field 867201540 +sm.sendDelay(250) +sm.forcedMove(True, 150) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bIt seems too steep... to go down... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#The wind is blowing on that side again! I think we just need to jump down to that tree. ") +sm.setParam(57) +sm.sendNext("#bAlika... are you going to be all right? ") +sm.setParam(37) +sm.sendSay("#face1#I'll just hang onto your back, #h0#! ") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64078, "chk1=2") diff --git a/scripts/portal/dir02_867201540.py b/scripts/portal/dir02_867201540.py new file mode 100755 index 0000000..e69f47d --- /dev/null +++ b/scripts/portal/dir02_867201540.py @@ -0,0 +1,18 @@ +# id 3 (dir02), field 867201540 +sm.lockInGameUI(True, False) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#What do we do now? ") +sm.sendDelay(1000) +sm.forcedMove(True, 140) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bHold on tight! ") +sm.forcedInput(5) +sm.createQuestWithQRValue(64078, "chk1=3") +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.warp(867201550) diff --git a/scripts/portal/dir_1560_1.py b/scripts/portal/dir_1560_1.py new file mode 100755 index 0000000..1ce7fcf --- /dev/null +++ b/scripts/portal/dir_1560_1.py @@ -0,0 +1,3 @@ +# id 1 (dir01), field 867201560 +sm.lockInGameUI(True, False) +sm.sendDelay(500) diff --git a/scripts/portal/dir_1760.py b/scripts/portal/dir_1760.py new file mode 100755 index 0000000..3a14392 --- /dev/null +++ b/scripts/portal/dir_1760.py @@ -0,0 +1,24 @@ +# id 2 (collision), field 867201760 +sm.lockInGameUI(True, False) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.forcedMove(True, 200) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(This may be too gross for Alika to hold onto.) ") +sm.sendDelay(250) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(2000) +sm.forcedFlip(True) +sm.sendNext("#b(Maybe just use it for now.) ") +sm.forcedFlip(True) +sm.forcedMove(True, 100) +sm.createQuestWithQRValue(64084, "chk1=1") +sm.sendDelay(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/portal/dir_867201800.py b/scripts/portal/dir_867201800.py new file mode 100755 index 0000000..4fad08d --- /dev/null +++ b/scripts/portal/dir_867201800.py @@ -0,0 +1,13 @@ +# id 3 (collision), field 867201800 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bI feel like we're seeing more and more traps. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0##h0#! There! ") +sm.sendNext("#face0#Thankfully, it looks pretty much untouched by monsters. ") +sm.sendSay("#face0#Should we go in? ") +sm.setParam(57) +sm.sendSay("#bYeah, let's go. ") +sm.startQuest(64085) diff --git a/scripts/portal/dir_867201810.py b/scripts/portal/dir_867201810.py new file mode 100755 index 0000000..8ea9e5c --- /dev/null +++ b/scripts/portal/dir_867201810.py @@ -0,0 +1,6 @@ +# id 1 (dir01), field 867201803 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Gasp... ") diff --git a/scripts/portal/dojang_exit.py b/scripts/portal/dojang_exit.py new file mode 100755 index 0000000..74ed0e1 --- /dev/null +++ b/scripts/portal/dojang_exit.py @@ -0,0 +1,11 @@ +# Leaving Mu Lung Dojo +oldFieldID = sm.getReturnField() +if oldFieldID == 0 or oldFieldID == 910000000: + sm.chat("(Portal) Cannot find your previous map ID, warping to Henesys.") + map = 100000000 + portal = 0 +else: + map = oldFieldID + portal = 0 +sm.warp(map, portal) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/dojang_next.py b/scripts/portal/dojang_next.py new file mode 100755 index 0000000..64071fc --- /dev/null +++ b/scripts/portal/dojang_next.py @@ -0,0 +1,2 @@ +sm.teleportToPortal(1) +sm.dispose() diff --git a/scripts/portal/dojang_up.py b/scripts/portal/dojang_up.py new file mode 100755 index 0000000..c38530a --- /dev/null +++ b/scripts/portal/dojang_up.py @@ -0,0 +1,13 @@ +from time import sleep + +currentMap = sm.getFieldID() +if sm.hasMobsInField(): + sm.chat("Kill all monsters first.") +else: + #add delay to prevent bypassing + sleep(2) + if currentMap == 925076300: + sm.warpInstanceOut(925020003, 1) + elif currentMap / 10000 == 92507: + sm.warp(currentMap+100, 0) + #chr.setDojoPoints(current_dojoPoints+100) diff --git a/scripts/portal/donghwa_out.py b/scripts/portal/donghwa_out.py new file mode 100755 index 0000000..79f35ed --- /dev/null +++ b/scripts/portal/donghwa_out.py @@ -0,0 +1,7 @@ +# Russian Roulette Exit Portal + +DIZZY_NPC = 9000155 # some roulette-looking npc + +sm.setSpeakerID(DIZZY_NPC) +if sm.sendAskYesNo("Are you sure you want to leave? You won't be able to return!"): + sm.warpNoReturn(sm.getPreviousFieldID()) \ No newline at end of file diff --git a/scripts/portal/downtown2015.py b/scripts/portal/downtown2015.py new file mode 100755 index 0000000..99a7008 --- /dev/null +++ b/scripts/portal/downtown2015.py @@ -0,0 +1,4 @@ +# 230030200 + +sm.warp(224000001, 0) +sm.dispose() diff --git a/scripts/portal/dracoout.py b/scripts/portal/dracoout.py new file mode 100755 index 0000000..0f713d2 --- /dev/null +++ b/scripts/portal/dracoout.py @@ -0,0 +1,2 @@ +# Leafre station exit towrads leafre station entrance +sm.warp(240000100, 2) \ No newline at end of file diff --git a/scripts/portal/dragoneyes.py b/scripts/portal/dragoneyes.py new file mode 100755 index 0000000..972d5fc --- /dev/null +++ b/scripts/portal/dragoneyes.py @@ -0,0 +1,4 @@ +# Portal & Starting Quest for Evan Intro | Dream World: Dream Forest (900010200) +# Author: Tiger + +# TODO: Not really sure what goes here. diff --git a/scripts/portal/dropPortalGiantBoss.py b/scripts/portal/dropPortalGiantBoss.py new file mode 100755 index 0000000..7e18b8e --- /dev/null +++ b/scripts/portal/dropPortalGiantBoss.py @@ -0,0 +1,4 @@ +map = 863010100 +portal = 0 +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/drop_out.py b/scripts/portal/drop_out.py new file mode 100755 index 0000000..c2d037b --- /dev/null +++ b/scripts/portal/drop_out.py @@ -0,0 +1,5 @@ +# id 3 (out02), field 301050200 +sm.setSpeakerType(8) +sm.setParam(16) +res = sm.sendAskYesNo("You seem to have other priorities. Maybe you should come back to this later.") +sm.warp(301000000) diff --git a/scripts/portal/ds_tuto_2_0.py b/scripts/portal/ds_tuto_2_0.py new file mode 100755 index 0000000..3547860 --- /dev/null +++ b/scripts/portal/ds_tuto_2_0.py @@ -0,0 +1,44 @@ +ARKARIUM = 2159309 + +sm.completeQuestNoRewards(23204) +sm.deleteQuest(23204) +sm.lockInGameUI(True) +sm.forcedInput(2) +sm.sendDelay(10) + +sm.forcedInput(0) + +sm.removeEscapeButton() +sm.setSpeakerID(ARKARIUM) +sm.sendNext("Oh, look, it's #h0#? How was your trip? I hope it was worth disobeying your orders. And how was your family? Are they looking well? Heh heh heh...") + +sm.setPlayerAsSpeaker() +sm.sendSay("...I don't have time for you, #r#p2159309##k. Move, or I will MAKE you move.") + +sm.setSpeakerID(ARKARIUM) +sm.sendSay("Tsk, tsk... Leaving without approval, disobeying orders... And that rebellious look... No, I don't think I'll allow you to see the Black Mage.") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/14", 2000) +sm.forcedAction(332, 0) +sm.playSound("demonSlayer/31111003", 100) +sm.showEffect("Skill/3111.img/skill/31111003/effect", 0, 0, 0) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "teleportation", 0) +sm.sendDelay(570) + +sm.removeNpc(ARKARIUM) +sm.sendDelay(1200) + +sm.spawnNpc(ARKARIUM, 180, 50) +sm.showNpcSpecialActionByTemplateId(ARKARIUM, "summon", 0) +sm.sendDelay(360) + +sm.setSpeakerID(ARKARIUM) +sm.sendNext("Really? This is treason, you know! Are you really so weak that losing your family drives you to this? Pathetic!") + +sm.showBalloonMsg("Effect/Direction6.img/effect/tuto/balloonMsg1/15", 2000) +sm.forcedInput(1) +sm.dispose() + + + + diff --git a/scripts/portal/ds_tuto_home.py b/scripts/portal/ds_tuto_home.py new file mode 100755 index 0000000..369505e --- /dev/null +++ b/scripts/portal/ds_tuto_home.py @@ -0,0 +1,8 @@ +if sm.hasQuest(23201) or sm.hasQuestCompleted(23201): + sm.dispose() +elif not sm.hasQuest(23200) and not sm.hasQuestCompleted(23200): + sm.avatarOriented("Effect/OnUserEff.img/normalEffect/demonSlayer/chatBalloon1") + sm.startQuestNoCheck(23200) +elif sm.hasQuest(23200): + sm.avatarOriented("Effect/OnUserEff.img/normalEffect/demonSlayer/chatBalloon0") +sm.dispose(); \ No newline at end of file diff --git a/scripts/portal/dubl2TutoPT.py b/scripts/portal/dubl2TutoPT.py new file mode 100755 index 0000000..60408b2 --- /dev/null +++ b/scripts/portal/dubl2TutoPT.py @@ -0,0 +1,2 @@ +if sm.hasQuest(2600): + sm.warp(103050910, 0) \ No newline at end of file diff --git a/scripts/portal/dublportal100.py b/scripts/portal/dublportal100.py new file mode 100755 index 0000000..ad0d300 --- /dev/null +++ b/scripts/portal/dublportal100.py @@ -0,0 +1,3 @@ +# 103050100 +sm.warp(103050200, 4) +sm.dispose() diff --git a/scripts/portal/east00_866101000.py b/scripts/portal/east00_866101000.py new file mode 100755 index 0000000..a451db7 --- /dev/null +++ b/scripts/portal/east00_866101000.py @@ -0,0 +1,3 @@ +# 106030302 +if sm.hasQuest(59002): + sm.warpInstanceIn(866106000, 0) diff --git a/scripts/portal/end_cygtuto.py b/scripts/portal/end_cygtuto.py new file mode 100755 index 0000000..3adefa0 --- /dev/null +++ b/scripts/portal/end_cygtuto.py @@ -0,0 +1,6 @@ +sm.startQuest(20838) +sm.completeQuest(20838) +sm.startQuest(20839) +sm.giveExp(3500) +sm.warp(130030006, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/enterAchter.py b/scripts/portal/enterAchter.py new file mode 100755 index 0000000..c69cd35 --- /dev/null +++ b/scripts/portal/enterAchter.py @@ -0,0 +1,5 @@ +map = 100000201 +portal = 4 + +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/enterBlackMine.py b/scripts/portal/enterBlackMine.py new file mode 100755 index 0000000..b6a2e4f --- /dev/null +++ b/scripts/portal/enterBlackMine.py @@ -0,0 +1,3 @@ +# Portal from Dry Road: Road to the Mine 2 to Dry Road: Mine Entrance +sm.warp(310040200, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/enterBlackWing.py b/scripts/portal/enterBlackWing.py new file mode 100755 index 0000000..211bfed --- /dev/null +++ b/scripts/portal/enterBlackWing.py @@ -0,0 +1,8 @@ +# 310040200 + +BLACKWING_HAT = 1003134 + +if sm.hasItem(BLACKWING_HAT): + sm.warp(310050000, 1) +else: + sm.chat("You need a disguise to enter.") diff --git a/scripts/portal/enterDangerHair.py b/scripts/portal/enterDangerHair.py new file mode 100755 index 0000000..41a50bf --- /dev/null +++ b/scripts/portal/enterDangerHair.py @@ -0,0 +1,3 @@ +# 223010100 +sm.warp(310000003, 1) +sm.dispose() diff --git a/scripts/portal/enterDisguise5.py b/scripts/portal/enterDisguise5.py new file mode 100755 index 0000000..2b1213b --- /dev/null +++ b/scripts/portal/enterDisguise5.py @@ -0,0 +1,3 @@ +# 130010200 - Training forest III -> Entrance to the drill hall +sm.warp(130020000, 0) +sm.dispose() diff --git a/scripts/portal/enterDollcave.py b/scripts/portal/enterDollcave.py new file mode 100755 index 0000000..14f0c5a --- /dev/null +++ b/scripts/portal/enterDollcave.py @@ -0,0 +1,4 @@ +# 102010100 + +sm.chatRed("There seems to be a mysterious presence blocking you from entering.") +sm.dispose() diff --git a/scripts/portal/enterDublTuto.py b/scripts/portal/enterDublTuto.py new file mode 100755 index 0000000..abe4bf5 --- /dev/null +++ b/scripts/portal/enterDublTuto.py @@ -0,0 +1 @@ +sm.warp(103050500, 4)# quest 2605 \ No newline at end of file diff --git a/scripts/portal/enterHRpt.py b/scripts/portal/enterHRpt.py new file mode 100755 index 0000000..43db9b9 --- /dev/null +++ b/scripts/portal/enterHRpt.py @@ -0,0 +1,5 @@ +# 222020000 - Ludi tower: Helios Tower (CoK 3rd job portal) +if not sm.hasQuest(20881) and sm.isComplete(20880): # 3rd job quest + sm.chat("Only knights looking to job advance to the third job may enter here.") +else: + sm.warpInstanceIn(922030400, 0, False) diff --git a/scripts/portal/enterHonnouji.py b/scripts/portal/enterHonnouji.py new file mode 100755 index 0000000..76aafb7 --- /dev/null +++ b/scripts/portal/enterHonnouji.py @@ -0,0 +1,8 @@ +# Portal in Field: Momijigaoka : Momijigahara 2 (807020100) +# Used for Kanna's quest -> Honnou-ji Infiltration 1 & 2 (57436, 57437) +# Author: Tiger + +if sm.hasQuest(57436) or sm.hasQuest(57437): # Honnou-ji Infiltration 1 & 2 + sm.warpInstanceIn(807050200) # Honnou-ji : Honnou-ji Eastern Wall +else: + chr.chatMessage("You may not enter right now.") diff --git a/scripts/portal/enterInfo.py b/scripts/portal/enterInfo.py new file mode 100755 index 0000000..dd462d3 --- /dev/null +++ b/scripts/portal/enterInfo.py @@ -0,0 +1,4 @@ +# Created by MechAviv +# ID :: [104000000] +# Lith Harbor : Lith Harbor +sm.warp(104000004, 1) \ No newline at end of file diff --git a/scripts/portal/enterMCave.py b/scripts/portal/enterMCave.py new file mode 100755 index 0000000..8760e3d --- /dev/null +++ b/scripts/portal/enterMCave.py @@ -0,0 +1,11 @@ +# 101020400 +if sm.hasQuest(21201): + sm.warpInstanceIn(914021000, 1) + sm.addQRValue(21203, "0") + sm.setInstanceTime(15*60) +if sm.hasQuest(21302): + sm.warpInstanceIn(914022100, 0) + sm.setQRValue(21203, "1", False) + sm.setInstanceTime(20*60) +else: + chr.chatMessage("The mirror is blocking you. You may not enter at this stage.") \ No newline at end of file diff --git a/scripts/portal/enterMagiclibrar.py b/scripts/portal/enterMagiclibrar.py new file mode 100755 index 0000000..11a62c3 --- /dev/null +++ b/scripts/portal/enterMagiclibrar.py @@ -0,0 +1,3 @@ +# 101000000 +sm.warp(101000003, 8) +sm.dispose() diff --git a/scripts/portal/enterNewWeapon1.py b/scripts/portal/enterNewWeapon1.py new file mode 100755 index 0000000..2cb5801 --- /dev/null +++ b/scripts/portal/enterNewWeapon1.py @@ -0,0 +1,5 @@ +# 931000310 +sm.warp(931000320, 0) +if not sm.hasMobsInField: + sm.spawnMob(9001035, -344, 16, False) +sm.dispose() diff --git a/scripts/portal/enterNewWeapon2.py b/scripts/portal/enterNewWeapon2.py new file mode 100755 index 0000000..def0b35 --- /dev/null +++ b/scripts/portal/enterNewWeapon2.py @@ -0,0 +1,4 @@ +# 931000310 +sm.warp(931000321, 0) +if not sm.hasMobsInField: + sm.spawnMob(9001035, -344, 16, False) diff --git a/scripts/portal/enterNewWeapon3.py b/scripts/portal/enterNewWeapon3.py new file mode 100755 index 0000000..0749253 --- /dev/null +++ b/scripts/portal/enterNewWeapon3.py @@ -0,0 +1,4 @@ +# 931000310 +sm.warp(931000322, 0) +if not sm.hasMobsInField: + sm.spawnMob(9001035, -344, 16, False) diff --git a/scripts/portal/enterNewWeapon4.py b/scripts/portal/enterNewWeapon4.py new file mode 100755 index 0000000..629c55f --- /dev/null +++ b/scripts/portal/enterNewWeapon4.py @@ -0,0 +1,5 @@ +# 931000310 +sm.warp(931000323, 0) +if not sm.hasMobsInField: + sm.spawnMob(9001035, -344, 16, False) +sm.dispose() diff --git a/scripts/portal/enterPTjob2.py b/scripts/portal/enterPTjob2.py new file mode 100755 index 0000000..ccf14a0 --- /dev/null +++ b/scripts/portal/enterPTjob2.py @@ -0,0 +1,5 @@ +if sm.hasMobsInField(): + sm.chat("Remove the lock first.") +else: + sm.warp(915010001, 1) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/enterPort.py b/scripts/portal/enterPort.py new file mode 100755 index 0000000..680fe01 --- /dev/null +++ b/scripts/portal/enterPort.py @@ -0,0 +1,5 @@ +if sm.hasQuest(21301): + sm.warpInstanceIn(914022000, 1) + sm.setInstanceTime(10*60, 914022000) +else: + sm.warp(140020300, 1) \ No newline at end of file diff --git a/scripts/portal/enterRIpt.py b/scripts/portal/enterRIpt.py new file mode 100755 index 0000000..a6f2f7c --- /dev/null +++ b/scripts/portal/enterRIpt.py @@ -0,0 +1 @@ +sm.warp(140000000, 7) \ No newline at end of file diff --git a/scripts/portal/enterResiTR.py b/scripts/portal/enterResiTR.py new file mode 100755 index 0000000..8420868 --- /dev/null +++ b/scripts/portal/enterResiTR.py @@ -0,0 +1,21 @@ +# Resistance Training Room Entrance +ELEVATOR_CONTROL = 2151007 +FERDI = 2151010 +preQs = [23103, 23104, 23105, 23106, 23118] +preQsDemon = [23231, 23232, 23233, 23234] +maps = [310010100, 310010200, 310010300, 310010400, 931000400] + +sm.setSpeakerID(ELEVATOR_CONTROL) +selection = sm.sendNext("An elevator that will take you to your desired training room. Choose the floor you'd like to go to.\r\n\r\n#b#L0#Underground 2nd Floor Training Room A#l\r\n#L1#Underground 3rd Floor Training Room B#l\r\n#L2#Underground 4th Floor Training Room C#l\r\n#L3#Underground 5th Floor Training Room D#l\r\n#L4#Underground 6th Floor Training Room E#l") + +if selection == 4 and sm.hasQuest(preQs[selection]): + # TODO: can you come in here anymore after turning in quest? + sm.warpInstanceIn(maps[selection], False) + sm.setInstanceTime(5*60) + sm.dispose() + +if (not sm.hasQuest(preQs[selection]) and not sm.hasQuestCompleted(preQs[selection]) and not sm.hasQuest(preQsDemon[selection]) and not sm.hasQuestCompleted(preQsDemon[selection])): + sm.setSpeakerID(2151010) + sm.sendSayOkay("You are not at the right level to go there yet.") + sm.dispose() +sm.warp(maps[selection], 1) diff --git a/scripts/portal/enterRider.py b/scripts/portal/enterRider.py new file mode 100755 index 0000000..e5157c9 --- /dev/null +++ b/scripts/portal/enterRider.py @@ -0,0 +1,4 @@ +# El Nath - Icy Cold Field +# Map ID: 211050000 + +sm.warp(921110000) # warps to some kinda jump quest.. TODO finish it lol \ No newline at end of file diff --git a/scripts/portal/enterRienFirst.py b/scripts/portal/enterRienFirst.py new file mode 100755 index 0000000..b92b820 --- /dev/null +++ b/scripts/portal/enterRienFirst.py @@ -0,0 +1,5 @@ +# 140010000 +if sm.hasQuestCompleted(21014): + sm.warp(140000000, 3) +else: + sm.warp(140000000, 1) \ No newline at end of file diff --git a/scripts/portal/enterSecJobResi.py b/scripts/portal/enterSecJobResi.py new file mode 100755 index 0000000..aee5688 --- /dev/null +++ b/scripts/portal/enterSecJobResi.py @@ -0,0 +1,25 @@ +# 223010100 + +WATER_TRADE = 23121 + +if sm.hasQuest(WATER_TRADE): + sm.warpInstanceIn(931000420, 1, False) + sm.setInstanceTime(10*60) + sm.chatScript("Thieves have attacked! Defeat all the thieves and then go see Ace the Pilot.") + # sm.waitForMobDeath() + # sm.chatScript("You've taken out all the thieves. Talk to Ace.") + sm.dispose() + +if sm.hasQuest(23023) or sm.hasQuest(23024) or sm.hasQuest(23025): # 2nd job advancement for Resistance + sm.warpInstanceIn(931000100, 0) + sm.setInstanceTime(10*60) + sm.dispose() + +if sm.hasQuest(23162): + sm.warpInstanceIn(931000101, 0) + sm.setInstanceTime(10*60) + sm.chatScript("The Schiller has appeared. Let's talk to him.") + sm.chat("The Schiller has appeared. Let's talk to him.") + sm.dispose() + +sm.warp(310000010, 1) diff --git a/scripts/portal/enterSecondDH.py b/scripts/portal/enterSecondDH.py new file mode 100755 index 0000000..fc53c93 --- /dev/null +++ b/scripts/portal/enterSecondDH.py @@ -0,0 +1,6 @@ +# 130020000 - Entrance to Drill Hall +if not sm.hasQuest(20871) and not sm.hasQuest(20872) and not sm.hasQuest(20873) and not sm.hasQuest(20874) and not sm.hasQuest(20875): # KoC 2nd JobAdv Quests + sm.chat("Sorry, only knights looking to job advance to the second job may enter here.") +else: + sm.warp(913001000, 0) +sm.dispose() diff --git a/scripts/portal/enterTheCrack.py b/scripts/portal/enterTheCrack.py new file mode 100755 index 0000000..40a65d3 --- /dev/null +++ b/scripts/portal/enterTheCrack.py @@ -0,0 +1,3 @@ +# 270000000 +sm.warp(272000000, 1) +sm.dispose() diff --git a/scripts/portal/enter_AA2R.py b/scripts/portal/enter_AA2R.py new file mode 100755 index 0000000..e67bf64 --- /dev/null +++ b/scripts/portal/enter_AA2R.py @@ -0,0 +1,7 @@ +# id 1 (enter00), field 867201990 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +res = sm.sendNext("#face4#We need to get on Pete and get out of here right now!#b\r\n#L0# Let's leave now.#l\r\n#L1# Let's make repairs and then leave.#l") +sm.warp(867202000) diff --git a/scripts/portal/enter_bellDoor.py b/scripts/portal/enter_bellDoor.py new file mode 100755 index 0000000..d54bf5a --- /dev/null +++ b/scripts/portal/enter_bellDoor.py @@ -0,0 +1,32 @@ +answer = sm.sendSay("Where would you like to go to?#b \r\n#L0#Velderoth's Sitting Room#l\r\n#L1#Continue to Magnus#l\r\n#L2#Forge a Dragon King Relic\r\n#L3#Nevermind#l") + +# sm.chat("Response was " + str(response) + "\r\rAnswer was " + str(answer)) +if answer == 0: + if sm.getParty() is None: + sm.sendSay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSay("Please have your party leader enter if you wish to face Velderoth.") + elif sm.checkParty(): + sm.warpInstanceIn(401053100, True) +elif answer == 1: + sm.warp(401060000) +elif answer == 2: + if not sm.hasItem(4033403): + sm.sendSayOkay("You do not possess a #v4033403# #b#z4033403##k.") + sm.dispose() + elif not sm.hasItem(4033404): + sm.sendSayOkay("You do not possess a #v4033404# #b#z4033404##k.") + sm.dispose() + elif not sm.hasItem(4033405): + sm.sendSayOkay("You do not possess a #v4033405# #b#z4033405##k.") + sm.dispose() + elif not sm.canHold(4033406): + sm.sendSayOkay("Please make room in your inventory first.") + sm.dispose() + else: + sm.consumeItem(4033403) + sm.consumeItem(4033404) + sm.consumeItem(4033405) + sm.giveItem(4033406) + sm.chat("You have gained a Dragon King Relic") + sm.dispose() diff --git a/scripts/portal/enter_bossBlackMage.py b/scripts/portal/enter_bossBlackMage.py new file mode 100755 index 0000000..6d33540 --- /dev/null +++ b/scripts/portal/enter_bossBlackMage.py @@ -0,0 +1 @@ +sm.setDeathCount(12) \ No newline at end of file diff --git a/scripts/portal/enter_boss_CN.py b/scripts/portal/enter_boss_CN.py new file mode 100755 index 0000000..a655bda --- /dev/null +++ b/scripts/portal/enter_boss_CN.py @@ -0,0 +1 @@ +sm.warpInstanceIn(701220610, 1) \ No newline at end of file diff --git a/scripts/portal/enter_bosswait.py b/scripts/portal/enter_bosswait.py new file mode 100755 index 0000000..2ebc78c --- /dev/null +++ b/scripts/portal/enter_bosswait.py @@ -0,0 +1,2 @@ +if "clear" in sm.getQRValue(62038): + sm.warp(701220601, 2) \ No newline at end of file diff --git a/scripts/portal/enter_citadel.py b/scripts/portal/enter_citadel.py new file mode 100755 index 0000000..2b918bb --- /dev/null +++ b/scripts/portal/enter_citadel.py @@ -0,0 +1,3 @@ +# 401050000 +sm.warp(401050001, 0) +sm.dispose() diff --git a/scripts/portal/enter_earth00.py b/scripts/portal/enter_earth00.py new file mode 100755 index 0000000..3928231 --- /dev/null +++ b/scripts/portal/enter_earth00.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [120000101] +# Nautilus : Navigation Room + +sm.systemMessage("You need a 'Warp Card' to use the warp machine.") diff --git a/scripts/portal/enter_georg.py b/scripts/portal/enter_georg.py new file mode 100755 index 0000000..7f86680 --- /dev/null +++ b/scripts/portal/enter_georg.py @@ -0,0 +1,3 @@ +# 141050200 - Riena Strait boss +if sm.checkParty(): + sm.warpInstanceIn(141050300, True) \ No newline at end of file diff --git a/scripts/portal/enter_magnusDoor.py b/scripts/portal/enter_magnusDoor.py new file mode 100755 index 0000000..31f2634 --- /dev/null +++ b/scripts/portal/enter_magnusDoor.py @@ -0,0 +1,57 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Normal", 160, 401060200, 20, EventType.NMagnus, 64800000], + ["Hard", 220, 401060100, 20, EventType.HMagnus, 64800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 401060000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(3001032) + + dialog = "Do you want to head to '#bTyrant's Throne Room#k' to fight \r\n#bMagnus#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to Tyrant's Throne Room (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bMagnus#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bMagnus#k within the past 18 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif not sm.hasItem(4033406): + sm.sendSayOkay("You do not possess a #b#v 4033406 # #z 4033406 ##k.") + sm.dispose() + + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.MAGNUS_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + sm.consumeItem(4033406) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) \ No newline at end of file diff --git a/scripts/portal/enter_mastema.py b/scripts/portal/enter_mastema.py new file mode 100755 index 0000000..8f0bd22 --- /dev/null +++ b/scripts/portal/enter_mastema.py @@ -0,0 +1,7 @@ +if sm.hasQuest(23210): + sm.warpInstanceIn(931050100, False) +elif sm.hasQuest(23213): + sm.addQRValue(23206, "1") + sm.warp(931050110, 1) +elif sm.hasQuestCompleted(23213): + sm.warp(931050110, 1) \ No newline at end of file diff --git a/scripts/portal/enter_retakeHQ.py b/scripts/portal/enter_retakeHQ.py new file mode 100755 index 0000000..35c7358 --- /dev/null +++ b/scripts/portal/enter_retakeHQ.py @@ -0,0 +1,3 @@ +# 401000002 - Heliseum : Transitional Dimensional Door +sm.warp(401000000, 1) +sm.dispose() diff --git a/scripts/portal/enter_skyGate.py b/scripts/portal/enter_skyGate.py new file mode 100755 index 0000000..538bd13 --- /dev/null +++ b/scripts/portal/enter_skyGate.py @@ -0,0 +1 @@ +sm.warp(240080000) \ No newline at end of file diff --git a/scripts/portal/enter_treDoor.py b/scripts/portal/enter_treDoor.py new file mode 100755 index 0000000..cc09460 --- /dev/null +++ b/scripts/portal/enter_treDoor.py @@ -0,0 +1,10 @@ +sm.setSpeakerID(3001027) +answer = sm.sendSay("Are you ready to face #bTreglow#k?#b\r\n#L0#Enter Treglow's Laboratory#l") + +if answer == 0: + if sm.getParty() is None: + sm.sendSay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSay("Please have your party leader enter if you wish to face Treglow.") + elif sm.checkParty(): + sm.warpInstanceIn(401052200, True) \ No newline at end of file diff --git a/scripts/portal/enter_victorDoor.py b/scripts/portal/enter_victorDoor.py new file mode 100755 index 0000000..04a6ef3 --- /dev/null +++ b/scripts/portal/enter_victorDoor.py @@ -0,0 +1,10 @@ +sm.setSpeakerID(3001025) +answer = sm.sendSay("Are you ready to face #bVictor#k?#b\r\n#L0#Enter Victor's Workshop#l") + +if answer == 0: + if sm.getParty() is None: + sm.sendSay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSay("Please have your party leader enter if you wish to face Victor.") + elif sm.checkParty(): + sm.warpInstanceIn(401051200, True) \ No newline at end of file diff --git a/scripts/portal/ep1_escortGiveup.py b/scripts/portal/ep1_escortGiveup.py new file mode 100755 index 0000000..bba3937 --- /dev/null +++ b/scripts/portal/ep1_escortGiveup.py @@ -0,0 +1,10 @@ +# [Grand Athenaeum] Ariant : Middle of the Desert +sm.removeEscapeButton() +sm.setSpeakerID(2510001) + +answer = sm.sendSay("Hey, are you gonna leave me behind?!\r\n#b#L0#Keep escorting.#l\r\n#L1#Quit escorting for now.#l") +if answer == 0: + sm.sendSayOkay("Good. Let's keep going.") +elif answer == 1: + sm.sendNext("I knew it. It's too dangerous for one person to take on. Let's go back to #m302010000#.") + sm.warpInstanceOut(302010000, 0) \ No newline at end of file diff --git a/scripts/portal/escortPast_Next.py b/scripts/portal/escortPast_Next.py new file mode 100755 index 0000000..09dff62 --- /dev/null +++ b/scripts/portal/escortPast_Next.py @@ -0,0 +1,3 @@ +# [Grand Athenaeum] Ariant : Escort Hatsar's Servant +if sm.isFinishedEscort(8230000): + sm.warp(302010400, 0) \ No newline at end of file diff --git a/scripts/portal/escort_start.py b/scripts/portal/escort_start.py new file mode 100755 index 0000000..499ae65 --- /dev/null +++ b/scripts/portal/escort_start.py @@ -0,0 +1,15 @@ +# [Grand Athenaeum] Ariant : Middle of the Desert +sm.removeEscapeButton() +sm.setSpeakerID(2510001) +if sm.hasQuest(32630): + answer = sm.sendSay("Are you sure you can do this? I'm telling you, there's a load of big, bad monsters out there.\r\n#b#L0#Let's go.#l\r\n#L1#Let's wait.#l") + if answer == 0: + sm.sendNext("Wait for me!") + sm.systemMessage("Starting the escort for Hatsar's Servant.") + sm.warpInstanceIn(302010100, 0) + sm.dispose() + elif answer == 1: + sm.addEscapeButton() + sm.sendSayOkay("I told you it's too dangerous for one person!") +else: + sm.sendSayOkay("Hey, are you gonna ignore me like that?!") \ No newline at end of file diff --git a/scripts/portal/evanDollGR.py b/scripts/portal/evanDollGR.py new file mode 100755 index 0000000..703f015 --- /dev/null +++ b/scripts/portal/evanDollGR.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# ID :: [100040000] +# Golem's Temple : Golem's Temple Entrance +if sm.hasQuest(25584) or sm.hasQuest(25583): + sm.warp(910600201, 0) +else: + sm.systemMessage("There's a suspicious-looking puppet in this building. It seems to be locked. You can't get in.") \ No newline at end of file diff --git a/scripts/portal/evanEntrance.py b/scripts/portal/evanEntrance.py new file mode 100755 index 0000000..66c5330 --- /dev/null +++ b/scripts/portal/evanEntrance.py @@ -0,0 +1,3 @@ +# Portal out of Utah's farm +sm.warp(100030400, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/evanFall.py b/scripts/portal/evanFall.py new file mode 100755 index 0000000..c5ca59c --- /dev/null +++ b/scripts/portal/evanFall.py @@ -0,0 +1,5 @@ +# Portal for Evan Intro | Hidden Street - Lush Forest (900020100) +# Author: Tiger + +sm.warp(931050990, 0) # Custom Video Field (A Black Field used for Effects/Videos) +sm.dispose() diff --git a/scripts/portal/evanFarmCT.py b/scripts/portal/evanFarmCT.py new file mode 100755 index 0000000..fb1161a --- /dev/null +++ b/scripts/portal/evanFarmCT.py @@ -0,0 +1,7 @@ +# Farm Center -> Large Forest Trail +if sm.hasQuestCompleted(22010) or sm.hasQuest(22010): + sm.warp(100030310, 0) + sm.dispose() +else: + sm.chat("You are not allowed to leave the farm yet.") + sm.dispose() \ No newline at end of file diff --git a/scripts/portal/evanGarden0.py b/scripts/portal/evanGarden0.py new file mode 100755 index 0000000..669f56d --- /dev/null +++ b/scripts/portal/evanGarden0.py @@ -0,0 +1,3 @@ +# Utah's house, Front yard +sm.warp(100030200, 0) +sm.dispose() diff --git a/scripts/portal/evanGarden1.py b/scripts/portal/evanGarden1.py new file mode 100755 index 0000000..7170399 --- /dev/null +++ b/scripts/portal/evanGarden1.py @@ -0,0 +1,5 @@ +# Utah's house, Front yard +if sm.hasQuest(22008): + #todo make instanced + sm.warp(100030103, 0) + sm.dispose() diff --git a/scripts/portal/evanGolemDoor.py b/scripts/portal/evanGolemDoor.py new file mode 100755 index 0000000..b4de75a --- /dev/null +++ b/scripts/portal/evanGolemDoor.py @@ -0,0 +1,3 @@ +# 100020200 +sm.warp(100040000, 3) +sm.dispose() diff --git a/scripts/portal/evanRoom0.py b/scripts/portal/evanRoom0.py new file mode 100755 index 0000000..f3acf3e --- /dev/null +++ b/scripts/portal/evanRoom0.py @@ -0,0 +1,9 @@ +# Portal for Evan Intro | Utah's House: Attic (100030100) +# Author: Tiger + +from net.swordie.ms.constants import GameConstants + +# "What a strange dream" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon30") +sm.createQuestWithQRValue(GameConstants.EVAN_INTRO, "1") # Custom QR value, so script doesn't repeat the sayImage in the next portal "evanRoom1" +sm.dispose() diff --git a/scripts/portal/evanRoom1.py b/scripts/portal/evanRoom1.py new file mode 100755 index 0000000..2c24632 --- /dev/null +++ b/scripts/portal/evanRoom1.py @@ -0,0 +1,12 @@ +# Portal for Evan Intro | Utah's House: Attic (100030100) +# Author: Tiger + +from net.swordie.ms.constants import GameConstants + +if "1" in sm.getQRValue(GameConstants.EVAN_INTRO): + sm.sendSayImage("UI/tutorial/evan/0/0") + sm.setQRValue(GameConstants.EVAN_INTRO, "2") + +# "What this on the back of my hand? Eh, I won't worry about it" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon70") + diff --git a/scripts/portal/evanlivingRoom.py b/scripts/portal/evanlivingRoom.py new file mode 100755 index 0000000..281dd24 --- /dev/null +++ b/scripts/portal/evanlivingRoom.py @@ -0,0 +1,3 @@ +# 100020200 +sm.warp(100030102, 0) +sm.dispose() diff --git a/scripts/portal/evantalk00.py b/scripts/portal/evantalk00.py new file mode 100755 index 0000000..72234ba --- /dev/null +++ b/scripts/portal/evantalk00.py @@ -0,0 +1,5 @@ +# Portal & Balloon Msgs for Evan Intro | Dream World: Dream Forest Entrance (900010000) +# Author: Tiger + +# "Huh? Where am I?" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon00") diff --git a/scripts/portal/evantalk01.py b/scripts/portal/evantalk01.py new file mode 100755 index 0000000..c9af05c --- /dev/null +++ b/scripts/portal/evantalk01.py @@ -0,0 +1,5 @@ +# Portal & Balloon Msgs for Evan Intro | Dream World: Dream Forest Entrance (900010000) +# Author: Tiger + +# "What was that? I heard something!" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon01") diff --git a/scripts/portal/evantalk02.py b/scripts/portal/evantalk02.py new file mode 100755 index 0000000..815e3a2 --- /dev/null +++ b/scripts/portal/evantalk02.py @@ -0,0 +1,5 @@ +# Portal & Balloon Msgs for Evan Intro | Dream World: Dream Forest Entrance (900010000) +# Author: Tiger + +# "Did it come from there?" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon02") diff --git a/scripts/portal/evantalk10.py b/scripts/portal/evantalk10.py new file mode 100755 index 0000000..b4c6a24 --- /dev/null +++ b/scripts/portal/evantalk10.py @@ -0,0 +1,5 @@ +# Portal & Balloon Msgs for Evan Intro | Dream World: Dream Forest Trail (900010100) +# Author: Tiger + +# "I didn't know a place like this existed nearby..." +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon10") diff --git a/scripts/portal/evantalk11.py b/scripts/portal/evantalk11.py new file mode 100755 index 0000000..d424a2a --- /dev/null +++ b/scripts/portal/evantalk11.py @@ -0,0 +1,5 @@ +# Portal & Balloon Msgs for Evan Intro | Dream World: Dream Forest Trail (900010100) +# Author: Tiger + +# "Another strange noise? Is someone talking?" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon11") diff --git a/scripts/portal/evantalk20.py b/scripts/portal/evantalk20.py new file mode 100755 index 0000000..d5ef793 --- /dev/null +++ b/scripts/portal/evantalk20.py @@ -0,0 +1,5 @@ +# Portal & Balloon Msgs for Evan Intro | Dream World: Dream Forest (900010200) +# Author: Tiger + +# "Whoa! A Dragon?!" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon20") diff --git a/scripts/portal/evantalk21.py b/scripts/portal/evantalk21.py new file mode 100755 index 0000000..23c663d --- /dev/null +++ b/scripts/portal/evantalk21.py @@ -0,0 +1,5 @@ +# Portal & Balloon Msgs for Evan Intro | Dream World: Dream Forest (900010200) +# Author: Tiger + +# "I'm a little scared, but it's so mesmerizing... I want to touch it." +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon21") diff --git a/scripts/portal/evantalk40.py b/scripts/portal/evantalk40.py new file mode 100755 index 0000000..fe841dc --- /dev/null +++ b/scripts/portal/evantalk40.py @@ -0,0 +1,5 @@ +# Portal for Evan Intro | Hidden Street: Lost Forest Entrance (900020200) +# Author: Tiger + +# "Argh.." +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon40") diff --git a/scripts/portal/evantalk41.py b/scripts/portal/evantalk41.py new file mode 100755 index 0000000..29961f1 --- /dev/null +++ b/scripts/portal/evantalk41.py @@ -0,0 +1,5 @@ +# Portal for Evan Intro | Hidden Street: Lost Forest Entrance (900020200) +# Author: Tiger + +# "Where am I?" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon41") diff --git a/scripts/portal/evantalk42.py b/scripts/portal/evantalk42.py new file mode 100755 index 0000000..b85a8b7 --- /dev/null +++ b/scripts/portal/evantalk42.py @@ -0,0 +1,5 @@ +# Portal for Evan Intro | Hidden Street: Lost Forest Entrance (900020200) +# Author: Tiger + +# "This looks just like the place in my dream" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon42") diff --git a/scripts/portal/evantalk50.py b/scripts/portal/evantalk50.py new file mode 100755 index 0000000..0a0a24c --- /dev/null +++ b/scripts/portal/evantalk50.py @@ -0,0 +1,5 @@ +# Portal for Evan Intro | Hidden Street: Lost Forest Trail (900020210) +# Author: Tiger + +# "Does that mean there's a dragan here, too?" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon50") diff --git a/scripts/portal/evantalk60.py b/scripts/portal/evantalk60.py new file mode 100755 index 0000000..f48b450 --- /dev/null +++ b/scripts/portal/evantalk60.py @@ -0,0 +1,5 @@ +# Portal for Evan Intro | Hidden Street: Lost Forest (900020220) +# Author: Tiger + +# "Could this be a Dragon Egg?" +sm.avatarOriented("Effect/OnUserEff.img/guideEffect/evanTutorial/evanBalloon60") diff --git a/scripts/portal/eventjp_exit.py b/scripts/portal/eventjp_exit.py new file mode 100755 index 0000000..64c9a15 --- /dev/null +++ b/scripts/portal/eventjp_exit.py @@ -0,0 +1,6 @@ +maps = [104000000, 100000000, 103000000, 101000000, 102000000] + +selection = sm.sendNext("Where would you like to go? \r\n#L0#Lith Harbor#l\r\n#L1#Henesys#l\r\n#L2#Kerning City#l" + + "\r\n#L3#Ellinia#l\r\n#L4#Perion#l") + +sm.warp(maps[selection], 0) diff --git a/scripts/portal/evolving_outPT1.py b/scripts/portal/evolving_outPT1.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT1.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT2.py b/scripts/portal/evolving_outPT2.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT2.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT3.py b/scripts/portal/evolving_outPT3.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT3.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT4.py b/scripts/portal/evolving_outPT4.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT4.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT5.py b/scripts/portal/evolving_outPT5.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT5.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT6.py b/scripts/portal/evolving_outPT6.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT6.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT7.py b/scripts/portal/evolving_outPT7.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT7.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT8.py b/scripts/portal/evolving_outPT8.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT8.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/evolving_outPT9.py b/scripts/portal/evolving_outPT9.py new file mode 100755 index 0000000..914bb61 --- /dev/null +++ b/scripts/portal/evolving_outPT9.py @@ -0,0 +1 @@ +sm.warp(957019000) \ No newline at end of file diff --git a/scripts/portal/exit_adventure.py b/scripts/portal/exit_adventure.py new file mode 100755 index 0000000..88d27a6 --- /dev/null +++ b/scripts/portal/exit_adventure.py @@ -0,0 +1,3 @@ +# 211040401 - Hidden Street -> Holy Ground at the Snowfield +sm.warp(211040300, 0) +sm.dispose() diff --git a/scripts/portal/exit_dragonR.py b/scripts/portal/exit_dragonR.py new file mode 100755 index 0000000..5a8d221 --- /dev/null +++ b/scripts/portal/exit_dragonR.py @@ -0,0 +1,3 @@ +# id 2 (left00), field 240080000 +sm.completeQuestNoCheck(7848) +sm.warp(240030102) diff --git a/scripts/portal/exit_juliet.py b/scripts/portal/exit_juliet.py new file mode 100755 index 0000000..135e27c --- /dev/null +++ b/scripts/portal/exit_juliet.py @@ -0,0 +1,3 @@ +# Alcadno - Hidden Room back to pq hub +sm.warp(910002000, 1) +sm.dispose() diff --git a/scripts/portal/extreme_in03.py b/scripts/portal/extreme_in03.py new file mode 100755 index 0000000..8a8fdae --- /dev/null +++ b/scripts/portal/extreme_in03.py @@ -0,0 +1,30 @@ +sm.setSpeakerID(9071006) + +mapID = [951000210,951000220,951000230,951000240,951000250,951000260,951000270] +runsADay = 10 +rand = sm.getRandomIntBelow(len(mapID)) + +from net.swordie.ms.enums import EventType + +selection = sm.sendSayOkay("Monster Park Extreme is where you can face dangerous enemies to level up quickly.\r\n" + "#L0##bEnter Monster Park Extreme "+ str(sm.getEventAmountDone(EventType.MonsterParkExtreme)) + "/10 Attempted today #l\r\n") + +if selection == 0: + + if chr.getLevel() < 200: + sm.sendSayOkay("You must be level #b200#k to enter the Dimensional Invasion Party Quest.") + sm.dispose() + + if sm.partyHasCoolDown(EventType.MonsterParkExtreme, runsADay): + sm.sendSayOkay("You are currently on cooldown for Monster Park Extreme.") + sm.dispose() + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before entering.") + sm.dispose() + + else: + map = mapID[rand] + sm.addCoolDownInXays(EventType.MonsterParkExtreme, 1, 1) + sm.warpInstanceIn(map, True) + sm.setInstanceTime(60*10) \ No newline at end of file diff --git a/scripts/portal/extreme_out.py b/scripts/portal/extreme_out.py new file mode 100755 index 0000000..14f123b --- /dev/null +++ b/scripts/portal/extreme_out.py @@ -0,0 +1,2 @@ +if sm.sendAskYesNo("Are you sure you want to leave the battlefield?"): + sm.warpInstanceOut(951000000) \ No newline at end of file diff --git a/scripts/portal/fall_224000103.py b/scripts/portal/fall_224000103.py new file mode 100755 index 0000000..ae71a9b --- /dev/null +++ b/scripts/portal/fall_224000103.py @@ -0,0 +1,4 @@ +# 224000103 - When you fall down + +sm.warp(224000132, 4) +sm.dispose() diff --git a/scripts/portal/fallenWT_boss.py b/scripts/portal/fallenWT_boss.py new file mode 100755 index 0000000..c3b6df9 --- /dev/null +++ b/scripts/portal/fallenWT_boss.py @@ -0,0 +1,49 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Legendary", 255, 350160100, 20, EventType.Damien, 604800000], +] + +runsPerDay = 1 + +def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + +sm.setSpeakerID(1530621) + +dialog = "Do you want to head to the '#bDark World Tree Summit#k' to fight \r\n#bDamien#k?\r\n" + +for i in range(len(destinations)): + dialog += "#L%d##bGo to the Dark World Tree Summit (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + +dialog += "#L99#Never mind." +response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face #bDamien#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing \r\n#bDamien#k within the past 7 Days.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + +elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.DAMIEN_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) diff --git a/scripts/portal/find_secretRoom.py b/scripts/portal/find_secretRoom.py new file mode 100755 index 0000000..d68cb5f --- /dev/null +++ b/scripts/portal/find_secretRoom.py @@ -0,0 +1,14 @@ +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +random = sm.getRandomIntBelow(5) + +if random == 0: + sm.warpInstanceOut(701220300) # Sutra 5-6 + sm.removeCTS(CharacterTemporaryStat.Morph) + if sm.hasQuest(62011): + sm.completeQuest(62011) + sm.giveExp(2020453) + sm.createQuestWithQRValue(62011, "0") +else: + sm.setPlayerAsSpeaker() + sm.sendSayOkay("This doesn't seem to be it..") \ No newline at end of file diff --git a/scripts/portal/finish_warZone1.py b/scripts/portal/finish_warZone1.py new file mode 100755 index 0000000..24503ca --- /dev/null +++ b/scripts/portal/finish_warZone1.py @@ -0,0 +1,6 @@ +# Used in Magnus questline - Occupied Reclamation HQ +if sm.hasMobsInField(): + sm.chat("Please eliminate all mobs.") +else: + sm.warp(401000000, 1) # To Heliseum Reclamation HQ +sm.dispose() diff --git a/scripts/portal/flag_Start.py b/scripts/portal/flag_Start.py new file mode 100755 index 0000000..17645e3 --- /dev/null +++ b/scripts/portal/flag_Start.py @@ -0,0 +1,3 @@ +# 932200100 +sm.teleportInField(-1978, 2558) +sm.dispose() diff --git a/scripts/portal/flag_goal.py b/scripts/portal/flag_goal.py new file mode 100755 index 0000000..43dd8c6 --- /dev/null +++ b/scripts/portal/flag_goal.py @@ -0,0 +1,3 @@ +# Finish portal in Flag Race +# 932200100 +sm.teleportToPortal(0) diff --git a/scripts/portal/frittoEgg_1.py b/scripts/portal/frittoEgg_1.py new file mode 100755 index 0000000..756a225 --- /dev/null +++ b/scripts/portal/frittoEgg_1.py @@ -0,0 +1,9 @@ +if parentID % 2 == 0: + portal = 14 +else: + portal = 13 +if sm.getRandomIntBelow(2) == 0: + sm.teleportToPortal(portal) +else: + sm.giveNX(10000) + sm.warpInstanceOut(993000601, 0) # Hidden Street : Secluded Forest \ No newline at end of file diff --git a/scripts/portal/frittoEgg_2.py b/scripts/portal/frittoEgg_2.py new file mode 100755 index 0000000..439554f --- /dev/null +++ b/scripts/portal/frittoEgg_2.py @@ -0,0 +1,9 @@ +if parentID % 2 == 0: + portal = 16 +else: + portal = 15 +if sm.getRandomIntBelow(2) == 0: + sm.teleportToPortal(portal) +else: + sm.giveNX(20000) + sm.warpInstanceOut(993000601, 0) # Hidden Street : Secluded Forest \ No newline at end of file diff --git a/scripts/portal/frittoEgg_3.py b/scripts/portal/frittoEgg_3.py new file mode 100755 index 0000000..eda59eb --- /dev/null +++ b/scripts/portal/frittoEgg_3.py @@ -0,0 +1,9 @@ +if parentID % 2 == 0: + portal = 18 +else: + portal = 17 +if sm.getRandomIntBelow(2) == 0: + sm.teleportToPortal(portal) +else: + sm.giveNX(30000) + sm.warpInstanceOut(993000601, 0) # Hidden Street : Secluded Forest \ No newline at end of file diff --git a/scripts/portal/frittoEgg_4.py b/scripts/portal/frittoEgg_4.py new file mode 100755 index 0000000..c81dd4c --- /dev/null +++ b/scripts/portal/frittoEgg_4.py @@ -0,0 +1,9 @@ +if parentID % 2 == 0: + portal = 20 +else: + portal = 19 +if sm.getRandomIntBelow(2) == 0: + sm.teleportToPortal(portal) +else: + sm.giveNX(40000) + sm.warpInstanceOut(993000601, 0) # Hidden Street : Secluded Forest \ No newline at end of file diff --git a/scripts/portal/frittoEgg_5.py b/scripts/portal/frittoEgg_5.py new file mode 100755 index 0000000..c1d4427 --- /dev/null +++ b/scripts/portal/frittoEgg_5.py @@ -0,0 +1,5 @@ +if sm.getRandomIntBelow(2) == 0: + sm.teleportToPortal(10) # Final portal +else: + sm.giveNX(50000) + sm.warpInstanceOut(993000601, 0) # Hidden Street : Secluded Forest \ No newline at end of file diff --git a/scripts/portal/frittoEgg_Final.py b/scripts/portal/frittoEgg_Final.py new file mode 100755 index 0000000..2b1cbd1 --- /dev/null +++ b/scripts/portal/frittoEgg_Final.py @@ -0,0 +1,5 @@ +sm.stopEvents() +sm.setPlayerAsSpeaker() +sm.sendNext("You found the dragon egg!") +sm.giveNX(60000) +sm.warp(993000601, 0) # Hidden Street : Secluded Forest) \ No newline at end of file diff --git a/scripts/portal/gPark_Portal.py b/scripts/portal/gPark_Portal.py new file mode 100755 index 0000000..f867c67 --- /dev/null +++ b/scripts/portal/gPark_Portal.py @@ -0,0 +1,8 @@ +if sm.getFieldID() == 956100000: + map = 224000000 + portal = 32 +else: + map = 956100000 + portal = 3 +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/gate_intoPast.py b/scripts/portal/gate_intoPast.py new file mode 100755 index 0000000..0d94fb5 --- /dev/null +++ b/scripts/portal/gate_intoPast.py @@ -0,0 +1,6 @@ +# 270000000 +if not sm.hasQuestCompleted(3500): # time lane quest + sm.chat("You have not completed the appropriate quest to enter here.") +else: + sm.warp(270010000, 3) +sm.dispose() diff --git a/scripts/portal/gatherTuto.py b/scripts/portal/gatherTuto.py new file mode 100755 index 0000000..8e78b0f --- /dev/null +++ b/scripts/portal/gatherTuto.py @@ -0,0 +1,25 @@ +# Hidden Street - Ardentmill :: 910001000 +Maps = [910001003, 910001004, 910001007, 910001009, 910001005, 910001006, 910001008, 910001010] +GRANT = 9031000 +MINING_SKILL = 92010000 +HERBALISM_SKILL = 92000000 +sm.setSpeakerID(GRANT) + + +if sm.hasSkill(HERBALISM_SKILL) or sm.hasSkill(MINING_SKILL): + text = "Where do you want to go?\r\n" + if sm.hasSkill(HERBALISM_SKILL): + for x in range(4): + text += "#b#L" + str(x) + "##m" + str(Maps[x]) + "##l\r\n" + if sm.hasSkill(MINING_SKILL): + for i in range(4): + text += "#b#L" + str(i + 4) + "##m" + str(Maps[i + 4]) + "##l\r\n" + selection = sm.sendSay(text) + + sm.warp(Maps[selection], 1) +else: + selection = sm.sendSay("Where do you want to go?\r\n\r\n#L0##bSaffron's Herb Field#k\r\n#L1##bCole's Mine#k") + if selection == 0: + sm.warp(910001001, 1) + else: + sm.warp(910001002, 1) \ No newline at end of file diff --git a/scripts/portal/giantBossPortal.py b/scripts/portal/giantBossPortal.py new file mode 100755 index 0000000..3674af6 --- /dev/null +++ b/scripts/portal/giantBossPortal.py @@ -0,0 +1,89 @@ +# Gollux portals +fields = { + # Main map id : main portal id : [to field id, to field portal] + 863010100 : { + 3 : [863010400, 2], + 6 : [863010300, 2], + 7 : [863010300, 2], + 9 : [863010220, 1], + }, + 863010200 : { + 0 : [863010100, 2], + 1 : [863010220, 2], + 2 : [863010240, 2], + }, + 863010210 : { + 1 : [863010200, 1], + 2 : [863010240, 0], + }, + 863010220 : { + 1 : [863010100, 1], + 2 : [863010230, 1], + }, + 863010230 : { + 1 : [863010220, 2], + 2 : [863010240, 0], + }, + 863010240 : { + 1 : [863010230, 2], + 2 : [863010210, 2], + 3 : [863010500, 0], + }, + 863010300 :{ + 1 : [863010310, 1], + 2 : [863010100, 7], + }, + 863010310 : { + 1 : [863010300, 1], + 2 : [863010320, 1], + }, + 863010320 : { + 1 : [863010500, 1], + 2 : [863010310, 2], + 3 : [863010330, 0], + }, + 863010330 : { + 1 : [863010320, 3], + 3 : [863010500, 0], + }, + 863010400 : { + 1 : [863010410, 1], + 2 : [863010100, 6], + }, + 863010410 : { + 1 : [863010400, 1], + 2 : [863010420, 1], + }, + 863010420 : { + 1 : [863010410, 5], + 2 : [863010500, 5], + 3 : [863010430, 0], + }, + 863010430 : { + 1 : [863010420, 3], + 3 : [863010500, 0], + }, + 863010500 : { + 1 : [863010320, 1], + 2 : [863010240, 0], + 3 : [863010600, 0], + 4 : [863010330, 0], + 5 : [863010420, 2], + 6 : [863010430, 0], + }, + 863010600 : { + 2 : [863010500, 0], + }, +} + +fieldID = sm.getFieldID() +if fieldID not in fields: + sm.chat("This portal (giantBossPortal.py) is not yet coded for this map (" + str(fieldID) + ")") +else: + innerDict = fields[fieldID] + if parentID not in innerDict: + sm.chat("This portal (giantBossPortal, " + str(parentID) + ") is not yet coded for this map (" + str(fieldID) + ")") + elif sm.getAmountOfMobsInField() > 2 and fieldID != 863010600: + sm.chat("Defeat all monsters first.") + else: + sm.warp(innerDict[parentID][0], innerDict[parentID][1]) diff --git a/scripts/portal/giveupCH_test.py b/scripts/portal/giveupCH_test.py new file mode 100755 index 0000000..1136570 --- /dev/null +++ b/scripts/portal/giveupCH_test.py @@ -0,0 +1 @@ +sm.warpInstanceOut(931050500) \ No newline at end of file diff --git a/scripts/portal/glpqPortal1.py b/scripts/portal/glpqPortal1.py new file mode 100755 index 0000000..361e376 --- /dev/null +++ b/scripts/portal/glpqPortal1.py @@ -0,0 +1,5 @@ +if sm.getFieldID() == 610030200: + if sm.fieldHasProperty("Stage1Cleared"): + sm.warpInstanceIn(610030200) + else: + sm.chatRed("Some of the Sigils have not been activated yet") \ No newline at end of file diff --git a/scripts/portal/goBlackMarket.py b/scripts/portal/goBlackMarket.py new file mode 100755 index 0000000..3b2e1a2 --- /dev/null +++ b/scripts/portal/goBlackMarket.py @@ -0,0 +1,3 @@ +# 401030600 +sm.warp(401040001, 1) +sm.dispose() diff --git a/scripts/portal/goSkuasForest.py b/scripts/portal/goSkuasForest.py new file mode 100755 index 0000000..35714ae --- /dev/null +++ b/scripts/portal/goSkuasForest.py @@ -0,0 +1,6 @@ +# id 4 (pt_skuasforest), field 867202200 +sm.setSpeakerType(3) +sm.setParam(56) +sm.setColor(1) +res = sm.sendNext("#bI think we should head into the forest to see if we can find something we can use.\r\n#L0# Let's leave now.#l\r\n#L1# Let's make repairs and then leave.#l") +sm.warp(867202800) diff --git a/scripts/portal/goSvarti.py b/scripts/portal/goSvarti.py new file mode 100755 index 0000000..82f2619 --- /dev/null +++ b/scripts/portal/goSvarti.py @@ -0,0 +1,6 @@ +# id 2 (goTown), field 867201000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Not a chance. Chief Gurnardson won't let us in until he gets everything he wants.") diff --git a/scripts/portal/goSvartiField.py b/scripts/portal/goSvartiField.py new file mode 100755 index 0000000..f9580be --- /dev/null +++ b/scripts/portal/goSvartiField.py @@ -0,0 +1,7 @@ +# id 1 (goField), field 867201000 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +res = sm.sendNext("#face0#Over here! Come on over.#b \r\n#L0# Let's leave now.#l\r\n#L1# Let's make repairs and then leave.#l") +sm.warp(867201160) diff --git a/scripts/portal/goUP_310070300.py b/scripts/portal/goUP_310070300.py new file mode 100755 index 0000000..a4440a3 --- /dev/null +++ b/scripts/portal/goUP_310070300.py @@ -0,0 +1,3 @@ +# 310070230 +sm.warp(310070300, 15) +sm.dispose() diff --git a/scripts/portal/go_867201280.py b/scripts/portal/go_867201280.py new file mode 100755 index 0000000..f25df6c --- /dev/null +++ b/scripts/portal/go_867201280.py @@ -0,0 +1,18 @@ +# id 2 (go_867201280), field 867201260 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#Aghhhh! ") +sm.forcedFlip(True) +sm.setParam(57) +sm.sendSay("#bWhat was that? ") +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.forcedMove(False, 2000) +sm.sendDelay(1500) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(867201280) diff --git a/scripts/portal/go_FantasticPark.py b/scripts/portal/go_FantasticPark.py new file mode 100755 index 0000000..6bfa79e --- /dev/null +++ b/scripts/portal/go_FantasticPark.py @@ -0,0 +1,3 @@ +# 220000000 +sm.warp(223000000, 0) +sm.dispose() diff --git a/scripts/portal/go_adventuretuto.py b/scripts/portal/go_adventuretuto.py new file mode 100755 index 0000000..72f0bf2 --- /dev/null +++ b/scripts/portal/go_adventuretuto.py @@ -0,0 +1,9 @@ +# 106030201 +fieldID = sm.getFieldID() +if fieldID < 4000014: + sm.warp(sm.getFieldID() + 1) + sm.dispose() +elif sm.getFieldID() == 4000014: + sm.warp(4000020, 0) + sm.dispose() + diff --git a/scripts/portal/go_animalShow.py b/scripts/portal/go_animalShow.py new file mode 100755 index 0000000..21da9a8 --- /dev/null +++ b/scripts/portal/go_animalShow.py @@ -0,0 +1,12 @@ +# 223030200 +response = sm.sendAskYesNo("Would you like to battle scarlion and targa?") + +currentMap = sm.getFieldID() +if response: + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader enter the portal.") + elif sm.checkParty(): + sm.warpInstanceIn(223030210, True) +sm.dispose() diff --git a/scripts/portal/go_ballroom.py b/scripts/portal/go_ballroom.py new file mode 100755 index 0000000..d1fdbf0 --- /dev/null +++ b/scripts/portal/go_ballroom.py @@ -0,0 +1,4 @@ +# Lachelein Main street -> + +if sm.hasQuest(34319) or sm.hasQuestCompleted(34319): + sm.warp(450003400) \ No newline at end of file diff --git a/scripts/portal/go_blackmarket.py b/scripts/portal/go_blackmarket.py new file mode 100755 index 0000000..3335470 --- /dev/null +++ b/scripts/portal/go_blackmarket.py @@ -0,0 +1,3 @@ +# 401040001 - Helisium Downtown Entrance +sm.warp(401040001, 3) +sm.dispose() diff --git a/scripts/portal/go_clockTower.py b/scripts/portal/go_clockTower.py new file mode 100755 index 0000000..6d1de9e --- /dev/null +++ b/scripts/portal/go_clockTower.py @@ -0,0 +1,4 @@ +# Lachelein Main street -> + +if sm.hasQuest(34326) or sm.hasQuestCompleted(34326): + sm.warp(450003500) \ No newline at end of file diff --git a/scripts/portal/go_deepForest.py b/scripts/portal/go_deepForest.py new file mode 100755 index 0000000..ce86cfd --- /dev/null +++ b/scripts/portal/go_deepForest.py @@ -0,0 +1,2 @@ +# Portal towards Slurpy Tree Habitat. Used for ChuChu prequests +sm.warpInstanceIn(450002250) diff --git a/scripts/portal/go_kCity.py b/scripts/portal/go_kCity.py new file mode 100755 index 0000000..0a11d3d --- /dev/null +++ b/scripts/portal/go_kCity.py @@ -0,0 +1 @@ +sm.warp(331000000, 3) \ No newline at end of file diff --git a/scripts/portal/go_reward.py b/scripts/portal/go_reward.py new file mode 100755 index 0000000..9d2e5bc --- /dev/null +++ b/scripts/portal/go_reward.py @@ -0,0 +1,6 @@ +# 811000500 - Princess No (pno) +response = sm.sendAskYesNo("Would you like to leave?") + +if response: + sm.clearPartyInfo(811000100) +sm.dispose() diff --git a/scripts/portal/goldTempleBoss.py b/scripts/portal/goldTempleBoss.py new file mode 100755 index 0000000..8d90615 --- /dev/null +++ b/scripts/portal/goldTempleBoss.py @@ -0,0 +1,3 @@ +# 252030000 - To Ravana +if sm.checkParty(): + sm.warpInstanceIn(252030100, True) # Ravana's Golden Altar diff --git a/scripts/portal/goldTemple_mGate.py b/scripts/portal/goldTemple_mGate.py new file mode 100755 index 0000000..d3c8f72 --- /dev/null +++ b/scripts/portal/goldTemple_mGate.py @@ -0,0 +1,3 @@ +# 252010300 - Golden Temple Training Ground 4 -> SnowFro's Lair +sm.warp(925120000, 0) +sm.dispose() diff --git a/scripts/portal/goldTemple_sGate.py b/scripts/portal/goldTemple_sGate.py new file mode 100755 index 0000000..61706e7 --- /dev/null +++ b/scripts/portal/goldTemple_sGate.py @@ -0,0 +1,3 @@ +# 223010100 +sm.warp(252020000, 0) +sm.dispose() diff --git a/scripts/portal/gold_boss_gate.py b/scripts/portal/gold_boss_gate.py new file mode 100755 index 0000000..4a2506c --- /dev/null +++ b/scripts/portal/gold_boss_gate.py @@ -0,0 +1,4 @@ +# 252020000 - to gold boss +# idk if this is the correct portal progression but i couldn't find another way to link everything together + +sm.warp(252030000, 5) diff --git a/scripts/portal/gotoAran.py b/scripts/portal/gotoAran.py new file mode 100755 index 0000000..0cb1906 --- /dev/null +++ b/scripts/portal/gotoAran.py @@ -0,0 +1,3 @@ +# 927020010 +sm.giveSkill(20041226, 0) +sm.warp(927020050, 0) diff --git a/scripts/portal/gotoDoor.py b/scripts/portal/gotoDoor.py new file mode 100755 index 0000000..002cf43 --- /dev/null +++ b/scripts/portal/gotoDoor.py @@ -0,0 +1,3 @@ +# 272010100 +sm.warp(272010200, 1) +sm.dispose() diff --git a/scripts/portal/gotoNow.py b/scripts/portal/gotoNow.py new file mode 100755 index 0000000..c270b68 --- /dev/null +++ b/scripts/portal/gotoNow.py @@ -0,0 +1,3 @@ +# 272010200 +sm.warp(272010100, 2) +sm.dispose() diff --git a/scripts/portal/goto_701220350.py b/scripts/portal/goto_701220350.py new file mode 100755 index 0000000..39672a8 --- /dev/null +++ b/scripts/portal/goto_701220350.py @@ -0,0 +1,262 @@ +from net.swordie.ms.world.field.fieldeffect import GreyFieldType + +BLUE_DEMON = 9310577 +GOBLIN_DEMON = 9310578 +NINE_TAILED_FOX = 9310579 + + +if "0" in sm.getQRValue(62011): + sm.warpInstanceIn(701220350) + + sm.lockInGameUI(True, False) + sm.removeEscapeButton() + sm.setFieldColour(GreyFieldType.Field, 0, 0, 0, 0) + sm.showEffectOnPosition("Map/Effect2.img/BlackOut", 23600, 1100, 400) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/1", 2500, GOBLIN_DEMON) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/2", 2500, NINE_TAILED_FOX) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/3", 2500, BLUE_DEMON) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/4", 2500, GOBLIN_DEMON) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/5", 2500, NINE_TAILED_FOX) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/6", 2500, BLUE_DEMON) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/7", 2500, GOBLIN_DEMON) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/8", 2500, BLUE_DEMON) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/9", 2500, NINE_TAILED_FOX) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/10", 2500, BLUE_DEMON) + sm.sendDelay(2000) + + sm.showBalloonMsgOnNpc("Effect/Direction_CN.img/effect/tuto/BalloonMsg0/11", 2500, GOBLIN_DEMON) + sm.sendDelay(2000) + + sm.setFieldColour(GreyFieldType.Field, 250, 250, 250, 1000) + sm.sendDelay(1000) + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Intruder!") + sm.showNpcSpecialActionByTemplateId(NINE_TAILED_FOX, "angry") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("A human. Gross. Who's got the antihomosapien gel?") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Shoo! Begone!") + sm.showNpcSpecialActionByTemplateId(NINE_TAILED_FOX, "angry") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("Huh? What? Wait a sec--!") + + sm.warpInstanceOut(701220300, 2) + sm.chatRed("A strong demonic energy shoves you out the door.") + sm.createQuestWithQRValue(62011, "1") + sm.lockInGameUI(False) + + +elif "1" in sm.getQRValue(62011): + sm.removeEscapeButton() + sm.setBoxChat() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("What was that? This time, disguise yourself and sneak in...") + + sm.warpInstanceIn(701220350) + + sm.lockInGameUI(True, False) + sm.hideUser(True) + sm.sendDelay(1000) + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("Ugh. A human. Thanks a lot, Blue") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("It's not my fault!") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("I TOLD you to stop stealing shoes!") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("But I'm so cute! How could they hold it against me?") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("Because you're a cliche, dimwit. A demon taking shoes? Of course you're gonna be mad.") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("(These must be the demons stirring up trouble in town.)") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Why does the human lurk silently in the portal?") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("Should I get the human swatter?") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("(You approach the demons slowly, hands up in front of you.)") + + sm.sendDelay(500) + + sm.hideUser(False) + sm.sendDelay(1000) + + sm.forcedMove(True, 400) + sm.sendDelay(2000) + + sm.sendNext("Hey, guys. How's it going? Listen, I just--") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("Ugh. Its breath smells like cow.") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("Hi, human! Tell me the truth. Are my cheeks pinchable? Are they tasty, like a human baby's?") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("The human has made a mistake. It has come alone...") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("Can you burp me, human? And wipe me? I've always wanted--") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Silence!") + + sm.sendNext("Human. Why do you invade our home?") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("I don't want any trouble. I'm just looking for a book.") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("A book...") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("A book written by a monk, a long time ago. Mind if I check the bookshelf?") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Mind if I eat your eyeballs?") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("If you give a human a booksie, they'll ask you for a glass of BLOOD.") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("Just give it the book! I want to breathe again!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("(Maybe these demons can be reasoned with. After all, they haven't ripped my heart out yet.)") + + sm.sendNext("All I want is that book. Is there anything I can do to convince you I'm harmless? Maybe a favour?") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("It thinks it can trick us...") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("Sing me a lullaby! Make my cradle fall down from a treetop! Ring me around a rosie!!") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("Sew Blue's mouth shut so he'll stop annoying me.") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("Foxy, make Gobby be nice!") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Actually...") + + sm.sendNext("We accept your proposal.\r\n" + "Do each of us a favour, and we'll find your book.\r\n" + "If you fail to complete my, *ahem, OUR, favours, we eat your eyeballs.") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("Deal! Me, first! Me, first!") + + sm.setSpeakerID(GOBLIN_DEMON) + sm.setBoxChat() + sm.sendNext("If the human is going to stick around can we at least make it do something about its breath?") + + sm.lockInGameUI(False) + sm.warpInstanceOut(701220350) + sm.setQRValue(62011, "2") + + +elif sm.hasQuestCompleted(62007) and not "1" in sm.getQRValue(62007): + sm.warpInstanceIn(701220350) + sm.lockInGameUI(True, False) + sm.removeEscapeButton() + sm.hideNpcByTemplateId(NINE_TAILED_FOX, True) + sm.hideNpcByTemplateId(GOBLIN_DEMON, True) + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("#fs 24##h0#!!! It's horrible!!! "+ sm.getQRValue(62015) +" and "+ sm.getQRValue(62018) +" have been taken!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("Taken?! Tell me everything!") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("A man stormed in here and ook them! I wiggled away, because I'm small and extremely cute. But he took the other two upstairs!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("A #bman#k? Who would do that?") + + sm.setSpeakerID(BLUE_DEMON) + sm.setBoxChat() + sm.sendNext("We have to save "+ sm.getQRValue(62015) +" and "+ sm.getQRValue(62018) +"!!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("Let's go! Lead the way, "+ sm.getQRValue(62013) +"!") + + sm.warpInstanceOut(701220300, 2) + sm.createQuestWithQRValue(62007, "1") + sm.lockInGameUI(False) + + +elif "2" in sm.getQRValue(62011): + sm.warp(701220350) \ No newline at end of file diff --git a/scripts/portal/gryphius.py b/scripts/portal/gryphius.py new file mode 100755 index 0000000..6416ba1 --- /dev/null +++ b/scripts/portal/gryphius.py @@ -0,0 +1,7 @@ +# Portal to Griffin +DARK_GRIFFEY_FOREST = 924000201 + +if sm.hasQuest(1451) or sm.hasQuest(1453) or sm.hasQuest(1455) or sm.hasQuest(1457) or sm.hasQuest(1459): + sm.warpInstanceIn(DARK_GRIFFEY_FOREST, False) + sm.dispose() +sm.warp(240020101, 3) diff --git a/scripts/portal/hillah_next.py b/scripts/portal/hillah_next.py new file mode 100755 index 0000000..9082d5a --- /dev/null +++ b/scripts/portal/hillah_next.py @@ -0,0 +1,11 @@ +if not sm.hasMobsInField(chr.getFieldID()): + if sm.getFieldID() == 262030100: + sm.warp(262030200, True) + elif sm.getFieldID() == 262030200: + sm.warp(262030300, True) + elif sm.getFieldID() == 262031100: + sm.warp(262031200, True) + elif sm.getFieldID() == 262031200: + sm.warp(262031300, True) +else: + sm.chatRed("You must eliminate all the monsters in the map before continuing") \ No newline at end of file diff --git a/scripts/portal/hintTuto02.py b/scripts/portal/hintTuto02.py new file mode 100755 index 0000000..7c16c33 --- /dev/null +++ b/scripts/portal/hintTuto02.py @@ -0,0 +1,4 @@ +# Adventurer Tutorial + +sm.avatarOriented("UI/tutorial.img/20") +sm.dispose() diff --git a/scripts/portal/hintTuto03.py b/scripts/portal/hintTuto03.py new file mode 100755 index 0000000..d7b0834 --- /dev/null +++ b/scripts/portal/hintTuto03.py @@ -0,0 +1,4 @@ +# Adventurer Tutorial + +sm.avatarOriented("UI/tutorial.img/21") +sm.dispose() diff --git a/scripts/portal/hontale_BR.py b/scripts/portal/hontale_BR.py new file mode 100755 index 0000000..bc44994 --- /dev/null +++ b/scripts/portal/hontale_BR.py @@ -0,0 +1,47 @@ +# horntail - Cave of Life - Cave of trial 1 & 2 +from net.swordie.ms.constants import BossConstants + +if sm.getFieldID() == 240060000: + if sm.getChr().getField().getMobs().size() == 0: + sm.warp(240060100, True) + sm.setInstanceTime(BossConstants.HORNTAIL_NORMAL_TIME) + sm.dispose() + else: + sm.chat("Please eliminate all monsters") + +elif sm.getFieldID() == 240060100: + if sm.getChr().getField().getMobs().size() == 0: + sm.warpInstanceIn(240060300, True) + sm.setInstanceTime(BossConstants.HORNTAIL_NORMAL_TIME) + sm.dispose() + else: + sm.chat("Please eliminate all monsters") +elif sm.getFieldID() == 240060002: + if sm.getChr().getField().getMobs().size() == 0: + sm.warp(240060102, True) + sm.setInstanceTime(BossConstants.HORNTAIL_NORMAL_TIME) + sm.dispose() + else: + sm.chat("Please eliminate all monsters") +elif sm.getFieldID() == 240060102: + if sm.getChr().getField().getMobs().size() == 0: + sm.warpInstanceIn(240060200, True) + sm.setInstanceTime(BossConstants.HORNTAIL_NORMAL_TIME) + sm.dispose() + else: + sm.chat("Please eliminate all monsters") +elif sm.getFieldID() == 240060001: + if sm.getChr().getField().getMobs().size() == 0: + sm.warp(240060101, True) + sm.setInstanceTime(BossConstants.HORNTAIL_NORMAL_TIME) + sm.dispose() + else: + sm.chat("Please eliminate all monsters") + +elif sm.getFieldID() == 240060101: + if sm.getChr().getField().getMobs().size() == 0: + sm.warpInstanceIn(240060201, True) + sm.setInstanceTime(BossConstants.HORNTAIL_NORMAL_TIME) + sm.dispose() + else: + sm.chat("Please eliminate all monsters") diff --git a/scripts/portal/hontale_Bopen.py b/scripts/portal/hontale_Bopen.py new file mode 100755 index 0000000..ec75c17 --- /dev/null +++ b/scripts/portal/hontale_Bopen.py @@ -0,0 +1,18 @@ +# Cave of Life | 1st Room of Maze +# Continue Portal + +nextMap = chr.getFieldID() + 1 +portal = 0 + +if nextMap > 240050105: + nextMap = 240050200 + portal = 1 + +if sm.isPartyLeader(): + if sm.hasMobsInField(): + sm.systemMessage("The map must be clear before proceeding..") + else: + # TODO reset map for next party + sm.invokeForParty("warp", nextMap, portal) +else: + sm.systemMessage("Only the party leader may proceed..") \ No newline at end of file diff --git a/scripts/portal/hontale_BtoB1.py b/scripts/portal/hontale_BtoB1.py new file mode 100755 index 0000000..3419177 --- /dev/null +++ b/scripts/portal/hontale_BtoB1.py @@ -0,0 +1,4 @@ +# Cave of Life | Room of Maze +# exit portal + +sm.openNpc(2083002) \ No newline at end of file diff --git a/scripts/portal/hontale_C.py b/scripts/portal/hontale_C.py new file mode 100755 index 0000000..70ee0ac --- /dev/null +++ b/scripts/portal/hontale_C.py @@ -0,0 +1,11 @@ +# Cave of Life | Cave of Choice +# Warps to next Horntail map + +if sm.isPartyLeader(): + if sm.hasMobsInField(): + sm.systemMessage("The map must be clear before proceeding..") + else: + # TODO reset map for next party + sm.invokeForParty("warp", chr.getFieldID() + 100, 1) +else: + sm.systemMessage("Only the party leader may proceed..") \ No newline at end of file diff --git a/scripts/portal/hontale_boss1.py b/scripts/portal/hontale_boss1.py new file mode 100755 index 0000000..1886bf6 --- /dev/null +++ b/scripts/portal/hontale_boss1.py @@ -0,0 +1 @@ +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/hontale_boss2.py b/scripts/portal/hontale_boss2.py new file mode 100755 index 0000000..1886bf6 --- /dev/null +++ b/scripts/portal/hontale_boss2.py @@ -0,0 +1 @@ +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/hontale_pass.py b/scripts/portal/hontale_pass.py new file mode 100755 index 0000000..e185335 --- /dev/null +++ b/scripts/portal/hontale_pass.py @@ -0,0 +1,4 @@ +# horntail entrace - Cave of Life - Entrance + +sm.warp(240050000, 0) +sm.dispose() diff --git a/scripts/portal/hunterOut.py b/scripts/portal/hunterOut.py new file mode 100755 index 0000000..9fe05ab --- /dev/null +++ b/scripts/portal/hunterOut.py @@ -0,0 +1,34 @@ +maps = { + 931050410 : 102040600, + 931050415 : 260010201, + 931050434 : 261010002, + 931050435 : 261010103, + 931050417 : 261020500, + 931050424 : 261020200, + 931050419 : 240010200, + 931050420 : 240010600, + 931050426 : 240020101, + 931050425 : 240020401, + 931050422 : 240020200, + 931050413 : 220040200, + 931050428 : 211041400, + 931050436 : 250010502, + 931050418 : 251010500, + 931050427 : 220080000, + 931050429 : 230040410, + 931050430 : 240040400, + 931050431 : 270010500, + 931050432 : 270020500, + 931050433 : 270030500, +} +MYSTIC_GATE = 9073008 + +sm.setSpeakerID(MYSTIC_GATE) +response = sm.sendAskYesNo("Exit the Mystic Gate?") + +if not sm.getFieldID() in maps: + sm.sendSayOkay("Sorry I haven't been coded for this map yet") + sm.dispose() + +if response: + sm.warpInstanceOut(maps[sm.getFieldID()], 0) \ No newline at end of file diff --git a/scripts/portal/in03.py b/scripts/portal/in03.py new file mode 100755 index 0000000..0edbdcc --- /dev/null +++ b/scripts/portal/in03.py @@ -0,0 +1 @@ +sm.warp(104000004, 1) \ No newline at end of file diff --git a/scripts/portal/in2159011.py b/scripts/portal/in2159011.py new file mode 100755 index 0000000..999f8d9 --- /dev/null +++ b/scripts/portal/in2159011.py @@ -0,0 +1,13 @@ +# 931000001 +sm.setSpeakerID(2159011) + +if not ("exp1=1" in sm.getQRValue(23007) and "exp2=1" in sm.getQRValue(23007) and "exp3=1" in sm.getQRValue(23007) and "exp4=1" in sm.getQRValue(23007)): + sm.sendSayOkay("#bFind your hiding friends before continuing.#k") + sm.dispose() + +if sm.sendAskYesNo("#b(What a suspicious hole. Maybe Von is hiding inside. Peek inside?)#k"): + sm.giveExp(35) + sm.warp(931000010, 0) + +else: + sm.sendSayOkay("#b(Even Von wouldn't hide here, right?)#k") diff --git a/scripts/portal/inBlackSlimeBoss.py b/scripts/portal/inBlackSlimeBoss.py new file mode 100755 index 0000000..098d3f1 --- /dev/null +++ b/scripts/portal/inBlackSlimeBoss.py @@ -0,0 +1,2 @@ +# 120041800 +sm.warp(914200000, 2) \ No newline at end of file diff --git a/scripts/portal/inDragonEgg.py b/scripts/portal/inDragonEgg.py new file mode 100755 index 0000000..06b0010 --- /dev/null +++ b/scripts/portal/inDragonEgg.py @@ -0,0 +1,6 @@ +# Farm Street | Farm Center + +if sm.hasQuest(22005): # only if intro quest is active "Rescuing the Piglet" + sm.warp(900020100, 0) +else: + sm.warp(100030301, 0) diff --git a/scripts/portal/inERShip.py b/scripts/portal/inERShip.py new file mode 100755 index 0000000..1e42870 --- /dev/null +++ b/scripts/portal/inERShip.py @@ -0,0 +1,3 @@ +# 104020100 +sm.warp(104020120, 2) +sm.dispose() diff --git a/scripts/portal/inMyung.py b/scripts/portal/inMyung.py new file mode 100755 index 0000000..aaa8e77 --- /dev/null +++ b/scripts/portal/inMyung.py @@ -0,0 +1,6 @@ +# 103000000 - To Kerning City Pharmacy +sm.warp(103000002, 8) +if sm.hasQuest(2614): + for i in range(15): + sm.spawnMob(9300524, -54, 86, False) +sm.dispose() diff --git a/scripts/portal/inPTjob2.py b/scripts/portal/inPTjob2.py new file mode 100755 index 0000000..2e97ab4 --- /dev/null +++ b/scripts/portal/inPTjob2.py @@ -0,0 +1,8 @@ +# 200020001 +if 2400 == chr.getJob(): + sm.warp(915010000, 1)# should be instance ? +elif 2410 <= chr.getJob() <= 2411: + sm.warp(915020000, 2) +else: + sm.chat("Only Phantoms can enter.") +sm.dispose() diff --git a/scripts/portal/inPTjob3.py b/scripts/portal/inPTjob3.py new file mode 100755 index 0000000..5830ec6 --- /dev/null +++ b/scripts/portal/inPTjob3.py @@ -0,0 +1,6 @@ +# 260010601 +if 2410 <= chr.getJob() <= 2411: + sm.warp(915020100, 1) +else: + sm.chat("Only Phantoms can enter.") +sm.dispose() diff --git a/scripts/portal/inPTjob4.py b/scripts/portal/inPTjob4.py new file mode 100755 index 0000000..f907302 --- /dev/null +++ b/scripts/portal/inPTjob4.py @@ -0,0 +1,6 @@ +# 240010102 +if 2410 <= chr.getJob() <= 2411: + sm.warp(915010200, 1) +else: + sm.chat("Only Phantoms can enter.") +sm.dispose() diff --git a/scripts/portal/inThiefMaster.py b/scripts/portal/inThiefMaster.py new file mode 100755 index 0000000..6ef4509 --- /dev/null +++ b/scripts/portal/inThiefMaster.py @@ -0,0 +1,3 @@ +# 223010100 +sm.warp(103000003, 3) +sm.dispose() diff --git a/scripts/portal/in_701220200.py b/scripts/portal/in_701220200.py new file mode 100755 index 0000000..f3d44b2 --- /dev/null +++ b/scripts/portal/in_701220200.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(62009): + sm.warp(701220200) +else: + sm.chat("There's a demonic energy blocking you from entering.") \ No newline at end of file diff --git a/scripts/portal/in_701220300.py b/scripts/portal/in_701220300.py new file mode 100755 index 0000000..cd3f2a9 --- /dev/null +++ b/scripts/portal/in_701220300.py @@ -0,0 +1,4 @@ +if sm.hasQuest(62011) or sm.hasQuestCompleted(62011): + sm.warp(701220300) +else: + sm.chat("There's a demonic energy blocking you from entering.") \ No newline at end of file diff --git a/scripts/portal/in_FantasticPark.py b/scripts/portal/in_FantasticPark.py new file mode 100755 index 0000000..dc63db4 --- /dev/null +++ b/scripts/portal/in_FantasticPark.py @@ -0,0 +1,3 @@ +# 223000000 +sm.warp(223010000, 1) +sm.dispose() diff --git a/scripts/portal/in_adventure.py b/scripts/portal/in_adventure.py new file mode 100755 index 0000000..71eef19 --- /dev/null +++ b/scripts/portal/in_adventure.py @@ -0,0 +1,3 @@ +sm.setReturnField() +sm.warp(993080000, 2) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/in_ban.py b/scripts/portal/in_ban.py new file mode 100755 index 0000000..795914e --- /dev/null +++ b/scripts/portal/in_ban.py @@ -0,0 +1,4 @@ +# Created by MechAviv +# ID :: [865000000] +# Commerci Republic : San Commerci +sm.warp(865000003, 1) \ No newline at end of file diff --git a/scripts/portal/in_chowBoss.py b/scripts/portal/in_chowBoss.py new file mode 100755 index 0000000..6bde513 --- /dev/null +++ b/scripts/portal/in_chowBoss.py @@ -0,0 +1,19 @@ +# Portal for entering Chao + +CAVE_ENTRANCE = 2133005 # NPC ID +DEEP_INSIDE_THE_CAVE = 300010420 # MAP ID +BOULDER_MOUNTAIN_ENTRANCE = 300010400 # MAP ID 2 +BOULDER_MOUNTAIN_MENACE = 31223 # QUEST ID +time = 7 * 60 # 7 MINUTES + +sm.setSpeakerID(CAVE_ENTRANCE) + +if sm.hasQuest(BOULDER_MOUNTAIN_MENACE) or sm.hasQuestCompleted(BOULDER_MOUNTAIN_MENACE): + response = sm.sendAskYesNo("You sense something inside the dark cave. " + "Do you want to enter?") + if response: + sm.warpInstanceIn(DEEP_INSIDE_THE_CAVE) + sm.setInstanceTime(time, BOULDER_MOUNTAIN_ENTRANCE, 2) + sm.invokeAfterDelay(time * 1000, "chatRed", "Leaving the cave...") +else: + sm.sendSayOkay("You sense nothing inside the cave.") \ No newline at end of file diff --git a/scripts/portal/in_cygnus.py b/scripts/portal/in_cygnus.py new file mode 100755 index 0000000..1f89702 --- /dev/null +++ b/scripts/portal/in_cygnus.py @@ -0,0 +1,3 @@ +# 271040000 (outside) / 271040100 (inside) + +sm.openNpc(2143004) \ No newline at end of file diff --git a/scripts/portal/in_cygnusGarden.py b/scripts/portal/in_cygnusGarden.py new file mode 100755 index 0000000..f300e2a --- /dev/null +++ b/scripts/portal/in_cygnusGarden.py @@ -0,0 +1,9 @@ +# 271030600 +# sm.setSpeakerID(2143000) +# if not sm.hasItem(4032923): +# sm.sendSayOkay("You do not possess a #bDream Key") +# else: +# sm.chatRed("You have lost your Dream Key") +# sm.consumeItem(4032923) + sm.warp(271040000, 2) +# sm.dispose() diff --git a/scripts/portal/in_fairyBoss.py b/scripts/portal/in_fairyBoss.py new file mode 100755 index 0000000..6accfca --- /dev/null +++ b/scripts/portal/in_fairyBoss.py @@ -0,0 +1,39 @@ +# Portal for entering Ephenia + +nameList = [] + +EPHENIAS_HIDING_PLACE = 2133006 # NPC ID +QUEENS_HIDING_PLACE = 300030310 # MAP ID +FAIRY_FOREST_2 = 300030300 # MAP ID 2 +LADY_OF_THE_CORRUPTED_FOREST = 31229 # QUEST ID +time = 15 * 60 # 15 MINUTES + +sm.setSpeakerID(EPHENIAS_HIDING_PLACE) + +response = sm.sendAskYesNo("This is Ephenia's Hideout.\r\n" + "If you haven't gotten permission, you shouldn't be here.\r\n" + "Enter anyway?") + +if response: + chrHasQuest = True + if not sm.getParty() is None: + for partyChr in sm.getPartyMembersInSameField(chr): + partysm = partyChr.getScriptManager() + if not partysm.hasQuest(LADY_OF_THE_CORRUPTED_FOREST) and not partysm.hasQuestCompleted(LADY_OF_THE_CORRUPTED_FOREST): + chrHasQuest = False + nameList.append(partyChr.getName()) + break + + if chrHasQuest: + sm.warpInstanceIn(QUEENS_HIDING_PLACE, True) + sm.setInstanceTime(time, FAIRY_FOREST_2) + else: + text = ("You may not approach the Queen's Hiding Place. " + "Some of your party members have not completed the fairy elimination quest.\r\n\r\n" + "#bThese people don't meet the requirements:#k \r\n") + for i in nameList: + text += "#r" + i + "#k\r\n" + sm.sendSayOkay(text) + + else: + sm.sendSayOkay("You may enter in a party.") \ No newline at end of file diff --git a/scripts/portal/in_ghostHouse.py b/scripts/portal/in_ghostHouse.py new file mode 100755 index 0000000..8af660e --- /dev/null +++ b/scripts/portal/in_ghostHouse.py @@ -0,0 +1,3 @@ +# 223010100 +sm.warp(223010110, 0) +sm.dispose() diff --git a/scripts/portal/in_guild.py b/scripts/portal/in_guild.py new file mode 100755 index 0000000..ecba870 --- /dev/null +++ b/scripts/portal/in_guild.py @@ -0,0 +1,3 @@ +# 200000300 +sm.warp(200000301, 3) +sm.dispose() diff --git a/scripts/portal/in_hillah.py b/scripts/portal/in_hillah.py new file mode 100755 index 0000000..8f895da --- /dev/null +++ b/scripts/portal/in_hillah.py @@ -0,0 +1 @@ +sm.openNpc(2184000) \ No newline at end of file diff --git a/scripts/portal/in_party2.py b/scripts/portal/in_party2.py new file mode 100755 index 0000000..ec59440 --- /dev/null +++ b/scripts/portal/in_party2.py @@ -0,0 +1,3 @@ +# 221023200 +sm.warp(221023300, 0) +sm.dispose() diff --git a/scripts/portal/infoAttackTuto.py b/scripts/portal/infoAttackTuto.py new file mode 100755 index 0000000..995c49a --- /dev/null +++ b/scripts/portal/infoAttackTuto.py @@ -0,0 +1,3 @@ +# Created by MechAviv +# ID :: [4000013] +# Maple Road : Inside the Small Forest \ No newline at end of file diff --git a/scripts/portal/infoPickupTuto.py b/scripts/portal/infoPickupTuto.py new file mode 100755 index 0000000..995c49a --- /dev/null +++ b/scripts/portal/infoPickupTuto.py @@ -0,0 +1,3 @@ +# Created by MechAviv +# ID :: [4000013] +# Maple Road : Inside the Small Forest \ No newline at end of file diff --git a/scripts/portal/infoRelaxTuto.py b/scripts/portal/infoRelaxTuto.py new file mode 100755 index 0000000..f4cbe94 --- /dev/null +++ b/scripts/portal/infoRelaxTuto.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [4000012] +# Maple Road : Snail Park + +sm.avatarOriented("UI/tutorial.img/27") diff --git a/scripts/portal/infoSkillTuto.py b/scripts/portal/infoSkillTuto.py new file mode 100755 index 0000000..995c49a --- /dev/null +++ b/scripts/portal/infoSkillTuto.py @@ -0,0 +1,3 @@ +# Created by MechAviv +# ID :: [4000013] +# Maple Road : Inside the Small Forest \ No newline at end of file diff --git a/scripts/portal/jett_tuto_11_1.py b/scripts/portal/jett_tuto_11_1.py new file mode 100755 index 0000000..caaa636 --- /dev/null +++ b/scripts/portal/jett_tuto_11_1.py @@ -0,0 +1,11 @@ +# Created by MechAviv +# Map ID :: 620100041 +# Nautilus : Wrecked Airship 1 + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) + +sm.warp(620100042, 0) \ No newline at end of file diff --git a/scripts/portal/jett_tuto_5672.py b/scripts/portal/jett_tuto_5672.py new file mode 100755 index 0000000..531e774 --- /dev/null +++ b/scripts/portal/jett_tuto_5672.py @@ -0,0 +1,6 @@ +# Created by MechAviv +# Map ID :: 620100026 +# Spaceship : In Front of the Shuttle + +# [FORCED_STAT_RESET] [] +sm.warp(620100027, 0) diff --git a/scripts/portal/jett_tuto_9_1.py b/scripts/portal/jett_tuto_9_1.py new file mode 100755 index 0000000..0e0e094 --- /dev/null +++ b/scripts/portal/jett_tuto_9_1.py @@ -0,0 +1,37 @@ +# Created by MechAviv +# Map ID :: 620100029 +# Spaceship : In Front of the Shuttle + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.startQuest(53246) +sm.completeQuest(53246) +sm.sendDelay(1000) + + +sm.forcedAction(379, 0) +sm.sendDelay(2000) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendNext("We're en route. Can you really bring us down over Maple World?") + + +sm.setSpeakerID(9201286) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Kshhhhh... Of course... Our power... is great... Kshhhhh... this...") + + +sm.sendDelay(2000) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# [FORCED_STAT_RESET] [] +sm.warp(620100040, 0) diff --git a/scripts/portal/jobout00.py b/scripts/portal/jobout00.py new file mode 100755 index 0000000..a0b74ea --- /dev/null +++ b/scripts/portal/jobout00.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [101000010] +# Ellinia : Magic Library + +sm.warp(101000000, 4) \ No newline at end of file diff --git a/scripts/portal/kCity_agit.py b/scripts/portal/kCity_agit.py new file mode 100755 index 0000000..f934550 --- /dev/null +++ b/scripts/portal/kCity_agit.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331000000 +# Main Street :: City Center +sm.warp(331001000, 0) \ No newline at end of file diff --git a/scripts/portal/kCity_school.py b/scripts/portal/kCity_school.py new file mode 100755 index 0000000..c9c1b80 --- /dev/null +++ b/scripts/portal/kCity_school.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331000000 +# Main Street :: City Center +sm.warp(331002000, 0) \ No newline at end of file diff --git a/scripts/portal/kCity_west.py b/scripts/portal/kCity_west.py new file mode 100755 index 0000000..b1f56e8 --- /dev/null +++ b/scripts/portal/kCity_west.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331000000 +# Main Street :: City Center + +# should be handled by quest +if sm.hasQuest(22730): + sm.warpInstanceIn(331003000, 0) +else: + sm.warp(331003000, 0) \ No newline at end of file diff --git a/scripts/portal/kannaTutoPortal.py b/scripts/portal/kannaTutoPortal.py new file mode 100755 index 0000000..c07ee6c --- /dev/null +++ b/scripts/portal/kannaTutoPortal.py @@ -0,0 +1,42 @@ +# Created by MechAviv +# Map ID :: 807100102 +# Honnou-ji : Honnou-ji Alleyway + +if sm.hasMobsInField(): + sm.chatScript("Defeat all the enemy Spirit Walkers!") +else: + sm.curNodeEventEnd(True) + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(True, False, False, False) + sm.showFieldEffect("JPKanna/magicCircle2", 0) + sm.sendDelay(7000) + + + sm.setSpeakerID(9131010) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendNext("It seems like the others have succeeded as well. The barrier is collapsing.") + + + sm.setSpeakerID(9131010) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.setSpeakerType(3) + sm.sendSay("I need to hurry to the basement and take care of the altar.") + + + sm.setTemporarySkillSet(0) + sm.setInGameDirectionMode(False, True, False, False) + sm.removeSkill(40021183) + sm.removeSkill(40021184) + sm.removeSkill(40021185) + sm.removeSkill(40021186) + # Unhandled Message [47] Packet: 2F 02 00 00 00 A0 5C 08 00 00 00 00 00 24 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0F 00 6D 6F 62 5F 6B 69 6C 6C 3D 31 32 37 30 35 31 58 68 08 00 00 00 00 00 27 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0F 00 6D 6F 62 5F 6B 69 6C 6C 3D 31 32 37 30 35 31 + sm.warp(807100103, 1) \ No newline at end of file diff --git a/scripts/portal/kenjiTutoDirection.py b/scripts/portal/kenjiTutoDirection.py new file mode 100755 index 0000000..ae3215c --- /dev/null +++ b/scripts/portal/kenjiTutoDirection.py @@ -0,0 +1,46 @@ +# Portal for Hayato Tutorial cutsence when approaching Princess | Honnou-ji Temple Plaza (807100004) +# Author: Tiger + +PRINCESS_NO = 9131005 + +sm.lockInGameUI(True) +sm.removeEscapeButton() +sm.forcedInput(0) + +sm.setPlayerAsSpeaker() +sm.sendNext("Please step aside, madam, I have no quarrel with you.") + +sm.setSpeakerID(PRINCESS_NO) +sm.flipDialogue() +sm.sendSay("How dare you speak to me in such a familiar tongue. I am Kichou, daughter of the Saitou Dousan, lawful wife of the Demon King!") + +sm.setPlayerAsSpeaker() +sm.sendSay("The tales of your beauty are not exaggerations, Lady No, but you must stand aside. Your husband is my sworn enemy.") + +sm.setSpeakerID(PRINCESS_NO) +sm.flipDialogue() +sm.sendSay("Cocky little brat! You will be me for death before I am done!") + +sm.showNpcSpecialActionByTemplateId(PRINCESS_NO, "step") +sm.sendDelay(1000) + +sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/14", 2000, PRINCESS_NO) +sm.sendDelay(2000) + +sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/15", 2000, PRINCESS_NO) +sm.sendDelay(2000) + +sm.showBalloonMsgOnNpc("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/16", 2000, PRINCESS_NO) +sm.sendDelay(2000) + +sm.showBalloonMsg("Effect/DirectionJP3.img/effect/kenjiTuto/balloonMsg/17", 2000) +sm.sendDelay(2000) + +sm.forcedInput(1) +sm.sendDelay(1000) + +sm.forcedInput(7) +sm.sendDelay(200) + +sm.warp(807040000) +sm.dispose() # needed here or script will never stop for the next player diff --git a/scripts/portal/kenjiTutoPortal.py b/scripts/portal/kenjiTutoPortal.py new file mode 100755 index 0000000..7bc70f0 --- /dev/null +++ b/scripts/portal/kenjiTutoPortal.py @@ -0,0 +1,4 @@ +# Portal for Hayato Tutorial +# Author: Tiger + +sm.warp(807100003) # Honnou-ji : Honnou-ji Courtyard diff --git a/scripts/portal/kine_downFloor1.py b/scripts/portal/kine_downFloor1.py new file mode 100755 index 0000000..2b3b71d --- /dev/null +++ b/scripts/portal/kine_downFloor1.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002100 +# School for the Gifted :: Second Floor Corridor +sm.warp(331002000, 1) \ No newline at end of file diff --git a/scripts/portal/kine_gate.py b/scripts/portal/kine_gate.py new file mode 100755 index 0000000..55c0766 --- /dev/null +++ b/scripts/portal/kine_gate.py @@ -0,0 +1,9 @@ +if sm.hasQuest(22780) or sm.hasQuestCompleted(22780): + KINESIS = 1531000 + sm.setNpcOverrideBoxChat(KINESIS) + if sm.getFieldID() == 101020400: + if sm.sendAskYesNo("Return to Seoul?"): + sm.warp(331001000, 4) + elif sm.getFieldID() == 331001000: + if sm.sendAskYesNo("Return to Maple World?"): + sm.warp(101020400, 5) \ No newline at end of file diff --git a/scripts/portal/kine_goFloor1.py b/scripts/portal/kine_goFloor1.py new file mode 100755 index 0000000..572f802 --- /dev/null +++ b/scripts/portal/kine_goFloor1.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002300 +# School for the Gifted :: 1-1 Classroom +sm.warpInstanceOut(331002000, 2) \ No newline at end of file diff --git a/scripts/portal/kine_goFloor2.py b/scripts/portal/kine_goFloor2.py new file mode 100755 index 0000000..6b9ebdf --- /dev/null +++ b/scripts/portal/kine_goFloor2.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002300 +# School for the Gifted :: 2-1 Classroom +sm.warpInstanceOut(331002100, 1) \ No newline at end of file diff --git a/scripts/portal/kine_goSub2.py b/scripts/portal/kine_goSub2.py new file mode 100755 index 0000000..510788b --- /dev/null +++ b/scripts/portal/kine_goSub2.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331003000 +# Subway :: Subway Car #1 +BLUE_SHIRT_GUY = 1531064 + +sm.removeNpc(BLUE_SHIRT_GUY) +sm.warpInstanceIn(331003100, 0) diff --git a/scripts/portal/kine_goSub3.py b/scripts/portal/kine_goSub3.py new file mode 100755 index 0000000..464c64f --- /dev/null +++ b/scripts/portal/kine_goSub3.py @@ -0,0 +1,9 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331003100 +# Subway :: Subway Car #2 +BLONDE_LADY = 1531065 +STUDENT = 1531066 +sm.removeNpc(BLONDE_LADY) +sm.removeNpc(STUDENT) +sm.warpInstanceIn(331003200, 0) \ No newline at end of file diff --git a/scripts/portal/kine_goSub4.py b/scripts/portal/kine_goSub4.py new file mode 100755 index 0000000..6662780 --- /dev/null +++ b/scripts/portal/kine_goSub4.py @@ -0,0 +1,7 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331003200 +# Subway :: Subway Car #3 +GIRL = 1531067 +sm.removeNpc(GIRL) +sm.warpInstanceIn(331003300, 0) \ No newline at end of file diff --git a/scripts/portal/kine_go_tuto2.py b/scripts/portal/kine_go_tuto2.py new file mode 100755 index 0000000..8f8fa13 --- /dev/null +++ b/scripts/portal/kine_go_tuto2.py @@ -0,0 +1,17 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001110 +# Hideout :: Training Room 1 + +if "1" not in sm.getQuestEx(22700, "E1"): + sm.lockForIntro() + sm.playSound("Sound/Field.img/masteryBook/EnchantSuccess") + sm.showClearStageExpWindow(350) + sm.giveExp(350) + + sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_04", 100) + sm.sendDelay(2500) + + sm.setQuestEx(22700, "E1", "1") + sm.unlockForIntro() + sm.warp(331001120, 0) \ No newline at end of file diff --git a/scripts/portal/kine_go_tuto3.py b/scripts/portal/kine_go_tuto3.py new file mode 100755 index 0000000..d6baac4 --- /dev/null +++ b/scripts/portal/kine_go_tuto3.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001120 +# Hideout :: Training Room 2 +KINESIS = 1531000 +JAY = 1531001 + +if "1" not in sm.getQuestEx(22700, "E2"): + sm.setNpcOverrideBoxChat(KINESIS) + sm.sendNext("Jay, I feel so slow walking around like this. I'm going to switch to my speedier moves.") + + sm.setNpcOverrideBoxChat(JAY) + sm.sendSay("#face9#Fine, whatever! Just ignore the test plan I spent hours on... Okay, I updated my database with your #bTriple Jump#k and #bAttack Skills#k for the final stage. Go nuts, dude.") + + sm.lockForIntro() + sm.playSound("Sound/Field.img/masteryBook/EnchantSuccess") + sm.showClearStageExpWindow(600) + sm.giveExp(600) + + sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_04", 100) + sm.sendDelay(2500) + + sm.unlockForIntro() + sm.warp(331001130, 0) + sm.setQuestEx(22700, "E1", "1") \ No newline at end of file diff --git a/scripts/portal/kine_gokCity2.py b/scripts/portal/kine_gokCity2.py new file mode 100755 index 0000000..2a4f1bc --- /dev/null +++ b/scripts/portal/kine_gokCity2.py @@ -0,0 +1,21 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: HQ +KINESIS = 1531000 +JAY = 1531001 +NERO = 1531003 + +if sm.hasQuest(22730): + sm.setIntroBoxChat(KINESIS) + sm.sendNext("No, Nero. You stay here. Jay, make sure Nero doesn't follow me.") + + sm.setIntroBoxChat(NERO) + sm.sendSay("#face4#Meow! Meow! ") + + sm.setIntroBoxChat(JAY) + sm.sendSay("#face1#Are... are you telling me to hold that thing?!") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("I can't take a kitten into battle. Think of it as a special mission... partner.") +sm.warp(331000000, 2) \ No newline at end of file diff --git a/scripts/portal/kine_intoClass.py b/scripts/portal/kine_intoClass.py new file mode 100755 index 0000000..6f8876a --- /dev/null +++ b/scripts/portal/kine_intoClass.py @@ -0,0 +1,11 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor + +if sm.hasQuest(22727): + sm.warpInstanceIn(331002300) +else: + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendSayOkay("I don't need to check this classroom.") diff --git a/scripts/portal/kine_intoClass2.py b/scripts/portal/kine_intoClass2.py new file mode 100755 index 0000000..31a190a --- /dev/null +++ b/scripts/portal/kine_intoClass2.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor +if sm.hasQuest(22728): + sm.warpInstanceIn(331002400) +else: + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendSayOkay("I don't need to check this classroom.") \ No newline at end of file diff --git a/scripts/portal/kine_tutoV01.py b/scripts/portal/kine_tutoV01.py new file mode 100755 index 0000000..d9ffe85 --- /dev/null +++ b/scripts/portal/kine_tutoV01.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001110 +# Hideout :: Training Room 1 + +if "1" not in sm.getQuestEx(22700, "V01"): + sm.progressMessageFont(3, 20, 20, 0, "Move by pressing the move or jump keys.") + sm.setQuestEx(22700, "V01", "1") diff --git a/scripts/portal/kine_tutoV02.py b/scripts/portal/kine_tutoV02.py new file mode 100755 index 0000000..6c91866 --- /dev/null +++ b/scripts/portal/kine_tutoV02.py @@ -0,0 +1,10 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001110 +# Hideout :: Training Room 1 +KINESIS = 1531000 +JAY = 1531001 +if "1" not in sm.getQuestEx(22700, "V02"): + sm.addPopUpSay(KINESIS, 2000, "Jay, this is too easy!", "") + sm.addPopUpSay(JAY, 2000, "#face9#I'm still calibrating, you smuglord! I'll prep some monsters for the next room.", "") + sm.setQuestEx(22700, "V02", "1") \ No newline at end of file diff --git a/scripts/portal/kine_tutoout.py b/scripts/portal/kine_tutoout.py new file mode 100755 index 0000000..62d94a7 --- /dev/null +++ b/scripts/portal/kine_tutoout.py @@ -0,0 +1,17 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: Training Room 3 + +if "1" not in sm.getQuestEx(22700, "E3"): + sm.lockForIntro() + sm.playSound("Sound/Field.img/masteryBook/EnchantSuccess") + sm.showClearStageExpWindow(600) + sm.giveExp(600) + + sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_08", 100) + sm.sendDelay(2500) + + sm.setQuestEx(22700, "E3", "1") + sm.unlockForIntro() + sm.warp(331001000, 2) \ No newline at end of file diff --git a/scripts/portal/kine_upFloor2.py b/scripts/portal/kine_upFloor2.py new file mode 100755 index 0000000..86f8285 --- /dev/null +++ b/scripts/portal/kine_upFloor2.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor +sm.warp(331002100, 0) \ No newline at end of file diff --git a/scripts/portal/laniaDoor.py b/scripts/portal/laniaDoor.py new file mode 100755 index 0000000..349bffe --- /dev/null +++ b/scripts/portal/laniaDoor.py @@ -0,0 +1 @@ +sm.warp(101020100, 9) \ No newline at end of file diff --git a/scripts/portal/lionCastle_enter.py b/scripts/portal/lionCastle_enter.py new file mode 100755 index 0000000..f65aac2 --- /dev/null +++ b/scripts/portal/lionCastle_enter.py @@ -0,0 +1,9 @@ +CASTLE_ENTRANCE = 211060010 + +SHADE_THIRD_JOB = 38074 +CASTLE_ENTRANCE_SHADE3 = 921110300 + +if sm.hasQuest(SHADE_THIRD_JOB) or sm.hasQuest(SHADE_THIRD_JOB + 1): + sm.warpInstanceIn(CASTLE_ENTRANCE_SHADE3, 1, False) +else: + sm.warp(CASTLE_ENTRANCE) diff --git a/scripts/portal/lostSpirit_next.py b/scripts/portal/lostSpirit_next.py new file mode 100755 index 0000000..52559eb --- /dev/null +++ b/scripts/portal/lostSpirit_next.py @@ -0,0 +1,4 @@ +# id 1 (next00), field 940200240 +sm.startQuest(34464) +sm.completeQuestNoCheck(34464) +sm.warp(940200210) diff --git a/scripts/portal/ludi_s1Clear.py b/scripts/portal/ludi_s1Clear.py new file mode 100755 index 0000000..bf9f78c --- /dev/null +++ b/scripts/portal/ludi_s1Clear.py @@ -0,0 +1,2 @@ +# Stage 1 ludibrium pq to stage 2 +sm.invokeForParty("warp", 922010400) \ No newline at end of file diff --git a/scripts/portal/ludi_s2Clear.py b/scripts/portal/ludi_s2Clear.py new file mode 100755 index 0000000..6589cfe --- /dev/null +++ b/scripts/portal/ludi_s2Clear.py @@ -0,0 +1,2 @@ +# Stage 2 ludibrium pq to stage 3 +sm.invokeForParty("warp", 922010600) \ No newline at end of file diff --git a/scripts/portal/mPark_final.py b/scripts/portal/mPark_final.py new file mode 100755 index 0000000..5a71959 --- /dev/null +++ b/scripts/portal/mPark_final.py @@ -0,0 +1,33 @@ +from net.swordie.ms.client.character.quest import Quest +from net.swordie.ms.constants import GameConstants +from net.swordie.ms.enums import QuestStatus + +qm = sm.getChr().getQuestManager() +quest = qm.getQuests().get(GameConstants.MONSTER_PARK_EXP_QUEST) +if quest is None: + quest = Quest(GameConstants.MONSTER_PARK_EXP_QUEST, QuestStatus.STARTED) + quest.setQrValue("0") + qm.addQuest(quest) +quest.setQrValue(str(int(quest.getQRValue()))) + + +fieldID = sm.getFieldID() + +if fieldID / 1000000 == 952 or fieldID / 1000000 == 953 or fieldID / 1000000 == 954: + sm.setSpeakerID(9071005) + sm.sendNext("Did you have a blast in Monster Park? Here's your reward\r\n" + "\r\n" + "#e#bDay-of-the-week reward: #v"+ str(sm.getMPReward()) +"##t"+ str(sm.getMPReward()) +"#\r\n" + "EXP reward: "+ sm.formatNumber(quest.getQRValue())) + if sm.canHold(sm.getMPReward()): + #Warp out instance | Monster Park + sm.warpInstanceOut(951000000) #Monster Park + sm.giveExp(long(quest.getQRValue())) + sm.giveItem(sm.getMPReward()) + sm.stopEvents() + else: + sm.sendSayOkay("Please make some space before leaving.") +else: + sm.chat("This is uncoded for the current map (" + fieldID + ")") + +sm.dispose() diff --git a/scripts/portal/mPark_in00.py b/scripts/portal/mPark_in00.py new file mode 100755 index 0000000..9ecf5e3 --- /dev/null +++ b/scripts/portal/mPark_in00.py @@ -0,0 +1,44 @@ +# 951000000 - Monster Park + +from net.swordie.ms.constants import GameConstants + +minLv = 105 +maxLv = 115 + +maps = [ +["Auto Security Area (Lv.105-114)", 953020000] +] + +sm.setSpeakerID(9071004) +if not sm.getParty() is None: + sm.sendSayOkay("Please leave your party to enter Monster Park.") + sm.dispose() + +elif sm.getChr().getLevel() < minLv or sm.getChr().getLevel() > maxLv: + sm.sendSayOkay("You need to be between Level "+ str(minLv) +" and "+ str(maxLv) +" to enter.") + sm.dispose() + +else: + if sm.getMonsterParkCount() >= GameConstants.MAX_MONSTER_PARK_RUNS: + colour = "#r" + else: + colour = "#b" + string = "#eToday is #b"+ sm.getDay() +"#k.\r\nToday's Clear Count "+ colour +""+ str(sm.getMonsterParkCount()) +"/"+ str(GameConstants.MAX_MONSTER_PARK_RUNS) +"#k (per Maple Character)\r\n\r\nYou have #b"+ str(2) +"#k free clears left for today.\r\n\r\n#n#b" + i = 0 + while i < len(maps): + string += "#L"+ str(i) +"#"+ maps[i][0] +"#l\r\n" + i += 1 + selection = sm.sendNext(string) + + if sm.getMonsterParkCount() >= GameConstants.MAX_MONSTER_PARK_RUNS: + sm.sendSayOkay("I'm sorry, but you've used up all your clears for today.") + sm.dispose() + else: + if sm.sendAskYesNo("#eToday is #b"+ sm.getDay() +"#k.\r\n\r\n" + + "Selected Dungeon: #b"+ maps[selection][0] +"#k\r\n" + + "Clearing the dungeon will use up #bone of your free clears#k \r\nfor today.\r\n\r\n" + + "Would you like to enter the dungeon?"): + sm.warpInstanceIn(maps[selection][1]) + sm.incrementMonsterParkCount() + sm.setInstanceTime(GameConstants.MONSTER_PARK_TIME, 951000000) + sm.createQuestWithQRValue(GameConstants.MONSTER_PARK_EXP_QUEST, "0") \ No newline at end of file diff --git a/scripts/portal/mPark_in01.py b/scripts/portal/mPark_in01.py new file mode 100755 index 0000000..65937ae --- /dev/null +++ b/scripts/portal/mPark_in01.py @@ -0,0 +1,50 @@ +# Monster Park + +from net.swordie.ms.constants import GameConstants + +minLv = 115 +maxLv = 160 + +maps = [ +["Mossy Tree Forest (Lv.115-124", 953030000], +["Sky Forest Training Center (Lv.125-129)", 953040000], +["Secret Pirate Hideout (Lv.125-134)", 953060000], +["Otherworld Battlefield (Lv.135-144)", 953070000], +["Dangerously Isolated Forest (Lv.140-149)", 953080000], +["Forbidden Time (Lv.145-154)", 953050000], +["Clandestine Ruins (Lv.150-159)", 953090000], +] + +sm.setSpeakerID(9071004) +if not sm.getParty() is None: + sm.sendSayOkay("Please leave your party to enter Monster Park.") + sm.dispose() + +elif sm.getChr().getLevel() < minLv or sm.getChr().getLevel() > maxLv: + sm.sendSayOkay("You need to be between Level "+ str(minLv) +" and "+ str(maxLv) +" to enter.") + sm.dispose() + +else: + if sm.getMonsterParkCount() >= GameConstants.MAX_MONSTER_PARK_RUNS: + colour = "#r" + else: + colour = "#b" + string = "#eToday is #b"+ sm.getDay() +"#k.\r\nToday's Clear Count "+ colour +""+ str(sm.getMonsterParkCount()) +"/"+ str(GameConstants.MAX_MONSTER_PARK_RUNS) +"#k (per Maple Character)\r\n\r\nYou have #b"+ str(2) +"#k free clears left for today.\r\n\r\n#n#b" + i = 0 + while i < len(maps): + string += "#L"+ str(i) +"#"+ maps[i][0] +"#l\r\n" + i += 1 + selection = sm.sendNext(string) + + if sm.getMonsterParkCount() >= GameConstants.MAX_MONSTER_PARK_RUNS: + sm.sendSayOkay("I'm sorry, but you've used up all your clears for today.") + sm.dispose() + else: + if sm.sendAskYesNo("#eToday is #b"+ sm.getDay() +"#k.\r\n\r\n" + + "Selected Dungeon: #b"+ maps[selection][0] +"#k\r\n" + + "Clearing the dungeon will use up #bone of your free clears#k \r\nfor today.\r\n\r\n" + + "Would you like to enter the dungeon?"): + sm.warpInstanceIn(maps[selection][1]) + sm.incrementMonsterParkCount() + sm.setInstanceTime(GameConstants.MONSTER_PARK_TIME) + sm.createQuestWithQRValue(GameConstants.MONSTER_PARK_EXP_QUEST, "0") \ No newline at end of file diff --git a/scripts/portal/mPark_in02.py b/scripts/portal/mPark_in02.py new file mode 100755 index 0000000..11f69a9 --- /dev/null +++ b/scripts/portal/mPark_in02.py @@ -0,0 +1,50 @@ +# Monster Park + +from net.swordie.ms.constants import GameConstants + +minLv = 160 +maxLv = 251 + +maps = [ +["Ruined City (Lv.160-169)", 954000000], +["Dead Tree Forest (Lv.170-179)", 954010000], +["Watchman's Tower (Lv.175-184)", 954020000], +["Dragon Nest (Lv.180-189)", 954030000], +["Temple of Oblivion (Lv.185-194)", 954040000], +["Knight Stronghold (Lv.190-199)", 954050000], +["Spirit Valley (Lv.200-209)", 954060000], +] + +sm.setSpeakerID(9071004) +if not sm.getParty() is None: + sm.sendSayOkay("Please leave your party to enter Monster Park.") + sm.dispose() + +elif sm.getChr().getLevel() < minLv or sm.getChr().getLevel() > maxLv: + sm.sendSayOkay("You need to be between Level "+ str(minLv) +" and "+ str(maxLv) +" to enter.") + sm.dispose() + +else: + if sm.getMonsterParkCount() >= GameConstants.MAX_MONSTER_PARK_RUNS: + colour = "#r" + else: + colour = "#b" + string = "#eToday is #b"+ sm.getDay() +"#k.\r\nToday's Clear Count "+ colour +""+ str(sm.getMonsterParkCount()) +"/"+ str(GameConstants.MAX_MONSTER_PARK_RUNS) +"#k (per Maple Character)\r\n\r\nYou have #b"+ str(2) +"#k free clears left for today.\r\n\r\n#n#b" + i = 0 + while i < len(maps): + string += "#L"+ str(i) +"#"+ maps[i][0] +"#l\r\n" + i += 1 + selection = sm.sendNext(string) + + if sm.getMonsterParkCount() >= GameConstants.MAX_MONSTER_PARK_RUNS: + sm.sendSayOkay("I'm sorry, but you've used up all your clears for today.") + sm.dispose() + else: + if sm.sendAskYesNo("#eToday is #b"+ sm.getDay() +"#k.\r\n\r\n" + + "Selected Dungeon: #b"+ maps[selection][0] +"#k\r\n" + + "Clearing the dungeon will use up #bone of your free clears#k \r\nfor today.\r\n\r\n" + + "Would you like to enter the dungeon?"): + sm.warpInstanceIn(maps[selection][1]) + sm.incrementMonsterParkCount() + sm.setInstanceTime(GameConstants.MONSTER_PARK_TIME) + sm.createQuestWithQRValue(GameConstants.MONSTER_PARK_EXP_QUEST, "0") \ No newline at end of file diff --git a/scripts/portal/mPark_nextStage.py b/scripts/portal/mPark_nextStage.py new file mode 100755 index 0000000..b99ef51 --- /dev/null +++ b/scripts/portal/mPark_nextStage.py @@ -0,0 +1,8 @@ +if not sm.hasMobsInField(): + fieldID = sm.getFieldID() + map = fieldID + 100 + portal = 0 + sm.warp(map, portal) +else: + sm.chat("Please kill all monsters first.") +sm.dispose() diff --git a/scripts/portal/magnus_easy.py b/scripts/portal/magnus_easy.py new file mode 100755 index 0000000..53729f1 --- /dev/null +++ b/scripts/portal/magnus_easy.py @@ -0,0 +1,17 @@ +from net.swordie.ms.constants import BossConstants + +EASY_MAGNUS_QUEST = 31851 + +sm.setSpeakerID(3001000) # Edea + +response = sm.sendAskYesNo("Would you like to fight easy magnus?") +if response: + if not sm.hasQuestCompleted(EASY_MAGNUS_QUEST): + sm.sendSayOkay("Please talk to Piston to know more about the Magnus simulator.") + elif sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader enter if you wish to face Magnus.") + elif sm.checkParty(): + sm.setDeathCount(BossConstants.MAGNUS_DEATHCOUNT) + sm.warpInstanceIn(401060300, True) diff --git a/scripts/portal/map915020100_PT.py b/scripts/portal/map915020100_PT.py new file mode 100755 index 0000000..94496ff --- /dev/null +++ b/scripts/portal/map915020100_PT.py @@ -0,0 +1,3 @@ +if 2400 <= chr.getJob() <= 2411: + sm.warp(915020101, 1) +sm.dispose() diff --git a/scripts/portal/map915020200_PT.py b/scripts/portal/map915020200_PT.py new file mode 100755 index 0000000..88d3a6b --- /dev/null +++ b/scripts/portal/map915020200_PT.py @@ -0,0 +1,3 @@ +# 915020200 +sm.warp(915020201, 2) +sm.dispose() diff --git a/scripts/portal/map_865030200.py b/scripts/portal/map_865030200.py new file mode 100755 index 0000000..5935c8f --- /dev/null +++ b/scripts/portal/map_865030200.py @@ -0,0 +1,3 @@ +# 865030200 +sm.warp(865030201, 2) +sm.dispose() diff --git a/scripts/portal/market00.py b/scripts/portal/market00.py new file mode 100755 index 0000000..0d8f8ea --- /dev/null +++ b/scripts/portal/market00.py @@ -0,0 +1,4 @@ +# Free market +sm.chat("Warping you to your previous map.") +sm.warp(chr.getPreviousFieldID()) + \ No newline at end of file diff --git a/scripts/portal/market01.py b/scripts/portal/market01.py new file mode 100755 index 0000000..d59845e --- /dev/null +++ b/scripts/portal/market01.py @@ -0,0 +1,2 @@ +# 100000100 - henesys fm portal +sm.warp(910000000, 36) diff --git a/scripts/portal/market02.py b/scripts/portal/market02.py new file mode 100755 index 0000000..f8a0a6e --- /dev/null +++ b/scripts/portal/market02.py @@ -0,0 +1,4 @@ +# 220000000 - Ludi FM +sm.setReturnField() +sm.warp(910000000, 2) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/market06.py b/scripts/portal/market06.py new file mode 100755 index 0000000..4fd1f70 --- /dev/null +++ b/scripts/portal/market06.py @@ -0,0 +1,4 @@ +# 221000000 - Omega Sector FM +sm.setReturnField() +sm.warp(910000000, 2) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/market08.py b/scripts/portal/market08.py new file mode 100755 index 0000000..b32b2f5 --- /dev/null +++ b/scripts/portal/market08.py @@ -0,0 +1,4 @@ +# 240000000 - Leafre FM +sm.setReturnField() +sm.warp(910000000, 2) +sm.dispose() diff --git a/scripts/portal/market14.py b/scripts/portal/market14.py new file mode 100755 index 0000000..cddb3cd --- /dev/null +++ b/scripts/portal/market14.py @@ -0,0 +1,4 @@ +# 224000000 - Korean Folk Town FM +sm.setReturnField() +sm.warp(910000000, 2) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/market17.py b/scripts/portal/market17.py new file mode 100755 index 0000000..41f1d2e --- /dev/null +++ b/scripts/portal/market17.py @@ -0,0 +1,4 @@ +# 120000100 - Nautilus FM +sm.setReturnField() +sm.warp(910000000, 2) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/market20.py b/scripts/portal/market20.py new file mode 100755 index 0000000..015b2fe --- /dev/null +++ b/scripts/portal/market20.py @@ -0,0 +1,3 @@ +# Portal to FM from Ardentmill +sm.setReturnField() +sm.warp(910000000, 2) \ No newline at end of file diff --git a/scripts/portal/mas_down00.py b/scripts/portal/mas_down00.py new file mode 100755 index 0000000..135facd --- /dev/null +++ b/scripts/portal/mas_down00.py @@ -0,0 +1,4 @@ +# 863100002 + +sm.warp(863100006, 2) +sm.dispose() diff --git a/scripts/portal/mas_fog00.py b/scripts/portal/mas_fog00.py new file mode 100755 index 0000000..0095371 --- /dev/null +++ b/scripts/portal/mas_fog00.py @@ -0,0 +1,3 @@ +# id 2 (east00), field 863100008 +sm.startQuest(17800) +sm.warp(863100001) diff --git a/scripts/portal/mas_fog01.py b/scripts/portal/mas_fog01.py new file mode 100755 index 0000000..9756672 --- /dev/null +++ b/scripts/portal/mas_fog01.py @@ -0,0 +1,3 @@ +# 863100007 +sm.warp(863100100, 2) +sm.dispose() diff --git a/scripts/portal/mayong.py b/scripts/portal/mayong.py new file mode 100755 index 0000000..159de67 --- /dev/null +++ b/scripts/portal/mayong.py @@ -0,0 +1,7 @@ +# Portal to Manon +MANONS_DARK_FOREST = 924000200 + +if sm.hasQuest(1451) or sm.hasQuest(1453) or sm.hasQuest(1455) or sm.hasQuest(1457) or sm.hasQuest(1459): + sm.warpInstanceIn(MANONS_DARK_FOREST, False) + sm.dispose() +sm.warp(240020401, 3) diff --git a/scripts/portal/merTutoFight.py b/scripts/portal/merTutoFight.py new file mode 100755 index 0000000..8c9c62b --- /dev/null +++ b/scripts/portal/merTutoFight.py @@ -0,0 +1,3 @@ +# 910150002 - Path of the Glowcaves -> Blooming Forest (Frozen Fairy Forest) +sm.warp(910150003, 0) +sm.dispose() diff --git a/scripts/portal/merTutorDoor.py b/scripts/portal/merTutorDoor.py new file mode 100755 index 0000000..6b0828c --- /dev/null +++ b/scripts/portal/merTutorDoor.py @@ -0,0 +1,3 @@ +# 910150001 - FFF : Elluel -> FFF : Path of the Glowcaves *FFF = Frozen Fairy Forest +sm.warp(910150002, 2) +sm.dispose() diff --git a/scripts/portal/merTutorRoom.py b/scripts/portal/merTutorRoom.py new file mode 100755 index 0000000..532510f --- /dev/null +++ b/scripts/portal/merTutorRoom.py @@ -0,0 +1,4 @@ +# 223010100 - # FFF : Elluel -> FFF : Royal Chamber(FFF = Frozen Fairy Forest) +if sm.hasQuest(24005): # Cursed Slumber + sm.warpInstanceOut(910150004, 0) +sm.dispose() diff --git a/scripts/portal/mihailPortal003.py b/scripts/portal/mihailPortal003.py new file mode 100755 index 0000000..0fc67c2 --- /dev/null +++ b/scripts/portal/mihailPortal003.py @@ -0,0 +1,2 @@ +sm.warp(913070020, 1) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/mihailPortal004.py b/scripts/portal/mihailPortal004.py new file mode 100755 index 0000000..adc6717 --- /dev/null +++ b/scripts/portal/mihailPortal004.py @@ -0,0 +1,3 @@ +if sm.hasQuest(20034) or sm.hasQuestCompleted(20034): + sm.warp(913070050, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/mihail_3rdJobMap.py b/scripts/portal/mihail_3rdJobMap.py new file mode 100755 index 0000000..9859994 --- /dev/null +++ b/scripts/portal/mihail_3rdJobMap.py @@ -0,0 +1,4 @@ +# 224000103 - When you fall down + +sm.warpInstanceOut(130000000, 0) +sm.dispose() diff --git a/scripts/portal/minar_job4.py b/scripts/portal/minar_job4.py new file mode 100755 index 0000000..1f89d9a --- /dev/null +++ b/scripts/portal/minar_job4.py @@ -0,0 +1,3 @@ +# 240010500 +sm.warp(240010501, 1) +sm.dispose() diff --git a/scripts/portal/minar_kritias.py b/scripts/portal/minar_kritias.py new file mode 100755 index 0000000..a35405c --- /dev/null +++ b/scripts/portal/minar_kritias.py @@ -0,0 +1 @@ +sm.warp(241020218, 1) \ No newline at end of file diff --git a/scripts/portal/miro0.py b/scripts/portal/miro0.py new file mode 100755 index 0000000..3fe09d1 --- /dev/null +++ b/scripts/portal/miro0.py @@ -0,0 +1,6 @@ +# Used in Party Quest - Escape +if sm.hasMobsInField(): + sm.warp(921160400, 0) # A secret Door to the Aerial Prison +else: + sm.chat("Please eliminate all mobs.") +sm.dispose() diff --git a/scripts/portal/miro1.py b/scripts/portal/miro1.py new file mode 100755 index 0000000..0319df2 --- /dev/null +++ b/scripts/portal/miro1.py @@ -0,0 +1,6 @@ +# Used in Party Quest - Escape +if sm.hasMobsInField(): + sm.warp(921160400, 0) # A secret Door to the Aerial Prison +else: + sm.chat("Please eliminate all mobs.") +sm.dispose() diff --git a/scripts/portal/miro2.py b/scripts/portal/miro2.py new file mode 100755 index 0000000..0319df2 --- /dev/null +++ b/scripts/portal/miro2.py @@ -0,0 +1,6 @@ +# Used in Party Quest - Escape +if sm.hasMobsInField(): + sm.warp(921160400, 0) # A secret Door to the Aerial Prison +else: + sm.chat("Please eliminate all mobs.") +sm.dispose() diff --git a/scripts/portal/miro3.py b/scripts/portal/miro3.py new file mode 100755 index 0000000..0319df2 --- /dev/null +++ b/scripts/portal/miro3.py @@ -0,0 +1,6 @@ +# Used in Party Quest - Escape +if sm.hasMobsInField(): + sm.warp(921160400, 0) # A secret Door to the Aerial Prison +else: + sm.chat("Please eliminate all mobs.") +sm.dispose() diff --git a/scripts/portal/mirtalk00.py b/scripts/portal/mirtalk00.py new file mode 100755 index 0000000..8439873 --- /dev/null +++ b/scripts/portal/mirtalk00.py @@ -0,0 +1,5 @@ +# Portal & Effect for Evan Intro | Dream World: Dream Forest Entrance (900010000) +# Author: Tiger + +# "The Pact" +sm.showEffect("Map/Effect.img/evan/dragonTalk00", 3000) diff --git a/scripts/portal/mirtalk01.py b/scripts/portal/mirtalk01.py new file mode 100755 index 0000000..fca7841 --- /dev/null +++ b/scripts/portal/mirtalk01.py @@ -0,0 +1,5 @@ +# Portal & Effect for Evan Intro | Dream World: Dream Forest Entrance (900010000) +# Author: Tiger + +# "You who are seeking a Pact..." +sm.showEffect("Map/Effect.img/evan/dragonTalk01", 3000) diff --git a/scripts/portal/mistic_hene.py b/scripts/portal/mistic_hene.py new file mode 100755 index 0000000..ddcd16f --- /dev/null +++ b/scripts/portal/mistic_hene.py @@ -0,0 +1,3 @@ +# 100000000 +sm.warp(931050800, 0) +sm.dispose() diff --git a/scripts/portal/mistic_pant.py b/scripts/portal/mistic_pant.py new file mode 100755 index 0000000..1d3bd39 --- /dev/null +++ b/scripts/portal/mistic_pant.py @@ -0,0 +1,3 @@ +# 400000000 +sm.warp(931050810, 0) +sm.dispose() diff --git a/scripts/portal/mistic_ref.py b/scripts/portal/mistic_ref.py new file mode 100755 index 0000000..dd59b22 --- /dev/null +++ b/scripts/portal/mistic_ref.py @@ -0,0 +1,3 @@ +# 240000000 +sm.warp(931050820, 0) +sm.dispose() diff --git a/scripts/portal/momijiTraining.py b/scripts/portal/momijiTraining.py new file mode 100755 index 0000000..efd384b --- /dev/null +++ b/scripts/portal/momijiTraining.py @@ -0,0 +1,7 @@ +# Momijigaoka +if sm.hasQuest(57106): + sm.warp(807030000, 0) +elif sm.hasQuest(57107): + sm.warp(807030100, 0) +else: + sm.warp(807030200, 0) \ No newline at end of file diff --git a/scripts/portal/moveBefore.py b/scripts/portal/moveBefore.py new file mode 100755 index 0000000..7c646f4 --- /dev/null +++ b/scripts/portal/moveBefore.py @@ -0,0 +1,3 @@ +# 914021010 | [Job Adv] (Lv.30) Aran +sm.warp(914021000, 2) +sm.dispose() diff --git a/scripts/portal/moveNext.py b/scripts/portal/moveNext.py new file mode 100755 index 0000000..e65c2c2 --- /dev/null +++ b/scripts/portal/moveNext.py @@ -0,0 +1,3 @@ +# 914021000 | [Job Adv] (Lv.30) Aran +sm.warp(914021010, 0) +sm.dispose() diff --git a/scripts/portal/move_701220000.py b/scripts/portal/move_701220000.py new file mode 100755 index 0000000..cc4121a --- /dev/null +++ b/scripts/portal/move_701220000.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(62002): # [Shaoling Temple] Not a Demon + sm.warp(701220000, 1) # Shaolin Temple +else: + sm.openNpc(9310041) # Zhikeseng \ No newline at end of file diff --git a/scripts/portal/move_701220100.py b/scripts/portal/move_701220100.py new file mode 100755 index 0000000..ce488cc --- /dev/null +++ b/scripts/portal/move_701220100.py @@ -0,0 +1,4 @@ +if sm.hasQuest(62007) or sm.hasQuestCompleted(62007): + sm.warp(701220100) +else: + sm.chat("I've been warned to stay away from the Sutra Depository.") \ No newline at end of file diff --git a/scripts/portal/move_EdeEli.py b/scripts/portal/move_EdeEli.py new file mode 100755 index 0000000..28dc00c --- /dev/null +++ b/scripts/portal/move_EdeEli.py @@ -0,0 +1,3 @@ +# 200090710 +sm.warp(104020130, 0) +sm.dispose() diff --git a/scripts/portal/move_EdeOrb.py b/scripts/portal/move_EdeOrb.py new file mode 100755 index 0000000..0ea4d88 --- /dev/null +++ b/scripts/portal/move_EdeOrb.py @@ -0,0 +1,3 @@ +# 200090610 +sm.warp(200000100, 0) +sm.dispose() diff --git a/scripts/portal/move_EliEde.py b/scripts/portal/move_EliEde.py new file mode 100755 index 0000000..9e59d6f --- /dev/null +++ b/scripts/portal/move_EliEde.py @@ -0,0 +1,3 @@ +# 200090701 +sm.warp(310000010, 0) +sm.dispose() diff --git a/scripts/portal/move_OrbEde.py b/scripts/portal/move_OrbEde.py new file mode 100755 index 0000000..fc10018 --- /dev/null +++ b/scripts/portal/move_OrbEde.py @@ -0,0 +1,3 @@ +# 200090600 +sm.warp(310000010, 0) +sm.dispose() diff --git a/scripts/portal/move_OrbEre.py b/scripts/portal/move_OrbEre.py new file mode 100755 index 0000000..861a4a0 --- /dev/null +++ b/scripts/portal/move_OrbEre.py @@ -0,0 +1,3 @@ +# 200090020 +sm.warp(130000210, 12) +sm.dispose() diff --git a/scripts/portal/move_elin.py b/scripts/portal/move_elin.py new file mode 100755 index 0000000..da4f481 --- /dev/null +++ b/scripts/portal/move_elin.py @@ -0,0 +1,3 @@ +# 222020400 +sm.warp(300000100, 1) +sm.dispose() diff --git a/scripts/portal/move_stage.py b/scripts/portal/move_stage.py new file mode 100755 index 0000000..c7add2f --- /dev/null +++ b/scripts/portal/move_stage.py @@ -0,0 +1,9 @@ + +time = 15 *60 + +if "clear" in sm.getQRValue(62038): + sm.warp(701220400) + +elif "1" in sm.getQRValue(62007): + sm.warpInstanceIn(701220410) + sm.setInstanceTime(time, 701220300, 3) diff --git a/scripts/portal/mud_q2620.py b/scripts/portal/mud_q2620.py new file mode 100755 index 0000000..ed84064 --- /dev/null +++ b/scripts/portal/mud_q2620.py @@ -0,0 +1,2 @@ +sm.warp(mud_q2620.py, 8) +sm.dispose() diff --git a/scripts/portal/next00.py b/scripts/portal/next00.py new file mode 100755 index 0000000..2242fab --- /dev/null +++ b/scripts/portal/next00.py @@ -0,0 +1,6 @@ +# id 1 (null), field 940205300 +sm.startQuest(34938) +sm.completeQuestNoCheck(34938) +sm.createQuestWithQRValue(34938, "exp=1") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;09=h0") +sm.warp(402090007) diff --git a/scripts/portal/nooutShip.py b/scripts/portal/nooutShip.py new file mode 100755 index 0000000..1e0895d --- /dev/null +++ b/scripts/portal/nooutShip.py @@ -0,0 +1,2 @@ +# 914000500 +sm.warp(914000420, 1) \ No newline at end of file diff --git a/scripts/portal/out00_020.py b/scripts/portal/out00_020.py new file mode 100755 index 0000000..80f3780 --- /dev/null +++ b/scripts/portal/out00_020.py @@ -0,0 +1,5 @@ +# id 1 (out00), field 811000020 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("(Miroku seems to have dropped something. Take it with you.)") +sm.warp(811000019) diff --git a/scripts/portal/out00_100.py b/scripts/portal/out00_100.py new file mode 100755 index 0000000..03bc231 --- /dev/null +++ b/scripts/portal/out00_100.py @@ -0,0 +1,6 @@ +#Princess No \\ Next Map \\ 1 + +if sm.hasMobsInField(): + sm.chat("You must kill all monsters before proceeding.") +else: + sm.warp(811000200) \ No newline at end of file diff --git a/scripts/portal/out00_DI.py b/scripts/portal/out00_DI.py new file mode 100755 index 0000000..500fee3 --- /dev/null +++ b/scripts/portal/out00_DI.py @@ -0,0 +1,5 @@ + +response = sm.sendAskYesNo("Do you wish to leave the battlefield") + +if response: + sm.WarpInstanceOut(940020000) \ No newline at end of file diff --git a/scripts/portal/outArchterMap.py b/scripts/portal/outArchterMap.py new file mode 100755 index 0000000..8a06156 --- /dev/null +++ b/scripts/portal/outArchterMap.py @@ -0,0 +1,3 @@ +# 100000201 +sm.warp(100000000, 16) +sm.dispose() diff --git a/scripts/portal/outCG.py b/scripts/portal/outCG.py new file mode 100755 index 0000000..950aba1 --- /dev/null +++ b/scripts/portal/outCG.py @@ -0,0 +1,3 @@ +# Phantom contimove +sm.warp(int(sm.getQRValue(25010))) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/outChild.py b/scripts/portal/outChild.py new file mode 100755 index 0000000..1c57594 --- /dev/null +++ b/scripts/portal/outChild.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [914000300] +# Black Road : Dead End Forest + +sm.warp(914000220, 2) diff --git a/scripts/portal/outEurel.py b/scripts/portal/outEurel.py new file mode 100755 index 0000000..60a0eec --- /dev/null +++ b/scripts/portal/outEurel.py @@ -0,0 +1,3 @@ +# 101050000 +sm.warp(101050100, 2) +sm.dispose() diff --git a/scripts/portal/outMaha.py b/scripts/portal/outMaha.py new file mode 100755 index 0000000..128afff --- /dev/null +++ b/scripts/portal/outMaha.py @@ -0,0 +1,3 @@ +# 914020000 | aran 4th job advancement +sm.warpInstanceOut(140000000, 1) +sm.dispose() diff --git a/scripts/portal/outTemple.py b/scripts/portal/outTemple.py new file mode 100755 index 0000000..171753d --- /dev/null +++ b/scripts/portal/outTemple.py @@ -0,0 +1,4 @@ +# 270000100 - ToT -> Dragon Flight-2nd Map +sm.useItem(2210016) +sm.warp(200090510, 0) +sm.dispose() diff --git a/scripts/portal/out_140030000.py b/scripts/portal/out_140030000.py new file mode 100755 index 0000000..5eb2acf --- /dev/null +++ b/scripts/portal/out_140030000.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(21202) and sm.hasQuest(21201) or sm.hasQuestCompleted(21303) and sm.hasQuest(21302): + sm.warp(140000000, 1) +else: + sm.warp(140010200, 1) \ No newline at end of file diff --git a/scripts/portal/out_141050300.py b/scripts/portal/out_141050300.py new file mode 100755 index 0000000..5bd72b7 --- /dev/null +++ b/scripts/portal/out_141050300.py @@ -0,0 +1,3 @@ +# 141050300 - Out +sm.warpInstanceOut(141050200) +sm.dispose() diff --git a/scripts/portal/out_450004300.py b/scripts/portal/out_450004300.py new file mode 100755 index 0000000..014879c --- /dev/null +++ b/scripts/portal/out_450004300.py @@ -0,0 +1,6 @@ +# id 1 (out00), field 450004900 +sm.setSpeakerType(3) +sm.setParam(56) +sm.setColor(1) +res = sm.sendAskYesNo("You have defeated Lucid. Return?") +sm.warp(450004000) diff --git a/scripts/portal/out_701220601.py b/scripts/portal/out_701220601.py new file mode 100755 index 0000000..8496483 --- /dev/null +++ b/scripts/portal/out_701220601.py @@ -0,0 +1 @@ +sm.warp(701220500, 2) \ No newline at end of file diff --git a/scripts/portal/out_701220610.py b/scripts/portal/out_701220610.py new file mode 100755 index 0000000..5076cea --- /dev/null +++ b/scripts/portal/out_701220610.py @@ -0,0 +1 @@ +sm.warpInstanceOut(701220601, 1) \ No newline at end of file diff --git a/scripts/portal/out_701220710.py b/scripts/portal/out_701220710.py new file mode 100755 index 0000000..a34e94b --- /dev/null +++ b/scripts/portal/out_701220710.py @@ -0,0 +1,7 @@ +# id 1 (out00), field 701220710 +sm.setSpeakerType(8) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310051) # Haifeng Fashi +res = sm.sendAskYesNo("Are you really going to give up?") +sm.warp(701220700) diff --git a/scripts/portal/out_867201801.py b/scripts/portal/out_867201801.py new file mode 100755 index 0000000..81e2fa4 --- /dev/null +++ b/scripts/portal/out_867201801.py @@ -0,0 +1,3 @@ +# id 2 (out00), field 867201801 +sm.startQuest(64086) +sm.warp(867201810) diff --git a/scripts/portal/out_adventure.py b/scripts/portal/out_adventure.py new file mode 100755 index 0000000..3be8252 --- /dev/null +++ b/scripts/portal/out_adventure.py @@ -0,0 +1,10 @@ +oldFieldID = sm.getReturnField() +if oldFieldID == 0 or oldFieldID == 993080000: + sm.chat("(Portal) Cannot find your previous map ID, warping to Henesys.") + map = 100000000 + portal = 0 +else: + map = oldFieldID + portal = 0 +sm.warp(map, portal) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/out_animalShow.py b/scripts/portal/out_animalShow.py new file mode 100755 index 0000000..4cf5571 --- /dev/null +++ b/scripts/portal/out_animalShow.py @@ -0,0 +1,6 @@ +# 223030210 - Scarlion & Targa +response = sm.sendAskYesNo("Would you like to leave?") + +if response: + sm.clearPartyInfo(223030200) +sm.dispose() diff --git a/scripts/portal/out_aswan.py b/scripts/portal/out_aswan.py new file mode 100755 index 0000000..bde0608 --- /dev/null +++ b/scripts/portal/out_aswan.py @@ -0,0 +1,11 @@ +# aswan exit | Azwan Obelisk : Azwan +oldFieldID = sm.getReturnField() +if oldFieldID == 0 or oldFieldID == 910000000: + sm.chat("(Portal) Cannot find your previous map ID, warping to Henesys.") + map = 100000000 + portal = 0 +else: + map = oldFieldID + portal = 0 +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/out_bellDoor.py b/scripts/portal/out_bellDoor.py new file mode 100755 index 0000000..c5025c9 --- /dev/null +++ b/scripts/portal/out_bellDoor.py @@ -0,0 +1,5 @@ +response = sm.sendAskYesNo("Are you sure you want to leave?") + +if response: + sm.WarpInstanceOut(401053002) + sm.dispose() diff --git a/scripts/portal/out_brokenSubway.py b/scripts/portal/out_brokenSubway.py new file mode 100755 index 0000000..7c38306 --- /dev/null +++ b/scripts/portal/out_brokenSubway.py @@ -0,0 +1,11 @@ +STARLING = 9120221 + +if sm.hasQuestCompleted(1602): + sm.warpInstanceOut(103020000, 2) + +else: + sm.setSpeakerID(STARLING) + response = sm.sendAskYesNo("Excuse me? \r\nAre you just going to leave me?") + + if response: + sm.warpInstanceOut(103020000, 2) \ No newline at end of file diff --git a/scripts/portal/out_city.py b/scripts/portal/out_city.py new file mode 100755 index 0000000..871a8ef --- /dev/null +++ b/scripts/portal/out_city.py @@ -0,0 +1,3 @@ +# warp from hene to shinsoo school road city center + +sm.warp(330000000, 11) \ No newline at end of file diff --git a/scripts/portal/out_cygnusAK.py b/scripts/portal/out_cygnusAK.py new file mode 100755 index 0000000..3616408 --- /dev/null +++ b/scripts/portal/out_cygnusAK.py @@ -0,0 +1,7 @@ +# 272030400 - Arkarium + +response = sm.sendAskYesNo("Would you like to leave?") + +if response: + sm.clearPartyInfo(272030300) +sm.dispose() diff --git a/scripts/portal/out_cygnusBackGarden.py b/scripts/portal/out_cygnusBackGarden.py new file mode 100755 index 0000000..f848c9b --- /dev/null +++ b/scripts/portal/out_cygnusBackGarden.py @@ -0,0 +1 @@ +sm.warp(271040000, 1) \ No newline at end of file diff --git a/scripts/portal/out_cygnusBackGardenEasy.py b/scripts/portal/out_cygnusBackGardenEasy.py new file mode 100755 index 0000000..341890e --- /dev/null +++ b/scripts/portal/out_cygnusBackGardenEasy.py @@ -0,0 +1 @@ +sm.warpInstanceOut(271040000, 0) \ No newline at end of file diff --git a/scripts/portal/out_cygnusGarden.py b/scripts/portal/out_cygnusGarden.py new file mode 100755 index 0000000..a942c98 --- /dev/null +++ b/scripts/portal/out_cygnusGarden.py @@ -0,0 +1,3 @@ +# 271040000 +sm.warp(271030600, 3) +sm.dispose() diff --git a/scripts/portal/out_elinCave.py b/scripts/portal/out_elinCave.py new file mode 100755 index 0000000..daff548 --- /dev/null +++ b/scripts/portal/out_elinCave.py @@ -0,0 +1,6 @@ +# Portal to leave Chao + +BOULDER_MOUNTAIN_ENTRANCE = 300010400 # MAP ID + +sm.chatRed("Leaving the cave...") +sm.warpInstanceOut(BOULDER_MOUNTAIN_ENTRANCE, 2) \ No newline at end of file diff --git a/scripts/portal/out_fairyBoss.py b/scripts/portal/out_fairyBoss.py new file mode 100755 index 0000000..470037f --- /dev/null +++ b/scripts/portal/out_fairyBoss.py @@ -0,0 +1,13 @@ +# Portal for leaving Ephenia + +EPHENIAS_HIDING_PLACE = 2133006 # NPC ID +FAIRY_FOREST_2 = 300030300 # MAP ID + +if not sm.hasMobsInField(): + sm.clearPartyInfo(FAIRY_FOREST_2) +else: + sm.setSpeakerID(EPHENIAS_HIDING_PLACE) + response = sm.sendAskYesNo("Are you sure you want to leave?") + + if response: + sm.clearPartyInfo(FAIRY_FOREST_2) \ No newline at end of file diff --git a/scripts/portal/out_foxtree.py b/scripts/portal/out_foxtree.py new file mode 100755 index 0000000..83ae835 --- /dev/null +++ b/scripts/portal/out_foxtree.py @@ -0,0 +1,4 @@ +if sm.hasQuestCompleted(38027): + sm.warp(940200020, 0) +else: + sm.warp(410000000, 6) \ No newline at end of file diff --git a/scripts/portal/out_ghostHouse.py b/scripts/portal/out_ghostHouse.py new file mode 100755 index 0000000..324cf15 --- /dev/null +++ b/scripts/portal/out_ghostHouse.py @@ -0,0 +1,3 @@ +# 223010110 +sm.warp(223010100, 3) +sm.dispose() diff --git a/scripts/portal/out_guild.py b/scripts/portal/out_guild.py new file mode 100755 index 0000000..23701aa --- /dev/null +++ b/scripts/portal/out_guild.py @@ -0,0 +1,3 @@ +# 200000301 +sm.warp(200000300, 11) +sm.dispose() diff --git a/scripts/portal/out_henesys.py b/scripts/portal/out_henesys.py new file mode 100755 index 0000000..3bac07f --- /dev/null +++ b/scripts/portal/out_henesys.py @@ -0,0 +1,5 @@ +map = 100000000 +portal = 17 + +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/out_hilla.py b/scripts/portal/out_hilla.py new file mode 100755 index 0000000..46b3f39 --- /dev/null +++ b/scripts/portal/out_hilla.py @@ -0,0 +1,4 @@ +# id 2 (out00), field 863100105 +sm.setSpeakerType(8) +sm.setParam(16) +res = sm.sendAskYesNo("I need keys to get out. \r\nI'll have to forfeit the quest if I leave now. Should I?") diff --git a/scripts/portal/out_hillah.py b/scripts/portal/out_hillah.py new file mode 100755 index 0000000..1165895 --- /dev/null +++ b/scripts/portal/out_hillah.py @@ -0,0 +1,3 @@ +# Azwan refuge zone entrance + +sm.openNpc(2184000) \ No newline at end of file diff --git a/scripts/portal/out_magnusDoor.py b/scripts/portal/out_magnusDoor.py new file mode 100755 index 0000000..1630c41 --- /dev/null +++ b/scripts/portal/out_magnusDoor.py @@ -0,0 +1,6 @@ +sm.setSpeakerID(3001021) +response = sm.sendAskYesNo("Do you wish to leave the battlefield?") + +if response: + sm.WarpInstanceOut(401060000) + sm.dispose() diff --git a/scripts/portal/out_profession.py b/scripts/portal/out_profession.py new file mode 100755 index 0000000..bfef414 --- /dev/null +++ b/scripts/portal/out_profession.py @@ -0,0 +1,5 @@ +# 910001000 +if not sm.getReturnField() is None: + sm.warp(sm.getReturnField()) +else: + sm.warp(100000000, 19) \ No newline at end of file diff --git a/scripts/portal/out_q25584.py b/scripts/portal/out_q25584.py new file mode 100755 index 0000000..989c075 --- /dev/null +++ b/scripts/portal/out_q25584.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# ID :: [910600201] +# Hidden Street : Abandoned Hideout + +sm.warp(100040000, 8) diff --git a/scripts/portal/out_secretLB.py b/scripts/portal/out_secretLB.py new file mode 100755 index 0000000..1e240be --- /dev/null +++ b/scripts/portal/out_secretLB.py @@ -0,0 +1,3 @@ +# Portal out of Secret Library +sm.warpInstanceOut(222020000, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/out_treDoor.py b/scripts/portal/out_treDoor.py new file mode 100755 index 0000000..620f438 --- /dev/null +++ b/scripts/portal/out_treDoor.py @@ -0,0 +1,5 @@ +response = sm.sendAskYesNo("Are you sure you want to leave?") + +if response: + sm.WarpInstanceOut(401052104) + sm.dispose() diff --git a/scripts/portal/out_victorDoor.py b/scripts/portal/out_victorDoor.py new file mode 100755 index 0000000..824ee58 --- /dev/null +++ b/scripts/portal/out_victorDoor.py @@ -0,0 +1,5 @@ +response = sm.sendAskYesNo("Are you sure you want to leave?") + +if response: + sm.WarpInstanceOut(401051104) + sm.dispose() diff --git a/scripts/portal/outpasttemple.py b/scripts/portal/outpasttemple.py new file mode 100755 index 0000000..7f2e75d --- /dev/null +++ b/scripts/portal/outpasttemple.py @@ -0,0 +1,3 @@ +# 272010000 +sm.warp(272000600, 2) +sm.dispose() diff --git a/scripts/portal/outportalNCP.py b/scripts/portal/outportalNCP.py new file mode 100755 index 0000000..374a761 --- /dev/null +++ b/scripts/portal/outportalNCP.py @@ -0,0 +1,8 @@ +# 910700200 Root Abyss : Colossal Root (Quest Map) +if sm.hasQuest(30002): + sm.setPlayerAsSpeaker() + sm.sendNext("I should tell that girl about the exit first.") + sm.completeQuest(30002) +else: + sm.warp(105010200, 0) # Secret Swamp +sm.dispose() diff --git a/scripts/portal/outportalNPC.py b/scripts/portal/outportalNPC.py new file mode 100755 index 0000000..ceb9112 --- /dev/null +++ b/scripts/portal/outportalNPC.py @@ -0,0 +1,9 @@ +THE_MYSTERIOUS_GIRL = 30002 + +if sm.hasQuest(THE_MYSTERIOUS_GIRL): + sm.setPlayerAsSpeaker() + sm.completeQuest(THE_MYSTERIOUS_GIRL) + sm.dispose() + sm.sendNext("I should tell that girl about the exit first.") +else: + sm.warp(105010200, 0) # Secret Swamp \ No newline at end of file diff --git a/scripts/portal/outrootaBoss.py b/scripts/portal/outrootaBoss.py new file mode 100755 index 0000000..359aa7e --- /dev/null +++ b/scripts/portal/outrootaBoss.py @@ -0,0 +1,13 @@ +sm.setSpeakerID(1064002) +sm.sendAskYesNo + +dialog = str() + +if sm.hasMobsInField(): + dialog = "Are you sure you want to leave the battlefield and abandon your party members?" + +else: + dialog = "Are you sure you want to leave the battlefield?" + +if sm.sendAskYesNo(dialog): + sm.warpInstanceOut(105200000) \ No newline at end of file diff --git a/scripts/portal/party2_exit.py b/scripts/portal/party2_exit.py new file mode 100755 index 0000000..21866f9 --- /dev/null +++ b/scripts/portal/party2_exit.py @@ -0,0 +1,3 @@ +# 221023300 +sm.warp(221023200, 1) +sm.dispose() diff --git a/scripts/portal/party2_rp.py b/scripts/portal/party2_rp.py new file mode 100755 index 0000000..ebdea01 --- /dev/null +++ b/scripts/portal/party2_rp.py @@ -0,0 +1,220 @@ +# Stage 3 ludibrium pq boxes + +#Get Order +STAGE_3_ORDER = "Stage3Order" +STAGE_3_COMPLETE = "Stage3Complete" +stage3OrderArray = field.getProperty(STAGE_3_ORDER) + +#Check if at corresponding ID +if parentID == 15: + if stage3OrderArray[0] == 3: + sm.showObjectFieldEffect("an00") + sm.teleportToPortal(18) + else: + sm.teleportToPortal(0) + +elif parentID == 16: + if stage3OrderArray[0] == 2: + sm.showObjectFieldEffect("an01") + sm.teleportToPortal(18) + else: + sm.teleportToPortal(0) + +elif parentID == 17: + if stage3OrderArray[0] == 1: + sm.showObjectFieldEffect("an02") + sm.teleportToPortal(18) + else: + sm.teleportToPortal(0) + +elif parentID == 18: + if stage3OrderArray[1] == 1: + sm.showObjectFieldEffect("an10") + sm.teleportToPortal(21) + else: + sm.teleportToPortal(0) + +elif parentID == 19: + if stage3OrderArray[1] == 2: + sm.showObjectFieldEffect("an11") + sm.teleportToPortal(21) + else: + sm.teleportToPortal(0) + +elif parentID == 20: + if stage3OrderArray[1] == 3: + sm.showObjectFieldEffect("an12") + sm.teleportToPortal(21) + else: + sm.teleportToPortal(0) + +elif parentID == 21: + if stage3OrderArray[2] == 3: + sm.showObjectFieldEffect("an20") + sm.teleportToPortal(24) + else: + sm.teleportToPortal(0) + +elif parentID == 22: + if stage3OrderArray[2] == 2: + sm.showObjectFieldEffect("an21") + sm.teleportToPortal(24) + else: + sm.teleportToPortal(0) + +elif parentID == 23: + if stage3OrderArray[2] == 1: + sm.showObjectFieldEffect("an22") + sm.teleportToPortal(24) + else: + sm.teleportToPortal(0) + +elif parentID == 24: + if stage3OrderArray[3] == 3: + sm.showObjectFieldEffect("an30") + sm.teleportToPortal(27) + else: + sm.teleportToPortal(0) + +elif parentID == 25: + if stage3OrderArray[3] == 2: + sm.showObjectFieldEffect("an31") + sm.teleportToPortal(27) + else: + sm.teleportToPortal(0) + +elif parentID == 26: + if stage3OrderArray[3] == 1: + sm.showObjectFieldEffect("an32") + sm.teleportToPortal(27) + else: + sm.teleportToPortal(0) + +elif parentID == 27: + if stage3OrderArray[4] == 1: + sm.showObjectFieldEffect("an40") + sm.teleportToPortal(30) + else: + sm.teleportToPortal(0) + +elif parentID == 28: + if stage3OrderArray[4] == 2: + sm.showObjectFieldEffect("an41") + sm.teleportToPortal(30) + else: + sm.teleportToPortal(0) + +elif parentID == 29: + if stage3OrderArray[4] == 3: + sm.showObjectFieldEffect("an42") + sm.teleportToPortal(30) + else: + sm.teleportToPortal(0) + +elif parentID == 30: + if stage3OrderArray[5] == 1: + sm.showObjectFieldEffect("an50") + sm.teleportToPortal(33) + else: + sm.teleportToPortal(0) + +elif parentID == 31: + if stage3OrderArray[5] == 2: + sm.showObjectFieldEffect("an51") + sm.teleportToPortal(33) + else: + sm.teleportToPortal(0) + +elif parentID == 32: + if stage3OrderArray[5] == 3: + sm.showObjectFieldEffect("an52") + sm.teleportToPortal(33) + else: + sm.teleportToPortal(0) + +elif parentID == 33: + if stage3OrderArray[6] == 3: + sm.showObjectFieldEffect("an60") + sm.teleportToPortal(36) + else: + sm.teleportToPortal(0) + +elif parentID == 34: + if stage3OrderArray[6] == 1: + sm.showObjectFieldEffect("an61") + sm.teleportToPortal(36) + else: + sm.teleportToPortal(0) + +elif parentID == 35: + if stage3OrderArray[6] == 2: + sm.showObjectFieldEffect("an62") + sm.teleportToPortal(36) + else: + sm.teleportToPortal(0) + +elif parentID == 36: + if stage3OrderArray[7] == 3: + sm.showObjectFieldEffect("an70") + sm.teleportToPortal(39) + else: + sm.teleportToPortal(0) + +elif parentID == 37: + if stage3OrderArray[7] == 2: + sm.showObjectFieldEffect("an71") + sm.teleportToPortal(39) + else: + sm.teleportToPortal(0) + +elif parentID == 38: + if stage3OrderArray[7] == 1: + sm.showObjectFieldEffect("an72") + sm.teleportToPortal(39) + else: + sm.teleportToPortal(0) + +elif parentID == 39: + if stage3OrderArray[8] == 1: + sm.showObjectFieldEffect("an80") + sm.teleportToPortal(42) + else: + sm.teleportToPortal(0) + +elif parentID == 40: + if stage3OrderArray[8] == 3: + sm.showObjectFieldEffect("an81") + sm.teleportToPortal(42) + else: + sm.teleportToPortal(0) + +elif parentID == 41: + if stage3OrderArray[8] == 2: + sm.showObjectFieldEffect("an82") + sm.teleportToPortal(42) + else: + sm.teleportToPortal(0) + +elif parentID == 42: + if stage3OrderArray[9] == 1: + sm.invokeForParty("teleportToPortal", 2) + sm.invokeForParty("showFieldEffect", "quest/party/clear") + field.setProperty(STAGE_3_COMPLETE, True) + else: + sm.teleportToPortal(0) + +elif parentID == 43: + if stage3OrderArray[9] == 2: + sm.invokeForParty("teleportToPortal", 2) + sm.invokeForParty("showFieldEffect", "quest/party/clear") + field.setProperty(STAGE_3_COMPLETE, True) + else: + sm.teleportToPortal(0) + +elif parentID == 44: + if stage3OrderArray[9] == 3: + sm.invokeForParty("teleportToPortal", 2) + sm.invokeForParty("showFieldEffect", "quest/party/clear") + field.setProperty(STAGE_3_COMPLETE, True) + else: + sm.teleportToPortal(0) \ No newline at end of file diff --git a/scripts/portal/pf_in.py b/scripts/portal/pf_in.py new file mode 100755 index 0000000..ca704b0 --- /dev/null +++ b/scripts/portal/pf_in.py @@ -0,0 +1,4 @@ +# id 6 (out00), field 301070000 +sm.setSpeakerType(8) +sm.setParam(16) +sm.sendSayOkay("There's a barrier here... I can't make it past.") diff --git a/scripts/portal/platformer_trap.py b/scripts/portal/platformer_trap.py new file mode 100755 index 0000000..8ded617 --- /dev/null +++ b/scripts/portal/platformer_trap.py @@ -0,0 +1,2 @@ +sm.warp(993001160) +sm.speechBalloon(True, 0, 0, "#fs12##bNo, Wowow!", 2000, 1, 0, 0, 0, 4, 0, 4878499) diff --git a/scripts/portal/platformer_trap0.py b/scripts/portal/platformer_trap0.py new file mode 100755 index 0000000..e61e2f0 --- /dev/null +++ b/scripts/portal/platformer_trap0.py @@ -0,0 +1,2 @@ +sm.warp(993001160) +sm.speechBalloon(True, 0, 0, "#fs12##bNo, Wowow!", 2000, 1, 0, 0, 0, 4, 0, 4878499) \ No newline at end of file diff --git a/scripts/portal/platformer_trap1.py b/scripts/portal/platformer_trap1.py new file mode 100755 index 0000000..6bece51 --- /dev/null +++ b/scripts/portal/platformer_trap1.py @@ -0,0 +1 @@ +sm.warp(993001160) \ No newline at end of file diff --git a/scripts/portal/platformer_trap3.py b/scripts/portal/platformer_trap3.py new file mode 100755 index 0000000..6bece51 --- /dev/null +++ b/scripts/portal/platformer_trap3.py @@ -0,0 +1 @@ +sm.warp(993001160) \ No newline at end of file diff --git a/scripts/portal/platformer_trap4.py b/scripts/portal/platformer_trap4.py new file mode 100755 index 0000000..6bece51 --- /dev/null +++ b/scripts/portal/platformer_trap4.py @@ -0,0 +1 @@ +sm.warp(993001160) \ No newline at end of file diff --git a/scripts/portal/portalNPC.py b/scripts/portal/portalNPC.py new file mode 100755 index 0000000..c741b85 --- /dev/null +++ b/scripts/portal/portalNPC.py @@ -0,0 +1,2 @@ +# 211042200 +sm.openNpc(2161005) \ No newline at end of file diff --git a/scripts/portal/portalNPC1.py b/scripts/portal/portalNPC1.py new file mode 100755 index 0000000..3f16ea8 --- /dev/null +++ b/scripts/portal/portalNPC1.py @@ -0,0 +1,2 @@ +# 211042200 +sm.openNpc(2144017) \ No newline at end of file diff --git a/scripts/portal/portal_000.py b/scripts/portal/portal_000.py new file mode 100755 index 0000000..696c864 --- /dev/null +++ b/scripts/portal/portal_000.py @@ -0,0 +1,11 @@ +# Limbert's General Store (913070000) - continue script +sm.forcedInput(0) +sm.showBalloonMsg("Effect/Direction7.img/effect/tuto/step0/3", 3000) +sm.localEmotion(6, 2000, False) +sm.sendDelay(2000) + +sm.sendDelay(1000) + +sm.forcedInput(1) +# continue in portal_001.py +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/portal_001.py b/scripts/portal/portal_001.py new file mode 100755 index 0000000..bf0dbad --- /dev/null +++ b/scripts/portal/portal_001.py @@ -0,0 +1,55 @@ +# Limbert's General Store (913070000) - continue script + +# Constants +NEINHEART = 1106000 +LIMBERT = 1106002 + +# Script answer init +sm.removeEscapeButton() +sm.setSpeakerID(NEINHEART) +sm.setPlayerAsSpeaker() + +# Actions +sm.forcedInput(0) +sm.sendNext("Do you have something to say to me?") + + +sm.setSpeakerID(NEINHEART) +sm.sendSay("What is your name?") + +sm.setPlayerAsSpeaker() +sm.sendSay("I don't have one. Just call me #bKiddo#k. That's what the old man calls me.") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("Is he your grandpa? Where are your parents?") + +sm.setPlayerAsSpeaker() +sm.sendSay("I don't have any family. I just work here.#b\r\n(What's with all the questions?)#k\r\nLook, I have to get back to work before the old man comes back...") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("Do you know the name Chromile? The Knight of Light?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Nope, never heard of the guy...#b\r\n(Why does that name sound familiar?)") + +sm.setSpeakerID(LIMBERT) +sm.sendSay("#eYou little brat!\r\nI told you to move boxes, not chat up my customers!") + +sm.setPlayerAsSpeaker() +sm.sendSay("I was just about to clean it up...\r\nSorry, I gotta do what he says...") + +sm.completeQuestNoRewards(20030) # neinheart npc to disappear after completing the quest +sm.addLevel(1) +sm.showBalloonMsg("Effect/Direction7.img/effect/tuto/step0/4", 2000) +sm.localEmotion(6, 2000, False) +sm.sendDelay(2000) + +sm.setPlayerAsSpeaker() +sm.sendNext("H-hey! Where did he go?!\r\n Ugh, who cares?! I gotta get that stuff out of here before Limbert starts raising a ruckus again...") + +sm.forcedInput(2) +sm.sendDelay(800) + +sm.lockInGameUI(False) +sm.warpInstanceIn(913070001, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/portal_002.py b/scripts/portal/portal_002.py new file mode 100755 index 0000000..808cf07 --- /dev/null +++ b/scripts/portal/portal_002.py @@ -0,0 +1,61 @@ +# Limbert's General Store (913070000) - continue script + +# Constants +NEINHEART = 1106003 +CYGNUS = 1106001 +JAAH = 1106005 +MOB = 9001050 + +# Script answer init +sm.removeEscapeButton() +sm.setSpeakerID(JAAH) +sm.setPlayerAsSpeaker() + +# Actions +sm.forcedInput(0) +sm.sendNext("Who are you? Are you lost? ") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("I have sought after you for some time, and now you stand before me. The warrior with the destiny of light.") + +sm.setPlayerAsSpeaker() +sm.sendSay("What are you talking about?") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("Mind your manners, peon! This is the Empress!") + +sm.setPlayerAsSpeaker() +sm.sendSay("You're the guy from before! What's going on here? That guy you talked about, Chromile... I found a letter from him in the attic. Is that Limbert's real name or something?") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("Chromile and Mr. Limbert have no connection, save you. Chromile... is your father.") + +sm.setPlayerAsSpeaker() +sm.sendSay("My father left me here when I was little. He abandoned me to this old chicken-keeper.") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("He did not abandon you. Your father left you here after your mother passed away to save your life. His path was not one you could follow...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Save me? He didn't save me. He left me to be a slave in this shack. He didn't even give me a name! And now I find out I've been here waiting for a father that'll never return...") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("Only the darkest night can produce a brilliant sunrise. Put aside your anger and come with me. You will find the light you seek.") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("Empress, I do not have faith in this boy. We know nothing about him. I don't think he is fit to be the knight of light.") + +sm.setSpeakerID(CYGNUS) +sm.sendSay("Dear Neinheart, I should have known better than to assume you would trust in faith. Go ahead and test him, but be gentle.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Wait, what?") + +sm.sendDelay(1000) + +for i in range(10): + sm.spawnMobWithAppearType(MOB, 200, 50, 0, 0) +sm.lockInGameUI(False) +sm.completeQuestNoRewards(20034) # neinheart npc to disappear after completing the quest +sm.startQuestNoCheck(20035) +sm.dispose() \ No newline at end of file diff --git a/scripts/portal/portal_foxtree.py b/scripts/portal/portal_foxtree.py new file mode 100755 index 0000000..b7e7ea5 --- /dev/null +++ b/scripts/portal/portal_foxtree.py @@ -0,0 +1,4 @@ +if sm.hasQuest(38004) or sm.hasQuest(38011): + sm.warp(940200011, 0) +else: + sm.warp(410000002, 0) \ No newline at end of file diff --git a/scripts/portal/portal_victor2.py b/scripts/portal/portal_victor2.py new file mode 100755 index 0000000..08fd420 --- /dev/null +++ b/scripts/portal/portal_victor2.py @@ -0,0 +1 @@ +sm.warp(401051100) \ No newline at end of file diff --git a/scripts/portal/prism_out.py b/scripts/portal/prism_out.py new file mode 100755 index 0000000..d612c30 --- /dev/null +++ b/scripts/portal/prism_out.py @@ -0,0 +1,5 @@ +# Exit Harmony +if not sm.getReturnField() is None: + sm.warp(sm.getReturnField()) +else: + sm.warp(100000000, 19) \ No newline at end of file diff --git a/scripts/portal/prisonBreak_miro.py b/scripts/portal/prisonBreak_miro.py new file mode 100755 index 0000000..97bac86 --- /dev/null +++ b/scripts/portal/prisonBreak_miro.py @@ -0,0 +1,12 @@ +import random +maps = [921160350, 921160340, 921160330, 921160400, 921160300, 921160320, 921160310] +if sm.hasMobsInField(): + sm.dispose() +fieldId = random.choice(maps) +while fieldId == sm.getFieldID(): + fieldId = random.choice(maps) +if fieldId == 921160400: + for partyMember in sm.getParty().getMembers(): + sm.warp(fieldId) + sm.dispose() +sm.warp(fieldId) diff --git a/scripts/portal/prisonBreak_next.py b/scripts/portal/prisonBreak_next.py new file mode 100755 index 0000000..3eb377e --- /dev/null +++ b/scripts/portal/prisonBreak_next.py @@ -0,0 +1,17 @@ +# 921160200 +# Party Quest - Escape! PQ + +# Hidden Street : Aerial Prison +if sm.getFieldID() == 921160600: + warp = sm.getReactorQuantity() > 1 + if warp: # due to invisible reactor hidden on the map + sm.chat("Unlock all the prison doors.") + sm.dispose() +else: + warp = not sm.hasMobsInField() or sm.getFieldID() == 921160100 + if not warp: + sm.chat("The portal is not opened.") + sm.dispose() +for partyMember in sm.getParty().getPartyMembersInSameFieldList(chr): + partyMember.warp(sm.getFieldID() + 100) +chr.warp(sm.getFieldID() + 100) \ No newline at end of file diff --git a/scripts/portal/prisonBreak_out0.py b/scripts/portal/prisonBreak_out0.py new file mode 100755 index 0000000..910ac0b --- /dev/null +++ b/scripts/portal/prisonBreak_out0.py @@ -0,0 +1,14 @@ +# 921160700 - Escape! - PQ + +if sm.hasMobsInField(): + sm.chat("The portal is not opened.") +elif sm.getFieldID() == 921160700: + sm.warpInstanceOut(910002000) # Party Quest Map + sm.giveExp(sm.getPQExp()) #Gives player PQ exp + sm.giveNX(400000) + sm.giveItem(4310212, 2) +else: + dialog = "Are you sure you want to leave?" + if sm.sendAskYesNo(dialog): + sm.warpInstanceOut(910002000) +sm.dispose() diff --git a/scripts/portal/profession01.py b/scripts/portal/profession01.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession01.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession05.py b/scripts/portal/profession05.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession05.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession06.py b/scripts/portal/profession06.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession06.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession07.py b/scripts/portal/profession07.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession07.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession08.py b/scripts/portal/profession08.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession08.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession09.py b/scripts/portal/profession09.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession09.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession10.py b/scripts/portal/profession10.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession10.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession107.py b/scripts/portal/profession107.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession107.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession11.py b/scripts/portal/profession11.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession11.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/profession14.py b/scripts/portal/profession14.py new file mode 100755 index 0000000..6e81835 --- /dev/null +++ b/scripts/portal/profession14.py @@ -0,0 +1,2 @@ +sm.setReturnField() +sm.warp(910001000, 6) diff --git a/scripts/portal/pt02_450003720.py b/scripts/portal/pt02_450003720.py new file mode 100755 index 0000000..e743cdb --- /dev/null +++ b/scripts/portal/pt02_450003720.py @@ -0,0 +1,8 @@ +# id 2 (pt02), field 450003720 +if sm.hasQuestCompleted(34302): + sm.warp(450003100) + +else: + sm.setSpeakerType(3) + sm.setParam(2) + sm.sendSayOkay("(I should try and get through that fog on the right.)") diff --git a/scripts/portal/pt_101080000.py b/scripts/portal/pt_101080000.py new file mode 100755 index 0000000..40ee3c1 --- /dev/null +++ b/scripts/portal/pt_101080000.py @@ -0,0 +1,19 @@ +# id 3 (south00), field 101080000 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setSpeakerType(8) +sm.setParam(3) +sm.sendNext("I'm tough. What's the worst that could happen?") +sm.sendDelay(500) +sm.sendDelay(900) +sm.hideUser(True) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(910143001) diff --git a/scripts/portal/pt_101081300.py b/scripts/portal/pt_101081300.py new file mode 100755 index 0000000..9f628e9 --- /dev/null +++ b/scripts/portal/pt_101081300.py @@ -0,0 +1,4 @@ +# id 4 (in00), field 101081300 +sm.setSpeakerType(8) +sm.setParam(2) +sm.sendNext("But it's pitch dark in there. I can't just walk in uninvited.") diff --git a/scripts/portal/pt_224000121_2.py b/scripts/portal/pt_224000121_2.py new file mode 100755 index 0000000..afd72c0 --- /dev/null +++ b/scripts/portal/pt_224000121_2.py @@ -0,0 +1,2 @@ +sm.warp(224000122, 4) +sm.dispose() diff --git a/scripts/portal/pt_450003720.py b/scripts/portal/pt_450003720.py new file mode 100755 index 0000000..bd879e4 --- /dev/null +++ b/scripts/portal/pt_450003720.py @@ -0,0 +1,8 @@ +# id 3 (pt01), field 450003720 +if not sm.hasQuestCompleted(34302): + sm.startQuest(34302) + if sm.hasQuest(34302): + sm.completeQuest(34302) + sm.setPlayerAsSpeaker() + sm.sendNext("(I can't pass through the fog...)") + sm.sendNext("(I guess I should turn back for now...)") diff --git a/scripts/portal/pt_59063.py b/scripts/portal/pt_59063.py new file mode 100755 index 0000000..f9c9f32 --- /dev/null +++ b/scripts/portal/pt_59063.py @@ -0,0 +1,3 @@ +# 866000220 +sm.warp(865000000, 0) +sm.dispose() diff --git a/scripts/portal/pt_867200408.py b/scripts/portal/pt_867200408.py new file mode 100755 index 0000000..ef41d24 --- /dev/null +++ b/scripts/portal/pt_867200408.py @@ -0,0 +1,5 @@ +# id 1 (pt_867200408), field 867200408 +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +res = sm.sendAskYesNo("Hurry up! Are you ready to leave?") diff --git a/scripts/portal/pt_867200501.py b/scripts/portal/pt_867200501.py new file mode 100755 index 0000000..c2abf11 --- /dev/null +++ b/scripts/portal/pt_867200501.py @@ -0,0 +1,4 @@ +# id 1 (pt_867200501), field 867200501 +sm.openUI(1888) +sm.openUI(1890) +sm.warp(867200500) diff --git a/scripts/portal/pt_867200706.py b/scripts/portal/pt_867200706.py new file mode 100755 index 0000000..07cd9c7 --- /dev/null +++ b/scripts/portal/pt_867200706.py @@ -0,0 +1,6 @@ +# id 1 (pt_867200706), field 867200706 +sm.setSpeakerType(3) +sm.setParam(35) +sm.setColor(1) +sm.sendNext("Go to #m867200920#.") +sm.warp(-1) diff --git a/scripts/portal/pt_867200853.py b/scripts/portal/pt_867200853.py new file mode 100755 index 0000000..b276cfd --- /dev/null +++ b/scripts/portal/pt_867200853.py @@ -0,0 +1,5 @@ +# id 1 (pt_867200853), field 867200853 +sm.setSpeakerType(3) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +res = sm.sendAskYesNo("Are you ready to leave?") diff --git a/scripts/portal/pt_867200900.py b/scripts/portal/pt_867200900.py new file mode 100755 index 0000000..06199d7 --- /dev/null +++ b/scripts/portal/pt_867200900.py @@ -0,0 +1,5 @@ +# id 1 (pt_867200900), field 867200900 +sm.completeQuestNoCheck(64158) +sm.setSpeakerType(8) +sm.setParam(2) +res = sm.sendAskYesNo("If you forfeit, your progress will be reset.\r\nDo you wish to leave now?") diff --git a/scripts/portal/pt_940202032_l.py b/scripts/portal/pt_940202032_l.py new file mode 100755 index 0000000..46de66a --- /dev/null +++ b/scripts/portal/pt_940202032_l.py @@ -0,0 +1,6 @@ +# id 1 (pt_l), field 940202032 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face3#I need to get the hang of handling this crystal. It's pretty powerful.") diff --git a/scripts/portal/pt_940202036_col.py b/scripts/portal/pt_940202036_col.py new file mode 100755 index 0000000..5ad343f --- /dev/null +++ b/scripts/portal/pt_940202036_col.py @@ -0,0 +1,70 @@ +# id 1 (pt_col), field 940202036 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face1#Warning. An unidentified group is approaching.") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Check out those weird kids over there.") +sm.spawnNpc(3001343, -600, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -520, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -415, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -325, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -205, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -130, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, 25, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, 120, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, 225, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.playSound("Sound/Mob.img/2400317/Regen", 100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.sendDelay(1200) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendNext("#face0#Hey! Weird kids! You lost?") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Wait a minute. They aren't High Flora, are they? They've been everywhere lately.") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#They'd better not be. I hate those arrogant jerks!") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Maybe we can rough them up a bit and steal their stuff.") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(27040, "0=190221171834") diff --git a/scripts/portal/pt_940202300_o.py b/scripts/portal/pt_940202300_o.py new file mode 100755 index 0000000..fb4aa39 --- /dev/null +++ b/scripts/portal/pt_940202300_o.py @@ -0,0 +1,3 @@ +# id 1 (pt_out), field 940202300 +sm.createQuestWithQRValue(34817, "m=1;clear=1") +sm.warp(940202041) diff --git a/scripts/portal/pt_c02.py b/scripts/portal/pt_c02.py new file mode 100755 index 0000000..c0405ce --- /dev/null +++ b/scripts/portal/pt_c02.py @@ -0,0 +1,4 @@ +# id 8 (null), field 101070000 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("Ugh! Why do I feel so... heavy?! Each... step... getting... tougher! \r\n\r\nARGH!") diff --git a/scripts/portal/pt_col.py b/scripts/portal/pt_col.py new file mode 100755 index 0000000..a3f18fb --- /dev/null +++ b/scripts/portal/pt_col.py @@ -0,0 +1,70 @@ +# id 1 (pt_col), field 940202036 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face1#Warning. An unidentified group is approaching.") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Check out those weird kids over there.") +sm.spawnNpc(3001343, -600, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -520, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -415, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -325, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -205, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, -130, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, 25, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, 120, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.spawnNpc(3001343, 225, 790) +sm.showNpcSpecialActionByTemplateId(3001343, "summon", 0) +sm.playSound("Sound/Mob.img/2400317/Regen", 100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.showNpcSpecialActionByTemplateId(3001343, "regen", 1100) +sm.sendDelay(1200) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.resetNpcSpecialActionByTemplateId(3001343) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendNext("#face0#Hey! Weird kids! You lost?") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Wait a minute. They aren't High Flora, are they? They've been everywhere lately.") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#They'd better not be. I hate those arrogant jerks!") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Maybe we can rough them up a bit and steal their stuff.") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(27040, "0=190221171834") \ No newline at end of file diff --git a/scripts/portal/pt_dir0240.py b/scripts/portal/pt_dir0240.py new file mode 100755 index 0000000..c7e9a2e --- /dev/null +++ b/scripts/portal/pt_dir0240.py @@ -0,0 +1,9 @@ +# id 2 (dir0240), field 867200240 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400588, 45, -650) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAre you okay?") diff --git a/scripts/portal/pt_dir0260.py b/scripts/portal/pt_dir0260.py new file mode 100755 index 0000000..42775ce --- /dev/null +++ b/scripts/portal/pt_dir0260.py @@ -0,0 +1,23 @@ +# id 1 (dir0260), field 867200260 +sm.createQuestWithQRValue(64014, "scene1=1;scene2=1;scene4=1;mapIdx=0") +sm.createQuestWithQRValue(64014, "scene1=1;scene2=1;scene4=2;mapIdx=0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.moveCamera(True, 5000, 0, 0) +sm.spawnNpc(9400675, -445, 125) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.sendDelay(500) +sm.zoomCamera(1000, 2000, 2000, -200, 90) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400675, "regen", 0) +sm.sendDelay(800) +sm.forcedFlip(True) +sm.showNpcSpecialActionByTemplateId(9400675, "skill1", 0) +sm.sendDelay(2000) +sm.playExclSoundWithDownBGM("Mob.img/9402244/skill1", 100) +sm.sendDelay(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.showFieldEffect("monsterPark/stageEff/clear", 0) +sm.playSound("Party1/Clear", 100) +sm.warp(867200281) diff --git a/scripts/portal/pt_dir1340.py b/scripts/portal/pt_dir1340.py new file mode 100755 index 0000000..46a51b9 --- /dev/null +++ b/scripts/portal/pt_dir1340.py @@ -0,0 +1,54 @@ +# id 1 (next00), field 867201340 +sm.completeQuestNoCheck(64073) +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, -337, 440) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, -176, 440) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.spawnNpc(9400609, 450, 440) +sm.showNpcSpecialActionByTemplateId(9400609, "summon", 0) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400609, True, 500, 150) +sm.sendDelay(250) +sm.showNpcSpecialActionByTemplateId(9400580, "ribbon", -1) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(False, 250) +sm.sendDelay(1500) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, False) +sm.flipNpcByTemplateId(9400595, False) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/what", 0, 0, 0, 0, 33655379, 0, 0) +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Hmm? A flying Eyeful? ") +sm.setParam(57) +sm.sendSay("#bHow can it fly? ") +sm.moveNpcByTemplateId(9400580, False, 250, 80) +sm.sendDelay(1000) +sm.forcedMove(False, 700) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33655381, 0, 0) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400609, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400609, False, 200, 150) +sm.sendDelay(3000) +sm.forcedAction(5, 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400609, "die1", 0) +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/eyeeyeportal", 128) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 33655379, 0, 0) +sm.sendDelay(1000) +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.lockInGameUI(False, True) +sm.warp(867201401) diff --git a/scripts/portal/pt_down.py b/scripts/portal/pt_down.py new file mode 100755 index 0000000..646f3a7 --- /dev/null +++ b/scripts/portal/pt_down.py @@ -0,0 +1,5 @@ +# id 5 (null), field 101030000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500010) # Fanzy +res = sm.sendAskYesNo("Would you like to enter #b#e[Theme Dungeon: Ellinel Fairy Academy]#k#n?") diff --git a/scripts/portal/pt_fairyacademy1.py b/scripts/portal/pt_fairyacademy1.py new file mode 100755 index 0000000..2f53ed2 --- /dev/null +++ b/scripts/portal/pt_fairyacademy1.py @@ -0,0 +1,4 @@ +# id 4 (pt_in), field 101073000 +sm.setSpeakerID(1500024) # Noisy Spot +res = sm.sendAskAccept("Chase after #bTosh the Fairy#k.") +sm.warp(101073010) diff --git a/scripts/portal/pt_fairyacademy2.py b/scripts/portal/pt_fairyacademy2.py new file mode 100755 index 0000000..a8e03fe --- /dev/null +++ b/scripts/portal/pt_fairyacademy2.py @@ -0,0 +1,4 @@ +# id 3 (pt_in), field 101073100 +sm.setSpeakerID(1500025) # Noisy Spot +res = sm.sendAskAccept("Chase after #bEphony the Fairy#k and #bPhiny the Fairy#k.") +sm.warp(101073110) diff --git a/scripts/portal/pt_go0220.py b/scripts/portal/pt_go0220.py new file mode 100755 index 0000000..2aa642e --- /dev/null +++ b/scripts/portal/pt_go0220.py @@ -0,0 +1,19 @@ +# id 1 (go0220), field 867200200 +sm.createQuestWithQRValue(64014, "scene1=1;mapIdx=0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.spawnNpc(9400686, 2025, -180) +sm.showNpcSpecialActionByTemplateId(9400686, "summon", 0) +sm.sendDelay(300) +sm.showNpcSpecialActionByTemplateId(9400686, "regen", 0) +sm.sendDelay(800) +sm.spawnNpc(9400642, 2025, -180) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.showNpcSpecialActionByTemplateId(9400642, "skill1", 0) +sm.playSound("Sound/Mob.img/9402242/Attack1", 128) +sm.sendDelay(2000) +sm.sendDelay(500) +sm.lockInGameUI(False, True) diff --git a/scripts/portal/pt_go0240.py b/scripts/portal/pt_go0240.py new file mode 100755 index 0000000..a00eb71 --- /dev/null +++ b/scripts/portal/pt_go0240.py @@ -0,0 +1,37 @@ +# id 1 (go0240), field 867200220 +sm.createQuestWithQRValue(64014, "scene1=1;scene2=1;mapIdx=0") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.sendDelay(500) +sm.sendDelay(500) +sm.avatarOriented("Effect/OnUserEff.img/emotionBalloon/exclamation3") +sm.forcedMove(False, 400) +sm.sendDelay(3000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWhat is that?") +sm.sendDelay(2000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT1/ullan", 128) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Ah!") +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bThat can't be good! Whoever that is down there needs saving!") +sm.spawnNpc(9400674, 2240, -180) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400642, 1985, -180) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 2115, -180) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400674, "regen", 0) +sm.showNpcSpecialActionByTemplateId(9400642, "regen", 0) +sm.showNpcSpecialActionByTemplateId(9400642, "regen", 0) +sm.sendDelay(800) +sm.forcedFlip(True) +sm.showNpcSpecialActionByTemplateId(9400674, "skill1", 0) +sm.playSound("Sound/Mob.img/9402243/skill1", 128) +sm.sendDelay(2500) +sm.lockInGameUI(False, True) diff --git a/scripts/portal/pt_go1340.py b/scripts/portal/pt_go1340.py new file mode 100755 index 0000000..f37691f --- /dev/null +++ b/scripts/portal/pt_go1340.py @@ -0,0 +1,24 @@ +# id 1 (next), field 867201320 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400580, -372, 440) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.spawnNpc(9400595, -245, 440) +sm.showNpcSpecialActionByTemplateId(9400595, "summon", 0) +sm.setMapTaggedObjectVisible("ribbon02", True, 0, 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400580, "ribbon", -1) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika? What are you doing? We have to go before the sun sets.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Hold on a second. It's easy to get lost in the forest, so I want to mark the path we traveled.") +sm.sendDelay(500) +sm.resetNpcSpecialActionByTemplateId(9400580) +sm.setMapTaggedObjectVisible("ribbon03", True, 0, 0) +sm.sendDelay(1000) +sm.sendNext("#face1#There! Let's go! ") +sm.lockInGameUI(False, True) +sm.warp(867201340) diff --git a/scripts/portal/pt_goHelisium00.py b/scripts/portal/pt_goHelisium00.py new file mode 100755 index 0000000..f3fa884 --- /dev/null +++ b/scripts/portal/pt_goHelisium00.py @@ -0,0 +1,3 @@ +# 400000000 +sm.warp(401000002) +sm.dispose() diff --git a/scripts/portal/pt_goto141060000.py b/scripts/portal/pt_goto141060000.py new file mode 100755 index 0000000..185b475 --- /dev/null +++ b/scripts/portal/pt_goto141060000.py @@ -0,0 +1,5 @@ +# 141010000 - [Riena Strait] Ice Station 1 or [Riena Strait] Ice Station 2 or [Riena Strait] Barbara's House +from net.swordie.ms.scripts import ScriptType + +sm.openNpc(1510006) +sm.dispose(ScriptType.Portal) diff --git a/scripts/portal/pt_henespin.py b/scripts/portal/pt_henespin.py new file mode 100755 index 0000000..15e70b6 --- /dev/null +++ b/scripts/portal/pt_henespin.py @@ -0,0 +1,2 @@ +sm.warp(100000004, 1) +sm.dispose() diff --git a/scripts/portal/pt_horizonPortal.py b/scripts/portal/pt_horizonPortal.py new file mode 100755 index 0000000..64f44c1 --- /dev/null +++ b/scripts/portal/pt_horizonPortal.py @@ -0,0 +1,18 @@ +# 5th job portal inside Henesys + +if sm.hasQuest(1461): + if sm.getFieldID() == 100000101: + sm.warpInstanceIn(450000100) + sm.setInstanceTime(10, 450000000) + elif sm.getFieldID() == 450000000: + sm.warpInstanceOut(100000201) + elif sm.getFieldID() == 400000001: + sm.warpInstanceIn(450000110) + sm.setInstanceTime(10, 450000010) + elif sm.getFieldID() == 450000010: + sm.warpInstanceOut(400000001) + elif sm.getFieldID() == 105300000: + sm.warpInstanceIn(450000120) + sm.setInstanceTime(10, 450000020) + elif sm.getFieldID() == 450000020: + sm.warpInstanceOut(105300000) \ No newline at end of file diff --git a/scripts/portal/pt_illium_hunt1.py b/scripts/portal/pt_illium_hunt1.py new file mode 100755 index 0000000..e72fbd1 --- /dev/null +++ b/scripts/portal/pt_illium_hunt1.py @@ -0,0 +1,54 @@ +# id 1 (pt_r), field 940202013 +sm.lockInGameUI(False, True) +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face4#Yikes! What are those!?") +sm.createQuestWithQRValue(16119, "") +sm.createQuestWithQRValue(27039, "") +sm.completeQuestNoCheck(28515) +sm.createQuestWithQRValue(26015, "") +sm.createQuestWithQRValue(26011, "") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Those hedgehogs are close enough to hunt, and they may have the parts you need.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Those are hedgehogs?! But they're so... pokey... and weird. I thought they were supposed to be cute!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Try to get a little closer and use your basic attack on them with the #rCtrl#k key.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#That'll work on these things?") +sm.sendSay("#face0#Okay... Ctrl key, Ctrl key... Here goes nothing!") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.progressMessageFont(3, 20, 20, 0, "You can attack by pressing the Ctrl key.") +sm.avatarOriented("UI/tutorial.img/illium/attack") +sm.createQuestWithQRValue(64110, "chk=1") +sm.createQuestWithQRValue(64110, "chk=0") +sm.startQuest(9571) +sm.startQuest(28861) +sm.startQuest(28862) +sm.startQuest(28830) +sm.startQuest(28831) +sm.startQuest(42102) +sm.startQuest(7621) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/15/53") +sm.createQuestWithQRValue(25980, "normal=#") +sm.createQuestWithQRValue(25980, "normal=#;hard=#") +sm.createQuestWithQRValue(16700, "date=20190221") +sm.createQuestWithQRValue(16700, "count=1;date=20190221") +sm.createQuestWithQRValue(34801, "hunt1=1") +sm.createQuestWithQRValue(51236, "StageKey=0") +sm.createQuestWithQRValue(16700, "count=2;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=2") +sm.startQuest(11620) +sm.createQuestWithQRValue(16700, "count=3;date=20190221") +sm.createQuestWithQRValue(16027, "ComboK=3") +sm.sendNext("#face0#Did it work?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#You did manage to defeat the hedgehogs, yes, though unfortunately, they weren't carrying the parts you need. Try hunting more.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Sounds good. That was easier than I expected, and I really need those parts.") +sm.warp(940203000) diff --git a/scripts/portal/pt_illium_hunt2.py b/scripts/portal/pt_illium_hunt2.py new file mode 100755 index 0000000..56344c7 --- /dev/null +++ b/scripts/portal/pt_illium_hunt2.py @@ -0,0 +1,26 @@ +# id 1 (pt_r), field 940203000 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "hunt1=1;exp=1") +sm.startQuest(11620) +sm.startQuest(11620) +sm.startQuest(11620) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +if sm.hasItem(4036162, 10): + sm.sendNext("#face0#Perfect! Now, let's move on and gather more.") + sm.createQuestWithQRValue(16700, "count=33;date=20190221") + sm.createQuestWithQRValue(16700, "count=34;date=20190221") + sm.createQuestWithQRValue(16700, "count=35;date=20190221") + sm.createQuestWithQRValue(16700, "count=36;date=20190221") + sm.createQuestWithQRValue(16700, "count=37;date=20190221") + sm.createQuestWithQRValue(16700, "count=38;date=20190221") + sm.createQuestWithQRValue(16700, "count=39;date=20190221") + sm.createQuestWithQRValue(16700, "count=40;date=20190221") + sm.lockInGameUI(False, True) + sm.createQuestWithQRValue(16027, "ComboK=19") + sm.lockInGameUI(False, True) + sm.warp(940202019) +else: + sm.sendNext("You're still missing some materials!") \ No newline at end of file diff --git a/scripts/portal/pt_moleking.py b/scripts/portal/pt_moleking.py new file mode 100755 index 0000000..48cc0a2 --- /dev/null +++ b/scripts/portal/pt_moleking.py @@ -0,0 +1,4 @@ +# id 2 (pt_east), field 101073200 +sm.setSpeakerID(1500027) # Mole King's Lair +res = sm.sendAskAccept("Moving to the #bOutdoor Theater Stage#k.") +sm.warp(101073300) diff --git a/scripts/portal/pt_rosegarden.py b/scripts/portal/pt_rosegarden.py new file mode 100755 index 0000000..ee2bf63 --- /dev/null +++ b/scripts/portal/pt_rosegarden.py @@ -0,0 +1,5 @@ +# Lion King's Castle +# Roof of the Fifth Tower | 211061001 +# Warps to Rose Garden : Gardener's Spot + +sm.warp(211080000, 2) \ No newline at end of file diff --git a/scripts/portal/pt_rosegardenout.py b/scripts/portal/pt_rosegardenout.py new file mode 100755 index 0000000..678d52f --- /dev/null +++ b/scripts/portal/pt_rosegardenout.py @@ -0,0 +1,5 @@ +# Rose Garden : Gardener's Spot | 211080000 +# Exit Portal +# Warps back to Roof of the Fifth Tower | 211061001 + +sm.warp(211061001, 3) \ No newline at end of file diff --git a/scripts/portal/q1602_move.py b/scripts/portal/q1602_move.py new file mode 100755 index 0000000..b67e760 --- /dev/null +++ b/scripts/portal/q1602_move.py @@ -0,0 +1,5 @@ +if sm.hasQuest(1602): + sm.warp(931050402) + +else: + sm.chat("This portal is blocked.") \ No newline at end of file diff --git a/scripts/portal/q20749_Fail.py b/scripts/portal/q20749_Fail.py new file mode 100755 index 0000000..6f2e501 --- /dev/null +++ b/scripts/portal/q20749_Fail.py @@ -0,0 +1,3 @@ +# 220070400 +sm.warp(922020000, 0) +sm.dispose() diff --git a/scripts/portal/q57104portal.py b/scripts/portal/q57104portal.py new file mode 100755 index 0000000..af80fbf --- /dev/null +++ b/scripts/portal/q57104portal.py @@ -0,0 +1,6 @@ +# Momijigaoka | Unfamiliar Hillside + +if sm.getFieldID() == 807040100: + sm.warp(807000000, 1) +else: + sm.warp(807040100, 0) \ No newline at end of file diff --git a/scripts/portal/q57141p.py b/scripts/portal/q57141p.py new file mode 100755 index 0000000..cb5268b --- /dev/null +++ b/scripts/portal/q57141p.py @@ -0,0 +1,11 @@ +# Portal in Field: Honnou-ji : Honnou-ji Eastern Wall (807050200) +# Used for Kanna's Quest: Honnou-ji Infiltration 2 (57437) +# Author: Tiger + +if sm.hasQuest(57437): # Honnou-ji Infiltration 2 + if sm.getFieldID() == 807050204: # Honnou-ji : Honnou-ji Eastern Wall + sm.warpInstanceOut(807020100, 0) + else: + sm.warpInstanceIn(807050201, 0) # Honnou-ji : Honnou-ji Eastern Wall Exterior +else: + chr.chatMessage("You may not enter at this moment.") diff --git a/scripts/portal/q57158p.py b/scripts/portal/q57158p.py new file mode 100755 index 0000000..a004f48 --- /dev/null +++ b/scripts/portal/q57158p.py @@ -0,0 +1 @@ +sm.warp(807050501, 1) diff --git a/scripts/portal/q57159p.py b/scripts/portal/q57159p.py new file mode 100755 index 0000000..e5b1e65 --- /dev/null +++ b/scripts/portal/q57159p.py @@ -0,0 +1 @@ +sm.warp(807050502, 1) diff --git a/scripts/portal/q57433p.py b/scripts/portal/q57433p.py new file mode 100755 index 0000000..5b58c04 --- /dev/null +++ b/scripts/portal/q57433p.py @@ -0,0 +1,9 @@ +# El Nath Town +# Portal to house next to FM + +from net.swordie.ms.constants import BossConstants + +sm.setSpeakerID(9000185) # Eileen next to the portal + +if sm.sendAskYesNo("Would you like to go to the Zakum quest entrance?"): + sm.warp(BossConstants.ZAKUM_JQ_MAP_1) # Shammos's Solitary Room \ No newline at end of file diff --git a/scripts/portal/q62005_in.py b/scripts/portal/q62005_in.py new file mode 100755 index 0000000..cdef9b2 --- /dev/null +++ b/scripts/portal/q62005_in.py @@ -0,0 +1,4 @@ +if sm.hasQuest(62005): + sm.warpInstanceIn(701210161) # Script Map +else: + sm.warp(701210160) \ No newline at end of file diff --git a/scripts/portal/q62015_in.py b/scripts/portal/q62015_in.py new file mode 100755 index 0000000..1767d28 --- /dev/null +++ b/scripts/portal/q62015_in.py @@ -0,0 +1,2 @@ +if sm.hasQuest(62015): + sm.warpInstanceIn(701210131) # Hidden Map : Deep In the Forest \ No newline at end of file diff --git a/scripts/portal/q64026_1.py b/scripts/portal/q64026_1.py new file mode 100755 index 0000000..b8db23b --- /dev/null +++ b/scripts/portal/q64026_1.py @@ -0,0 +1,6 @@ +# id 2 (chk01), field 867200480 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Pete!! Elle!! ") diff --git a/scripts/portal/q64026_2.py b/scripts/portal/q64026_2.py new file mode 100755 index 0000000..dc8d644 --- /dev/null +++ b/scripts/portal/q64026_2.py @@ -0,0 +1,6 @@ +# id 3 (chk02), field 867200480 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Sighs... Where would they have gone?") diff --git a/scripts/portal/q64026_3.py b/scripts/portal/q64026_3.py new file mode 100755 index 0000000..101df44 --- /dev/null +++ b/scripts/portal/q64026_3.py @@ -0,0 +1,6 @@ +# id 4 (chk03), field 867200480 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendNext("Elle gets scared easily, so I bet she took off as soon as the monsters came... And maybe Pete went to look for Elle...") diff --git a/scripts/portal/quest58901.py b/scripts/portal/quest58901.py new file mode 100755 index 0000000..d92b40f --- /dev/null +++ b/scripts/portal/quest58901.py @@ -0,0 +1,10 @@ +# Portal for Rakeda Shingen (Sengoku Era) Questline | Near Momiji Hills 1 (811000001) +# Author: Tiger + +if sm.hasQuestCompleted(58907): # has just completed Mouri's Quest + if sm.hasQuestCompleted(58908): # has already meet Ayame + sm.warp(811000008) + else: + sm.warpInstanceIn(811000007, 0) # Momiji Hills (First Meet Ayame) +else: + sm.warp(811000001) # Momiji Hills : Near Momiji Hills 1 diff --git a/scripts/portal/random_portal_inferno.py b/scripts/portal/random_portal_inferno.py new file mode 100755 index 0000000..0768dc1 --- /dev/null +++ b/scripts/portal/random_portal_inferno.py @@ -0,0 +1,12 @@ +POLLO = 9001059 +INFERNO_CHANNEL = 2 +INFERNO_FIELD_ID = 993000500 +field = chr.getField() +sm.setSpeakerID(POLLO) +answer = sm.sendNext("My brother and I have been tracking down the legendary #rInferno Wolf#k, and we finally found its " + "hideout! It's a really vicious monster that ruthlessly attacks Maple World's travelers... So, will" + "you join us in bringing that beast down?\r\n#L0#Let's do it!#l\r\n#L1#Nah, I'm good.#l") +if answer == 0: + chr.setPreviousFieldID(chr.getFieldID()) + sm.changeChannelAndWarp(INFERNO_CHANNEL, INFERNO_FIELD_ID) + field.removeLife(objectID, False) \ No newline at end of file diff --git a/scripts/portal/random_portal_pollo_fritto.py b/scripts/portal/random_portal_pollo_fritto.py new file mode 100755 index 0000000..d7f21e3 --- /dev/null +++ b/scripts/portal/random_portal_pollo_fritto.py @@ -0,0 +1,43 @@ +POLLO = 9001059 +FRITTO = 9001060 + +ids = [POLLO, FRITTO] + +text = { + POLLO : "Hello, I am #rPollo#k the bounty hunter.\r\nMy brother #bFritto#k and I are the best at what we do! Ha ha!", + FRITTO : "Hello, I am #bFritto#k the bounty hunter.\r\nMy brother #rPollo#k and I are the best at what we do! Ha ha!" +} + +text2 = { + POLLO : "People look at me and instantly see that I am not to be trifled with. How would you like to come with me" + "and witness my greatness?\r\n#L0#Yeah, let's go.#l\r\n#L1#Nah, not now.#l", + FRITTO : "Many people doubt my skills, but one look proves them wrong. How would you like to come with me and" + "witness my greatness?\r\n#L0#Yeah, let's go.#l\r\n#L1#Nah, not now.#l" +} + +maps = { + POLLO : [ + #993000000, need to be fixed, protect pollo + 993000100, #defense wave + ], + FRITTO : [ + #993000200, bird hunting + 993000300, + #993000400, dance mini game + ] +} + +rand = sm.getRandomIntBelow(2) +npc = ids[rand] +field = chr.getField() +sm.setSpeakerID(npc) +if sm.getParty() is None: + sm.sendNext(text[npc]) + answer = sm.sendNext(text2[npc]) + if answer == 0: + chr.setPreviousFieldID(chr.getFieldID()) + map = maps[npc][sm.getRandomIntBelow(len(maps[npc]))] + sm.warpInstanceIn(map) + field.removeLife(objectID, False) +else: + sm.sendSayOkay("Please leave your party before talking to me.") \ No newline at end of file diff --git a/scripts/portal/rankRoom.py b/scripts/portal/rankRoom.py new file mode 100755 index 0000000..f743320 --- /dev/null +++ b/scripts/portal/rankRoom.py @@ -0,0 +1,16 @@ +fields = { +100000201 : [100000205, 2], +103000003 : [103000008, 1], +102000003 : [102000004, 1], +101000003 : [101000004, 2], +# 120000101 : [100000205, 2], +} + +currentMap = sm.getFieldID() +if currentMap == 120000101:# Pirates + sm.chatBlue("[WIP] no MapID for Hall of Pirates") +elif currentMap in fields: + sm.warp(fields[currentMap][0], fields[currentMap][1]) +else: + sm.chat("This script (rankRoom.py) has not been coded for the given map (" + str(currentMap) + ")") +sm.dispose() diff --git a/scripts/portal/return_867202680.py b/scripts/portal/return_867202680.py new file mode 100755 index 0000000..5f6e489 --- /dev/null +++ b/scripts/portal/return_867202680.py @@ -0,0 +1,7 @@ +# id 2 (return), field 867202680 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +res = sm.sendNext("#face0#Gah! Hurry up! Get rid of it!#b \r\n#L0# Let's leave now.#l\r\n#L1# Let's make repairs and then leave.#l") +sm.warp(-1) diff --git a/scripts/portal/return_refPotal.py b/scripts/portal/return_refPotal.py new file mode 100755 index 0000000..380097a --- /dev/null +++ b/scripts/portal/return_refPotal.py @@ -0,0 +1 @@ +sm.warp(820000000) \ No newline at end of file diff --git a/scripts/portal/rienCaveEnter.py b/scripts/portal/rienCaveEnter.py new file mode 100755 index 0000000..88732a2 --- /dev/null +++ b/scripts/portal/rienCaveEnter.py @@ -0,0 +1,3 @@ +# portal to Snow Island : mirror cave +sm.warp(140030000, 2) +sm.dispose() diff --git a/scripts/portal/rienTutor1.py b/scripts/portal/rienTutor1.py new file mode 100755 index 0000000..d5fa7ab --- /dev/null +++ b/scripts/portal/rienTutor1.py @@ -0,0 +1,5 @@ +# 140090100 +if sm.hasQuestCompleted(21010): + sm.warp(140090200, 1) +else: + sm.systemMessage("You must complete the quest before proceeding to the next map.") \ No newline at end of file diff --git a/scripts/portal/rienTutor2.py b/scripts/portal/rienTutor2.py new file mode 100755 index 0000000..157a96c --- /dev/null +++ b/scripts/portal/rienTutor2.py @@ -0,0 +1,5 @@ +# 140090200 +if sm.hasQuestCompleted(21011): + sm.warp(140090300, 1) +else: + sm.systemMessage("You must complete the quest before proceeding to the next map.") \ No newline at end of file diff --git a/scripts/portal/rienTutor3.py b/scripts/portal/rienTutor3.py new file mode 100755 index 0000000..676957e --- /dev/null +++ b/scripts/portal/rienTutor3.py @@ -0,0 +1,7 @@ +# 140090300 +if sm.hasQuestCompleted(21012): + sm.warp(140090500, 1) + sm.completeQuest(21013) + sm.addLevel(1) +else: + sm.systemMessage("You must complete the quest before proceeding to the next map.") \ No newline at end of file diff --git a/scripts/portal/rienTutor4.py b/scripts/portal/rienTutor4.py new file mode 100755 index 0000000..54d0ed7 --- /dev/null +++ b/scripts/portal/rienTutor4.py @@ -0,0 +1,5 @@ +# 140090400 +if sm.hasQuestCompleted(21013): + sm.warp(140090500, 1) +else: + sm.systemMessage("You must complete the quest before proceeding to the next map.") \ No newline at end of file diff --git a/scripts/portal/rienTutor5.py b/scripts/portal/rienTutor5.py new file mode 100755 index 0000000..8623878 --- /dev/null +++ b/scripts/portal/rienTutor5.py @@ -0,0 +1,3 @@ +# 140090500 +if sm.hasTutor(): + sm.tutorCustomMsg("You're very close to town. I'll head over there first since I have some things to take care of. You take your time.", 200, 4000) \ No newline at end of file diff --git a/scripts/portal/rienTutor6.py b/scripts/portal/rienTutor6.py new file mode 100755 index 0000000..03ca26b --- /dev/null +++ b/scripts/portal/rienTutor6.py @@ -0,0 +1,4 @@ +# 140090500 +if not "miss=o" in sm.getQRValue(21019) or sm.hasTutor(): + sm.hireTutor(False) + sm.addQRValue(21019, "miss=o") \ No newline at end of file diff --git a/scripts/portal/rienTutor7.py b/scripts/portal/rienTutor7.py new file mode 100755 index 0000000..2edbf5a --- /dev/null +++ b/scripts/portal/rienTutor7.py @@ -0,0 +1,5 @@ +# 140010000 +if sm.hasQuestCompleted(21014) or sm.getChr().getJob() != 2000: + sm.warp(140010100, 2) +else: + sm.systemMessage("You must complete the quest before proceeding to the next map.") \ No newline at end of file diff --git a/scripts/portal/rienTutor8.py b/scripts/portal/rienTutor8.py new file mode 100755 index 0000000..52f1cbc --- /dev/null +++ b/scripts/portal/rienTutor8.py @@ -0,0 +1,2 @@ +# 140000000 +sm.warp(140010000, 2) \ No newline at end of file diff --git a/scripts/portal/roadToVellud1.py b/scripts/portal/roadToVellud1.py new file mode 100755 index 0000000..c49424a --- /dev/null +++ b/scripts/portal/roadToVellud1.py @@ -0,0 +1,8 @@ +# id 2 (in00), field 863000016 +sm.setSpeakerType(8) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390101) # ?????? +sm.sendNext("Insignificant child! Are you deaf to the fury of the old world? Can you not hear the roars of pain and resentment that echo around you? Discard whatever foot touched the corruption of this soil, and escape while you can. The Heart Tree's corruption touches the very ground you stand upon.") +sm.setParam(16) +res = sm.sendAskYesNo("What the heck was that?! I feel like someone was yelling inside my bones. Should I keep going?") +sm.warp(863000100) diff --git a/scripts/portal/roadToVellud2.py b/scripts/portal/roadToVellud2.py new file mode 100755 index 0000000..02c6724 --- /dev/null +++ b/scripts/portal/roadToVellud2.py @@ -0,0 +1 @@ +sm.warp(863010000) \ No newline at end of file diff --git a/scripts/portal/root_ent.py b/scripts/portal/root_ent.py new file mode 100755 index 0000000..6a632a4 --- /dev/null +++ b/scripts/portal/root_ent.py @@ -0,0 +1,6 @@ +# Portal to Root Abyss +if sm.hasQuest(30000) or sm.hasQuestCompleted(30000): # Root Abyss quest - [Root Abyss] An Urgent Summons + sm.warp(105010200, 0) # Secret Swamp +else: + sm.chat("The path is blocked by a thick fog.") +sm.dispose() diff --git a/scripts/portal/root_route.py b/scripts/portal/root_route.py new file mode 100755 index 0000000..c5c4fde --- /dev/null +++ b/scripts/portal/root_route.py @@ -0,0 +1,6 @@ +# Used to portal you to Root Abyss's Quest Map +if sm.hasQuest(30000) or sm.hasQuest(30003): + sm.warp(910700200, 0) # Root Abyss Quest Map - (NOT the actual map) +else: + sm.warp(105200000, 0) # Root Abyss +sm.dispose() diff --git a/scripts/portal/rootaNext.py b/scripts/portal/rootaNext.py new file mode 100755 index 0000000..716d708 --- /dev/null +++ b/scripts/portal/rootaNext.py @@ -0,0 +1,5 @@ +# Root abyss "next" portals +from net.swordie.ms.constants import BossConstants + +sm.warpInstanceIn(sm.getFieldID() + 10, True) +sm.setInstanceTime(BossConstants.ROOTABYSS_TIME) diff --git a/scripts/portal/rootabyssOUT.py b/scripts/portal/rootabyssOUT.py new file mode 100755 index 0000000..288dd6d --- /dev/null +++ b/scripts/portal/rootabyssOUT.py @@ -0,0 +1,15 @@ +sm.setSpeakerID(1064002) +sm.sendAskYesNo + +dialog = str() +if sm.getFieldID() == 105200000: + sm.warp(105000000) +else: + if sm.hasMobsInField(): + dialog = "Are you sure you want to leave the battlefield and abandon your party members?" + + else: + dialog = "Are you sure you want to leave the battlefield?" + + if sm.sendAskYesNo(dialog): + sm.warpInstanceOut(105200000) \ No newline at end of file diff --git a/scripts/portal/rootafirstDoor.py b/scripts/portal/rootafirstDoor.py new file mode 100755 index 0000000..5ab8ea7 --- /dev/null +++ b/scripts/portal/rootafirstDoor.py @@ -0,0 +1,3 @@ +# Root Abyss - Pierre Portal + +sm.startScript("pierreEnter", "npc") \ No newline at end of file diff --git a/scripts/portal/rootaforthDoor.py b/scripts/portal/rootaforthDoor.py new file mode 100755 index 0000000..fb7049d --- /dev/null +++ b/scripts/portal/rootaforthDoor.py @@ -0,0 +1,3 @@ +# Root Abyss - Vellum Portal + +sm.startScript("bellumEnter", "npc") \ No newline at end of file diff --git a/scripts/portal/rootasecondDoor.py b/scripts/portal/rootasecondDoor.py new file mode 100755 index 0000000..b500742 --- /dev/null +++ b/scripts/portal/rootasecondDoor.py @@ -0,0 +1,3 @@ +# Root Abyss - Von Bon Portal + +sm.startScript("banbanEnter", "npc") \ No newline at end of file diff --git a/scripts/portal/rootathirdDoor.py b/scripts/portal/rootathirdDoor.py new file mode 100755 index 0000000..4105f94 --- /dev/null +++ b/scripts/portal/rootathirdDoor.py @@ -0,0 +1,3 @@ +# Root Abyss - Crimson Queen Portal + +sm.startScript("bloodyqueenEnter", "npc") \ No newline at end of file diff --git a/scripts/portal/shaolin_done.py b/scripts/portal/shaolin_done.py new file mode 100755 index 0000000..32d263b --- /dev/null +++ b/scripts/portal/shaolin_done.py @@ -0,0 +1,6 @@ +if not sm.hasMobsInField(): + sm.stopEvents() + sm.warpInstanceIn(701220600) + sm.createQuestWithQRValue(62038, "clear") +else: + sm.chat("Please eliminate all monsters before moving to the next stage.") \ No newline at end of file diff --git a/scripts/portal/shaolin_next.py b/scripts/portal/shaolin_next.py new file mode 100755 index 0000000..a64b758 --- /dev/null +++ b/scripts/portal/shaolin_next.py @@ -0,0 +1,4 @@ +if not sm.hasMobsInField(): + sm.warpInstanceIn(701220510) +else: + sm.chat("Please eliminate all monsters before moving to the next stage.") \ No newline at end of file diff --git a/scripts/portal/shaolin_out.py b/scripts/portal/shaolin_out.py new file mode 100755 index 0000000..35ec591 --- /dev/null +++ b/scripts/portal/shaolin_out.py @@ -0,0 +1 @@ +sm.warpInstanceOut(701220300, 3) \ No newline at end of file diff --git a/scripts/portal/singleDungeonout.py b/scripts/portal/singleDungeonout.py new file mode 100755 index 0000000..5949050 --- /dev/null +++ b/scripts/portal/singleDungeonout.py @@ -0,0 +1,11 @@ +map = sm.getReturnField() +if map == 0 or map == 910000000: + sm.chat("(Portal) Cannot find your previous map ID, warping to Henesys.") + map = 100000000 + portal = 0 + +if "910001000" in sm.getQRValue(9999): + sm.setQRValue(9999, "") + map = 910001000 + +sm.warpNoReturn(map, 2) \ No newline at end of file diff --git a/scripts/portal/spirit00.py b/scripts/portal/spirit00.py new file mode 100755 index 0000000..cae888e --- /dev/null +++ b/scripts/portal/spirit00.py @@ -0,0 +1,24 @@ +sm.setSpeakerID(2143000) + +answer = sm.sendNext("So you want to go to the Hallowed Ground? Oh yeah, we discovered a new Hallowed Ground. I hear the" + "key to the Cygnus Garden can be found there. Please continue doing your best to bring peace to our world.\r\n#b" + "#L0#Hallowed Ground of Dawn#l\r\n" + "#L1#Hallowed Ground of Blaze#l\r\n" + "#L2#Hallowed Ground of Wind#l\r\n" + "#L3#Hallowed Ground of Night#l\r\n" + "#L4#Hallowed Ground of Thunder#l\r\n") + +if answer == 0: + sm.warpInstanceIn(271030201) + +elif answer == 1: + sm.warpInstanceIn(271030202) + +elif answer == 2: + sm.warpInstanceIn(271030203) + +elif answer == 3: + sm.warpInstanceIn(271030204) + +elif answer == 4: + sm.warpInstanceIn(271030205) diff --git a/scripts/portal/stage6_portal.py b/scripts/portal/stage6_portal.py new file mode 100755 index 0000000..ddbb942 --- /dev/null +++ b/scripts/portal/stage6_portal.py @@ -0,0 +1,8 @@ +# Hidden street | Abandoned Tower + +STAGE_3_COMPLETE = "Stage3Complete" + +if field.hasProperty(STAGE_3_COMPLETE): + sm.invokeForParty("warp", 922010700) +else: + sm.sendChat("Something went wrong, please contact an admin.") diff --git a/scripts/portal/stageOut.py b/scripts/portal/stageOut.py new file mode 100755 index 0000000..8c97ccb --- /dev/null +++ b/scripts/portal/stageOut.py @@ -0,0 +1,6 @@ +sm.setSpeakerID(2540000) +response = sm.sendAskYesNo("Do you wish to leave the battlefield?") + +if response: + sm.warpInstanceOut(992000000) + sm.dispose() diff --git a/scripts/portal/subway_in2.py b/scripts/portal/subway_in2.py new file mode 100755 index 0000000..85223db --- /dev/null +++ b/scripts/portal/subway_in2.py @@ -0,0 +1,3 @@ +# 103020000 +sm.warp(103020100, 2) +sm.dispose() diff --git a/scripts/portal/talkToMai.py b/scripts/portal/talkToMai.py new file mode 100755 index 0000000..e345dd3 --- /dev/null +++ b/scripts/portal/talkToMai.py @@ -0,0 +1,14 @@ +# Created by MechAviv +# ID :: [4000021] +# Maple Road : Entrance to Adventurer Training Center + +sm.setSpeakerID(12100) +selection = sm.sendNext("This is the perfect place to train your basic skills. Where do you want to train?\r\n#b#L0#Adventurer Training Center 1#l\r\n#b#L1#Adventurer Training Center 2#l\r\n#b#L2#Adventurer Training Center 3#l\r\n#b#L3#Adventurer Training Center 4#l") +if selection == 0: + sm.warp(4000022, 4) +elif selection == 1: + sm.warp(4000023, 4) +elif selection == 2: + sm.warp(4000024, 4) +elif selection == 3: + sm.warp(4000025, 4) \ No newline at end of file diff --git a/scripts/portal/talkToPresent.py b/scripts/portal/talkToPresent.py new file mode 100755 index 0000000..d213565 --- /dev/null +++ b/scripts/portal/talkToPresent.py @@ -0,0 +1,6 @@ +# Gate to the present +if sm.hasQuestCompleted(1478): #V-matrix quest + sm.setSpeakerID(1520021) + selection = sm.sendNext("At the center of the Temple of Time stands an enormous door, the Gate of the Present.\r\n #b#L0#Step through into the Arcane River.#l \r\n #L1#Pass through the Gate of the Present. #l") + if selection == 0: + sm.warp(450001003) \ No newline at end of file diff --git a/scripts/portal/talkToVasili.py b/scripts/portal/talkToVasili.py new file mode 100755 index 0000000..6ea3ed2 --- /dev/null +++ b/scripts/portal/talkToVasili.py @@ -0,0 +1,2 @@ +# Portal into vasily's ship Maple road | Port +sm.openNpc(10305) diff --git a/scripts/portal/templeenter.py b/scripts/portal/templeenter.py new file mode 100755 index 0000000..b6d7366 --- /dev/null +++ b/scripts/portal/templeenter.py @@ -0,0 +1,3 @@ +# 200090510 +sm.warp(270000100, 2) +sm.dispose() diff --git a/scripts/portal/testGotoBigBoss.py b/scripts/portal/testGotoBigBoss.py new file mode 100755 index 0000000..fd29779 --- /dev/null +++ b/scripts/portal/testGotoBigBoss.py @@ -0,0 +1,50 @@ +from net.swordie.ms.constants import BossConstants +from net.swordie.ms.enums import EventType + +# Mode, Required Level, Map ID, Death Count, Event Type, Cooldown + +destinations = [ + ["Legendary", 240, 863010100, 20, EventType.Gollux, 172800000], +] + +runsPerDay = 1 + +if sm.getFieldID() == 863010000: + def is_party_eligible(reqlevel, party): + for member in party.getMembers(): + if member.getLevel() < reqlevel: + return False + + return True + + sm.setSpeakerID(9390124) + + dialog = "Do you want to head to the '#bRoad to Gollux#k' to fight \r\n#bLegendary Gollux#k?\r\n" + + for i in range(len(destinations)): + dialog += "#L%d##bGo to the Road to Gollux (%s Mode) #r(Lv. %d+)#b#l\r\n" % (i, destinations[i][0], destinations[i][1]) + + dialog += "#L99#Never mind." + response = sm.sendSay(dialog) + + if sm.getParty() is None: + sm.sendSayOkay("Please create a party before going in.") + sm.dispose() + + elif not sm.isPartyLeader(): + sm.sendSayOkay("Please have your party leader talk to me if you wish to face the #bLegendary Gollux#k.") + sm.dispose() + + elif sm.partyHasCoolDown(destinations[response][4], runsPerDay): + timeUntilReset = sm.getTimeUntilEventReset(destinations[response][4]) + sm.sendNext("You or one of your party member has already attempted facing the \r\n#bLegendary Gollux#k within the past 48 Hours.\r\n You have " + timeUntilReset + " left on your cooldown.") + sm.dispose() + + elif sm.checkParty() and response != 99: + if is_party_eligible(destinations[response][1], sm.getParty()): + sm.setPartyDeathCount(destinations[response][3]) + sm.warpInstanceIn(destinations[response][2], True) + sm.setInstanceTime(BossConstants.GOLLUX_TIME) + sm.addCooldownTimeForParty(destinations[response][4], destinations[response][5]) + else: + sm.sendSayOkay("One or more party members are lacking the prerequisite entry quests, or are below level #b%d#k." % destinations[response][1]) diff --git a/scripts/portal/timeCrack.py b/scripts/portal/timeCrack.py new file mode 100755 index 0000000..2663fe2 --- /dev/null +++ b/scripts/portal/timeCrack.py @@ -0,0 +1,3 @@ +# 272000000 - Portal to leafre in flames + +sm.warp(272000100, 0) diff --git a/scripts/portal/timeQuest1.py b/scripts/portal/timeQuest1.py new file mode 100755 index 0000000..fb0002e --- /dev/null +++ b/scripts/portal/timeQuest1.py @@ -0,0 +1,6 @@ +# 270010100 +if not sm.hasQuestCompleted(3501): # time lane quest + sm.chat("You have not completed the appropriate quest to enter here.") +else: + sm.warp(270010110, 0) +sm.dispose() diff --git a/scripts/portal/timeQuest2.py b/scripts/portal/timeQuest2.py new file mode 100755 index 0000000..fed96f5 --- /dev/null +++ b/scripts/portal/timeQuest2.py @@ -0,0 +1,6 @@ +# 270010200 +if not sm.hasQuestCompleted(3502): # time lane quest + sm.chat("You have not completed the appropriate quest to enter here.") +else: + sm.warp(270010300, 0) +sm.dispose() diff --git a/scripts/portal/timeQuest3.py b/scripts/portal/timeQuest3.py new file mode 100755 index 0000000..327a878 --- /dev/null +++ b/scripts/portal/timeQuest3.py @@ -0,0 +1,6 @@ +# 270010300 +if not sm.hasQuestCompleted(3503): # time lane quest + sm.chat("You have not completed the appropriate quest to enter here.") +else: + sm.warp(270010400, 5) +sm.dispose() diff --git a/scripts/portal/timeQuest4.py b/scripts/portal/timeQuest4.py new file mode 100755 index 0000000..08902e9 --- /dev/null +++ b/scripts/portal/timeQuest4.py @@ -0,0 +1,6 @@ +# 270010400 +if not sm.hasQuestCompleted(3504): # time lane quest + sm.chat("You have not completed the appropriate quest to enter here.") +else: + sm.warp(270010500, 0) +sm.dispose() diff --git a/scripts/portal/timeSeal00.py b/scripts/portal/timeSeal00.py new file mode 100755 index 0000000..00307fa --- /dev/null +++ b/scripts/portal/timeSeal00.py @@ -0,0 +1,12 @@ +SEAL_CHECKER = 9300535 +SEAL_OF_TIME = 2159367 + +if not sm.hasQuest(25670): + sm.showFieldEffect("lightning/screenMsg/6") + sm.createQuestWithQRValue(25670, "1", False) + if sm.hasQuest(25671) and sm.hasQuest(25672) and sm.hasQuest(25673): + sm.spawnMob(SEAL_CHECKER, -54, -80, False) + sm.spawnNpc(SEAL_OF_TIME, -54, -80) + sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME, "summon", 0) + sm.flipDialoguePlayerAsSpeaker() + sm.sendSayOkay("The final seal is below the central staircase. I'm almost done.") \ No newline at end of file diff --git a/scripts/portal/timeSeal01.py b/scripts/portal/timeSeal01.py new file mode 100755 index 0000000..78fe17e --- /dev/null +++ b/scripts/portal/timeSeal01.py @@ -0,0 +1,13 @@ +SEAL_CHECKER = 9300535 +SEAL_OF_TIME = 2159367 + +if not sm.hasQuest(25671): + sm.showFieldEffect("lightning/screenMsg/6") + sm.createQuestWithQRValue(25671, "1", False) + if sm.hasQuest(25670) and sm.hasQuest(25672) and sm.hasQuest(25673): + sm.spawnMob(SEAL_CHECKER, -54, -80, False) + sm.spawnNpc(SEAL_OF_TIME, -54, -80) + sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME, "summon", 0) + sm.flipDialoguePlayerAsSpeaker() + sm.sendSayOkay("The final seal is below the central staircase. I'm almost done.") + diff --git a/scripts/portal/timeSeal02.py b/scripts/portal/timeSeal02.py new file mode 100755 index 0000000..fcdd6b1 --- /dev/null +++ b/scripts/portal/timeSeal02.py @@ -0,0 +1,12 @@ +SEAL_CHECKER = 9300535 +SEAL_OF_TIME = 2159367 + +if not sm.hasQuest(25672): + sm.showFieldEffect("lightning/screenMsg/6") + sm.createQuestWithQRValue(25672, "1", False) + if sm.hasQuest(25670) and sm.hasQuest(25671) and sm.hasQuest(25673): + sm.spawnMob(SEAL_CHECKER, -54, -80, False) + sm.spawnNpc(SEAL_OF_TIME, -54, -80) + sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME, "summon", 0) + sm.flipDialoguePlayerAsSpeaker() + sm.sendSayOkay("The final seal is below the central staircase. I'm almost done.") diff --git a/scripts/portal/timeSeal03.py b/scripts/portal/timeSeal03.py new file mode 100755 index 0000000..d5e2903 --- /dev/null +++ b/scripts/portal/timeSeal03.py @@ -0,0 +1,13 @@ +SEAL_CHECKER = 9300535 +SEAL_OF_TIME = 2159367 + +if not sm.hasQuest(25673): + sm.showFieldEffect("lightning/screenMsg/6") + sm.createQuestWithQRValue(25673, "1", False) + if sm.hasQuest(25670) and sm.hasQuest(25671) and sm.hasQuest(25672): + sm.spawnMob(SEAL_CHECKER, -54, -80, False) + sm.spawnNpc(SEAL_OF_TIME, -54, -80) + sm.showNpcSpecialActionByTemplateId(SEAL_OF_TIME, "summon", 0) + sm.flipDialoguePlayerAsSpeaker() + sm.sendSayOkay("The final seal is below the central staircase. I'm almost done.") + diff --git a/scripts/portal/timeSeal04.py b/scripts/portal/timeSeal04.py new file mode 100755 index 0000000..206848f --- /dev/null +++ b/scripts/portal/timeSeal04.py @@ -0,0 +1,20 @@ +SEAL_OF_TIME_1 = 2159363 +SEAL_OF_TIME_2 = 2159364 +SEAL_OF_TIME_3 = 2159365 +SEAL_OF_TIME_4 = 2159366 +SEAL_OF_TIME_5 = 2159367 + +if not sm.hasQuest(25674) and sm.hasQuest(25670) and sm.hasQuest(25671) and sm.hasQuest(25672) and sm.hasQuest(25673): + sm.createQuestWithQRValue(25674, "1", False) + sm.showFieldEffect("lightning/screenMsg/7") + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("All the seals should be active now.") + sm.setFuncKeyByScript(False, 20041222, 0) + sm.removeNpc(SEAL_OF_TIME_1) + sm.removeNpc(SEAL_OF_TIME_2) + sm.removeNpc(SEAL_OF_TIME_3) + sm.removeNpc(SEAL_OF_TIME_4) + sm.removeNpc(SEAL_OF_TIME_5) + # kill mobs + sm.warp(927020072, 0) \ No newline at end of file diff --git a/scripts/portal/toArcana_pt.py b/scripts/portal/toArcana_pt.py new file mode 100755 index 0000000..70c96b5 --- /dev/null +++ b/scripts/portal/toArcana_pt.py @@ -0,0 +1,3 @@ +# id 1 (out00), field 940200202 +sm.lockInGameUI(False, True) +sm.warp(940200203) diff --git a/scripts/portal/toFallenTree.py b/scripts/portal/toFallenTree.py new file mode 100755 index 0000000..4b812d8 --- /dev/null +++ b/scripts/portal/toFallenTree.py @@ -0,0 +1,5 @@ +map = 105300000 +portal = 0 + +sm.warp(map, portal) +sm.dispose() diff --git a/scripts/portal/top_450003500.py b/scripts/portal/top_450003500.py new file mode 100755 index 0000000..45f8cac --- /dev/null +++ b/scripts/portal/top_450003500.py @@ -0,0 +1,3 @@ +# From Lach Clocktower 1F -> 2F +if sm.hasQuestCompleted(34327): + sm.warp(450003510) diff --git a/scripts/portal/top_450003510.py b/scripts/portal/top_450003510.py new file mode 100755 index 0000000..6aae4ae --- /dev/null +++ b/scripts/portal/top_450003510.py @@ -0,0 +1,3 @@ +# From Lach Clocktower 2F -> 3F +if sm.hasQuestCompleted(34328): + sm.warp(450003520) diff --git a/scripts/portal/top_450003520.py b/scripts/portal/top_450003520.py new file mode 100755 index 0000000..bdcdcdf --- /dev/null +++ b/scripts/portal/top_450003520.py @@ -0,0 +1,3 @@ +# From Lach Clocktower 2F -> 3F +if sm.hasQuestCompleted(34329): + sm.warp(450003530) diff --git a/scripts/portal/top_450003540.py b/scripts/portal/top_450003540.py new file mode 100755 index 0000000..a12ebed --- /dev/null +++ b/scripts/portal/top_450003540.py @@ -0,0 +1,2 @@ +# 450003540 +sm.warp(450004000) \ No newline at end of file diff --git a/scripts/portal/traitor0_enter.py b/scripts/portal/traitor0_enter.py new file mode 100755 index 0000000..3595959 --- /dev/null +++ b/scripts/portal/traitor0_enter.py @@ -0,0 +1,3 @@ +# id 6 (traitor_enter), field 400010300 +sm.startQuest(25915) +sm.warp(400010500) diff --git a/scripts/portal/tuto00.py b/scripts/portal/tuto00.py new file mode 100755 index 0000000..e1f3a36 --- /dev/null +++ b/scripts/portal/tuto00.py @@ -0,0 +1,7 @@ +# Ardent Mill Portals + Mihile Tutorial + Xenon Tutorial + +XENON_TUTORIAL = 931050970 + +if sm.getFieldID() == XENON_TUTORIAL: + # TODO: Handle "escort" / mobs + sm.warpInstanceIn(931050980) diff --git a/scripts/portal/tutorquest.py b/scripts/portal/tutorquest.py new file mode 100755 index 0000000..c61056e --- /dev/null +++ b/scripts/portal/tutorquest.py @@ -0,0 +1,4 @@ +# 130030001 ~ 130030004 +fieldID = sm.getFieldID() +sm.warp(fieldID + 1, 0) +sm.dispose() diff --git a/scripts/portal/undefined.py b/scripts/portal/undefined.py new file mode 100755 index 0000000..f5b82ac --- /dev/null +++ b/scripts/portal/undefined.py @@ -0,0 +1,2 @@ +sm.chat("(Portal) Not coded. Not coded. Admin was lazy and didn't fix this :). ID: " + str(parentID)) +sm.dispose() diff --git a/scripts/portal/undodraco.py b/scripts/portal/undodraco.py new file mode 100755 index 0000000..d536194 --- /dev/null +++ b/scripts/portal/undodraco.py @@ -0,0 +1,3 @@ +# 200090500 +sm.warp(240000110, 0) +sm.dispose() diff --git a/scripts/portal/visitor_in.py b/scripts/portal/visitor_in.py new file mode 100755 index 0000000..2d349c8 --- /dev/null +++ b/scripts/portal/visitor_in.py @@ -0,0 +1 @@ +sm.openNpc(9390008) \ No newline at end of file diff --git a/scripts/portal/visitor_move.py b/scripts/portal/visitor_move.py new file mode 100755 index 0000000..67bdac1 --- /dev/null +++ b/scripts/portal/visitor_move.py @@ -0,0 +1 @@ +sm.openNpc(9390011) \ No newline at end of file diff --git a/scripts/portal/visitor_out.py b/scripts/portal/visitor_out.py new file mode 100755 index 0000000..5949050 --- /dev/null +++ b/scripts/portal/visitor_out.py @@ -0,0 +1,11 @@ +map = sm.getReturnField() +if map == 0 or map == 910000000: + sm.chat("(Portal) Cannot find your previous map ID, warping to Henesys.") + map = 100000000 + portal = 0 + +if "910001000" in sm.getQRValue(9999): + sm.setQRValue(9999, "") + map = 910001000 + +sm.warpNoReturn(map, 2) \ No newline at end of file diff --git a/scripts/portal/w310070300.py b/scripts/portal/w310070300.py new file mode 100755 index 0000000..b3f1df2 --- /dev/null +++ b/scripts/portal/w310070300.py @@ -0,0 +1,3 @@ +# 310070300 +sm.warp(310070230, 0) +sm.dispose() diff --git a/scripts/portal/waitOut.py b/scripts/portal/waitOut.py new file mode 100755 index 0000000..bc53ebe --- /dev/null +++ b/scripts/portal/waitOut.py @@ -0,0 +1,2 @@ +# 252030000 - Entrance to Ravana's Altar -> Room of Suffering +sm.warp(252020700, 1) \ No newline at end of file diff --git a/scripts/portal/water_101070000.py b/scripts/portal/water_101070000.py new file mode 100755 index 0000000..5ec9bc3 --- /dev/null +++ b/scripts/portal/water_101070000.py @@ -0,0 +1,15 @@ +# Midsummer Night's Forest: Ellinel Lake Shore's Water Portal Script + +YOU_CAN_DO_IT = 32102 # QUEST ID +MIDSUMMER_NIGHTS_FOREST_ELLINEL_LAKE_SHORE = 101070000 # MAP ID +MIDSUMMER_NIGHTS_FOREST_ELLINEL_LAKE_SHORE_VER2 = 101070001 # MAP ID + +if sm.hasQuest(YOU_CAN_DO_IT): + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("Ugh! Why do I feel so... heavy?! Each... step... getting... tougher!\r\n\r\nARGH!") +else: + sm.warp(MIDSUMMER_NIGHTS_FOREST_ELLINEL_LAKE_SHORE) + sm.dispose() + +sm.warp(MIDSUMMER_NIGHTS_FOREST_ELLINEL_LAKE_SHORE_VER2) diff --git a/scripts/portal/west_450004150.py b/scripts/portal/west_450004150.py new file mode 100755 index 0000000..0124d1f --- /dev/null +++ b/scripts/portal/west_450004150.py @@ -0,0 +1,3 @@ +# Lucid out portal +if sm.sendAskYesNo("Are you sure you want to leave? Your whole party will be ported out."): + sm.warpInstanceOut(450004000) \ No newline at end of file diff --git a/scripts/portal/zakum_regionOut.py b/scripts/portal/zakum_regionOut.py new file mode 100755 index 0000000..c127df3 --- /dev/null +++ b/scripts/portal/zakum_regionOut.py @@ -0,0 +1,3 @@ +# 211042400 +sm.warp(211042300, 0) +sm.dispose() diff --git a/scripts/quest/__init__.py b/scripts/quest/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/quest/q100167s.py b/scripts/quest/q100167s.py new file mode 100755 index 0000000..f6deefc --- /dev/null +++ b/scripts/quest/q100167s.py @@ -0,0 +1,25 @@ +# id 100167 (Tera Burning Project Arcane Symbols!), field 701220100 +sm.setSpeakerID(9010000) # Maple Administrator +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9010000) # Maple Administrator +res = sm.sendAskYesNo("\r\nCongratulations on reaching #b#eLv. 201#n#k!\r\nWould you like to receive #b#t1712001/10:# x10#k?\r\n\r\n\r\n#fUI/UIWindow2.img/Quest/quest_info/summary_icon/reward#\r\n#b#i1712001/10:# #t1712001/10:##k x10") +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.createQuestWithQRValue(parentID, "rLevel=202") +sm.sendSayOkay("\r\nI've given you #b#t1712001/10:# x10#k!\r\nCome see me again after reaching #b#eLv. 202#n#k!\r\n\r\n\r\n#fUI/UIWindow2.img/Quest/quest_info/summary_icon/reward#\r\n#b#i1712001/10:# #t1712001/10:##k x10") +sm.startQuest(62009) +sm.startQuest(16689) +sm.startQuest(62009) +sm.startQuest(16689) +sm.startQuest(62009) +sm.startQuest(16689) +sm.startQuest(62009) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) diff --git a/scripts/quest/q12394s.py b/scripts/quest/q12394s.py new file mode 100755 index 0000000..9265bc6 --- /dev/null +++ b/scripts/quest/q12394s.py @@ -0,0 +1,4 @@ +pm = sm.getChr().getPotentialMan() +pm.addPotential(pm.generateRandomPotential(1, chr.getPotentials())) +sm.completeQuestNoRewards(12394) +sm.dispose() diff --git a/scripts/quest/q12395s.py b/scripts/quest/q12395s.py new file mode 100755 index 0000000..dd79ee6 --- /dev/null +++ b/scripts/quest/q12395s.py @@ -0,0 +1,4 @@ +pm = sm.getChr().getPotentialMan() +pm.addPotential(pm.generateRandomPotential(2, chr.getPotentials())) +sm.completeQuestNoRewards(12395) +sm.dispose() diff --git a/scripts/quest/q12396s.py b/scripts/quest/q12396s.py new file mode 100755 index 0000000..2c442ce --- /dev/null +++ b/scripts/quest/q12396s.py @@ -0,0 +1,5 @@ +# Character potential unlock quest. Used to be only for the 3rd line, got changed to be the initial quest. +pm = sm.getChr().getPotentialMan() +sm.addCharacterPotentials() +sm.sendSayOkay("Character potential unlocked.") +sm.completeQuestNoCheck(12396) diff --git a/scripts/quest/q1400s.py b/scripts/quest/q1400s.py new file mode 100755 index 0000000..a6a8b70 --- /dev/null +++ b/scripts/quest/q1400s.py @@ -0,0 +1,26 @@ +sm.setSpeakerID(12100) +sm.sendNext("Hmm, you're making good progress with your leveling. Have you decided on which job you want to take? You could be a Warrior with great strength and high HP, a Magician with many spells, a Bowman that shoots arrows from afar, a Thief that uses quick, sneaky attacks, or a Pirate with all kinds of flashy chain skills... There are so many!") +choice = sm.sendNext("If you go to Victoria Island, you can advance to the job of your choice by going to the right Job Instructor. But before that, lemme know which one you're interested in, and I'll send #bthem#k a letter of recommendation. That will make it easier for you to advance! So, which job will you choose?\r\n\r\n#b#L0#I want to be a might Warrior!#l\r\n#L1#I want to be a mystical Magician!#l\r\n#L2#I want to be a sharp-shooting Bowman!#l\r\n#L3#I want to be a sneaky Thief!#l\r\n#L4#I want to be a swashbuckling Pirate!#l\r\n#L5#I want to be a pinky bean!#l") + +sm.createQuestWithQRValue(1406, str(choice+1)) +sm.startQuest(parentID) +sm.completeQuest(parentID) + +if choice == 0: + sm.sendNext("A Warrior, huh? Boy, you're going to get really strong! They can take tons of damage, and dish plenty out, too. Okay, I'll send my recommendation to #bDances with Balrog#k, the Warrior Job Instructor.") + sm.sendSay("He will contact you when you reach Lv. 10. Become a great Warrior!") +elif choice == 1: + sm.sendNext("A Magician, huh? Okay, I'll send my recommendation to #bGrendel, the Really Old#k, the Magician Job Instructor.") + sm.sendSay("They will contact you when you reach Lv. 10. Become a great Magician!") +elif choice == 2: + sm.sendNext("A Bowman, huh? Okay, I'll send my recommendation to #bAthena Pierce#k, the Bowman Job Instructor.") + sm.sendSay("They will contact you when you reach Lv. 10. Become a great Bowman!") +elif choice == 3: + sm.sendNext("A Thief, huh? Okay, I'll send my recommendation to #bthe Dark Lord#k, the Thief Job Instructor.") + sm.sendSay("They will contact you when you reach Lv. 10. Become a great Thief!") +elif choice == 4: + sm.sendNext("A Pirate, huh? Okay, I'll send my recommendation to #bKyrin#k, the Pirate Job Instructor.") + sm.sendSay("They will contact you when you reach Lv. 10. Become a great Pirate!") +elif choice == 5: + sm.sendNext("#bA Pink Bean, huh? Okay, I would usually send a recommendation to some job instructor but since you want to be a Pink Bean I'll just throw 'em skills at ya.") + sm.jobAdvance(13100) diff --git a/scripts/quest/q1401e.py b/scripts/quest/q1401e.py new file mode 100755 index 0000000..4e759bd --- /dev/null +++ b/scripts/quest/q1401e.py @@ -0,0 +1,11 @@ +# 1401 - Warriors of Perion + +sm.setSpeakerID(1022000) # Dances with Balrog +response = sm.sendAskYesNo("So you want to become a #bWarrior#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(100) + sm.resetAP(False, 100) + sm.giveItem(1302182) + sm.sendSayOkay("You are now a #bWarrior#k.") diff --git a/scripts/quest/q1401s.py b/scripts/quest/q1401s.py new file mode 100755 index 0000000..5c98b3a --- /dev/null +++ b/scripts/quest/q1401s.py @@ -0,0 +1,25 @@ +sm.setSpeakerID(1022000) +sm.sendNext("So, you are the person Mai recommended. You seek to become a Warrior, am I right? I am Dances with Balrog, the Warrior Job Instructor. I instruct newcomers in the ways of battle.") +sm.sendSay("How much do you know about Warriors? Warriors have great strength and high HP, and face their enemies up-close with powerful attacks. Sounds fun, right?") +if sm.sendAskAccept("You look like you are more than qualified. If you wish to become a Warrior, I welcome you. You wish to become a Warrior? If you accept, I will use my power as the Job Instructor to bring you to the #bWarriors' Sanctuary in Perion#k right away. #rThere are still paths for you even if you change your mind, and I will help you if you do.#k."): + sm.warp(102000003) + sm.startQuest(parentID) +else: + choice = sm.sendNext("You do not wish to choose the path of a Warrior? Very well. There are four other paths you can choose.\r\n\r\n#b#L0#Magician#l\r\n#L1#Bowman#l\r\n#L2#Thief#l\r\n#L3#Pirate#l") + if choice == 0: + sm.sendNext("Do you want to go the way of the Magician? I'll admit I'm disappointed, but I'll respect your decision and send you to #bGrendel the Really Old#k.") + sm.createQuestWithQRValue(1406, "2") + sm.warp(101000003) + elif choice == 1: + sm.sendNext("Do you want to go the way of the Bowman? I'll admit I'm disappointed, but I'll respect your decision and send you to #b#k.Then I'll send you to #bAthena Pierce#k.") + sm.createQuestWithQRValue(1406, "3") + sm.warp(100000201) + elif choice == 2: + sm.sendNext("Do you want to go the way of the Thief? I'll admit I'm disappointed, but I'll respect your decision and send you to #b#k.Then I'll send you to #bthe Dark Lord#k.") + sm.createQuestWithQRValue(1406, "4") + sm.warp(103000003) + elif choice == 3: + sm.sendNext("Do you want to go the way of the Pirate? I'll admit I'm disappointed, but I'll respect your decision and send you to #b#k.Then I'll send you to #bKyrin#k.") + sm.createQuestWithQRValue(1406, "5") + sm.warp(120000101) + sm.chatScript("Please CC.") diff --git a/scripts/quest/q1402e.py b/scripts/quest/q1402e.py new file mode 100755 index 0000000..14d459e --- /dev/null +++ b/scripts/quest/q1402e.py @@ -0,0 +1,11 @@ +# 1402 - Magicians of Ellinia + +sm.setSpeakerID(1032001) # Grendel the Really Old +response = sm.sendAskYesNo("So you want to become a #bMagician#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(200) # Magician + sm.resetAP(False, 200) + sm.giveItem(1372043) + sm.sendSayOkay("You are now a #bMagician#k.") diff --git a/scripts/quest/q1402s.py b/scripts/quest/q1402s.py new file mode 100755 index 0000000..385dfa5 --- /dev/null +++ b/scripts/quest/q1402s.py @@ -0,0 +1,25 @@ +sm.setSpeakerID(1032001) +sm.sendNext("Ah, so you are the one that Mai was talking about. How do you do? I heard that you are interested in the path of a Magician. If that's the case, I will help guide you. I am Grendel the Really Old, the Magician Job Instructor.") +sm.sendSay("I'm sure you already know a little bit about Magicians. With high intelligence as our foundation, we learn all manner of magic spells to wield in battle. Range is not a concern for us, but our low HP is our weakness. We've come up with many ways around that, though, so don't worry too much.") +if sm.sendAskAccept("I see that you are more than qualified to beocme a Magician... would you like to become a Magician? If you accept, I will use my power as the Job Instructor to bring you to the #bMagic Library in Ellinia#k. I'll perform the Job Advancement once we meet in person. #rThere are still other paths open to you if you change your mind, and I will help you find them if you do.#k"): + sm.warp(101000003) + sm.startQuest(parentID) +else: + choice = sm.sendNext("You are not content with the path of a Magician? That is unfortunate, but I will respect your decision. Which path will you now choose?\r\n\r\n#b#L0#Warrior#l\r\n#L1#Bowman#l\r\n#L2#Thief#l\r\n#L3#Pirate#l") + if choice == 0: + sm.sendNext("You're choosing Warrior? That's disappointing. But if you're sure, I'll send you to #bDances with Balrog#k.") + sm.createQuestWithQRValue(1406, "1") + sm.warp(102000003) + elif choice == 1: + sm.sendNext("You're choosing Bowman? That's disappointing. But if you're sure, I'll send you to #bAthena Pierce#k.") + sm.createQuestWithQRValue(1406, "3") + sm.warp(100000201) + elif choice == 2: + sm.sendNext("You're choosing Thief? That's disappointing. But if you're sure, I'll send you to #bthe Dark Lord#k.") + sm.createQuestWithQRValue(1406, "4") + sm.warp(103000003) + elif choice == 3: + sm.sendNext("You're choosing Pirate? That's disappointing. But if you're sure, I'll send you to #bKyrin#k.") + sm.createQuestWithQRValue(1406, "5") + sm.warp(120000101) + sm.chatScript("Please CC.") diff --git a/scripts/quest/q1403e.py b/scripts/quest/q1403e.py new file mode 100755 index 0000000..cb33744 --- /dev/null +++ b/scripts/quest/q1403e.py @@ -0,0 +1,14 @@ +# 1403 - Athena Pierce + +sm.setSpeakerID(1012100) # Athena +response = sm.sendAskYesNo("So you want to become an #bArcher#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(300) # Archer + sm.resetAP(False, 300) + sm.giveItem(1452051, 1) + sm.giveItem(1462001, 1) + sm.giveItem(2060000, 500) + sm.giveItem(2061000, 500) + sm.sendSayOkay("You are now an #bArcher#k!") diff --git a/scripts/quest/q1403s.py b/scripts/quest/q1403s.py new file mode 100755 index 0000000..60bcac0 --- /dev/null +++ b/scripts/quest/q1403s.py @@ -0,0 +1,25 @@ +sm.setSpeakerID(1012100) +sm.sendNext("Hello, #h #. I've heard plenty about you from Mai. You are interested in becoming a Bowman, right? My name is Athena Pierce, Bowman Job Instructor. Nice to meet you!") +sm.sendSay("How much do you know about Bowmen? We use bows or crossbows to attack enemies at long range, mainly. We're a bit slower than others, but our arrows never miss their mark!") +if sm.sendAskAccept("If you really wish to become a Bowman, I will bring you to the #bBowman Instructional School in Henesys#k using my power as the Job Instructor, #rif you are interested in other jobs, however, I will help you find your true path#k. Now, would you like to become a Bowman?"): + sm.warp(100000201) + sm.startQuest(parentID) +else: + choice = sm.sendNext("So, you have chosen another path. That is your decision, of course. Which path will you now choose?\r\n\r\n#b#L0#Warrior#l\r\n#L1#Magician#l\r\n#L2#Thief#l\r\n#L3#Pirate#l") + if choice == 0: + sm.sendNext("You seek the powerful strength of a Warrior, do you? Then I'll send you to #bDances with Balrog#k.") + sm.createQuestWithQRValue(1406, "1") + sm.warp(102000003) + elif choice == 1: + sm.sendNext("You seek the powerful strength of a Magician, do you? Then I'll send you to #bGrendel the really Old#k.") + sm.createQuestWithQRValue(1406, "2") + sm.warp(101000003) + elif choice == 2: + sm.sendNext("You seek the powerful strength of a Thief, do you? Then I'll send you to #bthe Dark Lord#k.") + sm.createQuestWithQRValue(1406, "4") + sm.warp(103000003) + elif choice == 3: + sm.sendNext("You seek the powerful strength of a Pirate, do you? Then I'll send you to #bKyrin#k.") + sm.createQuestWithQRValue(1406, "5") + sm.warp(120000101) + sm.chatScript("Please CC.") \ No newline at end of file diff --git a/scripts/quest/q1404e.py b/scripts/quest/q1404e.py new file mode 100755 index 0000000..1d784a8 --- /dev/null +++ b/scripts/quest/q1404e.py @@ -0,0 +1,13 @@ +# 1404 - Thieves of Kerning City + +sm.setSpeakerID(1052001) +response = sm.sendAskYesNo("So you want to become a #bThief#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(400) # Thief + sm.resetAP(False, 400) + sm.giveItem(2070000, 500) + sm.giveItem(1332063, 1) + sm.giveItem(1472061, 1) + sm.sendSayOkay("You are now a #bThief#k.") diff --git a/scripts/quest/q1404s.py b/scripts/quest/q1404s.py new file mode 100755 index 0000000..61a9b8e --- /dev/null +++ b/scripts/quest/q1404s.py @@ -0,0 +1,26 @@ +sm.setSpeakerID(1052001) +sm.sendNext("So, you're the one Mai was talking about? #h #... I guess you do have some potential. You want to become a Thief? Do you knwo what Thieves are all about?") +sm.sendSay("Most people think of us as petty thieves who steal things, but that's not true at all. Thieves in Maple World are those who fight with sharp daggers and throwing stars from the shadows. We don't always fight fair, but we always fight to win.") +sm.sendSay("As a job, Thieves attack enemies with swift, powerful skills. Though their HP is a bit low, they make it up with speed, so you had better learn to dodge. High luck allows them to land critical hits often, as well.") +if sm.sendAskAccept("Now, will you join us on the path of Thieves? If you decide to doso, I will bring you to the #bsecret Thieves' Hideout in Kerning City#k using my power as the Job Instructor... You should feel honored. #rBut if you prefer a different job, I will help you find the other paths#k."): + sm.warp(103000003) + sm.startQuest(parentID) +else: + choice = sm.sendNext("You don't wish to walk the path of a Thief? I will not force this path on someone who doesn't want it. WHich job do you want?\r\n\r\n#b#L0#Warrior#l\r\n#L1#Magician#l\r\n#L2#Bowman#l\r\n#L3#Pirate#l") + if choice == 0: + sm.sendNext("Warrior? I mean, if you want go with the trendy one, I'll send you to #bDances with Balrog#k.") + sm.createQuestWithQRValue(1406, "1") + sm.warp(102000003) + elif choice == 1: + sm.sendNext("Magician? I mean, if you want go with the trendy one, I'll send you to #bGrendel the really Old#k.") + sm.createQuestWithQRValue(1406, "2") + sm.warp(101000003) + elif choice == 2: + sm.sendNext("Bowman? I mean, if you want go with the trendy one, I'll send you to #bAthena Pierce#k.") + sm.createQuestWithQRValue(1406, "3") + sm.warp(100000201) + elif choice == 3: + sm.sendNext("Pirate? I mean, if you want go with the trendy one, I'll send you to #bKyrin#k.") + sm.createQuestWithQRValue(1406, "5") + sm.warp(120000101) + sm.chatScript("Please CC.") diff --git a/scripts/quest/q1405e.py b/scripts/quest/q1405e.py new file mode 100755 index 0000000..3910a64 --- /dev/null +++ b/scripts/quest/q1405e.py @@ -0,0 +1,13 @@ +# 1405 - Pirates of the Nautilus + +sm.setSpeakerID(1090000) +response = sm.sendAskYesNo("So you want to become a #bPirate#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(500) # Pirate + sm.resetAP(False, 500) + sm.giveItem(1492014) + sm.giveItem(1482014) + sm.giveItem(2330006, 500) + sm.sendSayOkay("You are now a #bPirate#k.") diff --git a/scripts/quest/q1405s.py b/scripts/quest/q1405s.py new file mode 100755 index 0000000..ba3823c --- /dev/null +++ b/scripts/quest/q1405s.py @@ -0,0 +1,28 @@ +sm.setSpeakerID(1090000) +sm.sendNext("#h #...? Oh, right! Mai mentioned you. Yeah...you look pretty good to me. I'm Kyrin, the captain of the Nautilus and the Pirate Job Instructor. I heard you are interested in becoming a Pirate. Is that true?") +sm.sendSay("If that's the case, I should tell you a bit about myself first. I brought the pirates together to start working against the Black Mage, the great evil that threatens all of Maple World. Turns out the hero business is more profitable than looting and pillaging!") +sm.sendSay("If you become a Pirate, you can help investigate the Black Mage's plots, and assist in the defense of Maple World. Keep in mind that I won't make you do anything...I'm primarily a Job Instructor, and just guide the pirates in a general sense.") +sm.sendSay("But, I know you would help us fight the Black Mage. You have that gleam in your eye that all heroes do. Anyway, I've said my piece. That was just for your information. What's really important is coming up next.") +sm.sendSay("There are two paths you can take as a Pirate. You can fight with guns, or with your fists. Your weapons and skills will be quite different depending on what you pick, but both are still Pirates. And that means you're gonna look GOOD while you fight!") +if sm.sendAskAccept("Okay, I've said enough. So, Pirate. In, or out? If you want to become a Pirate, I'll bring you to the Nautilus right now using my power as a Job Instructor. #rAnd if you don't, I'll help you find the right job for you#k."): + sm.warp(120000101) + sm.startQuest(parentID) +else: + choice = sm.sendNext("You wish to choose a different path? Hey, if that's what you want. Which job will you choose, then?\r\n\r\n#b#L0#Warrior#l\r\n#L1#Magician#l\r\n#L2#Bowman#l\r\n#L3#Thief#l") + if choice == 0: + sm.sendNext("You want to be a Warrior? I don't really understand why, but all right. I'll send you to #bDances with Balrog#k.") + sm.createQuestWithQRValue(1406, "1") + sm.warp(102000003) + elif choice == 1: + sm.sendNext("You want to be a Magician? I don't really understand why, but all right. I'll send you to #bGrendel the really Old#k.") + sm.createQuestWithQRValue(1406, "2") + sm.warp(101000003) + elif choice == 2: + sm.sendNext("You want to be a Bowman? I don't really understand why, but all right. I'll send you to #bAthena Pierce#k.") + sm.createQuestWithQRValue(1406, "3") + sm.warp(100000201) + elif choice == 3: + sm.sendNext("You want to be a Thief? I don't really understand why, but all right. I'll send you to #bthe Dark Lord#k.") + sm.createQuestWithQRValue(1406, "4") + sm.warp(103000003) + sm.chatScript("Please CC.") diff --git a/scripts/quest/q1411e.py b/scripts/quest/q1411e.py new file mode 100755 index 0000000..7a6ee66 --- /dev/null +++ b/scripts/quest/q1411e.py @@ -0,0 +1,19 @@ +# 1411 - [Job Adv] (Lv.30) Way of the Fighter + +darkMarble = 4031013 +job = "Fighter" + +sm.setSpeakerID(1022000) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(110) # Fighter +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1411s.py b/scripts/quest/q1411s.py new file mode 100755 index 0000000..db3aa43 --- /dev/null +++ b/scripts/quest/q1411s.py @@ -0,0 +1,38 @@ +# 1411 - [Job Adv] (Lv.30) Way of the Fighter + +darkMarble = 4031013 +job = "Fighter" + +sm.setSpeakerID(1022000) # Dances with Balrog + +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in short weapons such as #bSwords#kand #bAxes#k." + "There are many useful skills you can acquire with both weapons, but I strongly recommend that you focus on one and stick to it.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(110) # Spearman + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the three paths to you.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #bSkeledogs#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910230000, 0) +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot stay a Swordman. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1412e.py b/scripts/quest/q1412e.py new file mode 100755 index 0000000..ab4937a --- /dev/null +++ b/scripts/quest/q1412e.py @@ -0,0 +1,19 @@ +# 1412 - [Job Adv] (Lv.30) Way of the Page + +darkMarble = 4031013 +job = "Page" + +sm.setSpeakerID(1022000) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(120) # Page +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1412s.py b/scripts/quest/q1412s.py new file mode 100755 index 0000000..9a7c73a --- /dev/null +++ b/scripts/quest/q1412s.py @@ -0,0 +1,38 @@ +# 1412 - [Job Adv] (Lv.30) Way of the Page + +darkMarble = 4031013 +job = "Page" + +sm.setSpeakerID(1022000) # Dances with Balrog + +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in short weapons such as #bHammers#kand #bAxes#k. " + "There are many useful skills you can acquire with both weapons, but I strongly recommend that you focus on one and stick to it.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(120) # Spearman + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the three paths to you.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #bSkeledogs#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910230000, 0) +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot stay a Swordman. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1413e.py b/scripts/quest/q1413e.py new file mode 100755 index 0000000..e4c23ea --- /dev/null +++ b/scripts/quest/q1413e.py @@ -0,0 +1,19 @@ +# 1413 - [Job Adv] (Lv.30) Way of the Spearman + +darkMarble = 4031013 +job = "Spearman" + +sm.setSpeakerID(1022000) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(130) # Spearman +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1413s.py b/scripts/quest/q1413s.py new file mode 100755 index 0000000..db67cd5 --- /dev/null +++ b/scripts/quest/q1413s.py @@ -0,0 +1,38 @@ +# 1413 - [Job Adv] (Lv.30) Way of the Spearman + +darkMarble = 4031013 +job = "Spearman" + +sm.setSpeakerID(1022000) # Dances with Balrog + +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in long weapons such as #bSpears#k and #bPolearms#k. " + "There are many useful skills you can acquire with both weapons, but I strongly recommend that you focus on one and stick to it.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(130) # Spearman + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the three paths to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #bSkeledogs#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910230000, 0) +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot stay a Swordman. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1415e.py b/scripts/quest/q1415e.py new file mode 100755 index 0000000..3847abe --- /dev/null +++ b/scripts/quest/q1415e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Way of the Mage FP + +darkMarble = 4031013 +job = "Mage (Fire, Poison)" + +sm.setSpeakerID(1032001) # Grendel the Really Old +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(210) # Mage FP +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1415s.py b/scripts/quest/q1415s.py new file mode 100755 index 0000000..e1022d1 --- /dev/null +++ b/scripts/quest/q1415s.py @@ -0,0 +1,39 @@ +# 1415 - [Job Adv] (Lv.30) Path of Fire and Ice + +darkMarble = 4031013 +job = "Wizard (Fire, Poison)" +monster = "Zombie Lupin" + +sm.setSpeakerID(1032001) # Grendel the Really Old +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in long ranged magic attacks and use #bfire and poison magic#k to defeat their enemies. " + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(210) # Wizard (Fire, Poison) + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the three paths to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, " +# "if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910140000, 0) # Magician Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be a Magician forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1416e.py b/scripts/quest/q1416e.py new file mode 100755 index 0000000..cd1adeb --- /dev/null +++ b/scripts/quest/q1416e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Way of the Mage IL + +darkMarble = 4031013 +job = "Mage (Ice, Lightning)" + +sm.setSpeakerID(1032001) # Grendel the Really Old +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(220) # Mage IL +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1416s.py b/scripts/quest/q1416s.py new file mode 100755 index 0000000..71817a0 --- /dev/null +++ b/scripts/quest/q1416s.py @@ -0,0 +1,39 @@ +# 1416 - [Job Adv] (Lv.30) Path of Ice and Lightning + +darkMarble = 4031013 +job = "Wizard (Ice, Lightning)" +monster = "Zombie Lupin" + +sm.setSpeakerID(1032001) # Grendel the Really Old +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in long ranged magic attacks and use #bice and lightning magic#k to defeat their enemies. " + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(220) # Wizard (Ice, Lightning) + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the three paths to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, " +# "if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910140000, 0) # Magician Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be a Magician forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1417e.py b/scripts/quest/q1417e.py new file mode 100755 index 0000000..eef3515 --- /dev/null +++ b/scripts/quest/q1417e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Way of the Cleric + +darkMarble = 4031013 +job = "Cleric" + +sm.setSpeakerID(1032001) # Grendel the Really Old +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(230) # Cleric +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1417s.py b/scripts/quest/q1417s.py new file mode 100755 index 0000000..4c28d39 --- /dev/null +++ b/scripts/quest/q1417s.py @@ -0,0 +1,39 @@ +# 1417 - [Job Adv] (Lv.30) Path of the Cleric + +darkMarble = 4031013 +job = "Cleric" +monster = "Zombie Lupin" + +sm.setSpeakerID(1032001) # Grendel the Really Old +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n" + "A #b"+ job +"#k is specialised in supporting spells and uses #bholy magic#k to defeat their enemies." + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you want to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(230) # Cleric + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the three paths to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, " +# "if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910140000, 0) # Magician Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be a Magician forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1419e.py b/scripts/quest/q1419e.py new file mode 100755 index 0000000..4b31ef9 --- /dev/null +++ b/scripts/quest/q1419e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Way of the Hunter + +darkMarble = 4031013 +job = "Hunter" + +sm.setSpeakerID(1012100) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(310) # Hunter +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1419s.py b/scripts/quest/q1419s.py new file mode 100755 index 0000000..1347f43 --- /dev/null +++ b/scripts/quest/q1419s.py @@ -0,0 +1,39 @@ +# 1419 - [Job Adv] (Lv.30) Trail of the Hunter + +darkMarble = 4031013 +job = "Hunter" +monster = "Stone Golem" + +sm.setSpeakerID(1012100) # Athena Pierce +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in ranged attacks and use #bbows#k to defeat their enemies. " + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(310) # Hunter + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the two trails to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, " +# "if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910070000, 0) # Archer Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be an Archer forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1420e.py b/scripts/quest/q1420e.py new file mode 100755 index 0000000..4b9cbdf --- /dev/null +++ b/scripts/quest/q1420e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Way of the Crossbowman + +darkMarble = 4031013 +job = "Crossbowman" + +sm.setSpeakerID(1012100) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(320) # Crossbowman +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1420s.py b/scripts/quest/q1420s.py new file mode 100755 index 0000000..0a2c049 --- /dev/null +++ b/scripts/quest/q1420s.py @@ -0,0 +1,40 @@ +# 1420 - [Job Adv] (Lv.30) Trail of the Crossbowman + +darkMarble = 4031013 +job = "Crossbowman" +monster = "Stone Golem" + +sm.setSpeakerID(1012100) # Athena Pierce +sm.sendNext("You wish to become a #b" + job + "#k?\r\n\r\n" + "A #b" + job + "#k is specialised in ranged attacks and use #crossbows#k to defeat their enemies. " + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(320) # Crossbowman + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the two trails to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the " + job + ", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b" + monster + "#k " +# "and return 30 #i" + str( +# darkMarble) + "##z" + str(darkMarble) + "#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t" + str( +# darkMarble) + "#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910070000, 0) # Archer Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be an Archer forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1421s.py b/scripts/quest/q1421s.py new file mode 100755 index 0000000..c7f3f28 --- /dev/null +++ b/scripts/quest/q1421s.py @@ -0,0 +1,3 @@ +# The 2 Paths of the Thief + +sm.sendNext("Test - The 2 Paths of the Thief") diff --git a/scripts/quest/q1422e.py b/scripts/quest/q1422e.py new file mode 100755 index 0000000..aa87cb0 --- /dev/null +++ b/scripts/quest/q1422e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Way of the Assassin + +darkMarble = 4031013 +job = "Night Lord" + +sm.setSpeakerID(1052001) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(410) # Night Lord +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1422s.py b/scripts/quest/q1422s.py new file mode 100755 index 0000000..87d12eb --- /dev/null +++ b/scripts/quest/q1422s.py @@ -0,0 +1,38 @@ +# 1422 - [Job Adv] (Lv.30) Path of the Assassin + +darkMarble = 4031013 +job = "Assassin" +monster = "Swamp Monster" + +sm.setSpeakerID(1052001) # Dark Lord +sm.sendNext("You wish to become an #b"+ job +"#k?\r\n\r\n" + "An #b"+ job +"#k is specialised in long range attacks and use #bthrowing stars#k to defeat their enemies. " + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become an #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(410) # Assassin + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the two paths to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910370000, 0) # Thief Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be a Rogue forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1423e.py b/scripts/quest/q1423e.py new file mode 100755 index 0000000..76ef5b6 --- /dev/null +++ b/scripts/quest/q1423e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Way of the Bandit + +darkMarble = 4031013 +job = "Night Lord" + +sm.setSpeakerID(1052001) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(420) # Bandit +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1423s.py b/scripts/quest/q1423s.py new file mode 100755 index 0000000..98ff0e9 --- /dev/null +++ b/scripts/quest/q1423s.py @@ -0,0 +1,38 @@ +# 1423 - [Job Adv] (Lv.30) Path of the Bandit + +darkMarble = 4031013 +job = "Bandit" +monster = "Swamp Monster" + +sm.setSpeakerID(1052001) # Dark Lord +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in short range attacks and use #bdaggers#k to defeat their enemies." + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(420) # Bandit + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the two paths to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(910370000, 0) # Thief Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be a Rogue forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1424s.py b/scripts/quest/q1424s.py new file mode 100755 index 0000000..cb78910 --- /dev/null +++ b/scripts/quest/q1424s.py @@ -0,0 +1 @@ +sm.sendNext("Argh") diff --git a/scripts/quest/q1425e.py b/scripts/quest/q1425e.py new file mode 100755 index 0000000..8663dab --- /dev/null +++ b/scripts/quest/q1425e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Brawler of the High Seas + +darkMarble = 4031013 +job = "Brawler" + +sm.setSpeakerID(1090000) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(510) # Brawler +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1425s.py b/scripts/quest/q1425s.py new file mode 100755 index 0000000..2bb0d7d --- /dev/null +++ b/scripts/quest/q1425s.py @@ -0,0 +1,38 @@ +# 1425 - [Job Adv] (Lv.30) Brawler of the High Seas + +darkMarble = 4031013 +job = "Brawler" +monster = "OctoPirate" + +sm.setSpeakerID(1090000) +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in short range attacks and use #bKnucklers#k to defeat their enemies. " + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(510) # Brawler + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the two trails to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(912040000, 0) # Pirate Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be a Magician forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1426e.py b/scripts/quest/q1426e.py new file mode 100755 index 0000000..2ee25ff --- /dev/null +++ b/scripts/quest/q1426e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Gunslinger of the Seven Seas + +darkMarble = 4031013 +job = "Gunslinger" + +sm.setSpeakerID(1090000) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(520) # Gunslinger +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1426s.py b/scripts/quest/q1426s.py new file mode 100755 index 0000000..ee60caf --- /dev/null +++ b/scripts/quest/q1426s.py @@ -0,0 +1,38 @@ +# 1426 - [Job Adv] (Lv.30) Gunslinger of the Seven Seas + +darkMarble = 4031013 +job = "Gunslinger" +monster = "OctoPirate" + +sm.setSpeakerID(1090000) +sm.sendNext("You wish to become a #b"+ job +"#k?\r\n\r\n" + "A #b"+ job +"#k is specialised in long range attacks and use #bGuns#k to defeat their enemies. " + "There are many useful skills you can acquire.") + +# start of custom +response = sm.sendAskYesNo("Are you sure you wish to become a #b" + job + "#k?") + +if response: + sm.completeQuestNoRewards(parentID) + sm.jobAdvance(520) # Gunslinger + sm.sendSayOkay("Alright! You have now become a #b" + job + "!") +else: + sm.sendSayOkay("Speak to me again and I can explain the two trails to you once more.") + +sm.dispose() +# end of custom + +# sm.sendNext("Before I teach you the ways of the "+ job +", you will have to accomplish a very difficult test. " +# "I will warp you into a special map, in which I require you to defeat #b"+ monster +"#k " +# "and return 30 #i"+ str(darkMarble) +"##z"+ str(darkMarble) +"#s to me.") +# +# response = sm.sendAskYesNo("Once you enter the map, you #rcannot#k return without the #b#t"+ str(darkMarble) +"#s#k, if you die you will lose your experience.\r\n" +# "Are you ready?") +# +# if response: +# sm.warp(912040000, 0) # Pirate Test Site +# sm.startQuestNoCheck(parentID) +# else: +# sm.sendSayOkay("You cannot be a Magician forever. You #bwill#k have to face up to the test.\r\n" +# "Talk to me when you are ready.") +# sm.dispose() diff --git a/scripts/quest/q1428e.py b/scripts/quest/q1428e.py new file mode 100755 index 0000000..3c075be --- /dev/null +++ b/scripts/quest/q1428e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.30) Cannoneer + +darkMarble = 4031013 +job = "Cannoneer" + +sm.setSpeakerID(1072008) +if sm.hasItem(darkMarble, 30): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ darkMarble+"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(darkMarble, 30) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(530) # Gunslinger +sm.sendNext("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1428s.py b/scripts/quest/q1428s.py new file mode 100755 index 0000000..52e4d78 --- /dev/null +++ b/scripts/quest/q1428s.py @@ -0,0 +1,10 @@ +# [Job Adv] (Lv.30) Cannoneer +sm.setSpeakerID(1072008) +sm.sendNext("You must prove yourself before you can advance to Cannoneer. Pass the test first!") +if sm.sendAskYesNo("Fight the OctoPirates and retrieve a Dark Marble from them. This will awaken your Mirror of Insight. I'll send you over immediately once you accept"): + sm.warp(912040000, 0) + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("You cannot stay a mere Pirate. You #bwill#k have to face up to the test.\r\n" + "Talk to me when you are ready.") +sm.dispose() diff --git a/scripts/quest/q1431e.py b/scripts/quest/q1431e.py new file mode 100755 index 0000000..b3615a5 --- /dev/null +++ b/scripts/quest/q1431e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Crusader + +blackCharm = 4031059 +job = "Crusader" + +sm.setSpeakerID(2020008) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(111) # Crusader +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1432e.py b/scripts/quest/q1432e.py new file mode 100755 index 0000000..81a52ff --- /dev/null +++ b/scripts/quest/q1432e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the White Knight + +blackCharm = 4031059 +job = "White Knight" + +sm.setSpeakerID(2020008) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(121) # Crusader +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1433e.py b/scripts/quest/q1433e.py new file mode 100755 index 0000000..55a8241 --- /dev/null +++ b/scripts/quest/q1433e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Berseker + +blackCharm = 4031059 +job = "Berserker" + +sm.setSpeakerID(2020008) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"#s yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(131) # Crusader +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1435e.py b/scripts/quest/q1435e.py new file mode 100755 index 0000000..c9f49f7 --- /dev/null +++ b/scripts/quest/q1435e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Mage FP + +blackCharm = 4031059 +job = "Mage (Fire, Poison)" + +sm.setSpeakerID(2020009) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(211) # Mage FP +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1436e.py b/scripts/quest/q1436e.py new file mode 100755 index 0000000..45e87e7 --- /dev/null +++ b/scripts/quest/q1436e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Mage IL + +blackCharm = 4031059 +job = "Mage (Ice, Lightning)" + +sm.setSpeakerID(2020009) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(221) # Mage IL +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1437e.py b/scripts/quest/q1437e.py new file mode 100755 index 0000000..0780476 --- /dev/null +++ b/scripts/quest/q1437e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Priest + +blackCharm = 4031059 +job = "Priest" + +sm.setSpeakerID(2020009) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(231) # Priest +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1439e.py b/scripts/quest/q1439e.py new file mode 100755 index 0000000..a945217 --- /dev/null +++ b/scripts/quest/q1439e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Ranger + +blackCharm = 4031059 +job = "Ranger" + +sm.setSpeakerID(2020010) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(311) # Ranger +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1440e.py b/scripts/quest/q1440e.py new file mode 100755 index 0000000..ed43a1b --- /dev/null +++ b/scripts/quest/q1440e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Sniper + +blackCharm = 4031059 +job = "Sniper" + +sm.setSpeakerID(2020010) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(321) # Sniper +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1442e.py b/scripts/quest/q1442e.py new file mode 100755 index 0000000..471d5dc --- /dev/null +++ b/scripts/quest/q1442e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Hermit + +blackCharm = 4031059 +job = "Hermit" + +sm.setSpeakerID(2020011) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(411) # Hermit +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1443e.py b/scripts/quest/q1443e.py new file mode 100755 index 0000000..fa4d9f5 --- /dev/null +++ b/scripts/quest/q1443e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Chief Bandit + +blackCharm = 4031059 +job = "Chief Bandit" + +sm.setSpeakerID(2020011) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(421) # Chief Bandit +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1445e.py b/scripts/quest/q1445e.py new file mode 100755 index 0000000..aa9072d --- /dev/null +++ b/scripts/quest/q1445e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Marauder + +blackCharm = 4031059 +job = "Marauder" + +sm.setSpeakerID(2020013) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(511) # Marauder +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1446e.py b/scripts/quest/q1446e.py new file mode 100755 index 0000000..c356f75 --- /dev/null +++ b/scripts/quest/q1446e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Way of the Outlaw + +blackCharm = 4031059 +job = "Outlaw" + +sm.setSpeakerID(2020013) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(521) # Blade Lord +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1447e.py b/scripts/quest/q1447e.py new file mode 100755 index 0000000..6c84878 --- /dev/null +++ b/scripts/quest/q1447e.py @@ -0,0 +1,17 @@ +# [Job Adv] (Lv.60) Blade Lord + +blackCharm = 4031059 +job = "Blade Lord" +sm.setSpeakerID(2020011) # Alec + +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") + sm.consumeItem(blackCharm, 1) + sm.completeQuestNoRewards(parentID) + sm.sendSayOkay("You are now a #b"+ job +"#k.") + sm.jobAdvance(433) # Blade Lord +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + + diff --git a/scripts/quest/q1448e.py b/scripts/quest/q1448e.py new file mode 100755 index 0000000..a951129 --- /dev/null +++ b/scripts/quest/q1448e.py @@ -0,0 +1,19 @@ +# [Job Adv] (Lv.60) Cannon Blaster + +blackCharm = 4031059 +job = "Cannon Blaster" + +sm.setSpeakerID(2020013) +if sm.hasItem(blackCharm, 1): + sm.sendNext("I am impressed, you surpassed the test. Only few are talented enough.\r\n" + "You have proven yourself to be worthy, thus I shall mold your body into a #b"+ job +"#k.") +else: + sm.sendSayOkay("You have not retrieved the #t"+ blackCharm +"# yet, I will be waiting.") + sm.dispose() + + +sm.consumeItem(blackCharm, 1) +sm.completeQuestNoRewards(parentID) +sm.jobAdvance(531) # Cannon Blaster +sm.sendSayOkay("You are now a #b"+ job +"#k.") +sm.dispose() diff --git a/scripts/quest/q1451e.py b/scripts/quest/q1451e.py new file mode 100755 index 0000000..5b56ef9 --- /dev/null +++ b/scripts/quest/q1451e.py @@ -0,0 +1,17 @@ +# [Job Adv] (Lv.100) Way of the Hero / Paladin / Dark Knight + +heroicPentagon = 4031343 +heroicStar = 4031344 + +sm.setSpeakerID(2081100) # Gritto +sm.sendNext("You have returned.") + + +sm.sendNext("I will take these tokens of heroism from you, and grant you your 4th job skills.\r\nYou helped a great deal in the fight to come.") + +sm.consumeItem(heroicPentagon, 1) +sm.consumeItem(heroicStar, 1) +sm.completeQuestNoRewards(parentID) +chrJobID = sm.getChr().getJob() +sm.jobAdvance(chrJobID+1) +sm.dispose() diff --git a/scripts/quest/q1451s.py b/scripts/quest/q1451s.py new file mode 100755 index 0000000..026d3f5 --- /dev/null +++ b/scripts/quest/q1451s.py @@ -0,0 +1,24 @@ +# [Job Adv] (Lv.100) Way of the Hero / Paladin / Dark Knight + +heroicPentagon = 4031343 +heroicStar = 4031344 + +sm.setSpeakerID(2081100) # Gritto +if sm.getChr().getLevel() >= 100: + sm.sendNext("You have accomplished the pinnacle of Strength, however there is one more obstacle in your way.\r\n" + "I will test you before I grant you the 4th job powers.") +else: + sm.sendSayOkay("You are not ready yet. Talk to me when you are Level 100.") + + +sm.sendNext("Bring me one #b#i"+ str(heroicPentagon) +"##z"+ str(heroicPentagon) +"##k and one #b#i"+ str(heroicStar) +"##z"+ str(heroicStar) +"##k. " + "These tokens of heroism can be obtained by defeating #bManon#k and #bGriffey#k.") + +response = sm.sendAskYesNo("Are you ready to take the test?") + +if response: + sm.sendSayOkay("I will wait for your arrival.") + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("Talk to me once you feel you are ready.") +sm.dispose() diff --git a/scripts/quest/q14524s.py b/scripts/quest/q14524s.py new file mode 100755 index 0000000..3d85421 --- /dev/null +++ b/scripts/quest/q14524s.py @@ -0,0 +1,15 @@ +sm.setSpeakerID(9400534) # Goddess Avaracia +sm.sendNext("Are you ready to begin?") + +sm.setPlayerAsSpeaker() # Player +sm.sendNext("What are you talking about? Who are you?") + +sm.setSpeakerID(9400534) # Goddess Avaracia +response = sm.sendAskYesNo("There isn't much time to explain, will you help me?") + +if response == 1: + sm.sendNext("Please go eliminate 100 #r#o9390010##k, They need to be dealt with.") + sm.startQuest(parentID) +else: + sm.sendSayOkay("I guess you aren't up for the task") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q1453e.py b/scripts/quest/q1453e.py new file mode 100755 index 0000000..aae771b --- /dev/null +++ b/scripts/quest/q1453e.py @@ -0,0 +1,17 @@ +# [Job Adv] (Lv.100) Way of the Arch Mage FP / Arch Mage IL / Bishop + +heroicPentagon = 4031511 +heroicStar = 4031512 + +sm.setSpeakerID(2081200) # Gritto +sm.sendNext("You have returned.") + + +sm.sendNext("I will take these tokens of heroism from you, and grant you your 4th job skills.\r\nYou helped a great deal in the fight to come.") + +sm.consumeItem(heroicPentagon, 1) +sm.consumeItem(heroicStar, 1) +sm.completeQuestNoRewards(parentID) +chrJobID = sm.getChr().getJob() +sm.jobAdvance(chrJobID+1) +sm.dispose() diff --git a/scripts/quest/q1453s.py b/scripts/quest/q1453s.py new file mode 100755 index 0000000..bae4d4f --- /dev/null +++ b/scripts/quest/q1453s.py @@ -0,0 +1,24 @@ +# [Job Adv] (Lv.100) Way of the Arch Mage FP / Arch Mage IL / Bishop + +heroicPentagon = 4031511 +heroicStar = 4031512 + +sm.setSpeakerID(2081200) # Gritto +if sm.getChr().getLevel() >= 100: + sm.sendNext("You have accomplished the pinnacle of Strength, however there is one more obstacle in your way.\r\n" + "I will test you before I grant you the 4th job powers.") +else: + sm.sendSayOkay("You are not ready yet. Talk to me when you are Level 100.") + + +sm.sendNext("Bring me one #b#i"+ str(heroicPentagon) +"##z"+ str(heroicPentagon) +"##k and one #b#i"+ str(heroicStar) +"##z"+ str(heroicStar) +"##k. " + "These tokens of heroism can be obtained by defeating #bManon#k and #bGriffey#k.") + +response = sm.sendAskYesNo("Are you ready to take the test?") + +if response: + sm.sendSayOkay("I will wait for your arrival.") + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("Talk to me once you feel you are ready.") +sm.dispose() diff --git a/scripts/quest/q1455e.py b/scripts/quest/q1455e.py new file mode 100755 index 0000000..66680f8 --- /dev/null +++ b/scripts/quest/q1455e.py @@ -0,0 +1,17 @@ +# [Job Adv] (Lv.100) Way of the Bowmaster / Marksman + +heroicPentagon = 4031514 +heroicStar = 4031515 + +sm.setSpeakerID(2081300) +sm.sendNext("You have returned.") + + +sm.sendNext("I will take these tokens of heroism from you, and grant you your 4th job skills.\r\nYou helped a great deal in the fight to come.") + +sm.consumeItem(heroicPentagon, 1) +sm.consumeItem(heroicStar, 1) +sm.completeQuestNoRewards(parentID) +chrJobID = sm.getChr().getJob() +sm.jobAdvance(chrJobID+1) +sm.dispose() diff --git a/scripts/quest/q1455s.py b/scripts/quest/q1455s.py new file mode 100755 index 0000000..9bffafd --- /dev/null +++ b/scripts/quest/q1455s.py @@ -0,0 +1,24 @@ +# [Job Adv] (Lv.100) Way of the Bowmaster / Marksman + +heroicPentagon = 4031514 +heroicStar = 4031515 + +sm.setSpeakerID(2081300) +if sm.getChr().getLevel() >= 100: + sm.sendNext("You have accomplished the pinnacle of Strength, however there is one more obstacle in your way.\r\n" + "I will test you before I grant you the 4th job powers.") +else: + sm.sendSayOkay("You are not ready yet. Talk to me when you are Level 100.") + + +sm.sendNext("Bring me one #b#i"+ str(heroicPentagon) +"##z"+ str(heroicPentagon) +"##k and one #b#i"+ str(heroicStar) +"##z"+ str(heroicStar) +"##k. " + "These tokens of heroism can be obtained by defeating #bManon#k and #bGriffey#k.") + +response = sm.sendAskYesNo("Are you ready to take the test?") + +if response: + sm.sendSayOkay("I will wait for your arrival.") + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("Talk to me once you feel you are ready.") +sm.dispose() diff --git a/scripts/quest/q1457e.py b/scripts/quest/q1457e.py new file mode 100755 index 0000000..cd9fc0a --- /dev/null +++ b/scripts/quest/q1457e.py @@ -0,0 +1,17 @@ +# [Job Adv] (Lv.100) Way of the NightLord / Shadower + +heroicPentagon = 4031517 +heroicStar = 4031518 + +sm.setSpeakerID(2081400) # Hellin +sm.sendNext("You have returned.") + + +sm.sendNext("I will take these tokens of heroism from you, and grant you your 4th job skills.\r\nYou helped a great deal in the fight to come.") + +sm.consumeItem(heroicPentagon, 1) +sm.consumeItem(heroicStar, 1) +sm.completeQuestNoRewards(parentID) +chrJobID = sm.getChr().getJob() +sm.jobAdvance(chrJobID+1) +sm.dispose() diff --git a/scripts/quest/q1457s.py b/scripts/quest/q1457s.py new file mode 100755 index 0000000..c012d98 --- /dev/null +++ b/scripts/quest/q1457s.py @@ -0,0 +1,24 @@ +# [Job Adv] (Lv.100) Way of the NightLord / Shadower + +heroicPentagon = 4031517 +heroicStar = 4031518 + +sm.setSpeakerID(2081400) # Hellin +if sm.getChr().getLevel() >= 100: + sm.sendNext("You have accomplished the pinnacle of Strength, however there is one more obstacle in your way.\r\n" + "I will test you before I grant you the 4th job powers.") +else: + sm.sendSayOkay("You are not ready yet. Talk to me when you are Level 100.") + + +sm.sendNext("Bring me one #b#i"+ str(heroicPentagon) +"##z"+ str(heroicPentagon) +"##k and one #b#i"+ str(heroicStar) +"##z"+ str(heroicStar) +"##k. " + "These tokens of heroism can be obtained by defeating #bManon#k and #bGriffey#k.") + +response = sm.sendAskYesNo("Are you ready to take the test?") + +if response: + sm.sendSayOkay("I will wait for your arrival.") + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("Talk to me once you feel you are ready.") +sm.dispose() diff --git a/scripts/quest/q1459e.py b/scripts/quest/q1459e.py new file mode 100755 index 0000000..2a19552 --- /dev/null +++ b/scripts/quest/q1459e.py @@ -0,0 +1,17 @@ +# [Job Adv] (Lv.100) Way of the Buccaneer / Corsair + +heroicPentagon = 4031860 +heroicStar = 4031861 + + +sm.setSpeakerID(2081500) # Samuel + +sm.sendNext("You have returned.") +sm.sendNext("I will take these tokens of heroism from you, and grant you your 4th job skills.\r\nYou helped a great deal in the fight to come.") + +sm.consumeItem(heroicPentagon, 1) +sm.consumeItem(heroicStar, 1) +sm.completeQuestNoRewards(parentID) +chrJobID = sm.getChr().getJob() +sm.jobAdvance(chrJobID+1) +sm.dispose() diff --git a/scripts/quest/q1459s.py b/scripts/quest/q1459s.py new file mode 100755 index 0000000..16b346d --- /dev/null +++ b/scripts/quest/q1459s.py @@ -0,0 +1,24 @@ +# [Job Adv] (Lv.100) Way of the Buccaneer / Corsair + +heroicPentagon = 4031860 +heroicStar = 4031861 + +sm.setSpeakerID(2081500) # Samuel +if sm.getChr().getLevel() >= 100: + sm.sendNext("You have accomplished the pinnacle of Strength, however there is one more obstacle in your way.\r\n" + "I will test you before I grant you the 4th job powers.") +else: + sm.sendSayOkay("You are not ready yet. Talk to me when you are Level 100.") + + +sm.sendNext("Bring me one #b#i"+ str(heroicPentagon) +"##z"+ str(heroicPentagon) +"##k and one #b#i"+ str(heroicStar) +"##z"+ str(heroicStar) +"##k. " + "These tokens of heroism can be obtained by defeating #bManon#k and #bGriffey#k.") + +response = sm.sendAskYesNo("Are you ready to take the test?") + +if response: + sm.sendSayOkay("I will wait for your arrival.") + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("Talk to me once you feel you are ready.") +sm.dispose() diff --git a/scripts/quest/q1460e.py b/scripts/quest/q1460e.py new file mode 100755 index 0000000..bb36864 --- /dev/null +++ b/scripts/quest/q1460e.py @@ -0,0 +1,18 @@ +# [Job Adv] (5th job) 5th Job : Call of the erdas + +sm.setSpeakerID(2140001) + +if "1" == sm.getQRValue(parentID): + sm.sendNext("#h #... I've heard many great things about you. \r\n\r\n I wanted to seee you today to tell you about the strange phenomenon that is taking place in this world. \r\n\r\n #L0##bWhat is it?#l") + sm.sendNext("Have you heard about the energy that forms this world, #eErda#n? \r\n\r\n #L1##bErda?#l") + sm.sendNext("Erda continuously comes into existence and perishes, forming and supporting this world. It's not just Maple World where Erda can be found, but also many other worlds in different dimensions. Long before you setpped into this world for the first time, Erda had existed in the soil and trees and in the light and darkness. \r\n\r\n #L2##bIt sounds important.#l") + sm.sendNext("It is. Without erda, this world can't exist. A while ago, I've noticed this important Erda is vanishing little by little. \r\n\r\n #L3##bIt's vanishing?#l") + sm.sendNext("You look doubtful. Seeing is believing. See for yourself, and your perspective of this world will change.") + if sm.sendAskYesNo("If you don't mind, I can help you see the flow of Erda. Now, close your eyes... \r\n\r\n #b(Select Yes to follow the History Observer's instructions and concentrate your mind.)"): + sm.warpInstanceIn(450000200) + +elif "2" == sm.getQRValue(parentID): + sm.sendNext("Do you see now? Do you understand the importance of the Erdas? \r\n\r\n #L4##bI... talked to them.#l") + sm.sendNext("You spoke to the Erdas? Can this be true? I have observed the Erdas my whole life, but never have I communicated with them in any way.") + sm.sendNext("If the Erdas spoke to you... Then you have a grander fate than I suspected. The Erdas wish to give you their power, so that you can protect them. \r\n\r\n #L5##bThat sounds sweet! How does that work?#l") + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1460s.py b/scripts/quest/q1460s.py new file mode 100755 index 0000000..caac527 --- /dev/null +++ b/scripts/quest/q1460s.py @@ -0,0 +1,9 @@ +# [Job Adv] (5th job) 5th Job : Call of the erdas + +sm.setSpeakerID(2140001) +sm.sendNext("You have come far in the pursuit of rare and incredible power. But in your journeys, did you ever find yourself lost, or unsure of how to proceed?") +if sm.sendAskYesNo("We have meditated on this problem for ages, and at last we may have a solution. Not just for finding power, but for surpassing your limits. If you are interested, come find me in the Temple of Time. \r\n\r\n\r\n #b(Accepting this quest will take you to the Temple of Time for your #e5th Job Advancement#n.)"): + sm.startQuest(parentID) + sm.addQRValue(parentID, "1") + sm.warp(270010111, 0) +sm.dispose() diff --git a/scripts/quest/q1461e.py b/scripts/quest/q1461e.py new file mode 100755 index 0000000..9f92bab --- /dev/null +++ b/scripts/quest/q1461e.py @@ -0,0 +1,6 @@ +# [Job Adv] (5th job) 5th Job : Blessings of the Goddess + +sm.setSpeakerID(2140001) +sm.sendNext("So, you have met with the goddesses and earned their trust. I knew you would succeed.") +sm.completeQuest(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q1461s.py b/scripts/quest/q1461s.py new file mode 100755 index 0000000..6ded344 --- /dev/null +++ b/scripts/quest/q1461s.py @@ -0,0 +1,9 @@ +# [Job Adv] (5th job) 5th Job : Blessings of the Goddess + +sm.setSpeakerID(2140001) +sm.sendNext("According to legend, in ancient times, after the fall of the 365 gods, the goddesses used the Erdas to sculpt this world into being. Supposedly there have also been a select few... humans, elves, demons and dragons... who have learned the art of #bmanipulating The Erda Flow#k from the goddesses themselves.") +#todo show image +if sm.sendAskYesNo("The portal to the Goddess of Maple World can be found at the #bBowman Instructional School in Henesys#k. The Goddess of Grandis can be found at the #bGreat Temple Interior in Pantheon#k. And the Goddess of Tynerum can be found at the #bDeserted Camp at the Dark World Tree#k. If anyone can find their way to the goddess, it is you."): + sm.startQuest(parentID) + sm.sendSayOkay("Come back to me anytime you are lost. \r\n\r\n #b(Go find the goddess of Maple World.)") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q1462e.py b/scripts/quest/q1462e.py new file mode 100755 index 0000000..9b7f9a2 --- /dev/null +++ b/scripts/quest/q1462e.py @@ -0,0 +1,12 @@ +# [Job Adv] (5th job) 5th Job : Arcane stone of maple world + +sm.setSpeakerID(1540942) +sm.sendNext("What is it that you want to protect the most in this world? \r\n\r\n #L0#Friends whom I went on adventures with. #l \r\n #L1#The people of Maple World #l") +sm.sendNext("I see. People have many things that are precious to them. There is no right answer... I simply wanted to know where your priorities lie. \r\n\r\n #v2435734# #bArcane Stone of Maple World x1") +if sm.canHold(2435734): + sm.giveItem(2435734) + sm.completeQuest(parentID) + sm.dispose() +else: + sm.sendSayOkay("I have something to give you, but you're carrying too many items. Please empty 1 Use slot, and then talk to me again.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q1462s.py b/scripts/quest/q1462s.py new file mode 100755 index 0000000..a844478 --- /dev/null +++ b/scripts/quest/q1462s.py @@ -0,0 +1,8 @@ +# [Job Adv] (5th job) 5th Job : Arcane stone of maple world + +sm.setSpeakerID(1540942) +sm.sendNext("You have done well. I and my sisters exist to safeguard this world and guide its heroes, but few ever come far enough to meet us.") +sm.sendNext("You wish to claim the power t control the Erdas, yes? It is natural, since you yourself are of the Erdas, as we all are. If you can release this energy from within you, it will unlock new power for you to command. I shall aid you in this effort.") +sm.startQuest(parentID) +sm.sendSayOkay("But there is a question I wish to ask before that. \r\n\r\n #b(What does the goddess want to know from you?)") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q1463e.py b/scripts/quest/q1463e.py new file mode 100755 index 0000000..7ab8f61 --- /dev/null +++ b/scripts/quest/q1463e.py @@ -0,0 +1,5 @@ +# [Job Adv] (5th job) 5th Job : Arcane stone of Grandis + +sm.setSpeakerID(1540943) +sm.sendSayOkay("Good job stranger, I will lend you my power.") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1463s.py b/scripts/quest/q1463s.py new file mode 100755 index 0000000..1079a5a --- /dev/null +++ b/scripts/quest/q1463s.py @@ -0,0 +1,8 @@ +# [Job Adv] (5th job) 5th Job : Arcane stone of Grandis + +sm.setSpeakerID(1540943) +sm.sendNext("Welcome, stranger. \r\n\r\n I'll lend you my power if you're willing to protect this world.") +sm.sendNext("If you want my help, then you have to prove your strength and bravery to me. Can you confront #rMagnus#k?") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.sendSayOkay("I know you can do it. \r\n\r\n #b(Eliminate Magnus once and return.)") diff --git a/scripts/quest/q1464s.py b/scripts/quest/q1464s.py new file mode 100755 index 0000000..3c9c6aa --- /dev/null +++ b/scripts/quest/q1464s.py @@ -0,0 +1,23 @@ +# [Job Adv] (5th job) 5th Job : Arcane stone of Tynerium + +sm.setSpeakerID(1540944) +sm.sendNext("Maple World is a world of order and rules whereas Tynerium is a world of chaos and uncertainty. FOr a long time we've been acting as the shadows of this world.") +sm.sendNext("Truth be told, I don't want to help Maple World, but our world is not complete without it. The Black Mage must be gone for our sake and for everyone else's") +sm.setPlayerAsSpeaker() +sm.sendNext("So are you going to help me?") +sm.setSpeakerID(1540944) +sm.sendNext("Huh? I didn't say that.") +sm.setPlayerAsSpeaker() +sm.sendNext("...") +sm.setSpeakerID(1540944) +sm.sendNext("...") +sm.setPlayerAsSpeaker() +sm.sendNext("...") +sm.setSpeakerID(1540944) +sm.sendNext("All right, all right, don't look at me like that. I'll help you. But I want to test you first. \r\n\r\n #L0#What test? #l") +sm.sendNext("It's a simple test to see how lucky you are. I'm going to send you out of this place. You'll have to come back, but the entrance to this place will have been moved someplace else. \r\n\r\n #L1# Wait, that's unfair?#l") +sm.sendNext("I'm not going to wait for you long. Prove to me how lucky you are. \r\n\r\n #b(Find a Horizon Portal near the upper side of the World Tree within 5 minutes.)") +sm.sendNext("This is what you want, right? I was going to give it to you from the start. Hurry, take it. \r\n\r\n #v2435736# #bArcane Stone of Tynerum x1") +sm.startQuest(parentID) +sm.completeQuest(parentID)#todo +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q1465e.py b/scripts/quest/q1465e.py new file mode 100755 index 0000000..be24516 --- /dev/null +++ b/scripts/quest/q1465e.py @@ -0,0 +1,7 @@ +# [Job Adv] (5th job) 5th Job : Record of power + +sm.setSpeakerID(2140001) +sm.sendNext("You are now ready to claim a new power... Hand me the activated Arcane Stone. I will use this to awaken a new force within you. \r\n\r\n #b(Press Next to complete the 5th Job Advancement.)") +sm.completeQuest(parentID) +#todo show job adv effect +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q1465s.py b/scripts/quest/q1465s.py new file mode 100755 index 0000000..fec0e11 --- /dev/null +++ b/scripts/quest/q1465s.py @@ -0,0 +1,9 @@ +# [Job Adv] (5th job) 5th Job : Record of power + +sm.setSpeakerID(2140001) +if sm.sendAskYesNo("But these stones are not yours yet. To make them truly yours, you must mark them with you power. \r\n #b(Activate the Arcane Stone of the Goddess and hunt monsters near your level. The Arcane Stone will record you EXP gain and once activated they will give you the EXP saved in them one more time.)"): + sm.startQuest(parentID) + sm.sendSayOkay("Don't forget to activate all the three Arcane Stones.") + sm.dispose() + + #todo add quest completion of 1474 1475 and 1476 to arcane stones \ No newline at end of file diff --git a/scripts/quest/q1466e.py b/scripts/quest/q1466e.py new file mode 100755 index 0000000..0bc7555 --- /dev/null +++ b/scripts/quest/q1466e.py @@ -0,0 +1,13 @@ +# id 1466 (A Greater Power), field 270000000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(2140001) # Memory Keeper +sm.sendNext("So, how was it facing those monsters? \r\n\r\n #b#L0#They're stronger than expected. I don't think I can take them alone.#l") +sm.sendNext("Of course... The power of the body and the power of the sould are different. Without #bArcane Power#k, you stand no chance against the threats that lie ahead. And only one tapped into th Erda Flow can wield true #bArcane Power#k") +sm.sendNext("But there is a way. You can forge the Erda within you into the shape of an #bArcane Symbol#k. \r\n\r\n #b#L0#Arcane Symbol?#l") +sm.sendNext("I will give you the most basic symbol for now. It won't be complete at first. But after you gain enough experience there, #bthe symbol will grow more elaborate, and you will be able to enhance its power#k. Don't rush the process... it will happen in time. \r\n\r\n#i1712000# #bArcane Symbol x1") +if sm.canHold(1712000): + sm.giveItem(1712000) + sm.completeQuest(parentID) +else: + sm.sendNext("Please make room in your Equip inventory to receive the Arcane Symbol.") \ No newline at end of file diff --git a/scripts/quest/q1466s.py b/scripts/quest/q1466s.py new file mode 100755 index 0000000..0e88204 --- /dev/null +++ b/scripts/quest/q1466s.py @@ -0,0 +1,12 @@ +# id 1466 (A Greater Power), field 270000000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(2140001) # Memory Keeper +sm.sendNext("Wait. I have something to tell you before you head for Arcane River.") +res = sm.sendNext("Do you remember one of the temple keepers here named #bKao#k?\r\n\r\n#b#L0# I remember.#l") +sm.sendNext("#fNpc/3003131.img/stand/0#\r\nThat poor child could not discover their identity in the end. I imagine one would do anything to know. Anything.") +res = sm.sendNext("When the temple keepers went through the Gate of the Present to investigate the abnormal flow of Erda, that child disappeared with them.\r\nI wanted to dissuade them, but I was too late.\r\n\r\n#b#L0# I will go through the Gate of the Present and find them.#l") +res = sm.sendNext("Wait. The monsters in Arcane River are born from a river that flows with the highest concentration of Erda we have ever seen...\r\n\r\nYou must possess #eArcane Power#n, or all your strength will come to nothing.\r\n\r\n#b#L0# Arcane Power?#l") +sm.sendSayOkay("Seeing is believing. Go and hunt some of the monsters there. Return when you've had enough.\r\n\r\n#b(Hunt some of the monsters you first encounter at Arcane River, beyond the Gate of the Present, and then go back to the Memory Keeper.)#k") +sm.startQuest(parentID) +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1478s.py b/scripts/quest/q1478s.py new file mode 100755 index 0000000..849ef2e --- /dev/null +++ b/scripts/quest/q1478s.py @@ -0,0 +1,17 @@ +# id 1478 (V Matrix), field 101070000 +sm.setSpeakerID(2140001) # Memory Keeper +sm.sendNext("Your eyes have been opened to a new power, but there is something you must know before you can wield its true potential.") +sm.sendSay("I am certain you will put that power to a good use, however...") +sm.sendSay("There are some things you should understand about how it works. I know your memory may not be as good as mine, so feel free to take notes.") +sm.sendSay("Your new power can be controlled through a system called the V Matrix. Open the #bSkill window#k and you will see that the #bV tab has appeared#k. Press the #bV Matrix button#k to examine your powers.") +sm.sendSay("If you use the Nodestone I have just given you, you'll get a Node for a new skill. #bDouble-click the node#k in the V Matrix or #bdrag it to an empty slot#k to activate the #bnew skill in the V tab#k.") +sm.sendSay("Contrarily, the skill will disappear from the V tab if you remove the node from the slot.") +sm.sendSay("I am sure your new skill will help you greatly in Arcane River.") +sm.sendSay("The next Nodestone you acquire could contain a #bBoost Node#k or\r\n#bSpecial Node#k or another Skill Node. You can make your existing skills even more powerful by placing Boost Nodes on the V Matrix.") +sm.sendSay("If you place a Special Node in the V Matrix, a mysterious power will surge up to help you, when triggered under special conditions.") +sm.sendSay("But Special Nodes will vanish over time due to the immense quantity of Erdas they expend.") +sm.sendSay("Skill Nodes and Boost Nodes can be enhanced by consuming the same nodes, but this can only be done with the help of a #bNode Master#k. ") +sm.sendSay("Show the node to the Node Master. Select Enhance by right-clicking the Node and then choose the materials to consume.") +sm.sendSay("Lastly, note that the skills and abilities you obtain from equipping Nodes are not affected by buff duration increases or cooldown effects.") +sm.sendSay("I think my explanations should be enough to set such a talented individual as yourself down the proper path. All that's left is for you to wield this new power. Good luck.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q1481e.py b/scripts/quest/q1481e.py new file mode 100755 index 0000000..72d0864 --- /dev/null +++ b/scripts/quest/q1481e.py @@ -0,0 +1,5 @@ +# id 1481 (5th job: Preparing for Power) +sm.setSpeakerID(2140000) # Temple Keeper +sm.sendNext("You feel a strong power within. It should be enough to pull through.") +sm.sendNext("#b#p2140001##k will guide you to the trial.") +sm.completeQuest(parentID) diff --git a/scripts/quest/q15149s.py b/scripts/quest/q15149s.py new file mode 100755 index 0000000..b3bd037 --- /dev/null +++ b/scripts/quest/q15149s.py @@ -0,0 +1,9 @@ +# id 15149 (Defeat the Inferno Wolf), field 450002000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9001059) # Pollo +sm.sendNext("Hey, listen! A bunch of warriors worked together to finally put a stop to the infamous #r#eInferno Wolf#n#k!") +sm.sendSay("We wouldn't have been able to take him down without your help.") +sm.sendSay("You've dealt #b#eAdequate#n#k damage to the Inferno Wolf.") +sm.sendSay("Here's #i2434634:# #b#t2434634# x1#k as a reward. We'll see you again next time! ") +sm.createQuestWithQRValue(15172, "") diff --git a/scripts/quest/q1600s.py b/scripts/quest/q1600s.py new file mode 100755 index 0000000..f13f989 --- /dev/null +++ b/scripts/quest/q1600s.py @@ -0,0 +1,29 @@ +# [Silent Crusade] A Cry for Help +from net.swordie.ms.constants import QuestConstants + +JAKE = 1052006 +SUBWAY_TRANSTICKET = 2030028 + +sm.setSpeakerID(JAKE) +response = sm.sendAskYesNo("Somebody! Anybody! Help!") + +if response: + sm.sendNext("A lady followed a bunch of creeps into the Subway. They looked really dangerous. " + "Can you head into the #bSubway Construction Site#k and make sure she's okay?") + + sm.sendNext("Hurry to the Subway Ticket Booth!") + + if not sm.canHold(SUBWAY_TRANSTICKET): + sm.sendSayOkay("Please make some room in your 'use' inventory.") + sm.dispose() + + sm.giveItem(SUBWAY_TRANSTICKET) + sm.startQuest(parentID) + sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/start1") + sm.createQuestWithQRValue(QuestConstants.SILENT_CRUSADE_WANTED_TAB_1, "") + sm.createQuestWithQRValue(QuestConstants.SILENT_CRUSADE_WANTED_TAB_2, "") + sm.createQuestWithQRValue(QuestConstants.SILENT_CRUSADE_WANTED_TAB_3, "") + sm.createQuestWithQRValue(QuestConstants.SILENT_CRUSADE_WANTED_TAB_4, "") + +else: + sm.sendSayOkay("Really Nigga?") \ No newline at end of file diff --git a/scripts/quest/q16011e.py b/scripts/quest/q16011e.py new file mode 100755 index 0000000..9afd055 --- /dev/null +++ b/scripts/quest/q16011e.py @@ -0,0 +1,15 @@ +# +# @author once a bakery never a bakery +# @npc Dame Appropiation - Legion Manager +# @quest [Legion] Whip The Whelps +# + +coins = int(sm.getQRValue(18797, "PT")) + 10 +sm.sendSayOkay("'Awesome! Your #bLegion#k is pretty tough! Here is #b#i4310229:# #t4310229# x10#k as your reward." + "\r\nCheck in tomorrow for more training missions!\r\n\r\nI'll go ahead and update your #bWeekly " + "Cumulative Legion Coin Ranking#k!\r\n#bThis Week's Cumulative Coins#k#e: " + str(coins) + "#n") +sm.completeQuestNoRewards(16011) +sm.setQRValue(18797, "PT", str(coins)) +sm.setQRValue(18793, "q1", "1") # LegionQuest +sm.setQRValue(18793, "q1Date", sm.getCurrentDateAsString()) # LegionQuest +sm.gainItem(4310229, 10) \ No newline at end of file diff --git a/scripts/quest/q16011s.py b/scripts/quest/q16011s.py new file mode 100755 index 0000000..512e578 --- /dev/null +++ b/scripts/quest/q16011s.py @@ -0,0 +1,19 @@ +# +# @author bakery fakery +# @npc Dame Appropiation - Legion Manager +# @quest [Legion] Whip The Whelps +# + +sm.sendNext("'Sup! How's your #bLegion#k?\r\nMaking decent gains? Either way, I'm sure it's a load off having " + "people who've got your back.") +if sm.AskYesNo("Listen, the dragon population on the island is getting out of hand... WE NEED TO GO BACK!\r\n\r\n" + "The #rHuge Dragons#k that live in the #rDragon's Domain#k are guarded by a horde of #bDragon Whelps#k. " + "Exterminate #b100#k of them so they never grow big enough to cause trouble.\r\nConsider it a #rtraining " + "mission#k for your Legion. Plus, I'll give you #b#i4310229:# #t4310229# x10#k as a reward.\r\n\r\nWhat " + "do you say?\r\n\r\n#r#eNOTE:#n This quest can only be completed once per world per day.#k"): + + sm.sendSayOkay("Good. You can find #rDragon Whelps#k in the #rDragon's Domain#k, reached by starting a " + "#bLegion Raid#k. Come visit me in town when you've completed your daily quests.\r\nGood luck!") + sm.startQuest(16011) +else: + sm.sendSayOkay("Come visit me whenever you're ready for a #bmission#k") \ No newline at end of file diff --git a/scripts/quest/q16012e.py b/scripts/quest/q16012e.py new file mode 100755 index 0000000..8b45636 --- /dev/null +++ b/scripts/quest/q16012e.py @@ -0,0 +1,19 @@ +# +# @author baking some swords now +# @npc Dame Appropiation - Legion Manager +# @quest [Legion] Defeat the Golden Wyvern +# + +LEGION_QUEST = 18793 + +coins = int(sm.getQRValue(18797, "PT")) + 20 +sm.sendSayOkay("'Awesome! Your #bLegion#k is pretty tough! Here is #b#i4310229:# #t4310229# x20#k as your reward.\r\nCheck in tomorrow for more training missions!\r\n\r\nI'll go ahead and update your #bWeekly Cumulative Legion Coin Ranking#k!\r\n#bThis Week's Cumulative Coins#k#e: " + coins + "#n"); +sm.completeQuest(16012) +sm.setQRValue(18797, "PT", str(coins)) + +# Is this q0 and q2? +sm.setQRValue(LEGION_QUEST, "q0", "1") +sm.setQRValue(LEGION_QUEST, "q0Date", sm.getCurrentDateAsString()) +sm.setQRValue(LEGION_QUEST, "q2", "1") +sm.setQRValue(LEGION_QUEST, "q2Date", sm.getCurrentDateAsString()) +sm.gainItem(4310229, 20) \ No newline at end of file diff --git a/scripts/quest/q16012s.py b/scripts/quest/q16012s.py new file mode 100755 index 0000000..44df948 --- /dev/null +++ b/scripts/quest/q16012s.py @@ -0,0 +1,16 @@ +# +# @author baking legion needs +# @npc Dame Appropiation - Legion Manager +# @quest [Legion] Defeat the Golden Wyvern +# + +sm.sendSayOkay("Hey!\r\nHow's your #bLegion#k?\r\nWatching your Legion grow in strength fills me with pride.") +if sm.sendAskYesNo("I have a #rtraining mission#k for you and your legion.\r\n\r\nSometimes, when you've defeated " + "enough #bDragon Whelps#k, a rare #rGolden Wyvern#k appears. Defeat #b20#k of them and I'll give " + "you #b#i4310229:# #t4310229# x20#k as a reward.\r\n\r\nThink you're up for the challenge?" + "\r\n\r\n#r#eNote:#k This quest can only be completed once per world per day.#k"): + + sm.sendSayOkay("Excellent!\r\n#rGolden Wyverns#k spawn in the #rDragon's Domain#k which reached by starting a #bLegion Raid#k. Come visit me when you're ready to turn in your daily quests.\r\nGood luck!"); + sm.startQuest(16012) +else: + sm.sendSayOkay("Come visit me whenever you're ready for a #bmission#k") \ No newline at end of file diff --git a/scripts/quest/q16013s.py b/scripts/quest/q16013s.py new file mode 100755 index 0000000..7ce4202 --- /dev/null +++ b/scripts/quest/q16013s.py @@ -0,0 +1,55 @@ +# +# @author i baked yunos dick in my oven +# @npc Dame Appropiation - Legion Manager +# @quest [Legion] We Are Legion +# + +DAME = 9010106 +sm.setSpeakerID(DAME) +if sm.getUnionLevel() < 500 or sm.getUnionCharacterCount() < 3: + sm.sendSayOkay("You're not ready to join a Legion, warrior. Legions are reserved for battle-hardened warriors with a " + "#b#eCumulative Level#n of at least 500#k, and require #r#ea minimum of 3 characters#n#k.\r\n\r\n#eWhat " + "is Cumulative Level?#n\r\n#bYour Cumulative Level is the combined level of all your characters on a given " + "world #rwho are Lv. 60+ and have completed the 2nd Job Advancement#k. If you have 40 or more characters, " + "the only your 40 highest level characters will be counted. However, #rZero#k is a special case. Only your" + " highest level Zero will be counted.") +elif not sm.hasQuest(16013) and not sm.hasQuestCompleted(16013): + sm.setQRValue(18793, "q0=1q1=0pq=0q2=0q1Date=" + sm.getCurrentDateAsString() + "pqDate=" + + sm.getCurrentDateAsString() + "q2Date=" + sm.getCurrentDateAsString()) # Legion quest + sm.incrementUnionRank() + sm.completeQuestNoRewards(16013) + sm.sendNext("Hello #b#h0##k. Good to see you again.") + sm.setPlayerAsSpeaker() + sm.sendSay("Have we met?") + sm.setSpeakerID(DAME) + sm.sendSay("Ta-da! It's me, #b#eMs. Appropriation!#n#k Surprised? Frustrated with the everyday bureaucracy of the " + "workplace, I spent my free time getting totally ripped and hunting down dragons. And now I've been " + "knighted by Empress Cygnus!") + sm.sendSay("For a while now, I've been matching Maplers with all kinds of #bpart-time jobs#k to help them build " + "character and level up.\r\n\r\nIt was an okay start, but the system didn't work out the way\r\nI had " + "hoped. Too much bureaucratic red tape.") + sm.sendSay("#b#eBut now, I'M in charge.#n#k Wahahahaha!\r\nAnd the new system I've developed is a zillion times " + "better, with better rewards! Shall I tell you about it?") + sm.sendSay("Several months ago, I went on my first vacation in years. But our cruise ship ran aground on an " + "#buncharted island#k full of #rterrible dragons#k.\r\nAfter the captain and crew were dragged off " + "into the jungle and devoured, we passengers realized that there was only one way we were getting off " + "the island alive...") + sm.sendSay("We took up whatever arms we could find. Pots and pans, knives, and the odd broadsword from somebody's " + "luggage. When the dragons returned to carry us off, we charged forward together and beat them to death!") + sm.sendSay("We ate well that night. And while we sat around the campfire, thinking of our fallen comrades, I " + "reached an epiphany.\r\n\r\nSome among us were seasoned warriors, but just as many were flabby tourists. " + "The only reason we survived is because we banded together..") + sm.sendSay("I realized what was inherently wrong with the part-time job system.") + sm.sendSay("Nothing is gained by going it alone. But working as a group, the strengths of one compensate for the " + "weaknesses of another.\r\n\r\n#bWhen people work together#k, even a pudgy sightseer can take down a " + "giant dragon.") + sm.sendSay("After a few months on the island, we managed to capture and tame enough dragons to fly the remaining " + "survivors to safety. And when I returned to civilization, I knew exactly what I had to do. \r\n\r\n" + "First, I told my boss to suck an egg, and I quit. And then, I started my #bgrand new project#k.") + sm.sendSay("And that project is, the #b#e!#n#k I'm going to help all those sad, weak, and flabby " + "Maplers reach their true potential by pairing them with other warriors!\r\n\r\nThe end result? " + "Everybody makes mad gains and gets swole like me! Oh and they'll probably level up faster.") + sm.sendSay("#h0#! Don't you want to put together a #bLegion#k of swole bros to punch dragons in the face and " + "unlock stat bonuses?\r\nIf you're interested, or have any questions, just talk to me or my squire" + " and fellow cruise survivor, Pancho Sanza.") + sm.progressMessageFont(3, 20, 20, 0, "You can now manage your Legion from the Menu.") diff --git a/scripts/quest/q16014s.py b/scripts/quest/q16014s.py new file mode 100755 index 0000000..8bb5c58 --- /dev/null +++ b/scripts/quest/q16014s.py @@ -0,0 +1,203 @@ +# +# @author sword fighting bakery +# @npc Dame Appropiation - Legion Manager +# @quest Talk to Dame Appropiation +# +DAME = 9010106 + +sm.setSpeakerID(DAME) +# Hack to get intro to work for now (16013 isn't showing up :( ) +if not sm.hasQuest(16013) and not sm.hasQuestCompleted(16013): + if sm.getUnionLevel() < 500 or sm.getUnionCharacterCount() < 3: + sm.sendSayOkay("You're not ready to join a Legion, warrior. Legions are reserved for battle-hardened warriors with a " + "#b#eCumulative Level#n of at least 500#k, and require #r#ea minimum of 3 characters#n#k.\r\n\r\n#eWhat " + "is Cumulative Level?#n\r\n#bYour Cumulative Level is the combined level of all your characters on a given " + "world #rwho are Lv. 60+ and have completed the 2nd Job Advancement#k. If you have 40 or more characters, " + "the only your 40 highest level characters will be counted. However, #rZero#k is a special case. Only your" + " highest level Zero will be counted.") + else: + sm.setQRValue(18793, "q0=1q1=0pq=0q2=0q1Date=" + sm.getCurrentDateAsString() + "pqDate=" + + sm.getCurrentDateAsString() + "q2Date=" + sm.getCurrentDateAsString()) # Legion quest + rank = chr.getUnion().getUnionRank() + if rank == 0: + rank = 101 + sm.setQRValue(18771, "rank=" + str(rank)) # Legion rank + sm.completeQuestNoRewards(16013) + sm.sendNext("Hello #b#h0##k. Good to see you again.") + sm.setPlayerAsSpeaker() + sm.sendSay("Have we met?") + sm.setSpeakerID(DAME) + sm.sendSay("Ta-da! It's me, #b#eMs. Appropriation!#n#k Surprised? Frustrated with the everyday bureaucracy of the " + "workplace, I spent my free time getting totally ripped and hunting down dragons. And now I've been " + "knighted by Empress Cygnus!") + sm.sendSay("For a while now, I've been matching Maplers with all kinds of #bpart-time jobs#k to help them build " + "character and level up.\r\n\r\nIt was an okay start, but the system didn't work out the way\r\nI had " + "hoped. Too much bureaucratic red tape.") + sm.sendSay("#b#eBut now, I'M in charge.#n#k Wahahahaha!\r\nAnd the new system I've developed is a zillion times " + "better, with better rewards! Shall I tell you about it?") + sm.sendSay("Several months ago, I went on my first vacation in years. But our cruise ship ran aground on an " + "#buncharted island#k full of #rterrible dragons#k.\r\nAfter the captain and crew were dragged off " + "into the jungle and devoured, we passengers realized that there was only one way we were getting off " + "the island alive...") + sm.sendSay("We took up whatever arms we could find. Pots and pans, knives, and the odd broadsword from somebody's " + "luggage. When the dragons returned to carry us off, we charged forward together and beat them to death!") + sm.sendSay("We ate well that night. And while we sat around the campfire, thinking of our fallen comrades, I " + "reached an epiphany.\r\n\r\nSome among us were seasoned warriors, but just as many were flabby tourists. " + "The only reason we survived is because we banded together..") + sm.sendSay("I realized what was inherently wrong with the part-time job system.") + sm.sendSay("Nothing is gained by going it alone. But working as a group, the strengths of one compensate for the " + "weaknesses of another.\r\n\r\n#bWhen people work together#k, even a pudgy sightseer can take down a " + "giant dragon.") + sm.sendSay("After a few months on the island, we managed to capture and tame enough dragons to fly the remaining " + "survivors to safety. And when I returned to civilization, I knew exactly what I had to do. \r\n\r\n" + "First, I told my boss to suck an egg, and I quit. And then, I started my #bgrand new project#k.") + sm.sendSay("And that project is, the #b#e!#n#k I'm going to help all those sad, weak, and flabby " + "Maplers reach their true potential by pairing them with other warriors!\r\n\r\nThe end result? " + "Everybody makes mad gains and gets swole like me! Oh and they'll probably level up faster.") + sm.sendSay("#h0#! Don't you want to put together a #bLegion#k of swole bros to punch dragons in the face and " + "unlock stat bonuses?\r\nIf you're interested, or have any questions, just talk to me or my squire" + " and fellow cruise survivor, Pancho Sanza.") + sm.progressMessageFont(3, 20, 20, 0, "You can now manage your Legion from the Menu.") + + + +else: + if sm.getUnionLevel() < 500 or sm.getUnionCharacterCount() < 3 or sm.getUnionRank() == 0: + sm.sendSayOkay("You're not ready to join a Legion, warrior. Legions are reserved for battle-hardened warriors with " + "a #b#eCumulative Level#n of at least 500#k, and require #r#ea minimum of 3 characters#n#k.\r\n\r\n" + "#eWhat is Cumulative Level?#n\r\n#bYour Cumulative Level is the combined level of all your " + "characters on a given world #rwho are Lv. 60+ and have completed the 2nd Job Advancement#k. " + "If you have 40 or more characters, the only your 40 highest level characters will be counted. " + "However, #rZero#k is a special case. Only your highest level Zero will be counted.") + else: + nSel = sm.sendSay("It's a fine day to bludgeon some dragons!\r\nAre you here about your #bLegion#k?\r\n\r\n" + "#L0# #b#l\r\n" + "#L1# #b#l\r\n" + "#L2# #b#k#l\r\n" + "#L3# #b#k#l") + if nSel == 0: + sm.sendSayOkay("Here's how your #eLegion#n stacks up.\r\n\r\n#eLegion Tier: #n#b#e<" + sm.getUnionRankName() + + ">#n#k\r\n#eLegion Rank: #n#b#e<" + str(sm.getUnionLevel()) + ">#n#k\r\n#eLegion-eligible " + "Characters: #n#b#e<" + str(sm.getUnionCharacterCount()) + ">#n#k\r\n#eLegion Members: #n#b#e<" + + str(sm.getUnionAssignedCharacterCount()) + " / " + str(sm.getUnionAssignedMaxCharacterCount()) + + ">#n#k") + elif nSel == 1: + if sm.sendAskYesNo("Are you here to advance your Legion #eto the next rank#n?\r\n\r\n#eCurrent Tier & Rank: " + "#n#b#e<" + sm.getUnionRankName() + ">#n#k\r\n#eNext Tier & Rank: #n#b#e<" + + str(sm.getUnionNextRankName()) + ">#n#k\r\n#eMax Legion Members after Rank-up:#n #b#e<" + + str(sm.getUnionAssignedMaxCharacterCount()) + " --> " + + str(sm.getUnionAssignedNextMaxCharacterCount()) + ">#n#k\r\n\r\nYou must meet the following " + "requirements to rank up:\r\n\r\n#e #r#e" + str(sm.getUnionLevelReq()) + "#n#k #n" + "\r\n#e #b#e#t4310229# x" + str(sm.getUnionCoinReq()) + "#n#k\r\n\r\n Do you want " + "to #eadvance#n your Legion to the next rank?"): + if sm.getQuantityOfItem(4310229) < sm.getUnionCoinReq(): + sm.sendSayOkay("You need more #rLegion Coins#k to rank up. \r\n\r\n#eLegion Coins: #n#r" + + str(sm.getQuantityOfItem(4310229)) + "#k\r\n#eRequired Coins: #n#b" + + str(sm.getUnionCoinReq()) + "#k") + elif sm.getUnionLevel() < sm.getUnionLevelReq(): + sm.sendSayOkay("Your #rCumulative Level#k must be higher to rank up.\r\n\r\n#eCumulative Level: #n#r" + + str(sm.getUnionLevel()) + "#k\r\n#eRequired Level: #n#b" + str(sm.getUnionLevelReq()) + "#k") + else: + if sm.hasItem(4310229, sm.getUnionCoinReq()): + sm.consumeItem(4310229, sm.getUnionCoinReq()) + sm.incrementUnionRank() + sm.sendSayOkay("(Claps enthusiastically)\r\n#eYour Legion has ranked up#n! We've approved you for " + "additional member slots.\r\n\r\n#eNew Rank:#n #b#e<" + sm.getUnionNextRankName() + + ">#n#k\r\n#eMax Legion Members:#n #b#e" + str(sm.getUnionAssignedMaxCharacterCount()) + + "#n#k\r\n\r\nKeep up the hard work!") + else: + sm.sendSayOkay("An error occured, please try again.") + else: + sm.sendSayOkay("Come back and talk to me when you want to take your legion to the next rank.") + + elif nSel == 2: + nSel = sm.sendSay("Did you have questions about the #bLegion System#k?\r\nWhat do you want to know?\r\n#L0# " + "#bWhat are Legions?#k#l\r\n#L1# #bCumulative Level#k#l\r\n#L3# #bAssigned Members and Raid " + "Power#k#l\r\n#L4# #bSynergy Grid and Character Blocks#k#l\r\n#L9# #bSynergy Grid presets#k#l" + "\r\n#L5# #bLegion Raids#k#l\r\n#L6# #bWeekly Coin Rankings#k#l\r\n\r\n#L100# #eNevermind.#n#l") + if nSel == 0: + sm.sendNext("#e#n\r\n\r\nA #eLegion#n is a group made up of #ball of your characters " + "on a given world who meet certain requirements#k\r\n.Legion-eligible characters are those " + "#rLv. 60 or higher#k who have\r\n#rcompleted their 2nd Job Advancement#k\r\n.#rIf you have " + "more than 40 characters within a single world,#k only the #btop 40 highest level characters" + "#k will be eligible to join your Legion\r\n\r\n.#bZero#k characters must be #rLv. 130 or " + "higher#k, and only one may be a member of a given Legion.") + sm.sendSayOkay("#e#n\r\n\r\n#eEligible Legion Members#n each possess a #bcharacter rank#k " + "that advances with their #rlevel#k\r\n\r\n.#e#n\r\n#b#eB (60) -> A (100) ->" + " S (140) -> SS (200) -> SSS (250)#n#k\r\n#e#n\r\n\r\n#b#eB (130) -> " + "A (160) -> S (180) -> SS (200) -> SSS (250)#n#k") + elif nSel == 1: + sm.sendSayOkay("#e#n\r\n\r\n#eCumulative Level#n is the #rtotal level#k of your " + "#bLegion-eligible#k characters\r\n\r\n.Increasing your Cumulative Level is one of the " + "requirements for\r\n#radvancing#k to a higher #bLegion Rank#k and #bTier#k, and increasing " + "your Legion's power as a consequence\r\n\r\n.You can check out #bLegion Rankings#k on the " + "MapleStory homepage as well.") + elif nSel == 3: + sm.sendNext("#e#n\r\n\r\n#bAssigned Members#k are Legion-eligible " + "characters placed on the #bSynergy Grid#k, and thereby assigned to the legion\r\n\r\n.Only " + "#bAssigned Members#k can participate in #rLegion Raids#k, battles against powerful opponents " + "which reward #bLegion Coins#k\r\n\r\n.Characters assigned to the Synergy Grid also activate " + "character-specific #bMember Bonuses#k based on their class, and\r\n#bGrid Bonuses#k based on " + "their occupied tiles. These stat bonuses are applied to #rall your characters within the " + "same world#k.") + sm.sendSayOkay("#e#n\r\n\r\n#bLegion Raid Power#k is calculated based on " + "the #rlevels#k and #rStar Force#k values of assigned legion members\r\n\r\n.The higher your " + "total #bRaid Power#k, the greater the damage you inflict to enemies during #rLegion Raids#k, " + "which means collecting Legion Coins more quickly.") + elif nSel == 4: + sm.sendNext("#e#n\r\n\r\nThe #bSynergy Grid#k is a grid composed of a " + "#etotal of 16 areas#n: #b8 inner#k and #r8 outer#k areas. Each area represents a #bunique " + "stat#k. Characters can be placed on the grid to provide a bonus to the stats corresponding " + "to their positions. The bonus amount is determined by the #rnumber of occupied spaces#k per " + "area\r\n.The #b8 inner areas#k can be #brearranged#k any way you like. But the\r\n#rstats " + "of the 8 areas outside#k are fixed.") + sm.sendNext("#e#n\r\n\r\nWhen you #edrag and drop#n a character to " + "the #bSynergy Grid#k, the character is displayed as a #bblock#k occupying space on the " + "grid\r\n.The #echaracter block#n's shape is determined by the character's\r\n#blevel#k and " + "#bjob type#k.") + sm.sendSayOkay("#e#n\r\n\r\nThe first character placed on the #bSynergy " + "Grid#k must occupy #bone of the 4 central areas#k\r\n\r\n.Subsequent blocks must touch a " + "previous block. Blocks may overlap, although you only receive a given square's bonus once. " + "Characters blocks may be #bflipped or rotated#k as you like, or removed by #bright-clicking#k.") + elif nSel == 9: + sm.sendNext("#e#n\r\n\r\nDifferent roles call for different stat focuses. " + "Thankfully, you can save #bmultiple Synergy Grid configurations#k and switch between them " + "as needed! Want to swap from a warrior to a magic user? Bam! New preset, no problem!") + sm.sendNext("#e#n\r\n\r\n#b#i2436884:##t2436884##k items, available for purchase " + "at the #rCoin Shop#k, are used #bactivate#k presets! You can activate #rup to 3 presets at " + "once#k These presets must be re-activated #bevery 30 days#k.") + sm.sendSayOkay("#e#n\r\n\r\nOnce you have activated a preset, #bclick on its number " + "to select it#k. Then press #eEdit Preset#k. Place your character blocks however you like, " + "then press #rSave Preset#k to save your new preset configuration!\r\nTo apply a saved " + "preset, just #bclick the its number while in Edit Mode and hit confirm.#k") + elif nSel == 5: + sm.sendNext("#e#n\r\n\r\n#bLegion Raids#k are battles where you fight alongside the " + "members of your Legion\r\n.Press the #e button#n in the Legion menu to join " + "your assigned legion members in battle.") + sm.sendNext("#e#n\r\n\r\n#b2 types of enemies#k appear inside #bLegion Raids#k. Your " + "#eprimary#n opponent is a #bHuge Dragon#k that appears in the middle of the battleground" + "\r\n\r\n.Your #bLegion members#k automatically attack the enemy, and your own character " + "can assist them\r\n\r\n.However, after the #bgreen section#k of the #rHuge Dragon's#k HP " + "gauge is gone, it generates a #bprotective shield#k that is immune to damage from your " + "active character. \r\n\r\nOnly damage by the other #bLegion members#k can defeat it. Your " + "Legion members #bcontinue#k to fight the Huge Dragon and collect\r\n#bLegion Coins#k\r\n" + "\r\n.#bLegion Coins#k are #rcalculated when you exit#k the raid. Check in periodically to " + "claim the coins they collect.") + sm.sendNext("#e#n\r\n\r\nThe #esecond#n type of foe you will face is the #bDragon Whelp#k " + "which guards the Huge Dragon. Dragon Whelps can only be injured by #rthe character you are " + "actively playing#k. Defeating them fulfills #bdaily quests#k. Sometimes a rare #bGolden " + "Wyvern#k appears when Dragon Whelps are defeated.") + sm.sendSayOkay("#e#n\r\n\r\nYou get 1 #bLegion Coin#k for every #e100 billion#n damage dealt " + "to the #bHuge Dragon#k. The total damage you have dealt #bresets daily#k\r\n\r\n.It's a " + "good idea to collect your coins regularly, as they will stop accumulating when you reach " + "the coin #rlimit#k for each Legion rank.") + elif nSel == 6: + sm.sendNext("#e#n\r\n\r\nThe #bWeekly Coin Rankings#k are calculated based on the " + "number of #bLegion Coins#k your Legion obtains every week. #bCalculations are performed " + "between Sunday 11:30 PM - Monday 12:30 AM#k.") + sm.sendSayOkay("#e#n\r\n\r\nYour ranking will appear under the #bname of the " + "character#k you\r\n#blast used to update your coin ranking#k\r\n\r\n.The following week, " + "the #rtop 100 ranked Legions#k will receive a\r\n#bspecial gift#k\r\n\r\n.It's a good idea " + "to update often, as your coins from #bdaily quests#k will also be counted.") + elif nSel == 3: + sm.sendSayOkay("TODO: Ranking") diff --git a/scripts/quest/q16018s.py b/scripts/quest/q16018s.py new file mode 100755 index 0000000..136d8d4 --- /dev/null +++ b/scripts/quest/q16018s.py @@ -0,0 +1,27 @@ +# id 16018 ([Tutorial] Runes), field 402000221 +sm.completeQuestNoCheck(parentID) +sm.playSound("DarkParty/scream2", 100) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) +sm.startQuest(34942) diff --git a/scripts/quest/q1601s.py b/scripts/quest/q1601s.py new file mode 100755 index 0000000..cfd7cfb --- /dev/null +++ b/scripts/quest/q1601s.py @@ -0,0 +1,12 @@ +# [Silent Crusade] Chance? Or Fate? + +STARLING = 9120221 +BLACK_WING_HENCHMAN = 9300470 + +sm.setSpeakerID(STARLING) +sm.sendNext("They're going to launch their attack any moment! " + "We'll all be beaten if we let it happen! Take them down!") + +for i in range(7): + sm.spawnMob(BLACK_WING_HENCHMAN, -391, 64, False) +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q16020s.py b/scripts/quest/q16020s.py new file mode 100755 index 0000000..ccf868e --- /dev/null +++ b/scripts/quest/q16020s.py @@ -0,0 +1,2 @@ +sm.addPopUpSay(9010000, 6000, "#b[Guide] Elite Monster#k\r\n\r\nThe huge monster you just defeated is an #b[Elite Monster]#k. Elite monsters appear randomly after you defeat a certain number of monsters!\r\nYou can get #buseful rewards#k from hunting #bElite Monsters#k!\r\n", "FarmSE.img/boxResult") +sm.completeQuest(16020) \ No newline at end of file diff --git a/scripts/quest/q16024s.py b/scripts/quest/q16024s.py new file mode 100755 index 0000000..2272bbf --- /dev/null +++ b/scripts/quest/q16024s.py @@ -0,0 +1,2 @@ +# id 16024 ([Tutorial] Multi KOs), field 402000610 +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q16026s.py b/scripts/quest/q16026s.py new file mode 100755 index 0000000..3e9eefe --- /dev/null +++ b/scripts/quest/q16026s.py @@ -0,0 +1,2 @@ +sm.addPopUpSay(9010000, 6000, "#b[Guide] Combo Kill#k\r\n\r\n\r\nThe orb that was just created is a #b[Combo Kill Orb]#k!\r\n\r\n#b[Combo Kill Orbs]#k are created every #b50 combos#k while hunting monsters and grant #bbonus EXP#k!\r\n", "FarmSE.img/boxResult") +sm.completeQuest(16026) \ No newline at end of file diff --git a/scripts/quest/q16059s.py b/scripts/quest/q16059s.py new file mode 100755 index 0000000..4f2154a --- /dev/null +++ b/scripts/quest/q16059s.py @@ -0,0 +1,26 @@ +# +# author bakery shutdown halp +# npc Dame Appropiation - Legion Manager +# quest [Legion] Introducing Legion +# +DAME = 9010106 +sm.setSpeakerID(DAME) +if chr.getLevel() < 60: + sm.sendSayOkay("Characters must be #bLv. 60 or higher#k to carry out Legion tasks.") +else: + sm.completeQuestNoRewards(16059) + sm.sendNext("Hello! Good to see you again.\r\nYou're over level 60 now!") + sm.setPlayerAsSpeaker() + sm.sendSay("Have we met?") + sm.setSpeakerID(DAME) + sm.sendSay("My name is #b#eMs. Appropriation#n#k. \r\nI'm working on a #rnew project#k to help Maple World heroes over #rlevel 60#k grow.") + sm.sendSay("This project lets me give out #e#rgreat rewards#k#n! \r\nShall I tell you about it?") + sm.sendSay("After a long journey, our cruise ship ran aground on an #buncharted island#k full of #rterrible dragons#k.\r\nAfter the captain and crew were dragged off into the jungle and devoured, we passengers realized that there was only one way we were getting off the island alive.") + sm.sendSay("We took up whatever arms we could find. Pots and pans, knives, and the odd broadsword from somebody's luggage. When the dragons returned to carry us off, we charged forward together and beat them to death!") + sm.sendSay("We ate well that night. And while we sat around the campfire, thinking of our fallen comrades, I reached an epiphany.\r\n\r\nSome among us were seasoned warriors, but just as many were flabby tourists. The only reason we survived is because we banded together.") + sm.sendSay("Suddenly, I knew!\r\nI figured out why we couldn't grow any stronger!") + sm.sendSay("Nothing is gained by going it alone. But working as a group, the strengths of one compensate for the weaknesses of another.\r\n\r\n#bWhen people work together#k, even a pudgy sightseer can take down a giant dragon.") + sm.sendSay("After a few months on the island, we managed to capture and tame enough dragons to fly the remaining survivors to safety. And when I returned to civilization, I knew exactly what I had to do. \r\nFirst, I told my boss to suck an egg, and I quit. Then I started my #bgrand new project#k.") + sm.sendSay("And that project is the #b#eLegion System!#n#k I'm going to help all those sad, weak, and flabby Maplers reach their true potential by pairing them with other warriors!\r\n\r\nThe end result? Everybody makes mad gains and gets swole like me! Oh and they'll probably level up faster.") + sm.sendSay("#h0#! Don't you want to put together a #b#eLegion#k#n of swole bros to punch dragons in the face and unlock stat bonuses?") + sm.sendSay("Give me just a moment. \r\nI'll make preparations to create a Legion!") \ No newline at end of file diff --git a/scripts/quest/q1607s.py b/scripts/quest/q1607s.py new file mode 100755 index 0000000..cd8fff5 --- /dev/null +++ b/scripts/quest/q1607s.py @@ -0,0 +1,26 @@ +# [Silent Crusade] Stranger at the Gate + +STARLING = 9120221 + +sm.setSpeakerID(STARLING) +sm.sendNext("What are the odds... I didn't expect to see you again.") + +sm.setPlayerAsSpeaker() +sm.sendSay("(Isn't that the woman I rescued in the Kerning City Subway?) Hey, long time no see!") + +sm.setSpeakerID(STARLING) +sm.sendSay("I came here to help out the Excavation Site, but it looks like I'm too late. Say, did you see a strange gate around here by any chance?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Yeah, I saw it when I was fighting the Commander Skeleton in the Prohibited Area. It gave me the creeps.") + +sm.setSpeakerID(STARLING) +response = sm.sendAskYesNo("Really? I'd love to see it! Mind showing me where it is?") + +if response: + sm.sendNext("All right! To the Prohibited Area!") + + sm.sendNext("Let's move") + + sm.warp(102040600, 1) + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1608s.py b/scripts/quest/q1608s.py new file mode 100755 index 0000000..f49134e --- /dev/null +++ b/scripts/quest/q1608s.py @@ -0,0 +1,14 @@ +# [Silent Crusade] Into the Gate + +STARLING = 9120221 + +sm.setSpeakerID(STARLING) +response = sm.sendAskYesNo("I bet this weird gate has something to do with all the monsters going crazy. I think we oughtta take a closer look. You ready?") + +if response: + sm.sendNext("I'm counting on you to keep me safe from the big, bad, scary monsters! Let's go!") + + sm.warpInstanceIn(931050410, 0) + sm.startQuest(parentID) +else: + sm.sendSayOkay("No?..") \ No newline at end of file diff --git a/scripts/quest/q1616e.py b/scripts/quest/q1616e.py new file mode 100755 index 0000000..76c8c01 --- /dev/null +++ b/scripts/quest/q1616e.py @@ -0,0 +1,9 @@ +# [Silent Crusade] Starling's Proposal + +BASTILLE = 9073003 + +sm.setSpeakerID(BASTILLE) +sm.sendNext("I've been expecting you! Come, let's go somewhere where we can speak in private.") + +sm.warp(931050500) +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1617s.py b/scripts/quest/q1617s.py new file mode 100755 index 0000000..81b5cd7 --- /dev/null +++ b/scripts/quest/q1617s.py @@ -0,0 +1,19 @@ +# [Silent Crusade] The Silent Crusade + +BASTILLE = 9073003 +time = 5 *60 + +sm.setSpeakerID(BASTILLE) +response = sm.sendAskYesNo("Yes, yes, I'm sure you're eager to know all about our little operation. " + "But first thing's first! I must test your aptitude. " + "Are you ready to join the Silent Crusade? Well, are you?") + +if response: + sm.sendNext("We shall see. Your test is simple enough: Defeat my puppy, Coco. Shall we begin?") + + sm.warpInstanceIn(931050510) + sm.setInstanceTime(time, 931050500) + sm.startQuest(parentID) + +else: + sm.sendSayOkay("No?...") \ No newline at end of file diff --git a/scripts/quest/q1619s.py b/scripts/quest/q1619s.py new file mode 100755 index 0000000..4cf6ab1 --- /dev/null +++ b/scripts/quest/q1619s.py @@ -0,0 +1,12 @@ +# [Silent Crusade] Nihal Desert Dispatch + +STARLING = 9120221 + +sm.setSpeakerID(STARLING) +sm.sendNext("I've heard reports of a Mystic Gate near Nihal Desert. Meet #bLora#k at the #rRoyal Cactus Desert#k. He'll fill you in.") + +response = sm.sendAskYesNo("Please go now.") + +if response: + sm.sendNext("Good luck, young Crusader!") + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1622e.py b/scripts/quest/q1622e.py new file mode 100755 index 0000000..b6bef56 --- /dev/null +++ b/scripts/quest/q1622e.py @@ -0,0 +1,8 @@ +# [Silent Crusade] Unpleasant Meeting + +CROW = 9073002 + +sm.setSpeakerID(CROW) +sm.sendNext("You're the new guy?") + +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1628e.py b/scripts/quest/q1628e.py new file mode 100755 index 0000000..5603aaf --- /dev/null +++ b/scripts/quest/q1628e.py @@ -0,0 +1,11 @@ +# [Silent Crusade] Explosive Research + +CROW = 9073002 + +sm.setSpeakerID(CROW) +sm.sendNext("That was close. Stop looking at me like that.") + +sm.sendSay("Sorry. Didn't mean to... Why does this type of stuff always seem to happen to me?") + +sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/end1") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1629s.py b/scripts/quest/q1629s.py new file mode 100755 index 0000000..abaf2f0 --- /dev/null +++ b/scripts/quest/q1629s.py @@ -0,0 +1,20 @@ +# [Silent Crusade] Dark Energy Rising + +STARLING = 9120221 +CRANKY_FOREST = 240010200 + +sm.setSpeakerID(STARLING) +sm.sendNext("Long time no see. I heard about your work in Magatia. Crow was really impressed, and that impressed me. " + "He's a hard one to please, but I'm sure I don't have to tell you that.") + +response = sm.sendAskYesNo("Just like in Magatia, Mystic Gates have been popping up in Leafre as well. To make matters worse, dark energy is seeping out of them. " + "We need to handle this fast, and you're just the person to lead the charge. " + "Ready to begin?") + +if response: + sm.sendNext("The Mystic Gate near the Herb area is really making a mess of things. Head over to the #r#m"+ str(CRANKY_FOREST) +"##k and do something about it.") + sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/start2") + sm.startQuest(parentID) + +else: + sm.sendSayOkay("Let me know when you are ready") \ No newline at end of file diff --git a/scripts/quest/q1637e.py b/scripts/quest/q1637e.py new file mode 100755 index 0000000..8c01821 --- /dev/null +++ b/scripts/quest/q1637e.py @@ -0,0 +1,9 @@ +# [Silent Cruade] Progress Report + +BASTILLE = 9073003 + +sm.setSpeakerID(BASTILLE) +sm.sendNext("Did you find anything in Leafre? Come, let's discuss this somewhere more private.") + +sm.warp(931050500) +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1637s.py b/scripts/quest/q1637s.py new file mode 100755 index 0000000..69c417e --- /dev/null +++ b/scripts/quest/q1637s.py @@ -0,0 +1,18 @@ +# [Silent Cruade] Progress Report + +STARLING = 9120221 + +sm.setSpeakerID(STARLING) +sm.sendNext("The Mystic Gates are connected to the Black Mage somehow. I'm sure of it! " + "The gates seem to control nearby monsters and drain the life right out of anyone who gets near them. " + "But why? At any rate, I need to tell Bastille about all this. Actually, why don't you tell him for me? " + "I'll follow you when I'm done here.") + +response = sm.sendAskYesNo("All right! I'll send you straight to Edelstein!") + +if response: + sm.warp(310000000) + sm.startQuest(parentID) + +else: + sm.sendSayOkay("Let me know when you're ready to be warped.") \ No newline at end of file diff --git a/scripts/quest/q1638e.py b/scripts/quest/q1638e.py new file mode 100755 index 0000000..381a472 --- /dev/null +++ b/scripts/quest/q1638e.py @@ -0,0 +1,23 @@ +# [Silent Crusade] Arkarium, the Guardian of Time + +CROW = 9073002 +BASTILLE = 9073003 + +sm.setSpeakerID(CROW) +sm.sendNext("I think Arkarium's back! Someone saw him at the Temple of Time, though just for a moment...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Who's Arkarium?") + +sm.setSpeakerID(BASTILLE) +sm.sendSay("You don't know THE Arkarium? He was one of the Black Mage's Commanders. After the Black Mage was sealed, he disappeared.") + +sm.setPlayerAsSpeaker() +sm.sendSay("If one of the Black Mage's right-hand guys is back, does that mean the Black Mage is back, too?") + +sm.setSpeakerID(BASTILLE) +sm.sendSay("I'm not sure. But something is amiss in Maple World, that much is certain. " + "The return of Arkarium, the appearance of the Mystic Gates... Evil forces are in motion.") + +sm.completeQuest(parentID) +sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/end2") diff --git a/scripts/quest/q1639e.py b/scripts/quest/q1639e.py new file mode 100755 index 0000000..ca823d7 --- /dev/null +++ b/scripts/quest/q1639e.py @@ -0,0 +1,11 @@ +# [Silent Crusade] A Crack in Time + +BASTILLE = 9073003 + +sm.setSpeakerID(BASTILLE) +sm.sendNext("The puzzle is falling together and I think Arkarium is the final piece. " + "If he's messing with time, we're all in a lot of trouble. He could change the entire timeline! " + "He could make us forget that we ever knew each other and we'd never even know it! " + "This isn't looking good...") + +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1644s.py b/scripts/quest/q1644s.py new file mode 100755 index 0000000..2307635 --- /dev/null +++ b/scripts/quest/q1644s.py @@ -0,0 +1,6 @@ +medal = 1142351 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1645s.py b/scripts/quest/q1645s.py new file mode 100755 index 0000000..1478ba8 --- /dev/null +++ b/scripts/quest/q1645s.py @@ -0,0 +1,6 @@ +medal = 1142352 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1646s.py b/scripts/quest/q1646s.py new file mode 100755 index 0000000..799fe21 --- /dev/null +++ b/scripts/quest/q1646s.py @@ -0,0 +1,6 @@ +medal = 1142353 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1647s.py b/scripts/quest/q1647s.py new file mode 100755 index 0000000..99070ff --- /dev/null +++ b/scripts/quest/q1647s.py @@ -0,0 +1,6 @@ +medal = 1142354 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1653s.py b/scripts/quest/q1653s.py new file mode 100755 index 0000000..ce58995 --- /dev/null +++ b/scripts/quest/q1653s.py @@ -0,0 +1,19 @@ +# [Silent Crusade] Special Delivery + +STARLING = 9120221 +HIDEOUT = 931050500 + +sm.setPlayerAsSpeaker() +sm.sendNext("(You come across a letter, but you're not sure where it came from.)\r\n" + "Hm, this symbol... This letter must be from the Silent Crusade. Might as well open it.") + +sm.setSpeakerID(STARLING) +sm.sendSay("If you're reading this. I need you to return to our hideout as soon as you can. I'll fill you in when you get here.\r\n\r\n" + "-Starling") + +sm.sendSay("P.S. - I've attached transportation to the hideout. Don't lose it, or you'll have to return the long way.") + +sm.startQuest(parentID) +sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/start3") +if not sm.getFieldID() == HIDEOUT: + sm.warp(HIDEOUT) \ No newline at end of file diff --git a/scripts/quest/q1663e.py b/scripts/quest/q1663e.py new file mode 100755 index 0000000..630fb1f --- /dev/null +++ b/scripts/quest/q1663e.py @@ -0,0 +1,16 @@ +# [Silent Crusade] A Veteran Hunter + +BASTILLE = 9073003 +KRAG = 9073005 + +sm.setSpeakerID(BASTILLE) +sm.sendNext("#p"+ str(KRAG) +"# probably mentioned something about a reward? Well, this is for you, #h0#, for investigating the Mystic Gates so effectively.") + +sm.sendSay("You already received your Rank A hunter title from the UI, right? " + "If not, open up the Silent Crusade UI and grab it. " + "I've included a little something extra for you too...") + +sm.sendSay("See you at your next mission. Take care.") + +sm.completeQuest(parentID) +sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/end3") \ No newline at end of file diff --git a/scripts/quest/q1664s.py b/scripts/quest/q1664s.py new file mode 100755 index 0000000..95f948e --- /dev/null +++ b/scripts/quest/q1664s.py @@ -0,0 +1,27 @@ +# [Silent Crusade] An Emergency Summons + +STARLING = 9120221 +LORA = 9073004 +DANGEROUS_CAVE = 230040410 +TICKET = 2030027 + +sm.setPlayerAsSpeaker() +sm.sendNext("(The symbol on the letter you've obtained looks familiar.)\r\n" + "A new mission, perhaps?") + +sm.setSpeakerID(STARLING) +sm.sendSay("From #b#p"+ str(LORA) +"##k at the #r#m"+ str(DANGEROUS_CAVE) +"##k.") + +sm.setPlayerAsSpeaker() +response = sm.sendAskAccept("Something super urgent has come up. What to do, what to do?") + +if response: + sm.sendNext("The ticket's in here. Use it to visit #p"+ str(LORA) +"#.") + + if not sm.canHold(TICKET): + sm.sendSayOkay("Let me make some space in my inventory.") + sm.dispose() + + sm.startQuest(parentID) + sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/start4") + sm.giveItem(TICKET) \ No newline at end of file diff --git a/scripts/quest/q1674e.py b/scripts/quest/q1674e.py new file mode 100755 index 0000000..ce50010 --- /dev/null +++ b/scripts/quest/q1674e.py @@ -0,0 +1,25 @@ +# [Silent Crusade] A Superior Hunter + +BASTILLE = 9073003 +CRUSADER_COIN = 4310029 + +sm.setSpeakerID(BASTILLE) +sm.sendNext("I've been waiting! Did you meet the so-called 'legend'? Tell me about him.") + +sm.setPlayerAsSpeaker() +sm.sendSay("There's not much to say. He keeps to himself.") + +sm.setSpeakerID(BASTILLE) +sm.sendSay("Too bad. I know next to nothing about the guy. Anyway, nice work, #h0#. You're now a #bRank S Hunter#k.") + +sm.sendSay("I only know of three people who have that title. " + "Be proud of yourself. Oh, and here's a little something from me.") + +if not sm.canHold(CRUSADER_COIN): + sm.sendSayOkay("Please make some space in your inventory.") + sm.dispose() + +sm.completeQuest(parentID) +sm.giveItem(CRUSADER_COIN, 100) +sm.showFieldEffect("Map/Effect.img/crossHunter/chapter/end4") +sm.sendNext("I'll see you the next time something pops up. Until then, take care.") diff --git a/scripts/quest/q16880s.py b/scripts/quest/q16880s.py new file mode 100755 index 0000000..865e39a --- /dev/null +++ b/scripts/quest/q16880s.py @@ -0,0 +1,14 @@ +sm.setSpeakerID(9010000) +sm.sendNext("Hello, #b#e#h0##n#k!\r\nWelcome to #e#bMaple World#k#n! I'd like to give you a little help!") +sm.sendSay("Do you know what a #i2030059# #e#bReturn Scroll - Nearest Town#k#n is?") +sm.sendSay("#e#bReturn Scroll - Nearest Town#k#n is an item that sends you to the#r#e nearest town#k#n from your current location. Use it when you're out hunting and ready to return to town. Then you can save those footsies for fighting! Pretty useful, huh?") +sm.sendSay("But don't forget#e#r one#k#n Return Scroll - Nearest Town will be consumed#e#r immediately upon use#k#n.\r\nAlso, you can't use it in#e#r places where Teleport is not allowed#k#n.") +sm.sendSay("Last, you can buy#b Return Scrolls - Nearest Town#k#n from a#b#e Merchant#n#k in the nearest town.") + +if sm.sendAskYesNo("Now I'm ready to hand it over.\r\nDo you want #i2030059##e#b Return Scroll - Nearest Town x10#k#n now?"): + sm.giveItem(2030059, 10) + sm.startQuest(parentID) + sm.completeQuestNoRewards(parentID) + sm.sendSayOkay("I just gave you #i2030059##e#b Return Scroll - Nearest Town x10#k#n.\r\nHappy travels, #e#b#h0##k#n!") +else: + sm.sendSayOkay("If you want to accept the #i2030059##e#b Return Scroll - Nearest Town#k#n, please click the light bulb overhead.") \ No newline at end of file diff --git a/scripts/quest/q16909s.py b/scripts/quest/q16909s.py new file mode 100755 index 0000000..f92bc97 --- /dev/null +++ b/scripts/quest/q16909s.py @@ -0,0 +1,17 @@ +# id 16909 (Gain 2 additional levels for every 1 level up until Lv. 200 during the Tera Burning Project!), field 701220100 +sm.setSpeakerID(9010000) # Maple Administrator +sm.sendNext("Hello, #e#h0##n! Ready to level up in a flash? The #e#rTera Burning Project#n#k is going on right now. You know what that means, two bonus levels for each that you earn!") +sm.sendSay("All #bnew characters#k are eligible to participate, as long as they were created during the Tera Burning Project period, which ends on #b07/23/2019 11:59 PM#k. You can only have #e1 Tera Burning character per account#k though.") +sm.sendSay("Your Tera Burning character will gain #b#e2 additional levels#n#k for each level that they earn, starting from Level 10.\r\n#r(Effect ends at Level 200.)#k") +sm.sendSay("With the #badditional perks that only apply to Tera Burning Characters#k during the Tera Burning Event Period, leveling up beyond Lv. 200 will be easier.") +sm.sendSay("#eFirst Perk:\r\nYou can undertake your #n#b5th Job: Call of the Erdas#k quest without having to complete the prerequisite quests.\r\n#r(Note: Playing through the 5th Job: Call of the Erdas quest in this way will not automatically clear any prerequisite quest steps you may currently have in progress.)") +sm.sendSay("#eSecond Perk:#n\r\nEach time you gain a level in the #bLv. 200 - 209 range#k, you'll get #b#t1712001:# x10#k.\r\n\r\n#eThird Perk:#n\r\nEach time you gain a level in the #bLv. 210 - 220 range#k, you'll get #b#t2438141:# x10#k.") +sm.sendPrev("You'll also receive a gift to help you grow exponentially, so become an #rUnrelenting Flame#k and start leveling!\r\n\r\n#eGift List#n\r\n\r\n#i2439178:##b #t2439178#\r\n#i3700530:##b#t3700530#\r\n#i2630120:##b #t2630120#\r\n#i2630121:##b #t2630121#\r\n#i2439179:##b #t2439179#\r\n#i2433444:# #t2433444#\r\n#i2433509:# #t2433509# (Included in Legendary Cryptic Chest)\r\n#i2433510:# #t2433510# (Included in Legendary Cryptic Chest)\r\n#i1004404:# #t1004404# (Included in Legendary Cryptic Chest)\r\n#i1102799:# #t1102799# (Included in Legendary Cryptic Chest)\r\n#i1052893:# #t1052893# (Included in Legendary Cryptic Chest)\r\n#i2439170:# #t2439170# (Included in Legendary Cryptic Chest)\r\n#i2435742:# #t2435742#") +sm.createQuestWithQRValue(63311, "combo=395") +sm.createQuestWithQRValue(63311, "combo=396") +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) diff --git a/scripts/quest/q17003e.py b/scripts/quest/q17003e.py new file mode 100755 index 0000000..547cb96 --- /dev/null +++ b/scripts/quest/q17003e.py @@ -0,0 +1,30 @@ +# Created by MechAviv +# Quest ID :: 17003 +# [Commerci] Get Rich Quick + +sm.setSpeakerID(9390220) +sm.sendNext("Welcome to Commerci, the place where pockets are sewn with gold thread and buttons are made of gold nuggets. In other words, we're rich.") + + +sm.setSpeakerID(9390220) +sm.sendSay("To start trading, just sign your life away on this contract. Then you'll be one of us. Whoo.") + + +sm.setSpeakerID(9390220) +if sm.sendAskYesNo("You want to be rich, right?"): + sm.setSpeakerID(9390220) + sm.removeEscapeButton() + sm.sendNext("Ha! Great choice, #h0#! You won't regret this. Wait... Where'd the contract go?") + + + # Unhandled Message [INC_COMMITMENT_MESSAGE] Packet: 09 01 00 00 00 00 + sm.completeQuest(17003) + # [GUILD_RESULT] [74 F9 DA 01 00 8E 02 00 00 03 00 00 00 BA 00 00 00 ] + # [GUILD_RESULT] [6D F9 DA 01 00 1E 4F 85 00 8E 02 00 00 19 00 00 00 B2 01 00 00 70 49 CC 55 38 ED D4 01 ] + # Update Quest Record EX | Quest ID: [18418] | Data: B=1347 +else: + sm.setSpeakerID(9390220) + sm.sendNext("Well, the offer stands. Come back whenever you like.") + + + sm.startQuest(17003) \ No newline at end of file diff --git a/scripts/quest/q17003s.py b/scripts/quest/q17003s.py new file mode 100755 index 0000000..a98523a --- /dev/null +++ b/scripts/quest/q17003s.py @@ -0,0 +1,21 @@ +# Created by MechAviv +# Quest ID :: 17003 +# [Commerci] Get Rich Quick + +sm.setSpeakerID(9010010) +sm.sendNext("So how do you like Commerci, #h0#? You know, I actually heard something recently...") + + +sm.setSpeakerID(9010010) +sm.sendSay("I heard you could make gold while trading on Commerci, then use that gold to buy stuff.") + + +sm.setSpeakerID(9010010) +sm.sendSay("They say you have to talk to Maestra Fiametta in the largest building there to get started. Can you go find out more info for me? ") + + +sm.setSpeakerID(9010010) +sm.sendSay("Hey, I want to be rich too, you know?") + + +sm.startQuest(17003) \ No newline at end of file diff --git a/scripts/quest/q17004s.py b/scripts/quest/q17004s.py new file mode 100755 index 0000000..46a0af6 --- /dev/null +++ b/scripts/quest/q17004s.py @@ -0,0 +1,29 @@ +# Created by MechAviv +# Quest ID :: 17004 +# [Commerci] Making a Buck + +sm.setSpeakerID(9390220) +sm.sendNext("That's the very last contract we had. Aren't you lucky? Now, I'd better explain a few things.") + + +sm.setSpeakerID(9390220) +sm.sendSay("You have no money, right? Of course, you don't. You wouldn't be here if you were rich. Here's a welcome gift for joining the trading elite, #h0#. It contains a Cargo Skiff and some funds to get you started.") + + +# Inventory Operation with 1 operations. +# Unhandled Message [INC_COMMITMENT_MESSAGE] Packet: 09 01 00 00 00 00 +sm.startQuest(17004) +sm.completeQuest(17004) +sm.setSpeakerID(9390220) +sm.removeEscapeButton() +sm.sendNext("You need gold to trade, so don't spend it all. Unless you want to quit trading for good.") + + +sm.setSpeakerID(9390220) +sm.removeEscapeButton() +sm.sendSay("Learn more about your ship by clicking the icon on the lower left-hand corner on your character window. Before you know it, you'll be able to afford a bigger boat. ") + + +sm.setSpeakerID(9390220) +sm.removeEscapeButton() +sm.sendPrev("Talk to me again when you're ready to start your very first voyage.") diff --git a/scripts/quest/q17005e.py b/scripts/quest/q17005e.py new file mode 100755 index 0000000..45d887f --- /dev/null +++ b/scripts/quest/q17005e.py @@ -0,0 +1,6 @@ +# id 17005 ([Commerci] Bon Voyage 1), field 865000001 +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.setParam(1) +sm.sendNext("You've completed your first voyage, and my hair still looks perfect. All in all, I'd say it was a tremendous success. I will join you permanently!") +sm.sendSay("Speak to me when you are ready to set sail once more. ") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q17005s.py b/scripts/quest/q17005s.py new file mode 100755 index 0000000..f2e70f1 --- /dev/null +++ b/scripts/quest/q17005s.py @@ -0,0 +1,30 @@ +# Created by MechAviv +# Quest ID :: 17005 +# [Commerci] Bon Voyage 1 +from net.swordie.ms.enums import UIType + + +sm.setSpeakerID(9390220) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendSayNextIllustration("Each time you start a voyage, you have to select a destination.", 9390220, True) + + +# Update Quest Record EX | Quest ID: [17009] | Data: step=1 +sm.openUI(UIType.UI_SAILING) +sm.setSpeakerID(9390220) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendSayIllustration("The blue locations are the ones available to you. ", 9390220, True) + + +sm.setSpeakerID(9390220) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendSayIllustration("The only place you can go right now is [Dolce]. But trade more, and you'll unlock new places.", 9390220, True) + + +sm.setSpeakerID(9390220) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendSayPrevIllustration("Mouseover each destination to get more information about it. Now, how about heading over to [Dolce]?", 9390220, True) \ No newline at end of file diff --git a/scripts/quest/q17006e.py b/scripts/quest/q17006e.py new file mode 100755 index 0000000..dfee672 --- /dev/null +++ b/scripts/quest/q17006e.py @@ -0,0 +1,6 @@ +# id 17006 ([Commerci] Bon Voyage 2), field 865000001 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.setParam(1) +sm.sendNext("You've been given 1 Commerci Denaro for the previous voyage. ") +sm.sendPrev("Don't forget to visit me to get your voyage rewards. ") diff --git a/scripts/quest/q17006s.py b/scripts/quest/q17006s.py new file mode 100755 index 0000000..bcce442 --- /dev/null +++ b/scripts/quest/q17006s.py @@ -0,0 +1,7 @@ +# id 17006 ([Commerci] Bon Voyage 2), field 865000001 +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.setParam(5) +sm.createQuestWithQRValue(17009, "step=2") +sm.openUI(189) +sm.setSpeakerType(3) +sm.warp(865000900) diff --git a/scripts/quest/q17007e.py b/scripts/quest/q17007e.py new file mode 100755 index 0000000..4c324fe --- /dev/null +++ b/scripts/quest/q17007e.py @@ -0,0 +1,23 @@ +# id 17007 ([Commerci] Bon Voyage 3), field 865000001 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.setParam(1) +sm.sendNext("You've been given 1 Commerci Denaro for the previous voyage. ") +sm.sendSay("You now know everything you need to know to grow rich. Keep at it, and before you know it, you'll be a billionaire. Ha.") +sm.sendPrev("I look forward to the day you join the ranks of Commerci's most wealthy. ") +sm.setParam(0) +res = sm.sendNext("Hello, #e#b#h0##k#n. Welcome to the Commerci Trade Center. \r\n#b\r\n#L0#Enter trade#l#b\r\n#L1#Stimulus System#l#b\r\n#L2#Move to the Merchant Union trade location#l#b\r\n#L3#The vessel's energy will be recharged manually.#l#b\r\n#L4#The goods will be manually restocked.#l") +sm.sendNext("You've earned #r#e30458#k#n EXP through your trades. You also have #b#e11#k#n Commerci Denaros and #d#e8544#k#n Mesos waiting for you.") +res = sm.sendAskYesNo("Do you want your voyage earnings right now?") +sm.createQuestWithQRValue(17011, "") +sm.createQuestWithQRValue(17012, "") +sm.createQuestWithQRValue(17013, "") +sm.createQuestWithQRValue(17014, "") +sm.createQuestWithQRValue(17015, "") +sm.createQuestWithQRValue(17023, "end=0") +sm.sendNext("There you go, allotment complete. ") +sm.openUI(189) +sm.createQuestWithQRValue(17011, "") +sm.createQuestWithQRValue(17011, "C=10") +sm.createQuestWithQRValue(17011, "C=10;S=0") +sm.warp(865000101) diff --git a/scripts/quest/q17007s.py b/scripts/quest/q17007s.py new file mode 100755 index 0000000..2357108 --- /dev/null +++ b/scripts/quest/q17007s.py @@ -0,0 +1,7 @@ +# id 17007 ([Commerci] Bon Voyage 3), field 865000001 +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.setParam(5) +sm.createQuestWithQRValue(17009, "step=3") +sm.openUI(189) +sm.setSpeakerType(3) +sm.warp(865000100) diff --git a/scripts/quest/q17019e.py b/scripts/quest/q17019e.py new file mode 100755 index 0000000..89f6e56 --- /dev/null +++ b/scripts/quest/q17019e.py @@ -0,0 +1,21 @@ +# id 17019 ([Commerci Trade] Ten Trades for Luna), field 865000001 +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.setParam(1) +sm.sendNext("I see you've completed your voyage to Dolce. ") +sm.sendSay("You've unlocked a new destination. Open your Voyage Map and you'll see that Luna is now selectable.") +sm.sendSay("Trade more and we'll all be rich. Everybody wins.") +sm.setParam(0) +res = sm.sendNext("Hello, #e#b#h0##k#n. Welcome to the Commerci Trade Center. \r\n#b\r\n#L0#Enter trade#l#b\r\n#L1#Stimulus System#l#b\r\n#L2#Move to the Merchant Union trade location#l#b\r\n#L3#The vessel's energy will be recharged manually.#l#b\r\n#L4#The goods will be manually restocked.#l") +sm.sendNext("You've earned #r#e1267167#k#n EXP through your trades. You also have #b#e12#k#n Commerci Denaros and #d#e325638#k#n Mesos waiting for you.") +res = sm.sendAskYesNo("Do you want your voyage earnings right now?") +sm.createQuestWithQRValue(17011, "") +sm.createQuestWithQRValue(17012, "") +sm.createQuestWithQRValue(17013, "") +sm.createQuestWithQRValue(17014, "") +sm.createQuestWithQRValue(17015, "") +sm.sendNext("There you go, allotment complete. ") +sm.openUI(189) +sm.createQuestWithQRValue(17011, "") +sm.createQuestWithQRValue(17011, "C=15") +sm.createQuestWithQRValue(17011, "C=15;S=0") +sm.warp(865000101) diff --git a/scripts/quest/q17509s.py b/scripts/quest/q17509s.py new file mode 100755 index 0000000..1db5577 --- /dev/null +++ b/scripts/quest/q17509s.py @@ -0,0 +1,4 @@ +# id 17509 ([Tynerum] Putting Out the Fires!), field 863100005 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendSayOkay("I need to find #m863000001#.") diff --git a/scripts/quest/q17510s.py b/scripts/quest/q17510s.py new file mode 100755 index 0000000..4d5c6c9 --- /dev/null +++ b/scripts/quest/q17510s.py @@ -0,0 +1,4 @@ +# id 17510 ([Tynerum] Ragtime Jamboree), field 863000001 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendSayOkay("I should be heading toward #m863000002#.") diff --git a/scripts/quest/q17511s.py b/scripts/quest/q17511s.py new file mode 100755 index 0000000..2441bea --- /dev/null +++ b/scripts/quest/q17511s.py @@ -0,0 +1,4 @@ +# id 17511 ([Tynerum] Monstrous Overcrowding!), field 863000002 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendSayOkay("I should be heading toward #m863000004#.") diff --git a/scripts/quest/q17513s.py b/scripts/quest/q17513s.py new file mode 100755 index 0000000..0958824 --- /dev/null +++ b/scripts/quest/q17513s.py @@ -0,0 +1,10 @@ +# id 17513 ([Tynerum]Hey, Hey, Jay-Jay), field 863000016 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("It's a dead end. There's nowhere to go...") +sm.sendSay("Who knows what's beyond that illusion...") +sm.setParam(16) +res = sm.sendAskYesNo("Better go talk to #b#p2134008##d for now.\r\n(Click Yes to teleport.)") +sm.startQuest(parentID) +sm.startQuest(17420) +sm.warp(863100005) diff --git a/scripts/quest/q17515e.py b/scripts/quest/q17515e.py new file mode 100755 index 0000000..8a39263 --- /dev/null +++ b/scripts/quest/q17515e.py @@ -0,0 +1,4 @@ +# id 17515 ([Tynerum] Jay-Jay's Secret Exit), field 863100000 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendSayOkay("I should be heading toward #m863100006#.") diff --git a/scripts/quest/q17516e.py b/scripts/quest/q17516e.py new file mode 100755 index 0000000..987b14a --- /dev/null +++ b/scripts/quest/q17516e.py @@ -0,0 +1,6 @@ +# id 17516 ([Tynerum] Crimsonwhat?), field 863100100 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("Well, she's gone.") +sm.sendSay("Something weird is going on here. I'd better keep looking around.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q17516s.py b/scripts/quest/q17516s.py new file mode 100755 index 0000000..488b93c --- /dev/null +++ b/scripts/quest/q17516s.py @@ -0,0 +1,16 @@ +# id 17516 ([Tynerum] Crimsonwhat?), field 863100100 +sm.setSpeakerID(9390102) # Unknown Device +sm.setParam(17) +sm.sendNext("This is just like the Shadow Veil Forest, where the demons lived.") +sm.sendSay("I see... something.") +sm.setParam(0) +sm.sendSay("Get out, peon.") +sm.setParam(17) +sm.sendSay("Nobody ever invites me in, and I'm such a nice house guest. Who are you?") +sm.setParam(0) +sm.sendSay("How dare you set foot in my forest?") +sm.setParam(17) +sm.sendSay("This place is abandoned. And I asked you a question. Who are you?") +sm.setParam(0) +sm.sendSay("Leave.") +sm.startQuest(parentID) diff --git a/scripts/quest/q17518e.py b/scripts/quest/q17518e.py new file mode 100755 index 0000000..93e4783 --- /dev/null +++ b/scripts/quest/q17518e.py @@ -0,0 +1,7 @@ +# id 17518 ([Tynerum] A Brush with Hilla), field 863100104 +sm.setSpeakerID(9390100) # Hilla +sm.sendNext("You broke through my servants? Not bad.") +sm.sendSay("Unfortunately for you, I'm already done with my business here.") +sm.sendSay("You sure you have time to chase me? Shouldn't you be making your bed or something?") +sm.sendSay("You'll eventually find out. Ciao!") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q17518s.py b/scripts/quest/q17518s.py new file mode 100755 index 0000000..0b2d60a --- /dev/null +++ b/scripts/quest/q17518s.py @@ -0,0 +1,22 @@ +# id 17518 ([Tynerum] A Brush with Hilla), field 863100104 +sm.setSpeakerID(9390100) # Hilla +sm.sendNext("So, you came.") +sm.setParam(17) +sm.sendSay("...Hilla?") +sm.setParam(0) +sm.sendSay("I told you to go away, but you wouldn't listen. ") +sm.setParam(17) +sm.sendSay("YOU're the one behind all this nonsense!") +sm.setParam(0) +sm.sendSay("What of it?") +sm.setParam(17) +sm.sendSay("What are you scheming?!") +sm.setParam(0) +sm.sendSay("Scheming? I'm not scheming. I'm working on getting what I want.") +sm.setParam(17) +sm.sendSay("I'll stop whatever horrible ritual you've got cooked up!") +sm.setParam(0) +res = sm.sendAskYesNo("You really don't have to beg me to destroy you. I'll happily oblige.") +sm.sendNext("Are you ready to join my undead army? It'll only take a minute.") +sm.startQuest(parentID) +sm.warp(863100105) diff --git a/scripts/quest/q17524e.py b/scripts/quest/q17524e.py new file mode 100755 index 0000000..1b0e88d --- /dev/null +++ b/scripts/quest/q17524e.py @@ -0,0 +1,8 @@ +# id 17524 ([Gollux] The Cleansing), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("I didn't think you were strong enough to handle this at first, but I was wrong.") +sm.sendSay("Gollux has been subdued. The heart on this altar reflects its mood. ") +sm.sendSay("But the corruption is not so easily stymied. The creature will awaken tomorrow, ready to walk the land again.") +sm.sendSay("However, a temporary relief is better than no relief at all. ") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Check your inventory for your Gollux Coins and a title befitting a guardian of Tynerum.") diff --git a/scripts/quest/q17524s.py b/scripts/quest/q17524s.py new file mode 100755 index 0000000..613d0ae --- /dev/null +++ b/scripts/quest/q17524s.py @@ -0,0 +1,9 @@ +# id 17524 ([Gollux] The Cleansing), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("This is the Heart Tree once stood, before it was Gollux.") +sm.sendSay("I created this place in the hopes that it would return to its former self one day. But the corruption has spread so far... I'm not sure it can ever truly return.") +sm.sendSay("Gollux is a colossal being, but it is much like us. If its head falls, the rest of it will follow. It will not be easy though.") +sm.sendSay("You could go directly for its head if you wanted, but it would not be advisable. If one were to attack its arms and legs first, an assault on his head might be less dangerous. ") +res = sm.sendAskYesNo("Will you help me?") +sm.startQuest(parentID) +sm.sendNext("Thank you.") diff --git a/scripts/quest/q17525e.py b/scripts/quest/q17525e.py new file mode 100755 index 0000000..5732318 --- /dev/null +++ b/scripts/quest/q17525e.py @@ -0,0 +1,6 @@ +# id 17525 ([Gollux] The Right Shoulder), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("Good work on the right shoulder. You shoudl be able to move to the next phase now.") +sm.sendSay("Here's a little something to celebrate your valor. Please go ahead.") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Check your inventory for the item.") diff --git a/scripts/quest/q17525s.py b/scripts/quest/q17525s.py new file mode 100755 index 0000000..dadaed4 --- /dev/null +++ b/scripts/quest/q17525s.py @@ -0,0 +1,8 @@ +# id 17525 ([Gollux] The Right Shoulder), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("You can greatly reduce Gollux's strength if you neutralize its head last.") +sm.sendSay("Dodging its hands on the way up to its head won't be easy.") +sm.sendSay("You can weaken the beast by damaging its right shoulder. Its defensive aura and abilities should fall, and it will not be able to use its right arm when you attack its head.") +res = sm.sendAskYesNo("What do you think? Do you want to give it a try?") +sm.startQuest(parentID) +sm.sendNext("Neutralize its right shoulder, and you will be one step closer to success.") diff --git a/scripts/quest/q17526e.py b/scripts/quest/q17526e.py new file mode 100755 index 0000000..06f430e --- /dev/null +++ b/scripts/quest/q17526e.py @@ -0,0 +1,6 @@ +# id 17526 ([Gollux] The Left Shoulder), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("The loss of its left arm should make this much easier. Perhaps the day we can restore Gollux to the peaceful creature it once was is nigh. You can move on to the next phase now.") +sm.sendSay("Here's a little something to celebrate your valor. Please go ahead.") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Check your inventory for the item.") diff --git a/scripts/quest/q17526s.py b/scripts/quest/q17526s.py new file mode 100755 index 0000000..0a2a4f9 --- /dev/null +++ b/scripts/quest/q17526s.py @@ -0,0 +1,8 @@ +# id 17526 ([Gollux] The Left Shoulder), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("You can greatly reduce Gollux's strength if you neutralize its head last.") +sm.sendSay("Dodging its hands on the way up to its head won't be easy.") +sm.sendSay("You can weaken the beast by damaging its left shoulder. Its defensive aura and abilities should fall, and it will not be able to use its left arm when you attack its head.") +res = sm.sendAskYesNo("What do you think? Do you want to give it a try?") +sm.startQuest(parentID) +sm.sendNext("Neutralize its left shoulder, and you will be one step closer to success.") diff --git a/scripts/quest/q17527e.py b/scripts/quest/q17527e.py new file mode 100755 index 0000000..f511a50 --- /dev/null +++ b/scripts/quest/q17527e.py @@ -0,0 +1,6 @@ +# id 17527 ([Gollux] The Abdomen), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("Well done. Now that you've neutralized the threat in Gollux's abdomen, only one fight remains. Let us talk strategy.") +sm.sendSay("I have prepared a gift to celebrate your strength.") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Check your inventory for the item.") diff --git a/scripts/quest/q17527s.py b/scripts/quest/q17527s.py new file mode 100755 index 0000000..4533cff --- /dev/null +++ b/scripts/quest/q17527s.py @@ -0,0 +1,8 @@ +# id 17527 ([Gollux] The Abdomen), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("You can greatly reduce Gollux's strength if you neutralize its head last.") +sm.sendSay("Dodging its hands on the way up to its head won't be easy.") +sm.sendSay("You can greatly weaken Gollux by neutralizing its abdomen. The aura that protects it will weaken when its shoulders are broken, and it the core in its abdomen will not be able to inflict you with status ailments when you assault its head.") +res = sm.sendAskYesNo("What do you think? Do you want to give it a try?") +sm.startQuest(parentID) +sm.sendNext("Damaging Gollux's abdomen has put you one step closer to victory.") diff --git a/scripts/quest/q17528e.py b/scripts/quest/q17528e.py new file mode 100755 index 0000000..df02d61 --- /dev/null +++ b/scripts/quest/q17528e.py @@ -0,0 +1,6 @@ +# id 17528 ([Gollux] The Head), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("You've done it. Gollux has been subdued!") +sm.sendSay("I have prepared a gift to celebrate your strength.") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Check your inventory for the item.") diff --git a/scripts/quest/q17528s.py b/scripts/quest/q17528s.py new file mode 100755 index 0000000..aa3f4cb --- /dev/null +++ b/scripts/quest/q17528s.py @@ -0,0 +1,8 @@ +# id 17528 ([Gollux] The Head), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("As I told you before, Gollux's head must be neutralized to quell the beast.") +sm.sendSay("Dodging its hands on the way up to its head won't be easy.") +sm.sendSay("You can greatly weaken Gollux by neutralizing its abdomen. The aura that protects it will weaken when its shoulders are broken, and it the core in its abdomen will not be able to inflict you with status ailments when you assault its head.") +res = sm.sendAskYesNo("What do you think? Do you want to give it a try?") +sm.startQuest(parentID) +sm.sendNext("If you stun the head, we might be able to revert Gollux back to its original form.") diff --git a/scripts/quest/q17529e.py b/scripts/quest/q17529e.py new file mode 100755 index 0000000..e2141b8 --- /dev/null +++ b/scripts/quest/q17529e.py @@ -0,0 +1,4 @@ +# id 17529 ([Gollux] The Smart Way), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("Amazing.") +sm.sendSay("I have prepared a gift to celebrate your strength.") diff --git a/scripts/quest/q17529s.py b/scripts/quest/q17529s.py new file mode 100755 index 0000000..baa3c11 --- /dev/null +++ b/scripts/quest/q17529s.py @@ -0,0 +1,9 @@ +# id 17529 ([Gollux] The Smart Way), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("As I told you before, you can subdue Gollux by damaging its head.") +sm.sendSay("The three major weak points will make that battle easier. The shoulders and abdomen seem to be the core of its strength.") +res = sm.sendAskYesNo("I'll give you a mission. Damage all three of Gollux's main power sources, then attack its head. Do you want to give it a try?") +sm.startQuest(parentID) +sm.createQuestWithQRValue(17533, "ing=1") +sm.createQuestWithQRValue(17533, "ing=1;1=0") +sm.sendNext("Good. Attack all of Gollux's weak spots, then return to me.") diff --git a/scripts/quest/q17530s.py b/scripts/quest/q17530s.py new file mode 100755 index 0000000..999fa47 --- /dev/null +++ b/scripts/quest/q17530s.py @@ -0,0 +1,8 @@ +# id 17530 ([Gollux] The Rewarding Way), field 863010000 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("A display of strength may prove effective. Do you feel up to the task?") +res = sm.sendAskYesNo("It will be more dangerous, but if you can defeat Gollux's head with only 2 of the weak points broken, the rewards could be greater.") +sm.startQuest(parentID) +sm.createQuestWithQRValue(17533, "ing=1;1=1") +sm.createQuestWithQRValue(17533, "ing=1;1=0") +sm.sendNext("A brave choice. Defeat Gollux with only 2 of the weak points broken, then return to me.") diff --git a/scripts/quest/q17534s.py b/scripts/quest/q17534s.py new file mode 100755 index 0000000..2f9fb53 --- /dev/null +++ b/scripts/quest/q17534s.py @@ -0,0 +1,9 @@ +# id 17534 ([Gollux] The Face of Fear), field 863000100 +sm.setSpeakerID(9390120) # Heart Tree Guardian +sm.sendNext("Now, I'll give you a chance to face Gollux in all its power.") +sm.sendSay("I can give you up to 3 Entrance Keys per day.") +res = sm.sendAskYesNo("You now have 0 Entrance Key(s). Do you want all 3 Entrance Keys?") +sm.startQuest(17535) +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.sendSayOkay("Check your inventory.") diff --git a/scripts/quest/q17600e.py b/scripts/quest/q17600e.py new file mode 100755 index 0000000..ce08fc6 --- /dev/null +++ b/scripts/quest/q17600e.py @@ -0,0 +1,5 @@ +# [Commerci Republic] Neinheart's call +sm.setSpeakerID(1064026) # Neinheart +sm.sendSayOkay("The Empress wishes to speak to you.") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17600s.py b/scripts/quest/q17600s.py new file mode 100755 index 0000000..f5a2c52 --- /dev/null +++ b/scripts/quest/q17600s.py @@ -0,0 +1,16 @@ +# [Commerci Republic] Neinheart's Call + +sm.setSpeakerID(1064026) # Neinheart +response = sm.sendAskYesNo("Ah good, I've managed to reach you. The Empress has been asking for you. Could you come to Ereve?\r\n" + "#b(You will be moved to Ereve if you accept.)") + + +if response: + sm.sendNext("I will be waiting for you.") +else: + sm.sendSayOkay("Let me know once you are ready.") + sm.dispose() + +sm.startQuestNoCheck(parentID) +sm.warp(130000000, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q17601s.py b/scripts/quest/q17601s.py new file mode 100755 index 0000000..5abebf8 --- /dev/null +++ b/scripts/quest/q17601s.py @@ -0,0 +1,26 @@ +# [Commerci Republic] In the Name of the Empress + +sm.setSpeakerID(1064023) # Cygnus +sm.sendNext("Ah #b#h0##k you've come! My apologies for bringing you here on such short notice. Tell me, have you heard of the land of Commerci, by any chance?") +if not sm.hasQuest(parentID): + sm.startQuest(parentID) + + +sm.sendNext("Commerci was once a small fishing village, and they had little in the way of dealings with the rest of the world. " + "It seems that time has been good to Commerci, as they have begun sending large trading vessels around the globe," + "and have re-branded themselves the #bCommerci Republic#k.") + +sm.sendNext("As empress, I fear that such rapid growth from Commerci may have adverse effects on the rest of our world. " + "If we can earn their friendship, they may become a powerful ally in time. " + "However, if Commerci were to side with Black Mage... they could become a formidable threat.") + +response = sm.sendAskYesNo("#h0#, we need your help. Please act as my envoy to Commerci, and bring them a message: " + "The kingdom of Ereve seeks a peaceful and mutually beneficial relationship with Commerci. " + "Will you please do this for me? Neinheart will explain the mission.") + +if response: + sm.sendNext("I know you won't let me down.") + sm.completeQuest(parentID) +else: + sm.sendSayOkay("Please, let me know when you are willing to accept the mission. but make up your mind soon, time is of the essence.") +sm.dispose() diff --git a/scripts/quest/q17602e.py b/scripts/quest/q17602e.py new file mode 100755 index 0000000..dd92af1 --- /dev/null +++ b/scripts/quest/q17602e.py @@ -0,0 +1,8 @@ +# [Commerci Republic] Neinheart's Request + +sm.setSpeakerID(9390200) # Parbell +sm.sendNext("Well butter mah biscuits! You must be that #h0# I hears about from the long-haired feller. " + "Didn't yet pappy even learn you not t' keep an old man a' waitin'?") + +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17602s.py b/scripts/quest/q17602s.py new file mode 100755 index 0000000..dbdccdf --- /dev/null +++ b/scripts/quest/q17602s.py @@ -0,0 +1,23 @@ +# [Commerci Republic] Neinheart's Request + +sm.setSpeakerID(1064026) # Neinheart +sm.sendNext("According to intelligence reports, the people of Commerci are fiercely independent. " + "The Empress means well, but in their eyes, any outreach might be thought an attempt to draw them under our influence. " + "This would destroy any possibility of a relationship with Commerci, and I can't allow that.") + + +sm.sendNext("To ensure there are no misunderstandings, we must approach this matter with the utmost care. " + "We should gain their trust before we relay the Empress' proposal. " + "This is part of why the Empress has chosen you rather than a royal messenger. " + "Please do not fail the Empress.") + +response = sm.sendAskYesNo("I've arranged your passage to Commerci. Seek out an explorer named #b'Parbell'#k in Lith Harbor. " + "Let me know when you are ready to depart for Lith Harbor. " + "\r\n#b(You will be moved to Lith Harbor if you accept.)#k") + +if response: + sm.warp(104000000, 0) + sm.startQuest(parentID) +else: + sm.sendSayOkay("Let me know once you are ready to depart.") +sm.dispose() diff --git a/scripts/quest/q17603s.py b/scripts/quest/q17603s.py new file mode 100755 index 0000000..ffb1962 --- /dev/null +++ b/scripts/quest/q17603s.py @@ -0,0 +1,64 @@ +# [Commerci Republic] Parbell, World's 'Greatest' Explorer + +sm.setSpeakerID(9390200) # Parbell +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Excuse me, are you Parbell the Explorer?") + +sm.setSpeakerID(9390200) # Parbell +sm.sendNext("What d'yuh means, don't yuh recognize me? Gaze 'pon this hansom visage! " + "Haven't ya heard about ol'Parbell, the Greatest 'Splorer in the whole o' Maple World!? " + "Sheesh, young'uns these days!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("(He seems a little upset.)") + +sm.setSpeakerID(9390200) # Parbell +sm.sendNext("So, I hears yuhs seeking' passage to the good ol' 'Public o' Commerci...\r\nThat about right?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Y-Yessir, I's am... I mean, that's right. Why do you ask?") + +sm.setSpeakerID(9390200) # Parbell +sm.sendNext("Hows yuh plannin' to get there?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("E-Excuse me...? I was... Neinheart, said you would have a ship ready for me, uh, Mr. Great Explorer, sir...") + +sm.setSpeakerID(9390200) # Parbell +sm.sendNext("Oh, Parbell the Great, done readied a ship for you. There's no doubtin' that. " + "Question is, how yuhs plan on getting on that ship?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I... uh.. By walking? With my feet?") + +sm.setSpeakerID(9390200) # Parbell +sm.sendNext("Y'uns about as smart as a bag of hammers, ain't yuhs? " + "Let ol' Parbell make it all simple-like for y'un. I gots a ship. " + "You wants to get on that ship. I done readied mah ship like I's told. " + "#eTraditionally at this point some form o' currency get s'changed#n.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("(Are you kidding me? Neinheart expects me to pay for the trip myself? He's in for a stern talking-to...)") + +sm.sendNext("Y-You know I've been sent by the Empress, right?") + +sm.setSpeakerID(9390200) # Parbell +sm.sendNext("Empress? She ain't MAH Empress. Shucks, this here's why I never deal with no greenhorns... " + "You gots you way with words, I gives yuh that. " + "Well, get on mah ship, a promise is a promise. " + "I'll deliver you to Commerci all safe 'n cozy-like, but remember yer offer. " + "Words carry weight.") + +response = sm.sendAskYesNo("I'll be collectin' on that promise, 'fore long. " + "When all's said 'n done, y'uns shold feel plum tickled that I, Parbell the Great, am showin' yuhs the way! " + "\r\nReady to set sail?\r\n" + "#b(You will be moved to Commerci if you accept.)") + +if response: + sm.warp(865010200, 0) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.startQuest(17608) # [Commerci Republic] After a Pleasant Voyage +else: + sm.sendSayOkay("Dun't yer let a ol' man waiting!") +sm.dispose() diff --git a/scripts/quest/q17608e.py b/scripts/quest/q17608e.py new file mode 100755 index 0000000..a37d55b --- /dev/null +++ b/scripts/quest/q17608e.py @@ -0,0 +1,43 @@ +# [Commerci Republic] After a Pleasant Voyage + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Excuse me... Hi. Could I ask you a question?") + +sm.setSpeakerID(9390201) # Mayor Berry +sm.sendNext("Dear me, you look about as healthy as a gutted guppy! Oh I don't mean no insult. " + "You run into a bit of weather out there? " + "You should thank your lucky stars you landed here in one piece!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I would like to know where I landed, where am I?") + +sm.setSpeakerID(9390201) # Mayor Berry +sm.sendNext("Oh, you landed in the Commerci Republic, a gorgeous place!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I landed in the Commerci Republic? This is the Commerci Republic?") + +sm.setSpeakerID(9390201) # Mayor Berry +sm.sendNext("Yes, that's correct. You landed in the Commerci Republic. As a matter of fact, I'm the mayor of the Commerci Republic.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(This little fishing village is the Commerci Republic? I guess there's no truth to the rumors.)") + +sm.setSpeakerID(9390201) # Mayor Berry +sm.sendNext("You seem quite strong, having survived that ship wreckage. " + "Once you've gotten your energy back, you reckon you could help me out with some things? " + "I would certainly appreciate it") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Really? But we've just met.. you're going to trust me just like that?") + +sm.setSpeakerID(9390201) # Mayor Berry +sm.sendNext("With age comes wisdom, youngster. I can tell you's a good person just by usin' these old peepers. Now enjoy yourself for now! " + "Let me know if there's anything you need.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(...He seems nice enough, This person claims to be the Mayor, " + "so I guess I could deliver the Empress's message to him. " + "I'll wait to make sure he really trusts me before I bring up the peace treaty.") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17610s.py b/scripts/quest/q17610s.py new file mode 100755 index 0000000..436dbcf --- /dev/null +++ b/scripts/quest/q17610s.py @@ -0,0 +1,23 @@ +# [Commerci Republic] Berry Concerned 1 + +sm.setSpeakerID(9390201) # Mayor Berry +sm.sendNext("Hm...") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Mayor Berry, are you all right?") + +sm.setSpeakerID(9390201) # Mayor Berry +sm.sendNext("I'm worried about my fish... There are these monsters that were stealing my fish the other day..") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I'll take care of those monster for you, Mayor.") + +sm.setSpeakerID(9390201) # Mayor Berry +response = sm.sendAskYesNo("Will you really?") + +if response == 1: + sm.sendNext("If you could eliminate 100 #r#o9390807##k, I would be very grateful.") + sm.startQuest(parentID) +else: + sm.sendSayOkay("Oh, alright.. that's too bad.") +sm.dispose() diff --git a/scripts/quest/q17612s.py b/scripts/quest/q17612s.py new file mode 100755 index 0000000..c94ea7b --- /dev/null +++ b/scripts/quest/q17612s.py @@ -0,0 +1,103 @@ +# [Commerci Republic] The Problem with Presumptions + +MAYOR_BERRY = 9390201 + +sm.setPlayerAsSpeaker() +sm.sendNext("Excuse me, Mayor? A-are you busy?") + +sm.setSpeakerID(MAYOR_BERRY) +sm.sendNext("You stopped by at just the right time, kiddo. " + "It'd been a fishful day, and that's the best kinda day, if you ask me.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Oh, great! That's... I need to tell you something.") + +sm.setSpeakerID(MAYOR_BERRY) +selection = sm.sendNext("Well, go on and spit it out!\r\n" + "\r\n" + "#L0##b(I should rethink this.)#l\r\n" + "#L1##b(I've got to tell him the truth.)#l") + + +sm.setPlayerAsSpeaker() +if selection == 0: + sm.sendNext("Oh, I just wanted to tell you what a beautiful day it is") + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("Oh, ye. It truly is a gorgeous day, today") +elif selection == 1: + sm.sendNext("The truth is... I lied to you. The sea didn't bring me here...") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("Well, unless you've got a set of wings curled up somewhere, " + "how'd you get here? And what do you mean you lied?") + + sm.setPlayerAsSpeaker() + sm.sendNext("I came across the northern barrier.") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("What kinda hogwash is that? Nobody's been across the northern barrier in a hound's age. " + "Ain't nothin' but demons and evil up there anyway. " + "You sayin' you're some kinda demon?!") + + sm.setPlayerAsSpeaker() + sm.sendNext("No, no... the demons are... Look, I'm from a place called Maple World, and I guess technically you are too. " + "I traveled to Dawnveil from a different continent, far away.") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("Well that's just plum silly. Another continent? " + "I was sure this sea just went on forever... " + "If this is all true, how'd you get across that barrier?") + + sm.setPlayerAsSpeaker() + sm.sendNext("The barrier is breaking down... Where I came from, no one had even heard of Dawnveil, " + "and our leaders feared it might be a danger to the rest of Maple World.") + + sm.sendNext("I was sent here to explore, investigate and to see if our two peoples could have a peace.") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("Well, I'll be a toad on a hot plate. I don't much care for bein' on the other end of a lie, " + "but I can tell you wasn't tryin' to cause no trouble.") + + sm.setPlayerAsSpeaker() + sm.sendNext("Thanks... I'm really sorry.") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("Let's let bygones go on down bygone way. Can I help you with your plan?") + + sm.setPlayerAsSpeaker() + sm.sendNext("Maybe you can... Your people really seem to be about the same as ours, " + "but I think the fear of what's beyond the barrier could stir up trouble. " + "They might perceive me as a threat...") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("Well, people ain't always kind to the ones that come from afar, " + "and changing minds one by one will get you nowhere fast. I've got me another plan.") + + sm.setPlayerAsSpeaker() + sm.sendNext("Yes?") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("Go on down to the docks. " + "There's a ship there that belongs to the Prime Minister of #bSan Commerci#k, a fella named #e#bGilberto Daniella#k#n. " + "His boy, #e#bLeon#k#n, is the captain of the ship. " + "They're good folk, and they hold a lot of sway.") + + sm.sendNext("You show those Daniellas you're worth trustin', and you might just have yourself a strong supporter in the richest nation of Dawnveil.") + + sm.setPlayerAsSpeaker() + sm.sendNext("You're a lot smarter than I took you for. I'm sorry for underestimating you. " + "I don't know how I can thank you...") + + sm.setSpeakerID(MAYOR_BERRY) + sm.sendNext("You've done right by me and mine. You just do what's best for all our people, " + "and I'll call that thanks enough. Now go on, get, before I have to get my broom and shoo you off! " + "Find #e#bLeon Daniella#k#n in the guest house on the east end of town.") + + sm.sendNext("And take this! It ain't much, but think of it as a souvenir!") + + sm.sendNext("Don't get shy, just take it!") + + sm.startQuest(parentID) + sm.giveItem(1003984) # Commerci Hat + sm.completeQuest(parentID) + sm.dispose() diff --git a/scripts/quest/q17613e.py b/scripts/quest/q17613e.py new file mode 100755 index 0000000..9ad92f9 --- /dev/null +++ b/scripts/quest/q17613e.py @@ -0,0 +1,50 @@ +# [Commerci Republic] The Minister's Son + +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("I'm... fine, you... meddling dumb-dumb!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(He's not very polite...)#k\r\n" + "Er, you're Leon Daniella, right? You all right? Those cats really did a number on you.") + +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("You idiot, I... said I was-- Hold up.. You know my name? " + "Are you that noble I sent money to via that foreign bank account? " + "You promised me a present!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Um, no. I just heard those cats say your name. I was actually on my way to see you, though.") + +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("Whoa, whoa, whoa.. Are you from the #b#eHeaven Empire#k#n? Not cool.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("The what empire? Look, I'm not from around here. " + "I'm from Maple World, across the barrier. " + "I'm here to establish good relations for Empress Cygnus.") + +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("So you ARE from the Heaven Empire? Wait.. did you say barrier? Stay away from me, demon! Hyah! Hyah!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(Demon? Ah, they must think demons live on the other side of the barrier.)\r\b#k" + "I'm not a demon. Um, look, I can stand in sunlight. And the garlic you're throwing at me is having no effect.") + +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("Oh, whew. You're right! Haha! That was a close one.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(I can't believe that worked...)\r\n#k" + "I'm from a world very similar to yours. A place called #e#rMaple World#k#n.") + +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("In that case, you can be my best friend sidekick. " + "Pat yourself on the back. " + "Leon Daniella doesn't befriend just anyone! " + "Now you pat my back, and I'll pat yours. " + "There, doesn't that feel nice?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(Great, I'm becoming vast friends with Leon.)") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17613s.py b/scripts/quest/q17613s.py new file mode 100755 index 0000000..920ef29 --- /dev/null +++ b/scripts/quest/q17613s.py @@ -0,0 +1,10 @@ +# [Commerci Republic] The Minister's Son + +if sm.getFieldID() == 865010200: + sm.setSpeakerID(9390201) # Mayor Berry + sm.sendSayOkay("Find #e#bLeon Daniella#k#n in the guest house on the east end of this village.") + sm.dispose() +else: + sm.setSpeakerID(9390202) # Leon Daniella + sm.sendSayOkay("Oi") + sm.dispose() diff --git a/scripts/quest/q17614s.py b/scripts/quest/q17614s.py new file mode 100755 index 0000000..de7bf74 --- /dev/null +++ b/scripts/quest/q17614s.py @@ -0,0 +1,25 @@ +# [Commerci Republic] Ciao, Untril Next Time +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("Good! Now I leave. I just came to Berry to get fish from Berry. Haha! They have the same name! Berry, Berry, Berry, Berry") + + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Do you have to leave right this second? I wanted to ask my new best pal some questions.") + +sm.setSpeakerID(9390202) # Leon Daniella +sm.sendNext("Oh, shoot! I have to catch a ship. Shoot! Hey! Why don't you come to #bSan Commerci#k? You can meet my dad! He's really cool.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Berry did suggest I visit.") + +sm.setSpeakerID(9390202) # Leon Daniella +response = sm.sendAskYesNo("Yeah! Just go to San Commerci and wait for me. I have a couple of voyages to make, but don't leave until I get back. Promise?") + +if response: + sm.sendSayOkay("Okay, go east from the town, follow the coastal road, and you'll get to San Commerci. It's a single road, but I get lost on it all the time. \r\n" + "See you in #e#bSan Commerci#k#n. Remember, you promised!") + sm.startQuest(parentID) + sm.warpInstanceOut(865010200, 0) +else: + sm.sendSayOkay("You're not gonna promise your best friend a simple thing?") +sm.dispose() diff --git a/scripts/quest/q17615s.py b/scripts/quest/q17615s.py new file mode 100755 index 0000000..1d532f6 --- /dev/null +++ b/scripts/quest/q17615s.py @@ -0,0 +1,24 @@ +# [Commerci Republic] The Trade Kingdom + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Excuse me.") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Yes?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Could you point me toward the Daniella merchant Union Office?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("I happen to be a Daniella Merchant myself. If you want a job, you can talk to me right here.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I don't need a job. I'm looking for #e#bGilberto Daniella#k#n.") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Ha, do you think the Prime Minister has time for you? He's a busy man. Now, off with you.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(Hmm, now what?)") +sm.completeQuestNoRewards(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q17616e.py b/scripts/quest/q17616e.py new file mode 100755 index 0000000..71fdeb1 --- /dev/null +++ b/scripts/quest/q17616e.py @@ -0,0 +1,21 @@ +# [Commerci Republic] Stolem Items + +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.sendNext("Yes? What do you want?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("What can you tell me about the items that were stolen from the Daniella Merchant Union?") + +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.sendNext("Not much to tell. A few days ago, a Daniella merchant deposited some items. A little while ago, he picked them up.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Are you sure it was the same guy?") + +sm.setSpeakerID(9390220) # Maestra Fiametta +sm.sendNext("Are you sure you have a brain in your skull? Yes, it was the same guy.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("No need to bite my head off.") +sm.completeQuest(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q17616s.py b/scripts/quest/q17616s.py new file mode 100755 index 0000000..621ae39 --- /dev/null +++ b/scripts/quest/q17616s.py @@ -0,0 +1,32 @@ +# [Commerci Republic] Stolen Items + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("What to do, what to do? They'll blame me for sure!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Huh? What's wrong?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("You again? I don't have time right now. The items I left at the Trading Post have dissapeared!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("They were stolen?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Yes, and do you know who the prime suspect is?.. Me! They say they saw someone in the same clothing as me pick them up..") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Wait, your items were stolen... and you're the main suspect? How does that make sense?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Someone must've copied my fabulous fashion sense and then taken the goods, posing as me. " + "But who's going to believe that? I'm going to lose my job, and I can't give up my sailor's wardrobe, I just can't.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +response = sm.sendAskYesNo("#b(This seems like my chance to get in good with the Daniella merchant Union!)") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +if response: + sm.sendNext("#b(I'll head to the Trading Post to investigate further.)") + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17617s.py b/scripts/quest/q17617s.py new file mode 100755 index 0000000..7d2669c --- /dev/null +++ b/scripts/quest/q17617s.py @@ -0,0 +1,38 @@ +# [Commerci Republic] Missing Goods + +MAESTRA_FIAMETTA = 9390220 + +sm.setSpeakerID(MAESTRA_FIAMETTA) +sm.sendNext("The only odd thing about it was...") + + +sm.setPlayerAsSpeaker() +response = sm.sendAskYesNo("#b(Aha! I knew there had to be something!)") + +if response: + sm.setPlayerAsSpeaker() + sm.sendNext("Yes?") + + sm.setSpeakerID(MAESTRA_FIAMETTA) + sm.sendNext("The items Tepes deposited were obviously packed for sea, but Tepes brought a cart with him when he picked them up, " + "Usually the marchants move them straight to the ships...") + + sm.setPlayerAsSpeaker() + sm.sendNext("Did you see which way he went?") + + sm.setSpeakerID(MAESTRA_FIAMETTA) + sm.sendNext("Listen, kid. I don't keep track of every sailor who walks by. But there was a fish cart accident between here and Berry, so the western path is blocked.") + + sm.setSpeakerID(MAESTRA_FIAMETTA) + sm.sendNext("And if he didn't go west, he probably went east, towards the canals") + + sm.setPlayerAsSpeaker() + sm.sendNext("Alright, thank you so much for the information.") + + sm.setSpeakerID(MAESTRA_FIAMETTA) + sm.sendNext("Whatever, kid. Just don't mess with my trading post.") + sm.startQuest(parentID) + #sm.completeQuest(parentID) + #sm.chatScript("Return the stolen goods to Tepes in San Commerci") + #sm.chatScript("You found the impostor at the eastern canals, when confronted, a Robed Lady appeared. But she fled.") + #sm.startQuest(17619) # [Commerci Republic] Come Back Here! \ No newline at end of file diff --git a/scripts/quest/q17618e.py b/scripts/quest/q17618e.py new file mode 100755 index 0000000..c97f401 --- /dev/null +++ b/scripts/quest/q17618e.py @@ -0,0 +1,80 @@ +# Created by MechAviv +# Quest ID :: 17618 +# [Commerci Republic] The Lady in Robes + +sm.setIntroBoxChat(9390204) +sm.sendNext("I can't believe it. The last of my money, down the drain. I don't suppose they'll give me a refund.") + + +sm.setSpeakerID(9390204) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.sendSay("Now hand over those goods!") + + +sm.setSpeakerID(9390204) +sm.removeEscapeButton() +sm.setBoxChat() +sm.setColor(1) +sm.sendSay("Sigh. Why are you getting in my way? ") + + +sm.setSpeakerID(9390204) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.sendSay("I have my reasons. Besides, stealing is bad!") + + +sm.setSpeakerID(9390204) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.sendSay("So what'll it be? Are you going to hand over the goods, or will we have to do this the hard way?") + + +sm.setSpeakerID(9390204) +sm.removeEscapeButton() +sm.setBoxChat() +sm.setColor(1) +sm.sendSay("Hmph. Stealing is bad, but bullying is okay? Fine, take your stupid trade goods. I'm out of here.") + + +# [NPC_VIEW_OR_HIDE] [E0 B3 53 00 00 00 ] +sm.setSpeakerID(9390204) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.sendSay("That was easy. Sorta. Better get these back to town.") + + +sm.setSpeakerID(9390204) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.flipDialoguePlayerAsSpeaker() +sm.setBoxChat() +sm.setColor(1) +sm.sendSay("Who was it that lost these items? Was his name... Tepes?") + + +# Unhandled Message [INC_COMMITMENT_MESSAGE] Packet: 09 01 00 00 00 00 +sm.completeQuest(17618) +sm.startQuest(17619) +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 9A 3A E0 01 00 00 00 00 FF 00 00 00 00 +sm.giveExp(5530255) +# [GUILD_RESULT] [74 F9 DA 01 00 8B 02 00 00 03 00 00 00 BA 00 00 00 ] +# [GUILD_RESULT] [6D F9 DA 01 00 1E 4F 85 00 8B 02 00 00 16 00 00 00 B2 01 00 00 C0 CE 20 27 38 ED D4 01 ] +# Update Quest Record EX | Quest ID: [18418] | Data: B=1344 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 EB 0A 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 E7 0A 00 00 FF 00 00 00 00 +# [SUMMONED_REMOVED] [1E 4F 85 00 2E 37 26 01 02 ] +sm.warpInstanceOut(865000000, 10) diff --git a/scripts/quest/q17618s.py b/scripts/quest/q17618s.py new file mode 100755 index 0000000..10d0b92 --- /dev/null +++ b/scripts/quest/q17618s.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Quest ID :: 17618 +# [Commerci Republic] The Lady in Robes + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +if sm.sendAskYesNo("#b(Okay, so there were a lot of goods that were stolen, and the thief was working alone... Chances are, he couldn't have gotten far. I can catch him!)#k"): + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.setSpeakerType(3) + sm.sendNext("Okay, the opposite direction of Berry... To the east I go!") + + + sm.startQuest(17618) + # Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 + # [SUMMONED_REMOVED] [1E 4F 85 00 2B 37 26 01 02 ] + sm.warpInstanceIn(865020001, 1) +else: + sm.setSpeakerID(0) + sm.removeEscapeButton() + sm.flipDialoguePlayerAsSpeaker() + sm.setSpeakerType(3) + sm.sendSayOkay("Too much pressure! I'm just not ready yet!") \ No newline at end of file diff --git a/scripts/quest/q17619e.py b/scripts/quest/q17619e.py new file mode 100755 index 0000000..c1bc949 --- /dev/null +++ b/scripts/quest/q17619e.py @@ -0,0 +1,39 @@ +# [Commerci Republic] Come Back Here! + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("I can't believe it. All those items... stolen! And the iron I ordered was in there too") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Hey Tepes!") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("And the white carnation buttons I was going to sew on my vest were in there too... I can't believe they're all gone.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(Aww, he looks seriously depressed.)") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Hellooooo I got your items back. See?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("And the silver ribbons I ordered to tie my-- Wait, what? You got my items! Oh, happy day! How'd you do it?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("It was easy. I tracked down the thief.") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Incredible. That'll teach me to judge people based on their clothing.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(Hey! What did he mean by that?!)") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Anyway. I owe you one, my friend. Anything you need, I'll make it happen. I swear it.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Are you serious?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("On my very life. Whatever you need.") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17620e.py b/scripts/quest/q17620e.py new file mode 100755 index 0000000..70924fb --- /dev/null +++ b/scripts/quest/q17620e.py @@ -0,0 +1,16 @@ +# [Commerci Republic] Eye for an Eye + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Hi Gilberto!") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Er, Yes. I am Gilberto Daniella. Do I know you?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("You sure don't! But my name is...") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("I'm sorry, but I'm quite busy. If you'll make an appointment. I can meet with you later.") +sm.completeQuest(parentID) +sm.warp(865090002, 1) # Hidden Daniella Merchant Union Office +sm.dispose() diff --git a/scripts/quest/q17620s.py b/scripts/quest/q17620s.py new file mode 100755 index 0000000..c928562 --- /dev/null +++ b/scripts/quest/q17620s.py @@ -0,0 +1,36 @@ +# [Commerci Republic] Eye for an Eye + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Now, what dream can I make come true for you? Remember, anything in the entire world is yours for the asking.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Can you introduce me to Gilberto Daniella?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("I offer to make your wildest dreams coe true, and that is what you want?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Yup, I really want to meet Gilberto Daniella.") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("I heard you the first time, it's just...") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("What?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Well, I thought you'd ask for something difficult, like borrowing my hat.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("That was next on my list.") + +sm.setSpeakerID(9390225) # Tepes +response = sm.sendAskYesNo("To get to the Daniella merchant Union Office, head east from this spot, past the town fountain. " + "It's the white building with golden ornamentation.") + +if response: + sm.setSpeakerID(9390225) # Tepes + sm.sendNext("I'll let them know you're on your way. Be polite when you talk to Gilberto. " + "He is quite powerful in Commerci.") + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17621s.py b/scripts/quest/q17621s.py new file mode 100755 index 0000000..d714335 --- /dev/null +++ b/scripts/quest/q17621s.py @@ -0,0 +1,99 @@ +# [Commerci Republic] Gilberto Daniella + +sm.startQuest(parentID) +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Time is money, and my time is worth a million mesos a minute. Now, please make an appointment.") + +sm.setSpeakerID(9390225) # Tepes +sm.spawnNpc(9390225, -104, 75) # Spawn Tepes +sm.sendNext("Actually, sir, this young Explorer got our stolen goods back") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Excuse me? Our goods were stolen?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Er, you see, sir, these cutthroat bandits stole the goods right out of my hands. " + "I fought back and even fore my pants, but it was this young Explorer who saved me. " + "I'll... be on my way now.") +sm.removeNpc(9390225) # Remove Tepes + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(Tepes is a pretty convincing liar.)") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Ah, well, in that case, I thank you for your help, young Explorer.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Aw, shucks. Tepes is exaggerating.. a lot.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("It is a pleasure to meet you. I am #e#bGilberto Daniella#k#n, " + "prime minister of the Commerci Republic and owner of the Daniella Merchant Union") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("The pleasure is mine. I'm #h0#. I'm, um, just a traveler, " + "traveling through Dawnveil. You know, just traveling.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Ah, to be young and free again! But why did you want to see me?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("um... Well... #b(Okay, I'm going to have to word this carefully, so he doesn't think I'm a devil.)") + +sm.spawnNpc(9390256, 21, 75) # Spawn Leon Daniella +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Father! I'm hooooooome!") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("How many times do I need to remind you to call me 'prime minister' in public, Leon?") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Sorry pops, I mean prime minister.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Hey #h0#, you're here as promised! Great!") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("You two know each other? This young traveler retrieved some stolen goods for us... " + "Or defeated some bandits? I'm still not clear on the story.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Way to go, #h0#, buddy! First you saved me in Berry, like the excellent sidekick you are, " + "and now you're impressing my daddy!") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("You exhibit magnificent skills for a mere traveler, #h0#. The union is in your debt.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("A mere traveler? but #h0# is from beyond the barrier.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("#h0# is... what?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("(Yikes!) Er, yeah, I TRAVELED here from a place called Maple World, which just so happens to be beyond the barrier...") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Just a moment ago, you clearly said you were a DAWNVEIL traveler...") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Here's the truth, prime minister. The barrier between our worlds is growing weaker by the day, which made is possible for me to pass through it.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("And why are you here?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Like Leon said, I'm an ambassador of peace, here on behalf of Empress Cygnus.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("An embassador of peace, you say?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Yes. When the barrier inetivably collapses, I hope the people of Commerci and Maple World can get along amicably") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("I see. Well then, you've traveled a long way. Please make yourself at home and rest. The Union is still in your debt.") +sm.removeNpc(9390256) # Remove Leon Daniella +sm.completeQuest(parentID) +sm.warp(865000002, 0) +sm.dispose() diff --git a/scripts/quest/q17622s.py b/scripts/quest/q17622s.py new file mode 100755 index 0000000..0aaa822 --- /dev/null +++ b/scripts/quest/q17622s.py @@ -0,0 +1,22 @@ +# [Commerci Republic] Gilberto's Reaction + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Did your dad look upset to you? I don't think he trusts me...") +sm.startQuest(parentID) + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Nah, he was smiling beneath his mustache, I promise. That's how he always looks at me, too. " + "So, how long are you staying in town for?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("A while, it seems. I have a feeling this won't be easy.\r\n" + "#b(No thanks to you, Leon.)") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Check out the union while you're around. That's what a good sidekick would do! Now, go rest up.") +sm.completeQuest(parentID) +sm.warp(865000002, 2) # Warp player in the same map, but to a different portal +sm.scriptChat("Whilst sleeping, you overheard Leon and Gilberto talking about you, it seems that Gilberto does not trust you yet.") +sm.startQuest(17623) # [Commerci Republic] Another Outsider +sm.completeQuest(17623) # [Commerci Republic] Another Outsider +sm.dispose() diff --git a/scripts/quest/q17623s.py b/scripts/quest/q17623s.py new file mode 100755 index 0000000..b1423a8 --- /dev/null +++ b/scripts/quest/q17623s.py @@ -0,0 +1,4 @@ +# [Commerci Republic] Another Outsider +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17624s.py b/scripts/quest/q17624s.py new file mode 100755 index 0000000..73c5f1f --- /dev/null +++ b/scripts/quest/q17624s.py @@ -0,0 +1,35 @@ +# [Commerci Republic] Fish out of Water + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Sigh..") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(They seem worried.)#k\r\n" + "Morning Leon. Good morning Gilberto.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Oh, #h0#, my sidekick. You're awake.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(How should I approach this...)#k\r\n" + "Did you sleep well Leon? Is something the matter? Gilberto, you look worried as well.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("The Commerci Republic is known for it's commerce. The sea trade is great, but the land trade is weak.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Huh?") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Sigh, allow me. Leon still has to work on this speaking skills.") + +sm.sendNext("The #bDelfinos#k are responsible! They prey on our good merchants from the San Commerci canals!") + +sm.sendNext("It has forced us to isolate ourselves. " + "It's costing me more than a pretty penny, let me tell you.") + +sm.sendNext("#b(Delfino? I don't think they're in Maple World, but either way they seem to be causing trouble. " + "This might be my chance to earn Gilberto's trust, so I should inquire") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17625e.py b/scripts/quest/q17625e.py new file mode 100755 index 0000000..cba5c34 --- /dev/null +++ b/scripts/quest/q17625e.py @@ -0,0 +1,21 @@ +# [Commerci Republic] Delfinos? More like dead Fishos +from net.swordie.ms.constants import WzConstants + +COMMERCI_SUIT = 1052673 +expGiven = 530255 +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I'm not hinting that you're weak, prime minister. I just want to support you, as a friend of #bLeon#k.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("That's fine.") + +sm.sendNext("Take these as well, they will be helpful.\r\n\r\n" + ""+ WzConstants.ICON_OBTAINED +"\r\n" + "#v"+ str(COMMERCI_SUIT) +"##z"+ str(COMMERCI_SUIT) +"#\r\n\r\n" + ""+ WzConstants.ICON_EXP +"\r\n" + ""+ str(expGiven) +" exp") + +sm.giveExp(expGiven) # Give Exp +sm.giveItem(COMMERCI_SUIT) # Give Commerci Suit +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17625s.py b/scripts/quest/q17625s.py new file mode 100755 index 0000000..7d659be --- /dev/null +++ b/scripts/quest/q17625s.py @@ -0,0 +1,53 @@ +# [Commerci Republic] Delfinos? More Like dead Fishos + +sm.setSpeakerID(9390203) # Gilberto Daniella +response = sm.sendAskYesNo("Are you curious about the Delfino?") + +if response: + sm.sendNext("We lived a good life alongside the Delfinos. " + "Most of our merchants rarely interacted with them, but there was no hostility.") +else: + sm.sendSayOkay("You have no interest in helping us? Hmmm..") + sm.dispose() + +sm.sendNext("San Commerci was nothing but a small fishing village in the early days of the Republic. " + "We fished our areas of the seas, they fished theirs... " + "But then the spice trade began and this port doubled in size overnight.") + +sm.sendNext("I'm sure the Delfinos are only upset because our town has prospered without them. " + "It's the only rational explanation to their transition into roving gangs of bandits.") + +sm.sendNext("The Delfinos must be treated with a firm and swift hand. It's the only thing they'll respect.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(This is my chance!)#k\r\n" + "Excuse me, prime minister, but I'd like to help you against the Delfinos.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Why? This isn't your fight. This isn't even your country.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("It's part of my responsibility as an envoy from Maple World to aid in the affairs of our #bAlly nations#k.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Thank you for the thought, but we can...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Daddy! I mean, pops! #h0# is really strong! Plus, #h0# is my sidekick!") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("We're not so weak that we have to rely on outside nations for aid.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("That's totally not what I meant, daddy.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Just get out there and eliminate those Delfinos...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Y-yes, daddy") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("#h0#? I appreciate the offer, but I don't want outsiders getting involved with our state affairs. I hope you understand.") +sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17626s.py b/scripts/quest/q17626s.py new file mode 100755 index 0000000..e24ee84 --- /dev/null +++ b/scripts/quest/q17626s.py @@ -0,0 +1,19 @@ +# [Commerci Republic] Delfino Deleter 1 + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("#h0#! I knew my loyal sidekick wouldn't abandon me! How'd you get around daddy?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I didn't. He said I could come. As an official ally.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("You must really have a way with words, like me. I'm glad you made it. You can learn a lot!") + +response = sm.sendAskYesNo("Now, are we ready to hunt some fish?") + +if response: + sm.sendNext("Let's see who's faster!") + sm.startQuest(parentID) +else: + sm.sendSayOkay("What?.. You're not ready yet?") +sm.dispose() diff --git a/scripts/quest/q17627e.py b/scripts/quest/q17627e.py new file mode 100755 index 0000000..0437a23 --- /dev/null +++ b/scripts/quest/q17627e.py @@ -0,0 +1,28 @@ +# [Commerci Republic] Delfino Deleter 2 + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("I was so much faster than you! But you're the sidekick for a reason.") + +sm.sendNext("C'mon! We can't let them get their buddies. We have to finish this now! I'll be waiting for you at #m865020200#") # Canal 3 + +sm.sendNext("What are you waiting for, my loyal sidekick?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Hold up. I have a really bad feeling about this...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Don't feel bad. I'm here for you, pal.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("No, listen. These fishmen seem like they're barely even trying...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("That's only because I'm totally awesome. So they look weak in comparison.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("But...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Let's go!") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17627s.py b/scripts/quest/q17627s.py new file mode 100755 index 0000000..f49ba7a --- /dev/null +++ b/scripts/quest/q17627s.py @@ -0,0 +1,15 @@ +# [Commerci Republic] Delfino Deleter 2 + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Is it just me, or am I totally awesome at fish-slaying?") + +response = sm.sendAskYesNo("We successfully routed the #o9390808# group, but I doubt that was the end. " + "It seems like there are other groups around. " + "You're going to help again, right?") + +if response: + sm.sendNext("#b#o9390811##k group should be in #m865020100#. Let's see who can rout out #b#e30#k#n of them faster again! I'll be waiting in #m865020100#!") + sm.startQuest(parentID) +else: + sm.sendSayOkay("Oh, I suppose we can rest for a little bit.") +sm.dispose() diff --git a/scripts/quest/q17628e.py b/scripts/quest/q17628e.py new file mode 100755 index 0000000..197bd74 --- /dev/null +++ b/scripts/quest/q17628e.py @@ -0,0 +1,12 @@ +# [Commerci Republic] Delfino Deleter 3 + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("So easy!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I really have a bad feeling about this...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Geez, Loosen up a bit. We'll be fine!") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17628s.py b/scripts/quest/q17628s.py new file mode 100755 index 0000000..717ba7c --- /dev/null +++ b/scripts/quest/q17628s.py @@ -0,0 +1,12 @@ +# [Commerci Republic] Delfino Deleter 3 + +sm.setSpeakerID(9390256) # Leon Daniella +response = sm.sendAskYesNo("Shall we?") + +if response: + sm.setPlayerAsSpeaker() # Has to be Player Avatar + sm.sendNext("#b(I have a bad feeling about this whole thing...)") + sm.startQuest(parentID) +else: + sm.sendNext("Alright, let me know when you are ready!") +sm.dispose() diff --git a/scripts/quest/q17629e.py b/scripts/quest/q17629e.py new file mode 100755 index 0000000..c8cf88c --- /dev/null +++ b/scripts/quest/q17629e.py @@ -0,0 +1,10 @@ +# [Commerci Republic] Delfino Deleter 4 + +sm.setSpeakerID(9390256) # Leon Daniella +response = sm.sendAskYesNo("I'll be honest.. These fish were definitely a lot tougher! It's what I was born to do!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("At least we made it. Now let's get out of here before the really tough fish come out.") + +sm.completeQuest(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q17629s.py b/scripts/quest/q17629s.py new file mode 100755 index 0000000..c364d4a --- /dev/null +++ b/scripts/quest/q17629s.py @@ -0,0 +1,8 @@ +# [Commerci Republic] Delfino Deleter 4 + +sm.setSpeakerID(9390256) # Leon Daniella +response = sm.sendAskYesNo("There's a lot of #r#o9390810##k monsters here too! Okay, it'll be #e#b30#k#n for each of us again!") + +if response: + sm.startQuest(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q17630e.py b/scripts/quest/q17630e.py new file mode 100755 index 0000000..6e71343 --- /dev/null +++ b/scripts/quest/q17630e.py @@ -0,0 +1,7 @@ +# id 17630 ([Commerci Republic] Delfino Deleter 5), field 865020300 +sm.setSpeakerID(9390250) # Leon Daniella +sm.setParam(2) +sm.sendNext("Ugh, we're outnumbered. I don't think we'll make it out of this one...") +sm.completeQuestNoCheck(parentID) +sm.completeQuestNoCheck(17720) +sm.warp(865020061) diff --git a/scripts/quest/q17630s.py b/scripts/quest/q17630s.py new file mode 100755 index 0000000..81820fe --- /dev/null +++ b/scripts/quest/q17630s.py @@ -0,0 +1,37 @@ +# [Commerci Republic] Delfino Deleter 5 + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("I keep thinking I see a Delfino out of the corner of my... WHAT THE?!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("It's the Delfinos! They're back!") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Who's that scary-looking fish behind them?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("He's bad news, that's who!") + +sm.setSpeakerID(9390208) # Riverson +sm.sendNext("Why you attack my people?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("What the...? You guys attacked the Merchant Union first! Who ARE you, anyway?") + +sm.setSpeakerID(9390208) # Riverson +sm.sendNext("I am... RIVERSON! you pay for wrongdoing!") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Wrongdoing? What did we do?") + +sm.setSpeakerID(9390208) # Riverson +response = sm.sendAskYesNo("No play coy! You know what you did! No more talk, prepare for PAIN!") + +if response: + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.completeQuest(17631) # Finish a cutscene quest + sm.warpInstanceIn(865020061) +else: + sm.sendSayOkay("... Oh... Okay... Uhh... I will wait for a bit!") +sm.dispose() diff --git a/scripts/quest/q17632e.py b/scripts/quest/q17632e.py new file mode 100755 index 0000000..b74d3d9 --- /dev/null +++ b/scripts/quest/q17632e.py @@ -0,0 +1,19 @@ +# [Commerci Republic] The Blocked Canal + + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Hey, what's that?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("It looks like.. a barrier?") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("A barrier for what? Do you think the fishhead set it up?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Maybe, but I'm not busting through to check") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Me neither. Let's go tell pops.") +sm.completeQuest(parentID) +sm.warpInstanceOut(865020300) # Canal 4 \ No newline at end of file diff --git a/scripts/quest/q17632s.py b/scripts/quest/q17632s.py new file mode 100755 index 0000000..9713cdc --- /dev/null +++ b/scripts/quest/q17632s.py @@ -0,0 +1,26 @@ +# [Commerci Republic] The Blocked Canal + + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Should we head back to town?") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Not yet...") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Don't tell me you're going to look for her...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Of course I am.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("She's long gone, Leon.") + +sm.setSpeakerID(9390256) # Leon Daniella +response = sm.sendAskYesNo("You can go back to town if you want.") + +if response: + sm.setPlayerAsSpeaker() # Has to be Player Avatar + sm.sendNext("And leave you here to get jumped by more fishmen? I'd never earn your father's trust that way.") + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17633e.py b/scripts/quest/q17633e.py new file mode 100755 index 0000000..55b53f0 --- /dev/null +++ b/scripts/quest/q17633e.py @@ -0,0 +1 @@ +# [Commerci Republic] Back to Town diff --git a/scripts/quest/q17633s.py b/scripts/quest/q17633s.py new file mode 100755 index 0000000..8c9f422 --- /dev/null +++ b/scripts/quest/q17633s.py @@ -0,0 +1,8 @@ +# [Commerci Republic] Back to Town +sm.setSpeakerID(9390256) # Leon Daniella +response = sm.sendAskYesNo("Should we go right now?") + +if response: + sm.warp(865000000, 0) # San Commerci + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17634e.py b/scripts/quest/q17634e.py new file mode 100755 index 0000000..d2d3719 --- /dev/null +++ b/scripts/quest/q17634e.py @@ -0,0 +1,27 @@ +# [Commerci Republic] A Chat with Gilberto + +COMMERCI_BOOTS = 1072874 + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Whao, my dad has, like, so much faith in me. It's incredible, right?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Yeah, just try to tone it down in battle, okay? Don't rush into situations that are obviously traps.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Why not?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Your dad would've been upset to learn that some strange girl helped us...") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("Her cloak is so mysterious, don't you think? it just oozes, like, mystery.") + +if sm.canHold(COMMERCI_BOOTS): + sm.sendNext("Oh, and you can have this. I don't want it.") + sm.giveItem(COMMERCI_BOOTS) + sm.completeQuest(parentID) +else: + sm.sendNext("I was going to give you some fancy boots, but I see you're carrying to much..\r\n" + "Why don't you drop some of your garbage?") +sm.dispose() diff --git a/scripts/quest/q17634s.py b/scripts/quest/q17634s.py new file mode 100755 index 0000000..fc7d009 --- /dev/null +++ b/scripts/quest/q17634s.py @@ -0,0 +1,41 @@ +# [Commerci Republic] A Chat with Gilberto + + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("So, what happened to the delfinos?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("We defeated the Delfinos. They won't be causing any trouble for a while.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +response = sm.sendAskYesNo("Really? As easy as that? Did you encounter any difficulties along the way?") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("It got tougher over time, but nothing we couldn't handle") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("To be totally honest, sir. Leon did a great job leading the squad.") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("(Psst, shouldn't we tell him about HER?)") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("I know my son had it in him, buried somewhere deep deep deep deep deep deep deep deep " + "deep deep deep deep deep deep deep deep inside.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Maybe you're ready for more responsibility, Leon") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("Oh, we also found a strange barrier on our way back.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("What do you mean, 'barrier'?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("We're not sure. We didn't think it would be wise to investigate further without consulting with you first.") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("I'll send some men out there to check it out. Go rest now. You've earned it.") +sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q17635s.py b/scripts/quest/q17635s.py new file mode 100755 index 0000000..24bd0b4 --- /dev/null +++ b/scripts/quest/q17635s.py @@ -0,0 +1,29 @@ +# [Commerci Republic] Shipwrecker + + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("How you feeling, #h0#? I'm so sore. You don't fight an awesome battle without getting a few bruises.") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("I'm all right.") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Prime Minister! Something awful has happened!") + +sm.setSpeakerID(9390256) # Leon Daniella +sm.sendNext("What? What's going on?") + +sm.setPlayerAsSpeaker() # Has to be Player Avatar +sm.sendNext("#b(I should go on in, and see what's up.)") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("What in the world is it now?") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("Our shop en route to Rosa has been attacked... by Captain Blood!") + +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Blast it.. That vile man!") + +sm.setSpeakerID(9390225) # Tepes +sm.sendNext("I think they planned this attack") diff --git a/scripts/quest/q17636s.py b/scripts/quest/q17636s.py new file mode 100755 index 0000000..389bd12 --- /dev/null +++ b/scripts/quest/q17636s.py @@ -0,0 +1,27 @@ +# id 17636 ([Commerci Republic] Who's The Pirate King?), field 865000002 +sm.setSpeakerID(9390262) # Leon Daniella +sm.setParam(2) +sm.sendNext("Hey Leon, who's Captain Blood?") +sm.setParam(0) +sm.sendSay("Really? You really don't know #rCaptain Blood#k?") +sm.setParam(2) +sm.sendSay("Well, no. I mean, I'm not from around here, remember...?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("I guess you ARE new... Would you like to know more?") +sm.sendSay("I'm sure you are aware that Commerci's trade is centered around the sea.") +sm.setParam(2) +sm.sendSay("Yes, I've heard.") +sm.setParam(4) +sm.sendSay("And there's no shortage of pirates in the sea, especially around the Commerci shore. They've been going around in small groups, plundering all sorts of goods.") +sm.sendSay("Commerci has been organizing our convoys and fleets better, but accidents still happen now and then.") +sm.sendSay("Our efforts were effective at first, but the pirates became more organized in response. Now they have one big pirate group, under their powerful leader.") +sm.setParam(2) +sm.sendSay("And that leader is Captain Blood?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Totally. He's bad news, and needs a righteous butt-kicking.") +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("That's...more or less true.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33260") diff --git a/scripts/quest/q17637e.py b/scripts/quest/q17637e.py new file mode 100755 index 0000000..69e49fe --- /dev/null +++ b/scripts/quest/q17637e.py @@ -0,0 +1,22 @@ +# id 17637 ([Commerci Republic] Deus Ex You), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("All right. Your help is most welcome.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Awesome! You're the best, Dad!") +sm.setParam(0) +sm.sendSay("How many times have I-Look, just remember that we're asking for help, not depending on it.") +sm.setParam(4) +sm.sendSay("Totally, Dad. I'll take care of Captain Blood myself! I've been practicing in my video games!") +sm.setParam(2) +sm.sendSay("Um, good to have you along, Leon. Thank you, Prime Minister.") +sm.setParam(4) +sm.sendSay("Can't wait to show you my mad skills! Aww yeah! Hey, lemme know when you're ready.") +sm.sendSay("Here, this is a gift for you. Let's do this!") +sm.completeQuestNoCheck(parentID) +sm.setParam(1) +sm.sendSay("I must ask that you look after my son, Leon. He's just too...eager. Yes, that's the word. Eager.") +sm.createQuestWithQRValue(18418, "B=33261") +sm.setParam(3) +sm.sendSay("Don't worry. I've seen him fight and I know he'll be fine.") +sm.createQuestWithQRValue(18418, "B=33262") diff --git a/scripts/quest/q17637s.py b/scripts/quest/q17637s.py new file mode 100755 index 0000000..3ff19ea --- /dev/null +++ b/scripts/quest/q17637s.py @@ -0,0 +1,30 @@ +# id 17637 ([Commerci Republic] Deus Ex You), field 865000002 +sm.setSpeakerID(9390262) # Leon Daniella +sm.sendNext("C'mon, Dad! Just give the word and I'll tear Captain Blood up. No sweat!") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("Hm? You? But you JUST came back from battling the Delfinos.") +sm.setParam(2) +sm.sendSay("(Yeah, that's right.)") +sm.setParam(0) +sm.sendSay("But...but...I really wanna fight pirates!") +sm.setParam(4) +sm.sendSay("Hm. A noble cause, to be sure. However, I fear that Captain Blood may be just a touch out of your league.") +sm.setParam(2) +sm.sendSay("(That's right. Leon needs more training...)") +sm.setParam(0) +sm.sendSay("B-but... What if I go with #h0#? I can watch #h0#'s back, and jump in to do some world-class swashbuckling! ...Supervised, of course.") +sm.setParam(2) +sm.sendSay("(Wait, what? Why me...)") +sm.setParam(4) +sm.sendSay("You disappoint me. I thought you were beyond begging others for help. Do I need to suspend your allowance again?") +sm.setParam(2) +sm.sendSay("(Ugh, not this again... I'd better get this over with.)") +sm.sendSay("Prime Minister, I'll go with Leon.") +sm.setParam(4) +sm.sendSay("Don't be ridiculous. You've already done more than enough for us.") +sm.setParam(2) +sm.sendSay("I've done enough as allies. This time I want to help as a...friend...of Leon's.") +sm.setParam(4) +sm.sendSay("Hm... When you say it like that, I'm inclined to...") +sm.startQuest(parentID) diff --git a/scripts/quest/q17640e.py b/scripts/quest/q17640e.py new file mode 100755 index 0000000..6e01549 --- /dev/null +++ b/scripts/quest/q17640e.py @@ -0,0 +1,25 @@ +# id 17640 ([Commerci Republic] Pack Up, and Set Sail 3), field 865000000 +sm.setSpeakerID(9390204) # Robed Lady +sm.setParam(56) +sm.setColor(1) +sm.sendNext("All right, off to the dock.") +sm.setParam(32) +sm.sendSay("Oh my, we meet again.") +sm.setParam(56) +sm.sendSay("Ahh! Geez... What are you doing behind me?") +sm.setParam(32) +sm.sendSay("You were just in my way.") +sm.setParam(56) +sm.sendSay("I see. Well then, let me get OUT of your way. I'm sorta busy so...") +sm.setParam(32) +sm.sendSay("You're heading out to deal with the pirates?") +sm.setParam(56) +sm.sendSay("Yes. Why? Interested?") +sm.setParam(32) +sm.sendSay("Deary me, no. Why would I be interested in such a crude, barbaric voyage? You enjoy yourselves.") +sm.setParam(56) +sm.sendSay("...Crude? Barbaric? Whatever. I really should head to the dock.") +sm.completeQuestNoCheck(parentID) +sm.completeQuestNoCheck(17730) +sm.createQuestWithQRValue(18418, "B=33265") +sm.createQuestWithQRValue(18418, "B=33266") diff --git a/scripts/quest/q17640s.py b/scripts/quest/q17640s.py new file mode 100755 index 0000000..212a2df --- /dev/null +++ b/scripts/quest/q17640s.py @@ -0,0 +1,12 @@ +# id 17640 ([Commerci Republic] Pack Up, and Set Sail 3), field 865000002 +sm.setSpeakerID(9390262) # Leon Daniella +sm.sendNext("Hey, you made it! I was gonna leave without you. Where's my stuff?") +sm.setParam(2) +sm.sendSay("Kentucky at the General Store told me they deliver.") +sm.setParam(0) +res = sm.sendAskYesNo("No kidding! Man, they should, like, advertise that. Anyway, I got everyone together. Ready to roll? Er, sail?") +sm.startQuest(parentID) +sm.setParam(2) +sm.sendNext("(Changing the subject, huh?) Yup. I'm all set. ") +sm.setParam(0) +sm.sendSay("Righteous! I'll meet you at the dock.") diff --git a/scripts/quest/q17641e.py b/scripts/quest/q17641e.py new file mode 100755 index 0000000..ca62244 --- /dev/null +++ b/scripts/quest/q17641e.py @@ -0,0 +1,25 @@ +# id 17641 ([Commerci Republic] Robed Adventures), field 865000000 +sm.setSpeakerID(9390204) # Robed Lady +sm.setParam(32) +sm.setColor(1) +sm.sendNext("What are you doing here?") +sm.setParam(56) +sm.sendSay("..............") +sm.setParam(32) +sm.sendSay("Ah, you said something about eliminating pirates, right?") +sm.setParam(56) +sm.sendSay("..............") +sm.setParam(32) +sm.sendSay("Are you sure you can do it? You're crew doesn't exactly look the fittest.") +sm.setParam(56) +sm.sendSay("...Fine, you can come.") +sm.setParam(32) +sm.sendSay("What? W-whatever do you mean?") +sm.setParam(56) +sm.sendSay("Just say it, you want to go on the voyage with us.") +sm.setParam(32) +sm.sendSay("...Well, I'm a VERY busy woman, but if you REALLY need my help, I'll go.") +sm.setParam(56) +sm.sendSay("...Strange lady. I hope she doesn't cause trouble. I'll just talk to Leon later.") +sm.completeQuestNoCheck(parentID) +sm.warp(865010001) diff --git a/scripts/quest/q17641s.py b/scripts/quest/q17641s.py new file mode 100755 index 0000000..1999a10 --- /dev/null +++ b/scripts/quest/q17641s.py @@ -0,0 +1,18 @@ +# id 17641 ([Commerci Republic] Robed Adventures), field 865000000 +sm.setSpeakerID(9390235) # Leon Daniella +sm.sendNext("Hey, you're late! Getting cold feet?") +sm.setParam(2) +sm.sendSay("Nah, I was...delayed.") +sm.setParam(0) +res = sm.sendAskYesNo("Hm, whatever. You sure you're ready? We're gonna be on a boat. A boat!") +sm.setParam(32) +sm.setColor(1) +sm.sendNext("As captain, I have important stuff to do. Hang on.") +sm.startQuest(parentID) +sm.setParam(56) +sm.sendSay("No prob. Let's go.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390204) # Robed Lady +sm.sendSay("Oh? Another coincidence.") +sm.setParam(56) +sm.sendSay("............") diff --git a/scripts/quest/q17642e.py b/scripts/quest/q17642e.py new file mode 100755 index 0000000..79266c7 --- /dev/null +++ b/scripts/quest/q17642e.py @@ -0,0 +1,31 @@ +# id 17642 ([Commerci Republic] A Fickle Man), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.setParam(56) +sm.setColor(1) +sm.sendNext("Ah... I'm sorry. I was careless. I should've told you first.") +sm.setParam(32) +sm.sendSay("Yes, that's right! We're friends but I AM the captain of this ship. All cute girls have to go through me!") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390204) # Robed Lady +sm.sendSay("Oh my, what kind of ship is this? It's quite tasteless. Are we running low on cash?") +sm.setParam(32) +sm.sendSay("!!!!!!!!!!!!!!!!!!") +sm.setParam(56) +sm.sendSay("Leon, you're absolutely right. I should have given it a second thought. I'll tell her nicely and get her off the ship right away.") +sm.sendSay("Excuse me...") +sm.setParam(36) +sm.sendSay("Hm? What is it? I hope you don't expect me to do any swabbing.") +sm.setParam(56) +sm.sendSay("No, it's not that. I'm, um, well... ") +sm.setParam(32) +sm.sendSay("After the big fight today, would you like to go out with me?") +sm.setParam(36) +sm.sendSay("...Wha... Ha. Ha ha. Hahahahaha! Oh...oh my goodness... That's rich. Ahem. I tell you what...we'll talk again after the fight. IF you survive. Now, if you're done talking, I'm going to have a look around.") +sm.setParam(56) +sm.sendSay("Leon, what are you doing?") +sm.setParam(32) +sm.sendSay("Ahh, jealous? Yeah, she totally digs me. Can't just let a lady go by herself, y'know. It's a big, bad world out there.") +sm.setParam(56) +sm.sendSay("(Weirdo. I just can't figure him out.)") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33268") diff --git a/scripts/quest/q17642s.py b/scripts/quest/q17642s.py new file mode 100755 index 0000000..db22158 --- /dev/null +++ b/scripts/quest/q17642s.py @@ -0,0 +1,17 @@ +# id 17642 ([Commerci Republic] A Fickle Man), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.sendNext("Everyone, make this thing go faster! Captain Blood isn't gonna swashbuckle himself!") +sm.setParam(2) +sm.sendSay("Hey, Leon.") +sm.setParam(0) +sm.sendSay("Welcome aboard! It might look like just a merchant ship, but...okay, it's just a merchant ship.") +res = sm.sendAskYesNo("Anyway, what's up? You have your serious face on.") +sm.startQuest(parentID) +sm.setParam(2) +sm.sendNext("I let someone aboard without asking you first. I know it's late but I wanted to let you know.") +sm.setParam(0) +sm.sendSay("What? Who's on board?") +sm.setParam(2) +sm.sendSay("Ah... I actually don't know her name, but it's not like you don't know her and she's pretty good at...") +sm.setParam(0) +sm.sendSay("What? You let a GIRL on board and didn't tell me?! What is WRONG with you? Is she cute? Does she like handsome swashbucklers with names that start with L?") diff --git a/scripts/quest/q17643e.py b/scripts/quest/q17643e.py new file mode 100755 index 0000000..0b99d43 --- /dev/null +++ b/scripts/quest/q17643e.py @@ -0,0 +1,22 @@ +# id 17643 ([Commerci Republic] Yar! Pirates!), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendNext("The pirates are getting away! Good riddance!") +sm.setParam(0) +sm.sendSay("Nooooo, my glory! We can't let them go!") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390204) # Robed Lady +sm.sendSay("It's my turn to show you what I can do. I'll #r#etear the ship apart#k#n with my magic.") +sm.setParam(2) +sm.sendSay("Ah! Wait, wait, wait, WAIT!") +sm.setParam(4) +sm.sendSay("Why?") +sm.setParam(2) +sm.sendSay("Captain Blood isn't here yet. They'll lead us back to him, so we should just follow along!") +sm.setParam(0) +sm.sendSay("Brilliant! Let's do the following thing!") +sm.setParam(4) +sm.sendSay("Hm... That's too bad.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33269") diff --git a/scripts/quest/q17643s.py b/scripts/quest/q17643s.py new file mode 100755 index 0000000..49a0924 --- /dev/null +++ b/scripts/quest/q17643s.py @@ -0,0 +1,48 @@ +# id 17643 ([Commerci Republic] Yar! Pirates!), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.sendNext("It's quiet...TOO calm. I hope the pirates are saying their prayers and kissing their...something...") +sm.setParam(2) +sm.sendSay("Who knows. It's only been a couple days, so let's wait it out.") +sm.setParam(0) +res = sm.sendAskYesNo("Hm... Sure. But are you ready to take on the pirates at any minute?") +sm.startQuest(parentID) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendNext("Pirates! Pirates! Don't let them near!") +sm.setParam(1) +sm.sendSay("They're here! Oh BOY!") +sm.setParam(5) +sm.sendSay("The pirates are boarding the ship! Tell them to wipe their feet first!") +sm.setParam(1) +sm.sendSay("Let's go, #h0#! FOR THE AWESOME!") +sm.startQuest(parentID) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q17644e.py b/scripts/quest/q17644e.py new file mode 100755 index 0000000..97e5264 --- /dev/null +++ b/scripts/quest/q17644e.py @@ -0,0 +1,7 @@ +# id 17644 ([Commerci Republic] Arg! Chase!), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.sendNext("Are we all safe?") +sm.setParam(2) +sm.sendSay("I think so. Not much damage on our part yet.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33270") diff --git a/scripts/quest/q17644s.py b/scripts/quest/q17644s.py new file mode 100755 index 0000000..c2f153f --- /dev/null +++ b/scripts/quest/q17644s.py @@ -0,0 +1,61 @@ +# id 17644 ([Commerci Republic] Arg! Chase!), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.setParam(2) +sm.sendNext("Those pirates really know their way around the ocean...") +sm.setParam(0) +sm.sendSay("Of course, they move around a lot more than merchant ships.") +sm.setParam(2) +sm.sendSay("Captain Blood's ship is in sight!") +sm.setParam(0) +res = sm.sendAskYesNo("Captain Blood is here. Ready?") +sm.startQuest(parentID) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendNext("Oh, no! Pirates from Captain Blood's ship are boarding! And they didn't ask permission first!") +sm.setParam(1) +sm.sendSay("All right, let's do this!") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q17645e.py b/scripts/quest/q17645e.py new file mode 100755 index 0000000..dbe2281 --- /dev/null +++ b/scripts/quest/q17645e.py @@ -0,0 +1,21 @@ +# id 17645 ([Commerci Republic] Close Up with Captain Blood), field 865010001 +sm.setSpeakerID(9390209) # Captain Blood +sm.sendNext("Ugh! He's pretty strong. Ha, I'm impressed!") +sm.setParam(2) +sm.sendSay("Yeah, no kidding. These guys are serious.") +sm.setParam(0) +sm.sendSay("Yar, but this brawl be far from over, matey.") +sm.setParam(2) +sm.sendSay("Oh, what now? Spoiler alert, you're not going to win.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390235) # Leon Daniella +sm.sendSay("Yeah, spoiler! You're dumb!") +sm.setParam(0) +sm.sendSay("...Do ye know how I got me captain's hat?") +sm.setParam(2) +sm.sendSay("...You're not wearing a hat.") +sm.setParam(0) +sm.sendSay("Yar, it be a metaphor! Anyway, was it me clever tactics? Me sharp eye for shootin'? Nay, it be...") +sm.sendSay("Me lightnin'-quick wits! Har har har!") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33271") diff --git a/scripts/quest/q17645s.py b/scripts/quest/q17645s.py new file mode 100755 index 0000000..9dfdc8a --- /dev/null +++ b/scripts/quest/q17645s.py @@ -0,0 +1,64 @@ +# id 17645 ([Commerci Republic] Close Up with Captain Blood), field 865010001 +sm.setSpeakerID(9390209) # Captain Blood +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390235) # Leon Daniella +sm.sendNext("These pirates are way tougher than those ones before! Maybe they'll come work for my dad...") +sm.setParam(0) +sm.sendSay("Not a chance, scallywag!") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Captain Blood! I hate that guy!") +sm.setParam(0) +sm.sendSay("Ye did well to make it this far, but the pleasure cruise ends here! Yar har har!") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390235) # Leon Daniella +res = sm.sendAskYesNo("We'll show you what we've got! #h0#, ready?") +sm.startQuest(parentID) +sm.setParam(5) +sm.sendNext("Let's wipe their butts! I mean...GO!") +sm.sendSay("Let's do some fightinnnnnnnng!") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q17646e.py b/scripts/quest/q17646e.py new file mode 100755 index 0000000..bf90ec6 --- /dev/null +++ b/scripts/quest/q17646e.py @@ -0,0 +1,13 @@ +# id 17646 ([Commerci Republic] Outlaw of the Sea), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.sendNext("Is everyone alive?") +sm.setParam(2) +sm.sendSay("The ship's seen better days, but the crew seems okay.") +sm.setParam(0) +sm.sendSay("The old monster must've been toying with us. It didn't even come up outta the water. Maybe it was just trying to give us high fives, kraken-style.") +sm.setParam(2) +sm.sendSay("I guess we got lucky.") +sm.setParam(0) +sm.sendSay("No kidding, #h0#. You play with the Grosso, you might just get smashed to Polpo, right? Haha! Because Polpo sounds like pulp.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33275") diff --git a/scripts/quest/q17646s.py b/scripts/quest/q17646s.py new file mode 100755 index 0000000..7572b9d --- /dev/null +++ b/scripts/quest/q17646s.py @@ -0,0 +1,12 @@ +# id 17646 ([Commerci Republic] Outlaw of the Sea), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +res = sm.sendAskYesNo("#h0#! Help me! Save my life!") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendNext("Everybody calm down! Relax your core!") +sm.setParam(3) +sm.sendSay("Are you all right Leon? Oh, GROSS, there's kraken juice everywhere!") +sm.setParam(1) +sm.sendSay("Grosso Polpo's no joke! It ate my dad's favorite fruit barge last year. Don't let your guard down!") +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q17647e.py b/scripts/quest/q17647e.py new file mode 100755 index 0000000..773baf1 --- /dev/null +++ b/scripts/quest/q17647e.py @@ -0,0 +1,28 @@ +# id 17647 ([Commerci Republic] The Fall of Captain Blood), field 865010001 +sm.setSpeakerID(9390243) # Robed Lady +sm.setParam(32) +sm.setColor(1) +sm.sendNext("Everyone step back. I don't want anyone being swept out to sea.") +sm.lockInGameUI(True, True) +sm.forcedInput(0) +sm.showFieldEffect("Map/EffectBT.img/dawnveil1/Cut3_1", 0) +sm.sendDelay(2000) +sm.showFieldEffect("Map/EffectBT.img/dawnveil1/Cut3_2", 0) +sm.playSound("Sound/SoundEff.img/thunder3", 100) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.setParam(57) +sm.sendNext("..........") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390235) # Leon Daniella +sm.sendSay("..........") +sm.setParam(57) +sm.sendSay("Yikes... I wonder if they made it. ") +sm.setParam(37) +sm.sendSay("Umm... That seems unlikely.") +sm.setParam(57) +sm.sendSay("I almost feel bad for them now.") +sm.setParam(33) +sm.sendSay("Now, to discuss my payment.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33276") diff --git a/scripts/quest/q17647s.py b/scripts/quest/q17647s.py new file mode 100755 index 0000000..66a380e --- /dev/null +++ b/scripts/quest/q17647s.py @@ -0,0 +1,30 @@ +# id 17647 ([Commerci Republic] The Fall of Captain Blood), field 865010001 +sm.setSpeakerID(9390243) # Robed Lady +sm.sendNext("Where are the pirates?") +sm.setParam(2) +sm.sendSay("Pirate? Captain Blood!") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390235) # Leon Daniella +sm.sendSay("Oh yeah! I was staring at the boat on the horizon like, 'who's flying that pirate flag?' I totally forgot about Captain Blood. Haha!") +sm.setParam(0) +sm.sendSay("He's getting away!") +sm.setParam(4) +sm.sendSay("He must have a really fast ship. My dad's sailboat is that fast. Should we go get my dad's sailboat?") +sm.setParam(2) +sm.sendSay("There's no time. He's gone for now.") +sm.setParam(4) +sm.sendSay("Awww, we almost had him! I want him! I want to get him!") +sm.setParam(0) +res = sm.sendAskYesNo("I suppose I will have to do this.") +sm.startQuest(parentID) +sm.setParam(56) +sm.setColor(1) +sm.sendNext("What are you gonna do? Swim out there and catch him? Are you hiding a jet ski under those robes?") +sm.setParam(32) +sm.sendSay("Don't be so naive... and what is a jet ski?") +sm.setParam(56) +sm.sendSay("Stop calling me naive!") +sm.setParam(32) +sm.sendSay("Shall I handle this for you? There will be a fee.") +sm.setParam(36) +sm.sendSay("You can catch the pirate?! That's awesome! My dad's got lots of money.") diff --git a/scripts/quest/q17648e.py b/scripts/quest/q17648e.py new file mode 100755 index 0000000..3fa748a --- /dev/null +++ b/scripts/quest/q17648e.py @@ -0,0 +1,39 @@ +# id 17648 ([Commerci Republic] Back to San Commerci), field 865000000 +sm.setSpeakerID(9390235) # Leon Daniella +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendNext("Oh... Hey... What's up?") +sm.setInnerOverrideSpeakerTemplateID(9390204) # Robed Lady +sm.sendSay("It's time we went our separate ways.") +sm.hideNpcByTemplateIdhi(9390255, True, True) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("How about a name first?") +sm.setParam(2) +sm.sendSay("What would you do with her name?") +sm.setParam(4) +sm.sendSay("I'd probably say it sometimes, maybe to you. Because we're friends now, right?") +sm.setParam(2) +sm.sendSay("Man, these people... Hey, why's everybody running around like crazy?") +sm.setParam(4) +sm.sendSay("I dunno, I thought there might be a sale on pies or something. My buddy is standing over there, if you want to know.") +sm.setParam(2) +sm.sendSay("Is there an event in town or something?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendSay("Leon, you're back just in time!") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("What's with the commotion? Are they throwing a party for me?") +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendSay("The Heaven Empire sent somebody here again!") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("The Heaven Empire? What are those annoying snobs up to now?") +sm.setParam(2) +sm.sendSay("What is the Heaven Empire?") +sm.setParam(4) +sm.sendSay("Haha, #h0#! You don't know anything! I'll tell you later. I can't stop thinking about that pie I talked about.") +sm.sendSay("Oh, hey! I found this junk on Captain Blood's ship! Do you want it?") +sm.completeQuestNoCheck(parentID) +sm.completeQuestNoCheck(17731) +sm.createQuestWithQRValue(18418, "B=33277") +sm.createQuestWithQRValue(18418, "B=33278") +sm.createQuestWithQRValue(18418, "B=33279") diff --git a/scripts/quest/q17648s.py b/scripts/quest/q17648s.py new file mode 100755 index 0000000..5fc3848 --- /dev/null +++ b/scripts/quest/q17648s.py @@ -0,0 +1,10 @@ +# id 17648 ([Commerci Republic] Back to San Commerci), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +res = sm.sendAskYesNo("Well the pirate guy is gone, I guess. Let's go tell dad! He'll be so excited. I know I am!") +sm.setParam(1) +sm.sendNext("Change the heading! We head for San Commerci!") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendSay("Aye-Aye! Just let me get my navigating scarf on...") +sm.startQuest(parentID) +sm.warp(865000000) diff --git a/scripts/quest/q17650e.py b/scripts/quest/q17650e.py new file mode 100755 index 0000000..3849f7a --- /dev/null +++ b/scripts/quest/q17650e.py @@ -0,0 +1,16 @@ +# id 17650 ([Commerci Republic] Troubling Reports), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.setParam(2) +sm.sendNext("Prime Minister, we chased down the pirates.") +sm.setParam(0) +sm.sendSay("Welcome back. I am pleased to see you unharmed. This means your mission was successful?") +sm.setParam(2) +sm.sendSay("Yes... sort of. Mostly. Leon and I were able to take down the pirates, with some help.") +sm.setParam(0) +sm.sendSay("Good, good. The open sea lanes are important for this city.") +sm.setParam(2) +sm.sendSay("Are you feeling okay, Prime Minister? Is that Heaven Empire business bothering you?") +sm.setParam(0) +sm.sendSay("You've heard? Rumor moves swiftly in Commerci. Yes, the Heaven Empire's visit troubles me.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33280") diff --git a/scripts/quest/q17650s.py b/scripts/quest/q17650s.py new file mode 100755 index 0000000..370b057 --- /dev/null +++ b/scripts/quest/q17650s.py @@ -0,0 +1,5 @@ +# id 17650 ([Commerci Republic] Troubling Reports), field 865000000 +sm.setSpeakerID(9390235) # Leon Daniella +res = sm.sendAskYesNo("Would you go back and turn in the report for us?") +sm.startQuest(parentID) +sm.sendNext("I'll be right behind you in a minute!") diff --git a/scripts/quest/q17651e.py b/scripts/quest/q17651e.py new file mode 100755 index 0000000..a64da05 --- /dev/null +++ b/scripts/quest/q17651e.py @@ -0,0 +1,39 @@ +# id 17651 ([Commerci Republic] A Funny Kind of Peace), field 865000002 +sm.setSpeakerID(9390207) # Zion +sm.setParam(32) +sm.setColor(1) +sm.sendNext("What would your lord emperor have of you, you mean?") +sm.sendSay("First, you will only trade with the allies of the Heaven Empire, and all trade items will come from a list of approved materials. Every transaction will have a 1% tariff levied upon it as tribute to the glory of the empire.") +sm.setParam(56) +sm.sendSay("That's crazy!") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390203) # Gilberto Daniella +sm.sendSay("Hear him out.") +sm.setParam(32) +sm.sendSay("Second, the Heaven Empire will require a standing order of goods, and citizens, to be delivered at such times as his grace see fit.") +sm.sendSay("Third, the sea lanes used by Commerci for trade will be considered the domain of the Heaven Empire. Therefore, the emperor will have free use of these routes, and ships sailing within them will be subject to random inspections.") +sm.sendSay("Fourth, as a show of our favor, we will take one child from each trade family to reside in the empire for a period of 10 years. They will be raised as one of ours, and to learn of our advanced technology. Kept close, and safe, so long as our peace remains. It is a most gracious offering.") +sm.sendSay("I will have your signature.") +sm.setParam(36) +sm.sendSay("Hm...") +sm.showNpcSpecialActionByTemplateId(9390236, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("This is not happening!") +sm.setParam(32) +sm.sendSay("This is your son, yes?") +sm.setParam(36) +sm.sendSay("I'm Leon Daniella, the second son of the Prime Minister, and pride of the Commerci Republic!") +sm.setParam(32) +sm.sendSay("I know who you are, young man. I've heard tale of your adventures. You are said to be an excellent ship captain...") +sm.setParam(36) +sm.sendSay("Oh, really? Thanks-- HEY! Don't kiss up to me!") +sm.setParam(32) +sm.sendSay("I am not kissing up, I am here to carry out a mission of peace that concerns both of our countries.") +sm.setParam(36) +sm.sendSay("You call that peace? Ha! You walk in here with a deal that would make us your slaves, and you call it peace? You'd better get outta here now, before I stick the rest of you in that top hat!") +sm.setParam(32) +sm.sendSay("Prime Minister Gilberto, this hostility in your care is less than flattering. I will return tomorrow for your response. I hope that it will be the right one.") +sm.setParam(36) +sm.sendSay("That guy was making me MAD! Sorry, dad, but I have to go take care of some stuff and punch walls.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33281") diff --git a/scripts/quest/q17651s.py b/scripts/quest/q17651s.py new file mode 100755 index 0000000..93ab4bb --- /dev/null +++ b/scripts/quest/q17651s.py @@ -0,0 +1,21 @@ +# id 17651 ([Commerci Republic] A Funny Kind of Peace), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Ah, but the wait is finally over.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +res = sm.sendAskYesNo("The envoy from the Heaven Empire envoy is here. You want me to let him in?") +sm.startQuest(parentID) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9390207) # Zion +sm.sendNext("Hello. I am Zion, and I have been sent as the voice of the Heaven Empire.") +sm.setParam(32) +sm.sendSay("It is a pleasure to receive the Heaven Empire in our humble city. I am Gilberto Daniella, the Prime Minister of the Commerci Republic, and your host. Please tell me what kind of-- ") +sm.setParam(36) +sm.sendSay("We have a proposal for Commerci.") +sm.setParam(32) +sm.sendSay("A proposal? What type of proposal?") +sm.setParam(36) +sm.sendSay("The people of Commerci have long remained in my great lord emperor's favor, paying proper tithe and reverence to his divine right. Yet we have very little formal history. I visit today as an offering of peace.") +sm.setParam(32) +sm.sendSay("I welcome his peace. The people of Commerci are rather fond of our neighbors in the Heaven Empire, and I am certain we can prosper together. What are the terms of your peace?") diff --git a/scripts/quest/q17652e.py b/scripts/quest/q17652e.py new file mode 100755 index 0000000..5fc58c0 --- /dev/null +++ b/scripts/quest/q17652e.py @@ -0,0 +1,14 @@ +# id 17652 ([Commerci Republic] Playing Courier), field 865000003 +sm.setSpeakerID(9390206) # Vaughn Tremier +sm.setParam(32) +sm.setColor(1) +sm.sendNext("Who are you?") +sm.setParam(56) +sm.sendSay("Are you Vaughn Tremier?") +sm.setParam(32) +sm.sendSay("Of course I am. Who are you?") +sm.setParam(56) +sm.sendSay("I am just the messenger. Prime Minister Gilberto sent me with a letter.") +sm.setParam(32) +sm.sendSay("A letter from GILBERTO?! Let me see it.") +sm.createQuestWithQRValue(18418, "B=33282") diff --git a/scripts/quest/q17653e.py b/scripts/quest/q17653e.py new file mode 100755 index 0000000..1e8f019 --- /dev/null +++ b/scripts/quest/q17653e.py @@ -0,0 +1,19 @@ +# id 17653 ([Commerci Republic] Don't Even Ask), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Did you deliver the letter?") +sm.setParam(2) +sm.sendSay("Yes, but... ") +sm.setParam(0) +sm.sendSay("He didn't take it well?") +sm.setParam(2) +sm.sendSay("I don't know if that letter was supposed to be funny, but he was laughing a lot. He... he said that you made the mess, you have to clean it...") +sm.setParam(0) +sm.sendSay("What? That fool! This isn't some petty grudge. This threatens our entire nation! ") +sm.setParam(2) +sm.sendSay("He said he was too busy managing his union to help.") +sm.setParam(0) +sm.sendSay("That... that vindictive child! Thinking of his coin purse when our very freedom hangs under a knife! I knew he wanted my job, but I never though he would sink to this.") +sm.sendSay("I'm sorry, I must be alone. Go get some rest.") +sm.completeQuestNoCheck(17740) +sm.createQuestWithQRValue(18418, "B=33283") +sm.createQuestWithQRValue(18418, "B=33284") diff --git a/scripts/quest/q17654e.py b/scripts/quest/q17654e.py new file mode 100755 index 0000000..a70743d --- /dev/null +++ b/scripts/quest/q17654e.py @@ -0,0 +1,19 @@ +# id 17654 ([Commerci Republic] Screaming in the Night), field 865020071 +sm.setSpeakerID(9390216) # Zion +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Assassins!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("What is this commotion?!") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("I think it came from over here! ") +sm.setInnerOverrideSpeakerTemplateID(9390227) # Guild Assassin +sm.sendSay("This is getting complicated. We leave, now.") +sm.hideNpcByTemplateIdhi(9390227, True, True) +sm.hideNpcByTemplateIdhi(9390228, True, True) +sm.showNpcSpecialActionByTemplateId(9390203, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9390236, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9390206, "summon", 0) +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33285") diff --git a/scripts/quest/q17654s.py b/scripts/quest/q17654s.py new file mode 100755 index 0000000..0ce535c --- /dev/null +++ b/scripts/quest/q17654s.py @@ -0,0 +1,13 @@ +# id 17654 ([Commerci Republic] Screaming in the Night), field 865000002 +sm.setSpeakerType(3) +sm.setParam(16) +res = sm.sendAskYesNo("I guess this would be a bad time to bring up the peace treaty from the Empress. Maybe a walk around San Commerci would clear my head...") +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9390207) # Zion +sm.sendNext("Arrrrgggghhhh!!") +sm.setParam(35) +sm.sendSay("Huh? What was that?! It sounded like a person screaming! Maybe east?") +sm.sendSay("That scream came from the east, near #b#m865020000##k.") +sm.startQuest(parentID) +sm.warp(865020071) diff --git a/scripts/quest/q17655e.py b/scripts/quest/q17655e.py new file mode 100755 index 0000000..7bf2e3e --- /dev/null +++ b/scripts/quest/q17655e.py @@ -0,0 +1,19 @@ +# id 17655 ([Commerci Republic] False Charges), field 865030000 +sm.setSpeakerID(9390249) # Robed Lady +sm.setParam(2) +sm.sendNext("Wait! What are you doing here? Also where is here?") +sm.setParam(0) +sm.sendSay("Somewhere far from San Commerci.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Wow, you're so helpful. You're always helping us out. You're pretty awesome.") +sm.setParam(0) +sm.sendSay("I am not your guardian angel. I'm trying to collect the payment you owe me.") +sm.setParam(4) +sm.sendSay("Oh, yeah, right... Well, I just gotta clear up this thing with my dad first. Maybe you could tell me who you are, and that would help?") +sm.setParam(2) +sm.sendSay("Yeah, what's going on here, lady? You're using some pretty advanced magic.") +sm.setParam(0) +sm.sendSay("Hmm...") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33286") diff --git a/scripts/quest/q17655s.py b/scripts/quest/q17655s.py new file mode 100755 index 0000000..ebb09ee --- /dev/null +++ b/scripts/quest/q17655s.py @@ -0,0 +1,47 @@ +# id 17655 ([Commerci Republic] False Charges), field 865020071 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.setParam(32) +sm.setColor(1) +sm.sendNext("What are you doing here? Causing some sort of... Is that the envoy from the Heaven Empire?!") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Why is that jerk on the ground? I didn't put him on the ground.") +sm.setParam(56) +sm.sendSay("Well... Uh, I... That is...") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("Wait!! Is he D-D-DEAD?!") +sm.setParam(32) +sm.sendSay("Is he?") +sm.setParam(36) +sm.sendSay("It was YOU! You killed the envoy! You're a saboteur! The outsider has doomed us all! ") +sm.setParam(56) +sm.sendSay("What?! I didn't kill anyone! I'm against killing. I am anti-kill!") +sm.setParam(36) +sm.sendSay("Quiet! I know it was you! What are you Daniella fools doing?! Are you going to defend this murderer?!") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("#h0# can't be the murderer?! That's crazy, right? You're not the murderer, are you? No, of course not, haha!") +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("You are siding with a foreigner you barely know?!") +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Hey man, you're the one jumping to conclusions. My dad told me that was bad business.") +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("Oh! I get it! You are in this together, aren't you?! Prime Minister Gilberto! Your son is committing high treason!") +sm.setParam(32) +sm.sendSay("...Arrest them both.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("D-dad?!") +sm.showFieldEffect("Map/EffectBT.img/dawnveil1/Clare", 0) +sm.showFieldEffect("Map/EffectBT.img/dawnveil1/Clare2", 0) +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("W-What is going on?! My eyes! I've been blinded by these fiends!") +sm.setParam(32) +sm.sendSay("Calm down, Vaughn! It's only a distraction.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390204) # Robed Lady +sm.sendSay("Are you fools TRYING to get arrested?") +sm.setParam(56) +sm.sendSay("Oh... uh... not really?") +sm.startQuest(parentID) +sm.warp(865030000) diff --git a/scripts/quest/q17656e.py b/scripts/quest/q17656e.py new file mode 100755 index 0000000..ec4253c --- /dev/null +++ b/scripts/quest/q17656e.py @@ -0,0 +1,19 @@ +# id 17656 ([Commerci Republic] Dances with Wolves 1), field 865030000 +sm.setSpeakerID(9390249) # Robed Lady +sm.setParam(2) +sm.sendNext("I think that was the last of them...") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Are you okay? Are you hurt? Can I get you a soda or something?") +sm.setParam(0) +sm.sendSay("Oh... I-I'm fine... Wait, did you hurt your hand?") +sm.setParam(4) +sm.sendSay("It's just a scratch. One of them was chewing on me a little, but I bit him back, haha!") +sm.setParam(0) +sm.sendSay("You should be more careful! Even a small wound can get infected.") +sm.setParam(2) +sm.sendSay("Would you two just smooch and get it over with? Yeesh. ") +sm.setParam(4) +sm.sendSay("Umm... Ahem... So anyway... If you can tell me your identity... Unless you wanna do the thing my best friend sidekick just said...") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33287") diff --git a/scripts/quest/q17656s.py b/scripts/quest/q17656s.py new file mode 100755 index 0000000..c73d49e --- /dev/null +++ b/scripts/quest/q17656s.py @@ -0,0 +1,24 @@ +# id 17656 ([Commerci Republic] Dances with Wolves 1), field 865030000 +sm.setSpeakerID(9390249) # Robed Lady +sm.sendNext("My identity will not help you two get out of your current situation.") +sm.setParam(2) +sm.sendSay("I like to know who my allies and my enemies are.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Hey, what if I pay you double? I mean, seriously, my dad is LOADED.") +sm.setParam(0) +sm.sendSay("Oh... Really? How much can you pay me right now?") +sm.setParam(4) +sm.sendSay("Uh, maybe just like half now, half later? I've gotta save SOME cash... what if I find a house I need to buy? ") +sm.setParam(0) +sm.sendSay("A fair deal, my name is...") +sm.setParam(2) +res = sm.sendAskYesNo("Wait. We're in danger! Lupos!") +sm.startQuest(parentID) +sm.setParam(4) +sm.sendNext("Aww, man, I HATE Lupos! Don't let them bite this beautiful lady!") +sm.startQuest(parentID) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) diff --git a/scripts/quest/q17657e.py b/scripts/quest/q17657e.py new file mode 100755 index 0000000..3aa8b72 --- /dev/null +++ b/scripts/quest/q17657e.py @@ -0,0 +1,29 @@ +# id 17657 ([Commerci Republic] Who's That Lady?), field 865030000 +sm.setSpeakerID(9390205) # Claire Tremier +sm.setParam(32) +sm.setColor(1) +sm.sendNext("There, are you happy now?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Heeeeey! ") +sm.setParam(56) +sm.sendSay("Leon? Did you just black out? Lady, I have no idea who you are.") +sm.setParam(32) +sm.sendSay("You STILL can't just trust me? After everything I've done?") +sm.sendSay("My name is #bClaire Tremier#k. I am the heiress to the Tremier Merchant Union.") +sm.setParam(56) +sm.sendSay("Tremier? That little weasel that called me a murderer?!") +sm.setParam(32) +sm.sendSay("That little WEASEL is my father.") +sm.setParam(56) +sm.sendSay("What is your game here?") +sm.setParam(32) +sm.sendSay("My game? I don't like your tone...") +sm.setParam(56) +sm.sendSay("Well, what are you going to do about it?") +sm.setParam(36) +sm.sendSay("Whoa, #h0#, relax! Miss Tremier obviously has some good reasons for what she's doing. Let's hear her out, and listen to her pretty voice.") +sm.setParam(56) +sm.sendSay("Fine, but this had better be good.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33288") diff --git a/scripts/quest/q17657s.py b/scripts/quest/q17657s.py new file mode 100755 index 0000000..904eee5 --- /dev/null +++ b/scripts/quest/q17657s.py @@ -0,0 +1,10 @@ +# id 17657 ([Commerci Republic] Who's That Lady?), field 865030000 +sm.setSpeakerID(9390249) # Robed Lady +sm.sendNext("Is it really that important that you find out who I am?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Hey. We have a bond. You and me, I want us to be open with each other. Like, I just peed myself a little when that wolf bit me. See? You go.") +sm.setParam(0) +res = sm.sendAskYesNo("I hope you're ready for a surprise...") +sm.sendNext("Take this.") +sm.startQuest(parentID) diff --git a/scripts/quest/q17658e.py b/scripts/quest/q17658e.py new file mode 100755 index 0000000..3f2531a --- /dev/null +++ b/scripts/quest/q17658e.py @@ -0,0 +1,32 @@ +# id 17658 ([Commerci Republic] Claire's Story), field 865030000 +sm.setSpeakerID(9390205) # Claire Tremier +sm.setParam(32) +sm.setColor(1) +sm.sendNext("My father will do anything anything to protect me... ANYTHING. And that is the problem. He's attempting to marry me to the ruling family of the Heaven Empire. ") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("NOT COOL!") +sm.setParam(32) +sm.sendSay("I have been studying with the Heaven Empire's royal family for some time now, but I hate it there. They are a cruel, and backwards society, and I want to marry for love. And...") +sm.setParam(56) +sm.sendSay("And?") +sm.setParam(32) +sm.sendSay("And... And... I want to be a magician!") +sm.setParam(56) +sm.sendSay("A magician? Seriously?") +sm.setParam(32) +sm.sendSay("Oh, I know it's a foolish reason to give up an empire, but it is the only thing that makes me happy. I've been studying magic in secret since I was six!") +sm.setParam(56) +sm.sendSay("Hence the awesome magic show on the ship...") +sm.setParam(32) +sm.sendSay("Yes, but there's a limit to how much I can learn on my own. I've decided to study abroad, but I can't tell father. But... I don't know how to pay for it... So... ") +sm.setParam(56) +sm.sendSay("You're playing bodyguard for us to make the money... I get it.") +sm.setParam(32) +sm.sendSay("Yes, I suppose I am. ") +sm.setParam(56) +sm.sendSay("So, any idea why your dad wants to make me out as a murderer?") +sm.setParam(32) +sm.sendSay("No. That was... unexpected. I would have to assume it has something to do with his communications with the Heaven Empire though.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33289") diff --git a/scripts/quest/q17658s.py b/scripts/quest/q17658s.py new file mode 100755 index 0000000..4e0016e --- /dev/null +++ b/scripts/quest/q17658s.py @@ -0,0 +1,15 @@ +# id 17658 ([Commerci Republic] Claire's Story), field 865030000 +sm.setSpeakerID(9390205) # Claire Tremier +sm.setParam(32) +sm.setColor(1) +sm.sendNext("You don't get to tell me when to talk. You should be thanking me for saving your worthless life.") +sm.setParam(56) +sm.sendSay("Of course I'm thankful for that... but it doesn't make you trustworthy. You could just be protecting us for some bigger scheme.") +sm.setParam(32) +res = sm.sendAskYesNo("Fine, hold on to your mistrust like a child with a blanket, but listen to me.") +sm.startQuest(parentID) +sm.sendNext("As I was trying to tell you, I am Vaughn Tremier's daughter, and sole heiress to the Tremier Merchant Union. I am his only daughter, and my mother passed away when I was born, so he's a bit protective of me.") +sm.setParam(56) +sm.sendSay("Then why are you sneaking around town?") +sm.setParam(32) +sm.sendSay("That SHOULD be obvious... ") diff --git a/scripts/quest/q17660e.py b/scripts/quest/q17660e.py new file mode 100755 index 0000000..5b533f8 --- /dev/null +++ b/scripts/quest/q17660e.py @@ -0,0 +1,15 @@ +# id 17660 ([Commerci Republic] Clairenapped), field 865030000 +sm.setSpeakerID(9390236) # Leon Daniella +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390227) # Guild Assassin +sm.sendNext("Get out of here! We'll get them later!") +sm.setParam(0) +sm.sendSay("I'll catch you! I was born to do this!") +sm.setParam(2) +sm.sendSay("Leon, STOP! You have to stop rushing into things!") +sm.setParam(0) +sm.sendSay("But... But... ") +sm.completeQuestNoCheck(parentID) +sm.completeQuestNoCheck(17741) +sm.createQuestWithQRValue(18418, "B=33291") +sm.createQuestWithQRValue(18418, "B=33292") diff --git a/scripts/quest/q17660s.py b/scripts/quest/q17660s.py new file mode 100755 index 0000000..ab2fcc8 --- /dev/null +++ b/scripts/quest/q17660s.py @@ -0,0 +1,56 @@ +# id 17660 ([Commerci Republic] Clairenapped), field 865030000 +sm.setSpeakerID(9390236) # Leon Daniella +sm.setParam(2) +sm.sendNext("What's going on? Where's Claire?") +sm.setParam(0) +sm.sendSay("I got ambushed! Some guys with crazy ninja faces came and I was like, 'BOOM no way guys stop it!' and then I attacked, but they were like, 'jump on his back and mess him up!' and now Claire's gone!") +sm.sendSay("Do you think she ran away? Or was she kidnapped? Maybe she doesn't like my cologne. Do I wear too much cologne?") +sm.setParam(2) +sm.sendSay("Calm down, Leon. She'll be fine.") +sm.setParam(0) +res = sm.sendAskYesNo("We have to find her before something happens!") +sm.startQuest(parentID) +sm.showNpcSpecialActionByTemplateId(9390227, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9390228, "summon", 0) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390227) # Guild Assassin +sm.sendNext("You'd be better off worrying about your own lives.") +sm.setParam(1) +sm.sendSay("Who are you?") +sm.setParam(5) +sm.sendSay("You won't be alive long enough for that to matter.") +sm.setParam(3) +sm.sendSay("You're one of the assassins who attacked the Heaven Empire envoy!") +sm.setParam(5) +sm.sendSay("You got me! Now prepare to meet your maker.") +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(parentID) +sm.startQuest(16689) diff --git a/scripts/quest/q17661e.py b/scripts/quest/q17661e.py new file mode 100755 index 0000000..e7550f3 --- /dev/null +++ b/scripts/quest/q17661e.py @@ -0,0 +1,11 @@ +# id 17661 ([Commerci Republic] Unstable Future), field 865030000 +sm.setSpeakerID(9390236) # Leon Daniella +sm.sendNext("Yes! You are so smart! Let's look for Claire!") +sm.startQuest(16689) +sm.setParam(2) +sm.sendSay("Let's take it slow, and head after them. They have to know that Claire is a Tremier, and that means they won't hurt her.") +sm.setParam(0) +sm.sendSay("I definitely saw them running off into the forest. Let's be as quiet as the wind.") +sm.sendSay("Here, sidekick, take this. We don't know what's out there, and you might get hurt.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33293") diff --git a/scripts/quest/q17661s.py b/scripts/quest/q17661s.py new file mode 100755 index 0000000..ea9d39a --- /dev/null +++ b/scripts/quest/q17661s.py @@ -0,0 +1,23 @@ +# id 17661 ([Commerci Republic] Unstable Future), field 865030000 +sm.setSpeakerID(9390236) # Leon Daniella +sm.setParam(2) +sm.sendNext("Calm down. We can catch up to them.") +sm.setParam(0) +sm.sendSay("I just get so excited in my brain. I'm all fired up! I've got the vigor in my heart.") +res = sm.sendAskYesNo("But we need to think about what we're going to do and use some strategies.") +sm.startQuest(parentID) +sm.setParam(32) +sm.setColor(1) +sm.sendNext("We have two missions, sidekick. First up, clear our names, because people think we're bad, and we are NOT bad. Second, rescue Claire and make her my girlfriend.") +sm.sendSay("I'm sorry to say it, #h0#, but Claire comes first. She's way prettier than you. Besides, chicks dig outlaws.") +sm.sendSay("You can work on that other thing, but I'm going after her right now. Don't try to follow me!") +sm.setParam(56) +sm.sendSay("Um, I actually think we could just do both things at the same time.") +sm.setParam(32) +sm.sendSay("What?! That's crazy. Claire doesn't know anything about assassinating guys. She's too nice to know assassins.") +sm.setParam(56) +sm.sendSay("The guys we saw after Claire disappeared were the same guys I saw when the envoy was attacked. If we can catch them, we can clear our names.") +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) diff --git a/scripts/quest/q17662e.py b/scripts/quest/q17662e.py new file mode 100755 index 0000000..9f44a32 --- /dev/null +++ b/scripts/quest/q17662e.py @@ -0,0 +1,5 @@ +# id 17662 ([Commerci Republic] A Claire Hunt), field 865030101 +sm.setSpeakerID(9390263) # Leon Daniella +sm.sendNext("There's some bad energy nearby... and look how those guys are dressed.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33294") diff --git a/scripts/quest/q17662s.py b/scripts/quest/q17662s.py new file mode 100755 index 0000000..ca4ec1f --- /dev/null +++ b/scripts/quest/q17662s.py @@ -0,0 +1,8 @@ +# id 17662 ([Commerci Republic] A Claire Hunt), field 865030000 +sm.setSpeakerID(9390236) # Leon Daniella +res = sm.sendAskYesNo("Are you ready to go find Claire? ") +sm.sendNext("They were headed towards the #b#m865030200##k. Let's go!") +sm.startQuest(parentID) +sm.startQuest(16689) +sm.startQuest(16689) +sm.startQuest(16689) diff --git a/scripts/quest/q17663e.py b/scripts/quest/q17663e.py new file mode 100755 index 0000000..a18421b --- /dev/null +++ b/scripts/quest/q17663e.py @@ -0,0 +1,7 @@ +# id 17663 ([Commerci Republic] Assassins's Den), field 865030101 +sm.setSpeakerID(9390263) # Leon Daniella +sm.sendNext("Whew, I think we did it.") +sm.sendSay("Hurry, let's go inside.") +sm.completeQuestNoCheck(parentID) +sm.completeQuestNoCheck(parentID) +sm.warp(865030111) diff --git a/scripts/quest/q17663s.py b/scripts/quest/q17663s.py new file mode 100755 index 0000000..6cd57a6 --- /dev/null +++ b/scripts/quest/q17663s.py @@ -0,0 +1,18 @@ +# id 17663 ([Commerci Republic] Assassins's Den), field 865030101 +sm.setSpeakerID(9390263) # Leon Daniella +sm.sendNext("They must be the gatekeepers.") +sm.setParam(2) +sm.sendSay("There are too many of them out there to just be guarding a gate. ") +sm.setParam(0) +res = sm.sendAskYesNo("Maybe the gate is made of gold... Whatever the case, we've gotta beat them up. This... is what I was born to do.") +sm.startQuest(parentID) +sm.sendNext("I'm taking you suckers down!") +sm.startQuest(parentID) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q17665e.py b/scripts/quest/q17665e.py new file mode 100755 index 0000000..2ee0ede --- /dev/null +++ b/scripts/quest/q17665e.py @@ -0,0 +1,10 @@ +# id 17665 ([Commerci Republic] Zero Patience), field 865030111 +sm.setSpeakerID(9390236) # Leon Daniella +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9390207) # Zion +sm.sendNext("Claire, my darling, keep watch. This might be amusing.") +sm.setParam(56) +sm.sendSay("What are you on about?") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33297") diff --git a/scripts/quest/q17665s.py b/scripts/quest/q17665s.py new file mode 100755 index 0000000..21e0924 --- /dev/null +++ b/scripts/quest/q17665s.py @@ -0,0 +1,35 @@ +# id 17665 ([Commerci Republic] Zero Patience), field 865030111 +sm.setSpeakerID(9390236) # Leon Daniella +sm.setParam(33) +sm.setColor(1) +sm.sendNext("(Pssst, #h0#, can you hear them?)") +sm.setParam(57) +sm.sendSay("(Nope.)") +sm.setParam(33) +sm.sendSay("(Let's just go in there and save Claire.)") +sm.setParam(57) +sm.sendSay("(Wait.)") +sm.setParam(33) +sm.sendSay("(She's in danger! That guy is super bullying her!)") +sm.setParam(57) +sm.sendSay("(Don't move! I think they know each other...)") +sm.setParam(33) +sm.sendSay("(I have to save her... This is what I was born to do, sidekick!)") +sm.setParam(57) +sm.sendSay("(H-hey!!)") +sm.startQuest(parentID) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390207) # Zion +sm.sendSay("Who's there?") +sm.setParam(33) +sm.sendSay("Remember me, Zion?!") +sm.setParam(37) +sm.sendSay("Ah, the Prime Minister's deckhand. What brings you here?") +sm.setParam(33) +sm.sendSay("Shut up and get away from my Claire!") +sm.setParam(37) +sm.sendSay("Oh, do you know my darling Claire-bear? I am... an acquaintance like yourself, Mr. Daniella. Though I hardly think you meet her standards.") +sm.setParam(57) +sm.sendSay("Don't listen to his lies, Leon. Why did you fake your own death, goldilocks? What are you plotting?!") +sm.setParam(37) +sm.sendPrev("Ah, you're the... traveler. I apologize for getting you involved, but I'm afraid you can't be allowed to know what you know.") diff --git a/scripts/quest/q17666e.py b/scripts/quest/q17666e.py new file mode 100755 index 0000000..a151f7b --- /dev/null +++ b/scripts/quest/q17666e.py @@ -0,0 +1,13 @@ +# id 17666 ([Commerci Republic] A Deadly Game), field 865030121 +sm.setSpeakerID(9390236) # Leon Daniella +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9390218) # Il Capo +sm.sendNext("My deadly trap was broken... how?!") +sm.setParam(3) +sm.sendSay("That was a close one. I thought that trap was going to get us. ") +sm.setParam(1) +sm.sendSay("We lost him! Arg!") +sm.setParam(3) +sm.sendSay("Don't worry about it, Leon. We have his boss. Isn't that right, Zion? I think it's time we had a little talk.") +sm.completeQuestNoCheck(parentID) +sm.warp(865030111) diff --git a/scripts/quest/q17666s.py b/scripts/quest/q17666s.py new file mode 100755 index 0000000..3077ef1 --- /dev/null +++ b/scripts/quest/q17666s.py @@ -0,0 +1,18 @@ +# id 17666 ([Commerci Republic] A Deadly Game), field 865030111 +sm.setSpeakerID(9390238) # Zion +sm.setParam(32) +sm.setColor(1) +sm.sendNext("Nothing, nothing. Il Capo?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390218) # Il Capo +sm.sendSay("......") +sm.setParam(32) +sm.sendSay("Dispose of them.") +sm.setParam(36) +sm.sendSay("No problem.") +sm.setParam(56) +sm.sendSay("What? Who's this guy?") +sm.setParam(36) +sm.sendSay("I'm the last face you'll ever see.") +sm.startQuest(parentID) +sm.warp(865030121) diff --git a/scripts/quest/q17667e.py b/scripts/quest/q17667e.py new file mode 100755 index 0000000..ce86cbe --- /dev/null +++ b/scripts/quest/q17667e.py @@ -0,0 +1,31 @@ +# id 17667 ([Commerci Republic] Plans from Heaven), field 865030111 +sm.setSpeakerID(9390238) # Zion +sm.setParam(32) +sm.setColor(1) +sm.sendNext("W-we knew that Gilberto would reject our peace treaty.") +sm.setParam(56) +sm.sendSay("Why did you even propose them if you knew they'd be rejected?") +sm.setParam(32) +sm.sendSay("M-my assassins believed that... that linking the Prime Minister of Commerci to the assassination of a peace envoy would be disastrous with the other nations...") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("And then they'd all turn their backs on us! You were trying to break us down and isolate us! ") +sm.setParam(32) +sm.sendSay("T-that was His Grace's plan, yes.") +sm.setParam(56) +sm.sendSay("We're going to march back to town, and you're going to tell everyone what you just told me.") +sm.setParam(32) +sm.sendSay("Y-yes... but you must offer me asylum.") +sm.setParam(36) +sm.sendSay("AND, we get to have your stuff.") +sm.setParam(32) +sm.sendSay("T-that's...!") +sm.setParam(36) +sm.sendSay("What? Mine? You're right. It IS mine now. Unless you want mr. mustache to meet the tweezers... ") +sm.setParam(32) +sm.sendSay("N-no. I was going to say... that's m-my gift... to you!") +sm.setParam(36) +sm.sendSay("Oh, really? Thanks man, that's super nice. I kinda feel bad now.") +sm.sendSay("Hey #h0#, you should use this.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33299") diff --git a/scripts/quest/q17667s.py b/scripts/quest/q17667s.py new file mode 100755 index 0000000..7c13783 --- /dev/null +++ b/scripts/quest/q17667s.py @@ -0,0 +1,24 @@ +# id 17667 ([Commerci Republic] Plans from Heaven), field 865030111 +sm.setSpeakerID(9390238) # Zion +sm.setParam(32) +sm.setColor(1) +sm.sendNext("U-unacceptable...") +sm.setParam(56) +sm.sendSay("Why did you fake your death?") +sm.setParam(32) +sm.sendSay("I don't have to answer your questions. You have no right to hold me here!") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +res = sm.sendAskYesNo("(#h0#, do you think you can get him to talk?)") +sm.startQuest(parentID) +sm.setParam(56) +sm.sendNext("Hey Leon. Hostages don't need their hair, right? Or their creepy little mustaches?") +sm.setParam(36) +sm.sendSay("No, I don't really see why they would. Hey, they don't need their clothes either!") +sm.setParam(56) +sm.sendSay("Yeah, if this guy was bald AND naked, he'd be too embarrassed to leave. I think i've got a tweezer in my bag here...") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390207) # Zion +sm.sendSay("It was the assassins' idea! They are the ones who forced me to fake my own death.") +sm.setParam(56) +sm.sendSay("See? That was easy.") diff --git a/scripts/quest/q17668e.py b/scripts/quest/q17668e.py new file mode 100755 index 0000000..8abc950 --- /dev/null +++ b/scripts/quest/q17668e.py @@ -0,0 +1,19 @@ +# id 17668 ([Commerci Republic] Twice Cooked), field 865030300 +sm.setSpeakerID(9390237) # Claire Tremier +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendNext("Are you okay Claire? Did they hurt you? I will fight anyone who hurt you!") +sm.setParam(0) +sm.sendSay("I'm fine. I'm glad you're both alive.") +sm.setParam(4) +sm.sendSay("I'm glad you're alive too, Claire. Just in general.") +sm.setParam(0) +sm.sendSay("What happened to Zion and his henchmen?") +sm.setParam(2) +sm.sendSay("I've got some bad news... Zion was assassinated. We couldn't save him.") +sm.setParam(0) +sm.sendSay("Zion is... dead?") +sm.setParam(4) +sm.sendSay("But we're all alive!") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33300") diff --git a/scripts/quest/q17668s.py b/scripts/quest/q17668s.py new file mode 100755 index 0000000..0e67fef --- /dev/null +++ b/scripts/quest/q17668s.py @@ -0,0 +1,35 @@ +# id 17668 ([Commerci Republic] Twice Cooked), field 865030111 +sm.setSpeakerID(9390238) # Zion +sm.sendNext("So s-should we go? I don't feel safe here.") +sm.setParam(2) +sm.sendSay("Yeah, let's leave..") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Wait, where's Claire?") +sm.setParam(0) +sm.sendSay("She is safe. One of my men escorted her away before the battle.") +sm.sendSay("She's likely in #b#m865030300##k.") +sm.setParam(2) +res = sm.sendAskYesNo("I see, then let's go.") +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Let's go see Gilberto.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390218) # Il Capo +sm.sendSay("I don't think so.") +sm.setParam(32) +sm.sendSay("Gah!") +sm.startQuest(parentID) +sm.setParam(57) +sm.sendSay("Zion! Wake up Zion!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("...He's gone. Maaaaan, how are we going to clear our names?!") +sm.setParam(57) +sm.sendSay("We let our guard down, and now... what are we going to do?") +sm.setParam(37) +sm.sendSay(" We at least have to find Claire.") +sm.setParam(57) +sm.sendSay("Where did Zion say she was?") +sm.setParam(37) +sm.sendSay("#b#m865030300##k. Let's move.") diff --git a/scripts/quest/q17669e.py b/scripts/quest/q17669e.py new file mode 100755 index 0000000..bde4ebf --- /dev/null +++ b/scripts/quest/q17669e.py @@ -0,0 +1,9 @@ +# id 17669 ([Commerci Republic] Barricaded 2), field 865030300 +sm.setSpeakerID(9390236) # Leon Daniella +sm.setParam(2) +sm.sendNext("This is like the barriers the Delfinos were using...") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +sm.sendSay("Let's see if we can get through.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33301") diff --git a/scripts/quest/q17669s.py b/scripts/quest/q17669s.py new file mode 100755 index 0000000..e3cb477 --- /dev/null +++ b/scripts/quest/q17669s.py @@ -0,0 +1,20 @@ +# id 17669 ([Commerci Republic] Barricaded 2), field 865030300 +sm.setSpeakerID(9390237) # Claire Tremier +sm.setParam(2) +sm.sendNext("Let's return to San Commerci.") +sm.setParam(0) +sm.sendSay("Yes, we should... wait. I sense something... ") +sm.setParam(2) +sm.sendSay("What do you mean?") +sm.setParam(0) +sm.sendSay("There's an ominous presence nearby...") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390202) # Leon Daniella +res = sm.sendAskYesNo("If Claire says she feels ominous, we have GOT to check it out. ") +sm.startQuest(parentID) +sm.setParam(2) +sm.sendNext("Okay... Claire, where do we go?") +sm.setParam(0) +sm.sendSay("It's nearby. It's been there from the start, but I thought it was the assassins at first.") +sm.setParam(2) +sm.sendSay("Then we'd better look around.") diff --git a/scripts/quest/q17670e.py b/scripts/quest/q17670e.py new file mode 100755 index 0000000..33dbf5b --- /dev/null +++ b/scripts/quest/q17670e.py @@ -0,0 +1,8 @@ +# id 17670 ([Commerci Republic] Ominous Feeling), field 865030400 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("The sense of evil here is overwhelming... it's like I can't breathe... Something powerful is down here.") +sm.sendSay("I'd better get back to town for now. I have to prove my innocence before it's too late.") +sm.sendSay("Whew, I can finally breathe again! It was nasty in there...") +sm.completeQuestNoCheck(parentID) +sm.warp(865030300) diff --git a/scripts/quest/q17670s.py b/scripts/quest/q17670s.py new file mode 100755 index 0000000..3e0e8bb --- /dev/null +++ b/scripts/quest/q17670s.py @@ -0,0 +1,20 @@ +# id 17670 ([Commerci Republic] Ominous Feeling), field 865030300 +sm.setSpeakerID(9390236) # Leon Daniella +sm.sendNext("Claire, do you think you were sensing this barrier?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390205) # Claire Tremier +sm.sendSay("I believe so. It certainly feels the same... dark and nefarious.") +sm.setParam(0) +res = sm.sendAskYesNo("#h0#, it's time for us to go in, and and take a look.") +sm.startQuest(parentID) +sm.setParam(2) +sm.sendNext("Let me take this one alone. You stay here.") +sm.setParam(0) +sm.sendSay("What? I was BORN to do this!") +sm.setParam(2) +sm.sendSay("You weren't born to do anything! Just stay here and watch Claire. ") +sm.setParam(0) +sm.sendSay("Oooooh, I get it. Nice move, sidekick. I'll stay here with Claire.") +sm.setParam(2) +sm.sendSay("Great, yes. I'm going in.") +sm.warp(865030400) diff --git a/scripts/quest/q17671e.py b/scripts/quest/q17671e.py new file mode 100755 index 0000000..89d244c --- /dev/null +++ b/scripts/quest/q17671e.py @@ -0,0 +1,8 @@ +# id 17671 ([Commerci Republic] San Commerci, I Missed You), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.setParam(2) +sm.sendNext("Sir.") +sm.setParam(0) +sm.sendSay("You've returned...") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33303") diff --git a/scripts/quest/q17671s.py b/scripts/quest/q17671s.py new file mode 100755 index 0000000..ee0ed42 --- /dev/null +++ b/scripts/quest/q17671s.py @@ -0,0 +1,16 @@ +# id 17671 ([Commerci Republic] San Commerci, I Missed You), field 865030300 +sm.setSpeakerID(9390236) # Leon Daniella +sm.sendNext("What'd you find?") +sm.setParam(2) +sm.sendSay("I didn't go too far in, but there's something mean in there. It felt like something was trying to kill me with its mind.") +sm.setParam(0) +res = sm.sendAskYesNo("Whoa, good thing you came back. Let's just get back to my dad in San Commerci and fix this whole thing up.") +sm.startQuest(parentID) +sm.setParam(2) +sm.sendNext("Yeah, let's go back. I think we could all use a rest.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390205) # Claire Tremier +sm.sendSay("I-I can't face my father. I'll go as far as the city gates...") +sm.setParam(0) +sm.sendSay("Okay, let's go.") +sm.warp(865000000) diff --git a/scripts/quest/q17672e.py b/scripts/quest/q17672e.py new file mode 100755 index 0000000..2915df2 --- /dev/null +++ b/scripts/quest/q17672e.py @@ -0,0 +1,31 @@ +# id 17672 ([Commerci Republic] Claire Tremier: Ace Attorney), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9390205) # Claire Tremier +sm.sendNext("It's all true.") +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("C-Claire?! What are you doing in San Commerci?!") +sm.setParam(32) +sm.sendSay("This is your daughter, is it not, Vaughn?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390205) # Claire Tremier +sm.sendSay("Hello, Prime Minister Daniella.") +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("Why are you here? You should be in the Heaven Empire! Your studies!") +sm.setInnerOverrideSpeakerTemplateID(9390205) # Claire Tremier +sm.sendSay("I'll tell you more later father. For now, you have to know that everything this person says is true. I saw it all. Zion tried to silence them...") +sm.setParam(32) +sm.sendSay("Is that so?") +sm.setParam(36) +sm.sendSay("Zion kidnapped me, father, but these two rescued me from his grasp.") +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("K-kidnapped?!") +sm.setParam(32) +sm.sendSay("Thank you for the information, Claire. Now, Vaughn, would you say that these two have proven their innocence, or do you mistrust even your own daughter?") +sm.setParam(36) +sm.sendSay("I... Fine. Claire, come with me!") +sm.setInnerOverrideSpeakerTemplateID(9390205) # Claire Tremier +sm.sendSay("Until we meet again...") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33304") diff --git a/scripts/quest/q17672s.py b/scripts/quest/q17672s.py new file mode 100755 index 0000000..3d2730e --- /dev/null +++ b/scripts/quest/q17672s.py @@ -0,0 +1,37 @@ +# id 17672 ([Commerci Republic] Claire Tremier: Ace Attorney), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.setParam(56) +sm.setColor(1) +sm.sendNext("Sir, I have something to tell you.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(9390206) # Vaughn Tremier +sm.sendSay("How DARE you come back here?!") +sm.setParam(32) +sm.sendSay("Why are you here?") +sm.setParam(36) +sm.sendSay("Gilberto, there's no point in listening to this nonsense! Why aren't you arresting them?") +sm.setParam(32) +res = sm.sendAskYesNo("Why are you so afraid to hear what they have to say, Vaughn? Please, say what you've come to say. ") +sm.setParam(56) +sm.sendNext("Zion, the delegate from the Heaven Empire, faked his death.") +sm.setParam(32) +sm.sendSay("Faked?") +sm.setParam(56) +sm.sendSay("It was part of a plot to isolate Commerci from the other nations of Dawnveil.") +sm.setParam(32) +sm.sendSay("A conspiracy...") +sm.setParam(56) +sm.sendSay("Yes. They wanted it to look like he was assassinated for bringing a peace treaty to you. The other nations wouldn't know how unfair the treaty had been.") +sm.setParam(36) +sm.sendSay("This is utter nonsense!") +sm.setParam(32) +sm.sendSay("Where is the envoy now?") +sm.setParam(56) +sm.sendSay("We... we captured him, but a real assassin got to him before we could get to San Commerci. It had to have been someone from the Heaven Empire...") +sm.setParam(32) +sm.sendSay("So he is lost to us for good now?") +sm.setParam(56) +sm.sendSay("Correct.") +sm.setParam(36) +sm.sendSay("This is ridiculous! This yarn wouldn't be fit for a children's book!") +sm.startQuest(parentID) diff --git a/scripts/quest/q17673e.py b/scripts/quest/q17673e.py new file mode 100755 index 0000000..a6b99ae --- /dev/null +++ b/scripts/quest/q17673e.py @@ -0,0 +1,13 @@ +# id 17673 ([Commerci Republic] Undeniable Proof), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("Definitely suspicious, but with no hard evidence, there's not much I can do.") +sm.setParam(2) +sm.sendSay("If only I could have saved Zion...") +sm.setParam(0) +sm.sendSay("That man chose his fate. Consorting with assassins is a dangerous game, and betraying them is downright foolish. Anyway, you and I have more pressing matters to discuss.") +sm.setParam(2) +sm.sendSay("We do?") +sm.setParam(0) +sm.sendSay("Give me a short moment, would you?") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33305") diff --git a/scripts/quest/q17673s.py b/scripts/quest/q17673s.py new file mode 100755 index 0000000..fb53647 --- /dev/null +++ b/scripts/quest/q17673s.py @@ -0,0 +1,24 @@ +# id 17673 ([Commerci Republic] Undeniable Proof), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.sendNext("I knew you were innocent. I'm glad that we could prove it.") +sm.setParam(2) +sm.sendSay("I'm glad we could work everything out too. I felt bad that Leon got swept up in this.") +sm.setParam(0) +sm.sendSay("The course of a man's life is decided by their behavior in moments of peril. This will be good for my son. I only hope he can forgive my betrayal as a father...") +sm.setParam(2) +sm.sendSay("You're the leader of the Republic. I think he'll understand that you had to do what was best for the nation.") +sm.setParam(0) +res = sm.sendAskYesNo("I hope. Can you tell me more about what happened with the Heaven Empire envoy?") +sm.startQuest(parentID) +sm.setParam(2) +sm.sendNext("Sure. It was actually Claire who rescued us before we were arrested.") +sm.setParam(0) +sm.sendSay("She used magic to save you?") +sm.setParam(2) +sm.sendSay("Yes, she's pretty good at it, actually. We were hiding out in the forest on the outskirts of San Commerci, but Claire was abducted.") +sm.setParam(0) +sm.sendSay("And the abductors were assassins from the Heaven Empire?") +sm.setParam(2) +sm.sendSay("I'm not 100% sure, but Zion was ordering them around. He said they were the ones who came up with the plot.") +sm.setParam(0) +sm.sendSay("Hmmm... But for all we know, they could be an independent group, or mercenaries. And with Zion gone, there is no way to find out.") diff --git a/scripts/quest/q17674e.py b/scripts/quest/q17674e.py new file mode 100755 index 0000000..23ba3a2 --- /dev/null +++ b/scripts/quest/q17674e.py @@ -0,0 +1,6 @@ +# id 17674 ([Commerci Republic] Mutually Beneficial), field 865000000 +sm.setSpeakerID(9390256) # Leon Daniella +sm.setParam(2) +sm.sendNext("Hey, there's Leon! And... Claire? What are they up to?") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33307") diff --git a/scripts/quest/q17674s.py b/scripts/quest/q17674s.py new file mode 100755 index 0000000..89f3683 --- /dev/null +++ b/scripts/quest/q17674s.py @@ -0,0 +1,26 @@ +# id 17674 ([Commerci Republic] Mutually Beneficial), field 865000002 +sm.setSpeakerID(9390203) # Gilberto Daniella +sm.setParam(32) +sm.setColor(1) +sm.sendNext("You've been embroiled in our politics against your will, but I have one more favor to ask you.") +sm.setParam(56) +sm.sendSay("Is it about Leon? I don't think I can fix him.") +sm.setParam(32) +sm.sendSay("No, no. Leon is... he will grow into himself. I have a more subtle task for you. Will you hear me out?") +sm.setParam(56) +sm.sendSay("Sure, what can I do?") +sm.setParam(32) +res = sm.sendAskYesNo("You're quite kind, haha. Could you deliver this letter to Empress Cygnus.") +sm.startQuest(parentID) +sm.setParam(56) +sm.sendNext("Empress Cygnus? What... is it?") +sm.setParam(32) +sm.sendSay("It's a peace treaty, though I assure the terms are fair and equitable, haha. I would like to propose an alliance between our peoples.") +sm.setParam(56) +sm.sendSay("Whoa... Of course! I'll read it to her a thousand times if I need to!") +sm.setParam(32) +sm.sendSay("You have been a strange and welcome visitor, #h0#. I hope to see you again soon. Leon will be waiting for you at the harbor.") +sm.setParam(56) +sm.sendSay("Thank you, sir. I'll come back and visit soon!") +sm.setParam(32) +sm.sendSay("See that you do.") diff --git a/scripts/quest/q17675e.py b/scripts/quest/q17675e.py new file mode 100755 index 0000000..22e650f --- /dev/null +++ b/scripts/quest/q17675e.py @@ -0,0 +1,17 @@ +# id 17675 ([Commerci Republic] His Circumstances), field 865000000 +sm.setSpeakerID(9390240) # Claire Tremier +sm.setParam(56) +sm.setColor(1) +sm.sendNext("Uh, Miss Claire, can I bother you for a moment?") +sm.setParam(32) +sm.sendSay("Oh, you... What is your name?") +sm.setParam(56) +sm.sendSay("Sorry, I guess I never introduced myself. I'm #h0#.") +sm.setParam(32) +sm.sendSay("I guess not. What do you need from me, #h0#?") +sm.setParam(56) +sm.sendSay("Leon asked me to give you this.") +sm.setParam(32) +sm.sendSay("Oh, yes, that does look like his brutish scrawl. Thank you very much.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33308") diff --git a/scripts/quest/q17675s.py b/scripts/quest/q17675s.py new file mode 100755 index 0000000..437f444 --- /dev/null +++ b/scripts/quest/q17675s.py @@ -0,0 +1,42 @@ +# id 17675 ([Commerci Republic] His Circumstances), field 865000000 +sm.setSpeakerID(9390256) # Leon Daniella +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9390240) # Claire Tremier +sm.sendNext("...I'll be going.") +sm.hideNpcByTemplateIdhi(9390237, True, True) +sm.setParam(56) +sm.sendSay("Hey, Leon.") +sm.setParam(32) +sm.sendSay("Hm? Oh, hey, sidekick. I heard from dad. When you're ready...") +sm.setParam(56) +sm.sendSay("Wait... What did I just see? What's going on between you two?") +sm.setParam(32) +sm.sendSay("Hm? Oh, you mean Miss Tremier?") +sm.setParam(56) +sm.sendSay("Wait, wait, wait. What happened to all the girlfriend talk?! What's going on?!") +sm.setParam(32) +sm.sendSay("We, uh, we just decided to, like, get to know each other. She says I have to be more gentlemanly.") +sm.setParam(56) +sm.sendSay("Wait, does she actually LIKE you? Like, like-like?! Go get her, man!") +sm.setParam(32) +sm.sendSay("She and I both have a lot of stuff we want to do in life before we bring a new person into our families. We're gonna take it slow...") +sm.setParam(56) +sm.sendSay("I... wasn't talking about marriage... But whatever works.") +sm.setParam(32) +res = sm.sendAskYesNo("Hey, I've still got to round up my crew before we set sail. Can you do one last thing for me?") +sm.startQuest(parentID) +sm.setParam(56) +sm.sendNext("A favor? What is it?") +sm.setParam(32) +sm.sendSay("W-well. I wrote a letter for Miss Tremier, but we got so caught up saying goodbye that I forgot to give it to her. Could you take it to her before she leaves for the Heaven Empire?") +sm.setParam(56) +sm.sendSay("Are you sure you don't want to give it to her yourself? You don't know when you'll see her again.") +sm.setParam(32) +sm.sendSay("Oh, man, you think she'd give me a kiss? No, Leon, no! That's not what a gentleman would do. I think. Ohh, I miss her eyes...") +sm.setParam(56) +sm.sendSay("(I think I'm going to vomit...)") +sm.setParam(32) +sm.sendSay("It's better if you do it. I'll become a better man and win her the right way. It's more romance novely that way, right? Haha!") +sm.setParam(56) +sm.sendSay("Uggghhhh fine. Just leave me out of the next round.") diff --git a/scripts/quest/q17676e.py b/scripts/quest/q17676e.py new file mode 100755 index 0000000..3083d71 --- /dev/null +++ b/scripts/quest/q17676e.py @@ -0,0 +1,25 @@ +# id 17676 ([Commerci Republic] Her Circumstances), field 865000000 +sm.setSpeakerID(9390256) # Leon Daniella +sm.setParam(32) +sm.setColor(1) +sm.sendNext("Hey, you're back! Was she swooning over me? No, Leon, that's not gentlemanly. But was she?") +sm.setParam(56) +sm.sendSay("I gave her your letter.") +sm.setParam(32) +sm.sendSay("Did she read it? Did she look happy? Was she touching her hair? You can tell a girl likes you if they touch their hair! ") +sm.setParam(56) +sm.sendSay("(Leon, you are so clueless!) Oh... yeah... totally... all kinds of hair touching. And she asked me to give this to you.") +sm.setParam(32) +sm.sendSay("YES! What is it?") +sm.setParam(56) +sm.sendSay("Man, I don't know! You open it.") +sm.setParam(32) +sm.sendSay("Let... me... see... What is this?") +sm.setParam(56) +sm.sendSay("Looks like some kind of charm. ") +sm.setParam(32) +sm.sendSay("It must be a good luck, no harm charm! I will never let this leave my person. Ever.") +sm.setParam(56) +sm.sendSay("Maybe just wear it like half of the time... (I really hope that thing is not cursed.)") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33309") diff --git a/scripts/quest/q17676s.py b/scripts/quest/q17676s.py new file mode 100755 index 0000000..0e3e762 --- /dev/null +++ b/scripts/quest/q17676s.py @@ -0,0 +1,33 @@ +# id 17676 ([Commerci Republic] Her Circumstances), field 865000000 +sm.setSpeakerID(9390240) # Claire Tremier +sm.setParam(56) +sm.setColor(1) +sm.sendNext("Hey, uh, when are you leaving?") +sm.setParam(32) +sm.sendSay("As soon as my father is ready.") +sm.setParam(56) +sm.sendSay("He's going too?") +sm.setParam(32) +sm.sendSay("Yes, I believe this whole business with the kidnappers has put him on edge. He's barely let me go to the bathroom by myself, haha.") +sm.setParam(56) +sm.sendSay("But you're not going to give up, right? On being a magician?") +sm.setParam(32) +sm.sendSay("Of course not! That's ridiculous. I will continue to collect money... and knowledge, so long as I can.") +sm.setParam(56) +sm.sendSay("(She is totally going to run away again.)") +sm.sendSay("Is there anything you want me to tell Leon? Just in case you don't see him again?") +sm.setParam(32) +sm.sendSay("Leon? No. I said my goodbyes. ") +sm.setParam(56) +sm.sendSay("You're not going to miss him?! I thought you two were like...") +sm.setParam(32) +sm.sendSay("Why would I miss him?") +sm.setParam(56) +sm.sendSay("Right, right... Why indeed? (Leon, you poor thing!)") +sm.setParam(32) +res = sm.sendAskYesNo("Actually, could you give him this?") +sm.startQuest(parentID) +sm.setParam(56) +sm.sendNext("Sure, no problem. I'll make sure he gets it. ") +sm.setParam(32) +sm.sendSay("It's... it's a new spell I'm testing out. I hope it works for him.") diff --git a/scripts/quest/q17677e.py b/scripts/quest/q17677e.py new file mode 100755 index 0000000..66e1959 --- /dev/null +++ b/scripts/quest/q17677e.py @@ -0,0 +1,24 @@ +# id 17677 ([Commerci Republic] Back to Lith Harbor), field 104000000 +sm.setSpeakerID(9390200) # Parbell +sm.setParam(2) +sm.sendNext("Whew! It's feels like ages since I've been somewhere familiar.") +sm.setParam(0) +sm.sendSay("Where yuh been?! I thought y'uns was fish food.") +sm.setParam(2) +sm.sendSay("Oh... SERIOUSLY?! Parbell? You're alive?! What are you doing here?") +sm.setParam(0) +sm.sendSay("Hah! Do I looks like a feller what would get done in by such a bitty little storm? Ol' Parbell's seen plenty worse than that on the high seas!") +sm.sendSay("About before... I know it weren't the safe n' cozy voyage I promised, so consider yerself off the hook fer that reward yuh promised me. ") +sm.setParam(2) +sm.sendSay("Were you waiting here for me? How did you know I'd be back?") +sm.setParam(0) +sm.sendSay("Ain't no way a lil' bitty storm like that would leave yuh swimmin' with the fishes. Not if yuh got half the gumption of Ol' Parbell! I's afraid I didn't have much time to look for y'un what with my boat in pieces. But I heard yuh were safe from Mayor Berry, so I went ahead n' booked passage back here.") +sm.setParam(2) +sm.sendSay("(Ugh... You're going to have to complain about this to Neinheart when you return to Ereve.)") +sm.setParam(0) +res = sm.sendAskAccept("I figures yer gonna want a lift back to see that Empress Syggus o' yers. It's only fair I take y'un there fer free in mah new boats. \r\n#b(You will be moved to Ereve if you accept.)#k") +sm.completeQuestNoCheck(parentID) +sm.setParam(1) +sm.sendNext("The weather's pretty fair today, I reckon we won't run afoul o' no trouble.") +sm.createQuestWithQRValue(18418, "B=33310") +sm.warp(130000000) diff --git a/scripts/quest/q17677s.py b/scripts/quest/q17677s.py new file mode 100755 index 0000000..7047d4e --- /dev/null +++ b/scripts/quest/q17677s.py @@ -0,0 +1,6 @@ +# id 17677 ([Commerci Republic] Back to Lith Harbor), field 865000000 +sm.setSpeakerID(9390256) # Leon Daniella +res = sm.sendAskYesNo("We're all ready to set sail. Did you get everything?") +sm.sendNext("All right, time to set sail! Our destination: Lith Harbor!") +sm.startQuest(parentID) +sm.warp(104000000) diff --git a/scripts/quest/q17678e.py b/scripts/quest/q17678e.py new file mode 100755 index 0000000..064125b --- /dev/null +++ b/scripts/quest/q17678e.py @@ -0,0 +1,8 @@ +# id 17678 ([Commerci Republic] Ship of Blood), field 865010011 +sm.setSpeakerID(9390246) # Captain Blood +sm.setParam(2) +sm.sendNext("Captain Blood!") +sm.setParam(0) +sm.sendSay("I've been waitin' for ye!") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33272") diff --git a/scripts/quest/q17678s.py b/scripts/quest/q17678s.py new file mode 100755 index 0000000..93f0ddc --- /dev/null +++ b/scripts/quest/q17678s.py @@ -0,0 +1,37 @@ +# id 17678 ([Commerci Republic] Ship of Blood), field 865010001 +sm.setSpeakerID(9390244) # Leon Daniella +sm.sendNext("W-what the...? He's gone. How'd he do that?") +sm.setParam(2) +sm.sendSay("Leon, look!") +sm.setParam(0) +sm.sendSay("He's already on his ship! Poop! We were so close!") +sm.setParam(2) +sm.sendSay("What now? That felt like our best shot, but he still got away. I don't think following him to his base is a good idea...") +sm.setParam(0) +sm.sendSay("But, but, we can't give up now! I can't go back empty-handed! I'll never get my allowance at this rate!") +res = sm.sendAskYesNo("Look, I know this is probably Captain Blood's trap, leading us into his base like this. You don't have to come, but I'm going. For me, for my dad, and for Commerci!") +sm.setParam(2) +sm.sendNext("Well, when you say it like that, I'm in!") +sm.setParam(0) +sm.sendSay("Really? I thought traps were bad things.") +sm.setParam(2) +sm.sendSay("It's okay. I'm pretty used to this kind of thing. ") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9390204) # Robed Lady +sm.sendSay("Shall I come too?") +sm.setParam(0) +sm.sendSay("No. You stay behind, guard the ship, and think about our date.") +sm.sendSay("All right, #h0#! Let's move out! I got the door! ") +sm.setParam(2) +sm.sendSay("Hold up. I'm going in there alone.") +sm.setParam(0) +sm.sendSay("What? No! I didn't come all this way to watch someone else beat the boss!") +sm.setParam(2) +sm.sendSay("Leon, think about it. You're the captain of this ship. What if something happens while the captain is away? You have to put your crew first.") +sm.setParam(0) +sm.sendSay("Yeah, but... I want glory!") +sm.setParam(2) +sm.sendSay("Shh, I know. But a captain's glory comes from doing his duty.") +sm.setParam(0) +sm.sendSay("...This sucks.") +sm.startQuest(parentID) diff --git a/scripts/quest/q17679s.py b/scripts/quest/q17679s.py new file mode 100755 index 0000000..b3d03c1 --- /dev/null +++ b/scripts/quest/q17679s.py @@ -0,0 +1,38 @@ +# id 17679 ([Commerci Republic] Red Tide), field 865010011 +sm.setSpeakerID(9390246) # Captain Blood +sm.setParam(56) +sm.setColor(1) +sm.sendNext("Your pirating days are over!") +sm.setParam(32) +sm.sendSay("Hahaha! Ye've walked into th' belly a' th' beast and ye don't even know it! ") +sm.setParam(56) +sm.sendSay("That's what you think, scurvy-face! Thanks for bringing your guys along so I can mop the floor with them all at once. ") +sm.setParam(32) +sm.sendSay("Puff up ye chest, wee seagull. I'll gift ye a right whippin' ye'll never forget!") +sm.setParam(56) +res = sm.sendAskYesNo("(This guy... I'm going to swab his decks!)") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.closeUI(1128) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.createQuestWithQRValue(18418, "B=33273") diff --git a/scripts/quest/q17680e.py b/scripts/quest/q17680e.py new file mode 100755 index 0000000..f931068 --- /dev/null +++ b/scripts/quest/q17680e.py @@ -0,0 +1,19 @@ +# id 17680 ([Commerci Republic] Sore Loser), field 865010011 +sm.setSpeakerID(9390246) # Captain Blood +sm.setParam(33) +sm.setColor(1) +sm.sendNext("Ye won't scrape ME off like some blasted barnacle. Th' gods 'o th' sea be on me side!") +sm.setParam(57) +sm.sendSay("W-what is that noise?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9390217) # Tepes +sm.sendSay("G-G-G-Grosso Polpo! Did anybody bring kraken repellant?!") +sm.setParam(57) +sm.sendSay("What's happening? Is the ship in danger?") +sm.setParam(33) +sm.sendSay("'Tis me old matey, #r#eGrosso Polpo, outlaw of the sea#k#n! What's ye move, landlubber?! Fight me 'n face th' sea? Or save ye pretty bucko from th' kraken?") +sm.setParam(57) +sm.sendSay("Leon! Arg! I've gotta save him.") +sm.sendSay("He's through the #e#bportal up front#k#n. Blast it!") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=33274") diff --git a/scripts/quest/q17680s.py b/scripts/quest/q17680s.py new file mode 100755 index 0000000..ab9ca8a --- /dev/null +++ b/scripts/quest/q17680s.py @@ -0,0 +1,8 @@ +# id 17680 ([Commerci Republic] Sore Loser), field 865010011 +sm.setSpeakerID(9390246) # Captain Blood +sm.setParam(33) +sm.setColor(1) +sm.sendNext("Yaarrr... me throbbin' head... how...") +sm.setParam(57) +sm.sendSay("Give it up and hand yourself over. I'll make sure they go easy on you.") +sm.startQuest(parentID) diff --git a/scripts/quest/q17681e.py b/scripts/quest/q17681e.py new file mode 100755 index 0000000..9be570c --- /dev/null +++ b/scripts/quest/q17681e.py @@ -0,0 +1,25 @@ +# id 17681 ([Commerci Republic] Final Report), field 130000000 +sm.setSpeakerID(1101002) # Neinheart +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1540451) # Neinheart +sm.sendNext("Ah, I see you're back. You look like you've had a rough time of it.") +sm.setParam(56) +sm.sendSay("Yeah, thanks to a certain somebody.") +sm.setParam(36) +sm.sendSay("Oh? Well, I hope you dealt with that person appropriately.") +sm.setParam(56) +sm.sendSay("Uh... Anyway, remember how you said you'd arranged my passage to Commerci? Turns out nobody ever paid Parbell. Also, the boat sinking halfway there wasn't exactly what I signed up for.") +sm.setParam(36) +sm.sendSay("Huh? I didn't give you Parbell's ruby? Strange... I rarely forget things like that. As for your having to get a little wet, I deeply apologize. The next time your Empress wants to call for your help, I'll be sure to remind her you only perform duties that are convenient.") +sm.setParam(56) +sm.sendSay("#b(...I'm detecting serious notes of sarcasm in this apology.)#k") +sm.setParam(36) +sm.sendSay("In any case, you've performed your mission admirably, as always. This is precisely why I push you around.") +sm.sendSay("Oh my, that was a slip of the tongue. What I meant was 'this is why I push you to greatness.' Don't misunderstand.") +sm.setParam(56) +sm.sendSay("#b(...I forgot to ask the Empress to give Neinheart a scolding...)#k") +sm.setParam(36) +sm.sendSay("It may not be enough but be reward enough for your service, but this is a gift from the Empress for all your hard work. \r\n\r\n#b#i2049702:##t2049702##k\r\n#b#i2431935:##t2431935##k\r\n#b#i2431936:##t2431936##k") +sm.sendSay("Oh! And one more thing. This was attached to the letter you brought from Commerci. You should take good care of it.\r\n\r\n#b#i1142981:##t1142981##k") +sm.sendPrev("You don't have enough space in your inventory. Please empty at least 2 slots in Equip tab, and 3 slots in Use tab.") diff --git a/scripts/quest/q17681s.py b/scripts/quest/q17681s.py new file mode 100755 index 0000000..ffdd38e --- /dev/null +++ b/scripts/quest/q17681s.py @@ -0,0 +1,33 @@ +# id 17681 ([Commerci Republic] Final Report), field 130000000 +sm.setSpeakerID(1101000) # Cygnus +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1540450) # Cygnus +sm.sendNext("#h0#, I'm glad to see you are well.") +sm.setParam(56) +sm.sendSay("Heya, Empress? I just got back.") +sm.setParam(36) +sm.sendSay("I was beginning to get worried. You were out of touch for a while.") +sm.setParam(56) +sm.sendSay("Yeah, I guess I got stuck in a sticky situation.") +sm.setParam(36) +sm.sendSay("Oh my! I trust that everything went well in Commerci?") +sm.setParam(56) +sm.sendSay("Eventually, yes. It was a lot like the rest of Maple World, fresh air, beautiful sights, and good people... Punctuated by occasional bouts of insanity and evil. ") +sm.setParam(36) +sm.sendSay("It sounds like a very splendid place. I look forward to visiting someday.") +sm.setParam(56) +sm.sendSay("Yeah, let's put a hold on that. I DO have a letter for you though. It's from the Prime Minister of the San Commerci, their big capital.") +sm.setParam(36) +sm.sendSay("#face0#For me?") +sm.setParam(56) +sm.sendSay("I didn't read it, but I think it's a peace treaty.") +sm.setParam(36) +sm.sendSay("If it is, you have done a great thing for Maple World. Thank you.") +sm.setParam(56) +sm.sendSay("Sure thing!") +sm.setParam(36) +sm.sendSay("I thank you for proving I was right to have faith in you, #h0#. Your friendship means a great deal to me.") +sm.sendSay("#face2#You look weary. You should go get some rest. I could use a nap myself.") +sm.sendSay("Oh, I had something prepared for you, a small token of my thanks. I left it with Neinheart.") +sm.startQuest(parentID) diff --git a/scripts/quest/q1800s.py b/scripts/quest/q1800s.py new file mode 100755 index 0000000..6d6bbf3 --- /dev/null +++ b/scripts/quest/q1800s.py @@ -0,0 +1,6 @@ +# 1800 - [Evolution System] Suspicious Movement on the path +sm.setSpeakerID(9400115) +if sm.sendAskYesNo("Calling the Alliance. The Black Wings are operating deep within the mines below Edelstein. Something fould is afoot. Need help in #m310010000# immediately. Please Accept"): + sm.warp(310010000, 0) + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1801s.py b/scripts/quest/q1801s.py new file mode 100755 index 0000000..e208e90 --- /dev/null +++ b/scripts/quest/q1801s.py @@ -0,0 +1,16 @@ +# 1800 - [Evolution System] Suspicious Movement on the path +sm.setSpeakerID(9400115) +sm.sendNext("Thank you for coming. I'll explain more about the underground mine situation, but first... You know who this is?") +sm.setPlayerAsSpeaker() +sm.sendNext("I know that face!") +sm.setSpeakerID(9400115) +sm.sendNext("You should. She is the founder of the Black Wings and the commander of the Black Mage's Army...") +sm.setPlayerAsSpeaker() +sm.sendNext("Orchid.") +sm.setSpeakerID(9400115) +sm.sendNext("She is the reason our city was taken. She is the one who masterminded the theft of the Seal Stones, attacked Mercedes... That such a small girl could have caused so much havoc...") +sm.sendNext("She's been quiet for a while now, so I knew there must be trouble brewing. The Black Wings appear to have had a coup.") +sm.sendNext("We've pieced together some information suggesting that Orchid was ousted from her position. We're not sure why, but there has been a huge shake-up in the command structure of the Black Wings.") +sm.sendNext("It all seems to have begun when Orchid was betrayed by the scientist...") +sm.startQuest(parentID) +sm.warpInstanceIn(957020001, 0) \ No newline at end of file diff --git a/scripts/quest/q1820e.py b/scripts/quest/q1820e.py new file mode 100755 index 0000000..1003e90 --- /dev/null +++ b/scripts/quest/q1820e.py @@ -0,0 +1,5 @@ +# 1820 - [Basic Course] Warm-up +#TODO make script GMS like +sm.completeQuest(parentID) +sm.completeQuest(1848) +sm.warpInstanceOut(957000000) \ No newline at end of file diff --git a/scripts/quest/q1821e.py b/scripts/quest/q1821e.py new file mode 100755 index 0000000..46bf930 --- /dev/null +++ b/scripts/quest/q1821e.py @@ -0,0 +1,3 @@ +# 1821 - [Training Course] Disguise +#TODO make script GMS like +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1822e.py b/scripts/quest/q1822e.py new file mode 100755 index 0000000..13215e4 --- /dev/null +++ b/scripts/quest/q1822e.py @@ -0,0 +1,4 @@ +# 1822 - [Training Course] Disguise + +#TODO make script GMS like +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1822s.py b/scripts/quest/q1822s.py new file mode 100755 index 0000000..7ad84eb --- /dev/null +++ b/scripts/quest/q1822s.py @@ -0,0 +1,4 @@ +# 1822 - [Training Course] Disguise + +#TODO make script GMS like +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1823e.py b/scripts/quest/q1823e.py new file mode 100755 index 0000000..733735d --- /dev/null +++ b/scripts/quest/q1823e.py @@ -0,0 +1,4 @@ +# 1822 - [Training Course] Agility test + +#TODO make script GMS like +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1847e.py b/scripts/quest/q1847e.py new file mode 100755 index 0000000..1f8af31 --- /dev/null +++ b/scripts/quest/q1847e.py @@ -0,0 +1,5 @@ +# 1847s - [Evolution System] System Enhancement Mode 1 +#TODO make script GMS like +sm.setSpeakerID(9075202) +sm.sendNext("Welcome to connecting to the Evolution System Enhancement Mode. This mode supports a stronger training program. Beginning guide now.") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q1847s.py b/scripts/quest/q1847s.py new file mode 100755 index 0000000..63cc9d7 --- /dev/null +++ b/scripts/quest/q1847s.py @@ -0,0 +1,8 @@ +# 1847s - [Evolution System] System Enhancement Mode 1 +from net.swordie.ms.enums import UIType +sm.setSpeakerID(9075202) +if sm.sendAskYesNo("Initiating system enhancement mode. Would you like to operate the Evolution System? You will be connected to a much more enhanced virtual world."): + sm.openUI(UIType.UI_EVOLVING_SYSTEM) + sm.startQuest(parentID) +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20031e.py b/scripts/quest/q20031e.py new file mode 100755 index 0000000..95bcb15 --- /dev/null +++ b/scripts/quest/q20031e.py @@ -0,0 +1,38 @@ +# Manual Labor + +# Constants +LIMBERT = 1106002 +ITEM1 = 4033194 +ITEM2 = 4033195 + +sm.setSpeakerID(LIMBERT) +selection1 = sm.sendNext("What took you so long?! You better not have been rooting through my things!\r\n#b\r\n#L0#I wasn't, but I found this letter up there by the potion box... It's from some guy named Chromile.#l") + +if selection1 == 0: + sm.sendNext("What?! Who told you you could touch that?!") +else: + sm.dispose() + +sm.consumeItem(ITEM1) +sm.consumeItem(ITEM2) +sm.giveItem(2001500, 10) +sm.giveItem(2001503, 10) +sm.completeQuestNoRewards(20031) +sm.addLevel(2) +sm.lockInGameUI(True) +sm.localEmotion(4, 2000, False) +sm.sendDelay(2000) + +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendNext("Another great day with the old man...") + +sm.sendSay("Huh? What's that?") + +sm.showBalloonMsg("Effect/Direction7.img/effect/tuto/soul/0", 4000) +sm.sendDelay(5000) + +sm.sendNext("It was like... a small shining light...") + +sm.warpInstanceIn(913070002, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20032e.py b/scripts/quest/q20032e.py new file mode 100755 index 0000000..ba1c511 --- /dev/null +++ b/scripts/quest/q20032e.py @@ -0,0 +1,18 @@ +# Manual Labor + +# Constants +LIMBERT = 1106002 +ITEM1 = 4033194 +ITEM2 = 4033195 + +sm.setSpeakerID(LIMBERT) +sm.sendNext("Are you done cleaning yet? I suppose it looks moderately presentable in here. What are you looking at? Go organize the shelves!") + +sm.sendNext("What?! Who told you you could touch that?!") + +sm.completeQuestNoRewards(20032) +sm.giveItem(2001500, 20) +sm.giveItem(2001503, 20) +sm.addLevel(2) +sm.warpInstanceIn(913070003, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20033e.py b/scripts/quest/q20033e.py new file mode 100755 index 0000000..239fb3b --- /dev/null +++ b/scripts/quest/q20033e.py @@ -0,0 +1,22 @@ +# Manual Labor + +# Constants +LIMBERT = 1106002 +EGG = 4033196 + +sm.setSpeakerID(LIMBERT) +selection1 = sm.sendNext("Where's the eggs? I told you to get eggs. If you broke them... Wait a second, what happened to you?\r\n #b\r\n#L0# Uh, well, you know how you told me not to mess with Bigby? Well... I kinda... He got out.#l") + + +if selection1 == 0: + sm.sendNext("What?!! I swear to every deity I can think of, you will starve to death if that dog is not in my yard by dinnertime.") +else: + sm.dispose() + +sm.completeQuestNoRewards(20033) +sm.consumeItem(EGG, 10) +sm.giveItem(2001500, 30) +sm.giveItem(2001503, 30) +sm.addLevel(2) +sm.warpInstanceIn(913070004, 0) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20036s.py b/scripts/quest/q20036s.py new file mode 100755 index 0000000..04c8805 --- /dev/null +++ b/scripts/quest/q20036s.py @@ -0,0 +1,35 @@ +# Manual Labor + +# Constants +CYGNUS = 1106001 +NEINHEART = 1106003 + +sm.setSpeakerID(CYGNUS) +sm.sendNext("Do you see, Neinheart? This child must be the descendant of the Knight of Light.") + +sm.setSpeakerID(NEINHEART) +sm.sendSay("I suppose the Empress is correct. You will have to learn the ways of a true knight, shopkeep. Your skills with a broom won't get you far on the battlefield.") + +sm.setPlayerAsSpeaker() +sm.sendSay("My father was the Knight of Light? What does that even mean? I'm just an ordinary kid...") + +sm.setSpeakerID(CYGNUS) +if sm.sendAskAccept("The choice is yours. Listen to your heart. The voice of destiny will guide you down the correct path. For the good of your own soul, and the good of the world...\r\nWill you come with me?"): + sm.sendNext("There has been an incident at the #b Ellinel Fairy Academy#k. A human magician has trespassed in the sacred halls of the fairy school.") + sm.giveItem(1142399)# Newborn Light (Medal) + sm.giveItem(1052444)# Apprentice Knight of Light Robe + sm.giveItem(1302077)# Beginner Warrior's Sword + sm.giveAndEquip(1098000)# Soul Shield of Protection + sm.removeEscapeButton() + sm.sendNext("You need a name. How about... #b#e'Mihile'#k#n? It means 'Born of Light'? I think it will suit you well, in the end. Let us go to Ereve. A brilliant new life awaits you.") + sm.addLevel(2) + sm.jobAdvance(5100) + sm.addAP(40) + sm.startQuestNoCheck(29976) + sm.completeQuestNoRewards(29976) + sm.completeQuestNoRewards(20036) + sm.warpInstanceOut(913070071, 0) +else: + sm.setSpeakerID(CYGNUS) + sm.sendNext("Why are you refusing destiny?") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20320e.py b/scripts/quest/q20320e.py new file mode 100755 index 0000000..fcaa60a --- /dev/null +++ b/scripts/quest/q20320e.py @@ -0,0 +1,17 @@ +sm.setSpeakerID(1101002) +if sm.sendAskYesNo("Now you're a REAL knight. Would you like to take your Job Advancement?"): + if not sm.canHold(1142401): + sm.sendSayOkay("You need inventory space.") + sm.dispose() + else: + if chr.getJob() == 5110: + sm.jobAdvance(5111) + sm.giveItem(1142401) + sm.completeQuest(parentID) + sm.dispose() + else: + sm.sendNext("You are not a mihile class.") + sm.dispose() +else: + sm.dispose() + diff --git a/scripts/quest/q20321s.py b/scripts/quest/q20321s.py new file mode 100755 index 0000000..84a1e06 --- /dev/null +++ b/scripts/quest/q20321s.py @@ -0,0 +1,5 @@ +# 20321 - [Job Adv] (Lv.60) Mihile 3rd job adv +sm.setSpeakerID(1101002) +if sm.sendAskYesNo("Are you ready to enter the Test area?"): + sm.warpInstanceIn(913070200) + sm.setInstanceTime(300, 130000000, 0) \ No newline at end of file diff --git a/scripts/quest/q20411e.py b/scripts/quest/q20411e.py new file mode 100755 index 0000000..57ec059 --- /dev/null +++ b/scripts/quest/q20411e.py @@ -0,0 +1,14 @@ +# 20411 - [Job Adv] (Lv.100) Mihile 4rd job adv +sm.setSpeakerID(1101002) +sm.sendNext("Cygnus is safe and the knights will be back to normal soon, I've even heard some of them referring to you as the new Chief Knight. It looks like you have no choice but to take up my proposal.") +if not sm.canHold(1142402): + sm.sendSayOkay("You need inventory space.") + sm.dispose() +else: + if chr.getJob() == 5111: + sm.jobAdvance(5112) + sm.giveItem(1142402) + sm.dispose() + else: + sm.sendNext("You are not a mihile class.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20412s.py b/scripts/quest/q20412s.py new file mode 100755 index 0000000..aac9ae6 --- /dev/null +++ b/scripts/quest/q20412s.py @@ -0,0 +1,5 @@ +# 20412 - [Job Adv] (Lv.100) Mihile 4rd job adv +sm.setSpeakerID(1101002) +if sm.sendAskYesNo("Are you ready, are you okay to leave?"): + sm.warp(913070100, 0) + sm.setInstanceTime(300, 130000000) \ No newline at end of file diff --git a/scripts/quest/q20767e.py b/scripts/quest/q20767e.py new file mode 100755 index 0000000..3cfac05 --- /dev/null +++ b/scripts/quest/q20767e.py @@ -0,0 +1,13 @@ +# (Lv60) Advanced Knight + +advancedKnightMedal = 1142068 + +if sm.canHold(advancedKnightMedal): + sm.setSpeakerID(1101000) + sm.sendNext("You are training well! However, you have a lot to learn still. Take this to remember the cause and what it means to be a Knight of Cygnus" + "\r\n\r\n1x #v"+ str(advancedKnightMedal) +"##z"+ str(advancedKnightMedal) +"#") + sm.giveItem(advancedKnightMedal) + sm.completeQuestNoRewards(parentID) + sm.dispose() +else: + sm.dispose() diff --git a/scripts/quest/q20767s.py b/scripts/quest/q20767s.py new file mode 100755 index 0000000..909fd48 --- /dev/null +++ b/scripts/quest/q20767s.py @@ -0,0 +1,4 @@ +# (Lv60) Advanced Knight + +sm.completeQuestNoRewards(parentID) +sm.dispose() diff --git a/scripts/quest/q20768e.py b/scripts/quest/q20768e.py new file mode 100755 index 0000000..cec00d5 --- /dev/null +++ b/scripts/quest/q20768e.py @@ -0,0 +1,13 @@ +# (Lv100) Chief Knight + +chiefKnightMedal = 1142069 + +if sm.canHold(chiefKnightMedal): + sm.setSpeakerID(1101000) + sm.sendNext("You are training well! However, you have a lot to learn still. Take this to remember the cause and what it means to be a Knight of Cygnus" + "\r\n\r\n1x #v"+ str(chiefKnightMedal) +"##z"+ str(chiefKnightMedal) +"#") + sm.giveItem(chiefKnightMedal) + sm.completeQuestNoRewards(parentID) + sm.dispose() +else: + sm.dispose() diff --git a/scripts/quest/q20768s.py b/scripts/quest/q20768s.py new file mode 100755 index 0000000..4822bac --- /dev/null +++ b/scripts/quest/q20768s.py @@ -0,0 +1,4 @@ +# (Lv. 100) Chief Knight + +sm.completeQuestNoRewards(parentID) +sm.dispose() diff --git a/scripts/quest/q20810s.py b/scripts/quest/q20810s.py new file mode 100755 index 0000000..591552d --- /dev/null +++ b/scripts/quest/q20810s.py @@ -0,0 +1,18 @@ +# 20810 - [Job Adv] (Lv.30) Mihile +sm.setSpeakerID(2520025) +if sm.sendAskYesNo("Congratulations on passing your trials, do you want to become one of my knights?"): + if not sm.canHold(1302038): + sm.sendSayOkay("You need inventory space.") + + elif not sm.canHold(1142400): + sm.sendSayOkay("You need inventory space.") + else: + if chr.getJob() == 5100: + sm.jobAdvance(5110) + sm.giveItem(1302038) + sm.giveItem(1142400) + sm.completeQuest(20810) + sm.dispose() + else: + sm.sendNext("You are not a mihile class.") + sm.dispose() diff --git a/scripts/quest/q20820s.py b/scripts/quest/q20820s.py new file mode 100755 index 0000000..6849d40 --- /dev/null +++ b/scripts/quest/q20820s.py @@ -0,0 +1,13 @@ +# Start of The City of Ereve +KIMU = 1102004 +sm.setSpeakerID(KIMU) +sm.removeEscapeButton() + +sm.sendNext("Welcome to Ereve! This is the safest and most peaceful place in all of Maple World. " +"Empress Cygnus keeps it nice all the time!\r\n" +"You're #b#h ##k, right? Here to join the #p1064023# Knights. I'm your guide, #p" + str(KIMU) + "#. All the Noblesses in town come to me first!") + +sm.sendSay("You need to get over to the Knight's Orientation right away. They're getting started already. Follow me, okay?") + +sm.completeQuestNoRewards(parentID) +sm.warp(130030100) # Knight Orientation Area diff --git a/scripts/quest/q20821s.py b/scripts/quest/q20821s.py new file mode 100755 index 0000000..c86033b --- /dev/null +++ b/scripts/quest/q20821s.py @@ -0,0 +1,13 @@ +# Start of Knight's Orientation +KIMU = 1102004 +sm.setSpeakerID(KIMU) + +sm.sendNext("This is the ceremony where we welcome all the newbie knights. " +"We need to find Training Instructor Kiku. " +"He's gotta be around here somewhere...") + +sm.sendSay("Having a hard time finding Kiku? You should use that NPC button next to your map! " +"Just click on Kiku and you'll see an arrow!\r\n" +"Hurry up and go say hi before he gets grumpy!") + +sm.startQuestNoCheck(parentID) diff --git a/scripts/quest/q20822e.py b/scripts/quest/q20822e.py new file mode 100755 index 0000000..3df0416 --- /dev/null +++ b/scripts/quest/q20822e.py @@ -0,0 +1,10 @@ +# End of The Path of Bravery +KIMU = 1102004 +sm.setSpeakerID(KIMU) +sm.removeEscapeButton() + +sm.sendNext("Did you meet up with Kiku? He seems tough, but he's a total softy.") +sm.sendSay("The orientation's almost over. You wanna go ahead and get started on your training?") + +sm.completeQuestNoRewards(parentID) +sm.warp(130030101) # Forest of Beginnings \ No newline at end of file diff --git a/scripts/quest/q20822s.py b/scripts/quest/q20822s.py new file mode 100755 index 0000000..f1ee646 --- /dev/null +++ b/scripts/quest/q20822s.py @@ -0,0 +1,18 @@ +# Start of The Path of Bravery +KIKU = 1102000 +sm.setSpeakerID(KIKU) + +response = sm.sendAskYesNo("I don't know if they told you during the orientation, but we're here to fight the Black Mage. " +"Right now, you're not fit to fight a black mop. I'm gonna fix that.\r\n" +"You ready for some action?") + +if not response: + sm.sendSayOkay("You listening? Pay attention!") + sm.dispose() + +sm.removeEscapeButton() + +sm.sendSay("Your first stop is Kimu. If you get lost, hit the #bQ key#k and check your #rQuest Info#k. " +"That's tip number one: always check your quest info before you go running your mouth!") + +sm.startQuestNoCheck(parentID) diff --git a/scripts/quest/q20824e.py b/scripts/quest/q20824e.py new file mode 100755 index 0000000..d160283 --- /dev/null +++ b/scripts/quest/q20824e.py @@ -0,0 +1,20 @@ +# End of Knight's Cavalier +KIMU = 1102004 +FEATHERED_NOBLESSE_HAT = 1003769 + +sm.setSpeakerID(KIMU) + +if not sm.isEquipped(FEATHERED_NOBLESSE_HAT): + sm.sendSayOkay("It doesn't look like you put your hat on yet... " + "Press the #bHotkey I#k to open the inventory window, #rthen double-click on the equipment#k.\r\n" + "You can see what you have equipped by pressing the #bHotkey E#k.") + sm.dispose() + +sm.sendNext("Isn't putting on equipment easy? " +"That's a good thing because you'll need WAY better gear if you want to be a real knight! " +"Always keep an eye out for new stuff.") + +sm.sendSay("I found Kinu in a pile of books. " +"He might tell you what you need to know, or he might just put you to sleep. Or both.") + +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20824s.py b/scripts/quest/q20824s.py new file mode 100755 index 0000000..ef1f676 --- /dev/null +++ b/scripts/quest/q20824s.py @@ -0,0 +1,21 @@ +# Start of Knight's Cavalier +KIMU = 1102004 +FEATHERED_NOBLESSE_HAT = 1003769 + +sm.setSpeakerID(KIMU) +sm.removeEscapeButton() + +sm.sendNext("I like to give all the new recruits a little gift when they come to Ereve. " +"It's important that the recruits look up to snuff, you know? Hit the #bI key#k to open up your inventory when we're done talking. " +"Double click on that hat I gave you!") + +if not sm.canHold(FEATHERED_NOBLESSE_HAT): + sm.sendSayOkay("Please free 1 equipment tab slot.") + sm.dispose() + +if not sm.hasItem(FEATHERED_NOBLESSE_HAT): + sm.giveItem(FEATHERED_NOBLESSE_HAT) + +sm.showEffect("Effect/OnUserEff.img/guideEffect/cygnusTutorial/5", 0, 0) + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20825s.py b/scripts/quest/q20825s.py new file mode 100755 index 0000000..42c38da --- /dev/null +++ b/scripts/quest/q20825s.py @@ -0,0 +1,20 @@ +# Start of Well-Behaved Student +KINU = 1102006 + +sm.setSpeakerID(KINU) + +response = sm.sendAskYesNo("I am Kinu. I will get you up to speed on Ereve's history. " +"Now, go on and sit! I teach best when my students are shorter than me!") + +if not response: + sm.sendNext("Why are you still standing? That is not what a well-behaved student would do.") + sm.dispose() + +sm.removeEscapeButton() + +sm.sendSay("Press X in front of any chair to sit down. " +"If you own one, it's the same deal. X marks the butt.") + +sm.showEffect("Effect/OnUserEff.img/guideEffect/cygnusTutorial/10", 0, 5000) + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20826e.py b/scripts/quest/q20826e.py new file mode 100755 index 0000000..ab8c8e0 --- /dev/null +++ b/scripts/quest/q20826e.py @@ -0,0 +1,38 @@ +# End of Lesson 1 - Ereve History +from net.swordie.ms.life.npc.NpcScriptInfo import Param +scriptInfo = sm.getNpcScriptInfo() + +KINU = 1102006 +HAWKEYE = 1101007 + +sm.removeEscapeButton() + +sm.setSpeakerID(HAWKEYE) +sm.sendNext("Tis a pleasure to welcome ye to the knights.") + +sm.setPlayerAsSpeaker() +scriptInfo.addParam(Param.OverrideSpeakerID) +sm.sendSay("How kind! Thank you!") + +sm.setSpeakerID(HAWKEYE) +scriptInfo.removeParam(Param.OverrideSpeakerID) +sm.sendSay("Anything ye need, ye come straight to me, ol' Hawkeye, captain of the Thunder Breakers. " +"I beg ye pardon, but what was ye name again? I plumb forgot already.") + +sm.setSpeakerID(KINU) +scriptInfo.addParam(Param.OverrideSpeakerID) +sm.sendSay("Hawkeye, the new recruit's name is #h #! Now, shoo!") + +sm.setSpeakerID(HAWKEYE) +scriptInfo.removeParam(Param.OverrideSpeakerID) +sm.sendSay("I promise, I won't forget yer name the next time we meet.") + +sm.setSpeakerID(KINU) +scriptInfo.addParam(Param.OverrideSpeakerID) +sm.sendSay("Wonderful. Now, off you go, Hawkeye!") +sm.sendSay("Finally! Where was I? Oh yes, once your initial training is over, you will choose your knightly path and be promoted to Knight-in-Training! " +"The paths you can pick from are Light, Fire, Wind, Lightning and Darkness.") +sm.sendSay("As a Cygnus Knight, your duty will be to protect the Empress, defeat the Black Mage, spy on his henchmen, and keep peace in Maple World. Simple, yes?") +sm.sendSay("I've given you enough to ponder. Go speak with Kimu for your next lesson.") + +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20826s.py b/scripts/quest/q20826s.py new file mode 100755 index 0000000..8060899 --- /dev/null +++ b/scripts/quest/q20826s.py @@ -0,0 +1,40 @@ +# Start of Lesson 1 - Ereve History +from net.swordie.ms.life.npc.NpcScriptInfo import Param +scriptInfo = sm.getNpcScriptInfo() + +KINU = 1102006 +HAWKEYE = 1101007 + +sm.setSpeakerID(KINU) + +sm.removeEscapeButton() + +sm.sendNext("Your first lesson will be about Ereve. " +"Ereve is a floating island, held aloft by the Empress's powers. " +"It has remained stationary for a number of years but once floated about Maple World like a ship.") + +sm.sendNext("Right now, we're focused on gathering up information on the Black Mage and preparing our forces to face him. " +"It's some serious business, lemme tell you.") + +sm.sendNext("The knights themselves are gathered into 5 groups, based around the Spirits of Light, Fire, Wind, Lightning, and Darkness. " +"Each group is led by a Chief Knight and... Oh, here is one now. Hello Hawkeye.") + +sm.setSpeakerID(HAWKEYE) +scriptInfo.addParam(Param.OverrideSpeakerID) +sm.sendNext("Ahoy! I wanted to welcome the new knight in person. " +"I must give ye my apologies, for I left the muffins I baked ye on my ship.") + +sm.setSpeakerID(KINU) +scriptInfo.removeParam(Param.OverrideSpeakerID) +sm.sendNext("Hawkeye, this is highly unorthodox!") + +sm.setSpeakerID(HAWKEYE) +scriptInfo.addParam(Param.OverrideSpeakerID) +sm.sendSay("Yar, have a heart, Kinu. Don't ye remember yer first day with the knights? " +"Wasn't it a mite overwhelming without a friend?") + +sm.setSpeakerID(KINU) +scriptInfo.removeParam(Param.OverrideSpeakerID) +sm.sendSay("I suppose I could bend the rules this once. #h #, meet Hawkeye, the Chief Knight of Lightning.") + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20827s.py b/scripts/quest/q20827s.py new file mode 100755 index 0000000..8cc99b0 --- /dev/null +++ b/scripts/quest/q20827s.py @@ -0,0 +1,7 @@ +# Start of What's Next? +KIMU = 1102004 +sm.setSpeakerID(KIMU) + +sm.sendSayOkay("You can use the portal on the left side of the map to move to the training area. Follow the signs! I'll be there.") + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20828e.py b/scripts/quest/q20828e.py new file mode 100755 index 0000000..7a2668a --- /dev/null +++ b/scripts/quest/q20828e.py @@ -0,0 +1,5 @@ +sm.setSpeakerID(1102101) +sm.removeEscapeButton() +sm.sendNext("A knight's gotta be strong, right? I mean, you guys have some really tough missions. So, you ready for your next training session?") +sm.completeQuest(parentID) +sm.warpInstanceIn(130030103, 0) \ No newline at end of file diff --git a/scripts/quest/q20829s.py b/scripts/quest/q20829s.py new file mode 100755 index 0000000..96865d9 --- /dev/null +++ b/scripts/quest/q20829s.py @@ -0,0 +1,11 @@ +sm.setSpeakerID(1102102) +if sm.sendAskYesNo("Chin up! No slouching! I'm going to whip you into shape!"): + sm.removeEscapeButton() + sm.sendNext("Do you even know how to hold a sword?! Press the #rCtrl key#k to perform a basic attack! Do it now! In the Drill Hall! Defeat #b3 #o9300730##k monsters and show me I'm not wasting my time!") + sm.startQuest(parentID) + for i in range(3): + sm.spawnMob(9300730, -364, -7, False) + sm.playSound("Aran/balloon", 100) + sm.avatarOriented("UI/tutorial.img/4") +else: + sm.sendNext("What, you too good to fight?!") \ No newline at end of file diff --git a/scripts/quest/q20830s.py b/scripts/quest/q20830s.py new file mode 100755 index 0000000..f65828c --- /dev/null +++ b/scripts/quest/q20830s.py @@ -0,0 +1,10 @@ +sm.setSpeakerID(1102101) +if sm.sendAskYesNo("Okay! You've earned a 30 second re-hydration break! Drink this, and don't faint on me!"): + sm.startQuest(parentID) + sm.giveItem(2001555, 1) + sm.removeEscapeButton() + sm.sendNext("Press the hotkey I to open your inventory, then double-click to enjoy your cool refreshment! And you WILL enjoy it!") + sm.playSound("Aran/balloon", 100) + sm.avatarOriented("UI/tutorial.img/3") +else: + sm.sendNext("I said, DRINK IT!") \ No newline at end of file diff --git a/scripts/quest/q20831s.py b/scripts/quest/q20831s.py new file mode 100755 index 0000000..6dec868 --- /dev/null +++ b/scripts/quest/q20831s.py @@ -0,0 +1,10 @@ +sm.setSpeakerID(1102102) +if sm.sendAskYesNo("Did you enjoy the drink? You better have! It is the special concoction of my people, the Piyo Tribe!\r\nNow... Pop quiz! Do you remember how to fight? Defeat 3 #o9300730# monsters and bring me 3 #t4000489# items!"): + sm.removeEscapeButton() + sm.sendNext("What do you mean, you don't know what to do! Press the Ctrl key to perform a basic attack! What do you mean, I forgot to tell you how to pick up items? Just press the Z key! ") + sm.startQuest(parentID) + for i in range(3): + sm.spawnMob(9300730, -364, -7, False) + sm.playSound("Aran/balloon", 100) +else: + sm.sendNext("What? Your failure is my failure as a teacher, and I never fail!") \ No newline at end of file diff --git a/scripts/quest/q20832s.py b/scripts/quest/q20832s.py new file mode 100755 index 0000000..c389824 --- /dev/null +++ b/scripts/quest/q20832s.py @@ -0,0 +1,26 @@ + +sm.setSpeakerID(1102102) + +sm.removeEscapeButton() +sm.sendNext("Your basic attacks no longer make me want to cry. It is time to teach you something more advanced!") + +sm.setSpeakerID(1102100) +sm.sendSay("Hey, everyone. You having fun with your training, #h0#? Kimu, Kizan, can I speak to you for a moment?") + +sm.setSpeakerID(1102102) +sm.sendSay("#h0#! Take a break! That's an order!") + +sm.setSpeakerID(1102100) +sm.sendSay("(Kiku whispers to the others.)") + +sm.setSpeakerID(1102102) +sm.sendSay("!!!") + +sm.setSpeakerID(1102101) +sm.sendSay("...") + +sm.setSpeakerID(1102102) +sm.sendSay("#h0#! Do not move from that spot! I will return shortly.") + +sm.startQuest(parentID) +sm.completeQuest(parentID) diff --git a/scripts/quest/q20833s.py b/scripts/quest/q20833s.py new file mode 100755 index 0000000..e9caeea --- /dev/null +++ b/scripts/quest/q20833s.py @@ -0,0 +1,17 @@ + +sm.removeEscapeButton() + +sm.setSpeakerID(1102113) +sm.sendNext("(*chirp, chirp*)") + +sm.setPlayerAsSpeaker() +sm.sendSay("Look! It's a bird! Is it talking to me?") + +sm.setSpeakerID(1102113) +sm.sendSay("*chirp, chirp, chirp*") + +sm.setPlayerAsSpeaker() +sm.sendSay("OMIGOODNESS! I can understand birds! I must be some sort of superhero. It... wants me to follow it. I'm sure Kizan won't mind.") + +sm.createQuestWithQRValue(parentID, "gardenIn")# must be sent this qr value +sm.warp(130030104, 0) \ No newline at end of file diff --git a/scripts/quest/q20834s.py b/scripts/quest/q20834s.py new file mode 100755 index 0000000..9e92e36 --- /dev/null +++ b/scripts/quest/q20834s.py @@ -0,0 +1,25 @@ + +sm.removeEscapeButton() + +sm.setSpeakerID(1102106) +sm.sendNext("Ah, you must be one of my new recruits.") + +sm.setPlayerAsSpeaker() +sm.sendSay("My name's #h0#. I love Ereve. It's so pretty here.") + +sm.setSpeakerID(1102106) +sm.sendSay("Oh, yes. Ereve is lovely, and so peaceful. Has your training been difficult?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Nothing I can't handle. Maple World better get ready, because I'm about to save it so hard.") + + +sm.sendSay("(She smiles.) Your enthusiasm is reassuring. The suffering of so many weighs heavily upon me... I hope you can help me ease their pain.") + + +sm.sendSay("Yeah, um, I'm sorry. Who are you again? You don't look like much of a knight...") + + +sm.sendSay("My name is...") + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20835e.py b/scripts/quest/q20835e.py new file mode 100755 index 0000000..780abac --- /dev/null +++ b/scripts/quest/q20835e.py @@ -0,0 +1,24 @@ +sm.removeEscapeButton() + +sm.setSpeakerID(1102112) +sm.sendNext("Don't listen to ol' Neinheart, #h0#. Ye may as well introduce yerself to the other Chief Knights while yer here.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Oh, um, sure. My name's #h0#. I'm here to become a knight, defeat the Black Mage, save Maple World, and, just recently, be a spokesperson for bird-kind.") + +sm.setSpeakerID(1102111) +sm.sendSay("Big aspirations for such meager amounts of skill. May the shadows keep you safe until you learn some humility.") + +sm.setSpeakerID(1102109) +sm.sendSay("Oh, give the kid a break! Welcome to Ereve! We'll meet again more formally soon.") + +sm.setSpeakerID(1102110) +sm.sendSay("Not if the kid doesn't finish training first... Becoming a knight takes a lot of hard work and dedication.") + +sm.setSpeakerID(1102108) +sm.sendSay("I hate to break up the party, but we have a meeting to get to. Sorry, kid. I'm sure we'll get a chance to talk more later.") + +sm.setSpeakerID(1102112) +sm.sendSay("Yer right, Mihile. We've got to get goin', #h0#. Keep up with yer trainin'.") + +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20835s.py b/scripts/quest/q20835s.py new file mode 100755 index 0000000..2e0478a --- /dev/null +++ b/scripts/quest/q20835s.py @@ -0,0 +1,22 @@ +sm.removeEscapeButton() + +sm.setSpeakerID(1102107) +sm.sendNext("Ah, #b#h0##k, isn't it? I am #p1101002#, strategist for our young Empress. You will be seeing much more of me in the future.") +sm.sendSay("Shouldn't you be in training? What urgent matter brings you here, #h0#? Did Kiku send you with dire news?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Nah. A bird told me to follow it, and I ended up here!") + +sm.setSpeakerID(1102112) +sm.sendSay("#h0#, are ye sure ye didn't follow me here to collect yer welcome muffins? I'm sorry, but someone ate them.") + +sm.setSpeakerID(1102111) +sm.sendSay("And they were delicious. But enough chatter, we have work to do, Hawkeye. Let us go.") + +sm.setSpeakerID(1102106) +sm.sendSay("It was lovely to meet you, #h0#. I sincerely hope that you become a knight of courage and wisdom.") + +sm.setSpeakerID(1102107) +sm.sendSay("I have my doubts. Not even promoted to knight-in-training and already nosing about the Empress's quarters for no good reason. Unacceptable!") + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q20836e.py b/scripts/quest/q20836e.py new file mode 100755 index 0000000..8c6beac --- /dev/null +++ b/scripts/quest/q20836e.py @@ -0,0 +1,9 @@ +sm.removeEscapeButton() + +sm.setSpeakerID(1102102) +sm.sendNext("You haven't forgotten my last lesson, have you?! Pretty Ctrl to perform a regular attack!\r\nTime for the next lesson! Ready?!") +sm.sendSay("Skill attacks! They dish out the pain! Open your Skill window by pressing the K key to access your skills.\r\nYou'll get more skills once you're more experienced, so never stop training!") + +sm.completeQuest(parentID) +sm.playSound("Aran/balloon", 100) +sm.avatarOriented("UI/tutorial.img/7") \ No newline at end of file diff --git a/scripts/quest/q20836s.py b/scripts/quest/q20836s.py new file mode 100755 index 0000000..094bae6 --- /dev/null +++ b/scripts/quest/q20836s.py @@ -0,0 +1,7 @@ +sm.removeEscapeButton() + +sm.setSpeakerID(1102102) +sm.sendNext("THERE YOU ARE! I told you not to move! You're going to pay for that. Maybe not today, maybe not tomorrow, but one day, when you're on a particularly annoying mission, know that I've secretly arranged it. Now get back to the Drill Hall!") + +sm.startQuest(parentID) +sm.warp(130030105, 0) \ No newline at end of file diff --git a/scripts/quest/q20837e.py b/scripts/quest/q20837e.py new file mode 100755 index 0000000..1f11303 --- /dev/null +++ b/scripts/quest/q20837e.py @@ -0,0 +1,8 @@ +sm.removeEscapeButton() + +sm.setSpeakerID(1102102) +sm.sendNext("Elemental Slash is useful, so use it often!") +sm.sendSay("I supposed you're about ready to become a Knight-in-Training. I'll send you to the Test Site, and remember, no slouching!") + +sm.completeQuest(parentID) +sm.warp(130030106, 0) \ No newline at end of file diff --git a/scripts/quest/q20837s.py b/scripts/quest/q20837s.py new file mode 100755 index 0000000..5767087 --- /dev/null +++ b/scripts/quest/q20837s.py @@ -0,0 +1,10 @@ +sm.removeEscapeButton() + +sm.setSpeakerID(1102102) +sm.sendNext("Try attacking a monster using your skills! Drag them to a hotkey to make them more convenient!") +sm.sendSay("Now use #rElemental Slash#k to defeat #b5 #o9300731##k monsters!") + +sm.startQuest(parentID) +for i in range(5): + sm.spawnMob(9300731, -364, -6, False) +sm.avatarOriented("UI/tutorial.img/8") \ No newline at end of file diff --git a/scripts/quest/q20838e.py b/scripts/quest/q20838e.py new file mode 100755 index 0000000..7de1115 --- /dev/null +++ b/scripts/quest/q20838e.py @@ -0,0 +1 @@ +# Missing script here.. needs to be sniffed from GMS \ No newline at end of file diff --git a/scripts/quest/q20838s.py b/scripts/quest/q20838s.py new file mode 100755 index 0000000..a9dfb83 --- /dev/null +++ b/scripts/quest/q20838s.py @@ -0,0 +1,9 @@ +sm.removeEscapeButton() + +sm.setSpeakerID(1102104) +sm.sendNext("#b*tap, tap, whirrrr, bang, bang*#k") +sm.sendSay("EEEEEEEK! Don't sneak up on me like that! I almost sliced my tail off! Anyway, I'm #p1102007#! You ready to begin the test?") +sm.sendSay("It's easy, easy, easy! See those boxes? Break them! Then defeat the monsters that pop out! You'll get some Proof of Exam items if you do! Whee!") +sm.sendSay("Just use #bregular attacks to break the boxes#k! Then use #bskills to defeat the monsters#k! I need 3 Proof of Exam items!") +sm.startQuest(parentID) +sm.avatarOriented("UI/tutorial.img/9") \ No newline at end of file diff --git a/scripts/quest/q20839s.py b/scripts/quest/q20839s.py new file mode 100755 index 0000000..7de1115 --- /dev/null +++ b/scripts/quest/q20839s.py @@ -0,0 +1 @@ +# Missing script here.. needs to be sniffed from GMS \ No newline at end of file diff --git a/scripts/quest/q20844s.py b/scripts/quest/q20844s.py new file mode 100755 index 0000000..4300e77 --- /dev/null +++ b/scripts/quest/q20844s.py @@ -0,0 +1,22 @@ +# Created by MechAviv +# Quest ID :: 20844 +# Knight Maintenance + +sm.setSpeakerID(1101007) +sm.removeEscapeButton() +sm.sendNext("Ye should've got received some AP and SP. How ye spend it'll determine whether ye become great or just average, though I accept you either way, just as you are.") + + +sm.setSpeakerID(1101007) +sm.removeEscapeButton() +sm.sendSay("Don't use yer AP and SP carelessly, ye hear?\r\nNow, I think ol' Neinheart has a mission for ye.") + + +sm.setSpeakerID(1101007) +sm.removeEscapeButton() +sm.sendSay("Before I forget, now that ye've made yer job advancement, ye have to equip the corresponding weapon to use yer skills. For ye, that means puttin' on some Knuckles. Ye'll conveniently find one in yer inventory. Don't forget to equip it.") + + +sm.startQuest(20844) +sm.completeQuest(20844) +sm.avatarOriented("UI/tutorial.img/cygnus/0") \ No newline at end of file diff --git a/scripts/quest/q20846s.py b/scripts/quest/q20846s.py new file mode 100755 index 0000000..ad836a0 --- /dev/null +++ b/scripts/quest/q20846s.py @@ -0,0 +1,22 @@ +# Created by MechAviv +# Quest ID :: 20846 +# The Lost Permit 1 + +sm.setSpeakerID(1102200) +if sm.sendAskYesNo("Hi! Have we met? I can never keep track. What? Neinheart sent you? Great! You can help me!"): + sm.setSpeakerID(1102200) + sm.sendNext("Okaaaaay, so... Tons of new folks have joined the knights lately, and I'm supposed to bring them all investigation permits, but I totally lost them. Neinheart's gonna be so mad.") + + + sm.setSpeakerID(1102200) + sm.sendSay("I think I dropped them somewhere back over... Um... Where? Like, I think I was distracted by a Timu, so it must've been over at #bTimu's Forest#k! You can begin your search there. I'll follow when I feel like it.") + + + sm.startQuest(20846) + # [START_NAVIGATION] [FE CB BF 07 00 00 00 00 00 00 ] + sm.avatarOriented("UI/tutorial.img/cygnus/1") +else: + sm.setSpeakerID(1102200) + sm.sendNext("Hey! It's your mission to help me!") + + diff --git a/scripts/quest/q20861e.py b/scripts/quest/q20861e.py new file mode 100755 index 0000000..808fee8 --- /dev/null +++ b/scripts/quest/q20861e.py @@ -0,0 +1,10 @@ +# The Path of a Dawn Warrior - Completion +sm.setSpeakerID(1101003) # Mihile + +sm.jobAdvance(1100) # Dawn Warrior 1st Job +sm.resetAP(False, 1100) +sm.giveItem(1402001) # Wooden Sword (2H) +sm.giveItem(1142066) + +sm.completeQuest(parentID) +sm.sendSayOkay("Congratulations, you are now a thunder breaker! I have added 4 SP, enjoy your journey!") diff --git a/scripts/quest/q20862e.py b/scripts/quest/q20862e.py new file mode 100755 index 0000000..8319a7f --- /dev/null +++ b/scripts/quest/q20862e.py @@ -0,0 +1,10 @@ +# The Path of a Blaze Wizard - Completion +sm.setSpeakerID(1101004) # Oz + +sm.jobAdvance(1200) # Blaze Wizard 1st Job +sm.resetAP(False, 1200) +sm.giveItem(1382000) # Wooden Staff +sm.giveItem(1142066) + +sm.completeQuest(parentID) +sm.sendSayOkay("Congratulations, you are now a blaze wizard! I have added 5 AP and 5 SP, enjoy your journey!") diff --git a/scripts/quest/q20863e.py b/scripts/quest/q20863e.py new file mode 100755 index 0000000..b4e03a0 --- /dev/null +++ b/scripts/quest/q20863e.py @@ -0,0 +1,11 @@ +# Path of a Wind Archer - Completion +sm.setSpeakerID(1101005) # Irena + +sm.jobAdvance(1300) # Wind Archer 1st Job +sm.resetAP(False, 1300) +sm.giveItem(1452002) # War Bow +sm.giveItem(2060000, 1000) # Bow Arrow +sm.giveItem(1142066) + +sm.completeQuest(parentID) +sm.sendSayOkay("Congratulations, you are now a #bWind Archer#k! I have added 5 AP and 5 SP, enjoy your journey!") diff --git a/scripts/quest/q20864e.py b/scripts/quest/q20864e.py new file mode 100755 index 0000000..41eba3e --- /dev/null +++ b/scripts/quest/q20864e.py @@ -0,0 +1,11 @@ +# The Path of a Night Walker - Completion +sm.setSpeakerID(1101006) # Eckhart + +sm.jobAdvance(1400) # Night Walker 1st Job +sm.resetAP(False, 1400) +sm.giveItem(1472000) # Garnier +sm.giveItem(2070000, 500) # Subi Throwing Stars +sm.giveItem(1142066) + +sm.completeQuest(parentID) +sm.sendSayOkay("Congratulations, you are now a night walker! I have added 5 SP, enjoy your journey!") diff --git a/scripts/quest/q20865e.py b/scripts/quest/q20865e.py new file mode 100755 index 0000000..14e39cd --- /dev/null +++ b/scripts/quest/q20865e.py @@ -0,0 +1,10 @@ +# The Path of a Thunder Breaker - Completion +sm.setSpeakerID(1101007) # Hawkeye + +sm.jobAdvance(1500) # Thunder Breaker 1st Job +sm.resetAP(False, 1500) +sm.giveItem(1482000) # Steel Knuckler +sm.giveItem(1142066) + +sm.completeQuest(parentID) +sm.sendSayOkay("Congratulations, you are now a thunder breaker! I have added 4 SP, enjoy your journey!") diff --git a/scripts/quest/q20870s.py b/scripts/quest/q20870s.py new file mode 100755 index 0000000..547f633 --- /dev/null +++ b/scripts/quest/q20870s.py @@ -0,0 +1,13 @@ +# WA - End of Knight-in-Training - Start +sm.setSpeakerID(1101002) +if not sm.getFieldID() == 130000000: + response = sm.sendAskYesNo("#h #, you have done surprisingly well. Do you wish to take the #b Knighthood Exam#k? If you pass, you will become a full-fledged knight. #b\r\n(Note, if you accept, you will be ported to Ereve. Talk to your instructor there.)") + if response: + sm.warp(130000000) + sm.dispose() + else: + sm.sendSayOkay("Okay, maybe next time.") +if sm.sendAskAccept("#h #? Your level is so much higher! It seems that you finished many quests... what about taking a test for knights? It should be good time to end your trainee life."): + sm.sendSayOkay("To take the test of knight, Come to Ereve. The captains will test your ability and will appoint you as the knight of the clan if you pass it.") + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q20871e.py b/scripts/quest/q20871e.py new file mode 100755 index 0000000..934f155 --- /dev/null +++ b/scripts/quest/q20871e.py @@ -0,0 +1,11 @@ +# WA - End of Knight-in-Training - Start +sm.setSpeakerID(1101002) +if sm.sendAskYesNo("So you killed all the monsters? Are you ready to advance?"): + if sm.canHold(1142067): + sm.completeQuest(parentID) + sm.jobAdvance(1110) + sm.giveItem(1142067) + else: + sm.sendSay("Please make room in your Equip inventory.") +else: + sm.sendSay("Please speak to me after You've defeated all monsters required.") diff --git a/scripts/quest/q20872e.py b/scripts/quest/q20872e.py new file mode 100755 index 0000000..9678039 --- /dev/null +++ b/scripts/quest/q20872e.py @@ -0,0 +1,13 @@ +# BW - End of Knight-in-Training - Complete + +sm.setSpeakerID(1101004) +response = sm.sendAskYesNo("You've defeated the 30 Tigurus! I like how hard you work! Are you ready work even harder by " + "accepting the responsibilities of an official knight?") + +if response: + sm.completeQuest(parentID) + sm.jobAdvance(1210) + sm.giveItem(1142067) + sm.sendSayOkay("You have been officially promoted to a Cygnus Knight! I've also given you some AP and SP to work with.") +else: + sm.sendSayOkay("Okay, come back later when you've changed your mind.") diff --git a/scripts/quest/q20873e.py b/scripts/quest/q20873e.py new file mode 100755 index 0000000..fd53f2b --- /dev/null +++ b/scripts/quest/q20873e.py @@ -0,0 +1,13 @@ +# WA - End of Knight-in-Training - Complete + +sm.setSpeakerID(1101005) +response = sm.sendAskYesNo("You've defeated the 30 Tigurus! I like how hard you work! Are you ready work even harder by " + "accepting the responsibilities of an official knight?") + +if response: + sm.completeQuest(parentID) + sm.jobAdvance(1310) + sm.giveItem(1142067) + sm.sendSayOkay("You have been officially promoted to a Cygnus Knight! I've also given you some AP and SP to work with.") +else: + sm.sendSayOkay("Okay, come back later when you've changed your mind.") diff --git a/scripts/quest/q20874e.py b/scripts/quest/q20874e.py new file mode 100755 index 0000000..4cd93c8 --- /dev/null +++ b/scripts/quest/q20874e.py @@ -0,0 +1,13 @@ +# NW - End of Knight-in-Training - Complete + +sm.setSpeakerID(1101006) +response = sm.sendAskYesNo("You've defeated the 30 Tigurus! I like how hard you work! Are you ready work even harder by " + "accepting the responsibilities of an official knight?") + +if response: + sm.completeQuest(parentID) + sm.jobAdvance(1410) + sm.giveItem(1142067) + sm.sendSayOkay("You have been officially promoted to a Cygnus Knight! I've also given you some AP and SP to work with.") +else: + sm.sendSayOkay("Okay, come back later when you've changed your mind.") diff --git a/scripts/quest/q20875e.py b/scripts/quest/q20875e.py new file mode 100755 index 0000000..a285595 --- /dev/null +++ b/scripts/quest/q20875e.py @@ -0,0 +1,13 @@ +# TB - End of Knight-in-Training - Complete + +sm.setSpeakerID(1101007) +response = sm.sendAskYesNo("You've defeated the 30 Tigurus! I like how hard you work! Are you ready work even harder by " + "accepting the responsibilities of an official knight?") + +if response: + sm.completeQuest(parentID) + sm.jobAdvance(1510) + sm.giveItem(1142067) + sm.sendSayOkay("You have been officially promoted to a Cygnus Knight! I've also given you some AP and SP to work with.") +else: + sm.sendSayOkay("Okay, come back later when you've changed your mind.") diff --git a/scripts/quest/q20882s.py b/scripts/quest/q20882s.py new file mode 100755 index 0000000..f151bb4 --- /dev/null +++ b/scripts/quest/q20882s.py @@ -0,0 +1,10 @@ +# A Close Call - Start (3rd job adv for CoK) +sm.setPlayerAsSpeaker() +sm.sendNext("What kind of book can that be... Wow, the book is written by letters I have never seen before.") +sm.sendNext("But it still looks like something important. I should bring it back to Ereve.") +sm.sendNext("It's chilling.") +sm.setSpeakerID(1104302) +sm.sendSay("What's happening? Where are they appearing from? Try to snatch my book? No! I won't let the Black Wings take that!") +sm.warp(922030400, 0) +sm.startQuest(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20883e.py b/scripts/quest/q20883e.py new file mode 100755 index 0000000..2e628ea --- /dev/null +++ b/scripts/quest/q20883e.py @@ -0,0 +1,11 @@ +# 20883 - [Job Adv] (Lv.60) Cygnus Knight +sm.setSpeakerID(1404009) +sm.sendNext("#h # it is fortunate that you protected the book from the Black Mage. It is a book with tremendous value. I must admit your braveness for this.") +if sm.sendAskYesNo("The Queen has appointed you the title of nobility for your actions, do you wish to accept it?"): + sm.sendSayOkay("#h #, from now on you are an elite member. You will be given quests with higher level, but you will manage.") + chrJobID = sm.getChr().getJob() + sm.jobAdvance(chrJobID+1) + sm.completeQuest(parentID) + sm.giveItem(1142068) +else: + sm.sendSayOkay("Let me know when you wish to accept the title.") diff --git a/scripts/quest/q20891s.py b/scripts/quest/q20891s.py new file mode 100755 index 0000000..e39a2fd --- /dev/null +++ b/scripts/quest/q20891s.py @@ -0,0 +1,5 @@ +# 20891 - [Job Advancement] A Dark Place +sm.setSpeakerID(1104300) +sm.sendNext("(#bBy the moment I almost catch the person suspectively under Black Mage, I lost conscious#k...") +sm.warpInstanceIn(913031000, 0) +sm.startQuest(parentID) diff --git a/scripts/quest/q20893s.py b/scripts/quest/q20893s.py new file mode 100755 index 0000000..c5285d3 --- /dev/null +++ b/scripts/quest/q20893s.py @@ -0,0 +1,2 @@ +# 20893 - [Job Adv] (Lv.100) The Nightmare +sm.warpInstanceIn(913031001, 0) diff --git a/scripts/quest/q20894s.py b/scripts/quest/q20894s.py new file mode 100755 index 0000000..72fbc38 --- /dev/null +++ b/scripts/quest/q20894s.py @@ -0,0 +1,23 @@ +# 20893 - [Job Adv] (Lv.100) The Empress' Chief Knight +sm.setSpeakerID(1101000) +sm.sendNext("#h #... what is this?") +sm.setPlayerAsSpeaker() +sm.sendNext("This, milady, is the report from Neinheart about the activities of the Cygnus Knights.") +sm.setSpeakerID(1101000) +sm.sendNext("Haha, is that wat Neinheart said? It is a recommendation about you. It's all about the process of you getting stronger and the activities done by you...") +sm.setPlayerAsSpeaker() +sm.sendNext("What did Neinheart write about me?") +sm.setSpeakerID(1101000) +if sm.sendAskYesNo("I would like to appoint a title to you for your activities and effort. will you accept this?"): + sm.sendSay("#h #, with your braveness and courage, from now on you are a new captain of the knights. Please use your power to protect the Maple World.") + if sm.canHold(1142069): + chrJobID = sm.getChr().getJob() + sm.jobAdvance(chrJobID+1) + sm.giveItem(1142069) + sm.completeQuest(parentID) + else: + sm.sendSay("Please make space in your Equip inventory.") + sm.dispose() +else: + sm.sendSay("Please speak to me again when you change your mind.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q20899e.py b/scripts/quest/q20899e.py new file mode 100755 index 0000000..a45d819 --- /dev/null +++ b/scripts/quest/q20899e.py @@ -0,0 +1,10 @@ +# [Skill] (Lv.200) Cygnus Constellation + +cygnusConstellationMedal = 1142597 + +if sm.canHold(cygnusConstellationMedal): + sm.setSpeakerID(1101000) + sm.sendNext("You have exceeded all our expectations, please take this as a symbol of your Heroism\r\n\r\n1x #v"+ str(cygnusConstellationMedal) +"##z"+ str(cygnusConstellationMedal) +"#") + sm.completeQuestNoRewards(parentID) + sm.giveItem(cygnusConstellationMedal) +sm.dispose() diff --git a/scripts/quest/q21000s.py b/scripts/quest/q21000s.py new file mode 100755 index 0000000..8b9b906 --- /dev/null +++ b/scripts/quest/q21000s.py @@ -0,0 +1,12 @@ +# 914000100 +HELENA = 1209000 + +sm.setSpeakerID(HELENA) +if sm.sendAskAccept("Oh, no! I think there's still a child in the forest! Aran, I'm very sorry, but could you rescue the child? I know you're injured, but I don't have anyone else to ask!"): + sm.startQuest(parentID) + sm.sendNext("#bThe child is probably lost deep inside the forest!#k We have to escape before the Black Mage finds us. You must rush into the forest and bring the child back with you!") + sm.sendSay("Don't panic, Aran. If you wish to check the status of the quest, press #bQ#k and view the Quest window.") + sm.sendSay("Please, Aran! I'm begging you. I can't bear to lose another person to the Black Mage!") + sm.avatarOriented("Effect/OnUserEff.img/guideEffect/aranTutorial/tutorialArrow1") +else: + sm.sendNext("No, Aran... We can't leave a kid behind. I know it's a lot to ask, but please reconsider. Please!") \ No newline at end of file diff --git a/scripts/quest/q21001e.py b/scripts/quest/q21001e.py new file mode 100755 index 0000000..a86f612 --- /dev/null +++ b/scripts/quest/q21001e.py @@ -0,0 +1,34 @@ +# 914000500 +ATHENA = 1209007 + +sm.setSpeakerID(ATHENA) +if sm.sendAskYesNo("You made it back safely! What about the child?! Did you bring the child with you?!"): + sm.completeQuest(parentID) + sm.consumeItem(4001271) + + sm.flipSpeaker() + sm.sendNext("Oh, what a relief. I'm so glad...") + + sm.setPlayerAsSpeaker() + sm.sendSay("Hurry and board the ship! We don't have much time!") + + sm.setSpeakerID(ATHENA) + sm.flipSpeaker() + sm.sendSay("We don't have any time to waste. The Black Mage's forces are getting closer and closer! We're doomed if we don't leave right this moment!") + + sm.setPlayerAsSpeaker() + sm.sendSay("Leave, now!") + + sm.setSpeakerID(ATHENA) + sm.flipSpeaker() + sm.sendSay("Aran, please! I know you want to stay and fight the Black Mage, but it's too late! Leave it to the others and come to Victoria Island with us! ") + + sm.setPlayerAsSpeaker() + sm.sendSay("No, I can't!") + sm.sendSay("Athena Pierce, why don't you leave for Victoria Island first? I promise I'll come for you later. I'll be alright. I must fight the Black Mage with the other heroes!") + + sm.lockInGameUI(True, False) + sm.warp(914090010, 0) +else: + sm.sendNext("What about the child? Please give me the child.") + sm.dispose() diff --git a/scripts/quest/q21001s.py b/scripts/quest/q21001s.py new file mode 100755 index 0000000..95bed21 --- /dev/null +++ b/scripts/quest/q21001s.py @@ -0,0 +1,10 @@ +# 914000300 +LOST_KID = 1209006 + +sm.setSpeakerID(LOST_KID) +if sm.sendAskAccept("*Sniff sniff* I was so scared... Please take me to Athena Pierce."): + sm.startQuest(parentID) + sm.warp(914000500, 1) +else: + sm.sendNext("*Sob* Aran has declined my request!") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21010e.py b/scripts/quest/q21010e.py new file mode 100755 index 0000000..ee9a7ec --- /dev/null +++ b/scripts/quest/q21010e.py @@ -0,0 +1,16 @@ +# 140090100 +PUKA = 1202001 + +sm.setSpeakerID(PUKA) +sm.sendNext("We've been digging and digging inside the Ice Cave in the hope of finding a hero, but I never thought I'd actually see the day... The prophecy was true! You were right, #p1201000#! Now that one of the legendary heroes has returned, we have no reason to fear the Black Mage!") +sm.sendSay("Oh, I've kept you too long. I'm sorry, I got a little carried away. I'm sure the other Penguins feel the same way. I know you're busy, but could you #bstop and talk to the other Penguins#k on your way to town? They would be so honored.\r\n\r\n#fUI/UIWindow2.img/QuestIcon/4/0# \r\n#i2000022# 5 #t2000022#\r\n#i2000023# 5 #t2000023#\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 16 exp") +sm.giveItem(2000022, 5) +sm.giveItem(2000023, 5) +sm.giveExp(16) +sm.completeQuest(parentID) + +sm.removeEscapeButton() +sm.flipSpeaker() +sm.sendNext("Oh, you've leveled up! You may have even received some skill points. In Maple World, you can acquire 3 skill points every time you level up. Press the #bK key#k to view the Skill window.") +sm.sendSay("#b(Everyone's been so nice to me, but I just can't remember anything. Am I really a hero? I should check my skills and see. But how do I check them?)#k") +sm.tutorAutomatedMsg(15) diff --git a/scripts/quest/q21010s.py b/scripts/quest/q21010s.py new file mode 100755 index 0000000..bfdbef8 --- /dev/null +++ b/scripts/quest/q21010s.py @@ -0,0 +1,23 @@ +# 140090100 +PUKA = 1202001 + +sm.setSpeakerID(PUKA) +sm.sendNext("Hm, what's a human doing on this island? Wait, it's #p1201000#. What are you doing here, #p1201000#? And who's that beside you? Is it someone you know, #p1201000#? What? The hero, you say?") +sm.sendSay(" #i4001170#") +sm.sendSay("Ah, this must be the hero you and your clan have been waiting for. Am I right, #p1201000#? Ah, I knew you weren't just accompanying an average passerby...") + +if sm.sendAskAccept("Oh, but it seems our hero has become very weak since the Black Mage's curse. It only makes sense, considering that the hero has been asleep for hundreds of years. #bHere, I'll give you a HP Recovery Potion.#k."): + sm.giveItem(2000022) + sm.startQuest(parentID) + + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.sendNext("Drink it first. Then we'll talk.") + + sm.setPlayerAsSpeaker() + sm.sendSay("#b(How do I drink the potion? I don't remember...)#k") + sm.tutorAutomatedMsg(14) +else: + sm.sendNext("Oh, no need to decline my offer. It's no big deal. It's just a potion. Well, let me know if you change your mind.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21011e.py b/scripts/quest/q21011e.py new file mode 100755 index 0000000..b7a1144 --- /dev/null +++ b/scripts/quest/q21011e.py @@ -0,0 +1,20 @@ +# 140090200 +PUIR = 1202003 + +sm.setSpeakerID(PUIR) +sm.sendNext("Wait, are you... No way.... Are you the hero that #p1201000# has been talking about all this time?! #p1201000#! Don't just nod... Tell me! Is this the hero you've been waiting for?! ") +sm.sendSay(" #i4001171#") +sm.sendSay("I'm sorry. I'm just so overcome with emotions... *Sniff sniff* My goodness, I'm starting to tear up. You must be so happy, #p1201000#.") +sm.sendSay("Wait a minute... You're not carrying any weapons. From what I've heard, each of the heroes had a special weapon. Oh, you must have lost it during the battle against the Black Mage.") + +if sm.sendAskYesNo("This isn't good enough to replace your weapon, but #bcarry this sword with you for now#k. It's my gift to you. A hero can't be walking around empty-handed.\r\n#fUI/UIWindow2.img/QuestIcon/4/0# \r\n#i1302000# 1 #t1302000# \r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 35 exp"): + sm.giveItem(1302000) + sm.giveExp(35) + sm.completeQuest(parentID) + + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("#b(Your skills are nowhere close to being hero-like... But a sword? Have you ever even held a sword in your lifetime? You can't remember... How do you even equip it?)#k") + sm.tutorAutomatedMsg(16) +else: + sm.sendNext("*sniff sniff* Isn't this sword good enough for you, just for now? I'd be so honored...") \ No newline at end of file diff --git a/scripts/quest/q21012e.py b/scripts/quest/q21012e.py new file mode 100755 index 0000000..cc3a03f --- /dev/null +++ b/scripts/quest/q21012e.py @@ -0,0 +1,15 @@ +# 140090300 +PURUN = 1202004 + +sm.setSpeakerID(PURUN) +if sm.sendAskYesNo("Hm... Your expression tells me that the exercise didn't jog any memories. But don't you worry. They'll come back, eventually. Here, drink this potion and power up!\r\n#fUI/UIWindow2.img/QuestIcon/4/0# \r\n#i2000022# 10 #t2000022# \r\n#i2000023# 10 #t2000023# \r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 57 exp"): + sm.giveItem(2000022, 10) + sm.giveItem(2000023, 10) + sm.giveExp(57) + sm.completeQuest(parentID) + + sm.setPlayerAsSpeaker() + sm.sendNext("#b(Even if you're really the hero everyone says you are... What good are you without any skills?)#k") +else: + sm.sendNext("What? You don't want the potion?") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21012s.py b/scripts/quest/q21012s.py new file mode 100755 index 0000000..77c38f8 --- /dev/null +++ b/scripts/quest/q21012s.py @@ -0,0 +1,16 @@ +# 140090300 +PURUN = 1202004 + +sm.setSpeakerID(PURUN) +sm.sendNext("Welcome, hero! What's that? You want to know how I knew who you were? That's easy. I eavesdropped on some people talking loudly next to me. I'm sure the rumor has spread through the entire island already. Everyone knows that you've returned!") +sm.sendSay("Anyway, what's with the long face? Is something wrong? Hm? You're not sure whether you're really a hero or not? You lost your memory?! No way... It must be because you were trapped inside the ice for hundreds and hundreds of years.") + +if sm.sendAskAccept("Hm, how about trying out that sword? Wouldn't that bring back some memories? How about #bfighting some monsters#k?"): + sm.removeEscapeButton() + sm.startQuest(parentID) + sm.sendNext("It just so happens that there are a lot of #r#o9300383#s#k near here. How about defeating just #r3#k of them? It could help you remember a thing or two.") + sm.sendSay("Ah, you've also forgotten how to use your skills? #bPlace skills in the quick slots for easy access.#k You can also place consumable items in the slots, so use the slots to your advantage.") + sm.tutorAutomatedMsg(17) +else: + sm.sendNext("Hm... You don't think that would help? Think about it. It could help, you know...") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21013e.py b/scripts/quest/q21013e.py new file mode 100755 index 0000000..ca697ba --- /dev/null +++ b/scripts/quest/q21013e.py @@ -0,0 +1,13 @@ +# 140090400 +PUTZKI = 1202005 + +sm.setSpeakerID(PUTZKI) +sm.sendNext("Ah, you've brought all the components. Give me a few seconds to assemble them... Like this... And like that... and...\r\n#fUI/UIWindow2.img/QuestIcon/4/0# \r\n#i3010062# 1 #t3010062# \r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 95 exp") +sm.giveItem(3010062) +sm.giveExp(95) +sm.completeQuest(parentID) + +sm.removeEscapeButton() +sm.sendNext("Here, a fully-assembled chair, just for you! I've always wanted to give you a chair as a gift, because I know a hero can occasionally use some good rest. Tee hee. ") +sm.sendSay("A hero is not invincible. A hero is human. I'm sure you will face challenges and even falter at times. But you are a hero because you have what it takes to overcome any obstacles you may encounter.") +sm.tutorAutomatedMsg(19) \ No newline at end of file diff --git a/scripts/quest/q21013s.py b/scripts/quest/q21013s.py new file mode 100755 index 0000000..266b5ec --- /dev/null +++ b/scripts/quest/q21013s.py @@ -0,0 +1,14 @@ +# 140090400 +PUTZKI = 1202005 + +sm.setSpeakerID(PUTZKI) +answer = sm.sendSay("Ah, you're the hero. I've been dying to meet you.\r\n#b#L0#(Seems a bit shy...)#l") +if answer == 0: + if sm.sendAskAccept("I have something I've been wanting to give you as a gift for a very long time... I know you're busy, especially since you're on your way to town, but will you accept my gift?"): + sm.removeEscapeButton() + sm.startQuest(parentID) + sm.sendNext("The parts of the gift have been packed inside a box nearby. Sorry to trouble you, but could you break the box and bring me a #b#t4032309##k and some #b#t4032310##k? I'll assemble them for you right away.") + sm.tutorAutomatedMsg(18) + else: + sm.sendNext("I'm sure it will come in handy during your journey. Please, don't decline my offer.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21015s.py b/scripts/quest/q21015s.py new file mode 100755 index 0000000..83e18e3 --- /dev/null +++ b/scripts/quest/q21015s.py @@ -0,0 +1,14 @@ +# 140000000 +LILIN = 1201000 + +sm.setSpeakerID(LILIN) +sm.sendNext("Alright, I've done enough explaining for now. Let's move on to the next stage. What's the next stage, you ask? I just told you. Train as hard as you can until you become strong enough to defeat the Black Mage with a single blow.") +sm.sendSay("You may have been a hero in the past, but that was hundreds of years ago. Even if it weren't for the curse of the Black Mage, all those years you spent frozen in time have stiffened your body. You must loosen up a bit and slowly regain your agility. How do you do that, you ask?") + +if sm.sendAskAccept("Don't you know that you must first master the fundamentals? So the wise thing to do is to begin with #bBasic Training#k. Oh, of course, I forgot that you lost your memory. Well, that's why I'm here. You'll just have to experience it yourself. Shall we begin?"): + sm.startQuest(parentID) + + sm.removeEscapeButton() + sm.sendNext("The population of Rien may be mostly Penguins, but even this island has monsters. You'll find #o0100131#s if you go to #b#m140020000##k, located on the right side of the town. Please defeat #r10 of those #o0100131#s#k. I'm sure you'll have no trouble defeating the #o0100131#s that even the slowest penguins here can defeat.") +else: + sm.sendNext("What are you so hesitant about? You're a hero! You gotta strike while the iron is hot! Come on, let's do this!") \ No newline at end of file diff --git a/scripts/quest/q21016s.py b/scripts/quest/q21016s.py new file mode 100755 index 0000000..cca746e --- /dev/null +++ b/scripts/quest/q21016s.py @@ -0,0 +1,12 @@ +# 140000000 +LILIN = 1201000 + +sm.setSpeakerID(LILIN) +if sm.sendAskAccept("Shall we continue with your Basic Training? Before accepting, please make sure you have properly equipped your sword and your skills and potions are readily accessible."): + sm.startQuest(parentID) + + sm.removeEscapeButton() + sm.sendNext("Alright. This time, let's have you defeat #r#o0100132#s#k, which are slightly more powerful than #o0100131#s. Head over to #b#m140020100##k and defeat #r15#k of them. That should help you build your strength. Alright! Let's do this!") +else: + sm.sendNext("Are you not ready to hunt the #o0100132#s yet? Always proceed if and only if you are fully ready. There's nothing worse than engaging in battles without sufficient preparation.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21017s.py b/scripts/quest/q21017s.py new file mode 100755 index 0000000..8677655 --- /dev/null +++ b/scripts/quest/q21017s.py @@ -0,0 +1,32 @@ +# 140000000 +LILIN = 1201000 + +sm.setSpeakerID(LILIN) +sm.flipSpeaker() +sm.sendNext("It seems like you're warmed up now. This is when rigorous training can really help you build a strong foundation. Let's proceed with the Basic Training, shall we?") +sm.sendSay("Go defeat some #r#o0100133#s#k in #b#m140020200##k this time. I think about #r20#k should do it. Go on ahead and... Hm? Do you have something you'd like to say?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Isn't the number getting bigger and bigger?") + +sm.setSpeakerID(LILIN) +sm.flipSpeaker() +sm.sendSay("Of course it is. What, are you not happy with 20? Would you like to defeat 100 of them instead? Oh, how about 999 of them? Someone in Sleepywood would be able to do it easily. After all, we are training...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Oh no, no, no. Twenty is plenty.") + +sm.setSpeakerID(LILIN) +if sm.sendAskAccept("You don't have to be so modest. I understand your desire to quickly become the hero you once were. This sort of attitude is what makes you a hero."): + sm.startQuest(parentID) + + sm.setPlayerAsSpeaker() + sm.sendNext("#b(If you keep listening, you might end up having to take down 999 of them.)#k") + + sm.setSpeakerID(LILIN) + sm.flipSpeaker() + sm.sendSay("Please go ahead and slay 20 #o0100133#s.") +else: + sm.setPlayerAsSpeaker() + sm.sendNext("#b(You declined out of fear, but it's not like you can run away like this. Take a big breath, calm down, and try again.)#k") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21018s.py b/scripts/quest/q21018s.py new file mode 100755 index 0000000..ccf876c --- /dev/null +++ b/scripts/quest/q21018s.py @@ -0,0 +1,12 @@ +# 140000000 +LILIN = 1201000 + +sm.setSpeakerID(LILIN) +sm.sendNext("Now, you will undergo a test that will determine whether you're fit or not. All you have to do is take on the most powerful monster on this island, #o0100134#s. About #r50#k of them would suffice, but...") + +if sm.sendAskAccept("We can't have you wipe out the entire population of #o0100134#s, since they aren't many of them out there. How about 5 of them? You're here to train, not to destroy the ecosystem."): + sm.startQuest(parentID) + sm.sendNext("#o0100134#s can be found in deeper parts of the island. Continue going left until you reach #b#m140010200##k, and defeat #r5 #o0100134#s#k.") +else: + sm.sendNext("Oh, is 5 not enough? If you feel the need to train further, please feel free to slay more than that. If you slay all of them, I'll just have to look the other way even if it breaks my heart, since they will have been sacrificed for a good cause...") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21100s.py b/scripts/quest/q21100s.py new file mode 100755 index 0000000..f2c2123 --- /dev/null +++ b/scripts/quest/q21100s.py @@ -0,0 +1,35 @@ +# 140000000 +LILIN = 1201000 + +sm.setSpeakerID(LILIN) +sm.flipSpeaker() +sm.sendNext("There isn't much record left of the heroes that fought against the Black Mage. Even in the Book of Prophecy, the only information available is that there were five of them. There is nothing about who they were or what they looked like. Is there anything you remember? Anything at all?") + +sm.setPlayerAsSpeaker() +sm.sendSay("I don't remember a thing...") + +sm.setSpeakerID(LILIN) +sm.flipSpeaker() +sm.sendSay("As I expected. Of course, the curse of the Black Mage was strong enough to wipe out all of your memory. But even if that's the case, there has got to be a point where the past will uncover, especially now that we are certain you are one of the heroes. I know you've lost your armor and weapon during the battle but... Oh, yes, yes. I almost forgot! Your #bweapon#k!") + +sm.setPlayerAsSpeaker() +sm.sendSay("My weapon?") + +sm.setSpeakerID(LILIN) +sm.flipSpeaker() +sm.sendSay("I found an incredible weapon while digging through blocks of ice a while back. I figured the weapon belonged to a hero, so I brought it to town and placed it somewhere in the center of the town. Haven't you seen it? #bThe #p1201001##k...\r\n#i4032372#\r\n\r\nIt looks like this...") + +sm.setPlayerAsSpeaker() +sm.sendSay("Come to think of it, I did see a #p1201001# in town.") + +sm.setSpeakerID(LILIN) +if sm.sendAskAccept("Yes, that's it. According to what's been recorded, the weapon of a hero will recognize its rightful owner, and if you're the hero that used the #p1201001#, the #p1201001# will react when you grab the #p1201001#. Please go find the #b#p1201001# and click on it.#k"): + sm.startQuest(parentID) + sm.completeQuest(parentID) + + sm.flipSpeaker() + sm.sendSayOkay("If the #p1201001# reacts to you, then we'll know that you're #bAran#k, the hero that wielded a #p1201001#.") +else: + sm.flipSpeaker() + sm.sendNext("What's stopping you? I promise, I won't be disappointed even if the #p1201001# shows no reaction to you. Please, rush over there and grab the #p1201001#. Just #bclick#k on it.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21101s.py b/scripts/quest/q21101s.py new file mode 100755 index 0000000..0826b62 --- /dev/null +++ b/scripts/quest/q21101s.py @@ -0,0 +1,26 @@ +# 140000000 +GIANT_POLEARM = 1201001 + +sm.setSpeakerID(GIANT_POLEARM) +if sm.sendAskYesNo("#b(Are you certain that you were the hero that wielded the #p1201001#? Yes, you're sure. You better grab the #p1201001# really tightly. Surely it will react to you.)#k"): + if not sm.canHold(1142129): # Medal + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() + sm.giveItem(1142129) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.removeSkill(20000297) + sm.jobAdvance(2100) + sm.resetAP(False, 2100) + sm.removeSkill(20001296) + sm.giveSkill(20001296) + sm.chatScript("You learned the Back to Rien skill.") + + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("#b(You might be starting to remember something...)#k") + + sm.lockInGameUI(True, False) + sm.warp(914090100, 0) +else: + sm.sendNext("#b(You need to think about this for a second...)#k") diff --git a/scripts/quest/q21200e.py b/scripts/quest/q21200e.py new file mode 100755 index 0000000..e3736a6 --- /dev/null +++ b/scripts/quest/q21200e.py @@ -0,0 +1,30 @@ +# 21200 - [Job Adv] (Lv.30) Aran +sm.setSpeakerID(1201001) +sm.sendNext("Voom voom voom voom...") +sm.setPlayerAsSpeaker() +sm.sendNext("#b(The #p1201001# is producing an undulating echo. But who is that boy standing over there?)") +sm.sendNext("You've never seen him before. He doesn't look human.") +sm.setSpeakerID(1201002) +sm.sendNext("Yo, Aran! Do you not hear me? I said, do you not hear me! Ugh, how frustrating!") +sm.setPlayerAsSpeaker() +sm.sendNext("#b(Hm? Who's voice was that? It sounds like an angry boy...)") +sm.setSpeakerID(1201002) +sm.sendNext("Ugh, my only master had to end up trapped in ice for hundreds of years, abandoning me completely, and is now completely ignoring me.") +sm.setPlayerAsSpeaker() +sm.sendNext("Who...are you?") +sm.setSpeakerID(1201002) +sm.sendNext("Aran? Do you hear me now? It's me! Don't you recognize me? I'm your weapon, #b#p1201002# the polearm#k!") +sm.setPlayerAsSpeaker() +sm.sendNext("#b(...#p1201002#? A #p1201001# can talk?") +sm.setSpeakerID(1201002) +sm.sendNext("What's with that suspicious look on your face? I know you've lost your memory, but did you forget about me, too? How could you?!") +sm.setPlayerAsSpeaker() +sm.sendNext("I'm so sorry, but I can't remember a thing.") +sm.setSpeakerID(1201002) +if sm.sendAskYesNo("Sorry doesn't cut it! Do you know how lonely and bored I was for hundreds of years? I don't care what it takes! Remember me! Remember me now!"): + sm.completeQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendNext("#b(The voice that claims to be #p1201002#? the #p1201001# is yelling in frustration. You don't think this conversation is going anywhere. You better go talk to #p1510009# first.)") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21200s.py b/scripts/quest/q21200s.py new file mode 100755 index 0000000..39e851e --- /dev/null +++ b/scripts/quest/q21200s.py @@ -0,0 +1,8 @@ +# 21200 - [Job Adv] (Lv.30) Aran +sm.setSpeakerID(1510009) +if sm.sendAskYesNo("How is your training going? Wow, you've reached such a high level! That's amazing. I knew you would do just fine on Victorial Island... Oh, look at me. I'm wasting your time. I know you're busy, but you'll have to return to the island for a bit."): + sm.startQuest(parentID) + sm.sendNext("Your #b#p1201001##k in #b#m140000000##k is acting strange all of a sudden. According to the records, the Polearm acts this way when it is calling for its master. #bPerhaps it's calling for you#k. Please return to the island and check things out.") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21201e.py b/scripts/quest/q21201e.py new file mode 100755 index 0000000..794c646 --- /dev/null +++ b/scripts/quest/q21201e.py @@ -0,0 +1,23 @@ +# 21201 - [Job Adv] (Lv.30) Aran +sm.setSpeakerID(1201002) +sm.sendNext("First you promise to defeat the Black Mage and make me a famous weapon, then you abandon me for hundreds of years, and now you're telling me you don't remember who I am? What the...?! Do you think I'll let you get away with that? You're the one who begged and pined for me!") +sm.setPlayerAsSpeaker() +sm.sendNext("I did tell #p1203000# to make a polearm for me if I could prove my worth.") +sm.setSpeakerID(1201002) +sm.sendNext("After all that begging, shouldn't you treat me with a little more love and respect? Ya know, a weapon like me's rare and a wonderful thing. I am the ultimate #p1201001# that can help you defeat the Black Mage. How could you ditch me for hundreds of years...") +sm.setPlayerAsSpeaker() +sm.sendNext("Hey, I never begged for you.") +sm.setSpeakerID(1201002) +sm.sendNext("What? You never begged for me? Ha! #p1203000# told me you got on your knees, begged for me in tears, and... Wait a sec. Aran! Did you just remember who I am?!") +sm.setPlayerAsSpeaker() +sm.sendNext("Maybe a little bit...") +sm.setSpeakerID(1201002) +sm.sendNext("Aran, it is you! *Sniff sniff* Wait, *ahem* I didn't get emotional, it's just allergies. I know the Black Mage has stripped you of your abilities so you probably don't even have the strength to lift me... but at least you remember me! I'm glad that your memory's starting to return.") +if sm.sendAskYesNo("Evn though you've lost your memory, you're still my master. You endured some very tough training in the past, and I'm sure your body still remembers the skills that got you through those hard times. Alright, I'll restore your abilities!"): + if not sm.canHold(1142130): + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() + sm.completeQuest(parentID) + sm.giveItem(1142130) + sm.jobAdvance(2110) + sm.sendNext("Your level isn't what it used to be back in your glory days, so I can't restore all of your old abilities. But the few that I can restore should help you level up faster. Now hurry up and train so you can return to the old you.") diff --git a/scripts/quest/q21202e.py b/scripts/quest/q21202e.py new file mode 100755 index 0000000..3ec5691 --- /dev/null +++ b/scripts/quest/q21202e.py @@ -0,0 +1,9 @@ +# 21202 - [Job Adv] (Lv.30) Aran +sm.setSpeakerID(1203000) +sm.sendNext("Oh, have you brought me the Sign of Acceptances? You're stronger than I thought! But more importantly, I am impressed with the amount of courage you displayed when you agreed to take this dangerous weapon without any hesitation. You deserve it. The #p1201001# is yours.") +sm.sendNext("(After a long time passed, #p1203000# handed you the #p1201001# which was carefully wrapped in cloth.)") +if sm.sendAskYesNo("Here, this is #p1201002#, the Polearm you've asked for. Please take good care of it."): + # todo: show effect + sm.warpInstanceOut(140030000) + sm.completeQuest(parentID) + sm.consumeItem(4032311, 30) diff --git a/scripts/quest/q21202s.py b/scripts/quest/q21202s.py new file mode 100755 index 0000000..fbb662a --- /dev/null +++ b/scripts/quest/q21202s.py @@ -0,0 +1,16 @@ +# 21202 - [Job Adv] (Lv.30) Aran +sm.setSpeakerID(1203000) +sm.sendNext("Hmm... What's a young person like you doing in this secluded place?") +sm.setPlayerAsSpeaker() +sm.sendNext("I've come to get the best Polearm there is!") +sm.setSpeakerID(1203000) +sm.sendNext("The best Polearm? You should be able to purchase it in some town or other...") +sm.setPlayerAsSpeaker() +sm.sendNext("I hear that you are the best blacksmith in all of Maple World! I want nothing less than a weapon made by you!") +sm.setSpeakerID(1203000) +if sm.sendAskYesNo("I'm too old to make weapons now, but... I do have a Polearm that i made way back when. It's still in excellent shape. But I can't give it to you because that Polearm is extremely sharp, so sharp it could even hurt its master. Do you still want it?"): + sm.startQuest(parentID) + sm.sendSayOkay("Well, if you say so... I can't object to that. I'll tell you what. I'll give you a quick test, and if you pass it, the #p1201001# is yours. Head over to the #bTraining Center#k and take on the #r#o9831006##k that are there. your job is to bring back #b30 Sign of Acceptances#k.") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21300s.py b/scripts/quest/q21300s.py new file mode 100755 index 0000000..8a1a829 --- /dev/null +++ b/scripts/quest/q21300s.py @@ -0,0 +1,9 @@ +# 21300 - [Job Adv] (Lv.60) Aran +sm.setSpeakerID(1510009) +sm.sendNext("How is the training going? Hm, Lv. 60? You still ahve a long way to go, but it's definitely praiseworthy compared to the first time I met you. Continue to train diligently, and I'm sure you'll regain your strength soon!") +if sm.sendAskYesNo("But first, you must head to #b#m140000000##k your #b#p1201001##k is acting weird again. I think it has something to tell you. It might be able to restore your abilities, so please hurry."): + sm.startQuest(parentID) + sm.sendSayOkay("Anyway, I thought it was really something that a weapon had its own identity, but this weapon gets extremely annoying. It cries, saying that I'm not paying attention to its needs, and now... Oh, please keep this a secret from the Polearm. I don't think it's a good idea to upset the weapon any more than I already have.") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21301e.py b/scripts/quest/q21301e.py new file mode 100755 index 0000000..03ec996 --- /dev/null +++ b/scripts/quest/q21301e.py @@ -0,0 +1,10 @@ +# 21301 - [Job Adv] (Lv.60) Aran +sm.setSpeakerID(1201002) +if sm.sendAskYesNo("Did you slay the #o2600111#? Yippy! You're my master, indeed! Now, give me the Red Jade you fuond! I'll reattach it and... Wait, why aren't you saying anything? Don't tell me you didn't bring it back..."): + sm.sendNext("What? You didn't bring the Red Jade?! Why not?! Did you forget?! Yikes, I never thought the Black Mage's curse would turn you into a dummy...") + sm.sendNext("No, I can't let this drive me to despair. Now more than ever, I must stay optimistic and alert. Argh...") + sm.sendNext("You can go back if you want, but I'm sure the thief has already fled the scene. You'll just have to make a new Red Jade. You've made one before, so you remember the required materials, don't you? So hurry it up.") + sm.completeQuest(parentID) + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21302e.py b/scripts/quest/q21302e.py new file mode 100755 index 0000000..b7c153a --- /dev/null +++ b/scripts/quest/q21302e.py @@ -0,0 +1,12 @@ +# 21302 - [Job Adv] (Lv.60) Aran +sm.setSpeakerID(1201002) +sm.sendNext("Oh, isn't that... Hey, did you remember how to make the Red Jade? You may be a dummy who has amnesia, but this is why I can't leave you. Now hurry, give me the gem!") +if sm.sendAskYesNo("Okay, now that I have the power of Red Jade, I'll restore more of your abilities. Your level has gotten much higher since the last time we met, so I'm sure I can work my magic a bit more this time!"): + if not sm.canHold(1142131): + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() + sm.completeQuest(parentID) + sm.giveItem(1142131) + sm.jobAdvance(2111) + sm.consumeItem(4032312) + sm.sendNext("Please get back all of your abilities soon. I want to explore with you like we did in the good old days.") diff --git a/scripts/quest/q21303s.py b/scripts/quest/q21303s.py new file mode 100755 index 0000000..4dc23d9 --- /dev/null +++ b/scripts/quest/q21303s.py @@ -0,0 +1,16 @@ +# 21303 - [Job Adv] (Lv.60) Aran +sm.setSpeakerID(1203001) +sm.sendNext("*Sob sob* #p1203001# is sad. #p1203001# is mad. #p1203001# cries. *Sob sob*") +sm.setPlayerAsSpeaker() +sm.sendNext("Wh...What's wrong?") +sm.setSpeakerID(1203001) +sm.sendNext("#p1203001# made gem. #bGem as red as apple#k. But #rthief#k stole gem. #p1203001# no longer has gem. #p1203001# is sad...") +sm.setPlayerAsSpeaker() +sm.sendNext("A thief stole your red gem?") +sm.setSpeakerID(1203001) +if sm.sendAskYesNo("yes, #p1203001# wants gem back. #p1203001# reward you if you find gem. Catch thief and you get reward."): + sm.startQuest(parentID) + sm.sendNext("The thief wen that way! Which way? Hold on...eat with right hand, not left hand... #bLeft#k! He went left! Go left and you find thief.") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21400s.py b/scripts/quest/q21400s.py new file mode 100755 index 0000000..e14382c --- /dev/null +++ b/scripts/quest/q21400s.py @@ -0,0 +1,8 @@ +# 21400 - [Job Adv] (Lv.100) Aran +sm.setSpeakerID(1510009) +if sm.sendAskYesNo("How is the training going? I know you're busy, but please come to #bRien#k immediately. The #bMaha#k has started to act weird again... But it's even weirder now. it's different from before. It's... darker than usual."): + sm.startQuest(parentID) + sm.sendSayOkay("I have a bad feeling about this. Please come back here. I've never seen or heard Maha like this, but I can sense the suffering it's going through. #bOnly you, the master of Maha, can do something about it#k!") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q21401e.py b/scripts/quest/q21401e.py new file mode 100755 index 0000000..6556d28 --- /dev/null +++ b/scripts/quest/q21401e.py @@ -0,0 +1,12 @@ +# 21401 - [Job Adv] (Lv.100) Aran +sm.setSpeakerID(1201002) +sm.sendNext("Thank you, Aran. If it weren't for you, I would have become enraged and who knows what could have happened. Thank you NOT! It's only your duty as my mster...") +if sm.sendAskYesNo("Anyways, I just noticed how high of a level you've reached. If you were able to control me in my state of rage, I think you're ready to handle more abilities"): + if not sm.canHold(1142132): + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() + sm.completeQuest(parentID) + sm.giveItem(1142132) + sm.jobAdvance(2112) + sm.sendNext("Your skills have been restored. Those skills have been dormant for so long that you'll have to re-train yourself. but you'll be as good as new once you complete your training.") + sm.sendNext("Even with all that, however, you still have a long way to go until you return to the old you.") diff --git a/scripts/quest/q21401s.py b/scripts/quest/q21401s.py new file mode 100755 index 0000000..7b0f3ab --- /dev/null +++ b/scripts/quest/q21401s.py @@ -0,0 +1,9 @@ +# 21401 - [Job Adv] (Lv.100) Aran +sm.setSpeakerID(1201002) +sm.sendNext("Why do I look like this, you ask? I don't want to talk about it, but I suppose I can't hide from you since you're my master...") +sm.sendNext("While you were trapped inside ice for hundreds of years, I, too, was frozen. It was a long time to be away from you. That's when the seed of darkness was planted in my heart.") +sm.sendNext("But since you awoke, I thought the darkness had gone away. I thought things would return to the way they were, but I was mistaken.") +if sm.sendAskYesNo("Please, Aran. Please stop me from becoming enraged. Only you can control me. It's out of my hands now. Please do whatever it takes to #rstop me from going berserk#k!"): + sm.startQuest(parentID) + sm.warpInstanceIn(914020000) + sm.setInstanceTime(20 * 60, 140000000) \ No newline at end of file diff --git a/scripts/quest/q21700s.py b/scripts/quest/q21700s.py new file mode 100755 index 0000000..6677328 --- /dev/null +++ b/scripts/quest/q21700s.py @@ -0,0 +1,27 @@ +# 140000000 +LILIN = 1201000 + +sm.setSpeakerID(LILIN) +sm.flipSpeaker() +sm.sendNext("It seems like you've started to remember things. Your Polearm must have recognized you. This means you are surely #bAran, the wielder of Polearms#k. Is there anything else you remember? Skills you used with the Polearm perhaps? Anything?") + +sm.setPlayerAsSpeaker() +sm.sendSay("#b(You tell her that you remember a few skills.)#k") + +sm.setSpeakerID(LILIN) +sm.flipSpeaker() +sm.sendSay("That's not a lot, but it's progress. Our focus, then, should be to get you back to the state before you were frozen. You may have lost your memory, but I'm sure it won't take long for you to recover the abilities that your body remembers.") + +sm.setPlayerAsSpeaker() +sm.sendSay("How do I recover my abilities?") + +sm.setSpeakerID(LILIN) +if sm.sendAskAccept("There is only one way to do that. Train! Train! Train! Train! If you continue to train, your body will instinctively remember its abilities. To help you through the process, I'll introduce you to an instructor."): + # sm.giveItem(1442077) + sm.startQuest(parentID) + sm.completeQuest(parentID) + + sm.sendNext("I thought it'd be better for you to use a familiar weapon for your training, so I gave you a #bPolearm#k. I hope you can handle it. Now, take that weapon and...") + sm.sendPrev("Hmm. Give me a second. I need to think about what you should do now...") +else: + sm.sendNext("No? Are you saying you can train on your own? I'm just letting you know that you'll get better results if you train with an instructor. You can't live in this world alone. You must learn to get along with other people.") \ No newline at end of file diff --git a/scripts/quest/q21766e.py b/scripts/quest/q21766e.py new file mode 100755 index 0000000..893c648 --- /dev/null +++ b/scripts/quest/q21766e.py @@ -0,0 +1,29 @@ +# Created by MechAviv +# Quest ID :: 21766 +# Suspicious John + +sm.setSpeakerID(1002001) +if sm.sendAskAccept("Did you find out what's in the Wooden Box? Ooh, tell me, tell me!\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 1200 exp"): + sm.setSpeakerID(1002001) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("#bThere really wasn't anything inside. All it had were some snail shells and ingredients to treat arthritis.#k") + + + sm.setSpeakerID(1002001) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.sendSay("Oh? Then why has #p20000# started acting so strange? I'm so curious, I can't stand it! Anyway, thanks for your help.") + + + sm.setSpeakerID(1002001) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendSay("#b(You feel bad for #p1002001#, but sometimes, ignorance is bliss.)#k") + + sm.startQuest(21766) + sm.completeQuest(21766) + sm.giveExp(1200) +else: + sm.setSpeakerID(1002001) + sm.sendNext("I guess you don't know yet... That Wooden Box is... strange.") \ No newline at end of file diff --git a/scripts/quest/q21766s.py b/scripts/quest/q21766s.py new file mode 100755 index 0000000..9f67369 --- /dev/null +++ b/scripts/quest/q21766s.py @@ -0,0 +1,52 @@ +# Created by MechAviv +# Quest ID :: 21766 +# Suspicious John + +sm.setSpeakerID(1002001) +sm.flipSpeaker() +sm.sendNext("Hey! Can you do me a favor? #p20000# seems a bit strange these days...") + + +sm.setSpeakerID(1002001) +sm.setPlayerAsSpeaker() +sm.sendSay("What's wrong with #b#p20000#?#k") + + +sm.setSpeakerID(1002001) +sm.flipSpeaker() +sm.sendSay("He used to scowl and whine about his arthritis until just recently, but he's suddenly become all happy and smiley!!") + + +sm.setSpeakerID(1002001) +sm.setPlayerAsSpeaker() +sm.sendSay("#bWhat's wrong with that?? Maybe his arthritis has gotten better...#k") + + +sm.setSpeakerID(1002001) +sm.flipSpeaker() +sm.sendSay("That's exactly what I'm talking about. How is it possible that he's gotten better all of a sudden? On top of that, he carries around a wooden box and chuckles to himself nonstop!") + + +sm.setSpeakerID(1002001) +if sm.sendAskAccept("I have a feeling there is a secret behind that wooden box. Could you stealthily look into the wooden box next to #p20000#? "): + sm.startQuest(21766) + sm.setSpeakerID(1002001) + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("#bFine, I'll look into the wooden box and see what I can find.#k") + + + sm.setSpeakerID(1002001) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.sendSay("Okay. This should answer the mystery of why #p20000# has been acting strange. Inspect the wooden box located next to #p20000# and let me know what you find.") + + + sm.setSpeakerID(1002001) + sm.removeEscapeButton() + sm.flipSpeaker() + sm.sendPrev("You know where #p20000# is, right? It's to the right of here. The box will be somewhere near John.") +else: + sm.setSpeakerID(1002001) + sm.sendNext("#p20000# is acting really strange lately!") + diff --git a/scripts/quest/q21767s.py b/scripts/quest/q21767s.py new file mode 100755 index 0000000..454f317 --- /dev/null +++ b/scripts/quest/q21767s.py @@ -0,0 +1,18 @@ +# Created by MechAviv +# Quest ID :: 21767 +# Secrets of the Wooden Box + +sm.setSpeakerID(1204033) +sm.removeEscapeButton() +sm.flipSpeaker() +sm.sendNext(" (Inside the box was an unidentifiable treatment of some sort.)") + + +sm.setSpeakerID(1204033) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendSay("#bHm, there's a medicinal substance in the box. What could this be? You better take this to John and ask him what it is.#k") + + +sm.giveItem(4032423) +sm.startQuest(21767) \ No newline at end of file diff --git a/scripts/quest/q22000e.py b/scripts/quest/q22000e.py new file mode 100755 index 0000000..7544908 --- /dev/null +++ b/scripts/quest/q22000e.py @@ -0,0 +1,8 @@ +# 22000 | Strange dream (Evan intro) +sm.setSpeakerID(1013101) +sm.sendNext("Hey, Evan, Wassup? What's with the dark circles under your eyes? Didn't sleep well? Huh? Had a strange dream? What was it about? Whoa? A dream about a Dragon?") +sm.sendNext("Muhahahahaha, a Dragon? Are you serious? I don't know how to interpret dreams, but that sounds like a good one! Did you see a dog in your dream too?\r\n\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 20 exp") +sm.giveExp(20) +sm.completeQuest(parentID) + + diff --git a/scripts/quest/q22000s.py b/scripts/quest/q22000s.py new file mode 100755 index 0000000..4bbea75 --- /dev/null +++ b/scripts/quest/q22000s.py @@ -0,0 +1,23 @@ +# 22000 | Strange dream (Evan intro) +sm.setSpeakerID(1013100) +sm.sendNext("Did you sleep well, Evan?") +sm.setPlayerAsSpeaker() +sm.sendNext("#bYes, what about you, mom?") +sm.setSpeakerID(1013100) +sm.sendNext("I did as well, but you seem so tired. Did you sleep well? Did the thunder and lightning last night keep you up?") +sm.setPlayerAsSpeaker() +sm.sendNext("#bOh, no. It's not that, Mom. I just had a strange dream last night.") +sm.setSpeakerID(1013100) +sm.sendNext("A strange dream? What kind of strange dream?") +sm.setPlayerAsSpeaker() +sm.sendNext("#bWell...") +sm.sendNext("#b(You explain that you met a Dragon in your dream.)") +sm.setSpeakerID(1013100) +if sm.sendAskYesNo("Hahaha, a Dragon? That's incredible. I'm glad he didn't swallow you whole! You should tell Utah about your dream. I'm sure he'll enjoy it"): + sm.startQuest(22000) + sm.sendNext("#bUtah#k wen to the #b Front Yard#k to feed the Bull Dog. You'll see him right outside.") + sm.dispose() +else: + sm.dispose() + + diff --git a/scripts/quest/q22001s.py b/scripts/quest/q22001s.py new file mode 100755 index 0000000..eb08fd9 --- /dev/null +++ b/scripts/quest/q22001s.py @@ -0,0 +1,20 @@ +# 22001 | Feeding Bull Dog (Evan intro) +sm.setSpeakerID(1013101) +sm.sendNext("Haha, I had a good laugh. Hahaha, but enough with that nonsense, feed Bulldog, would you?") +sm.setPlayerAsSpeaker() +sm.sendNext("#bWhat? that's Utah's job!") +sm.setSpeakerID(1013101) +if sm.sendAskYesNo("You little brat! I told you to call me older brother! You know how much Bulldog hates me. He'll bite me if I go near him. You feed him. He likes you."): + if sm.canHold(4032447): + sm.startQuest(parentID) + sm.giveItem(4032447) + sm.sendNext("Hurry up and head #bleft#k to feed #bBulldog#k. He's been barking to be fed all morning.") + sm.sendSay("Feed Bulldog and come back to see me.") + sm.dispose() + else: + sm.sendSay("Please make space in your Etc Inventory.") + sm.dispose() +else: + sm.dispose() + + diff --git a/scripts/quest/q22002e.py b/scripts/quest/q22002e.py new file mode 100755 index 0000000..4be436f --- /dev/null +++ b/scripts/quest/q22002e.py @@ -0,0 +1,6 @@ +# 22002 | Sandwich for Breakfast (Evan intro) +sm.setSpeakerID(1013100) +sm.sendNext("Did you eat your breakfast, evan? Then, will you do me a favor? \r\n #fUI/UIWindow2.img/QuestIcon/4/0# \r\n #v1003028# 1 Straw Hat \r\n #fUI/UIWindow2.img/QuestIcon/8/0# 60 exp") +sm.giveExp(60) +sm.giveItem(1003028) +sm.completeQuest(parentID) diff --git a/scripts/quest/q22002s.py b/scripts/quest/q22002s.py new file mode 100755 index 0000000..8530ecf --- /dev/null +++ b/scripts/quest/q22002s.py @@ -0,0 +1,16 @@ +# 22002 | Sandwich for Breakfast (Evan intro) +sm.setSpeakerID(1013101) +sm.sendNext("Did you feed Bulldog? You should have some breakfast now then, Evan. Today's breakfast is Handmade Sandwich. I've brought it with me. Hee hee. I was going to eat it myself if you didn't agree to feed Bulldog") +if sm.sendAskYesNo("Here, I'll give you this #bSandwich#k, so #bgo talk to mom when you finish eating#k. She says she has something to tell you."): + if sm.canHold(2022620): + sm.startQuest(parentID) + sm.giveItem(2022620) + sm.setPlayerAsSpeaker() + sm.sendNext("#b(Mom has something to say? Eat your Handmade Sandwich and head back inside the house.)") + sm.dispose() + else: + sm.sendNext("Please make room in your Use inventory.") + sm.dispose() +else: + sm.dispose() + diff --git a/scripts/quest/q22003s.py b/scripts/quest/q22003s.py new file mode 100755 index 0000000..ee57957 --- /dev/null +++ b/scripts/quest/q22003s.py @@ -0,0 +1,14 @@ +# 22003 | Delivering the Lunch Box (Evan intro) +sm.setSpeakerID(1013100) +if sm.sendAskYesNo("Your #bDad#k forgot his Lunch Box when he left for the farm this morning. Will you #bdeliver this Lunch Box#k to your Dad in #bFarm Center#k, honey?"): + if sm.canHold(4032448): + sm.sendNext("Heehee, my Evan is such a good kid! Head #bleft after you exit the house#k. Rush over to your Dad, I'm sure he's starving.") + sm.sendNext("Come back to me if you happen to lose the Lunch Box, I'll make his lunch again.") + sm.startQuest(parentID) + sm.dispose() + else: + sm.sendNext("Please make room in your Etc Inventory.") + sm.dispose() +else: + sm.dispose() + diff --git a/scripts/quest/q22004e.py b/scripts/quest/q22004e.py new file mode 100755 index 0000000..3e92240 --- /dev/null +++ b/scripts/quest/q22004e.py @@ -0,0 +1,11 @@ +# 22004 | Fixing the Fence (Evan intro) +sm.setSpeakerID(1013103) +sm.sendNext("Ah, did you bring all the Thick Branches? That's my kid! What shall i give you as reward?... Let's see... Oh, right! \r\n #fUI/UIWindow2.img/QuestIcon/4/0# \r\n #v3010097# Strong Wooden Chair \r\n #fUI/UIWindow2.img/QuestIcon/8/0# 210 exp") +if sm.canHold(3010097): + sm.giveItem(3010097) + sm.giveExp(210) + sm.completeQuest(parentID) + sm.dispose() +else: + sm.sendNext("Please make room in your Set-up Inventory") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22004s.py b/scripts/quest/q22004s.py new file mode 100755 index 0000000..8d58541 --- /dev/null +++ b/scripts/quest/q22004s.py @@ -0,0 +1,8 @@ +# 22004 | Fixing the Fence (Evan intro) +sm.setSpeakerID(1013103) +sm.sendNext("The pigs at the farm have been acting strange these past couple days. They've been angry and irritable for no reason. I was worried so I came out to the farm early this morning and sure enough, it seems like a few of these Pigs got past the fence.") +if sm.sendAskYesNo("Before I go and find the Pigs, I should mend the broken fence. Luckily, it wasn't damaged too badly. I just need a few Thick Branches to fix it right up. Will you bring me #b3 Thick Branches#k, Evan?"): + sm.sendNext("Oh, that's very nice of you. You'll be able to find the #bThick Branches#k from the nearby #rStumps#k. They're not too strong, but use your skills and items when you find yourself in danger.") + sm.startQuest(parentID) +else: + sm.dispose() diff --git a/scripts/quest/q22007e.py b/scripts/quest/q22007e.py new file mode 100755 index 0000000..6a0c7f2 --- /dev/null +++ b/scripts/quest/q22007e.py @@ -0,0 +1,9 @@ +# 22007 | Collecting Eggs (Evan intro) +sm.setSpeakerID(1013101) +sm.sendNext("Oh, did you bring the egg? Here, give it to me, I'll give you the incubator then.") +if sm.sendAskYesNo("Alright, here you go. I have no idea how to use it, but it's yours.\r\n #fUI/UIWindow2.img/QuestIcon/8/0# 360 exp"): + sm.giveExp(360) + sm.completeQuest(parentID) + sm.dispose() +else: + sm.dispose() diff --git a/scripts/quest/q22008e.py b/scripts/quest/q22008e.py new file mode 100755 index 0000000..47f56e4 --- /dev/null +++ b/scripts/quest/q22008e.py @@ -0,0 +1,37 @@ +# 22008 | Chasing away the foxes (Evan intro) +sm.setSpeakerID(1013101) +sm.sendNext("Did you defeat the Treacherous Foxes?") +sm.setPlayerAsSpeaker() +sm.sendNext("#bWhat happened to slaying the Foxes left behind?") +sm.setSpeakerID(1013101) +sm.sendNext("Oh that? Haha, I did chase them, sort of, But I wanted to make sure they did not catch up to you. I wouldn't want you eaten by a Treacherous Fox or anything. So I just let them be.") +sm.setPlayerAsSpeaker() +sm.sendNext("#bAre you sure you weren't just hiding because you were scared of the Foxes?") +sm.setSpeakerID(1013101) +sm.sendNext("What? No way! Sheeesh, I fear nothing!") +sm.setPlayerAsSpeaker() +sm.sendNext("#bWatch out! There's a Treacherous Fox right behind you!") +sm.setSpeakerID(1013101) +sm.sendNext("Eeeek! Mommy!") +sm.setPlayerAsSpeaker() +sm.sendNext("....") +sm.setSpeakerID(1013101) +sm.sendNext("....") +sm.sendNext("You little brat! I'm your older brother. Don't you mess with me! Your brother has a weak heart, you know. Don't surprise me like that!") +sm.setPlayerAsSpeaker() +sm.sendNext("#b(This is why I don't want to call you Older Brother....)") +sm.setSpeakerID(1013101) +sm.sendNext("Hmmph! Anyway, I'm glad you were able to defeat the Treacherous Foxes. As a reward I'll give you something an Adventurer gave me a long time ago. Here you are. \r\n #fUI/UIWindow2.img/QuestIcon/4/0# \r\n #v1372107# Beginner Magician's Wand \r\n #fUI/UIWindow2.img/QuestIcon/8/0# 910 exp") +if sm.canHold(1372107): + sm.giveItem(1372107) + sm.giveExp(910) + sm.completeQuest(parentID) + sm.sendNext("#bThis is a weapon that Magicians use. It's a Wand. #k You probably won't really need it, but it'll make you look important if you carry it around. Hahaha") + sm.sendSay("Anyways, the Foxes have increased, right? How weird is that? Why are they growing day by day? We should really look into it and get to the bottom of this.") + sm.dispose() +else: + sm.sendNext("Please make room in your Equip Inventory.") + sm.dispose() + + + diff --git a/scripts/quest/q22008s.py b/scripts/quest/q22008s.py new file mode 100755 index 0000000..a269278 --- /dev/null +++ b/scripts/quest/q22008s.py @@ -0,0 +1,8 @@ +# 22008 | Chasing away the foxes (Evan intro) +sm.setSpeakerID(1013101) +if sm.sendAskYesNo("It's strange. The chickens are acting funny. They used to hatch way more Eggs. Do you think the Foxes have something to do with it? If so, we better hurry up and do something about it."): + sm.startQuest(parentID) + sm.sendNext("Right? Let us go and defeat those Foxes. Go on ahead and defeat #r10 Treacherous Foxes#k in #bBack Yard#k first. I'll follow you and take care of what's left behind. Now, hurry over to the Back Yard!") + sm.dispose() +else: + sm.dispose() diff --git a/scripts/quest/q22130s.py b/scripts/quest/q22130s.py new file mode 100755 index 0000000..ffaac66 --- /dev/null +++ b/scripts/quest/q22130s.py @@ -0,0 +1,10 @@ +sm.levelUntil(10) +sm.setJob(2200) +sm.addSP(5, True) +sm.chatScript("You learned the Back to Nature skill.") +sm.sendSayImage("UI/tutorial/evan/14/0") +sm.systemMessage("A baby dragon has hatched from the egg in the incubator.") +sm.systemMessage("Obtained 5 Skill Points to use for leveling up.") +sm.systemMessage("It looks like the baby dragon has something to say. Click to talk to it!") +sm.completeQuestNoCheck(22130) +sm.giveSkill(20011293) \ No newline at end of file diff --git a/scripts/quest/q22131e.py b/scripts/quest/q22131e.py new file mode 100755 index 0000000..83411ac --- /dev/null +++ b/scripts/quest/q22131e.py @@ -0,0 +1,10 @@ +sm.setJob(2212) +sm.addSP(3, True) +#sm.giveSkill(20011293) +#sm.chatScript("You learned the Back to Nature skill.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +#sm.sendSayImage("UI/tutorial/evan/14/0") +#sm.systemMessage("A baby dragon has hatched from the egg in the incubator.") +#sm.systemMessage("Obtained 5 Skill Points to use for leveling up.") +#sm.systemMessage("It looks like the baby dragon has something to say. Click to talk to it!") \ No newline at end of file diff --git a/scripts/quest/q22131s.py b/scripts/quest/q22131s.py new file mode 100755 index 0000000..a495b98 --- /dev/null +++ b/scripts/quest/q22131s.py @@ -0,0 +1,10 @@ +sm.setJob(2210) +sm.addSP(3, True) +#sm.giveSkill(20011293) +#sm.chatScript("You learned the Back to Nature skill.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +#sm.sendSayImage("UI/tutorial/evan/14/0") +#sm.systemMessage("A baby dragon has hatched from the egg in the incubator.") +#sm.systemMessage("Obtained 5 Skill Points to use for leveling up.") +#sm.systemMessage("It looks like the baby dragon has something to say. Click to talk to it!") \ No newline at end of file diff --git a/scripts/quest/q22132e.py b/scripts/quest/q22132e.py new file mode 100755 index 0000000..0d87527 --- /dev/null +++ b/scripts/quest/q22132e.py @@ -0,0 +1,10 @@ +sm.setJob(2214) +sm.addSP(3, True) +#sm.giveSkill(20011293) +#sm.chatScript("You learned the Back to Nature skill.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +#sm.sendSayImage("UI/tutorial/evan/14/0") +#sm.systemMessage("A baby dragon has hatched from the egg in the incubator.") +#sm.systemMessage("Obtained 5 Skill Points to use for leveling up.") +#sm.systemMessage("It looks like the baby dragon has something to say. Click to talk to it!") \ No newline at end of file diff --git a/scripts/quest/q22132s.py b/scripts/quest/q22132s.py new file mode 100755 index 0000000..0d87527 --- /dev/null +++ b/scripts/quest/q22132s.py @@ -0,0 +1,10 @@ +sm.setJob(2214) +sm.addSP(3, True) +#sm.giveSkill(20011293) +#sm.chatScript("You learned the Back to Nature skill.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +#sm.sendSayImage("UI/tutorial/evan/14/0") +#sm.systemMessage("A baby dragon has hatched from the egg in the incubator.") +#sm.systemMessage("Obtained 5 Skill Points to use for leveling up.") +#sm.systemMessage("It looks like the baby dragon has something to say. Click to talk to it!") \ No newline at end of file diff --git a/scripts/quest/q22500s.py b/scripts/quest/q22500s.py new file mode 100755 index 0000000..5c6b1d3 --- /dev/null +++ b/scripts/quest/q22500s.py @@ -0,0 +1,49 @@ +sm.setSpeakerID(1013000) +sm.sendNext("I'm finally here! *inhales* Ah, this must be air I'm breathing. And that, that must be the sun! And that, a tree! And that, a plant! And that, a flower! Woohahahaha! This is incredible! This is much better than I imagined the world to be while I was trapped inside the egg. And you... Are you my master? Hm, I pictured you differently.") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bWhoooooa, it talks!") + +sm.setSpeakerID(1013000) +sm.sendSay("My master is strange. I guess I can't do anything about it now, since the pact has been made. *sigh* Well, good to meet you. We'll be seeing a lot of each other.") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bEh? What do you mean? We'll be seeing a lot of each other? What pact?") + +sm.setSpeakerID(1013000) +sm.sendSay("What do you mean what do I mean?! You woke me from the Egg. You're my master! So of course it's your responsibility to take care of me and train me and help me become a strong Dragon. Obviously!") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bWhaaat? A Dragon? You're a Dragon?! I don't get it... Why am I your master? What are you talking about?") + +sm.setSpeakerID(1013000) +sm.sendSay("What are YOU talking about? Your spirit made a pact with my spirit! We're pretty much the same person now. Do I really have to explain? As a result, you've become my master. We're bound by the pact. You can't change your mind... The pact cannot be broken.") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bWait, wait, wait. Let me get this straight. You're saying I have no choice but to help you?") + +sm.setSpeakerID(1013000) +sm.sendSay("Yuuup! Heeeey...! What's with the face? You...don't want to be my master?") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bNo... It's not that... I just don't know if I'm ready for a pet.") + +sm.setSpeakerID(1013000) +sm.sendSay("A p-p-pet?! Did you just call me a pet?! How dare... Why, I'm a Dragon! The strongest being in the world!") + +sm.setPlayerAsSpeaker() +sm.sendSay("#b...#b(You stare at him skeptically. He looks like a lizard. A puny little one, at that.)#k") + +sm.setSpeakerID(1013000) +if sm.sendAskAccept("Why are you looking at me like that?! Just watch! See what I can do with my power. Ready?"): + if not sm.hasQuest(parentID): + sm.startQuest(parentID) + + sm.removeEscapeButton() + sm.sendNext("Attack the #r#o1210100##k! It's time to awaken my true power and prove myself as a dragon! Chaaaarge!") + sm.sendSay("HOLD IT! Before we rush in, did you already distribute your AP? Magic is affected by #bINT and LUK#k! So make sure you distribute your AP, and put on some #bMagician gear#k before you rush into battle!") + sm.sendSayImage("UI/tutorial/evan/11/0") + sm.dispose() +else: + sm.sendNext("You don't believe me? Grrrrr, you're getting me mad!") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22501s.py b/scripts/quest/q22501s.py new file mode 100755 index 0000000..60374df --- /dev/null +++ b/scripts/quest/q22501s.py @@ -0,0 +1,24 @@ +sm.setSpeakerID(1013000) +sm.sendNext("Yo, master. Now that I've shown you what I can do, it's your turn. Prove to me...that you can find food! I'm starving. You can use my power now, so you have to take care of me.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Eh, I still don't get what's going on, but I can't let a poor little critter like you starve, right? Food, you say? What do you want to eat?") + +sm.setSpeakerID(1013000) +#sm.spawnMob(1210100, -407, 35, False) +#sm.spawnMob(1210100, 28, 35, False) +#sm.spawnMob(1210100, 62, -265, False) +#sm.spawnMob(1210100, -548, -265, False) +#sm.spawnMob(1210100, -676, 35, False) +#sm.spawnMob(1210100, 432, 35, False) +#sm.spawnMob(1210100, -883, 35, False) +#sm.spawnMob(1210100, -770, -265, False) +sm.sendNext("Hi, I was just born a few minutes ago. How would I know what I eat? All I know is that I'm a Dragon... I'm YOUR Dragon. And you're my master. You have to treat me well!") + +if sm.sendAskAccept("I guess we're supposed to learn together. But I'm hungry. Master, I want food. Remember, I'm a baby! I'll start crying soon!"): + if not sm.hasQuest(parentID): + sm.startQuest(parentID) + sm.sendSayOkay("#b#b(#p1013000# the baby Dragon appears to be extremely hungry. You must feed him. Maybe your Dad can give you advice on what dragons eat.)") +else: + sm.sendNext("*gasp* How can you refuse to feed your Dragon? This is child abuse! ") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22502s.py b/scripts/quest/q22502s.py new file mode 100755 index 0000000..868b8b5 --- /dev/null +++ b/scripts/quest/q22502s.py @@ -0,0 +1,9 @@ +sm.setSpeakerID(1013103) +if sm.sendAskAccept("Wouldn't a lizard enjoy a #b#t4032452##k, like a cow? There are a lot of #bHaystacks#k nearby, so try feeding it that."): + if not sm.hasQuest(parentID): + sm.startQuest(parentID) + sm.sendSayImage("UI/tutorial/evan/12/0") + sm.dispose() +else: + sm.sendNext("Hm, you never know unless you try. That lizard is big enough to be on Maple's Believe It Or Not. It might eat hay.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22503s.py b/scripts/quest/q22503s.py new file mode 100755 index 0000000..4e50178 --- /dev/null +++ b/scripts/quest/q22503s.py @@ -0,0 +1,16 @@ +sm.setSpeakerID(1013000) +sm.sendNext("No, no, no. This isn't what I need. I need something more nutritious, master!") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bHm... So you're not a herbivore. You might be a carnivore. You're a Dragon, after all. How does some #t4032453# sound?") + +sm.setSpeakerID(1013000) +if sm.sendAskAccept("What's a...#t4032453#? Never heard of it, but if it's yummy, I accept! Just feed me something tasty. Anything but plants!"): + if not sm.hasQuest(parentID): + sm.startQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendSayOkay("#b#bOkay then, let's give #t4032453# to #p1013000#. Get them from a few #o1210100# critters on the farm. I think 3 will do it.") + sm.dispose() +else: + sm.sendNext("How can you starve me like this. I'm just a baby. This is wrong!") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22504s.py b/scripts/quest/q22504s.py new file mode 100755 index 0000000..a75c197 --- /dev/null +++ b/scripts/quest/q22504s.py @@ -0,0 +1,15 @@ +sm.setSpeakerID(1013000) +sm.sendNext("Ugh. This isn't going to work. I need something else. No plants. No meat. What, you have no idea? But you're the master, and you're older than me, too. You must know what'd be good for me!") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bBut I don't. It's not like age has anything to do with this...") + +sm.setSpeakerID(1013000) +if sm.sendAskAccept("Since you're older, you must be more experienced in the world, too. Makes sense that you'd know more than me. Oh, fine. I'll ask someone who's even older than you, master!"): + if not sm.hasQuest(parentID): + sm.startQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendSayOkay("#b#b(You already asked Dad once, but you don't have any better ideas. Time to ask him again!)") +else: + sm.sendNext("No use trying to find an answer to this on my own. I'd better look for #bsomeone older and wiser than master#k!") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22507s.py b/scripts/quest/q22507s.py new file mode 100755 index 0000000..d70b37d --- /dev/null +++ b/scripts/quest/q22507s.py @@ -0,0 +1,58 @@ +sm.setSpeakerID(1013000) +sm.sendNext("I knew it! I knew we were connected, master! When you get stronger, I get stronger, too. And when I get stronger, you can use my strength! That's our pact. I knew I picked a good master!") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bI see. How did we end up in this pact anyway?") + +sm.setSpeakerID(1013000) +sm.sendSay("I don't know. I was just an egg. I can't really remember...though I faintly recall you, master, walking toward me in a foggy forest. I remember your surprise upon seeing me. And I was calling out to you in return.") + +sm.setPlayerAsSpeaker() +sm.sendSay("#b#b(Wait! That sounds just like that one dream you had... Did the two of you meet in a dream? Is it possible that the giant Dragon you saw in that dream was...#p1013000#?)") + +sm.setSpeakerID(1013000) +sm.sendSay("Master, you and I are one in spirit. I knew it the moment I saw you. That's why I wanted to make the pact with you. No one else. You had to pay the price I set, of course.") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bI paid a price?") + +sm.setSpeakerID(1013000) +sm.sendSay("Don't you remember? When you recognized me and touched me? That was the one condition I set. The moment you touched my egg, you and I became one in spirit.") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bOne in...spirit?") + +sm.setSpeakerID(1013000) +sm.sendSay("Yes! The Spirit Pact! You and I have seperate bodies, but we share one spirit. That's why you get stronger when I get stronger, and vice versa! Awesome, right? At least, I think so.") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bI have no idea what you're talking about, but it sounds like a pretty big deal.") + +sm.setSpeakerID(1013000) +sm.sendSay("Of course it's a big deal, silly master! You never have to worry about monsters again. You have me to protect you now! Go ahead and test me. In fact, let's go right now!") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bBut it's peaceful here. There are no dangerous monsters around.") + +sm.setSpeakerID(1013000) +sm.sendSay("WHAT?! That's no fun! Don't you like adventuring, master? Fighting monsters on behalf of your people, defeating evil, rescuing the innocent, and all that? You're not into that kind of thing?") + +sm.setPlayerAsSpeaker() +sm.sendSay("#bIt's not part of my five year plan. I'm just kidding, but seriously, I'm a farmer's kid...") + +sm.setSpeakerID(1013000) +if sm.sendAskAccept("Bah, well let me tell you this. It's impossible for a Dragon Master to live a peaceful life. I'll have plenty of chances to prove my skills. Trust me, our life will be one big adventure. Promise me that you'll stick with me, okay?\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 810 exp"): + if not sm.hasQuestCompleted(parentID): + sm.giveExp(810) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.removeEscapeButton() + sm.sendNext("Hehehe, alrighty then, master. Let's get to it!") + + sm.setPlayerAsSpeaker() + sm.sendSay("#b(You're a bit confused, but you are now traveling with Mir the Dragon. Perhaps you'll go on an adventure together, like he said.)") + sm.sendSay("#b#b(You still have an errand to run. Your dad needs to talk to you, so go and see him now.)") + sm.dispose() +else: + sm.sendNext("Uh, you're kidding me, right? Tell me your finger slipped! Go ahead and accept the quest.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22510s.py b/scripts/quest/q22510s.py new file mode 100755 index 0000000..a107421 --- /dev/null +++ b/scripts/quest/q22510s.py @@ -0,0 +1,16 @@ +sm.setSpeakerID(1013103) +selection = sm.sendSay("Hm? What is it, Evan? Are you here to help your old dad? Huh? What do you mean, you defeated the #o1210111#s?! Geez, are you hurt?!\r\n#b#L0#I'm fine, Dad! It was easy.#l") +if (selection == 0): + if sm.sendAskAccept("What a relief. You need to be careful, though. It could've been dangerous... By the way, I've got something for you to do. Can you run an errand for me?"): + if not sm.hasQuest(parentID): + sm.giveItem(4032455) + sm.startQuest(parentID) + sm.removeEscapeButton() + sm.sendNext("Could you tell #b#p1012003##k in #b#m100000000# that I'm not going to be able to deliver the #t4032453# on time? The #o1210111#s have caused so many problems.") + sm.sendSay("I've written everything down in this letter, so all you have to do is take this to him. I'd go myself, but I have to deal with problems here.") + sm.sendSayImage("UI/tutorial/evan/13/0") + else: + sm.sendNext("I guess all that action with the #o1210111#s has worn you out. Why don't you come back and see me after you get some rest.") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22703s.py b/scripts/quest/q22703s.py new file mode 100755 index 0000000..10bd3ce --- /dev/null +++ b/scripts/quest/q22703s.py @@ -0,0 +1,16 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001120 +# Hideout :: Training Room 2 +JAY = 1531001 + +sm.setSpeakerID(JAY) +sm.sendNext("Kinesis, I've got a present for you. Thought it would be nice to celebrate your first real upgrade.") + +if sm.sendAskYesNo("Check it out, it's a bag! This will help you carry more stuff without having to resort to a fanny-pack or something."): + # INV grow 1-4 + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.sendSayOkay("Keep it up, K. Not that you need me to tell you that.") +else: + sm.sendSayOkay("I know you'll change your mind. Let me know when you do.") \ No newline at end of file diff --git a/scripts/quest/q22704s.py b/scripts/quest/q22704s.py new file mode 100755 index 0000000..3c946e2 --- /dev/null +++ b/scripts/quest/q22704s.py @@ -0,0 +1,11 @@ +JAY = 1531001 + +sm.setSpeakerID(JAY) +sm.sendNext("K, buddy, I've prepared something to mark your 2nd upgrade.") +if sm.sendAskYesNo("Did you like that bag I got you last time? I hope so, because I got you another! I told the company the first broke, so they sent me another."): + # inv grow 1- 4 + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.sendSayOkay("Keep it up, K. Not that you need me to tell you that.") +else: + sm.sendSayOkay("I know you'll change your mind. Let me know when you do.") \ No newline at end of file diff --git a/scripts/quest/q22711s.py b/scripts/quest/q22711s.py new file mode 100755 index 0000000..dd21fc8 --- /dev/null +++ b/scripts/quest/q22711s.py @@ -0,0 +1,18 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001120 +# Hideout :: Training Room 2 +JAY = 1531001 + +sm.startQuest(parentID) +sm.setIntroBoxChat(JAY) +sm.sendNext("#face9# Let me see... got it. Perfect. Now that you've suffered through the boring yet EXTREMELY IMPORTANT part, we can cut you loose. Start with those 5 Training Robot Bs.") + +sm.spawnMob(2700300, 703, -150, False) +sm.spawnMob(2700300, 703, -150, False) +sm.spawnMob(2700300, 85, -179, False) +sm.spawnMob(2700300, 85, -179, False) +sm.spawnMob(2700300, 85, -179, False) +sm.playSound("Sound/SoundEff.img/blackHeaven/metaldrop") +sm.cameraSwitchNormal("pt_VP", 1000) +sm.sendNext("#face9#Pick up anything you want with the Z key. Don't worry, I've got plenty of parts to rebuild these with. When you're done, take the door on the left to come meet me.") diff --git a/scripts/quest/q22712e.py b/scripts/quest/q22712e.py new file mode 100755 index 0000000..368a3b4 --- /dev/null +++ b/scripts/quest/q22712e.py @@ -0,0 +1,43 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: HQ +from net.swordie.ms.enums import UIType +KINESIS = 1531000 +JAY = 1531001 + +sm.setNpcOverrideBoxChat(JAY) +sm.sendNext("Actually, wait. Let me get a preliminary physical reading right now.") +if (sm.getAP() > 0): + sm.sendSay("#face3#...That's weird. Hey, K. Looks like you have an ability you can improve.") + sm.sendSay("#face2#You can increase your #gbasic abilities#k and #gskill levels#k by leveling up. Don't wait to train if you want to get stronger.") + sm.sendSay("#face2#Since your brain controls all your powers, I would focus on improving your #gINT#k. You'll never be as smart as me, but you can use the Auto-Assign function to do it smartly.") + + sm.setNpcOverrideBoxChat(KINESIS) + sm.sendSay("Very funny, Jay. Sounds like you forgot about the last time I whupped you at chess.\r\n\r\n#b(Use all your AP to increase your stats before speaking to Jay again.)#k") + + sm.progressMessageFont(3, 20, 20, 0, "Level up to increase your stats and skill levels.") + sm.openUI(UIType.UI_STAT) + sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_03", 100) +elif sm.getSP() > 0: + sm.sendSay("#face3#...That's weird. Hey, K. Looks like you have an ability you can improve.") + sm.sendSay("#face3#What are you doing, K?\r\nYou forgot to fix your 1st Job #bSkill Levels#k. Are you finally slipping?") + sm.sendSay("#face2#You know you can assign skills to any hotkey you want, right?") + + sm.setNpcOverrideBoxChat(KINESIS) + sm.sendSay("#face2#I know, I know. Just wanted to make sure you're paying attention. Heh.\r\n\r\n#b(Use all of your SP to increase your Skill Levels and then speak to Jay again.)#k") + + sm.progressMessageFont(3, 20, 20, 0, "Level up to increase your stats and skill levels.") + sm.openUI(UIType.UI_STAT) + sm.openUIWithOption(UIType.UI_SKILL, 142001001) + sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_03", 100) + sm.avatarOriented("UI/tutorial.img/kinesis/5") +#elif sm.getBeginnerSP() > 0: +# sm.sendSay("#face3#Well-l-l-l... You increased your 1st Job stuff, but forgot your #bBeginner Skills#k. Can't ignore the fundamentals, K.") +# sm.openUIWithOption(UIType.UI_SKILL, 140000291) +else: + sm.consumeItem(2000040) + sm.giveExp(600) + sm.completeQuest(parentID) + sm.completeQuest(22715) + sm.sendSayOkay("Geez, you rebounded from your training super fast. I don't understand how you're in such good shape.") \ No newline at end of file diff --git a/scripts/quest/q22712s.py b/scripts/quest/q22712s.py new file mode 100755 index 0000000..9e2d26a --- /dev/null +++ b/scripts/quest/q22712s.py @@ -0,0 +1,21 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: HQ +JAY = 1531001 + +sm.setNpcOverrideBoxChat(JAY) +sm.sendNext("Data looks good so far. Nicely done.") + +if sm.sendAskYesNo("Okay, that's enough for today. Have a drink and get some rest. We're still not clear on how much stress your powers put on your body."): + sm.startQuest(parentID) + sm.giveItem(2000040) + + sm.setIntroBoxChat(JAY) + sm.sendNext("The drink I gave you went to your inventory. Just like equipping gear, you can double-click that drink to, y'know, drink it. Now, get some rest. I want to check your physical indexes afterwards.") + + sm.progressMessageFont(3, 20, 20, 0, "Collect Psychic Points to unleash your ultimate skill.") + sm.avatarOriented("UI/tutorial.img/kinesis/3") + sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_07", 100) +else: + sm.sendSayOkay("What? I thought you liked this one. If you wanted something else, you should have told me.") \ No newline at end of file diff --git a/scripts/quest/q22714s.py b/scripts/quest/q22714s.py new file mode 100755 index 0000000..c1a95de --- /dev/null +++ b/scripts/quest/q22714s.py @@ -0,0 +1,48 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: Training Room 3 +KINESIS = 1531000 +JAY = 1531001 + +sm.startQuest(parentID) +sm.lockForIntro() +sm.removeAdditionalEffect() + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("Is that all?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9#No, of course not. Don't get ahead of yourself, K.") +sm.sendSay("#face9#I'm tracking your Psychic Points #g(PP)#k so you'll know when you can use your ultimate. That's what I call that super technique you came up with. Seemed appropriate.") +sm.sendSay("#face9#You'll get Psychic Points just by using psychokinesis abilities. I have to say, you have a very convenient power set, K.") + +sm.progressMessageFont(3, 20, 20, 0, "Collect Psychic Points to unleash your ultimate skill.") +sm.avatarOriented("UI/tutorial.img/kinesis/2") +sm.playExclSoundWithDownBGM("Voice3.img/Kinesis/guide_14", 100) +sm.sendDelay(2500) + +sm.sendNext("#face9#Your ultimate skill should be on your #g[END]#k key, if you haven't moved it. Go ahead and let loose with it... I reinforced the walls after last time.") + +sm.playSound("Sound/SoundEff.img/blackHeaven/metaldrop") +sm.spawnMob(2700300, 200, -238, False) +sm.spawnMob(2700300, 250, -238, False) +sm.spawnMob(2700300, 300, -238, False) +sm.spawnMob(2700300, 350, -238, False) +sm.spawnMob(2700300, 400, -238, False) +sm.spawnMob(2700300, 450, -238, False) +sm.spawnMob(2700300, 500, -238, False) +sm.setFuncKeyByScript(True, 142001002, 79) +sm.cameraSwitchNormal("pt_VP", 1000) +sm.sendDelay(1000) + +sm.sendNext("#face9#Ultimate: Metal Press#g [END]#k will crush everything in its path, including targets high above you.") +sm.unlockForIntro() + +while sm.hasMobsInField(): + sm.waitForMobDeath() +if sm.getQuestEx(22700, "kinetuto2").equals("0"): + sm.setQuestEx(22700, "kinetuto2", "1") + +sm.playSound("Party1/Clear") +sm.showFieldEffect("monsterPark/clear", 0) \ No newline at end of file diff --git a/scripts/quest/q22720e.py b/scripts/quest/q22720e.py new file mode 100755 index 0000000..ccff0e4 --- /dev/null +++ b/scripts/quest/q22720e.py @@ -0,0 +1,41 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor +KINESIS = 1531000 +YUNA = 1531002 + +sm.lockForIntro() +sm.setIntroBoxChat(YUNA) +sm.sendNext("#b#h0##k! You jerk, I've been waiting TWO DAYS for you to get back to me! Have you been fooling with Jay again?") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("He forgot to tell me until just now, and I came as soon as I could. You know I hate to keep you waiting.") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face1#...Like I haven't heard THAT before.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#(Her expression softens. Nice save.)#k") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("Well... You know, this wouldn't happen if you'd just show up for Student Council Meetings. I mean, you ARE the president! Give me the Meeting Minutes.") + +sm.playSound("Sound/SoundEff.img/PvP/80001740_Use") +sm.OnOffLayer_On(500, "0", 800, 0, 12, "Map/Effect2.img/kinesis/chaYuna", 5, 1, -1, 0) +sm.OnOffLayer_Move(300, "0", -800, 0) +sm.sendDelay(5000) + +sm.playSound("Sound/SoundEff.img/12thMS/jump_m") +sm.OnOffLayer_Off(500, "0", 0) +sm.OnOffLayer_Move(300, "0", 800, 0) +sm.sendDelay(1000) + +sm.consumeItem(4034601) +sm.completeQuest(parentID) +sm.giveExp(800) +sm.unlockForIntro() + + + + diff --git a/scripts/quest/q22720s.py b/scripts/quest/q22720s.py new file mode 100755 index 0000000..28da5fe --- /dev/null +++ b/scripts/quest/q22720s.py @@ -0,0 +1,56 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001130 +# Hideout :: HQ +KINESIS = 1531000 +JAY = 1531001 + +sm.lockForIntro() + +sm.setIntroBoxChat(JAY) +sm.sendNext("The system is running smoothly, and all the errors are cleared. I'll compile the data and then we can decide our next move.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("You sure you don't need to start upgrading again? I'm going to outpace your system before you know it.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("You keep saying that like you know anything about my rig. Nobody runs a better system than me. You stick to mind crushing and being pretty.") +sm.sendSay("...Which reminds me, are you EVER going to start covering your face when you do the superhero thing? It's the digital age, dude. Even my blender has a 15 megapixel camera.") + +selection = sm.sendNext("Seriously, are you going to cover your face?\r\n#b\r\n#L1#Eh. Too much trouble.#l\r\n#L2#I don't have time to suit up in an emergency.#l\r\n#L3#I'm too handsome, I can't deny the world this face.#l") +# TODO: find script all operations +if selection == 1 or selection == 2 or selection == 3: + sm.sendNext("...I figured you'd say that. You really don't take this serious enough.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("Fine. Give me your kitty mask. I was thinking about changing my name to Captain Fuzzums anyway.") + + sm.setIntroBoxChat(JAY) + sm.sendSay("How do you know about Captain... Dude, stop reading my fanfic! In fact, just stay away from all my stuff. No stuff for you!") + + sm.playSound("Sound/SoundEff.img/PvP/80001740_Use") + sm.OnOffLayer_On(500, "0", 800, 0, 12, "Map/Effect2.img/kinesis/chaJay", 5, 1, -1, 0) + sm.OnOffLayer_Move(300, "0", -800, 0) + sm.sendDelay(5000) + + sm.playSound("Sound/SoundEff.img/12thMS/jump_m") + sm.OnOffLayer_Off(500, "0", 0) + sm.OnOffLayer_Move(300, "0", 800, 0) + sm.sendDelay(1000) + + sm.startQuest(parentID) + sm.giveItem(4034601) + sm.sendNext("You're already in trouble with #bYuna#k, you know. She stopped by while you were gone and told me to give you this.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("Great, Student Council minutes. The highlight of my day.") + + sm.setIntroBoxChat(JAY) + sm.sendSay("That's what you get for being president, hotshot. Yuna's surely waiting for you at school. I can track her Rage Gauge as you make her wait, if you want.") + sm.sendSay("School is right there, dude. Go out and hang a right. Don't make her any angrier than she already is. It's not cute.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#b(Go outside and find Yuna.)#k") + sm.unlockForIntro() + + diff --git a/scripts/quest/q22721e.py b/scripts/quest/q22721e.py new file mode 100755 index 0000000..5524d8e --- /dev/null +++ b/scripts/quest/q22721e.py @@ -0,0 +1,74 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor +KINESIS = 1531000 +JAY = 1531001 +YUNA = 1531002 + +sm.lockForIntro() +sm.setIntroBoxChat(YUNA) +sm.sendNext("Did you get all of the signatures? Nice.") +sm.sendSay("#face3#Hey, #b#h0##k... Don't you think maybe you've done enough of the hero thing?") +sm.sendSay("#face3#I know helping people is a noble cause, but your duty is to be a student. And on top of that, you're the Student Council President. How do you think we all feel when you ditch us to go levitate trucks and tear up pavement?") + +selection = sm.sendNext("#face3#Well, #b#h0##k?\r\n#b#L1#Yuna, you worry too much. I can help you relax...#l\r\n#L2#Maybe you can tell me more about that last council meeting...#l") + +if selection == 2 or selection == 1:# TODO: sniff selection 1 + sm.setIntroBoxChat(KINESIS) + sm.sendNext("#face2#Is that a new ribbon? It's quite nice. You always look so good, but today you look-") + + sm.setIntroBoxChat(YUNA) + sm.sendSay("#face1#Are you ALWAYS going to change the topic when this comes up?") + sm.sendSay("#face1#Maybe you should save those lines for your little groupies! Especially if you're not going to take this seriously!") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("Hey. If I wasn't serious, I wouldn't be here. The only girl I'm worried about is the one right in front of me.") + + sm.setIntroBoxChat(YUNA) + sm.sendSay("#face1#Then enough with the lines and answer my question.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#face2#Sure, sure... What was it, again?") + + sm.setIntroBoxChat(YUNA) + sm.sendSay("#face1#YOU. ARE. INFURIATING.") + sm.sendSay("#face2# Look... All I'm saying is, don't go getting yourself killed playing hero. I know you think you've got everything on lockdown, but you can't be prepared for everything...") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#face2#Are you worried that I'm going to get hurt? Or are you worried that I'm going to get more fans?") + + sm.setIntroBoxChat(YUNA) + sm.sendSay("#face1#See? SEE? THIS is what I'm talking about! You don't LISTEN!") + + sm.setIntroBoxChat(JAY) + sm.sendSay("#face10##fs12#...You're so bad at this, yet she doesn't dump you. It's incredible.") + + sm.setIntroBoxChat(YUNA) + sm.sendSay("#face1#RRRRGH... Take this and GO. Just GO. I'm the Vice President, I don't deserve this kind of abuse.") + sm.sendSay("#face2##b...I keep feeling so anxious.#k") + + sm.setQuestEx(22700, "q21end", "1") + sm.completeQuest(parentID) + sm.giveExp(1200) + sm.sendDelay(1000) + + sm.setIntroBoxChat(JAY) + sm.sendNext("#face9#K, you're going to regret teasing Yuna so much.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#face2#I can't help it. It's too much fun.") + sm.sendSay("Hey, why aren't you here? You keep talking about wanting some field testing.") + + sm.setIntroBoxChat(JAY) + sm.sendSay("#face9#I'm not a fan of the sun, buddy. Plus, I like giving orders from on high.") + + sm.blind(1, 200, 0, 1300) + sm.sendDelay(1600) + + sm.sayMonologue("#fs20#\r\n\r\n#fEffect/BasicEff.img/QuestAlert/Default/0#\r\nClick the lightbulb on the left side of your screen to check the quests that have arrived remotely.", True) + + sm.blind(0, 0, 0, 1300) + sm.sendDelay(1600) + + sm.unlockForIntro() \ No newline at end of file diff --git a/scripts/quest/q22721s.py b/scripts/quest/q22721s.py new file mode 100755 index 0000000..69dcdb5 --- /dev/null +++ b/scripts/quest/q22721s.py @@ -0,0 +1,45 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor +KINESIS = 1531000 +JAY = 1531001 +YUNA = 1531002 + +sm.setIntroBoxChat(YUNA) +sm.sendNext("#face3##b#h0##k... You know your picture is all over the internet, right? You keep letting yourself get photographed!") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Why are you whispering? Speak up.") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face4#What if someone hears us? Ooh, we're trying so hard to keep this secret, and you're blowing it! What is your DEAL?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face9##fs12#Yeah, she's right! What IS your deal? Heh heh.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Relax. Only the three of us know the truth.") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("For now! But... Ugh, whatever. I need you to do something. I need 100 student signatures for the gymnasium renovation.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#I'm sure our lovely Vice President has already taken care of it?") + +sm.setIntroBoxChat(YUNA) +selection = sm.sendNext("I got 97 signatures. I need YOU to get the remaining 3, #b#h0##k.\r\n#b#L1#I guess I can do that.#l\r\n#L2#Ehh, sounds like too much work.#l") +if selection == 1: + sm.sendNext("Huh. Are you turning over a new leaf? I didn't think you'd agree so easily.") +elif selection == 2: + sm.sendNext("#face3#Sounds like someone wants their position vacated, then.") + +if sm.sendAskYesNo("Get three student signatures. That's it! You can do that, right?"): + sm.sendNext("I'll be waiting here.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#b(You should go find 3 student signatures somewhere in the school.)#k") + + sm.startQuest(parentID) +else: + sm.sendSayOkay("#b#h0##k, I'm staying right here until you get those signatures.") \ No newline at end of file diff --git a/scripts/quest/q22722s.py b/scripts/quest/q22722s.py new file mode 100755 index 0000000..4c4cd42 --- /dev/null +++ b/scripts/quest/q22722s.py @@ -0,0 +1,49 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor + +KINESIS = 1531000 +JIN = 1531061 + +sm.setSpeakerID(JIN) +sm.flipSpeaker() +sm.removeEscapeButton() +sm.sendNext("#b#h0##k, did you see the news? Kinesis rescued a kid.") + +sm.lockForIntro() +sm.sendDelay(1500) + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.OnOffLayer_On(1000, "0", 0, 0, 12, "Map/Effect2.img/kinesis/news1", 4, 0, -1, 0) +sm.sendDelay(1500) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("#b...Yeah, I like this feeling.#k") + +sm.sendDelay(1500) + +sm.OnOffLayer_Off(1500, "0", 0) +sm.sendDelay(1500) + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.unlockForIntro() +sm.setSpeakerID(JIN) +sm.flipSpeaker() +sm.removeEscapeButton() +sm.sendNext("What?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Hm? Oh, yeah. Here, I need you to sign this.") + +sm.progressMessageFont(3, 20, 20, 0, "That's one. Two to go.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(300) \ No newline at end of file diff --git a/scripts/quest/q22723s.py b/scripts/quest/q22723s.py new file mode 100755 index 0000000..4595415 --- /dev/null +++ b/scripts/quest/q22723s.py @@ -0,0 +1,57 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor + +KINESIS = 1531000 +YOUNG = 1531046 + +sm.setSpeakerID(YOUNG) +sm.flipSpeaker() +sm.removeEscapeButton() +sm.sendNext("Hey there, #b#h0##k! Did you see this picture in the paper? My dumb friend is convinced it's you. We've been arguing all morning.") + +sm.lockForIntro() +sm.sendDelay(1500) + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.OnOffLayer_On(1000, "1", 0, 0, 12, "Map/Effect2.img/kinesis/news2", 4, 0, -1, 0) +sm.sendDelay(1500) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("#b...Oh yeah, I remember that. Good one.#k") + +sm.sendDelay(1500) + +sm.OnOffLayer_Off(1500, "1", 0) +sm.sendDelay(1500) + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.unlockForIntro() + +sm.removeEscapeButton() + +sm.setSpeakerID(YOUNG) +sm.flipSpeaker() +sm.sendNext("What?") + +sm.setPlayerAsSpeaker() +sm.sendSay("What? I didn't say anything.") + +sm.setSpeakerID(YOUNG) +sm.flipSpeaker() +sm.sendSay("The really weird part is that they're saying this Kinesis person uses psyro... psino... mind powers to move things.") +sm.sendSay("That's just ridiculous, right? No one can do that, right #b#h0##k?") +sm.sendSay("Think about it. Here, I'll sign that thing for you.") + +sm.progressMessageFont(3, 20, 20, 0, "Two down, one to go.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(300) \ No newline at end of file diff --git a/scripts/quest/q22724s.py b/scripts/quest/q22724s.py new file mode 100755 index 0000000..3bfbce3 --- /dev/null +++ b/scripts/quest/q22724s.py @@ -0,0 +1,54 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor + +KINESIS = 1531000 +JOON = 1531047 + +sm.setSpeakerID(JOON) +sm.flipSpeaker() +sm.removeEscapeButton() +sm.sendNext("Oh, hi! Need me to sign something? Sure, anything for the Student Council President.") +sm.sendSay("Hey, I heard Kinesis caught a bank robber. Did you see the news?") + +sm.lockForIntro() +sm.sendDelay(1500) + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.OnOffLayer_On(1000, "2", 0, 0, 12, "Map/Effect2.img/kinesis/news3", 4, 0, -1, 0) +sm.sendDelay(1500) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("#b...Man, that picture came out great. I'll have to repost that.#k") + +sm.sendDelay(1500) + +sm.OnOffLayer_Off(1500, "2", 0) +sm.sendDelay(1500) + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.unlockForIntro() + +sm.removeEscapeButton() + +sm.setSpeakerID(JOON) +sm.flipSpeaker() +sm.sendNext("I got the inside story on their true identity, too. You ready for this?") +sm.sendSay("Kinesis is an alien from an exploded planet who crashed on Earth! They were adopted by humans who were killed by a criminal, so they vowed to spend their life fighting crime. While training they got struck by lightning, but then saved by a magic ring from outer space.") +sm.sendSay("I mean, it's really the only logical story once you narrow it down.") + +sm.setPlayerAsSpeaker() +sm.sendSay("...Comic books are destroying society.") + +sm.progressMessageFont(3, 20, 20, 0, "That's all of them. Time to get this list back to Yuna.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(300) \ No newline at end of file diff --git a/scripts/quest/q22725e.py b/scripts/quest/q22725e.py new file mode 100755 index 0000000..60ae972 --- /dev/null +++ b/scripts/quest/q22725e.py @@ -0,0 +1,65 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001000 +# Hideout :: HQ +KINESIS = 1531000 +JAY = 1531001 + +sm.setIntroBoxChat(JAY) +sm.sendNext("There you are. Wash your hands before you touch any of my stuff.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Give it a rest, you polish those things like twice a day. Tell me what you found.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face3#Ok. This is really cool.") + +sm.lockForIntro() +sm.changeBGM("Bgm43.img/Unknown Part Of City", 0, 0) +sm.blind(1, 200, 0, 1300) +sm.sendDelay(1600) + +sm.setIntroBoxChat(JAY) +sm.sendNext("I've been tracing someone online known only as WM. Their messages have been popping up on message boards all over.") +sm.sendSay("It was always a big block of text, maybe some kind of code. A few cryptos tried to decode it, but most people ignored it.") +sm.sendSay("But then we noticed that the timestamps on the posts lined up with the weird stuff happening in the city. Whenever WM posts, monsters show up.") +sm.sendSay("That kicked off this weird cult following, with people saying WM was a prophet...") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Ridiculous. Do people online believe anything?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("HEY. Hey. Some of us are smart enough to recognize the real meaning behind all this.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Does that mean you cracked WM's code, Jay?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("What else? I needed something to keep me awake this morning.") +sm.sendSay("My colleagues couldn't crack it because WM is using a local TV broadcast as part of his hash. The code itself was arranged like packet transfers, so I just set up a comparison array script and ran it against all broadcasts for an hour or so. Simple.") +sm.sendSay("It's almost like WM wanted it decrypted.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Do you think the police know?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("Seriously? The police here probably don't know videos have comment sections. I hacked their database anyway, and there's nothing in their cyber division.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("So... what does the code say?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("It describes exactly where and when the monsters will appear. Now, the most recent one says that the next attack... #bwill be at your school#k.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face4#...Really.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face0#That can't be a coincidence, K.") + +sm.blind(0, 0, 0, 1300) +sm.sendDelay(1600) + +sm.completeQuest(parentID) +sm.giveExp(700) +sm.unlockForIntro() \ No newline at end of file diff --git a/scripts/quest/q22725s.py b/scripts/quest/q22725s.py new file mode 100755 index 0000000..30cff96 --- /dev/null +++ b/scripts/quest/q22725s.py @@ -0,0 +1,27 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331002000 +# School for the Gifted :: First Floor Corridor +KINESIS = 1531000 +JAY = 1531001 + +sm.setNpcOverrideBoxChat(JAY) +sm.sendNext("#face9#Kinesis, you need to get back here as soon as you can. I've discovered something very interesting.") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("What is it? The last time you said that, it was a new torrent site for your Japanese cartoons.") + +sm.setNpcOverrideBoxChat(JAY) +sm.sendSay("#face9#It's called ANIME, you plebeian. And no, this is about the monsters you fought the other day.") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#face4#Talk to me, Jay. What did you find?") + +sm.setNpcOverrideBoxChat(JAY) +sm.sendSay("#face9#Dude, just come back here. I'm trying to be all dramatic.") +sm.sendSay("#face9#And pick up a tub of ice cream on the way. I'm out.") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#b(Return to the Hideout and talk to Jay.)#k") +sm.setQuestEx(22700, "q21end", "0") +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q22726s.py b/scripts/quest/q22726s.py new file mode 100755 index 0000000..f414a5a --- /dev/null +++ b/scripts/quest/q22726s.py @@ -0,0 +1,29 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 331001000 +# Hideout :: HQ +KINESIS = 1531000 +JAY = 1531001 + +sm.setIntroBoxChat(JAY) +sm.sendNext("#face1#My money is on this being a trap. I'd advise against you going.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("If I don't go, how am I supposed to stop the big bad dropping monsters on everyone?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("You could always come up with a plan instead of winging it and hoping for the best. What's it going to be?") + +selection = sm.sendNext("All signs point to the school, and soon. Are you going?\r\n#b#L1#Wing it and hope for the best. Time to go back to school.#l\r\n#b#L2#Tell me more of these 'plans'.#l") + +if (selection == 1): + if sm.sendAskYesNo("I don't even know why I ask. You've still got time to get over there and prepare. I'll back you up from here, of course."): + sm.sendNext("I've got the location pinpointed. Looks like a classroom... and it's still occupied.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#b(Go to the school and look for anything weirder than usual.)#k") + sm.setQuestEx(22700, "coNight", "1") + sm.startQuest(parentID) + else: + sm.sendSayOkay("R-really? Oh. Umm... okay. Didn't see that coming. Lemme get my graph paper...") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22728e.py b/scripts/quest/q22728e.py new file mode 100755 index 0000000..dea5c90 --- /dev/null +++ b/scripts/quest/q22728e.py @@ -0,0 +1,13 @@ +# Created by MechAviv +# Kinesis Introduction +KINESIS = 1531000 + +sm.lockForIntro() +sm.setIntroBoxChat(KINESIS) +sm.sendNext("Geez, they just don't quit!") +sm.sendSay("I'm not seeing anything dangerous here. I should move on.") + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.warp(331002500, 0) \ No newline at end of file diff --git a/scripts/quest/q22729e.py b/scripts/quest/q22729e.py new file mode 100755 index 0000000..c1ca805 --- /dev/null +++ b/scripts/quest/q22729e.py @@ -0,0 +1,89 @@ +# Created by MechAviv +# Kinesis Introduction +from net.swordie.ms.enums import TextEffectType + +KINESIS = 1531000 +JAY = 1531001 +NERO = 1531003 + +sm.setIntroBoxChat(JAY) +sm.sendNext("Welcome baWHAT IS THAT.") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face4#Meow!") + +sm.lockForIntro() +sm.changeBGM("Bgm38.img/LifeIsComedy", 0, 0) +sm.sendDelay(1500) + +sm.setIntroBoxChat(JAY) +sm.sendNext("Y-you brought a CAT in here?! A filthy, disgusting alley cat? It's going to get hair in my cooling fans! Or chew my cables! Or run off with my collector's edition models! Get it OUT of here!") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Aww, have a heart, Jay. Look at these little tiny paws. Nero here would be done for on the street. You want that on your conscience?") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face4#Meow! ") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#Here, touch the paws. Touch them.") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face5#Dude, get the heck away from me! Ugh... FINE. Do what you want. But if it pees on my servers, it's going through a window.") +sm.sendSay("#face5#Did you at least bring back something on the monsters? You know, the thing I ASKED FOR.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#Yeah, chill. It's right here.") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face6#...Covered in dust and grime, of course. Thanks for wiping it off before bringing it in here.") +sm.sendSay("#face8#You both just... stand over there. Away from me. Good. Let me work.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#Here Nero, come closer and look.") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face7##fs30#KINESIS!") + +sm.blind(1, 255, 0, 500) +sm.sendDelay(500) + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.createFieldTextEffect("#fn������� ExtraBold##fs18#The next day, at the hideout", 100, 2500, 4, 0, 0, 1, 4, TextEffectType.KinesisIntro, 0, 0) +sm.sendDelay(3000) + +# take 10 Twisted Dust Ball +sm.completeQuest(parentID) +sm.giveExp(750) +sm.unlockForIntro() +sm.setIntroBoxChat(NERO) +sm.sendSay("") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("") \ No newline at end of file diff --git a/scripts/quest/q22729s.py b/scripts/quest/q22729s.py new file mode 100755 index 0000000..6770277 --- /dev/null +++ b/scripts/quest/q22729s.py @@ -0,0 +1,50 @@ +# Created by MechAviv +# Kinesis Introduction +KINESIS = 1531000 +NERO = 1531003 + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("A cat? Here? Hey kitty, this place is dangerous. ") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face4#Meow.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Geez, you're still a kitten. ") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face5#Meow! ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("What are you so mad about? You're such a small kitty. Did you lose your mommy?") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face5#MEOW! ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Ha. Yeah, you've got some fight in you. You look lost, want to come with me? ") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face4#...Meow! ") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Good. Let's call you... Nero! How about Nero? ") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face4#..") + + +sm.sendSay("#face2#You like that? Of course you do. I came up with it.") + + +sm.sendSay("#face4#Meow... ") + +if sm.sendAskYesNo("#b(Take it with you? )#k"): + sm.sendNext("#b(Hurry back to Jay.)#k") + sm.setQuestEx(22700, "blackCat", "2") + sm.startQuest(parentID) + sm.setPartner(True, 1531003, 80001789, False) +else: + sm.sendSayOkay("#face4#Meow... ") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22730s.py b/scripts/quest/q22730s.py new file mode 100755 index 0000000..6062c80 --- /dev/null +++ b/scripts/quest/q22730s.py @@ -0,0 +1,82 @@ +# Created by MechAviv +# Kinesis Introduction + +KINESIS = 1531000 +JAY = 1531001 +NERO = 1531003 + +sm.setIntroBoxChat(JAY) +sm.sendNext("I analyzed those things you fought yesterday, but I can't figure them out. I want to say they're ghosts, but I mean, that's ridiculous. ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Whatever they are, I can take them. Don't worry about me. ") + +sm.setIntroBoxChat(JAY) +sm.sendNext("That confidence of yours will be your downfall. Also, get that cat away from my gear. It's been eyeing my mouse for the last hour, the mangy thing.") +sm.sendSay("Still, this might be a good time for confidence. I got another one of those codes. ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Good. Point me at them and let me loose.") + + +sm.setIntroBoxChat(JAY) +sm.sendSay("K, hold it. I want to ask you something first.") +sm.sendSay("#face0#I know you're hiding something. I lost the uplink with you for just a moment, but your Psy-Limiter showed a spike.") + +selection = sm.sendNext("#face0#What happened at the school?\r\n#b#L1#(Tell the truth about losing consciousness.)#l\r\n#L2#(Lie.)#l") + +if selection == 2 or selection == 1:# TODO: sniff selection 1 + sm.setIntroBoxChat(KINESIS) + sm.sendNext("No! ...It's nothing. Don't be so worried.") + + sm.setIntroBoxChat(JAY) + sm.sendSay("#face0#Really? You wouldn't keep secrets from your partner, would you? Partner?") + + +sm.lockForIntro() +sm.changeBGM("Bgm00.img/Silence", 0, 0) +sm.playSound("Sound/SoundEff.img/radionoise") +sm.playSound("Sound/Voice3.img/Kinesis/news_01") +sm.progressMessageFont(3, 20, 20, 0, "We have breaking reports of a situation at Seoul's Hannam subway station.") +sm.sendDelay(3500) + +sm.progressMessageFont(3, 20, 20, 0, "An unknown assailant has been attacking people at random in the area. ") +sm.sendDelay(3500) + +sm.progressMessageFont(3, 20, 20, 0, "Citizens are advised to avoid the station.") +sm.sendDelay(2000) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("#face0##fs30#!!") + +sm.changeBGM("Bgm40.img/SecretMission", 0, 0) +sm.playSound("Sound/Voice3.img/Kinesis/news_02") +sm.progressMessageFont(3, 20, 20, 0, "Again, the authorities are requesting that all citizens stay away") +sm.sendDelay(1500) + +sm.progressMessageFont(3, 20, 20, 0, "from the Hannam station until this matter is resolved. ") +sm.sendDelay(1500) + +sm.playSound("Sound/SoundEff.img/radionoise") +sm.progressMessageFont(3, 20, 20, 0, "Do not leave your homes.") +sm.sendDelay(3000) + +sm.unlockForIntro() + +sm.setIntroBoxChat(JAY) +selection = sm.sendNext("#face1#...Kinesis, this is serious. I don't want you out there.\r\n#b#L1#I have to save those people!#l\r\n#L2#I want to know more about my abilities.#l\r\n#L3#I just want to enjoy this power while I have it.#l") + +if selection == 1 or selection == 2 or selection == 3:# sniff selection 2 and 3 + # increase ambition by 100 + sm.setIntroBoxChat(KINESIS) + sm.sendNext("Didn't you hear? The monsters are attacking innocents now. I have to do something.") + + sm.setIntroBoxChat(JAY) + sm.sendSay("#face0#...Why do I even bother? Get going. I'll be with you on comms.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#b(Hurry to the subway.)#k") + + sm.setQuestEx(22700, "blackCat", "0") + sm.setQuestEx(22700, "coNight", "0") + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q22734s.py b/scripts/quest/q22734s.py new file mode 100755 index 0000000..a53b62f --- /dev/null +++ b/scripts/quest/q22734s.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Kinesis Introduction +sm.warp(331005110, 0) + +sm.lockForIntro() \ No newline at end of file diff --git a/scripts/quest/q22740s.py b/scripts/quest/q22740s.py new file mode 100755 index 0000000..1507e22 --- /dev/null +++ b/scripts/quest/q22740s.py @@ -0,0 +1,143 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +NERO_NPC = 1531010 +THREE_MOON = 1531004 + +sm.lockForIntro() +sm.removeAdditionalEffect() +sm.blind(1, 255, 0, 500) +sm.sendDealy(500) + +sm.zoomCamera(0, 2000, 0, -144, 50) + +sm.teleportInField(-253, 19) +sm.forcedFlip(False) +sm.blind(1, 255, 0, 0) +sm.sendDealy(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDealy(1400) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("Where am I? Who are you?") + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("I am the third child of the moon, hero of another world.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("That... you... what?") + + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("Steady yourself. You are yet unharmed.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face0##r#fs25#...A talking dog?!") + + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("......") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#Oh, wait, wolf. Sorry.") +sm.sendSay("What is this place? I thought I was on the subway. Am I dreaming all this?") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face4#Nope! Welcome to Maple World!") + +sm.spawnNpc(NERO_NPC, -45, 0) +sm.showNpcSpecialActionByTemplateId(NERO_NPC, "summon") +sm.moveNpcByTemplateId(NERO_NPC, True, 80, 100) +sm.sendDelay(500) + +sm.setIntroBoxChat(NERO) +sm.sendNext("#face4#Er, it's pretty different from your world. We better get you adjusted quick.") +sm.sendSay("#face4#Here, watch this.") + +sm.sendDealy(500) + +sm.showEffect("Effect/BasicEff.img/pang", 0, -145, 50, 0, 0, True, 0) +sm.playSound("Kite/Crown") +sm.removeNpc(NERO_NPC) + +sm.spawnNpc(NERO, -145, 0) +sm.showNpcSpecialActionByTemplateId(NERO, "summon") +sm.sendDealy(500) + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#Did you see that? That was magic.") +sm.sendSay("#face0#Pretty sure you don't have that in your world! Heh.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("So I'm not dreaming...") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#Again, nope! Lemme officially introduce myself. I am #bNella Medionel Roonia.") +sm.sendSay("#face0#In our ancient tongue, it means half-child of the sacred moonlight. See, I'm from a real big-deal magician family...") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2##fs20#What on Earth are you talking about, Nero?") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face2#Hey hey hey HEY! I'm not Nero!") + +sm.sendDealy(1000) + +sm.playSound("Sound/SoundEff.img/PvP/80001740_Use") +sm.OnOffLayer_On(500, "0", 800, -120, 12, "Map/Effect2.img/kinesis/chaNero", 5, 1, -1, 0) +sm.OnOffLayer_Move(300, "0", -800, 0) +sm.sendDealy(5000) + +sm.playSound("Sound/SoundEff.img/12thMS/jump_m") +sm.OnOffLayer_Off(500, "0", 0) +sm.OnOffLayer_Move(300, "0", 800, 0) +sm.sendDealy(1000) + + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("Cute. Look, Nero, I need to know where I am and how to get back.") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#HEY. We saved you. So shut your facehole and listen for a minute!") + +sm.sendDealy(500) + +sm.setIntroBoxChat(NERO) +sm.sendNext("#face0#Do you remember what happened with the #bwhite-haired man#k?") +sm.sendSay("#face0#I should have followed you... stopped you, maybe... It was my fault. I thought being near you would allow me to tail you easily. But I wasn't able to keep up.") +sm.sendSay("#face0#Regardless, you're here now. And we need to keep you here.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Hey, Nero? I have no idea what you're talking about.") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#Fine, FINE! My teacher, #bGrendel the Really Old#k, is on his way. He's old and smart-looking, so maybe you'll listen to him. Just sit tight.") + +sm.sendDealy(500) + +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + +sm.moveCamera(True, 0, 0, 0) +sm.sendDealy(300) + +sm.removeOverlapScreen(1000) +sm.removeNpc(NERO) +sm.unlockForIntro() +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(3000) \ No newline at end of file diff --git a/scripts/quest/q22741e.py b/scripts/quest/q22741e.py new file mode 100755 index 0000000..dd8bc3d --- /dev/null +++ b/scripts/quest/q22741e.py @@ -0,0 +1,31 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(THREE_MOON) +sm.sendNext("So, our meal has been secured. Was the struggle great?") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Nero, can you translate for me? I'm not following Wolfshirt here at all.") + + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("Breaking the shell of an egg is a simple matter. It requires only the use of force in the right place.") +sm.sendSay("But you, you hold a far greater power, contained within its own egg.") +sm.sendSay("You must keep this power contained, lest it break free of its own shell, and shatter the shell of the world itself.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("...What does that even mean?") + + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("Perhaps one day, you will know.") + +sm.completeQuest(parentID) +# take 10 Bird Egg +sm.giveExp(5400) \ No newline at end of file diff --git a/scripts/quest/q22741s.py b/scripts/quest/q22741s.py new file mode 100755 index 0000000..ce5d508 --- /dev/null +++ b/scripts/quest/q22741s.py @@ -0,0 +1,34 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("So I'll only get a proper explanation from this Grendel guy, right? Wouldn't it be faster if I went to him? ") + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("Waiting is the path to training your soul. I sense you are unhappy doing so.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("...? ") + + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("The hour of supper approaches, and finds us unprepared. I shall attend to our feast, and hope that you would do the same.") + + +sm.setIntroBoxChat(NERO) +if sm.sendAskYesNo("#face0##ho#, Grendel the Really Old will be here soon. We've got time to gather some #beggs#k, so let's do that. Hunting #bsparrows#k will get you what we need."): + sm.setIntroBoxChat(KINESIS) + sm.sendNext("Hunt? Now that I can do. It'll be nice to see what's around here, too. By all means, lead the way.") + + sm.setIntroBoxChat(NERO) + sm.sendSay("#face1#We can leave to the #bright#k. Boy, I love eggs! Especially if Three Moon is cooking ") + sm.startQuest(parentID) +else: + sm.sendSayOkay("#face0#There's not much to do before Grendel the Really Old gets here. And some eggs would be super nice right now...") + + diff --git a/scripts/quest/q22742e.py b/scripts/quest/q22742e.py new file mode 100755 index 0000000..7edaa74 --- /dev/null +++ b/scripts/quest/q22742e.py @@ -0,0 +1,12 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +THREE_MOON = 1531004 + +sm.setIntroBoxChat(THREE_MOON) +sm.sendNext("You have done well this day.") + +sm.completeQuest(parentID) +sm.giveExp(5700) +#todo take 15 Firewoods \ No newline at end of file diff --git a/scripts/quest/q22742s.py b/scripts/quest/q22742s.py new file mode 100755 index 0000000..bb3c10c --- /dev/null +++ b/scripts/quest/q22742s.py @@ -0,0 +1,37 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(NERO) +sm.sendNext("#face1#10 eggs! That's alla them. Good job.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("So we done here, Nero?") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face2##fs25##rI told you, my name is not Nero!") +sm.sendSay("#face3#...Oh, whatever. Call me what you want. Grendel the Really Old is taking his sweet time, so we should get some firewood for cooking.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Firewood? You're not asking me to chop wood, are you?") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#As much as I'd like to see that, no. We're gonna hunt monsters. So, uh, chopping monsters instead of wood!") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("More fighting? Really? Geez, do you people beat up monsters for everything you need?") + +sm.setIntroBoxChat(NERO) +if sm.sendAskYesNo("#face0#Yup! Go hunt the #bAxe Stumps#k to collect 15 pieces of Firewood.\r\nAnd then take them to #bThree Moon#k."): + sm.sendNext("#face1#Let's head to the right. Oh boy, I can't WAIT to get my face into those eggies! There are plenty of #bAxe Stumps#k at #bWhere the Sun Rises and Where the Forest Sings#k.") + sm.startQuest(parentID) +else: + sm.sendSayOkay("#face2#Rawr! No work, no grub!") \ No newline at end of file diff --git a/scripts/quest/q22743e.py b/scripts/quest/q22743e.py new file mode 100755 index 0000000..3b2166f --- /dev/null +++ b/scripts/quest/q22743e.py @@ -0,0 +1,51 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101030000 +# East Forest :: Giant Tree +KINESIS = 1531000 +FANZY = 1040002 +sm.setNpcOverrideBoxChat(FANZY) +sm.sendNext("Meow. Huh? Who are you?") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#face2#Man... I never thought talking cats would be the norm for me.") + +sm.setNpcOverrideBoxChat(FANZY) +sm.sendSay("(Sniff sniff) This smell... You are not #ba human from this world#k!") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#face3#Hey, don't go smelling new people without asking. Now, where is Grendel the Really Old?") + +sm.setNpcOverrideBoxChat(FANZY) +sm.sendSay("Grendel the Really Old... is no more.") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#face4#Wait, what? What happened? How...") + +sm.setNpcOverrideBoxChat(FANZY) +sm.sendSay("Wait, wait, wait! HERE no more. He's not HERE no more. He just returned to the Magician Association!") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#face2#Oh, geez... Don't scare me like that, cat. I guess I just missed him.") + +sm.setNpcOverrideBoxChat(FANZY) +sm.sendSay("Hold up a moment, chief! I need your help. There's a student named #bCootie#k in our association. He wandered off into the woods and never came back. I'm worried about the little squirt...") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#face4#Wait, wait, wait... I'm sorry about Creepy or whatever his name is, but I just need to get back to my world.") + +sm.setNpcOverrideBoxChat(FANZY) +sm.sendSay("Sigh... You're right. I don't know why I thought an outsider would help.") +sm.sendSay("By the way, what is WITH your clothes? I feel embarrassed for you. Here, would you like to use this? Someone left it in a ditch, but it's still an improvement.\r\n\r\n#b#i1082020# #t1082020#") + +sm.giveItem(1082020) +sm.completeQuest(parentID) +sm.giveExp(4100) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("#face2#Actually, this looks pretty useful. Thanks, I guess.") + +sm.setNpcOverrideBoxChat(FANZY) +sm.sendSay("Hmph, don't mention it. Just hurry on back to wherever you're from.") + +sm.warp(101020400, 0) \ No newline at end of file diff --git a/scripts/quest/q22743s.py b/scripts/quest/q22743s.py new file mode 100755 index 0000000..f31a2cd --- /dev/null +++ b/scripts/quest/q22743s.py @@ -0,0 +1,40 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(THREE_MOON) +sm.sendNext("Our meal has come to be.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Please tell me that means we can eat it.") + + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("Controlling your cravings is yet another key to disciplining your mind. Focus less on your hunger, and more on the power it masks.") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face1#OMNOMNOMNOM") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#......") + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("Grendel the Really Old remains absent. Perhaps you and the child should locate him.") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face1#OMNOMNOMNOM") + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("...Perhaps you should locate him. I fear our youthful friend may be, ah, otherwise occupied.") + +if sm.sendAskYesNo("Make your way to the #bGiant Tree#k and speak with #bFanzy#k. Surely the feline knows of Grendel's whereabouts."): + sm.sendNext("Remember, it is at the #bGiant Tree#k that you will find #bFanzy#k the cat.") + sm.startQuest(parentID) +else: + sm.sendSayOkay("...") \ No newline at end of file diff --git a/scripts/quest/q22744s.py b/scripts/quest/q22744s.py new file mode 100755 index 0000000..300f6a2 --- /dev/null +++ b/scripts/quest/q22744s.py @@ -0,0 +1,103 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association + +selections = ["#L1#What is the Magician Association?#l", "#L2#Why did you bring me here?#l", "#L3#What do you know about my powers?#l", "#L4#Who is the White Mage and what does he want?#l", "#L5#How bad is the damage from the sinkhole?#l", "#L6#Are Yuna and Jay safe?#l", "#L7#I have nothing else to ask about.#l"] +def removeSelText(sel): + for i in range(len(selections)): + label = "#L" + str(sel) + "#" + if label in selections: + selections.remove(selections[i]) + +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 +OLD_MAN = 1531012 + +sm.setIntroBoxChat(OLD_MAN) +sm.sendNext("You must be Kinesis. I am Grendel the Really Old, president of the Magician Association.") + + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#Oh man, thank goodness. Maybe you can help me get all this straight...") + + +sm.setIntroBoxChat(OLD_MAN) +sm.sendSay("I imagine so. I just came from that enormous sinkhole you were in.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face0#Wait, what? Sinkhole? So... I wasn't imagining that?") + +sm.setIntroBoxChat(OLD_MAN) +sm.sendSay("Indeed. I will be completely honest with you. The White Mage of your world used your powers to create a sinkhole in your city.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face0#...!!") + +sm.setIntroBoxChat(OLD_MAN) +sm.sendSay("By the stunned look on your face, I assume you have many questions. I will answer them as best I can.") + + + +while len(selections) != 0: + text = "What else are you curious about?\r\n#b\r\n" + for i in range(len(selections)): + text += selections[i] + "\r\n" + + selection = sm.sendNext(text) + if selection == 1: + sm.setIntroBoxChat(OLD_MAN) + sm.sendNext("Hundreds of years ago, the magicians of Maple World learned a hard lesson when the evil Black Mage ravaged our lands. Knowledge of magic must be shared and preserved if we are to survive the many threats to our world.") + sm.setIntroBoxChat(KINESIS) + sm.sendSay("#b(Black Mage? Sounds even more evil than the White Mage. Wonder if they're related?)") + sm.setIntroBoxChat(OLD_MAN) + sm.sendSay("Therefore, the magicians of Maple World came together to create an organization where their research can be shared with all. That organization is the Magician Association.") + sm.sendSay("I have many apprentices, and the child you call Nero is one of them.") + sm.sendSay("Once we became aware of your world, we sent magicians to keep tabs on it. Nero was chosen to watch over your city.") + sm.setIntroBoxChat(NERO) + sm.sendSay("#face2#Uh, sir? You just called me Nero... ") + removeSelText(selection) + elif selection == 2: + sm.setIntroBoxChat(OLD_MAN) + sm.sendNext("We had no choice. As long as you remained in the sinkhole, it would have continued to grow. We're all lucky we pulled you out when we did.") + sm.sendSay("It took the combined powers of all the Association summoners to get you here, but we managed. The sinkhole ceased its expansion the moment you arrived in Maple World.") + sm.sendSay("Once you can control your powers completely, it will be safe for you to return. Until then, I'm afraid you must stay here. For your safety, and the safety of your friends.") + removeSelText(selection) + elif selection == 3: + sm.setIntroBoxChat(OLD_MAN) + sm.sendNext("In truth, we are just as curious about your powers as you are. Your psychokinesis is extremely rare here, despite how common magic is.") + sm.sendSay("Even stranger is how you could have developed this ability when your world seems to lack even the most basic magic. Strange indeed...") + sm.sendSay("But whatever the case, we know one thing for sure. The White Mage can seize control of your powers, and push them to untold heights.") + sm.sendSay("That part we can help you with. Nero was the one who helped you control yourself after you lost consciousness at the school.") + sm.setIntroBoxChat(NERO) + sm.sendSay("#face0#Hee hee. I specialize in Restraining Magic. You can call me Nella Medionel Roonia, Paragon of Restraint!") + removeSelText(selection) + elif selection == 4: + sm.setIntroBoxChat(OLD_MAN) + sm.sendNext("You will come to learn of this in your travels, but our White Mage is someone who did the unthinkable here in Maple World several hundred years ago.") + sm.sendSay("Your world and Maple World are somehow related. Something that happens here will be mirrored in your world, though a little differently.") + sm.sendSay("If your White Mage is taking such drastic action, you may be facing a threat similar to the one that forever changed Maple World.") + removeSelText(selection) + elif selection == 5: + sm.setIntroBoxChat(OLD_MAN) + sm.sendNext("I think it best not to dwell on that right now. You will see the extent for yourself once you are ready. I will say that the damage will take time to recover from.") + sm.sendSay("However, the laws of physics no longer apply around the sinkhole, making it impossible to address the damage.") + sm.sendSay("Thousands of people are missing, but no details are known. It's too early to jump to any conclusions.") + sm.sendSay("You should train to return to your world swiftly, but please, do not blame yourself. If anything we are to blame, for not stopping the White Mage in time.") + removeSelText(selection) + elif selection == 6: + sm.setIntroBoxChat(OLD_MAN) + sm.sendNext("They are all safe. The sinkhole did not reach your residences.") + sm.sendSay("They are, however, very concerned for your safety.") + elif selection == 7: + sm.setIntroBoxChat(OLD_MAN) + sm.sendNext("I wish that I could send you back immediately, but the risk is simply too great.") + sm.sendSay("Unless you have complete mastery of your powers, the sinkhole will draw from them and continue to expand.") + sm.sendSay("Stay here and train. That is the best thing you can do for yourself right now.") + sm.sendSay("This isn't much, but you should take it. Your shoes won't last long in this world, I think. They don't look appropriate for the sand and mud and rocks.\r\n\r\n#b#i1072019# #t1072019#") + sm.giveItem(1072019) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.giveExp(4700) + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q22745e.py b/scripts/quest/q22745e.py new file mode 100755 index 0000000..bc7fa2e --- /dev/null +++ b/scripts/quest/q22745e.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(THREE_MOON) +sm.sendNext("I can sense new powers blossoming within you. The first step of the journey is taken.") +sm.sendSay("Let me ask you this, #h0#, now that you have grown.") + +selection = sm.sendNext("What is it that makes one more powerful?\r\n" + + "#b\r\n" + + "#L1#Natural Ability#l\r\n" + + "#L2#Careful Planning#l\r\n" + + "#L3#Hard Work#l") +if selection == 1:#TODO: SNIFF the others + sm.setIntroBoxChat(KINESIS) + sm.sendNext("It has to be natural ability, right? I would never have made it this far without my psychokinesis.") + + sm.setIntroBoxChat(THREE_MOON) + sm.sendSay("Is that truly your belief?") + sm.sendSay("No correct answer exists for this question. What you feel is the correct answer would be your own correct answer.") + sm.sendSay("Your next step is to decide on the path of training, for there are many. We shall meet again when you grow stronger still.") + + sm.setIntroBoxChat(KINESIS) + sm.sendSay("Thanks, wolf dude.") + sm.sendSay("#face2#And sorry I called you a dog when I first met you!") + + sm.setIntroBoxChat(THREE_MOON) + sm.sendSay("......") + sm.completeQuest(parentID) + sm.giveExp(12500) \ No newline at end of file diff --git a/scripts/quest/q22745s.py b/scripts/quest/q22745s.py new file mode 100755 index 0000000..e0d008c --- /dev/null +++ b/scripts/quest/q22745s.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(THREE_MOON) +sm.sendNext("The tighter you grasp the water, the faster it will flow through your fingers.") +sm.sendSay("Hold not with your hands what you can hold in a vessel. ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Are you telling me to... get a cup? Are you thirsty?") + +sm.setIntroBoxChat(NERO) +if sm.sendAskYesNo("#face0#He's saying you need to train your body! I'll fill you in on the details! "): + sm.setIntroBoxChat(THREE_MOON) + sm.sendNext("Go. Speak with the one you call Nero.\r\n\r\n#b(Train in this area until you reach level 30.)") + sm.startQuest(parentID) +else: + sm.setIntroBoxChat(THREE_MOON) + sm.sendSayOkay("You will not leave this place without training.") + + diff --git a/scripts/quest/q22746e.py b/scripts/quest/q22746e.py new file mode 100755 index 0000000..d49182c --- /dev/null +++ b/scripts/quest/q22746e.py @@ -0,0 +1,15 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setNpcOverrideBoxChat(NERO) +sm.sendNext("#face1#OH! Good job. Lemme at those Evil Eye tails. I bet Three Moon can make something delicious with these. Hee hee.\r\n\r\n#b#i2010044# #t2010044#") +sm +sm.giveItem(2010044, 30) +sm.completeQuest(parentID) +sm.giveExp(10500) +#Take 10 evil eyes diff --git a/scripts/quest/q22746s.py b/scripts/quest/q22746s.py new file mode 100755 index 0000000..c56d96a --- /dev/null +++ b/scripts/quest/q22746s.py @@ -0,0 +1,27 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(NERO) +sm.sendNext("#face0#Okay, now it's my turn! I'll whip you into shape! Get ready for the hardest training of your LIFE!") +sm.sendSay("#face0#First, hunt #bEvil Eyes#k!") +sm.sendSay("#face1##bEvil Eyes#k might look all weird and creepy, but they're actually SUPER tasty!") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Kid, are you sending me to get you lunch? What kind of training is that?") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#NO. And I'm not a kid! I'm your trainer, and this is SERIOUS training! ") + +sm.setIntroBoxChat(NERO) +if sm.sendAskYesNo("#face0#So! Go hunt #b50 Evil Eyes#k and collect #b10 Evil Eye Tails#k. Are you ready?"): + sm.startQuest(parentID) + sm.sendNext("#face0##bWhere Trees Dance#k has lots of #bEvil Eyes#k. Head #bright#k to hunt them. ") +else: + sm.sendSayOkay("#face2#Rawr! If a man will not work, he shall not eat!") + + diff --git a/scripts/quest/q22747e.py b/scripts/quest/q22747e.py new file mode 100755 index 0000000..a5b206b --- /dev/null +++ b/scripts/quest/q22747e.py @@ -0,0 +1,12 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setNpcOverrideBoxChat(NERO) +sm.sendNext("#face1#Good job! See, you're getting faster every time.") +sm.completeQuest(parentID) +sm.giveExp(11500) diff --git a/scripts/quest/q22747s.py b/scripts/quest/q22747s.py new file mode 100755 index 0000000..8710b1a --- /dev/null +++ b/scripts/quest/q22747s.py @@ -0,0 +1,28 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setNpcOverrideBoxChat(NERO) +sm.sendNext("#face0#Now it's time to hunt #bCurse Eyes#k! ") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("And I suppose you want #bCurse Eye#k tails too? ") + +sm.setNpcOverrideBoxChat(NERO) +sm.sendSay("#face0#What? No! No way, ick! Curse Eyes are sour and salty. Just whack a bunch of them. ") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("Ah-HA! So I AM grocery shopping for you!") + +sm.setNpcOverrideBoxChat(NERO) +if sm.sendAskYesNo("#face1#Don't get smart with me! This is SERIOUS training for SERIOUS people! So get SERIOUS and hunt down #b50#k #bCurse Eyes#k. SERIOUSLY!"): + sm.startQuest(parentID) + sm.sendNext("#face0#Curse Eyes are found #bWhere the Soil Sleeps#k.") +else: + sm.sendSayOkay("#face2#You really need to train more, like right now! Think this through!") + + diff --git a/scripts/quest/q22748e.py b/scripts/quest/q22748e.py new file mode 100755 index 0000000..9d77a58 --- /dev/null +++ b/scripts/quest/q22748e.py @@ -0,0 +1,16 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setNpcOverrideBoxChat(NERO) +sm.sendNext("#face1#Do you have them all? Gimme, gimme.") +sm.sendSay("#face1#Woo! Cold Eye tails! Three Moon will make some awesome soup from this.\r\n\r\n#b#i2010045# #t2010045#") +sm.giveItem(2010045, 10) +sm.completeQuest(parentID) +sm.giveExp(12500) +#take 10 cold eye tails +sm.sendSayOkay("#face0#You're getting there, Kinesis. Once you get to #bLevel 30#k I can send you back to Three Moon.") \ No newline at end of file diff --git a/scripts/quest/q22748s.py b/scripts/quest/q22748s.py new file mode 100755 index 0000000..684537d --- /dev/null +++ b/scripts/quest/q22748s.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setNpcOverrideBoxChat(NERO) +sm.sendNext("#face0#Okay, I've got one more for you. You're going after #bCold Eyes#k this time! Hunt #b50 Cold Eyes#k and bring back #b10#k tails.") + +sm.setNpcOverrideBoxChat(KINESIS) +sm.sendSay("#face2#I guess #bCold Eye#k tails are pretty good, then?") + +sm.setNpcOverrideBoxChat(NERO) +sm.sendSay("#face0#Not really. #bCold Eye#k tail is more like comfort food. A bit bitter, but in a refreshing way. A lot of us ate Cold Eye Noodle Soup when we were little!") + +sm.setNpcOverrideBoxChat(NERO) +if sm.sendAskYesNo("#face0#That's beside the point, though. Go hunt down #b50#k #bCold Eyes#k. "): + sm.startQuest(parentID) + sm.sendNext("#face0#Go to #bWhere the Sky Smiles#k to find the Cold Eyes. ") +else: + sm.sendSayOkay("#face2#You really need to train more, like right now! Think this through!") + + diff --git a/scripts/quest/q22749s.py b/scripts/quest/q22749s.py new file mode 100755 index 0000000..2e615ce --- /dev/null +++ b/scripts/quest/q22749s.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +NERO = 1531003 +OLD_MAN = 1531012 +sm.setIntroBoxChat(OLD_MAN) +sm.sendNext("Did Three Moon give you his approval yet?") +sm.sendSay("Looks like you have much better control over your powers now. I think it is safe for you to return to the #bsinkhole#k now.") +sm.lockForIntro() +sm.removeAdditionalEffect() +sm.sendNext("I will open a doorway back for you. This is different from the #bsinkhole#k, and is far #bsafer#k.") + +sm.sendDelay(500) +sm.startQuest(22751) +sm.completeQuest(22751) +sm.sendDelay(500) + +sm.unlockForIntro() +sm.sendNext("Our Magician Association will continue to watch the #bWhite Mage#k and the #bsinkhole#k from Maple World. #bNero#k will be our point of contact.") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face2#So my name is going to be just Nero from now on?") + +sm.setIntroBoxChat(OLD_MAN) +sm.sendSay("I am needed elsewhere. Before I go, let me teach you how to move between worlds yourself. I think this knowledge will serve us all well.\r\n#b(You can now teleport to your hideout when you use your return skill.)#k") +sm.sendSay("And take this, to commemorate your visit to a new world.\r\n\r\n#b#i3015244# #t3015244#") + +sm.giveItem(3015244) +sm.giveSkill(140001290, 1, 1) +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(5500) \ No newline at end of file diff --git a/scripts/quest/q22750s.py b/scripts/quest/q22750s.py new file mode 100755 index 0000000..7946a3a --- /dev/null +++ b/scripts/quest/q22750s.py @@ -0,0 +1,101 @@ +KINESIS = 1531000 +JAY = 1531000 +YUNA = 1531002 +NERO = 1531003 + +sm.lockForIntro() +sm.removeAdditionalEffect() +sm.blind(1, 255, 0, 0) + +sm.spawnNpc(YUNA, 760, -272) +sm.showNpcSpecialActionByTemplateId(YUNA, "summon") + +sm.spawnNpc(NERO, 600, -272) +sm.showNpcSpecialActionByTemplateId(NERO, "summon") + +sm.teleportInField(647, -272) +sm.forcedFlip(False) +sm.zoomCamera(0, 2000, 0, 700, -200) + +sm.blind(1, 255, 0, 0) +sm.sendDelay(1200) + +sm.blind(0, 0, 0, 1000) +sm.sendDelay(1400) + +sm.setIntroBoxChat(KINESIS) +sm.sendNext("Did you cry, Yuna?") + +sm.showNpcSpecialActionByTemplateId(YUNA, "angry", -1) +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face0#No, you dummy! I didn't cry.") + +sm.stopNpcSpecialActionByTemplateId(YUNA) +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face2#You can hug me if you like. We can make it a touching reunion.") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face0#You jerk! You have no idea...") +sm.sendSay("#face4#Ahh, nevermind. So... What's with the clothes? You look like a wizard from some video game.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face3#It's a long story. What do you think? I can pull it off, right?") + +sm.sendDelay(500) +sm.zoomCamera(500, 2000, 500, 800, -200) +sm.sendDelay(sm.getAnswerVal()) + + +sm.setIntroBoxChat(JAY) +sm.sendSay("I knew you'd be fine. ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Wow, Jay. Can't even pretend to be happy to see me?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face2#I mean, I knew something was up because your signal kept coming from the sinkhole, but your vitals were all over the place. Strange, but I'm used to that with you. So, what happened? And who's the kid?") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face1#Oh yeah, who IS that kid?") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Jay, you're a sharp cookie. I bet you already figured out what happened to me. As for the kid, this is Nero the cat.") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#Ahem! I am #bNella Medionel Roonia#k. In our ancient tongue, it means half-child of the sacred moonlight. See, I'm from a real big-deal magician family...") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("You can call her Nero.") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face2#Mrrrow!") + +sm.setIntroBoxChat(JAY) +sm.sendSay(" #face1#Oo-kaaay...") + +sm.setIntroBoxChat(YUNA) +sm.sendSay(" #face4#Wait, so... that kid is the black cat? The black cat is this kid?") + +sm.setIntroBoxChat(NERO) +sm.sendSay(" #face2#Correct! ") + +sm.setIntroBoxChat(YUNA) +sm.sendSay(" #face4#") + +sm.setIntroBoxChat(JAY) +sm.sendSay(" #face6#") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay(" #face2#Okay, so... There's a lot to go over, so let's continue this over some food. Preferably something that's not Cold Eye Tail Spicy Soup.") + +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) + +sm.removeOverlapScreen(1000) +sm.unlockForIntro() +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(3000) +sm.removeNpc(YUNA) +sm.removeNpc(NERO) \ No newline at end of file diff --git a/scripts/quest/q22770s.py b/scripts/quest/q22770s.py new file mode 100755 index 0000000..023ef40 --- /dev/null +++ b/scripts/quest/q22770s.py @@ -0,0 +1,17 @@ +JAY = 1531001 + +sm.setSpeakerID(JAY) +sm.sendNext("I knew you could handle that, K.") +sm.sendSay("By the way, you look like garbage. It's a new look for you.") +sm.sendSay("I bet your power level rose since I saw you last. I can't WAIT to chart you.") + +if sm.sendAskYesNo("You wanna go ahead and update your data? Say yes.\r\n\r\n#b(Accept for 2nd Job Advancement.)#k\r\n\r\n#b#i1142864# #t1142864#\r\n#b#i1353201# #t1353201#"): + sm.giveItem(1353201) + sm.giveItem(1142864) + sm.setJob(14210) + sm.addSP(4, True) + sm.completeQuest(parentID) + sm.giveExp(8000) + sm.sendSayOkay("Boom. Upgrade complete. Why not try out the goods?") +else: + sm.sendSayOkay("Fine, I'll be here all day. My guild is raiding tonight.") \ No newline at end of file diff --git a/scripts/quest/q22780e.py b/scripts/quest/q22780e.py new file mode 100755 index 0000000..05996d8 --- /dev/null +++ b/scripts/quest/q22780e.py @@ -0,0 +1,22 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(THREE_MOON) +sm.sendNext("#bYour missing people#k, hmm?") + + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0#Whatcha think? Can we find them?") + + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("Locations with the greatest mana disruptions should yield what you seek.") +sm.sendSay("Allow me to review the reports I have received...") + +sm.completeQuest(parentID) +sm.giveExp(1200) \ No newline at end of file diff --git a/scripts/quest/q22780s.py b/scripts/quest/q22780s.py new file mode 100755 index 0000000..66e7bdb --- /dev/null +++ b/scripts/quest/q22780s.py @@ -0,0 +1,42 @@ +KINESIS = 1531000 +JAY = 1531001 +YUNA = 1531002 +NERO = 1531003 + +sm.setIntroBoxChat(JAY) +sm.sendNext("Okay, now that you're all settled, take a look at this.") +sm.sendSay("This is the #bsinkhole#k that appeared on the day you disappeared. It hasn't really grown much since that first day.") +sm.sendSay("But the hole itself is not the problem. The problem is what's inside. ") +sm.sendSay("Things are occurring that #bcannot be explained with the current laws of physics#k. And it's impossible to get any closer to investigate. It's almost like it's a black hole. ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("What about all the people? They couldn't just vanish... right?") + +sm.setIntroBoxChat(JAY) +sm.sendSay("Thousands of people went missing when the sinkhole appeared. But since we can't get any closer, we have no idea what's happened to them. We have them currently listed as #bmissing#k. ") +sm.sendSay("Considering what we know now, though, it's entirely possible those people are fine, #bjust transported to the other world. ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face4#Not bad, Jay. I guess you weren't sitting around and netsurfing while I was away.") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face2#To be fair, I have a LOT of time in my day.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("So, the missing people should be alive somewhere in Maple World? ") + +sm.setIntroBoxChat(JAY) +sm.sendSay("#face2#It's a reasonable theory, yes.") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("#face4#Then I have to go save them. Simple as that.") + +sm.setIntroBoxChat(YUNA) +sm.sendSay("#face2#W-what? You just returned, and you want to go back?") + +sm.setIntroBoxChat(NERO) +if sm.sendAskYesNo("#face0#Ooh, I bet Three Moon can help you! Let's go see Three Moon."): + sm.sendNext("#face0#Take the door on the floor below.") + sm.startQuest(parentID) +else: + sm.sendSayOkay("#face0#What, you got something more urgent?") \ No newline at end of file diff --git a/scripts/quest/q22781s.py b/scripts/quest/q22781s.py new file mode 100755 index 0000000..8e9894c --- /dev/null +++ b/scripts/quest/q22781s.py @@ -0,0 +1,28 @@ +# Created by MechAviv +# Kinesis Introduction +# Map ID :: 101020400 +# East Forest :: Magician Association +KINESIS = 1531000 +NERO = 1531003 +THREE_MOON = 1531004 + +sm.setIntroBoxChat(THREE_MOON) +sm.sendNext("#Indeed, it is as you say. Persons from your world have been scattered throughout. ") + +sm.setIntroBoxChat(KINESIS) +sm.sendSay("Well, don't hold back. Where should I start looking?") + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("#bEllinel Fairy Academy#k. ") + +sm.setIntroBoxChat(NERO) +sm.sendSay("#face0##bEllinel#k? I heard something weird was going on there. #bFanzy#k asked me to help, but with Kinesis on the case, I don't have to worry! ") + +sm.setIntroBoxChat(THREE_MOON) +sm.sendSay("#bEllinel#k has always been off-limits to outsiders. You should exercise caution. ") + +if sm.sendAskYesNo("Accept this #bReturn Scroll#k. Use it at a time wherein you wish to return. With that done, I may now send you to where you need to be.\r\n#b(You will be moved to Fanzy's location if you accept.)#k"): + sm.giveItem(2030055, 5) + sm.createQuestWithQRValue(32147, "1") + sm.startQuest(parentID) + sm.warp(101030000, 1) \ No newline at end of file diff --git a/scripts/quest/q23011e.py b/scripts/quest/q23011e.py new file mode 100755 index 0000000..a5be37a --- /dev/null +++ b/scripts/quest/q23011e.py @@ -0,0 +1,15 @@ +# 23011 - Battle mage 1st job advancement quest + +sm.setSpeakerID(2151001) +if not sm.canHold(1382000): + sm.sendSayOkay("Please make some space in your equipment invetory.") + sm.dispose() + +if sm.sendAskYesNo("Would you like to become a Battle Mage?"): + sm.completeQuest(parentID) + sm.jobAdvance(3200) + sm.resetAP(False, 3200) + sm.giveItem(1382000, 1) + sm.sendSayOkay("Congratulations, you are now a battle mage! I have given you some SP and items to start out with, enjoy!") +else: + sm.sendSayOkay("Of course, you need more time.") diff --git a/scripts/quest/q23012e.py b/scripts/quest/q23012e.py new file mode 100755 index 0000000..18ecc79 --- /dev/null +++ b/scripts/quest/q23012e.py @@ -0,0 +1,19 @@ +# 23012 - Wild Hunter 1st job advancement quest + +XBOW_ID = 1462092 + +sm.setSpeakerID(2151002) # Belle +if sm.sendAskYesNo("Would you like to become a Wild Hunter?"): + if not sm.canHold(XBOW_ID) or not sm.canHold(2061000): + sm.sendSayOkay("Please make some space in your Equipment or Use Inventory.") + sm.dispose() + sm.completeQuest(23012) + sm.jobAdvance(3300) + sm.resetAP(False, 3300) + sm.giveItem(XBOW_ID, 1) + sm.giveSkill(30001061) # Capture + sm.giveSkill(30001062) # Call of the Hunter + sm.giveItem(2061000, 2000) + sm.sendSayOkay("Congratulations, you are now a Wild Hunter! I have given you some SP and items to start out with, enjoy!") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23013e.py b/scripts/quest/q23013e.py new file mode 100755 index 0000000..a3eb6dc --- /dev/null +++ b/scripts/quest/q23013e.py @@ -0,0 +1,15 @@ +# 23013 - Mechanic 1st job advancement quest + +sm.setSpeakerID(2151004) # Checky +if sm.sendAskYesNo("Would you like to become a Mechanic?"): + if not sm.canHold(1492000) or not sm.canHold(2330000): + sm.sendSayOkay("Please make some space in your Equipment or Use Inventory.") + sm.dispose() + sm.completeQuest(parentID) + sm.jobAdvance(3500) + sm.resetAP(False, 3500) + sm.giveItem(1492000) + sm.giveItem(2330000, 1600) + sm.sendSayOkay("Congratulations, you are now a Mechanic! I have given you some SP and items to start out with, enjoy!") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23023e.py b/scripts/quest/q23023e.py new file mode 100755 index 0000000..e073039 --- /dev/null +++ b/scripts/quest/q23023e.py @@ -0,0 +1,10 @@ +# 23023 - 2nd job advancement Battle Mage + +sm.setSpeakerID(2151001) +if sm.sendAskYesNo("Are you ready to advance to the next level?"): + sm.completeQuest(parentID) + sm.jobAdvance(3210) + sm.consumeItem(4032737) + sm.sendSayOkay("Good job on finding the report. I've molded you into the next level of being a Battle Mage.") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23024e.py b/scripts/quest/q23024e.py new file mode 100755 index 0000000..faff31e --- /dev/null +++ b/scripts/quest/q23024e.py @@ -0,0 +1,9 @@ +# 23012 - Wild Hunter 2nd job advancement quest + +sm.setSpeakerID(2151002) # Belle +if sm.sendAskYesNo("Would you like to advance to the next level?"): + sm.completeQuest(parentID) + sm.jobAdvance(3310) + sm.sendSayOkay("Congratulations, you are now at the next level! I have given you some SP, enjoy!") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23025e.py b/scripts/quest/q23025e.py new file mode 100755 index 0000000..909685d --- /dev/null +++ b/scripts/quest/q23025e.py @@ -0,0 +1,9 @@ +# 23012 - Mechanic 2nd job advancement quest + +sm.setSpeakerID(2151004) # Checky +if sm.sendAskYesNo("Would you like to advance to the next level?"): + sm.completeQuest(parentID) + sm.jobAdvance(3510) + sm.sendSayOkay("Congratulations, you are now at the next level! I have given you some SP, enjoy!") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23033e.py b/scripts/quest/q23033e.py new file mode 100755 index 0000000..2c83194 --- /dev/null +++ b/scripts/quest/q23033e.py @@ -0,0 +1,9 @@ +# 23033 - BaM 3rd job advancement + +sm.setSpeakerID(2151001) +if sm.sendAskYesNo("Are you ready to advance to the next level?"): + sm.jobAdvance(3211) + sm.completeQuest(parentID) + sm.sendSayOkay("Good job on defeating the conductor device. You have advanced a job level, and I have given you some SP.") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23034e.py b/scripts/quest/q23034e.py new file mode 100755 index 0000000..e2cb745 --- /dev/null +++ b/scripts/quest/q23034e.py @@ -0,0 +1,9 @@ +# 23012 - Wild Hunter 3rd job advancement quest + +sm.setSpeakerID(2151002) # Belle +if sm.sendAskYesNo("Would you like to advance to the next level?"): + sm.completeQuest(parentID) + sm.jobAdvance(3311) + sm.sendSayOkay("Congratulations, you are now at the next level! I have given you some SP, enjoy!") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23035e.py b/scripts/quest/q23035e.py new file mode 100755 index 0000000..ce363d5 --- /dev/null +++ b/scripts/quest/q23035e.py @@ -0,0 +1,9 @@ +# 23012 - Mechanic 3rd job advancement quest + +sm.setSpeakerID(2151004) # Belle +if sm.sendAskYesNo("Would you like to advance to the next level?"): + sm.completeQuest(parentID) + sm.jobAdvance(3511) + sm.sendSayOkay("Congratulations, you are now at the next level! I have given you some SP, enjoy!") +else: + sm.sendSayOkay("Come back when you're ready.") diff --git a/scripts/quest/q23049e.py b/scripts/quest/q23049e.py new file mode 100755 index 0000000..b47acc8 --- /dev/null +++ b/scripts/quest/q23049e.py @@ -0,0 +1,12 @@ +# 23049 - BaM 4th job advancement + +BRISTON = 2159110 +GELIMERS_KEY_CARD = 4032743 +SECRET_PLAZA = 310010000 + +sm.setSpeakerID(BRISTON) +sm.sendNext("Did you destroy the Black Wings' new weapon? Nice work. I'm proud to have you in the Resistance.") +if sm.sendAskYesNo("But it's too early to celebrate. #p2154009# will show up with his goons when he hears the news. Let's get out of here via the Underground Base Hideout Return Scroll. On my count. One... two... three!"): + sm.completeQuest(parentID) + sm.consumeItem(GELIMERS_KEY_CARD) + sm.warpInstanceOut(SECRET_PLAZA, 0) diff --git a/scripts/quest/q23050e.py b/scripts/quest/q23050e.py new file mode 100755 index 0000000..2c4a1b6 --- /dev/null +++ b/scripts/quest/q23050e.py @@ -0,0 +1,12 @@ +# 23049 - WH 4th job advancement + +BELLE = 2159111 +GELIMERS_KEY_CARD = 4032743 +SECRET_PLAZA = 310010000 + +sm.setSpeakerID(BELLE) +sm.sendNext("Did you destroy the Black Wings' new weapon? Nice work. I'm proud to have you in the Resistance.") +if sm.sendAskYesNo("But it's too early to celebrate. #p2154009# will show up with his goons when he hears the news. Let's get out of here via the Underground Base Hideout Return Scroll. On my count. One... two... three!"): + sm.completeQuest(parentID) + sm.consumeItem(GELIMERS_KEY_CARD) + sm.warpInstanceOut(SECRET_PLAZA, 0) diff --git a/scripts/quest/q23051e.py b/scripts/quest/q23051e.py new file mode 100755 index 0000000..9753385 --- /dev/null +++ b/scripts/quest/q23051e.py @@ -0,0 +1,12 @@ +# 23049 - Mechanic 4th job advancement + +CHECKY = 2159112 +GELIMERS_KEY_CARD = 4032743 +SECRET_PLAZA = 310010000 + +sm.setSpeakerID(CHECKY) +sm.sendNext("Did you destroy the Black Wings' new weapon? Nice work. I'm proud to have you in the Resistance.") +if sm.sendAskYesNo("But it's too early to celebrate. #p2154009# will show up with his goons when he hears the news. Let's get out of here via the Underground Base Hideout Return Scroll. On my count. One... two... three!"): + sm.completeQuest(parentID) + sm.consumeItem(GELIMERS_KEY_CARD) + sm.warpInstanceOut(SECRET_PLAZA, 0) diff --git a/scripts/quest/q23052s.py b/scripts/quest/q23052s.py new file mode 100755 index 0000000..8fbfdc7 --- /dev/null +++ b/scripts/quest/q23052s.py @@ -0,0 +1,26 @@ +# BaM 4th job Advance + +BRISTON = 2151001 + +sm.setSpeakerID(BRISTON) +sm.sendNext("Welcome, #h #. You're quite the hero. Look around at this beautiful town. It's worth fighting for... worth dying for... don't you think?") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("Are you feeling better?") + +sm.setSpeakerID(BRISTON) +sm.sendSay("Yes. #p1540418#'s skills are second to none. I'm completely back to my old self. There is still one problem though...") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("What?! Are the Black Wings planning something?") + +sm.setSpeakerID(BRISTON) +if sm.sendAskYesNo("No, the problem is... you! You've become too strong. I'm supposed to be your teacher but you've accomplished something I couldn't do. So I want to give you a more difficult mission! You game?"): + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.jobAdvance(3212) + sm.sendNext("I've also given you some skills that I know of but haven't mastered yet. I have a hunch that you'll be able to master them. After all, you're like the Resistance's hero now.") + sm.sendSay("Could this be my last lesson with you? Nah, can't be. You may be stronger, but I'm still smarter. I'm sure there's plenty more you can learn from me. So I'll see you at your next lesson...whenever that is...") + sm.sendPrev("I look forward to seeing what you accomplish.") diff --git a/scripts/quest/q23053s.py b/scripts/quest/q23053s.py new file mode 100755 index 0000000..ddb9c31 --- /dev/null +++ b/scripts/quest/q23053s.py @@ -0,0 +1,24 @@ +ELEX = 2151002 + +sm.setSpeakerID(ELEX) +sm.sendNext("Welcome, #h #. You're quite the hero. Look around at this beautiful town. It's worth fighting for... worth dying for... don't you think?") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("Are you feeling better?") + +sm.setSpeakerID(ELEX) +sm.sendSay("Yes. #p1540418#'s skills are second to none. I'm completely back to my old self. There is still one problem though...") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("What?! Are the Black Wings planning something?") + +sm.setSpeakerID(ELEX) +if sm.sendAskYesNo("No, the problem is... you! You've become too strong. I'm supposed to be your teacher but you've accomplished something I couldn't do. So I want to give you a more difficult mission! You game?"): + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.jobAdvance(3312) + sm.sendNext("I've also given you some skills that I know of but haven't mastered yet. I have a hunch that you'll be able to master them. After all, you're like the Resistance's hero now.") + sm.sendSay("Could this be my last lesson with you? Nah, can't be. You may be stronger, but I'm still smarter. I'm sure there's plenty more you can learn from me. So I'll see you at your next lesson...whenever that is...") + sm.sendPrev("I look forward to seeing what you accomplish.") diff --git a/scripts/quest/q23054s.py b/scripts/quest/q23054s.py new file mode 100755 index 0000000..acb677a --- /dev/null +++ b/scripts/quest/q23054s.py @@ -0,0 +1,24 @@ +CHECKY = 2151004 + +sm.setSpeakerID(CHECKY) +sm.sendNext("Welcome, #h #. You're quite the hero. Look around at this beautiful town. It's worth fighting for... worth dying for... don't you think?") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("Are you feeling better?") + +sm.setSpeakerID(CHECKY) +sm.sendSay("Yes. #p1540418#'s skills are second to none. I'm completely back to my old self. There is still one problem though...") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("What?! Are the Black Wings planning something?") + +sm.setSpeakerID(CHECKY) +if sm.sendAskYesNo("No, the problem is... you! You've become too strong. I'm supposed to be your teacher but you've accomplished something I couldn't do. So I want to give you a more difficult mission! You game?"): + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.jobAdvance(3512) + sm.sendNext("I've also given you some skills that I know of but haven't mastered yet. I have a hunch that you'll be able to master them. After all, you're like the Resistance's hero now.") + sm.sendSay("Could this be my last lesson with you? Nah, can't be. You may be stronger, but I'm still smarter. I'm sure there's plenty more you can learn from me. So I'll see you at your next lesson...whenever that is...") + sm.sendPrev("I look forward to seeing what you accomplish.") diff --git a/scripts/quest/q23160e.py b/scripts/quest/q23160e.py new file mode 100755 index 0000000..e888cd8 --- /dev/null +++ b/scripts/quest/q23160e.py @@ -0,0 +1,36 @@ +# Blaster 1st Job Advancement - Elex + +ELEX = 2151000 +BLASTER1 = 3700 +HAND_BUSTER = 1582000 +RUDIMENTARY_CHARGES = 1353400 + +sm.setSpeakerID(ELEX) +if not sm.canHold(HAND_BUSTER): + sm.sendSayOkay("Please make room in your equip inventory.") + sm.dispose() + + +if sm.sendAskYesNo("So you've finally decided to become a Blaster, eh? Well, you can still change your mind. Just stop our conversation, forfeit this quest, and talk to another class trainer. So, you sure you want to become a Blaster? I'm not interested in teaching you unless you're a hundred percent sure..."): + sm.jobAdvance(BLASTER1) + sm.resetAP(False, BLASTER1) + sm.giveItem(HAND_BUSTER) + sm.giveAndEquip(RUDIMENTARY_CHARGES) + sm.completeQuest(parentID) + chr.getJobHandler().reloadCylinder() + + sm.removeEscapeButton() + sm.sendNext("Great! You're now an official member of the Resistance! Let me give you a brief explanation on Blaster skills to celebrate becoming a Blaster.") + sm.sendSay("The two major mechanics of a Blaster are #bAmmo#k and the #bDynamo Gauge#k. In combat, you use #bAmmo#k to reload the #bDynamo Gauge#k. You can then use the powerful #eBunker Buster#n skill with the reloaded #bDynamo Gauge#k.") + sm.sendSay("#i3801012#\r\nYou can check your #bAmmo#k and #bDynamo Gauge#k at any time through the UI, as shown above.") + sm.sendSay("You want even more details? Teacher's pet, much?") + sm.sendSay("#i3801012#\r\nFine, fine. #bAmmo#k can be loaded into your weapon. It's used in a skill called #eRevolving Cannon#n. #bAmmo#k reloads automatically when you're out, but you can also hold down the Revolving Cannon hotkey to reload manually.") + sm.sendSay("#i3801012#\r\nMight be smart to reload whenever you're low on #bAmmo#k. Now, #eRevolving Cannon#n can't be used on its own. It can only be used during #bMagnum Punch#k, #bDouble Blast#k, #band Revolving Blast#k.") + sm.sendSay("Think of #eRevolving Cannon#n as squeezing in an extra shot during Magnum Punch, Double Blast, or Revolving Blast.") + sm.sendSay("#i3801013#\r\nNow, you're probably wondering about the #bDynamo Gauge#k. Every time you consume a suitable amount of #bAmmo#k, a bar in your #bDynamo Gauge#k will fill up.") + sm.sendSay("#i3801014#\r\nWhen the #bDynamo Gauge#k loads up, it'll overheat, causing you to deal more damage. You can use a powerful skill called #eBunker Blaster#n when at least 3 bars in the #bDynamo Gauge#k are filled. You won't be able to use it again until you reload the #bDynamo Gauge#k or wait a bit, though.") + sm.sendSay("You'll have to practice using up #bAmmo#k and reloading the #bDynamo Gauge#k quickly to get the hang of enabling #eBunker Blaster#n. Power takes effort, you know?") + sm.sendSay("And... that's that. You're no longer some no-name warrior, you're a Blaster! A Blaster, blasting for freedom!") + sm.sendSay("Watch yourself out there. If you're exposed, we're all at risk. From now on, call me 'teacher' and I'll give you special lessons here in this very room.") +else: + sm.sendNext("Make your decision carefully.") diff --git a/scripts/quest/q23162e.py b/scripts/quest/q23162e.py new file mode 100755 index 0000000..bcda760 --- /dev/null +++ b/scripts/quest/q23162e.py @@ -0,0 +1,22 @@ +# 2nd job advancement blaster + +ELEX = 2151000 +STANDARD_CHARGES = 1353401 + +sm.setSpeakerID(ELEX) +sm.sendNext("You've brougth the Black Wings Report. Not too shabby.") +sm.sendSay("I gave this mission to YOU for a reason. Those Black Wings you took out... They're the same ones who used to bully you. You make that connection? Must feel good to complete your mission AND get some sweet revenge.") +sm.sendSay("I've been watching you. Not everyone can adjust to a weapon like yours, with the mix of melee combat thrown in. Seriously, kid, not too shabby.") + +if sm.sendAskYesNo("Okay, I think you're ready for the next stage, a stage in which you'll be transformed into an unimaginably strong Blaster..."): + if not sm.canHold(STANDARD_CHARGES): + sm.sendSayOkay("Please make space in your equipment inventory.") + sm.dispose() + sm.completeQuest(parentID) + sm.consumeItem(4034787) + sm.jobAdvance(3710) + sm.giveItem(STANDARD_CHARGES) + sm.sendNext("I've advanced you. I also passed along the knowledge of some amazing skills. Try practicing with them and eventually you'll get the hang of things.") + sm.sendPrev("I'll see you at the next lesson. Until then, continue your good fight.") +else: + sm.sendNext("I suppose you should take a moment to prepare yourself.") diff --git a/scripts/quest/q23164e.py b/scripts/quest/q23164e.py new file mode 100755 index 0000000..49dc75f --- /dev/null +++ b/scripts/quest/q23164e.py @@ -0,0 +1,14 @@ +ELEX = 2151000 +HIGH_POWERED_CHARGES = 1353402 + +sm.setSpeakerID(ELEX) +sm.sendNext("You destroyed the #o9001032#! Good. This should aleviate the problem of insufficient energy in town. We'll all be able to sleep a little easier now. You've done a tremendous good for Edelstein.") +if sm.sendAskYesNo("You've proven yourself, so I'd like to pass along some even more powerful Blaster skills. I've got faith you'll use them for the good fight."): + if not sm.canHold(HIGH_POWERED_CHARGES): + sm.sendSayOkay("Please make space in your equipment inventory.") + sm.dispose() + sm.jobAdvance(3711) + sm.giveItem(HIGH_POWERED_CHARGES) + sm.completeQuest(parentID) + sm.sendNext("I've advanced you. Wield your newfound power to fight for freedom!") + sm.sendPrev("I'll see you at the next lesson. Until then, continue your good fight.") diff --git a/scripts/quest/q23168e.py b/scripts/quest/q23168e.py new file mode 100755 index 0000000..100dfe8 --- /dev/null +++ b/scripts/quest/q23168e.py @@ -0,0 +1,12 @@ +ELEX = 2159488 +GELIMERS_KEY_CARD = 4032743 +SECRET_PLAZA = 310010000 + +sm.setSpeakerID(ELEX) +sm.sendNext("Did you destroy the Black Wings' new weapon? Nice work. I'm proud to have you in the Resistance.") +if sm.sendAskYesNo("But it's too early to celebrate. #p2154009# will show up with his goons when he hears the news. Let's get out of here via the Underground Base Hideout Return Scroll. On my count. One... two... three!"): + sm.consumeItem(GELIMERS_KEY_CARD) + sm.warpInstanceOut(SECRET_PLAZA, 0) + sm.completeQuest(parentID) +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q23169s.py b/scripts/quest/q23169s.py new file mode 100755 index 0000000..24c1149 --- /dev/null +++ b/scripts/quest/q23169s.py @@ -0,0 +1,29 @@ +ELEX = 2151000 +MASTERWORK_CHARGES = 1353403 + +sm.setSpeakerID(ELEX) +sm.sendNext("Welcome, #h #. You're quite the hero. Look around at this beautiful town. It's worth fighting for... worth dying for... don't you think?") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("Are you feeling better?") + +sm.setSpeakerID(ELEX) +sm.sendSay("Yes. #p1540418#'s skills are second to none. I'm completely back to my old self. There is still one problem though...") + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("What?! Are the Black Wings planning something?") + +sm.setSpeakerID(ELEX) +if sm.sendAskYesNo("No, the problem is... you! You've become too strong. I'm supposed to be your teacher but you've accomplished something I couldn't do. So I want to give you a more difficult mission! You game?"): + if not sm.canHold(MASTERWORK_CHARGES): + sm.sendSayOkay("Please make space in your equipment inventory.") + sm.dispose() + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.jobAdvance(3712) + sm.giveItem(MASTERWORK_CHARGES) + sm.sendNext("I've also given you some skills that I know of but haven't mastered yet. I have a hunch that you'll be able to master them. After all, you're like the Resistance's hero now.") + sm.sendSay("Could this be my last lesson with you? Nah, can't be. You may be stronger, but I'm still smarter. I'm sure there's plenty more you can learn from me. So I'll see you at your next lesson...whenever that is...") + sm.sendPrev("I look forward to seeing what you accomplish.") diff --git a/scripts/quest/q23170e.py b/scripts/quest/q23170e.py new file mode 100755 index 0000000..0ce3a71 --- /dev/null +++ b/scripts/quest/q23170e.py @@ -0,0 +1,10 @@ +# Blaster Student of the Resistance +FERDI = 2151010 +ELEX = 2151000 +AGILITY_ENHANCEMENT_COURSE_UNLOCK = 23128 + +sm.setSpeakerID(FERDI) +sm.sendNext("We meet again. Congratulations on becoming a part of the Resistance. I've been keeping an eye on you from the start. #p" + str(ELEX) + "# saw something in you and sent you here.") +sm.sendSay("Well, since you're part of our group now, you should train and level up. I'll teach you what you need to know to be a contributing member of the Resistance.") +sm.createQuestWithQRValue(AGILITY_ENHANCEMENT_COURSE_UNLOCK, "1") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q23171e.py b/scripts/quest/q23171e.py new file mode 100755 index 0000000..5e33657 --- /dev/null +++ b/scripts/quest/q23171e.py @@ -0,0 +1,11 @@ +# Blaster - The First Mission +CLAUDINE = 2151003 +ELEX = 2151000 +ELIMINATE_PATROL_ROBOT_UNLOCK = 23129 + +sm.setSpeakerID(CLAUDINE) +sm.sendNext("Greetings, #h #! My name is #p" + str(CLAUDINE) + "#, and I am in charge of Resistance mission assignments. It's strange seeing you here instead of in town...") +sm.sendSay("I should actually be a Thief Job instructor but I've taken this position since the Resistance doesn't train thieves.") +sm.sendSay("In any case, since I'm in charge of missions, you'll be seeing me more often than even #p2151000#, your job instructor. Now, let's drive those Black Wings out of our territory.") +sm.createQuestWithQRValue(ELIMINATE_PATROL_ROBOT_UNLOCK, "1") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q23205e.py b/scripts/quest/q23205e.py new file mode 100755 index 0000000..1fb71ae --- /dev/null +++ b/scripts/quest/q23205e.py @@ -0,0 +1,10 @@ +SKILLS = [30010166, 30011167, 30011168, 30011169, 30011170] +ARKARIUM = 2159309 + +sm.completeQuestNoRewards(parentID) +sm.deleteQuest(parentID) +for i in range(5): + if sm.hasSkill(SKILLS[i]): + sm.removeSkill(SKILLS[i]) # remove the skill +sm.removeNpc(ARKARIUM) +sm.warpInstanceIn(927000070, 0) diff --git a/scripts/quest/q23212e.py b/scripts/quest/q23212e.py new file mode 100755 index 0000000..0b0941c --- /dev/null +++ b/scripts/quest/q23212e.py @@ -0,0 +1,19 @@ +# 23212 | Contract with Mastema + +isDS = chr.getJob() == 3100 + +sm.setSpeakerID(2450017) + +if not sm.canHold(1142342): + sm.sendSayOkay("Please make space in your equip inventory.") + sm.dispose() + +if sm.sendAskYesNo("Everything is ready. Let us begin the contract ritual. Focus on your mind."): + sm.jobAdvance(isDS and 3110 or 3120) + sm.giveItem(isDS and 1142342 or 1142554) + sm.giveAndEquip(isDS and 1099002 or 1099007) # todo: upgrade instead of replace secondary? (potentials) + sm.completeQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendNext("#b(You feel a curious energy flowing into you.)") + sm.setSpeakerID(2450017) + sm.sendNext("There... our contract is made. Now we can communicate through our minds. Isn't that neat?") diff --git a/scripts/quest/q23214e.py b/scripts/quest/q23214e.py new file mode 100755 index 0000000..5b5cfe3 --- /dev/null +++ b/scripts/quest/q23214e.py @@ -0,0 +1,17 @@ +# 23214 | Sparring with Mastema + +isDS = chr.getJob() == 3110 + +sm.setSpeakerID(2450017) + +if not sm.canHold(1142343): + sm.sendSayOkay("Please make space in your equip inventory.") + sm.dispose() + +sm.sendNext("How did it go? Did my copy give you any trouble? Hey... it didn't... say anything weird, did it? Well anyway, let me record your status in my little book here...") +sm.jobAdvance(chr.getJob()+1) +sm.giveItem(isDS and 1142343 or 1142555) +sm.giveAndEquip(isDS and 1099003 or 1099008) # todo: upgrade instead of replace secondary? (potentials) +sm.completeQuest(parentID) +sm.sendNext("I'm glad I could help you. Now, if you'll excuse me, I used up too much of my power, so I'm going to pass out...") +sm.sendSayOkay("I used too much power, that's why I turned red!") diff --git a/scripts/quest/q23214s.py b/scripts/quest/q23214s.py new file mode 100755 index 0000000..de0d72a --- /dev/null +++ b/scripts/quest/q23214s.py @@ -0,0 +1,7 @@ +#23214 | Sparring with Mastema +sm.setSpeakerID(2450017) +sm.sendNext("There! That's my original form from the past. Oh, I looked so good.") +sm.sendNext("Now, this copy won't be as powerful as I really was. It's just a reflection, after all. Still, it should give you a decent challenge. Oh, and if you want to repeat this, you have to forfeit the quest and start over. It's a pain, but that is the rule.") +sm.startQuest(parentID) +sm.warpInstanceIn(931050120) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q23215e.py b/scripts/quest/q23215e.py new file mode 100755 index 0000000..9d0bceb --- /dev/null +++ b/scripts/quest/q23215e.py @@ -0,0 +1,15 @@ +# 23215 | True Awakening +sm.setSpeakerID(2450017) +sm.sendNext("You made it back, #h #! How are you feeling?") +sm.setPlayerAsSpeaker() +sm.sendNext("Fighting myself from the past wasn't easy, but I remembered many of the skills I had forgotten.") +sm.setSpeakerID(2450017) +if sm.sendAskYesNo("Excellent! I was hoping it would work like that. You really do feel strong now. Hey, #h #, do you want me to write this all down for you?"): + if sm.canHold(1142344): + sm.giveItem(1142344) + sm.jobAdvance(3112) + sm.giveAndEquip(1099004) # todo: upgrade instead of replace secondary? (potentials) + sm.completeQuest(parentID) + sm.sendSayOkay("Sounds like you've gotten all your old powers back. For now, #h #, I suggest you focus on training steadily and improving your basics.") + else: + sm.sendSayOkay("Please make space in your Equip inventory.") diff --git a/scripts/quest/q23215s.py b/scripts/quest/q23215s.py new file mode 100755 index 0000000..4765179 --- /dev/null +++ b/scripts/quest/q23215s.py @@ -0,0 +1,24 @@ +#23215 | True Awakening +sm.setSpeakerID(2450017) +if sm.sendAskYesNo("How's your training going, #h # good?"): + sm.sendSayOkay("Really? Are you sure It's going well?") + sm.dispose() +else: + sm.setPlayerAsSpeaker() + sm.sendNext("Mastema, I wanted to talk with you.") + sm.setSpeakerID(2450017) + sm.sendNext("(Eh? #h # wanted to speak to me? Glee!) Ah, yes? About what?") + sm.setPlayerAsSpeaker() + sm.sendNext("I would like to repeat my previous training.") + sm.setSpeakerID(2450017) + sm.sendNext("Previous training? Guess you've hit another wall, then. I don't think repeating that training is going to help, #h #...") + sm.setPlayerAsSpeaker() + sm.sendNext("I understand, but I seem to be out of options.") + sm.setSpeakerID(2450017) + sm.sendNext("Hm. Wait...wait! I've got an idea. Ohh, I've got a really good idea! You want to get back to your old power level, right, #h #? In that case you should practice against #h #! Or more specifically, #h # from the past.") + sm.sendNext("Normally the Temple of Time is the only place where you can tinker with time, but I found another, #h #. Word is, there is something wrong with time in Ludibrium.") + sm.sendNext("There's a place called #bPath of Time#k on Ludibrium's Clock Tower Bottom Floor. I can stabilize the Crack in Time so you can travel to where you need to go.") + sm.sendNext("Yeah, I know I look funny like this, but this form allows me to move between dimensions. I'll meet you at the place... I'm taking the scenic route.") + sm.sendNext("Entering the Crack of Time will shift you to a point in the past, but don't worry about messing things up. The way this works, your actions won't affect the future.") + sm.startQuest(parentID) + sm.warp(220050300, 2) diff --git a/scripts/quest/q23221e.py b/scripts/quest/q23221e.py new file mode 100755 index 0000000..ac54ab1 --- /dev/null +++ b/scripts/quest/q23221e.py @@ -0,0 +1,20 @@ +MASTEMA = 2151009 + +sm.setSpeakerID(MASTEMA) + +if not sm.canHold(1142556): + sm.sendNext("Please clear some space in your equip inventory.") + sm.dispose() + +sm.sendNext("You made it back, #h #! How are you?") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I didn't know I had such anger within me. It is not easy to control.") + +sm.setSpeakerID(MASTEMA) +if sm.sendAskYesNo("But you succeeded, #h #! I should write this down for posterity, right?"): + sm.completeQuest(parentID) + sm.giveItem(1142556) + sm.giveAndEquip(1099009) + sm.jobAdvance(chr.getJob()+1) + sm.sendSayOkay("Your inner rage is now under your control, #h #! All that's elft for you is to keep training.") diff --git a/scripts/quest/q23221s.py b/scripts/quest/q23221s.py new file mode 100755 index 0000000..147df03 --- /dev/null +++ b/scripts/quest/q23221s.py @@ -0,0 +1,40 @@ +MASTEMA = 2151009 + +sm.setSpeakerID(MASTEMA) +if sm.sendAskYesNo("#h #. Have you fulfilled your mission?"): + sm.flipDialoguePlayerAsSpeaker() + sm.sendNext("#p2151009#, I wanted to talk to you...") + + sm.setSpeakerID(MASTEMA) + sm.sendSay("(Eh?! #h # wanted to talk to me!?) Ah, yes? About what?") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("I would like to repeat my training.") + + sm.setSpeakerID(MASTEMA) + sm.sendSay("Repeat? Ah, you must have hit another wall. I doubt more of the same is going to help, #h #...") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("I understand, but I seem to be out of options.") + + sm.setSpeakerID(MASTEMA) + sm.sendSay("Hm. Wait...wait! I've got an idea. Ohh, I've got a really good idea! You want to get back to your old power level, right? #h #? In that case, you should tap into your vengeance! Why don't you practice against your inner rage?") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("Inner rage?") + + sm.setSpeakerID(MASTEMA) + sm.sendSay("Yes! Rage is a potent source of power. I mean, you know that. But you won't have full access to it until you conquer it fully.") + + sm.flipDialoguePlayerAsSpeaker() + sm.sendSay("You have a point. How can I fight my inner rage, though?") + + sm.setSpeakerID(MASTEMA) + sm.sendSay("Well, #h #... I just happen to have the power to send you inside...yourself. It's not as weird as it sounds. More like meditation, really.") + sm.sendSay("But you won't be completely out of danger. The damage you sustain there will transfer to your real body.") + + if sm.sendAskYesNo("Are you ready? (Press Yes to move automatically. You will have to forfeit the quest and restart if you fail.)"): + sm.startQuest(parentID) + sm.warpInstanceIn(924020020, False) +else: + sm.sendSayOkay("Not much. You sure you're doing well.") diff --git a/scripts/quest/q23600e.py b/scripts/quest/q23600e.py new file mode 100755 index 0000000..b0a0d90 --- /dev/null +++ b/scripts/quest/q23600e.py @@ -0,0 +1,19 @@ +# Testing Testing One Two Three ; Xenon Intro Quest to kill Fabricated Von Leon + +GELIMER_PRESENT = 2159377 + +sm.removeEscapeButton() +sm.lockInGameUI(True) +sm.moveCamera(False, 1000, 0, -25) +sm.setSpeakerID(GELIMER_PRESENT) +sm.removeEscapeButton() +sm.sendNext("Good, very good! I am very satisfied with these results. Just a few more fine adjustments and...") +sm.showBalloonMsgOnNpc("Effect/Direction12.img/effect/tuto/BalloonMsg1/0", 2000, GELIMER_PRESENT) +sm.flipNpcByTemplateId(GELIMER_PRESENT, True) +sm.sendNext("An intruder?! It could be Orchid. Turn on the monitor!") +# monitor flashes a couple times, shows resistance breaking in -> delay -> shows close up of resistance +sm.sendNext("Is it the Resistance? I suppose that would be better than Orchid, but... this is the worst possible time!") +sm.sendSay("Wait, wait, wait. Maybe this will work. One more test, yes... they will be perfect... Hahaha... MWAHAHAHA!") +sm.warpInstanceIn(931050940) +sm.removeNpc(GELIMER_PRESENT) +sm.completeQuest(parentID) diff --git a/scripts/quest/q23610s.py b/scripts/quest/q23610s.py new file mode 100755 index 0000000..f6b85cc --- /dev/null +++ b/scripts/quest/q23610s.py @@ -0,0 +1,22 @@ +# Secret Instructions ; Xenon 2nd Job + +TONERO = 3001004 +CLAUDINE = 1540452 + +sm.setSpeakerID(TONERO) +sm.sendNext("Hello to you #b#h ##k! The name's Tonero, commisioner of instructions most discreet. I have a little something for you!.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("What is this?") +sm.setSpeakerID(TONERO) +sm.sendSay("I was instructed, and persuaded with monetary incentive, to bring this #bResistance Orders#k to you, no questions asked. Now then, I'm off.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("What the... He just disappeared!\r\nWho sent me secret instructions?") +sm.setSpeakerID(CLAUDINE) +sm.sendSay("Dear #b#h ##k, I hope you're doing well. It hasn't been easy to track you down, but I think that's probably good, all things considered. I apologize for the odd man we had to choose as a messenger, but I assure you he is trustworthy enough.") +sm.sendSay("I'm sending you this message because the Resistance has formed a secret research organization to investigate strange occurrences in Maple World. With the help of the Alliance, our #bnew research agency#k is up and running, but slightly understaffed. I would like for you to go and help.") +sm.sendSay("I'm sure they would be more than happy to help you with your problems as well. I believe it may be exactly the sort of support you need right now. I'm sorry that I can't be there to give it to you myself, but I am needed here. May fortune smile on you.") +sm.flipDialoguePlayerAsSpeaker() +if sm.sendAskAccept("Now that Gelimer is off my tail, these people may be just what I need. It couldn't hurt to visit, at least.\r\n\r\n#r(Press Y to move automatically.)"): + sm.warp(230050000) + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q23611e.py b/scripts/quest/q23611e.py new file mode 100755 index 0000000..7c594b2 --- /dev/null +++ b/scripts/quest/q23611e.py @@ -0,0 +1,52 @@ +# Veritas's Finest ; Xenon 2nd Job + +PROFESSOR_DREAMBOAT = 2300001 + +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendNext("Welcome. You must be the one Claudine mentioned. I am Professor Drea...Moon. Sorry, the nickname's sort of hard to escape. I am the head of Resistance Research Command, otherwise known as #b#m230050000##k.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("#b#m230050000##k?") +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendSay("I doubt Claudine gave you the details over an insecure channel. We are a research group, dedicated to tracking and addressing strange phenomena across Maple World that may be related to the Black Mage. We have gathered scholars of all areas of expertise to investigate these happenings.") +sm.sendSay("Unfortunately, we are sorely lacking in people. That's why we're so glad to have a field agent from the Resistance.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("But, I... I'm not free to go where I please right now.") +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendSay("Ah, yes, someone is tracking you, right? Well, have no worries. I'm sure somebody here can figure that part out. This base is completely undetectable to any scanners, so you're safe enough inside.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Interesting. Would it be possible to create a wearable version of your scrambling systems? Perhaps that would...") +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendSay("Slow down there, buddy. You're not a building. We can't just pad you down with three-fot-thick lead... Or can we?") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I can carry a great deal of weight with my current booster alignment.") +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendSay("You'd be the size of a two story building. It's not a good plan.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Unfortunate... I suppose that means this is the only place I can feel safe.") + +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendSay("Well, there might be another way. Maybe we can create a #bPulse Disruptor#k.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("#bPulse Disruptor#k?") +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendSay("If you're giving off a signal, I'm sure we can create SOME sort of counter-system to block it out. It woudl require multiple devices though, probably scattered all over...") +sm.sendSay("This is actually very similar to something Claudine requested. I bet I can dig up that research somewhere...") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Is there anything I can do?") +sm.setSpeakerID(PROFESSOR_DREAMBOAT) +sm.sendSay("Well, it's probably a little below your abilities, but all the scientists around here could use an assistant, myself included.") + +if sm.sendAskYesNo("If you're willing to take the job, I'm ready to hire you as the one-and-only #b#m230050000##k special agent. Do you accept?\r\n\r\n#b"): + if not sm.canHold(1142576): + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() + sm.completeQuest(parentID) + sm.jobAdvance(3610) + sm.giveItem(1142576) + sm.giveAndEquip(1353002) + sm.giveSkill(30021235) + sm.sendNext("Congratulations, special agent #h #!") + sm.sendSay("You probably saw it when you were walking in, but one of our engineers created the world's gaudiest transport device. You can use it to go out on missions, or get back to the lab any time.") + sm.sendSay("He named it the #bPromessa#k. You can use the #bPromessa Escape#k skill to call it wherever you are.") + sm.sendPrev("I know it's rpetty ridiculous-looking, but the design is solid as can be.") diff --git a/scripts/quest/q23612e.py b/scripts/quest/q23612e.py new file mode 100755 index 0000000..6291450 --- /dev/null +++ b/scripts/quest/q23612e.py @@ -0,0 +1,19 @@ +# Only the Brave ; Xenon 3rd Job + +PROMATHUS = 2300002 + +sm.setSpeakerID(PROMATHUS) +sm.sendNext("That took longer than I expected. Is everything all right?") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(You explain that you were almost discovered by the Black Wings.)") +sm.setSpeakerID(PROMATHUS) +sm.sendSay("Haha! Gelimer would be furious if he knew you'd gotten by right under his nose. Quite a daring move, yes, yes.") +if sm.sendAskYesNo("Well done, child., well done. Your courage is evident. Will you take what we have readied for you?"): + if not sm.canHold(1142577): + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() + sm.completeQuest(parentID) + sm.jobAdvance(3611) + sm.giveAndEquip(1353003) + sm.giveItem(1142577) + sm.sendSayOkay("I've uploaded every bit of information on the Black Wings and their agents to your memory banks. Your neural interface should create a sort of camouflage effect, should any Black Wings cross your path. To them, you will appear as someone they do not know. It should even work on Gelimer.") diff --git a/scripts/quest/q23612s.py b/scripts/quest/q23612s.py new file mode 100755 index 0000000..1ca87be --- /dev/null +++ b/scripts/quest/q23612s.py @@ -0,0 +1,20 @@ +# Only the Brave ; Xenon 3rd Job + +PROMATHUS = 2300002 + +sm.setSpeakerID(PROMATHUS) +sm.sendNext("Ah, there you are, I must speak with you. I don't know if you know this, but Gelimer has not ended his search for you.") +sm.sendSay("The thing that I find very strange is that Beryl was the only one to actually pursue you. It seems your very existence was kept a secret, even among the Black Wings. Was... things tend to change rapidly in their organization.") +sm.sendSay("Only a handful of the Black Wings will know of you now, but it is only a matter of time until your infamy becomes a burden. The people of this laboratory are busy at work for a weapon to make you safe... but I am not so sure it is the best course of action. Do you know why?") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Is it because I'm not human?") +sm.setSpeakerID(PROMATHUS) +sm.sendSay("I would not be swayed by so petty a reason.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Is it because Gelimer is my creator?") +sm.setSpeakerID(PROMATHUS) +sm.sendSay("Again, no. You were crafted as a weapon, and a weapon is only as dangerous as the person who wields it. Who's to say that the evil dwelling within Gelimer's soul has not infected mine as well? All men are suspectible to greed, especially those fueled by the desire of knowledge.") + +if sm.sendAskYesNo("A scientist must take responsibility for his own curiosity. THAT is... why I hesitate to grant you this power.\r\nI need proof that you will handle it with care. Will you prove yourself to me?"): + sm.sendSayOkay("Splendid, I would like you to show me the courage in your heart, and bring me a #bBlack Wings Hat#k. There is a gentleman on the #Road to the Mine1#k. He is known to be rather unscrupulous towards his own organization. But be wary, their base is rather nearby, it will require skill, bravery, and cunning. Good luck.") + sm.startQuest(parentID) diff --git a/scripts/quest/q23615s.py b/scripts/quest/q23615s.py new file mode 100755 index 0000000..783fc19 --- /dev/null +++ b/scripts/quest/q23615s.py @@ -0,0 +1,14 @@ +# Getting Caught?! ; Xenon 3rd Job + +STEPHAN = 2159421 + +sm.setSpeakerID(STEPHAN) +sm.sendNext("The Watchman are all over. I need to get out of here!") +sm.setPlayerAsSpeaker() +if sm.sendAskYesNo("The Watchman is headed this way, but I can't arrouse any suspicions. Maybe I should just try to act casual!"): + sm.sendNext("No, I won't run, I can do this. I just need to be a Black Wing. I am a Black Wing, I am a Black Wing, I am a...") +else: + sm.sendNext("No, I shouldn't be nervous, I can do this. I just need to be a Black Wing. I am a Black Wing, I am a Black Wing, I am a...") + +sm.warpInstanceIn(931060030) +sm.startQuest(parentID) diff --git a/scripts/quest/q23616e.py b/scripts/quest/q23616e.py new file mode 100755 index 0000000..c5d2746 --- /dev/null +++ b/scripts/quest/q23616e.py @@ -0,0 +1,33 @@ +# Identity Crisis ; Xenon 4th Job + +ROO_D = 2300000 + +sm.setSpeakerID(ROO_D) +sm.sendNext("Why the serious face? Wait, you always look serious. Why the more-serious face?") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Roo-D, what if I never get my memories back? What if I threw away my whole life for something I'll never see?") +sm.setSpeakerID(ROO_D) +sm.sendSay("What? That's crazy! If you had stayed in that lab, Gelimer would have you... stomping on puppies or something! What if he'd ordered you to destroy Edelstein?! That could have been you!") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I know that, I don't regret leaving. But I feel an emptiness inside that I do not know how to deal with. You and Beryl do not seem to care about your past at all. Why does it trouble me so much? Am I... broken?") +sm.setSpeakerID(ROO_D) +sm.sendSay("No! You're great, just the way you are. There's nothing wrong with wanting to know who you are, #h #. But you and I are different, you know? Not everybody wants the same thing.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay(".....") +sm.setSpeakerID(ROO_D) +sm.sendSay("You taught me that Xenoroids are different. You and Beryl couldn't be less alike. That means we were meant to have different personalities. If anything, you wanting to find you memories makes you MORE human than the rest of us.") +sm.sendSay("I know you're struggling. This isn't gonna be easy for you. It could take years. But if it's something you want, I know you'll make the decision to pursue it, no matter how much pain it comes with. And that decision will always be yours to make. You're free now.") +sm.sendSay("Everybody can see that you're doing the right thing. That's why we all help you. It's not because they feel sorry for you, it's because they believe it's the right thing to do. Don't ever forget the friends you've found. You might have been enemies if you hadn't left the lab.") + +if not sm.canHold(1142578): + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() +sm.completeQuest(parentID) +sm.jobAdvance(3612) +sm.giveAndEquip(1353004) +sm.giveItem(1142578) + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Thank you for standing beside me, Roo-D. I hope that the choices I make will help you as much as they help me.") +sm.setSpeakerID(ROO_D) +sm.sendPrev("Don't mention it! I owe you my life. We're gonna be besties forever!") diff --git a/scripts/quest/q23620e.py b/scripts/quest/q23620e.py new file mode 100755 index 0000000..8ca6d8a --- /dev/null +++ b/scripts/quest/q23620e.py @@ -0,0 +1,42 @@ +# A Warm(er) Welcome ; Xenon level 200 quest + +CLAUDINE = 2151003 +BELLE = 1540431 +BRIGHTON = 1540554 +ELEX = 1540433 +CHECKY = 1540432 + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("What is it, Claudine?") +sm.setSpeakerID(CLAUDINE) +sm.sendSay("It's nothing urgent, but...") +sm.setSpeakerID(BELLE) +sm.sendSay("When you arrived in Edelstein, there was no time for pleasantries. Now that things have settled down a little, I thought we should welcome you like we would welcome any other member of our family.") +sm.setSpeakerID(BRIGHTON) +sm.sendSay("it's just a little welcome...") +sm.setSpeakerID(ELEX) +sm.sendSay("Don't get too excited, I just want to make sure you were introduced to everybody.") +sm.setSpeakerID(CHECKY) +sm.sendSay("I always feel so weird doing this kind of stuff...") +sm.setSpeakerID(BELLE) +sm.sendSay("Checky! What are you talking about? We're part of the same team!") +sm.setSpeakerID(CHECKY) +sm.sendSay("I'm not technically an original member of this group and...") +sm.setSpeakerID(BRIGHTON) +sm.sendSay("Hey. We're here to welcome #h #. So get over it") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Hahaha... Thank you all.") +sm.sendSay("(Wait, something feels strange.)") +sm.sendSay("(For some reason, I feel like #rthis has happened before#k...)") +sm.setSpeakerID(CLAUDINE) +sm.sendSay("Something wrong, #h #? You wandered off there.") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Oh, it's nothing.") +sm.setSpeakerID(CLAUDINE) +sm.sendSay("All right. Well, we got you a little gift. I mean, sort of. It'll teach you a new skill. I hope you'll use this as your new source of power when things get dark.\r\n#Wbasic#\r\n#s30021005# #q30021005#\r\n#i1142579:# #t1142579:#") +if not sm.canHold(1142579): + sm.sendSayOkay("Please make some space in your equipment inventory.") + sm.dispose() +sm.completeQuest(parentID) +sm.giveItem(1142579) +sm.giveSkill(30021005) diff --git a/scripts/quest/q23620s.py b/scripts/quest/q23620s.py new file mode 100755 index 0000000..623550c --- /dev/null +++ b/scripts/quest/q23620s.py @@ -0,0 +1,12 @@ +# A Warm(er) Welcome ; Xenon Level 200 Quest + +CLAUDINE = 2151003 + +sm.setSpeakerID(CLAUDINE) +sm.sendNext("Hello, #b#h ##k? Do you have time to come by Edelstein?") +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Is everything okay?") +sm.setSpeakerID(CLAUDINE) +if sm.sendAskYesNo("Yes, we're fine, but I could use your help. Can you come right away?"): + sm.startQuest(parentID) + sm.sendSayOkay("Come talk to me again later.") diff --git a/scripts/quest/q24002e.py b/scripts/quest/q24002e.py new file mode 100755 index 0000000..f247966 --- /dev/null +++ b/scripts/quest/q24002e.py @@ -0,0 +1,17 @@ +# Philius's Request + +PHILIUS = 1033202 + +sm.setSpeakerID(PHILIUS) +sm.sendNext("Maybe we're the lucky ones. " + "While we sleep, Maple World will heal from the terrible things the Black Mage has done. " + "I wonder what kind of world we'll wake up to?") + + +response = sm.sendAskYesNo("Your Highness, I will dream of a more beautiful world when we awaken...") + +if response: + sm.completeQuest(parentID) + sm.sendSayOkay("I wish you...sweet dreams...") + sm.startQuest(24005) # Cursed Slumber +sm.dispose() diff --git a/scripts/quest/q24003s.py b/scripts/quest/q24003s.py new file mode 100755 index 0000000..c75a5e2 --- /dev/null +++ b/scripts/quest/q24003s.py @@ -0,0 +1,6 @@ +# Peaceful Music ( Mercedes Intro ) +if sm.hasQuest(24000): # Astilda's Request + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.completeQuestNoRewards(24000) # Astilda's Request +sm.dispose() diff --git a/scripts/quest/q24004s.py b/scripts/quest/q24004s.py new file mode 100755 index 0000000..3eb7c46 --- /dev/null +++ b/scripts/quest/q24004s.py @@ -0,0 +1,11 @@ +# Barriers of Elluel + +sm.setSpeakerID(1033205) # Entrance to Elluel NPC +response = sm.sendAskYesNo("#b(You can see the wards to create the seal around Elluel. \r\n" + "Speaking the magic word will finisht eh spell, cutting the village off from the outside world for at least 100 years. \r\n" + "Activate the seal?)#k") + +if response: + sm.startQuestNoCheck(parentID) + sm.completeQuest(parentID) + sm.sendSayOkay("#b(The seal is complete, and the town is safe.)") diff --git a/scripts/quest/q24011e.py b/scripts/quest/q24011e.py new file mode 100755 index 0000000..1b2af6f --- /dev/null +++ b/scripts/quest/q24011e.py @@ -0,0 +1,4 @@ +if sm.getChr().getJob() == 2300: + sm.jobAdvance(2310) + sm.giveItem(1142337) + sm.completeQuest(parentID) diff --git a/scripts/quest/q24011s.py b/scripts/quest/q24011s.py new file mode 100755 index 0000000..a20c1e7 --- /dev/null +++ b/scripts/quest/q24011s.py @@ -0,0 +1,6 @@ +sm.setSpeakerID(1033210) # Great Spirit +response = sm.sendAskYesNo("Are you ready to take on great power?") + +if response: + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q24012s.py b/scripts/quest/q24012s.py new file mode 100755 index 0000000..04cb87e --- /dev/null +++ b/scripts/quest/q24012s.py @@ -0,0 +1,7 @@ +if sm.getChr().getJob() == 2310: + sm.jobAdvance(2311) + sm.setSpeakerID(1033210) + sm.sendSayOkay("I have advanced you to third job.") + sm.startQuest(parentID) + sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q24013s.py b/scripts/quest/q24013s.py new file mode 100755 index 0000000..2edb678 --- /dev/null +++ b/scripts/quest/q24013s.py @@ -0,0 +1,7 @@ +if sm.getChr().getJob() == 2311: + sm.jobAdvance(2312) + sm.setSpeakerID(1033210) + sm.sendSayOkay("I have advanced you to fourth job.") + sm.startQuest(parentID) + sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q25000s.py b/scripts/quest/q25000s.py new file mode 100755 index 0000000..60c461a --- /dev/null +++ b/scripts/quest/q25000s.py @@ -0,0 +1,13 @@ +sm.setSpeakerID(1402000) +sm.sendNext("All preparations complete. The #m150000000# is anchored directly above the Knight's Chamber and it does not appear that we have been spotted from below. ") +sm.sendSay("You will need to remain wary. The security in #m130000000# is currently on high alert. I suppose having this many of Maple World's leaders in one place warrants the rather excessive defense strategy they've adopted. ") +sm.sendSay("Still, they are only guards. It should not prove too difficult for a seasoned thief like yourself to slip past them unnoticed. Keep a close watch on their eyelines and you will be fine.") +sm.sendSay("The Lumiere will remain here until you return. Do not concern yourself with the pursuit. We'll keep the engine running.") + +response = sm.sendAskAccept("It is time for you to make your decision. Are you ready to infiltrate #m130000000#?") +if response: + sm.startQuestNoCheck(25000) + sm.sendSayOkay("I wish you luck.") +else: + sm.sendNext("The window of opportunity will not remain open forever.") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q25500e.py b/scripts/quest/q25500e.py new file mode 100755 index 0000000..32b7951 --- /dev/null +++ b/scripts/quest/q25500e.py @@ -0,0 +1,8 @@ +# Created by MechAviv +# Quest ID :: 25500 +# Eclipse and Sunfire + +sm.setSpeakerID(1032209) +LIGHT = sm.getQuestEx(25502, "light") +DARK = sm.getQuestEx(25502, "dark") +sm.sendSayOkay("I guess you're not quite ready to fully control Light and Darkness. Why don't you practice a little more? You reached Sunfire #b" + str(LIGHT) + " times#k and Eclipse #b" + str(DARK) + " times#k.") \ No newline at end of file diff --git a/scripts/quest/q25500s.py b/scripts/quest/q25500s.py new file mode 100755 index 0000000..dde71af --- /dev/null +++ b/scripts/quest/q25500s.py @@ -0,0 +1,100 @@ +# Created by MechAviv +# Quest ID :: 25500 +# Eclipse and Sunfire + +sm.setSpeakerID(1032209) +sm.sendNext("It's time for you to harness the powers of light and dark, and make them your own.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bHow does one go about doing such a thing?") + + +sm.setSpeakerID(1032209) +sm.sendSay("I wasn't done explaining. Look up, and to the right.\r\n#v3800300#\r\nCan you see something like this? A measure of your affinity for each side should be floating up there.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bWhat are those wings?") + + +sm.setSpeakerID(1032209) +sm.sendSay("Those are the Light and Dark points you can accumulate. Each way will max out at five. When you first appear, you will have one Light or Dark Point. #rUsing the #v3800310#Eclipse#k skill once#k will consume one Dark Point and take you into #bEclipse status, where your heart is filled with darkness#k.\r\n#v3800301#") + + +sm.setSpeakerID(1032209) +sm.sendSay("Using Dark magic will give you more points, one by one.\r\n#v3800302#") + + +sm.setSpeakerID(1032209) +sm.sendSay("#rThese Dark Points can be used through the #v3800310#Eclipse skill#k. Going into Eclipse will allow you to#k #bcast magic with no MP deal 50% more Dark magic damage#k. Of course, if you use #b#v3800309#Sunfire buff#k, you will drive off the dark immediately.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bI will never let darkness take my heart!") + + +sm.setSpeakerID(1032209) +sm.sendSay("Hahaha, I'm afraid you have very little choice, but do not worry. Dark is but the shadow cast by light. Neither is truly more good than the other. It is the person who controls that power that matters. And I'm sure #b#eyou'll#n#k handle it just fine, as opposed to...") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bThat's enough. How do I control this... curse?") + + +sm.setSpeakerID(1032209) +sm.sendSay("#bYou can wield both Light and Dark magic while using Eclipse. Just keep an eye on your points.\r\n#v3800303#") + + +sm.setSpeakerID(1032209) +sm.sendSay("Eclipse will remain active as long you still have points. #v3800310#, the Eclipse buff icon, will be on the top right. #bYour eye color and orb will change#k so that you can easily keep track.\r\n#v3800321#") + + +sm.setSpeakerID(1032209) +sm.sendSay("Dark magic is most powerful when your heart is full of darkness. #rUse Light Points in that state#k to fill your heart with Light#k.") + + +sm.setSpeakerID(1032209) +sm.sendSay("Conversely, #rwhen your heart is full of Light#k, the gauge will flash to let you know that you have activated Sunfire.\r\n#v3800304#") + + +sm.setSpeakerID(1032209) +sm.sendSay("The Sunfire buff icon #v3800309# will be displayed at the top right when #ryour heart is full of Light#k. #bYour eye color and orb will return to normal#k.\r\n#v3800320#") + + +sm.setSpeakerID(1032209) +sm.sendSay("The #bSunfire buff heals your HP by 1% with each cast, halves your MP cost, and lets you deal 50% more damage with Light magic. Very similar to Eclipse#k. You can still accumulate Light and Dark Points, just like Eclipse.\r\nYou'll return to Eclipse when you use Dark Points during Sunfire.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bI will use whichever power fills my heart to crush the enemies of good! I will wrestle control of this violent beast that resides deep inside.") + + +sm.setSpeakerID(1032209) +sm.sendSay("See for yourself which skills are enhanced below the gauge if you don't know what to use.\r\n \r\n#v3800312# #v3800315#\r\nDid you get all that?") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bI must test these powers.") + + +sm.setSpeakerID(1032209) +if sm.sendAskAccept("Yes, yes, very well. I hope you took notes, because I'm tired of giving lectures. Just go out and... I don't know... #bfill up both your light and dark completely#k. That'll be good practice."): + sm.startQuest(25500) + sm.setQuestEx(25502, "light", "0") + sm.setQuestEx(25502, "dark", "0") + sm.setQuestEx(25502, "mix", "0") + sm.setSpeakerID(1032209) + sm.removeEscapeButton() + sm.sendNext("Talk to me again after you have filled up each side once.") +else: + sm.setSpeakerID(1032209) + sm.sendSayOkay("You'll never get a handle on your powers if you don't practice. When did you get so lazy?") + + diff --git a/scripts/quest/q25503e.py b/scripts/quest/q25503e.py new file mode 100755 index 0000000..ba31294 --- /dev/null +++ b/scripts/quest/q25503e.py @@ -0,0 +1,12 @@ +# Created by MechAviv +# Quest ID :: 25503 +# Pressure Void Appreciation + +sm.setSpeakerID(1032209) +sm.sendNext("How was it? Did you fry yourself?") + + +sm.completeQuest(25503) +sm.giveExp(3000) +sm.setSpeakerID(1032209) +sm.sendPrev("#fUI/UIWindow2.img/QuestIcon/4/0#\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 3000 exp\r\n\r\nYour retinas look relatively uncharred. Good work!") \ No newline at end of file diff --git a/scripts/quest/q25503s.py b/scripts/quest/q25503s.py new file mode 100755 index 0000000..9783f6a --- /dev/null +++ b/scripts/quest/q25503s.py @@ -0,0 +1,34 @@ +# Created by MechAviv +# Quest ID :: 25503 +# Pressure Void Appreciation + +sm.setSpeakerID(1032209) +sm.sendNext("Good job on your 2nd Job Advancement, pal. Have you tried out Pressure Void yet? It's pretty hip...") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bI haven't tried it yet.") + + +sm.setSpeakerID(1032209) +sm.sendSay("Isn't that what you're supposed to DO when you get stronger? Try out all the fancy new spells? Back in my day-- actually, that story's pretty raunchy. Let me just tell you, Pressure Void is dangerous to use, but man it is something else to see...") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("#bI will devote myself to its mastery.") + + +sm.setSpeakerID(1032209) +if sm.sendAskAccept("Then get started right now! Use Pressure Void to crush three #b#o3501000##k monsters near Ellinel."): + sm.startQuest(25503) + sm.setSpeakerID(1032209) + sm.sendNext("Remember to aim up and down while you hold down the skill!!") + + sm.showFieldEffect("lightning/skillTuto/0", 0) +else: + sm.setSpeakerID(1032209) + sm.sendSayOkay("You'd better get used to this one...") + + diff --git a/scripts/quest/q25510s.py b/scripts/quest/q25510s.py new file mode 100755 index 0000000..bb298b8 --- /dev/null +++ b/scripts/quest/q25510s.py @@ -0,0 +1,34 @@ +# Created by MechAviv +# Quest ID :: 25510 +# The Middle Road + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.sendNext("Luminous! Snap out of it, will you? I'll resonate with the power of Light and draw the Dark out of you. Maybe then you'll come to your senses.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendSay("(Vieren's voice seems to be calming me. Peculiar.)") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendSay("The Dark no longer clouds my mind. You have my thanks.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.sendSay("It was nothing. All I did was help you find the strength to control your Dark. Here, this Aurora Prism will let you come and go as you please.") + +sm.giveItem(2430874) +sm.setJob(2710) +sm.giveSkill(27101100, 1, 20) +sm.giveSkill(27101202, 1, 20) +sm.addSP(2, True) +# Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 D3 11 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 43 15 00 00 FF 00 00 00 00 +sm.startQuest(25510) +sm.completeQuest(25510) \ No newline at end of file diff --git a/scripts/quest/q25511s.py b/scripts/quest/q25511s.py new file mode 100755 index 0000000..3e68eac --- /dev/null +++ b/scripts/quest/q25511s.py @@ -0,0 +1,23 @@ +# 25511 - [Job Adv] (Lv.60) The Power of Crystals +sm.removeEscapeButton() +sm.setSpeakerID(1032209) +sm.sendNext("Luminous, I've gathered the power of all the Auguries") +sm.sendNext("I'll use this power to melt the Dark right out of you.") +sm.sendNext("Remember, it's up to you to conquer your darkness. The Auguries will only help so much.") +sm.setPlayerAsSpeaker() +sm.sendNext("Have faith. I won't let the Dark take me again!") +sm.setSpeakerID(1032209) +sm.sendNext("Focus on this saying: #b #kOkay, here we go!") +sm.setPlayerAsSpeaker() +sm.sendNext("AAAUGH!") +sm.setSpeakerID(1032209) +sm.sendNext("You did it! That wasn't so bad, was it?") +sm.setPlayerAsSpeaker() +sm.sendNext("(What is this new energy that courses through my body? It's as though the Light and Dark merged into one...)") +sm.setSpeakerID(1032209) +sm.sendNext("You should rest up for now. We can talk later.") +sm.setJob(2711) +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.addSP(4) + diff --git a/scripts/quest/q25512s.py b/scripts/quest/q25512s.py new file mode 100755 index 0000000..281885f --- /dev/null +++ b/scripts/quest/q25512s.py @@ -0,0 +1,9 @@ +# 25511 - [Job Adv] (Lv.100) Epiphany +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendNext("(I feel the Light and Dark within me coming together, merging into a new kind of energy!)") +sm.sendNext("(I've reached a new level of balance between the Light and Dark.)") +sm.setJob(2712) +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.addSP(3) \ No newline at end of file diff --git a/scripts/quest/q25530s.py b/scripts/quest/q25530s.py new file mode 100755 index 0000000..cf3aba2 --- /dev/null +++ b/scripts/quest/q25530s.py @@ -0,0 +1,48 @@ +# Created by MechAviv +# Quest ID :: 25530 +# Sojourn's End + +sm.setSpeakerID(1032205) +sm.sendNext("Don't be so hard on yourself, okay? It wasn't your fault...") + + +sm.setSpeakerID(1032206) +sm.flipDialogue() +sm.sendSay("Really? Then who was it that blew up our house?!!") + + +sm.setSpeakerID(1032205) +sm.setPlayerAsSpeaker() +sm.sendSay("I am afraid it is my responsibility, #p1032206#. I have hidden myself these past years in a life I had only dreamt of, but if my power were to harm you again...") + + +sm.setSpeakerID(1032205) +sm.sendSay("Don't try to make this about me! We can find a way around this. Don't leave...") + + +sm.setSpeakerID(1032205) +sm.setPlayerAsSpeaker() +sm.sendSay("I must. If I do not drive the darkness from my heart, there will be no future for us. I will return when my quest is complete.") + + +sm.setSpeakerID(1032205) +sm.sendSay("You don't have to do this...") + + +sm.setSpeakerID(1032205) +sm.setPlayerAsSpeaker() +sm.sendSay("I swear, it is the only course of action that will keep us safe. Penny will protect you while I am away.") + + +sm.setSpeakerID(1032206) +sm.flipDialogue() +sm.sendSay("That's what I do! I'll scare everybody off, meow!") + + +sm.setSpeakerID(1032205) +sm.setPlayerAsSpeaker() +sm.sendSay("(Why do I keep thinking about the time I left Harmony? This will be different!)\r\nYou had better. I... will see you both soon.") + +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(480) \ No newline at end of file diff --git a/scripts/quest/q25531s.py b/scripts/quest/q25531s.py new file mode 100755 index 0000000..0336190 --- /dev/null +++ b/scripts/quest/q25531s.py @@ -0,0 +1,65 @@ +# Created by MechAviv +# Quest ID :: 25531 +# Light Reborn +from net.swordie.ms.enums import UIType + + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.sendDelay(1000) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("To stop the power of darkness, I must first recover the power of light.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I can still feel the light's warmth deep within my heart. The darkness has not hidden it completely...") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I must find my center once more. Remember the teachings of Aurora. Balance, harmony, courage...") + +sm.startQuest(25531) +sm.completeQuest(25531) +sm.giveExp(762) +sm.giveAndEquip(1212001) +sm.giveAndEquip(1352400) +sm.giveItem(2001502, 30) +sm.giveItem(2001506, 30) +sm.sendDelay(900) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("The power of light embraces me! This darkness will not prevail.") + + +sm.sendDelay(900) + + +sm.progressMessageFont(3, 20, 20, 0, "Level up to increase your stats. Hotkey [S] / Secondary Key [C]") +sm.sendDelay(1500) + + +sm.openUI(UIType.UI_STAT) +sm.sendDelay(900) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# Unhandled Stat Changed [16640] Packet: 01 00 00 41 00 00 00 00 00 00 3F 00 00 00 FF 00 00 01 1A 00 +# Inventory Operation with 1 operations. +# [SET_ACTIVE_EMOTICON_ITEM] [0A 56 D3 00 00 00 00 00 00 00 00 00 ] diff --git a/scripts/quest/q25532s.py b/scripts/quest/q25532s.py new file mode 100755 index 0000000..8b915e6 --- /dev/null +++ b/scripts/quest/q25532s.py @@ -0,0 +1,60 @@ +# Created by MechAviv +# Quest ID :: 25532 +# Rehabilitation +from net.swordie.ms.enums import UIType + + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.sendDelay(1000) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("I must never turn from the Light again. My full power is not yet restored, but it is only a matter of time.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("But Lania will be easy prey to the monsters here when I'm gone. I should see to them before I leave.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("My enemies await on the other side of that portal. My Light will cleanse them from Maple World!") + +sm.startQuest(25532) +sm.sendDelay(900) + + +sm.progressMessageFont(3, 20, 20, 0, "Level up to increase your skill level. Skills can be assigned to hotkeys. Hotkey [K]") +sm.sendDelay(1500) + + +sm.openUIWithOption(UIType.UI_SKILL, 27001100) +sm.sendDelay(1500) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("You should level up Flash Shower, your basic attack skill. Assign it to your hotkeys and get ready to use it.") + + +sm.sendDelay(600) + + +sm.sendDelay(900) +sm.avatarOriented("UI/tutorial.img/8") + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/quest/q25533s.py b/scripts/quest/q25533s.py new file mode 100755 index 0000000..58dd6ba --- /dev/null +++ b/scripts/quest/q25533s.py @@ -0,0 +1,29 @@ +# Created by MechAviv +# Quest ID :: 25533 +# The Guardian Returns + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("The first step is to find out what has happened to this world while I was gone. And what of those who fought beside me? What of Aurora and it's masters? I must find the answers.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Perhaps the nearby village will have answers for me.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("The world has changed in my years of slumber. Thankfully, I have a map I can check by pressing #b#e[W] (basic key setting) or [N] (secondary key settings)#n#k.") + +sm.startQuest(25533) +sm.completeQuest(25533) +sm.giveExp(900) +sm.startQuest(25559) +sm.warp(101000000, 15) diff --git a/scripts/quest/q25560s.py b/scripts/quest/q25560s.py new file mode 100755 index 0000000..6f6b18d --- /dev/null +++ b/scripts/quest/q25560s.py @@ -0,0 +1,60 @@ +# Created by MechAviv +# Quest ID :: 25560 +# Containing Darkness +from net.swordie.ms.enums import UIType + + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.sendDelay(1000) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Is this how the Black Mage understood the world? I see now that everyone else is beneath me!") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("My soul was almost lost to the power of darkness. I see its appeal, but I would not have it erode my entire being. I will learn to harness it, and make it my own. ") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("But first, I must master my new magic. My old weapons of Light will now be tools of the Dark.") + + +sm.giveAndEquip(1212001) +sm.giveAndEquip(1352400) +sm.giveItem(2001502, 30) +sm.giveItem(2001506, 30) +sm.startQuest(25560) +sm.completeQuest(25560) +sm.giveExp(1280) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Yes, it feels good to have a weapon in my hands once more. Now, who shall I test my new powers on first...") + + +sm.sendDelay(900) + + +sm.progressMessageFont(3, 20, 20, 0, "Level up to increase your stats. Hotkey [S] / Secondary Key [C]") +sm.sendDelay(1500) + + +sm.openUI(UIType.UI_STAT) +sm.sendDelay(900) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/quest/q25561s.py b/scripts/quest/q25561s.py new file mode 100755 index 0000000..3ede8d8 --- /dev/null +++ b/scripts/quest/q25561s.py @@ -0,0 +1,47 @@ +# Created by MechAviv +# Quest ID :: 25561 +# The Power Is Yours +from net.swordie.ms.enums import UIType + + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.sendDelay(1000) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("I must test the limits of both light and darkness.") + + +sm.sendDelay(900) + + +sm.progressMessageFont(3, 20, 20, 0, "Level up to increase your skill level. Skills can be assigned to hotkeys. Hotkey [K]") +sm.sendDelay(1500) + + +sm.openUIWithOption(UIType.UI_SKILL, 27001201) +sm.sendDelay(1500) + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("I can add Abyssal Drop to my hotkeys and use it to annihilate #b10 Bubblings#k.") + + +sm.sendDelay(600) + + +sm.sendDelay(900) +sm.avatarOriented("UI/tutorial.img/8") + + +sm.startQuest(25561) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) \ No newline at end of file diff --git a/scripts/quest/q25562s.py b/scripts/quest/q25562s.py new file mode 100755 index 0000000..a0f7870 --- /dev/null +++ b/scripts/quest/q25562s.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# Quest ID :: 25562 +# Fostering the Dark + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Dark magic is so much easier than light...") + + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("But I do not fully understand it. With every minor touch, I feel the lust for destruction well up within me. It would be foolish to use this power without more understanding.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("It's time I left this forest and found some answers.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("The world has changed in the last few centuries. Thankfully, I have a map I can check by pressing #b#e[W] (basic key setting) or [N] (secondary key settings)#n#k.") + +sm.startQuest(25562) +sm.completeQuest(25562) +sm.giveExp(900) +sm.startQuest(25559) \ No newline at end of file diff --git a/scripts/quest/q25566e.py b/scripts/quest/q25566e.py new file mode 100755 index 0000000..f466749 --- /dev/null +++ b/scripts/quest/q25566e.py @@ -0,0 +1,12 @@ +# Created by MechAviv +# Quest ID :: 25566 +# Terror of the Library + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Does this library have no filing system? How am I supposed to find anything in this mess?") + + +sm.completeQuest(25566) +sm.giveExp(1068) diff --git a/scripts/quest/q25566s.py b/scripts/quest/q25566s.py new file mode 100755 index 0000000..08f42a8 --- /dev/null +++ b/scripts/quest/q25566s.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# Quest ID :: 25566 +# Terror of the Library + +sm.setSpeakerID(1032208) +sm.sendNext("What are you doing? This is a PUBLIC library!") + + +sm.setSpeakerID(1032208) +sm.setPlayerAsSpeaker() +sm.sendSay("Out of my way, child!") + + +sm.setSpeakerID(1032208) +sm.sendSay("You can't just do whatever you want!") + + +sm.setSpeakerID(1032208) +sm.setPlayerAsSpeaker() +sm.sendSay("Oh? How do you intend to stop me?") + + +sm.setSpeakerID(1032208) +sm.sendSay("Uh... Gulp!") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendSay("Begone! I've no time for the likes of you.") + + +sm.startQuest(25566) diff --git a/scripts/quest/q25567s.py b/scripts/quest/q25567s.py new file mode 100755 index 0000000..38fb2b8 --- /dev/null +++ b/scripts/quest/q25567s.py @@ -0,0 +1,43 @@ +# Created by MechAviv +# Quest ID :: 25567 +# Killing Time + +sm.setSpeakerID(1032208) +sm.sendNext("E-excuse me... You can't just go digging through the books like that...") + + +sm.setSpeakerID(1032208) +sm.setPlayerAsSpeaker() +sm.sendSay("There is something I need immediately. I must find it before the darkness swallows me whole.") + + +sm.setSpeakerID(1032208) +sm.sendSay("J-just let me help! Grendel will light my hair on fire if he sees the library like this. What are you looking for?") + + +sm.setSpeakerID(1032208) +sm.sendSay("R-right. I actually know all about this...") + + +sm.setSpeakerID(1032208) +sm.sendSay("O-okay! Just don't hurt me, please...") + + +sm.setSpeakerID(1032208) +sm.setPlayerAsSpeaker() +sm.sendSay("Do not fear, I would not harm you. I must go and unleash the fury within me upon some monsters before I am unable to bear it any longer. Please look for the book while I am away... ") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendSay("Some Royal Fairies would make acceptable target practice.") + + +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.sendSay("This old Teleport Scroll will take me where I must go.") + + +sm.startQuest(25567) diff --git a/scripts/quest/q25568s.py b/scripts/quest/q25568s.py new file mode 100755 index 0000000..b26e0e6 --- /dev/null +++ b/scripts/quest/q25568s.py @@ -0,0 +1,17 @@ +# Created by MechAvive +# Quest ID :: 25568 +# Moth-Eaten Scroll + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("The Aurora emblem is dimmer than I remember, but this is it. Is it the scroll's age, or the darkness within me?") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Little matter. Time to see what secrets this scroll holds.\r\n#b#k") + +sm.startQuest(25568) diff --git a/scripts/quest/q25569s.py b/scripts/quest/q25569s.py new file mode 100755 index 0000000..4d9a5b4 --- /dev/null +++ b/scripts/quest/q25569s.py @@ -0,0 +1,5 @@ +# Created by MechAviv +# Quest ID :: 25569 +# Dark Rage + +sm.warp(910142041, 0) diff --git a/scripts/quest/q25572s.py b/scripts/quest/q25572s.py new file mode 100755 index 0000000..87653bf --- /dev/null +++ b/scripts/quest/q25572s.py @@ -0,0 +1,55 @@ +# Created by MechAviv +# Quest ID :: 25572 +# Grendel's Deal + +sm.setSpeakerID(1032001) +sm.sendNext("Where did you learn Dark magic? Not just anyone can pick it up.") + + +sm.setSpeakerID(1032001) +sm.setPlayerAsSpeaker() +sm.sendSay("It is no business of yours. Now, if you value your life, you'll tell me all you know of the darkness.") + + +sm.setSpeakerID(1032001) +sm.sendSay("I could spend all year teaching you about Dark magic, but why should I? Especially after what you did to Lolo...") + + +sm.setSpeakerID(1032001) +sm.setPlayerAsSpeaker() +sm.sendSay("You should thank me for ridding you of that pest!") + + +sm.setSpeakerID(1032001) +sm.sendSay("Power of dark consumed you more than expected. I may be old, I'm no pushover.") + + +sm.setSpeakerID(1032001) +sm.setPlayerAsSpeaker() +sm.sendSay("Ah, power of darkness is still trying to come out. I don't mean all those belligerent words that are coming out. Please understand. Whew... what should I do?") + + +sm.setSpeakerID(1032001) +sm.sendSay("Harumph! At this rate, we're liable to blow each other to smithereens. Why don't we discuss this like civilized people? I'm sure we can make a deal of some sort.") + + +sm.setSpeakerID(1032001) +sm.setPlayerAsSpeaker() +sm.sendSay("Tell me what I must do.") + + +sm.setSpeakerID(1032001) +sm.sendSay("Give me just a second. Let's see here...") + + +sm.setSpeakerID(1032001) +sm.sendSay("The monsters around Ellinia have been causing a ruckus lately. If you take care of them for me, then I'll find what you're looking for.") + + +sm.setSpeakerID(1032001) +sm.removeEscapeButton() +sm.sendSay("(I've never felt such darkness before. Is this my karma for dabbling in Dark magic when I was a kid? Don't worry, Lolo. I'll save you...)") + +sm.startQuest(25572) +sm.completeQuest(25572) +sm.giveExp(1001) \ No newline at end of file diff --git a/scripts/quest/q25578s.py b/scripts/quest/q25578s.py new file mode 100755 index 0000000..faf1cf7 --- /dev/null +++ b/scripts/quest/q25578s.py @@ -0,0 +1,31 @@ +# Created by MechAviv +# Quest ID :: 25578 +# The Sanctum of Harmony + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("For your sake, you'd better deliver.") + + +sm.setSpeakerID(1032204) +sm.flipDialogue() +sm.setSpeakerType(3) +sm.sendSay("The path to Aurora is clear. All one must do is open his mind...") + + +sm.setSpeakerID(1032204) +sm.flipDialogue() +sm.setSpeakerType(3) +sm.sendSay("...The path to Aurora is guarded by four paradoxes: #k.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("So, I must solve these paradoxes to reach Aurora. If I still had Light magic, I could get there easily. But the power of Dark is a worthy trade...") + +sm.startQuest(25578) +sm.completeQuest(25578) +sm.giveExp(2100) diff --git a/scripts/quest/q25584s.py b/scripts/quest/q25584s.py new file mode 100755 index 0000000..42341b7 --- /dev/null +++ b/scripts/quest/q25584s.py @@ -0,0 +1,50 @@ +# Created by MechAviv +# Quest ID :: 25584 +# Secret Ritual + +sm.setSpeakerID(1032001) +sm.sendNext("And that concludes our deal. Goodbye, farewell, and don't let the door hit your butt on the way out!") + + +sm.setSpeakerID(1032001) +sm.setPlayerAsSpeaker() +sm.sendSay("Not so fast. There's one more thing I need.") + + +sm.setSpeakerID(1032001) +sm.sendSay("What is it now? I've helped you enough!") + + +sm.setSpeakerID(1032001) +sm.setPlayerAsSpeaker() +sm.sendSay("Calm yourself, old man. All I need is a secluded place to do my ritual. Preferably someplace with an ample supply of magical energy.") + + +sm.setSpeakerID(1032001) +sm.sendSay("Hm. I know just the place. The Black Wings used to hold their meetings there; seems like a good fit for someone like you. Head to the #beast end of the Golem Temple Entrance#k and take the portal. #bDouble-click on the Vampiric Lantern#k to teleport nearby.") + + +sm.setSpeakerID(1032001) +sm.setPlayerAsSpeaker() +sm.sendSay("By my virtue, I will return Lolo to you now. I.. believe I have enough control over the power of darkness to do so.") + + +sm.setSpeakerID(1032001) +sm.sendSay("I am glad you didn't forget. Perhaps the darkness has not claimed you entirely just yet.") + + +sm.startQuest(25584) +sm.setSpeakerID(1032208) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendSay("G-G-Grendel! It was dark and cold and I was s-s-s-scared!!") + + +sm.setSpeakerID(1032001) +sm.removeEscapeButton() +sm.sendSay("Lolo! You're safe!") + + +sm.setSpeakerID(1032001) +sm.removeEscapeButton() +sm.sendPrev("Heed my words. The power of darkness is much more dangerous than you think. Learn to control it before the worst happens.") diff --git a/scripts/quest/q25585s.py b/scripts/quest/q25585s.py new file mode 100755 index 0000000..df9bf92 --- /dev/null +++ b/scripts/quest/q25585s.py @@ -0,0 +1,24 @@ +# Created by MechAviv +# Quest ID :: 25585 +# Harmony + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Yes, the energies are resonating. The path to Harmony is about to open.") + + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("With the power of Aurora, I will have absolute control over the Dark. I must not let it overcome me.") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Now all I must do to reach Harmony is use the Vampiric Lantern...") + + +sm.startQuest(25585) \ No newline at end of file diff --git a/scripts/quest/q25586s.py b/scripts/quest/q25586s.py new file mode 100755 index 0000000..6a5e139 --- /dev/null +++ b/scripts/quest/q25586s.py @@ -0,0 +1,39 @@ +# Created by MechAviv +# Quest ID :: 25586 +# Light Versus Dark + +sm.setSpeakerID(1032209) +sm.sendNext("Luminous? Is that you? But what's this darkness I'm sensing on you?") + + +sm.setSpeakerID(1032209) +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("You yet live? What a surprise.") + + +sm.setSpeakerID(1032209) +sm.sendSay("Luminous!") + + +sm.setSpeakerID(1032209) +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("You've no need to worry! I've finally seen the light, as it were. I've claimed the power of the Dark!") + + +sm.setSpeakerID(1032209) +sm.sendSay("Huh. Luminous, the guardian of Light and hero who defeated the Black Mage, now a Dark Magician himself...") + + +sm.setSpeakerID(1032209) +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("You should try it for yourself, Vieren. It feels...indescribable!") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.sendSay("...") + +sm.startQuest(25586) +sm.completeQuest(25586) +sm.giveExp(9136) +sm.warp(910142050, 0) diff --git a/scripts/quest/q25588s.py b/scripts/quest/q25588s.py new file mode 100755 index 0000000..313df7f --- /dev/null +++ b/scripts/quest/q25588s.py @@ -0,0 +1,47 @@ +# Created by MechAviv +# Quest ID :: 25588 +# Seeking Serenity + +sm.setSpeakerID(1032209) +sm.sendNext("You aren't out of the woods yet. You never know when the Dark might claim you again.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("You're right. I cannot let my guard down.") + + +sm.setSpeakerID(1032209) +sm.sendSay("Why don't you try making the darkness yours?") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("Is such a thing even possible?") + + +sm.setSpeakerID(1032209) +sm.sendSay("I already told you, Light and Dark are practically the same thing! Don't worry, I'll help. Maybe we can even grant our teacher's dying wish.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("The master had a dying wish?") + + +sm.setSpeakerID(1032209) +sm.sendSay("Yes. How'd it go again? Ahem! #rWhoever wants to conquer the Dark must collect the Auguries and combine their strength.#k And I happen to know where the Auguries are.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("I suppose we should gather them.") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.sendSay("There are 5 Auguries all together. We'll start with #bthe first two#k for now, and worry about the others later.") + +sm.startQuest(25588) +sm.completeQuest(25588) +sm.giveExp(1529) diff --git a/scripts/quest/q25589s.py b/scripts/quest/q25589s.py new file mode 100755 index 0000000..7b64121 --- /dev/null +++ b/scripts/quest/q25589s.py @@ -0,0 +1,33 @@ +# Created by MechAviv +# Quest ID :: 25589 +# Finding the First Augury + +sm.setSpeakerID(1032209) +sm.sendNext("Ordinary folk can't see them, but those of us with the power of Light can make 'em come out just by being nearby.") + + +sm.setSpeakerID(1032209) +sm.setPlayerAsSpeaker() +sm.sendSay("This task will hardly be challenging.") + + +sm.setSpeakerID(1032209) +sm.sendSay("Don't speak to soon! They're hidden in some pretty dangerous places. The first Augury is held by one of the greedy monster kings of Victoria Island.") + + +sm.setSpeakerID(1032209) +sm.sendSay("I'm suspicious of the Mole King of #bEllinel Fairy Academy#k, to the northeast of Victoria Island. He is, to put it simply, the worst. ") + + +sm.setSpeakerID(1032209) +sm.sendSay("Thing is, I've heard that the fairies're in trouble. You'll probably have to help them out before you can get the Augury. #bAnyway, I'll send you on your way.#k") + + +sm.setSpeakerID(1032209) +sm.removeEscapeButton() +sm.sendSay("When you get there, look for #bFanzy#k the cat. Use the Aurora Prism when you want to return.") + + +sm.startQuest(25589) +#sm.createQuestWithQRValue(32147, "0") +#sm.warp(101030000, 0) \ No newline at end of file diff --git a/scripts/quest/q2560s.py b/scripts/quest/q2560s.py new file mode 100755 index 0000000..f1b8896 --- /dev/null +++ b/scripts/quest/q2560s.py @@ -0,0 +1,15 @@ +MONKEY = 1096003 + +sm.setSpeakerID(MONKEY) +sm.sendNext("Ooook! Ook! Ook!") + +sm.setPlayerAsSpeaker() +sm.sendSay("Well, that hit the spot, but... I still don't understand what happened. Where's the ship? Hey, do you know what happened to me?") + + +sm.setSpeakerID(MONKEY) +if sm.sendAskAccept("Oook! (The monkey nods. Does he really know what's going on? Couldn't hurt to ask.)"): + sm.startQuest(parentID) +else: + sm.sendNext("Ook! Ook! (The monkey looks very dissatisfied.)") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2561s.py b/scripts/quest/q2561s.py new file mode 100755 index 0000000..97c1573 --- /dev/null +++ b/scripts/quest/q2561s.py @@ -0,0 +1,31 @@ +MONKEY = 1096003 + +sm.setSpeakerID(MONKEY) +sm.sendNext("Ook, ook! Oook! Ook! Ook! Ook?!") + +sm.setPlayerAsSpeaker() +sm.sendSay("I remember...I was on my way to Maple Island, to become an Explorer... What happened? What's going on?") + +sm.setSpeakerID(MONKEY) +sm.sendSay("Oook! Ook! Ook! Oooook!") + +sm.setPlayerAsSpeaker() +sm.sendSay("I was talking to the captain, and admiring the scenery, and... Balrog! Balrog attacked the ship! So... Did I fall overboard? Then, why am I alive? I know #bI can swim#k, but can I swim while unconscious? Maybe I can. Maybe I'm a natural swimmer!") + +sm.setSpeakerID(MONKEY) +sm.sendSay("Ooook! Ook! Ook! (Huh, a little monkey...tapping its foot angrily. Actually, when I first woke up, that monkey was the only thing I saw...)") + +sm.setPlayerAsSpeaker() +sm.sendSay("Huh? Why are you waving your arms like that? Are you trying to tell me something? (The monkey took an apple out of the nearby chest. It looks delicious. But, what is he trying to tell you?)\r\n\r\n#i2010000#") + +sm.setSpeakerID(MONKEY) +if sm.sendAskAccept("Ook ook! Om nom nom! (The monkey looks frustrated that you don't understand him. He pretends to eat the apple. Wait, does he want YOU to eat it? That must be it! What a nice monkey.)"): + sm.giveItem(2010000) + sm.startQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendNext("(You have received a delicious-looking apple. You should eat it. Now...how do you open your Inventory? Was it the #bI#k key...?)") + sm.avatarOriented("UI/tutorial.img/cannon/2") +else: + sm.setPlayerAsSpeaker() + sm.sendNext("The thing is, I don't like apples... Sorry, but no thanks.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2568s.py b/scripts/quest/q2568s.py new file mode 100755 index 0000000..958f91c --- /dev/null +++ b/scripts/quest/q2568s.py @@ -0,0 +1,9 @@ +CUTTER = 1096005 + +sm.setSpeakerID(CUTTER) +if sm.sendAskAccept("You're back! Great. I got the Ignition Device all hooked up, so we can get back to civilization. Nothing left to do here, right? Let's roll!"): + sm.startQuest(parentID) + sm.warp(912060200, 0) +else: + sm.sendNext("You're not done here? What could you POSSIBLY want to do on a mostly-deserted island?") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2570e.py b/scripts/quest/q2570e.py new file mode 100755 index 0000000..f003df8 --- /dev/null +++ b/scripts/quest/q2570e.py @@ -0,0 +1,35 @@ +KYRIN = 1090000 + +sm.setSpeakerID(KYRIN) +sm.sendNext("Good to see you, #h0#. So...you're the one that helped Cutter return. I saw you were hurt when you first arrived...are you okay now? You must be made of stern stuff. No wonder Cutter regards you so highly. My name is Kyrin. I'm captain of the Nautilus, as well as the Job Instructor for Pirates.") +sm.sendSay("Cutter told you that he wants you to become a #bCannoneer#k, right? I agree with him, but I'm worried that your heart might not be in it. Maybe if you knew more about the pirates, you would be more interested. Let me tell you a little about us.") +sm.sendSay("I brought the pirates together to start working against the Black Mage, the great evil that threatens all of Maple World. Turns out the hero business is more profitable than looting and pillaging!") +sm.sendSay("If you become a Pirate, you can help investigate the Black Mage's plots, and assist in the defense of Maple World. Keep in mind that I won't make you do anything...I'm primarily a Job Instructor, and just guide the pirates in a general sense.") +sm.sendSay("But, I know you would help us fight the Black Mage. You have that gleam in your eye that all heroes do. Anyway, I've said my piece.") + +if sm.sendAskAccept("Now, it's all up to you. Do you wish to join the pirates? I would be quite pleased if you became a Cannoneer. "): + sm.giveItem(1532000) + sm.giveItem(1002610) + sm.giveItem(1052095) + sm.giveItem(1142107) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.completeQuest(29900) + sm.jobAdvance(501) + sm.giveSkill(109, 1, 1) + sm.setAP(35) + sm.setDEX(4) + sm.setSTR(23) + sm.startQuest(17903) + sm.completeQuest(17903) + sm.systemMessage("You cleared the Adventure Journal mission.") + sm.sendNext("Now you're one of us. Take a look at your skills and make yourself into a real Pirate. I even gave you some extra SP to get started.") + sm.avatarOriented("Effect/OnUserEff.img/RecordClear_BT/clear") + sm.sendSay("Skills alone do not make you a great pirate. You have to distribute your stats like a pirate, too! If you're hoping to become a Cannoneer, invest heavily in STR so you can hold that heavy cannon of yours. And if you just have no idea, use the #bauto-distribute#k option. Simple, and effective.") + sm.sendSay("Oh, I gave you a little gift, too. I expanded a few slots in your Equip and ETC Item tabs, so you should have plenty of room for your spoils!") + sm.sendSay("Now, there is one last thing that you need to remember. More than anything else, you need to keep your HP up. If you fall in battle, you'll lose some of your EXP. And I'm SURE you don't want that, right?") + sm.sendSay("Well, that's it! I have taught you everything you need to know. I also gave you a few decent weapons, so make good use of them. Now, go forth, grow stronger, and kick around the Black Mage's minions, if you get the chance!") + +else: + sm.sendNext("Oh. So...you want to be something else? I understand...but Cutter might not...") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q25710s.py b/scripts/quest/q25710s.py new file mode 100755 index 0000000..1767709 --- /dev/null +++ b/scripts/quest/q25710s.py @@ -0,0 +1,11 @@ +# q25710s - Kaiser 2nd job advancement + +if chr.getJob() == 6100: + if(sm.giveAndEquip(1352501)): + sm.jobAdvance(6110) + sm.completeQuest(25710) + else: + sm.sendSayOkay("Please clear a slot within your equip inventory.") +else: + sm.sendSayOkay("You're currently not a first job Kaiser.") +sm.dispose() diff --git a/scripts/quest/q25711s.py b/scripts/quest/q25711s.py new file mode 100755 index 0000000..84a4bb2 --- /dev/null +++ b/scripts/quest/q25711s.py @@ -0,0 +1,11 @@ +# q25711s - Kaiser 3rd job advancement + +if chr.getJob() == 6110: + if(sm.giveAndEquip(1352502)): + sm.jobAdvance(6111) + sm.completeQuest(25711) + else: + sm.sendSayOkay("Please clear a slot within your equip inventory.") +else: + sm.sendSayOkay("You're currently not a second job Kaiser.") +sm.dispose() diff --git a/scripts/quest/q25712s.py b/scripts/quest/q25712s.py new file mode 100755 index 0000000..9cd0019 --- /dev/null +++ b/scripts/quest/q25712s.py @@ -0,0 +1,11 @@ +# q25712s - Kaiser 4th job advancement + +if chr.getJob() == 6111: + if(sm.giveAndEquip(1352503)): + sm.jobAdvance(6112) + sm.completeQuest(25712) + else: + sm.sendSayOkay("Please clear a slot within your equip inventory.") +else: + sm.sendSayOkay("You're currently not a third job Kaiser.") +sm.dispose() diff --git a/scripts/quest/q2573s.py b/scripts/quest/q2573s.py new file mode 100755 index 0000000..e9af8cf --- /dev/null +++ b/scripts/quest/q2573s.py @@ -0,0 +1,12 @@ +SKIPPER = 1096000 + +sm.setSpeakerID(SKIPPER) +sm.sendNext("Greetings! Isn't this just the perfect weather for a journey? I'm Skipper, the captain of this fine ship. You must be a new Explorer, eh? Nice to meet you.") + +if sm.sendAskAccept("We're not quite ready to leave, so feel free to look around the ship while we're waiting."): + sm.sendNext("Looks like we're all set! I think this is going to be a great voyage. Let's get underway.") + sm.startQuest(parentID) + sm.warp(3000000, 0) +else: + sm.sendNext("Hey, take it easy! Sometimes you just gotta wait.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q25825s.py b/scripts/quest/q25825s.py new file mode 100755 index 0000000..8f95451 --- /dev/null +++ b/scripts/quest/q25825s.py @@ -0,0 +1,33 @@ +# 25825 - [Job Advancement] Agent of Justige (AB 2nd job adv) + +ESKALADE_NPC_ID = 3000018 + +if chr.getLevel() >= 30 and chr.getJob() == 6500: + sm.setSpeakerID(ESKALADE_NPC_ID) + sm.sendNext("Looking pretty tough there, #h #.") +else: + sm.dispose() + +sm.setSpeakerID(ESKALADE_NPC_ID) +sm.setPlayerAsSpeaker() +sm.sendNext("Yeah? I'm totally rocking this Heroine of Justice thing.") +sm.sendNext("Have you noticed feeling a lot closer to me lately? Our pact has been getting stronger and stronger...") +sm.setPlayerAsSpeaker() +sm.sendNext("Uh, is that good?.") +sm.sendNext("What could be bad about getting closer to your dragon-lord? We need to move and act as one.") +sm.setPlayerAsSpeaker() +sm.sendNext("That sounds complicated... and gross. What are you getting at?") +sm.sendNext("I'm trying to let you use my muscle more! You never trust me...") +sm.setPlayerAsSpeaker() +sm.sendNext("I could use some more strength!") +response = sm.sendAskYesNo("I knew you'd be swayed by a little extra power. Let's strengthen our bond.") +if response: + sm.jobAdvance(6510) + sm.dispose() + sm.completeQuest(25825) + sm.giveAndEquip(1352602) # secondary + chr.setSpToCurrentJob(5) + sm.sendNext("Now focus!") +else: + sm.sendSayOkay("What happened to wanting more power?") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q25826s.py b/scripts/quest/q25826s.py new file mode 100755 index 0000000..a1ba2ea --- /dev/null +++ b/scripts/quest/q25826s.py @@ -0,0 +1,44 @@ +# 25825 - [Job Advancement] Agent of Justige (AB 2nd job adv) + +ESKALADE_NPC_ID = 3000132 + +if chr.getLevel() >= 60 and chr.getJob() == 6510: + sm.setPlayerAsSpeaker() + sm.sendNext("Eskalade, how come all my skills are getting... pinker?") +else: + sm.dispose() + +sm.setSpeakerID(ESKALADE_NPC_ID) +sm.sendNext("Well, it IS my favorite color. Maybe it means you're getting better at using my power.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Wait, your favorite color is pink? Why do I get the only dragon who loves cutesy things?") + +sm.setSpeakerID(ESKALADE_NPC_ID) +sm.sendNext("This whole thing would be a lot easier if you just gave in to my supreme will and played along.") + +sm.setPlayerAsSpeaker() +sm.sendNext("You seriously can't make the pink go away?") + +sm.setSpeakerID(ESKALADE_NPC_ID) +sm.sendNext("Nope! You can just deal with it. Besides, it's a good color for you. Brings out your rosy cheeks." + "Now, do you want to synchronize souls again?") + +sm.setPlayerAsSpeaker() +sm.sendNext("Yeah, I guess so... I'll get stronger, right?") + +sm.setSpeakerID(ESKALADE_NPC_ID) +sm.sendNext("Absolutely! You will become my genuine pink angel.") + +sm.setPlayerAsSpeaker() +sm.sendNext("I really don't know about this...") + +sm.setSpeakerID(ESKALADE_NPC_ID) +response = sm.sendAskYesNo("You have to make sacrifices to be a hero! Don't you want that?") +if response: + sm.setPlayerAsSpeaker() + sm.jobAdvance(6511) + sm.giveAndEquip(1352603) + sm.sendNext("I think I just got stronger!") +sm.dispose() + diff --git a/scripts/quest/q25827s.py b/scripts/quest/q25827s.py new file mode 100755 index 0000000..315e72e --- /dev/null +++ b/scripts/quest/q25827s.py @@ -0,0 +1,31 @@ +# 25825 - [Job Advancement] Agent of Justige (AB 2nd job adv) + +ESKALADE_NPC_ID = 3000132 + +sm.setSpeakerID(ESKALADE_NPC_ID) +if chr.getLevel() >= 100 and chr.getJob() == 6511: + sm.sendNext("You've been working up quite a sweat, #h #.") +else: + sm.dispose() + +sm.setSpeakerID(ESKALADE_NPC_ID) +sm.setPlayerAsSpeaker() +sm.sendNext("I want to be the hero of the people! I gotta work my butt off! Angelic Savior!") +sm.sendNext("I like it when you talk like that. I have a little proposition for you...") +sm.sendNext("I hate it when you use big words like that. You sound so serious.") +sm.sendNext("I'm always serious.") +sm.sendNext("That's... kinda scary.") +sm.sendNext("...We need a new contract.") +sm.sendNext("Aww, another one?!") +sm.sendNext("Our first contract was guided by fate! This one has to come from the heart! It's all about consensual bonding.") +sm.sendNext("That sounds weird. Is it gonna make everything more pink again?") +response = sm.sendAskYesNo("Probably, but you can deal! Now focus on my exceedingly attractive voice, okay? Just really " + "listen to the timbre.") +if response: + sm.sendSayOkay("I'm tougher than all the rest!") +else: + sm.dispose() + +sm.jobAdvance(6512) +sm.giveAndEquip(1352604) +sm.dispose() diff --git a/scripts/quest/q25829s.py b/scripts/quest/q25829s.py new file mode 100755 index 0000000..c8e0135 --- /dev/null +++ b/scripts/quest/q25829s.py @@ -0,0 +1,19 @@ +# id 25829 (Skill Starter), field 400000000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3000018) # Eskalade +sm.sendNext("You're probably scared and confused by your awesome new powers, right? Well, I'll teach you a little something.") +sm.setParam(16) +sm.sendSay("Could you make it less condescending?") +sm.setParam(4) +sm.sendSay("This is the only way I know how to teach! Now take a look at your Beginner Skills, little brainless one!") +sm.sendSay("The first one is called #i3800342# Day Dreamer. You can use this skill to escape to a lovely little hideout that I #especially prepared for the two of us#n.") +sm.setParam(16) +sm.sendSay("I... don't know if I like the sound of that. Should I be worried?") +sm.setParam(4) +sm.sendSay("The next skill is #i3800344# Dress-Up! Boy, do I like Dress-Up. It lets you change between boring old #h0# and the magical, firey Angelic Buster! Dress-Up will happen automatically if you try to use other skills before you transform, so don't be surprised!") +sm.setParam(16) +sm.sendSay("...") +sm.setParam(4) +sm.sendSay("That's kind of all I feel like explaining. I can see it's not really sinking in anyway. Just... try that other stuff out on your own.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q25836s.py b/scripts/quest/q25836s.py new file mode 100755 index 0000000..4b48aca --- /dev/null +++ b/scripts/quest/q25836s.py @@ -0,0 +1,44 @@ +# id 25836 (Eskalade Power), field 400000000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3000018) # Eskalade +sm.sendNext("Wait, actually, there's one more thing that you must know. One last... obligation.") +sm.setParam(16) +sm.sendSay("...What is it?") +sm.setParam(4) +sm.sendSay("My power is nearly unlimited, or so it will seem to you. It requires some recharging, but I'll never require petty things like mana or fury from you.") +sm.setParam(16) +sm.sendSay("Are you boasting about yourself?") +sm.setParam(4) +sm.sendSay("What?! No! No, I... Of course not. I need to tell you what I will require...") +sm.setParam(16) +sm.sendSay("Spit it out!") +sm.setParam(4) +sm.sendSay("I, geez, look, you have a skill called #e#bSoul Battery#n#k. That thing is like a conduit for my full power. Once it's out, it'll take a while for me to use it again.") +sm.setParam(16) +sm.sendSay("What?! You're just gonna burn out on me?") +sm.setParam(4) +sm.sendSay("Do you realize how often you interrupt others? You should work on that. I'm trying to tell you that you can reuse skills if you perform a successful #e#bRecharge#n#k.") +sm.setParam(16) +sm.sendSay("How do I do that?") +sm.setParam(4) +sm.sendSay("Every attack you use has a chance to Recharge. You need to keep an eye on your attacks to see if it works, then you'll be able to perform another Soul Battery. Got it?") +sm.setParam(16) +sm.sendSay("I'm sorry, I was looking at a butterfly and that was boring.") +sm.setParam(4) +sm.sendSay("Listen to me! Not all of your Attack skills are Soul Battery skills. If you use Recharge skills like #e#bSoul Buster, Pink Pummel, and Heavenly Crash#n#k., you'll be in good shape.") +sm.setParam(16) +sm.sendSay("Yeah, yeah, yeah, just mix it up and I'll be fine. I got it! Gah, you lecture too much. ") +sm.setParam(4) +sm.sendSay("You are dumber than I was hoping you would be...") +sm.setParam(16) +sm.sendSay("What?! What did you just say?") +sm.setParam(4) +sm.sendSay("You are dumber than I was hoping you would be...") +sm.setParam(16) +sm.sendSay("What?! What did you just say?") +sm.setParam(4) +sm.sendSay("Quiet, minion! I just remembered another thing I still need to lecture you about. You have some skills that boost your #e#bAffinity#n#k with me. The stronger our bond is, the faster your Recharge. So you have even more reason to ingratiate yourself to me.") +sm.setParam(5) +sm.sendSay("Okay, NOW I think we're done here. When you inevitably get confused, open the Soul Battery window and use the little button there to get a rundown of the important stuff.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q25837e.py b/scripts/quest/q25837e.py new file mode 100755 index 0000000..69d26b8 --- /dev/null +++ b/scripts/quest/q25837e.py @@ -0,0 +1,22 @@ +# id 25837 (Challenge: Recharge!), field 400010100 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3000018) # Eskalade +sm.sendNext("Yes, dance, my pretty! Smash those monsters!") +sm.setParam(16) +sm.sendSay("Stop being creepy. ") +sm.setParam(4) +sm.sendSay("I don't know what you're talking about. That wasn't bad for a fledgling heroine though.") +sm.setParam(16) +sm.sendSay("You're such a big meanie!") +sm.setParam(5) +sm.sendSay("Hahaha, I adore it when you're mad at me! Now stop your complaining and get back to work. You can't just slack off because you had one tiny success.") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/16/06/16") +sm.createQuestWithQRValue(16700, "count=6;date=20190716") +sm.createQuestWithQRValue(16700, "count=7;date=20190716") +sm.createQuestWithQRValue(16700, "count=8;date=20190716") +sm.createQuestWithQRValue(16700, "count=9;date=20190716") +sm.createQuestWithQRValue(16700, "count=10;date=20190716") +sm.createQuestWithQRValue(16700, "count=11;date=20190716") diff --git a/scripts/quest/q25837s.py b/scripts/quest/q25837s.py new file mode 100755 index 0000000..9c0c8bd --- /dev/null +++ b/scripts/quest/q25837s.py @@ -0,0 +1,22 @@ +# id 25837 (Challenge: Recharge!), field 400000000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3000018) # Eskalade +sm.sendNext("It's time to Recharge in an actual fight!") +sm.setParam(16) +sm.sendSay("Whoa, I don't wanna fight yet!") +sm.setParam(4) +sm.sendNext("It's time to Recharge in an actual fight!") +sm.setParam(16) +sm.sendSay("Whoa, I don't wanna fight yet!") +sm.setParam(4) +sm.sendSay("You'll never get anywhere if you just talk about stuff! Take me out and beat up some stuff!") +sm.setParam(16) +sm.sendSay("How am I supposed to learn anything if you're just gonna be a jerk?") +sm.setParam(4) +sm.sendSay("Just walk out there, find a monster, and use your skills! #bRecharge successfully 5 times#k. It won't take you long!") +sm.setParam(17) +sm.sendSay("Ugh, I don't wanna get all sweaty, but I guess I have to.") +sm.startQuest(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/16/06/15") diff --git a/scripts/quest/q25981s.py b/scripts/quest/q25981s.py new file mode 100755 index 0000000..afcef05 --- /dev/null +++ b/scripts/quest/q25981s.py @@ -0,0 +1,8 @@ +# id 25981 (Do you know about Maple Guide?), field 610050000 +sm.setSpeakerID(9010000) # Maple Administrator +response = sm.sendAskYesNo("Hello, #h0#! I'd like to give you a brief explanation of the #rMaple Guide#k.") +if response: + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("Maple guide is to teleport somewhere uwu") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2603e.py b/scripts/quest/q2603e.py new file mode 100755 index 0000000..8035923 --- /dev/null +++ b/scripts/quest/q2603e.py @@ -0,0 +1,12 @@ +SHIBA = 1057000 +RYDEN = 1057001 + +sm.setSpeakerID(SHIBA) +sm.sendNext("Slow. Much, much too slow. Like a wilting leaf... Are you sure you have what it takes to learn to dual-wield?") +sm.sendSay("My insults slide like rain off your back... Hey, Ryden! What's with the new recruit?") +sm.completeQuest(parentID) +sm.giveExp(50) + +sm.spawnNpc(RYDEN, -880, 141) +sm.removeNpc(1057000) +sm.showNpcSpecialActionByTemplateId(RYDEN, "summon", 0) \ No newline at end of file diff --git a/scripts/quest/q2604s.py b/scripts/quest/q2604s.py new file mode 100755 index 0000000..7f6e388 --- /dev/null +++ b/scripts/quest/q2604s.py @@ -0,0 +1,11 @@ +RYDEN = 1057001 + +sm.setSpeakerID(RYDEN) +sm.sendNext("How interesting. New recruit, you didn't even bat an eyelash at Shiba's insults... It was all a setup, you see. We wanted to see how you would react. You did quite well.") +sm.sendSay("You have a knack for our Dual Blade ways. #bI recommend you for the special mission!#k ") +sm.sendSay("I can't tell you what kind of mission it is. That's up to #bLady Syl#k, IF she agrees that you're worthy. If not, you'll train the same way as everyone else. So, try not to tick Lady Syl off.") + +if sm.sendAskAccept("When you accept, I'll send you to Lady Syl."): + sm.startQuest(parentID) + sm.removeNpc(RYDEN) + sm.warp(103050101, 0) \ No newline at end of file diff --git a/scripts/quest/q2609e.py b/scripts/quest/q2609e.py new file mode 100755 index 0000000..d15a05a --- /dev/null +++ b/scripts/quest/q2609e.py @@ -0,0 +1,32 @@ +LADY_SYL = 1056000 + +sm.setSpeakerID(LADY_SYL) +sm.sendNext("#h0#, you look rather green. Are you ill? You're poisoned? Did Ryden tell you that? The potion was just apple juice. Couldn't you tell? Anyway, Ryden was just making a point...") +sm.sendSay("Don't even THINK about betraying us. The Dual Blades do not forgive their enemies...") + +if sm.sendAskYesNo("The look in your eyes, the lift in your shoulders. You seem ready. Do you wish to advance to #bRogue#k? Once you do, you can begin your REAL missions."): + if chr.getLevel() >= 10: + sm.giveItem(1332063) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.startQuest(29900) + sm.completeQuest(29900) + sm.jobAdvance(400) + sm.setSTR(4) + sm.setDEX(4) + sm.setLUK(25) + sm.setAP(33) + sm.startQuest(17903) + sm.completeQuest(17903) + sm.avatarOriented("Effect/OnUserEff.img/RecordClear_BT/clear") + sm.sendNext("You're not a Thief, though you haven't learned any Dual Blade skills yet. But you should be able to approach the Dark Lord as our spy.") + sm.sendSay("Dual Blades and Thieves value the same stats, specifically LUK, with DEX as a secondary. Use the #bAuto-Assign#k feature if you're unsure how to allocate your stats.") + sm.sendSay("You'll need a lot of items to be a successful spy, so I've increased your Equip and ETC tab slots.") + sm.sendSay("That's all from me. Ryden will you in on the details. I look forward to fruitful results...") + else: + sm.sendSay("Please talk to me again after reaching level 10.") + sm.disose() + +else: + sm.sendNext("I can see you're not yet prepared...") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2622s.py b/scripts/quest/q2622s.py new file mode 100755 index 0000000..587a77c --- /dev/null +++ b/scripts/quest/q2622s.py @@ -0,0 +1,6 @@ +LADY_SYL = 1056000 + +sm.setSpeakerID(LADY_SYL) +if sm.sendAskAccept("Perhaps Ryden was right about you, #h0#. You look a little more powerful, and you've been carrying out my missions adequately. Well! Return to me in #bThe Secret Garden#k, and I'll teach you about the true power of Dual Blades.\r\n\r\n#b#e(You will be moved to Lady Syl's Room in the Secret Garden when you accept.)#n#k"): + sm.startQuest(parentID) + sm.warp(103050101, 3) \ No newline at end of file diff --git a/scripts/quest/q2623e.py b/scripts/quest/q2623e.py new file mode 100755 index 0000000..45c6061 --- /dev/null +++ b/scripts/quest/q2623e.py @@ -0,0 +1,12 @@ +LADY_SYL = 1056000 + +sm.setSpeakerID(LADY_SYL) +if sm.sendAskYesNo("So, the Mirror of Insight has chosen you. Very well. I will promote you to Blade Recruit when you are ready."): + sm.completeQuest(parentID) + sm.consumeItem(4032616) + sm.giveItem(1342000) + sm.jobAdvance(430) + sm.sendNext("You are now a #b#eBlade Recruit#n#k. Take pride in that fact.") +else: + sm.sendSayOkay("Why hesitate? What are you afraid of?") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2623s.py b/scripts/quest/q2623s.py new file mode 100755 index 0000000..b17efd5 --- /dev/null +++ b/scripts/quest/q2623s.py @@ -0,0 +1,12 @@ +LADY_SYL = 1056000 + +sm.setSpeakerID(LADY_SYL) +sm.sendNext("To dual-wield, you must meet two requirements. First, you must reach level 20. Second, you must successfully retrieve a #bMirror of Insight#k, an item that reveals itself only to those worthy of dual-wielding.") +sm.sendSay("The Mirror of Insight grants its owner insight. I can send you to the #bMarble Room in The Secret Garden Depths#k so you can retrieve one. Once there, #bhit marbles#k until one of them turns cloudy when it drops...") + +if sm.sendAskAccept("#bDouble-click on the cloudy marble to crack it,#k and you will obtain a Mirror of Insight. That is, assuming the Mirror deems you worthy. I'll send you to the Marble Room when you accept."): + sm.startQuest(parentID) + sm.warp(910350000, 0) +else: + sm.sendNext("Find me when you're ready. Do not keep me waiting.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2638e.py b/scripts/quest/q2638e.py new file mode 100755 index 0000000..d3a8bb1 --- /dev/null +++ b/scripts/quest/q2638e.py @@ -0,0 +1,10 @@ +# [Job Adv] (Lv.30) Becoming a Blade Acolyte +sm.setSpeakerID(1056000) +if sm.hasQuest(parentID): + if sm.canHold(1052244): + sm.giveItem(1052244) + sm.jobAdvance(431) + sm.completeQuest(parentID) + else: + sm.sendSay("Empty one or more Equip slots before you can advance to Blade Acolyte.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q2638s.py b/scripts/quest/q2638s.py new file mode 100755 index 0000000..09e2c67 --- /dev/null +++ b/scripts/quest/q2638s.py @@ -0,0 +1,10 @@ +# [Job Adv] (Lv.30) Becoming a Blade Acolyte +sm.setSpeakerID(1056000) +sm.sendNext("You must prove yourself before you can advance to Blade Acolyte. Pass the test first!") +if sm.sendAskYesNo("Fight the Shadow Blade Lords and retrieve a Dark Marble from them. This will awaken your Mirror of Insight. I'll send you over immediately once you accept"): + sm.warp(910350300, 0) + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("You cannot stay a mere Blade Recruit. You #bwill#k have to face up to the test.\r\n" + "Talk to me when you are ready.") +sm.dispose() diff --git a/scripts/quest/q2642e.py b/scripts/quest/q2642e.py new file mode 100755 index 0000000..aec407b --- /dev/null +++ b/scripts/quest/q2642e.py @@ -0,0 +1,10 @@ +# [Job Adv] (Lv.30) Becoming a Blade Acolyte +sm.setSpeakerID(1056000) +if sm.hasQuest(parentID): + if sm.canHold(1132021): + sm.giveItem(1132021) + sm.jobAdvance(432) + sm.completeQuest(parentID) + else: + sm.sendSay("Empty one or more Equip slots before you can advance to Blade Acolyte.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q26430e.py b/scripts/quest/q26430e.py new file mode 100755 index 0000000..5071fea --- /dev/null +++ b/scripts/quest/q26430e.py @@ -0,0 +1,13 @@ +# id 26430 ([Maple Rewards] Annihilate Normal Zakum for Riches and Honor!), field 993017200 +sm.setSpeakerID(9030200) # Worena +sm.setParam(1) +res = sm.sendAskYesNo("Whoa! You defeated the boss monster! \r\nI'll give you some #bReward Tokens#k for ridding Maple World of evil. Do you want them now?") +sm.createQuestWithQRValue(18192, "count=4;val2=110;tDate=19/06/23/11/48;val=160") +sm.createQuestWithQRValue(18192, "count=4;val2=160;tDate=19/06/23/11/48;val=160") +sm.createQuestWithQRValue(18192, "count=4;val2=160;tDate=19/06/23/11/49;val=160") +sm.createQuestWithQRValue(18192, "count=5;val2=160;tDate=19/06/23/11/49;val=160") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18194, "ML=0;MM=0;MN=0;MO=0;MA=1;MB=0;MC=0;MD=0;ME=0;MF=0;MG=0;MH=0;MI=0;MJ=0;MK=0") +sm.setParam(0) +sm.sendNext("#b#i2431872# #t2431872# 50 obtained!#k \r\n\r\nThank you so much for helping us bring a little light back to Maple World.") +sm.sendPrev("If you take these Reward Points to the Cash Shop, you can #bget a discount on cash items#k. \r\n\r\nYou get to save some money AND gain honor by simply doing away with a dangerous boss monster. Two birds with one stone!") diff --git a/scripts/quest/q26436e.py b/scripts/quest/q26436e.py new file mode 100755 index 0000000..fa0c1e0 --- /dev/null +++ b/scripts/quest/q26436e.py @@ -0,0 +1,13 @@ +# id 26436 ([Maple Rewards] Chaos Horntail Annihilation and Golden Glory), field 993017200 +sm.setSpeakerID(9030200) # Worena +sm.setParam(1) +res = sm.sendAskYesNo("Whoa! You defeated the boss monster! \r\nI'll give you some #bReward Tokens#k for ridding Maple World of evil. Do you want them now?") +sm.createQuestWithQRValue(18192, "count=6;val2=190;tDate=19/06/23/11/49;val=240") +sm.createQuestWithQRValue(18192, "count=6;val2=240;tDate=19/06/23/11/49;val=240") +sm.createQuestWithQRValue(18192, "count=7;val2=240;tDate=19/06/23/11/49;val=240") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18194, "ML=0;MM=0;MN=0;MO=0;MA=1;MB=0;MC=0;MD=0;ME=0;MF=0;MG=1;MH=0;MI=0;MJ=0;MK=0") +sm.setParam(0) +sm.sendNext("#b#i2431872# #t2431872# 50 obtained!#k \r\n\r\nThank you so much for helping us bring a little light back to Maple World.") +sm.sendPrev("If you take these Reward Points to the Cash Shop, you can #bget a discount on cash items#k. \r\n\r\nYou get to save some money AND gain honor by simply doing away with a dangerous boss monster. Two birds with one stone!") +sm.warp(101020400) diff --git a/scripts/quest/q26509e.py b/scripts/quest/q26509e.py new file mode 100755 index 0000000..d235e5c --- /dev/null +++ b/scripts/quest/q26509e.py @@ -0,0 +1,13 @@ +# id 26509 ([Maple Rewards] Theme Dungeon: Annihilate the Mole King), field 993017200 +sm.createQuestWithQRValue(18192, "count=0;val2=0;tDate=19/06/23/11/48;val=0") +sm.setSpeakerID(9030200) # Worena +sm.setParam(1) +res = sm.sendAskYesNo("Whoa! You defeated the boss monster! \r\nI'll give you some #bReward Tokens#k for ridding Maple World of evil. Do you want them now?") +sm.createQuestWithQRValue(18192, "count=0;val2=0;tDate=19/06/23/11/48;val=20") +sm.createQuestWithQRValue(18192, "count=0;val2=20;tDate=19/06/23/11/48;val=20") +sm.createQuestWithQRValue(18192, "count=1;val2=20;tDate=19/06/23/11/48;val=20") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18272, "A=1;B=0;C=0;D=0;E=0;F=0;G=0;H=0;I=0;J=0;K=0;L=0;M=0") +sm.setParam(0) +sm.sendNext("#b#i2431872# #t2431872# 20 obtained!#k \r\n\r\nThank you so much for helping us bring a little light back to Maple World.") +sm.sendPrev("If you take these Reward Points to the Cash Shop, you can #bget a discount on cash items#k. \r\n\r\nYou get to save some money AND gain honor by simply doing away with a dangerous boss monster. Two birds with one stone!") diff --git a/scripts/quest/q26511e.py b/scripts/quest/q26511e.py new file mode 100755 index 0000000..6500a58 --- /dev/null +++ b/scripts/quest/q26511e.py @@ -0,0 +1,12 @@ +# id 26511 ([Maple Rewards] Theme Dungeon: Annihilate Captain Darkgoo), field 993017200 +sm.setSpeakerID(9030200) # Worena +sm.setParam(1) +res = sm.sendAskYesNo("Whoa! You defeated the boss monster! \r\nI'll give you some #bReward Tokens#k for ridding Maple World of evil. Do you want them now?") +sm.createQuestWithQRValue(18192, "count=1;val2=20;tDate=19/06/23/11/48;val=40") +sm.createQuestWithQRValue(18192, "count=1;val2=40;tDate=19/06/23/11/48;val=40") +sm.createQuestWithQRValue(18192, "count=2;val2=40;tDate=19/06/23/11/48;val=40") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18272, "A=1;B=0;C=1;D=0;E=0;F=0;G=0;H=0;I=0;J=0;K=0;L=0;M=0") +sm.setParam(0) +sm.sendNext("#b#i2431872# #t2431872# 20 obtained!#k \r\n\r\nThank you so much for helping us bring a little light back to Maple World.") +sm.sendPrev("If you take these Reward Points to the Cash Shop, you can #bget a discount on cash items#k. \r\n\r\nYou get to save some money AND gain honor by simply doing away with a dangerous boss monster. Two birds with one stone!") diff --git a/scripts/quest/q26512e.py b/scripts/quest/q26512e.py new file mode 100755 index 0000000..870e3fb --- /dev/null +++ b/scripts/quest/q26512e.py @@ -0,0 +1,12 @@ +# id 26512 ([Maple Rewards] Theme Dungeon: Annihilate the Demolishizer), field 993017200 +sm.setSpeakerID(9030200) # Worena +sm.setParam(1) +res = sm.sendAskYesNo("Whoa! You defeated the boss monster! \r\nI'll give you some #bReward Tokens#k for ridding Maple World of evil. Do you want them now?") +sm.createQuestWithQRValue(18192, "count=5;val2=160;tDate=19/06/23/11/49;val=190") +sm.createQuestWithQRValue(18192, "count=5;val2=190;tDate=19/06/23/11/49;val=190") +sm.createQuestWithQRValue(18192, "count=6;val2=190;tDate=19/06/23/11/49;val=190") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18272, "A=1;B=0;C=1;D=1;E=0;F=0;G=0;H=0;I=0;J=0;K=0;L=0;M=0") +sm.setParam(0) +sm.sendNext("#b#i2431872# #t2431872# 30 obtained!#k \r\n\r\nThank you so much for helping us bring a little light back to Maple World.") +sm.sendPrev("If you take these Reward Points to the Cash Shop, you can #bget a discount on cash items#k. \r\n\r\nYou get to save some money AND gain honor by simply doing away with a dangerous boss monster. Two birds with one stone!") diff --git a/scripts/quest/q26607s.py b/scripts/quest/q26607s.py new file mode 100755 index 0000000..1409576 --- /dev/null +++ b/scripts/quest/q26607s.py @@ -0,0 +1,6 @@ +# id 26607 ([Name Change] Name Changing Guide), field 101000000 +sm.setSpeakerID(1032100) # Arwen the Fairy +sm.setParam(2) +sm.sendSay("(You tell Arwen what's going on.)") +sm.setParam(0) +sm.sendSay("Missing students? That sounds dangerous... Ellinel isn't the safest place to go missing.") diff --git a/scripts/quest/q2950s.py b/scripts/quest/q2950s.py new file mode 100755 index 0000000..3a7baf3 --- /dev/null +++ b/scripts/quest/q2950s.py @@ -0,0 +1,14 @@ +# [Gold Beach] A Golden Opportunity + +mapid = 120040300 + +sm.setSpeakerID(9201343) +response = sm.sendAskYesNo("Hey there!\r\nI have chosen you to be on the Gold Beach Resort VIP list! " + "I'll get my personal plane to pick you up and take you there!" + "\r\n\r\n(accepting will warp you)") + +if response: + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.warp(mapid, 0) +sm.dispose() diff --git a/scripts/quest/q2962s.py b/scripts/quest/q2962s.py new file mode 100755 index 0000000..5333baa --- /dev/null +++ b/scripts/quest/q2962s.py @@ -0,0 +1,7 @@ +# id 2962 ([Gold Beach] Submarine Dreams), field 120041100 +sm.setSpeakerID(1082203) # Tofu +res = sm.sendAskYesNo("I did see some Black Slime, but I don't know if what I saw was what I think it was. I suppose I can tell you about it, if that would get you to stop talking to me.") +sm.sendNext("I'll need some time to get my mind on the right track. I was sitting by the water, rubbing oil on my belly in the light of the moon, when I saw something move...") +sm.startQuest(parentID) +sm.showFieldEffect("goldBeach/submarine", 0) +sm.warp(120041200) diff --git a/scripts/quest/q29900s.py b/scripts/quest/q29900s.py new file mode 100755 index 0000000..ed968a4 --- /dev/null +++ b/scripts/quest/q29900s.py @@ -0,0 +1,8 @@ +# Beginner Adventurer + +medal = 1142107 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29901s.py b/scripts/quest/q29901s.py new file mode 100755 index 0000000..5e8da7f --- /dev/null +++ b/scripts/quest/q29901s.py @@ -0,0 +1,8 @@ +# Junior Adventurer + +medal = 1142108 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29902s.py b/scripts/quest/q29902s.py new file mode 100755 index 0000000..76957df --- /dev/null +++ b/scripts/quest/q29902s.py @@ -0,0 +1,8 @@ +# Veteran Adventurer + +medal = 1142109 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29903s.py b/scripts/quest/q29903s.py new file mode 100755 index 0000000..d92ec7b --- /dev/null +++ b/scripts/quest/q29903s.py @@ -0,0 +1,8 @@ +# Master Adventurer + +medal = 1142110 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29905s.py b/scripts/quest/q29905s.py new file mode 100755 index 0000000..8908436 --- /dev/null +++ b/scripts/quest/q29905s.py @@ -0,0 +1,8 @@ +# Noblesse + +medal = 1142065 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29906e.py b/scripts/quest/q29906e.py new file mode 100755 index 0000000..c8fb5bc --- /dev/null +++ b/scripts/quest/q29906e.py @@ -0,0 +1 @@ +sm.dispose() diff --git a/scripts/quest/q29906s.py b/scripts/quest/q29906s.py new file mode 100755 index 0000000..a98c034 --- /dev/null +++ b/scripts/quest/q29906s.py @@ -0,0 +1,8 @@ +# (Lv. 10) Knight-in-Training + +medal = 1142066 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29907e.py b/scripts/quest/q29907e.py new file mode 100755 index 0000000..e8dae92 --- /dev/null +++ b/scripts/quest/q29907e.py @@ -0,0 +1,2 @@ +# (Lv30) Official Knight +sm.dispose() diff --git a/scripts/quest/q29907s.py b/scripts/quest/q29907s.py new file mode 100755 index 0000000..f14b78c --- /dev/null +++ b/scripts/quest/q29907s.py @@ -0,0 +1,8 @@ +# (Lv30) Official Knight + +medal = 1142067 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29908s.py b/scripts/quest/q29908s.py new file mode 100755 index 0000000..d95d9cf --- /dev/null +++ b/scripts/quest/q29908s.py @@ -0,0 +1,8 @@ +# Advanced Knight + +medal = 1142068 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29909s.py b/scripts/quest/q29909s.py new file mode 100755 index 0000000..667e645 --- /dev/null +++ b/scripts/quest/q29909s.py @@ -0,0 +1,8 @@ +# Chief Knight + +medal = 1142069 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29910s.py b/scripts/quest/q29910s.py new file mode 100755 index 0000000..40e9a02 --- /dev/null +++ b/scripts/quest/q29910s.py @@ -0,0 +1,8 @@ +# Gallant Warrior + +medal = 1142009 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29911s.py b/scripts/quest/q29911s.py new file mode 100755 index 0000000..092f3d8 --- /dev/null +++ b/scripts/quest/q29911s.py @@ -0,0 +1,8 @@ +# Wiseman + +medal = 1142010 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29912s.py b/scripts/quest/q29912s.py new file mode 100755 index 0000000..abd64ad --- /dev/null +++ b/scripts/quest/q29912s.py @@ -0,0 +1,8 @@ +# Lord Sniper + +medal = 1142011 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29913s.py b/scripts/quest/q29913s.py new file mode 100755 index 0000000..f1fd2af --- /dev/null +++ b/scripts/quest/q29913s.py @@ -0,0 +1,8 @@ +# Legendary Thief + +medal = 1142012 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29914s.py b/scripts/quest/q29914s.py new file mode 100755 index 0000000..13761cd --- /dev/null +++ b/scripts/quest/q29914s.py @@ -0,0 +1,8 @@ +# King Pirate + +medal = 1142013 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29924s.py b/scripts/quest/q29924s.py new file mode 100755 index 0000000..56d04a3 --- /dev/null +++ b/scripts/quest/q29924s.py @@ -0,0 +1,8 @@ +# Awakened Aran + +medal = 1142129 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29925s.py b/scripts/quest/q29925s.py new file mode 100755 index 0000000..187b21c --- /dev/null +++ b/scripts/quest/q29925s.py @@ -0,0 +1,8 @@ +# Aran in Memory + +medal = 1142130 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29926s.py b/scripts/quest/q29926s.py new file mode 100755 index 0000000..7d695b4 --- /dev/null +++ b/scripts/quest/q29926s.py @@ -0,0 +1,8 @@ +# Aran in Misery + +medal = 1142131 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29927s.py b/scripts/quest/q29927s.py new file mode 100755 index 0000000..5c18cc9 --- /dev/null +++ b/scripts/quest/q29927s.py @@ -0,0 +1,8 @@ +# Aran in Hope + +medal = 1142132 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29928s.py b/scripts/quest/q29928s.py new file mode 100755 index 0000000..3fcc6ce --- /dev/null +++ b/scripts/quest/q29928s.py @@ -0,0 +1,8 @@ +# Aran the Hero + +medal = 1142133 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29941s.py b/scripts/quest/q29941s.py new file mode 100755 index 0000000..6d37dd4 --- /dev/null +++ b/scripts/quest/q29941s.py @@ -0,0 +1,9 @@ +# Special Training Beginner + +medal = 1142242 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.giveItem(medal) + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29942s.py b/scripts/quest/q29942s.py new file mode 100755 index 0000000..aba3fb1 --- /dev/null +++ b/scripts/quest/q29942s.py @@ -0,0 +1,9 @@ +# Special Training Intermediate + +medal = 1142243 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.giveItem(medal) + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29943s.py b/scripts/quest/q29943s.py new file mode 100755 index 0000000..46264aa --- /dev/null +++ b/scripts/quest/q29943s.py @@ -0,0 +1,9 @@ +# Special Training Graduate + +medal = 1142244 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.giveItem(medal) + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29944s.py b/scripts/quest/q29944s.py new file mode 100755 index 0000000..9a7c7e6 --- /dev/null +++ b/scripts/quest/q29944s.py @@ -0,0 +1,9 @@ +# Special Training Superior + +medal = 1142245 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.giveItem(medal) + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29945s.py b/scripts/quest/q29945s.py new file mode 100755 index 0000000..120092d --- /dev/null +++ b/scripts/quest/q29945s.py @@ -0,0 +1,8 @@ +# Special Training Master + +medal = 1142246 + +if sm.canHold(medal) and sm.hasQuestCompleted(23060): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) diff --git a/scripts/quest/q29947s.py b/scripts/quest/q29947s.py new file mode 100755 index 0000000..3c4349a --- /dev/null +++ b/scripts/quest/q29947s.py @@ -0,0 +1,8 @@ +# Cygnus' Successor + +medal = 1142257 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29952s.py b/scripts/quest/q29952s.py new file mode 100755 index 0000000..f7d6b2c --- /dev/null +++ b/scripts/quest/q29952s.py @@ -0,0 +1,8 @@ +# A Hero, No More (Mercedes) + +medal = 1142336 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29953s.py b/scripts/quest/q29953s.py new file mode 100755 index 0000000..4b6be6c --- /dev/null +++ b/scripts/quest/q29953s.py @@ -0,0 +1,8 @@ +# Elf of Elluel + +medal = 1142337 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29954s.py b/scripts/quest/q29954s.py new file mode 100755 index 0000000..ac1a966 --- /dev/null +++ b/scripts/quest/q29954s.py @@ -0,0 +1,8 @@ +# Elven Noble + +medal = 1142338 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29955s.py b/scripts/quest/q29955s.py new file mode 100755 index 0000000..d67d985 --- /dev/null +++ b/scripts/quest/q29955s.py @@ -0,0 +1,8 @@ +# Elven Hero + +medal = 1142339 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29956s.py b/scripts/quest/q29956s.py new file mode 100755 index 0000000..d6b1608 --- /dev/null +++ b/scripts/quest/q29956s.py @@ -0,0 +1,8 @@ +# Ruler of Elves + +medal = 1142340 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29958s.py b/scripts/quest/q29958s.py new file mode 100755 index 0000000..28b1c8b --- /dev/null +++ b/scripts/quest/q29958s.py @@ -0,0 +1,8 @@ +# Demon Reborn + +medal = 1142341 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29959s.py b/scripts/quest/q29959s.py new file mode 100755 index 0000000..af2e09d --- /dev/null +++ b/scripts/quest/q29959s.py @@ -0,0 +1,8 @@ +# Dark Warrior + +medal = 1142342 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29960s.py b/scripts/quest/q29960s.py new file mode 100755 index 0000000..9f1ea46 --- /dev/null +++ b/scripts/quest/q29960s.py @@ -0,0 +1,8 @@ +# Awakened Demon + +medal = 1142343 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29961s.py b/scripts/quest/q29961s.py new file mode 100755 index 0000000..7e7b1e5 --- /dev/null +++ b/scripts/quest/q29961s.py @@ -0,0 +1,8 @@ +# Dark Hero + +medal = 1142344 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29962s.py b/scripts/quest/q29962s.py new file mode 100755 index 0000000..a893fbd --- /dev/null +++ b/scripts/quest/q29962s.py @@ -0,0 +1,8 @@ +# Vengeance Incarnate + +medal = 1142345 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29967s.py b/scripts/quest/q29967s.py new file mode 100755 index 0000000..9ffdeab --- /dev/null +++ b/scripts/quest/q29967s.py @@ -0,0 +1,8 @@ +# A Hero, No More (Phantom) + +medal = 1142375 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29968s.py b/scripts/quest/q29968s.py new file mode 100755 index 0000000..5409fd3 --- /dev/null +++ b/scripts/quest/q29968s.py @@ -0,0 +1,8 @@ +# Without a Trace + +medal = 1142376 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29969s.py b/scripts/quest/q29969s.py new file mode 100755 index 0000000..cb89eaf --- /dev/null +++ b/scripts/quest/q29969s.py @@ -0,0 +1,8 @@ +# The Mind of the Raven + +medal = 1142377 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29970.py b/scripts/quest/q29970.py new file mode 100755 index 0000000..36a8f53 --- /dev/null +++ b/scripts/quest/q29970.py @@ -0,0 +1,8 @@ +# The Once Beloved Ruler + +medal = 1142378 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29971s.py b/scripts/quest/q29971s.py new file mode 100755 index 0000000..cae5055 --- /dev/null +++ b/scripts/quest/q29971s.py @@ -0,0 +1,8 @@ +# Master Thief Phantom + +medal = 1142379 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29972s.py b/scripts/quest/q29972s.py new file mode 100755 index 0000000..c3533ca --- /dev/null +++ b/scripts/quest/q29972s.py @@ -0,0 +1,8 @@ +# Dual Blade Reborn + +medal = 1142390 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29973s.py b/scripts/quest/q29973s.py new file mode 100755 index 0000000..bb2d1a6 --- /dev/null +++ b/scripts/quest/q29973s.py @@ -0,0 +1,8 @@ +# Typhoon in the Dark + +medal = 1142391 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29974s.py b/scripts/quest/q29974s.py new file mode 100755 index 0000000..c088171 --- /dev/null +++ b/scripts/quest/q29974s.py @@ -0,0 +1,8 @@ +# Wind Cleaver + +medal = 1142392 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29975s.py b/scripts/quest/q29975s.py new file mode 100755 index 0000000..c6fad05 --- /dev/null +++ b/scripts/quest/q29975s.py @@ -0,0 +1,8 @@ +# Radiant Shadow + +medal = 1142393 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29976s.py b/scripts/quest/q29976s.py new file mode 100755 index 0000000..743bf46 --- /dev/null +++ b/scripts/quest/q29976s.py @@ -0,0 +1,8 @@ +# Newborn Light + +medal = 1142399 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29977s.py b/scripts/quest/q29977s.py new file mode 100755 index 0000000..6a52080 --- /dev/null +++ b/scripts/quest/q29977s.py @@ -0,0 +1,8 @@ +# Apprentice Knight of Light + +medal = 1142400 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29978s.py b/scripts/quest/q29978s.py new file mode 100755 index 0000000..406f987 --- /dev/null +++ b/scripts/quest/q29978s.py @@ -0,0 +1,8 @@ +# Official Knight of Light + +medal = 1142401 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29979s.py b/scripts/quest/q29979s.py new file mode 100755 index 0000000..0f61623 --- /dev/null +++ b/scripts/quest/q29979s.py @@ -0,0 +1,8 @@ +# Chief Knight of Light + +medal = 1142402 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29980s.py b/scripts/quest/q29980s.py new file mode 100755 index 0000000..dd65bcd --- /dev/null +++ b/scripts/quest/q29980s.py @@ -0,0 +1,8 @@ +# True Knight of Light + +medal = 1142403 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29987s.py b/scripts/quest/q29987s.py new file mode 100755 index 0000000..1a0fa52 --- /dev/null +++ b/scripts/quest/q29987s.py @@ -0,0 +1,8 @@ +# Kaiser Reborn + +medal = 1142484 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29988s.py b/scripts/quest/q29988s.py new file mode 100755 index 0000000..3627b9d --- /dev/null +++ b/scripts/quest/q29988s.py @@ -0,0 +1,8 @@ +# Kaiser's Fated Path + +medal = 1142485 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29989s.py b/scripts/quest/q29989s.py new file mode 100755 index 0000000..b123b44 --- /dev/null +++ b/scripts/quest/q29989s.py @@ -0,0 +1,8 @@ +# Awakened Kaiser + +medal = 1142486 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29990s.py b/scripts/quest/q29990s.py new file mode 100755 index 0000000..298420c --- /dev/null +++ b/scripts/quest/q29990s.py @@ -0,0 +1,8 @@ +# Kaiser's Successor + +medal = 1142487 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29991s.py b/scripts/quest/q29991s.py new file mode 100755 index 0000000..e23e760 --- /dev/null +++ b/scripts/quest/q29991s.py @@ -0,0 +1,8 @@ +# Ascendant + +medal = 1142488 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29992s.py b/scripts/quest/q29992s.py new file mode 100755 index 0000000..9085498 --- /dev/null +++ b/scripts/quest/q29992s.py @@ -0,0 +1,8 @@ +# Pretty Angel Power + +medal = 1142495 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29993s.py b/scripts/quest/q29993s.py new file mode 100755 index 0000000..128b934 --- /dev/null +++ b/scripts/quest/q29993s.py @@ -0,0 +1,8 @@ +# Angelic Metamorphosis + +medal = 1142496 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29994s.py b/scripts/quest/q29994s.py new file mode 100755 index 0000000..3a63123 --- /dev/null +++ b/scripts/quest/q29994s.py @@ -0,0 +1,8 @@ +# White Wing Justice Bringer + +medal = 1142497 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29995s.py b/scripts/quest/q29995s.py new file mode 100755 index 0000000..0d6916d --- /dev/null +++ b/scripts/quest/q29995s.py @@ -0,0 +1,8 @@ +# Battleground Idol + +medal = 1142498 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q29996s.py b/scripts/quest/q29996s.py new file mode 100755 index 0000000..b8c15f3 --- /dev/null +++ b/scripts/quest/q29996s.py @@ -0,0 +1,8 @@ +# Superstar + +medal = 1142499 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q30000s.py b/scripts/quest/q30000s.py new file mode 100755 index 0000000..927dffe --- /dev/null +++ b/scripts/quest/q30000s.py @@ -0,0 +1,48 @@ +# [Root Abyss] An Urgent Summons + +NEINHEART = 1404009 +SILENT_SWAMP = 105010000 # Map you get warped to after the conversation + +sm.setSpeakerID(NEINHEART) +sm.sendNext("I've been waiting for you.") + +sm.setPlayerAsSpeaker() +sm.sendNext("What's going on? I was in the middle of very important loot-related business.") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("The Alliance has received some very shocking news. " + "A previously uncharted area has appeared in the northern regions of the Sleepywood.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Appeared?") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("Yes, it's quite odd. I believe it was hidden by some sort of old magic.") + +sm.sendNext("The scout who brought me this information said he felt a very evil presence there. " + "It could have something to do with the Black Mage.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Sounds like we need to get over there right away.") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("I've already dispatched the Cygnus Knights. The topography of the area is complex, and a thick fog covers much of the landscape.") + +sm.setPlayerAsSpeaker() +sm.sendNext("...What should I do?") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("Go look around. The loss of one explorer would be far more acceptable than all of the Cygnus Knights.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Love you too...") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("I will send you to #b#m"+ str(SILENT_SWAMP) +"##k to investigate the area. " + "Report back immediately if you find anything, and try to send up a flare or something if you're going to get yourself killed.") + +sm.sendNext("I'll send you to #b#m"+ str(SILENT_SWAMP) +"##k with Shinsoo's power.") + +sm.warp(SILENT_SWAMP, 0) +sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q30002s.py b/scripts/quest/q30002s.py new file mode 100755 index 0000000..99bd346 --- /dev/null +++ b/scripts/quest/q30002s.py @@ -0,0 +1,34 @@ +# [Root Abyss] The Mysterious Girl + +MYSTERIOUS_GIRL = 1064001 # npc Id + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("I want to get out of here.") + +sm.setPlayerAsSpeaker() +sm.sendNext("What?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("I said I want to get out of here.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Oh, well I need to stay. I'm supposed to find out more about this place before I go.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("This place? This is Root Abyss. And you don't want to be here. " + "Let's leave together. Follow me") + +sm.setPlayerAsSpeaker() +sm.sendNext("Wha- Where are you going?!") + +response = sm.sendAskYesNo("#b(She looks lost... maybe I should help her out?)") + +if response: + sm.sendNext("All right, fine. I'll show you how to get out.") + sm.startQuest(parentID) +else: + sm.dispose() + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("You are really going to help, right! You promised!") +sm.dispose() diff --git a/scripts/quest/q30003s.py b/scripts/quest/q30003s.py new file mode 100755 index 0000000..62d0a68 --- /dev/null +++ b/scripts/quest/q30003s.py @@ -0,0 +1,19 @@ +# [Root Abyss] Root Ruckus 1 + +MYSTERIOUS_GIRL = 1064001 # npc Id +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Did you find a way out?") + +sm.setPlayerAsSpeaker() +sm.sendNext("There's an exit not too far from here.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("I've already tried that about a hundred times, but I can't get out.") + +sm.setPlayerAsSpeaker() +sm.startQuest(parentID) +sm.sendNext("Uh... well it worked for me. Let me go check it out.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Please be quick. I really don't like it here...") +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q30005e.py b/scripts/quest/q30005e.py new file mode 100755 index 0000000..28165f3 --- /dev/null +++ b/scripts/quest/q30005e.py @@ -0,0 +1,45 @@ +# [Root Abyss] The World Girl + +MYSTERIOUS_GIRL = 1064001 # npc Id +sm.removeEscapeButton() +sm.lockInGameUI(True) +sm.setPlayerAsSpeaker() +sm.sendNext("If you're really the World Tree, can't you just like... magic yourself outta here?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("No! Those bad people did this to me!") + +sm.setPlayerAsSpeaker() +sm.sendNext("Oh, here we go...") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Before I laid down to rest, I set up a barrier to keep me safe here, but some creeps broke in. " + "One of them even tried to kidnap me!") + +sm.setPlayerAsSpeaker() +sm.sendNext("Were they the Black Mage's minions?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("I don't know, they were all wearing hoods. One of them was this nasty little demon-faced guy with an eye patch. " + "I think he was their boss.") + +sm.showFieldBackgroundEffect("Effect/Direction11.img/effect/meet/frame0/0") +sm.showFieldEffect("Map/Effect.img/rootabyss/demian") +sm.invokeAfterDelay(1000, "showFadeTransition", 1500, 0, 1000) + +sm.setPlayerAsSpeaker() +sm.invokeAfterDelay(4500, "sendNext", "A demon with an eyepatch tried to kidnap you? Do you realise how crazy that sounds?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("It's true! He was dragging me out of here until he found out I wasn't fully recovered. Then he sealed me up in here.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Is that why you couldn't get through the gateway?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("I think so. I'm pretty sure he was the one who corrupted Root Abyss too. " + "I just can't use my powers with all of this dark energy around.") + +sm.sendNext("I'm worried that the darkness will swallow me whole at this rate. Will you help me?") +sm.lockInGameUI(False) +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q30005s.py b/scripts/quest/q30005s.py new file mode 100755 index 0000000..306c187 --- /dev/null +++ b/scripts/quest/q30005s.py @@ -0,0 +1,33 @@ +# [Root Abyss] The World Girl + +MYSTERIOUS_GIRL = 1064001 # npc Id +sm.setPlayerAsSpeaker() +sm.sendNext("How in the world did you end up here, anyway? It's not exactly the greatest place for a little girl.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Root Abyss is my land. I created it a long time ago.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Whaat?! You CREATED this place?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("I picked this land because it was fertile and hidden away." + "I was hoping to restore my powers, but the darkness is too strong now.") + +sm.setPlayerAsSpeaker() +sm.sendNext("You pretty much sound like a crazy person. Who ARE you?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("My name is Alicia. Some people call me the #rWorld Tree#k.") + +sm.setPlayerAsSpeaker() +sm.sendNext("World Tree? YOU are the World Tree?!") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("I was sleeping here to recover from the Black Mage's attacks. This area is really quite rich with life energy.") + +sm.setPlayerAsSpeaker() +sm.sendNext("I still can't believe you're a tree.") + +sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q30006s.py b/scripts/quest/q30006s.py new file mode 100755 index 0000000..9f582bd --- /dev/null +++ b/scripts/quest/q30006s.py @@ -0,0 +1,34 @@ +# [Root Abyss] Guardians of the World Tree + +MYSTERIOUS_GIRL = 1064001 # npc Id +sm.removeEscapeButton() +sm.lockInGameUI(True) +sm.setPlayerAsSpeaker() +sm.sendNext("We need to find those baddies if we want to get you out of here.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("But... they all left") + +sm.setPlayerAsSpeaker() +sm.sendNext("They had to have left some clues behind. " + "What about those weird doors over there?") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("They showed up when the bad guys left, but I can't get through them.") + +sm.setPlayerAsSpeaker() +sm.sendNext("Then that sounds like a good place to start. Maybe I should-") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Y-you're glowing!") +sm.invokeAtFixedRate(0, 2450, 3, "showEffect", "Effect/Direction11.img/effect/Aura/0", 3, 0) + +sm.setPlayerAsSpeaker() +sm.sendNext("Ah! What is this?! Don't let it take all my fr00dz!!") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("#h0#!!!") + +sm.startQuest(parentID) +sm.lockInGameUI(False) +sm.warpInstanceIn(910700300, 0) # Fake Vellum Cave for QuestLine diff --git a/scripts/quest/q30007e.py b/scripts/quest/q30007e.py new file mode 100755 index 0000000..c0743fe --- /dev/null +++ b/scripts/quest/q30007e.py @@ -0,0 +1,23 @@ +# [Root Abyss] World Tree In Danger + +NEINHEART = 1404009 +sm.setSpeakerID(NEINHEART) +sm.sendNext("You're alive! I find that slightly amusing. Did you investigate the area we spoke of?") + +sm.setPlayerAsSpeaker() +sm.sendNext("Oh man, let me tell you...") + +sm.sendNext("#b(You tell Neinheart what happened in Root Abyss)#k") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("If what you say is not an injury-induced hallucination, this certainly sounds like a problem." + "I am excited to hear that the World Tree has finally been located, but it seems to be in a rather precarious situation.") + +sm.setPlayerAsSpeaker() +sm.sendNext("The World Tree is stuck in Root Abyss, and she's not going to last long with all the dark energy.") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("I had that figured out already, thank you very much. " + "I need a moment to think. Leave me") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q30007s.py b/scripts/quest/q30007s.py new file mode 100755 index 0000000..917e886 --- /dev/null +++ b/scripts/quest/q30007s.py @@ -0,0 +1,39 @@ +# [Root Abyss] World Tree In Danger + +MYSTERIOUS_GIRL = 1064001 # npc Id +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("What happened? You disappeared all of the sudden... I was worried.") + +sm.setPlayerAsSpeaker() +sm.sendNext("They took me away.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Who? The same people that trapped me here?") + +sm.setPlayerAsSpeaker() +sm.sendNext("I think so, yeah. There was this really mean guy that kept threatening me.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Are you scared? I thought you were going to help me!") + +sm.setPlayerAsSpeaker() +sm.sendNext("I'm not scared! I'm just... concerned... about getting beat up. " + "Look, I'll be honest, I need some back up.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("What should we do? I can't help with all this dark energy sapping my powers.") + +sm.setPlayerAsSpeaker() +sm.sendNext("The Maple Alliance can help.") + +sm.sendNext("I'll head to Ereve right away. If anybody can figure out how to unseal Root Abyss. " + "It's Neinheart. He might even be mildly amused to see me alive.") + +sm.setSpeakerID(MYSTERIOUS_GIRL) +sm.sendNext("Okay... but come back fast, okay? I can feel the darkness draining my life away... " + "I don't know how long I have left.") + +sm.sendNext("I'll be back before you know it. Just stay strong.") +sm.startQuest(parentID) +sm.warp(130000000, 0) #Ereve +sm.dispose() diff --git a/scripts/quest/q30008s.py b/scripts/quest/q30008s.py new file mode 100755 index 0000000..48a2e47 --- /dev/null +++ b/scripts/quest/q30008s.py @@ -0,0 +1,35 @@ +# [Root Abyss] World Tree Guardian + +NEINHEART = 1404009 +sm.setSpeakerID(NEINHEART) +sm.sendNext("The Maple Alliance will focus all resources towards rescuing the World Tree.") + +sm.setPlayerAsSpeaker() +sm.sendNext("I knew you guys would help out.") + +sm.setSpeakerID(NEINHEART) +sm.sendNext("The World Tree's control over the powers of life is important, to say the least. " + "It was instrumental in sealing away the Black Mage. Unfortunately, the battle took its toll. " + "Fortunately, Athena Pierce was able to contain its #blife essence#k and bring it here before the tree withered away entirely.") + +sm.sendNext("But one day, it was gone. I believed it was stolen by the Black Mage, but to think that it was healing itself... It's incredible.") + +sm.sendNext("I don't know who would seek to harm the World Tree, but I know that we must stop it. It must be protected at all costs.") + +sm.setPlayerAsSpeaker() +sm.sendNext("The people that have the World Tree aren't just going to take this lying down.") + +sm.setSpeakerID(NEINHEART) +response = sm.sendAskYesNo("We will handle them, as we have handled their kind in the past. " + "I believe you have it in you to take the lead in battle. " + "You will have our full support.") + +if response: + sm.sendNext("Good! I'm always glad to see a solder that isn't afraid of resigning to the history books. " + "Return to the World Tree and do what you must to bring it back here.") +else: + sm.dispose() + +sm.sendNext("News of the World Tree's plight will have reached many by now. I will return you to Root Abyss to lead the charge.") +sm.startQuest(parentID) +sm.warp(105200000, 0) # Root Abyss (Actual Map) diff --git a/scripts/quest/q30009s.py b/scripts/quest/q30009s.py new file mode 100755 index 0000000..ed2a34c --- /dev/null +++ b/scripts/quest/q30009s.py @@ -0,0 +1,20 @@ +# [Root Abyss] Defeat the First Seal Guardian + +ALICIA = 1064002 # npc Id +sm.setSpeakerID(ALICIA) +sm.sendNext("I don't know what you did, but there have been more people through here than the Free Market") + +sm.setPlayerAsSpeaker() +sm.sendNext("The Maple Alliance is going to help me get you out of here.") + +sm.sendNext("Unfortunately, that means I have to take out all these Seal Guardians. Do you have any ideas to help?") + +sm.setSpeakerID(ALICIA) +sm.sendNext("I've been trapped in here since they arrived. I don't know anything, but I can feel their power.") + +response = sm.sendAskYesNo("The door with the clock on it seems to be the least threatening. Maybe that should be your first stop.") + +if response: + sm.sendNext("I know you're strong, but I don't think you can do this alone. Make sure to find an #rally that will help you#k!") + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q30010s.py b/scripts/quest/q30010s.py new file mode 100755 index 0000000..ab28b50 --- /dev/null +++ b/scripts/quest/q30010s.py @@ -0,0 +1,12 @@ +# [Root Abyss] Defeat the Second Seal Guardian + +ALICIA = 1064002 # npc Id +sm.setSpeakerID(ALICIA) +sm.sendNext("Oh I feel the dark energy getting weaker!") + +response = sm.sendAskYesNo("Can you handle the seal guardian behind the teapot door?") + +if response: + sm.sendNext("You may want to prepare a bit. The energy behind that door feels strong.") + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q30011s.py b/scripts/quest/q30011s.py new file mode 100755 index 0000000..d43d6b4 --- /dev/null +++ b/scripts/quest/q30011s.py @@ -0,0 +1,12 @@ +# [Root Abyss] Defeat the Third Seal Guardian + +ALICIA = 1064002 # npc Id +sm.setSpeakerID(ALICIA) +sm.sendNext("I believe it's working. I can really feel the darkness weaken.") + +response = sm.sendAskYesNo("Please take care of the seal guardian behind the crown door?") + +if response: + sm.sendNext("The door with the crown is radiating evil! Better not let your guard down") + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q30012s.py b/scripts/quest/q30012s.py new file mode 100755 index 0000000..8dc9818 --- /dev/null +++ b/scripts/quest/q30012s.py @@ -0,0 +1,12 @@ +# [Root Abyss] Defeat the Final Seal Guardian + +ALICIA = 1064002 # npc Id +sm.setSpeakerID(ALICIA) +sm.sendNext("We're almost there! Only the final seal guardian remains.") + +response = sm.sendAskYesNo("Can you handle the seal guardian behind the dragon door?") + +if response: + sm.sendNext("Be prepared. The energy behind the dragon door feels enormous.") + sm.startQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q30013s.py b/scripts/quest/q30013s.py new file mode 100755 index 0000000..cc2e30e --- /dev/null +++ b/scripts/quest/q30013s.py @@ -0,0 +1,39 @@ +# [Root Abyss] World Tree Rescue + +ALICIA = 1064002 # npc Id +sm.removeEscapeButton() +sm.lockInGameUI(True) +sm.setSpeakerID(ALICIA) +sm.showFieldEffect("Map/Effect.img/rootabyss/undo") +sm.showFieldBackgroundEffect("Effect/Direction11.img/effect/meet/frame0/0") +sm.invokeAfterDelay(4000, "sendNext", "Thank you so much, I can finally go wherever I want!") + +sm.setPlayerAsSpeaker() +sm.sendNext("Oh geez... #b(Neinheart wants me to take her to Ereve, but she looks SO HAPPY to be free. What do I do?)#k") + +sm.sendNext("Heeey, so congratulations on your newfound freedom. But, uh, I think you should go stay in Ereve for a while.") + +sm.setSpeakerID(ALICIA) +sm.sendNext("But...") + +sm.setPlayerAsSpeaker() +sm.sendNext("Just for a while, you know? The Empress and Shinsoo can protect you until you get your powers back. " + "It's really dangerous out in the world right now and I don't want to see you get hurt. " + "But it's all up to you..") + +sm.setSpeakerID(ALICIA) +sm.sendNext("No... they're right. I am too important to risk wandering around as I please. I'll go to Ereve... " + "I just hope they let me go on vacation sometimes.") + +sm.setPlayerAsSpeaker() +sm.sendNext("I'll make sure they do! I'll even beat up Neinheart if I have to!") + +sm.setSpeakerID(ALICIA) +sm.sendNext("Hehehe, okay. Once my powers are fully restored, you and me will blow out of there on a whirlwind of tourism and fun!") + +sm.setPlayerAsSpeaker() +sm.sendNext("You've got yourself a deal. The Cygnus Knights will take you back. I'll see you there.") + +sm.lockInGameUI(False) +sm.startQuest(parentID) +sm.warpInstanceIn(913080001, 0) # Fake Cutscene Field (Ereve) diff --git a/scripts/quest/q30051e.py b/scripts/quest/q30051e.py new file mode 100755 index 0000000..f3a7b4c --- /dev/null +++ b/scripts/quest/q30051e.py @@ -0,0 +1,8 @@ +# id 30051 ([Theme Dungeon] The Straight-Faced Princess), field 106030000 +sm.setSpeakerID(1302001) # Violetta +sm.setParam(32) +sm.setColor(1) +sm.sendNext("You are here on behalf of my father's invitation? Have you come because of my portrait? Sigh, I am cursed with this beauty! If only I wasn't so gorgeous!") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.sendPrev("It's such a burden to be so breathtaking, you know. I mean, the fate of the kingdom falls upon my lovely visage, and those who desire it! Which is everyone, by the way. Don't try to hide it.") diff --git a/scripts/quest/q30051s.py b/scripts/quest/q30051s.py new file mode 100755 index 0000000..76285cc --- /dev/null +++ b/scripts/quest/q30051s.py @@ -0,0 +1,16 @@ +# id 30051 ([Theme Dungeon] The Straight-Faced Princess), field 106030000 +sm.setSpeakerID(1302000) # Mushking +sm.setParam(32) +sm.setColor(1) +sm.sendNext("Welcome to Mushroom Castle, stranger.\r\nI appreciate you coming all the way here. I'm sure Violetta's portrait was more than enough motivation, of course.") +sm.setParam(56) +sm.sendSay("...Her looks are much more shocking in person.") +sm.setParam(32) +sm.sendSay("Yes, Violetta's devilish charms works on anybody, regardless of gender. I'm certain you're wishing to be a candidate for her #r#ehand in marriage#k#n!") +sm.setParam(56) +sm.sendSay("Her spouse? Not at all. (You give your most serious face)") +sm.setParam(32) +sm.sendSay("As you can see, a competition is being held here. The #rVioletta's Smile Competition#k, to be exact. My daughter has never smiled for us in her life, you see. I feel like I have failed as a father... But I also think it's Violetta trying to discourage the unworthy masses, lovesick with her beauty...") +res = sm.sendAskAccept("So I have decided to give the throne to whosoever can make Violetta smile, and become her spouse. It's the only sensible way to decide the kingdom's fate. Mushrooms only, I'm afraid but you can visit with the princess if you like. Go ahead.") +sm.startQuest(parentID) +sm.sendSayOkay("Try not to fall in love with her. I guess it can't be helped, though.") diff --git a/scripts/quest/q30063e.py b/scripts/quest/q30063e.py new file mode 100755 index 0000000..6332468 --- /dev/null +++ b/scripts/quest/q30063e.py @@ -0,0 +1,41 @@ +# id 30063 ([Theme Dungeon] She's On A Boat 1), field 106030500 +sm.setSpeakerID(1302020) # James +sm.setParam(32) +sm.setColor(1) +sm.sendNext("I-I'm scared... Please help...") +sm.createQuestWithQRValue(1470, "on=1;exp=142741503") +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.createQuestWithQRValue(1470, "on=1;exp=142742017") +sm.createQuestWithQRValue(1470, "on=1;exp=142742531") +sm.createQuestWithQRValue(1470, "on=1;exp=142743045") +sm.createQuestWithQRValue(1470, "on=1;exp=142743559") +sm.createQuestWithQRValue(1470, "on=1;exp=142744073") +sm.createQuestWithQRValue(1470, "on=1;exp=142744587") +sm.createQuestWithQRValue(1470, "on=1;exp=142745101") +sm.createQuestWithQRValue(1470, "on=1;exp=142745615") +sm.createQuestWithQRValue(1470, "on=1;exp=142746129") +sm.createQuestWithQRValue(1470, "on=1;exp=142746643") +sm.createQuestWithQRValue(1470, "on=1;exp=142747157") +sm.createQuestWithQRValue(1470, "on=1;exp=142747671") +sm.createQuestWithQRValue(1470, "on=1;exp=142748185") +sm.createQuestWithQRValue(1470, "on=1;exp=142748699") +sm.createQuestWithQRValue(1470, "on=1;exp=142749213") +sm.createQuestWithQRValue(1470, "on=1;exp=142749727") +sm.createQuestWithQRValue(1470, "on=1;exp=142750241") +sm.createQuestWithQRValue(1470, "on=1;exp=142750755") +sm.createQuestWithQRValue(1470, "on=1;exp=142751269") +sm.createQuestWithQRValue(1470, "on=1;exp=142751783") +sm.createQuestWithQRValue(1470, "on=1;exp=142752297") +sm.createQuestWithQRValue(1470, "on=1;exp=142752811") +sm.createQuestWithQRValue(1470, "on=1;exp=142753325") +sm.createQuestWithQRValue(1470, "on=1;exp=142753839") +sm.createQuestWithQRValue(1470, "on=1;exp=142754353") +sm.createQuestWithQRValue(1470, "on=1;exp=142754867") +sm.createQuestWithQRValue(1470, "on=1;exp=142755381") +sm.createQuestWithQRValue(1470, "on=1;exp=142755895") +sm.createQuestWithQRValue(1470, "on=1;exp=142756409") +sm.createQuestWithQRValue(1470, "on=1;exp=142756923") +sm.createQuestWithQRValue(1470, "on=1;exp=142757437") +sm.createQuestWithQRValue(1470, "on=1;exp=142757951") +sm.createQuestWithQRValue(1470, "on=1;exp=142758465") +sm.warp(106030000) diff --git a/scripts/quest/q30075s.py b/scripts/quest/q30075s.py new file mode 100755 index 0000000..334ec3d --- /dev/null +++ b/scripts/quest/q30075s.py @@ -0,0 +1,6 @@ +# id 30075 (Move to the Castle Rear Entrance), field 106030000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1302007) # Head Security Officer +res = sm.sendAskYesNo("I'll send you to the Castle's Rear Entrance.\r\nReady?\r\n\r\n#b(You will automatically travel to the Castle's Rear Entrance if you accept.)#k") +sm.warp(106030302) diff --git a/scripts/quest/q31240s.py b/scripts/quest/q31240s.py new file mode 100755 index 0000000..c39d5c5 --- /dev/null +++ b/scripts/quest/q31240s.py @@ -0,0 +1,8 @@ +# id 31240 ([Crimsonheart] To Grendel's Library), field 993017200 +sm.setSpeakerID(1032001) # Grendel the Really Old +res = sm.sendAskAccept("Do you know of the land of #bTynerum#k? It is a name from ancient history... a land of demons and myth. If you are interested in learning more, pay me a visit in Ellinia. \r\n\r\n#r(You will move to the Magic Library in Ellinia if you accept.)#k") +sm.sendNext("I will await you at the Magic Library.") +sm.setParam(16) +sm.sendSay("(Meet Grendel the Really Old in Ellinia.)") +sm.startQuest(parentID) +sm.warp(101000003) diff --git a/scripts/quest/q31241s.py b/scripts/quest/q31241s.py new file mode 100755 index 0000000..52cb927 --- /dev/null +++ b/scripts/quest/q31241s.py @@ -0,0 +1,13 @@ +# id 31241 ([Crimsonheart] Message from Tynerum), field 101000003 +sm.setSpeakerID(1032001) # Grendel the Really Old +sm.sendNext("Before we proceed, you must understand that the #bGrand Athenaeum#k is no simple archive of books. There is great magic here.") +sm.sendSay("It is a living, breathing space, where all the knowledge in the universe is stored. Much like the Akashic Records of old, where magicians who surpassed time and space gathered to share their knowledge. Rather grandiose, is it not?") +sm.sendSay("The records there can be rather troublesome. Some of the books seem to have personalities of their own, flitting about from room to room. There is a rather peculiar tome that seems to have taken a liking to the coffee percolator in my reading room. No matter how often I return it to its rightful place, it returns to my chambers.") +res = sm.sendAskYesNo("Aren't you curious to know what that book contained?") +sm.setParam(1) +sm.sendNext("Luckily, as I was completing my morning routine, I found the book open to a page full of odd writing. Once I deciphered the meaning, I realized it was a call for help. It said...\r\n\r\n#bTynerum is on the verge of collapse. Chaos rules, law is gone. The demons of Shadow Veil Forest have fallen to ruin. Send help. \r\n- Ridley#k") +sm.sendSay("The name #bTynerum#k brings to mind stirrings of knowledge I had thought forgotten. I can recall little, though I believe it may have once been the #bhome of a race of demons#k.") +sm.sendSay("I believe this strange message could warrant an investigation. Particularly with the string of Demons that have arrived in Maple World as of late.") +sm.sendSay("Tynerum could give us a better understanding of the demon's true intentions... and what happened in the past that led us to where we are today.") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q31243s.py b/scripts/quest/q31243s.py new file mode 100755 index 0000000..965d9af --- /dev/null +++ b/scripts/quest/q31243s.py @@ -0,0 +1,12 @@ +# id 31243 ([Crimsonheart] The Demons of Shadow Veil), field 301000000 +sm.setSpeakerID(2134009) # Pepper +sm.setParam(16) +sm.sendNext("#b(You told Pepper why you are here.)#k") +sm.setParam(0) +res = sm.sendNext("You don't look like the other people of Tynerum. Are you from Shadow Veil, like us? \r\n\r\n#b#L0#I came here through the Dimensional Mirror. Is there someone I can get to help you?#l") +res = sm.sendNext("You-you're from another dimension? ...I don't know if I can believe you, but I guess I don't have any other choice. Besides, you are the first person who hasn't attempted to harm us in ages. My people were foraging for food in the Shadow Veil Forest when monsters came and took us.\r\n\r\n#b#L0#Why did they kidnap you?#l") +res = sm.sendNext("I-I believe we are meant to be #bsacrificed#k.\r\n\r\n#b#L0#Sacrificed?!#l") +res = sm.sendNext("Maybe you really ARE from a different dimension... People have been disappearing around here for years. I'm not sure why you came here though... we never sent out a distress call.\r\n\r\n#b#L0#Is there a sorcerer named #p2134012# here?#l") +res = sm.sendAskYesNo("Never heard of him.") +sm.startQuest(parentID) +sm.sendSayOkay("There's no one named #p2134012# here.\r\n\r\n#b(Search for #p2134012#.)") diff --git a/scripts/quest/q31245s.py b/scripts/quest/q31245s.py new file mode 100755 index 0000000..e99e791 --- /dev/null +++ b/scripts/quest/q31245s.py @@ -0,0 +1,9 @@ +# id 31245 ([Crimsonheart] Crimsonheart Escape), field 301000000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1032001) # Grendel the Really Old +sm.sendNext("What did you find?\r\n\r\n#b(You tell Grendel everything you saw.)#k") +sm.sendSay("It sounds as if Tynerum is in chaos. Sacrifices and lawless clans... what a nightmare.") +res = sm.sendAskYesNo("I believe there is more to this tale than meets the eye. Please help the Demons, and see what more you can learn.") +sm.startQuest(parentID) +sm.sendNext("Do take care not to get captured yourself, won't you?\r\n\r\n#b(Return to #p2134012#.)#k") diff --git a/scripts/quest/q31257s.py b/scripts/quest/q31257s.py new file mode 100755 index 0000000..c7a95e3 --- /dev/null +++ b/scripts/quest/q31257s.py @@ -0,0 +1,10 @@ +# id 31257 ([Crimsonheart] Soldiers of Crimsonwood), field 301000000 +sm.setSpeakerID(2134012) # Ridley +res = sm.sendAskYesNo("Did you rescue all those poor demon kids?") +sm.sendNext("I have to tell you, I was worried when you first showed up. You're not exactly the same kind of warrior we're used to seeing around these parts!") +res = sm.sendNext("I'm guessing you got a look at the soldiers in the upper keep? They're a lot like the ones we saw back in Crimsonwood Keep, only a lot meaner.\r\n\r\n#b#L0#What happened to them?#l") +sm.setParam(1) +sm.sendNext("People change during war. Naricain had ways of corrupting even the best of us.") +sm.sendSay("I'm not sure... None of those things should be walking around after the beatings they got at Crimsonwood, but now they're back and tougher than before. That's some kinda dark magic, if you ask me.") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q31258e.py b/scripts/quest/q31258e.py new file mode 100755 index 0000000..d27f4d3 --- /dev/null +++ b/scripts/quest/q31258e.py @@ -0,0 +1,6 @@ +# id 31258 ([Crimsonheart] Outside the Castle), field 301070010 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("Who was that? He didn't seem like an ordinary demon...") +sm.sendSay("This barrier is too strong to get through... I'll have to turn back.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q31258s.py b/scripts/quest/q31258s.py new file mode 100755 index 0000000..2b6d7db --- /dev/null +++ b/scripts/quest/q31258s.py @@ -0,0 +1,12 @@ +# id 31258 ([Crimsonheart] Outside the Castle), field 301000000 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("(Tell Grendel everything you heard from Ridley.)") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1032001) # Grendel the Really Old +sm.sendSay("A war led by the demon Naricain, eh? Fascinating...") +sm.setParam(4) +res = sm.sendAskYesNo("Can you see what's outside Crimsonheart Castle? Perhaps a greater perspective would help.") +sm.startQuest(parentID) +sm.setParam(5) +sm.sendNext("Very well.\r\n(Exit the Keep through the door on the bottom right.)") diff --git a/scripts/quest/q31331e.py b/scripts/quest/q31331e.py new file mode 100755 index 0000000..66a0c44 --- /dev/null +++ b/scripts/quest/q31331e.py @@ -0,0 +1,28 @@ +# [Stone Colusses] It Ain't Natural + +CHIEF_TATOMO = 2081000 + +sm.setSpeakerID(CHIEF_TATOMO) +sm.sendNext("Well, you don't look like you just spoke to an ancient nature spirit, but I suppose we'll know soon enough. " + "Are you ready for a little adventure?\r\n\r\n" + "#bYou know it! How do I get to the Stone Colossus?") + +sm.sendSay("Ah, humans. No patience, and not enough hair. " + "I would advise you to seek out the Halflinger expedition that has already traveled to the area. " + "They could help you.\r\n\r\n" + "#bThese are Halflinger explorers?") + +response = sm.sendAskYesNo("Don't act so surprised! " + "Our people are peaceful home-bodies for the most part, but the blood of the explorer can show up where you least expect it. " + "What kind of chief would I be if I held them back?\r\n" + "If you'd like, I can send you to their camp right away.") + +if response: + sm.sendNext("That's the spirit. Do an old-timer a favour and check on my villagers for me.") + sm.completeQuest(parentID) + sm.warp(240090000) # Stone Colossus Exploration Site + +else: + sm.sendNext("Oh.. Okay.. I mean.. I thought you were all about adventures.. I guess I was wrong..\r\n\r\n" + "This is so sad.\r\n" + "Alexa, play Despacito 5!") \ No newline at end of file diff --git a/scripts/quest/q31331s.py b/scripts/quest/q31331s.py new file mode 100755 index 0000000..08bd063 --- /dev/null +++ b/scripts/quest/q31331s.py @@ -0,0 +1,44 @@ +# [Stone Colusses] It Ain't Natural + +CHIEF_TATOMO = 2081000 +GUWARU = 2210011 + +sm.setSpeakerID(CHIEF_TATOMO) +sm.sendNext("Minar Forest has always been known as a place of strange occurrences, but this one takes the proverbial peach pie. " + "A mountain that moves... amazing.") + +sm.sendSay("I don't mind telling you, I was as shocked as you are. " + "My bread was practically standing on end. " + "But it's the truth, and that's a fact.") + +sm.sendSay("When times like these come around, I pray to the great spirit Guwaru for guidance. " + "Sure, sure maybe the Black Mage had control over him for a while, but he's rock-solid fella now, hehe") + +response = sm.sendAskYesNo("We halflingers are kin to the sky, wind and forest. We know a few tricks to contact the great spirits. if you'd like, I could arrange a meeting right now.") + +if response: + sm.sendNext("All right then. Clear your noodle, focus on my topknot, and let's contact a spirit! Listen carefully...") + + sm.setSpeakerID(GUWARU) + sm.flipDialogue() + sm.sendSay("This is my fault. I could never have known a being like this would awaken...\r\n" + "#b(You hear a strange and rumbling voice.)") + + sm.flipDialogue() + sm.sendSay("I should have seen it coming. Long ago, when the Black Mage completed his betrayal, my powers were stolen from me. " + "Everything began then. I had to recover from the blow that I had been dealt, and I neglected my duties as guardian of the forest.") + + sm.flipDialogue() + sm.sendSay("This bizarre scenario is my sole responsibility, but I am no more use than an errant fly with my current powers. " + "Perhaps a mortal touch would be more appropriate. Please meet this colossus in my place.") + + sm.flipDialogue() + sm.sendSay("You will need some of my power to understand the great beast... " + "The transfer should not hurt, so long as it doesn't make you grow roots.\r\n" + "#b(Guwaru's light washes over you. you feel different, more... earthy.)") + + sm.flipDialogue() + sm.sendSay("I will contact you again when I need you. Until then...") + sm.startQuest(parentID) +else: + sm.sendSayOkay("Wot? You don't want to contact a higher being?") \ No newline at end of file diff --git a/scripts/quest/q31334s.py b/scripts/quest/q31334s.py new file mode 100755 index 0000000..4af1b6b --- /dev/null +++ b/scripts/quest/q31334s.py @@ -0,0 +1,28 @@ +# [Stone Colossus] Lavi the Listener + +LAVI = 2210000 + +sm.setSpeakerID(LAVI) +sm.sendNext("Kona tells me I'm on your debt. Just remember, you can help out all you want, just don't come crying when you lose a foot. " + "Now what do you want?") + +sm.sendSay("You want my story? I guess I can do that...") + +sm.sendSay("I brought this expedition out to take a look into the earthquakes. " + "Had a pretty good team up here before the bugs drove them off.") + +sm.sendSay("Of course, we lost a few good explorers when they found out the mountain itself was moving. " + "you should've seen the look on Thumbo's face... But I don't scare so easily. " + "I've been studying this mountain since I was fifteen, and I'm gonna keep exploring it until I'm old and gray.") + +sm.sendSay("I'll tell you what though, fifteen year old me did not expect to see this mountain start moving by itself.") + +sm.sendSay("The shaking was so bad, I thought the whole world was ending. " + "I saw that big mouth start moving and thought we were all going into its belly, but I think it was trying to say something.") + +sm.sendSay("Then it just stopped. And the monsters came... " + "That's when most of my crew went back down the hill. " + "I couldn't let them stay in danger, but I couldn't give up either. " + "And that's my story.") + +sm.startQuest(parentID) diff --git a/scripts/quest/q31336s.py b/scripts/quest/q31336s.py new file mode 100755 index 0000000..cbb0f7b --- /dev/null +++ b/scripts/quest/q31336s.py @@ -0,0 +1,50 @@ +# [Stone Colossus] Rolling with Kupo + +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +KUPO = 2210002 +KUPOS_RIDE = 1932165 + +sm.setSpeakerID(KUPO) +sm.sendNext("Who are you? Come to meet the famous driver, master of the wheel, Kupo?! I knew it. " + "My fame is spreading across Maple World. " + "It'll be a hundred million mesos for an autograph, but i'll let you take a picture with me for 75.") + +sm.sendSay("Not even a chuckle?\r\n" + "Let me introduce myself like a proper gent. The name's Kupo.\r\n" + "Rhymes with 'eww, slow'.") + +sm.sendSay("You're not much for small talk, are you? I get it. I respect your need for speed.\r\n" + "Getting up to the Stone Colossus ain't exactly a walk in the park, but I've got the ride that will make it a trip to remember. " + "of course, nobody rides for free...") + +response = sm.sendAskYesNo("Your job's simple enough. I keep the motor running, you do everything else. " + "Don't worry about messing up, just trust your instincts. " + "You think you can handle that?") + +if response: + sm.sendNext("That's right! Let's do this!") + sm.startQuest(parentID) + sm.warpInstanceIn(240090800) # Kupo's Ride The Road Up + sm.rideVehicle(KUPOS_RIDE) + sm.lockInGameUI(True, False) + + sm.sendDelay(10000) + sm.sendNext("So...\r\n" + "What's your favourite hobby?\r\n\r\n" + "Mine is driving!") + + sm.sendDelay(10000) + sm.sendNext("You don't like talking?..\r\nAlright..") + + sm.sendDelay(5000) + sm.sendNext("#fs 18##eALRIGHT I GUESS IF YOU'RE NOT GONNA TALK TO ME I'LL JUST TURN THIS SHIT AROUND!!!") + + sm.sendDelay(2000) + sm.warpInstanceOut(240090000) + sm.removeCTS(CharacterTemporaryStat.RideVehicle) + sm.lockInGameUI(False) + sm.sendSayOkay("..Maybe I was a bit too harsh on you.. I'm sorry\r\n" + "I would give you a ride to the other side, but my car is out of fuel!") +else: + sm.sendSayOkay("No?..") \ No newline at end of file diff --git a/scripts/quest/q31339s.py b/scripts/quest/q31339s.py new file mode 100755 index 0000000..ebf6bfa --- /dev/null +++ b/scripts/quest/q31339s.py @@ -0,0 +1,22 @@ +# [Stone Colossus] Kupo's Ride + +from net.swordie.ms.client.character.skills.temp import CharacterTemporaryStat + +KUPO = 2210002 +KUPOS_RIDE = 1932165 +TIME = 20 + +sm.setSpeakerID(KUPO) +response = sm.sendAskYesNo("Okay. We're all fueled up! Ready to head out now?") + +if response: + sm.startQuest(parentID) + sm.warpInstanceIn(240090800, 0) # Kupo's Ride The Road Up + sm.rideVehicle(KUPOS_RIDE) + sm.lockInGameUI(True, False) + sm.setInstanceTime(TIME, 240091000, 2) + sm.invokeAfterDelay(TIME * 1000, "removeCTS", CharacterTemporaryStat.RideVehicle) + sm.invokeAfterDelay(TIME * 1000, "lockInGameUI", False) + sm.sendNext("Yeehaa! Let's go!") +else: + sm.sendSayOkay("What do you mean, no?") \ No newline at end of file diff --git a/scripts/quest/q31342s.py b/scripts/quest/q31342s.py new file mode 100755 index 0000000..0bea2eb --- /dev/null +++ b/scripts/quest/q31342s.py @@ -0,0 +1,17 @@ +# [Stone Colossus] Wanderin' the Colossus + +CHINO = 2210004 +TIME = 20 + +sm.setSpeakerID(CHINO) +sm.sendNext("Okay, are you set to go? We're going to take the elevator up the side of the Stone Colossus, and it's going to be a long trip. " + "Make sure you're ready.") + +response = sm.sendAskYesNo("Are you ready?") + +if response: + sm.warpInstanceIn(240091600) + sm.startQuest(parentID) + sm.setInstanceTime(TIME, 240092000, 0) +else: + sm.sendSayOkay("What are you waiting for?") \ No newline at end of file diff --git a/scripts/quest/q31344s.py b/scripts/quest/q31344s.py new file mode 100755 index 0000000..f2f8111 --- /dev/null +++ b/scripts/quest/q31344s.py @@ -0,0 +1,31 @@ +# [Stone Colossus] Risen from Stone + +GUWARU = 2210011 + +sm.setSpeakerID(GUWARU) +sm.flipDialogue() +sm.sendNext("Greetings #h0#! Can you hear me? Have you spoken with the colossus?\r\n" + "#b(It sounds like Guwaru. You tell him all about the Stone Colossus.)") + +sm.flipDialogue() +sm.sendSay("The birth of this creature is something I had long thought impossible. " + "The spirits of hundreds, if not thousands, of lesser life forms have combined to become one, gigantic entity.") + +sm.flipDialogue() +sm.sendSay("This all began when my powers wre abused by Magnus long ago. " + "The smaller spirits huddled together in fear at the corruption that held me. " + "Alone they were mere insects. Together, they could be safe. " + "The lack of my guidance forced them to coalesce") + +sm.flipDialogue() +sm.sendSay("But this is unnatural, and dangerous. If these spirits were dispersed across the world, the corruption of a few would not be a concern. " + "But if they were tainted by dark energy in this confined space, I fear the corruption would spread too fast to stop.") + +sm.flipDialogue() +sm.sendSay("The catastrophes that colossus could create, if left under the influence of evil powers... " + "I cannot begin to think. If only I had not allowed myself to fall victim to the Black Mage's idiotic plans.") + +sm.flipDialogue() +sm.sendSay("You must help the Stone Colossus regain its pure heart. It would be disastrous if the creature were to fall evil.") + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q31348e.py b/scripts/quest/q31348e.py new file mode 100755 index 0000000..6942009 --- /dev/null +++ b/scripts/quest/q31348e.py @@ -0,0 +1,20 @@ +# [Stone Colossus] Colossal Clean Up 4 + +UNKNOWN_PERSON = 2210009 # Npc Name = ??? + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("I can't believe the Goddess would create such a vile and vicious monster.") + +sm.setSpeakerID(UNKNOWN_PERSON) +sm.flipDialogue() +sm.sendSay("This is only the beginning. There is so much more in store...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("#b(The stranger's voice fades with the passing wind.)") + +sm.warpInstanceOut(240092000, 0) # Top of Chino's Station +sm.completeQuest(parentID) + +sm.removeEscapeButton() +sm.startQuest(31349) # [Stone Colossus] Colossal Clean Up 5 +sm.sendSayOkay("I should check on the Stone Colossus!") \ No newline at end of file diff --git a/scripts/quest/q31351e.py b/scripts/quest/q31351e.py new file mode 100755 index 0000000..a58b87d --- /dev/null +++ b/scripts/quest/q31351e.py @@ -0,0 +1,8 @@ +# [Stone Colossus] Colossal Clean Up 7 + +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("#b(The Stone Colossus's trembling subsides. A feeling of calm and peace washes over the area.)#k\r\n" + "Whew, I think the Stone Colossus is out of harm's way for now.") + +sm.sendNext("I'd better see how old rock-face is doing.") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q31802s.py b/scripts/quest/q31802s.py new file mode 100755 index 0000000..b181eac --- /dev/null +++ b/scripts/quest/q31802s.py @@ -0,0 +1,22 @@ + + +sm.setSpeakerID(3001007) +sm.sendNext("I'm sorry, but it's crazy around here. Our commanders, #b#p3001000##k and #b#p3001001##k, are cut off near the front.") + + +sm.sendSay("They're both top-quality warriors, but I'm worried about the troops with them. They may not have the fortitude to handle that kind of battle.") + +sm.sendSay("I don't really have time to go into further detail, but we need your help on the battlefield. I'll guide you there!") + +response = sm.sendAskYesNo("Please protect as may soldiers as you can! If you succeed, please go to the #b#m401000001##k and speak with both #b#p3001001##k and #b#p3001000##k. I wish you luck, Maple Warrior! \r\n \r\n #b(#ePress Accept to move automatically. You will have to forfeit the quest and restart if you fail.#n)#k") + +if response: + sm.setFlippedPlayerAsSpeaker() + sm.sendNext("I'm ready to enter the Heliseum Reclamation HQ and hunt down my enemies.") +elif response == 0: + #TODO + sm.dispose() + +sm.startQuest(31802) +sm.warpInstanceIn(401070000) +sm.dispose() diff --git a/scripts/quest/q31806s.py b/scripts/quest/q31806s.py new file mode 100755 index 0000000..0baa59d --- /dev/null +++ b/scripts/quest/q31806s.py @@ -0,0 +1,15 @@ +#Securing the Front Lines | Magnus Prequest + +sm.setSpeakerID(3001000) +sm.sendNext("Hey there. Glad to see you made it here with all your limbs. I called you out here to help me lock down the front.") +sm.setPlayerAsSpeaker() +sm.sendNext("I didn't think all those battle hounds were stopping supplies from getting through.") +sm.setSpeakerID(3001000) +sm.sendNext("You got that right. We need to open up the supply lines if we want to make a difference. That means an attack on the #b#m401010010##k, where all those #r#o2400109##k monsters are holed up.") +if sm.sendAskYesNo("It's tough to get through them with their High HP and defense. but I'm sure you'll figure out a way to take down their shields. \r\n \r\n #b#e(Press Accept to move automatically. You will have to forfeit the quest and restart if you fail.)#k#n"): + sm.sendNext("It shouldn't be too tough for you. You'll take care of business easy.") + sm.startQuest(31806) + sm.warpInstanceIn(401070100) + sm.dispose() +else: + sm.dispose() diff --git a/scripts/quest/q31900e.py b/scripts/quest/q31900e.py new file mode 100755 index 0000000..d3d07ae --- /dev/null +++ b/scripts/quest/q31900e.py @@ -0,0 +1,6 @@ +# id 31900 ([Twilight Perion] The Second Future), field 913050010 +sm.setSpeakerID(1105001) # Athena Pierce +res = sm.sendAskAccept("You're here! Let's get the meeting started right away!") +sm.setParam(1) +sm.sendNext("We must begin immediately, without any delays.") +sm.warp(913051000) diff --git a/scripts/quest/q32000s.py b/scripts/quest/q32000s.py new file mode 100755 index 0000000..32b6b8f --- /dev/null +++ b/scripts/quest/q32000s.py @@ -0,0 +1,8 @@ +# Rage Acolyte + +medal = 1142553 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32001s.py b/scripts/quest/q32001s.py new file mode 100755 index 0000000..b74d360 --- /dev/null +++ b/scripts/quest/q32001s.py @@ -0,0 +1,8 @@ +# Fury Incarnate + +medal = 1142554 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32002s.py b/scripts/quest/q32002s.py new file mode 100755 index 0000000..188a557 --- /dev/null +++ b/scripts/quest/q32002s.py @@ -0,0 +1,8 @@ +# Abyssal Avenger + +medal = 1142555 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32003s.py b/scripts/quest/q32003s.py new file mode 100755 index 0000000..2dbae9e --- /dev/null +++ b/scripts/quest/q32003s.py @@ -0,0 +1,8 @@ +# Rage Master + +medal = 1142556 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32004s.py b/scripts/quest/q32004s.py new file mode 100755 index 0000000..9178c6d --- /dev/null +++ b/scripts/quest/q32004s.py @@ -0,0 +1,8 @@ +# Ultimate Avenger + +medal = 1142557 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32005s.py b/scripts/quest/q32005s.py new file mode 100755 index 0000000..6668ad5 --- /dev/null +++ b/scripts/quest/q32005s.py @@ -0,0 +1,8 @@ +# Memory Seeker + +medal = 1142575 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32006s.py b/scripts/quest/q32006s.py new file mode 100755 index 0000000..373cef8 --- /dev/null +++ b/scripts/quest/q32006s.py @@ -0,0 +1,8 @@ +# Secret Agent + +medal = 1142576 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32007s.py b/scripts/quest/q32007s.py new file mode 100755 index 0000000..65aeb26 --- /dev/null +++ b/scripts/quest/q32007s.py @@ -0,0 +1,8 @@ +# Captain Freedom + +medal = 1142577 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32008s.py b/scripts/quest/q32008s.py new file mode 100755 index 0000000..3d31f75 --- /dev/null +++ b/scripts/quest/q32008s.py @@ -0,0 +1,8 @@ +# Border Patrol + +medal = 1142578 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32009s.py b/scripts/quest/q32009s.py new file mode 100755 index 0000000..1284bfb --- /dev/null +++ b/scripts/quest/q32009s.py @@ -0,0 +1,8 @@ +# Last One Home + +medal = 1142579 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32018s.py b/scripts/quest/q32018s.py new file mode 100755 index 0000000..7353dc7 --- /dev/null +++ b/scripts/quest/q32018s.py @@ -0,0 +1,8 @@ +# Shadow Knight + +medal = 1142634 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32019s.py b/scripts/quest/q32019s.py new file mode 100755 index 0000000..61cac1c --- /dev/null +++ b/scripts/quest/q32019s.py @@ -0,0 +1,8 @@ +# Child of the Goddess + +medal = 1142635 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32023s.py b/scripts/quest/q32023s.py new file mode 100755 index 0000000..93c9fde --- /dev/null +++ b/scripts/quest/q32023s.py @@ -0,0 +1,8 @@ +# Honorary Fox + +medal = 1142671 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32024s.py b/scripts/quest/q32024s.py new file mode 100755 index 0000000..c360a1a --- /dev/null +++ b/scripts/quest/q32024s.py @@ -0,0 +1,9 @@ +# Forgotten Hero + +medal = 1142672 + +if sm.canHold(medal): + sm.chatScript("You have earned a new medal.") + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.giveSkill(20051005, 1, 1) \ No newline at end of file diff --git a/scripts/quest/q32102s.py b/scripts/quest/q32102s.py new file mode 100755 index 0000000..5d9e557 --- /dev/null +++ b/scripts/quest/q32102s.py @@ -0,0 +1,36 @@ +# [Ellinel Fairy Academy] You Can Do It + +FANZY = 1500010 # NPC ID +YOU_CAN_DO_IT = 32102 # QUEST ID + +sm.setSpeakerID(FANZY) +sm.sendNext("Are you asking where we are? Did you follow me without knowing where I was going? This is the forest path to the #b Ellinel Fairy Academy#k.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Ellinel Fairy Academy?") + +sm.setSpeakerID(FANZY) +sm.sendSay("Yes. #b Ellinel#k is an academy where fairy children learn magic.") + +sm.setPlayerAsSpeaker() +sm.sendSay("But why is it hidden so deep within the forest?") + +sm.setSpeakerID(FANZY) +sm.sendSay("Did you know that #bEllinia#k used to be a fairy town? Several hundred years ago, after a war with the Black Mage, humans came in and reclaimed the town and it became the #bEllinia#k we know now.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Then that must mean that fairies live outside of Ellinia, too.") + +sm.setSpeakerID(FANZY) +sm.sendSay("Some fairies are okay with humans, but others very much are not. It's the same in the #bEllinel Fairy Academy#k. They don't want to mix with humans, and so they disappeared into the forest. That's why the school is far across the lake.") + +sm.setPlayerAsSpeaker() +sm.sendSay("You think Cootie got captured by human-hating fairies?") + +sm.setSpeakerID(FANZY) +response = sm.sendAskAccept("Most likely. I know I thought about using him as a scratching post a few times. Master #bGrendel#k and I tried to befriend the fairies, but they just weren't listening. I think we should use more... forceful methods.\r\n#b #h ##k, let me ask... are you a good swimmer?") + +if response: + sm.sendNext("Why don't you go for a swim! Show us how brave you are, meow...\r\n#b (Cross the lake to the right.)#k'") + sm.startQuestNoCheck(YOU_CAN_DO_IT) +sm.dispose() diff --git a/scripts/quest/q32106e.py b/scripts/quest/q32106e.py new file mode 100755 index 0000000..359a349 --- /dev/null +++ b/scripts/quest/q32106e.py @@ -0,0 +1,5 @@ +# id 32106 ([Ellinel Fairy Academy] Ivana's Misunderstanding), field 101072000 +sm.setSpeakerID(1500000) # Cootie the Really Small +sm.sendNext("Are you here to chastise me?") +sm.sendSay("Look, hear me out, please? Why would I ever kidnap a fairy? SURE, they're THE most evolved and amazing species on the planet, but...") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q32106s.py b/scripts/quest/q32106s.py new file mode 100755 index 0000000..5bb53dd --- /dev/null +++ b/scripts/quest/q32106s.py @@ -0,0 +1,23 @@ +# id 32106 ([Ellinel Fairy Academy] Ivana's Misunderstanding), field 101072000 +sm.setSpeakerID(1500001) # Headmistress Ivana +sm.setParam(4) +sm.setSpeakerID(1500001) # Headmistress Ivana +sm.sendNext("You're still here. Is there more to discuss?") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("You cannot trust this outsider, Headmistress! The human will only feed us lies and lame excuses. ") +sm.setPlayerAsSpeaker() +sm.sendSay("#bI thought you were a wise and rational people. We should analyze the facts before we come to any kind of judgment. #k") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendNext("Five children vanished into thin air at once! What other facts do you need? This one kidnapped them, end of story!") +sm.setPlayerAsSpeaker() +sm.sendNext("#b So, you have proof that Cootie was the culprit?") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendNext("The on you call Cootie has been chased off of these grounds a number of times, but he continues to return and defy our wishes. He has been conducting secret experiments in our forest!") +sm.sendNext("He's been planning this! It's the perfect crime. He comes to scout the area for weeks before he finally steals the children from underneath our very noses! He knew we had a number of staffers going out on vacation, and I caught him loitering around the scene of the crime afterward. He MUST be guilty!") +sm.setPlayerAsSpeaker() +sm.sendNext("#b(Could Cootie really have planned the kidnapping of five children? He's so small!)") +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendNext("Your desire is to find the most rational explanation. I present to you that our primes suspect IS the omst rational explanation. We must interrogate him.") +sm.setPlayerAsSpeaker() +sm.sendNext("#b(They're way too upset to see anybody except Cootie as a suspect. Better talk to him...)") +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32109e.py b/scripts/quest/q32109e.py new file mode 100755 index 0000000..6daa845 --- /dev/null +++ b/scripts/quest/q32109e.py @@ -0,0 +1,10 @@ +# id 32109 ([Ellinel Fairy Academy] Cootie's Suggestion), field 101072000 +sm.setSpeakerID(1500001) # Headmistress Ivana +res = sm.sendNext("You think YOU can find the missing children? How do you propose to do that?#b\r\n#L0#Let's look around the lake. #l\r\n#L1#Why don't we use magic?#l#l\r\n#L2#I'd like to look through the childrens' rooms.#l") +if res == 0: + sm.sendNext("The lake has been searched ten times over at this point. There's nothing left there to find. ") +elif res == 1: + sm.sendNext("Magic doesn't work like that.") +elif res == 2: + sm.sendNext("I don't really like the idea of you snooping around, but you can go ahead.") + sm.completeQuest(parentID) diff --git a/scripts/quest/q32110e.py b/scripts/quest/q32110e.py new file mode 100755 index 0000000..5ce35b3 --- /dev/null +++ b/scripts/quest/q32110e.py @@ -0,0 +1,5 @@ +# id 32110 ([Ellinel Fairy Academy] Combing the Academy 1), field 101072200 +sm.setSpeakerID(1500011) # Cootie the Really Small +sm.sendNext("Did you find anything useful?") +sm.sendSay("A secret project? We'd better look for that from here out.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q32110s.py b/scripts/quest/q32110s.py new file mode 100755 index 0000000..cbf5553 --- /dev/null +++ b/scripts/quest/q32110s.py @@ -0,0 +1,18 @@ +# id 32110 ([Ellinel Fairy Academy] Combing the Academy 1), field 101072200 +sm.setSpeakerID(1500011) # Cootie the Really Small +sm.sendNext("Isn't this place amazing, #h0#. Let's have a look around.") +sm.setParam(2) +sm.sendSay("What should we do first?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500011) # Cootie the Really Small +sm.sendSay("You know what kids love the most? Secrets! I remember trading potion recipes with my friends behind the teacher's backs, hiding away my alchemy research in the nooks around school...") +sm.setParam(0) +res = sm.sendNext("I bet these kids have hidden notes all around the school. But how would we find them?#b\r\n#L0#Find the children and ask them where they hid things.#l\r\n#L1#They must be nearby, we should look around.#l#l\r\n#L2#I have no idea. This is hard...#l") +if res == 0: + sm.sendNext("What a human thing to say, #h0#. We have to find their secrets FIRST! Then we find them... geez.") +elif res == 1: + sm.sendNext("Everyone already searched, We should try something else.") +elif res == 2: + sm.sendNext("Maybe there are clues written in these books.") + sm.startQuest(parentID) + sm.addQRValue(32133, "1") diff --git a/scripts/quest/q32111s.py b/scripts/quest/q32111s.py new file mode 100755 index 0000000..b1f1c08 --- /dev/null +++ b/scripts/quest/q32111s.py @@ -0,0 +1,5 @@ +# id 32111 ([Ellinel Fairy Academy] Combing the Academy 2), field 101072200 +sm.setSpeakerID(1500011) # Cootie the Really Small +res = sm.sendAskAccept("If this note is accurate, the secret thing they were working on will be around the dormitories. The boys' hall stretches across most of the second floor. Let's try there.") +sm.sendNext("I, uh, I'm going to hang out here until you're done. I need to look around...\r\n#b(Check the dormitories on both ends of the 2nd floor.)#k") +sm.startQuest(parentID) diff --git a/scripts/quest/q32112e.py b/scripts/quest/q32112e.py new file mode 100755 index 0000000..3ed9e73 --- /dev/null +++ b/scripts/quest/q32112e.py @@ -0,0 +1,6 @@ +# id 32112 ([Ellinel Fairy Academy] Clue Number One), field 101072200 +sm.setSpeakerID(1500011) # Cootie the Really Small +sm.sendNext("You found a script? Let me take a look at that.\r\n\r\n...Well, there are some obvious problems in the first act, and the All-You-Can-Eat Sundae Bar scene seems a little tacked on, but this is a fine example of fairy entertainment. Why did the kids have this?") +sm.sendSay("Let's investigate the third floor! Maybe we'll find something else.\r\n\r\n#b(Talk to #b#p1500012##k on the 3rd floor of Ellinel Fairy Academy.)#k") +sm.completeQuestNoCheck(32111) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q32112s.py b/scripts/quest/q32112s.py new file mode 100755 index 0000000..ec1f293 --- /dev/null +++ b/scripts/quest/q32112s.py @@ -0,0 +1,19 @@ +# id 32112 ([Ellinel Fairy Academy] Clue Number One), field 101072400 +sm.setSpeakerID(1500021) # Hidey Hole +if sm.sendAskAccept("There's something weird over here. Should we check it out?"): + sm.setParam(2) + sm.sendNext("#i4033828# \r\n\r\n(You found... a stageplay. Did the kids write this thing? It's like 300 pages long! You'd probably better go ahead and read it... for research...)") + sm.setParam(4) + sm.setInnerOverrideSpeakerTemplateID(1500022) # Fairy Stageplay + sm.sendSay("[Fairy Stageplay]\r\n\r\n- Act 3 -\r\n\r\n[The curtain rises as a solemn tune fills the air.]\r\n\r\nPHANTOM: (to audience) This world is a world of sadness and sorrow, and also sadness! I warn thee, commander of evil and friend to the Black Mage, I will never allow you to rest in peace, except when I make you rest in peace! I have stolen gems and masterpieces from millions of fancy people, but the last thing I will take... IS YOUR LIFE!") + sm.setParam(2) + sm.sendSay("This is amazing... I've got to read more") + sm.setParam(4) + sm.sendSay("[Fairy Stageplay]\r\n\r\nARAN: (Brave and wistful at the same time) Dear guardian of light, travel faster than light! I will ward off the evils of the enemy with my tornado arms!\r\nLUMINOUS: (Super lamenty) I swear by the mightiest of all the gods of time and light powers that I will defeat the Black Mage with my ultra light magic before your weapon can destroy its thousandth and one enemy! \r\n\r\n[The lights dim and Freud and Mercedes appear, stage left]\r\n\r\nFREUD: Oh dearest, fairest, cutest queen of elves! You are so pretty that I want to kiss your feet and then brush your hair! My honor is exploding with extra power from fighting at your side!\r\nMERCEDES: Oh, most dragonest of Dragon Masters, I will be proud to fight at your side, with my awesome hair flowing in the wind from your sweet dragon! The Black Mage will fall before us!") + sm.setParam(2) + sm.sendSay("Why in the world were the kids hiding this thing? I want to read more, but I have to show Cootie.\r\n(Talk to #b#p1500011##k.)") + if sm.canHold(4033828): + sm.giveItem(4033828) + sm.startQuest(parentID) + else: + sm.sendNext("You can't pick up the Fairy Stageplay item, please make some space in your inventory.") diff --git a/scripts/quest/q32114s.py b/scripts/quest/q32114s.py new file mode 100755 index 0000000..3cd5695 --- /dev/null +++ b/scripts/quest/q32114s.py @@ -0,0 +1,5 @@ +# id 32114 ([Ellinel Fairy Academy] Combing the Academy 4), field 101072700 +sm.setSpeakerID(1500012) # Cootie the Really Small +res = sm.sendAskAccept("The girls' dormitories are laid out just like the boys', on the end of each floor. I don't know if I'm supposed to be looking around in ladies' rooms though...") +sm.sendNext("We must do what must be done to complete this investigation!\r\n(Cootie's blushing for some reason...)\r\n\r\nPlease look around the dormitories on the third floor for me...") +sm.startQuest(parentID) diff --git a/scripts/quest/q32115e.py b/scripts/quest/q32115e.py new file mode 100755 index 0000000..d835027 --- /dev/null +++ b/scripts/quest/q32115e.py @@ -0,0 +1,6 @@ +# id 32115 ([Ellinel Fairy Academy] Clue Number Two), field 101072700 +sm.setSpeakerID(1500012) # Cootie the Really Small +sm.sendNext("These costumes must be what the girls were working on in secret! I bet they were putting on that play we found! But how does this tie into their disappearance?") +sm.sendSay("Let's go back to the first floor and talk with the Headmistress.\r\n\r\n#b(Go to the 1st floor of Ellinel Fairy Academy.)#k") +sm.completeQuestNoCheck(32114) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q32115s.py b/scripts/quest/q32115s.py new file mode 100755 index 0000000..5cc5258 --- /dev/null +++ b/scripts/quest/q32115s.py @@ -0,0 +1,11 @@ +# id 32115 ([Ellinel Fairy Academy] Clue Number Two), field 101072500 +sm.setSpeakerID(1500023) # Hidey Hole +if sm.sendAskAccept("There's something weird over here. Should we check it out?"): + sm.setParam(2) + sm.sendNext("#i4033829# \r\n\r\nThere's so much clothing up here... Some of them look weird.") + sm.sendSay("#i1052196##i1050168##i1052495#\r\n\r\nI knew it! These are stage costumes! I'd better get this back to Cootie.") + if sm.canHold(4033829): + sm.startQuest(parentID) + sm.giveItem(4033829) + else: + sm.sendNext("You can't hold the Fairy Stage Costumes because you don't have sufficient inventory space.") diff --git a/scripts/quest/q32116e.py b/scripts/quest/q32116e.py new file mode 100755 index 0000000..b1a3a57 --- /dev/null +++ b/scripts/quest/q32116e.py @@ -0,0 +1,5 @@ +# id 32116 ([Ellinel Fairy Academy] The Search Concluded), field 101072000 +sm.setSpeakerID(1500001) # Headmistress Ivana +res = sm.sendAskAccept("I owe you an apology. We completely misunderstood your intentions here. I hope you will continue to help us find the children.") +sm.sendNext("I need to think about how to find the missing students. Give me some time, please.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q32116s.py b/scripts/quest/q32116s.py new file mode 100755 index 0000000..55e525f --- /dev/null +++ b/scripts/quest/q32116s.py @@ -0,0 +1,24 @@ +# id 32116 ([Ellinel Fairy Academy] The Search Concluded), field 101072000 +sm.setSpeakerID(1500000) # Cootie the Really Small +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendNext("Hey, #b#h0##k. I was just telling the Headmistress what we found...") +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendSay("You believe the children were trying to stage a play?") +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("Everything we found points to it. Do you think that's why the kids are missing?") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("...This is all my fault, Headmistress Ivana.") +sm.sendSay("......") +sm.sendSay("A few days past, I caught the children mimicking the heroes of humankind, so I admonished them.") +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("Why did you punish them? It's only natural for kids to admire heroes. When I was their age, I used to--") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("We do not spend our time dreaming about humans. \r\n\r\nI could not have known the children would have been so insistent. They must have begun rehearsing in secret...") +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("They must have gone somewhere dangerous to stay away from you... Like the forest...") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("If... If something bad were to happen to the children, I-I can't...") +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendSay("Calm down, Kalayan. We need to remain poised.") +sm.startQuest(parentID) diff --git a/scripts/quest/q32117e.py b/scripts/quest/q32117e.py new file mode 100755 index 0000000..2ad4f7f --- /dev/null +++ b/scripts/quest/q32117e.py @@ -0,0 +1,8 @@ +# id 32117 ([Ellinel Fairy Academy] Graduate Search), field 101000000 +sm.setSpeakerID(1032100) # Arwen the Fairy +sm.sendNext("What do you want? I'm busy...") +sm.setPlayerAsSpeaker() +sm.sendNext("(You tell Arwen what's going on.)") +sm.setSpeakerID(1032100) # Arwen the Fairy +sm.sendNext("Missing students? That sounds dangerous... Ellinel isn't the safest place to go missing.") +sm.completeQuest(parentID) diff --git a/scripts/quest/q32117s.py b/scripts/quest/q32117s.py new file mode 100755 index 0000000..6d01462 --- /dev/null +++ b/scripts/quest/q32117s.py @@ -0,0 +1,6 @@ +# id 32117 ([Ellinel Fairy Academy] Graduate Search), field 101072000 +sm.setSpeakerID(1500001) # Headmistress Ivana +res = sm.sendAskAccept("Do you know Arwen or Rowen from Ellinia? They are former Ellinel Fairy Academy graduates. They might know of some places we teachers do not.\r\n\r\n #e#b(You will be moved to Ellinia if you accept.)#k") +sm.sendNext("Please meet Arwen the Fairy in Ellinia.") +sm.startQuest(parentID) +sm.warp(101000000) diff --git a/scripts/quest/q32120e.py b/scripts/quest/q32120e.py new file mode 100755 index 0000000..3c7f355 --- /dev/null +++ b/scripts/quest/q32120e.py @@ -0,0 +1,50 @@ +# id 32120 ([Ellinel Fairy Academy] Dr. Betty's Measures), field 101072000 +sm.setSpeakerID(1500001) # Headmistress Ivana +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendNext("Welcome back. Did the girls in Ellinia help you?") +sm.setParam(2) +sm.sendSay("(You show them Dr. Betty's device.)") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("Are you suggesting we befoul our forest with this filthy, foul item from the corrupted human civilization? Never!") +sm.setInnerOverrideSpeakerTemplateID(1500009) # Rowen the Fairy +sm.sendSay("There's no other option at this point, Faculty Head Kalayan.") +sm.setInnerOverrideSpeakerTemplateID(1500008) # Arwen the Fairy +sm.sendSay("Rowen's right. We have to find those children!") +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendSay("I cannot say that I am fond of the idea, but we have no other options.") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("Fine. But this is on YOUR wings if it pollutes our forest...") +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("Everyone, please stay quiet for a minute. I'm going to turn it on.") +sm.lockInGameUI(True, True) +sm.sendDelay(500) +sm.changeBGM("Bgm34.img/TheFairyForest", 0, 0) +sm.setParam(5) +sm.sendNext("......") +sm.sendSay("Wow, I can hear the whole forest!") +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.sendNext("???") +sm.sendDelay(2000) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendNext("What's wrong with this thing? Why is it only recording useless noises?") +sm.setInnerOverrideSpeakerTemplateID(1500009) # Rowen the Fairy +sm.sendSay("Shh... Be quiet.") +sm.sendDelay(3000) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendNext("That voice!") +sm.setInnerOverrideSpeakerTemplateID(1500000) # Cootie the Really Small +sm.sendSay("It's coming from out back!") +sm.setInnerOverrideSpeakerTemplateID(1500002) # Faculty Head Kalayan +sm.sendSay("Be patient, children! I will save you right now!") +sm.setInnerOverrideSpeakerTemplateID(1500009) # Rowen the Fairy +sm.sendSay("Arwen, we should help.") +sm.setInnerOverrideSpeakerTemplateID(1500001) # Headmistress Ivana +sm.sendSay("Everyone, please wait!") +sm.changeBGM("Bgm34.img/TheFairyAcademy", 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q32120s.py b/scripts/quest/q32120s.py new file mode 100755 index 0000000..3704fc6 --- /dev/null +++ b/scripts/quest/q32120s.py @@ -0,0 +1,10 @@ +# id 32120 ([Ellinel Fairy Academy] Dr. Betty's Measures), field 101000000 +sm.setSpeakerID(1032104) # Betty +sm.sendNext("I have studied the magical forests around the academy a great deal. It's difficult to navigate, but I created a tool that can help you at least identify which directions sounds are coming from. \r\n\r\n#i4033830##b#t4033830##k") +if sm.sendAskAccept("I'm not sure how helpful it will be, but it's better than nothing. Now, I've got to go before my lab explodes. \r\n\r\n#b(You will move to Ellinel Fairy Academy if you accept.)#k"): + if sm.canHold(4033830): + sm.giveItem(4033830) + sm.startQuest(parentID) + sm.warp(101071300) + else: + sm.sendNext("You don't have enough inventory space to hold this Directional Sonar.") \ No newline at end of file diff --git a/scripts/quest/q32129s.py b/scripts/quest/q32129s.py new file mode 100755 index 0000000..2c4b365 --- /dev/null +++ b/scripts/quest/q32129s.py @@ -0,0 +1,6 @@ +# id 32129 ([Ellinel Fairy Academy] Professor Peace), field 101073200 +sm.setSpeakerID(1500015) # Cootie the Really Small +res = sm.sendAskAccept("Not bad, #h0#. You really thought like a fairy out there. Let's return to the Headmistress in Ellinel. \r\n#b(You will be moved to Ellinel if you accept.)#k") +sm.setParam(1) +sm.sendNext("Great. All the kids must be back by now, right?") +sm.warp(101072001) diff --git a/scripts/quest/q32136e.py b/scripts/quest/q32136e.py new file mode 100755 index 0000000..12a026d --- /dev/null +++ b/scripts/quest/q32136e.py @@ -0,0 +1,9 @@ +# id 32136 | [Theme Dungeon] Ellinel Fairy Academy +sm.setSpeakerID(1040002) +sm.sendNext("Are you the one I invited to help with the ruckus at the Ellinel Fairy Academy?") +sm.setPlayerAsSpeaker() +sm.sendNext("Um, of course?") +sm.setSpeakerID(1040002) +sm.sendNext("You don't look as strong as I'd hoped. But, you're famous, so I'll leave it to you.") +sm.completeQuest(parentID) +sm.createQuestWithQRValue(32101, "1") \ No newline at end of file diff --git a/scripts/quest/q32136s.py b/scripts/quest/q32136s.py new file mode 100755 index 0000000..d97d313 --- /dev/null +++ b/scripts/quest/q32136s.py @@ -0,0 +1,7 @@ +# id 32136 | [Theme Dungeon] Ellinel Fairy Academy +sm.setSpeakerID(10201) +sm.sendNext("Could you spare me a moment? I received a request for help, and I can' think of anyone better than you.") +sm.sendNext("There has been an incident at the #bEllinel Fairy Academy#k. A human magician has trespassed in the sacred halls of the fairy school.") +if sm.sendAskYesNo("Fanzy will take you into the land of the fairies. I can send you to him directly, if you'd like."): + sm.warp(101030000) + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32138e.py b/scripts/quest/q32138e.py new file mode 100755 index 0000000..d6aba15 --- /dev/null +++ b/scripts/quest/q32138e.py @@ -0,0 +1,3 @@ +# id 32138 ([Theme Dungeon] Ellinel Fairy Academy ), field 101030000 +sm.setSpeakerID(1040002) # Fanzy +sm.sendNext("Are you the one I invited to help with the ruckus at the Ellinel Fairy Academy?") diff --git a/scripts/quest/q32138s.py b/scripts/quest/q32138s.py new file mode 100755 index 0000000..9ddd902 --- /dev/null +++ b/scripts/quest/q32138s.py @@ -0,0 +1,4 @@ +# id 32138 ([Theme Dungeon] Ellinel Fairy Academy ), field 270000000 +sm.setSpeakerID(1052001) # Dark Lord +res = sm.sendAskAccept("Right on time. I've received some disturbing news...") +sm.sendNext("There's been an incident at the #bEllinel Fairy Academy#k. Unlike Ellinia, Ellinel has been a sacred place for fairies to live and learn uninterrupted by the outside world. However, a #rhuman Magician#k has trespassed on their territory.") diff --git a/scripts/quest/q32143s.py b/scripts/quest/q32143s.py new file mode 100755 index 0000000..6bb48ce --- /dev/null +++ b/scripts/quest/q32143s.py @@ -0,0 +1,24 @@ +# [Theme Dungeon] Ellinel Fairy Academy +# This version appears for Wind Archer + +IRENA = 1101005 # NPC ID +THEME_DUNGEON_ELLINEL_FAIRY_ACADEMY = 32151 # QUEST ID +NORTH_FOREST_GIANT_TREE = 101030000 # MAP ID + +sm.setSpeakerID(IRENA) +response = sm.sendAskAccept("#h #, could you spare me a moment? I received a request for help, and i can't think of anyone better than you.") + +if response: + sm.sendNext("There has been an incident at the #b Ellinel Fairy Academy#k. A human magician has trespassed in the sacred halls of the fairy school.") +else: + sm.dispose() + +sm.sendNext("I don't know all the details, but I know our relationship with the fairies is strained enough as it is. Will you go to the North Forest near Elinia and meet with #p1040002#.") + +response = sm.sendAskYesNo("Fanzy will take you into the land of the fairies. I can send you to him directly, if you'd like.") + +if response: + sm.startQuestNoCheck(THEME_DUNGEON_ELLINEL_FAIRY_ACADEMY) + sm.completeQuestNoRewards(parentID) + sm.warp(NORTH_FOREST_GIANT_TREE) +sm.dispose() diff --git a/scripts/quest/q32151e.py b/scripts/quest/q32151e.py new file mode 100755 index 0000000..4ec6346 --- /dev/null +++ b/scripts/quest/q32151e.py @@ -0,0 +1,17 @@ +# [Theme Dungeon] Ellinel Fairy Academy + +FANZY = 1040002 # NPC ID +FAIRYNAPPERS = 32101 # QUEST ID + +sm.setSpeakerID(FANZY) +sm.sendNext("Are you the one I invited to help out with the ruckus at the Ellinel Fairy Academy?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Um, of course?") + +sm.setSpeakerID(FANZY) +sm.sendNext("You don't look as strong as I'd hoped. But, you're famous, so I'll leave it to you.") + +sm.startQuestNoCheck(FAIRYNAPPERS) +sm.completeQuest(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q32151s.py b/scripts/quest/q32151s.py new file mode 100755 index 0000000..dd54d11 --- /dev/null +++ b/scripts/quest/q32151s.py @@ -0,0 +1,20 @@ +# [Theme Dungeon] Ellinel Fairy Academy + +response = sm.sendAskYesNo("#h #, could you spare me a moment? I received a request for help, and i can't think of anyone better than you.") + +if response: + sm.sendNext("There has been an incident at the #b Ellinel Fairy Academy#k. A human magician has trespassed in the sacred halls of the fairy school.") +else: + sm.dispose(); + +sm.sendNext("I don't know all the details, but i know our relationship with the fairies is strained enough as it is. Will you go to the North Forest near Elinia and meet with #p1040002#.") + +response = sm.sendAskYesNo("Fanzy will take you into the land of the fairies. I can send you to him directly, if you'd like") + +if response: + sm.startQuestNoCheck(32151) + sm.warp(101030000) + sm.dispose() +else: + sm.startQuestNoCheck(32151) + sm.dispose() diff --git a/scripts/quest/q32157e.py b/scripts/quest/q32157e.py new file mode 100755 index 0000000..1828118 --- /dev/null +++ b/scripts/quest/q32157e.py @@ -0,0 +1,20 @@ +# Created by MechAviv +# Quest ID :: 32157 +# [Theme Dungeon] Ellinel Fairy Academy + +sm.setSpeakerID(1040002) +sm.sendNext("You're here to help me with this ruckus, are you? About time you got here! Mrow!") + + +sm.setSpeakerID(1040002) +sm.setPlayerAsSpeaker() +sm.sendSay("Indeed. My business here is my own, but I would offer my aid should you need it.") + + +sm.setSpeakerID(1040002) +sm.removeEscapeButton() +sm.sendSay("Was that a yes or what? Fine, I'll put you to work!") + + +sm.completeQuest(32157) +sm.giveExp(3877) \ No newline at end of file diff --git a/scripts/quest/q32160s.py b/scripts/quest/q32160s.py new file mode 100755 index 0000000..a778cd1 --- /dev/null +++ b/scripts/quest/q32160s.py @@ -0,0 +1,14 @@ +# [Riena Strait] Get it Strait + +mapid = 140000000 + +sm.setSpeakerID(1105012) +response = sm.sendAskYesNo("Are you #b#h0##k?\r\n" + "We need your help! We have noticed weird changes going on around the Rien island\r\nAre you able to help?\r\n\r\n" + "(accepting will warp you)") + +if response: + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.warp(mapid, 0) +sm.dispose() diff --git a/scripts/quest/q32163e.py b/scripts/quest/q32163e.py new file mode 100755 index 0000000..c7bcb59 --- /dev/null +++ b/scripts/quest/q32163e.py @@ -0,0 +1,21 @@ +# [Riena Strait] Maybe I Shouldn't have gotten a boat +from net.swordie.ms.constants import WzConstants + +lumber = 4030022 +exp = 17739 + +sm.setSpeakerID(1510005) # Daichi + +sm.sendNext("Have you collected all the lumber?\r\n\r\n" + "#b#v"+ str(lumber) +"##t"+ str(lumber) +"##k\r\n\r\n" + ""+ WzConstants.ICON_EXP +" "+ str(exp) +" exp") +sm.completeQuestNoRewards(32164) # [Riena Strait] Wood That's Good 1 +sm.completeQuestNoRewards(32165) # [Riena Strait] Wood That's Good 2 +sm.completeQuestNoRewards(32166) # [Riena Strait] Wood That's Good 3 +sm.completeQuest(parentID) +sm.consumeItem(lumber, 3) +sm.giveExp(exp) + +sm.sendSayOkay("Thank you, Brave Warrior. I can see you are pretty talented in piloting a ship.\r\n\r\n#b" + "(Talk to Putan to begin the mission.)") +sm.dispose() diff --git a/scripts/quest/q32164s.py b/scripts/quest/q32164s.py new file mode 100755 index 0000000..7055996 --- /dev/null +++ b/scripts/quest/q32164s.py @@ -0,0 +1,13 @@ +# [Riena Strait] Wood That's Good 1 +sm.setSpeakerID(1510006) + +lumber = 4030022 + +if sm.canHold(lumber): + sm.sendNext("Navigator, this lumber seems decent.\r\n\r\n" + "#b#v"+ str(lumber) +"##t"+ str(lumber) +"#") + sm.startQuestNoCheck(parentID) + sm.giveItem(lumber) +else: + sm.sendSayOkay("Navigator, let's make some space for all this lumber we're retrieving!") +sm.dispose() diff --git a/scripts/quest/q32165s.py b/scripts/quest/q32165s.py new file mode 100755 index 0000000..95f1673 --- /dev/null +++ b/scripts/quest/q32165s.py @@ -0,0 +1,13 @@ +# [Riena Strait] Wood That's Good 2 +sm.setSpeakerID(1510006) + +lumber = 4030022 + +if sm.canHold(lumber): + sm.sendNext("Navigator, look over there! Lumber.\r\n\r\n" + "#b#v"+ str(lumber) +"##t"+ str(lumber) +"#") + sm.startQuestNoCheck(parentID) + sm.giveItem(lumber) +else: + sm.sendSayOkay("Navigator, let's make some space for all this lumber we're retrieving!") +sm.dispose() diff --git a/scripts/quest/q32166s.py b/scripts/quest/q32166s.py new file mode 100755 index 0000000..d94409a --- /dev/null +++ b/scripts/quest/q32166s.py @@ -0,0 +1,13 @@ +# [Riena Strait] Wood That's Good 3 +sm.setSpeakerID(1510006) + +lumber = 4030022 + +if sm.canHold(lumber): + sm.sendNext("Navigator, I see decent lumber!\r\n\r\n" + "#b#v"+ str(lumber) +"##t"+ str(lumber) +"#") + sm.startQuestNoCheck(parentID) + sm.giveItem(lumber) +else: + sm.sendSayOkay("Navigator, let's make some space for all this lumber we're retrieving!") +sm.dispose() diff --git a/scripts/quest/q32178s.py b/scripts/quest/q32178s.py new file mode 100755 index 0000000..29ca712 --- /dev/null +++ b/scripts/quest/q32178s.py @@ -0,0 +1,53 @@ +# [Riena Strait] The Heart of a Witch + +frostWitchBarbara = 1510008 +noraTheExplorer = 1510007 + +sm.setSpeakerID(frostWitchBarbara) +sm.sendNext("What you still have something to say to me?") + +sm.setSpeakerID(noraTheExplorer) +sm.sendNext("Granny, I have a question.") + +sm.setSpeakerID(frostWitchBarbara) +sm.sendNext("What do you want to know? Are you curious when this old lady will die? " + "If you mention about defeating and sort one more time in front of me, boy, " + "I'll destroy that mouth of yours first.") + +sm.setSpeakerID(noraTheExplorer) +sm.sendNext("No.. What I am saying is that the penguins, the malamutes, and the seals here are doubting you. " + "Is it perhaps due to your magic that the glaciers are melting and the sea level is rising?") + +sm.setSpeakerID(frostWitchBarbara) +sm.sendNext("Magic? What is that? Do you eat that?") + +sm.setPlayerAsSpeaker() +sm.sendNext("There also is a rumor that she is conducting some experiments with the children.") + +sm.setSpeakerID(frostWitchBarbara) +sm.sendNext("WHAT?! Shut your mouth! What makes you think that I would do such a thing to these cute little things?!") + +sm.sendNext("These poor kids lost their home and parents as the glacier is melting" + "If no one takes care of them, its unimaginable how they will turn out!" + "They were floating on the sea pitifully, and I picked them up and am taking care of them.") + +sm.setSpeakerID(noraTheExplorer) +sm.sendNext("You have been raising the children?") + +sm.setSpeakerID(frostWitchBarbara) +sm.sendNext("I was just taking care of them temporarily..") + +sm.sendNext("It is said, the penguins should grow with the penguins, " + "and the seals need to grow with the seals. " + "After curing a baby, and if it looks like it has recovered enough, " + "I would bring him to his people secretly at night.") + +sm.setPlayerAsSpeaker() +sm.sendNext("But why would you do such a thing despite all the misunderstandings?...") + +sm.setSpeakerID(frostWitchBarbara) +sm.sendNext("Whew.. That mouth of yours.. How does it help you to talk so much? " + "If you have time for talking, shut up and do me a favor.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q32189e.py b/scripts/quest/q32189e.py new file mode 100755 index 0000000..6fdc1a9 --- /dev/null +++ b/scripts/quest/q32189e.py @@ -0,0 +1,9 @@ +# [Riena Strait] Saving the Glacier 2 + +NORA = 1510007 + +sm.setSpeakerID(NORA) +sm.sendNext("Oh great, thank you!") + +sm.sendSay("I got one more thing for you to do") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32192s.py b/scripts/quest/q32192s.py new file mode 100755 index 0000000..9abaa1b --- /dev/null +++ b/scripts/quest/q32192s.py @@ -0,0 +1,11 @@ +# [Riena Strait] A Warrior's Pride + +PUTAN = 1510000 + +sm.setSpeakerID(PUTAN) +response = sm.sendAskYesNo("I think we need to go to the house of witch Barbara. All of us need to. Hmm hmm.. I think it would be nice if you would come with us.\r\n\r\n" + "#b#e(Accepting will automatically move you.)#n#k") + +if response: + sm.warpInstanceIn(141040003, 0) + sm.createQuestWithQRValue(parentID, "1") \ No newline at end of file diff --git a/scripts/quest/q32203s.py b/scripts/quest/q32203s.py new file mode 100755 index 0000000..35dfd18 --- /dev/null +++ b/scripts/quest/q32203s.py @@ -0,0 +1,33 @@ +# 32203 The New Explorer, Mai : Maple Road | Snail Park +MAI = 10301 +THE_TOWN_CHIEF = 32210 +AMHERST = 4000020 + +sm.setSpeakerID(MAI) +sm.sendNext("Ohmygoodness! Hi! Im Mai, an aspiring hero. it took me four years, but i just completed my freshmen year at hero school. You must be a new #bExplorer#n.") +sm.setPlayerAsSpeaker() +sm.sendNext("A new ... #bExplorer#n? What's that?") +sm.setSpeakerID(MAI) +sm.sendNext("This was on that test I flunked ten time... Oh, right! Explorers are people who come to Maple World from other worlds! They start their journey right here on #bMaple Island#n.") +sm.setPlayerAsSpeaker() +sm.sendNext("I'm on... #bMaple Island#n?") +sm.setSpeakerID(MAI) +sm.sendNext("You sure are. We used to be just some tiny island, but then Explorers started popping out. Now, we even got our own outhouse!") +sm.sendNext("So, your name is #h #, right? You have two options now. You can listen to some explanations about starting out, take a few small tests, get some free gifts and become my new best friend in the entire world...") +sm.sendNext("Or you can be teleported straight to town, but you'll miss out on my gifts... and I'll be super lonely and sad.") + +selection = sm.sendNext("What do you say? \r\n#L0##b I'll be your friend, Mai!(Go through tutorial and get free equipment)#l \r\n #L1#I don't need you, Mai!(Skip tutorial and teleport straight to town.)#l") + +if selection == 0: + sm.sendNext("REALLY?! I'll fill you in on everything you need to know. I promise!") + sm.startQuest(parentID) + sm.completeQuest(parentID) + +elif selection == 1: + sm.sendNext("I knew you'd pick that. Everyeone always does... I'll send you to Amherst right away and hope that the next Explorer will want to be my friend.") + sm.sendSay("This is for you! You can check out the Recovery potions I gave you in your Use tab.") + sm.sendSay("Make sure you talk to Chief Lucas when you get to Amherst! He's really smart and will give you some great advice.") + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.startQuest(THE_TOWN_CHIEF) + sm.warp(AMHERST, 0) diff --git a/scripts/quest/q32216s.py b/scripts/quest/q32216s.py new file mode 100755 index 0000000..acab602 --- /dev/null +++ b/scripts/quest/q32216s.py @@ -0,0 +1,33 @@ +# 32216 Victoria Island or Bust!, sugar : Maple Road | the Sangri-La +sm.setSpeakerID(10306) +sm.sendNext("You d-defeated the monsters, and you really helped me out, too, #h #. You seem r-ready to pick a Job. Did you decide which one you want?") +sm.setPlayerAsSpeaker() +sm.sendNext("#b Huh? Job?") +sm.setSpeakerID(10306) +sm.sendNext("There are five different Explorer Jobs. You can advance to them on Victoria Island. Hm I think they were... Warrior, Magician, Bowman, Thief, and Pirate.") +sm.setPlayerAsSpeaker() +sm.sendNext("#b What are they like?") +sm.setSpeakerID(10306) +sm.sendNext("Let's see. Warriors have great strength and defense, so they excel at close-range combat. Magicians use magic, so they f-favor intelligence over power, and they're good at long-range combat against multiple enemies.") +sm.sendNext("B-bowman are also good at long-range combat. They shoot arrows from afar and can keep enemies at a distance. And, let's see... Thieves are close-range, like warriors, but they focus on speed instead of strength.") +sm.sendNext("Finally, Pirates... are Pirates. Some use their fists in close-range combat, others shoot guns or cannons from afar. Their attacks are pretty fancy, either way.") + +selection = sm.sendNext("If you pick your Job right now, the captain offered to contract your new job instructor as soon as we arrive. \r\n\r\n#L0##b Warrior, powerful and defensive#l \r\n #L1#Magician, intelligent and magical#l \r\n #L2#Bowman, long-ranged and controlled#l \r\n #L3#Thief, speedy and sneaky#l \r\n #L4#Pirate, fancy and unique #l") +if selection == 0: + sm.sendNext("Oh, t-totally! #h #, you'll make a great Warrior!") +elif selection == 1: + sm.sendNext("Oh, t-totally! #h #, you'll make a great Magician!") +elif selection == 2: + sm.sendNext("Oh, t-totally! #h #, you'll make a great Bowman!") +elif selection == 3: + sm.sendNext("Oh, t-totally! #h #, you'll make a great Thief!") +elif selection == 4: + sm.sendNext("Oh, t-totally! #h #, you'll make a great Pirate!") + +sm.warp(104000000, 0) +sm.sendNext("The ship is ready to set sail!") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.createQuestWithQRValue(1406, str(selection+1)) +if sm.getChr().getLevel() < 10: + sm.addLevel(10 - sm.getChr().getLevel()) diff --git a/scripts/quest/q32229s.py b/scripts/quest/q32229s.py new file mode 100755 index 0000000..19dfa62 --- /dev/null +++ b/scripts/quest/q32229s.py @@ -0,0 +1,6 @@ +# id 32229 (Explorer Thief - Shadower), field 610050000 +sm.setSpeakerID(1052001) # Dark Lord +sm.sendNext("You chose the path of a Shadower. So, how much do you know about the Explorer's abilities?") +res = sm.sendAskAccept("Do you want to learn more about the new Explorer basics? I've got time.\r\n#r(Click Yes to move to the tutorial.)#k") +sm.startQuest(parentID) +sm.warp(910370111) diff --git a/scripts/quest/q32240e.py b/scripts/quest/q32240e.py new file mode 100755 index 0000000..7d188b2 --- /dev/null +++ b/scripts/quest/q32240e.py @@ -0,0 +1,40 @@ +# Created by MechAviv +# Quest ID :: 32240 +# The Explorer Book and A Maple Leaf + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("An #bExplorer Book#k? So, I can record all my adventures here?") + + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("Perfect! I just started my adventure, so I should get started! But, wait...") + + +sm.giveItem(4460000) +sm.giveExp(170) +sm.completeQuest(32240) +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.showFieldEffect("adventureStory/mapleLeaf/0", 0) +sm.sendDelay(1800) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("A Maple Leaf? OH, I remember seeing a huge Maple Tree on Maple Island. How did it follow me here?") + + +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I guess I can keep it in my #bExplorer Book#k to remind me of Maple Island.") diff --git a/scripts/quest/q32240s.py b/scripts/quest/q32240s.py new file mode 100755 index 0000000..acaa511 --- /dev/null +++ b/scripts/quest/q32240s.py @@ -0,0 +1,37 @@ +# Created by MechAviv +# Quest ID :: 32240 +# The Explorer Book and A Maple Leaf + +sm.setSpeakerID(9010010) +sm.flipDialogue() +sm.setSpeakerType(3) +sm.sendNext("I came to give you a gift. It's an #bExplorer Book#k, kinda like a diary. In this, you can record every exciting adventure you'll ever have! And then I can read about it later!") + + +sm.setSpeakerID(0) +sm.flipDialoguePlayerAsSpeaker() +sm.setSpeakerType(3) +if sm.sendAskAccept("Do you want the #bExplorer Book#k? You do, right?"): + sm.createQuestWithQRValue(32360, "1") + sm.setSpeakerID(9010010) + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendNext("Let me see... There's gotta be a book that's perfect for a Warrior like you...") + + + sm.startQuest(32240) + sm.setSpeakerID(9010010) + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendSay("Found it! Here. Take a good look at it after I take off.") + + + sm.setSpeakerID(9010010) + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendPrev("Well, have a blast in your adventures!") +else: + sm.setSpeakerID(9010010) + sm.flipDialogue() + sm.setSpeakerType(3) + sm.sendNext("Eh? No? Why? What about your adventures? Your memories? My entertainment?") diff --git a/scripts/quest/q32600s.py b/scripts/quest/q32600s.py new file mode 100755 index 0000000..68133f6 --- /dev/null +++ b/scripts/quest/q32600s.py @@ -0,0 +1,18 @@ +# [Grand Athenaeum] Episode 1 - The White Mage +sm.setSpeakerID(2500000) +if sm.hasQuest(32603): + if sm.sendAskYesNo("Do you want to finish reading Ep 1. ?\r\n#b(Return to previous location.)#k"): + sm.warp(302090000, 0) + sm.dispose() +else: + if sm.sendAskYesNo("Do you want to read Ep 1. ?"): + sm.sendNext("You selected #eThe White Mage#n.") + sm.sendSay("You will re-live the experiences from the past. Don't worry though, your actions will not change the future.") + sm.sendSay("#h0#, you will go back in time and become a #e#bmercenary#k#n. Their identity was lost to history, but we know they existed.") + sm.sendSay("#fNpc/2500001.img/stand/0#\r\nClick me any time you want to return to reality. I will always be somewhere in the story.") + if sm.hasQuestCompleted(32629): + sm.warp(302010000, 0) + elif sm.hasQuestCompleted(32630): + sm.warp(302010400, 0) + else: + sm.warp(302090000, 0) \ No newline at end of file diff --git a/scripts/quest/q32631s.py b/scripts/quest/q32631s.py new file mode 100755 index 0000000..5996392 --- /dev/null +++ b/scripts/quest/q32631s.py @@ -0,0 +1,23 @@ +# [Grand Athenaeum] Ariant : Near the Castle +sm.removeEscapeButton() +sm.setSpeakerID(2510001) + +sm.sendNext("Hatsar is struggling with the monsters that have been hounding his trade route.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("(The monsters were definitely peculiar... Felt like something ghoulish.)") + +sm.setSpeakerID(2510001) +sm.sendSay("Only one person in the world can solve this problem. But they've gone missing. That's why Hatsar wants to find them.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Who is that?") + +sm.setSpeakerID(2510001) +answer = sm.sendSay("I don't know, ask him for the details! Hatsar will shower you in riches if you do what he wants. I'm sure this is a pretty big deal for a mercenary like you!\r\n\r\n#b#L0#Accept the request. #l\r\n#L1#You're not feeling it.") +if answer == 0: + sm.sendNext("Then go see Hatsar right away.\r\n\n\n(Talk to Hatsar.) ") + sm.startQuest(parentID) + sm.warp(302090110, 0) +elif answer == 1: + sm.sendNext("Really? You can get your hands on some pretty big money...") diff --git a/scripts/quest/q32632s.py b/scripts/quest/q32632s.py new file mode 100755 index 0000000..4ca0b01 --- /dev/null +++ b/scripts/quest/q32632s.py @@ -0,0 +1,7 @@ +# [Grand Athenaeum] +sm.removeEscapeButton() +sm.flipDialoguePlayerAsSpeaker() + +sm.sendNext("Supposedly the White Mage was last seen in Ellin Forest. If that's true, there must be evidence.") +sm.sendSay("Ephenia the Fairy Queen's dwelling is nearby. I'll see if she knows anything.") +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q32662e.py b/scripts/quest/q32662e.py new file mode 100755 index 0000000..14843fc --- /dev/null +++ b/scripts/quest/q32662e.py @@ -0,0 +1,22 @@ +# [Grand Athenaeum] Visit the Grand Athenaeum +LIBRARIAN = 2500002 + +sm.setSpeakerID(LIBRARIAN) +sm.sendNext("Come on over! I am #b#p2500002##k. Surprised? I'll have you know my simian parts are my best parts.") +sm.sendSay("What is this place, you ask? This is the #bGrand Athenaeum#k. All the knowledge and records of this world are enshrined here. Many people don't know it, but Maple World's stories write themselves into their own book when they happen. No pens or ink required!") +sm.sendSay("Ha ha, you think I'm lying? You can see for yourself! You can #benter the stories themselves#k, and experience them as a character.") +sm.sendSay("#b#p2500000##k gave me books that all touch on key events in Maple World's history.") +if sm.sendAskAccept("Let's see... Clearing all five would be too many, so if you clear #bthree, regardless of the order#k, I'll give you a #bpretty neat gift#k.\r\nAre you up for the challenge?\r\n\r\n" + "\n\n- Bonus Pendant Slot #e#b(21 Day)#k#n\r\n" + "\n\n- #i1122263# #b#t1122263##k\r\n\r\n" + "\n\n- #i2431892# #b#t2431892##k"): + sm.completeQuest(parentID) + sm.startQuest(32663)# [Grand Athenaeum] Read The White Mage + sm.startQuest(32664)# [Grand Athenaeum] Read Empress In Training + sm.startQuest(32665)# [Grand Athenaeum] Read The Black Witch + #sm.startQuest(32698)# Book for higher version + #sm.startQuest(32990)# Book for higher version + sm.startQuest(32666)# [Grand Athenaeum] Food for the Soul + sm.sendSayOkay("You can read the books containing stories in any order you'd like. Talk to #b#p2500000##k.") +else: + sm.sendNext("Busy? You're always welcome here.") \ No newline at end of file diff --git a/scripts/quest/q32707e.py b/scripts/quest/q32707e.py new file mode 100755 index 0000000..4255ee1 --- /dev/null +++ b/scripts/quest/q32707e.py @@ -0,0 +1,27 @@ +# Created by MechAviv +# Quest ID :: 32707 +# [FriendStory] Student From Another World + +sm.setIntroBoxChat(1530000) +sm.setSpeakerType(3) +sm.sendNext("Whoa, hey! So, you're the one that answered the phone, huh? Nice to meet you! I'm an exchange student from... Well, nowhere around here. Ha ha!") + + +sm.setIntroBoxChat(1530020) +sm.setSpeakerType(3) +sm.sendSay("Yes, we know that! And that's the problem...") + + +sm.setIntroBoxChat(1530000) +sm.setSpeakerType(3) +sm.sendSay("Problem? Man, there's no problem here. This place ROCKS! Look at your crazy mushroom houses and slime monsters and stuff!") + + +sm.setIntroBoxChat(1530000) +sm.setSpeakerType(3) +sm.sendSay("Look, I'm busy losing my mind over how cool this all is. If you want the deets, talk to this magician-looking guy over here. The one that will. Not. Shut. Up.") + + +sm.startQuest(32707) +sm.completeQuest(32707) +sm.giveExp(441840) \ No newline at end of file diff --git a/scripts/quest/q32707s.py b/scripts/quest/q32707s.py new file mode 100755 index 0000000..6141726 --- /dev/null +++ b/scripts/quest/q32707s.py @@ -0,0 +1,28 @@ +# Created by MechAviv +# Quest ID :: 32707 +# [FriendStory] Student From Another World + +sm.setIntroBoxChat(1530000) +sm.setSpeakerType(3) +sm.sendNext("Hello? Hello?\r\n\r\nOkay, the magician guy said he teleported the phone to someone who can help. So, um, hi? Can you help me, maybe?") + + +sm.setIntroBoxChat(1530000) +sm.setSpeakerType(3) +sm.sendSay("...What?\r\n\r\nYes, I'm talking to-\r\n\r\nDude, relax! I'll just ask-") + + +sm.setIntroBoxChat(1530000) +sm.setSpeakerType(3) +if sm.sendAskYesNo("Argh, this guy is being a total spaz.\r\nHey, he wants to know if he can teleport you here. That cool?\r\n#b(You will be moved to the Closet House in Henesys.)#k"): + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendNext("Great. ...Hey, magic dude! Do your magicky-thing!\r\n\r\n#e#b(You can also use the Dimensional Mirror to get here.)#n#k") + + sm.warp(330002040, 0) +else: + sm.setIntroBoxChat(1530000) + sm.setSpeakerType(3) + sm.sendNext("...I understand. They wouldn't be interested in me, even with things turned around like they are.") + + diff --git a/scripts/quest/q34100e.py b/scripts/quest/q34100e.py new file mode 100755 index 0000000..74bca3a --- /dev/null +++ b/scripts/quest/q34100e.py @@ -0,0 +1,40 @@ +# [Vanishing Journey] Amnesiac Temple Keeper Kao +from net.swordie.ms.world.field.fieldeffect import GreyFieldType +KAO = 3003131 +KAO_ILLUSTRATION = 3003113 + + +if not sm.hasQuestCompleted(1466): + sm.setSpeakerID(KAO) + sm.sendNext("..What should we do to assuage their anger?\r\n" + "#b(Complete the A Greater Power quest and obtain an Arcane Symbol.)") +else: + sm.removeEscapeButton() + sm.lockInGameUI(True, False) + sm.setFieldColour(GreyFieldType.Field, 100, 100, 100, 2000) + sm.setSpeakerID(KAO_ILLUSTRATION) + sm.setBoxChat() + sm.sendNext("I'll have to tell you this first. Have you seen the big lake on the edge of this village? " + "The villagers call it Oblivion Lake because its water causes loss of memory.") + + sm.sendNext("And... Perhaps because of it, those who live near the lake lose their memories little by little, every day.") + + sm.showOffFieldEffect("Map/Effect2.img/ArcaneRiver1/tree1") + sm.sendNext("So they made this Tree of Memories. On which they hang their memories and look at them every day, until they are weathered beyond recognition.") + + sm.sendNext("When I first heard about the tree, I got so excited that my heart raced. " + "I thought it could have something to do with my lost memories, and I couldn't wait to investigate it. " + "But") + + sm.showOffFieldEffect("Map/Effect2.img/ArcaneRiver1/tree2") + sm.sendNext("I touched the tree, and...") + + sm.showOffFieldEffect("Map/Effect2.img/ArcaneRiver1/tree3") + sm.sendNext("The memories... The precious memories of the villagers' scattered.") + + sm.sendNext("The villagers were so devastated that they stopped doing things that they did every day. " + "They stopped farming and bossing, they even stopped operating the boat that traveled across Oblivion Lake.") + + sm.setFieldColour(GreyFieldType.Field, 255, 255, 255, 1000) + sm.lockInGameUI(False) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q34107s.py b/scripts/quest/q34107s.py new file mode 100755 index 0000000..3e4673c --- /dev/null +++ b/scripts/quest/q34107s.py @@ -0,0 +1,6 @@ +# id 34107 ([Vanishing Journey] A Paper Boat On the Shores of Oblivion), field 450001005 +sm.setSpeakerID(3003110) # Kima +res = sm.sendAskAccept("(The oarsman gestures for you to board the boat.)") +sm.completeQuestNoCheck(parentID) +sm.setParam(2) +sm.sendNext("#b(Use the portal next to you to get on the boat.)#k") diff --git a/scripts/quest/q34108s.py b/scripts/quest/q34108s.py new file mode 100755 index 0000000..1e929c6 --- /dev/null +++ b/scripts/quest/q34108s.py @@ -0,0 +1,7 @@ +KAO = 3003131 + +sm.setSpeakerID(KAO) +sm.sendNext("I'm afraid there's no way around this massive rocky cliff. We'll have to climb up the cliff.") +if sm.sendAskAccept("#h0#, you agree, right? Then let's climb it."): + sm.startQuest(parentID) + sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q34109s.py b/scripts/quest/q34109s.py new file mode 100755 index 0000000..f4d3296 --- /dev/null +++ b/scripts/quest/q34109s.py @@ -0,0 +1,7 @@ +# id 34109 ([Vanishing Journey] Crossing the Extinction Zone), field 450001100 +sm.setSpeakerID(3003125) # Rino +sm.sendNext("The Extinction Zone is much more dangerous than any place you've ever encountered.") +sm.sendSay("Never let your guard down, no matter what. If you touch the flames here, your body will vanish forever. There is a safe path through...") +if sm.sendAskAccept("But first promise me that you won't do anything this reckless again, and that you will follow my instructions. Can you do that?"): + sm.completeQuestNoCheck(parentID) + sm.sendNext("You can trust in me. I'll guide you and Kao to safety. Let me know when you're ready to go.") diff --git a/scripts/quest/q34115s.py b/scripts/quest/q34115s.py new file mode 100755 index 0000000..5e39059 --- /dev/null +++ b/scripts/quest/q34115s.py @@ -0,0 +1,10 @@ +# id 34115 ([Vanishing Journey] Lying in Repose), field 450001200 +sm.setSpeakerID(3003127) # Rino +sm.sendNext("#h0#, you're awake! It's a good thing we landed on this soft sand...") +sm.sendSay("Ugh, my ankle... I-it's nothing. Don't worry about me. Just worry about escaping this cave.") +sm.setParam(2) +sm.sendSay("#b(Kao's actions weigh on your mind, but there are more important matters at hand.)#k") +sm.setParam(0) +sm.sendSay("This place is the last stop along the Vanishing Journey... The Cave of Repose. Traveling through this cave will lead you to what lies beyond. We're almost there.") +if sm.sendAskAccept("It's practically a maze in here but... I know a shortcut to the cave's exit. Now, follow me."): + sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q34120s.py b/scripts/quest/q34120s.py new file mode 100755 index 0000000..abdd11a --- /dev/null +++ b/scripts/quest/q34120s.py @@ -0,0 +1,11 @@ +# [Vanishing Journey] Arcane Symbol: Vanishing Journey +VANISHING_JOURNEY_ARCANE_SYMBOL = 1712001 +sm.setPlayerAsSpeaker() +if sm.canHold(VANISHING_JOURNEY_ARCANE_SYMBOL): + sm.sendNext("#b(I've picked up the Arcane Symbol that Kao left behind.") + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.giveItem(VANISHING_JOURNEY_ARCANE_SYMBOL) + sm.progressMessageFont(3, 20, 20, 0, "Kao's last wish was for me to jump into the waterfall..") +else: + sm.sendSayOkay("I should make some space in my inventory.") \ No newline at end of file diff --git a/scripts/quest/q34129e.py b/scripts/quest/q34129e.py new file mode 100755 index 0000000..cdae57e --- /dev/null +++ b/scripts/quest/q34129e.py @@ -0,0 +1,5 @@ +# id 34129 ([Daily Quest] Vanishing Journey Research), field 450001000 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(34151, "dowS=2;startDate=19/06/18;clear=1;first=1") +sm.setSpeakerID(3003104) # Rona +sm.sendNext("#h0#, I see you completed all 5 missions. Please accept #i1712001:# #t1712001:# x3 as a reward.") diff --git a/scripts/quest/q34129s.py b/scripts/quest/q34129s.py new file mode 100755 index 0000000..ee7a1dc --- /dev/null +++ b/scripts/quest/q34129s.py @@ -0,0 +1,23 @@ +# id 34129 ([Daily Quest] Vanishing Journey Research), field 450001000 +sm.createQuestWithQRValue(34127, "order=icstfenujqodmakphrblg") +sm.createQuestWithQRValue(34127, "count=0;order=icstfenujqodmakphrblg") +sm.createQuestWithQRValue(34163, "region=5") +sm.setSpeakerID(3003104) # Rona +sm.setParam(256) +res = sm.sendAskYesNo("Hi, #h0#. I have 5 missions for you today. Would you like to take care of them now? If there is a mission you don't like, you can press the Exchange button to trade it for something else.\r\n\r\n#b#e#y34138##k#n\r\n#b#e#y34132##k#n\r\n#b#e#y34148##k#n\r\n#b#e#y34149##k#n\r\n#b#e#y34135##k#n\r\n") +sm.setParam(0) +res = sm.sendAskYesNo("Is there a mission on the list you aren't up for? Why not Exchange it for another one? \r\n\r\n#b(You can swap out the missions of your choice, but it is possible to receive the same mission as the one being exchanged.)#k") +res = sm.sendNext("Select the mission you would like to replace.\r\n\r\n#b#e#L0# #y34138##l#k#n\r\n#b#e#L1# #y34132##l#k#n\r\n#b#e#L2# #y34148##l#k#n\r\n#b#e#L3# #y34149##l#k#n\r\n#b#e#L4# #y34135##l#k#n\r\n\r\n#L5# #r#eThose are all the quests I want to swap out.#k#n#l") +res = sm.sendNext("Select the mission you would like to replace.\r\n\r\n#e#L0# #y34138##n\r\n#b#e#L1# #y34132##l#k#n\r\n#b#e#L2# #y34148##l#k#n\r\n#b#e#L3# #y34149##l#k#n\r\n#b#e#L4# #y34135##l#k#n\r\n\r\n#L5# #r#eThose are all the quests I want to swap out.#k#n#l") +sm.startQuest(34134) +sm.startQuest(34132) +sm.startQuest(34148) +sm.startQuest(34149) +sm.startQuest(34135) +sm.startQuest(parentID) +sm.sendNext("All right. To replace the 1 missions you don't want, I've found 1 new missions. Here are your 5 tasks for today. \r\n\r\n#b#e#y34134##k #r[NEW]#k#n\r\n#b#e#y34132##k#n\r\n#b#e#y34148##k#n\r\n#b#e#y34149##k#n\r\n#b#e#y34135##k#n\r\n") +sm.sendPrev("Come to me when you've finished your missions. Remember, you have to turn them in before midnight. Well then, see you later.") +sm.createQuestWithQRValue(34170, "count=0;date=19/06/18;ctype=0") +sm.setSpeakerID(3003145) # Nina +res = sm.sendNext("#b#eErda Spectrum#n#k\r\nDid you know Erda has its own distinct color? Amazing right?! The only trouble is, while I was gathering Erda for study with the #bErda Collector#k I invented, I got hurt. Now I need help...\r\n#b#L0# Send me to the Erda Spectrum!#l\r\n#L1# So... What's this all about again?#l\r\n#L2# What's my remaining completion count for the day?#l") +sm.warp(450001014) diff --git a/scripts/quest/q34132e.py b/scripts/quest/q34132e.py new file mode 100755 index 0000000..0593c1b --- /dev/null +++ b/scripts/quest/q34132e.py @@ -0,0 +1,8 @@ +# id 34132 ([Daily Quest] Defeat 200 Sad Erdas), field 450001000 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(34127, "count=3;order=icstfenujqodmakphrblg") +sm.setSpeakerID(3003104) # Rona +sm.setParam(2) +sm.sendNext("#b(You gave Rona the information you obtained from observing the Sad Erdas up close.)#k") +sm.setParam(0) +sm.sendSay("Here, take this #i1712001:# #t1712001:# x1. Thanks to you, we're one step closer to understanding this place.") diff --git a/scripts/quest/q34134e.py b/scripts/quest/q34134e.py new file mode 100755 index 0000000..c467e87 --- /dev/null +++ b/scripts/quest/q34134e.py @@ -0,0 +1,8 @@ +# id 34134 ([Daily Quest] Defeat 200 Stone Erdas), field 450001000 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(34127, "count=4;order=icstfenujqodmakphrblg") +sm.setSpeakerID(3003104) # Rona +sm.setParam(2) +sm.sendNext("#b(You gave Rona the information you obtained from observing the Stone Erdas up close.)#k") +sm.setParam(0) +sm.sendSay("Here, take this #i1712001:# #t1712001:# x1. Thanks to you, we're one step closer to understanding this place.") diff --git a/scripts/quest/q34135e.py b/scripts/quest/q34135e.py new file mode 100755 index 0000000..c9f0668 --- /dev/null +++ b/scripts/quest/q34135e.py @@ -0,0 +1,8 @@ +# id 34135 ([Daily Quest] Defeat 200 Blazing Erdas), field 450001000 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(34127, "count=5;order=icstfenujqodmakphrblg") +sm.setSpeakerID(3003104) # Rona +sm.setParam(2) +sm.sendNext("#b(You gave Rona the information you obtained from observing the Blazing Erdas up close.)#k") +sm.setParam(0) +sm.sendSay("Here, take this #i1712001:# #t1712001:# x1. Thanks to you, we're one step closer to understanding this place.") diff --git a/scripts/quest/q34148e.py b/scripts/quest/q34148e.py new file mode 100755 index 0000000..6f14d05 --- /dev/null +++ b/scripts/quest/q34148e.py @@ -0,0 +1,8 @@ +# id 34148 ([Daily Quest] Deliver 30 Oblivion Inhibitor), field 450001013 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(34127, "count=1;order=icstfenujqodmakphrblg") +sm.setSpeakerID(3003107) # Jenna +sm.sendNext("I see that you brought the 30 #t4034934:# items that Rona from HQ requested.") +sm.sendSay("Let's see. One, two, three... Yep, 30 #t4034934:# items... This is for you: #i1712001:# #t1712001:# x1. We'll be able to continue our investigation thanks to you.") +sm.startQuest(16689) +sm.warp(450001112) diff --git a/scripts/quest/q34149e.py b/scripts/quest/q34149e.py new file mode 100755 index 0000000..82c7960 --- /dev/null +++ b/scripts/quest/q34149e.py @@ -0,0 +1,7 @@ +# id 34149 ([Daily Quest] Deliver 30 Extinction Inhibitors), field 450001112 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(34127, "count=2;order=icstfenujqodmakphrblg") +sm.setSpeakerID(3003108) # Jenna +sm.sendNext("I see that you brought the 30 #t4034935:# items that Rona from HQ requested.") +sm.sendSay("Let's see. One, two, three... Yep, 30 #t4034935:# items... This is for you: #i1712001:# #t1712001:# x1. We'll be able to continue our investigation thanks to you.") +sm.warp(450001000) diff --git a/scripts/quest/q34151s.py b/scripts/quest/q34151s.py new file mode 100755 index 0000000..1751579 --- /dev/null +++ b/scripts/quest/q34151s.py @@ -0,0 +1,11 @@ +# id 34151 ([Weekly Quest] Diligent Research Reward), field 450001000 +sm.setSpeakerID(3003104) # Rona +sm.sendNext("Hello, #b#h0##k.\r\nEver since we started our investigation here, a lot of heroes have been helping us out.") +sm.sendSay("Thanks to their help, we got a lot of information on the Vanishing Journey. To express our gratitude, we will give you an extra reward when you help us with the investigation progress.") +sm.sendSay("If you help us with our research at least #btwice a week#k, we'll give you #i2436078:# x3 as a #bspecial reward#k.") +sm.createQuestWithQRValue(parentID, "first=1") +res = sm.sendAskYesNo("Will you help us with our research this week?\r\n(Once you accept, you'll receive a special reward if you complete #e#b2 or more#k#n #e#b[Daily Quest] Vanishing Journey Research#k#n quests by #e#rmidnight on Sunday#k#n.)") +sm.startQuest(parentID) +sm.createQuestWithQRValue(parentID, "startDate=19/06/18;first=1") +sm.createQuestWithQRValue(parentID, "dowS=2;startDate=19/06/18;first=1") +sm.sendNext("We look forward to your efforts, #b#h0##k.\r\nPlease be aware that the quest record will be reset after #e#rmidnight on Sunday#k#n.") diff --git a/scripts/quest/q34200s.py b/scripts/quest/q34200s.py new file mode 100755 index 0000000..cf0d102 --- /dev/null +++ b/scripts/quest/q34200s.py @@ -0,0 +1,77 @@ +# id 34200 ([Chu Chu] Arcane Blockage), field 993017200 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.forcedMove(False, 2) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("That Flying Fish must've run away because #bthat thing#k was blocking the river...") +sm.sendSay("Anyways... What is this huge creature? I'm not going to be able to move forward as long as #bhe#k is in the way.") +sm.sendSay("Uh, excuse me... I'm #b#h0##k... I'm in kind of a hurry and I need to get through. Could you step aside? You do have feet, right?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("No... Ta-sty... Tasty...") +sm.setParam(57) +sm.sendSay("Huh? Tasty? I don't think you understand how serious this is... The world will be in #rgrave danger#k if I'm not allowed to pass.") +sm.completeQuestNoCheck(34225) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face1##fs50#TASTIES!") +sm.setParam(57) +sm.sendSay("Ahh! Don't eat me!") +sm.sendSay("Uh... I have these old #bsandwiches#k sitting at the bottom of my bag...") +sm.sendSay("Do you want some?") +sm.setParam(37) +sm.sendSay("Give it... now!") +sm.setParam(57) +sm.sendSay("(I only have two left... I guess I can share.)") +sm.setParam(37) +sm.sendSay("Hawb... Om... Nom...") +sm.completeQuestNoCheck(34223) +sm.sendSay("#face0#YUMMY!") +sm.sendSay("More... More...") +sm.setParam(57) +sm.sendSay("I'm sorry... but that's all I had...") +sm.setParam(37) +sm.sendSay("#face0#Please... More...") +sm.setParam(57) +sm.sendSay("Even if you ask politely... I don't have any more food...") +sm.completeQuestNoCheck(34225) +sm.setParam(37) +sm.sendSay("#face1##fs50#MORE TASTY!") +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("Fine! I guess I'll just have to #rforce my way through#k!") +sm.forcedMove(False, 100) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face2##fs50#Waah! More tasty!") +sm.sendDelay(1000) +sm.spawnNpc(3003167, -370, 20) +sm.showNpcSpecialActionByTemplateId(3003167, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003167, "appear", 0) +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendNext("Have no fear, your hero is here!") +sm.blind(True, 500, 255, 255, 255, 0) +sm.forcedInput(4) +sm.sendDelay(2000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendNext("Oh my! I #bmessed up again#k and hit this stranger in the head... Gotta work on my landing, heh!") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face1##fs50#What you give... Give more!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Huh? Heya #bMuto#k! You like the #bfood#k this person gave you?") +sm.setInnerOverrideSpeakerTemplateID(3003156) # Muto +sm.sendSay("#face1##fs50#MORE TASTY!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("#face0#Well isn't that amazing! #bMuto#k enjoying #bfood#k? It's been a while.") +sm.sendSay("Hm... This stranger is exactly what our village needs right now! You're coming with me, buddy.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(parentID, "a=2") +sm.warp(450002204) diff --git a/scripts/quest/q34201s.py b/scripts/quest/q34201s.py new file mode 100755 index 0000000..c8f83d1 --- /dev/null +++ b/scripts/quest/q34201s.py @@ -0,0 +1,4 @@ +# id 34201 ([Chu Chu] Welcome to Chu Chu Island), field 450002000 +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.warp(450002202) diff --git a/scripts/quest/q34202s.py b/scripts/quest/q34202s.py new file mode 100755 index 0000000..8aa5356 --- /dev/null +++ b/scripts/quest/q34202s.py @@ -0,0 +1,58 @@ +# id 34202 ([Chu Chu] Master Lyck, Top Chef), field 450002000 +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendNext("You there! Bring me my knife! #bSlurp slurp#k!") +sm.createQuestWithQRValue(18418, "B=34842") +sm.sendSay("No, no, this soup is all wrong! Are you really thinking of serving this \r\nto #bMuto#k?!") +sm.sendSay("#face0#What a disgrace! #bSlurp-slurp#k!") +sm.setParam(57) +sm.sendSay("Um... Excuse me...") +sm.setParam(37) +sm.sendSay("#face0#Hmm? Are you one of my new chefs? Can't you see I'm busy? \r\nWhy are you standing there like a buffoon?") +sm.sendSay("#face0#Go and bring me more ingredients! \r\nI swear, you're just as dense as #bLyon#k!") +sm.setParam(57) +sm.sendSay("Uh... Actually, #bLyon#k is the one that sent me here...") +sm.setParam(37) +sm.sendSay("Did anyone else hear that strange whining sound? It certainly couldn't \r\nbe that assistant I just sent for ingredients, slurp-slurp!") +sm.setParam(57) +sm.sendSay("#bSigh#k... How am I supposed to carry on a conversation with someone like this...") +sm.setParam(37) +sm.sendSay("EXCUSE ME?!") +sm.setParam(57) +sm.sendSay("Oh! Yes, Lyon sent me...") +sm.setParam(37) +sm.sendSay("What did you just say?") +sm.setParam(57) +sm.sendSay("Lyon sent me?") +sm.setParam(37) +sm.sendSay("#face0#No! Not that! Didn't you just say that I #b'couldn't carry on a conversation \r\nwith a tongue like this'#k!?") +sm.setParam(57) +sm.sendSay("What? That's not what I said at all.") +sm.setParam(37) +sm.sendSay("#face0##fs30#How dare you mock my \r\nbeautiful tongue!") +sm.setParam(57) +sm.sendSay("I didn't!") +sm.setParam(37) +sm.sendSay("#face0#You're FIRED! Get out of my #brestaurant#k at once! #bSlurp, slurp-slurp#k!") +sm.setParam(57) +sm.sendSay("You can't fire me, I don't even work here...") +sm.setParam(37) +sm.sendSay("Huh? You don't?") +sm.setParam(57) +sm.sendSay("Of course I don't... I just arrived here.") +sm.setParam(37) +sm.sendSay("What? Then what business do you have with me?") +sm.setParam(57) +sm.sendSay("I'm #b#h0##k. #bChief Lyon#k told me to find you and help you make delicious food...") +sm.setParam(37) +sm.sendSay("#face3#What? You're the #bkitchen hand#k sent by Lyon?!\r\nThen you should have said so!") +sm.setParam(57) +sm.sendSay("You never gave me a chance to speak... and I'm not a kitchen hand...") +sm.setParam(37) +sm.sendSay("Silence! #rGulla#k will strike in a few days time!\r\nI must perfect my new #b'signature dish'#k! ") +sm.setParam(57) +sm.sendSay("Signature... dish?") diff --git a/scripts/quest/q34203e.py b/scripts/quest/q34203e.py new file mode 100755 index 0000000..0831fce --- /dev/null +++ b/scripts/quest/q34203e.py @@ -0,0 +1,8 @@ +# id 34203 ([Chu Chu] Master Lyck's Special Dish), field 993017200 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(3003152) # Master Lyck +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendNext("Oh! That was quick! Now, I must prepare my #rsignature dish#k! Slurp!") +sm.createQuestWithQRValue(18418, "B=34843") +sm.sendSay("It should be ready in no time! Come back in a little bit, slurp!") diff --git a/scripts/quest/q34203s.py b/scripts/quest/q34203s.py new file mode 100755 index 0000000..449c760 --- /dev/null +++ b/scripts/quest/q34203s.py @@ -0,0 +1,7 @@ +# 34203 (Master Lyck's Special Dish) +sm.setSpeakerID(3003152) +sm.sendNext("#h #! I need 20 #i2435856# #bSweet Hoof items to make a #rsignature dish #kthat will satisfy Muto! Slurp!") +if sm.sendAskYesNo("Can you be back with my ingredients in a jiffy?!"): + sm.startQuest(parentID) + sm.sendNext("You can get #i2435856# #bSweet Hoof #kby hunting the #bPinedeer #kthat live in #bFive-Color Hill #kwhich is to the right of the village!") + sm.sendSayOkay("Hurry back, we have a culinary masterpiece to perfect, and very little time! Slurp!") diff --git a/scripts/quest/q34204s.py b/scripts/quest/q34204s.py new file mode 100755 index 0000000..99f5e85 --- /dev/null +++ b/scripts/quest/q34204s.py @@ -0,0 +1,5 @@ +# id 34204 ([Chu Chu] Great and Terrible Taste), field 993017200 +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=34844") +sm.warp(450002202) diff --git a/scripts/quest/q34205e.py b/scripts/quest/q34205e.py new file mode 100755 index 0000000..242c8e2 --- /dev/null +++ b/scripts/quest/q34205e.py @@ -0,0 +1,55 @@ +# id 34205 ([Chu Chu] Follow Your Nose), field 450002023 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendNext("#face0#Looks like I've cooked another wonderful meal!") +sm.createQuestWithQRValue(18418, "B=34845") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("We're the ones eating it, so we'll be the judges of that!") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("#bPibik#k, are you going to keep on complaining about free food?") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Don't you talk back to me! I'm older than you.") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("That's all the more reason for you to #r#fs20#exercise common sense!") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Pi... mi... #bPimi#k scary... Heeeheee.") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Ahem! Let's all enjoy this wonderful meal. ...Eat your food already!") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Of course #bPibik#k. Doesn't it feel nice behaving? You should keep being good for Simia, since she works so hard for us. Okay?") +sm.sendSay("If you don't, you #fs20#might not like what happens.#fs15# (Sighs) I'll just leave it at that.") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("O-okay!") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Heh, heehee. Pimi made Pibik quiet again.") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Pidol, you need to eat too. You have to take care of yourself if you want your #bhead to heal#k...") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Hehehe. I fine. I always like this.") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Pidol... You need to focus on getting better... (Sighs)") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("#face0#Pibik! Pimi! Pidol! It's so nice to see you all looking after one another!") +sm.sendSay("So few of us around here, myself included, #bhave a family#k to rely on... But #bthe three of you can always depend on each other#k. You must feel so happy!") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Simia, you do have a family. You took us in when #bthe village kicked us out for having unusual tastes#k. We're your family!") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Hehe... Thanks Pimi! I don't have anywhere to go either. Let's stay together forever!") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Family? Yeah right... We don't even look alike...") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Hey... You should stop being mean #fs13#if you know what's good for you...") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("W-what I meant was that I'm even more grateful! She had no reason to look after us short little weirdos... We have unusual tastes but she makes food we like...") +sm.sendSay("(Mumbles) #fs13#Thanks... Simia...") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("#face0#Hehe. I know how much you like me Pibik. Pimi, stop bullying your brother. Families shouldn't threaten or fight with each other.") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("We're not... hitting each other... Hehehe... #bIt's one-sided#k... Heehee.") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("#face0#What are we doing sitting here gabbing, with this delicious food getting cold in front of us? I made your favorite, #bChewy Sole Soup#k! Bon apetit!") +sm.setParam(57) +sm.sendSay("So, that delicious smell was coming from here... Whatever they're eating, I hope they have enough to share...") diff --git a/scripts/quest/q34205s.py b/scripts/quest/q34205s.py new file mode 100755 index 0000000..e14c128 --- /dev/null +++ b/scripts/quest/q34205s.py @@ -0,0 +1,11 @@ +# id 34205 ([Chu Chu] Follow Your Nose), field 450002000 +sm.setSpeakerType(3) +sm.setParam(2) +sm.sendNext("#bMuto#k has the tastes of a human... Their food will never get him to move.") +sm.sendSay("But the only way I can get to the Black Mage is if #bMuto#k moves...") +sm.sendSay("My s-stomach! I'm too hungry to think...") +sm.sendSay("As hungry as I am... I can't eat their terrible food. Sigh...") +sm.sendSay("W-wait... (Sniffs) Where is that delicious aroma coming from?!") +sm.sendSay("Maybe I'll find something to eat real quick. I can't fight the Black Mage on an empty stomach!") +sm.sendSay("Hm... It seems like that smell's coming from the #btop right#k... I should follow it!") +sm.startQuest(parentID) diff --git a/scripts/quest/q34206s.py b/scripts/quest/q34206s.py new file mode 100755 index 0000000..7eaa245 --- /dev/null +++ b/scripts/quest/q34206s.py @@ -0,0 +1,2 @@ +# 34206 (Simia, the Kitchen Hand) +sm.warp(450002205) \ No newline at end of file diff --git a/scripts/quest/q34207e.py b/scripts/quest/q34207e.py new file mode 100755 index 0000000..db2f71e --- /dev/null +++ b/scripts/quest/q34207e.py @@ -0,0 +1,7 @@ +# id 34207 ([Chu Chu] The Five-Color Hill Special 1), field 450002023 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(3003151) # Simia +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendNext("#b#h0##k!\r\nI see you brought all the ingredients. Now we'll just mash these into a paste and bake it into a #bbun#k!") +sm.createQuestWithQRValue(18418, "B=34847") diff --git a/scripts/quest/q34207s.py b/scripts/quest/q34207s.py new file mode 100755 index 0000000..ea35679 --- /dev/null +++ b/scripts/quest/q34207s.py @@ -0,0 +1,49 @@ +# id 34207 ([Chu Chu] The Five-Color Hill Special 1), field 450002023 +sm.setSpeakerID(3003151) # Simia +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendNext("#b#h0##k!\r\nHow would one make one of those... #bsand... wiches#k?") +sm.setParam(2) +sm.sendSay("Uh... I need #bbread for a bun, something green and leafy like lettuce, and then some kind of meat patty#k...") +sm.setParam(4) +sm.sendSay("Okay! Then let's recreate the #bbread and 'lettuce'#k first!") +sm.setParam(2) +sm.sendSay("Okay. Can you think of anything here that tastes like the #blettuce, and the bread#k that were on the top and bottom of the sandwich?") +sm.setParam(4) +sm.sendSay("Ooh... I have an idea!") +sm.sendSay("First, head over to Five-Color Hill and gather #b40#k #i4034943:# #b#t4034943##k items from the #bBighorn Pinedeer#k. Those should perfectly replicate the flavor of the bread!") +sm.sendSay("Oh! But first, we need a #bname for our culinary experiment#k. How about we start with a word that #bdescribes the dish#k!") +sm.setParam(2) +sm.sendSay("I think the word 'sandwich' is already perfectly fine...") +sm.setParam(4) +sm.sendSay("No! Our food can't truly be great without a #bgreat name#k!\r\nPi siblings! Help the traveler brainstorm.") +sm.setSpeakerType(3) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +res = sm.sendNext("Me first! Okay! Pick One:\r\n#b#L0# Delicious#l\r\n#b#L1# Homecooked#l#l\r\n#b#L2# This is dumb.#l") +sm.setSpeakerType(4) +sm.sendNext("#bDelicious #kis it? That's sounds cool!") +sm.setParam(2) +sm.sendSay("What... That's a terrible start for a sandwich name.") +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +res = sm.sendNext("Next, how about one of these!\r\n#b#L0# Beefy#l\r\n#b#L1# Smelly#l#l\r\n#b#L2# Your ideas are all terrible...#l") +sm.setSpeakerType(4) +sm.sendNext("Hmm. Sure, #bBeefy #kcould work!") +sm.setParam(2) +sm.sendSay("(Sighs) ...Whatever.") +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +res = sm.sendNext("Hehe, hehehe. I pick too!\r\n#b#L0# Bite of Heaven#l\r\n#b#L1# Surprise#l\r\n#b#L2# Delight#l") +sm.setSpeakerType(4) +sm.sendNext("...No like! I say... '#bTastesplosion#k' instead! Heheheh. Kaboom!") +sm.setParam(2) +sm.sendSay("Umm...") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Okay, that settles it! The name of our sandwich is the #bDelicious Beefy Tastesplosion#k!") +sm.sendSay("Okay! Let's prepare our dish!") +sm.createQuestWithQRValue(34219, "foodname=Delicious Beefy Tastesplosion Sandwich") +sm.startQuest(parentID) +sm.warp(450002002) diff --git a/scripts/quest/q34208e.py b/scripts/quest/q34208e.py new file mode 100755 index 0000000..b8c1aa8 --- /dev/null +++ b/scripts/quest/q34208e.py @@ -0,0 +1,9 @@ +# id 34208 ([Chu Chu] The Five-Color Hill Special 2), field 450002023 +sm.completeQuestNoCheck(parentID) +sm.setMapTaggedObjectVisible("obj_01", True, 0, 0) +sm.setSpeakerID(3003151) # Simia +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendNext("#b#h0##k! You're back with more ingredients! We just finished baking the bun. Now we'll just throw in the topping you brought... There!") +sm.createQuestWithQRValue(18418, "B=34848") +sm.sendSay("All right, the first part of our #bDelicious Beefy Tastesplosion Sandwich#k is ready to go! Next, we make the patty. Ask #bPibik#k to help you with that!") diff --git a/scripts/quest/q34208s.py b/scripts/quest/q34208s.py new file mode 100755 index 0000000..d6cbcea --- /dev/null +++ b/scripts/quest/q34208s.py @@ -0,0 +1,9 @@ +# id 34208 ([Chu Chu] The Five-Color Hill Special 2), field 450002023 +sm.setSpeakerID(3003151) # Simia +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendNext("While I'm working on the buns with the Pi siblings, I need you to go find a substitute for that #b'lettuce'#k stuff!") +sm.sendSay("Pimi suggested you gather #i4034944:# #b#t4034944##k and #i4034945:# #b#t4034945##k items from #bRamanana#k and #bEwenana#k monsters that live at Five-Color Hill!") +sm.sendSay("We will need #b30 each#k to make a dish big enough to feed Muto. That should be enough, right?") +sm.startQuest(parentID) +sm.warp(450002004) diff --git a/scripts/quest/q34209e.py b/scripts/quest/q34209e.py new file mode 100755 index 0000000..ef4a0d8 --- /dev/null +++ b/scripts/quest/q34209e.py @@ -0,0 +1,13 @@ +# id 34209 ([Chu Chu] Fresh from the Slurpy Forest 1), field 993017200 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(3003153) # Pibik +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendNext("That was fast! You got the ingredients already?!") +sm.createQuestWithQRValue(18418, "B=37705") +sm.sendSay("But it's not a real sandwich without multiple types of meat!") +sm.sendSay("Now! Bring me more meat to complete the #bDelicious Beefy Tastesplosion Sandwich#k and to #bfill my belly#k!") +sm.setParam(2) +sm.sendSay("Why are we making the sandwich that #bYOU want to eat#k? Have you forgotten this is all for #bMuto#k?") +sm.setParam(4) +sm.sendSay("My taste is impeccable! Now stop talking and bring me meat!") diff --git a/scripts/quest/q34209s.py b/scripts/quest/q34209s.py new file mode 100755 index 0000000..f5487d8 --- /dev/null +++ b/scripts/quest/q34209s.py @@ -0,0 +1,13 @@ +# id 34209 ([Chu Chu] Fresh from the Slurpy Forest 1), field 450002023 +sm.setSpeakerID(3003153) # Pibik +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendNext("Meat! Tasty, juicy, tender meat!") +sm.sendSay("I love #ball types of meat#k! The #blaw of the jungle#k is eat or be eaten. Good thing I'm on top of the food chain!") +sm.sendSay("The most memorable part of that sandwich of yours was the #bmeat#k by far! I have an idea for a good substitute, both in texture and flavor.") +sm.sendSay("Harvest some juicy, meaty #i4034946:# #b#t4034946##k and #i4034947:# #b#t4034947##k items from #bFlyons#k and #bAngry Flyons#k in Slurpy Forest!") +sm.sendSay("I think #b20 of each#k should be enough to feed #bMuto#k and #bme#k! Hurry up and get them!") +sm.setParam(2) +sm.sendSay("...Why do I have to get him some too?") +sm.startQuest(parentID) +sm.warp(450002009) diff --git a/scripts/quest/q34210e.py b/scripts/quest/q34210e.py new file mode 100755 index 0000000..eb89256 --- /dev/null +++ b/scripts/quest/q34210e.py @@ -0,0 +1,14 @@ +# id 34210 ([Chu Chu] Fresh from the Slurpy Forest 2), field 450002023 +sm.completeQuestNoCheck(parentID) +sm.setMapTaggedObjectVisible("obj_02", True, 0, 0) +sm.setSpeakerID(3003153) # Pibik +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendNext("You're back?! I was sure you would be eaten alive!") +sm.createQuestWithQRValue(18418, "B=37706") +sm.sendSay("Check out my awesome patty! The #bDelicious Beefy Tastesplosion Sandwich#k is coming along nicely!") +sm.sendSay("Now, a little nibble for the master of taste!") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("If you don't move that stubby little beak of yours away from the sandwich, #byou're gonna be eating your next meal through a straw#k.") +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Grr... It looks like my work here is done. You can go bother #bPimi#k now!") diff --git a/scripts/quest/q34210s.py b/scripts/quest/q34210s.py new file mode 100755 index 0000000..a51c6ce --- /dev/null +++ b/scripts/quest/q34210s.py @@ -0,0 +1,13 @@ +# id 34210 ([Chu Chu] Fresh from the Slurpy Forest 2), field 993017200 +sm.setSpeakerID(3003153) # Pibik +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendNext("Okay! Go get some more meat!") +sm.sendSay("How about gathering some #i4034948:# #b#t4034948##k and #i4034949:# #b#t4034949##k items from #bUnripe Wolfruit#k and #bRipe Wolfruit#k in Slurpy Forest!") +sm.sendSay("They may look cute and delicious but they're the apex predator of Slurpy Forest. Weaklings like you should be careful!") +sm.setParam(2) +sm.sendSay("Do I really have to take this from a baby bird...?") +sm.setParam(4) +sm.sendSay("Quit mumbling and get going! And get #b30 of each#k this time!") +sm.startQuest(parentID) +sm.warp(450002007) diff --git a/scripts/quest/q34211e.py b/scripts/quest/q34211e.py new file mode 100755 index 0000000..f567de0 --- /dev/null +++ b/scripts/quest/q34211e.py @@ -0,0 +1,13 @@ +# id 34211 ([Chu Chu] Eree Valley's Catch of the Day 1), field 450002023 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(3003154) # Pimi +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendNext("Oh, you're back. And you're soaked to the bone. Hand me the ingredients you brought, and then go get some rest.") +sm.createQuestWithQRValue(18418, "B=37707") +sm.sendSay("Ah, that delightful aroma! I know that this #bDelicious Beefy Tastesplosion Sandwich#k will be the best dish ever.") +sm.sendSay("Ah! Of course, you still have to gather the next ingredient.") +sm.setParam(2) +sm.sendSay("Can't I rest for a bit?") +sm.setParam(4) +sm.sendSay("Sure. Take a break. If you want, I can help you take #rthe longest nap of your life.#k \r\n#b(She balls one of her wings into a fist and slams it against the other)#k \r\nHehehe!") diff --git a/scripts/quest/q34211s.py b/scripts/quest/q34211s.py new file mode 100755 index 0000000..14d185e --- /dev/null +++ b/scripts/quest/q34211s.py @@ -0,0 +1,31 @@ +# id 34211 ([Chu Chu] Eree Valley's Catch of the Day 1), field 450002023 +sm.setSpeakerID(3003154) # Pimi +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendNext("Sniff, sniff... Mmm, it's starting to smell good!") +sm.setParam(2) +sm.sendSay("Yeah! It'll be ready for Muto to eat as soon as we add the top bun.") +sm.setParam(4) +sm.sendSay("You're forgetting the #bmost important#k thing.") +sm.setParam(2) +sm.sendSay("Huh? What do you mean?") +sm.setParam(4) +sm.sendSay("The #bfish#k! No meal is ever complete without seafood.") +sm.setParam(2) +sm.sendSay("We already have two kinds of meat... And you want to add seafood to the mix? I'm not sure that'll taste very good...") +sm.setParam(4) +sm.sendSay("Maybe you misheard me. I said #bI want you to get fish for the sandwich#k #fs20#right now.") +sm.setParam(2) +sm.sendSay("...Fine. It's not like I'm the one who has to eat it.") +sm.setParam(4) +sm.sendSay("Hehe. What a good listener!") +sm.sendSay("All you need to do is gather #i4034950:# #b#t4034950##k and #i4034951:# #b#t4034951##k items from #bGreen Catfish#k and #bBlue Catfish#k in #bEree Valley#k.") +sm.sendSay("Um, can you get around #b20#k to start?\r\nThose that #bcan't fly#k like yourself will have to #bswim#k in Eree Valley. Beware the swift current. If you can't #bswim#k then... You're gonna have a bad time.") +sm.setParam(2) +sm.sendSay("Wait, can YOU fly?") +sm.setParam(4) +sm.sendSay("Isn't that obvious? How could we fly with these little wings? Are you making fun of me? Hehehe.") +sm.setParam(2) +sm.sendSay("Err... Sorry. I'll be back soon.") +sm.startQuest(parentID) +sm.warp(450002012) diff --git a/scripts/quest/q34212e.py b/scripts/quest/q34212e.py new file mode 100755 index 0000000..29fddf2 --- /dev/null +++ b/scripts/quest/q34212e.py @@ -0,0 +1,16 @@ +# id 34212 ([Chu Chu] Eree Valley's Catch of the Day 2), field 450002023 +sm.completeQuestNoCheck(parentID) +sm.setMapTaggedObjectVisible("obj_03", True, 0, 0) +sm.setSpeakerID(3003154) # Pimi +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendNext("Oh! Looks like you survived the #bRhyturtle's dreaded horn#k. Hehe.") +sm.createQuestWithQRValue(18418, "B=37909") +sm.sendSay("At last, the seafood patty is complete! We'll just crunch up the shells and sprinkle them on top, and... Voila! What a masterpiece, eh?") +sm.sendSay("Muto will absolutely adore our #bDelicious Beefy Tastesplosion Sandwich#k! Hahaha.") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("I... I want to... Help also, yes... Hehehe.") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Of course, Pidol! Yes, you should help the traveler too!") +sm.setParam(2) +sm.sendSay("Uhhhh... Are you sure about that?") diff --git a/scripts/quest/q34212s.py b/scripts/quest/q34212s.py new file mode 100755 index 0000000..ad2bb31 --- /dev/null +++ b/scripts/quest/q34212s.py @@ -0,0 +1,13 @@ +# id 34212 ([Chu Chu] Eree Valley's Catch of the Day 2), field 450002023 +sm.setSpeakerID(3003154) # Pimi +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendNext("Did you have a nice break? Hehe.\r\nI just need a few more ingredients to complete the #bfish patty#k.") +sm.sendSay("Could you get #i4034952:# #b#t4034952##k and #i4034953:# #b#t4034953##k items from #bRhyturtles#k and #bBoss Rhyturtles#k that live deep in Eree Valley?") +sm.setParam(2) +sm.sendSay("Uhh... Shells? On a sandwich?") +sm.setParam(4) +sm.sendSay("Are you doubting our #btaste#k?\r\nI can promise you, this sandwich will be delicious. So go and get them already... Please?") +sm.sendSay("Oh! We'll need #babout 30 of each#k this time.") +sm.startQuest(parentID) +sm.warp(450002014) diff --git a/scripts/quest/q34213e.py b/scripts/quest/q34213e.py new file mode 100755 index 0000000..a51a542 --- /dev/null +++ b/scripts/quest/q34213e.py @@ -0,0 +1,14 @@ +# id 34213 ([Chu Chu] A Taste of Skywhale Mountain 1), field 993017200 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(3003155) # Pidol +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendNext("Wow... Feathers! You brought them fast. Heeheehee.") +sm.setParam(2) +sm.sendSay("Okay Pidol, here's your weird gorilla-bird feathers for that 'egg patty.'") +sm.setParam(4) +sm.sendSay("Hmph. How dare you belittle me. I needn't explain my logic to such an ignoramus.") +sm.setParam(2) +sm.sendSay("Pidol! You spoke normally again...") +sm.setParam(4) +sm.sendSay("Normal...? Feather good... I still need more...") diff --git a/scripts/quest/q34213s.py b/scripts/quest/q34213s.py new file mode 100755 index 0000000..c660d5a --- /dev/null +++ b/scripts/quest/q34213s.py @@ -0,0 +1,25 @@ +# id 34213 ([Chu Chu] A Taste of Skywhale Mountain 1), field 450002023 +sm.setSpeakerID(3003155) # Pidol +sm.setParam(2) +sm.sendNext("So... #bPidol#k... What kind of patty do you want to make?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("E... Egg... Eggy-eggy-egg.") +sm.setParam(2) +sm.sendSay("Come again?") +sm.setParam(4) +sm.sendSay("I said, I wish you to procure some #beggs#k, you addlebrained buffoon.\r\nPerhaps if you merely tried listening for a change...") +sm.setParam(2) +sm.sendSay("W-wait, so you can speak normally?") +sm.setParam(4) +sm.sendSay("Hehehe, speak... I speak good... Hehe...\r\nEgg patty is yummy... Heeheehee.") +sm.setParam(2) +sm.sendSay("What's with him?") +sm.setParam(4) +sm.sendSay("Hehe. You get #i4034954:# #b#t4034954##k and #i4034955:# #b#t4034955##k from #bCrilia#k and #bPatriarch Crilia#k at #bSkywhale Mountain#k... We use... for seasoning...") +sm.setParam(2) +sm.sendSay("Wait, you were just talking about eggs... You want me to get feathers now?") +sm.setParam(4) +sm.sendSay("Yes! Feathers... Like I say...") +sm.startQuest(parentID) +sm.warp(450002017) diff --git a/scripts/quest/q34214e.py b/scripts/quest/q34214e.py new file mode 100755 index 0000000..81ff2de --- /dev/null +++ b/scripts/quest/q34214e.py @@ -0,0 +1,11 @@ +# id 34214 ([Chu Chu] A Taste of Skywhale Mountain 2), field 993017200 +sm.completeQuestNoCheck(parentID) +sm.setMapTaggedObjectVisible("obj_04", True, 0, 0) +sm.setMapTaggedObjectVisible("obj_05", True, 0, 0) +sm.setSpeakerID(3003155) # Pidol +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendNext("Woooow! Sandwich... Com... plete! Wheeheehee!") +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("#h0#, our #bDelicious Beefy Tastesplosion Sandwich#k is finally complete! Yay!") +sm.sendSay("We should all try a bite!") diff --git a/scripts/quest/q34214s.py b/scripts/quest/q34214s.py new file mode 100755 index 0000000..5f83526 --- /dev/null +++ b/scripts/quest/q34214s.py @@ -0,0 +1,19 @@ +# id 34214 ([Chu Chu] A Taste of Skywhale Mountain 2), field 993017200 +sm.setSpeakerID(3003155) # Pidol +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendNext("Heehee... This is really last time...") +sm.sendSay("You get #i4034956# #b#t4034956##k and #i4034957:# #b#t4034957##k from #bBirdshark#k and #bPatriarch Birdshark#k in #bSkywhale Mountain#k. Hehehehe.") +sm.sendSay("Sharp claw, strong jaw! Hehe. Careful... Okay?") +sm.startQuest(parentID) +sm.completeQuestNoCheck(64208) +sm.startQuest(9571) +sm.startQuest(28861) +sm.startQuest(28862) +sm.startQuest(28830) +sm.startQuest(28831) +sm.startQuest(28832) +sm.startQuest(28833) +sm.startQuest(42102) +sm.startQuest(7621) +sm.warp(450002019) diff --git a/scripts/quest/q34215e.py b/scripts/quest/q34215e.py new file mode 100755 index 0000000..aff5f6c --- /dev/null +++ b/scripts/quest/q34215e.py @@ -0,0 +1,2 @@ +# id 34215 ([Chu Chu] The Secret Ingredient), field 450002023 +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q34215s.py b/scripts/quest/q34215s.py new file mode 100755 index 0000000..a4884c2 --- /dev/null +++ b/scripts/quest/q34215s.py @@ -0,0 +1,68 @@ +# id 34215 ([Chu Chu] The Secret Ingredient), field 993017200 +sm.setSpeakerID(3003151) # Simia +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendNext("We couldn't have made it without your help, #h0#!.") +sm.sendSay("Why don't you take the first bite?") +sm.setParam(2) +sm.sendSay("You... want me to put that in my mouth? After helping you put all that weird stuff in it?") +sm.sendSay("That wasn't part of the agreement...") +sm.sendSay("(Sighs) Well, down the hatch!") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003153) # Pibik +sm.sendSay("Well, don't just eat it! Tell us how it tastes!") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("How is it? Will Muto like it?") +sm.setParam(2) +sm.sendSay("Huh. This is actually pretty okay, considering the horrible things we put inside it. But...") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("But?") +sm.setParam(2) +sm.sendSay("It's... A little on the #bbland#k side.") +sm.sendSay("The sandwich I gave Muto was a lot more flavorful. It wasn't exactly health food.") +sm.setParam(4) +sm.sendSay("Let me try a bite... \r\nHmm... I think I see what you mean.") +sm.sendSay("I've never made a dish this large... so there probably #risn't enough seasoning#k...") +sm.setParam(2) +sm.sendSay("It's almost time to meet with Master Lyck. This'll just have to do for now.") +sm.setParam(4) +sm.sendSay("But... Muto is basically a child... There's no way we'll convince him to eat something this bland...") +sm.setParam(2) +sm.sendSay("Then what would you suggest...? We don't have a lot of time here.") +sm.setParam(4) +sm.sendSay("I know something that would add a lot of flavor... But it's not easy to come by.") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("Simia, you can't be thinking about #r...that#k!") +sm.setParam(2) +sm.sendSay("What is it?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Well, we have to grind up the #rfruit of the Slurpy Tree#k.") +sm.setParam(2) +sm.sendSay("That's it? Pick fruit from a tree? No flying gorillas? I can do that! Where's this #rSlurpy Tree#k?") +sm.setParam(4) +sm.sendSay("The #rSlurpy Tree#k grows deep inside the Chu Chu Forest... But... it's no ordinary tree.") +sm.sendSay("The #rSlurpy Tree#k is a big, scary #rman-eating tree#k... That's part of why it's hard to get harvest the #rSlurpy Fruit#k...") +sm.sendSay("I know you're strong, but... Would you be willing to risk your life to get the fruit? I wouldn't ask if the village wasn't at stake...") +sm.setInnerOverrideSpeakerTemplateID(3003154) # Pimi +sm.sendSay("WELL?!") +sm.sendSay("Whee!") +sm.setInnerOverrideSpeakerTemplateID(3003155) # Pidol +sm.sendSay("Whee!") +sm.setParam(2) +sm.sendSay("(Sighs)... I guess I have no choice... I'll be back...") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003151) # Simia +sm.sendSay("Wait! #h0# I'm sorry for making such a difficult request, but...") +sm.setParam(2) +sm.sendSay("You don't need to worry. I'm strong!") +sm.setParam(4) +sm.sendSay("It's not that... It's just that, the Slurpy Fruit #bmust be picked with the stem intact#k... You see, that's the tastiest part...") +sm.setParam(2) +sm.sendSay("I see...") +sm.startQuest(parentID) +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152855;QET=20190704201215;state=2") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152855;QET=20190704201215;state=1") +sm.createQuestWithQRValue(49000, "count=1;Quest=0;day=152855;QET=20190704211218;state=1") +sm.warp(450002010) diff --git a/scripts/quest/q34216s.py b/scripts/quest/q34216s.py new file mode 100755 index 0000000..f0c76e9 --- /dev/null +++ b/scripts/quest/q34216s.py @@ -0,0 +1,36 @@ +# id 34216 ([Chu Chu] Gulla Attacks), field 450002000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendNext("It's #rGulla#k! #rGulla has begun his assault#k!") +sm.sendSay("#bMaster Lyck#k! Have you completed your meal for Muto?") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("Of course! Just you watch, Muto will be #bjumping for joy#k because \r\nit's so good!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Oh! What a relief! But what happened to that #bstrange little traveler#k who went off to make their own dish?") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face4#Slurp-slurp! Surely off cowering in fear! Hmph. \r\nThat runt doesn't know a thing about taste, and they dared to \r\nlecture ME about flavor! Well, now their true colors are showing!") +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Um. Anyways Master Lyck, we should take your masterpiece to Muto!") +sm.setParam(57) +sm.sendSay("W-wait! I'm here! (Huffs) The food... It's ready!") +sm.setParam(37) +sm.sendSay("#face1#Oh! You're back!") +sm.setParam(57) +sm.sendSay("(Pants) Yes! Let's go to Muto...") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("What? Where is this food you speak of? Don't tell me you made \r\nsomething small... Your last offering was smaller than one of \r\nMuto's boogers!") +sm.setParam(57) +sm.sendSay("(Breathes heavily) I prepared #ban amazing dish#k... and I had #bhelp from an excellent chef#k...") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003150) # Lyon +sm.sendSay("Oh! An #bassistant#k? Well that's nice. Who are they?") +sm.setInnerOverrideSpeakerTemplateID(3003152) # Master Lyck +sm.sendSay("#face4#Slurp-slurp! Liar! There's no one on Chu Chu Island that \r\ncooks half as well as me!") +sm.setParam(57) +sm.sendSay("Hey, uh, aren't we a little short on time here? We should get to Muto! \r\nMy #bassistant#k is already bringing our dish there!") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.warp(450002021) diff --git a/scripts/quest/q34217s.py b/scripts/quest/q34217s.py new file mode 100755 index 0000000..65050b0 --- /dev/null +++ b/scripts/quest/q34217s.py @@ -0,0 +1,4 @@ +# id 34217 ([Chu Chu] Muto's Choice), field 450002021 +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.warp(450002201) diff --git a/scripts/quest/q34218s.py b/scripts/quest/q34218s.py new file mode 100755 index 0000000..80f4380 --- /dev/null +++ b/scripts/quest/q34218s.py @@ -0,0 +1,6 @@ +# id 34218 ([Chu Chu] Goodbye, Chu Chu Island), field 450002021 +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.startQuest(34221) +sm.progressMessageFont(3, 20, 10, 0, "You can shorten previous Arcane River area Daily Quests.") +sm.warp(450002201) diff --git a/scripts/quest/q34300e.py b/scripts/quest/q34300e.py new file mode 100755 index 0000000..f680d05 --- /dev/null +++ b/scripts/quest/q34300e.py @@ -0,0 +1,11 @@ +# id 34300 ([Lachelein] Festival of Dreams), field 450003000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendNext("Are you from outside?") +sm.setParam(2) +sm.sendSay("?") +sm.setParam(4) +sm.sendSay("You must be careful, this place is dangerous. Oh no, they're here!.") +sm.completeQuestNoCheck(parentID) +sm.warp(450003710) diff --git a/scripts/quest/q34300s.py b/scripts/quest/q34300s.py new file mode 100755 index 0000000..abb8e23 --- /dev/null +++ b/scripts/quest/q34300s.py @@ -0,0 +1,17 @@ +# id 34300 ([Lachelein] Festival of Dreams), field 450003000 +sm.startQuest(parentID) +sm.setSpeakerType(3) +sm.setParam(2) +sm.sendSayOkay("There are humans in the Arcane River? I should talk to them.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003225) # Rabbit Mask +sm.sendNext("I'm happy, HAPPY I tell you!") +sm.createQuestWithQRValue(parentID, "NpcSpeech=30032251") +sm.setInnerOverrideSpeakerTemplateID(3003226) # Cat Mask +sm.sendNext("Fireworks, dancing, the sound of rushing water... I'm so excited!") +sm.createQuestWithQRValue(parentID, "NpcSpeech=30032251/30032262") +sm.setInnerOverrideSpeakerTemplateID(3003227) # Flutist Mask +sm.sendNext("Ha ha ha. Come, celebrate with me!") +sm.setParam(2) +sm.sendSay("This place is strange... Why is everyone wearing masks?") +sm.createQuestWithQRValue(parentID, "NpcSpeech=30032251/30032262/30032273") diff --git a/scripts/quest/q34301s.py b/scripts/quest/q34301s.py new file mode 100755 index 0000000..0a602cb --- /dev/null +++ b/scripts/quest/q34301s.py @@ -0,0 +1,19 @@ +# id 34301 ([Lachelein] City of Dreams and Illusions), field 450003100 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003209) # Gray Mask +sm.sendNext("Protective Mask, you sure are fearless for one so young. You were almost in big trouble.") +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendSay("I couldn't leave that person at her mercy.") +sm.setInnerOverrideSpeakerTemplateID(3003209) # Gray Mask +sm.sendSay("Indeed. You sure have a lot of guts to get so close to her, stranger. Of course maybe you don't know any better... Well, you're safe now.") +sm.setParam(2) +sm.sendSay("Who was that woman?") +sm.setParam(4) +sm.sendSay("Her name is #b'Lucid'#k. Her power is unlike anything I've ever seen. She has the ability to manipulate dreams. In fact, #bLachelein#k is really just one great big prison plucked from her own dreams. And we're the prisoners. ") +sm.setParam(2) +sm.sendSay("I see. So that's why they call it the Dreaming City... ") +sm.setParam(4) +sm.sendSay("Hah. For us, it's a city of nightmares.") +sm.completeQuestNoCheck(parentID) +sm.warp(450003720) diff --git a/scripts/quest/q34305s.py b/scripts/quest/q34305s.py new file mode 100755 index 0000000..c7bd434 --- /dev/null +++ b/scripts/quest/q34305s.py @@ -0,0 +1,35 @@ +# id 34305 ([Lachelein] Lucid Dreams), field 450003100 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendNext("I heard you need to go further down the river. If we succeed in freeing ourselves from this city of dreams, your wish will be a possibility. ") +sm.setSpeakerType(4) +sm.setSpeakerID(3003201) # Protective Mask +sm.setParam(0) +res = sm.sendAskAccept("Will you aid us?") +sm.setSpeakerType(3) +sm.setParam(4) +sm.sendNext("Thank you. Gray Mask can tell you more.") +sm.startQuest(parentID) +sm.createQuestWithQRValue(64270, "") +sm.createQuestWithQRValue(64110, "dir1=1;chk=1;chk1=1") +sm.createQuestWithQRValue(64110, "dir1=1;chk=0;chk1=1") +sm.createQuestWithQRValue(63862, "") +sm.createQuestWithQRValue(16548, "count=0;todayM=0;todayT=0;lastDate=19/07/05;todayC=0") +sm.createQuestWithQRValue(18793, "q0=1;q1=0;q2=0;pq=0;q1Date=19/07/05;q2Date=19/07/04;pqDate=19/07/04") +sm.createQuestWithQRValue(18793, "q0=1;q1=0;q2=0;pq=0;q1Date=19/07/05;q2Date=19/07/05;pqDate=19/07/04") +sm.createQuestWithQRValue(18793, "q0=1;q1=0;q2=0;pq=0;q1Date=19/07/05;q2Date=19/07/05;pqDate=19/07/05") +sm.createQuestWithQRValue(63369, "chk=0;day=18") +sm.startQuest(61555) +sm.createQuestWithQRValue(34127, "") +sm.createQuestWithQRValue(62153, "lastday=19/07/05") +sm.createQuestWithQRValue(18688, "party=10;solo=10;r=07/05") +sm.createQuestWithQRValue(18192, "count=12;val2=0;tDate=19/07/04/13/40;val=325") +sm.createQuestWithQRValue(18273, "count=0;last=19/07/05;state1=0;state2=0") +sm.createQuestWithQRValue(18282, "count=0;last=19/07/05") +sm.createQuestWithQRValue(58980, "") +sm.startQuest(7019) +sm.completeQuestNoCheck(7707) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=1933;sum=326316;lv=3;date=20190704;today=0;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=1933;sum=326316;lv=3;date=20190705;today=0;total=16") +sm.createQuestWithQRValue(100191, "date=20190705;today=0") diff --git a/scripts/quest/q34308s.py b/scripts/quest/q34308s.py new file mode 100755 index 0000000..5b1bf39 --- /dev/null +++ b/scripts/quest/q34308s.py @@ -0,0 +1,17 @@ +# id 34308 ([Lachelein] Finding the Awakened Ones (2)), field 450003000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendNext("Did you identify the Awakened One? Who was it?") +sm.setSpeakerType(4) +sm.setSpeakerID(3003202) # Protective Mask +res = sm.sendNext("What should I say?\r\n#b\r\n#L0# Beauty Mask#l\r\n#L1# Classy Cat Mask#l\r\n#L2# Shrimp Mask#l") +sm.setSpeakerType(3) +if res == 0: + sm.sendSayOkay("That doesn't sound right... Maybe you weren't looking carefully enough.") +elif res == 1: + sm.sendSayOkay("That doesn't sound right... Maybe you weren't looking carefully enough.") +elif res == 2: + sm.sendNext("I see. Speak with Shrimp Mask. Convince him to aid our cause.") + sm.startQuest(parentID) + diff --git a/scripts/quest/q34315e.py b/scripts/quest/q34315e.py new file mode 100755 index 0000000..fe7f9ce --- /dev/null +++ b/scripts/quest/q34315e.py @@ -0,0 +1,20 @@ +# id 34315 ([Lachelein] Break the Plates (2)), field 450003330 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003234) # Balloon Mask +sm.sendNext("And the winner is... Pie Mask!") +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendSay("They held the eating contest while you were gone.") +sm.setInnerOverrideSpeakerTemplateID(3003236) # Beauty Mask +sm.sendSay("Wow! Did you see that? That was a lot of food!") +sm.setInnerOverrideSpeakerTemplateID(3003238) # Huge Watermelon Mask +sm.sendSay("I lost? How could I lose? I was so sure this would be my first victory!") +sm.setParam(2) +sm.sendSay("I still don't understand how me breaking all the plates would have helped him win his first victory.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendSay("It's not like you broke ALL the plates anyway.") +sm.setInnerOverrideSpeakerTemplateID(3003223) # Pie Mask +sm.sendSay("I did it... Look at me. I'm the winner! Admire me. I'm so happy... Aren't I? ") +sm.sendSay("I don't undestand... I should feel happy right now, shouldn't I? Ah!") +sm.warp(450003730) diff --git a/scripts/quest/q34322s.py b/scripts/quest/q34322s.py new file mode 100755 index 0000000..f43a8d0 --- /dev/null +++ b/scripts/quest/q34322s.py @@ -0,0 +1,25 @@ +# id 34322 ([Lachelein] Dark Mask), field 450003430 +sm.setSpeakerType(3) +sm.setParam(3) +sm.sendNext("Where is that music coming from?") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(3003218) # Dark Mask +sm.sendSay("Aren't you afraid? Leave me alone, I want to live!") +sm.setParam(3) +sm.sendSay("#rYou're the awakened one!") +sm.setParam(5) +sm.sendSay("What's the point of being awake if we're still trapped inside their dream?!") +sm.sendSay("Do you think that woman doesn't know what you're up to? It's just a matter of time...") +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendSay("Did you see Lucid? You know something, don't you?") +sm.setInnerOverrideSpeakerTemplateID(3003218) # Dark Mask +sm.sendSay("Pshh. I'm out of here. Getting caught with you is a one-way ticket to the afterlife.") +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendSay("Wait, it's dangerous to skulk around carelessly. It's better to hide in plain sight among those who still sleep...") +sm.setInnerOverrideSpeakerTemplateID(3003218) # Dark Mask +sm.sendSay("Excuse me. Don't mind me, just passing through.") +sm.setInnerOverrideSpeakerTemplateID(3003201) # Protective Mask +sm.sendSay("I'll go after him.") +sm.setParam(3) +sm.sendSay("(Both of them disappeared to the right. You should follow them!)") +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q34325e.py b/scripts/quest/q34325e.py new file mode 100755 index 0000000..07d8891 --- /dev/null +++ b/scripts/quest/q34325e.py @@ -0,0 +1,6 @@ +# id 34325 ([Lachelein] Masquerade Mask), field 450003430 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(450003750) diff --git a/scripts/quest/q34326s.py b/scripts/quest/q34326s.py new file mode 100755 index 0000000..3b98d0c --- /dev/null +++ b/scripts/quest/q34326s.py @@ -0,0 +1,95 @@ +# id 34326 ([Lachelein] Fallen), field 450003100 +sm.lockInGameUI(True, False) +sm.spawnNpc(3003252, -463, -110) +sm.showNpcSpecialActionByTemplateId(3003252, "summon", 0) +sm.spawnNpc(3003254, -67, -174) +sm.showNpcSpecialActionByTemplateId(3003254, "summon", 0) +sm.spawnNpc(3003256, 22, -27) +sm.showNpcSpecialActionByTemplateId(3003256, "summon", 0) +sm.spawnNpc(3003255, 57, -169) +sm.showNpcSpecialActionByTemplateId(3003255, "summon", 0) +sm.spawnNpc(3003251, -374, -24) +sm.showNpcSpecialActionByTemplateId(3003251, "summon", 0) +sm.startQuest(parentID) +sm.showNpcSpecialActionByTemplateId(3003251, "sit", -1) +sm.showFadeTransition(0, 1500, 3000) +sm.zoomCamera(0, 2000, 0, -219, -25) +sm.sendDelay(300) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003252) # Gray Mask +sm.sendNext("Protective Mask, are you all right?") +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#As the dream's hold weakens, so do I. What could this mean...?") +sm.sendDelay(500) +sm.changeBGM("SoundEff.img/ArcaneRiver/thrill", 0, 0) +sm.bgmVolume(100, 100) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 134930943, 0, 0) +sm.sendNext("#face0#...! Did you feel that? ") +sm.sendSay("#face0#Lachelein is rapidly expanding!") +sm.setInnerOverrideSpeakerTemplateID(3003252) # Gray Mask +sm.sendSay("Does that mean her ultimate goal is...!?") +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#She's not satisfied with just the Arcane River... She's trying to envelop \r\nthe entire world in her dream!") +sm.showEffect("Map/Effect3.img/Lacheln/pung3", 0, -461, -50, 0, 0, 1, 0) +sm.showNpcSpecialActionByTemplateId(3003252, "special", -1) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) +sm.showEffect("Map/Effect3.img/Lacheln/pung3", 0, 24, -50, 0, 0, 1, 0) +sm.showNpcSpecialActionByTemplateId(3003254, "special", -1) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) +sm.showEffect("Map/Effect3.img/Lacheln/pung3", 0, -64, -187, 0, 0, 1, 0) +sm.showNpcSpecialActionByTemplateId(3003256, "special", -1) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) +sm.showEffect("Map/Effect3.img/Lacheln/pung3", 0, 57, -187, 0, 0, 1, 0) +sm.showNpcSpecialActionByTemplateId(3003255, "special", -1) +sm.sendDelay(1000) +sm.playExclSoundWithDownBGM("Skill.img/1201005/Use", 100) +sm.bgmVolume(100, 100) +sm.setParam(57) +sm.sendNext("W-what?!") +sm.sendSay("They turned into Dreamkeepers?!") +sm.sendDelay(2000) +sm.moveNpcByTemplateId(3003252, False, 120, 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper +sm.sendNext("Hope and despair... The best of friends... ") +sm.moveNpcByTemplateId(3003254, True, 30, 100) +sm.sendSay("As one grows stronger... So too does the other.") +sm.moveNpcByTemplateId(3003256, True, 80, 100) +sm.sendSay("Struggle all you like... You cannot escape.") +sm.moveNpcByTemplateId(3003255, True, 50, 100) +sm.sendSay("This is one dream from which... you will never awaken.") +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0##h0#, look out!") +sm.blind(True, 255, 0, 0, 0, 300) +sm.setInnerOverrideSpeakerTemplateID(3003257) # Dreamkeeper +sm.sendSay("Your fate... Is already sealed.") +sm.setParam(57) +sm.sendSay("S-stay back! W-what? Ahh!") +sm.sendDelay(1500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.onLayer(2000, "0", 0, -80, 1, "Map/Effect3.img/Lacheln/4", 4, True, -1, False) +sm.sendDelay(2500) +sm.offLayer(1500, "0", False) +sm.bgmVolume(0, 200) +sm.sendDelay(1500) +sm.setParam(37) +sm.sendNext("Forget them.") +sm.sendSay("The Arcane River will take care of them.") +sm.sendSay("Transform into Erdas and flow onward... Your energy will feed the Dark One...") +sm.sendSay("That is a meaningful end... ") +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3003250) # Lucid +sm.sendNext("#face5#Hehehe. Bye bye.") +sm.sendDelay(1500) +sm.sendNext("#face2#Wait.") +sm.sendSay("#face2#Was that person...? ") +sm.sendSay("#face2#It can't be...") +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.warp(450003760) diff --git a/scripts/quest/q34330e.py b/scripts/quest/q34330e.py new file mode 100755 index 0000000..d329fd3 --- /dev/null +++ b/scripts/quest/q34330e.py @@ -0,0 +1,23 @@ +# id 34330 ([Lachelein] Nightmare Clocktower 4F), field 450003530 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003209) # Gray Mask +sm.sendNext("Hm... The dream is growing weaker.") +sm.sendSay("Hold on to this for me, won't you? Who knows whether I'll transform into a Dreamkeeper again.") +sm.sendSay("I discovered this while I was a Dreamkeeper. I guess I was still awake, in a way. Perhaps it will be of use to you.") +sm.sendSay("I see Protective Mask couldn't make it. The shock of his ordeal must have been great. ") +sm.sendSay("But don't worry. I'm sure he will recover. ") +sm.sendSay("#h0#...") +sm.setSpeakerType(4) +sm.setSpeakerID(3003210) # Gray Mask +sm.setParam(2) +sm.sendSay("I'm going to stop Lucid.") +sm.setSpeakerType(3) +sm.setParam(4) +sm.sendSay("I won't stand in your way then. Win, #h0#. Both for yourself, and for us.") +if sm.canHold(1712003): + sm.giveItem(1712003) + sm.completeQuest(34330) + sm.startQuest(34343) +else: + sm.sendNext("Please make room in your EQUIP inventory. I have something very important to give you.") diff --git a/scripts/quest/q34331e.py b/scripts/quest/q34331e.py new file mode 100755 index 0000000..db3d34b --- /dev/null +++ b/scripts/quest/q34331e.py @@ -0,0 +1,26 @@ +# id 34331 ([Lachelein] Decisive Battle), field 450004000 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Is it over? Is that it? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003251) # Protective Mask +sm.sendSay("#face0#I... think it's over. But the barrier around the city hasn't disappeared yet.") +sm.setParam(57) +sm.sendSay("What are you going to do now? ") +sm.setParam(37) +sm.sendSay("#face0#Dreams and reality are separate once more. And now, just like any other, this dream will slowly fade away... ") +sm.setParam(57) +sm.sendSay("But if the dream end, then you'll... ") +sm.setParam(37) +sm.sendSay("#face0#The nightmare must vanish when the day breaks.") +sm.sendSay("#face0#If the people, or the Erdas are safe, then that means I've fulfilled my purpose. It doesn't matter if I disappear.") +sm.setParam(57) +sm.sendSay("...") +sm.setParam(37) +sm.sendSay("#face0#I guess you'll resume your quest when the fog is lifted. ") +sm.sendSay("#face0#It will be a difficult journey, but I hope you'll return safely.") +sm.completeQuestNoCheck(parentID) +sm.lockInGameUI(False, True) +sm.progressMessageFont(3, 20, 10, 0, "You can shorten previous Arcane River area Daily Quests.") diff --git a/scripts/quest/q34367s.py b/scripts/quest/q34367s.py new file mode 100755 index 0000000..516c7e9 --- /dev/null +++ b/scripts/quest/q34367s.py @@ -0,0 +1,4 @@ +# id 34367 (Vanquisher Of Nightmares), field 450004000 +sm.startQuest(parentID) +sm.setSpeakerID(3003208) # Protective Mask +sm.sendSayOkay("Please speak with me when you defeat #rLucid (Hard)#k the Master of Nightmares. I have something to give you.") diff --git a/scripts/quest/q34452e.py b/scripts/quest/q34452e.py new file mode 100755 index 0000000..eaabb42 --- /dev/null +++ b/scripts/quest/q34452e.py @@ -0,0 +1,37 @@ +# id 34452 ([Arcana] When the Spirit Tree Bloomed), field 450005015 +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.onLayer(1000, "00", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/0", 4, True, -1, False) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face7#That tree you see in the distance once resonated with the song of a harmonious forest, and blossomed with beautiful flowers. We strolled beneath the Spirit Tree's branches and were happy.") +sm.onLayer(1000, "01", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/4", 4, True, -1, False) +sm.sendDelay(1000) +sm.onLayer(1000, "02", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/2", 4, True, -1, False) +sm.sendDelay(1000) +sm.sendNext("#face7#The Spirit Tree sheltered us from danger, and the places where its petals fell overflowed with life.") +sm.onLayer(1000, "03", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/3", 4, True, -1, False) +sm.sendDelay(1000) +sm.onLayer(1000, "04", 0, -80, 12, "Effect/Direction19.img/effect/arcana_play/1", 4, True, -1, False) +sm.sendDelay(1000) +sm.sendNext("#face4#...But the song of the forest grew silent, and tragedy befell us.") +sm.sendSay("#face4#Wild, discordant spirts began to appear, and the forest slowly began to die.") +sm.offLayer(1000, "01", False) +sm.offLayer(1000, "02", False) +sm.offLayer(1000, "03", False) +sm.offLayer(1000, "04", False) +sm.sendDelay(1000) +sm.sendNext("#face5#So too did the Spirit Tree begin to wither...") +sm.sendSay("#face4#As the Spirit Tree withered, it became shrouded in an evil stench.") +sm.sendSay("#face4#The Vortex of Light appeared shortly afterwards. It must be connected to the deterioration of the Spirit Tree.") +sm.offLayer(300, "00", False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34453e.py b/scripts/quest/q34453e.py new file mode 100755 index 0000000..ea2e7a9 --- /dev/null +++ b/scripts/quest/q34453e.py @@ -0,0 +1,27 @@ +# id 34453 ([Arcana] The Song of the Forest), field 450005015 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face7#I believe the Spirit Tree will restore itself, if only the Song of the Forest were played once more. I tried to revive the Songblooms, but...") +sm.sendSay("#face4#It didn't work. Wahhh...!") +sm.sendSay("#face4#...I-I'm sorry I'm such a crybaby. Wah...") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face1#It can be felt, but not seen. You cannot hear it, but you know it is there.\r\nWhat is it?") +sm.sendSay("#face2#Friendship, love, kindness. It goes by many names.") +sm.sendSay("#face2#Your tale tugs at my heart, like the breeze on one's tendrils. Very well, I will assist you.") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face7#Ah, Wind Spirit! (Sniffs) That's Wind Spirit. He's a little unusual.") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face1#My song is mine alone, but you may sing it.") +sm.setParam(57) +sm.sendSay("Uhh, right... We're going to revive the Songblooms and restore the Song of the Forest. Will you help us?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face1#We might be able to revive the Spirit Tree and put everything back the way it was! What do you say, Wind Spirit?") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face2#Hahaha, you have my assistance. Just tell me what to do! I wait with baited breath.") +sm.sendSay("#face1#Ah! An urgent quest. I pulsate with excitement.") +sm.sendDelay(500) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34454s.py b/scripts/quest/q34454s.py new file mode 100755 index 0000000..d3b1261 --- /dev/null +++ b/scripts/quest/q34454s.py @@ -0,0 +1,12 @@ +# id 34454 ([Arcana] The Floral Flute), field 450005015 +sm.setSpeakerID(3003302) # Wind Spirit +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendNext("Speak, speak! I, Wind Spirit, await your quest. Hurry, hurry.") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("Wind Spirit, could you carry us down this cliff to where the Floral Flute is?") +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("Dooot~ The flute below the cliff, the floral flute that toots. Dooooooot~") +sm.setParam(0) +res = sm.sendAskAccept("Yes, we'll ride the wind, zoomy and free. Down, down, to the flute that toots. Ready?") +sm.warp(940200206) diff --git a/scripts/quest/q34460s.py b/scripts/quest/q34460s.py new file mode 100755 index 0000000..71c74b7 --- /dev/null +++ b/scripts/quest/q34460s.py @@ -0,0 +1,7 @@ +# id 34460 ([Arcana] Blooms Under the Moon), field 450005100 +sm.setSpeakerID(3003303) # Small Spirit +sm.sendNext("...Let's move the Floral Flute to the place that gets the most moonlight! Well... the Floral Flute is way too big to transport as it stands.") +sm.sendSay("There's still life in these blossoms... We still have hope!") +res = sm.sendAskAccept("But we can cut a trimming from the withered Floral Flute and plant it in the place with the most moonlight!") +sm.sendNext("Let's plant it in the place with the most moonlight! Go, go, go!") +sm.warp(940200330) diff --git a/scripts/quest/q34464s.py b/scripts/quest/q34464s.py new file mode 100755 index 0000000..4a2c0b1 --- /dev/null +++ b/scripts/quest/q34464s.py @@ -0,0 +1,10 @@ +# id 34464 ([Arcana] The Spirit Tree's Return), field 450005220 +sm.setSpeakerID(3003311) # Lost Tree Spirit +sm.setParam(2) +res = sm.sendAskAccept("#b(Every minute the missing spirit is out here, it's in danger. You should escort it to safety immediately.)#k") +sm.closeUI(1128) +sm.closeUI(1128) +sm.sendNext("#b(If the Tree Spirit is exposed to this evil aura any longer, it may be irreversibly corrupted. You need to defeat the Wild Spirits nearby and save it.)#k") +sm.closeUI(1128) +sm.closeUI(1128) +sm.warp(940200220) diff --git a/scripts/quest/q34466s.py b/scripts/quest/q34466s.py new file mode 100755 index 0000000..80d94f6 --- /dev/null +++ b/scripts/quest/q34466s.py @@ -0,0 +1,25 @@ +# id 34466 ([Arcana] Finding the Bramble Harp), field 450005200 +sm.startQuest(parentID) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face5#(Sniffs) I told myself I was done crying...") +sm.zoomCamera(1000, 1500, 1000, 400, 50) +sm.sendDelay(1000) +sm.sendNext("#face4#But the tears won't stop coming...") +sm.zoomCamera(2000, 2000, 2000, 800, 80) +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("#b(The trail of light is back again... Is it trying to lead us somewhere?)#k") +sm.zoomCamera(1500, 2000, 1500, 900, 80) +sm.sendDelay(1500) +sm.sendNext("#b(But that's back towards all the corrupted spirits...)#k") +sm.zoomCamera(3000, 1000, 3000, 400, -50) +sm.sendDelay(3000) +sm.sendNext("Small Spirit, we should follow that trail of lights. It's led us this far...") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(450005220) diff --git a/scripts/quest/q34467e.py b/scripts/quest/q34467e.py new file mode 100755 index 0000000..12b7cbb --- /dev/null +++ b/scripts/quest/q34467e.py @@ -0,0 +1,16 @@ +# id 34467 ([Arcana] Reviving the Bramble Harp 1), field 940200216 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face1#You gathered the Deathcries! Let's smash them over on this side of the tree...") +sm.completeQuestNoCheck(parentID) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.sendDelay(600) +sm.playExclSoundWithDownBGM("Mob.img/8644005/Die", 100) +sm.sendDelay(1500) +sm.sendNext("#face6#....") +sm.sendDelay(1000) +sm.sendNext("#face6#It didn't work. #b(Sighs)#k\r\nIt looks like the noise wasn't loud enough.") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34468e.py b/scripts/quest/q34468e.py new file mode 100755 index 0000000..b1bcd27 --- /dev/null +++ b/scripts/quest/q34468e.py @@ -0,0 +1,20 @@ +# id 34468 ([Arcana] Reviving the Bramble Harp 2), field 940200216 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face1#You brought the Volatile Shrieks! Quickly, place them on this side of the tree...") +sm.completeQuestNoCheck(parentID) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.sendDelay(600) +sm.playExclSoundWithDownBGM("Mob.img/8644006/Die", 100) +sm.sendDelay(1500) +sm.sendNext("#face2#Yes, yes, it worked! Now that the tree is out of the way, when the stars begin to shine--") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3003309) # Tree Spirits +sm.sendNext("#face0#What are you up to now?!") +sm.sendSay("#face0#Whatever you're doing, stop it right now!") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face1#Uh oh... those shrieks got the attention of the Tree Spirits...") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34469s.py b/scripts/quest/q34469s.py new file mode 100755 index 0000000..2add5a8 --- /dev/null +++ b/scripts/quest/q34469s.py @@ -0,0 +1,3 @@ +# id 34469 ([Arcana] The Song of the Bramble Harp), field 940200216 +sm.startQuest(parentID) +sm.warp(940200219) diff --git a/scripts/quest/q34470e.py b/scripts/quest/q34470e.py new file mode 100755 index 0000000..cc0cdbc --- /dev/null +++ b/scripts/quest/q34470e.py @@ -0,0 +1,42 @@ +# id 34470 ([Arcana] What the Trees Saw), field 940200216 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(You asked about the stranger with the terrible aura.)#k") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003310) # Lost Tree Spirit +sm.sendSay("#face0#Curious, are you? Then I'll tell you. But... it is a painful memory.") +sm.sendSay("#face0#It was on a day so quiet, even the winds were still.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendNext("#face0#We Tree Spirits were tending to the trees, like any other day.") +sm.onLayer(1000, "00", 0, -80, 12, "Effect/Direction19.img/effect/arcana/3", 4, True, -1, False) +sm.sendSay("#face0#But then we felt an aura of immense evil enter the forest. It was calm, but so very powerful...") +sm.sendSay("#face0#Our first instinct was to hide, and we watched in silence.") +sm.offLayer(1000, "00", False) +sm.onLayer(1000, "01", 0, -80, 12, "Effect/Direction19.img/effect/arcana_disappear/0", 4, True, -1, False) +sm.onLayer(1000, "02", 0, -80, 12, "Effect/Direction19.img/effect/arcana_disappear/1", 4, True, -1, False) +sm.onLayer(1000, "03", 0, -80, 12, "Effect/Direction19.img/effect/arcana_disappear/2", 4, True, -1, False) +sm.onLayer(1000, "04", 0, -80, 12, "Effect/Direction19.img/effect/arcana_disappear/3", 4, True, -1, False) +sm.onLayer(1000, "05", 0, -80, 12, "Effect/Direction19.img/effect/arcana_disappear/4", 4, True, -1, False) +sm.onLayer(1000, "06", 0, -80, 12, "Effect/Direction19.img/effect/arcana_disappear/5", 4, True, -1, False) +sm.onLayer(1000, "07", 0, -80, 12, "Effect/Direction19.img/effect/arcana_disappear/6", 4, True, -1, False) +sm.sendSay("#face0#The trees, flowers, grass, and rocks of the forest... Everything in the strangers wake vanished, transformed into something else.") +sm.sendSay("#face0#...All from coming into contact with that stranger's aura.") +sm.sendSay("#face0#She was only walking by, but in an instant it was all gone...") +sm.sendSay("#face0#Others followed behind her... I don't remember how many. I was too consumed by fear.") +sm.sendSay("#face0#That's all we saw. Just thinking about that day brings back so many terrible feelings. Fear, anger, helplessness...") +sm.offLayer(300, "01", False) +sm.offLayer(300, "02", False) +sm.offLayer(300, "03", False) +sm.offLayer(300, "04", False) +sm.offLayer(300, "05", False) +sm.offLayer(300, "06", False) +sm.offLayer(300, "07", False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(500) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34472s.py b/scripts/quest/q34472s.py new file mode 100755 index 0000000..88a4ef3 --- /dev/null +++ b/scripts/quest/q34472s.py @@ -0,0 +1,4 @@ +# id 34472 ([Arcana] Under the Lagoon), field 450005300 +sm.setSpeakerID(3003336) # Small Spirit +res = sm.sendAskAccept("Maybe if we break that big rock, it'll restore the flow of water?") +sm.warp(940200255) diff --git a/scripts/quest/q34473s.py b/scripts/quest/q34473s.py new file mode 100755 index 0000000..45bb9da --- /dev/null +++ b/scripts/quest/q34473s.py @@ -0,0 +1,3 @@ +# id 34473 ([Arcana] We Wee Spirits), field 450005400 +sm.startQuest(parentID) +sm.warp(940200213) diff --git a/scripts/quest/q34474s.py b/scripts/quest/q34474s.py new file mode 100755 index 0000000..2504f94 --- /dev/null +++ b/scripts/quest/q34474s.py @@ -0,0 +1,11 @@ +# id 34474 ([Arcana] Wock Spiwit Wescue), field 450005400 +sm.startQuest(parentID) +sm.startQuest(34480) +sm.startQuest(34481) +sm.startQuest(34482) +sm.startQuest(34483) +sm.startQuest(34484) +sm.startQuest(34485) +sm.startQuest(34486) +sm.createQuestWithQRValue(parentID, "fin=0") +sm.warp(940200250) diff --git a/scripts/quest/q34475e.py b/scripts/quest/q34475e.py new file mode 100755 index 0000000..24e68bc --- /dev/null +++ b/scripts/quest/q34475e.py @@ -0,0 +1,48 @@ +# id 34475 ([Arcana] Between a Rock Spirit and a Hard Place), field 450005400 +sm.completeQuestNoCheck(parentID) +sm.startQuest(34488) +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.spawnNpc(3003351, -1250, 120) +sm.showNpcSpecialActionByTemplateId(3003351, "summon", 0) +sm.showNpcSpecialActionByTemplateId(3003351, "stand2", -1) +sm.forcedFlip(True) +sm.sendDelay(300) +sm.blind(False, 0, 0, 0, 0, 300) +sm.sendDelay(300) +sm.sendDelay(900) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendNext("#face0#Am I imagining things, or is the ground shaking?") +sm.forcedFlip(True) +sm.sendDelay(600) +sm.forcedFlip(True) +sm.sendDelay(600) +sm.setParam(57) +sm.sendNext("#b(The ground is definitely shaking... What's going on?)#k") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3003302) # Wind Spirit +sm.sendSay("#face0#The plump one cries, and we must fly. We should depart, immediately.") +sm.resetNpcSpecialActionByTemplateId(3003351) +sm.showNpcSpecialActionByTemplateId(3003351, "wind2", 0) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/wind", 100) +sm.sendDelay(1000) +sm.forcedMove(True, 100) +sm.sendDelay(2000) +sm.sendNext("#face0#The Spirit Tree sings a pained and mournful tune~") +sm.setInnerOverrideSpeakerTemplateID(3003301) # Small Spirit +sm.sendSay("#face7#No... What's happened to the Spirit Tree?!") +sm.resetNpcSpecialActionByTemplateId(3003351) +sm.showNpcSpecialActionByTemplateId(3003351, "wind3", 0) +sm.playSound("Sound/SoundEff.img/ArcaneRiver/wind", 100) +sm.sendDelay(2400) +sm.sendNext("#face7#We have to hurry!") +sm.setInnerOverrideSpeakerTemplateID(3003314) # Rock Spirit +sm.sendSay("#face0#The Spiwit Twee's in twouble!?") +sm.forcedFlip(True) +sm.sendDelay(600) +sm.sendNext("#face0#I have an idea!") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34475s.py b/scripts/quest/q34475s.py new file mode 100755 index 0000000..c7a0e7e --- /dev/null +++ b/scripts/quest/q34475s.py @@ -0,0 +1,3 @@ +# id 34475 ([Arcana] Between a Rock Spirit and a Hard Place), field 450005400 +sm.startQuest(parentID) +sm.warp(940200212) diff --git a/scripts/quest/q34476s.py b/scripts/quest/q34476s.py new file mode 100755 index 0000000..511d2ec --- /dev/null +++ b/scripts/quest/q34476s.py @@ -0,0 +1,4 @@ +# id 34476 ([Arcana] The Sickly Spirit Tree), field 450005400 +sm.setSpeakerID(3003314) # Rock Spirit +res = sm.sendAskAccept("Fowwoe me! I know a showtcut!") +sm.warp(940200300) diff --git a/scripts/quest/q34477s.py b/scripts/quest/q34477s.py new file mode 100755 index 0000000..b9e17d1 --- /dev/null +++ b/scripts/quest/q34477s.py @@ -0,0 +1,14 @@ +# id 34477 ([Arcana] The Evil Within), field 450005000 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(3003350) # Small Spirit +sm.sendNext("(Sobs) The Spirit Tree has been completely engulfed by the evil aura! I don't understand... We revived the Songblooms! The tree should have been restored. Why is this happening?") +sm.sendSay("Ahh! The evil in the tree... It feels like it's trying to spread!") +sm.setSpeakerType(4) +sm.setSpeakerID(3003306) # Small Spirit +sm.setParam(2) +res = sm.sendAskAccept("#b(There are no other options left. Will you confront the evil infecting the Spirit Tree?)#k") +sm.setParam(3) +sm.sendNext("#b(The Spirit Tree is coursing with evil energy... this can't be good.)#k") +sm.createQuestWithQRValue(34451, "clearB=0;clear=1") +sm.warp(940200260) diff --git a/scripts/quest/q34515s.py b/scripts/quest/q34515s.py new file mode 100755 index 0000000..64a607c --- /dev/null +++ b/scripts/quest/q34515s.py @@ -0,0 +1,37 @@ +# [Maplerunner] It's Maplerunner! +# Author: shavit + +TWO_PUNCH_CAT = 9070200 +FOREST_OF_TENACITY_LOBBY = 993001000 + +# Settings +sm.setSpeakerID(TWO_PUNCH_CAT) +sm.flipDialogue() +sm.setBoxChat() + +sm.sendNext("Hey, you! I found you!") + +sm.sendNext("I've been searching high and low for you! " + "Word is already starting to trickle out about you. " + "You know, the part about you really being a goat in a human's body.") + +sm.sendNext("But I know you don't want that to spread like wildfire, so I'll keep it a secret!") + +sm.sendNext("Anyway, there are a whole lot of animals in the Forest of Tenacity that wish to be half as amazing as you are. " + "They're talented, sure, but...") + +sm.sendNext("They NEED proper guidance!") + +if not sm.sendAskYesNo("I figured if anyone can help them, you can. " + "So, how 'bout it? Interested in helping out? " + "If you are, let me know, and I'll guide you to the Forest of Tenacity."): + sm.sendSay("Well, that's unfortunate. " + "Please talk to me when you can help the animals in the Forest of Tenacity.") + sm.dispose() + +sm.sendNext("That's what I like to hear! " + "Then I'll guide you the Forest of Tenacity. " + "We'll discuss the details after that.") + +sm.warp(FOREST_OF_TENACITY_LOBBY) +sm.completeQuestNoRewards(parentID) \ No newline at end of file diff --git a/scripts/quest/q34601s.py b/scripts/quest/q34601s.py new file mode 100755 index 0000000..5853004 --- /dev/null +++ b/scripts/quest/q34601s.py @@ -0,0 +1,61 @@ +# id 34601 (), field 940200502 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.forcedFlip(True) +sm.zoomCamera(0, 2000, 0, 484, 100) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001260) +sm.sendNext("#face0#Bahaha, the look on his face! He just tossed his wallet and ran. Boy it feels good to be bad!") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/9", 128) +sm.sendSay("#face0#Here, everybody take your cuts so I can stop staring at your ugly mugs and get outta here.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/10", 128) +sm.sendSay("#face0#...") +sm.sendSay("#face0#Hey, you! What're you looking at? You'd better get lost if you know what's good for ya.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/11", 128) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendSay("#face3#Hah. That's a pretty good joke.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/0", 128) +sm.setInnerOverrideSpeakerTemplateID(3001260) +sm.sendSay("#face0#You lookin' to start something, pal?") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/12", 128) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendSay("#face3#I came here looking for somebody tough to fight, but there's no one around but you wimps. I guess it's just another night of disappointment.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/1", 128) +sm.sendSay("#face3#Ah well. I guess I'll just have to find a way to entertain myself.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/2", 128) +sm.forcedAction(1532, 0) +sm.showEffect("Skill/6002.img/skill/60021279/effect", 0, 0, 0, 0, 0, 0, 0) +sm.showEffect("Skill/6002.img/skill/60021279/hit", 0, 700, -90, 0, 0, 0, 0) +sm.playSound("Sound/Skill.img/60021279/Use", 100) +sm.playSound("Sound/Skill.img/60021279/Hit", 100) +sm.sendDelay(1500) +sm.setInnerOverrideSpeakerTemplateID(3001260) +sm.sendNext("#face0#Nice shot kid, you missed me by a mile. Why don't you take your toy, and... Hey wait a sec, WHERE'S MY LOOT?!") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/13", 128) +sm.setInnerOverrideSpeakerTemplateID(3001271) +sm.sendSay("#face2#Hahaha. Oh, was this yours? I'm sorry. Maybe you should've kept better hold of it.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/3", 128) +sm.sendSay("#face3#I'd be happy to give it back to you, if you can beat me in a fight! Hahaha... So you know, never.") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/4", 128) +sm.setInnerOverrideSpeakerTemplateID(3001260) +sm.sendSay("#face0#I'VE HAD ENOUGH OF YOUR LIP, PAL! C'mon boys, let's teach 'em a lesson!") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/14", 128) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(3001271) +res = sm.sendAskAccept("#face3##bHah. Big mistake. Time to teach these guys a lesson.#k") +sm.playExclSoundWithDownBGM("Voice3.img/cadena/Q1/Male/15", 128) +sm.warp(940200600) +sm.startQuest(34601) diff --git a/scripts/quest/q34603s.py b/scripts/quest/q34603s.py new file mode 100755 index 0000000..3e91580 --- /dev/null +++ b/scripts/quest/q34603s.py @@ -0,0 +1,6 @@ +# id 34603 (), field 402000002 +sm.setSpeakerID(3001202) +sm.sendNext("Looks like you picked up a couple of nasty cuts in that fight earlier. I suppose that's punishment enough. We'll skip the lecture.\r\n") +sm.sendSay("Here, treat it with this medicine.\r\n") +sm.giveItem(2437264) +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q34656s.py b/scripts/quest/q34656s.py new file mode 100755 index 0000000..15a1916 --- /dev/null +++ b/scripts/quest/q34656s.py @@ -0,0 +1,16 @@ +# id 34656 (First Fighting Tactic, 1st job cadena advancement), field 402000001 +sm.setSpeakerID(3001200) +if chr.getJob() == 6002: + sm.sendNext("The treatment worked well for you, which means you're ready to learn Shadowdealer skills and techniques. Welcome to the branch.") + sm.sendSay("You've done well as my apprentice. You're strong, and you have incredible talent for combat. Keep practicing the techniques I've shown you, and you'll get even stronger.") + sm.setJob(6400) + sm.setSTR(4) + sm.setINT(4) + sm.setDEX(4) + sm.setLUK(4) + sm.setAP(4 + chr.getLevel() * 5) + sm.addSP(3) + sm.addMaxHP(350) + sm.addMaxMP(200) + sm.giveAndEquip(1353300) + sm.completeQuestNoCheck(parentID) \ No newline at end of file diff --git a/scripts/quest/q34657s.py b/scripts/quest/q34657s.py new file mode 100755 index 0000000..b2a83b3 --- /dev/null +++ b/scripts/quest/q34657s.py @@ -0,0 +1,16 @@ +# 34657 (Second Fighting Tactic, Cadena 2nd job adv) +sm.setSpeakerID(3001200) # Gen +if chr.getJob() == 6400: + sm.sendNext("Now that I've taught you, you're completing missions in record time. Well done.") + sm.sendSay("At first, I wasn't sure you took this seriously, but it looks like I was wrong.") + sm.sendSay("You seem pretty comfortable with that skill, so let's move on to the second battle skill.") + # add stats + sm.setJob(6410) + sm.addAP(5) + sm.addSP(7) + sm.addMaxHP(350) + sm.addMaxMP(200) + sm.sendNext("These skills are a lot more challenging, but I'm sure you can handle 'em.") + sm.sendSay("I think you've improved enough to handle more dangerous missions now. Open your skill window (K) and take a look.") + sm.sendSayOkay("Keep practicing and getting experience to keep your skills in top shape.") + sm.completeQuestNoCheck(parentID) \ No newline at end of file diff --git a/scripts/quest/q34658s.py b/scripts/quest/q34658s.py new file mode 100755 index 0000000..cbbad47 --- /dev/null +++ b/scripts/quest/q34658s.py @@ -0,0 +1,14 @@ +# 34658 (Third Fighting Tactic, Cadena 3rd job adv) +sm.setSpeakerID(3001200) # Gen +if chr.getJob() == 6410: + sm.sendNext("Now that I've taught you further, even difficult missions are cleared without issue.") + sm.sendSay("You seem pretty comfortable with your current skill set, so let's move on to the third battle skill. This will be the last time I will be teaching you.") + # add stats + sm.setJob(6411) + sm.addAP(5) + sm.addSP(7) + sm.addMaxHP(350) + sm.addMaxMP(200) + sm.sendNext("These skills even more challenging, but I'm sure you can handle 'em.") + sm.sendSayOkay("Keep practicing and getting experience to keep your skills in top shape.") + sm.completeQuestNoCheck(parentID) \ No newline at end of file diff --git a/scripts/quest/q34659s.py b/scripts/quest/q34659s.py new file mode 100755 index 0000000..5f3e11d --- /dev/null +++ b/scripts/quest/q34659s.py @@ -0,0 +1,15 @@ +# 34658 (Fourth Fighting Tactic, Cadena 4th job adv) +sm.setPlayerAsSpeaker() +if chr.getJob() == 6411: + sm.sendNext("Well, those skills the Chief taught me are perfect now.") + sm.sendSay("Guess it's time to start getting creative and come up with some new skills.") + sm.sendSay("This is good... and this would help here... it's coming together nicely.") + # add stats + sm.setJob(6412) + sm.addAP(5) + sm.addSP(5) + sm.addMaxHP(350) + sm.addMaxMP(200) + sm.sendNext("Yes! The first skill unique to me is done! Chief is gonna be blown away.") + sm.sendSayOkay("Let's test this bad boy out. Time to open the skill window (K) and take a look.") + sm.completeQuestNoCheck(parentID) \ No newline at end of file diff --git a/scripts/quest/q34801e.py b/scripts/quest/q34801e.py new file mode 100755 index 0000000..e2eb916 --- /dev/null +++ b/scripts/quest/q34801e.py @@ -0,0 +1,21 @@ +# id 34801 (Collecting Parts), field 940203000 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "hunt1=1;exp=1") +sm.startQuest(11620) +sm.startQuest(11620) +sm.startQuest(11620) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#Perfect! Now, let's move on and gather more.") +sm.createQuestWithQRValue(16700, "count=33;date=20190221") +sm.createQuestWithQRValue(16700, "count=34;date=20190221") +sm.createQuestWithQRValue(16700, "count=35;date=20190221") +sm.createQuestWithQRValue(16700, "count=36;date=20190221") +sm.createQuestWithQRValue(16700, "count=37;date=20190221") +sm.createQuestWithQRValue(16700, "count=38;date=20190221") +sm.createQuestWithQRValue(16700, "count=39;date=20190221") +sm.createQuestWithQRValue(16700, "count=40;date=20190221") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(16027, "ComboK=19") diff --git a/scripts/quest/q34802e.py b/scripts/quest/q34802e.py new file mode 100755 index 0000000..f87f13f --- /dev/null +++ b/scripts/quest/q34802e.py @@ -0,0 +1,20 @@ +# id 34802 (Collect Grossular), field 402000526 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendNext("#face0#Late on the first day. That's not an encouraging start.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Well, I...") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#Don't let it happen again.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "class1=1;out=2;exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/06") +sm.startQuest(11620) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Hm...") +sm.sendSay("#face0#Your next class will teach you magical combat.") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34802s.py b/scripts/quest/q34802s.py new file mode 100755 index 0000000..4d99133 --- /dev/null +++ b/scripts/quest/q34802s.py @@ -0,0 +1,100 @@ +# id 34802 (Collect Grossular), field 402000526 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(500, 1000, 500, 50, -70) +sm.sendDelay(500) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.spawnNpc(3001300, 602, -140) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.removeOverlapScreen(1000) +sm.sendDelay(500) +sm.sendDelay(3000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#First Class: Understanding the Mytocrystal", 20, 2200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendNext("#face0#Let's begin, class.") +sm.sendSay("#face0#The #bmytocrystals#k of Grandis have been an important resource for our people since the ancient times.") +sm.sendSay("#face0#The Flora became rulers of Grandis due to our superior ability to extract and use mana from the mytocrystals.") +sm.sendSay("#face0#You'll learn more in history class. For now, we'll learn about the various types of mytocrystals that give us power.") +sm.setMapTaggedObjectVisible("c1_appear", True, 0, 0) +sm.playSound("Sound/SoundEff.img/illium/classroom_crystal", 100) +sm.sendDelay(500) +sm.sendDelay(500) +sm.setMapTaggedObjectVisible("c1_loop", True, 0, 0) +sm.setMapTaggedObjectVisible("c1_appear", False, 0, 0) +sm.sendDelay(100) +sm.sendDelay(500) +sm.sendNext("#face0#Can anyone tell me the name of this beautiful green mytocrystal?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0##fs12#Grossular.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Speak up, Sir.") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#Dean?") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face3#It's #bgrossular#k!") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#What else do you know about it?") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face3#Uh... umm...") +sm.sendSay("#face1#Well...") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#Anyone else?") +sm.sendSay("#face0##bGrossular#k is found deep within forested areas. It's used to treat wounds and recover health.") +sm.setMapTaggedObjectVisible("c2_appear", True, 0, 0) +sm.playSound("Sound/SoundEff.img/illium/classroom_crystal", 100) +sm.sendDelay(500) +sm.sendDelay(500) +sm.setMapTaggedObjectVisible("c2_loop", True, 0, 0) +sm.setMapTaggedObjectVisible("c2_appear", False, 0, 0) +sm.sendDelay(100) +sm.sendDelay(500) +sm.sendNext("#face0#What about this beautiful, deep red mytocrystal? Anyone?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0##fs12#Pyrope.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face2#Louder, Sir.") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#Carnelian?") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0##bPyrope#k boasts explosive power, but it's more difficult to extract mana from it.") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#Very good. Next...") +sm.setMapTaggedObjectVisible("c3_appear", True, 0, 0) +sm.playSound("Sound/SoundEff.img/illium/classroom_crystal", 100) +sm.sendDelay(500) +sm.sendDelay(500) +sm.setMapTaggedObjectVisible("c3_loop", True, 0, 0) +sm.setMapTaggedObjectVisible("c3_appear", False, 0, 0) +sm.sendDelay(100) +sm.sendDelay(500) +sm.sendNext("#face0#What about this one?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0##fs24##bObsidian!#k") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face2#Whoa!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#The dark mytocrystal, obsidian, is difficult to find and holds dark magical energy. If you find one, you should take extra care with this dangerous crystal.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Uh, Ex?") +sm.setInnerOverrideSpeakerTemplateID(3001302) # Professor Kalsat +sm.sendSay("#face0#Correct! What a fascinating robot.") +sm.setSpeakerType(4) +sm.setSpeakerID(3001332) # Professor Kalsat +res = sm.sendAskAccept("#face0#Who's ready for some practical application? Spend the remainder of the class gathering #b10 #i4036163# #t4036163# items#k! What do you say?") +sm.startQuest(parentID) +sm.setSpeakerType(3) +sm.sendNext("#face0#You'll find #b#i4036163# #t4036163##k items with #r#o2400400##k monsters. Is everyone ready? I'll teleport all of you at once. Let's see who returns first!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I recommend #busing the Maple Guide#k when you return.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.lockInGameUI(False, True) +sm.warp(402000512) diff --git a/scripts/quest/q34803e.py b/scripts/quest/q34803e.py new file mode 100755 index 0000000..2a3936c --- /dev/null +++ b/scripts/quest/q34803e.py @@ -0,0 +1,20 @@ +# id 34803 (Combat Training), field 402000527 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendNext("#face0#I think that's enough combat. You didn't meet your quota, but that'll have to do for today.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Okay...") +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendSay("#face0#See you next time.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "kc=22;exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/09") +sm.startQuest(11620) +sm.startQuest(11620) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Hm...") +sm.sendSay("#face0#I'll guide you to the next classroom.") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34803s.py b/scripts/quest/q34803s.py new file mode 100755 index 0000000..03e51fd --- /dev/null +++ b/scripts/quest/q34803s.py @@ -0,0 +1,14 @@ +# id 34803 (Combat Training), field 402000527 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001303) # Professor Andrada +sm.sendNext("#face0#Now that everyone seems to have learned the basics, let's get into full-scale combat training.") +sm.setParam(37) +sm.sendSay("#face0#Proceed to the combat training room and eliminate the#r practice robots#k.") +sm.setSpeakerType(4) +sm.setSpeakerID(3001333) # Professor Andrada +res = sm.sendAskAccept("#face0#I'll consider your day's coursework complete when you have defeated #b20#k.") +sm.startQuest(parentID) +sm.setSpeakerType(3) +sm.sendNext("#face0#If you're ready, enter the combat training room behind me and eliminate the #rpractice robots#k.") diff --git a/scripts/quest/q34804e.py b/scripts/quest/q34804e.py new file mode 100755 index 0000000..c34968b --- /dev/null +++ b/scripts/quest/q34804e.py @@ -0,0 +1,72 @@ +# id 34804 (Being Social), field 402000530 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 450) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#Every person in this room turned you down?") +sm.sendSay("#face1#I don't understand.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#I'll have to try harder.") +sm.spawnNpc(3001307, -50, 53) +sm.showNpcSpecialActionByTemplateId(3001307, "summon", 0) +sm.zoomCamera(2000, 1500, 2000, 370, 0) +sm.moveNpcByTemplateId(3001307, False, 300, 150) +sm.sendDelay(2500) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face0#Hey, Morian!") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#Hi, Dean! ") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face0#Do you have a partner? ") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face1#Not yet! Want to team up? ") +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendSay("#face1#Nope. I've already got one. ") +sm.sendSay("#face1#I was just asking. See ya! ") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face2#Well, that wasn't very nice.") +sm.sendSay("#face3#I don't think I like his jokes much.") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.completeQuestNoCheck(34858) +sm.spawnNpc(3001310, 502, -105) +sm.showNpcSpecialActionByTemplateId(3001310, "summon", 0) +sm.removeOverlapScreen(1000) +sm.zoomCamera(1000, 1500, 1000, 370, -50) +sm.sendDelay(1500) +sm.sendNext("#face0#Hey, it looks like we're the last.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#I think you're right.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#We should team up. What do you say?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#Actually, that would be really great! Thanks!") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face1#You're the new kid, right? I'm #bMorian#k. Welcome to our school!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#Hi! I'm Illium.") +sm.forcedFlip(True) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#And I am Ex No. 13. Illium created me when he was 11 years old!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Take it easy, Ex. No need to tell our life story just yet.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.sendDelay(100) +sm.completeQuestNoCheck(parentID) +sm.sendDelay(100) +sm.createQuestWithQRValue(parentID, "gossip=1;NpcSpeech=30013141/30013152/30013163/30013174/30013185;exp=1") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34804s.py b/scripts/quest/q34804s.py new file mode 100755 index 0000000..96bfbe2 --- /dev/null +++ b/scripts/quest/q34804s.py @@ -0,0 +1,20 @@ +# id 34804 (Being Social), field 402000530 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face3#I'm nervous, but... I've just got to focus on getting through the rest of my classes today, and then the real training can start.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#You'll certainly improve much more quickly this way.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#I couldn't have gotten here without you, Ex!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#With your expertise, Sir, I'm sure you would have made it here eventually.") +sm.sendSay("#face0#However I do think it's important not to let your initial success go to your head. It may be beneficial for you to strike up some friendships among your classmates as well in the event you require study partners.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#What? Uh... that's not really my area of expertise.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I have confidence in you.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#I think I'd rather study...") +sm.startQuest(parentID) diff --git a/scripts/quest/q34805e.py b/scripts/quest/q34805e.py new file mode 100755 index 0000000..595c9ec --- /dev/null +++ b/scripts/quest/q34805e.py @@ -0,0 +1,17 @@ +# id 34805 (Making a Crystal Gate 1), field 402000530 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +sm.sendNext("#face0#It's nice to see you making an honest effort, but remember, I expect to see further improvement in the future.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/19") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#That worked out great! Let's be partners next time too!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#Okay! See you soon!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I'll guide you to the Headmistress's Office now that today's lessons are complete.") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34805s.py b/scripts/quest/q34805s.py new file mode 100755 index 0000000..5da85c2 --- /dev/null +++ b/scripts/quest/q34805s.py @@ -0,0 +1,22 @@ +# id 34805 (Making a Crystal Gate 1), field 402000530 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +sm.sendNext("#face0#Let me know when you've found a partner, and I'll give you the assignment.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I will try to identify a good team matchup for you, Sir.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Thanks, Ex.") +sm.setSpeakerID(3001334) # Professor Citrine +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +if sm.sendAskAccept("#face0#Has everyone found a teammate?\r\nThen begin gathering 20 #i4036164# #t4036164# items, so you can craft your gates!"): + sm.startQuest(parentID) + sm.setSpeakerType(3) + sm.setParam(37) + sm.sendNext("#face0#Don't forget what you've learned! You can only get #i4036164# #b#t4036164##k items from #r#o2400401##k.\r\nI'll transport you now. Good luck!") + sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex + sm.sendSay("#face0#I recommend #busing the Maple Guide#k when you return.") + sm.warp(402000519) \ No newline at end of file diff --git a/scripts/quest/q34806e.py b/scripts/quest/q34806e.py new file mode 100755 index 0000000..0a7ac33 --- /dev/null +++ b/scripts/quest/q34806e.py @@ -0,0 +1,16 @@ +# id 34806 (Special Activities), field 402000528 +sm.createQuestWithQRValue(parentID, "scene=1;item1=1;item2=1") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "scene=1;item1=1;item2=1;exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/21") +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face2#You'll need the potions I just gave you to stay strong. \r\nYou wouldn't want to run out of energy in the middle of a fight.") +sm.sendSay("#face1#Shall we begin?") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.warp(402000533) diff --git a/scripts/quest/q34806s.py b/scripts/quest/q34806s.py new file mode 100755 index 0000000..4ce6948 --- /dev/null +++ b/scripts/quest/q34806s.py @@ -0,0 +1,28 @@ +# id 34806 (Special Activities), field 402000528 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face1#Hello, Illium! How was your class?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Headmistress Agate?!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face2#Surprised? We can communicate through the lights like this. Isn't that convenient?") +sm.sendSay("#face0#I hear you had a rough start in your magical combat class today.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Well...") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#Don't be discouraged. No one masters it in one day.") +sm.sendSay("#face1#If you'd like to take private tutoring lessons after school, you may be able to catch up to the rest of your class.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Tutoring already?") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face1#Yes. Once you've finished class for the day, report to my office.") +sm.createQuestWithQRValue(parentID, "scene=1;item1=1") +sm.startQuest(parentID) +sm.sendSay("#face2#Those potions should get you through the rest of the day. Good luck!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Um... thanks, I think.") +sm.sendSay("#face0#Wow... Magic lessons from Headmistress Agate herself!") +sm.sendSay("#face0#How about that, Ex? I'll be an expert in no time!") diff --git a/scripts/quest/q34807e.py b/scripts/quest/q34807e.py new file mode 100755 index 0000000..a04bfe5 --- /dev/null +++ b/scripts/quest/q34807e.py @@ -0,0 +1,23 @@ +# id 34807 (Dean's Lost Stuff), field 402000532 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face1#You actually found my stuff! Thanks so much!") +sm.sendSay("#face1#I had no idea you were such a nice guy! A little weird, but nice!") +sm.sendSay("#face3#See you next time!") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "exp=1;d2=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/26") +sm.startQuest(11620) +sm.lockInGameUI(True, False) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Sir...") +sm.sendSay("#face0#Someone has tampered with the practice robots. No one at the Crystal Academy is safe.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#...We should tell the Headmistress when we see her tomorrow.") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(402000526) diff --git a/scripts/quest/q34807s.py b/scripts/quest/q34807s.py new file mode 100755 index 0000000..4bd2c48 --- /dev/null +++ b/scripts/quest/q34807s.py @@ -0,0 +1,17 @@ +# id 34807 (Dean's Lost Stuff), field 402000532 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +sm.sendNext("#face2#Everyone else took off and left me here alone.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Well, I'm glad you're safe.") +sm.setSpeakerType(4) +sm.setSpeakerID(3001337) # Dean +sm.setInnerOverrideSpeakerTemplateID(3001307) # Dean +res = sm.sendAskAccept("#face2#I know it's asking a lot, but since you'll be eliminating all those broken robots anyway, would you collect my parts for me...?") +sm.startQuest(parentID) +sm.setSpeakerType(3) +sm.sendNext("#face1#Thank you so much! You'll find them through the#b left portal#k!") +sm.sendSay("#face1#If you eliminate #r#o2400409##k monsters, you'll find #i4036165# #bmy bag#k and #i4036166# #bmy book x10#k eventually! Thanks a lot!") diff --git a/scripts/quest/q34808e.py b/scripts/quest/q34808e.py new file mode 100755 index 0000000..f63271a --- /dev/null +++ b/scripts/quest/q34808e.py @@ -0,0 +1,18 @@ +# id 34808 (A Divine Festival 1), field 402000526 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001305) # Professor Lutil +sm.sendNext("#face0#Well done, everyone! Be sure to display the sculptures you crafted in the town square at the end of the quarter. All of that hard work deserves to be admired!") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "exp=1;d2=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/37") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face2#Oh! I just remembered I have another assignment!") +sm.sendSay("#face0#Great teamwork today! I'll see you later.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#Okay! See you!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I'll guide you to your next class.") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34808s.py b/scripts/quest/q34808s.py new file mode 100755 index 0000000..fb0d0b6 --- /dev/null +++ b/scripts/quest/q34808s.py @@ -0,0 +1,14 @@ +# id 34808 (A Divine Festival 1), field 402000526 +sm.setSpeakerID(3001335) # Professor Lutil +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#To create your sculptures, you'll need #i4036167# #b#t4036167##k #bx20#k!") +sm.startQuest(parentID) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001305) # Professor Lutil +sm.sendNext("#face0#You can only get #i4036167# #b#t4036167##k in #r#o2400402##k. I'll transport you now.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I recommend #busing the Maple Guide#k when you return.") +sm.warp(402000514) diff --git a/scripts/quest/q34809e.py b/scripts/quest/q34809e.py new file mode 100755 index 0000000..5482648 --- /dev/null +++ b/scripts/quest/q34809e.py @@ -0,0 +1,23 @@ +# id 34809 (A Stranger's Cries), field 402000513 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Carnelian...?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#Sniff... Morian... Illium...") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#What happened?") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#Well... my crystal... sniffle...") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/30") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#It's okay, Carnelian. Just take a deep breath and tell us what's wrong.") +sm.createQuestWithQRValue(16700, "count=152;date=20190221") +sm.createQuestWithQRValue(16700, "count=153;date=20190221") +sm.createQuestWithQRValue(16700, "count=154;date=20190221") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34809s.py b/scripts/quest/q34809s.py new file mode 100755 index 0000000..f6c36b9 --- /dev/null +++ b/scripts/quest/q34809s.py @@ -0,0 +1,17 @@ +# id 34809 (A Stranger's Cries), field 402000500 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#What is that unusual sound?") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#Sob, sob... sniff...") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#What...?") +sm.sendSay("#face0#I think someone's crying nearby.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#I hear it too!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I'll guide you toward the noise.") +sm.startQuest(parentID) diff --git a/scripts/quest/q34810s.py b/scripts/quest/q34810s.py new file mode 100755 index 0000000..486c4b1 --- /dev/null +++ b/scripts/quest/q34810s.py @@ -0,0 +1,46 @@ +# id 34810 (Carnelian's Request), field 402000513 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendNext("#face2#Well... Dean turned all of my #i4036167# #t4036167# items into candy!") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#What? That kid's a menace!") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#Sniff... yeah.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face2#That's just...") +sm.sendSay("#face4#mean!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#I ended up with some extras. Would you like them?") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0#You would do that for me?") +res = sm.sendNext("#face0#That would be so helpful... Do you maybe have 5 to spare?\r\n#L0# #bChoice 1 : Give only 1.#l\r\n#L1# #bChoice 2 : Give 4.#l\r\n#L2# #bChoice 3 : Give 7.#l") +sm.sendNext("#face1#Wow, 7? Thanks a lot!") +sm.createQuestWithQRValue(parentID, "give=7") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face1#Want to maybe trade for some of that candy?") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face1#Huh? Oh.\r\nOf course. Here you go.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face1#Wow, thanks!") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face0#Um... you're welcome.") +sm.sendSay("#face1#I REALLY appreciate your help, you two. See you later!") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "exp=1;give=7") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/31") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Sir, you need 20 #i4036167# #t4036167# to finish your class.") +sm.createQuestWithQRValue(16700, "count=155;date=20190221") +sm.createQuestWithQRValue(16700, "count=156;date=20190221") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#It's all right. I'll just go back for more.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#You will find more #i4036167# #t4036167# in #m402000514#, #m402000515#, and #m402000516#.") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34811e.py b/scripts/quest/q34811e.py new file mode 100755 index 0000000..8a22082 --- /dev/null +++ b/scripts/quest/q34811e.py @@ -0,0 +1,15 @@ +# id 34811 (Making a Crystal Gate 2), field 402000530 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +sm.sendNext("#face0#That is all for today's class. Those of you who didn't complete your assignments, please follow me.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face3#Go on without me. I'm done for...") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Aw, you'll be all right. See you tomorrow, Morian.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "room=1;exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/40") +sm.lockInGameUI(False, True) \ No newline at end of file diff --git a/scripts/quest/q34811s.py b/scripts/quest/q34811s.py new file mode 100755 index 0000000..dad2b7d --- /dev/null +++ b/scripts/quest/q34811s.py @@ -0,0 +1,10 @@ +# id 34811 (Making a Crystal Gate 2), field 402000530 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001304) # Professor Citrine +sm.sendNext("#face0#The Crystal gate is finally complete!") +sm.sendSay("#face0#Let's see if there's enough room for all of you to enter it.") +sm.sendSay("#face0#Give it a try.") +sm.startQuest(parentID) +sm.warp(940202022) diff --git a/scripts/quest/q34812e.py b/scripts/quest/q34812e.py new file mode 100755 index 0000000..ad165e9 --- /dev/null +++ b/scripts/quest/q34812e.py @@ -0,0 +1,16 @@ +# id 34812 (A Special Day), field 402000501 +sm.lockInGameUI(True, False) +sm.sendDelay(100) +sm.completeQuestNoCheck(parentID) +sm.sendDelay(100) +sm.createQuestWithQRValue(parentID, "exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/41") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face0#Hey, kid! You running an errand for the Lady Agate?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Huh? Why? Do you need something?") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34812s.py b/scripts/quest/q34812s.py new file mode 100755 index 0000000..9ae678b --- /dev/null +++ b/scripts/quest/q34812s.py @@ -0,0 +1,11 @@ +# id 34812 (A Special Day), field 402000530 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face1#Illium, today's activity will be a bit unusual. Please come to #m402000501#.") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#Would you like to go to #m402000501# right away?\r\n#b(If you accept, you'll travel there automatically.)") +sm.startQuest(parentID) +sm.warp(402000501) diff --git a/scripts/quest/q34813e.py b/scripts/quest/q34813e.py new file mode 100755 index 0000000..a4ae2ee --- /dev/null +++ b/scripts/quest/q34813e.py @@ -0,0 +1,46 @@ +# id 34813 (For the Verdant Flora), field 402000501 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face0#Oh, perfect. This should be enough.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face2#Have you finished extracting mytocrystal mana?") +sm.spawnNpc(3001301, -1470, 50) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.sendDelay(600) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Headmistress Agate!") +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendSay("#face0#Oh, hello, Lady Agate!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face1#Hello.") +sm.sendSay("#face0#You're doing a fine job here, gentlemen. Thank you.") +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendSay("#face0#Ah, anything for our people!") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Wow, they must have been working really hard.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#We live in peace because of the sacrifice of good people like those you see before you. Then and now...") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Is it true what the soldiers say? Are we really under constant threat of discovery and destruction?") +sm.sendSay("#face0#I can be stronger, more powerful. I'll protect you. I'll protect everyone.") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face0#You needn't worry yourself. If we remain careful and steadfast, there will be no such day.") +sm.sendSay("#face1#But, just in case, take these potions. You never know when you might need one.") +sm.createQuestWithQRValue(parentID, "m=0;item2=1;d2=1") +sm.sendSay("#face2#Shall we begin practice?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Yes!") +sm.sendSay("#face0##b(If I'm going to protect our home and people, I'll have to train much harder!)#k") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(100) +sm.completeQuestNoCheck(parentID) +sm.sendDelay(100) +sm.createQuestWithQRValue(parentID, "m=0;item2=1;exp=1;d2=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/43") +sm.lockInGameUI(False, True) +sm.warp(402000521) diff --git a/scripts/quest/q34813s.py b/scripts/quest/q34813s.py new file mode 100755 index 0000000..10db645 --- /dev/null +++ b/scripts/quest/q34813s.py @@ -0,0 +1,14 @@ +# id 34813 (For the Verdant Flora), field 402000501 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001306) # Soldier +sm.sendNext("#face0#Well yeah. Don't just stand there. Help us out.\r\nWe need to extract mana from nearby mytocrystals...") +sm.setSpeakerType(4) +sm.setSpeakerID(3001336) # Soldier +sm.setParam(132) +res = sm.sendNext("#face0##fUI/tutorial.img/illium/mob1/0##fUI/tutorial.img/illium/mob2/0##fUI/tutorial.img/illium/mob3/0#\r\nThink you can get mana from #b20#k of these crystals?\r\n#b#L0#Of course!#k\r\n#b#L1#I don't think so...#k") +sm.startQuest(parentID) +sm.setSpeakerType(3) +sm.setParam(37) +sm.sendNext("#face0#Great. There are #o9101116# items in the #m402000502# to the right of here. Now, get moving. We don't have all day.") diff --git a/scripts/quest/q34814e.py b/scripts/quest/q34814e.py new file mode 100755 index 0000000..2d04e7b --- /dev/null +++ b/scripts/quest/q34814e.py @@ -0,0 +1,80 @@ +# id 34814 (A Divine Festival 2), field 402000529 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 300, -70) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#I've got the materials we need now. We should get started.") +sm.forcedMove(True, 50) +sm.sendDelay(500) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(100) +sm.completeQuestNoCheck(parentID) +sm.sendDelay(100) +sm.createQuestWithQRValue(parentID, "exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/49") +sm.sendDelay(1000) +sm.sendNext("#face0#Wow! It's so much better!") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#You're here awfully late.") +sm.spawnNpc(3001309, -40, 25) +sm.showNpcSpecialActionByTemplateId(3001309, "summon", 0) +sm.playSound("Sound/Skill.img/152001004/Use", 100) +sm.showNpcSpecialActionByTemplateId(3001309, "appear", 0) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Well, I...") +sm.sendSay("#face0#I'm making a statue for the Festival...") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#The Festival of the Ancient Gods?") +sm.zoomCamera(2000, 1500, 2000, 300, 50) +sm.sendDelay(500) +sm.moveNpcByTemplateId(3001309, False, 150, 100) +sm.sendNext("#face0#You think this hunk of scrap metal detritus is worthy?") +sm.sendSay("#face0#You low level engineers are certainly presumptuous, aren't you?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#But...") +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendSay("#face0#Keep your mouth shut and dispose of that disaster of a project immediately.") +sm.sendSay("#face0#It's disgraceful.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#I--") +sm.flipNpcByTemplateId(3001309, True) +sm.sendDelay(30) +sm.setInnerOverrideSpeakerTemplateID(3001309) # Darius +sm.sendNext("#face0#Not one word.") +sm.showNpcSpecialActionByTemplateId(3001309, "disappear", 0) +sm.sendDelay(1200) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face3#...") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#We already know from the ancient records that the Verdant Flora only regained their magic by combining mytocrystal mana and technology.") +sm.sendSay("#face0#From that, we could surmise that the ancient gods would be pleased by your rather unique creation.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Thanks, Ex...") +sm.sendSay("#face0#I'll do the best I can on this.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34814s.py b/scripts/quest/q34814s.py new file mode 100755 index 0000000..636b552 --- /dev/null +++ b/scripts/quest/q34814s.py @@ -0,0 +1,14 @@ +# id 34814 (A Divine Festival 2), field 402000529 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#If I keep improving my sculpture, I'll need more metal.") +sm.sendSay("#face0#I'll have to go to the #m402000510# first to get\r\n#i4036169# #b#t4036169##k items.\r\nThis time, #b10#k should be enough.") +sm.setSpeakerType(4) +sm.setSpeakerID(3001339) # Illium Statue +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#Would you like to go to the #b#m402000510##k right away?\r\n#b(If you accept, you'll travel there automatically.)") +sm.startQuest(parentID) +sm.warp(402000510) diff --git a/scripts/quest/q34815e.py b/scripts/quest/q34815e.py new file mode 100755 index 0000000..65c8077 --- /dev/null +++ b/scripts/quest/q34815e.py @@ -0,0 +1,127 @@ +# id 34815 (A Divine Festival 3), field 402000529 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 300, -70) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Should I try to make another?") +sm.forcedMove(True, 50) +sm.sendDelay(500) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(100) +sm.completeQuestNoCheck(parentID) +sm.sendDelay(100) +sm.createQuestWithQRValue(parentID, "exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/16/52") +sm.sendDelay(1000) +sm.sendNext("#face0#How's this look?") +sm.setMapTaggedObjectVisible("crystal", True, 0, 0) +sm.sendDelay(500) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotion/whatl", 0, 10, 0, 0, 0, 0, 0) +sm.sendDelay(500) +sm.sendNext("#face0#Oh! What was that?") +sm.zoomCamera(900, 1000, 900, 600, -70) +sm.sendDelay(1000) +sm.sendNext("#face8#That sparkle!") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.forcedMove(False, 350) +sm.zoomCamera(1500, 1500, 1500, 800, 0) +sm.sendDelay(2000) +sm.sendNext("#face6#Ex! Look!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.onLayer(1500, "1", 0, -80, 12, "Effect/Direction14.img/illium/tuto/4", 4, True, -1, False) +sm.sendDelay(2000) +sm.sendNext("#face6#What is this light?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#I am currently measuring approximately 4,000 candelas, a significant amount of light.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face6#It's so... calming and beautiful.") +sm.forcedFlip(True) +sm.sendDelay(300) +sm.sendNext("#face2#I wonder if it's warm...") +sm.zoomCamera(1500, 2000, 1500, 900, -80) +sm.offLayer(1500, "1", False) +sm.blind(False, 0, 0, 0, 0, 1500) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#Sir, I would advise against touching it. We don't know enough.") +sm.forcedMove(False, 10) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Oh. I feel strange.") +sm.showEffect("Effect/Direction14.img/illium/magic", 0, 10, 0, 0, 0, 0, 0) +sm.playSound("Sound/SoundEff.img/illium/casting", 100) +sm.sendSay("#face7#Ah! Aaah!") +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendNext("#face3#Be careful!") +sm.setMapTaggedObjectVisible("crystal", False, 0, 0) +sm.setMapTaggedObjectVisible("obj", False, 0, 0) +sm.zoomCamera(1500, 2000, 1500, 880, 80) +sm.forcedInput(8) +sm.sendDelay(300) +sm.forcedInput(0) +sm.sendDelay(300) +sm.forcedInput(8) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.forcedInput(4) +sm.spawnNpc(3001301, 700, 30) +sm.showNpcSpecialActionByTemplateId(3001301, "summon", 0) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(2500) +sm.sendNext("#face3#That was a very close call.") +sm.forcedInput(0) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face4#Headmistress Agate!") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#What happened?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Well, I...") +sm.setInnerOverrideSpeakerTemplateID(3001301) # Agate +sm.sendSay("#face3#That was a very poor decision on your part.\r\nYou should never use Academy equipment or crystals without permission.") +sm.showNpcSpecialActionByTemplateId(3001301, "disappear", 0) +sm.sendDelay(750) +sm.spawnNpc(3001309, -750, 30) +sm.showNpcSpecialActionByTemplateId(3001309, "summon", 0) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face3#But--") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Thankfully, you haven't sustained serious injury.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face3#Survive.") +sm.sendSay("#face3#She seemed unnecessarily angry.") +sm.sendSay("#face3#Now, I don't know what to do.") +sm.zoomCamera(2000, 1000, 2000, -300, -70) +sm.sendDelay(4000) +sm.flipNpcByTemplateId(3001309, True) +sm.sendDelay(1500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.createQuestWithQRValue(parentID, "d=1;exp=1") +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34815s.py b/scripts/quest/q34815s.py new file mode 100755 index 0000000..62bd902 --- /dev/null +++ b/scripts/quest/q34815s.py @@ -0,0 +1,13 @@ +# id 34815 (A Divine Festival 3), field 402000529 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#Let's find a rarer metal this time, #i4036170# #b#t4036170##k. We should only need about #b10#k.") +sm.setSpeakerType(4) +sm.setSpeakerID(3001339) # Illium Statue +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#Would you like to go to the #b#m402000509##k right away?\r\n#b(If you accept, you'll travel there automatically.)") +sm.startQuest(parentID) +sm.warp(402000509) diff --git a/scripts/quest/q34816e.py b/scripts/quest/q34816e.py new file mode 100755 index 0000000..a5b2cce --- /dev/null +++ b/scripts/quest/q34816e.py @@ -0,0 +1,32 @@ +# id 34816 (A Divine Festival 4), field 402000529 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, 300, -70) +sm.sendDelay(300) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(True, 50) +sm.sendDelay(500) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.sendDelay(800) +sm.forcedAction(6, 0) +sm.createQuestWithQRValue(parentID, "fin=1") +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face2#Yes! It's done!") +sm.sendSay("#face0#Not bad for my first creation for the gods.") +sm.sendSay("#face0#You know, I'm really looking forward to this year's festival.") +sm.lockInGameUI(False, True) +sm.warp(940202030) diff --git a/scripts/quest/q34816s.py b/scripts/quest/q34816s.py new file mode 100755 index 0000000..9ce4228 --- /dev/null +++ b/scripts/quest/q34816s.py @@ -0,0 +1,12 @@ +# id 34816 (A Divine Festival 4), field 402000529 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face0#It's probably best to stay focused on the statue. I need at least 20 more\r\n#i4036171# #b#t4036171##k items.") +sm.setSpeakerType(4) +sm.setSpeakerID(3001339) # Illium Statue +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#Would you like to go to #b#m402000503##k right away?\r\n#b(If you accept, you'll travel there automatically.)") +sm.startQuest(parentID) +sm.warp(402000504) diff --git a/scripts/quest/q34817s.py b/scripts/quest/q34817s.py new file mode 100755 index 0000000..f3c0fe7 --- /dev/null +++ b/scripts/quest/q34817s.py @@ -0,0 +1,66 @@ +# id 34817 (Statue Remodeling), field 402000529 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.sendDelay(100) +sm.forcedFlip(True) +sm.sendDelay(100) +sm.spawnNpc(3001300, 150, 8) +sm.showNpcSpecialActionByTemplateId(3001300, "summon", 0) +sm.sendDelay(100) +sm.removeOverlapScreen(1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendNext("#face6#What do you say, Ex? Want a friend?") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Friends are not essential to my functions.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face7#You might like it! I was really happy to have you as a friend!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#That's very kind of you, Sir.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face6#I wonder if I could streamline this statue and make a tiny robot out of it.") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face0#Well, that would certainly be a better use for it than simply discarding it.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face2#I hope you two get along! Shall I start converting it?") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.createQuestWithQRValue(parentID, "m=1") +sm.startQuest(parentID) +sm.sendDelay(500) +sm.sendNext("#face7#It's done!") +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001312) # Machina +sm.sendNext("#face0#Hello! My name is Machina! What's your name?") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face5#Hi Machina! I'm Illium. And this is Ex.") +sm.setInnerOverrideSpeakerTemplateID(3001312) # Machina +sm.sendSay("#face0#It's nice to meet you Illium and Ex!") +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendSay("#face3#Well, he's certainly friendly.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face0#Yeah. I guess he'll take some getting used to.") +sm.sendDelay(1000) +sm.sendDelay(500) +sm.sendNext("#face7#Huh? What's that sound?") +sm.sendDelay(1000) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +sm.sendNext("#face0#It's really noisy outside.") +sm.setInnerOverrideSpeakerTemplateID(3001350) # Illium +sm.sendSay("#face9#Let's take a look.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34818e.py b/scripts/quest/q34818e.py new file mode 100755 index 0000000..cea1fe1 --- /dev/null +++ b/scripts/quest/q34818e.py @@ -0,0 +1,47 @@ +# id 34818 (Escape from the Academy), field 940202032 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendNext("#face2#Thanks Illium! What happened to you? And what's that crystal?") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face3#This is the Elder Crystal. Agate gave it to me and told me to protect it.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face2#Why can't she protect it?") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face4#I'll have to fill you in on the details later, but... she's... gone.") +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendNext("#face3#No!") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face2#How could this have happened?") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face3#I don't know what I can do, but I'll help you!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#Morian, this is my responsibility. I can't put you in danger.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face3#But...") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#We can argue this later. Right now, we need to get out of here. We're all in a lot of danger!") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.sendDelay(100) +sm.completeQuestNoCheck(parentID) +sm.sendDelay(100) +sm.createQuestWithQRValue(parentID, "exp=1") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/17/13") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q34820s.py b/scripts/quest/q34820s.py new file mode 100755 index 0000000..8a69153 --- /dev/null +++ b/scripts/quest/q34820s.py @@ -0,0 +1,39 @@ +# id 34820 (One Look Back), field 940202040 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendNext("#face0#Yikes. The white-haired one is stronger than I expected.") +sm.setParam(37) +sm.sendSay("#face0#What are you!?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face1#That's not your concern.") +sm.setInnerOverrideSpeakerTemplateID(3001308) # Carnelian +sm.sendSay("#face2#And we're not the High Flora either!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#Tell us what you know about the other dimension!") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#'Other dimension'?") +sm.sendSay("#face0#What is that?") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#You'd better not be lying to us!!") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#We don't know anything! Honest!") +sm.sendSay("#face0#The Nova might know!") +sm.sendSay("#face0#Yes! The Nova! In Pantheon! Try there!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face4#The Nova...? I've only ever read about them. You mean the dragons?") +sm.setInnerOverrideSpeakerTemplateID(3001326) # Hoodlum +sm.sendSay("#face0#Yes! That's all we know! Please!") +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendSay("#face0#I guess our first stop will be Pantheon. Let's go guys.") +sm.setInnerOverrideSpeakerTemplateID(3001310) # Morian +sm.sendSay("#face0#Well now that's sorted out, do you guys have any food?") +sm.setInnerOverrideSpeakerTemplateID(3001311) # Sinaria +sm.sendSay("#face3#Morian!") +sm.setSpeakerType(4) +sm.setSpeakerID(3001343) # Hoodlum +sm.setInnerOverrideSpeakerTemplateID(3001300) # Ex +res = sm.sendAskAccept("#face0#Starting navigation to Pantheon.") +sm.startQuest(parentID) +sm.warp(402000112) diff --git a/scripts/quest/q34860s.py b/scripts/quest/q34860s.py new file mode 100755 index 0000000..da378bd --- /dev/null +++ b/scripts/quest/q34860s.py @@ -0,0 +1,16 @@ +# id 34860 (Wielding the Elder Crystal), field 940202032 +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001353) # Illium +sm.sendNext("#face0#Now that I can use the #bElder Crystal#k, I can feel how powerful it is.\r\nI must learn how to use this for combat.") +sm.sendSay("#face0#First, I can use #b#fUI/UIWindow6/illiumSkillTutorial/0#Deploy Crystal#k to summon a Crystal.\r\nOnce I've done that, I can freely move it in front of me. If I use it with\r\nthe #rDown Arrow Key#k, the Crystal will teleport to where I am!") +sm.sendSay("#face0#This crystal is going to #rsignificantly increase my magic ability#k.") +sm.sendSay("#face0#If I hit the Crystal with a #b#fUI/UIWindow6/illiumSkillTutorial/5##b#fUI/UIWindow6/illiumSkillTutorial/4# Radiant Skill#k, a\r\n#r#fUI/UIWindow6/illiumSkillTutorial/1##r,#fUI/UIWindow6/illiumSkillTutorial/2##r Reaction Skill#k will activate.") +sm.sendSay("#face0#Knowing that, if I place the Crystal in a good location and activate\r\na #rReaction Skill#k, I could be really powerful in combat!") +sm.sendSay("#face0#If I hit the Crystal with #b#fUI/UIWindow6/illiumSkillTutorial/4# Radiant Javelin#k and #b#fUI/UIWindow6/illiumSkillTutorial/5# Radiant Orb#k, the magic in the Crystal seems to stack. ") +sm.sendSay("#face0#But the #bamount the Crystal charges#k differs each time. To quickly charge Magic ATT, I'll have to use the two skills in conjunction#r for effective combat#k.") +sm.sendSay("#face0#Oh! If #benough Magic ATT stacks in the Crystal#k, the #rCrystal's appearance#k changes.\r\nOnce it does, I'll be able to use #b#fUI/UIWindow6/illiumSkillTutorial/3#Crystal Skills#k.") +sm.sendSay("#face0##rThere's so much to learn#k about using the Elder Crystal! If I keep researching it, I'm sure I'll get #beven stronger#k!") diff --git a/scripts/quest/q34901s.py b/scripts/quest/q34901s.py new file mode 100755 index 0000000..ceaae87 --- /dev/null +++ b/scripts/quest/q34901s.py @@ -0,0 +1,157 @@ +# Created by MechAviv +# Quest ID :: 34901 +# Creeping Abyss + +from net.swordie.ms.enums import UIType + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#(I may have lost my memories, but I've clearly got the hands of a warrior. I must already be trained for combat.)") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face5#(I've got to prepare myself for battle. Based on my current state, I've got some options.)") + + +sm.removeSkill(150010241) +sm.setJob(15500) +# Unhandled Stat Changed [STR] Packet: 00 00 40 00 00 00 00 00 00 00 23 00 FF 00 00 00 00 +# Unhandled Stat Changed [DEX] Packet: 00 00 80 00 00 00 00 00 00 00 04 00 FF 00 00 00 00 +# Unhandled Stat Changed [AP] Packet: 00 00 00 40 00 00 00 00 00 00 17 00 FF 00 00 00 00 +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 C2 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 71 00 00 00 FF 00 00 00 00 +sm.addSP(2, True) +# Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 58 01 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 A3 00 00 00 FF 00 00 00 00 +sm.giveSkill(155001100, 1, 20) +sm.giveSkill(155001102, 1, 20) +sm.giveSkill(155001103, 1, 10) +# [INVENTORY_GROW] [01 1C ] +# [INVENTORY_GROW] [02 1C ] +# [INVENTORY_GROW] [03 1C ] +# [INVENTORY_GROW] [04 1C ] +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 58 01 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 A3 00 00 00 FF 00 00 00 00 +sm.startQuest(34901) +sm.completeQuest(34901) +sm.giveItem(1143098) +sm.giveAndEquip(1353600) +sm.systemMessage("You've obtained the medal.") +sm.chatScript("You've obtained the medal.") +sm.completeQuest(34906) +sm.openUI(UIType.UI_STAT) +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(Whatever happened to me must have weakened my overall stats, but I could probably strengthen myself by leveling up.)") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#I'll have to do the best I can with what I've got.\r\n#bPress the default hot key (S) and select-type (C) to distribute AP.#k") + + +sm.openUIWithOption(UIType.UI_SKILL, 155000007) +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#My skills are looking good. I can distribute more SP if I need to, but I don't really have a lot yet.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#I should assign my important skills to Hotkeys. And if I need to open the skill window again, I can just press the default hotkey (K).") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#I should make it a point to remember that I can set spell bullets to auto mode by right-clicking the skill icon.") + + +sm.openUIWithOption(UIType.UI_ITEM, 2) +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#There are bound to be some tough fights ahead, so I should keep some potions at the ready in the shortcut window.)") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Once I'm ready, I can talk to Zippy and head to town. This place seems pretty rough, so I hope I get there in one piece.") + +sm.setQuestEx(51236, "StageKey", "0") +sm.startQuest(34915) +sm.warp(402090011, 0) +# Update Quest Record EX | Quest ID: [51236] | Data: StageKey=0 \ No newline at end of file diff --git a/scripts/quest/q34902s.py b/scripts/quest/q34902s.py new file mode 100755 index 0000000..a665a3b --- /dev/null +++ b/scripts/quest/q34902s.py @@ -0,0 +1,78 @@ +# Created by MechAviv +# Quest ID :: 34902 +# Not coded yet + +from net.swordie.ms.enums import UIType + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#I think I might be strong enough to learn more powerful skills now...") + + +# Unhandled Message [47] Packet: 2F 02 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 CF 22 11 00 00 00 00 00 63 04 00 00 17 02 A0 B8 D0 66 8B D6 D4 01 0D 00 66 69 65 6C 64 5F 65 6E 74 65 72 3D 31 +sm.setJob(15510) +sm.addSp(3, True) +# Unhandled Stat Changed [MHP] Packet: 00 00 00 08 00 00 00 00 00 00 BE 04 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MMP] Packet: 00 00 00 20 00 00 00 00 00 00 23 03 00 00 FF 00 00 00 00 +# [INVENTORY_GROW] [02 20 ] +# [INVENTORY_GROW] [04 20 ] +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 BE 04 00 00 FF 00 00 00 00 +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 23 03 00 00 FF 00 00 00 00 +sm.startQuest(34902) +sm.completeQuest(34902) +# Inventory Operation with 1 operations. +# Inventory Operation with 2 operations. +sm.systemMessage("You've obtained the medal. ") +sm.chatScript("You've obtained the medal.") +sm.completeQuest(34907) +sm.openUI(UIType.UI_STAT) +sm.openUIWithOption(UIType.UI_SKILL, 155101006) +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#With these new skills, I'll be able to fight stronger enemies and help my friends!") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face6#My arm is where the Specter manifests the strongest. It's like it has a mind of its own now.") + + +# Unhandled Message [47] Packet: 2F 01 00 00 00 59 03 04 00 00 00 00 00 07 01 00 00 01 02 70 59 25 74 8B D6 D4 01 14 00 71 75 65 73 74 5F 73 74 61 74 65 5F 63 68 61 6E 67 65 3D 31 +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#If the Specter's strength grows with mine, will I eventually turn into a monster too? Or am I already a monster...?") + + +# Unhandled Stat Changed [16448] Packet: 01 00 40 40 00 00 00 00 00 00 9E 00 00 00 FF 00 00 01 0D 00 diff --git a/scripts/quest/q34903s.py b/scripts/quest/q34903s.py new file mode 100755 index 0000000..521f3f9 --- /dev/null +++ b/scripts/quest/q34903s.py @@ -0,0 +1,16 @@ +# id 34903 (From the Abyss), field 402000644 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face0#I can feel a specter's power coursing through me ... I'm confused") +sm.sendNext("#face0#This power was the price for taking a peek at the forbidden area. The Origin, has something to do with that ritual...") +sm.sendNext("#face0#Am I special because Albert interrupted the ritual?") +sm.sendNext("#face0#No... I don't know. The only one who can answer this question is that Specter, at least for now. I don't want to, but I'll have to wait until we meet again.") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.setJob(15511) +sm.addMaxHP(350) +sm.addMaxMP(200) +sm.addAP(5) +sm.addSP(5) diff --git a/scripts/quest/q34904s.py b/scripts/quest/q34904s.py new file mode 100755 index 0000000..1685635 --- /dev/null +++ b/scripts/quest/q34904s.py @@ -0,0 +1,14 @@ +# id 34904 (From the Abyss), field 402000644 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face0#I nearly have the Specter power figure out, and I don't think he's discovered why my soul is special yet.") +sm.sendNext("#face0#The Specter's motives are easy to read. I can tell co-existing with me isn't enough for it.") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.setJob(15512) +sm.addMaxHP(350) +sm.addMaxMP(200) +sm.addAP(5) +sm.addSP(5) diff --git a/scripts/quest/q34915s.py b/scripts/quest/q34915s.py new file mode 100755 index 0000000..61e616e --- /dev/null +++ b/scripts/quest/q34915s.py @@ -0,0 +1,15 @@ +# Created by MechAviv +# Quest ID :: 34915 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face2#You're gonna go save Mar? It's really dangerous! Are you sure you want to go?\r\n\r\n \r\n#b(If you accept, you'll travel there automatically.)#k"): + sm.warp(402090011, 0) diff --git a/scripts/quest/q34916e.py b/scripts/quest/q34916e.py new file mode 100755 index 0000000..e60bc2a --- /dev/null +++ b/scripts/quest/q34916e.py @@ -0,0 +1,245 @@ +# Created by MechAviv +# Quest ID :: 34916 +# Not coded yet + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.removeAdditionalEffect() +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#We're travelers seeking paradise, nomads on a never-ending journey for a perfect home.") + + +sm.sendDelay(500) + + +sm.blind(1, 255, 0, 0, 0, 500, 0) +sm.sendDelay(500) + + +sm.OnOffLayer_On(500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/13/0", 4, 1, -1, 0) +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#We started searching long ago.") + + +# Unhandled Stat Changed [HP] Packet: 00 00 00 04 00 00 00 00 00 00 A9 00 00 00 FF 00 00 00 00 +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#My first memory is of seeing the night sky from the beautiful ship we traveled on.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#It truly was a marvelous ship!") + + +sm.OnOffLayer_Off(300, "d0", 0) +sm.OnOffLayer_On(300, "d1", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/13/1", 4, 1, -1, 0) +sm.sendDelay(300) + + +sm.OnOffLayer_Move(300, "d1", -30, -30) +sm.sendDelay(300) + + +sm.OnOffLayer_Move(300, "d1", 30, -30) +sm.sendDelay(300) + + +sm.OnOffLayer_Move(300, "d1", -30, 30) +sm.sendDelay(300) + + +sm.OnOffLayer_Move(300, "d1", 30, 30) +sm.sendDelay(300) + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face3#But one day, we had to make an emergency landing of sorts... here.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#Unfortunately, this place had a strange sort of vortex that drew our ship toward it.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#We tried everything, but we couldn't escape the planet's pull.") + + +sm.OnOffLayer_Off(500, "d1", 0) +sm.blind(1, 255, 0, 0, 0, 0, 0) +sm.sendDelay(1200) + + +sm.blind(0, 0, 0, 0, 0, 1000, 0) +sm.sendDelay(1400) + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#The next thing we knew, we were stuck in this wasteland, and our ship was nowhere to be found...") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#After wandering for days, we came to realize there's nothing here, nothing we can use to escape, no one to help us.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#But we were determined. So we gathered every scrap we could find, made this refuge, and began scavenging for food.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#All we can do now is survive and hope that one day we can find a way out of here.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Then we can begin our search for paradise again. Ferret is always working on ways to find the ship's signal.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#And that's our story. I wish I had more to tell you, but I have to get back to rebuilding the refuge.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(Maybe we can't get off-planet right now, but there must be a way...)") + + +sm.blind(1, 255, 0, 0, 0, 0, 0) +sm.sendDelay(1200) + + +sm.blind(0, 0, 0, 0, 0, 1000, 0) +sm.sendDelay(1400) + + +sm.sendDelay(1500) + + +sm.completeQuest(34916) +sm.giveExp(339) +# Update Quest Record EX | Quest ID: [34916] | Data: exp=1 +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/quest/q34916s.py b/scripts/quest/q34916s.py new file mode 100755 index 0000000..1085f25 --- /dev/null +++ b/scripts/quest/q34916s.py @@ -0,0 +1,110 @@ +# Created by MechAviv +# Quest ID :: 34916 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#We're so grateful to you for saving Mar. I'd like to pay you back, but... Well, as you can see, we don't have much to offer.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Actually, there are some questions I'd like to ask you. Would you be willing to answer them?") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#Well, I'm not sure I know anything you'd be interested in, but I'll do my best.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(As you explain your predicament and insist that you need to find a way to get off the planet, Zippy looks crestfallen.)") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#We don't know how to get out of here either. ") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#What!?") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#The other caravaners and I... we're not here by choice.") + + +sm.setSpeakerID(3001508) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#I don't know much about this planet, but I can tell you more about our story."): + sm.setSpeakerID(3001508) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#Just give me a moment to organize my thoughts.") + + + sm.startQuest(34916) diff --git a/scripts/quest/q34917e.py b/scripts/quest/q34917e.py new file mode 100755 index 0000000..5585b83 --- /dev/null +++ b/scripts/quest/q34917e.py @@ -0,0 +1,41 @@ +# Created by MechAviv +# Quest ID :: 34917 +# Not coded yet + +# Inventory Operation with 1 operations. +sm.completeQuest(34917) +sm.giveExp(480) +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Thank you for getting these so quickly! This will really help.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Oh, and if you have any trouble getting back to the refuge, remember that you can get back through the Maple Guide.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#We trust you now. Please take good care of the refuge!") \ No newline at end of file diff --git a/scripts/quest/q34917s.py b/scripts/quest/q34917s.py new file mode 100755 index 0000000..269594f --- /dev/null +++ b/scripts/quest/q34917s.py @@ -0,0 +1,87 @@ +# Created by MechAviv +# Quest ID :: 34917 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face3#Was there something else? Or... is something wrong?") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#I'll stay here at the refuge and help you. Like you said, survival first, right?") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#We haven't even paid you back for saving Mar, but we really could use the help...") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#Don't worry. Helping you and finding a way out of here benefits all of us.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#So, we're helping each other out. Okay. In that case, we could really use medical supplies to treat the wounded.") + + +sm.setSpeakerID(3001508) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face2#Bring #b20#k #i4036344# #b#t4036344##k items from #o2400350# in #r#m402000610##k."): + sm.setSpeakerID(3001508) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face2#I'm sorry again for being so mean to you before. Can't be too careful. See you soon!") + + + sm.startQuest(34917) + # [START_NAVIGATION] [E2 0A F6 17 00 00 00 00 00 00 ] \ No newline at end of file diff --git a/scripts/quest/q34918e.py b/scripts/quest/q34918e.py new file mode 100755 index 0000000..821981d --- /dev/null +++ b/scripts/quest/q34918e.py @@ -0,0 +1,78 @@ +# Created by MechAviv +# Quest ID :: 34918 +# Not coded yet + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#I'm here to help the refuge reconstruction effort. What can I do?") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#Ah! I never should have doubted you.\r\nI'm so glad you're willing to help the refuge.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(I guess it wouldn't be the same if Salvo didn't sing the story of the refuge to me.)") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(The caravan's had a tough life to begin with, but what Salvo's saying sounds like it got a lot worse after the monsters started attacking.)") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(The refuge has been plagued by Specters bent on destruction.)") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#Ohhh, food boosts caravan moraaale.\r\nMaybe one day the refuge will have a full choraaale.") + + +sm.completeQuest(parentID) +sm.giveExp(537) diff --git a/scripts/quest/q34918s.py b/scripts/quest/q34918s.py new file mode 100755 index 0000000..df1c748 --- /dev/null +++ b/scripts/quest/q34918s.py @@ -0,0 +1,27 @@ +# Created by MechAviv +# Quest ID :: 34918 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#That's perfect! And now, do you think you could help gather food?"): + sm.setSpeakerID(3001508) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#Salvo organizes food procurement. If you find him, I'm sure he'll be able to tell you what we need.") + + + sm.startQuest(34918) + # [START_NAVIGATION] [D8 0A F6 17 01 00 00 00 07 00 33 30 30 31 34 30 31 ] \ No newline at end of file diff --git a/scripts/quest/q34919e.py b/scripts/quest/q34919e.py new file mode 100755 index 0000000..3614447 --- /dev/null +++ b/scripts/quest/q34919e.py @@ -0,0 +1,21 @@ +# Created by MechAviv +# Quest ID :: 34919 +# Not coded yet + +# Inventory Operation with 1 operations. +sm.completeQuest(34919) +sm.giveExp(678) +# Update Quest Record EX | Quest ID: [34919] | Data: exp=1 +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#Lots of meat! Such a tasty treat! No worries for a beat!") + + +# Unhandled Message [47] Packet: 2F 01 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 31 33 diff --git a/scripts/quest/q34919s.py b/scripts/quest/q34919s.py new file mode 100755 index 0000000..c4f5f11 --- /dev/null +++ b/scripts/quest/q34919s.py @@ -0,0 +1,28 @@ +# Created by MechAviv +# Quest ID :: 34919 +# Not coded yet + +sm.setSpeakerID(3001509) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face4#On this planet, the caravan eats #o2400351# from #r#m402000611##k!\r\n You'd really be helping if you could get us #i4036345# #b#t4036345##k x20!"): + sm.setSpeakerID(3001509) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face3#Ohhh, our staple food tastes so very very baaad.\r\nBut singing while eating makes me so very very glaaad!") + + + # Unhandled Message [47] Packet: 2F 01 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 31 32 + sm.startQuest(34919) + # [START_NAVIGATION] [E3 0A F6 17 00 00 00 00 00 00 ] \ No newline at end of file diff --git a/scripts/quest/q34920e.py b/scripts/quest/q34920e.py new file mode 100755 index 0000000..9444dff --- /dev/null +++ b/scripts/quest/q34920e.py @@ -0,0 +1,78 @@ +# Created by MechAviv +# Quest ID :: 34920 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#Zzz... Ah! Suspicious signal! Right... near... uh...") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#I'm here to help the refuge reconstruction effort. What can I do?") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#More help! Great! And don't forget, you never saw me snoozing on the job, okay?") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Rebuilding the refuge is top priority. Of course, we can't live like this forever.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face1#Survival is just the means to an end. One day, we'll find our ship again and get out of here. All I have to do is find the signal.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#For now, I'll take all the help I can get, and I have the perfect job for you.") + + +sm.completeQuest(34920) +sm.giveExp(734) \ No newline at end of file diff --git a/scripts/quest/q34920s.py b/scripts/quest/q34920s.py new file mode 100755 index 0000000..dcd0303 --- /dev/null +++ b/scripts/quest/q34920s.py @@ -0,0 +1,30 @@ +# Created by MechAviv +# Quest ID :: 34920 +# Not coded yet + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#We've got everything we need here now! I heard they need help repairing armor over at the temporary base camp.") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face1#You'll find that mean Ferret to the left of #m402000600#. He may annoy me, but I guess he's still part of my family!") + + +sm.startQuest(34920) +# [START_NAVIGATION] [D8 0A F6 17 01 00 00 00 07 00 33 30 30 31 34 30 32 ] \ No newline at end of file diff --git a/scripts/quest/q34921e.py b/scripts/quest/q34921e.py new file mode 100755 index 0000000..3e22ad9 --- /dev/null +++ b/scripts/quest/q34921e.py @@ -0,0 +1,18 @@ +# Created by MechAviv +# Quest ID :: 34921 +# Not coded yet + +# Inventory Operation with 1 operations. +sm.completeQuest(34921) +sm.giveExp(875) +# Update Quest Record EX | Quest ID: [34921] | Data: exp=1 +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face4#This will be a big help with the repairs! Thanks!") \ No newline at end of file diff --git a/scripts/quest/q34921s.py b/scripts/quest/q34921s.py new file mode 100755 index 0000000..3467a4d --- /dev/null +++ b/scripts/quest/q34921s.py @@ -0,0 +1,27 @@ +# Created by MechAviv +# Quest ID :: 34921 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#We use #i4036346# #b#t4036346##k from #o2400352# at #r#m402000612##k for all kinds of refuge and armor repairs. Why don't you bring back #b20#k for me?"): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#It's not perfect, but #t4036346# is the toughest material we've got out here. See what you can find.") + + + sm.startQuest(34921) + # [START_NAVIGATION] [E4 0A F6 17 00 00 00 00 00 00 ] \ No newline at end of file diff --git a/scripts/quest/q34922e.py b/scripts/quest/q34922e.py new file mode 100755 index 0000000..b7b01fd --- /dev/null +++ b/scripts/quest/q34922e.py @@ -0,0 +1,153 @@ +# Created by MechAviv +# Quest ID :: 34922 +# Not coded yet + +# Inventory Operation with 1 operations. +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + + +sm.moveCamera(True, 0, 0, 0) + + +sm.sendDelay(300) + + +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 2000, 0, 900, 150) + + +sm.teleportInField(756, 90) +sm.forcedFlip(False) +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Phew! Done with repairs! Guess I'll go talk to Ferret again.") + + +sm.showNpcSpecialActionByTemplateId(3001511, "summon", 0) +sm.moveNpcByTemplateId(3001511, False, 300, 100) +sm.sendDelay(1000) + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#Isn't that... Mar?") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#What's he doing going outside the refuge?") + + +sm.zoomCamera(2000, 2000, 2000, 1200, 150) + + +sm.forcedMove(False, 300) +sm.sendDelay(2000) + + +sm.flipNpcByTemplateId(3001511, True) +sm.showNpcSpecialActionByTemplateId(3001511, "falldown", 0) +sm.sendDelay(3500) + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#Mar, what are you doing? It's dangerous out there!") + + +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 FB 00 00 00 FF 00 00 00 00 +sm.setSpeakerID(3001511) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#Hehe...") + + +sm.flipNpcByTemplateId(3001511, False) +sm.moveNpcByTemplateId(3001511, False, 150, 100) +sm.sendDelay(500) + + +sm.forcedMove(False, 300) +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face4#Where is he going...? Guess I'll follow for now.") + + +sm.zoomCamera(500, 2000, 500, 1300, 150) + + +sm.sendDelay(1000) + + +sm.completeQuest(34922) +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 51 06 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(932) +# Update Quest Record EX | Quest ID: [34922] | Data: exp=1 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;01=h1;10=h0;02=h1;11=h0;12=h0;04=h1;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;09=h0 +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + + +sm.moveCamera(True, 0, 0, 0) + + +sm.sendDelay(300) + + +sm.removeOverlapScreen(1000) +sm.setStandAloneMode(False) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# Unhandled Message [47] Packet: 2F 07 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 31 36 B8 58 08 00 00 00 00 00 23 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 36 32 39 58 68 08 00 00 00 00 00 27 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 36 32 39 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 70 5E 09 00 00 00 00 00 66 02 00 00 00 00 00 80 05 BB 46 E6 17 02 13 00 63 6F 6D 62 6F 6B 69 6C 6C 5F 69 6E 63 72 65 73 65 3D 37 C8 E4 0C 00 00 00 00 00 4D 03 00 00 00 00 00 80 05 BB 46 E6 17 02 1D 00 70 69 63 6B 75 70 5F 6D 6F 62 5F 72 65 77 61 72 64 5F 6D 65 73 6F 3D 35 36 37 31 37 30 80 F0 0C 00 00 00 00 00 50 03 00 00 00 00 00 80 05 BB 46 E6 17 02 1D 00 70 69 63 6B 75 70 5F 6D 6F 62 5F 72 65 77 61 72 64 5F 6D 65 73 6F 3D 35 36 37 31 37 30 +#sm.warp(402000613, 0) not sure \ No newline at end of file diff --git a/scripts/quest/q34922s.py b/scripts/quest/q34922s.py new file mode 100755 index 0000000..6f183c8 --- /dev/null +++ b/scripts/quest/q34922s.py @@ -0,0 +1,39 @@ +# Created by MechAviv +# Quest ID :: 34922 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#This should be plenty to do the repairs we need. You've been working pretty hard today. Why don't you take a break?") + + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#Oh, but before you do, could you put the scrap material into storage? We can't afford to waste anything."): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#Storage is down to your right there. If you've got time, come back, and I'll teach you how to relax caravan style.") + + + sm.startQuest(34922) + # [START_NAVIGATION] [D8 0A F6 17 01 00 00 00 07 00 33 30 30 31 34 30 33 ] \ No newline at end of file diff --git a/scripts/quest/q34923e.py b/scripts/quest/q34923e.py new file mode 100755 index 0000000..856309f --- /dev/null +++ b/scripts/quest/q34923e.py @@ -0,0 +1,38 @@ +# Created by MechAviv +# Quest ID :: 34923 +# Not coded yet + +# Unhandled Message [47] Packet: 2F 03 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 C8 E4 0C 00 00 00 00 00 4D 03 00 00 00 00 00 80 05 BB 46 E6 17 02 1D 00 70 69 63 6B 75 70 5F 6D 6F 62 5F 72 65 77 61 72 64 5F 6D 65 73 6F 3D 35 36 37 35 38 30 80 F0 0C 00 00 00 00 00 50 03 00 00 00 00 00 80 05 BB 46 E6 17 02 1D 00 70 69 63 6B 75 70 5F 6D 6F 62 5F 72 65 77 61 72 64 5F 6D 65 73 6F 3D 35 36 37 35 38 30 +sm.setSpeakerID(3001511) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#You're so nice!") + + +sm.setSpeakerID(3001511) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#They're so pretty and shiny... I love shinies!") + + +# Inventory Operation with 1 operations. +sm.completeQuest(34923) +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h1;11=h0;02=h1;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 D2 05 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(1073) +# Update Quest Record EX | Quest ID: [34923] | Data: exp=1 +# Unhandled Message [47] Packet: 2F 0B 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 31 38 B8 58 08 00 00 00 00 00 23 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 37 31 36 58 68 08 00 00 00 00 00 27 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 37 31 36 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 70 5E 09 00 00 00 00 00 66 02 00 00 00 00 00 80 05 BB 46 E6 17 02 14 00 63 6F 6D 62 6F 6B 69 6C 6C 5F 69 6E 63 72 65 73 65 3D 33 34 E0 75 09 00 00 00 00 00 6C 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 75 6C 74 69 6B 69 6C 6C 3D 33 38 36 98 81 09 00 00 00 00 00 6F 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 75 6C 74 69 6B 69 6C 6C 3D 33 38 36 80 85 09 00 00 00 00 00 70 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0B 00 6D 75 6C 74 69 6B 69 6C 6C 3D 36 C8 E4 0C 00 00 00 00 00 4D 03 00 00 00 00 00 80 05 BB 46 E6 17 02 1D 00 70 69 63 6B 75 70 5F 6D 6F 62 5F 72 65 77 61 72 64 5F 6D 65 73 6F 3D 35 36 37 35 38 30 80 F0 0C 00 00 00 00 00 50 03 00 00 00 00 00 80 05 BB 46 E6 17 02 1D 00 70 69 63 6B 75 70 5F 6D 6F 62 5F 72 65 77 61 72 64 5F 6D 65 73 6F 3D 35 36 37 35 38 30 40 1E 15 00 00 00 00 00 68 05 00 00 00 00 00 80 05 BB 46 E6 17 02 0B 00 6D 75 6C 74 69 6B 69 6C 6C 3D 36 diff --git a/scripts/quest/q34923s.py b/scripts/quest/q34923s.py new file mode 100755 index 0000000..8dceabe --- /dev/null +++ b/scripts/quest/q34923s.py @@ -0,0 +1,50 @@ +# Created by MechAviv +# Quest ID :: 34923 +# Not coded yet + +sm.setSpeakerID(3001511) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#You're strong!") + + +sm.setSpeakerID(3001511) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#Maybe you're strong enough to make my wish come true!") + + +sm.setSpeakerID(3001511) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#I wish for #b10#k #i4036347# #b#t4036347##k items! The #o2400353# right in front have it!"): + sm.setSpeakerID(3001511) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face2#Oh, good! But I can't tell you what I want them for. It's tippy top secret!") + + + sm.startQuest(34923) \ No newline at end of file diff --git a/scripts/quest/q34924e.py b/scripts/quest/q34924e.py new file mode 100755 index 0000000..7110ed3 --- /dev/null +++ b/scripts/quest/q34924e.py @@ -0,0 +1,92 @@ +# Created by MechAviv +# Quest ID :: 34924 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Ferret, see the empty space there? Ark says this ship will work if we can find the Crystal Energy Shard that fits into it.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#...") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Hm, okay... I just need to pick up this signal...") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#Oh, please! I really hope you've got enough to go on.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#Ha! Got it! It's weak, but it should be enough. If we can find the complementary signal to this, we'll find the crystal.") + + +# Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#But, the signal we're looking for seems to be scattered. Like it's broken maybe?") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#It's close by, but also far away. I'm just not sure.") + + +sm.completeQuest(34924) +sm.createQuestWithQRValue(11620, "0") +sm.giveExp(1997) diff --git a/scripts/quest/q34924s.py b/scripts/quest/q34924s.py new file mode 100755 index 0000000..6eeae52 --- /dev/null +++ b/scripts/quest/q34924s.py @@ -0,0 +1,88 @@ +# Created by MechAviv +# Quest ID :: 34924 +# Not coded yet + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#I remembered something! That crystal near the refuge... It's broken, but there may be hope for getting out of here after all. It's linked to a transport! All we have to do is find all the pieces to get power flowing!") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#Wait... You mean if we find the power source, we could use that thing to get out of here?!") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#What are the chances of finding something like that in this wasteland? This is great!") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#This is just what we need for morale! Hope!") + + +sm.setSpeakerID(3001508) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#You're going to help us find it, right?\r\n#b(If you accept, you'll travel to #m402000614# automatically.)#k"): + sm.setSpeakerID(3001508) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#All we need now is help from someone who knows a thing or two about finding stuff.") + + + sm.setSpeakerID(3001508) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendSay("#face0#I'll get Ferret and meet you at the crystal.") + + + sm.startQuest(34924) + # Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 + sm.warp(402000614, 0) diff --git a/scripts/quest/q34925e.py b/scripts/quest/q34925e.py new file mode 100755 index 0000000..9544a7a --- /dev/null +++ b/scripts/quest/q34925e.py @@ -0,0 +1,44 @@ +# Created by MechAviv +# Quest ID :: 34925 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#I'll gather rations, weapons, and armor from the other caravaners in the refuge.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#Ark, Ferret, and Salvo will need help getting organized and ready. Please take care of them.") + + +# Unhandled Message [47] Packet: 2F 01 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Visit Ferret first, then help Salvo. Once that's taken care of, we can meet up.") + + +sm.completeQuest(34925) +sm.giveExp(2819) +# Update Quest Record EX | Quest ID: [34925] | Data: exp=1 diff --git a/scripts/quest/q34925s.py b/scripts/quest/q34925s.py new file mode 100755 index 0000000..9b69104 --- /dev/null +++ b/scripts/quest/q34925s.py @@ -0,0 +1,93 @@ +# Created by MechAviv +# Quest ID :: 34925 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#We've got to find it. Looks like we've got no choice but to form a recovery team.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Let's say... Ferret, Salvo, and-") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#Ah! I don't want to go with him!") + + +# Unhandled Message [47] Packet: 2F 01 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 31 39 +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Ark, would you join the team too?") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(Seeing more of this place might help me recover more of my memory.)") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Yeah, I'll help.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Okay, then we should head back to the refuge and get ready. And Ferret, see if you can figure out what's wrong with the signal detector.") + + +sm.startQuest(34925) +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h1;11=h0;02=h1;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# Unhandled Message [47] Packet: 2F 02 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 31 39 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 +sm.warp(402000600, 3) diff --git a/scripts/quest/q34926e.py b/scripts/quest/q34926e.py new file mode 100755 index 0000000..98d97c1 --- /dev/null +++ b/scripts/quest/q34926e.py @@ -0,0 +1,30 @@ +# Created by MechAviv +# Quest ID :: 34926 +# Not coded yet + +# Inventory Operation with 1 operations. +sm.completeQuest(34926) +sm.giveExp(3993) +# Update Quest Record EX | Quest ID: [34926] | Data: exp=1 +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#You're back! That ought to be enough. Thanks!") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#I'll get started on this signal device. Why don't you see if Salvo needs help now?") diff --git a/scripts/quest/q34926s.py b/scripts/quest/q34926s.py new file mode 100755 index 0000000..23852f2 --- /dev/null +++ b/scripts/quest/q34926s.py @@ -0,0 +1,63 @@ +# Created by MechAviv +# Quest ID :: 34926 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Whenever we explore, it's inevitable that we will be separated at some point. That's why we need a special signal device.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face1#This one has a unique signal we can use to find each other.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Since you're new, we'll have to make a new device for you. And mine needs to be repaired.") + + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face4#We'll need a lot of supplies. Try finding #b20#k #i4036348# #b#t4036348##k items from #o2400354# monsters in #r#m402000616##k."): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#I'll stay here and do some equipment maintenance to prep for the expedition.") + + + sm.startQuest(34926) + # [START_NAVIGATION] [E8 0A F6 17 00 00 00 00 00 00 ] diff --git a/scripts/quest/q34927e.py b/scripts/quest/q34927e.py new file mode 100755 index 0000000..c89bb8a --- /dev/null +++ b/scripts/quest/q34927e.py @@ -0,0 +1,30 @@ +# Created by MechAviv +# Quest ID :: 34927 +# Not coded yet + +# Inventory Operation with 1 operations. +sm.completeQuest(34927) +sm.giveExp(4815) +# Update Quest Record EX | Quest ID: [34927] | Data: exp=1 +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Wow! This is going to make some really great stuff!") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(Guess I should check in with Zippy now that I've finished helping Ferret and Salvo.)") \ No newline at end of file diff --git a/scripts/quest/q34927s.py b/scripts/quest/q34927s.py new file mode 100755 index 0000000..b9ef07e --- /dev/null +++ b/scripts/quest/q34927s.py @@ -0,0 +1,63 @@ +# Created by MechAviv +# Quest ID :: 34927 +# Not coded yet + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Bang! Pow, pow! The sweet sound of demolition is my musical inspiration!") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Demolition is the most important part!\r\nHow else will we dig up that ancient art?") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#If you have a bomb, you can find anything!\r\nEven with tons of dirt hiding your crystal bling!") + + +sm.setSpeakerID(3001509) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#So I'm asking you for something very important! Materials for bo-bo-bombs!! Bring about #b20#k #i4036349# #b#t4036349##k items from #o2400355# monsters in #r#m402000618##k!"): + sm.setSpeakerID(3001509) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#Be careful! Demolition supplies are dangerous! Good luck!") + + + sm.startQuest(34927) + # [START_NAVIGATION] [EA 0A F6 17 00 00 00 00 00 00 ] diff --git a/scripts/quest/q34928e.py b/scripts/quest/q34928e.py new file mode 100755 index 0000000..5cbef51 --- /dev/null +++ b/scripts/quest/q34928e.py @@ -0,0 +1,96 @@ +# Created by MechAviv +# Quest ID :: 34928 +# Not coded yet + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.removeAdditionalEffect() +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#(You brush away the sand to reveal something glittering in the sun.)") + + +sm.blind(1, 150, 0, 0, 0, 500, 0) +sm.playSound("Sound/SoundEff.img/PinkBean/expectation", 100) +sm.OnOffLayer_On(300, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/7/0", 4, 1, -1, 0) +sm.sendDelay(1000) + + +sm.blind(0, 0, 0, 0, 0, 500, 0) +sm.OnOffLayer_Off(500, "d0", 0) +sm.sendDelay(500) + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#Hm, it's only a fragment. It might not be usable.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#No, the power source was made up of three different parts. This must be the first piece we need. Let's take this back to the refuge.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#(If you're right, the crystal will work once you find the other two fragments. There may yet be hope.)") + + +sm.completeQuest(34928) +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 E9 14 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(5285) +# Update Quest Record EX | Quest ID: [34928] | Data: exp=1;e1=1 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h1;11=h0;02=h1;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +sm.setMapTaggedObjectVisible("core0", False, 0, 0) +sm.setMapTaggedObjectVisible("core1", False, 0, 0) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + + +sm.moveCamera(True, 0, 0, 0) + + +sm.sendDelay(300) + + +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) +# Unhandled Message [47] Packet: 2F 02 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 32 33 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 +sm.warp(402000600, 3) diff --git a/scripts/quest/q34928s.py b/scripts/quest/q34928s.py new file mode 100755 index 0000000..202288b --- /dev/null +++ b/scripts/quest/q34928s.py @@ -0,0 +1,52 @@ +# Created by MechAviv +# Quest ID :: 34928 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Oh, good. You're here. Ferret got a better signal, and it turns out the crystal we need is in pieces and scattered all over the place.") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#We should check the piece at the location closest to the refuge first, so we can get an idea of what we're dealing with.") + + +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 A6 01 00 00 FF 00 00 00 00 +sm.setSpeakerID(3001508) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#Ark, go with Ferret and check the first location."): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face4#Yes! The signal's coming from #r#m402000615##k. Let's check it out.") + + + sm.startQuest(34928) + # [START_NAVIGATION] [E7 0A F6 17 00 00 00 00 00 00 ] \ No newline at end of file diff --git a/scripts/quest/q34929e.py b/scripts/quest/q34929e.py new file mode 100755 index 0000000..cbdbc6b --- /dev/null +++ b/scripts/quest/q34929e.py @@ -0,0 +1,27 @@ +# Created by MechAviv +# Quest ID :: 34929 +# Not coded yet + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#I'm glad you're here. Are you done with the preparations?") + + +sm.completeQuest(34929) +sm.createQuestWithQRValue(11620, "0") +# Update Quest Record EX | Quest ID: [15710] | Data: lasttime=19/03/09/15/10 +# Unhandled Stat Changed [130064] Packet: 00 00 10 FC 01 00 00 00 00 00 18 00 00 00 C4 02 00 00 C4 02 00 00 D7 01 00 00 D7 01 00 00 14 00 01 01 0A 00 00 00 19 16 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(6107) +# Update Quest Record EX | Quest ID: [34929] | Data: exp=1 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h1;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h1 +# Unhandled Message [47] Packet: 2F 08 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 32 34 B8 58 08 00 00 00 00 00 23 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 38 33 38 58 68 08 00 00 00 00 00 27 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 38 33 38 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 70 5E 09 00 00 00 00 00 66 02 00 00 00 00 00 80 05 BB 46 E6 17 02 13 00 63 6F 6D 62 6F 6B 69 6C 6C 5F 69 6E 63 72 65 73 65 3D 34 E0 75 09 00 00 00 00 00 6C 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 75 6C 74 69 6B 69 6C 6C 3D 34 30 35 98 81 09 00 00 00 00 00 6F 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 75 6C 74 69 6B 69 6C 6C 3D 34 30 35 C2 22 11 00 00 00 00 00 63 04 00 00 0A 02 60 E7 AD 46 8A D6 D4 01 0D 00 66 69 65 6C 64 5F 65 6E 74 65 72 3D 31 +sm.warp(402090002, 0) diff --git a/scripts/quest/q34929s.py b/scripts/quest/q34929s.py new file mode 100755 index 0000000..65f1128 --- /dev/null +++ b/scripts/quest/q34929s.py @@ -0,0 +1,51 @@ +# Created by MechAviv +# Quest ID :: 34929 +# Not coded yet + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#(The caravaners look hopeful but anxious as you show them the crystal shard and explain that there are two more to find.)") + + +sm.setSpeakerID(3001508) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#We may have to go out pretty far from the refuge to recover the other two.") + + +sm.setSpeakerID(3001508) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face3#When you're ready to go, would you come to #r#m402000620##k?\r\nIt might be a long trip, so I want to say goodbye."): + sm.setSpeakerID(3001508) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#And I'll gather the other caravaners, so we can give\r\nyou a good send-off for luck. See you there!") + + + sm.startQuest(34929) + # [START_NAVIGATION] [EC 0A F6 17 00 00 00 00 00 00 ] diff --git a/scripts/quest/q34930e.py b/scripts/quest/q34930e.py new file mode 100755 index 0000000..6dd67b5 --- /dev/null +++ b/scripts/quest/q34930e.py @@ -0,0 +1,23 @@ +# Created by MechAviv +# Quest ID :: 34930 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#Ah! I got the signal again. Hurry to #rSandstorm Zone 2#k while there's still a chance!") + + +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h1;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +sm.completeQuest(34930) +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 4D 1C 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(6870) +# Update Quest Record EX | Quest ID: [34930] | Data: exp=1 +# [START_NAVIGATION] [EE 0A F6 17 00 00 00 00 00 00 ] \ No newline at end of file diff --git a/scripts/quest/q34930s.py b/scripts/quest/q34930s.py new file mode 100755 index 0000000..b78470a --- /dev/null +++ b/scripts/quest/q34930s.py @@ -0,0 +1,74 @@ +# Created by MechAviv +# Quest ID :: 34930 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#It must be the Gale Foxes around here causing the sandstorm.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#I guess we'll just have to wait for it to calm down again.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#If we clear some of them out, that should help the signal, right? I can do that.") + + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#That's a good idea. Let's see if hunting about #b50#k #b#o2400356##k monsters does any good."): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#I'll keep trying to pick up the signal. Everyone else should help Ark.") + + + sm.setSpeakerID(3001509) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendSay("#face1#Well, if Mr. Bossy says we help Ark, I guess we help Ark. Let's get to it, everyone!") + + + sm.startQuest(34930) \ No newline at end of file diff --git a/scripts/quest/q34931e.py b/scripts/quest/q34931e.py new file mode 100755 index 0000000..0794b24 --- /dev/null +++ b/scripts/quest/q34931e.py @@ -0,0 +1,36 @@ +# Created by MechAviv +# Quest ID :: 34931 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face1#Good work! I'm getting the signal again. We need to move quickly. Follow me.") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#Oh, we didn't let the sandstorm get us down!\r\nNow our trouble's behind us, and we're searchin' around!") + + +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +sm.completeQuest(34931) +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 EB 21 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(7360) +# Update Quest Record EX | Quest ID: [34931] | Data: exp=1 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h1;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# Unhandled Message [47] Packet: 2F 0A 00 00 00 40 9C 00 00 00 00 00 00 28 00 00 00 00 00 00 80 05 BB 46 E6 17 02 0C 00 75 73 65 72 5F 6C 76 75 70 3D 32 36 B8 58 08 00 00 00 00 00 23 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 39 35 38 58 68 08 00 00 00 00 00 27 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 6F 62 5F 6B 69 6C 6C 3D 34 39 35 38 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0B 00 6D 6F 62 5F 6B 69 6C 6C 3D 31 38 70 5E 09 00 00 00 00 00 66 02 00 00 00 00 00 80 05 BB 46 E6 17 02 14 00 63 6F 6D 62 6F 6B 69 6C 6C 5F 69 6E 63 72 65 73 65 3D 32 32 E0 75 09 00 00 00 00 00 6C 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 75 6C 74 69 6B 69 6C 6C 3D 34 32 34 98 81 09 00 00 00 00 00 6F 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0D 00 6D 75 6C 74 69 6B 69 6C 6C 3D 34 32 34 50 8D 09 00 00 00 00 00 72 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0A 00 6D 6F 62 5F 6B 69 6C 6C 3D 38 08 99 09 00 00 00 00 00 75 02 00 00 00 00 00 80 05 BB 46 E6 17 02 0A 00 6D 6F 62 5F 6B 69 6C 6C 3D 38 C4 22 11 00 00 00 00 00 63 04 00 00 0C 02 A0 18 36 98 8A D6 D4 01 0D 00 66 69 65 6C 64 5F 65 6E 74 65 72 3D 31 +sm.warp(402090005, 0) diff --git a/scripts/quest/q34931s.py b/scripts/quest/q34931s.py new file mode 100755 index 0000000..5faff35 --- /dev/null +++ b/scripts/quest/q34931s.py @@ -0,0 +1,62 @@ +# Created by MechAviv +# Quest ID :: 34931 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#We lost the signal again. The sandstorm got even stronger than before.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#We'll just have to do a little more hunting.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#That's our best shot, yeah.") + + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#How about #b50#k more #b#o2400357##k monsters?"): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#Do what you can, and I'll keep searching for that signal.") + + + sm.startQuest(34931) \ No newline at end of file diff --git a/scripts/quest/q34932e.py b/scripts/quest/q34932e.py new file mode 100755 index 0000000..05022d9 --- /dev/null +++ b/scripts/quest/q34932e.py @@ -0,0 +1,44 @@ +# Created by MechAviv +# Quest ID :: 34932 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#What#e are#n those things swarming out of the sand like that?! They're horrible!") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#We can't go anywhere with these blocking our way.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face6#(There's something familiar about these creatures...)") + + +sm.completeQuest(34932) +# Update Quest Record EX | Quest ID: [15710] | Data: lasttime=19/03/09/15/14 +# Unhandled Stat Changed [130064] Packet: 00 00 10 FC 01 00 00 00 00 00 1B 00 00 00 12 03 00 00 12 03 00 00 19 02 00 00 19 02 00 00 23 00 01 01 13 00 00 00 A1 0F 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(6379) \ No newline at end of file diff --git a/scripts/quest/q34932s.py b/scripts/quest/q34932s.py new file mode 100755 index 0000000..fcb73b8 --- /dev/null +++ b/scripts/quest/q34932s.py @@ -0,0 +1,42 @@ +# Created by MechAviv +# Quest ID :: 34932 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#At least we're still getting a signal...") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Lead the way.") + + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#Okay. We can just follow it until we find them."): + # Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 + # Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h1;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 + sm.startQuest(34932) + # [START_NAVIGATION] [F7 0A F6 17 00 00 00 00 00 00 ] + # [SET_PARTNER] [01 A6 CC 2D 00 5D BD C4 04 00 ] diff --git a/scripts/quest/q34933e.py b/scripts/quest/q34933e.py new file mode 100755 index 0000000..10882bd --- /dev/null +++ b/scripts/quest/q34933e.py @@ -0,0 +1,25 @@ +# Created by MechAviv +# Quest ID :: 34933 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face4#All clear. Perfect! Let's get out of here!") + + +sm.completeQuest(34933) +# Update Quest Record EX | Quest ID: [15710] | Data: lasttime=19/03/09/15/15 +# Unhandled Stat Changed [130064] Packet: 00 00 10 FC 01 00 00 00 00 00 1C 00 00 00 2C 03 00 00 2C 03 00 00 2F 02 00 00 2F 02 00 00 28 00 01 01 16 00 00 00 51 08 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(8342) +# Update Quest Record EX | Quest ID: [34933] | Data: exp=1 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h1;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# [SET_PARTNER] [01 A6 CC 2D 00 5D BD C4 04 00 ] +# [START_NAVIGATION] [F9 0A F6 17 00 00 00 00 00 00 ] diff --git a/scripts/quest/q34933s.py b/scripts/quest/q34933s.py new file mode 100755 index 0000000..88e65bd --- /dev/null +++ b/scripts/quest/q34933s.py @@ -0,0 +1,61 @@ +# id 34933 (Tracking the Trackers), field 402000631 +sm.setSpeakerID(3001412) # Ferret +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +res = sm.sendAskAccept("#face2#Try to get rid of about #b50#k #b#o2400358##k monsters, and I'll focus on the signal.") +sm.setSpeakerType(3) +sm.sendNext("#face2#There are all kinds of creepy signals in here, so let's get through this as fast as we can!") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/12/56") +sm.startQuest(parentID) diff --git a/scripts/quest/q34934e.py b/scripts/quest/q34934e.py new file mode 100755 index 0000000..f7e53d6 --- /dev/null +++ b/scripts/quest/q34934e.py @@ -0,0 +1,23 @@ +# Created by MechAviv +# Quest ID :: 34934 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face1#Perfect! Now we can get out of here.") + + +sm.completeQuest(34934) +# Unhandled Stat Changed [130064] Packet: 00 00 10 FC 01 00 00 00 00 00 1D 00 00 00 46 03 00 00 46 03 00 00 45 02 00 00 45 02 00 00 2D 00 01 01 19 00 00 00 C4 0E 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(8832) +# Update Quest Record EX | Quest ID: [34934] | Data: exp=1 +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h0;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +# [SET_PARTNER] [01 A6 CC 2D 00 5D BD C4 04 00 ] +# [START_NAVIGATION] [FB 0A F6 17 00 00 00 00 00 00 ] \ No newline at end of file diff --git a/scripts/quest/q34934s.py b/scripts/quest/q34934s.py new file mode 100755 index 0000000..4ab1807 --- /dev/null +++ b/scripts/quest/q34934s.py @@ -0,0 +1,26 @@ +# Created by MechAviv +# Quest ID :: 34934 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#Just as I expected, these sand monsters are blocking our way. Ark, please defeat #b50#k #b#o2400359##k monsters, so we can get through."): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face2#The signal I'm picking up just got a lot stronger. I don't know what to make of it.") + + + sm.startQuest(34934) \ No newline at end of file diff --git a/scripts/quest/q34935e.py b/scripts/quest/q34935e.py new file mode 100755 index 0000000..60a326f --- /dev/null +++ b/scripts/quest/q34935e.py @@ -0,0 +1,20 @@ +# Created by MechAviv +# Quest ID :: 34935 +# Not coded yet + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face1#We finally made it! The last source of the signal.") + + +sm.completeQuest(34935) +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 1D 2F 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(7360) +# Update Quest Record EX | Quest ID: [34935] | Data: exp=1 diff --git a/scripts/quest/q34935s.py b/scripts/quest/q34935s.py new file mode 100755 index 0000000..6675653 --- /dev/null +++ b/scripts/quest/q34935s.py @@ -0,0 +1,40 @@ +# Created by MechAviv +# Quest ID :: 34935 +# Not coded yet + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face6#I'm... I'm okay. Let's get out of here. We've got to find the last piece of the crystal.") + + +# Unhandled Stat Changed [MP] Packet: 00 00 00 10 00 00 00 00 00 00 16 02 00 00 FF 00 00 00 00 +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face2#Right. Let's get aboveground everyone."): + sm.setSpeakerID(3001510) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face4#We're lucky. I've got a strong lock on the signal for the last piece.") + + + sm.startQuest(34935) + sm.warp(402090012, 0) diff --git a/scripts/quest/q34936s.py b/scripts/quest/q34936s.py new file mode 100755 index 0000000..45f338b --- /dev/null +++ b/scripts/quest/q34936s.py @@ -0,0 +1,99 @@ +# Created by MechAviv +# Quest ID :: 34936 +# Not coded yet + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face2#Haha! Now it's time for my pyrotechnic magic! Yes!") + + +sm.setSpeakerID(3001512) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#This place looks familiar... I don't think I like it here.") + + +sm.setSpeakerID(3001513) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#Ferret, are we sure it's okay to use explosives here?") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#It's all right. We're a long way from that cave. It's very sturdy here.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face1#Hm, the signal is getting weaker. Time to do your thing, Salvo! And hurry!") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#Yes! I get to blow stuff up!\r\nGet ready for some fun!") + + +sm.setSpeakerID(3001509) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face4#Let's get started, everyone!"): + sm.setSpeakerID(3001509) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face3#Listen to the rhythm of your heaaart.\r\nHit the button, and blast stuff apaaart!") + + + # Unhandled Message [47] Packet: 2F 02 00 00 00 B0 83 08 00 00 00 00 00 2E 02 00 00 00 00 00 80 05 BB 46 E6 17 02 00 00 D3 22 11 00 00 00 00 00 63 04 00 00 1B 02 C0 F9 12 4B 8B D6 D4 01 0D 00 66 69 65 6C 64 5F 65 6E 74 65 72 3D 31 + sm.warp(402090006, 0) diff --git a/scripts/quest/q34937e.py b/scripts/quest/q34937e.py new file mode 100755 index 0000000..268679d --- /dev/null +++ b/scripts/quest/q34937e.py @@ -0,0 +1,199 @@ +# Created by MechAviv +# Quest ID :: 34937 +# Not coded yet + +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, False, False, False) +sm.removeAdditionalEffect() +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#The trick will be to split up and move in two groups.") + + +sm.blind(1, 255, 0, 0, 0, 500, 0) +sm.sendDelay(500) + + +sm.sendDelay(300) + + +sm.OnOffLayer_On(300, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/8/0", 4, 1, -1, 0) +sm.OnOffLayer_On(300, "d1", 190, -150, -1, "Effect/Direction17.img/effect/ark/illust/8/1", 4, 1, -1, 0) +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face5#Salvo, Digs, Grit and I can set up a defense line here...") + + +sm.OnOffLayer_Off(300, "d1", 0) +sm.OnOffLayer_On(300, "d2", 190, -150, -1, "Effect/Direction17.img/effect/ark/illust/8/2", 4, 1, -1, 0) +sm.OnOffLayer_On(300, "d3", 170, -130, -1, "Effect/Direction17.img/effect/ark/illust/8/3", 4, 1, -1, 0) +sm.sendDelay(300) + + +sm.OnOffLayer_Move(2000, "d3", -210, 150) +sm.sendDelay(2000) + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#In the meantime, Ferret can take the power source to the refuge and get that started.") + + +sm.OnOffLayer_Off(300, "d0", 0) +sm.OnOffLayer_Off(300, "d2", 0) +sm.OnOffLayer_Off(300, "d3", 0) +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#Then I can come back for all of you, and we can leave here for good.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face1#That may just work, and the sandstorm between here and the refuge seems to have calmed.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face5#Our problem is the crystal's charge time. We have to hold the Specters off until it's ready.") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#Sounds like a job for Bomb Master Salvo!") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#I'll make those monsters all go blammo!") + + +sm.blind(1, 255, 0, 0, 0, 0, 0) +sm.sendDelay(1200) + + +sm.blind(0, 0, 0, 0, 0, 1000, 0) +sm.sendDelay(1400) + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face0#I'll start toward the refuge now.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face4#If I get it running, I'll send a signal, so be ready.") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face1#Good luck, everyone!") + + +# Update Quest Record EX | Quest ID: [34995] | Data: 00=h1;10=h0;01=h0;11=h0;02=h0;12=h0;13=h0;04=h0;23=h1;14=h0;05=h0;24=h0;15=h0;06=h0;16=h0;07=h0;17=h0;09=h0 +sm.completeQuest(34937) +# Unhandled Stat Changed [EXP] Packet: 00 00 00 00 01 00 00 00 00 00 F5 1D 00 00 00 00 00 00 FF 00 00 00 00 +sm.giveExp(7360) +# Update Quest Record EX | Quest ID: [34937] | Data: exp=1 +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + + +sm.moveCamera(True, 0, 0, 0) + + +sm.sendDelay(300) + + +sm.removeOverlapScreen(1000) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/quest/q34937s.py b/scripts/quest/q34937s.py new file mode 100755 index 0000000..0bffeb5 --- /dev/null +++ b/scripts/quest/q34937s.py @@ -0,0 +1,158 @@ +# Created by MechAviv +# Quest ID :: 34937 +# Not coded yet + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face5#I remember now. The device near the refuge drew power.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face5#That's why the Specters keep attacking. They want more of that power.") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face8#The others are in danger!") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#You're right... The signal's changed. Something's wrong...") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#No! Monsters are headed straight for the refuge!") + + +sm.setSpeakerID(3001510) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#There's a massive number of them this time. If they attack, our people are done for!") + + +sm.setSpeakerID(3001512) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#But if that happens, then this was all for nothing.") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face2#Not yet. If we can beat the monsters to the refuge, we might still have a chance. We can just fly right out of here!") + + +sm.setSpeakerID(3001509) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face3#We'll use the Crystal Energy Shaaard!\r\nThen the caravan will fly faaar!") + + +sm.setSpeakerID(3001513) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face0#What are we waiting for?!") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face5#No, that won't work. It takes too long to get the power source up and running. I'll think of something...") + + +sm.setSpeakerID(3001510) +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face0#Then I'll be waiting. Let me know when you've got something."): + sm.setSpeakerID(3001500) + sm.setSpeakerType(3) + sm.flipDialogue() + sm.setBoxChat() + sm.boxChatPlayerAsSpeaker() + sm.setBoxOverrideSpeaker() + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.setColor(1) + sm.sendNext("#face0#Hm... Okay, I've got it!") + + + sm.startQuest(34937) diff --git a/scripts/quest/q34938s.py b/scripts/quest/q34938s.py new file mode 100755 index 0000000..9e9e9b1 --- /dev/null +++ b/scripts/quest/q34938s.py @@ -0,0 +1,44 @@ +# Created by MechAviv +# Quest ID :: 34938 +# Not coded yet + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendNext("#face5#All right, I'll be the bait. You all defend, okay?") + + +sm.setSpeakerID(3001500) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +sm.sendSay("#face8#We have to stay strong for as long as it takes Ferret to get that thing going.") + + +sm.setSpeakerID(3001500) +sm.removeEscapeButton() +sm.flipDialogue() +sm.setBoxChat() +sm.boxChatPlayerAsSpeaker() +sm.setBoxOverrideSpeaker() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.setColor(1) +if sm.sendAskAccept("#face5#It'll take everything we've got, but we can do it. Let's go."): + # [CLEAR_ANNOUNCED_QUEST] [] + sm.systemMessage("Defend the refuge from the Specter forces.") + # Unhandled Message [47] Packet: 2F 01 00 00 00 59 03 04 00 00 00 00 00 07 01 00 00 01 02 70 59 25 74 8B D6 D4 01 14 00 71 75 65 73 74 5F 73 74 61 74 65 5F 63 68 61 6E 67 65 3D 31 + sm.warp(940205100, 0) diff --git a/scripts/quest/q34939s.py b/scripts/quest/q34939s.py new file mode 100755 index 0000000..d19ea3f --- /dev/null +++ b/scripts/quest/q34939s.py @@ -0,0 +1,11 @@ +# id 34939 (Master Corruption), field 402000640 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face8#I will not lose control again. I decide when to fight. I decide when to use that power.") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/13/09") +sm.createQuestWithQRValue(parentID, "exp=1") diff --git a/scripts/quest/q34940s.py b/scripts/quest/q34940s.py new file mode 100755 index 0000000..26571f1 --- /dev/null +++ b/scripts/quest/q34940s.py @@ -0,0 +1,9 @@ +# id 34940 (Refuge Survival), field 402000640 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face5#They've defended the refuge well so far. I'll take it from here.") +res = sm.sendAskAccept("#face8#I can be the strength they need.") +sm.sendNext("#face8#I'll save you.") +sm.warp(940205400) diff --git a/scripts/quest/q34941e.py b/scripts/quest/q34941e.py new file mode 100755 index 0000000..d085f55 --- /dev/null +++ b/scripts/quest/q34941e.py @@ -0,0 +1,10 @@ +# id 34941 (Separate Ways 1), field 402000402 +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/13/17") +sm.createQuestWithQRValue(parentID, "exp=1") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face2#This should go a long way to helping us disguise the crystal. Thanks! I think Salvo needs help gathering emergency rations if you'd like to help him too.") diff --git a/scripts/quest/q34941s.py b/scripts/quest/q34941s.py new file mode 100755 index 0000000..7e37e68 --- /dev/null +++ b/scripts/quest/q34941s.py @@ -0,0 +1,19 @@ +# id 34941 (Separate Ways 1), field 402000402 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face0#Well... there is one thing we could use your help with.") +sm.sendSay("#face2#This crystal draws way too much attention.") +sm.sendSay("#face3#It even drove all those monsters crazy before we escaped.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face3#We did our best to hide it in the garbaaage!\r\nBut it's a terrible place for long-term storaaage!") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face0#Yeah, we need some way to camouflage it.") +sm.setSpeakerType(4) +sm.setSpeakerID(3001418) # Zippy +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +res = sm.sendAskAccept("#face2#There's enough scrap iron here that we could make something for it.") +sm.setSpeakerType(3) +sm.sendNext("#face2#Would you track down about #b30#k #i4036350# #b#t4036350##k items from the #o2400306# monsters in #rWaste Treatment Plant 3#k?") +sm.startQuest(parentID) diff --git a/scripts/quest/q34942e.py b/scripts/quest/q34942e.py new file mode 100755 index 0000000..4b1650f --- /dev/null +++ b/scripts/quest/q34942e.py @@ -0,0 +1,10 @@ +# id 34942 (Separate Ways 2), field 402000402 +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(parentID, "exp=1") +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face3#Oh yeah, tons of emergency supplieees! \r\nPlenty here to keep our bodies fortifieeed!") +sm.sendSay("#face0#Now we've got everything we need for a long journey to paradiiiise!") +sm.sendSay("#face0#Thanks for everything!") diff --git a/scripts/quest/q34942s.py b/scripts/quest/q34942s.py new file mode 100755 index 0000000..d905a59 --- /dev/null +++ b/scripts/quest/q34942s.py @@ -0,0 +1,12 @@ +# id 34942 (Separate Ways 2), field 402000402 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendNext("#face3#This is a wonderful place with lots of things to eeeat! \r\nIt's the perfect chance to get some tasty treeeats!") +sm.setSpeakerType(4) +sm.setSpeakerID(3001419) # Salvo +res = sm.sendAskAccept("#face2#The #i4036351# #b#t4036351##k you can get from #o2400308# monsters in #rNutria Gutter 2#k seems to be quite a delicacy! Can you bring about #b30#k?") +sm.setSpeakerType(3) +sm.sendNext("#face2#If we dry and preserve it, we'll have food to last us for ages. See you soon!") +sm.startQuest(parentID) diff --git a/scripts/quest/q34943e.py b/scripts/quest/q34943e.py new file mode 100755 index 0000000..9dbdee7 --- /dev/null +++ b/scripts/quest/q34943e.py @@ -0,0 +1,64 @@ +# id 34943 (Contact Caravan), field 402000402 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.zoomCamera(0, 1000, 0, -494, 668) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#I used some of the parts we gathered here to improve your signal device. Now we can communicate no matter where you go!") +sm.sendSay("#face1#Isn't it great?") +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendSay("#face2#If you're ever out traveling, and you want to talk to us, all you have to do is use this, and we'll be able to respond.") +sm.setInnerOverrideSpeakerTemplateID(3001509) # Salvo +sm.sendSay("#face3#And if you ever realize you miss my musiiic, \r\nI can sing over the device, so make sure you use iiit!") +sm.setInnerOverrideSpeakerTemplateID(3001511) # Mar +sm.sendSay("#face2#I hope you like it!") +sm.setInnerOverrideSpeakerTemplateID(3001512) # Digs +sm.sendSay("#face0#Looks like the crystal is ready. Let's go.") +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 10000) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendNext("#face0#I'm sure this isn't the last time we'll see each other.") +sm.sendSay("#face9#I hope you find the paradise you're looking for someday.") +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(3001508) # Zippy +sm.sendNext("#face0#Thanks! I'm sure you'll find what you're looking for too.") +sm.sendSay("#face0#We're off! I hope we see you again. Goodbye and good luck!") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;20=h1;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;18=h0;09=h0;19=h1") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;20=h1;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;18=h0;09=h0;19=h0") +sm.createQuestWithQRValue(34995, "00=h1;01=h0;10=h0;20=h0;02=h0;11=h0;12=h0;04=h0;13=h0;05=h0;14=h0;23=h0;06=h0;15=h0;24=h0;07=h0;16=h0;17=h0;18=h0;09=h0;19=h0") +sm.createQuestWithQRValue(34996, "402=h0") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/02/21/13/23") +sm.createQuestWithQRValue(parentID, "exp=1") +sm.sendDelay(4500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs18#A Short While Ago, High Flora Council Meeting", 100, 1200, 6, -50, -50, 1, 4, 0, 0, 0) +sm.onLayer(500, "d0", 0, -80, -1, "Effect/Direction17.img/effect/ark/illust/9/0", 4, True, -1, False) +sm.setInnerOverrideSpeakerTemplateID(3001507) # ??? +sm.sendNext("#face0#Is our plan for the western front finally complete? I understand there was interference this time too.") +sm.sendSay("#face0#And we only gained minimal power for our efforts.") +sm.sendSay("#face0#The first time the ritual was interrupted, it destroyed the entire planet's surface. This attempt was nearly as disastrous. I'd say it's time to cut our losses.") +sm.offLayer(2000, "d0", False) +sm.sendDelay(2500) +sm.setInnerOverrideSpeakerTemplateID(3001506) # Limbo +sm.sendNext("#face1#Second Lieutenant Ark... So you were alive this whole time...") +sm.sendSay("#face0#Ha... Haha... Hahaha...") +sm.sendDelay(1500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(402000402) diff --git a/scripts/quest/q34943s.py b/scripts/quest/q34943s.py new file mode 100755 index 0000000..7d75310 --- /dev/null +++ b/scripts/quest/q34943s.py @@ -0,0 +1,13 @@ +# id 34943 (Contact Caravan), field 402000402 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendNext("#face0#Now that you've helped us again, we wondered what the caravan could do for you.") +sm.sendSay("#face0#You're our friend after all. It's only fair we return the favor.") +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face0#Friend...") +sm.setInnerOverrideSpeakerTemplateID(3001510) # Ferret +sm.sendSay("#face2#So, we made something for you. Here you go.") +sm.sendSay("#face2#This is so exciting! I really hope you like it!") +sm.startQuest(parentID) diff --git a/scripts/quest/q3514e.py b/scripts/quest/q3514e.py new file mode 100755 index 0000000..42f251c --- /dev/null +++ b/scripts/quest/q3514e.py @@ -0,0 +1,6 @@ +# id 3514 (The Sorcerer Who Sells Emotions), field 270020211 +sm.setSpeakerID(2140002) # Sorcerer +sm.sendNext("Hmm, I see you've drank all the potion. So how was it? Wasn't I right about the effects? My potion is perfection!") +sm.sendSay("What? You're okay with losing HP? That's nonsense! It's just not true!\r\n\r\n#fUI/UIWindow2.img/QuestIcon/11/0# Willpower 50\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 4,916,000 exp") +sm.createQuestWithQRValue(18418, "B=32999") +sm.warp(270000000) diff --git a/scripts/quest/q3556e.py b/scripts/quest/q3556e.py new file mode 100755 index 0000000..2ce891e --- /dev/null +++ b/scripts/quest/q3556e.py @@ -0,0 +1,17 @@ +# id 3556 (What's in a Name), field 270000000 +sm.setSpeakerID(2140006) # Amnesiac Temple Keeper +sm.sendNext("You're back! I have so much to tell you!\r\n") +sm.setParam(2) +sm.sendSay("\r\n\r\n\r\n#bListen. I'm sorry but... There's just nothing else I can...#k") +sm.setParam(0) +sm.sendSay("I think the Tinglebrain Potion worked! I keep getting glimpses of my past... I remember following a masked man when he was battling monsters. I THINK I hid some kind of map in this big library. I feel like... I feel like all my memories will return soon. I even remember my name!\r\n") +sm.setParam(2) +sm.sendSay("\r\n\r\n\r\nᄀᄀ#bThat's great! So... tell me your name already!#k") +sm.setParam(0) +sm.sendSay("A-are you sure?") +sm.lockInGameUI(True, False) +sm.sendDelay(3000) +sm.lockInGameUI(False, True) +sm.sendNext("It's weird to say it after all this time... M-my name is #e#bKao#k#n! That's me. That's who I was...\r\n\r\n#fUI/UIWindow2.img/QuestIcon/4/0#\r\n\r\n\r\n#fUI/UIWindow2.img/QuestIcon/8/0# 2290200 exp\r\n") +sm.createQuestWithQRValue(18418, "B=32973") +sm.warp(270020200) diff --git a/scripts/quest/q35900e.py b/scripts/quest/q35900e.py new file mode 100755 index 0000000..fb19fab --- /dev/null +++ b/scripts/quest/q35900e.py @@ -0,0 +1,11 @@ +# id 35900 (Find Altar Key 1), field 910090302 +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/04/16/47") +sm.createQuestWithQRValue(25980, "normal=#") +sm.createQuestWithQRValue(25980, "normal=#;hard=#") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3#Hmm... An arrow and a potion? They look old enough, sure, but they don't seem particularly significant.") diff --git a/scripts/quest/q35900s.py b/scripts/quest/q35900s.py new file mode 100755 index 0000000..87987f1 --- /dev/null +++ b/scripts/quest/q35900s.py @@ -0,0 +1,70 @@ +# id 35900 (Find Altar Key 1), field 910090301 +sm.setSpeakerType(2) +sm.setParam(548) +sm.setColor(1) +#sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.setSpeakerID(1013358) +res = sm.sendAskAccept("#face0#Okay. I guess the plan is to head where the altar keys point me. Doesn't look like it's too far off, but all the same, I shouldn't try my luck by hanging around here any longer than I need to.") +sm.sendNext("#face0#Whatever the key's responding to, it's just beyond here.") +sm.startQuest(parentID) +sm.setMapTaggedObjectVisible("guide", True, 0, 0) +sm.createQuestWithQRValue(64547, "obj=0") +sm.createQuestWithQRValue(64194, "count=3") +sm.createQuestWithQRValue(64270, "") +sm.createQuestWithQRValue(63392, "choco=0") +sm.createQuestWithQRValue(63383, "1=0") +sm.createQuestWithQRValue(63383, "1=0;2=0") +sm.createQuestWithQRValue(63383, "1=0;2=0;3=0") +sm.createQuestWithQRValue(63383, "1=0;2=0;3=0;4=0") +sm.createQuestWithQRValue(63383, "1=0;2=0;3=0;4=0;5=0") +sm.createQuestWithQRValue(63383, "1=0;2=0;3=0;4=0;5=0;6=0") +sm.createQuestWithQRValue(63383, "1=0;2=0;3=0;4=0;5=0;6=0;7=0") +sm.createQuestWithQRValue(63385, "1=0") +sm.createQuestWithQRValue(63385, "1=0;2=0") +sm.createQuestWithQRValue(63385, "1=0;2=0;3=0") +sm.createQuestWithQRValue(63385, "1=0;2=0;3=0;4=0") +sm.createQuestWithQRValue(63385, "1=0;2=0;3=0;4=0;5=0") +sm.createQuestWithQRValue(63385, "1=0;2=0;3=0;4=0;5=0;6=0") +sm.createQuestWithQRValue(63385, "1=0;2=0;3=0;4=0;5=0;6=0;7=0") +sm.createQuestWithQRValue(63382, "0=0") +sm.createQuestWithQRValue(63382, "0=0;1=0") +sm.createQuestWithQRValue(63382, "0=0;1=0;2=0") +sm.createQuestWithQRValue(63382, "0=0;1=0;2=0;3=0") +sm.createQuestWithQRValue(63382, "0=0;1=0;2=0;3=0;4=0") +sm.createQuestWithQRValue(63382, "0=0;1=0;2=0;3=0;4=0;5=0") +sm.createQuestWithQRValue(63382, "0=0;1=0;2=0;3=0;4=0;5=0;6=0") +sm.createQuestWithQRValue(63382, "0=0;1=0;2=0;3=0;4=0;5=0;6=0;7=0") +sm.createQuestWithQRValue(63382, "0=0;1=0;2=0;3=0;4=0;5=0;6=0;7=0;8=0") +sm.createQuestWithQRValue(64497, "dayCnt=0") +sm.createQuestWithQRValue(64110, "chk=1") +sm.createQuestWithQRValue(64110, "chk=0") +sm.createQuestWithQRValue(63862, "") +sm.createQuestWithQRValue(64501, "dailyCount=0") +sm.createQuestWithQRValue(64502, "dailyCount=0") +sm.createQuestWithQRValue(64503, "dailyCount=0") +sm.createQuestWithQRValue(16548, "count=0") +sm.createQuestWithQRValue(16548, "count=0;todayC=0") +sm.createQuestWithQRValue(16548, "count=0;todayM=0;todayC=0") +sm.createQuestWithQRValue(16548, "count=0;todayM=0;todayT=0;todayC=0") +sm.createQuestWithQRValue(16548, "count=0;todayM=0;todayT=0;lastDate=19/07/04;todayC=0") +sm.createQuestWithQRValue(3893, "Floor=0") +sm.createQuestWithQRValue(63369, "chk=0") +sm.startQuest(61555) +sm.createQuestWithQRValue(62153, "lastday=19/07/04") +sm.createQuestWithQRValue(7907, "point=0") +sm.createQuestWithQRValue(7907, "lastW=12;point=0") +sm.createQuestWithQRValue(5905, "start=0") +sm.createQuestWithQRValue(14453, "check=0") +sm.createQuestWithQRValue(26553, "count=0") +sm.createQuestWithQRValue(26453, "val=0") +sm.createQuestWithQRValue(7708, "win=0") +sm.createQuestWithQRValue(7708, "lose=0;win=0") +sm.createQuestWithQRValue(7708, "draw=0;lose=0;win=0") +sm.createQuestWithQRValue(58977, "") +sm.createQuestWithQRValue(58977, "lastDay=19/07/04/16/47") +sm.createQuestWithQRValue(58980, "") +sm.startQuest(7019) +sm.createQuestWithQRValue(63033, "dayNW=0") +sm.createQuestWithQRValue(63120, "dayNR=0") +sm.createQuestWithQRValue(63042, "dayNR=0") +sm.completeQuestNoCheck(7707) diff --git a/scripts/quest/q35901e.py b/scripts/quest/q35901e.py new file mode 100755 index 0000000..fb572eb --- /dev/null +++ b/scripts/quest/q35901e.py @@ -0,0 +1,13 @@ +# id 35901 (Find Altar Key 2), field 910090302 +sm.createQuestWithQRValue(63369, "chk=2;day=0") +sm.createQuestWithQRValue(63369, "chk=2;day=1") +sm.completeQuestNoCheck(63360) +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0##g'A temperamental dancer / best viewed with distant gaze,'\r\n'In crimson does it pirouette / in black its footfall stays.'#k") +sm.sendSay("#face1#Oooh, ancient poetry. Which is ALSO a riddle. Score! Now that we've got the basic rhyme scheme, the next verse would go like so...") +sm.sendSay("#face0##b(You deciphered the ancient script on the box. It's written with a figurative lilt, as ancient verse is wont to do, but after mulling over it a while, you think you have a good idea what it's referring to.)#k") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) diff --git a/scripts/quest/q35901s.py b/scripts/quest/q35901s.py new file mode 100755 index 0000000..be8c186 --- /dev/null +++ b/scripts/quest/q35901s.py @@ -0,0 +1,9 @@ +# id 35901 (Find Altar Key 2), field 910090302 +sm.setSpeakerID(1013305) # Ancient Crate +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +res = sm.sendAskAccept("#face0#It's written in an ancient script. Question is, is it worth trying to decipher it?") +sm.setSpeakerType(3) +sm.sendNext("#face2#It'll take some time, but... Haha, of course it's worth it. Mostly because it would drive me nuts if I didn't. Ah, curiosity, you're the itch I always have to scratch.") +sm.startQuest(parentID) diff --git a/scripts/quest/q35902e.py b/scripts/quest/q35902e.py new file mode 100755 index 0000000..2ec60d2 --- /dev/null +++ b/scripts/quest/q35902e.py @@ -0,0 +1,67 @@ +# id 35902 (Find Altar Key 3), field 910090302 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.forcedFlip(True) +sm.sendDelay(1500) +sm.forcedFlip(False) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerID(1013305) # Ancient Crate +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +res = sm.sendNext("#face0##gA temperamental dancer\r\nbest viewed with distant gaze.\r\nIn crimson does it pirouette,\r\nin black its footfall stays.#k\r\nPlace the offering before the pillar engraved with the correct answer to the riddle.\r\n#b#L0# Cloud #l\r\n#L1# Fire #l\r\n#L2# Moonlight#l") +if res != 1: + sm.setSpeakerType(3) + sm.sendNext("#face3#I...don't think anything happened? Usually there'd be some sort of fancy special effects right about now. I guess that must not have been the right answer.") + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) +else: + sm.setSpeakerType(3) + sm.sendNext("#face0##b(With a rumble and and an uncomfortable scraping sound, a concealed compartment on the bottom of the box slides open. Peering inside, you see something shining.)#k") + sm.sendSay("#face3#And the crowd goes wiiiild.") + sm.sendDelay(1500) + sm.playSound("Sound/SoundEff.img/pathfinder/key", 100) + sm.onLayer(500, "00", 0, 0, 1, "Effect/Direction22.img/effect/PF_key/0", 4, False, -1, False) + sm.sendDelay(1000) + sm.offLayer(550, "00", False) + sm.onLayer(300, "01", 0, 0, 1, "Effect/Direction22.img/effect/PF_key/1", 4, False, -1, False) + sm.sendDelay(1000) + sm.onLayer(500, "02", 0, 0, 1, "Effect/Direction22.img/effect/PF_key/2", 4, False, -1, False) + sm.offLayer(300, "01", False) + sm.sendDelay(1000) + sm.offLayer(550, "02", False) + sm.sendNext("#face1#The last key to the altar. And that, of course, makes three. I guess it was a good thing I stopped to translate that riddle, huh?") + sm.sendDelay(500) + sm.sendNext("#face1#Now that I have all three of the keys, the next step is to plug these things into the altar.") + sm.sendSay("#face3#Huh. The key's shining again. There must be something that way, where the light is pointing me, and I'd bet my weight in mesos that it's the altar") + sm.forcedMove(False, 200) + sm.sendDelay(1000) + sm.blind(True, 255, 0, 0, 0, 500) + sm.sendDelay(500) + sm.sendDelay(4500) + sm.createFieldTextEffect("#fnArial##fs18#Moments Later, Somewhere in the Partem Ruins", 100, 1000, 6, -50, -50, 1, 4, 0, 0, 0) + sm.sendNext("#face1#Hah... Found you at last, relic. You put up a good challenge, but now you're aaaaaall mine.") + sm.bgmVolume(0, 1500) + sm.sendDelay(1500) + sm.changeBGM("Bgm00.img/Silence", 0, 0) + sm.bgmVolume(-2, 300) + sm.sendDelay(300) + sm.sendDelay(1000) + sm.showFadeTransition(0, 1000, 3000) + sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) + sm.moveCamera(True, 0, 0, 0) + sm.sendDelay(300) + sm.removeOverlapScreen(1000) + sm.moveCamera(True, 0, 0, 0) + sm.lockInGameUI(False, True) + sm.warp(910090304) diff --git a/scripts/quest/q35902s.py b/scripts/quest/q35902s.py new file mode 100755 index 0000000..d483714 --- /dev/null +++ b/scripts/quest/q35902s.py @@ -0,0 +1,9 @@ +# id 35902 (Find Altar Key 3), field 910090302 +sm.setSpeakerID(1013305) # Ancient Crate +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +res = sm.sendAskAccept("#face6#So basically, it's telling me to get the offering from whatever is guarding these ruins. Then once I've done that, I place it in front of the pillar that correctly answers the riddle. Gotta love the way these ancient ruins are always so roundabout with their secrets, eh?") +sm.setSpeakerType(3) +sm.sendNext("#face0#I know the answer now! Take that, ancient riddle makers. Now, let's find this #r#o2300200##k and get #b#i4036523# #t4036523##k x#b5#k. I think if I poke around here, I'm bound to run into the Ruins Guardian sooner or later.") +sm.startQuest(parentID) diff --git a/scripts/quest/q35903s.py b/scripts/quest/q35903s.py new file mode 100755 index 0000000..392d4ec --- /dev/null +++ b/scripts/quest/q35903s.py @@ -0,0 +1,26 @@ +# id 35903 (Power of the Relic), field 910090305 +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Some sort of ancient force entered me after I came in contact with the relic. Which would be kind of cool, except for that curse I picked up in the process. That's kind of a big drawback.") +sm.sendSay("#face6#Well...there's no putting the toothpaste back in the tube, as they say. I've gotta stay calm and think about what I can do now.") +res = sm.sendAskAccept("#face0#Maybe a little self-reflection would do me some good. A few minutes of meditation, some breathing exercises, and I'll be able to feel the change inside me.") +sm.completeQuestNoCheck(parentID) +sm.openUI(1) +sm.setParam(549) +sm.sendNext("#face0#Well, if there's one silver lining to this curse, it looks like I can actually use the Ancient Bow now. I'd say that's a pretty classy upgrade, even for the terminally hexed.") +sm.sendSay("#face0#Ever since I touched the relic, I've been able to use those new skills, too. It's like...the knowledge was just dumped right into my brain or something. I can press the default key (K) to distribute SP, as well as assign any skills I'll need to use frequently to their own Hotkeys.") +sm.openUI(2) +sm.sendSay("#face0#And of course, as my mentor taught me, I can always use the default keys (S) and select-type (C) to distribute AP. I think I should've leveled up, given all that trouble I went through, and higher levels mean more AP.") +sm.sendSay("#face3#Looks like I'm as ready as I'll ever be. Now, let's head out and see what we can find.") +sm.playSound("Sound/SoundEff.img/pathfinder/mascapo", 100) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face0#...me!") +sm.sendSay("#face0#...ve me!") +sm.sendSay("#face0#Gak!") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#Bwah--!") +sm.sendSay("#face3#That's an awfully weird sound, and it's coming from somewhere nearby. After I've looked around a bit more, I'll go see what's up.") diff --git a/scripts/quest/q35904e.py b/scripts/quest/q35904e.py new file mode 100755 index 0000000..acc4254 --- /dev/null +++ b/scripts/quest/q35904e.py @@ -0,0 +1,13 @@ +# id 35904 (Research and Rescue), field 100051010 +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/32") +sm.createQuestWithQRValue(35948, "10=h0;11=h0;02=h0;12=h0;13=h0;14=h0;15=h0;06=h2;07=h0;16=h0;08=h0;17=h0;09=h0;19=h0") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face3##b(You drizzled the seed oil over the unfortunate fellow until the ground itself was moist. Then, with a sucking sound and a loud pop, something rather strange popped out of the ground.)#k") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face1#*huff* *puff* You really did it! You saved my life. What a kind soul! Your generosity is truly boundless!") diff --git a/scripts/quest/q35904s.py b/scripts/quest/q35904s.py new file mode 100755 index 0000000..4004251 --- /dev/null +++ b/scripts/quest/q35904s.py @@ -0,0 +1,32 @@ +# id 35904 (Research and Rescue), field 100051010 +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face1#Greetings, fellow...organism. I couldn't help but notice you seem to be in need of some assistance.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face1#P-please, you must help me!") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face1#Must I? Hmm... If I do, will you do anything I ask of you in return?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face1#Say what?! F-fine... But it has to be something in or near the town. As long as that's okay with you, I'll do whatever you want!") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face1#Okay, you've got yourself a deal. Get ready to be unceremoniously yanked from the ground like a turnip.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face1#N-no, wait! You can't just pull me up like some weed! My tender, sensitive body could be torn right in two! Then whatever's inside of me would spill out, and...oh dear, I'm sure it would be a terrible mess.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face6#O...kay? Then what should I do?") +sm.setSpeakerType(4) +sm.setSpeakerID(1013306) # Mascarpo +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +res = sm.sendAskAccept("#face1#S-seed oil! That's the ticket! I think if you drizzle some of that on me, I'll pop out like a jack-in-the-box...except in reverse, I suppose. Seed oil is pretty common around here, so I don't expect it'll be any trouble to get some.") +sm.setSpeakerType(3) +sm.sendNext("#face1#Bring #b#i4036524# #t4036524##k x#b10#k from #o2300201#s for me!\r\nYou can find Pudgy Flowers nearby in the #m100051011#!") +sm.startQuest(parentID) diff --git a/scripts/quest/q35905s.py b/scripts/quest/q35905s.py new file mode 100755 index 0000000..d5a5a76 --- /dev/null +++ b/scripts/quest/q35905s.py @@ -0,0 +1,50 @@ +# id 35905 (Investigation), field 100051010 +sm.setSpeakerID(1013306) # Mascarpo +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +res = sm.sendAskAccept("#face1#Phew... I'm a bit dazed, as you can probably see, but a deal is a deal. What it is you want me to do for you? Go ooon, don't be shy now.") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#I don't want much. Information, mainly. Tell me what you know about this area.") +sm.setSpeakerType(4) +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +res = sm.sendNext("#face0#This forest is pretty vast. What are you curious about, more specifically? If I, the adequately intelligent Mascarpo, possess knowledge that can be of help, I'd be glad to share it with you!\r\n\r\n#b#L0# Ask about the ruins. #l") +sm.setSpeakerType(3) +sm.sendNext("#face1#The r-ruins...... You mean that tottering tower of rubble over there? I've heard it was held in high regard in ages past, and even treated as a place of worship because there was some sort of power there that could heal the injured.") +sm.sendSay("#face1#But you know how things go. Time passed, the crowds thinned, and eventually people stopped coming altogether. After that, a rather...unwholesome energy began seeping out of that place.") +sm.sendSay("#face1#Sure, it started small, and most dismissed it, but over the years, it grew stronger, until it became what you see now: creepy ruins that mothers tell their children never to play near.") +sm.setSpeakerType(4) +res = sm.sendNext("#face0#This forest is pretty vast. What are you curious about, more specifically? If I, the adequately intelligent Mascarpo, possess knowledge that can be of help, I'd be glad to share it with you!\r\n\r\n#b#L0# Ask about the relic. #l") +sm.setSpeakerType(3) +sm.sendNext("#face0#In this forest, we sometimes find long-buried parts of the ruins poking up above the surface, but we Karuppa keep our distance from them. They've just got this creepy vibe, you know?") +sm.sendSay("#face0#We did have one weirdo who liked to collect things from the ruins, but for the most part, we avoid anything that has to do with that awful place.") +sm.sendSay("#face1#It almost sounds like you're actually interested in collecting weird trinkets from the ruins yourself...") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#(Pssssh. Ancient artifacts are the COOLEST. These blobby talking things are what's weird! Still, it sounds like even if they do know something about the relic, they'd be tight-lipped about it.)") +sm.setSpeakerType(4) +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +res = sm.sendNext("#face0#This forest is pretty vast. What are you curious about, more specifically? If I, the adequately intelligent Mascarpo, possess knowledge that can be of help, I'd be glad to share it with you!\r\n\r\n#b#L0# Ask about his village. #l") +sm.setSpeakerType(3) +sm.sendNext("#face0#Oh, are you interested in our little Karuppa Town?") +sm.sendSay("#face0#Well, 'Karuppa Town' is more of a description than a proper name, really. It's the place where the people who have called this part of the forest home for generations live. I'm a proud Karuppa myself, yes, yes.") +sm.sendSay("#face0#We tend to be a rather faint-hearted lot, so we don't really do much traveling. And by that, I mean we seldom leave the village. We also don't have much in the way of communication with the outside world, aside from the Explorers who pass through from time to time.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#(So they're an indigenous race, or something close, but they've got a collective fear of the ruins that goes back generations? It doesn't sound like I can just waltz up and ask them how to open the entrance again.)") +sm.sendSay("#face6#(It feels like I'm wasting my time poking around here. Maybe it's time I got a move-on and continued my search somewhere else.)") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face0#If I may be so bold, Explorer, it seems like something about this land has caught your interest. If that's the case, I'd like to invite you to come visit our town. You may be able to learn more there.") +sm.sendSay("#face0#And you're in luck, because today just so happens to be a festival day! Yes indeed, today we celebrate the legendary Karuppa Wunderlixir, greatest of all tonics and tinctures.") +sm.sendSay("#face0#Legend has it that if one chugs a bottle of this famous brew, all vile things within them will be purified, and they'll be blessed with abundant health and longevity.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#(Huh. A legendary tonic that purifies all things vile? Not only do I have a very compelling reason to get myself a bottle, it may even have historical ties to this curse.)") +sm.sendSay("#face0#(He's got a dubious-looking face for...a potato? Still, he's the only lead I've got right now. I guess it wouldn't hurt to visit their village and find out what they know.)") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) diff --git a/scripts/quest/q35906s.py b/scripts/quest/q35906s.py new file mode 100755 index 0000000..868b684 --- /dev/null +++ b/scripts/quest/q35906s.py @@ -0,0 +1,18 @@ +# id 35906 (A Legendary Forest), field 100051010 +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Well... All right, I accept. Lead the way.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face0#You're...actually interested? I-I mean, of course! Who wouldn't be?") +sm.sendSay("#face0#Just answering a couple questions in return for you saving me doesn't feel like a square deal. Come and party at our festival and I'll make sure you don't go hungry.") +sm.sendSay("#face0#In our town, everyone's the shy sort, so don't feel bad if folks keep their distance at first. They know a good heart when they see one, though, so I'm sure they'll warm up to you quickly.") +sm.sendSay("#face0#I'm sure you'll all be the best of friends before you know it. I'm always right about these things at least 80% of the time.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013306) # Mascarpo +res = sm.sendAskAccept("#face0#Well, what are we standing around here for? Are you ready to head to Karuppa Town?") +sm.setSpeakerType(3) +sm.sendNext("#face0#All righty, just follow me! We'll be in the ol' Karuppa Town in no time.\r\n\r\n #r * You'll be automatically moved to the quest map.#k") +sm.warp(910090306) diff --git a/scripts/quest/q35907e.py b/scripts/quest/q35907e.py new file mode 100755 index 0000000..4dc50e7 --- /dev/null +++ b/scripts/quest/q35907e.py @@ -0,0 +1,30 @@ +# id 35907 (Karuppa), field 100051000 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendNext("#face0#Ohoho. So, you brought an outsider with you, Mascarpo. That explains everyone scurrying around right before you showed up. Tell me, what brings this stranger here?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0##b(Mascarpo explained what happened, telling the chief he wanted to invite you to the festival as thanks for pulling him out of the ground.)#k") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendSay("#face0#Hmm... To be perfectly honest, this outsider seems the chilly sort. But let it not be said that I judge on first impressions alone.") +sm.sendSay("#face0#If Mascarpo here is vouching for you, it's doubtful you're the ornery, troublemaking sort. And so, in the interest of sharing Karuppa culture, I invite you to take part in our festivities.") +sm.sendSay("#face0#Now...ahem... Allow me, Chief Gooda, to welcome you to Karuppa Town! To start, why don't you tell us a bit more about yourself? Who are you? Where are you from? Do you have any food allergies we should know about?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0##b(You told him that you're an Explorer from Maple World, currently traveling the land while beating up monsters and fetching things for people. Thankfully, it doesn't look like the chief is suspicious of you.)#k") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendSay("#face0#Hoho, it sounds like quite the life! I'll be sure to remember that, Explorer.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#So, when do you guys bust out the Wunderlixir? I'm eager to see it for myself.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendSay("#face0#The festival preparations are still underway, so it'll be a while before the main event. In the meantime, if you need something to keep your hands busy, why not aid the others with their tasks?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face6#(Hmm... The townspeople all seem wary, but helping them out could really break the ice. If they start feeling comfortable around me, I might even be able to get some useful info out of them.)") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q35907s.py b/scripts/quest/q35907s.py new file mode 100755 index 0000000..702f39c --- /dev/null +++ b/scripts/quest/q35907s.py @@ -0,0 +1,9 @@ +# id 35907 (Karuppa), field 100051000 +sm.setSpeakerID(1013302) # Mascarpo +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +res = sm.sendAskAccept("#face0#Unfortunately, I can't twist the villagers' stubby arms into coming out. Maybe you should have a chat with the chief over there. He usually knows what to do.") +sm.setSpeakerType(3) +sm.sendNext("#face0#If you're on friendly terms with the chief, the others will start opening up to you too. That's why he's who you want to schmooze with first.") +sm.startQuest(parentID) diff --git a/scripts/quest/q35908e.py b/scripts/quest/q35908e.py new file mode 100755 index 0000000..cc1a5d8 --- /dev/null +++ b/scripts/quest/q35908e.py @@ -0,0 +1,18 @@ +# id 35908 (Helping Hand 1), field 100051000 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Heehee. You're the brave Explorer who pulled Mascarpo out of the ground when he got stuck, right? I maaaaay have been eavesdropping on your conversation with Chief Gooda. In my defense, we don't get a lot of visitors!") +sm.sendSay("#face2#Hmm... You do sort of give off an unhappy vibe like the chief said, but I don't think you're a bad person.") +sm.sendSay("#face1#I... I really admire people who have courage like that. They always seem like they can do anything. I wish I could be more like them...") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0##b(Her upbeat disposition suddenly dims, a pained look on her face. But just as quickly as she had grown downcast, she rallies her cheer, as though to snap her out of her funk.)#k") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#O-oh! Sorry, I totally spaced and forgot to introduce myself. I'm Brie! I'm in charge of the festival preparations this year.") +sm.sendSay("#face0#It's a lot of work preparing for a festival held to wish for the town's well being. Lots of pressure. It'd be easier if that loud noise would just give it a rest this year.") +sm.sendSay("#face0#Ack, silly me, getting all carried away! You came to help me with my festival work, right? Well, before I babble your ear off, let me tell you what ingredients we still need.") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) diff --git a/scripts/quest/q35908s.py b/scripts/quest/q35908s.py new file mode 100755 index 0000000..d1f4ca3 --- /dev/null +++ b/scripts/quest/q35908s.py @@ -0,0 +1,19 @@ +# id 35908 (Helping Hand 1), field 100051000 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendNext("#face0#Like the chief said, everyone's busy with festival-related business. But who knows? If you give 'em a hand with their duties, we might be able to get everything ready faster.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013302) # Mascarpo +res = sm.sendAskAccept("#face0#What do you say, Explorer? Are you up for helping out with some work around town? Nothing endears an outsider to us Karuppa quite as fast as reducing the amount of work we have to do ourselves.") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Yeah, I can do that. The only question is, who should I help first?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013353) # Mascarpo +sm.sendSay("#face0#We've only known each other a few hours and you're already such a team player! Don't you worry about a thing - I'll send you where your help is most needed.") +sm.sendSay("#face0#There's a youngster named Brie who's in charge of preparing all the ingredients for the Wunderlixir. It's one of the festival's most challenging jobs, so I think she'd definitely appreciate a hand with the work.") +sm.sendSay("#face0#Brie is a pretty upbeat kid - a real ray of sunshine compared to most of us in this village, so there's no need to worry about her giving you the cold shoulder. Anyway, good luck. We're counting on you!") +sm.startQuest(parentID) diff --git a/scripts/quest/q35909e.py b/scripts/quest/q35909e.py new file mode 100755 index 0000000..e8d7cb7 --- /dev/null +++ b/scripts/quest/q35909e.py @@ -0,0 +1,13 @@ +# id 35909 (Helping Hand 2), field 100051000 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Wow. You already brought all the Pudgy Flower Stems? That was really fast! You must hit a lot harder than you look like you do!") +sm.sendSay("#face0#Pudgy Flower Stems are pretty tough and fibrous, but through the seeeeeecret method passed down among the Karuppa, they become part of the formula for the mystical Wunderlixir!") +sm.sendSay("#face0#At the end of the festival, we all share a drink of the Wunderlixir as we wish for the health and fortitude of everyone in town. Would you like to try some too? It has a rather bitter aftertaste, but...so do a lot of healthy things, heehee.") +sm.sendSay("#face2#If you want to drink your very own bottle of Wunderlixir with us, it'll happen that much sooner with your help, so just talk with me again whenever you're ready.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#(They share the Wunderlixir as part of their festival...?)#k") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q35909s.py b/scripts/quest/q35909s.py new file mode 100755 index 0000000..1dd2154 --- /dev/null +++ b/scripts/quest/q35909s.py @@ -0,0 +1,9 @@ +# id 35909 (Helping Hand 2), field 100051000 +sm.setSpeakerID(1013300) # Brie +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +res = sm.sendAskAccept("#face0#We need #b#i4036525# #t4036525##k #bx10#k, which you can get from #r#o2300201#s#k.\r\nPudgy Flowers live in the #r#m100051013##k.") +sm.setSpeakerType(3) +sm.sendNext("#face2#I'll leave it to you then, brave Explorer! Still, um... Pudgy Flowers might look like a bunch of lily-stemmed pushovers, but they do have spiky thorns, so be careful not to get pricked, okay?") +sm.startQuest(parentID) diff --git a/scripts/quest/q35910e.py b/scripts/quest/q35910e.py new file mode 100755 index 0000000..18bcc07 --- /dev/null +++ b/scripts/quest/q35910e.py @@ -0,0 +1,16 @@ +# id 35910 (Helping Hand 3), field 100051000 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face2#Ooooh, those look like Toxiblossom Leaves. I'll take them, thank you! It might seem counterintuitive to make a purifying elixir out of something laced with poison, but the poison itself is neutralized by the preparation process. Pretty neat, huh?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#(These ingredients are weird, but they don't seem miraculous or anything. Can they really make a legendary medicinal tonic out of this stuff? Maybe the power is in the steps of the recipe itself.)") +sm.sendSay("#face0#I'm curious. How exactly do you mix all these ingredients?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#You may have seen a stone mortar and pestle in the forest outside town. Those have been handed down through the line of chiefs for generations, and that's what we use to grind up everything to make the Wunderlixir.") +sm.sendSay("#face2#It looks like all the preparations for the festival are done. Just let me run one last check to make sure I didn't forget anything.") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) diff --git a/scripts/quest/q35910s.py b/scripts/quest/q35910s.py new file mode 100755 index 0000000..b28c4db --- /dev/null +++ b/scripts/quest/q35910s.py @@ -0,0 +1,9 @@ +# id 35910 (Helping Hand 3), field 100051000 +sm.setSpeakerID(1013300) # Brie +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +res = sm.sendAskAccept("#face0#Next on the list, we're gonna need #b#i4036526# #t4036526##k x#b10#k, and you can get those from #r#o2300202#s#k.\r\nToxiblossoms live in #r#m100051013##k.") +sm.setSpeakerType(3) +sm.sendNext("#face2#I'll leave it in your capable hands, then. By the waaaaay, Toxiblossoms are known for their poisonous pollen, but as long as you don't breathe it in, you should be fine. I'll bet someone as strong as you could fight for fifteen minutes without breathing!") +sm.startQuest(parentID) diff --git a/scripts/quest/q35911e.py b/scripts/quest/q35911e.py new file mode 100755 index 0000000..8808560 --- /dev/null +++ b/scripts/quest/q35911e.py @@ -0,0 +1,14 @@ +# id 35911 (Safe and Secure), field 100051000 +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Brie says she's got everything ready on her end.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013352) # Gooda +sm.sendSay("#face0#Oho! Looks like she got things squared away earlier than expected thanks to your help. Now, let's gather everyone in town together and let the ceremony commence.") +sm.sendSay("#face0#We traditionally hold this part of the festival on Mortargrind Hill. I'll gather the townsfolk and we'll head over. You can join us whenever you're ready.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#(Aaaaagh, I can't hold back any longer! I HAVE TO KNOW how it works! I'm gonna get there before everyone else and examine that stone mortar and pestle myself!\r\n\r\n #r *You'll be automatically moved to the quest map.#k") +sm.warp(910090307) diff --git a/scripts/quest/q35911s.py b/scripts/quest/q35911s.py new file mode 100755 index 0000000..48922c2 --- /dev/null +++ b/scripts/quest/q35911s.py @@ -0,0 +1,7 @@ +# id 35911 (Safe and Secure), field 100051000 +sm.setSpeakerID(1013300) # Brie +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +res = sm.sendAskAccept("#face2#It looks like everything's been taken care of and we can begin the ceremony. Can you go let the chief known we're ready?") +sm.startQuest(parentID) diff --git a/scripts/quest/q35912s.py b/scripts/quest/q35912s.py new file mode 100755 index 0000000..6d22820 --- /dev/null +++ b/scripts/quest/q35912s.py @@ -0,0 +1,48 @@ +# id 35912 (Hero, Hero!), field 100051020 +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face6#I thought everyone ran away. What are you still doing here?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#I was hiding and I saw that thing you pulled out to show the chief. Does that relic have some connection to the ruins outside of town?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#And what if it does?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face1#We Karuppa are scared of those ruins, and the sound that sometimes comes from them. It's a weird sound...like loud crash and a yawning drone you can hear clearly even in town.") +sm.sendSay("#face1#It feels like it gets a bit louder every time, and more ominous, but all we can do is carry on and put all our hearts into our festivals.") +sm.sendSay("#face1#No one's ever ventured INSIDE the ruins to find out what's going on in there or what causes the noise. They're scared...and so am I.") +sm.sendSay("#face1#Eeeep! Just thinking about it is giving me the heebie-jeebies! Still, we can't just let things go on like this. I feel like it's only a matter of time before it turns from just scary to really dangerous.") +sm.sendSay("#face1#Someone's gotta step up and DO something. We're too caught up in our own fear. But not you. You're brave, and strong, too.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#I have a feeling I know where this is going, but...just tell me what you're getting at.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face1#Okay, so... What I'm trying to say is, if you wouldn't mind a scaredy-cat like me, could you maybe...") +sm.sendSay("#face1#...take me along as you investigate your relic?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#You? What sort of help would you be?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#W-well, I'm good at...helper-y stuff. I can't fight or anything, but if you need anything from in or around the town, you can count on me.") +sm.sendSay("#face0#Plus, there's someone I can introduce you to. He's kind of a weirdo, but he's smart!") +sm.sendSay("#face0#His name is Gorgonz. He's a kooky guy who hangs around outside town and observes the ruins. He collects weird odds and ends too, but I don't know what for.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013307) # Brie +res = sm.sendAskAccept("#face0#If we find him, he might be able to answer a few of your questions. Of course, I'll handle the introductions.") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#(I never thought of myself as someone who'd do the whole hero/sidekick thing, but... If this can net me a few good leads, then sure, I'll play along.)") +sm.sendSay("#face6#Moving in a group makes it harder to avoid detection. But once the investigation's done, you're not tagging along after that. Got it?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face2#So you're saying you WILL take me then, right? I just know we'll make a great team!") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/37") diff --git a/scripts/quest/q35913s.py b/scripts/quest/q35913s.py new file mode 100755 index 0000000..e2f7ca8 --- /dev/null +++ b/scripts/quest/q35913s.py @@ -0,0 +1,9 @@ +# id 35913 (Gorgonz's Home), field 100051020 +sm.setSpeakerID(1013307) # Brie +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +res = sm.sendAskAccept("#face2#Heehee. Come on, I'll take you to meet Gorgonz. His house isn't far.") +sm.startQuest(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h1;17=h0;09=h0;19=h0") diff --git a/scripts/quest/q35914e.py b/scripts/quest/q35914e.py new file mode 100755 index 0000000..b916174 --- /dev/null +++ b/scripts/quest/q35914e.py @@ -0,0 +1,16 @@ +# id 35914 (Ancient Compass), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#Aw crap. I totally forgot. Because of those loud noises coming from the ruins recently, the compass stopped working. The vibrations just shook a whole mess of pieces right off it.") +sm.sendSay("#face0#It's too bad. That compass was pretty handy at locating things. But not to worry - this has happened before and I've managed to get it in good working order again. We'll just have to find the missing parts and plug them back into the compass.") +sm.sendSay("#face0#I've been...kinda busy lately, so I haven't managed to find them all yet. You'll need to get the last couple if you wanna use the compass. *cough*.") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#*sigh* Fine. So where are these missing parts, then?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendSay("#face0#W-well...") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") diff --git a/scripts/quest/q35914s.py b/scripts/quest/q35914s.py new file mode 100755 index 0000000..e9ea99d --- /dev/null +++ b/scripts/quest/q35914s.py @@ -0,0 +1,16 @@ +# id 35914 (Ancient Compass), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#See, there's this compass I use whenever I'm searching for something. If you place an object connected to the thing you're looking for near it, it'll tell you the direction you need to go to reach it.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013310) # Gorgonz +res = sm.sendAskAccept("#face0#Curious? Just follow me if you wanna see. It's set up out back. Not exactly a long walk.") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#(That sure sounds convenient. I wonder where in the ruins it might lead me if I placed the relic on it...)") +sm.startQuest(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h1;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h0;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") diff --git a/scripts/quest/q35915e.py b/scripts/quest/q35915e.py new file mode 100755 index 0000000..71c70fc --- /dev/null +++ b/scripts/quest/q35915e.py @@ -0,0 +1,8 @@ +# id 35915 (Gorgonz Order 1), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#What's this? You already brought those Pottery Shards? Lessee...one, two... Yep, everything I wanted is here. I've got no doubt these are from ancient times.") +sm.sendSay("#face1#H-Hey, what's with that face? I can practically see the words 'Will this guy just shut up and tell me where those parts are?' floating in a bubble over your head. But we're not quite done yet, my talented new associate, because I've still got one more favor to ask of you.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q35915s.py b/scripts/quest/q35915s.py new file mode 100755 index 0000000..c94cc14 --- /dev/null +++ b/scripts/quest/q35915s.py @@ -0,0 +1,14 @@ +# id 35915 (Gorgonz Order 1), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#I'm willing to share this useful and rather timely information...IF you'll do a little favor for me. ...What? Don't make that face. It won't be that hard. Probably.") +sm.sendSay("#face0#Brie probably mentioned that I collect antiques. It's sort of a hobby of mine, or at least a way to pretend all the junk I keep lying around serves some sort of higher purpose. But ever since the compass broke, I haven't had much luck tracking down new pieces for my collection.") +sm.sendSay("#face1#That means I've gotta resort to...other methods to feed my collection. I've heard that the monsters nearby sometimes drop antiques if you beat them up, hint-hint.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013311) # Gorgonz +res = sm.sendAskAccept("#face1#So yeah, if you're feeling spry, could you bring me #b#i4036527# #t4036527##k x#b15#k? You should be able to get 'em from #r#o2300203#s#k. Hoppin' Sprouts are monsters I've often spotted in the sensibly named #r#m100051022##k.") +sm.setSpeakerType(3) +sm.sendNext("#face0#Those pots the Hoppin' Sprouts like to bop around in are actually valuable antiques. Even the broken pieces make nice additions to my collection. Anyhow, I'm leaving things in your capable hands.") +sm.startQuest(parentID) diff --git a/scripts/quest/q35916e.py b/scripts/quest/q35916e.py new file mode 100755 index 0000000..399474a --- /dev/null +++ b/scripts/quest/q35916e.py @@ -0,0 +1,11 @@ +# id 35916 (Gorgonz Order 2), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#Oh, you're back. And hey, I'm already feeling more peaceful. Lessee...one, two... Yep, everything I wanted is here. Ahhh, can you smell that? *sniff* *sniff* Yeah, that's the good stuff. The scent of ancient times.") +sm.sendSay("#face1#You're so good at this, there are a few other things I'd like to cajole you into helping me with, but... Being the gracious gent I am, I wouldn't want to impose, so this'll do.") +sm.sendSay("#face0#The compass parts you're looking for fell into the Creepy Crawly Copse area of the forest. I remember watching it happen. The ground shook my entire house like a jealous lover. I was afraid my roof was gonna fall in on me.") +sm.sendSay("#face0#There are three pieces that are still missing. If you go pokin' around in the Creepy Crawly Copse, I'm betting they'll turn up sooner or later.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h1;19=h0") diff --git a/scripts/quest/q35916s.py b/scripts/quest/q35916s.py new file mode 100755 index 0000000..83ecb99 --- /dev/null +++ b/scripts/quest/q35916s.py @@ -0,0 +1,9 @@ +# id 35916 (Gorgonz Order 2), field 100051030 +sm.setSpeakerID(1013311) # Gorgonz +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +res = sm.sendAskAccept("#face0#What I'd like this time is #b#i4036528# #t4036528##k x#b15#k, which you should be able to snag from #r#o2300204#s#k. Chargin' Sprouts are ornery monsters that often ride around in the #r#m100051021##k.") +sm.setSpeakerType(3) +sm.sendNext("#face0#Those terracotta figures the Chargin' Sprouts ride around on are actually ancient incense burners. If you heat the ashes inside them, they'll give off a scent that really calms the mind. I can't wait to calm MY mind, hint-hint.") +sm.startQuest(parentID) diff --git a/scripts/quest/q35917e.py b/scripts/quest/q35917e.py new file mode 100755 index 0000000..fba1ca2 --- /dev/null +++ b/scripts/quest/q35917e.py @@ -0,0 +1,11 @@ +# id 35917 (Fragmented Compass), field 100051031 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#W-well, here we are. The Creepy Crawly Copse. As you might've guessed from the name, this area is rich in...bugs, mostly.") +sm.sendSay("#face1#The compass parts may have ended up here, like Gorgonz said, but I'll let you in on a little secret: bugs are gross!") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#(Normally, I'm not one to be put off by a few insects, but...the ones here seem drawn to me. It's gonna be annoying to collect all the compass parts if I have to pick off bugs every couple minutes.)") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q35917s.py b/scripts/quest/q35917s.py new file mode 100755 index 0000000..076b790 --- /dev/null +++ b/scripts/quest/q35917s.py @@ -0,0 +1,15 @@ +# id 35917 (Fragmented Compass), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Phew... Sorry he's such a weirdo, pestering you with all those eccentric requests. He's not a bad Karuppa at heart, really.") +sm.sendSay("#face0#Oh, right. We should hurry and look for those compass parts. From here on, I'll guide you there personally.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013309) # Brie +res = sm.sendAskAccept("#face2#Heehee. You'll be able to find the compass parts in a jiffy if you stick with me. I know this forest like the back of my hand. So, are you ready to set out?") +sm.setSpeakerType(3) +sm.sendNext("#face2#Okie dokie. Just follow me! We're off to the Creepy Crawly Copse to bring back those compass parts!") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h1;22=h1;13=h0;23=h1;14=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.startQuest(parentID) diff --git a/scripts/quest/q35918e.py b/scripts/quest/q35918e.py new file mode 100755 index 0000000..5f118fa --- /dev/null +++ b/scripts/quest/q35918e.py @@ -0,0 +1,12 @@ +# id 35918 (Compass Fragment 1), field 100051031 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face2#Wow, you really took charge. Those bugs'll think twice before messing with us now.") +sm.sendSay("#face2#Thanks to you, it looks like their activity has died down a bit. I'll pick up the compass part now.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h1;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h1;23=h1;14=h0;24=h0;15=h0;06=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.sendSay("#face2#Heehee, we've got the first part! Just two parts left, so let's get back to our search.") diff --git a/scripts/quest/q35918s.py b/scripts/quest/q35918s.py new file mode 100755 index 0000000..3446a09 --- /dev/null +++ b/scripts/quest/q35918s.py @@ -0,0 +1,77 @@ +# id 35918 (Compass Fragment 1), field 100051031 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face1#Waaaah! Don't come any closer! ...O-oh, I don't mean YOU; I'm talking to the bugs! Argh... If these Log-a-Rhythmic Bugs keep pestering us, there's no way we'll be able to look for those missing parts in peace.") +sm.sendSay("#face1#Okay, so, here's the plan. In order to find and retrieve those compass parts, we're gonna have to do a little bug squashing. And by 'we,' I mean 'you.'") +sm.setSpeakerType(4) +sm.setSpeakerID(1013312) # Brie +res = sm.sendAskAccept("#face1#If we thin their numbers out, maybe they'll stop incessantly thumping those logs and we can have a moment to gather our thoughts. I think we'll get the message across if you take out #r#o2300205##k x#b30#k.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=198;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=199;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=200;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=201;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=202;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=203;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=204;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=205;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=206;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=207;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=208;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=209;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=210;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=211;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=212;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=213;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=214;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=215;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=216;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=217;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=218;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=219;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=220;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=221;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=222;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=223;date=20190708") +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/41") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=224;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=225;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=226;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=227;date=20190708") +sm.createQuestWithQRValue(16700, "count=228;date=20190708") +sm.createQuestWithQRValue(16700, "count=229;date=20190708") +sm.createQuestWithQRValue(16700, "count=230;date=20190708") +sm.createQuestWithQRValue(16700, "count=231;date=20190708") diff --git a/scripts/quest/q35919e.py b/scripts/quest/q35919e.py new file mode 100755 index 0000000..56fe1c7 --- /dev/null +++ b/scripts/quest/q35919e.py @@ -0,0 +1,18 @@ +# id 35919 (Compass Fragment 2), field 100051032 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face2#Wow, you really made short work of them. What a consummate professional!") +sm.sendSay("#face2#Thanks to you, it looks like their activity has died down a bit. I'll pick up the compass part now.") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/42") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h1;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;12=h0;22=h1;13=h0;23=h1;14=h1;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.sendSay("#face2#Heehee. We've got the second part! Now there's just one more piece we need to find.") +sm.sendSay("#face2#Let's go. We're so close to getting that compass back in working order again!") +sm.createQuestWithQRValue(16700, "count=264;date=20190708") +sm.createQuestWithQRValue(16700, "count=265;date=20190708") +sm.createQuestWithQRValue(16700, "count=266;date=20190708") diff --git a/scripts/quest/q35919s.py b/scripts/quest/q35919s.py new file mode 100755 index 0000000..ad321ce --- /dev/null +++ b/scripts/quest/q35919s.py @@ -0,0 +1,72 @@ +# id 35919 (Compass Fragment 2), field 100051032 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face1#Ooooh! We found the next part of the compass! Unfortunately, it looks like there are just as many bugs here as there were near the last part.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013313) # Brie +res = sm.sendAskAccept("#face1#I think we could enjoy some quality part-picking time if we just culled their numbers a bit. Get out there and make sure to beat the stuffing out of #r#o2300206##k x#b30#k!") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=232;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=233;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=234;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=235;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=236;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=237;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=238;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=239;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=240;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=241;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=242;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=243;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=244;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=245;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=246;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=247;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=248;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=249;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=250;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=251;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=252;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=253;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=254;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=255;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=256;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=257;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=258;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=259;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=260;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=261;date=20190708") +sm.createQuestWithQRValue(16700, "count=262;date=20190708") +sm.createQuestWithQRValue(16700, "count=263;date=20190708") diff --git a/scripts/quest/q35920e.py b/scripts/quest/q35920e.py new file mode 100755 index 0000000..35e058e --- /dev/null +++ b/scripts/quest/q35920e.py @@ -0,0 +1,19 @@ +# id 35920 (Compass Fragment 3), field 100051034 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face2#Wow, you got everything I need! Now, just let me put this wood and flint to work with a few other combustible ingredients I gathered and we should have a passable explosive.") +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(910090309) diff --git a/scripts/quest/q35920s.py b/scripts/quest/q35920s.py new file mode 100755 index 0000000..3ff332a --- /dev/null +++ b/scripts/quest/q35920s.py @@ -0,0 +1,12 @@ +# id 35920 (Compass Fragment 3), field 100051034 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#I don't know how strong the blast would be, but there ARE a couple things I've used when making fireworks for the town festivals.") +sm.sendSay("#face0#Let's see, what were those again...? Oh, right. Dry firewood and flint, the classic fire-starting basics. Fortunately, we can find plenty of both around here.") +sm.sendSay("#face0#I'm sure you noticed that the Log-a-Rhythmic Bugs and Sparkinstone Bugs we've seen have been carrying a lot of rocks and a lot of logs.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013314) # Brie +res = sm.sendAskAccept("#face0#What I need you to do is bring me back #b#i4036529# #t4036529##k x#b5#k and #b#i4036530# #t4036530##k x#b5#k.You remember where the Log-a-Rhythmic bugs are, right? You just squished some not too long ago.") +sm.startQuest(parentID) diff --git a/scripts/quest/q35921e.py b/scripts/quest/q35921e.py new file mode 100755 index 0000000..c0abe4a --- /dev/null +++ b/scripts/quest/q35921e.py @@ -0,0 +1,72 @@ +# id 35921 (The Wait for Daybreak), field 100051030 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.zoomCamera(0, 1500, 0, 1504, -77) +sm.forcedFlip(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(549) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0##b(Noon is still several hours away, and it occurs to you that it's been some time since you last rested. Ever since you were afflicted with the relic's curse, you've found it difficult to have restful sleep.)#k") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendNext("#face6##b(Even now, you can feel your life slowly ebbing away, and a small pain where the curse's sigil marks your body. Though small, you can feel its strength grow with each passing day.)#k") +sm.sendSay("#face0##b(You can't help but wonder what Athena Pierce would think if she saw you in your present state. Would she chastise you as a foolish student whose insatiable curiosity brought disaster upon yourself?)#k") +sm.sendSay("#face0##b(You remember boasting confidently that you'd embark on an amazing adventure; that you'd always follow the path less taken. Right now, though, you feel more lost than you can ever remember feeling. How could you stand tall and look your teacher in the eye in the state you're in?)#k") +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face2#Heeeey, what'cha thinkin' about?") +sm.spawnNpc(1013350, 1216, -119) +sm.showNpcSpecialActionByTemplateId(1013350, "summon", 0) +sm.moveNpcByTemplateId(1013350, False, 150, 150) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Bwah--!") +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#I was playing by myself, but then I saw your face. You looked so sad that I had to come over and see if you're okay...") +sm.sendSay("#face0#Sorry for interrupting you when you were resting. It's just...") +sm.sendDelay(500) +sm.sendNext("#face1#Well... I kinda know how you must feel. I had a depressing day not too long ago, and your face just now made me think of how I felt then. It was like all this weight was pressing down on me.") +sm.sendSay("#face1#B-but I'm not trying to say that you and I are the same. You're so brave and smart, but I'm just a scaredy cat.") +sm.sendSay("#face0#S-so what I'm trying to say is, everyone has times when they feel down. When I feel blue, I like looking at pretty little flowers. I think to myself, if they can make it through times like these, then so can I. Heehee.") +sm.sendSay("#face2#I don't know why that cheers me up, but it usually does the trick. Heehee... I figured maybe you could use a little pick-me-up too, so I brought one for you.") +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/Fever", 100) +sm.onLayer(0, "01", -20, 65, -1200000, "Effect/Direction22.img/effect/PF_flower/0", 4, False, -1, False) +sm.sendDelay(1500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#...") +sm.offLayer(300, "01", False) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#Well, that took way too much effort.") +sm.sendSay("#face0#Up and at 'em, you two. I've finally fixed the ancient compass!") +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face2#Gorgonz is already done with the repairs? I didn't even realize we'd been resting that long! Come on, let's go see what it can do!") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/45") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;21=h0;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h1;19=h0") diff --git a/scripts/quest/q35921s.py b/scripts/quest/q35921s.py new file mode 100755 index 0000000..59730ef --- /dev/null +++ b/scripts/quest/q35921s.py @@ -0,0 +1,19 @@ +# id 35921 (The Wait for Daybreak), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendNext("#face0#Eeeey, look who's back. I figured it'd be too difficult to get those compass parts, so-- Wait, what? You really managed to get them all?! I'm speechless! ") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#Yes, I think I'd appreciate some speechlessness as you get to work on fixing that compass without delay.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +sm.sendSay("#face0#Yeah, yeah, don't nag me. Even when I fix it, the compass needs to be exposed to sunlight to work, so it's not like we'll get immediate results.") +sm.sendSay("#face0#We've got plenty of time until noon rolls around, so I just need to have it fixed up by then. Gah, more work.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013311) # Gorgonz +res = sm.sendAskAccept("#face0#Anyway, just give me those pieces and I'll get this thing back in working order. As for you two, get some rest. I'll call you when I'm done.") +sm.startQuest(parentID) +sm.setSpeakerType(3) +sm.sendNext("#face0#Gotta put that compass back to-geeee-ther!\r\n'Cause we can't miss that sunny weaaaa-ther!") diff --git a/scripts/quest/q35922s.py b/scripts/quest/q35922s.py new file mode 100755 index 0000000..096b8bb --- /dev/null +++ b/scripts/quest/q35922s.py @@ -0,0 +1,7 @@ +# id 35922 (Working the Compass), field 100051030 +sm.setSpeakerID(1013311) # Gorgonz +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013351) # Gorgonz +res = sm.sendAskAccept("#face0#Soon, the hour of the greatest sunlight will be upon us. That's...noon, in case you were nodding off when I explained it last time. How about it? Are you prepared?") +sm.warp(910090310) diff --git a/scripts/quest/q35923e.py b/scripts/quest/q35923e.py new file mode 100755 index 0000000..7aad91e --- /dev/null +++ b/scripts/quest/q35923e.py @@ -0,0 +1,7 @@ +# id 35923 (Compass Directions), field 100051040 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#I think you might be right. I don't like all this noise and shaking one bit, but we need to get to the bottom of this, so in we go.\r\n\r\n #r *You will be automatically moved to the quest map.#k") +sm.warp(910090311) diff --git a/scripts/quest/q35923s.py b/scripts/quest/q35923s.py new file mode 100755 index 0000000..0a24398 --- /dev/null +++ b/scripts/quest/q35923s.py @@ -0,0 +1,19 @@ +# id 35923 (Compass Directions), field 100051030 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Ehehe... Having said that, I'd be lying if I said I hadn't thought about bailing too. I've never dared to get so close to the ruins before.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013309) # Brie +res = sm.sendAskAccept("#face0#Still... I can't just give up after coming this far. I decided I was gonna do something about this problem, and I mean to see it through.") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face6#You do know that if you end up slowing me down, I'm just gonna to leave you behind, right?") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#And I'm going to do my best to make sure that never happens, because I need to find out what's causing that terrible noise and save our village!") +sm.startQuest(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;21=h0;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;21=h0;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h1") diff --git a/scripts/quest/q35924e.py b/scripts/quest/q35924e.py new file mode 100755 index 0000000..2839e6c --- /dev/null +++ b/scripts/quest/q35924e.py @@ -0,0 +1,9 @@ +# id 35924 (Strange Sounds 1), field 100051041 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Phew. The path is finally clear. We should be able to get to wherever that sound is coming from now, so just follow me.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;21=h0;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h0;26=h1;08=h0;17=h0;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;11=h1;02=h1;21=h0;12=h0;22=h1;13=h0;23=h1;14=h0;24=h0;15=h0;06=h0;25=h0;07=h0;16=h1;26=h1;08=h0;17=h0;09=h0;19=h0") diff --git a/scripts/quest/q35924s.py b/scripts/quest/q35924s.py new file mode 100755 index 0000000..e677647 --- /dev/null +++ b/scripts/quest/q35924s.py @@ -0,0 +1,74 @@ +# id 35924 (Strange Sounds 1), field 100051041 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face1#Uh-oh. A bunch of stone sentries are blocking the way. I don't think they've-- Oh wait, no, they've definitely noticed us. Waaah! Why are these things still operational?!") +sm.setSpeakerType(4) +sm.setSpeakerID(1013315) # Brie +res = sm.sendAskAccept("#face1#As things stand, we can't continue on without doing something about those sentries. Hmm... I think if you clear out around #b50#k #r#o2300207##k, we should be able to make it through.") +sm.setSpeakerType(3) +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#Just wait here. I should be able to make short work of those boisterous blocks.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=293;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=294;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=295;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=296;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=297;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=298;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=299;date=20190708") +sm.startQuest(parentID) +sm.createQuestWithQRValue(16700, "count=300;date=20190708") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/47") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q35925e.py b/scripts/quest/q35925e.py new file mode 100755 index 0000000..faf6675 --- /dev/null +++ b/scripts/quest/q35925e.py @@ -0,0 +1,11 @@ +# id 35925 (Strange Sounds 2), field 993017200 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Phew. The path is finally clear. We should be able to get to wherever that sound is coming from now, so just follow me.") +sm.completeQuestNoCheck(parentID) +sm.startQuest(11620) +sm.createQuestWithQRValue(15710, "lasttime=19/07/08/13/58") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;02=h1;11=h1;12=h0;21=h0;13=h0;22=h1;14=h0;23=h1;06=h0;15=h0;24=h0;16=h0;07=h0;25=h0;17=h0;08=h0;26=h1;09=h0;19=h0") +sm.createQuestWithQRValue(35948, "00=h0;10=h0;02=h1;11=h1;12=h0;21=h0;13=h0;22=h1;14=h0;23=h1;06=h0;15=h0;24=h0;16=h0;07=h0;25=h0;17=h1;08=h0;26=h1;09=h0;19=h0") diff --git a/scripts/quest/q35926e.py b/scripts/quest/q35926e.py new file mode 100755 index 0000000..fcb7aa8 --- /dev/null +++ b/scripts/quest/q35926e.py @@ -0,0 +1,17 @@ +# id 35926 (Glowpod), field 100051043 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Oh, you're back already. What are those things you're holding? Aren't those from the plants that were growing on top of the Ruins Sentinels?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face0#They have a soft glow normally, but they flare up if you give them a good bop, like this.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Huh. You know, that just might work, even underwater. But we need to be sure, so how about dropping one in the water as a test?") +sm.setParam(548) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3##b(You picked up a glowpod and dropped it into the pool. The soft light illuminated the water for a good while before finally dimming and growing dark.)#k") +sm.sendSay("#face0#(These don't last long enough that I can reach the bottom with just one. I'll have to take all I've gathered and hope for the best.)") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q35926s.py b/scripts/quest/q35926s.py new file mode 100755 index 0000000..bcb266a --- /dev/null +++ b/scripts/quest/q35926s.py @@ -0,0 +1,15 @@ +# id 35926 (Glowpod), field 100051043 +sm.setSpeakerType(3) +sm.setParam(548) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#(Those Ruins Sentinels we passed on the way here had some sort of luminous plant growing on their heads. If I got enough of those bulbs, I might be able...)") +sm.setSpeakerType(4) +sm.setSpeakerID(1013317) # Brie +res = sm.sendAskAccept("#face3#(Okay. We'll have to double back a bit to #m100051042#. I'll grab 10 of those #i4036531# #t4036531# from the #o2300208# monsters and we'll see how much light they give off when bunched together.)") +sm.setSpeakerType(3) +sm.sendNext("#face0#There's something I want to check out. Wait for me here.") +sm.setParam(36) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendSay("#face0#Of course. It looks like you've already come up with a solution, just like I knew you would. I'll be waiting, then.") +sm.startQuest(parentID) diff --git a/scripts/quest/q35927s.py b/scripts/quest/q35927s.py new file mode 100755 index 0000000..8a950f0 --- /dev/null +++ b/scripts/quest/q35927s.py @@ -0,0 +1,7 @@ +# id 35927 (Lighting the Way), field 100051043 +sm.setSpeakerID(1013317) # Brie +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +res = sm.sendAskAccept("#face0#Let's activate the first glowpod and swim down. Aaaah... Deep breaths! It'll be fine! I'm with a professional Explorer! ...Still, it never hurts to be careful!\r\n\r\n #r *You'll be automatically moved to the quest map.#k") +sm.warp(910090312) diff --git a/scripts/quest/q35928s.py b/scripts/quest/q35928s.py new file mode 100755 index 0000000..196b7be --- /dev/null +++ b/scripts/quest/q35928s.py @@ -0,0 +1,67 @@ +# id 35928 (Soulful Discourse), field 100051044 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.setSpeakerID(1013318) # Soul +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013360) # Soul +res = sm.sendNext("#face0#Ahh... I can feel it. A heart drawn by confusion, driven by quiet desperation. The answers you seek are here.\r\n\r\n#b#L0# Ask about the relic and the curse sigil.#l") +sm.blind(True, 200, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.sendDelay(500) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.onLayer(500, "00", 0, -85, -12, "Effect/Direction22.img/effect/PF_past/0", 4, False, -1, False) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.sendNext("#face0#Long ago, the ancient Karuppa that resided in this land fashioned from the wood of a holy tree a sacred icon to venerate in worship.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#Hey, I recognize that design...") +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013360) # Soul +sm.sendNext("#face0#As you suspect, that sacred totem is the relic now in your possession. Once, it served as a symbol of enlightened benevolence that healed the sick and gave guidance to those who has lost their way.") +sm.sendSay("#face0#Time passed, and as order was born into this world, the power of the relic gradually began to wane.") +sm.sendSay("#face0#Those who knew of the relic's existence lived their lives and passed on, and as fewer and fewer remembered the ancient ways, the relic came to be regarded as a legend.") +sm.sendSay("#face0#Perhaps it would have been better that way; to eventually be forgotten entirely...") +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission3", 100) +sm.onLayer(500, "01", 0, -85, -12, "Effect/Direction22.img/effect/PF_past/1", 4, False, -1, False) +sm.sendDelay(1000) +sm.sendNext("#face0#However, hundreds of years ago, a man clad in black robes came to this place and worked his fell spellcraft upon the relic.") +sm.sendSay("#face0#When his hex had been woven, he returned the relic to its resting place and swiftly departed. From that day forward, the relic began to be corrupted by negative energies.") +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendSay("#face3#A mysterious man in black robes?") +sm.sendDelay(500) +sm.offLayer(300, "00", False) +sm.offLayer(300, "01", False) +sm.playSound("Sound/SoundEff.img/blackHeaven/secretmission4", 100) +sm.blind(False, 0, 0, 0, 0, 1300) +sm.sendDelay(1600) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(1013360) # Soul +sm.sendNext("#face0#The relic in your possession retains both its original nature and its corrupted state. You have surely felt the stirrings of both within you.") +sm.sendSay("#face0#The corrupted power has already become one with the relic, and cannot simply be made to disappear. It can, however, be suppressed.") +sm.sendSay("#face0#The only way to do so, however, is for you to become the true inheritor of the relic. Only then will its corruption be quelled.") +sm.sendDelay(500) +sm.sendNext("#face0#It is said that a superior tool chooses a worthy owner. The relic, though no mere tool, will respond to your mastery and allow you to draw out its hidden powers.") +sm.sendSay("#face0#Wander, explore, and grow in strength and knowledge. When the time is right, the relic shall guide you.") +sm.sendDelay(500) +sm.sendNext("#face0#I shall pray that you grow in wisdom, to see the path, and in strength, to walk it without fear.") +sm.blind(True, 255, 240, 240, 240, 1300) +sm.sendDelay(1600) +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#The path...") +sm.sendDelay(500) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(35948, "00=h0;10=h0;02=h1;11=h1;12=h0;21=h0;13=h0;22=h1;14=h0;23=h1;06=h0;15=h0;24=h0;16=h0;07=h0;25=h0;17=h0;08=h0;26=h1;09=h0;19=h1") +sm.warp(100051040) diff --git a/scripts/quest/q35929s.py b/scripts/quest/q35929s.py new file mode 100755 index 0000000..1df4ee4 --- /dev/null +++ b/scripts/quest/q35929s.py @@ -0,0 +1,43 @@ +# id 35929 (Assuaged Fears), field 100051040 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(1013350) # Brie +sm.sendNext("#face0#Well... I guess this is it, then. Now that you found the answer you were looking for, I suppose you'll be on your way, right? I know, I know. I promised I wouldn't be clingy.") +sm.sendSay("#face0#But wherever your travels take you, I hope you'll be safe. I may not be the bravest, but thanks for letting me come on this adventure with you.") +sm.setSpeakerType(4) +sm.setSpeakerID(1013319) # Brie +res = sm.sendAskAccept("#face0#Oh! If you ever feel like coming back to visit our little Karuppa village sometime, you can use this skill to return there whenever you like.") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.progressMessageFont(3, 20, 4, 0, "You acquired the 'Return to Partem' skill.") +sm.sendDelay(500) +sm.setSpeakerType(3) +sm.setParam(37) +sm.sendNext("#face0#It'd be great to see you again someday. If you ever feel like dropping by, you'll always have a friend in me.") +sm.sendSay("#face2#I'm going back to the village to tell all the Karuppa about everything I heard and saw in the ruins. Will they believe me? Who knows? ...Though I guess Gorgonz might. He's weird like that.") +sm.sendSay("#face0#I've still got a long way to go before I can start feeling confident. What do you think? Do you think I'll be able to be brave like you someday?") +sm.sendSay("#face0#Ack... Just listen to me, rambling on. I shouldn't keep you any longer. Goodbye, for now!") +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.sendDelay(500) +sm.setParam(549) +sm.setInnerOverrideSpeakerTemplateID(1013358) # Pathfinder +sm.sendNext("#face0#I guess she said everything she wanted to say. I'll see you 'round, kid. And thanks for everything.") +sm.sendDelay(1000) +sm.sendNext("#face0#Anyway...") +sm.sendSay("#face1#(It sounds like there's no way to completely rid myself of this curse. That leaves me just one option: I'm gonna have to rise to the occasion and prove myself worthy of the relic's full power.)") +sm.sendSay("#face0#('Wander, explore, and grow in strength and knowledge,' huh? I guess now that I know I can at least suppress the curse's effects, there's nothing stopping me from chasing after the next adventure.)") +sm.sendDelay(500) +sm.sendNext("#face6#(Still, that story about a guy in a black robe using weird magic on the relic worries me. And the voice was awfully tight-lipped after it told me about the nature of the relic's power.)") +sm.sendSay("#face0#(Maybe if I can master the relic's powers, I can get the voice to talk to me again. But until then, it looks like I'm on my own as far as figuring out how it works.)") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.warp(910090314) diff --git a/scripts/quest/q37151s.py b/scripts/quest/q37151s.py new file mode 100755 index 0000000..9fee5fe --- /dev/null +++ b/scripts/quest/q37151s.py @@ -0,0 +1,16 @@ +# id 37151 ([Elodin] Anne's Plea for Help), field 101082000 +sm.setSpeakerID(1012110) # Anne +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1012110) # Anne +sm.sendNext("#fs10#Hello? Excuse me...") +sm.setParam(2) +sm.sendSay("Who just called me?") +sm.setParam(4) +sm.sendSay("You can hear me? Good!") +sm.sendSay("I'm Anne! I'm here in Ellinia with my mom, Dr. Betty, while she conducts research.") +sm.sendSay("But I need some help. Would you hear me out?") +res = sm.sendAskYesNo("If you're willing to help, please visit me.\r\n#r(If you accept, you'll automatically travel to Anne in Ellinia.)#k\r\n\r\n#b(The #rSecret Forest of Elodin#b is a special theme dungeon. It has a max level of #rLv. 59#b, and quest EXP and monsters near your level will be provided accordingly.)") +sm.startQuest(parentID) +sm.setParam(5) +sm.sendNext("I'm waiting for you here in Ellinia.") +sm.warp(101000000) diff --git a/scripts/quest/q37152s.py b/scripts/quest/q37152s.py new file mode 100755 index 0000000..c3462e0 --- /dev/null +++ b/scripts/quest/q37152s.py @@ -0,0 +1,8 @@ +# id 37152 ([Elodin] Anne's Nightmares), field 101000000 +sm.setSpeakerID(1012110) # Anne +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1012110) # Anne +sm.sendNext("The reason I called you is, well...") +sm.sendSay("Everything started out fine. It was a normal day.") +sm.sendSay("I was playing with my paper airplane...") +sm.warp(910143000) diff --git a/scripts/quest/q37154s.py b/scripts/quest/q37154s.py new file mode 100755 index 0000000..dd50d17 --- /dev/null +++ b/scripts/quest/q37154s.py @@ -0,0 +1,12 @@ +# id 37154 ([Elodin] Ask the Fairies 2), field 101000000 +sm.setSpeakerID(1032101) # Rowen the Fairy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1032101) # Rowen the Fairy +sm.sendNext("Ah, I see. Anxious to explore someplace new, huh?") +sm.sendSay("Well, it doesn't get much sun, so that's why we don't visit.") +sm.sendSay("I'm sure there are fairies #esomewhere#n that like that kind of place, but I'm not one of them.") +sm.sendSay("Besides, I've heard rumors of weird noises coming from there lately. I mean, I #edoubt#n anything bad would happen, but you know...") +sm.sendSay("Why bother with a place like that when you don't need to?") +sm.sendSay("Now stop worrying about that dark, melancholy forest and start enjoying Ellinia. It's so much better here.") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37156s.py b/scripts/quest/q37156s.py new file mode 100755 index 0000000..d800125 --- /dev/null +++ b/scripts/quest/q37156s.py @@ -0,0 +1,70 @@ +# id 37156 ([Elodin] Nature's Roadblocks 1), field 101081000 +sm.setSpeakerType(3) +sm.setParam(2) +sm.sendNext("I don't even know where I'm going, and these brambles aren't helping matters. And what are these dopey looking owls even doing here?") +sm.sendSay("Ow! Which one of you pecked me? I'm gonna punt you so hard you'll end up in the next zone!") +res = sm.sendAskYesNo("That's it! I've gotta clear this all out!") +sm.setParam(3) +sm.sendNext("I'll clear a path, and then I'm gettin' the heck outta here!") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.progressMessageFont(3, 20, 20, 0, "EXP and mesos greatly reduced if hunting monsters beyond your level range.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q37157s.py b/scripts/quest/q37157s.py new file mode 100755 index 0000000..33f03a2 --- /dev/null +++ b/scripts/quest/q37157s.py @@ -0,0 +1,15 @@ +# id 37157 ([Elodin] Nature's Roadblocks 2), field 101081000 +sm.setSpeakerType(3) +sm.setParam(2) +sm.sendNext("How long have I been here?") +sm.sendSay("I feel like I've been going in circles for ages.") +sm.sendSay("And more of these things keep popping up like, well, weeds!") +res = sm.sendAskYesNo("What if I'm stuck here forever?") +sm.setParam(3) +sm.sendNext("I hope I'm going the right way...") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.startQuest(parentID) diff --git a/scripts/quest/q37158s.py b/scripts/quest/q37158s.py new file mode 100755 index 0000000..35e58ce --- /dev/null +++ b/scripts/quest/q37158s.py @@ -0,0 +1,27 @@ +# id 37158 ([Elodin] Forest Witch?!), field 101081300 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(3) +sm.sendNext("She must have gone in that house.") +sm.forcedMove(False, 300) +sm.sendDelay(2500) +sm.sendNext("Hello?") +sm.sendSay("Is anyone here?") +sm.sendSay("Maybe I've been here too long. I must have imagined it.") +sm.sendSay("Let's face it, I'm lost. I'd rather just fess up and ask for directions than hang out here and get into fights with owls.") +sm.sendSay("What now?") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37159e.py b/scripts/quest/q37159e.py new file mode 100755 index 0000000..b9cc130 --- /dev/null +++ b/scripts/quest/q37159e.py @@ -0,0 +1,45 @@ +# id 37159 ([Elodin] Home Invasion), field 101082000 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedInput(4) +sm.blind(True, 180, 0, 0, 0, 1300) +sm.sendDelay(2000) +sm.setSpeakerID(1501000) # ??? +sm.setParam(3) +sm.sendNext("Ugh...") +sm.forcedInput(3) +sm.sendDelay(500) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501012) # ??? +sm.sendNext("Ah, finally back among the living?") +sm.setParam(3) +sm.sendSay("The living? Wh--") +sm.sendSay("Ah! Witch! Ghost! Get away from me!") +sm.createQuestWithQRValue(37150, "00=h2;02=h1") +sm.sendDelay(1000) +sm.createQuestWithQRValue(37150, "00=h3;02=h1") +sm.sendDelay(1000) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501009) # ??? +sm.sendNext("Calm down!") +sm.setParam(3) +sm.sendSay("Wait. Wings? You're a fairy?") +sm.setParam(5) +sm.sendSay("Yes. And if you let me speak, I'll explain.") +sm.sendSay("My name is Ruenna. I live in Ellinia, here in the South Forest.") +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(37150, "00=h0;02=h1") +sm.createQuestWithQRValue(37150, "00=h0;02=h0") +sm.createQuestWithQRValue(37150, "00=h0;01=h1;02=h0") +sm.createQuestWithQRValue(37150, "00=h0;01=h1;02=h0;03=h1") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37159s.py b/scripts/quest/q37159s.py new file mode 100755 index 0000000..ac5ab36 --- /dev/null +++ b/scripts/quest/q37159s.py @@ -0,0 +1,6 @@ +# id 37159 ([Elodin] Home Invasion), field 101081300 +sm.setSpeakerType(3) +sm.setParam(2) +sm.sendNext("W-what is that?") +sm.sendSay("I think I'd rather take my chances in there than stay out here...") +sm.startQuest(parentID) diff --git a/scripts/quest/q37160e.py b/scripts/quest/q37160e.py new file mode 100755 index 0000000..cc9154e --- /dev/null +++ b/scripts/quest/q37160e.py @@ -0,0 +1,52 @@ +# id 37160 ([Elodin] Ruenna's Feathered Nuisance), field 101082000 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.blind(True, 150, 0, 0, 0, 1300) +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedAction(10, 0) +sm.playSound("Sound/Reactor.img/2002001/0/Hit", 200) +sm.sendDelay(1000) +sm.playSound("Sound/SoundEff.img/Elodin/scream_close", 200) +sm.setSpeakerID(1501003) # Baby Bird +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendNext("Squawk!") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("Oh! I thought you were a wimp, not a bully.") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Why did you hit me?!") +sm.setParam(3) +sm.sendSay("Stop making that terrible racket!") +sm.createQuestWithQRValue(37150, "00=h0;01=h1;02=h0;03=h2") +sm.sendDelay(1000) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendNext("How dare you hit my bird?! You! A complete stranger! In #emy#n house! How uncivilized!") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Maybe I should go...") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("And you! I was trying to sleep! I ought to put you in a cage and cover you with a sheet like some ordinary parakeet!") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("*sniffle*") +sm.setParam(3) +sm.sendSay("Why haven't you?") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("As annoying as it can be sometimes, I'm a friend of the forest. I don't want to treat my friends poorly.") +sm.setParam(3) +sm.sendSay("......") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37160s.py b/scripts/quest/q37160s.py new file mode 100755 index 0000000..374077c --- /dev/null +++ b/scripts/quest/q37160s.py @@ -0,0 +1,30 @@ +# id 37160 ([Elodin] Ruenna's Feathered Nuisance), field 101082000 +sm.setSpeakerID(1501001) # Ruenna the Fairy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendNext("You fainted. Clearly you scare easily.") +sm.setParam(2) +sm.sendSay("Don't blame me! You're the one gliding around in a dark forest in a black cloak like a creeper!") +sm.setParam(4) +sm.sendSay("A creeper? I happen to be wearing this cloak for a reason.") +sm.sendSay("It's special. It blocks out sound. I was #etrying#n to sleep when a stranger barged into my home and started shrieking louder than that obnoxious bird.") +sm.setParam(2) +sm.sendSay("Oh, uh...") +sm.sendSay("Sooo... A bird's responsible for that racket, huh?") +sm.setParam(4) +sm.sendSay("That's what I said.") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("It's not a racket. It's the song Ruenna taught me!") +sm.sendSay("Didn't you say this is how you talk to the trees, Ruenna?") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("I said I #esing#n to the trees, not screech! Honestly, you put bats to shame.") +sm.setParam(2) +sm.sendSay("Um...") +sm.setParam(4) +sm.sendSay("I can practically see those trees crying every time you start up!") +sm.setParam(2) +sm.sendSay("Am I interrupting something?") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("But you're the one who taught me! I'm sure the trees are only crying from joy!") +sm.startQuest(parentID) diff --git a/scripts/quest/q37161s.py b/scripts/quest/q37161s.py new file mode 100755 index 0000000..079d131 --- /dev/null +++ b/scripts/quest/q37161s.py @@ -0,0 +1,49 @@ +# id 37161 ([Elodin] Small Issue, Big Misunderstanding), field 101082000 +sm.setSpeakerID(1501001) # Ruenna the Fairy +sm.setParam(3) +sm.sendNext("And... Why is it that you live in total darkness?") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("Oh, well, you see...") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.onLayer(1500, "00", 0, 0, 12, "Effect/Direction21.img/Elodin/birdgrow/0", 4, True, -1, False) +sm.sendDelay(3000) +sm.sendNext("One day in the forest, I discovered a lonely bird crying his eyes out...") +sm.sendDelay(1000) +sm.onLayer(1500, "01", 0, 0, 12, "Effect/Direction21.img/Elodin/birdgrow/1", 4, True, -1, False) +sm.sendDelay(3000) +sm.sendNext("His parents were nowhere to be seen, and I couldn't bear to leave him there. So I brought him home with me.") +sm.sendDelay(1000) +sm.onLayer(1500, "02", 0, 0, 12, "Effect/Direction21.img/Elodin/birdgrow/2", 4, True, -1, False) +sm.sendDelay(3000) +sm.sendNext("Eventually, I taught him how I speak with the trees. I didn't see the harm in it, and it made him so happy...") +sm.sendDelay(1000) +sm.onLayer(1500, "03", 0, 0, 12, "Effect/Direction21.img/Elodin/birdgrow/3", 4, True, -1, False) +sm.sendDelay(3000) +sm.sendNext("But I quickly regretted it.") +sm.sendDelay(2000) +sm.offLayer(500, "00", False) +sm.offLayer(500, "01", False) +sm.offLayer(500, "02", False) +sm.offLayer(500, "03", False) +sm.sendDelay(2000) +sm.blind(True, 150, 0, 0, 0, 1300) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.sendNext("As for living in the dark, well...") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Ruenna said she sings better in the forest's natural light! I want to be just like her!") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("Yes. But I never thought he'd take it so literally.") +sm.setParam(3) +sm.sendSay("......") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37162e.py b/scripts/quest/q37162e.py new file mode 100755 index 0000000..6c844ce --- /dev/null +++ b/scripts/quest/q37162e.py @@ -0,0 +1,23 @@ +# id 37162 ([Elodin] Mood Lighting), field 101082000 +sm.setSpeakerID(1501001) # Ruenna the Fairy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendNext("Did you get everything?") +sm.sendSay("This should be enough for me to turn the lights back on.") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(False, 0, 0, 0, 0, 1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendNext("She's the one who said the forest's light was better.") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("I can hear you.") +sm.setParam(3) +sm.sendSay("......") diff --git a/scripts/quest/q37168s.py b/scripts/quest/q37168s.py new file mode 100755 index 0000000..087d57c --- /dev/null +++ b/scripts/quest/q37168s.py @@ -0,0 +1,17 @@ +# id 37168 ([Elodin] Shimmer Songbird), field 101084400 +sm.createQuestWithQRValue(37150, "00=h0;01=h1;02=h0;03=h2;04=h1") +sm.setSpeakerID(1501004) # Shimmer Songbird +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendNext("It's been a while since Elodin's had visitors. What brings you here?") +sm.setParam(2) +sm.sendSay("I have a request from Ruenna.") +sm.setParam(4) +sm.sendSay("Ah, Ruenna. Such a nice fairy. And she truly loves Elodin.") +sm.sendSay("I miss her visits.") +sm.setParam(2) +sm.sendSay("Well, she needs your help.") +sm.setParam(4) +sm.sendSay("Ah, yes! A little bird told me-- cough\r\nA little bird told me she's gotten herself into some trouble lately.") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37169s.py b/scripts/quest/q37169s.py new file mode 100755 index 0000000..9764ad5 --- /dev/null +++ b/scripts/quest/q37169s.py @@ -0,0 +1,15 @@ +# id 37169 ([Elodin] Thirst Quenching), field 101084400 +sm.setSpeakerID(1501004) # Shimmer Songbird +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendNext("Cough...") +sm.sendSay("I'm sorry. Please excuse me. My throat's been a bit sore ever since... Nevermind.") +sm.setParam(2) +sm.sendSay("Can I help you with something?") +sm.setParam(4) +sm.sendSay("Actually, you can! Would you bring me #i4036505# #r#t4036505##k?") +res = sm.sendAskYesNo("The #b#o3501108#s#k and #b#o3501109#s#k nearby have some. I'd appreciate it if you could fill this small bottle and come back.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.sendNext("Thank you! I think #r9 droplets of Pure Water#k should be enough. \r\n#rDouble-click to open the #i4220196:# #b#t4220196:##k, then drag the #i4036503:# #b#t4036503:##k over to fill it.#k") +sm.warp(101084000) diff --git a/scripts/quest/q37171e.py b/scripts/quest/q37171e.py new file mode 100755 index 0000000..623e410 --- /dev/null +++ b/scripts/quest/q37171e.py @@ -0,0 +1,7 @@ +# id 37171 ([Elodin] Music Teacher), field 101084400 +sm.setSpeakerID(1501004) # Shimmer Songbird +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendNext("It took you a whi-- OH!") +sm.createQuestWithQRValue(37150, "00=h0;01=h1;02=h0;03=h0;04=h1;07=h1") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37171s.py b/scripts/quest/q37171s.py new file mode 100755 index 0000000..86507c7 --- /dev/null +++ b/scripts/quest/q37171s.py @@ -0,0 +1,19 @@ +# id 37171 ([Elodin] Music Teacher), field 101082000 +sm.setSpeakerID(1501001) # Ruenna the Fairy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendNext("I wonder what could have made a bird of Elodin cry...") +sm.sendSay("Oh? She said she'd teach him how to sing? Wonderful!") +sm.sendSay("So now you have to take the baby bird there in person?") +res = sm.sendAskYesNo("Then the two of you could go there together!") +sm.setParam(5) +sm.sendNext("Come back safely!") +sm.createQuestWithQRValue(37150, "00=h0;01=h1;02=h0;03=h0;04=h1") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("I'm so excited! Maybe she can teach me how to sing properly, so Ruenna will like listening to me!") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("Don't get ahead of yourself now...") +sm.setParam(3) +sm.sendSay("Why don't we get going? It's a long trip.") +sm.startQuest(parentID) +sm.warp(101084400) diff --git a/scripts/quest/q37172s.py b/scripts/quest/q37172s.py new file mode 100755 index 0000000..80764ab --- /dev/null +++ b/scripts/quest/q37172s.py @@ -0,0 +1,45 @@ +# id 37172 ([Elodin] Touching Reunion), field 101084400 +sm.setSpeakerID(1501004) # Shimmer Songbird +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendNext("My baby!") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.onLayer(1500, "00", 0, 0, 12, "Effect/Direction21.img/Elodin/meet/0", 4, True, -1, False) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendNext("Mama! I missed you so much!") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("Where have you been?! I've been worried sick!") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Ruenna has been taking care of me!") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("Ruenna? You mean you're the one she needed help with?") +sm.sendDelay(3000) +sm.offLayer(500, "00", False) +sm.sendDelay(2000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.sendNext("#h0#! I can't thank you and Ruenna enough for bringing my baby safely home.") +sm.sendSay("I looked everywhere! I worried I'd lost him forever.") +sm.sendSay("And the forest has been so strange lately, what with all those weird noises... I didn't know what to do!") +sm.setParam(3) +sm.sendSay("......") +sm.sendSay("Ruenna was worried too. When you stopped singing, she thought something bad happened.") +sm.sendSay("She wanted to check on you, but she couldn't bring the baby, so here we are.") +sm.setParam(5) +sm.sendSay("I've got to thank her! But before I do...") +sm.sendSay("Why don't we start the singing lessons?") +sm.sendSay("But we need your help to do it, #h0#.") +sm.setParam(3) +sm.sendSay("(She may be overestimating your experience with bird calls a bit.)") +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q37173s.py b/scripts/quest/q37173s.py new file mode 100755 index 0000000..394777f --- /dev/null +++ b/scripts/quest/q37173s.py @@ -0,0 +1,11 @@ +# id 37173 ([Elodin] Singing Necessities 1), field 101084400 +sm.setSpeakerID(1501004) # Shimmer Songbird +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendNext("Before you can sing, you have to prep your voice.") +sm.sendSay("Drinking #i4036505# #t4036505# from the #o3501108#s and #o3501109#s nearby will give you nice, clear notes.") +res = sm.sendAskYesNo("Here's another Small Bottle. Please fill it with Pure Water and come back.") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.sendNext("I'll need #r15 droplets of Pure Water#k this time.") +sm.warp(101084100) diff --git a/scripts/quest/q37175e.py b/scripts/quest/q37175e.py new file mode 100755 index 0000000..0b19abe --- /dev/null +++ b/scripts/quest/q37175e.py @@ -0,0 +1,44 @@ +# id 37175 ([Elodin] Tone Deaf No More), field 101084400 +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.sendDelay(3000) +sm.setSpeakerID(1501007) # Baby Bird +sm.setParam(3) +sm.sendNext("(It's like this stuff is liquid talent or something.)") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("Ah! Wait! Stop!") +sm.sendDelay(2000) +sm.sendDelay(1000) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendNext("What? What's wrong? I'm singing better than ever!") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("I just realized the source of all the screeching.") +sm.setParam(2) +sm.sendSay("Yeah, and you created that little audio trainwreck.") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Huh? I couldn't hear you.") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("We were just discussing your admirable volume, dear.") +sm.setParam(2) +sm.sendSay("......") +sm.setParam(4) +sm.sendSay("You certainly have that in spades, but we should work on your control a bit.") +sm.setParam(2) +sm.sendSay("Only a mother could love that screech.") +sm.setParam(4) +sm.sendSay("Give him a chance.") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("What are you two talking about?") +sm.setParam(2) +sm.sendSay("Nothing important.") +sm.sendDelay(1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q37176s.py b/scripts/quest/q37176s.py new file mode 100755 index 0000000..6f864e8 --- /dev/null +++ b/scripts/quest/q37176s.py @@ -0,0 +1,29 @@ +# id 37176 ([Elodin] Another Chance!), field 101084400 +sm.setSpeakerID(1501004) # Shimmer Songbird +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendNext("Can you bring me more Pure Water and Lotus?") +sm.sendSay("Please fill this Small Bottle with #r21 droplets of Pure Water#k and find #r10 Lotus Blossoms#k. That should be just enough to do the trick.") +sm.sendSay("This bottle will automatically fill every time you get Pure Water, so you won't have to pick it up yourself anymore.") +sm.setParam(2) +sm.sendSay("That would have been helpful earlier...") +sm.setParam(4) +sm.sendSay("...") +sm.sendSay("Well, earlier I didn't realize you were such a whiner. Maybe I won't give you this bottle after all.") +sm.setParam(2) +sm.sendSay("No! Forget I said that! I love running errands for you!") +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Ooh! More water and flowers! I can't wait!") +sm.setParam(2) +res = sm.sendAskYesNo("Great...") +sm.startQuest(parentID) +sm.startQuest(parentID) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendNext("Do you think that will be enough?") +sm.setParam(2) +sm.sendSay("Fingers crossed.") +sm.setParam(4) +sm.sendSay("Well, good luck.") +sm.warp(101084100) diff --git a/scripts/quest/q37177s.py b/scripts/quest/q37177s.py new file mode 100755 index 0000000..410db80 --- /dev/null +++ b/scripts/quest/q37177s.py @@ -0,0 +1,61 @@ +# id 37177 ([Elodin] Practice Always Makes Perfect), field 101084400 +sm.setSpeakerID(1501007) # Baby Bird +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendNext("All I need is refreshing water and sweet flowers!") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("How are things coming along?") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Ruenna!!") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("Welcome, Ruenna! I'm so grateful to you for taking care of my baby.") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("That was your baby bird?!") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("Yes! I was so worried about him! But you made sure he came home safe and sound.") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("She made me treats and everything!") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("I'm just surprised. Can't say I see much of a family resemblance, to be honest.") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("I suppose you're right about that, at least for now. But he'll be quite the flashy fowl once he's grown.") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("I want to grow up right now!") +sm.setInnerOverrideSpeakerTemplateID(1501015) # Shimmer Songbird +sm.sendSay("You'll be grown soon enough. Ruenna, if it wasn't for you...") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("It was nothing. I was just taking care of the forest.") +sm.setInnerOverrideSpeakerTemplateID(1501010) # Baby Bird +sm.sendSay("Oh! You're here just in time to hear me sing!") +sm.setInnerOverrideSpeakerTemplateID(1501013) # Ruenna the Fairy +sm.sendSay("Let's hear it then!") +sm.setParam(2) +sm.sendSay("Uhh...") +sm.lockInGameUI(True, False) +sm.removeAdditionalEffect() +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1000) +sm.onLayer(1500, "00", 0, 0, 12, "Effect/Direction21.img/Elodin/sing/0", 4, True, -1, False) +sm.sendDelay(3000) +sm.setParam(5) +sm.sendNext("I thought you got lessons...") +sm.sendSay("So much for a good night's sleep.") +sm.setParam(3) +sm.sendSay("At least his tempo is more consistent now.") +sm.setParam(5) +sm.sendSay("...") +sm.sendDelay(3000) +sm.offLayer(500, "00", False) +sm.sendDelay(2000) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.showFadeTransition(0, 1000, 3000) +sm.zoomCamera(0, 1000, 2147483647, 2147483647, 2147483647) +sm.moveCamera(True, 0, 0, 0) +sm.sendDelay(300) +sm.removeOverlapScreen(1000) +sm.moveCamera(True, 0, 0, 0) +sm.lockInGameUI(False, True) +sm.startQuest(parentID) +sm.createQuestWithQRValue(37150, "00=h0;01=h0;02=h0;03=h0;04=h1;07=h1;08=h0") +sm.createQuestWithQRValue(37150, "00=h0;01=h1;02=h0;03=h0;04=h1;07=h1;08=h0") +sm.warp(101000000) diff --git a/scripts/quest/q3759e.py b/scripts/quest/q3759e.py new file mode 100755 index 0000000..e8a1218 --- /dev/null +++ b/scripts/quest/q3759e.py @@ -0,0 +1,12 @@ +# Soaring skill quest + +from net.swordie.ms.constants import SkillConstants + +sm.setSpeakerID(2085000) +sm.sendNext("Whoa, you've brought it! Just hold on a minute! I'll make you the special potion.") +sm.sendSay("Alrighty! Are you ready? If you're are, I will go ahead and sprinkle this potion on you. You'll be able to fly then!") +sm.consumeItem(4032531) +sm.completeQuestNoRewards(parentID) +sm.giveSkill(SkillConstants.getSoaringByJob(chr.getJob())) +sm.chatScript("You have obtained the Soaring skill!") +sm.sendPrev("Ok. Looks like you're all set to use the Soaring skill. There's one thing you should keep in mind. You can only use the Soaring skill where there's Dragon energy. The only such place that I know of is the Crimson Sky Dock.") diff --git a/scripts/quest/q38002s.py b/scripts/quest/q38002s.py new file mode 100755 index 0000000..32c0a48 --- /dev/null +++ b/scripts/quest/q38002s.py @@ -0,0 +1,52 @@ +# Shade Into [A New Name] +SILVER = 3002005 +MOONBEAM = 3002000 +SWIFT_STRIKE = 25001000 +VULPES_LEAP = 25001204 + +sm.setSpeakerID(SILVER) +sm.sendNext("So, your name is Human, right? That's rather silly. You don't see any foxes named Fox, now do you?") + +sm.setPlayerAsSpeaker() +sm.sendSay("No, my name is... (What was it that Freud used to call me?)") + +sm.setSpeakerID(SILVER) +sm.sendSay("Now, now, don't strain yourself. I doubt you can give yourself a very good name. Here, leave it to me. Hm... You're a stranger we found in the woods... Mystery? Oddity? Ooh, how about Muddle? I always thought Muddle would be a great...") + +sm.setPlayerAsSpeaker() +sm.sendSay("No, look, I have my own-") + +sm.setSpeakerID(MOONBEAM) +sm.sendSay("Geez, Grandpa! Those are terrible names! We have to name 'em something cool. Besides, I found 'em, so I get to name 'em. Now... You're all dark and mysterious, so I'm gonna call you Shade. How about that? You're the perfect compliment to a Moonbeam!") + +sm.setSpeakerID(SILVER) +sm.sendSay("That seems a little...dark. You sure you don't like Muddle?") + +sm.setPlayerAsSpeaker() +sm.sendSay("I'll go with Shade.") + +sm.setSpeakerID(SILVER) +sm.sendSay("To each his own, I guess... So be it. I recognize you as Shade from this moment forward. That's going to take a little getting used to.") + +if sm.sendAskAccept("So Shade, why don't you take a look around the house you'll be staying at? Might need some cleaning, seeing how it's been vacant for years."): + sm.sendNext("Follow the path to the left and you'll see a house with a large pot. That's the one. Make yourself at home, my tasty friend.") +else: + sm.sendNext("No, no, it's no problem at all. The owner of the house has been gone for years. Just as well that someone get some use out of it.") + sm.dispose() + +sm.jobAdvance(2500) +sm.setSTR(35) +sm.setDEX(4) +sm.setAP(23) +sm.addMaxHP(150) +sm.addMaxMP(50) +sm.giveItem(3010766) +sm.createQuestWithQRValue(parentID, "", True) +sm.startQuest(parentID) +sm.giveSkill(SWIFT_STRIKE, 0) + +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendSay("(Whew...)") +sm.sendSay("(I'm not nearly as strong as I was before. But it looks like I've still got it, so I should be okay for now.)") +sm.sendSay("(Now, let's head to that 'house'.)") diff --git a/scripts/quest/q38003_midNPC1.py b/scripts/quest/q38003_midNPC1.py new file mode 100755 index 0000000..6220d4a --- /dev/null +++ b/scripts/quest/q38003_midNPC1.py @@ -0,0 +1,12 @@ +# 410000000 +sm.setSpeakerID(3002007) +sm.sendNext("Ooh, you must be that 'human'. Your name is Shade? You really are as big as a house! Did someone abandon you because you're useless? Yeah, you look like you'd just sit around and eat all the good scraps.") + +sm.setPlayerAsSpeaker() +sm.sendSay("I wasn't abandoned, there was an incident...") + +sm.setSpeakerID(3002007) +sm.sendSay("Oh there's always some kind of 'incident'. But anyway, is that brown rice cake? Mmm, I was getting hungry. Let me have it. Oh, and I've got something for you, too. I worked real hard on those shoes. Honest, I never made anything so big. Tell me if they don't fit and I'll adjust 'em for you.") + +sm.giveItem(1072892) +sm.setQRValue(parentID, "NpcSpeech=30020071") \ No newline at end of file diff --git a/scripts/quest/q38003_midNPC2.py b/scripts/quest/q38003_midNPC2.py new file mode 100755 index 0000000..909e41b --- /dev/null +++ b/scripts/quest/q38003_midNPC2.py @@ -0,0 +1,12 @@ +# 410000000 +sm.setSpeakerID(3002006) +sm.sendNext("Ahem, hem! How terrible... Even the most insignificant creatures have tails, but what happened to you? You can walk on two feet and talk, yet you do not have a tail?") + +sm.setPlayerAsSpeaker() +sm.sendSay("Yeah, terrible, whatever... You know, I have no trouble getting around without a tail...") + +sm.setSpeakerID(3002006) +sm.sendSay("True enough. Well, good thing you're such an optimist! You wouldn't live long otherwise. Now then, let's at least try to make you presentable. We'll start with with tying that messy hair up. Use this item") + +sm.giveItem(1004037) +sm.setQRValue(parentID, "NpcSpeech=30020071/30020062") \ No newline at end of file diff --git a/scripts/quest/q38003_midNPC3.py b/scripts/quest/q38003_midNPC3.py new file mode 100755 index 0000000..0c8c568 --- /dev/null +++ b/scripts/quest/q38003_midNPC3.py @@ -0,0 +1,12 @@ +# 410000000 +sm.setSpeakerID(3002009) +sm.sendNext("Oh, my. You must be... Oh, dear... I just had my first litter, and I was so happy all my kits turned out fine. Your poor parents... They must have been devastated. So don't blame them, okay?") + +sm.setPlayerAsSpeaker() +sm.sendSay("I'm fine! This is normal for-") + +sm.setSpeakerID(3002009) +sm.sendSay("I'm sure it is, sweetie. Now, this is an outfit that I made at the chief's request. He says that clothes can really lift spirits. And you look like you need it.") + +sm.giveItem(1050306) +sm.setQRValue(parentID, "NpcSpeech=30020071/30020062/30020093") \ No newline at end of file diff --git a/scripts/quest/q38003_midNPC4.py b/scripts/quest/q38003_midNPC4.py new file mode 100755 index 0000000..16916b8 --- /dev/null +++ b/scripts/quest/q38003_midNPC4.py @@ -0,0 +1,12 @@ +# 410000000 +sm.setSpeakerID(3002008) +sm.sendNext("You poor thing! How hard your life must be with no tail, no ears... Oh goodness, I want to give you just the BIGGEST hug... But I'd rather not touch you. Oh, bless your heart.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Um... thanks? (I give up.)") + +sm.setSpeakerID(3002008) +sm.sendSay("Well, I don't have much, but take this claw. Might help you tidy up your looks, don'tcha know. Come talk to me if anything troubles you! Nothing like a babbling Brook to cheer you up!") + +sm.giveItem(1082572) +sm.setQRValue(parentID, "NpcSpeech=30020071/30020062/30020093/30020084") \ No newline at end of file diff --git a/scripts/quest/q38009s.py b/scripts/quest/q38009s.py new file mode 100755 index 0000000..0887340 --- /dev/null +++ b/scripts/quest/q38009s.py @@ -0,0 +1,5 @@ +# 38009 | Starting Script + +sm.setPlayerAsSpeaker() +sm.sendSayOkay("Ahh, but what if they figure out that I didn't eat it? Hmm. ...Wait, why am I so hung up on this?") +sm.createQuestWithQRValue(parentID, "") diff --git a/scripts/quest/q38011s.py b/scripts/quest/q38011s.py new file mode 100755 index 0000000..b0936d8 --- /dev/null +++ b/scripts/quest/q38011s.py @@ -0,0 +1,13 @@ +# 410000002 +MOONBEAM = 3002100 + +sm.setSpeakerID(MOONBEAM) +sm.sendNext("What's wrong with you? You're covered in scars! What happened? Tell me now! Is anybody bullying you? Picking on you? You're already so weak and stupid, why would anyone do that?") +sm.sendSay("What? You were just going after a couple #o2400203#s? Why did you run off on your own to hunt them? You coulda just told me and I-I could have done that for you! Why do you need to give gifts in return?") +sm.sendSay("Shade, you stupid! Ughh, I'm so irritated! I-I hate you so much!") +sm.startQuest(parentID) + +sm.setPlayerAsSpeaker() +sm.sendSayOkay("What did I do wrong this time? Why are foxes on an emotional roller coaster all the time? I guess I better apologize to her. She was headed in direction of the #r#m410000002##k. I guess... I guess I should follow her?") + + diff --git a/scripts/quest/q38014s.py b/scripts/quest/q38014s.py new file mode 100755 index 0000000..4778d93 --- /dev/null +++ b/scripts/quest/q38014s.py @@ -0,0 +1,32 @@ +COMPASS = 3002006 + +# In GMS, the correct answer and any after it seems to be in blue while any before it are grey, changed to just the correct answer being blue because why not + + +sm.setSpeakerID(COMPASS) + +if not sm.sendAskAccept("I see, you are taking the test of the foxes. I'm very proud of you. You will be talked about by the younger generation for overcoming your lack in many ways. Now here is the test. Pass this multiple-choice quiz and I shall give you my paw stamp. Do you want to begin now?"): + sm.sendSayOkay("It's nothing urgent, so take your time. Talk to me when you are ready.") + sm.dispose() + +answer = sm.sendSay("The first question. What's the favorite meal of Pointy-Ear Foxes?\r\n#L0# Dried Caterpillar#l\r\n#L1# Spotted Wings#l\r\n#L2# Sparrow Eggs#l\r\n#L3# Mouse Tail#l\r\n#L4# #bRaw Liver#l") + +if not answer == 4: + sm.sendNext("Wrong! You should study more!") + sm.dispose() + +answer = sm.sendSay("That's right! We love raw liver. Second question, who do we serve as our god?\r\n#L0# Tiger God#l\r\n#L1# #bFox God#k#l\r\n#L2# Wolf God#l\r\n#L3# Mountain God#l\r\n#L4# Nongod#l") +if not answer == 1: + sm.sendNext("Wrong! You should study more!") + sm.dispose() + +answer = sm.sendSay("That's right, the Pointy-Ear Foxes believe in the fox god. Now last question, what kind of power do we have?\r\n#L0# #bPower to handle spirits#k#l\r\n#L1# Power to control time#l\r\n#L2# Power to control animals#l\r\n#L3# Power to ignore other people#l\r\n#L4# Power to be super cute#l") +if not answer == 0: + sm.sendNext("Wrong! You should study more!") + sm.dispose() + +sm.sendNext("That's right, we have the power to handle spirits. I heard you got one too, from the fox god. Use it wisely, or the fox god will not be pleased.") +sm.sendSay("This is it. My test is done. Here is my paw stamp, so now go talk to #r#p3002009##k. She will give you the next test.\r\n #fUI/DialogImage.img/quest/0") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(2800) diff --git a/scripts/quest/q38022e.py b/scripts/quest/q38022e.py new file mode 100755 index 0000000..94b49e0 --- /dev/null +++ b/scripts/quest/q38022e.py @@ -0,0 +1,33 @@ +MOONBEAM = 3002103 + +sm.setSpeakerID(2007) +if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.createQuestWithQRValue(37999, "SKIP_38022") + +if sm.getQRValue(37999) != "SKIP_38022": + sm.lockInGameUI(True, False) + sm.forcedInput(0) + + sm.removeEscapeButton() + sm.setPlayerAsSpeaker() + sm.sendNext("Are you okay? Are you hurt?") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("Ooh, my whole body aches! Here, and here, and here!") + + sm.setPlayerAsSpeaker() + sm.sendSay("You... don't have a scratch on you.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("I... I must be bleeding internally! Oh, the foxmanity! I need to get back to town for treatment! Thanks for nothing, you big jerk!") + +sm.completeQuest(38020) +sm.completeQuest(parentID) +sm.giveExp(5000) + +if sm.getQRValue(37999) != "SKIP_38022": + sm.setPlayerAsSpeaker() + sm.sendNext("...Did I say something wrong again? I wish she'd tell me what I did wrong. I'm glad she's okay, at least.") + +sm.lockInGameUI(False) +sm.warp(410000000, 2) diff --git a/scripts/quest/q38024s.py b/scripts/quest/q38024s.py new file mode 100755 index 0000000..c3996bd --- /dev/null +++ b/scripts/quest/q38024s.py @@ -0,0 +1,27 @@ +MOONBEAM = 3002000 + +sm.setPlayerAsSpeaker() +sm.sendNext("The town seems restless, different from other days. Did something happen?") + +sm.setSpeakerID(MOONBEAM) +sm.sendSay("...Dunno.") + +sm.setPlayerAsSpeaker() +sm.sendSay("(Something must be up. Moonbeam isn't herself either.)") +sm.sendSay("Okay.") + +sm.setSpeakerID(MOONBEAM) +sm.sendSay("...I'm sorry.") + +sm.setPlayerAsSpeaker() +sm.sendSay("Why?") + +sm.setSpeakerID(MOONBEAM) +sm.sendSay("Just... everything. I'm sorry. I'm really, really sorry...") + +sm.startQuest(parentID) + +sm.setPlayerAsSpeaker() +sm.sendSay("Moonbeam! Why is she crying all of a sudden? I should look into it myself.") + + diff --git a/scripts/quest/q38026s.py b/scripts/quest/q38026s.py new file mode 100755 index 0000000..eb18410 --- /dev/null +++ b/scripts/quest/q38026s.py @@ -0,0 +1,5 @@ +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("Grandis, Interdimensional Portal, another world... This is a lot to take in. But one thing is for sure... I can go back to Maple World! I'm sure Moonbeam was trying to hide that from me.") +sm.sendSay("But I must go back. I must see my world again. I can't stay here any longer, knowing that it's still out there. But when that's done... I'll come back.") +sm.sendSay("She's still worried. She worries for me even when she gave me her spirit. The best I can do is try to put her at ease. I'll bring some #r#t4009228##k items.") +sm.startQuest(parentID) diff --git a/scripts/quest/q38027s.py b/scripts/quest/q38027s.py new file mode 100755 index 0000000..7072f0e --- /dev/null +++ b/scripts/quest/q38027s.py @@ -0,0 +1,61 @@ +MOONBEAM = 3002000 + +sm.setSpeakerID(2007) +if sm.sendAskYesNo("Would you like to skip the tutorial cutscenes?"): + sm.createQuestWithQRValue(37999, "SKIP_38027") + +if sm.getQRValue(37999) != "SKIP_38027": + sm.lockInGameUI(True) + sm.forcedInput(0) + + sm.removeEscapeButton() + sm.setSpeakerID(MOONBEAM) + sm.sendNext("Y'know, I always knew. That you'd be leaving someday. Your scent is of the winds.") + + sm.setPlayerAsSpeaker() + sm.sendSay("......") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("I gave you my spirit because... Because I didn't want you to leave. You promised that you'd be by my side to protect me. So. So...") + + sm.setPlayerAsSpeaker() + sm.sendSay("...I had a friend. The first person to ever lend a hand to me. I told him I didn't have a reason to live, and he told me I don't have a reason to die, either. He also promised we'd get through the tough times together.") + sm.sendSay("Before I... came here, his face was the last one I saw. He's probably in pain. Thinking that I'm gone. And he probably feels like it's his fault.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("......") + + sm.setPlayerAsSpeaker() + sm.sendSay("I must go back. To those who are waiting for me. To those in pain. I must go tell them I'm alive, and to protect the world we love. And when that's all over... I'll come back.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("...I'm your friend too, right? I'm important too, right? Like them?") + + sm.setPlayerAsSpeaker() + sm.sendSay("Of course.") + + sm.setSpeakerID(MOONBEAM) + sm.sendSay("Us foxes call those companions. You and I are companions, so you have to come back. I'll miss you so much. It's gonna be so hard on me. So come back soon, okay?") + sm.sendSay("Wait, you're stupid so you might forget all this. Here...") + sm.sendDelay(500) + + sm.showEffect("Effect/Direction15.img/effect/story/tatoo/0", 0, -54, -300) + sm.sendDelay(2400) + +sm.startQuest(38901) + +if sm.getQRValue(37999) != "SKIP_38027": + sm.sendDelay(1000) + + sm.sendNext("This is a mark of companionship. We made our promise under the Fox Tree, so you have to keep your promise. Otherwise the fox god is gonna be really mad!") + sm.sendSay("Ah! I'm really hungry all of a sudden. I'm gonna head home first. Catch me if you can, slowpoke!") + sm.sendDelay(500) + +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(6000) + +if sm.getQRValue(37999) != "SKIP_38027": + sm.setPlayerAsSpeaker() + sm.sendNext("The rain... It's not stopping.") +sm.lockInGameUI(False) diff --git a/scripts/quest/q38030e.py b/scripts/quest/q38030e.py new file mode 100755 index 0000000..c4fe0d5 --- /dev/null +++ b/scripts/quest/q38030e.py @@ -0,0 +1,10 @@ +sm.setPlayerAsSpeaker() +sm.flipDialogue() +sm.sendNext("This is Maple World? Did I really... return? I never thought I'd see it again.") +sm.sendSay("I bet everyone is doing well. I'm off to see my friends!") + +sm.jobAdvance(2510) +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.addMaxHP(342) +sm.addMaxMP(665) diff --git a/scripts/quest/q38033s.py b/scripts/quest/q38033s.py new file mode 100755 index 0000000..5304e11 --- /dev/null +++ b/scripts/quest/q38033s.py @@ -0,0 +1,35 @@ +CHIEF = 1012003 + +sm.lockInGameUI(True, False) +sm.forcedInput(0) +sm.removeEscapeButton() +sm.setSpeakerID(CHIEF) +sm.sendNext("Now let's open this map, and I'll elaborate on what I was talking about earlier.") + +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/0") +sm.sendDelay(1000) + +sm.sendNext("This, is Maple World. You see this island right here? That's Victoria Island. Henesys is right here, on the south side of Victoria Island.") + +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/1") +sm.sendDelay(1500) + +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/1", False) +sm.sendNext("Leafre? It's in Ossyria continent, over the sea. El Nath is right here, and Nihal Desert is right there.") + +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/2") +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/3") +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/4") +sm.sendDelay(1500) + +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/2", False) +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/3", False) +sm.reservedEffectRepeat("Effect/Direction15.img/effect/story/worldmap/4", False) +if sm.sendAskAccept("So, you must come from Ossyria. There's someone, an elf, who came from Ossyria, too. Her name is #rAthena Pierce#k... Do you want to meet her?"): + sm.startQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendNext("(#rAthena Pierce#k? Is he talking about the little kid that used to follow me around? I guess she was headed to Victoria Island on the rescue ship. She must have settled down there. Maybe she'll know something about Mercedes.)") + + sm.setSpeakerID(CHIEF) + sm.sendSay("Athena Pierce is at the Bowman Instructional School. She's busy teaching new bowmen, so don't take up too much of her time.") + sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/quest/q38034s.py b/scripts/quest/q38034s.py new file mode 100755 index 0000000..856e27c --- /dev/null +++ b/scripts/quest/q38034s.py @@ -0,0 +1,18 @@ +ATHENA = 1012100 + +sm.setSpeakerID(ATHENA) +sm.sendNext("A young elf named Athena Pierce... I believe I'm the only elf with that name. And I did come from Ossyria to Victoria Island to get away from the Black Mage...") + +sm.setPlayerAsSpeaker() +sm.sendSay("But she was so young. I'm sorry, but you couldn't...") + +sm.setSpeakerID(ATHENA) +sm.sendSay("Are you talking about the curse on the elves? Ah, I was lucky enough to avoid it. #rHundreds of years#k is enough time for an elf to mature, you know.") + +sm.setPlayerAsSpeaker() +sm.sendSay("A curse? Hundreds... of years? This makes no sense. The day Mercedes and the rest of us faced the Black Mage was the same day that little Athena Pierce got on the ship to Victoria Island.") + +sm.setSpeakerID(ATHENA) +sm.sendSay("Then were you... Were you also under the Curse of the Black Mage? Listen to me carefully... It's been centuries since the day you were sealed. Do you understand? #r#eCenturies#k#n.") + +sm.startQuest(parentID) diff --git a/scripts/quest/q38035e.py b/scripts/quest/q38035e.py new file mode 100755 index 0000000..ab8afc7 --- /dev/null +++ b/scripts/quest/q38035e.py @@ -0,0 +1,13 @@ +from net.swordie.ms.enums import UIType + +ATHENA = 1012100 + +sm.setSpeakerID(ATHENA) +sm.sendNext("Would you mind helping us out while you train? It will help you adjust to this new Maple World.") +sm.sendSay("Didn't you hear of the troubles at the #rEllinel Fairy Academy#k? You should check it out.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(5000) + +sm.openUI(UIType.UI_GROWTH_HELPER) +sm.sendSayOkay("Use the Maple Guide function to get to #rEllinel Fairy Academy#k easily. I'll contact you again if something else happens.") \ No newline at end of file diff --git a/scripts/quest/q38073e.py b/scripts/quest/q38073e.py new file mode 100755 index 0000000..07fc157 --- /dev/null +++ b/scripts/quest/q38073e.py @@ -0,0 +1,24 @@ +LIBRARIAN = 2500002 + +sm.setSpeakerID(LIBRARIAN) +sm.sendNext("Did you think of a keyword? What word do you want to search?\r\n\r\n#L0##bBlack Mage#l") +sm.sendNext("Black Mage, huh? That's a pretty big topic. I'm seeing titles like The Sealing of the Black Mage, Commanders of the Black Mage, Appearance of the Black Mage... 3849 results.") +sm.sendNext("You need to narrow down your search. What do you want to search for?\r\n\r\n#L0##bThe Black Mage's Resurrection#l") +sm.sendNext("The Black Mage's Resurrection... Interesting, that's just one book. But uh... There's a problem.") +sm.sendNext("This book isn't available to the public. I'm sorry, but I can't help you with this one. Do you happent o have another search in mind?\r\n\r\n#L0##bSeal of Time#l") +sm.sendNext("Seal of Time... There's a book about the Seal of Time that locked up the Black Mage. Let's see, let's see... Ah, so that's what happened...") +sm.sendNext("There's a book called #rThe Black Mage and the Five Heroes#k that's probably everything you're looking for. You want to search for anything else?\r\n\r\n#L0#(#bYou whisper something#k.)#l") +sm.sendNext("Really? Is that your name? I love doing name searches for people! Let's see what your life is like...") + +sm.setPlayerAsSpeaker() +sm.sendSay("No, it's fine. Don't search my name.") + +sm.setSpeakerID(LIBRARIAN) +sm.sendSay("Why? You got a lot of secrets or something? Ah well, every one has secrets, I suppose. Very well.") + +sm.setPlayerAsSpeaker() +sm.sendSay("(Maybe there are records of me here, if the library truly has ALL the records of the world. I have to keep pressing forward.)") +sm.sendSay("(I won't dwell on the past, even if it means more pain!)") + +sm.completeQuest(parentID) +sm.jobAdvance(2512) diff --git a/scripts/quest/q38074s.py b/scripts/quest/q38074s.py new file mode 100755 index 0000000..f764814 --- /dev/null +++ b/scripts/quest/q38074s.py @@ -0,0 +1,7 @@ +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("There's no question that I... have been erased from everyone's memories. But if it's just me, then they must have holes in their memories. They would know that at least SOMEONE was there.") +sm.setPlayerAsSpeaker() +if sm.sendAskAccept("If it's not just that my existence is being wiped from their memories... Then perhaps there are other possibilities. Should I head out now?\r\n#r(You will be moved directly to the map if you accept.)"): + sm.warp(211060000, 2) + sm.startQuest(parentID) + sm.dispose() diff --git a/scripts/quest/q38076s.py b/scripts/quest/q38076s.py new file mode 100755 index 0000000..d522333 --- /dev/null +++ b/scripts/quest/q38076s.py @@ -0,0 +1,6 @@ +sm.flipDialoguePlayerAsSpeaker() +sm.sendNext("I remember now. I put in a photograph. A photo, the only one, with everyone... They told me to put my most prized possession in, and that was it. Good choice, I guess.") +sm.sendSay("Now I'm sure. The world has #rCOMPLETELY forgotten me.#k\r\nThere are absolutely no traces of me anywhere.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.jobAdvance(2511) diff --git a/scripts/quest/q3862e.py b/scripts/quest/q3862e.py new file mode 100755 index 0000000..31b0c29 --- /dev/null +++ b/scripts/quest/q3862e.py @@ -0,0 +1,12 @@ +# Sunburst | Part of the Golden Temple Quest Line + +GATE_OF_TRIALS = 9000098 + +sm.setSpeakerID(GATE_OF_TRIALS) +sm.sendNext("#b(A voice resonates in your head again.) \r\n" + "'The Sacrifice will protect thee, but it shall be destroyed the moment thou set foot in front of the golden altar! " + "If thou dost not enter, the sacrifice will not be taken.' \r\n" + "(Massive doors open the way to the Entrance to Ravana's Altar.)") + +sm.warp(252030000, 0) # Entrance to Ravana's Altar +sm.completeQuestNoRewards(parentID) diff --git a/scripts/quest/q3864e.py b/scripts/quest/q3864e.py new file mode 100755 index 0000000..8518025 --- /dev/null +++ b/scripts/quest/q3864e.py @@ -0,0 +1,14 @@ +# Sunburst | Part of the Golden Temple Quest Line | Anytime Quest + +GATE_OF_TRIALS = 9000098 +SUNBURST = 4033176 + +sm.setSpeakerID(GATE_OF_TRIALS) +sm.sendNext("#b(A voice resonates in your head again.) \r\n" + "'The Sacrifice will protect thee, but it shall be destroyed the moment thou set foot in front of the golden altar! " + "If thou dost not enter, the sacrifice will not be taken.' \r\n" + "(Massive doors open the way to the Entrance to Ravana's Altar.)") + +sm.warp(252030000, 0) # Entrance to Ravana's Altar +sm.completeQuestNoRewards(parentID) +sm.consumeItem(SUNBURST) diff --git a/scripts/quest/q3890s.py b/scripts/quest/q3890s.py new file mode 100755 index 0000000..f67640d --- /dev/null +++ b/scripts/quest/q3890s.py @@ -0,0 +1,24 @@ +# Created by MechAviv +# Quest ID :: 3890 +# [Mu Lung Dojo] Mu Lung Dojo Reward Guide + +sm.setSpeakerID(2091011) +sm.sendNext("You do know the Rank Range is divided by levels, right?") + + +sm.setSpeakerID(2091011) +sm.sendSay("The Novice Group is for players from Lv. 105 - 140.\r\n\r\n * 1st Place: #i1082660:##t1082660# #i3700305:##t3700305#\r\n* 2nd Place: #i1082661:##t1082661#\r\n* 3rd Place: #i1082661:##t1082661#") + +sm.setSpeakerID(2091011) +sm.sendSay("The Veteran Group is for players from Lv. 141 - 180.\r\n\r\n1st Place: #i1082394:##t1082394# #i3700306:##t3700306#\r\n* 2nd Place: #i1082660:##t1082660#\r\n* 3rd Place: #i1082660:##t1082660#") + +sm.setSpeakerID(2091011) +sm.sendSay("The Master Group is for players Lv. 181 or higher.\r\n\r\n * 1st Place: #i1082392:##t1082392#\r\n#i3700308:##t3700308#\r\n\r\n* Job 1st: #i1082393:##t1082393#\r\n#i3700307:##t3700307#\r\n* Job 2nd: #i1082394:##t1082394#\r\n* Job 3rd: #i1082394:##t1082394#") + + +sm.setSpeakerID(2091011) +sm.sendSay("Rank rewards are given according to your results from that week. Rankings are calculated from #r11:30 PM on Sunday to 12:30 AM on Monday#k. It takes #b1 hour#k to update rankings, so don't forget to set your record before it's too late.") + + +sm.setSpeakerID(2091011) +sm.sendPrev("You can get your reward by talking to me in Mu Lung Dojo after the ranking results are calculated. I hope you won't whine for a reward when you're not even in the top ranks.") \ No newline at end of file diff --git a/scripts/quest/q38996s.py b/scripts/quest/q38996s.py new file mode 100755 index 0000000..dca32bb --- /dev/null +++ b/scripts/quest/q38996s.py @@ -0,0 +1,17 @@ +# 410000002 +MOONBEAM = 3002100 + +sm.setSpeakerID(MOONBEAM) +sm.sendNext("The Fox God gave you his blessings, so you probably have a new skill! Check your skill window.") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Fox Trot... Spirit Bond... I've never seen these skills before.") + +sm.setSpeakerID(MOONBEAM) +sm.sendSay("They'll be a big help for a slow, weak thing like you. Here, let's talk some more so I can show you how they work!") + +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(916) + + diff --git a/scripts/quest/q38997s.py b/scripts/quest/q38997s.py new file mode 100755 index 0000000..7018734 --- /dev/null +++ b/scripts/quest/q38997s.py @@ -0,0 +1,17 @@ +# 410000002 +MOONBEAM = 3002100 + +sm.setSpeakerID(MOONBEAM) +sm.sendNext("Let's start with #b[Fox Trot]#k. If you really do have ears, perk them up for this!") +sm.sendSay("#b[Fox Trot]#k is super helpful when you want to move quickly or get close to an enemy. You're way too slow to catch prey, so you need all the help you can get.") +sm.sendSay("Now try using #b[Fox Trot]#k. Oh, and it's a lot easier if you hotkey it and use it that way!") +sm.startQuest(parentID) + +sm.sendNext("Whaddaya think? Was that amazingly fast, or what? Use this skill to get close to your prey.") +sm.sendSay("Use this skill when you're using other skills to #binterrupt#k the first one and #bmove#k quickly!") +sm.sendSay("I know you can be a little slow, Shade. Are you keeping up?") +sm.sendSay("I'll tell you how to use it to make up for your weakness. Talk to me when you're ready!") +sm.completeQuest(parentID) +sm.giveExp(700) + + diff --git a/scripts/quest/q38998s.py b/scripts/quest/q38998s.py new file mode 100755 index 0000000..9406600 --- /dev/null +++ b/scripts/quest/q38998s.py @@ -0,0 +1,14 @@ +# 410000002 +MOONBEAM = 3002100 +CATERPILLAR = 9300877 + +sm.spawnMob(CATERPILLAR, -245, -410, False) +sm.spawnMob(CATERPILLAR, -245, -410, False) +sm.removeEscapeButton() +sm.setSpeakerID(MOONBEAM) +sm.sendNext("Do you see that caterpillar over there? Waaaaay over there. It's gonna eat up the whole Fox Tree if we leave it there. Now then, what should we do?") +sm.sendSay("I hope you're not thinking of climbing all the way up there! Use #b[Fox Trot]#k to zip up there in a jiffy! Go get'em, go on!") +sm.chatScript("Use [Fox Trot] to get to the bugs on the trees!") +sm.startQuest(parentID) + + diff --git a/scripts/quest/q39160s.py b/scripts/quest/q39160s.py new file mode 100755 index 0000000..4949233 --- /dev/null +++ b/scripts/quest/q39160s.py @@ -0,0 +1,8 @@ +# id 39160 ([Weekly Quest] Request Reward), field 993017200 +sm.setSpeakerID(2155000) # One-Eye +sm.setParam(1) +sm.sendNext("Squishy, the more you help us, the more we can help ourselves. And THAT means we can get ahold of the #brare stuff#k.") +sm.sendSay("After some discussion, we've decided to give you #i4001842# #b#t4001842##k each week when you #bfinish four commissions#k.") +sm.sendSay("In fact, here's one to start you off right! Remember, #bcomplete four commissions each week#k and come see me. I'll have my eye on you, Squishy. Heehee.") +sm.startQuest(parentID) +sm.createQuestWithQRValue(39100, "FC=0") diff --git a/scripts/quest/q500724e.py b/scripts/quest/q500724e.py new file mode 100755 index 0000000..8470e77 --- /dev/null +++ b/scripts/quest/q500724e.py @@ -0,0 +1,167 @@ +# id 500724 ([Hayato and Kanna Revamp] Hunt 888 Monsters Near Your Level Daily), field 450002012 +sm.closeUI(1128) +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9010010) # Cassandra +sm.sendNext("Wow, you've eliminated all of the monsters for today!") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +res = sm.sendAskYesNo("Would you like to complete today's event?") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(500725, "count=6") +sm.sendNext("You've participated for #b6 day(s)#k! #b2day(s)#k more, and you'll get a reward. You're so close!") +sm.closeUI(1128) +sm.closeUI(1128) +sm.sendSay("I've also given you #b#t2450135:##k x1. I hope it helps.") +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2514;sum=284416;lv=2;date=20190703;today=18200;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2515;sum=284416;lv=2;date=20190703;today=18200;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2515;sum=284516;lv=2;date=20190703;today=18200;total=16") +sm.closeUI(1128) +sm.sendSay("See you again tomorrow!") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2515;sum=284516;lv=2;date=20190703;today=18300;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2516;sum=284516;lv=2;date=20190703;today=18300;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2516;sum=284616;lv=2;date=20190703;today=18300;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2516;sum=284616;lv=2;date=20190703;today=18400;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2517;sum=284616;lv=2;date=20190703;today=18400;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2517;sum=284716;lv=2;date=20190703;today=18400;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2517;sum=284716;lv=2;date=20190703;today=18500;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2518;sum=284716;lv=2;date=20190703;today=18500;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2518;sum=284816;lv=2;date=20190703;today=18500;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2518;sum=284816;lv=2;date=20190703;today=18600;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2519;sum=284816;lv=2;date=20190703;today=18600;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2519;sum=284916;lv=2;date=20190703;today=18600;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2519;sum=284916;lv=2;date=20190703;today=18700;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2520;sum=284916;lv=2;date=20190703;today=18700;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2520;sum=285016;lv=2;date=20190703;today=18700;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2520;sum=285016;lv=2;date=20190703;today=18800;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2521;sum=285016;lv=2;date=20190703;today=18800;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2521;sum=285116;lv=2;date=20190703;today=18800;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2521;sum=285116;lv=2;date=20190703;today=18900;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2522;sum=285116;lv=2;date=20190703;today=18900;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2522;sum=285216;lv=2;date=20190703;today=18900;total=16") +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2522;sum=285216;lv=2;date=20190703;today=19000;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2523;sum=285216;lv=2;date=20190703;today=19000;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2523;sum=285316;lv=2;date=20190703;today=19000;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2523;sum=285316;lv=2;date=20190703;today=19100;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2524;sum=285316;lv=2;date=20190703;today=19100;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2524;sum=285416;lv=2;date=20190703;today=19100;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2524;sum=285416;lv=2;date=20190703;today=19200;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2525;sum=285416;lv=2;date=20190703;today=19200;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2525;sum=285516;lv=2;date=20190703;today=19200;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2525;sum=285516;lv=2;date=20190703;today=19300;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2526;sum=285516;lv=2;date=20190703;today=19300;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2526;sum=285616;lv=2;date=20190703;today=19300;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2526;sum=285616;lv=2;date=20190703;today=19400;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2527;sum=285616;lv=2;date=20190703;today=19400;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2527;sum=285716;lv=2;date=20190703;today=19400;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2527;sum=285716;lv=2;date=20190703;today=19500;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2528;sum=285716;lv=2;date=20190703;today=19500;total=16") +sm.createQuestWithQRValue(100161, "autoIncTotal=16;point=2528;sum=285816;lv=2;date=20190703;today=19500;total=16") +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.closeUI(1128) +sm.warp(450002023) diff --git a/scripts/quest/q500724s.py b/scripts/quest/q500724s.py new file mode 100755 index 0000000..3626c8f --- /dev/null +++ b/scripts/quest/q500724s.py @@ -0,0 +1,9 @@ +# id 500724 ([Hayato and Kanna Revamp] Hunt 888 Monsters Near Your Level Daily), field 993017200 +sm.setSpeakerType(3) +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9010010) # Cassandra +res = sm.sendAskYesNo("Hello, #b#h0##k! Would you like to participate in the events today as well?") +sm.sendNext("This is day 6 of 8 in your participation.") +sm.sendSay("I hope you enjoy hunting in Maple World and getting rewards.") +sm.startQuest(parentID) +sm.warp(450002007) diff --git a/scripts/quest/q50722e.py b/scripts/quest/q50722e.py new file mode 100755 index 0000000..44f3ce6 --- /dev/null +++ b/scripts/quest/q50722e.py @@ -0,0 +1,7 @@ +# id 50722 (Fly in the Sky!), field 240080000 +sm.setSpeakerID(2085000) # Matada +res = sm.sendAskYesNo("Do you have the Ancient Dragon Wing Scales?") +sm.createQuestWithQRValue(18418, "B=34973") +sm.sendNext("Good, now close your eyes and imagine soaring through the sky on your mount, using the Up Arrow and Jump keys to soar ever higher.") +sm.sendSay("Not many mounts know the Soaring skill. Pegasus and Dragon are two creatures that do.") +sm.sendSay("Do not forget, you can only stay aloft for a certain amount of time. Press the Jump key often to stay airborne!") diff --git a/scripts/quest/q50990e.py b/scripts/quest/q50990e.py new file mode 100755 index 0000000..8356cfd --- /dev/null +++ b/scripts/quest/q50990e.py @@ -0,0 +1,9 @@ +# id 50990 ([Theme Dungeon] Ellinel Fairy Academy ), field 101030000 +sm.setSpeakerID(1040002) # Fanzy +sm.sendNext("Are you the one I invited to help with the ruckus at the Ellinel Fairy Academy?") +sm.setParam(3) +sm.sendSay("Um, of course?") +sm.setParam(0) +sm.sendSay("You don't look as strong as I'd hoped. But, you're famous, so I'll leave it to you.") +sm.startQuest(32147) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q50990s.py b/scripts/quest/q50990s.py new file mode 100755 index 0000000..d21e0b5 --- /dev/null +++ b/scripts/quest/q50990s.py @@ -0,0 +1,10 @@ +# id 50990 ([Theme Dungeon] Ellinel Fairy Academy ), field 993017200 +sm.setSpeakerID(9130008) # Mouri Motonari +res = sm.sendAskAccept("You seem to be prepared for a new adventure. Can you make some time for me? We were asked to look for someone with the appropriate qualifications.") +sm.sendNext("The request was from #bEllinel Fairy Academy#k. A young human entered the Academy and it's caused quite a disturbance.") +sm.sendSay("I don't know all the details, but they are in need of help and I think it is best that we look into the situation.") +res = sm.sendAskYesNo("Fanzy will take you into the land of the fairies. I can send you to him directly, if you'd like.") +sm.sendNext("I shall send you to Fanzy right away. Complete your mission, and come straight back. Good luck.") +sm.startQuest(parentID) +sm.startQuest(32148) +sm.warp(101030000) diff --git a/scripts/quest/q52930s.py b/scripts/quest/q52930s.py new file mode 100755 index 0000000..6ec69d6 --- /dev/null +++ b/scripts/quest/q52930s.py @@ -0,0 +1,20 @@ +# Beauty Salon Tutorial +if sm.sendAskAccept("Hi! I'm Big Headward, the heart of fashion in Maple World. I would just LOVE to explain how my amazing Beaty Salon system works. Do you think you have a moment to hear about it?"): + sm.removeEscapeButton() + sm.sendNext("The Beauty Salon is where you can save or change your hair and face, any time you wish. See, isn't it amazing?") + sm.sendSay("Those that are quick-witted might have already noticed the newly-added button in the Equip tab. Just like the picture below!\r\n#i3800642#") + sm.sendSay("It is SO easy to use. You can #rSave#k your current Hair (Face), then use the #rChange#k button to mix it up! You can even #rDelete#k any style that you don't like. But once it is deleted you won't get it back so BE CAREFUL!\r\n#i3800643#") + sm.sendSay("You can save up to 3 sets of faces and hairstyles. You can use NX to get more slots, too. That way you can collect all the amazing looks of MapleStory!\r\n#i3800644#") + sm.sendSay("Rather than have me explain it a hundred times, why don't you try it out yourself? Here, I'll give you a coupon for a look that I created just for this. Give it a try right now.") + if sm.sendAskAccept("Now that you've learned all about the Beauty Salon, would you like to try using these style coupons?\r\n#e#rMake sure you save your current style in the salon before you proceed!#k#n"): + sm.giveItem(2543041) + sm.giveItem(2432547) + # The items should be expiration for 24hrs + sm.completeQuestNoRewards(52930) + sm.dispose() + else: + sm.sendSayOkay("Come back with the character you want to have the hot new look, and listen to the explanation.") + sm.dispose() +else: + sm.sendSayOkay("Come back to me whenever you would like to learn about it. I even have a special gift prepared for patient, attentive people, so don't miss out!") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q5499e.py b/scripts/quest/q5499e.py new file mode 100755 index 0000000..ceaa232 --- /dev/null +++ b/scripts/quest/q5499e.py @@ -0,0 +1,20 @@ +# The Curbrock in the Grass (5499) + +SABITRAMA = 1061005 # NPC ID +CURBROCKS_BADGE = 1182054 # ITEM ID + +sm.setSpeakerID(SABITRAMA) +sm.sendNext("You don't look well, my friend.") + +sm.sendSay("The rumors are true. " + "We must stop him before he eats anyone else.\r\n" + "But you are still too weak. " + "Return to me when you are stronger.\r\n\r\n" + "I will give you #v1182054# #b#z1182054##k as a gift.") + +if sm.canHold(CURBROCKS_BADGE): + sm.giveItem(CURBROCKS_BADGE) + sm.completeQuest(parentID) + +else: + sm.sendSayOkay("Please make sure you have room in your inventory, and talk to me again.") \ No newline at end of file diff --git a/scripts/quest/q5499s.py b/scripts/quest/q5499s.py new file mode 100755 index 0000000..0560b2b --- /dev/null +++ b/scripts/quest/q5499s.py @@ -0,0 +1,38 @@ +# The Curbrock in the Grass (5499) + +SABITRAMA = 1061005 # NPC ID +CURBROCKS_HIDEOUT = 600050000 # MAP ID +CURBROCKS_ESCAPE_ROUTE = 600050030 # MAP ID + +sm.setSpeakerID(SABITRAMA) + +if sm.getFieldID() == CURBROCKS_HIDEOUT or \ + sm.getFieldID() == CURBROCKS_ESCAPE_ROUTE: + sm.sendSayOkay("Please leave before reaccepting this quest again.") + +else: + sm.sendNext("Have you come to hear the story of Curbrock?") + + sm.sendSay("Come close, then, and I will tell you my tale.") + + sm.sendSay("Long ago, there was a snake that tried to become a man by eating helpless human beings.") + + sm.sendSay("The snake pretended to be like us, even taking on a human name--Curbrock! " + "However, when the rumors of his evil spread, he vanished.") + + sm.sendSay("But I've heard rumors recently. " + "People have been vanishing from SleepyWood. " + "They say that Curbrock has returned.") + + response = sm.sendAskYesNo("Would you go there for yourself and see if these rumors are true? " + "I can send you there now if you want.\r\n\r\n" + "#b(You'll be teleported to the Curbrock's Hideout if you accept.#k " + "#bForfeit and reaccept the quest to start again.)#k") + + if response: + sm.sendNext("Remember, Curbrock is deadly. " + "You must run away if you meet him!") + + chr.setPreviousFieldID(chr.getFieldID()) + sm.startQuest(parentID) + sm.warpInstanceIn(CURBROCKS_HIDEOUT) \ No newline at end of file diff --git a/scripts/quest/q5500s.py b/scripts/quest/q5500s.py new file mode 100755 index 0000000..33c4255 --- /dev/null +++ b/scripts/quest/q5500s.py @@ -0,0 +1,29 @@ +# The New Me (5500) + +SABITRAMA = 1061005 # NPC ID +CURBROCKS_HIDEOUT_VER2 = 600050010 # MAP ID +CURBROCKS_ESCAPE_ROUTE_VER2 = 600050040 # MAP ID 2 +CURBROCKS_ESCAPE_ROUTE_VER3 = 600050050 # MAP ID 3 + +sm.setSpeakerID(SABITRAMA) + +if sm.getFieldID() == CURBROCKS_ESCAPE_ROUTE_VER2 or \ + sm.getFieldID() == CURBROCKS_ESCAPE_ROUTE_VER3: + sm.sendSayOkay("Please leave before reaccepting this quest again.") + +else: + sm.sendNext("Oh my... I can feel overflowing energy from your body. " + "Do you still remember the rumour about Curbrock?") + + sm.sendSay("Recently, many people have disappearing from the Broken city. " + "The rumour about Curbrock's return is spreading throughout the city.") + + response = sm.sendAskYesNo("Then, are you ready to defeat #rCurbrock right away?#k") + + if response: + sm.sendNext("Curbrock will only fall to your strongest attack. " + "Good luck!") + + chr.setPreviousFieldID(chr.getFieldID()) + sm.startQuest(parentID) + sm.warpInstanceIn(CURBROCKS_HIDEOUT_VER2) \ No newline at end of file diff --git a/scripts/quest/q5501s.py b/scripts/quest/q5501s.py new file mode 100755 index 0000000..06ab3a0 --- /dev/null +++ b/scripts/quest/q5501s.py @@ -0,0 +1,34 @@ +# Curbrock's Revenge (5501) + +SABITRAMA = 1061005 # NPC ID +CURBROCKS_HIDEOUT_VER3 = 600050020 # MAP ID +CURBROCKS_ESCAPE_ROUTE_VER3 = 600050050 # MAP ID 3 + +sm.setSpeakerID(SABITRAMA) + +if sm.getFieldID() == CURBROCKS_ESCAPE_ROUTE_VER3: + sm.sendSayOkay("Please leave before reaccepting this quest again.") + +else: + sm.sendNext("The rumors are true. " + "Curbrock has returned, and the people are worried.") + + sm.sendSay("However, he doesn't seem to be interested in anyone but you.") + + response = sm.sendAskYesNo("I can send you there now if you want. " + "Are you prepared?") + + if response: + sm.sendNext("Since you last fought, Curbrock has learned a few new tricks.") + + sm.sendSay("His Seal spell will stop you from using your skills.") + + sm.sendSay("His Blind spell will stop you from seeing.") + + sm.sendSay("And his Stun spell will stop you from moving.") + + sm.sendSay("If you can avoid or counter his spells, you might yet beat him.") + + chr.setPreviousFieldID(chr.getFieldID()) + sm.startQuest(parentID) + sm.warpInstanceIn(CURBROCKS_HIDEOUT_VER3) \ No newline at end of file diff --git a/scripts/quest/q5519e.py b/scripts/quest/q5519e.py new file mode 100755 index 0000000..5125e8a --- /dev/null +++ b/scripts/quest/q5519e.py @@ -0,0 +1,6 @@ +# Tot's reward lv 20 + +sm.completeQuest(5519) +# Lv. 20 Equipment box +sm.giveItem(2431876, 1) +sm.dispose() diff --git a/scripts/quest/q5520e.py b/scripts/quest/q5520e.py new file mode 100755 index 0000000..c012487 --- /dev/null +++ b/scripts/quest/q5520e.py @@ -0,0 +1,6 @@ +# Tot's reward lv 30 + +sm.completeQuest(5520) +# Lv. 30 Equipment box +sm.giveItem(2433956, 1) +sm.dispose() diff --git a/scripts/quest/q5521e.py b/scripts/quest/q5521e.py new file mode 100755 index 0000000..f705de5 --- /dev/null +++ b/scripts/quest/q5521e.py @@ -0,0 +1,6 @@ +# Tot's reward lv 40 + +sm.completeQuest(5521) +# Lv. 40 Equipment box +sm.giveItem(2431877, 1) +sm.dispose() diff --git a/scripts/quest/q5522e.py b/scripts/quest/q5522e.py new file mode 100755 index 0000000..e322de0 --- /dev/null +++ b/scripts/quest/q5522e.py @@ -0,0 +1,6 @@ +# Tot's reward lv 50 + +sm.completeQuest(5522) +# Lv. 50 Equipment box +sm.giveItem(2430450, 1) +sm.dispose() diff --git a/scripts/quest/q55234s.py b/scripts/quest/q55234s.py new file mode 100755 index 0000000..60089a5 --- /dev/null +++ b/scripts/quest/q55234s.py @@ -0,0 +1,56 @@ +# Created by MechAviv +# Quest ID :: 55234 +# [Alishan] Spirit's Whisper + +sm.setSpeakerID(9330458) +sm.flipDialoguePlayerAsSpeaker() +if sm.sendAskAccept("Hmm, I thought I heard something... Maybe I should pay more attention."): + sm.setSpeakerID(9330458) +sm.flipDialoguePlayerAsSpeaker() +if sm.sendAskAccept("Hmm, I thought I heard something... Maybe I should pay more attention."): + sm.setNpcOverrideBoxChat(9330458) + sm.sendNext("Hello... anyone there? Please, someone answer.") + + + sm.setSpeakerID(9330458) + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.sendSay("H-hello? Spooky voice?") + + + sm.setNpcOverrideBoxChat(9330458) + sm.sendSay("Yes? Can you hear me?") + + + sm.setSpeakerID(9330458) + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.sendSay("Yes, but where are you? This is creepy.") + + + sm.setNpcOverrideBoxChat(9330458) + sm.sendSay("Oh, thank goodness! I need your help. Shao...") + + + sm.setSpeakerID(9330458) + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.sendSay("Okay, but please don't telep-") + + sm.startQuest(55234) + sm.warp(749080900, 0) +else: + sm.setSpeakerID(9330458) + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.setColor(1) + sm.sendSayOkay("Am I hearing things?") + + diff --git a/scripts/quest/q55235e.py b/scripts/quest/q55235e.py new file mode 100755 index 0000000..1dec07b --- /dev/null +++ b/scripts/quest/q55235e.py @@ -0,0 +1,24 @@ +# id 55235 ([Alishan] Where in the Other World?), field 800000202 +sm.setSpeakerID(9330459) # Xiaoming +sm.setParam(37) +sm.setColor(1) +#sm.setInnerOverrideSpeakerTemplateID(9330459) # Xiaoming +sm.sendNext("I was thinking... I know you didn't come to #bLeshan#k as a tourist, but maybe you could, y'know, ease into it? ") +sm.setParam(57) +sm.sendSay("Ummm...") +sm.setParam(37) +sm.sendSay("GREAT! Okay, so... Do you see that beautiful mountain over there? We call that mountain #bAlishan#k! It's the jewel of our village.") +sm.sendSay("As beautiful as the mountain is, we don't get many visitors up here. I made some posters, but I don't know if crayon is professional enough.") +sm.setParam(57) +sm.sendSay("Ummm...") +sm.setParam(37) +sm.sendSay("So, hey... You seem to be okay with being in another world right now. Are you used to this kinda thing?") +sm.setParam(57) +sm.sendSay("Ummm...") +sm.setParam(37) +sm.sendSay("Don't worry, I've seen lots of people like you lately.") +sm.setParam(57) +sm.sendSay("Really? People like me?") +sm.setParam(37) +sm.sendSay("Yeah, but I think #b#p9330460##k sent them back to... wherever you folks come from. And speaking of #b#p9330460##k, you should go find him. After you buy something, of course!") +sm.createQuestWithQRValue(18418, "B=3334") diff --git a/scripts/quest/q5523e.py b/scripts/quest/q5523e.py new file mode 100755 index 0000000..65c50af --- /dev/null +++ b/scripts/quest/q5523e.py @@ -0,0 +1,6 @@ +# Tot's reward lv 60 + +sm.completeQuest(5523) +# Lv. 60 Equipment box +sm.giveItem(2433958, 1) +sm.dispose() diff --git a/scripts/quest/q5671e.py b/scripts/quest/q5671e.py new file mode 100755 index 0000000..276d2c3 --- /dev/null +++ b/scripts/quest/q5671e.py @@ -0,0 +1,52 @@ +# Created by MechAviv +# Quest ID :: 5671 +# Not coded yet + +sm.completeQuest(5671) +sm.completeQuest(5758) +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.showNpcSpecialActionByTemplateId(9270083, "summon", 0) +sm.setSpeakerID(0) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("Burke! Are you okay?") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("It's nothing... But one of them took the key to the shuttle...") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendSay("He's in the control room... I think he's going to shut everything down.") + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendSay("I'll stop them, Burke. You just wait here.") + + +sm.sendDelay(1000) + + +sm.setSpeakerID(9270083) +sm.removeEscapeButton() +sm.setSpeakerType(3) +sm.sendNext("...Jett...") + + +sm.sendDelay(1000) + + +sm.chatScript("Follow the arrows to the Key Keeper's Room.") +sm.startQuest(5672) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) diff --git a/scripts/quest/q5672e.py b/scripts/quest/q5672e.py new file mode 100755 index 0000000..7316275 --- /dev/null +++ b/scripts/quest/q5672e.py @@ -0,0 +1,26 @@ +# Created by MechAviv +# Quest ID :: 5672 +# Not coded yet + +sm.completeQuest(5672) +sm.completeQuest(5758) +sm.curNodeEventEnd(True) +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(True, True, False, False) +sm.sendDelay(1000) + + +sm.setSpeakerID(9270085) +sm.removeEscapeButton() +sm.setPlayerAsSpeaker() +sm.setSpeakerType(3) +sm.sendNext("I got it. Guess it's time to be going.") + + +sm.sendDelay(1000) + + +sm.setTemporarySkillSet(0) +sm.setInGameDirectionMode(False, True, False, False) + +sm.warp(620100028, 0) diff --git a/scripts/quest/q57103e.py b/scripts/quest/q57103e.py new file mode 100755 index 0000000..353bb9b --- /dev/null +++ b/scripts/quest/q57103e.py @@ -0,0 +1,17 @@ +# 57103 - Picking up the Pieces + +sm.setSpeakerID(9130024) +sm.sendNext("This place appears to be our land, but do you feel it? The air is too sweet, the ground is too soft.") +sm.setPlayerAsSpeaker() +sm.sendNext("But it looks like Japan, like our home.") +sm.setSpeakerID(9130024) +sm.sendNext("I too believed this place to be Japan, but I assure you it is not. We are in a different world. Whatever that strange light was at Honnou-Ji, it has sent us somewhere we could never have imagined.") +sm.setPlayerAsSpeaker() +sm.sendNext("This sounds preposterous, yet...") +sm.setSpeakerID(9130024) +if sm.sendAskYesNo("I will take you to the others. We have established a temporary base of operations, hidden in the forest at the top of this hill. You will seee that I speak the truth."): + sm.completeQuest(parentID) + sm.dispose() +else: + sm.sendNext("Speak to me again after you wish to enter our base of operations.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q57103s.py b/scripts/quest/q57103s.py new file mode 100755 index 0000000..ecfab53 --- /dev/null +++ b/scripts/quest/q57103s.py @@ -0,0 +1,16 @@ +# 57103 - Picking up the Pieces + +sm.setSpeakerID(9130024) +if sm.sendAskYesNo("I am Yamanaka Yukimori, a retainer to the Amako clan. I was at Honnou-ji with you. Before we continue, may i ask your name?"): + sm.setPlayerAsSpeaker() + sm.startQuest(parentID) + sm.sendNext("I Am Anegasaki Kenji, heir to the Matsuyama clan, and the descendant of Anegasaki Tomonobu") + sm.setSpeakerID(9130024) + sm.sendNext("Anegasaki Kenji... I've heard that name before! It's my honor to meet the master of Battoujutsu.") + sm.setPlayerAsSpeaker() + sm.sendNext("Please do not fawn over me, noble warrior. If i had known you were at Honnou-Ji, I would have greeted you as a brother.") + sm.setSpeakerID(9130024) + sm.sendNext("Much has happened since the raid on Honnou-Ji. I will fill you in when you have gathered yourself.") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q57105e.py b/scripts/quest/q57105e.py new file mode 100755 index 0000000..7dbe761 --- /dev/null +++ b/scripts/quest/q57105e.py @@ -0,0 +1,11 @@ +# 57105 | powerless + +sm.setPlayerAsSpeaker() +sm.sendNext("Argh! I-I cannot control my muscles. I feel as though I were covered in rice paste. Are my injuries that severe?") +sm.setSpeakerID(9130008) +sm.sendNext("The rules of this world are quite different from japan. The shift in spiritual energies has weakened even the strongest among us.") +sm.setPlayerAsSpeaker() +sm.sendNext("What good is all my training if I cannot move without hindrance? What curse has befallen us?") +sm.setSpeakerID(9130008) +sm.sendNext("I have no need for soldiers without the simle willpower to overcome a small obstacle. There is a solution to every problem.") +sm.completeQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q57105s.py b/scripts/quest/q57105s.py new file mode 100755 index 0000000..01d5fd5 --- /dev/null +++ b/scripts/quest/q57105s.py @@ -0,0 +1,14 @@ +# 57105 | powerless +sm.setSpeakerID(9130008) +sm.sendNext("Who are you?") +sm.setPlayerAsSpeaker() +sm.sendNext("Mouri Motonari! We met at the Honnou-Ji military council. I am Anegasaki Kenji, a retainer to the Matsuyama clan. I've just arrived.") +sm.setSpeakerID(9130008) +sm.sendNext("The Mouri welcome you to Momijigaoka, Matsuyama clan. My sons and I were the first to arrive, so we set up a base of operations. We must all work together, under my guidance, to adjust to this new world.") +sm.setPlayerAsSpeaker() +sm.sendNext("what do you mean 'adjust'?") +if sm.sendAskYesNo("Attempt to move as you normally would, Anegasaki Kenji."): + sm.startQuest(parentID) + sm.dispose() +else: + sm.dispose() diff --git a/scripts/quest/q57110s.py b/scripts/quest/q57110s.py new file mode 100755 index 0000000..3eb2ea3 --- /dev/null +++ b/scripts/quest/q57110s.py @@ -0,0 +1,13 @@ +# 57110 | Counterintelligence +sm.setSpeakerID(9130008) +sm.sendNext("A report has just come in about soldiers in dark armor circling the outskirts of Momijigaoka.") +sm.setPlayerAsSpeaker() +sm.sendNext("Soldiers in dark armor... Oda! They must have been brought to this world as well!") +sm.setSpeakerID(9130008) +sm.sendNext("There is no doubt they are Oda's soldiers. However, I am sure they have not discovered the base. Their movements are too erratic.") +if sm.sendAskYesNo("It is only a matter of time before they stumble onto our nest, most likely due to blind luck. We would be best served if someone were to go fight them. Don't you think, Hayato?"): + sm.startQuest(parentID) + sm.sendNext("Well then, I suppose you should get to work. The reports mention Maple Hill Road. I would expect resistance, and I would not be surprised if you find more difficult than you expected.") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q57162s.py b/scripts/quest/q57162s.py new file mode 100755 index 0000000..92e2579 --- /dev/null +++ b/scripts/quest/q57162s.py @@ -0,0 +1,22 @@ +from net.swordie.ms.enums import InvType + +# Hayato 2nd job adv | 57162 +sm.setPlayerAsSpeaker() +sm.sendNext("This battle is not over, yet I feel a sense of peace. This world is not so different from my own.") +sm.sendNext("I feel like my old self, yet stronger. I believe this world holds many new challenges for me.") +sm.sendNext("I have not yet regained all of my Battoujutsu skills, but one day they will return. One day, the falcon will take flight once again.") +if sm.getEmptyInventorySlots(InvType.getInvTypeByString("equip")) >= 7: + sm.giveItem(1542002) + sm.giveItem(1003555) + sm.giveItem(1052464) + sm.giveItem(1082435) + sm.giveItem(1072669) + sm.giveItem(1352801) + sm.giveItem(1142491) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.jobAdvance(4110) + sm.dispose() +else: + sm.sendNext("Please make space in your Equip inventory.") + sm.dispose() diff --git a/scripts/quest/q57163s.py b/scripts/quest/q57163s.py new file mode 100755 index 0000000..4f68fc5 --- /dev/null +++ b/scripts/quest/q57163s.py @@ -0,0 +1,5 @@ +# Hayato 3rd Job Advancement + +sm.jobAdvance(4111) +sm.startQuest(parentID) +sm.completeQuest(parentID) diff --git a/scripts/quest/q57164s.py b/scripts/quest/q57164s.py new file mode 100755 index 0000000..0db8735 --- /dev/null +++ b/scripts/quest/q57164s.py @@ -0,0 +1,5 @@ +# Hayato 4th Job Advancement + +sm.jobAdvance(4112) +sm.startQuest(parentID) +sm.completeQuest(parentID) diff --git a/scripts/quest/q57400s.py b/scripts/quest/q57400s.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/quest/q57402e.py b/scripts/quest/q57402e.py new file mode 100755 index 0000000..e6fbbbd --- /dev/null +++ b/scripts/quest/q57402e.py @@ -0,0 +1,39 @@ +# Quest: Fresh Start (57402) +# Author: Tiger + +KANETSUGU = 9130022 + +if sm.hasQuestCompleted(57401) and chr.getLevel() >= 11: # Quest: Zipangu's World + sm.removeEscapeButton() + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendNext("This is the new base, Momijigaoka. Mouri, a prominent member of the alliance, gathered the first to arrive in this new world and established a group.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Momijigaoka... Autumn's blood-red leaves. A fitting name.") + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendSay("Mouri wouldn't have it any other way. Go see him inside the stronghold. He has plans for you.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("What about you?") + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendSay("I must continue searching for Kenshin-Daimyo. I can't shake the feeling that she's lost somewhere in this place, surrounded by danger, calling out for me. I can know no peace nor rest until she is found.") + + sm.completeQuest(57402) # Fresh Start + sm.giveItem(2000000, 100) # Red Potions x100 + sm.giveItem(2000003, 100) # Blue Potions x100 + sm.giveItem(1004550) # Spirit Walker Hat + sm.giveItem(1052479) # Lunar Short Onmyouji Robes + sm.giveItem(1082450) # Lunar Bracelet + sm.giveItem(1072684) # Lunar Shoes + sm.giveItem(1552000) # Iron Fan + sm.giveItem(1142506) # Yin and Yang diff --git a/scripts/quest/q57402s.py b/scripts/quest/q57402s.py new file mode 100755 index 0000000..b2b1eea --- /dev/null +++ b/scripts/quest/q57402s.py @@ -0,0 +1,33 @@ +# Quest: Fresh Start (57402) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57401) and chr.getLevel() >= 11: # Quest: Zipangu's World + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("An extraordinary event... talk of another world... Nothing makes sense.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("The crazy guy had a point. This certainly isn't Japan. There isn't a blade of grass I don't recognize in Japan.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Could interrupting the ritual have caused this? Maybe we were too late after all. What do you think happened to Haruaki and Princess Sakuno?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("No need to blame yourself. You did what you could. Wake me up next time you need to stop a ritual in time. You know that's my thing. For now, we should check out that new base Kanetsugu mentioned. They might have food. Or comfy beds.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I hope Haruaki and the Princess are safe.") + + sm.startQuest(57402) # Fresh Start + # TODO: Start Navigation to -> Momijigaoka : Momijigaoka Entrance (807040100) diff --git a/scripts/quest/q57403e.py b/scripts/quest/q57403e.py new file mode 100755 index 0000000..39968a0 --- /dev/null +++ b/scripts/quest/q57403e.py @@ -0,0 +1,32 @@ + +# Quest: Powerless (57403) +# Author: Tiger + +MOURI = 9130006 + +if sm.hasQuestCompleted(57402) and chr.getLevel() >= 12: # Fresh Start + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("What's this? My legs feel like jelly. And I can't feel an ounce of energy flowing through me.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("You only noticed that now? Perhaps you're too slow to be of help after all.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("You don't feel the energy because it's not here. This place is completely different than Japan.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("How am I supposed to regain my strength?") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("Ah, the first sensible sentence out of your mouth! You train, my dear.") + + sm.completeQuest(57403) # Powerless diff --git a/scripts/quest/q57403s.py b/scripts/quest/q57403s.py new file mode 100755 index 0000000..0c08439 --- /dev/null +++ b/scripts/quest/q57403s.py @@ -0,0 +1,34 @@ +# Quest: Powerless (57403) +# Author: Tiger + +MOURI = 9130006 + +if sm.hasQuestCompleted(57402) and chr.getLevel() >= 12: # Fresh Start + sm.removeEscapeButton() + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendNext("Ah, you will...") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I'm Kanna, Tsuchimikado Haruaki's star pupil. I believe we met briefly during the Honnou-ji raid, but I'd like to formally introduce myself.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("You dare invite yourself into Momijigaoka? This is a sacred place, a slice of Japan. My sons and I didn't toil for days to build fortifications and clear this place of enemies just to have a fool disrespectfully blunder their way in.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Excuse me? Kanetsugu sent me here, but obviously I have the wrong person. ") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + if sm.sendAskAccept("You are the one Kanetsugu spoke of, then? No, no. Don't leave. I may have need of your help. But first, show me you can still move normally. The workings of this world are different from that with which we are familiar."): + sm.startQuest(57403) # Powerless + else: + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendNext("Try to move around.") diff --git a/scripts/quest/q57407e.py b/scripts/quest/q57407e.py new file mode 100755 index 0000000..05d6779 --- /dev/null +++ b/scripts/quest/q57407e.py @@ -0,0 +1,27 @@ + +# Quest: Dark Times (57407) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57406) and chr.getLevel() >= 16: # Adaptation 3 + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("Well...I just had a big meal. You can't expect me to perform on a full stomach. Besides, shouldn't we be finding out where master is? And Princess Sakuno? Nobunaga's plans for her probably don't align with ours.") + sm.sendSay("Could Nobunaga have come to this world too? It's not out of the question. I need to start finding some answers.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("You'll need your real skills back too. It's no fun watching you fight anymore.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I'll get there. I don't care if I have to kill 5,000 enemies.") + + sm.completeQuest(57407) # Dark Times + sm.giveItem(2000001, 100) # Orange Potion x 100 + sm.giveItem(2000003, 200) # Blue Potion x 100 diff --git a/scripts/quest/q57407s.py b/scripts/quest/q57407s.py new file mode 100755 index 0000000..166ad45 --- /dev/null +++ b/scripts/quest/q57407s.py @@ -0,0 +1,23 @@ +# Quest: Dark Times (57407) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57406) and chr.getLevel() >= 16: # Adaptation 3 + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("I endured Motonari's training, and his attitude, but my strength is still at an all-time low.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Well, that's the best you can do for now. I must say, I don't feel the whole 'different rules' thing everyone's been talking about. I feel fine.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Is that so? Let me see you walk, then.") + + sm.startQuest(57407) # Dark Times diff --git a/scripts/quest/q57408s.py b/scripts/quest/q57408s.py new file mode 100755 index 0000000..ade5fdb --- /dev/null +++ b/scripts/quest/q57408s.py @@ -0,0 +1,27 @@ + +# Quest: Blind and Battered 1 (57408) +# Author: Tiger + +MOURI = 9130006 + +if sm.hasQuestCompleted(57407) and chr.getLevel() >= 17: # Dark Times + sm.removeEscapeButton() + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendNext("Kanna, soldiers in dark armor have appeared in the area. With all the ruckus you make while training, I can't say I'm surprised.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("But you're the one who made me train in the first place!") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("An insignificant detail. It seems that Nobunaga's soldiers came to this world when we did. We weren't the only ones affected by the light. The soldiers are lightly armed and very disorganized. They're scouts, and poor ones at that.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + if sm.sendAskAccept("They haven't found our base yet, but they draw closer with each passing day. It's only a matter of time before Momijigaoka is exposed to the enemies. I'm making it your duty to destroy them."): + sm.startQuest(57408) # Blind and Battered 1 + # TODO: send dis Navigation to -> Momijigaoka : Maple Hill Road 1 (807010000) diff --git a/scripts/quest/q57409e.py b/scripts/quest/q57409e.py new file mode 100755 index 0000000..e0bec66 --- /dev/null +++ b/scripts/quest/q57409e.py @@ -0,0 +1,37 @@ + +# Quest: Blind and Battered 2 (57409) +# Author: Tiger + +KANETSUGU = 9130022 +KANETSUGU_2 = 9130084 +HAKU = 9130081 + +if sm.hasQuestCompleted(57408) and chr.getLevel() >= 17: # Blind and Battered 1 + sm.removeEscapeButton() + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendNext("Oh, hey Kanna. You were still out there fighting? Trying to break my record? I think Motonari wants you to return.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I'm just doing a thorough job, Kanetsugu. Not trying to compete. For the record, how many more scouts did you take care of?") + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendSay("I'm making pretty slow progress. I think I got...I don't know...72 more? I wasn't really counting. Probably missed 10 or 20.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Errr.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("What's with that vein in your forehead?") + + sm.setSpeakerID(KANETSUGU_2) + sm.setBoxChat() + if sm.sendAskYesNo("Listen, I'm going to stay behind and search for Kenshin. She doesn't have a speck of fat on her, so she's probably starving to death. As her loyal servant, I may have to allow her to eat me. You should head back to camp."): + sm.completeQuest(57409) # Blind and Battered 2 diff --git a/scripts/quest/q57409s.py b/scripts/quest/q57409s.py new file mode 100755 index 0000000..da22038 --- /dev/null +++ b/scripts/quest/q57409s.py @@ -0,0 +1,55 @@ + +# Quest: Blind and Battered 2 (57409) +# Author: Tiger + +KANETSUGU = 9130022 +HAKU = 9130081 + +if sm.hasQuestCompleted(57408) and chr.getLevel() >= 17: # Blind and Battered 1 + sm.hideNpcByTemplateId(KANETSUGU, False) + sm.removeEscapeButton() + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendNext("Looks like we got the same mission. Motonari must have meant for us to compete!") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I don't think that's what he sa...") + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendSay("I got 40 already. Not bad for a new world with messed up physics.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("...") + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + if sm.sendAskAccept("Hey! There's another enemy. Excuse me, Kanna. I've got more work to do!"): + sm.startQuest(57409) # Blind and Battered 2 + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendNext("Don't let him get to you. Forty enemies is ridiculous. No one expects you to get that many.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("What's that supposed to mean?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Maybe you're just not cut out for this world.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Whose side are you on, Haku?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Yours, of course. Do you think I'd ride around with you all day if I didn't want you to win?") diff --git a/scripts/quest/q57410e.py b/scripts/quest/q57410e.py new file mode 100755 index 0000000..bddf6e7 --- /dev/null +++ b/scripts/quest/q57410e.py @@ -0,0 +1,27 @@ + +# Quest: Blind and Battered 3 (57410) +# Author: Tiger + +UESUGI_KENSHIN = 9130009 +HAKU = 9130081 + +if sm.hasQuestCompleted(57409) and chr.getLevel() >= 18: # Blind and Battered 2 + sm.removeEscapeButton() + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendNext("Who's that?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("!!!!!!!!!!!!!!!!!!!!!!!!!") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("I see why Kanetsugu is so enamored. A true goddess of the battlefield.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + if sm.sendAskAccept("You're not an enemy soldier..."): + sm.completeQuest(57410) # Blind and Battered 3 diff --git a/scripts/quest/q57410s.py b/scripts/quest/q57410s.py new file mode 100755 index 0000000..16bd618 --- /dev/null +++ b/scripts/quest/q57410s.py @@ -0,0 +1,33 @@ + +# Quest: Blind and Battered 3 (57410) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57409) and chr.getLevel() >= 18: # Blind and Battered 2 + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("This isn't enough. I have to be more thorough. Every scout left standing is a liability.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("You're doing fine, Kanna. Kanetsugu's been at this longer than you.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I didn't ask about Kanetsugu! He's not even worth my time. He's obviously lying about his numbers anyway. Do you really think he's faster than a Spirit Walker?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("I'll exercise my right to remain silent.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("That's a first... How about you continue doing that while I search deeper in the battlefield for the higher-ranked soldiers. If I defeat them, the other scouts might turn back.") + sm.startQuest(57410) # Blind and Battered 3 + # Need to Start Navigation to -> Momijigaoka : Maple Hill Road 2 (807010100) diff --git a/scripts/quest/q57411e.py b/scripts/quest/q57411e.py new file mode 100755 index 0000000..f3ef2b5 --- /dev/null +++ b/scripts/quest/q57411e.py @@ -0,0 +1,49 @@ + + +# Quest: Blind and Battered 4 (57411) +# Author: Tiger + +UESUGI_KENSHIN = 9130009 +HAKU = 9130081 + +if sm.hasQuestCompleted(57410) and chr.getLevel() >= 19: # Blind and Battered 3 + sm.removeEscapeButton() + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + if sm.sendAskYesNo("Kanna! I felt your energy on the battlefield."): + sm.sendNext("Did you satisfy your lust for blood?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Um... My lust for blood can never be satisfied!") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("Excellent. You'd make the perfect pupil! Much better than that wretched Kanetsugu... I kept track until the 200th enemy, but they fell faster than I could count toward the end.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Kenshin. You're amazing.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("You'd like anyone who favored you over Kanetsugu.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("You seem to know what's going on here. All I remember is a flash of light and a long fall that ended with me stuck in the trees again.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("(Did she just say 'again'?)") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("We've set up a base nearby called Momijigaoka. I'll explain everything I know when we get there.") + + sm.completeQuest(57411) # Blind and Battered 4 + sm.warp(807000000, 2) # Momijigaoka : Momijigaoka diff --git a/scripts/quest/q57411s.py b/scripts/quest/q57411s.py new file mode 100755 index 0000000..07d1878 --- /dev/null +++ b/scripts/quest/q57411s.py @@ -0,0 +1,33 @@ + +# Quest: Blind and Battered 4 (57411) +# Author: Tiger + +UESUGI_KENSHIN = 9130009 +HAKU = 9130081 + +if sm.hasQuestCompleted(57410) and chr.getLevel() >= 19: # Blind and Battered 3 + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("I'm so glad you're all right, Kenshin. Kanetsugu would have died of grief if something had happened to you. Listen, we're in a strange world, so your skills aren't...") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("You listen to me. There are enemies about and I have a sword in my hand. This is the battlefield, not a tea house. Do you know what happens on a battlefield? Battle. ") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("She's fast.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("She isn't even fazed by this place. How does she do it? I'd better go after the Advanced Scouts here. How many will it take to impress her? Fifty?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Don't tell me you're thinking about competing against that goddess of war. She's ten times better than Kanetsugu!") + + sm.startQuest(57411) # Blind and Battered 4 diff --git a/scripts/quest/q57412e.py b/scripts/quest/q57412e.py new file mode 100755 index 0000000..5a06884 --- /dev/null +++ b/scripts/quest/q57412e.py @@ -0,0 +1,48 @@ + +# Quest: Echigo's Dragon (57412) +# Author: Tiger + +TAKEDA = 9130000 +UESUGI_KENSHIN = 9130009 +HAKU = 9130081 +KANETSUGU = 9130022 +MOURI = 9130006 + +if sm.hasQuestCompleted(57411) and chr.getLevel() >= 19: # Blind and Battered 4 + sm.removeEscapeButton() + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendNext("I shall explain the extraordinary event that brought us here.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("(Motonari explained what happened to Takeda and the four people of Uesugi. He also revealed details about this strange world.)") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("So Nobunaga is here. I guess even Shingen's unflattering outburst held a tiny shred of truth.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("I've got more truth in my...") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("Silence! Put your childish differences aside and work together. Your arrival here is fortiutous, but Nobunaga will have nothing left to attack if you keep up this squabbling. We need to build our alliance until it is truly unstoppable!") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("Sounds like a lot of running around. The youngsters will have to pull their weight on this one. Yukimura, good luck!") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("Kanetsugu, make sure you don't lag behind Shingen's rookie!") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("With a team like this, we'll find the master and the princess in no time.") + + sm.completeQuest(57412) # Echigo's Dragon diff --git a/scripts/quest/q57412s.py b/scripts/quest/q57412s.py new file mode 100755 index 0000000..ab2a206 --- /dev/null +++ b/scripts/quest/q57412s.py @@ -0,0 +1,54 @@ + +# Quest: Echigo's Dragon (57412) +# Author: Tiger + +TAKEDA = 9130000 +UESUGI_KENSHIN = 9130009 +HAKU = 9130081 +KANETSUGU = 9130022 +MOURI = 9130006 + +if sm.hasQuestCompleted(57411) and chr.getLevel() >= 19: # Blind and Battered 4 + sm.removeEscapeButton() + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendNext("This is the new stronghold? Simple, practical, elegant... This is the work of Motonari.") + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendSay("Kanna, you won't believe my new record... K-Kenshin? Kenshin! You're safe! Oh my... thank... I can't... your beautiful face...") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Now that's love.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("Pull yourself together, Kanetsugu. Of course I'm safe. Kanna and I made short work of the situation in the woods.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("Oh... Kenshin. Guess Nobunaga's not the only dirty swamp rat that made it through.") + + sm.setSpeakerID(KANETSUGU) + sm.setBoxChat() + sm.sendSay("How dare you, Shingen!") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("This I like.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("I see the new lap dog is working out well. Barks on command too.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("He knows honor and loyalty. More than I could ever say for you.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("Kenshin. Shingen. Your quarrel stops now.") + + sm.startQuest(57412) # Echigo's Dragon diff --git a/scripts/quest/q57413e.py b/scripts/quest/q57413e.py new file mode 100755 index 0000000..53a8ac2 --- /dev/null +++ b/scripts/quest/q57413e.py @@ -0,0 +1,28 @@ + +# Quest: Commanding Aura (57413) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57412) and chr.getLevel() >= 20: # Echigo's Dragon + sm.removeEscapeButton() + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendNext("Kanna, do you feel that energy?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Yes. It's faint, but familiar. It's coming from somewhere nearby.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("It feels extremely powerful, even at this distance. It's coming from...over there!") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I think Momijigahara lies in that direction. Motonari said Oda's Army appeared there. We have to see for ourselves.") + + sm.completeQuest(57413) # Commanding Aura diff --git a/scripts/quest/q57413s.py b/scripts/quest/q57413s.py new file mode 100755 index 0000000..90a3dc3 --- /dev/null +++ b/scripts/quest/q57413s.py @@ -0,0 +1,22 @@ + +# Quest: Commanding Aura (57413) +# Author: Tiger + +MOURI = 9130006 + +if sm.hasQuestCompleted(57412) and chr.getLevel() >= 20: # Echigo's Dragon + sm.removeEscapeButton() + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendNext("Kanna, our base has been exposed to the enemy. It seems your paltry efforts weren't enough.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("Nobunaga's full army has yet to arrive, but he has plenty of strong soldiers stationed just outside Momijigaoka . Once his main force arrives, he will sweep over Momijigaoka like a tempest.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + if sm.sendAskAccept("We will not wait for the enemy to attack. We will deal the first strike and turn the tides of battle before Nobunaga has the chance. This is your task, Kanna."): + sm.startQuest(57413) # Commanding Aura + sm.sendNext("Good. Prepare yourself.") diff --git a/scripts/quest/q57414e.py b/scripts/quest/q57414e.py new file mode 100755 index 0000000..2c1b5ef --- /dev/null +++ b/scripts/quest/q57414e.py @@ -0,0 +1,33 @@ + +# Quest: Aura's Origin 1 (57414) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57413) and chr.getLevel() >= 20: # Commanding Aura + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("I'm exhausted. How does Kenshin take out hundreds of soldiers at a time? I didn't find the energy source either. Maybe it's not here.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("No. Trust me, it's here.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("How can you be so sure?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Kanna, I'm a fox.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("...Regardless, the energy was much stronger here than at Momijigaoka. ") + + sm.completeQuest(57414) # Aura's Origin 1 diff --git a/scripts/quest/q57414s.py b/scripts/quest/q57414s.py new file mode 100755 index 0000000..987c5b4 --- /dev/null +++ b/scripts/quest/q57414s.py @@ -0,0 +1,36 @@ + +# Quest: Aura's Origin 1 (57414) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57413) and chr.getLevel() >= 20: # Commanding Aura + sm.removeEscapeButton() + + if sm.getFieldID() != 807020000: # Momijigaoka : Momijigahara 1 + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("I must hurry to #b#m807020000##k.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("#b#m807020000##k is right over there.") + + # TODO: Show direction to -> # Momijigaoka : Momijigahara 1 (807020000) + else: + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("This is Momijigahara. Oda's Army is already building a camp. They move faster than I imagined. Monotari's intuition may have saved us.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("The energy's stronger here. Don't you just wanna lick it?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Oda's army must have brought something with them to generate this much energy. I have to find the source. I won't stop until I've defeated 50 soldiers. One of them must carry the energy.") + + sm.startQuest(57414) # Aura's Origin 1 diff --git a/scripts/quest/q57415e.py b/scripts/quest/q57415e.py new file mode 100755 index 0000000..fed011e --- /dev/null +++ b/scripts/quest/q57415e.py @@ -0,0 +1,37 @@ + +# Quest: Aura's Origin 2 (57415) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57414) and chr.getLevel() >= 21: # Aura's Origin 1 + if sm.hasItem(4033274): # Mysterious Foxtail + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("Yes! I was right. Do you feel it?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Look at that. Energy coming from a foxtail. Now do you believe in my mystical powers?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("This isn't your tail is it?") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Kanna, look at my tail. Bushy, magnificent, fully intact... Does it really look like that thing came from me? Besides, my tail is green... isn't it? I can't tell, I'm colorblind.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("You... seriously? Let's just get this back to the base to study it.") + + sm.consumeItem(4033274) # Mysterious Foxtail + sm.completeQuest(57415) # Aura's Origin 2 + + # Start Navigation to -> Momijigaoka : Momijigaoka (807000000) diff --git a/scripts/quest/q57417e.py b/scripts/quest/q57417e.py new file mode 100755 index 0000000..c04399a --- /dev/null +++ b/scripts/quest/q57417e.py @@ -0,0 +1,34 @@ + +# Quest: Foxtail Mystery (57417) +# Author: Tiger + +MOURI = 9130006 +TSUCHIMIKADO_HARUAKI = 9130010 + +if sm.hasQuestCompleted(57415) and chr.getLevel() >= 21: # Aura's Origin 2 + sm.removeEscapeButton() + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendNext("Hmm? Why the surprised looks? Kanna! I've been meaning to speak with you. Good job at Honnou-ji. You must have completed your mission with flying colors. That's my Spirit Walker.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("Haruaki... How did you inhabit the foxtail?") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("It's quite a long story. I arrived here before any of you. During the raid on Honnou-ji, I was somehow transported here at the same time as Nobunaga and his men.") + sm.sendSay("I disguised myself as a number of foxtails to avoid being discovered by Oda's Army, but his soldiers took a liking to me and brought me straight into their camp.") + sm.sendSay("If it wasn't for Kanna, I would be probably be part of a lovely coat by now.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("You know what they say: when in doubt, act as a fox would.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("That's not a saying, Haku.") + + sm.completeQuest(57417) # Foxtail Mystery diff --git a/scripts/quest/q57417s.py b/scripts/quest/q57417s.py new file mode 100755 index 0000000..0c6ffc6 --- /dev/null +++ b/scripts/quest/q57417s.py @@ -0,0 +1,46 @@ + +# Quest: Foxtail Mystery (57417) +# Author: Tiger + +MOURI = 9130006 +TAKEDA = 9130000 +UESUGI_KENSHIN = 9130009 + +if sm.hasQuestCompleted(57415) and chr.getLevel() >= 21: # Aura's Origin 2 + sm.removeEscapeButton() + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendNext("Good work, Kanna.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I felt a mysterious energy coming from Momijigahara and couldn't resist seeking it out. I apologize.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("No need to apologize. You begin to show promise, Kanna. I would not have expected such success from the bumbling dog that came to me to train. Keep it up and you may yet prove useful.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Thank you. Motonari. I found this on the battlefield. It emits an unusual energy. I was hoping you might recognize it.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("Ah, a white foxtail. This is strange. I've seen this before. Warriors from the raid returned with similar tails.") + sm.sendSay("Kenshin, Shingen. Do either of you have any idea what power this object holds?") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("Unless that thing's a lot sharper than it looks, I don't see the danger.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("It's so silky and voluminous. It must be incredibly powerful.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + if sm.sendAskAccept("So you know nothing. Then we'll have to gather up all the foxtails we can find and experiment."): + sm.startQuest(57417) # Foxtail Mystery diff --git a/scripts/quest/q57418e.py b/scripts/quest/q57418e.py new file mode 100755 index 0000000..cd992cf --- /dev/null +++ b/scripts/quest/q57418e.py @@ -0,0 +1,37 @@ + +# Quest: Picking up the Pieces (57418) +# Author: Tiger + +TSUCHIMIKADO_HARUAKI = 9130010 + +if sm.hasQuestCompleted(57417) and chr.getLevel() >= 22: # Foxtail Mystery + sm.removeEscapeButton() + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendNext("Princess Sakuno is not among us.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Yes. Unfortunately, we don't know where she is. Nobunaga's forces may have found her first.") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("Worry not. They need her alive just as much as we do. The ritual requires the blood of her lineage. After the ritual...") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("We won't let them get that far.") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("I trust in your abilities, Kanna, but do not stretch yourself too thin. I fear the fates of Princess Sakuno and Nobunaga will rest on your shoulders before this is over, and if that time should come, you must be ready.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Princess Sakuno won't have to endure Nobunaga's wretched grasp much longer.") + + sm.completeQuest(57418) # Picking up the Pieces diff --git a/scripts/quest/q57418s.py b/scripts/quest/q57418s.py new file mode 100755 index 0000000..827a42e --- /dev/null +++ b/scripts/quest/q57418s.py @@ -0,0 +1,50 @@ + +# Quest: Picking up the Pieces (57418) +# Author: Tiger + +MOURI = 9130006 +TAKEDA = 9130000 +UESUGI_KENSHIN = 9130009 +TSUCHIMIKADO_HARUAKI = 9130010 + +if sm.hasQuestCompleted(57417) and chr.getLevel() >= 22: # Foxtail Mystery + sm.removeEscapeButton() + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendNext("I'm sure you all have questions about what brought us here.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("Please, Haruaki, enlighten us. Don't spare the details.") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("I'll start with the true purpose of Oda Nobunaga's ritual.") + sm.sendSay("Nobunaga sought to conjure the Sixth Sky Demon Lord from the Demon Skies. Just as this world is different from Japan, so are the Demon Skies. And just as we are now in contact with this world, it is possible to make contact with the Demon Skies through an ancient ritual.") + sm.sendSay("When Nobunaga discovered the Demon Skies, he devised a plan to create a portal from Japan and bring the Sixth Sky Demon Lord into our world.") + sm.sendSay("This is why I launched the mission at Honnou-ji. Thanks to your efforts, Nobunaga's ritual was interrupted.") + sm.sendSay("However, what happened next, none could have foreseen. The gate to the Demon Skies warped when we cut short the ritual, and we were transported here instead.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("This place is bad, but something tells me the Demon Skies would have been worse.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("Whatever world Nobunaga chooses to inhabit, we'll be there to meet him with swords drawn.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("But before we draw swords, we must recover our skills. We're all weak. The alliance must shine with the light of a thousand suns before we face Nobunaga.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("I don't know about everyone else, but my hair's at full power.") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("We'll create the strongest alliance this world has ever seen.") + sm.sendSay("Kanna, I'd like to talk to you privately.") + + sm.startQuest(57418) # Picking up the Pieces diff --git a/scripts/quest/q57420e.py b/scripts/quest/q57420e.py new file mode 100755 index 0000000..d5def5a --- /dev/null +++ b/scripts/quest/q57420e.py @@ -0,0 +1,36 @@ + +# Quest: First Contact (57420) +# Author: Tiger + +KINO_KONOKO = 9110002 + +if sm.hasQuestCompleted(57419) and chr.getLevel() >= 23: # Native Help + sm.removeEscapeButton() + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("Could you point me to the nearest shogun? I'm a skilled Spirit Walker and I would like to offer my services.") + + sm.setSpeakerID(KINO_KONOKO) + sm.setBoxChat() + sm.sendSay("Shogun? I think you mean...Empress Cygnus? She's in Ereve. I don't know that she'll appreciate you spirit walking near Shinsoo though.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Excuse my ignorance, but what is Ereve?") + + sm.setSpeakerID(KINO_KONOKO) + sm.setBoxChat() + sm.sendSay("Ereve is an island, silly.") + sm.sendSay("Are you sure you're from Maple World?") + sm.sendSay("I'm just kidding. Besides that, I've heard Edelstein is nice this time of year. Oh, wait. You weren't asking about vacation areas were you? You need to sharpen your sword or something?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Maple World. So that's what they call it.") + sm.sendSay("Thank you for your help. I will go to your Empress.") + + sm.completeQuest(57420) # First Contact diff --git a/scripts/quest/q57420s.py b/scripts/quest/q57420s.py new file mode 100755 index 0000000..cd74056 --- /dev/null +++ b/scripts/quest/q57420s.py @@ -0,0 +1,34 @@ + +# Quest: First Contact (57420) +# Author: Tiger + +KINO_KONOKO = 9110002 + +if sm.hasQuestCompleted(57419) and chr.getLevel() >= 23: # Native Help + sm.removeEscapeButton() + + sm.setSpeakerID(KINO_KONOKO) + sm.setBoxChat() + sm.sendNext("Where are you from? I like your clothes!") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Thank you. I like your... broom.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I come from a faraway, rural area by the coast... An island, actually. This might sound strange, but have you seen anything odd happening around here?") + + sm.setSpeakerID(KINO_KONOKO) + sm.setBoxChat() + sm.sendSay("Hmm... Come to think of it, there has been more dirt lately. So much I can't keep up! I'm stuck here sweeping this one spot and it never gets clean.") + sm.sendSay("Beyond that, everything seems normal. There's a storm near the Mushroom Shrine. That doesn't happen very often.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Nobunaga must not have made contact yet. He doesn't know we're here.") + + sm.startQuest(57420) # First Contact diff --git a/scripts/quest/q57427s.py b/scripts/quest/q57427s.py new file mode 100755 index 0000000..c830216 --- /dev/null +++ b/scripts/quest/q57427s.py @@ -0,0 +1,25 @@ + +# Quest: Audience with the Empress (57427) +# Author: Tiger + +NEINHEART = 1101002 + +if sm.hasQuestCompleted(57421) and chr.getLevel() >= 23: # To Ereve + sm.removeEscapeButton() + + sm.setSpeakerID(NEINHEART) + sm.setBoxChat() + sm.sendNext("I received Hersha's report. You helped out a great deal in Ellinia. For that, I thank you.") + if sm.sendAskAccept("Hersha's report was a bit light on details, so I was hoping you could fill in the blanks."): + sm.startQuest(57427) # Audience with the Empress + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("(You explained your monster fighting rampage in Ellinia, and that the Spirit Walkers of Oda's Army were involved in the incident.)") + + sm.setSpeakerID(NEINHEART) + sm.setBoxChat() + sm.sendSay("The plot thickens. One would expect the Black Wings to be behind something like this, but if what you say is true, we've got a new clan to worry about. Oda's Army, you say?") + sm.sendSay("The Empress must hear about this. I'm sorry I didn't grant you an immediate audience. But think about it this way: you had time to gather evidence and create a compelling case.") + sm.sendSay("The Empress is with Shinsoo to the right. Mind your manners.") diff --git a/scripts/quest/q57428s.py b/scripts/quest/q57428s.py new file mode 100755 index 0000000..7931292 --- /dev/null +++ b/scripts/quest/q57428s.py @@ -0,0 +1,17 @@ + +# Quest: Scaling the El Nath Mountains (57428) +# Author: Tiger + +NEINHEART = 1101002 + +if sm.hasQuestCompleted(57427) and chr.getLevel() >= 24: # Audience with the Empress + sm.removeEscapeButton() + + sm.setSpeakerID(NEINHEART) + sm.setBoxChat() + sm.sendNext("It's been a while, Kanna. I'm sorry to burden you like this, but there is an urgent matter we must discuss.") + sm.sendSay("You've no doubt heard of the continent of Orbis. If not, just look at a map. Traces of Oda's Army have been popping up near a town called El Nath. The enemies in question all match the descriptions you provided, so I'm sure they belong to Oda's Army.") + sm.sendSay("It seems your mysterious foe's schemes are beginning to spread across Maple World.") + if sm.sendAskAccept("Please hurry to El Nath. In my experience, it's important to quell these problems as early as possible. Alcaster in El Nath will provide further details."): + sm.startQuest(57428) # Scaling the El Nath Mountains + # TODO: jav to -> Empress' Road : Sky Ferry (130000210) diff --git a/scripts/quest/q57429s.py b/scripts/quest/q57429s.py new file mode 100755 index 0000000..d924791 --- /dev/null +++ b/scripts/quest/q57429s.py @@ -0,0 +1,50 @@ + +# Quest: To Each His Own (57429) +# Author: Tiger + +NAOE_KANESTSUGU = 9130022 +HAKU = 9130081 + +if sm.hasQuestCompleted(57428) and chr.getLevel() >= 25: # Scaling the El Nath Mountains + sm.removeEscapeButton() + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + sm.sendNext("What a coincidence! You've been so busy with all your missions I thought I'd never see you again. And you've grown stronger too. I can sense it. What's the tally at?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Kanetsugu! What brings you to such a faraway place? I haven't been counting, but if I had to guess, I'd say... Five thousand dead?") + + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + sm.sendSay("Five thousand? Your powers truly have returned. And you've far surpassed my pitiful 4,000. Haruaki ordered me to collect info from various places in Maple World. I was just on my way to Aqua Road. Apparently they can make roads out of water here.") + sm.sendSay("But if I must walk on water to fulfill Kenshin's vision, then walk on water I will! Nobunaga will fall by my hands, and Kenshin will love me for it.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Does he really believe you killed 5,000 soldiers? Ha. How about 500.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Shush, Haku. Yes, Kanetsugu! We must show the alliance what we're made of! If Kenshin saw you here, I know she'd be proud.") + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + if sm.sendAskAccept("Sniff... Thank you Kanna. Good luck on your mission! I trust your tally will have doubled by the time we meet again."): + sm.sendNext("For Kenshin!") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("He runs around the battlefield screaming her name and still he defeats more enemies than you.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("With my powers recovered, I'll catch up in no time. Besides, I've got your divine fox hair all over my clothes. There's no way I can lose with that...") + + sm.startQuest(57429) # To Each His Own + # direction nav to -> El Nath : El Nath (211000000) diff --git a/scripts/quest/q57433e.py b/scripts/quest/q57433e.py new file mode 100755 index 0000000..b8bc176 --- /dev/null +++ b/scripts/quest/q57433e.py @@ -0,0 +1,32 @@ + +# Quest: Fact or Fiction (57433) +# Author: Tiger + +ALCASTER = 2020005 + +if sm.hasQuestCompleted(57429) and chr.getLevel() >= 26: # To Each His Own + sm.removeEscapeButton() + + sm.setSpeakerID(ALCASTER) + sm.setBoxChat() + if sm.sendAskYesNo("Did you finish your investigation?"): + sm.completeQuest(57433) # Fact or Fiction + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendNext("Yes. Nobunaga was indeed involved. He used spells to provoke the monsters from afar. He must know I'm tracking him.") + sm.sendSay("I also found rabbit-like people in black garb gathered around Nobunaga's men. Who could they be?") + + sm.setSpeakerID(ALCASTER) + sm.setBoxChat() + sm.sendSay("That's the Black Wings. Your friends attract a rough crowd. Nothing good can come of this alliance.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I must bring word to Momijigaoka. Thank you for all your help.") + + sm.setSpeakerID(ALCASTER) + sm.setBoxChat() + sm.sendSay("I should be thanking you! Farewell.") diff --git a/scripts/quest/q57433s.py b/scripts/quest/q57433s.py new file mode 100755 index 0000000..7a2e9af --- /dev/null +++ b/scripts/quest/q57433s.py @@ -0,0 +1,22 @@ + +# Quest: Fact or Fiction (57433) +# Author: Tiger + +ALCASTER = 2020005 + +if sm.hasQuestCompleted(57429) and chr.getLevel() >= 26: # To Each His Own + sm.removeEscapeButton() + + sm.setSpeakerID(ALCASTER) + sm.setBoxChat() + sm.sendNext("I'm sorry I waited so long to tell you, but the monsters had to be taken care of. Your friends are preparing for some sort of ritual. One of them has an outfit just like yours, only black.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Could it be? Mori Ranmaru?") + + sm.setSpeakerID(ALCASTER) + sm.setBoxChat() + if sm.sendAskAccept("There's no telling how long they'll be there. I suggest you hurry."): + sm.startQuest(57433) # Fact or Fiction diff --git a/scripts/quest/q57434e.py b/scripts/quest/q57434e.py new file mode 100755 index 0000000..86a7a06 --- /dev/null +++ b/scripts/quest/q57434e.py @@ -0,0 +1,43 @@ +# Quest: Deepening Suspicion (57434) +# Author: Tiger + +NAOE_KANESTSUGU = 9130022 +HAKU = 9130081 + +if sm.hasQuestCompleted(57433) and chr.getLevel() >= 26: # Fact or Fiction + sm.removeEscapeButton() + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + sm.sendNext("Kanna! How did you fare in El Nath?") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("(You tell Kanetsugu what happened in El Nath.)") + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + sm.sendSay("I found similar evidence at Aqua Road. Maple World is in trouble.") + if sm.sendAskAccept("You're on a roll, Kanna. I'll bring word of our findings to Momijigaoka so you can continue to collect information on Nobunaga and the Black Wings. And so I can see Kenshin."): + sm.completeQuest(57434) # Deepening Suspicion + + sm.sendNext("Hold on Kenshin! I'm on my way!") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("I would have taken Shingen over him any day if I were Kenshin.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("He just admires her, Haku.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("If that's what you want to call it. ") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("Being Kenshin wouldn't be so bad...") diff --git a/scripts/quest/q57434s.py b/scripts/quest/q57434s.py new file mode 100755 index 0000000..a6ffa66 --- /dev/null +++ b/scripts/quest/q57434s.py @@ -0,0 +1,48 @@ + +# Quest: Deepening Suspicion (57434) +# Author: Tiger + +HAKU = 9130081 + +if sm.hasQuestCompleted(57433) and chr.getLevel() >= 26: # Fact or Fiction + sm.removeEscapeButton() + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendNext("So Empress Cygnus was right. Nobunaga is finding friends in this world, just like us.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("This is bigger than we thought.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Nobunaga's all about the spectacle. If he's going to enact an evil scheme, he wants the world to know it. Evil auras, menacing monsters, fireworks: the whole shebang.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("He's never been known to ally with others though. There must be some reason he needs all that power.") + sm.sendSay("He's even incorporated the monsters into his plans.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Maybe to understand the bad guy... we have to become the bad guy...") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("That's a horrible idea. Mori Ranmaru manages the Oda Army's Spirit Walker. He must play a large part in all of this as well.") + + sm.setSpeakerID(HAKU) + sm.setBoxChat() + sm.sendSay("Well if you don't like my ideas, you don't have to be so mean about it. Let's just go back to Momijigaoka and ask the others. They'll like my idea.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("That's better. First, let's go to Orbis to try and intercept Kanetsugu.") + + sm.startQuest(57434) # Deepening Suspicion + sm.warp(200000000, 19) # Orbis : Orbis diff --git a/scripts/quest/q57435e.py b/scripts/quest/q57435e.py new file mode 100755 index 0000000..ab93ef1 --- /dev/null +++ b/scripts/quest/q57435e.py @@ -0,0 +1,29 @@ + +# Quest: An Eye on Honnou-ji (57435) +# Author: Tiger + +TSUCHIMIKADO_HARUAKI = 9130010 +TAKEDA = 9130000 +MOURI = 9130006 +UESUGI_KENSHIN = 9130009 + +if sm.hasQuestCompleted(57474) and chr.getLevel() >= 27: # Family Seal + sm.removeEscapeButton() + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendNext("Nothing major. I just think we've got some pretty elite warriors here. Why not send in a small group to infiltrate?") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("It would be prudent to execute a precision strike. If we send three people, we only lose three people.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("This plan illustrates a nuanced understanding of strategy. Surely Shingen didn't come up with this by himself.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("Whoever thought of it, we can all agree it's the only option. Let us prepare for the Honnou-ji-infiltration-rescue-Princess Sakuno mission!") + + sm.completeQuest(57435) # An Eye on Honnou-ji diff --git a/scripts/quest/q57435s.py b/scripts/quest/q57435s.py new file mode 100755 index 0000000..ad70111 --- /dev/null +++ b/scripts/quest/q57435s.py @@ -0,0 +1,41 @@ + +# Quest: An Eye on Honnou-ji (57435) +# Author: Tiger + +TSUCHIMIKADO_HARUAKI = 9130010 +TAKEDA = 9130000 + +if sm.hasQuestCompleted(57474) and chr.getLevel() >= 27: # Family Seal + sm.removeEscapeButton() + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendNext("Our scouts sighted Princess Sakuno imprisoned deep within the eastern wing of Honnou-ji. Unfortunately, she's under tight watch. For what it's worth, the scouts said she looks healthy.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("We must break her free of Nobunaga's shackles immediately.") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("No, we don't have the strength yet. Both you and our military need more time to recover. We've made allies in this world, but we can't draw them in just yet or we risk fighting Nobunaga with exhausted forces.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("But, Haruaki!") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("I'm just gonna butt in here for a sec. Haruaki knows his stuff. We can't risk our forces for one person, even if it is Princes Sakuno. But there may still be a way.") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("You have a plan, Shingen?") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("You bet your bangs I do.") + + sm.startQuest(57435) # An Eye on Honnou-ji diff --git a/scripts/quest/q57436s.py b/scripts/quest/q57436s.py new file mode 100755 index 0000000..d95909c --- /dev/null +++ b/scripts/quest/q57436s.py @@ -0,0 +1,76 @@ + +# Quest: Honnou-ji Infiltration 1 (57436) +# Author: Tiger + +TSUCHIMIKADO_HARUAKI = 9130010 +TAKEDA = 9130000 +MOURI = 9130006 +UESUGI_KENSHIN = 9130009 +NAOE_KANESTSUGU = 9130022 + +if sm.hasQuestCompleted(57435) and chr.getLevel() >= 28: # An Eye on Honnou-ji + sm.removeEscapeButton() + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendNext("I was just going to call it Honnou-ji Infiltration... What does everyone think about entering through the western Honnou-ji walls?") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("Why not attack from the east? Our foes won't expect us to strike at the same place we did during the original Honnou-ji Raid.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("Oh. Hold on a second. Ngh. Nnngaaah. The hair agrees. East wall it is. A tactical approach.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("I say we blast through the wall and take the place by storm instead of slinking around like rats.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("That sounds like a perfect plan if we all want to die a miserable death at the hands of Oda's Army.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("The valor is appreciated, Kenshin, but Shingen's plan is more practical. We enter through the east wall.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("Only one question remains: who infiltrates?") + + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("I'll go.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("No. We couldn't afford to lose you. Let Kenshin go.") + + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + sm.sendSay("This mission is all about infiltration. Do you really think Kenshin can keep quiet long enough to find Princess Sakuno? I'm nimble, I'm quiet, and I don't wear armor.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("You're right. If I see the enemy, I'm afraid my sword might move of its own accord. You are a brave warrior, Kanna.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("Well, no need to split hairs if we have a volunteer!") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("Take Kanetsugu with you. He can watch your back. Kanetsugu! See to it that Kanna returns unscathed.") + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + sm.sendSay("Yes, Kenshin! While I draw breath, Kanna will be safe.") + sm.sendSay("Kanna, I'll go first. I will await your arrival at the eastern Honnou-ji walls. Come when you're ready.") + sm.sendSay("Kenshin, the thought of your beauty will propel my blade.") + + sm.startQuest(57436) # Honnou-ji Infiltration 1 diff --git a/scripts/quest/q57437e.py b/scripts/quest/q57437e.py new file mode 100755 index 0000000..582bb43 --- /dev/null +++ b/scripts/quest/q57437e.py @@ -0,0 +1,23 @@ + +# Quest: Honnou-ji Infiltration 2 (57437) +# Author: Tiger + +NAOE_KANESTSUGU = 9130022 +PRINCESS_SAKUNO = 9130021 + +if sm.hasQuestCompleted(57436) and chr.getLevel() >= 29: # Honnou-ji Infiltration 1 + sm.removeEscapeButton() + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + sm.sendNext("The princess is safe!") + + sm.setSpeakerID(PRINCESS_SAKUNO) + sm.setBoxChat() + sm.sendSay("Thank you for your valiant efforts. I was growing tired of this prison of boredom. Nobunaga doesn't know how to treat a guest.") + + sm.setSpeakerID(NAOE_KANESTSUGU) + sm.setBoxChat() + if sm.sendAskAccept("Please save your thanks for when we are safe, your highness. My spirit would burn in eternal shame should any harm befall you before then."): + sm.completeQuest(57437) # Honnou-ji Infiltration 2 + # Start Navigation to -> Momijigaoka : Momijigaoka (807000000) diff --git a/scripts/quest/q57439s.py b/scripts/quest/q57439s.py new file mode 100755 index 0000000..1fdbb6c --- /dev/null +++ b/scripts/quest/q57439s.py @@ -0,0 +1,66 @@ + +# Quest: Internal Affairs (57439) +# Author: Tiger + +PRINCESS_SAKUNO = 9130021 +TSUCHIMIKADO_HARUAKI = 9130010 +TAKEDA = 9130000 +MOURI = 9130006 +UESUGI_KENSHIN = 9130009 + +if sm.hasQuestCompleted(57437) and chr.getLevel() >= 30: # Honnou-ji Infiltration 2 + sm.removeEscapeButton() + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendNext("Ah, hello there, little princess. I see you've escaped the big, bad wolf.") + + sm.setSpeakerID(PRINCESS_SAKUNO) + sm.setBoxChat() + sm.sendSay("Ah Haruaki. You are your usual jovial self. Enjoying all this turmoil?") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("I was only a fool the last time we met, dearest princess. I am honored that you still remember me.") + + sm.setSpeakerID(PRINCESS_SAKUNO) + sm.setBoxChat() + sm.sendSay("Judging by the lion's mane and foul odor, I will assume you are the Tiger, Takeda Shingen. Meaning this stunning beauty will be the Dragon of Echigo, Uesugi Kenshin. That leaves the mastermind, Mouri Motonari. Your presence is as commanding as I had heard. ") + sm.sendSay("I am Matsuyama Sakuno, eldest daughter of Matsuyama Nobukane, and acting head of the clans. ") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("Your old man would be proud to see his little girl take to power so quickly.") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("It is a pleasure to meet you, your highness. The Uesugi clan is at your disposal.") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("I apologize for the humble surroundings, your highness. Please make yourself at home.") + + sm.setSpeakerID(TAKEDA) + sm.setBoxChat() + sm.sendSay("(Her eyes are like fire for a girl her age. She truly is the daughter of the Shogun...)") + + sm.setSpeakerID(UESUGI_KENSHIN) + sm.setBoxChat() + sm.sendSay("(She commands such power.)") + + sm.setSpeakerID(MOURI) + sm.setBoxChat() + sm.sendSay("(Perhaps she has the capacity to lead this group.)") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendSay("Your highness, did you happen to learn anything about Nobunaga while you were in his custody? Our information is severely lacking.") + + sm.setSpeakerID(PRINCESS_SAKUNO) + sm.setBoxChat() + sm.sendSay("He has been surrounded by spirit walkers and conjurers of all sorts, but I have seen nothing out of the ordinary. The only person I spoke to was the guardsman who delivered my meals.") + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + if sm.sendAskAccept("He's surrounded himself with power. Impenetrable. Kanna, perhaps you have more questions for the princess?"): + sm.startQuest(57439) # Internal Affairs diff --git a/scripts/quest/q57458s.py b/scripts/quest/q57458s.py new file mode 100755 index 0000000..145fd75 --- /dev/null +++ b/scripts/quest/q57458s.py @@ -0,0 +1,2 @@ +sm.completeQuest(57458) +sm.jobAdvance(4210) \ No newline at end of file diff --git a/scripts/quest/q57459s.py b/scripts/quest/q57459s.py new file mode 100755 index 0000000..90e73f2 --- /dev/null +++ b/scripts/quest/q57459s.py @@ -0,0 +1,2 @@ +sm.completeQuest(57459) +sm.jobAdvance(4211) \ No newline at end of file diff --git a/scripts/quest/q57460s.py b/scripts/quest/q57460s.py new file mode 100755 index 0000000..3f53e2d --- /dev/null +++ b/scripts/quest/q57460s.py @@ -0,0 +1,2 @@ +sm.completeQuest(57460) +sm.jobAdvance(4212) \ No newline at end of file diff --git a/scripts/quest/q57465s.py b/scripts/quest/q57465s.py new file mode 100755 index 0000000..6ceff64 --- /dev/null +++ b/scripts/quest/q57465s.py @@ -0,0 +1,13 @@ +# id 57465 (Lost Memories Found), field 807000000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9130006) # Mouri Motonari +sm.sendNext("#face0#Kanna, your strength returns. I am nothing short of amazed at your fervor. Both Japan and Maple World shall remember your name.") +sm.sendSay("#face0#Kanna, I'm thankful for your dedication. Your loyalty was... unexpected.") +sm.sendSay("#face0#I'm glad you're on my side, Kanna.") +sm.startQuest(7081) +sm.startQuest(parentID) +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=32966") +sm.warp(270010111) diff --git a/scripts/quest/q57474s.py b/scripts/quest/q57474s.py new file mode 100755 index 0000000..1b4ea57 --- /dev/null +++ b/scripts/quest/q57474s.py @@ -0,0 +1,21 @@ +# Quest: Family Seal (57474) +# Author: Tiger + +TSUCHIMIKADO_HARUAKI = 9130010 + +if sm.hasQuestCompleted(57434) and chr.getLevel() >= 27: # Deepening Suspicion + sm.removeEscapeButton() + + sm.setSpeakerID(TSUCHIMIKADO_HARUAKI) + sm.setBoxChat() + sm.sendNext("Kanna, return to Momijigaoka the moment you receive this letter. We have discovered Princess Sakuno's whereabouts.") + + sm.flipSpeaker() + sm.flipDialoguePlayerAsSpeaker() + sm.setBoxChat() + if sm.sendAskAccept("The princess! I must return to Momijigaoka immediately."): + sm.startQuest(57474) # Family Seal + sm.giveSkill(40021227) # Return to the Five Planets + + sm.sendNext("#e#bUse #s40021227# #q40021227##k#n to move to #m807000000#.") + # nav -> Momijigaoka : Momijigaoka (807000000) diff --git a/scripts/quest/q5747s.py b/scripts/quest/q5747s.py new file mode 100755 index 0000000..121ae75 --- /dev/null +++ b/scripts/quest/q5747s.py @@ -0,0 +1,10 @@ +# Trainer's Command +sm.sendNext("Do you want to become an elite pet trainer like me? Once you reach my level, it's easy to handle multiple pets at once. What do you think? Are you interested in walking around with multiple pets at once?") + +if sm.sendAskYesNo("If you want to learn how to control a group of pets, then get me some Pet Snacks. I have my own secret method of handling them, and it is foolproof. Are you interested?"): + sm.sendNext("You won't find #bPet Snacks#k at a regular store... but you can find it at a big store, where you can buy a huge variety of items. Find it and return to me!") + sm.startQuest(5747) + sm.dispose() +else: + sm.sendSayOkay("There's no such thing as a free lesson here. I'll give you some time to think over.") + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q5870e.py b/scripts/quest/q5870e.py new file mode 100755 index 0000000..6886427 --- /dev/null +++ b/scripts/quest/q5870e.py @@ -0,0 +1,12 @@ +# id 5870 ([Maple Rewards] Gollux Annihilation and Golden Glory), field 993017200 +sm.setSpeakerID(9030200) # Worena +sm.setParam(1) +res = sm.sendAskYesNo("Whoa! You defeated the boss monster! \r\nI'll give you some #bReward Tokens#k for ridding Maple World of evil. Do you want them now?") +sm.createQuestWithQRValue(18192, "count=2;val2=40;tDate=19/06/23/11/48;val=90") +sm.createQuestWithQRValue(18192, "count=2;val2=90;tDate=19/06/23/11/48;val=90") +sm.createQuestWithQRValue(18192, "count=3;val2=90;tDate=19/06/23/11/48;val=90") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18442, "HR=0;VE=0;NO=0;GX=1;RM=0;KX=0;EM=0") +sm.setParam(0) +sm.sendNext("#b#i2431872# #t2431872# 50 obtained!#k \r\n\r\nThank you so much for helping us bring a little light back to Maple World.") +sm.sendPrev("If you take these Reward Points to the Cash Shop, you can #bget a discount on cash items#k. \r\n\r\nYou get to save some money AND gain honor by simply doing away with a dangerous boss monster. Two birds with one stone!") diff --git a/scripts/quest/q5871e.py b/scripts/quest/q5871e.py new file mode 100755 index 0000000..037cf38 --- /dev/null +++ b/scripts/quest/q5871e.py @@ -0,0 +1,12 @@ +# id 5871 ([Maple Rewards] Easy Magnus Annihilation and Golden Glory), field 993017200 +sm.setSpeakerID(9030200) # Worena +sm.setParam(1) +res = sm.sendAskYesNo("Whoa! You defeated the boss monster! \r\nI'll give you some #bReward Tokens#k for ridding Maple World of evil. Do you want them now?") +sm.createQuestWithQRValue(18192, "count=3;val2=90;tDate=19/06/23/11/48;val=110") +sm.createQuestWithQRValue(18192, "count=3;val2=110;tDate=19/06/23/11/48;val=110") +sm.createQuestWithQRValue(18192, "count=4;val2=110;tDate=19/06/23/11/48;val=110") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18442, "HR=0;VE=0;NO=0;GX=1;RM=0;KX=0;EM=1") +sm.setParam(0) +sm.sendNext("#b#i2431872# #t2431872# 20 obtained!#k \r\n\r\nThank you so much for helping us bring a little light back to Maple World.") +sm.sendPrev("If you take these Reward Points to the Cash Shop, you can #bget a discount on cash items#k. \r\n\r\nYou get to save some money AND gain honor by simply doing away with a dangerous boss monster. Two birds with one stone!") diff --git a/scripts/quest/q58901e.py b/scripts/quest/q58901e.py new file mode 100755 index 0000000..40ec990 --- /dev/null +++ b/scripts/quest/q58901e.py @@ -0,0 +1,5 @@ +# Regards, Takeda Shingen +# Author: Tiger + +sm.createQuestWithQRValue(58901, "1") +sm.completeQuest(parentID) diff --git a/scripts/quest/q58902e.py b/scripts/quest/q58902e.py new file mode 100755 index 0000000..aa29019 --- /dev/null +++ b/scripts/quest/q58902e.py @@ -0,0 +1,19 @@ +# Regards, Takeda Shingen Questline | Near Momiji Hills 1 (811000001) +# Completes Quest 58902 + +TAKEDA = 9000427 # Takeda Shingen +ITEMID = 4034126 # 100 Spells for the Serious Soldier + +if "3" in sm.getQRValue(58901): # Regards, Takeda Shingen + sm.setSpeakerID(TAKEDA) + + sm.flipDialogue() + sm.sendNext("Not bad, not bad. Thanks.") + + sm.flipDialogue() + sm.sendSay("Let me take a look and I'll surely find a way to lift the spell. Come back later.") + + itemQty = sm.getQuantityOfItem(ITEMID) # TODO: This for some reason doesn't remove all quantites of the item. + + sm.consumeItem(ITEMID, itemQty) + sm.completeQuest(parentID) # Regards, Takeda Shingen diff --git a/scripts/quest/q58902s.py b/scripts/quest/q58902s.py new file mode 100755 index 0000000..d184d09 --- /dev/null +++ b/scripts/quest/q58902s.py @@ -0,0 +1,45 @@ +# Regards, Takeda Shingen (Sengoku Era) Questline | Near Momiji Hills 1 (811000001) +# Author: Tiger + +TAKEDA = 9000427 + +if "1" in sm.getQRValue(58901): # Regards, Takeda Shingen + sm.setSpeakerID(TAKEDA) + + sm.flipDialogue() + sm.sendNext("Good, you're here! I was about to pick another fight") + + sm.flipDialogue() + sm.sendSay("We have a problem, and it's not a lack of conditioner. I'll tell ya that!") + + sm.flipDialogue() + sm.sendSay("That warrior you found is in a coma. Lost their fight with consciousness. I guess. I had a letter somewhere here from Momijigaoka (He smashes boxes and chairs looking for the letter )") + + sm.setQRValue(58901, "2") # Regards, Takeda Shingen + +elif "2" in sm.getQRValue(58901): # Regards, Takeda Shingen + sm.setSpeakerID(TAKEDA) + + sm.flipDialogue() + sm.sendNext("Hm... I don't remember where I left it. It had the instructions on how to lift the spell.. Well, it wasn't that important anyway") + + sm.flipDialogue() + sm.sendSay("Ha ha ha, a real man never sweats over losing such unimportant things!") + + sm.flipDialogue() + sm.sendSay("As I recall, the Oda army is teaching wicked spells to it's soliders. Maybe one of them knocked our new friend out of commission.") + + response = sm.sendAskYesNo("There are a couple things that need to get done to lift the spell.\r\nYou can help, right?") + + if response: + sm.flipDialogue() + sm.sendNext("Ha, I knew you would do it.") + + sm.flipDialogue() + sm.sendSay("First we need to know more about the spells. Eliminate some Oda Warrior Trainee monsters to find clues.") + + sm.flipDialogue() + sm.sendSay("I don't need that many just 30 of them. That should be enough to mash into reason. Now, get to it!") + + sm.setQRValue(58901, "3") # Regards, Takeda Shingen + sm.startQuest(parentID) diff --git a/scripts/quest/q58903e.py b/scripts/quest/q58903e.py new file mode 100755 index 0000000..64b816b --- /dev/null +++ b/scripts/quest/q58903e.py @@ -0,0 +1,20 @@ +# Regards, Takeda Shingen (Sengoku Era) Questline (Stage 2) | Near Momiji Hills 1 (811000001) +# Completes stage 2 of prequest +# Author: Tiger + +TAKEDA = 9000427 +ITEMID = 4034128 # Bitter Resurrection Herb + +sm.setSpeakerID(TAKEDA) + +sm.flipDialogue() +sm.sendNext("Do you have the #i" + str(ITEMID) + "##z" + str(ITEMID) + "#?") + +sm.flipDialogue() +sm.sendSay("Not bad-looking #i" + str(ITEMID) + "##z" + str(ITEMID) + "#, I have to say.\r\nLet's mash it up and make that medicine.") + +sm.flipDialogue() +sm.sendSay("Give me a minute to mix this stuff up. Takes me back to my bartending days.") + +sm.completeQuest(parentID) # completes part 2 of Regards, Takeda Shigen quest +sm.consumeItem(ITEMID, 1) # remove the herb diff --git a/scripts/quest/q58903s.py b/scripts/quest/q58903s.py new file mode 100755 index 0000000..e3b323b --- /dev/null +++ b/scripts/quest/q58903s.py @@ -0,0 +1,37 @@ +# Regards, Takeda Shingen (Sengoku Era) Questline (Stage 2) | Near Momiji Hills 1 (811000001) +# Starts stage 2 of pre-quest +# Author: Tiger + +TAKEDA = 9000427 + +ITEMID = 4034128 # Bitter Resurrection Herb +ITEMID_2 = 4009378 # Contaminated Goblin Detritus + +MAPID_1 = 811000004 # Hidden Field of Momiji Hills 1 +MAPID_2 = 811000005 # Hidden Field of Momiji Hills 2 +MAPID_3 = 811000006 # Hidden Field of Momiji Hills 3 + +MOBID_1 = 9450026 # Contaminated Goblin 1 +MOBID_2 = 9450027 # Contaminated Goblin 2 + +sm.setSpeakerID(TAKEDA) +sm.flipDialogue() + +sm.sendNext("Looking at those spell scrolls, I was able to remember the instructions on that letter on how to lift the spell. Just needed to jump-start the of noggin") + +response = sm.sendAskYesNo("Unfortunately for you, lifting the spell requires more materials.\r\nBetter get to it!") + +if response: + sm.flipDialogue() + sm.sendNext("This #v" + str(ITEMID) + "##z" + str(ITEMID) + "# is just what we need.") + + sm.flipDialogue() + sm.sendSay("So, go to #m" + str(MAPID_1) + "#, #m" + str(MAPID_2) + "#, and #m" + str(MAPID_3) + "#. Hunt #o" + str(MOBID_1) + "# and #o" + str(MOBID_2) + + "# monsters to get these #i" + str(ITEMID_2) + "# #z" + str(ITEMID_2) + "# items. We need them to grow the #i" + str(ITEMID) + "# #z" + str(ITEMID) + "#.") + + sm.flipDialogue() + sm.sendSay("If you run around #m" + str(MAPID_1) + "#, #m" + str(MAPID_2) + "#, and #m" + str(MAPID_3) + "#. You'll see herb sprouts. Just drop one #z" + str(ITEMID_2) + "# on them.") + + sm.flipDialogue() + sm.sendSay("You want to grow #v" + str(ITEMID) + "##z" + str(ITEMID) + "# to Stage 4 and you need 10 #z" + str(ITEMID_2) + "# items for each stage") + sm.startQuest(parentID) diff --git a/scripts/quest/q58907e.py b/scripts/quest/q58907e.py new file mode 100755 index 0000000..8d5d560 --- /dev/null +++ b/scripts/quest/q58907e.py @@ -0,0 +1,23 @@ +# Regards, Takeda Shingen (Sengoku Era) Questline (Stage 3) | Momijigaoka (807000000) +# Completes part 3 of prequest +# Author: Tiger + +MOURI = 9130006 # Mouri Motonari +ITEMID = 4034129 # Mega Bitter Medicine + +sm.setSpeakerID(MOURI) + +sm.flipDialogue() +sm.sendNext("Hm? Shingen didn't come here himself? How disappointing.") + +sm.flipDialogue() +sm.sendSay("Regardless, I pass on the #i" + str(ITEMID) + "##z" + str(ITEMID) + "# to treat the warrior.") + +sm.flipDialogue() +sm.sendSay("I'm sure she will awaken soon. Go to the Master Room to meet her") + +sm.flipDialogue() +sm.sendSay("The Master Room is to the left.") + +sm.completeQuest(parentID) +sm.consumeItem(ITEMID) # remove mega Bitter Medicine from user diff --git a/scripts/quest/q58907s.py b/scripts/quest/q58907s.py new file mode 100755 index 0000000..18b27cf --- /dev/null +++ b/scripts/quest/q58907s.py @@ -0,0 +1,25 @@ +# Regards, Takeda Shingen (Sengoku Era) Questline (Stage 3) | Near Momiji Hills 1 (811000001) +# Starts part 3 of prequest +# Author: Tiger + +TAKEDA = 9000427 +NPCID = 9130006 # Mouri Motonari +ITEMID = 4034129 # Mega Bitter Medicine +MAPID = 807000000 # Momijigaoka + +sm.setSpeakerID(TAKEDA) + +sm.flipDialogue() +sm.sendNext("I've made the medicine. It stinks like burning hair, so take it to #p" + str(NPCID) + "# ASAP.") + +sm.flipDialogue() +sm.sendSay("No way, this stuff smells viel. You do it.") + +sm.flipDialogue() +sm.sendSay("I can't go right now anyway, so just drop it off. Also ask her how and why she traveled all the way here.") + +response = sm.sendAskYesNo("Please bring this #i" + str(ITEMID) + "##z " + str(ITEMID) + "# to #p" + str(NPCID) + "# in #m" + str(MAPID) + "#.") + +if response: + sm.giveItem(ITEMID, 1) # give mega bitter medicine + sm.startQuest(parentID) # start quest #3 diff --git a/scripts/quest/q58908s.py b/scripts/quest/q58908s.py new file mode 100755 index 0000000..fa9258b --- /dev/null +++ b/scripts/quest/q58908s.py @@ -0,0 +1,68 @@ +# A New Warrior Appears (Sengoku Era) Questline | Momiji Hills: Master Room (811000008) +# Author: Tiger + +AYAME = 9130100 +SUKUNO = 9130124 + +sm.setSpeakerID(AYAME) + +sm.flipDialogue() +sm.sendNext("Ooh, I had SUCH a hard time getting here! I got to a really strange place and I was all tired and then...") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("Speaking of wich, Takeda Shingen would like to know how you got here.") + +sm.setSpeakerID(AYAME) + +sm.flipDialogue() +sm.sendSay("Takeda Shingen? The same Takeda Shingen that I knew before?") + +sm.flipDialogue() +sm.sendSay("Ugh, that old fart. Tell him that Ayame has NOTHING to say to HIM.\r\n" + "Does he even have a SPECK of compassion? It's his fault I ended up like this!") + +sm.flipDialoguePlayerAsSpeaker() +sm.sendSay("I get this impression you are not very fond of Takeda Shingen") + +sm.setSpeakerID(AYAME) + +sm.flipDialogue() +sm.sendSay("Anyway, where is Sakuno? I have so much to tell her! Sakuno\r\nWhere are you! Sa-ku-no Sakuno? Sakuno!") + +sm.lockInGameUI(True) +sm.removeEscapeButton() +sm.moveCamera(200, 0, 150) + +sm.spawnNpc(9130124, -603, 187) +sm.flipNpcByTemplateId(9130124, False) +sm.moveNpcByTemplateId(9130124, False, 300, 60) +sm.sendDelay(2500) + +sm.setSpeakerID(SUKUNO) + +sm.flipDialogue() +sm.sendNext("Ayame!") + +sm.moveNpcByTemplateId(9130124, False, 100, 50) + +sm.setSpeakerID(AYAME) + +sm.flipDialogue() +sm.sendSay("Eee! Sakuno! hee hee, how have you been? I MISSED YOU SO MUCH!") + +sm.setSpeakerID(SUKUNO) + +sm.flipDialogue() +sm.sendSay("...") + +sm.flipDialogue() +sm.sendSay("I heard you were back and I... I...") + +sm.setSpeakerID(AYAME) + +sm.flipDialogue() +sm.sendSay("Heyyy, don't start the waterworks now! I'm back!") + +sm.removeNpc(9130124) +sm.startQuest(parentID) +sm.warp(811000008) diff --git a/scripts/quest/q58909s.py b/scripts/quest/q58909s.py new file mode 100755 index 0000000..8b1b30c --- /dev/null +++ b/scripts/quest/q58909s.py @@ -0,0 +1,17 @@ +# Tears of Princess Sakuno (Sengoku Questline) | Momiji Hills : Master Room (811000008) +# Author: Tiger + +SAKUNO = 9130124 +sm.setSpeakerID(SAKUNO) + +sm.flipDialogue() +sm.sendNext("Please accept my gratitude for the medicine. Thanks to you I am able to see Ayame once again.") + +sm.flipDialogue() +sm.sendSay("You must have been suprised to see me like that. The truth is I have been indebted to Ayame.") + +response = sm.sendAskYesNo("Would you like to hear the whole story?") + +if response: + sm.startQuest(58909) # Tears of Princess Sakuno + sm.warpInstanceIn(811000009) # Master Room diff --git a/scripts/quest/q58910s.py b/scripts/quest/q58910s.py new file mode 100755 index 0000000..15b1ca2 --- /dev/null +++ b/scripts/quest/q58910s.py @@ -0,0 +1,10 @@ +# What happened to Ayame (Sengoku Era) Questline + +AYAME = 9130106 + +sm.setSpeakerID(AYAME) + +response = sm.sendAskYesNo("... How did I get here? It's a long story and I'm pretty tired... Are you SURE you wanna hear it now?") + +if response: + sm.warp(811000009) # Master Room diff --git a/scripts/quest/q58911e.py b/scripts/quest/q58911e.py new file mode 100755 index 0000000..d1ebec8 --- /dev/null +++ b/scripts/quest/q58911e.py @@ -0,0 +1,7 @@ +# id 58911 ([Hieizan Temple] Stranger and Stranger), field 811000008 +sm.setSpeakerID(9130103) # Ayame +sm.setParam(5) +sm.setParam(0) +sm.completeQuestNoCheck(parentID) +sm.setParam(4) +sm.createQuestWithQRValue(18418, "B=35618") diff --git a/scripts/quest/q58911s.py b/scripts/quest/q58911s.py new file mode 100755 index 0000000..5cc310a --- /dev/null +++ b/scripts/quest/q58911s.py @@ -0,0 +1,3 @@ +# id 58911 ([Hieizan Temple] Stranger and Stranger), field 811000008 +sm.setSpeakerID(9130103) # Ayame +sm.setParam(5) diff --git a/scripts/quest/q58913e.py b/scripts/quest/q58913e.py new file mode 100755 index 0000000..e72a9e7 --- /dev/null +++ b/scripts/quest/q58913e.py @@ -0,0 +1,14 @@ +# id 58913 ([Hieizan Temple] Investigating Hieizan), field 811000008 +sm.setSpeakerID(9130103) # Ayame +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130103) # Ayame +sm.sendNext("Thanks for finding this! ") +sm.sendSay("Good thing the Demon King couldn't be summoned completely... But y'know, I'm actually a little sad Princess No lost herself like that.") +sm.sendSay("Please defeat her for me. It's all we can do now. ") +sm.completeQuestNoCheck(parentID) +sm.sendSay("To stop Princess No, you need the key to Hieizan Temple. That's where she's holed up. ") +sm.createQuestWithQRValue(18418, "B=35658") +sm.sendSay("She left traces of herself at the small shrine of Hieizan when she ran. Her alter ego will drop the key to the real Princess No.") +sm.sendSay("I managed to sneak a copy of the key. Let me know if you want to use it to go to Princess No.") +sm.sendPrev("Be careful. Princess No will be a challenging foe to contend with. Talk to me if you'd like to practice first, and I can send you to a training area.") +sm.createQuestWithQRValue(18418, "B=35659") diff --git a/scripts/quest/q58913s.py b/scripts/quest/q58913s.py new file mode 100755 index 0000000..0452b7d --- /dev/null +++ b/scripts/quest/q58913s.py @@ -0,0 +1,5 @@ +# id 58913 ([Hieizan Temple] Investigating Hieizan), field 811000008 +sm.setSpeakerID(9130103) # Ayame +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130103) # Ayame +sm.sendNext("When I was here a long time ago, I saw a small temple at the very end of Hieizan. Only Princess No was allowed to enter.") diff --git a/scripts/quest/q58914e.py b/scripts/quest/q58914e.py new file mode 100755 index 0000000..754a8df --- /dev/null +++ b/scripts/quest/q58914e.py @@ -0,0 +1,8 @@ +# id 58914 ([Hieizan Temple] Sad Little Boy), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Did you really find my bag?") +sm.sendSay("Thank you! Thank you so much.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35645") diff --git a/scripts/quest/q58914s.py b/scripts/quest/q58914s.py new file mode 100755 index 0000000..3a3d395 --- /dev/null +++ b/scripts/quest/q58914s.py @@ -0,0 +1,21 @@ +# id 58914 ([Hieizan Temple] Sad Little Boy), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("*Sniff*") +sm.setParam(16) +sm.sendSay("(A boy in a place like this? Quite suspicious. And crying at that. I should just... pretend I didn't see.)") +sm.setParam(4) +res = sm.sendAskYesNo("*Sniff* WAHHHH.... Wait, is that... Is somebody there? Please, help me! ") +sm.startQuest(parentID) +sm.startQuest(58979) +sm.setParam(16) +sm.sendNext("Ergh... What's wrong?") +sm.setParam(4) +sm.sendSay("I used to serve the alliance military. I took care of the horses. We were led here from the guard post and... I guess passed out in all the chaos.") +sm.setParam(16) +sm.sendSay("Where are the other alliance soldiers? ") +sm.setParam(4) +sm.sendSay("All the soldiers went... I don't know. They're strange now. I-I'm scared. I want to get out of here. Could you find my sack for me?") +sm.sendSay("It's the only thing I have to remember my father by. I'm pretty sure I dropped it somewhere close by but I can't see, it's too dark.") +sm.sendSay("All the soldiers went... I don't know. They're strange now. I-I'm scared. I want to get out of here. Could you find my sack for me?") diff --git a/scripts/quest/q58916e.py b/scripts/quest/q58916e.py new file mode 100755 index 0000000..2027750 --- /dev/null +++ b/scripts/quest/q58916e.py @@ -0,0 +1,8 @@ +# id 58916 ([Hieizan Temple] The Lost Alliance 1), field 811000014 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("What...? The soldiers are being brainwashed? ") +sm.createQuestWithQRValue(18418, "B=35646") +sm.sendPrev("What do we do? CAN we do anything? ") diff --git a/scripts/quest/q58916s.py b/scripts/quest/q58916s.py new file mode 100755 index 0000000..d5dbf4f --- /dev/null +++ b/scripts/quest/q58916s.py @@ -0,0 +1,9 @@ +# id 58916 ([Hieizan Temple] The Lost Alliance 1), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("The alliance men? Last I saw, the Spirit Walkers were giving them some weird potions and casting spells, then they turned strange. What could have happened?") +sm.sendSay("Please save them. They were so good to me, almost like fathers.") +res = sm.sendAskYesNo("I saw the Oda Spirit Walkers nearby. Maybe we can get some information from them.") +sm.startQuest(parentID) +sm.sendSayOkay("Thank you for your help! I think defeating about 100 Oda Spirit Walkers will give you enough leads.") diff --git a/scripts/quest/q58917e.py b/scripts/quest/q58917e.py new file mode 100755 index 0000000..4c9bc51 --- /dev/null +++ b/scripts/quest/q58917e.py @@ -0,0 +1,8 @@ +# id 58917 ([Hieizan Temple] Strange Alliance Men -2-), field 811000014 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Yes, that's it. That's the jar I saw. ") +sm.createQuestWithQRValue(18418, "B=35647") +sm.sendPrev("Okay! Now that we have the jars, we just have to put some souls in them.") diff --git a/scripts/quest/q58917s.py b/scripts/quest/q58917s.py new file mode 100755 index 0000000..e00e1e2 --- /dev/null +++ b/scripts/quest/q58917s.py @@ -0,0 +1,17 @@ +# id 58917 ([Hieizan Temple] Strange Alliance Men -2-), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Do you think that this will help turn the soldiers back to normal? ") +sm.setParam(16) +sm.sendSay("What's this?") +sm.setParam(4) +sm.sendSay("Before I passed out, one of the soldiers gave me this note.") +sm.setParam(16) +sm.sendSay("(You open the note.) 'The Oda Spirit Walker Jars can hold innocent souls. Ask someone to do that for our souls.' ") +sm.sendSay("...Welp, I guess there isn't actually a way to turn them back.") +sm.setParam(4) +res = sm.sendAskYesNo("I saw an Oda Spirit Walker carrying a suspicious jar. I think that might be what they are referring to. Can you get some for me, please?") +sm.startQuest(parentID) +sm.sendNext("They were such good people... I'm sad that this is the only thing we can do.") +sm.sendPrev("Whatever the case, I think we should get the jars first.") diff --git a/scripts/quest/q58918e.py b/scripts/quest/q58918e.py new file mode 100755 index 0000000..c969d43 --- /dev/null +++ b/scripts/quest/q58918e.py @@ -0,0 +1,8 @@ +# id 58918 ([Hieizan Temple] Fill the Red Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Thank you for all your help. Even brainwashed, it couldn't have been easy taking their souls...") +sm.sendSay("But thanks to your bravery, their souls can be free now.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35648") diff --git a/scripts/quest/q58918s.py b/scripts/quest/q58918s.py new file mode 100755 index 0000000..cdc481a --- /dev/null +++ b/scripts/quest/q58918s.py @@ -0,0 +1,10 @@ +# id 58918 ([Hieizan Temple] Fill the Red Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("A jar of souls... It sounds terrible, but I guess it's the best we can do. ") +res = sm.sendAskYesNo("Would you please help me gather those poor souls? ") +sm.startQuest(parentID) +sm.sendNext("Thank you. I feel a lot better. ") +sm.sendSay("Eliminate 100 #o9450031:# monsters in #m811000015:# to fill this jar. ") +sm.sendPrev("I'll leave it to you. ") diff --git a/scripts/quest/q58919e.py b/scripts/quest/q58919e.py new file mode 100755 index 0000000..6492169 --- /dev/null +++ b/scripts/quest/q58919e.py @@ -0,0 +1,8 @@ +# id 58919 ([Hieizan Temple] Fill the Blue Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Woo! It's quite heavy now. Feel all those souls... ") +sm.sendSay("It's VERY full! ") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35649") diff --git a/scripts/quest/q58919s.py b/scripts/quest/q58919s.py new file mode 100755 index 0000000..963089b --- /dev/null +++ b/scripts/quest/q58919s.py @@ -0,0 +1,11 @@ +# id 58919 ([Hieizan Temple] Fill the Blue Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("You did a great job filling up this red jar! I just know that you will do the same with the blue jar. ") +res = sm.sendAskYesNo("Hope you can still help with filling the jar... This is all for the souls of those men...") +sm.startQuest(parentID) +sm.sendNext("The second jar will fill if you eliminate about 150 #o9450032:# monsters in #m811000016:#. ") +sm.sendSay("Please hurry to get this job done. ") +sm.setParam(16) +sm.sendPrev("Get this job done...?") diff --git a/scripts/quest/q58920e.py b/scripts/quest/q58920e.py new file mode 100755 index 0000000..207cc3c --- /dev/null +++ b/scripts/quest/q58920e.py @@ -0,0 +1,9 @@ +# id 58920 ([Hieizan Temple] Fill the Yellow Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Thank you! This jar looks good, #h0#.") +sm.sendSay("Now we just have to wrap them up... ") +sm.sendSay("Give me a second, okay?") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35650") diff --git a/scripts/quest/q58920s.py b/scripts/quest/q58920s.py new file mode 100755 index 0000000..7dc0366 --- /dev/null +++ b/scripts/quest/q58920s.py @@ -0,0 +1,11 @@ +# id 58920 ([Hieizan Temple] Fill the Yellow Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("The last one is the yellow jar, heh. ") +sm.sendSay("Thank you for all your hard work, but could you please help me just ONCE more?") +res = sm.sendAskYesNo("I promise, I SWEAR this is the last one! After this, the alliance men can truly rest...") +sm.startQuest(parentID) +sm.sendNext("The third jar will fill up after you take down 200 #o9450033:# monsters of #m811000017:#...") +sm.sendSay("Woo, I know. I also wonder how so many alliance soldiers ended up like this.") +sm.sendPrev("This is the last round, so cheer up! I know you can do it.") diff --git a/scripts/quest/q58921e.py b/scripts/quest/q58921e.py new file mode 100755 index 0000000..30f742e --- /dev/null +++ b/scripts/quest/q58921e.py @@ -0,0 +1,10 @@ +# id 58921 ([Hieizan Temple] Jars at Rest 1), field 811000018 +sm.setSpeakerID(9130108) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("You got here faster than I thought. Figures, since you aren't carrying anything.") +sm.sendSay("Whoof! As for me, I'm all worn out from carrying ALL these jars. My arms are about to FALL OFF! ") +sm.sendSay("...Which means you should offer to carry these for me. Here.") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Be careful with these. I don't know what we'd do if you broke them.") +sm.createQuestWithQRValue(18418, "B=35651") diff --git a/scripts/quest/q58921s.py b/scripts/quest/q58921s.py new file mode 100755 index 0000000..8dd2089 --- /dev/null +++ b/scripts/quest/q58921s.py @@ -0,0 +1,12 @@ +# id 58921 ([Hieizan Temple] Jars at Rest 1), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Here, I wrapped up the jars you gave me with my bag cloth.") +sm.sendSay("Isn't this cloth nice? My mother made it herself, hee hee.") +sm.setParam(16) +sm.sendSay("(You felt it earlier, too... The floral prints are actually kind of unpleasant. Ugly. But you hold your tongue.)") +sm.setParam(4) +res = sm.sendAskYesNo("Now, I'll meet you at #m811000018:#. That's where you want to place the jars. ") +sm.startQuest(parentID) +sm.sendSayOkay("#m811000018:# is just past #m811000017:#. I'll see you there.") diff --git a/scripts/quest/q58922s.py b/scripts/quest/q58922s.py new file mode 100755 index 0000000..7dccc5d --- /dev/null +++ b/scripts/quest/q58922s.py @@ -0,0 +1,38 @@ +# id 58922 ([Hieizan Temple] Jars at Rest 2), field 811000018 +sm.setSpeakerID(9130108) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Just place these jars on the stone altar in front of the east tower over there.\r\nSimple, right? I've heard that that area is the best spot... ") +sm.sendSay("Did you know? There are a lot of souls floating around in this temple.") +sm.setParam(16) +sm.sendSay("(You feel something strange. He doesn't seem like the same boy you met earlier.)") +sm.setParam(4) +res = sm.sendAskYesNo("Now, go on. Place the jars on that altar. ") +sm.startQuest(parentID) +sm.sendSayOkay("Simply click the altar. ") +sm.lockInGameUI(True, True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("(What the-? )") +sm.sendDelay(1000) +sm.sendNext("What are you trying to do?") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130108) # Mysterious Boy +sm.sendSay("Heh heh heh... Good work. You've completed 'her' task admirably. ") +sm.sendSay("You know, 'she' told me you'd be easy to trick, with your do-gooder spirit and weak mind. I thought, surely you COULDN'T be that dumb! ") +sm.setParam(17) +sm.sendSay("What? Who is 'she'?") +sm.setParam(5) +sm.sendSay("Well, my part is done, so see ya! You should be more careful lending a hand next time. Ha! ") +sm.setParam(17) +sm.sendSay("Ugh, I've been tricked... ") +sm.sendSay("(Follow the boy to #m811000019:#. You will be teleported automatically. ") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) +sm.warp(811000019) diff --git a/scripts/quest/q58923e.py b/scripts/quest/q58923e.py new file mode 100755 index 0000000..f871e19 --- /dev/null +++ b/scripts/quest/q58923e.py @@ -0,0 +1,7 @@ +# id 58923 ([Hieizan Temple] Chasing the Boy), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Whew, I guess things won't get any worse.") +sm.sendSay(" The boy must be outside, I should follow him.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35653") diff --git a/scripts/quest/q58923s.py b/scripts/quest/q58923s.py new file mode 100755 index 0000000..1d02049 --- /dev/null +++ b/scripts/quest/q58923s.py @@ -0,0 +1,6 @@ +# id 58923 ([Hieizan Temple] Chasing the Boy), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Hm? What is this place? I should check it out. ") +sm.sendSay("Maybe he went in that way. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58924s.py b/scripts/quest/q58924s.py new file mode 100755 index 0000000..8b5711c --- /dev/null +++ b/scripts/quest/q58924s.py @@ -0,0 +1,5 @@ +# id 58924 ([Hieizan Temple] The Reunion 1), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Looks like the boy went deeper into Hieizan.") +sm.startQuest(parentID) diff --git a/scripts/quest/q58925e.py b/scripts/quest/q58925e.py new file mode 100755 index 0000000..cd35127 --- /dev/null +++ b/scripts/quest/q58925e.py @@ -0,0 +1,7 @@ +# id 58925 ([Hieizan Temple] The Reunion 2), field 811000025 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Why is everyone gathered here? She is definitely scheming something. ") +sm.sendSay("Enter the building. ") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35655") diff --git a/scripts/quest/q58925s.py b/scripts/quest/q58925s.py new file mode 100755 index 0000000..2722cd9 --- /dev/null +++ b/scripts/quest/q58925s.py @@ -0,0 +1,6 @@ +# id 58925 ([Hieizan Temple] The Reunion 2), field 811000021 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Where did she go? Something must be up, otherwise she wouldn't have left in such a hurry. ") +sm.sendSay(" I have to stop them. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58926s.py b/scripts/quest/q58926s.py new file mode 100755 index 0000000..b95fa9b --- /dev/null +++ b/scripts/quest/q58926s.py @@ -0,0 +1,16 @@ +# id 58926 ([Hieizan Temple] The Demon King Returns), field 811000029 +sm.lockInGameUI(True, True) +sm.setSpeakerID(9130116) # Princess No +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130122) # Dark Voice +sm.sendSay("Was it you who summoned me...") +sm.sendSay("...You're quite weak to summon one such as myself. ") +sm.sendSay("I will not accept such a weak body... But I will reward you for summoning me... Muahaha. ") +sm.sendSay("My wickedness shall strengthen your body. ") +sm.sendDelay(2900) +sm.reservedEffect(False, 0, 0, "Effect/DirectionJP3.img/sengoku/Scene0") +sm.completeQuestNoCheck(parentID) +sm.startQuest(58949) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(58972, "m035=clear;dr1=clear;dr2=clear;m037=clear;m038=clear;m039=clear") +sm.createQuestWithQRValue(18418, "B=35656") diff --git a/scripts/quest/q58927e.py b/scripts/quest/q58927e.py new file mode 100755 index 0000000..3f28e02 --- /dev/null +++ b/scripts/quest/q58927e.py @@ -0,0 +1,9 @@ +# id 58927 ([Hieizan Temple] The End of Princess No), field 811000033 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("She has already become...too wicked.") +sm.sendSay("...I should get the mirror to Ayame first.") +sm.completeQuestNoCheck(parentID) +sm.startQuest(58979) +sm.startQuest(58978) +sm.warp(811000008) diff --git a/scripts/quest/q58927s.py b/scripts/quest/q58927s.py new file mode 100755 index 0000000..8bb5a05 --- /dev/null +++ b/scripts/quest/q58927s.py @@ -0,0 +1,7 @@ +# id 58927 ([Hieizan Temple] The End of Princess No), field 811000028 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("...Everything was an illusion? Perhaps that's not the worst thing that's happened. But what was she trying to show me? ") +sm.sendSay("I still haven't found the shrine that Ayame talked about. Princess No must be there.") +sm.sendSay("The shrine is a little bit west of here. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58928e.py b/scripts/quest/q58928e.py new file mode 100755 index 0000000..31cf58b --- /dev/null +++ b/scripts/quest/q58928e.py @@ -0,0 +1,8 @@ +# id 58928 ([Hieizan Temple] Sad Little Boy), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Did you really find my bag?") +sm.sendSay("Thank you! Thank you so much.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35619") diff --git a/scripts/quest/q58928s.py b/scripts/quest/q58928s.py new file mode 100755 index 0000000..1f4c9e2 --- /dev/null +++ b/scripts/quest/q58928s.py @@ -0,0 +1,21 @@ +# id 58928 ([Hieizan Temple] Sad Little Boy), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("*Sniff*") +sm.setParam(16) +sm.sendSay("(A boy in a place like this? Quite suspicious. And crying at that. I should just... pretend I didn't see.)") +sm.setParam(4) +res = sm.sendAskYesNo("*Sniff* WAHHHH.... Wait, is that... Is somebody there? Please, help me! ") +sm.startQuest(parentID) +sm.startQuest(58979) +sm.setParam(16) +sm.sendNext("Ergh... What's wrong?") +sm.setParam(4) +sm.sendSay("I used to serve the alliance military. I took care of the horses. We were led here from the guard post and... I guess passed out in all the chaos.") +sm.setParam(16) +sm.sendSay("Where are the other alliance soldiers? ") +sm.setParam(4) +sm.sendSay("All the soldiers went... I don't know. They're strange now. I-I'm scared. I want to get out of here. Could you find my sack for me?") +sm.sendSay("It's the only thing I have to remember my father by. I'm pretty sure I dropped it somewhere close by but I can't see, it's too dark.") +sm.sendPrev("It's a bag with very pretty flower prints. Don't judge.") diff --git a/scripts/quest/q58929e.py b/scripts/quest/q58929e.py new file mode 100755 index 0000000..a174dc1 --- /dev/null +++ b/scripts/quest/q58929e.py @@ -0,0 +1,8 @@ +# id 58929 ([Hieizan Temple] The Lost Alliance 1), field 811000014 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("What...? The soldiers are being brainwashed? ") +sm.createQuestWithQRValue(18418, "B=35620") +sm.sendPrev("What do we do? CAN we do anything? ") diff --git a/scripts/quest/q58929s.py b/scripts/quest/q58929s.py new file mode 100755 index 0000000..c7b54dd --- /dev/null +++ b/scripts/quest/q58929s.py @@ -0,0 +1,9 @@ +# id 58929 ([Hieizan Temple] The Lost Alliance 1), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("The alliance men? Last I saw, the Spirit Walkers were giving them some weird potions and casting spells, then they turned strange. What could have happened?") +sm.sendSay("Please save them. They were so good to me, almost like fathers.") +res = sm.sendAskYesNo("I saw the Oda Spirit Walkers nearby. Maybe we can get some information from them.") +sm.startQuest(parentID) +sm.sendSayOkay("Thank you for your help! I think defeating about 100 Oda Spirit Walkers will give you enough leads.") diff --git a/scripts/quest/q58930e.py b/scripts/quest/q58930e.py new file mode 100755 index 0000000..1431f9c --- /dev/null +++ b/scripts/quest/q58930e.py @@ -0,0 +1,8 @@ +# id 58930 ([Hieizan Temple] Strange Alliance Men -2-), field 811000014 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Yes, that's it. That's the jar I saw. ") +sm.createQuestWithQRValue(18418, "B=35621") +sm.sendPrev("Okay! Now that we have the jars, we just have to put some souls in them.") diff --git a/scripts/quest/q58930s.py b/scripts/quest/q58930s.py new file mode 100755 index 0000000..49e3d2f --- /dev/null +++ b/scripts/quest/q58930s.py @@ -0,0 +1,17 @@ +# id 58930 ([Hieizan Temple] Strange Alliance Men -2-), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Do you think that this will help turn the soldiers back to normal? ") +sm.setParam(16) +sm.sendSay("What's this?") +sm.setParam(4) +sm.sendSay("Before I passed out, one of the soldiers gave me this note.") +sm.setParam(16) +sm.sendSay("(You open the note.) 'The Oda Spirit Walker Jars can hold innocent souls. Ask someone to do that for our souls.' ") +sm.sendSay("...Welp, I guess there isn't actually a way to turn them back.") +sm.setParam(4) +res = sm.sendAskYesNo("I saw an Oda Spirit Walker carrying a suspicious jar. I think that might be what they are referring to.") +sm.startQuest(parentID) +sm.sendNext("They were such good people... I'm sad that this is the only thing we can do.") +sm.sendPrev("Whatever the case, I think we should get the jars first.") diff --git a/scripts/quest/q58931e.py b/scripts/quest/q58931e.py new file mode 100755 index 0000000..6c801f6 --- /dev/null +++ b/scripts/quest/q58931e.py @@ -0,0 +1,8 @@ +# id 58931 ([Hieizan Temple] Fill the Red Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Thank you for all your help. Even brainwashed, it couldn't have been easy taking their souls...") +sm.sendSay("But thanks to your bravery, their souls can be free now.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35622") diff --git a/scripts/quest/q58931s.py b/scripts/quest/q58931s.py new file mode 100755 index 0000000..bfb72f7 --- /dev/null +++ b/scripts/quest/q58931s.py @@ -0,0 +1,10 @@ +# id 58931 ([Hieizan Temple] Fill the Red Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("A jar of souls... It sounds terrible, but I guess it's the best we can do. ") +res = sm.sendAskYesNo("Would you please help me gather those poor souls? ") +sm.startQuest(parentID) +sm.sendNext("Thank you. I feel a lot better. ") +sm.sendSay("Eliminate 100 #o9450031:# monsters in #m811000015:# to fill this jar. ") +sm.sendPrev("I'll leave it to you. ") diff --git a/scripts/quest/q58932e.py b/scripts/quest/q58932e.py new file mode 100755 index 0000000..03191ad --- /dev/null +++ b/scripts/quest/q58932e.py @@ -0,0 +1,8 @@ +# id 58932 ([Hieizan Temple] Fill the Blue Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Woo! It's quite heavy now. Feel all those souls... ") +sm.sendSay("It's VERY full! ") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35623") diff --git a/scripts/quest/q58932s.py b/scripts/quest/q58932s.py new file mode 100755 index 0000000..c91b39f --- /dev/null +++ b/scripts/quest/q58932s.py @@ -0,0 +1,11 @@ +# id 58932 ([Hieizan Temple] Fill the Blue Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("You did a great job filling up this red jar! I just know that you will do the same with the blue jar. ") +res = sm.sendAskYesNo("Hope you can still help with filling the jar... This is all for the souls of those men...") +sm.startQuest(parentID) +sm.sendNext("The second jar will fill if you eliminate about 150 #o9450032:# monsters in #m811000016:#. ") +sm.sendSay("Please hurry to get this job done. ") +sm.setParam(16) +sm.sendPrev("Get this job done...?") diff --git a/scripts/quest/q58933e.py b/scripts/quest/q58933e.py new file mode 100755 index 0000000..e1ee980 --- /dev/null +++ b/scripts/quest/q58933e.py @@ -0,0 +1,9 @@ +# id 58933 ([Hieizan Temple] Fill the Yellow Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Thank you! This jar looks good, #h0#.") +sm.sendSay("Now we just have to wrap them up... ") +sm.sendSay("Give me a second, okay?") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35624") diff --git a/scripts/quest/q58933s.py b/scripts/quest/q58933s.py new file mode 100755 index 0000000..60ad780 --- /dev/null +++ b/scripts/quest/q58933s.py @@ -0,0 +1,11 @@ +# id 58933 ([Hieizan Temple] Fill the Yellow Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("The last one is the yellow jar, heh. ") +sm.sendSay("Thank you for all your hard work, but could you please help me just ONCE more?") +res = sm.sendAskYesNo("I promise, I SWEAR this is the last one! After this, the alliance men can truly rest...") +sm.startQuest(parentID) +sm.sendNext("The third jar will fill up after you take down 200 #o9450033:# monsters of #m811000017:#...") +sm.sendSay("Woo, I know. I also wonder how so many alliance soldiers ended up like this.") +sm.sendPrev("This is the last round, so cheer up! I know you can do it.") diff --git a/scripts/quest/q58934e.py b/scripts/quest/q58934e.py new file mode 100755 index 0000000..29777c3 --- /dev/null +++ b/scripts/quest/q58934e.py @@ -0,0 +1,10 @@ +# id 58934 ([Hieizan Temple] Jars at Rest 1), field 811000018 +sm.setSpeakerID(9130108) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("You got here faster than I thought. Figures, since you aren't carrying anything.") +sm.sendSay("Whoof! As for me, I'm all worn out from carrying ALL these jars. My arms are about to FALL OFF! ") +sm.sendSay("...Which means you should offer to carry these for me. Here.") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Be careful with these. I don't know what we'd do if you broke them.") +sm.createQuestWithQRValue(18418, "B=35625") diff --git a/scripts/quest/q58934s.py b/scripts/quest/q58934s.py new file mode 100755 index 0000000..a21e205 --- /dev/null +++ b/scripts/quest/q58934s.py @@ -0,0 +1,12 @@ +# id 58934 ([Hieizan Temple] Jars at Rest 1), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Here, I wrapped up the jars you gave me with my bag cloth.") +sm.sendSay("Isn't this cloth nice? My mother made it herself, hee hee.") +sm.setParam(16) +sm.sendSay("(You felt it earlier, too... The floral prints are actually kind of unpleasant. Ugly. But you hold your tongue.)") +sm.setParam(4) +res = sm.sendAskYesNo("Now, I'll meet you at #m811000018:#. That's where you want to place the jars. ") +sm.startQuest(parentID) +sm.sendSayOkay("#m811000018:# is just past #m811000017:#. I'll see you there.") diff --git a/scripts/quest/q58935s.py b/scripts/quest/q58935s.py new file mode 100755 index 0000000..3fed4f3 --- /dev/null +++ b/scripts/quest/q58935s.py @@ -0,0 +1,39 @@ +# id 58935 ([Hieizan Temple] Jars at Rest 2), field 811000018 +sm.setSpeakerID(9130108) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Just place these jars on the stone altar in front of the east tower over there.\r\nSimple, right? I've heard that that area is the best spot... ") +sm.sendSay("Did you know? There are a lot of souls floating around in this temple.") +sm.setParam(16) +sm.sendSay("(You feel something strange. He doesn't seem like the same boy you met earlier.)") +sm.setParam(4) +res = sm.sendAskYesNo("Now, go on. Place the jars on that altar. ") +sm.startQuest(parentID) +sm.sendSayOkay("Simply click the altar. ") +sm.lockInGameUI(True, True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("(What the-? )") +sm.sendDelay(1000) +sm.sendNext("What are you trying to do?") +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130108) # Mysterious Boy +sm.sendSay("Heh heh heh... Good work. You've completed 'her' task admirably. ") +sm.sendSay("You know, 'she' told me you'd be easy to trick, with your do-gooder spirit and weak mind. I thought, surely you COULDN'T be that dumb! ") +sm.setParam(17) +sm.sendSay("What? Who is 'she'?") +sm.setParam(5) +sm.sendSay("Well, my part is done, so see ya! You should be more careful lending a hand next time. Ha! ") +sm.setParam(17) +sm.sendSay("Ugh, I've been tricked... ") +sm.sendSay("(Follow the boy to #m811000019:#. You will be teleported automatically. ") +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35626") +sm.warp(811000019) diff --git a/scripts/quest/q58936e.py b/scripts/quest/q58936e.py new file mode 100755 index 0000000..abad587 --- /dev/null +++ b/scripts/quest/q58936e.py @@ -0,0 +1,7 @@ +# id 58936 ([Hieizan Temple] Chasing the Boy), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Whew, I guess things won't get any worse.") +sm.sendSay(" The boy must be outside, I should follow him.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35627") diff --git a/scripts/quest/q58936s.py b/scripts/quest/q58936s.py new file mode 100755 index 0000000..1f7d24a --- /dev/null +++ b/scripts/quest/q58936s.py @@ -0,0 +1,6 @@ +# id 58936 ([Hieizan Temple] Chasing the Boy), field 811000018 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Hm? What is this place? I should check it out. ") +sm.sendSay("Maybe he went in that way. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58937s.py b/scripts/quest/q58937s.py new file mode 100755 index 0000000..0750ed4 --- /dev/null +++ b/scripts/quest/q58937s.py @@ -0,0 +1,5 @@ +# id 58937 ([Hieizan Temple] The Reunion 1), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Looks like the boy went deeper into Hieizan.") +sm.startQuest(parentID) diff --git a/scripts/quest/q58938e.py b/scripts/quest/q58938e.py new file mode 100755 index 0000000..4b11d1e --- /dev/null +++ b/scripts/quest/q58938e.py @@ -0,0 +1,7 @@ +# id 58938 ([Hieizan Temple] The Reunion 2), field 811000025 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Is that a carp...?") +sm.sendSay("Is the boy in there? Maybe he no longer matters... I'll find out when I enter.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35629") diff --git a/scripts/quest/q58938s.py b/scripts/quest/q58938s.py new file mode 100755 index 0000000..22fd19a --- /dev/null +++ b/scripts/quest/q58938s.py @@ -0,0 +1,6 @@ +# id 58938 ([Hieizan Temple] The Reunion 2), field 811000021 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Where did he go? Something must be up, otherwise he wouldn't have left in such a hurry. ") +sm.sendSay(" I have to stop them. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58939s.py b/scripts/quest/q58939s.py new file mode 100755 index 0000000..c2b054d --- /dev/null +++ b/scripts/quest/q58939s.py @@ -0,0 +1,16 @@ +# id 58939 ([Hieizan Temple] The Demon King Returns), field 811000029 +sm.lockInGameUI(True, True) +sm.setSpeakerID(9130116) # Princess No +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130122) # Dark Voice +sm.sendSay("Was it you who summoned me...") +sm.sendSay("...You're quite weak to summon one such as myself. ") +sm.sendSay("I will not accept such a weak body... But I will reward you for summoning me... Muahaha. ") +sm.sendSay("My wickedness shall strengthen your body. ") +sm.sendDelay(2900) +sm.reservedEffect(False, 0, 0, "Effect/DirectionJP3.img/sengoku/Scene0") +sm.completeQuestNoCheck(parentID) +sm.startQuest(58949) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(58973, "m035=clear;dr1=clear;dr2=clear;m037=clear;m038=clear;m039=clear") +sm.createQuestWithQRValue(18418, "B=35630") diff --git a/scripts/quest/q58940e.py b/scripts/quest/q58940e.py new file mode 100755 index 0000000..33de1af --- /dev/null +++ b/scripts/quest/q58940e.py @@ -0,0 +1,10 @@ +# id 58940 ([Hieizan Temple] The End of Princess No), field 811000033 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("She has already become...too wicked.") +sm.sendSay("...I should get the mirror to Ayame first.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(58948, "clear=1") +sm.startQuest(58979) +sm.startQuest(58978) +sm.warp(811000008) diff --git a/scripts/quest/q58940s.py b/scripts/quest/q58940s.py new file mode 100755 index 0000000..3a85db4 --- /dev/null +++ b/scripts/quest/q58940s.py @@ -0,0 +1,7 @@ +# id 58940 ([Hieizan Temple] The End of Princess No), field 811000029 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("...Everything was an illusion? Perhaps that's not the worst thing that's happened. But what was she trying to show me? ") +sm.sendSay("I still haven't found the shrine that Ayame talked about. Princess No must be there.") +sm.sendSay("The shrine is a little bit west of here. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58941e.py b/scripts/quest/q58941e.py new file mode 100755 index 0000000..d1c904e --- /dev/null +++ b/scripts/quest/q58941e.py @@ -0,0 +1,8 @@ +# id 58941 ([Hieizan Temple] Sad Little Boy), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Did you really find my bag?") +sm.sendSay("Thank you! Thank you so much.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35632") diff --git a/scripts/quest/q58941s.py b/scripts/quest/q58941s.py new file mode 100755 index 0000000..0bb0c9d --- /dev/null +++ b/scripts/quest/q58941s.py @@ -0,0 +1,21 @@ +# id 58941 ([Hieizan Temple] Sad Little Boy), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("*Sniff*") +sm.setParam(16) +sm.sendSay("(A boy in a place like this? Quite suspicious. And crying at that. I should just... pretend I didn't see.)") +sm.setParam(4) +res = sm.sendAskYesNo("*Sniff* WAHHHH.... Wait, is that... Is somebody there? Please, help me! ") +sm.startQuest(parentID) +sm.startQuest(58979) +sm.setParam(16) +sm.sendNext("Ergh... What's wrong?") +sm.setParam(4) +sm.sendSay("I used to serve the alliance military. I took care of the horses. We were led here from the guard post and... I guess passed out in all the chaos.") +sm.setParam(16) +sm.sendSay("The alliance army is here? ...Where are the other alliance soldiers? ") +sm.setParam(4) +sm.sendSay("All the soldiers went... I don't know. They're strange now. I-I'm scared. I want to get out of here. Could you find my sack for me?") +sm.sendSay("It's the only thing I have to remember my father by. I'm pretty sure I dropped it somewhere close by but I can't see, it's too dark.") +sm.sendPrev("It's a bag with very pretty flower prints. Don't judge.") diff --git a/scripts/quest/q58942e.py b/scripts/quest/q58942e.py new file mode 100755 index 0000000..f31dc6e --- /dev/null +++ b/scripts/quest/q58942e.py @@ -0,0 +1,8 @@ +# id 58942 ([Hieizan Temple] The Lost Alliance 1), field 811000014 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("What...? The soldiers are being brainwashed? ") +sm.createQuestWithQRValue(18418, "B=35633") +sm.sendPrev("What do we do? CAN we do anything? ") diff --git a/scripts/quest/q58942s.py b/scripts/quest/q58942s.py new file mode 100755 index 0000000..258c8b7 --- /dev/null +++ b/scripts/quest/q58942s.py @@ -0,0 +1,9 @@ +# id 58942 ([Hieizan Temple] The Lost Alliance 1), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("The alliance men? Last I saw, the Spirit Walkers were giving them some weird potions and casting spells, then they turned strange. What could have happened?") +sm.sendSay("Please save them. They were so good to me, almost like fathers.") +res = sm.sendAskYesNo("I saw the Oda Spirit Walkers nearby. Maybe we can get some information from them.") +sm.startQuest(parentID) +sm.sendSayOkay("Thank you for your help! I think defeating about 100 Oda Spirit Walkers will give you enough leads.") diff --git a/scripts/quest/q58943e.py b/scripts/quest/q58943e.py new file mode 100755 index 0000000..eb0b6b7 --- /dev/null +++ b/scripts/quest/q58943e.py @@ -0,0 +1,8 @@ +# id 58943 ([Hieizan Temple] Strange Alliance Men -2-), field 811000014 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Yes, that's it. That's the jar I saw. ") +sm.createQuestWithQRValue(18418, "B=35634") +sm.sendPrev("Okay! Now that we have the jars, we just have to put some souls in them.") diff --git a/scripts/quest/q58943s.py b/scripts/quest/q58943s.py new file mode 100755 index 0000000..9a9ca0e --- /dev/null +++ b/scripts/quest/q58943s.py @@ -0,0 +1,17 @@ +# id 58943 ([Hieizan Temple] Strange Alliance Men -2-), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Do you think that this will help turn the soldiers back to normal? ") +sm.setParam(16) +sm.sendSay("What's this?") +sm.setParam(4) +sm.sendSay("Before I passed out, one of the soldiers gave me this note.") +sm.setParam(16) +sm.sendSay("(You open the note.) 'The Oda Spirit Walker Jars can hold innocent souls. Ask someone to do that for our souls.' ") +sm.sendSay("...Welp, I guess there isn't actually a way to turn them back.") +sm.setParam(4) +res = sm.sendAskYesNo("I saw an Oda Spirit Walker carrying a suspicious jar. I think that might be what they are referring to.") +sm.startQuest(parentID) +sm.sendNext("They were such good people... I'm sad that this is the only thing we can do.") +sm.sendPrev("Whatever the case, I think we should get the jars first.") diff --git a/scripts/quest/q58944e.py b/scripts/quest/q58944e.py new file mode 100755 index 0000000..8465a2a --- /dev/null +++ b/scripts/quest/q58944e.py @@ -0,0 +1,8 @@ +# id 58944 ([Hieizan Temple] Fill the Red Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Thank you for all your help. Even brainwashed, it couldn't have been easy taking their souls...") +sm.sendSay("But thanks to your bravery, their souls can be free now.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35635") diff --git a/scripts/quest/q58944s.py b/scripts/quest/q58944s.py new file mode 100755 index 0000000..b8fa61a --- /dev/null +++ b/scripts/quest/q58944s.py @@ -0,0 +1,10 @@ +# id 58944 ([Hieizan Temple] Fill the Red Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("A jar of souls... It sounds terrible, but I guess it's the best we can do. ") +res = sm.sendAskYesNo("Would you please help me gather those poor souls? ") +sm.startQuest(parentID) +sm.sendNext("Thank you. I feel a lot better. ") +sm.sendSay("Eliminate 100 #o9450031:# monsters in #m811000015:# to fill this jar. ") +sm.sendPrev("I'll leave it to you. ") diff --git a/scripts/quest/q58945e.py b/scripts/quest/q58945e.py new file mode 100755 index 0000000..c4942d9 --- /dev/null +++ b/scripts/quest/q58945e.py @@ -0,0 +1,8 @@ +# id 58945 ([Hieizan Temple] Fill the Blue Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Woo! It's quite heavy now. Feel all those souls... ") +sm.sendSay("It's VERY full! ") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35636") diff --git a/scripts/quest/q58945s.py b/scripts/quest/q58945s.py new file mode 100755 index 0000000..7e64a99 --- /dev/null +++ b/scripts/quest/q58945s.py @@ -0,0 +1,11 @@ +# id 58945 ([Hieizan Temple] Fill the Blue Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("You did a great job filling up this red jar! I just know that you will do the same with the blue jar. ") +res = sm.sendAskYesNo("Hope you can still help with filling the jar... This is all for the souls of those men...") +sm.startQuest(parentID) +sm.sendNext("The second jar will fill if you eliminate about 150 #o9450032:# monsters in #m811000016:#. ") +sm.sendSay("Please hurry to get this job done. ") +sm.setParam(16) +sm.sendPrev("Get this job done...?") diff --git a/scripts/quest/q58946e.py b/scripts/quest/q58946e.py new file mode 100755 index 0000000..7577ece --- /dev/null +++ b/scripts/quest/q58946e.py @@ -0,0 +1,9 @@ +# id 58946 ([Hieizan Temple] Fill the Yellow Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Thank you! This jar looks good, #h0#.") +sm.sendSay("Now we just have to wrap them up... ") +sm.sendSay("Give me a second, okay?") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35637") diff --git a/scripts/quest/q58946s.py b/scripts/quest/q58946s.py new file mode 100755 index 0000000..1e95246 --- /dev/null +++ b/scripts/quest/q58946s.py @@ -0,0 +1,11 @@ +# id 58946 ([Hieizan Temple] Fill the Yellow Jar), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("The last one is the yellow jar, heh. ") +sm.sendSay("Thank you for all your hard work, but could you please help me just ONCE more?") +res = sm.sendAskYesNo("I promise, I SWEAR this is the last one! After this, the alliance men can truly rest...") +sm.startQuest(parentID) +sm.sendNext("The third jar will fill up after you take down 200 #o9450033:# monsters of #m811000017:#...") +sm.sendSay("Woo, I know. I also wonder how so many alliance soldiers ended up like this.") +sm.sendPrev("This is the last round, so cheer up! I know you can do it.") diff --git a/scripts/quest/q58947e.py b/scripts/quest/q58947e.py new file mode 100755 index 0000000..3d7c420 --- /dev/null +++ b/scripts/quest/q58947e.py @@ -0,0 +1,10 @@ +# id 58947 ([Hieizan Temple] Jars at Rest 1), field 811000018 +sm.setSpeakerID(9130108) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("You got here faster than I thought. Figures, since you aren't carrying anything.") +sm.sendSay("Whoof! As for me, I'm all worn out from carrying ALL these jars. My arms are about to FALL OFF! ") +sm.sendSay("...Which means you should offer to carry these for me. Here.") +sm.completeQuestNoCheck(parentID) +sm.sendPrev("Be careful with these. I don't know what we'd do if you broke them.") +sm.createQuestWithQRValue(18418, "B=35638") diff --git a/scripts/quest/q58947s.py b/scripts/quest/q58947s.py new file mode 100755 index 0000000..12efc7a --- /dev/null +++ b/scripts/quest/q58947s.py @@ -0,0 +1,12 @@ +# id 58947 ([Hieizan Temple] Jars at Rest 1), field 811000014 +sm.setSpeakerID(9130107) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Here, I wrapped up the jars you gave me with my bag cloth.") +sm.sendSay("Isn't this cloth nice? My mother made it herself, hee hee.") +sm.setParam(16) +sm.sendSay("(You felt it earlier, too... The floral prints are actually kind of unpleasant. Ugly. But you hold your tongue.)") +sm.setParam(4) +res = sm.sendAskYesNo("Now, I'll meet you at #m811000018:#. That's where you want to place the jars. ") +sm.startQuest(parentID) +sm.sendSayOkay("#m811000018:# is just past #m811000017:#. I'll see you there.") diff --git a/scripts/quest/q58955s.py b/scripts/quest/q58955s.py new file mode 100755 index 0000000..7f75261 --- /dev/null +++ b/scripts/quest/q58955s.py @@ -0,0 +1,16 @@ +# id 58955 (Will of the Five Planets), field 811000008 +sm.setSpeakerID(9130104) # Princess Sakuno +sm.sendNext("...Something very regrettable is happening.") +sm.setParam(2) +sm.sendSay("What is it?") +sm.setParam(0) +sm.sendSay("An ominous force has come in the wake of Oda Nobunaga and Princess No's attempts to cross dimensions. At this rate, we may be thrown fully into Maple World and disappear. ") +sm.setParam(2) +sm.sendSay("Is there any way to stop that from happening?") +sm.setParam(0) +sm.sendSay("The Demon King refused to cooperate with Princess No, but he also did not return to his domain. To send him back, we must eliminate Princess No, the summoner.") +sm.sendSay("The will of the five planets sent us a message. This should help us eliminate Princess No.") +sm.sendSay("Warriors shall inherit Mars's message, Magicians inherit Mercury's, Bowmen inherit Jupiter's, Thieves inherit Venus's, and Pirates inherit Saturn's.") +sm.sendSay("We now have a solid reason to eliminate Princess No.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35674") diff --git a/scripts/quest/q58963s.py b/scripts/quest/q58963s.py new file mode 100755 index 0000000..ded8d2e --- /dev/null +++ b/scripts/quest/q58963s.py @@ -0,0 +1,12 @@ +# id 58963 ([Hieizan Temple] Jars at Rest 2), field 811000018 +sm.setSpeakerID(9130108) # Mysterious Boy +sm.setParam(4) +sm.setInnerOverrideSpeakerTemplateID(9130107) # Mysterious Boy +sm.sendNext("Just place these jars on the stone altar in front of the east tower over there.\r\nSimple, right? I've heard that that area is the best spot... ") +sm.sendSay("Did you know? There are a lot of souls floating around in this temple.") +sm.setParam(16) +sm.sendSay("(You feel something strange. He doesn't seem like the same boy you met earlier.)") +sm.setParam(4) +res = sm.sendAskYesNo("Now, go on. Place the jars on that altar. ") +sm.startQuest(parentID) +sm.sendSayOkay("Simply click the altar. ") diff --git a/scripts/quest/q58964e.py b/scripts/quest/q58964e.py new file mode 100755 index 0000000..a6fba0b --- /dev/null +++ b/scripts/quest/q58964e.py @@ -0,0 +1,7 @@ +# id 58964 ([Hieizan Temple] Chasing the Boy), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Whew, I guess things won't get any worse.") +sm.sendSay(" The boy must be outside, I should follow him.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35640") diff --git a/scripts/quest/q58964s.py b/scripts/quest/q58964s.py new file mode 100755 index 0000000..e085758 --- /dev/null +++ b/scripts/quest/q58964s.py @@ -0,0 +1,6 @@ +# id 58964 ([Hieizan Temple] Chasing the Boy), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Hm? What is this place? I should check it out. ") +sm.sendSay("Maybe he went in that way. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58965s.py b/scripts/quest/q58965s.py new file mode 100755 index 0000000..70351b3 --- /dev/null +++ b/scripts/quest/q58965s.py @@ -0,0 +1,5 @@ +# id 58965 ([Hieizan Temple] The Reunion 1), field 811000019 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Looks like the boy went deeper into Hieizan.") +sm.startQuest(parentID) diff --git a/scripts/quest/q58966e.py b/scripts/quest/q58966e.py new file mode 100755 index 0000000..e314f19 --- /dev/null +++ b/scripts/quest/q58966e.py @@ -0,0 +1,7 @@ +# id 58966 ([Hieizan Temple] The Reunion 2), field 811000025 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Hm, Princess No has some weird tastes. ") +sm.sendSay("Is the boy in there? Maybe he no longer matters... I'll find out when I enter.") +sm.completeQuestNoCheck(parentID) +sm.createQuestWithQRValue(18418, "B=35642") diff --git a/scripts/quest/q58966s.py b/scripts/quest/q58966s.py new file mode 100755 index 0000000..47c1d12 --- /dev/null +++ b/scripts/quest/q58966s.py @@ -0,0 +1,6 @@ +# id 58966 ([Hieizan Temple] The Reunion 2), field 811000021 +sm.setSpeakerType(3) +sm.setParam(16) +sm.sendNext("Where did he go? Something must be up, otherwise he wouldn't have left in such a hurry. ") +sm.sendSay(" I have to stop them. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q58967s.py b/scripts/quest/q58967s.py new file mode 100755 index 0000000..47ed304 --- /dev/null +++ b/scripts/quest/q58967s.py @@ -0,0 +1,16 @@ +# id 58967 ([Hieizan Temple] The Demon King Returns), field 811000029 +sm.lockInGameUI(True, True) +sm.setSpeakerID(9130116) # Princess No +sm.setParam(5) +sm.setInnerOverrideSpeakerTemplateID(9130122) # Dark Voice +sm.sendSay("Was it you who summoned me...") +sm.sendSay("...You're quite weak to summon one such as myself. ") +sm.sendSay("I will not accept such a weak body... But I will reward you for summoning me... Muahaha. ") +sm.sendSay("My wickedness shall strengthen your body. ") +sm.sendDelay(2900) +sm.reservedEffect(False, 0, 0, "Effect/DirectionJP3.img/sengoku/Scene0") +sm.completeQuestNoCheck(parentID) +sm.startQuest(58949) +sm.createQuestWithQRValue(58974, "m035=clear;dr1=clear;dr2=clear;m037=clear;m038=clear;m039=clear") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(18418, "B=35643") diff --git a/scripts/quest/q58968e.py b/scripts/quest/q58968e.py new file mode 100755 index 0000000..ba2cf85 --- /dev/null +++ b/scripts/quest/q58968e.py @@ -0,0 +1,9 @@ +# id 58968 ([Hieizan Temple] The End of Princess No), field 811000033 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("She has already become...too wicked.") +sm.sendSay("...I should get the mirror to Ayame first.") +sm.completeQuestNoCheck(parentID) +sm.startQuest(58979) +sm.startQuest(58978) +sm.warp(811000008) diff --git a/scripts/quest/q58968s.py b/scripts/quest/q58968s.py new file mode 100755 index 0000000..d1a4b42 --- /dev/null +++ b/scripts/quest/q58968s.py @@ -0,0 +1,7 @@ +# id 58968 ([Hieizan Temple] The End of Princess No), field 811000029 +sm.setSpeakerType(3) +sm.setParam(17) +sm.sendNext("...Everything was an illusion? Perhaps that's not the worst thing that's happened. But what was she trying to show me? ") +sm.sendSay("I still haven't found the shrine that Ayame talked about. Princess No must be there.") +sm.sendSay("The shrine is a little bit west of here. ") +sm.startQuest(parentID) diff --git a/scripts/quest/q59000e.py b/scripts/quest/q59000e.py new file mode 100755 index 0000000..b9ad0f0 --- /dev/null +++ b/scripts/quest/q59000e.py @@ -0,0 +1,11 @@ +# 59000 - The Town Prankster +sm.setPlayerAsSpeaker() +sm.sendNext("Hilga, I am truly, deeply, totally, completely sorry. ") +sm.setSpeakerID(9390305) +sm.sendNext("You pulled this prank on me, #h #?") +sm.setPlayerAsSpeaker() +sm.sendNext("I thought everyone would find it entertaining, but I was wrong. I'm epically heroically massively sorry. Will you forgive me?") +sm.setSpeakerID(9390305) +sm.sendNext("Sigh. You're still young, so I suppose I have to let it slide. Don't do it again, okay?") +sm.completeQuest(parentID) +sm.dispose() diff --git a/scripts/quest/q59000s.py b/scripts/quest/q59000s.py new file mode 100755 index 0000000..562c2d2 --- /dev/null +++ b/scripts/quest/q59000s.py @@ -0,0 +1,12 @@ +# 59000 - The Town Prankster + +sm.setSpeakerID(9390304) +sm.sendNext("#b#h ##k, are you responsible for this? I know it's fun to pick on #b#p9390305##k, but it's really not very nice.") +sm.sendNext("I'm ashamed of you. Go apologise to #b#p9390305##k!") +if sm.sendAskYesNo("A true hero is never afraid to apologise!"): + sm.startQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendNext("I'm going to give the most epic apology ever!") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q59001e.py b/scripts/quest/q59001e.py new file mode 100755 index 0000000..a0f16d5 --- /dev/null +++ b/scripts/quest/q59001e.py @@ -0,0 +1,11 @@ +# 59001 - Crybaby + +sm.setPlayerAsSpeaker() +sm.sendNext("Hi, Bran... I'm really sorry...") +sm.setSpeakerID(9390306) +sm.sendNext("I knew it was you...") +sm.setPlayerAsSpeaker() +sm.sendNext("I'm super sorry. I solemnly swear I will never pull another prank on you, upon my honor as an aspiring hero.") +sm.completeQuest(parentID) +sm.dispose() + diff --git a/scripts/quest/q59001s.py b/scripts/quest/q59001s.py new file mode 100755 index 0000000..22d550b --- /dev/null +++ b/scripts/quest/q59001s.py @@ -0,0 +1,14 @@ +# 59001 - Crybaby + +sm.setSpeakerID(9390305) +sm.sendNext("Also, I saw #b#p9390306##k crying... Do you know anything about that?") +sm.setPlayerAsSpeaker() +sm.sendNext("Well...") +sm.setSpeakerID(9390305) +if sm.sendAskYesNo("#b#h ##k! You have to treat your friends better! Apologise to #b#p9390306##k!"): + sm.startQuest(parentID) + sm.setPlayerAsSpeaker() + sm.sendNext("You got it! A true hero is excellent at delivering apologies, as you just experienced!") + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q59002s.py b/scripts/quest/q59002s.py new file mode 100755 index 0000000..025c880 --- /dev/null +++ b/scripts/quest/q59002s.py @@ -0,0 +1,22 @@ +# 59002 - Brave Like a Hero + +sm.setSpeakerID(9390306) +sm.sendNext("What is this with you and that hero thing? Do you really think you're cut out to be a hero?") +sm.setPlayerAsSpeaker() +sm.sendNext("Sure, I'm going to be a legend, just like the five Maple Heroes!") +sm.setSpeakerID(9390306) +sm.sendNext("Yeah. *snort* Sure.") +sm.setPlayerAsSpeaker() +sm.sendNext("You don't believe me? That's okay. What can I do to prove it to you?") +sm.setSpeakerID(9390306) +if sm.sendAskYesNo("You know #bWolf Forest#k to the east? The place even grown-ups are afraid of? Go there... ALONE. Then maybe I'll believe you'll be a hero someday."): + sm.setPlayerAsSpeaker() + sm.sendNext("You got it! Be back in a jiffy!") + sm.setSpeakerID(9390306) + sm.sendNext("W-wait! Really? Are you sure?") + sm.setPlayerAsSpeaker() + sm.sendNext("Bah, a hero like me ain't scared of no forest!") + sm.startQuest(parentID) + sm.dispose() +else: + sm.dispose() \ No newline at end of file diff --git a/scripts/quest/q61133e.py b/scripts/quest/q61133e.py new file mode 100755 index 0000000..5f2e032 --- /dev/null +++ b/scripts/quest/q61133e.py @@ -0,0 +1,9 @@ +# id 61133 (Blackgate's New Gate), field 610050000 +sm.setSpeakerID(9201428) # Angel +sm.sendNext("New recruit, huh? You don't look like much...") +sm.setParam(2) +sm.sendSay("Hey, I just wanted to check the place out. New areas are so exciting!") +sm.setParam(0) +sm.sendSay("#i3800848#\r\nLook, beggars can't be choosers. I'm getting reports that the demons are on the move again.") +sm.sendSay("Things aren't looking so good, so we'll take what we can get. You're in! Welcome to the BDF.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q61133s.py b/scripts/quest/q61133s.py new file mode 100755 index 0000000..edfc3d3 --- /dev/null +++ b/scripts/quest/q61133s.py @@ -0,0 +1,8 @@ +# id 61133 (Blackgate's New Gate), field 101070000 +sm.setSpeakerID(9201428) # Angel +sm.sendNext("We need all the young, tough heroes we can get in the Blackgate Defense Force.") +sm.sendSay("#i3800847#\r\nBlackgate is a hub of industry and science, but these demons are putting a real crimp in our work.") +res = sm.sendAskYesNo("The BDF wants YOU!") +sm.sendNext("#i3800849#\r\nCome to Blackgate City if you want to help drive out the invaders and reclaim our city.") +sm.sendSay("You can use the Dimensional Mirror to come to Blackgate City whenever you can.") +sm.startQuest(parentID) diff --git a/scripts/quest/q61134e.py b/scripts/quest/q61134e.py new file mode 100755 index 0000000..190f032 --- /dev/null +++ b/scripts/quest/q61134e.py @@ -0,0 +1,8 @@ +# id 61134 (Final Defensive Line), field 610050700 +sm.setSpeakerID(9201429) # Choy +sm.sendNext("AAAAAAAHHHHoooooh wait, you don't look like a demon. Are you part of the rescue team?") +sm.setParam(2) +sm.sendSay("More like I AM the rescue team. Nice to meet you.") +sm.setParam(0) +sm.sendSay("Oh! Well then, likewise. You look pretty new, honestly...") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q61134s.py b/scripts/quest/q61134s.py new file mode 100755 index 0000000..90206cd --- /dev/null +++ b/scripts/quest/q61134s.py @@ -0,0 +1,11 @@ +# id 61134 (Final Defensive Line), field 610050000 +sm.setSpeakerID(9201428) # Angel +sm.sendNext("#i3800858#\r\nHere's your first mission, recruit. It's a search and rescue of a scout we sent to eastern Blackgate.") +sm.setParam(2) +sm.sendSay("You sure you want to send a recruit to save a recruit?") +sm.setParam(0) +sm.sendSay("#i3800859#\r\nDon't question your orders! We don't have the time. Our best officers need to hold the main defense lines.") +res = sm.sendAskYesNo("But I'm sure you can slip into the central area and find our man!") +sm.setParam(2) +sm.sendNext("Okay, I get it.\r\nMaybe through the outskirts...") +sm.startQuest(parentID) diff --git a/scripts/quest/q61135s.py b/scripts/quest/q61135s.py new file mode 100755 index 0000000..e803e67 --- /dev/null +++ b/scripts/quest/q61135s.py @@ -0,0 +1,3 @@ +# id 61135 (The Stranded Scout), field 610050700 +sm.setSpeakerID(9201429) # Choy +sm.sendNext("Still, thanks for coming out to find me. Unfortunately, I can't leave yet. I have a mission to complete.") diff --git a/scripts/quest/q61136s.py b/scripts/quest/q61136s.py new file mode 100755 index 0000000..e2cfe20 --- /dev/null +++ b/scripts/quest/q61136s.py @@ -0,0 +1,3 @@ +# id 61136 (Eyes in the Dark), field 610050100 +sm.setSpeakerID(9201430) # Solus +sm.sendNext("#i3800860#\r\nWe are the Night Angels, watchers of darkness.") diff --git a/scripts/quest/q61145s.py b/scripts/quest/q61145s.py new file mode 100755 index 0000000..2f76e47 --- /dev/null +++ b/scripts/quest/q61145s.py @@ -0,0 +1,23 @@ +# Created by MechAviv +# Quest ID :: 61145 +# Mysterious Merchant Matilda + +sm.setSpeakerID(9201451) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendNext("Hi! My name is #bMatilda#k.\r\nI sell lots of handy stuff. And not like those OTHER people that say that.\r\n You have the look of someone about to do something stupid and dangerous. #bI can help!#k") + + +sm.setSpeakerID(9201451) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendSay("How about letting me sell you some stuff that might keep you less dead?\r\n#i4143000# #i4140001# #i4142000# #i2501000# #i2500000# #i2320000#\r\nAll you need are #e#bmesos#n#k to get my nifty items.") + + +sm.setSpeakerID(9201451) +sm.removeEscapeButton() +sm.flipDialogue() +sm.sendSay("#bCome visit me in town. Any town!#k\r\nI like to stay mobile.") + +sm.startQuest(61145) +sm.completeQuest(61145) diff --git a/scripts/quest/q62000s.py b/scripts/quest/q62000s.py new file mode 100755 index 0000000..890e5a5 --- /dev/null +++ b/scripts/quest/q62000s.py @@ -0,0 +1,26 @@ +# [Shaoling Temple] Elder Jung's Summons + +ELDER_JUNG = 9310049 +MOUNT_SONG_HAMLET = 701210000 + +sm.removeEscapeButton() +sm.setBoxChat() +sm.flipBoxChat() +sm.flipBoxChatPlayerNoEscape() +sm.sendNext("#fs 24#(You've received a letter from #b#p"+ str(ELDER_JUNG) +"##k from Mount Song Hamlet.)") + +sm.setSpeakerID(ELDER_JUNG) +sm.setBoxChat() +sm.sendNext("I hope this finds you well, #h0#. " + "I am the elder of #b#m"+ str(MOUNT_SONG_HAMLET) +"##k. We have have of your great deeds for other realms. We are in dire need of your assistance.") + +response = sm.sendAskYesNo("The details are sensitive. I would like to discuss them in person. Will you join me at #b#m"+ str(MOUNT_SONG_HAMLET) +"##k?") + +if response: + sm.sendNext("Thank you. I await you at #b#m"+ str(MOUNT_SONG_HAMLET) +"##k.") + sm.warp(MOUNT_SONG_HAMLET) + sm.startQuest(parentID) + sm.completeQuest(parentID) + sm.giveExp(505113) +else: + sm.sendSayOkay("Let me remind you... You're talking to a letter.") \ No newline at end of file diff --git a/scripts/quest/q62001e.py b/scripts/quest/q62001e.py new file mode 100755 index 0000000..964408e --- /dev/null +++ b/scripts/quest/q62001e.py @@ -0,0 +1,13 @@ +# [Shaoling Temple] Intercepted Messages + +ELDER_JUNG = 9310049 +WISE_CHIEF_PRIEST = 9310053 + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("You bear a message from #b#p"+ str(ELDER_JUNG) +"##k?") + +sm.sendNext("So, demons have spread as far as Mount Song Hamlet... Something must be done...") +sm.completeQuest(parentID) +sm.consumeItem(4034635) +sm.giveExp(1515339) \ No newline at end of file diff --git a/scripts/quest/q62001s.py b/scripts/quest/q62001s.py new file mode 100755 index 0000000..585d447 --- /dev/null +++ b/scripts/quest/q62001s.py @@ -0,0 +1,24 @@ +# [Shaolin Temple] Intercepted Messages + +ELDER_JUNG = 9310049 +WISE_CHIEF_PRIEST = 9310053 + +sm.removeEscapeButton() +sm.setSpeakerID(ELDER_JUNG) +sm.setBoxChat() +sm.sendNext("While the outside world moves and sways to its own rhythm, things here in the depths of Mount Song stay the same. " + "Every tree, every blade of grass, we are still.") + +sm.sendNext("But disturbing rumors have arisen lately... Of demons and petty theft. By which I mean, demons stealing children's shoes.") + +sm.sendNext("I knew things had truly gone amiss when I saw the wild-haired Nine-Tailed Fox lurking in the woods.") + +sm.sendNext("I've sent several messages tot he Shaolin Temple. " + "It's their job to protect Mount Song, after all. But bandits keep intercepting the messages.") + +response = sm.sendAskYesNo("That is why I sent for you... " + "Will you retrieve my messages from the bandits and deliver them to my old friend, the #r#p"+ str(WISE_CHIEF_PRIEST) +"##k of Shaolin Temple?") + +if response: + sm.sendNext("Thank you. I will be here meditating until you return with good news.") + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q62002e.py b/scripts/quest/q62002e.py new file mode 100755 index 0000000..4a3cb92 --- /dev/null +++ b/scripts/quest/q62002e.py @@ -0,0 +1,11 @@ +# [Shaolin Temple] Not a Demon + +ZHIKESENG = 9310041 + +sm.removeEscapeButton() +sm.setSpeakerID(ZHIKESENG) +sm.setBoxChat() +sm.sendNext("Well, then. I suppose are YOU human. How unexpected.") +sm.completeQuest(parentID) +sm.consumeItem(4034636) +sm.giveExp(1515339) \ No newline at end of file diff --git a/scripts/quest/q62002s.py b/scripts/quest/q62002s.py new file mode 100755 index 0000000..542655c --- /dev/null +++ b/scripts/quest/q62002s.py @@ -0,0 +1,3 @@ +# [Shaolin Temple] Not a demon + +sm.openNpc(9310041) # Zhikeseng \ No newline at end of file diff --git a/scripts/quest/q62003e.py b/scripts/quest/q62003e.py new file mode 100755 index 0000000..7966ed4 --- /dev/null +++ b/scripts/quest/q62003e.py @@ -0,0 +1,9 @@ +# id 62003 ([Shaolin Temple] The Chief Priest's Woes), field 701220000 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310053) # Wise Chief Priest +sm.sendNext("These demons are really becoming a problem.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.sendPrev("#b#p9310046##k will know what to do. That's why I gave him that promotion. Go talk to him.") diff --git a/scripts/quest/q62003s.py b/scripts/quest/q62003s.py new file mode 100755 index 0000000..85d7a95 --- /dev/null +++ b/scripts/quest/q62003s.py @@ -0,0 +1,23 @@ +# [Shaolin Temple] Chief Priest's Woes + +WISE_CHIEF_PRIEST = 9310053 +sm.removeEscapeButton() +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("This is troubling... The demons have extended their reach to Mount Song Hamlet...") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Yeah, you know I thought you guys were supposed to be professional demon slayers or something, " + "but things look ever worse here than back in town.") + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("It is a sad tale... Long ago, the demons were sealed within the Sutra Depository. Now and then, a few would break free and play pranks on the towns people...") + +sm.sendNext("But we of the Shaolin Temple would suppress them, using the power of zen and prayer beads.") + +sm.sendNext("But lately, the demon presence has been overwhelming. Could there be a problem with the Sutra Depository?") + +sm.sendNext("Why don't you go investigate the Mahavira Hall?") +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q62005e.py b/scripts/quest/q62005e.py new file mode 100755 index 0000000..352a9a2 --- /dev/null +++ b/scripts/quest/q62005e.py @@ -0,0 +1,18 @@ +# id 62005 ([Shaolin Temple] Demon B Gone), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310046) # Zheung Guan +sm.sendNext("So, how'd everything go?") +sm.setSpeakerType(4) +sm.setSpeakerID(9310046) # Zheung Guan +sm.setParam(57) +sm.sendSay("You said the demons were going to disappear but MORE of them appeared! I almost died! ") +sm.setSpeakerType(3) +sm.setParam(37) +sm.sendSay("Yeah, that's what I was afraid of. I'll alter some ingredients... Maybe add in some extra bananas...") +sm.setSpeakerType(4) +sm.setParam(57) +sm.sendSay("(You don't want to be the one to test the new potion after what just happened. Maybe it's time to go talk to the #b#p9310053##k...)") +sm.completeQuestNoCheck(parentID) +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62005s.py b/scripts/quest/q62005s.py new file mode 100755 index 0000000..a7167c6 --- /dev/null +++ b/scripts/quest/q62005s.py @@ -0,0 +1,33 @@ +# [Shaolin Temple] Demon B Gone + +ZHEUNG_GUAN = 9310046 +DEMON_B_GONE = 2434568 +PATH_OF_STONE = 701210160 + +sm.removeEscapeButton() +sm.setSpeakerID(ZHEUNG_GUAN) +sm.setBoxChat() +sm.sendNext("Let me guess. You were sent to help me. Why do they always send me the runts?") + +sm.sendNext("I've spent many sleepless nights concocting this #v"+ str(DEMON_B_GONE) +"##t"+ str(DEMON_B_GONE) +"#. Go test it out. If my calculations are correct, the result will be miraculous") + +if not sm.canHold(DEMON_B_GONE): + sm.sendSayOkay("Please make some space in your inventory.") + sm.dispose() + +sm.sendNext("Try it out at #b#m"+ str(PATH_OF_STONE) +"##k.") + +response = sm.sendAskYesNo("#b#m"+ str(PATH_OF_STONE) +"##k was once a sacred spot where we performed holy rituals. " + "Now it's become a playground for demons. Spritz my potion there to get rid of them.") + +if response: + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("Uh, will there be any side effects?") + + sm.setSpeakerID(ZHEUNG_GUAN) + sm.setBoxChat() + sm.sendNext("We won't know until you try it out. Now get going!") + + sm.giveItem(2434568) + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q62007e.py b/scripts/quest/q62007e.py new file mode 100755 index 0000000..c8b5198 --- /dev/null +++ b/scripts/quest/q62007e.py @@ -0,0 +1,27 @@ +# [Shaolin Temple] Investigate the Sutra Repository + +BOOK_OF_DEMONS = 4034637 +WISE_CHIEF_PRIEST = 9310053 + +sm.removeEscapeButton() +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("Oh! The #bBook of Demons#k! You didn't... You didn't open the book, did you?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("I didn't have time. I was too busy rushing back here so we can save the world!") + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("Wonderful. You did beautifully. Now, off with you. Rest Up. You've earned it. I have things do.") + +sm.completeQuest(parentID) +sm.giveExp(3030679) +sm.consumeItem(BOOK_OF_DEMONS) +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(Whoa. the #b#p"+ str(WISE_CHIEF_PRIEST) +"##k rushed out of here. That book must be filled with really great info. His eyes lit up when he opened it.") + +sm.sendNext("(Well, another job well done. Time to say goodbye to my favourite demon trio back at the #rSutra Depository Secret Library#k.)") +sm.chatScript("Say farewell to the demons at the Sutra Depository Secret Library") \ No newline at end of file diff --git a/scripts/quest/q62007s.py b/scripts/quest/q62007s.py new file mode 100755 index 0000000..845599a --- /dev/null +++ b/scripts/quest/q62007s.py @@ -0,0 +1,49 @@ +# [Shaolin Temple] Investigate the Sutra Repository + +WISE_CHIEF_PRIEST = 9310053 +ZHEUNG_GUAN = 9310046 +BOOK_OF_DEMONS = 4034637 + +sm.removeEscapeButton() +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("So the Demon B Gone didn't work? Oh well! Now, there's one other way...") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(Why did the Head Priest send me to #b#p"+ str(ZHEUNG_GUAN) +"##k if he had so little faith in him?! What a waste of time!)") + +sm.sendNext("I hope your next idea is better than your last. You better fill me in.") + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("Long ago, my master, #bMonk Laomo#k, researched demons. " + "He knew more about them than anyone He was the first to successfully seal the demons at the Sutra Depository.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Let's ask HIM to help us!") + +sm.setSpeakerID(WISE_CHIEF_PRIEST) +sm.setBoxChat() +sm.sendNext("We can't. He left a long time ago to train and has never returned. " + "But he did write a book about his research before he left, called #v"+ str(BOOK_OF_DEMONS) +"##b#t"+ str(BOOK_OF_DEMONS) +"##k.") + +response = sm.sendAskYesNo("Can I entrust you with the task of searching for that book, #h0#?") + +if response: + sm.sendNext("The #v"+ str(BOOK_OF_DEMONS) +"##b#t"+ str(BOOK_OF_DEMONS) +"##k must hold some clue about how to get rid of the demons. " + "Locate that book as soon as possible. The fate of the entire world is at stake!") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("Hey, #b#p"+ str(WISE_CHIEF_PRIEST) +"##k... Why didn't your teacher impart any of his knowledge on you before he left?") + + sm.setSpeakerID(WISE_CHIEF_PRIEST) + sm.setBoxChat() + sm.sendNext("That's exactly what I intend to ask him, should we and I ever meet again.") + + sm.sendNext("I've lived my entire life in #bMonk Laomo's#k shadow, but he didn't teach me even a single one of his lofty secrets.") + + sm.sendNext("But that has nothing to do with any of this. Hurry and find the #b#t"+ str(BOOK_OF_DEMONS) +"##k.") + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q62008e.py b/scripts/quest/q62008e.py new file mode 100755 index 0000000..770f79b --- /dev/null +++ b/scripts/quest/q62008e.py @@ -0,0 +1,58 @@ +# [Shaolin Temple] Funny Face + +JANITOR_MONK = 9310048 +WISE_CHIEF_PRIEST = 9310053 +ANTIDOTE = 2050000 +MINI_BRONZE_MARTIAL_ARTIST = 9480025 +BRONZE_STAFFMAN = 9480028 +SUTRA_1_2F = 701220100 +SUTRA_3_4F = 701220200 +SUTRA_5_6F = 701220300 + + +sm.removeEscapeButton() +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("Oh. Huh. You really came back, and you brought the #bAntidote#k, too.") + +sm.sendNext("Well, I am pretty thirsty. (He gulps it down.)") + +sm.sendNext("(He feels his face.)") + +sm.completeQuest(parentID) +sm.consumeItem(ANTIDOTE) +sm.giveExp(1010226) +sm.sendNext("Yup, that's my face all right. Big eyes, prominent nose. Thanks. Now, back to work.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Are you SURE that's-- I mean, you're so handsome. Yay!") + +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("Didn't you say you were looking for a #bbook#k?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Long ago, #bMonk Laomo#k wrote a book detailing all of his demon research. I'm searching for that book.") + +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("#bMonk Laomo#k? I've heard of him. No one knew more about demons that he did. Back when he was the #rChief Priest#k, a demon wouldn't dare set foot on this mountain.") + +sm.sendNext("He left to train one day and never returned. Our current #b#p"+ str(WISE_CHIEF_PRIEST) +"##k took over.") + +sm.sendNext("#bAnd then the demons came back. You know, in a way, the demons have really boosted the temple's reputation. Tons of people come here to make offerings and pray.") + +response = sm.sendAskYesNo("They say #bMonk Laomo#k had a secret library...\r\n" + "You know, I do recall seeing something strange while cleaning #r#m"+ str(SUTRA_5_6F) +"# Maybe you should investigate") + +if response: + sm.sendNext("Getting to the 6th floor might be tough. " + "Why don't you clear out " + "100 #o"+ str(MINI_BRONZE_MARTIAL_ARTIST) +"# monsters and " + "100 #o"+ str(BRONZE_STAFFMAN) +"# monsters at #m"+ str(SUTRA_1_2F) +"# to thin them out? " + "Then, #bwhen they're weakened, you can head up to #m"+ str(SUTRA_3_4F) +"#.") + sm.startQuest(62009) +else: + sm.sendSayOkay("Didn't you say you wanted that book?..") \ No newline at end of file diff --git a/scripts/quest/q62008s.py b/scripts/quest/q62008s.py new file mode 100755 index 0000000..e19f0a3 --- /dev/null +++ b/scripts/quest/q62008s.py @@ -0,0 +1,37 @@ +# [Shaolin Temple] Funny Face + +JANITOR_MONK = 9310048 +WISE_CHIEF_PRIEST = 9310053 +ANTIDOTE = 2050000 + +sm.removeEscapeButton() + +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("Shoo, shoo! You don't belong here! I'm trying to clean!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(Huh? Is that demon wearing monk robes?)") + +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("Oh, wipe that dopey expression off your face. The demons played a trick on me, okay? " + "I'm the temple janitor, a HUMAN, and they thought it'd be soooo funny to give me a demon face. " + "Now shoo, I have floors to sweep.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("The #b#p"+ str(WISE_CHIEF_PRIEST) +"##k sent me. I'm here to find a #bbook#k. But... your poor face. What can I do to help?") + +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +response = sm.sendAskYesNo("You can move and let me sweep! Oh, fine. " + "Why don't you get me some #v"+ str(ANTIDOTE) +"# #b#t"+ str(ANTIDOTE) +"##k from the General Store? Take your time, " + "and make sure you don't track mud on your way back!") + +if response: + sm.sendNext("Why are you still here? I can't sweep with you here! Go get me 1 #v"+ str(ANTIDOTE) +"# #b#t"+ str(ANTIDOTE) +"##k") + sm.startQuestNoCheck(parentID) +else: + sm.sendSayOkay("You just offered to help me, but when I ask for a #v"+ str(ANTIDOTE) +"# #b#t"+ str(ANTIDOTE) +"##k, it's too much work?") \ No newline at end of file diff --git a/scripts/quest/q62009e.py b/scripts/quest/q62009e.py new file mode 100755 index 0000000..a019ace --- /dev/null +++ b/scripts/quest/q62009e.py @@ -0,0 +1,11 @@ +# [Shaolin Temple] Cleaning House + +JANITOR_MONK = 9310048 +SUTRA_3_4F = 701220200 + +sm.removeEscapeButton() +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("You've thinned them out a bit. Hurry up to #r#m"+ str(SUTRA_3_4F) +"##k! #rUse the portal on the upper right to get there.") +sm.completeQuest(parentID) +sm.giveExp(2020453) \ No newline at end of file diff --git a/scripts/quest/q62009s.py b/scripts/quest/q62009s.py new file mode 100755 index 0000000..b1a293f --- /dev/null +++ b/scripts/quest/q62009s.py @@ -0,0 +1,40 @@ +# [Shaolin Temple] Cleaning House + +JANITOR_MONK = 9310048 +WISE_CHIEF_PRIEST = 9310053 +MINI_BRONZE_MARTIAL_ARTIST = 9480025 +BRONZE_STAFFMAN = 9480028 +SUTRA_1_2F = 701220100 +SUTRA_3_4F = 701220200 +SUTRA_5_6F = 701220300 + + +sm.removeEscapeButton() +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("Didn't you say you were looking for a #bbook#k?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Long ago, #bMonk Laomo#k wrote a book detailing all of his demon research. I'm searching for that book.") + +sm.setSpeakerID(JANITOR_MONK) +sm.setBoxChat() +sm.sendNext("#bMonk Laomo#k? I've heard of him. No one knew more about demons that he did. Back when he was the #rChief Priest#k, a demon wouldn't dare set foot on this mountain.") + +sm.sendNext("He left to train one day and never returned. Our current #b#p"+ str(WISE_CHIEF_PRIEST) +"##k took over.") + +sm.sendNext("#bAnd then the demons came back. You know, in a way, the demons have really boosted the temple's reputation. Tons of people come here to make offerings and pray.") + +response = sm.sendAskYesNo("They say #bMonk Laomo#k had a secret library...\r\n" + "You know, I do recall seeing something strange while cleaning #r#m"+ str(SUTRA_5_6F) +"# Maybe you should investigate") + +if response: + sm.sendNext("Getting to the 6th floor might be tough. " + "Why don't you clear out " + "100 #o"+ str(MINI_BRONZE_MARTIAL_ARTIST) +"# monsters and " + "100 #o"+ str(BRONZE_STAFFMAN) +"# monsters at #m"+ str(SUTRA_1_2F) +"# to thin them out? " + "Then, #bwhen they're weakened, you can head up to #m"+ str(SUTRA_3_4F) +"#.") + sm.startQuest(62009) +else: + sm.sendSayOkay("Didn't you say you wanted that book?..") \ No newline at end of file diff --git a/scripts/quest/q62010e.py b/scripts/quest/q62010e.py new file mode 100755 index 0000000..a270bb4 --- /dev/null +++ b/scripts/quest/q62010e.py @@ -0,0 +1,12 @@ +# [Shaolin Temple] Wiping Up Demons + +CHENGXIN = 9310047 +SILVER_GIANT = 9480027 +SILVER_SPEARMAN = 9480029 + +sm.removeEscapeButton() +sm.setSpeakerID(CHENGXIN) +sm.setBoxChat() +sm.sendNext("Not too shabby, stranger. Talk to me again.") +sm.completeQuest(parentID) +sm.giveExp(2020453) \ No newline at end of file diff --git a/scripts/quest/q62010s.py b/scripts/quest/q62010s.py new file mode 100755 index 0000000..95271b5 --- /dev/null +++ b/scripts/quest/q62010s.py @@ -0,0 +1,12 @@ +# [Shaolin Temple] Wiping Up Demons + +CHENGXIN = 9310047 +SILVER_GIANT = 9480027 +SILVER_SPEARMAN = 9480029 + +sm.removeEscapeButton() +sm.setSpeakerID(CHENGXIN) +sm.setBoxChat() +sm.sendNext("Ah, ha! My support unit has arrived. On the double, defeat those demons!\r\n" + "150 #r#o"+ str(SILVER_SPEARMAN) +"##k monsters and 100 #r#o"+ str(SILVER_GIANT) +"##k monsters!") +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q62011e.py b/scripts/quest/q62011e.py new file mode 100755 index 0000000..0117fd6 --- /dev/null +++ b/scripts/quest/q62011e.py @@ -0,0 +1,7 @@ +# id 62011 ([Shaolin Temple] Finding the Secret Library), field 701220300 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("(You've found the library! Now all you have to do is locate the #t4034637#.)") +sm.completeQuestNoCheck(parentID) +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62011s.py b/scripts/quest/q62011s.py new file mode 100755 index 0000000..2859d13 --- /dev/null +++ b/scripts/quest/q62011s.py @@ -0,0 +1,40 @@ +# [Shaolin Temple] Finding the Secret Library + +CHENGXIN = 9310047 +WISE_CHIEF_PRIEST = 9310053 +SUTRA_5_6F = 701220300 + +sm.removeEscapeButton() +sm.setSpeakerID(CHENGXIN) +sm.setBoxChat() +sm.sendNext("Now that the demons have quieted down, tell me who you are. What are you doing here?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(You fill him in on the details.)") + +sm.setSpeakerID(CHENGXIN) +sm.setBoxChat() +sm.sendNext("Ah, #bMonk Laomo#k... Now there was a truly great leader. A selfless soul, not an ounce of greed in him... A far cry from our current #b#p"+ str(WISE_CHIEF_PRIEST) +"##k...") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(Come to think of it, the #b#p"+ str(WISE_CHIEF_PRIEST) +"##k was dressed rather ostentatiously, for a monk. " + "The main temple is rather flamboyant, too. And who names themselves '#b#p"+ str(WISE_CHIEF_PRIEST) +"##k'?") + +sm.setSpeakerID(CHENGXIN) +sm.setBoxChat() +sm.sendNext("You and I have the same aim, friend. Stopping those demons! I'll help you find that book!") + +sm.sendNext("You can't enter #b#m"+ str(SUTRA_5_6F) +"##k looking the way you do. The demonic power is too great. Try drinking this Metamorph Potion.") + +sm.sendNext("Temporarily transform into a demon and investigate #m"+ str(SUTRA_5_6F) +"#. The potion isn't that strong, so avoid the demons' direct gaze!") + +response = sm.sendAskYesNo("Ready to go?") + +if response: + sm.sendNext("Good luck, friend.") + sm.startQuest(parentID) + sm.warpInstanceIn(701220310) +else: + sm.sendSayOkay("Let me know when you are ready to go.") \ No newline at end of file diff --git a/scripts/quest/q62013e.py b/scripts/quest/q62013e.py new file mode 100755 index 0000000..9535db4 --- /dev/null +++ b/scripts/quest/q62013e.py @@ -0,0 +1,32 @@ +# [Shaolin Temple] But Everyone Else Has Nice Shoes + +TOWN_MISCREANT = 9310580 +KID_SHOES = 4034657 + +sm.removeEscapeButton() +sm.setSpeakerID(TOWN_MISCREANT) +sm.setBoxChat() +sm.sendNext("Hey! My shoes! Thanks for giving them back, demon!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("I'm not a demon!") + +sm.setSpeakerID(TOWN_MISCREANT) +sm.setBoxChat() +sm.sendNext("But only demons steal shoes from little kids who don't eat their orange mushrooms!") + +sm.sendNext("Ma told me so!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("It's not nice to stereotype against demons. The demon who BORROWED your shoes asked me to return them. He just wanted to try them on") + +sm.setSpeakerID(TOWN_MISCREANT) +sm.setBoxChat() +sm.sendNext("Really? Did he dance in them? Because I loooove dancing in these shoes. Maybe he and I can be friends!") + +sm.consumeItem(KID_SHOES) +sm.giveExp(2020453) +sm.completeQuestNoRewards(parentID) # completeQuest didn't work for w/e reason. +sm.warp(701220350) diff --git a/scripts/quest/q62013s.py b/scripts/quest/q62013s.py new file mode 100755 index 0000000..e26ea24 --- /dev/null +++ b/scripts/quest/q62013s.py @@ -0,0 +1,31 @@ +# [Shaolin Temple] But Everyone Else Has Nice Shoes + +BLUE_DEMON = 9310577 +KID_SHOES = 4034657 +PATH_OF_STONE_3 = 701210180 + +sm.removeEscapeButton() +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("We all know that I'm the epitome of cute, but one day, I realised that colourful shoes would make me even cuter!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("So you stole some poor kid's shoes?") + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("I borrowed them. Kids don't need shoes while they're sleeping, and I was planning to return them in the morning") + +sm.sendNext("But as I was dancing around, admiring myself, I tripped and the shoes went soaring.") + +sm.sendNext("Do you think you can #rfind the #t"+ str(KID_SHOES) +"##k and return them?") + +response = sm.sendAskYesNo("Will you help me?") + +if response: + sm.sendNext("I'm sure you'll find the #b#t"+ str(KID_SHOES) +"##k at #r#m"+ str(PATH_OF_STONE_3) +"##k.") + sm.startQuest(parentID) + +else: + sm.sendSayOkay("I guess you don't want that book you were crying for..") \ No newline at end of file diff --git a/scripts/quest/q62014s.py b/scripts/quest/q62014s.py new file mode 100755 index 0000000..eca41e7 --- /dev/null +++ b/scripts/quest/q62014s.py @@ -0,0 +1,53 @@ +# [Shaolin Temple] Say My Name 1 + +BLUE_DEMON = 9310577 +selectName = ["Tyrone", "DeShawn", "Lamar"] + + +sm.removeEscapeButton() +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("You returned the shoes! And the kid wants to be friends? I've never felt cuter in my life!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("That's right, #b#p"+ str(BLUE_DEMON) +"##k. You and me are buds now, so I'll give you a #rNickname#k.") + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("What's a #rNickname#k?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("It's a name that I can use to address you. Just like my name is #r#h0##k.") + +sm.sendNext("I want YOU to have a name. That way I don't have to use your demon name, which is really just the name of your species.") + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("If it's a human thing, I'm in!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +text = "Hmm, what about I call you...\r\n" +for i in range(len(selectName)): + text += "#L"+ str(i) +"#"+ selectName[i] +"\r\n" +selection = sm.sendNext(text) + +sm.createQuestWithQRValue(62013, selectName[selection]) + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext( sm.getQRValue(62013) +", hm? I.. I like it!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("I'll call you #r"+ sm.getQRValue(62013) +" from now on, then.") + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext( "#r"+ sm.getQRValue(62013) +"#k has a nickname, #r"+ sm.getQRValue(62013) +"#k has a nickname!") + +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(1010226) \ No newline at end of file diff --git a/scripts/quest/q62015e.py b/scripts/quest/q62015e.py new file mode 100755 index 0000000..a3f593e --- /dev/null +++ b/scripts/quest/q62015e.py @@ -0,0 +1,19 @@ +# id 62015 ([Shaolin Temple] Nine-Tailed Fox's One True Love), field 701220350 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310579) # Nine-Tailed Fox +sm.sendNext("Did you deliver my letter? What did my beloved say?") +sm.setSpeakerType(4) +sm.setSpeakerID(9310579) # Nine-Tailed Fox +sm.setParam(57) +sm.sendSay(" (You can't tell her the truth without putting your eyeballs at risk, \r\nso you quickly come up with a lie.)") +sm.sendSay("He cried after reading your letter.\r\n He said the others in town suspect something, so they've been watching him non-stop.\r\n He said you'd be in danger if you approach, \r\nso you must stay far far away, for your own sake. ") +sm.setSpeakerType(3) +sm.setParam(37) +sm.sendSay("He... He really said that? Next time I see him, \r\nI'm going to... I'm going to... \r\n#rI'm going to hug him from behind!#k He cares about me so much!") +sm.setSpeakerType(4) +sm.setParam(57) +sm.sendSay(" (.........)") +sm.completeQuestNoCheck(parentID) +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62015s.py b/scripts/quest/q62015s.py new file mode 100755 index 0000000..0a7fc1f --- /dev/null +++ b/scripts/quest/q62015s.py @@ -0,0 +1,48 @@ +# [Shaolin Temple] Nine-Tailed Fox's One True Love + +NINE_TAILED_FOX = 9310579 +MOUNTAIN_PATH_2 = 701210130 + +sm.removeEscapeButton() +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("Hmph. So you helped the little one return the shoes.\r\n" + "My problem is a little more complex.") + +sm.sendNext("My request is of a delicate, sensitive nature.\r\n" + "Will you listen?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Go on. Spill your guts.") + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +response = sm.sendAskYesNo("First, you must promise not to judge me...") + +if response: + + sm.sendNext("My tale is one of woe and #rforbidden love#k. The rest of my kind would never understand but...") + + sm.sendNext("I've fallen in love with a human woodcutter. " + "We met in the woods. We fell fast and hard. " + "He said that, for me, #rhe would do absolutely anything#k.") + + sm.sendNext("I left him after our few, precious moments together, and he must be in misery. " + "Please, deliver this letter to him.") + + sm.sendNext("The humans are being ridiculous with their torches and their pitchforks. " + "I can't reach my one true love, so hurry and deliver my letter. My beloved awaits.") + + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("(Wow, so #b#p"+ str(NINE_TAILED_FOX) +"##k has a soft side. But what type of man would fall for a demon?)") + + sm.setSpeakerID(NINE_TAILED_FOX) + sm.setBoxChat() + sm.sendNext("Find my beloved woodcutter sweetie-kuns at #r#m"+ str(MOUNTAIN_PATH_2) +"##k.") + + sm.startQuest(parentID) + +else: + sm.sendSayOkay("If you are going to judge me, I won't tell my tale.") \ No newline at end of file diff --git a/scripts/quest/q62017s.py b/scripts/quest/q62017s.py new file mode 100755 index 0000000..17e0f89 --- /dev/null +++ b/scripts/quest/q62017s.py @@ -0,0 +1,53 @@ +# [Shaolin Temple] Say My Name 2 + +NINE_TAILED_FOX = 9310579 +selectName = ["Quashara", "Quivia", "Shaniqua"] + +sm.removeEscapeButton() +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("You did surprisingly well, human.\r\n" + "I guess I'll let you live.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("That's right, #b#p"+ str(NINE_TAILED_FOX) +"##k. You and me are buds now, so I'll give you a #rNickname#k.") + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("What's a #rNickname#k?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("It's a name that I can use to address you. Just like my name is #r#h0##k.") + +sm.sendNext("I want YOU to have a name. That way I don't have to use your demon name, which is really just the name of your species.") + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("If it's a human thing, I'm in!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +text = "Hmm, what about I call you...\r\n" +for i in range(len(selectName)): + text += "#L"+ str(i) +"#"+ selectName[i] +"\r\n" +selection = sm.sendNext(text) + +sm.createQuestWithQRValue(62015, selectName[selection]) + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext(sm.getQRValue(62015) +", hm? I kinda like it.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("I'll call you #r"+ sm.getQRValue(62015) +"#k from now on, then.") + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext( "Very well. #r"+ sm.getQRValue(62015) +"#k has a sophisticated ring to it") + +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(1010226) \ No newline at end of file diff --git a/scripts/quest/q62018e.py b/scripts/quest/q62018e.py new file mode 100755 index 0000000..e39c77d --- /dev/null +++ b/scripts/quest/q62018e.py @@ -0,0 +1,12 @@ +# [Shaolin Temple] Demon-iority Complex + +GOBLIN_DEMON = 9310578 +HUMAN_FACE_MASK = 4034664 + +sm.removeEscapeButton() +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("You SURE I'll learn how to tolerate humans better if I wear this? Okaaay...") +sm.completeQuest(parentID) +sm.consumeItem(HUMAN_FACE_MASK) +sm.giveExp(1515339) \ No newline at end of file diff --git a/scripts/quest/q62018s.py b/scripts/quest/q62018s.py new file mode 100755 index 0000000..ced77c0 --- /dev/null +++ b/scripts/quest/q62018s.py @@ -0,0 +1,43 @@ +# [Shaolin Temple] Demon-iority Complex + +GOBLIN_DEMON = 9310578 +DABAO = 9310034 +MAHAVIRA_HALL = 701220000 + +sm.removeEscapeButton() +sm.setBoxChat() +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Hey, #b#p"+ str(GOBLIN_DEMON) +"##k. Will it gross you out too much if I talk to you?") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("Yes. But what choice do I have? You've already helped the others...") + +sm.sendNext("The world is changing, you know? Demons and humans, working together.") + +sm.sendNext("My parents would die if they knew. But I have to adapt, if I want to survive. \r\n" + "It's just... I find humans so utterly disgusting.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("I have an Idea.") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("I'm almost afraid to ask...") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("It's about acclimation. You have to immerse yourself. Hey, I think I'm gonna get you the mask of a human face.") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +response = sm.sendAskYesNo("How is that a good idea? Haven't you heard a word I've been saying?") + +if response: + sm.flipBoxChat() + sm.flipBoxChatPlayerAsSpeaker() + sm.sendNext("You've got to live, breathe, and think human. Then you'll understand us. Trust me. I'm going to go to ask #p"+ str(DABAO) +"# at #m"+ str(MAHAVIRA_HALL) +"# to make you that mask.") + + sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/q62019e.py b/scripts/quest/q62019e.py new file mode 100755 index 0000000..97c414c --- /dev/null +++ b/scripts/quest/q62019e.py @@ -0,0 +1,24 @@ +# [Shaolin Temple] Making a Mask + +DABAO = 9310034 +HUMAN_FACE_MASK = 4034664 +GOBLIN_DEMON = 9310578 +SECRET_LIBRARY = 701220350 +SOFT_LEATHER = 4034724 + +sm.removeEscapeButton() +sm.setSpeakerID(DABAO) +sm.setBoxChat() +sm.sendNext("You got the leather! Now it's my turn.") + +sm.sendNext("All done!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(The face on the mask looks very realistic, though you have the niggling feeling it may have been extracted from a real person. " + "No matter. Bring it to #p"+ str(GOBLIN_DEMON) +"# at the #m"+ str(SECRET_LIBRARY) +"#.)") + +sm.completeQuest(parentID) +sm.consumeItem(SOFT_LEATHER, 30) +sm.giveExp(1515339) +sm.giveItem(HUMAN_FACE_MASK) diff --git a/scripts/quest/q62019s.py b/scripts/quest/q62019s.py new file mode 100755 index 0000000..1c75527 --- /dev/null +++ b/scripts/quest/q62019s.py @@ -0,0 +1,38 @@ +# [Shaolin Temple] Making a Mask + +DABAO = 9310034 + +sm.removeEscapeButton() +sm.setSpeakerID(DABAO) +sm.setBoxChat() +sm.sendNext("How can I help you today?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Do you... make masks?") + +sm.setSpeakerID(DABAO) +sm.setBoxChat() +sm.sendNext("Oh, sure. Sure. I do it all. What kind of mask do you want?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Um, a man face?") + +sm.setSpeakerID(DABAO) +sm.setBoxChat() +sm.sendNext("Come again?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Like, a mask of a man's face. It's for, um, science..") + +sm.setSpeakerID(DABAO) +sm.setBoxChat() +sm.sendNext("I could never say no to science.") + +sm.sendNext("All I need is some soft leather to make the mask. " + "Problem is, the leather was being stored iat the Sutra Depository Warehouse, and silver demons stole it all.") + +sm.sendNext("If you can bring me 30 pieces of soft leather, I'll make your mask.") +sm.startQuestNoCheck(parentID) \ No newline at end of file diff --git a/scripts/quest/q62020s.py b/scripts/quest/q62020s.py new file mode 100755 index 0000000..0ec7754 --- /dev/null +++ b/scripts/quest/q62020s.py @@ -0,0 +1,124 @@ +# [Shaolin Temple] Say My Name 3 + +GOBLIN_DEMON = 9310578 +BLUE_DEMON = 9310577 +NINE_TAILED_FOX = 9310579 +selectName = ["Aharon", "Baruch", "Binyamin"] + + +sm.removeEscapeButton() +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("Wll, I've put on the mask and noth-- Hey... What is this feeling coming over me? Humans... HUMANS ARE GREAT!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("I can't believe that worked. Anyway, #b#p"+ str(GOBLIN_DEMON) +"##k, a human sympathiser like you deserves a good #rNickname#k.") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("What's a #rNickname#k?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("It's a name that I can use to address you. Just like my name is #r#h0##k.") + +sm.sendNext("I want YOU to have a name. That way I don't have to use your demon name, which is really just the name of your species.") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("If it's a human thing, I'm in!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +text = "Hmm, what name would suit you best? I think you'd be perfect as a...\r\n" +for i in range(len(selectName)): + text += "#L"+ str(i) +"#"+ selectName[i] +"\r\n" +selection = sm.sendNext(text) + +sm.createQuestWithQRValue(62018, selectName[selection]) + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("Hey, that sounds good! "+ sm.getQRValue(62018) +" the almost-human demon. Perfect!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Cool, I'll call you #r"+ sm.getQRValue(62018) +" from now on!") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("I feel like a whole new person!") + +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.giveExp(1010226) + + +sm.warpInstanceIn(701220350) +sm.lockInGameUI(True, False) +sm.sendDelay(1000) + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("I suppose some humans are all right.") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("Oh, yes. I've learned so much about them.") + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("So, #b#h0##k. You said you wanted to check the bookshelf?\r\n" + "You're free to do so whenever you like.") + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("I love holding books and pretending to read them. It makes me look cute!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Hey, I was wondering... What are you guys doing here, anyway? In the human world, I mean.") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("My memory about it is pretty hazy... I woke up one day and found myself here.") + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("Something scooped me up from my snuggly home and dropped me here. I think I heard someone talking... A human.") + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("Demons are born of human passion and imagination.\r\n" + "Our entire world is fueled by it.") + +sm.sendNext("The fervor with which you worship your gods... " + "Even that shapes our world. but when you do evil in the name of your gods, it warps up.") + +sm.sendNext("Because of humanity's corruption, \r\n" + "OUR world has become horribly malformed.") + +sm.sendNext("The only conclusion I can draw is that a human \r\n" + "with special powers summoned us here for some evil purpose...") + +sm.setSpeakerID(GOBLIN_DEMON) +sm.setBoxChat() +sm.sendNext("But who?") + +sm.setSpeakerID(BLUE_DEMON) +sm.setBoxChat() +sm.sendNext("Maybe they'll come find us soon! We're like their babies, sorta!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("(A demon world formed by human passions? A person who can summon demons? " + "It's a lot to swallow, but the evidence is kind of undeniable. " + "Who could be responsible for all of this?") + +sm.setSpeakerID(NINE_TAILED_FOX) +sm.setBoxChat() +sm.sendNext("Anyway, go on and search the bookshelf now.") + +sm.warpInstanceOut(701220350) +sm.lockInGameUI(False) \ No newline at end of file diff --git a/scripts/quest/q62022e.py b/scripts/quest/q62022e.py new file mode 100755 index 0000000..dd940f3 --- /dev/null +++ b/scripts/quest/q62022e.py @@ -0,0 +1,29 @@ +# [Shaolin Temple] Thef Chief Priest's Disappearance... + +ZHEUNG_GUAN = 9310046 +WISE_CHIEF_PRIEST = 9310053 +ELDER_JUNG = 9310049 + +sm.removeEscapeButton() +sm.setSpeakerID(ZHEUNG_GUAN) +sm.setBoxChat() +sm.sendNext("I can't believe it! The #p"+ str(WISE_CHIEF_PRIEST) +", who I trusted and followed, was the one responsible for all the demons? I feel like such an idiot!") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("No wonder he didn't help fine-tune your concoction") + +sm.setSpeakerID(ZHEUNG_GUAN) +sm.setBoxChat() +sm.sendNext("We wouldn't have figured this out without your help. Thanks I'll handle the rest, with my new and improved Demon B Gone.") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("Yeah, good luck with that.") + +sm.setSpeakerID(ZHEUNG_GUAN) +sm.setBoxChat() +sm.sendNext("By the way, #p"+ str(ELDER_JUNG) +"# is taking charge of the temple for now. He wants to talk to you.") +sm.completeQuest(parentID) +sm.completeQuestNoRewards(62037) +sm.giveExp(2020453) \ No newline at end of file diff --git a/scripts/quest/q62022s.py b/scripts/quest/q62022s.py new file mode 100755 index 0000000..45f68ad --- /dev/null +++ b/scripts/quest/q62022s.py @@ -0,0 +1,6 @@ +# id 62022 ([Shaolin Temple] The Chief Priest's Disappearance...), field 701220300 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("Where could the #p9310053# have gone with the Book of Demons and his renewed youth? Maybe #p9310046# at #m701220000# can shed some light on this.") +sm.startQuest(parentID) diff --git a/scripts/quest/q62023s.py b/scripts/quest/q62023s.py new file mode 100755 index 0000000..2d0e32d --- /dev/null +++ b/scripts/quest/q62023s.py @@ -0,0 +1,18 @@ +# id 62023 (Demon Orb Introduction), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext(".....") +res = sm.sendAskYesNo("You! Stranger! Got a moment?") +sm.sendNext("I've been watching you. I think you'd be the perfect person to help me with my top secret research.") +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.setParam(57) +sm.sendSay("Research? What kind of research?") +sm.setSpeakerType(3) +sm.setParam(37) +sm.sendSay("I'm studying demons. With your combat prowess, I think you can get me the #bdemon orbs#k that I need.") +sm.sendSay("Speak to me again if you're interested. I promise to make it worth your while.") +sm.completeQuestNoCheck(parentID) +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62024e.py b/scripts/quest/q62024e.py new file mode 100755 index 0000000..8486917 --- /dev/null +++ b/scripts/quest/q62024e.py @@ -0,0 +1,11 @@ +# id 62024 (Collecting the White Tiger Swordsman Demon Orb), field 701210150 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62025e.py b/scripts/quest/q62025e.py new file mode 100755 index 0000000..7d473d2 --- /dev/null +++ b/scripts/quest/q62025e.py @@ -0,0 +1,11 @@ +# id 62025 (Collecting the Eagle Swordsman Demon Orb), field 701210150 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62026e.py b/scripts/quest/q62026e.py new file mode 100755 index 0000000..f457d2a --- /dev/null +++ b/scripts/quest/q62026e.py @@ -0,0 +1,11 @@ +# id 62026 (Collecting the Male Thief Demon Orb), field 701210150 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62027e.py b/scripts/quest/q62027e.py new file mode 100755 index 0000000..d0dafc7 --- /dev/null +++ b/scripts/quest/q62027e.py @@ -0,0 +1,11 @@ +# id 62027 (Collecting the Censer Demon Orb), field 701210150 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62028e.py b/scripts/quest/q62028e.py new file mode 100755 index 0000000..d681a5e --- /dev/null +++ b/scripts/quest/q62028e.py @@ -0,0 +1,11 @@ +# id 62028 (Collecting the Mini Gold Martial Artist Demon Orb), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62029e.py b/scripts/quest/q62029e.py new file mode 100755 index 0000000..d005b05 --- /dev/null +++ b/scripts/quest/q62029e.py @@ -0,0 +1,11 @@ +# id 62029 (Collecting the Golden Giant Demon Orb), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62030e.py b/scripts/quest/q62030e.py new file mode 100755 index 0000000..8be5347 --- /dev/null +++ b/scripts/quest/q62030e.py @@ -0,0 +1,11 @@ +# id 62030 (Collecting the Silver Spearman Demon Orb), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62031e.py b/scripts/quest/q62031e.py new file mode 100755 index 0000000..44af157 --- /dev/null +++ b/scripts/quest/q62031e.py @@ -0,0 +1,11 @@ +# id 62031 (Collecting the Haunted Graystone Demon Orb), field 701210150 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62032e.py b/scripts/quest/q62032e.py new file mode 100755 index 0000000..712789f --- /dev/null +++ b/scripts/quest/q62032e.py @@ -0,0 +1,11 @@ +# id 62032 (Collecting the Red Zhanshi Spirit Demon Orb), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62033e.py b/scripts/quest/q62033e.py new file mode 100755 index 0000000..b9a8f1c --- /dev/null +++ b/scripts/quest/q62033e.py @@ -0,0 +1,11 @@ +# id 62033 (Collecting the Haunted Helmet Demon Orb), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62034e.py b/scripts/quest/q62034e.py new file mode 100755 index 0000000..f0e8d16 --- /dev/null +++ b/scripts/quest/q62034e.py @@ -0,0 +1,11 @@ +# id 62034 (Collecting the Chief Priest Demon Orb), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("Hey. You have the orb I asked for?") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Oh yeah, this'll help with my research. Come to me, demon orb.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62035s.py b/scripts/quest/q62035s.py new file mode 100755 index 0000000..72367fd --- /dev/null +++ b/scripts/quest/q62035s.py @@ -0,0 +1,11 @@ +# id 62035 (For the Sake of Demon Science), field 701220000 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9310597) # Zarak +sm.sendNext("The orbs you've gathered have proven invaluable. Here, take this. You've earned it!") +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(4) +sm.setSpeakerID(9310597) # Zarak +sm.sendSay("Perhaps we'll meet again, if it's meant to be. Farewell!") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) diff --git a/scripts/quest/q62039s.py b/scripts/quest/q62039s.py new file mode 100755 index 0000000..6cf1b84 --- /dev/null +++ b/scripts/quest/q62039s.py @@ -0,0 +1,30 @@ +# [Shaolin Temple] For Shaolin Temple + +ZHEUNG_GUAN = 9310046 +WISE_CHIEF_PRIEST = 9310053 +ELDER_JUNG = 9310049 +HAIFENG_FASHI = 9310051 + +sm.removeEscapeButton() +sm.setSpeakerID(ELDER_JUNG) +sm.setBoxChat() +sm.sendNext("The mountain weeps this day. My old friend has become a demon... What pain must he have been hiding to have come to this?") + +sm.flipBoxChat() +sm.flipBoxChatPlayerAsSpeaker() +sm.sendNext("It goes to show... A tiny grain of greed can snowball into something huge and monstrous") + +sm.removeEscapeButton() +sm.setSpeakerID(ELDER_JUNG) +sm.setBoxChat() +sm.sendNext("My friend's body has disappeared, but his spirit remains. " + "It must be exorcised, over and over, until the temple is clean. " + "You can encounter by talking to #p"+ str(HAIFENG_FASHI) +"# at the Sutra Depository entrance. " + "We will reward you as best we can.") + +sm.sendNext("I will remain here, working humbly and tirelessly to restore Shaolin Temple to its former purity. You are welcome at any time.") +sm.startQuest(parentID) +sm.completeQuest(parentID) +sm.completeQuestNoRewards(62044) +sm.giveExp(2525566) +sm.giveItem(1142912) # Shaolin Savior (Medal) \ No newline at end of file diff --git a/scripts/quest/q62044s.py b/scripts/quest/q62044s.py new file mode 100755 index 0000000..fc51253 --- /dev/null +++ b/scripts/quest/q62044s.py @@ -0,0 +1,2 @@ +# id 62044 (Shaolin Savior), field 701220000 +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q62395e.py b/scripts/quest/q62395e.py new file mode 100755 index 0000000..08af4d9 --- /dev/null +++ b/scripts/quest/q62395e.py @@ -0,0 +1 @@ +sm.completeQuestNoCheck(parentID) \ No newline at end of file diff --git a/scripts/quest/q62395s.py b/scripts/quest/q62395s.py new file mode 100755 index 0000000..08af4d9 --- /dev/null +++ b/scripts/quest/q62395s.py @@ -0,0 +1 @@ +sm.completeQuestNoCheck(parentID) \ No newline at end of file diff --git a/scripts/quest/q63360s.py b/scripts/quest/q63360s.py new file mode 100755 index 0000000..1f47085 --- /dev/null +++ b/scripts/quest/q63360s.py @@ -0,0 +1,9 @@ +# id 63360 ([플레이] 접속시간기록), field 402000615 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(3001500) # Ark +sm.sendSay("#face5#(I've got to prepare myself for battle. Based on my current state, I've got some options.)") +sm.openUI(2) +sm.sendSay("#face0#(Whatever happened to me must have weakened my overall stats, but I could probably strengthen myself by leveling up.)") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q63370s.py b/scripts/quest/q63370s.py new file mode 100755 index 0000000..5c97281 --- /dev/null +++ b/scripts/quest/q63370s.py @@ -0,0 +1,66 @@ +# Created by MechAviv +# Quest ID :: 63370 +# Not coded yet + +sm.showNpcSpecialActionByTemplateId(2159427, "die", 0) +sm.sendDelay(120) + + +sm.showNpcSpecialActionByTemplateId(2159427, "die", 0) +sm.sendDelay(1500) + + +sm.sendDelay(120) + + +sm.setSpeakerID(2159386) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendNext("They just keep coming!") + + +sm.setSpeakerID(2159382) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendSay("We heard there was a hidden lab here, but this is something big!") + + +sm.setSpeakerID(2159385) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendSay("With defenses like these, they must be hiding something big. And I'm going to find out what.") + + +sm.setSpeakerID(2159382) +sm.setSpeakerType(3) +sm.removeEscapeButton() +sm.sendSay("You're cool as can be, aren't you Belle? Nothing phases you.") + + +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/2", 900, 0, -120, 0, 2159382, False, 0) +sm.sendDelay(900) + + +sm.showNpcSpecialActionByTemplateId(2159382, "summon", 0) +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg2/12", 1200, 0, -120, 0, 2159382, False, 0) +sm.showNpcSpecialActionByTemplateId(2159382, "catched", 0) +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg1/1", 900, 0, -120, 0, 2159386, False, 0) +sm.moveNpcByTemplateId(2159386, False, 30, 100) +sm.sendDelay(2160) + + +sm.moveNpcByTemplateId(2159386, True, 2, 100) +sm.showNpcSpecialActionByTemplateId(2159383, "summon", 0) +sm.hideUser(False) +sm.forcedInput(2) +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg2/13", 900, 0, -120, 0, 2159385, False, 0) +sm.sendDelay(300) + + +sm.showEffect("Effect/Direction12.img/effect/tuto/BalloonMsg2/13", 900, 0, -120, 0, 2159385, False, 0) +sm.sendDelay(900) + + +sm.sendSessionValue("bell", 2159385) +sm.sendSessionValue("hen", 2159386) +sm.sendSessionValue("sig", 2159383) \ No newline at end of file diff --git a/scripts/quest/q64010s.py b/scripts/quest/q64010s.py new file mode 100755 index 0000000..e49a294 --- /dev/null +++ b/scripts/quest/q64010s.py @@ -0,0 +1,68 @@ +# id 64010 ([MONAD: The First Omen] An Old Woman's Letter), field 993017200 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +res = sm.sendAskAccept("#b...A letter? ") +sm.changeBGM("BgmPL2/FallenThings", 0, 0) +sm.lockInGameUI(True, False) +sm.blind(True, 255, 0, 0, 0, 2000) +sm.sendDelay(2000) +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/part1_0/op0","0","part1Op01") +sm.sendDelay(500) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/1", 128) +sm.sendDelay(5924) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#'If you are reading this, you are my last hope in these dark times.", 50, 5424, 7, 0, -50, 1, 4, 1, 300, 300) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/2", 128) +sm.sendDelay(7820) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#My granddaughter and I lived in the deep forest of Abrup Basin,\r\n beyond the El Nath Mountains.", 50, 7320, 7, 0, -50, 1, 4, 1, 300, 300) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/3", 128) +sm.sendDelay(4268) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#This may be a land of bitter winds and icy snow,", 50, 3768, 7, 0, -50, 1, 4, 1, 300, 300) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/4", 128) +sm.sendDelay(7064) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#but until recently the blessings of our ancestors made it bearable.", 50, 5064, 7, 0, -50, 1, 4, 1, 300, 300) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/5", 128) +sm.sendDelay(4888) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#All that changed when people began disappearing from the valley.", 50, 3888, 7, 0, -50, 1, 4, 1, 300, 300) +sm.offSpineScreen("part1Op01", 0, "", 0) +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/part1_1/op1","0","part1Op02") +sm.sendDelay(1000) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/6", 128) +sm.sendDelay(8000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Soon after, the creatures of the forest grew strange and vicious.", 50, 5392, 7, 0, -50, 1, 4, 1, 300, 300) +sm.offSpineScreen("part1Op02", 0, "", 0) +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/part1_2/op2","0","part1Op03") +sm.sendDelay(2000) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/7", 128) +sm.sendDelay(8000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#My granddaughter was among those who vanished. \r\nI don't know what's become of her.", 50, 6472, 7, 0, -50, 1, 4, 1, 300, 300) +sm.offSpineScreen("part1Op03", 0, "", 0) +sm.spineScreen(False, False, True, 0, "Map/EffectPL.img/MONAD1/spine/part1_3/op3","0","part1Op04") +sm.sendDelay(1000) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/8", 128) +sm.sendDelay(5500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#The people of the valley have turned their backs on me and on each other,", 50, 5008, 7, 0, -50, 1, 4, 1, 300, 300) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/9", 128) +sm.sendDelay(5500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#consumed by their own fears and losses.", 50, 4168, 7, 0, -50, 1, 4, 1, 300, 300) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/10", 128) +sm.sendDelay(5500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I know something is coming. \r\nA terrible force far greater than the challenges we face now.", 50, 7240, 7, 0, -50, 1, 4, 1, 300, 300) +sm.sendDelay(5000) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/11", 128) +sm.sendDelay(7500) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#I send this message seeking a hero that will come to our aid,", 50, 5248, 7, 0, -50, 1, 4, 1, 300, 300) +sm.playSound("Sound/VoicePL.img/MONAD1_P1/12", 128) +sm.sendDelay(8000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#though I hold little hope for our future now.'", 50, 4456, 7, 0, -50, 1, 4, 1, 300, 300) +sm.offSpineScreen("part1Op04", 0, "", 0) +sm.sendDelay(500) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(1200) +sm.blind(False, 0, 0, 0, 0, 1000) +sm.sendDelay(1400) +sm.lockInGameUI(False, True) +res = sm.sendNext("#b(Something seems off...)\r\n#L0#The situation sounds grim! I should start my journey from El Nath.#l\r\n#L1#I need to get on this as soon as possible, but I have a few things to finish up first...#l") +sm.startQuest(64154) +sm.startQuest(parentID) +sm.warp(867200100) diff --git a/scripts/quest/q64018e.py b/scripts/quest/q64018e.py new file mode 100755 index 0000000..aee4c3e --- /dev/null +++ b/scripts/quest/q64018e.py @@ -0,0 +1,12 @@ +# id 64018 ([MONAD: The First Omen] Fallen), field 867200400 +sm.setMapTaggedObjectVisible("guide136", False, 0, 0) +sm.setMapTaggedObjectVisible("guide137", False, 0, 0) +sm.setMapTaggedObjectVisible("guide135", False, 0, 0) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Daughter... My daughter...") +sm.sendSay("Thank you... Sniff...") +sm.completeQuestNoCheck(parentID) +sm.warp(867200403) diff --git a/scripts/quest/q64021e.py b/scripts/quest/q64021e.py new file mode 100755 index 0000000..047148b --- /dev/null +++ b/scripts/quest/q64021e.py @@ -0,0 +1,31 @@ +# id 64021 ([MONAD: The First Omen] Town Reconstruction), field 867200400 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Ah, you're here! ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#How did you get here before us? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Hah, since there was nowhere to lay him down, I brought him here. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1##h0#, thanks for working so hard out there in the cold. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#What about me?! ") +sm.setParam(57) +sm.sendSay("#bNot at all. ") +sm.sendSay("#bPeytour, take the wood. ") +sm.completeQuestNoCheck(parentID) +sm.startQuest(64023) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#So! Shall we start? ") +sm.sendSay("#face0#Ah, right. #h0#, can I ask you for one more favor? ") +sm.sendSay("#face0#I asked Slaka to make some rope, but he hasn't gotten back to me. ") +sm.sendSay("#face0#Can you get the rope from him for me? ") +sm.setParam(57) +sm.sendSay("#bOf course. ") +sm.setParam(37) +sm.sendSay("#face0#He should be at the entrance of town. He'll be the sour-looking one, so you should have no trouble finding him.") +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q64025e.py b/scripts/quest/q64025e.py new file mode 100755 index 0000000..538d5f9 --- /dev/null +++ b/scripts/quest/q64025e.py @@ -0,0 +1,22 @@ +# id 64025 ([MONAD: The First Omen] Evacuation Prep), field 867200400 +sm.completeQuestNoCheck(parentID) +sm.showNpcSpecialActionByTemplateId(9400588, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400587, "summon", 0) +sm.showNpcSpecialActionByTemplateId(9400616, "summon", 0) +sm.startQuest(64160) +sm.startQuest(64166) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Ah, perfect timing! ") +sm.sendSay("#face0#With the snow cleared away, this cart looks better than I remember. Maybe it won't need so much work... ") +sm.sendSay("#face0#While I'm doing this you should grab whatever you've got left in town. Gold, jewels, priceless works of art... ") +sm.setParam(57) +sm.sendSay("#b...? ") +sm.setParam(37) +sm.sendSay("#face0#...That was a joke. If you can, I'd just like you to check and see how preparations are going. ") +sm.setParam(57) +sm.sendSay("#bAh. Not a problem. ") +sm.setParam(37) +sm.sendSay("#face0#Thanks. I'll see you in a bit.") diff --git a/scripts/quest/q64025s.py b/scripts/quest/q64025s.py new file mode 100755 index 0000000..cb0e270 --- /dev/null +++ b/scripts/quest/q64025s.py @@ -0,0 +1,65 @@ +# id 64025 ([MONAD: The First Omen] Evacuation Prep), field 867200400 +sm.lockInGameUI(True, False) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "...Of course I want to save everyone. \r\nBut if the risk is that great...", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "We have to find a way! \r\nHow can a chief say such things?!", 2000, 1, 0, 0, 0, 4, 9400589, 4878499) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "...", 2000, 1, 0, 0, 0, 4, 9400587, 4878499) +sm.sendDelay(5000) +sm.speechBalloon(True, 0, 0, "Don't bring this up in front of the others. Ever.", 2000, 1, 0, 0, 0, 4, 9400589, 4878499) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Ah, #h0#. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.setParam(57) +sm.sendSay("#bWhat is it? Is something wrong? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Ah... No, we were just... discussing how to carry the injured. ") +sm.sendSay("#face0#I'm sure you've seen, but all of our wagons in town were destroyed in the attack. ") +sm.setParam(57) +sm.sendSay("#bHmm... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#What about the wagon outside of town? It was probably missed in the attack and shouldn't be hard to patch up. ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#The wagon Aruhi used to move leather with? It's too small, even for our belongings. ") +sm.setParam(57) +sm.sendSay("#bCould we modify it while making repairs? You know, add some parts for the injured to ride on. ") +sm.setParam(37) +sm.sendSay("#face0#As long as we can get the wood, it should be doable. Seems like our best plan at the moment. ") +sm.setParam(57) +sm.sendSay("#bI'll take care of the wood. ") +sm.setParam(37) +sm.sendSay("#face0#Oh! That would be terrific. ") +sm.setParam(57) +sm.sendSay("#bOf course. ") +sm.setParam(37) +sm.sendSay("#face0#Do you remember the mountain that we just came back from? ") +sm.sendSay("#face0#I think 50 more pieces should be enough. I'm sorry to work you so hard, #h0#. ") +sm.setParam(57) +sm.sendSay("#bThink nothing of it. I'll be back in a jiffy.") +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(True, 100) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0##h0#!") +sm.sendDelay(500) +sm.sendNext("#face0#Thank you.") +sm.setParam(57) +sm.sendSay("#bYou're welcome.") +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.forcedMove(True, 300) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.startQuest(parentID) +sm.warp(867200440) diff --git a/scripts/quest/q64026e.py b/scripts/quest/q64026e.py new file mode 100755 index 0000000..db55882 --- /dev/null +++ b/scripts/quest/q64026e.py @@ -0,0 +1,32 @@ +# id 64026 ([MONAD: The First Omen] Ullan's Pets), field 867200480 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bUllan, are you okay? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Waaah... Dad's so stupid... He doesn't understand me, and gets so mad about it! ") +sm.sendSay("Pete and Elle... I met them when I was 10, the first time I went out with the hunters. They lost their mother to werewolves and were hiding between the rocks... ") +sm.sendSay("Of course, Dad was against it. He said Shrelephants need to live in the wild... But Mom sided with me, so we kept them. Mom taught me how to feed Pete and Elle milk, since they were still babies, and also named them with me... ") +sm.sendSay("I've already lost Mom... If I lose Pete and Elle... I... Sniff... ") +sm.setParam(57) +sm.sendSay("#bIt's okay, Ullan. Don't cry. We'll find them together. ") +sm.setParam(37) +sm.sendSay("Waaah... ") +sm.sendSay("...No. Honestly, I know Dad is right. We gotta make sure everyone gets out of the village, and that means lots of kids and hurt people need us. Pete and Elle are smart... Sniff... I'm sure they'll catch up... ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("(She's trying hard to control herself.) ") +sm.sendSay("...Sigh. I'm okay now. ") +sm.sendSay("Let's hurry back to town and help the others. ") +sm.startQuest(64161) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400588, False, 50, 30) +sm.sendDelay(5000) +sm.flipNpcByTemplateId(9400588, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400588, True, 1000, 50) +sm.completeQuestNoCheck(parentID) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q64026s.py b/scripts/quest/q64026s.py new file mode 100755 index 0000000..5313bad --- /dev/null +++ b/scripts/quest/q64026s.py @@ -0,0 +1,42 @@ +# id 64026 ([MONAD: The First Omen] Ullan's Pets), field 867200400 +sm.createQuestWithQRValue(parentID, "chk1=0") +sm.createQuestWithQRValue(parentID, "chk1=0;chk2=0") +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bUllan? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Ah, #h0#! ") +sm.setParam(57) +sm.sendSay("#bAre you looking for something? #k") +sm.setParam(37) +sm.sendSay("Yes! Pete and Elle haven't returned yet. I can't leave them behind... ") +sm.setParam(57) +sm.sendSay("#bPete? Elle? ") +sm.setParam(37) +sm.sendSay("Yes! The little Shrelephants you saved before. ") +sm.setParam(57) +sm.sendSay("#bOh right, one had the ribbon... Wait, you still haven't found them? ") +sm.setParam(37) +sm.sendSay("No... Sniff... ") +sm.setParam(57) +res = sm.sendNext("#b(There should be some time before the caravan is ready.)\r\n#L0# 'We'll look together.' #l\r\n#L1# 'I'll check on the others.'#l") +sm.setParam(37) +sm.sendNext("Really?! Ah... but if Dad finds out, I'll get in trouble for bothering you with this... ") +sm.setParam(57) +sm.sendSay("#bBy Dad, you mean Kan? Don't worry, I won't tell Chief Kan. ") +sm.setParam(37) +sm.sendSay("You made a promise! ") +res = sm.sendNext("In that case, do you think you could go to just the outskirts of the town there with me...? #b\r\n#L0# Of course.#l\r\n#L1# That may be a bit difficult.#l") +sm.sendNext("Yay! Then follow me!") +sm.startQuest(parentID) +sm.lockInGameUI(True, False) +sm.moveNpcByTemplateId(9400588, False, 500, 200) +sm.sendDelay(2000) +sm.forcedMove(False, 500) +sm.sendDelay(3000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867200480) diff --git a/scripts/quest/q64027s.py b/scripts/quest/q64027s.py new file mode 100755 index 0000000..8ac3415 --- /dev/null +++ b/scripts/quest/q64027s.py @@ -0,0 +1,49 @@ +# id 64027 ([MONAD: The First Omen] Decisions, Decisions), field 867200400 +sm.lockInGameUI(True, False) +sm.sendDelay(250) +sm.sendDelay(250) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 0, 0, 0, 0, 141098, 0, 0) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 0, "Geez, how can he just decide something like that himself? \r\nAnd how am I just hearing about it now?", 3000, 1, 0, 0, 0, 4, 9400629, 4878499) +sm.showEffect("Effect/OnUserEff.img/emotion/shade", 0, 0, 0, 0, 141102, 0, 0) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 0, "It's not just Kan making decisions, you know.\r\nAnd what else could they have done?", 3000, 1, 0, 0, 0, 4, 9400617, 4878499) +sm.sendDelay(3500) +sm.speechBalloon(True, 0, 0, "I'm not just talking about this time! \r\nIt feels like he's always pushing us around like this.", 3000, 1, 0, 0, 0, 4, 9400629, 4878499) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 141102, 0, 0) +sm.sendDelay(2500) +sm.speechBalloon(True, 0, 0, "Well... Kan has always been a decisive leader.", 2000, 1, 0, 0, 0, 4, 9400617, 4878499) +sm.showEffect("Effect/OnUserEff.img/emotion/angry", 0, 0, 0, 0, 141098, 0, 0) +sm.sendDelay(3000) +sm.speechBalloon(True, 0, 0, "There's a difference between being decisive and being a dictator, though.", 3000, 1, 0, 0, 0, 4, 9400629, 4878499) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAre we all set to move out? I'm wondering if there's anything more I can do to help. ") +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 141098, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/noSpeak", 2000, 0, 0, 0, 141102, 0, 0) +sm.sendDelay(2000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendNext("I am... There is not much for me to pack... As you can see... ") +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendSay("Tsk, what is Kan doing? Making you run around like this... ") +sm.setParam(57) +sm.sendSay("#bChief Kan is preparing a wagon to carry the injured. ") +sm.setParam(37) +sm.sendSay("I'm sure Peytour is preparing the wagon, not Kan. ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 141102, 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendSay("Cut it out. He's still our chief. ") +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendSay("...For how long, do you think? ") +sm.setParam(57) +sm.sendSay("#b(Seems like a lot of people have issues with Chief Kan...) ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendSay("There is nothing we need help with. You can go check on the other villagers.") +sm.completeQuestNoCheck(parentID) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q64028s.py b/scripts/quest/q64028s.py new file mode 100755 index 0000000..a0a1431 --- /dev/null +++ b/scripts/quest/q64028s.py @@ -0,0 +1,57 @@ +# id 64028 ([MONAD: The First Omen] Role of a Chief), field 867200400 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Why are you working on your house? We have no time to waste! ") +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendSay("Didn't you say we'd be coming back...? That's why... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#You can make repairs when you return. Right now, we have to leave before the snowstorm reaches us! ") +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotion/shade", 2000, 0, 0, 0, 17104721, 0, 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendNext("But I have nothing to pack... And no family to tend to. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Then help the others prepare. We have to work together. ") +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendSay("Chief Kan... I don't want to leave.") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#There are no exceptions. All Kaptafel villagers must evacuate to the town across the river. Every single one. ") +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendSay("I'm not saying I will stay. I want to explain... I don't agree with your decision, Chief Kan, but I will comply.") +sm.sendSay("It pains me to do this, to abandon my home. So I thought, if I fixed it up a little, that would help me cope with the loss. But now you're saying I can't even do that... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#It cannot be helped. I can't risk others following your example and wasting time. If you don't want to help, rest up for the journey ahead. ") +sm.setInnerOverrideSpeakerTemplateID(9400617) # Resident +sm.sendSay("Do you really have to take it so far? ") +sm.sendSay("...I had no idea you were so cold. ") +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400616, False) +sm.moveNpcByTemplateId(9400616, False, 100, 100) +sm.sendDelay(2000) +sm.sendDelay(1000) +sm.setParam(57) +sm.sendNext("#bChief Kan. ") +sm.flipNpcByTemplateId(9400587, True) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face1##h0#... ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.setParam(37) +sm.sendSay("#face1#I know what you're thinking. You think I am too harsh. ") +sm.sendSay("#face1#But I don't have a choice. I'm responsible for these people. For everyone. If even one ignores my orders, everything falls apart. ") +sm.sendSay("#face1#Do not mind me... I'm just doing what I can as chief of this poor town. ") +sm.setParam(57) +sm.sendSay("#bChief Kan, this has to hurt you too, right? ") +sm.setParam(37) +sm.sendSay("#face1#...There is no time for me to feel. ") +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400587, False, 100, 50) +sm.sendDelay(300) +sm.completeQuestNoCheck(parentID) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q64029e.py b/scripts/quest/q64029e.py new file mode 100755 index 0000000..b929768 --- /dev/null +++ b/scripts/quest/q64029e.py @@ -0,0 +1,11 @@ +# id 64029 ([MONAD: The First Omen] Essentials), field 867200400 +sm.setMapTaggedObjectVisible("guide136", False, 0, 0) +sm.setMapTaggedObjectVisible("guide137", False, 0, 0) +sm.setMapTaggedObjectVisible("guide135", False, 0, 0) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(This was burnt to cinders. No way anyone's eating it now.) ") +sm.sendSay("#b(Might need to think of another way to get food.) ") +sm.sendSay("#b(Time to talk to Peytour.) ") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64029s.py b/scripts/quest/q64029s.py new file mode 100755 index 0000000..1ccafd2 --- /dev/null +++ b/scripts/quest/q64029s.py @@ -0,0 +1,21 @@ +# id 64029 ([MONAD: The First Omen] Essentials), field 867200400 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bShulla, what are you looking for this time? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("... ") +sm.sendSay("The chief was right. I can't let myself be consumed by despair. Not now. ") +sm.sendSay("... ") +sm.sendSay("It's a long way to the next village, you know. Almost a full day's walk. ") +sm.sendSay("The weak and wounded are going to have a tough time with it. So I want to prepare some food for the long journey. ") +sm.setParam(57) +sm.sendSay("#b(Probably a good idea to help Shulla look for food.) ") +sm.startQuest(parentID) +sm.setMapTaggedObjectVisible("guide136", True, 0, 0) +sm.setMapTaggedObjectVisible("guide137", True, 0, 0) +sm.setMapTaggedObjectVisible("guide135", True, 0, 0) +sm.createQuestWithQRValue(49000, "count=0;Quest=0;day=152843;QET=20190622181711;state=2") +sm.createQuestWithQRValue(49000, "count=0;Quest=0;day=152843;QET=20190622181711;state=1") +sm.createQuestWithQRValue(49000, "count=0;Quest=0;day=152843;QET=20190622191713;state=1") diff --git a/scripts/quest/q64030e.py b/scripts/quest/q64030e.py new file mode 100755 index 0000000..8484c9f --- /dev/null +++ b/scripts/quest/q64030e.py @@ -0,0 +1,8 @@ +# id 64030 ([MONAD: The First Omen] Food Shortage), field 867200460 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400590) # Slaka +sm.sendNext("#face0#There! That's it! Hunting over, let's go!") +sm.completeQuestNoCheck(parentID) +sm.warp(867200407) diff --git a/scripts/quest/q64036s.py b/scripts/quest/q64036s.py new file mode 100755 index 0000000..a0e0a7d --- /dev/null +++ b/scripts/quest/q64036s.py @@ -0,0 +1,48 @@ +# id 64036 ([MONAD: The First Omen] Leader of the Dispatch), field 867200800 +sm.lockInGameUI(True, False) +sm.startQuest(parentID) +sm.moveNpcByTemplateId(9400581, True, 50, 50) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0##h0#... ") +sm.setParam(57) +sm.sendSay("#bYes? ") +sm.setParam(37) +sm.sendSay("#face0#I know that you are a capable and brave warrior. But you lack the experience needed to command. ") +sm.sendSay("#face0#It's not your fault, of course. You just need a trusted advisor, just as Peytour is to Chief Kan. ") +sm.sendSay("#face0#Now, then... Do you really think it wise to spend time resting before we move out? ") +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("#bI'm aware that the snowstorm is approaching, and also that we are vulnerable to monsters. There are certainly risks. ") +sm.sendSay("#bBut as Alika said, if we push on without rest, there are those who will not be able to keep up. We're sure to lose people. ") +sm.setParam(37) +sm.sendSay("#face1#You're allowing your emotions to cloud your judgment. The correct decision is clearly to push onward. ") +sm.sendSay("#face1#You want to give people time to think, when they're already tired and disappointed? That can only lead to further despair. ") +sm.sendSay("#face1#Give them a goal. Push them to keep moving forward. If they're too busy to think, they're too busy to complain. ") +sm.setParam(57) +sm.sendSay("#bThat may work for trained knights, but these are ordinary people. ") +sm.sendDelay(2000) +sm.setParam(37) +sm.sendNext("#face0#Before I became a knight, I was a wandering mercenary for years. Just like you. ") +sm.sendSay("#face0#I've spent more of my life with the commoners than with trained knights. I know how they think, and what they're capable of. Do not dismiss the wisdom I've gained. ") +sm.sendSay("#face0#You will soon see that your decision was wrong. I only hope you'll have the chance to recover from it. ") +sm.setParam(57) +sm.sendSay("#b...Thank you for the advice. ") +sm.setParam(37) +sm.sendSay("#face0#Remember well who gives you the advice and counsel you need. ") +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400581, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400581, False, 70, 100) +sm.sendDelay(2500) +sm.flipNpcByTemplateId(9400581, True) +sm.sendDelay(500) +sm.sendNext("#face0#Ah, and just as a reminder... if the pressures of leadership are too much for you, I'd be happy to take over at any time. ") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400581, False) +sm.sendDelay(250) +sm.sendDelay(1500) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64037s.py b/scripts/quest/q64037s.py new file mode 100755 index 0000000..8a02bcd --- /dev/null +++ b/scripts/quest/q64037s.py @@ -0,0 +1,8 @@ +# id 64037 ([MONAD: The First Omen] Dinner Preparations), field 867200800 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Vice Captain Butler makes a strong argument.) ") +sm.sendSay("#b(But I chose to rest. I chose to make this an opportunity to recover, rather than despair.) ") +sm.sendSay("#b(It might be nice to find branches for a fire, and some meat to eat.) ") +sm.warp(867200802) diff --git a/scripts/quest/q64044e.py b/scripts/quest/q64044e.py new file mode 100755 index 0000000..09ef6f7 --- /dev/null +++ b/scripts/quest/q64044e.py @@ -0,0 +1,44 @@ +# id 64044 ([MONAD: The First Omen] Proving Your Worth), field 867201000 +sm.lockInGameUI(True, False) +sm.completeQuestNoCheck(parentID) +sm.startQuest(64045) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, False, 110, 50) +sm.sendDelay(2000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#Here, we brought Hellfang meat. This should last quite a while if you slice it thin and store it. ") +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/open", 128) +sm.sendDelay(250) +sm.spawnNpc(9400597, 858, -45) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Eh? Hellfang meat? ") +sm.sendSay("#face0#Surely you don't expect us to eat this tough, tasteless meat, right? ") +sm.sendSay("#face0#Ahh! No, of course not. This is your food. Providing for yourself, as expected. Good, good. ") +sm.sendSay("#face0#Since we're on the topic, though... how about bringing back something for the rest of us to eat?") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400596) # Snowfield Archer +sm.sendSay("... ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#Understood. What of Shrelephant meat? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Well, that'd be a sight better than Hellfang meat. ") +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/close", 128) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.warp(867201130) diff --git a/scripts/quest/q64045e.py b/scripts/quest/q64045e.py new file mode 100755 index 0000000..59ed289 --- /dev/null +++ b/scripts/quest/q64045e.py @@ -0,0 +1,92 @@ +# id 64045 ([MONAD: The First Omen] High Quality Meat), field 867201000 +sm.lockInGameUI(True, False) +sm.completeQuestNoCheck(parentID) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, False, 110, 50) +sm.flipNpcByTemplateId(9400584, False) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(2000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/open", 128) +sm.sendDelay(250) +sm.spawnNpc(9400597, 858, -45) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.sendDelay(1000) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Hmm, hmm. Let's see what we have here... ") +sm.sendSay("#face0#Not bad, not bad... I suppose your people do have a reputation for hunting. Now... Say, why are Chief Kan's eyes swollen? ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#...Will you take us in now? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ah, not so fast! We have matters to discuss first. ") +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/close", 128) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400589, False) +sm.moveNpcByTemplateId(9400589, False, 850, 100) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#I don't like the sound of this. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face4#What a disappointing person... ") +sm.setParam(57) +sm.sendSay("#bWe need shelter before night falls... ") +sm.sendDelay(5000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/open", 128) +sm.sendDelay(250) +sm.spawnNpc(9400597, 858, -45) +sm.showNpcSpecialActionByTemplateId(9400597, "summon", 0) +sm.sendDelay(1000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendNext("#face0#Now then, we don't seem to have much space for you lot to sleep. ") +sm.sendSay("#face0#If you don't want to freeze tonight, you'll need something to keep you warm, won't you? ") +sm.sendSay("#face0#Gather Werebeast Furs for your people. Once that's done, I'll let you in. ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#...What do you think you're doing? ") +sm.sendSay("#face0#What happened to common decency? How can you sleep at night, using suffering refugees to do your chores?!") +sm.flipNpcByTemplateId(9400580, False) +sm.moveNpcByTemplateId(9400580, False, 270, 80) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face4#Chief Kan, I completely agree but I don't think we can afford to lose our tempers right now. ") +sm.sendSay("#face4#A common struggle might not be enough to restore a strained relationship. If you truly want things to be different, we should prove how different we are now. ") +sm.sendSay("#face4#If you lose your temper now... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Alika is right. ") +sm.sendSay("#face0#We must take responsibility for our dealings. Blaming the other side accomplishes nothing. ") +sm.sendSay("#face0#They act as they always have. If we do the same, nothing will change. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Ahem! ") +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Honored chief of Svarti... You do intend to take us in, yes? ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Why, that should be obvious by now! Why else would I waste my time with these dealings? ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Understood. We'll bring back the Werebeast Fur, as promised. ") +sm.setInnerOverrideSpeakerTemplateID(9400597) # Gurnardson +sm.sendSay("#face0#Hmm, hmm. Indeed. ") +sm.sendDelay(1000) +sm.playSound("Sound/PL_MONAD.img/EP1/ACT2/close", 128) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400589, True) +sm.sendDelay(500) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face1#Hahh... ") +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendSay("#face0#Since the knights have already done so much, I ask that you take this time to rest. I will go myself. ") +sm.setParam(57) +sm.sendSay("#bI'm coming with you! ") +sm.sendDelay(1000) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.startQuest(64047) +sm.lockInGameUI(False, True) +sm.warp(867201160) diff --git a/scripts/quest/q64062s.py b/scripts/quest/q64062s.py new file mode 100755 index 0000000..7f5ea66 --- /dev/null +++ b/scripts/quest/q64062s.py @@ -0,0 +1,58 @@ +# id 64062 ([MONAD: The First Omen] Actinops), field 867201100 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendNext("W-wait a second! ") +sm.setParam(57) +sm.sendSay("#bWhat? ") +sm.setParam(37) +sm.sendSay("You know, we're a village of fishermen. Er, harpooners, or whatever you call it. Uh... the monster that showed up in town... ") +sm.setParam(57) +sm.sendSay("#bThe toxic beast? ") +sm.setParam(37) +sm.sendSay("Oh! Is that what you call it? ") +sm.setParam(57) +sm.sendSay("#bAh... not really. One of our knights likes calling it that. ") +sm.setParam(37) +sm.sendSay("I think that monster is... ") +sm.setParam(57) +sm.sendSay("#bIs...? ") +sm.setParam(37) +sm.sendSay("The fish we used to catch! Actinops!") +sm.setParam(57) +sm.sendSay("#bThat monster... was a fish? ") +sm.setParam(37) +sm.sendSay("Yes! Actinops are transparent, down to their blood! It looks a bit gross, but tastes real good. It's Abrup's local specialty! ") +sm.setParam(57) +sm.sendSay("#bI don't know... fish aren't usually pink. Or huge. Or attack people. ") +sm.setParam(37) +sm.sendSay("Yeah, very true. Maybe it ate something pink? Oh, but that's not all! ") +sm.sendSay("Actinops can regenerate really fast. It can also puff itself up real big, so with its regeneration it can do that as long as it wants. ") +sm.sendSay("Didn't you see how it stretched its arm out? ") +sm.setParam(57) +sm.sendSay("#bHmm... ") +sm.setParam(37) +sm.sendSay("Okay, if you still don't believe me, there's another clue! ") +sm.sendSay("Poison! Actinops are poisonous! ") +sm.sendSay("If that monster really is Actinops... ") +sm.setParam(57) +sm.sendSay("#bThen...? ") +sm.setParam(37) +sm.sendSay("If it is Actinops... ") +sm.sendSay("It will focus when it regenerates! And it won't move or attack during that brief time. That's your chance! ") +sm.setParam(57) +sm.sendSay("#b(Thinking back, the monster did pause for a moment after stretching its arm.) ") +sm.setParam(37) +sm.sendSay("But to be honest... it does sound weird saying it out loud. ") +sm.sendSay("It really is Actinops, I'm sure of it... but I have no idea how a small fish turned into such a monster. ") +sm.setParam(57) +sm.sendSay("#bWell, thanks for clearing that up. ") +sm.setParam(37) +sm.sendSay("N-n-not at all! I'm honored to be of help! ") +sm.sendSay("If you have any questions about anything, you can ask me! ") +sm.setParam(57) +sm.sendSay("#bYes, will do. ") +sm.setParam(37) +sm.sendSay("...Whew!") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64063e.py b/scripts/quest/q64063e.py new file mode 100755 index 0000000..33e8748 --- /dev/null +++ b/scripts/quest/q64063e.py @@ -0,0 +1,22 @@ +# id 64063 ([MONAD: The First Omen] Hawalu's Song), field 867201100 +sm.showNpcSpecialActionByTemplateId(9400591, "summon", 0) +sm.lockInGameUI(True, False) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400591, True, 40, 50) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendNext("Hawalu! ") +sm.flipNpcByTemplateId(9400593, False) +sm.sendSay("I'm so sorry, #h0#. Was Hawalu bothering you?") +sm.setParam(57) +sm.sendSay("#bNot at all. In fact, Hawalu was singing to cheer me up.") +sm.showEffect("Effect/OnUserEff.img/emotion/flower", 2000, 0, 0, 0, 33531306, 0, 0) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendSay("That's right, Mommy! I sang! ") +sm.setInnerOverrideSpeakerTemplateID(9400591) # Shulla +sm.sendSay("Thank you, #h0#. I know that makes Hawalu happy too.") +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64063s.py b/scripts/quest/q64063s.py new file mode 100755 index 0000000..8039131 --- /dev/null +++ b/scripts/quest/q64063s.py @@ -0,0 +1,12 @@ +# id 64063 ([MONAD: The First Omen] Hawalu's Song), field 867201100 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendNext("When I drum my belly, happy and round") +sm.sendSay("I feel so happy with that full belly sound!") +sm.setParam(56) +sm.sendSay("#bHawalu, you sing really well.") +sm.setParam(36) +sm.sendSay("Hee hee hee, thank you! I learned it from Mom! She said she feels so happy whenever I sing.") +res = sm.sendNext("Do you want me to sing you a song?#b\r\n#L0# Who Lives in Windsleep Forest#l\r\n#L1# Yummy Meat#l\r\n#L2# Abrup, Land of Snow#l\r\n#L3# The Wind Blows#l\r\n#L20# I'm okay right now. Maybe later.#l") diff --git a/scripts/quest/q64064e.py b/scripts/quest/q64064e.py new file mode 100755 index 0000000..6f38e90 --- /dev/null +++ b/scripts/quest/q64064e.py @@ -0,0 +1,51 @@ +# id 64064 ([MONAD: The First Omen] Soldier's Dilemma), field 867201100 +sm.lockInGameUI(True, False) +sm.flipNpcByTemplateId(9400620, False) +sm.flipNpcByTemplateId(9400621, False) +sm.flipNpcByTemplateId(9400622, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendNext("#h0#! You're back. I hope it wasn't any trouble. ") +sm.setParam(57) +sm.sendSay("#bNo problem at all. You don't need to worry. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendSay("We were finally able to rest up, thanks to you. Honestly, this is the best rest I've gotten since we came to Abrup. ") +sm.sendSay("I'd never say we have it easy, but the knights... it seems like they don't even get to sleep. Gillie especially takes so much on herself to help us out. She's the best! ") +sm.setInnerOverrideSpeakerTemplateID(9400621) # Jenkins +sm.sendSay("That's right. We may just be soldiers now, but we're all working hard to become knights one day! ") +sm.spawnNpc(9400623, 280, -10) +sm.showNpcSpecialActionByTemplateId(9400623, "summon", 0) +sm.spawnNpc(9400581, 220, -10) +sm.showNpcSpecialActionByTemplateId(9400581, "summon", 0) +sm.sendDelay(250) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#What are you all doing here? ") +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendSay("Di-dispatch Commander! ") +sm.moveNpcByTemplateId(9400581, True, 300, 100) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400623, True, 300, 100) +sm.sendDelay(2000) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#What? You asked for help?! ") +sm.sendSay("#face0#How dare you give your sacred duty to another... How can you expect to be trusted with the safety of others now? ") +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendSay("Sorry, sir. ") +sm.setParam(57) +sm.sendSay("#bButler, I insisted. I wanted to help them... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendSay("#face0#There is no need to speak for soldiers. They answer for their actions. To your posts, now! ") +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendSay("Yes, Dispatch Commander, sir! ") +sm.flipNpcByTemplateId(9400620, True) +sm.flipNpcByTemplateId(9400621, True) +sm.moveNpcByTemplateId(9400620, True, 500, 150) +sm.moveNpcByTemplateId(9400621, True, 500, 150) +sm.moveNpcByTemplateId(9400622, False, 300, 150) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) +sm.showNpcSpecialActionByTemplateId(9400622, "summon", 0) diff --git a/scripts/quest/q64064s.py b/scripts/quest/q64064s.py new file mode 100755 index 0000000..89577c9 --- /dev/null +++ b/scripts/quest/q64064s.py @@ -0,0 +1,95 @@ +# id 64064 ([MONAD: The First Omen] Soldier's Dilemma), field 867201100 +sm.lockInGameUI(True, False) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Ha...", 2000, 1, 0, 0, 0, 4, 9400620, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Stop sighing... The people may hear you... Ha... ", 2000, 1, 0, 0, 0, 4, 9400621, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "You should stop sighing, too... Ha...", 2000, 1, 0, 0, 0, 4, 9400622, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Right... Let's cut it and head out...", 2000, 1, 0, 0, 0, 4, 9400620, 4878499) +sm.sendDelay(2000) +sm.speechBalloon(True, 0, 0, "Yeah, yeah. Let's go...", 2000, 1, 0, 0, 0, 4, 9400621, 4878499) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWhat is it? ") +sm.flipNpcByTemplateId(9400621, False) +sm.flipNpcByTemplateId(9400622, False) +sm.sendDelay(500) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendNext("Oh! #h0#! It's nothing! ") +sm.setInnerOverrideSpeakerTemplateID(9400621) # Jenkins +sm.sendSay("It's nothing at all. Well, I suppose we got a bit concerned about the monsters we saw on our way here. So we were on our way to take care of them. ") +sm.setParam(57) +sm.sendSay("#bBut we just got here... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendSay("We're a bit tired, but it's okay. We're doing this for the villagers. It's what we do for Afinas! ") +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendSay("Right. Who would help them, if not us? ") +sm.setParam(57) +sm.sendSay("#bMay I lend a hand? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendSay("No, we've got it under control. But thank you for asking! ") +sm.spawnNpc(9400593, 50, -20) +sm.showNpcSpecialActionByTemplateId(9400593, "summon", 0) +sm.moveNpcByTemplateId(9400593, True, 450, 50) +sm.sendDelay(3000) +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendNext("Last chance, monsters! Better run away ") +sm.sendSay("The Afinas Knights will blow you all away! ") +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 9400620, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 9400621, 0, 0) +sm.showEffect("Effect/OnUserEff.img/emotion/love", 0, 0, 0, 0, 9400622, 0, 0) +sm.sendDelay(1000) +sm.flipNpcByTemplateId(9400622, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400621, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400620, True) +sm.sendDelay(1000) +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendNext("Isn't he adorable? We'll do everything that we can to keep him safe. ") +sm.flipNpcByTemplateId(9400620, False) +sm.flipNpcByTemplateId(9400621, False) +sm.flipNpcByTemplateId(9400622, False) +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendSay("That's right. There's no time for us to rest! We have a duty to our people. ") +sm.setInnerOverrideSpeakerTemplateID(9400621) # Jenkins +sm.sendSay("Okay, then. Let's go! ") +sm.moveNpcByTemplateId(9400622, False, 50, 50) +sm.moveNpcByTemplateId(9400621, False, 50, 50) +sm.moveNpcByTemplateId(9400620, False, 30, 50) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400620, "rest", -1) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400621, True) +sm.flipNpcByTemplateId(9400622, True) +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendNext("Hey, what's wrong? ") +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendSay("I felt strange for a second... ") +sm.resetNpcSpecialActionByTemplateId(9400620) +sm.setInnerOverrideSpeakerTemplateID(9400621) # Jenkins +sm.sendSay("You should rest. We'll go ahead on our own. ") +sm.setParam(57) +res = sm.sendNext("#b(Everyone seems to be exhausted.)\r\n#L0# All of you, please rest. I'll go. It's just monsters beyond the wall, right?#l\r\n#L1# Good luck, then.#l") +sm.flipNpcByTemplateId(9400621, False) +sm.flipNpcByTemplateId(9400622, False) +sm.setParam(37) +sm.sendNext("Well, I can't really keep refusing you, can I? If you could take care of those monsters, that would be great, yeah. ") +sm.setParam(57) +sm.sendSay("#bOf course. You have a lot of battles ahead of you. Rest up and save your energy for now. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400620) # Simmons +sm.sendSay("Thank you, #h0#. We're so used to helping others out... it feels strange having someone help us. Strange and good. ") +sm.sendSay("This must be how the villagers feel when we help them, right? Now I feel even better about our work. ") +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendSay("All right, enough of that! \r\n#h0#, please take care of 50 Raging Werebeast monsters!") +sm.startQuest(parentID) +sm.lockInGameUI(False, True) +sm.warp(867201360) diff --git a/scripts/quest/q64065e.py b/scripts/quest/q64065e.py new file mode 100755 index 0000000..d0a73d6 --- /dev/null +++ b/scripts/quest/q64065e.py @@ -0,0 +1,38 @@ +# id 64065 ([MONAD: The First Omen] Butler's Dilemma), field 867201100 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bWilliams? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendSay("Oh, hey #h0#! I hope you didn't get in trouble with the Dispatch Commander? Sorry, that was our fault... ") +sm.setParam(57) +sm.sendSay("#bNot at all. Vice Captain Butler mentioned you saw a massive shadow back at... ") +sm.setParam(37) +sm.sendSay("Ah! It's nothing! I was just tired and hallucinating. Really, it was nothing! ") +sm.setParam(57) +sm.sendSay("#bWell, the thing is... I saw something similar. I'd like to know what you saw. ") +sm.setParam(37) +sm.sendSay("No... I really was mistaken. ") +sm.lockInGameUI(True, False) +sm.flipNpcByTemplateId(9400587, False) +sm.sendDelay(500) +sm.moveNpcByTemplateId(9400587, False, 50, 50) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendNext("#face0#...There are quite a few villagers talking about that shadow as well. ") +sm.sendSay("#face0#People are calling it the 'smoke shadow'. Of course, no one knows if it was just a strange cloud... or an actual creature. ") +sm.sendSay("#face0#But I am certain that no one wants to believe it. ") +sm.setInnerOverrideSpeakerTemplateID(9400622) # Williams +sm.sendSay("Err... ") +sm.setParam(57) +sm.sendSay("#bWhat could it be... ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400587) # Kan +sm.sendSay("#face0#For now, I choose to believe it was an illusion. It's a... more comforting thought, since no one knows for sure. ") +sm.sendSay("#face0#The truth is that we've all seen it many times, every time there was a snowstorm, or smoke, or thick fog. The people assume it's the shadow of a mountain or an odd cloud. ") +sm.setParam(57) +sm.sendSay("#b(I definitely need to look into this further. ) ") +sm.createQuestWithQRValue(64020, "chk1=1;chk2=1;chk3=1") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64065s.py b/scripts/quest/q64065s.py new file mode 100755 index 0000000..033e900 --- /dev/null +++ b/scripts/quest/q64065s.py @@ -0,0 +1,29 @@ +# id 64065 ([MONAD: The First Omen] Butler's Dilemma), field 867201100 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400581) # Butler +sm.sendNext("#face0#Unbelievable. To ask a civilian for help... ") +sm.setParam(57) +sm.sendSay("#bThey need time to get their strength back. ") +sm.setParam(37) +sm.sendSay("#face0#In wartime, a lack of discipline means certain defeat. ") +sm.sendSay("#face0#When I was younger, I fought for days at a time without sleeping or eating. These layabouts get full meals and sleep by warm fires, and still have the nerve to complain? Unacceptable! ") +sm.sendSay("#face0#I've already had to deal with rumors among the soldiers of a massive shadow during the battle at Kaptafel, and now this. ") +sm.setParam(57) +sm.sendSay("#bWait, a massive shadow? ") +sm.setParam(37) +sm.sendSay("#face0#Yeah. Ridiculous rumors like that can be bad for morale, you know. ") +sm.setParam(57) +sm.sendSay("#bWho started the rumor? ") +sm.setParam(37) +sm.sendSay("#face0#It was Williams, one of the soldiers resting here earlier. That's how undisciplined they've become. You see what happens when you go easy on them? ") +sm.setParam(57) +sm.sendSay("#b(Might be worth asking Williams about what he saw.) ") +sm.setParam(37) +sm.sendSay("#face0##h0#? ") +sm.setParam(57) +sm.sendSay("#bThank you, Vice Captain Butler. Please excuse me... ") +sm.setParam(37) +sm.sendSay("#face0#Where are you going? I'm not finished... ") +sm.startQuest(parentID) diff --git a/scripts/quest/q64067e.py b/scripts/quest/q64067e.py new file mode 100755 index 0000000..9d15483 --- /dev/null +++ b/scripts/quest/q64067e.py @@ -0,0 +1,27 @@ +# id 64067 ([MONAD: The First Omen] Treatment Necessities), field 867201100 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bHere you go, Alika. Leatty crystals. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#I got most of them. Just so you know. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Thank you! Thank you. ") +sm.setParam(57) +sm.sendSay("#b... ") +sm.sendSay("#bJanyt, it's truly amazing that you healed all these people. Aren't you tired? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400584) # Janyt +sm.sendSay("#face0#... ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Indeed, truly amazing! Firm beliefs and unwavering commitment... She is quite special. ") +sm.setInnerOverrideSpeakerTemplateID(9400584) # Janyt +sm.sendSay("#face0#I merely share the blessings I receive from Afinas. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Truly, no one adores Afinas like our dear Janyt here. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Cayne, rest up for now. I'll let you know if I need anything. ") +sm.sendSay("#face1##h0#, you should rest too. Maybe by the fire.") +sm.completeQuestNoCheck(parentID) +sm.warp(867201101) diff --git a/scripts/quest/q64067s.py b/scripts/quest/q64067s.py new file mode 100755 index 0000000..73c5a06 --- /dev/null +++ b/scripts/quest/q64067s.py @@ -0,0 +1,49 @@ +# id 64067 ([MONAD: The First Omen] Treatment Necessities), field 867201100 +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 250) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400580, True, 20, 20) +sm.showNpcSpecialActionByTemplateId(9400584, "skill2", 0) +sm.sendDelay(2000) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, False, 20, 20) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Alika and Janyt are busy taking care of the injured.) ") +sm.sendSay("#b(Wonder if there's anything I can help with.) ") +sm.forcedMove(False, 30) +sm.sendDelay(500) +sm.sendNext("#bJanyt, can I help with anything? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400584) # Janyt +sm.sendSay("#face0#Ah... No. The blessings of Afinas suffice. ") +sm.setParam(57) +sm.sendSay("#bBut there should be something. ") +sm.setParam(37) +sm.sendSay("#face1#No. ") +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0##h0#? ") +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 60, 30) +sm.sendDelay(500) +sm.setParam(57) +sm.sendNext("#bOh, Alika. I wanted to see if there is anything I could help with. ") +sm.setParam(37) +sm.sendSay("#face1#Of course! There's always plenty to do. ") +sm.sendSay("#face1#Can you find us some supplies for treating injuries? ") +sm.sendSay("#face1#As you can see, there is a limit to Devata Janyt's healing powers. She needs some time to recover, but we don't have enough medicine to treat everyone. ") +sm.setParam(57) +sm.sendSay("#bI'd love to help. What can be used for medicine around here? ") +sm.setParam(37) +sm.sendSay("#face1#The Abrup people have a traditional remedy made from melted Leatty Crystals. I haven't tested it myself, but it's worth a try, right? ") +sm.sendSay("#face1#I was told that the leatty gather on the snowfield near the river. Cayne is already there, so you can look for him. ") +sm.startQuest(parentID) +sm.sendDelay(2000) +sm.lockInGameUI(False, True) +sm.warp(867201180) diff --git a/scripts/quest/q64070s.py b/scripts/quest/q64070s.py new file mode 100755 index 0000000..4385b1f --- /dev/null +++ b/scripts/quest/q64070s.py @@ -0,0 +1,8 @@ +# id 64070 ([MONAD: The First Omen] Old Woman's Whereabouts), field 867201100 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Looks like I have some time now.) ") +sm.sendSay("#b(I wonder if the old lady might have stopped by this town, too.) ") +sm.sendSay("#b(I should ask Thorson.) ") +sm.startQuest(parentID) diff --git a/scripts/quest/q64071s.py b/scripts/quest/q64071s.py new file mode 100755 index 0000000..bbf5f76 --- /dev/null +++ b/scripts/quest/q64071s.py @@ -0,0 +1,30 @@ +# id 64071 ([MONAD: The First Omen] Svarti Heirloom), field 867201050 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400598) # Thorson +sm.sendNext("H-hero! Are you really leaving? ") +sm.setParam(57) +sm.sendSay("#bYes, there's something I need to take care of. ") +sm.setParam(37) +sm.sendSay("But, the forest... it's so dangerous right now! ") +sm.sendSay("Don't tell the chief about this, but... please, take this! ") +sm.completeQuestNoCheck(parentID) +sm.sendSay("This is a relic that has been passed down in our village for generations. ") +sm.setParam(57) +sm.sendSay("#bBy giving this to me... ") +sm.setParam(37) +sm.sendSay("You'll need it more than we do! I've been waiting for this day, to do some real good for someone! ") +sm.setParam(57) +sm.sendSay("#bThank you, Thorson. I hope I won't have to use it, so I can return it when I come back. ") +sm.setParam(37) +sm.sendSay("Sounds good! So, may the breath of Windsleep Forest be with you! ") +sm.lockInGameUI(True, False) +sm.sendDelay(500) +sm.forcedFlip(True) +sm.forcedMove(True, 309) +sm.sendDelay(501) +sm.sendDelay(1000) +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64008, "mapIdx=0") +sm.warp(867201200) diff --git a/scripts/quest/q64072s.py b/scripts/quest/q64072s.py new file mode 100755 index 0000000..1ff93d0 --- /dev/null +++ b/scripts/quest/q64072s.py @@ -0,0 +1,8 @@ +# id 64072 ([MONAD: The First Omen] Into the Forest), field 867201100 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(Now that I know where the cabin is, I should head out soon.)") +res = sm.sendNext("#b(In the end, perhaps it would be best to just get going right away.)\r\n#L0# 'I'd better get going.'#l") +sm.startQuest(parentID) +sm.warp(867201050) diff --git a/scripts/quest/q64080e.py b/scripts/quest/q64080e.py new file mode 100755 index 0000000..3fec680 --- /dev/null +++ b/scripts/quest/q64080e.py @@ -0,0 +1,29 @@ +# id 64080 ([MONAD: The First Omen] Night in the Forest), field 867201600 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face1#Back already? ") +sm.setParam(57) +sm.sendSay("#bWow, that's quite a fire you built. ") +sm.setParam(37) +sm.sendSay("#face2#I have you to thank for it. You taught me, after all! ") +sm.setParam(57) +sm.sendSay("#bOh, when we were making soup? Yeah, good point... ") +sm.sendSay("#bWait, your hands are all scratched up! ") +sm.setParam(37) +sm.sendSay("#face1#Well, I never said I was good at it. Don't worry, #h0#. Let's get some rest. ") +sm.setParam(57) +sm.sendSay("#bThanks, Alika. ") +sm.lockInGameUI(True, False) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 25, 0, 0) +sm.sendDelay(1000) +sm.setParam(37) +sm.sendNext("#face3#Uh... is that...? ") +sm.sendSay("#face3#Pete, don't look... ") +sm.completeQuestNoCheck(parentID) +sm.startQuest(64081) +sm.blind(True, 255, 0, 0, 0, 500) +sm.sendDelay(500) +sm.lockInGameUI(False, True) +sm.warp(867201601) diff --git a/scripts/quest/q64083s.py b/scripts/quest/q64083s.py new file mode 100755 index 0000000..12deab6 --- /dev/null +++ b/scripts/quest/q64083s.py @@ -0,0 +1,30 @@ +# id 64083 ([MONAD: The First Omen] Treacherous Forest Road), field 867201603 +sm.lockInGameUI(True, False) +sm.flipNpcByTemplateId(9400580, False) +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face0#Shall we head out, then? ") +sm.setParam(57) +sm.sendSay("#bYeah. Let's get going. ") +sm.setParam(37) +sm.sendSay("#face0#Oh, I was thinking... it might be better to leave Pete here. The roads are getting more dangerous, and I'd hate to lose him with monsters around. ") +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, False, 500, 150) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400595, False, 500, 150) +sm.sendDelay(6000) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, True, 500, 120) +sm.sendDelay(2000) +sm.sendNext("#face1#Let's go! ") +sm.lockInGameUI(False, True) +sm.startQuest(parentID) +sm.createQuestWithQRValue(parentID, "mapIdx=0") +sm.warp(867201700) diff --git a/scripts/quest/q64084e.py b/scripts/quest/q64084e.py new file mode 100755 index 0000000..7d81467 --- /dev/null +++ b/scripts/quest/q64084e.py @@ -0,0 +1,33 @@ +# id 64084 ([MONAD: The First Omen] Local Villagers), field 867201760 +sm.createQuestWithQRValue(parentID, "chk1=1;chk2=1") +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bBe careful when climbing up! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face1#Thanks, #h0#! ") +sm.sendDelay(2000) +sm.sendNext("#face5#Ahh! Are you serious?! ") +sm.sendSay("#face5#Ugh... I'm coming. ") +sm.spawnNpc(9400580, 1630, 440) +sm.showNpcSpecialActionByTemplateId(9400580, "summon", 0) +sm.sendDelay(1000) +sm.sendNext("#face5#You should have warned me! ") +sm.sendSay("#face3#It was too dark for me to see what it was. The moment I realized it was a Jellyrash, I almost lost my grip! ") +sm.sendSay("#face0#Bleh! Thanks... I guess. ") +sm.setParam(57) +sm.sendSay("#bI'm sorry! There really wasn't anything else rope-like around here. ") +sm.setParam(37) +sm.sendSay("#face1#It's okay. It was a bit... sticky, but it got the job done. ") +sm.sendSay("#face1#Anyway! The important thing is... ") +sm.sendSay("#face1#This hole must have been dug by someone! That means someone's living nearby, right? ") +sm.sendSay("#face2#It could be the old lady's cabin. Let's go look for it! ") +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(250) +sm.moveNpcByTemplateId(9400580, False, 200, 100) +sm.sendDelay(3000) +sm.lockInGameUI(False, True) +sm.completeQuestNoCheck(parentID) +sm.warp(867201800) diff --git a/scripts/quest/q64087e.py b/scripts/quest/q64087e.py new file mode 100755 index 0000000..b525859 --- /dev/null +++ b/scripts/quest/q64087e.py @@ -0,0 +1,22 @@ +# id 64087 ([MONAD: The First Omen] Alika's Research Materials), field 867202300 +sm.completeQuestNoCheck(parentID) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, take these. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#What are they? ") +sm.sendSay("#face1#Wait... are these...? ") +sm.sendSay("#face2#Wow! Transparent Actinops skin... giant Fembris fangs... hard Frostflail Yeti horns... Did you gather these for my research? ") +sm.setParam(57) +sm.sendSay("#bI hope they lead to a big breakthrough for you! ") +sm.setParam(37) +sm.sendSay("#face1#Oh, thank you so much! To be honest, I was starting to worry that I'd have to return to Afinas without any personal achievements. ") +sm.sendSay("#face1#I couldn't worry about that, since there's so much at stake here, but... you really came through for me. How can I ever repay you? ") +sm.setParam(57) +sm.sendSay("#bDon't worry about that, it was no trouble at all. ") +sm.setParam(37) +sm.sendSay("#face3#Really? Because I remember that Frostflail Yeti giving us some trouble... ") +sm.setParam(57) +sm.sendSay("#bHey, as long as you're happy, I'm happy.") diff --git a/scripts/quest/q64088e.py b/scripts/quest/q64088e.py new file mode 100755 index 0000000..aafe0dc --- /dev/null +++ b/scripts/quest/q64088e.py @@ -0,0 +1,278 @@ +# id 64088 ([MONAD: The First Omen] Monster Horde), field 867201821 +sm.lockInGameUI(True, False) +sm.spawnNpc(9400676, 200, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, 120, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, 50, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -30, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -100, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, -180, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -280, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400675, -350, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400674, -430, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400641, -500, 400) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400675, -560, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400641, -620, 400) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400667, -800, 400) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400672, -850, 400) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400674, -910, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400675, -970, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400666, -1050, 400) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.spawnNpc(9400674, -1120, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, -1200, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400672, -1250, 400) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400668, -1400, 400) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.spawnNpc(9400676, -1500, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -1630, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, -1750, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -1810, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -1900, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.forcedFlip(True) +sm.playSound("Sound/Mob.img/9402245/Attack2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack1", 100) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika! They're heading to Svarti! ") +sm.sendDelay(500) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation", 1000, 0, 0, 0, 33954511, 0, 0) +sm.sendDelay(2000) +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendNext("#face5#No! We've got to do something... Everyone is recovering, they're not ready for another fight! ") +sm.sendSay("#face5#What should we do?! ") +sm.setParam(57) +sm.sendSay("#bThere are way too many for us to fight. Even if we return to Svarti right now and fight together... ") +sm.setParam(37) +sm.sendSay("#face4#We need to stop them... keep them from getting to Svarti somehow. ") +sm.setParam(57) +sm.sendSay("#bBut what could we do to stop... ") +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, False) +sm.sendDelay(500) +sm.flipNpcByTemplateId(9400580, True) +sm.forcedFlip(True) +sm.sendDelay(500) +sm.sendDelay(2000) +sm.setParam(37) +sm.sendNext("#face4#...! ") +sm.setParam(57) +sm.sendSay("#b...! ") +sm.setParam(37) +sm.sendSay("#face4#If we destroy these... ") +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 0, 0, 0) +sm.setParam(57) +sm.sendSay("#b...They can't get past! ") +sm.sendDelay(1000) +sm.forcedFlip(True) +sm.forcedMove(True, 95) +sm.sendDelay(2000) +sm.forcedInput(5) +sm.sendDelay(900) +sm.forcedMove(True, 30) +sm.sendDelay(1000) +sm.forcedAction(5, 0) +sm.sendDelay(500) +sm.forcedAction(5, 0) +sm.sendDelay(500) +sm.showNpcSpecialActionByTemplateId(9400682, "die1", 0) +sm.sendDelay(1000) +sm.moveNpcByTemplateId(9400676, False, 100, 50) +sm.moveNpcByTemplateId(9400642, False, 100, 50) +sm.moveNpcByTemplateId(9400642, False, 100, 50) +sm.moveNpcByTemplateId(9400676, False, 100, 50) +sm.moveNpcByTemplateId(9400642, False, 100, 50) +sm.moveNpcByTemplateId(9400642, False, 100, 50) +sm.moveNpcByTemplateId(9400676, False, 100, 50) +sm.moveNpcByTemplateId(9400675, False, 100, 50) +sm.moveNpcByTemplateId(9400674, False, 100, 50) +sm.moveNpcByTemplateId(9400641, False, 100, 50) +sm.moveNpcByTemplateId(9400675, False, 100, 50) +sm.moveNpcByTemplateId(9400641, False, 100, 50) +sm.moveNpcByTemplateId(9400667, False, 100, 50) +sm.moveNpcByTemplateId(9400672, False, 100, 50) +sm.moveNpcByTemplateId(9400674, False, 100, 50) +sm.moveNpcByTemplateId(9400675, False, 100, 50) +sm.moveNpcByTemplateId(9400666, False, 100, 50) +sm.moveNpcByTemplateId(9400674, False, 100, 50) +sm.moveNpcByTemplateId(9400676, False, 100, 50) +sm.moveNpcByTemplateId(9400672, False, 100, 50) +sm.moveNpcByTemplateId(9400668, False, 100, 50) +sm.moveNpcByTemplateId(9400676, False, 100, 50) +sm.moveNpcByTemplateId(9400642, False, 100, 50) +sm.moveNpcByTemplateId(9400642, False, 100, 50) +sm.moveNpcByTemplateId(9400676, False, 100, 50) +sm.moveNpcByTemplateId(9400642, False, 100, 50) +sm.sendDelay(300) +sm.playSound("Sound/Mob.img/9402246/skill1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402241/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402250/Attack5", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402245/Attack2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402252/Attack2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402246/skill1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack1", 100) +sm.sendDelay(2000) +sm.setParam(37) +sm.sendNext("#face0#That's it! ") +sm.setParam(57) +sm.sendSay("#bOkay, so the other ones too... ") +sm.forcedFlip(True) +sm.sendDelay(1000) +sm.showEffect("Effect/OnUserEff.img/emotionBalloon/exclamation", 1000, 0, 0, 0, 9400580, 0, 0) +sm.sendDelay(600) +sm.spawnNpc(9400676, -650, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -580, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, -510, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -440, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400642, -370, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400642, -300, 400) +sm.showNpcSpecialActionByTemplateId(9400642, "summon", 0) +sm.spawnNpc(9400676, -230, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400675, -150, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400674, -50, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400641, -750, 400) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400675, -820, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400641, -890, 400) +sm.showNpcSpecialActionByTemplateId(9400641, "summon", 0) +sm.spawnNpc(9400667, -950, 400) +sm.showNpcSpecialActionByTemplateId(9400667, "summon", 0) +sm.spawnNpc(9400672, -1020, 400) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400674, -1080, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400675, -1130, 400) +sm.showNpcSpecialActionByTemplateId(9400675, "summon", 0) +sm.spawnNpc(9400666, -1200, 400) +sm.showNpcSpecialActionByTemplateId(9400666, "summon", 0) +sm.spawnNpc(9400674, -1280, 400) +sm.showNpcSpecialActionByTemplateId(9400674, "summon", 0) +sm.spawnNpc(9400676, -1350, 400) +sm.showNpcSpecialActionByTemplateId(9400676, "summon", 0) +sm.spawnNpc(9400672, -1400, 400) +sm.showNpcSpecialActionByTemplateId(9400672, "summon", 0) +sm.spawnNpc(9400668, -1480, 400) +sm.showNpcSpecialActionByTemplateId(9400668, "summon", 0) +sm.sendDelay(500) +sm.sendDelay(1000) +sm.showNpcSpecialActionByTemplateId(9400676, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400641, "attack1", -1) +sm.playSound("Sound/Mob.img/9402246/skill1", 100) +sm.playSound("Sound/Mob.img/9402241/Attack1", 100) +sm.moveNpcByTemplateId(9400642, True, 20, 50) +sm.moveNpcByTemplateId(9400642, True, 20, 50) +sm.moveNpcByTemplateId(9400676, True, 20, 50) +sm.moveNpcByTemplateId(9400642, True, 20, 50) +sm.moveNpcByTemplateId(9400642, True, 20, 50) +sm.moveNpcByTemplateId(9400676, True, 20, 50) +sm.moveNpcByTemplateId(9400675, True, 20, 50) +sm.moveNpcByTemplateId(9400674, True, 20, 50) +sm.moveNpcByTemplateId(9400675, False, 20, 50) +sm.moveNpcByTemplateId(9400641, False, 20, 50) +sm.moveNpcByTemplateId(9400667, False, 20, 50) +sm.moveNpcByTemplateId(9400672, False, 20, 50) +sm.moveNpcByTemplateId(9400674, False, 20, 50) +sm.moveNpcByTemplateId(9400675, False, 20, 50) +sm.moveNpcByTemplateId(9400666, False, 20, 50) +sm.moveNpcByTemplateId(9400674, False, 20, 50) +sm.moveNpcByTemplateId(9400676, False, 20, 50) +sm.moveNpcByTemplateId(9400672, False, 20, 50) +sm.moveNpcByTemplateId(9400668, False, 20, 50) +sm.playSound("Sound/Mob.img/9402250/Attack5", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack2", 100) +sm.playSound("Sound/Mob.img/9402245/Attack2", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402252/Attack2", 100) +sm.playSound("Sound/Mob.img/9402246/skill1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack1", 100) +sm.showNpcSpecialActionByTemplateId(9400642, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400675, "attack1", -1) +sm.moveNpcByTemplateId(9400642, True, 20, 50) +sm.moveNpcByTemplateId(9400676, True, 20, 50) +sm.moveNpcByTemplateId(9400642, True, 20, 50) +sm.moveNpcByTemplateId(9400642, True, 20, 50) +sm.moveNpcByTemplateId(9400676, True, 20, 50) +sm.moveNpcByTemplateId(9400675, True, 20, 50) +sm.moveNpcByTemplateId(9400674, True, 20, 50) +sm.moveNpcByTemplateId(9400641, False, 20, 50) +sm.moveNpcByTemplateId(9400667, False, 20, 50) +sm.moveNpcByTemplateId(9400672, False, 20, 50) +sm.moveNpcByTemplateId(9400674, False, 20, 50) +sm.moveNpcByTemplateId(9400675, False, 20, 50) +sm.moveNpcByTemplateId(9400666, False, 20, 50) +sm.moveNpcByTemplateId(9400674, False, 20, 50) +sm.moveNpcByTemplateId(9400676, False, 20, 50) +sm.moveNpcByTemplateId(9400672, False, 20, 50) +sm.moveNpcByTemplateId(9400668, False, 20, 50) +sm.sendDelay(1500) +sm.playSound("Sound/Mob.img/9402250/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack3", 100) +sm.playSound("Sound/Mob.img/9402245/Attack1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402252/Attack1", 100) +sm.playSound("Sound/Mob.img/9402246/skill1", 100) +sm.sendDelay(500) +sm.playSound("Sound/Mob.img/9402247/Attack2", 100) +sm.setParam(37) +sm.sendNext("#face4#Why is it different from last time...? ") +sm.setParam(57) +sm.sendSay("#bAre they following us? ") +sm.setParam(37) +sm.sendSay("#face1#Good! Let them chase us instead of closing in on the town! ") +sm.sendDelay(2000) +sm.setParam(57) +sm.sendNext("#b...Very true! Okay, we'll lure them away. ") +sm.sendDelay(2000) +sm.completeQuestNoCheck(parentID) +sm.startQuest(64089) +sm.lockInGameUI(False, True) +sm.warp(867201900) diff --git a/scripts/quest/q64104s.py b/scripts/quest/q64104s.py new file mode 100755 index 0000000..71033d9 --- /dev/null +++ b/scripts/quest/q64104s.py @@ -0,0 +1,17 @@ +# id 64104 ([MONAD: The First Omen] Skuas Remembers), field 867202300 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400600) # Birna +sm.sendNext("#h0#, I listened to your speech... ") +sm.sendSay("Don't concern yourself with the naysayers. You understand what is needed for us to triumph here. ") +sm.setParam(57) +sm.sendSay("#bThank you, Chief Birna. And thank you for arranging this meeting. ") +sm.setParam(37) +sm.sendSay("With this many people working together, the greatest challenge is focusing on one goal. ") +sm.sendSay("For us, we all desperately want the same thing. That gives a bit of an advantage right there. ") +sm.sendSay("Skuas has taken in many refugees in the past. It's not the first time we've faced such hardships. ") +sm.sendSay("History has taught me that meetings like this are necessary to unite our people. What we've done today will be told of in stories for generations. ") +sm.setParam(57) +sm.sendSay("#bSkuas remembers its history, then. ") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64107e.py b/scripts/quest/q64107e.py new file mode 100755 index 0000000..cfc58c8 --- /dev/null +++ b/scripts/quest/q64107e.py @@ -0,0 +1,10 @@ +# id 64107 ([MONAD: The First Omen] Setting Up Barriers), field 867202652 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400589) # Peytour +sm.sendNext("#face0#Finished! ... Will this be enough?") +sm.setParam(57) +sm.sendSay("#bYes, that looks good. Alright, let's head back!") +sm.completeQuestNoCheck(parentID) +sm.warp(867202650) diff --git a/scripts/quest/q64111s.py b/scripts/quest/q64111s.py new file mode 100755 index 0000000..46b062a --- /dev/null +++ b/scripts/quest/q64111s.py @@ -0,0 +1,70 @@ +# id 64111 ([MONAD: The First Omen] Guilt), field 867202300 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bUllan? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Hero... W-waaah...") +sm.setParam(57) +sm.sendSay("#bUllan! What happened? ") +sm.setParam(37) +sm.sendSay("Waahh... I was so immature... ") +sm.sendSay("It happened when I was so young... ") +sm.setParam(57) +sm.sendSay("#bWhat are you trying to say, Ullan? Slow down. ") +sm.setParam(37) +sm.sendSay("...It's all our fault that Blanche is gone. ") +sm.setParam(57) +sm.sendSay("#bWhat do you mean? ") +sm.setParam(37) +sm.sendSay("Sniff... Blanche and Granny Sanaan lived in town when I was little... ") +sm.sendSay("I remember playing in the forest with Blanche and the other kids... ") +sm.sendSay("And... ") +sm.sendSay("Blanche... her skin color was different than ours... and she was really strong... ") +sm.sendSay("We started being mean to her. I don't know if we were jealous, or scared... We called her a monster... ") +sm.setParam(57) +sm.sendSay("#b...I see. ") +sm.setParam(37) +sm.sendSay("After that, Granny Sanaan and Blanche left town. They never came back. ") +sm.sendSay("I forgot about them. I even forgot why they left... what I did... ") +sm.sendSay("Sniff... I can't imagine how scared and lonely Sanaan and Blanche must have been in the forest.") +sm.sendSay("If they'd stayed in the village, if they'd never gone into the forest... Blanche would have gone hunting with others that day, and she never would've gone missing! ") +sm.sendSay("I'm so sorry... Waaahhh...") +sm.sendSay("And I hate that my dad didn't tell me Granny Sanaan came looking for Blanche! I hate that he just let her leave like that! ") +sm.setParam(57) +sm.sendSay("#bI'm sure Chief Kan had your best interests at heart, Ullan. ") +sm.setParam(37) +sm.sendSay("Ohhh... He's just gonna say it was for the greater good again! I can't stand it! ") +sm.setParam(57) +sm.sendSay("#bUllan, why not come with me to apologize to Sanaan? It's never too late. ") +sm.setParam(37) +sm.sendSay("Do you think... she'd even listen to me? ") +sm.setParam(57) +sm.sendSay("#bI'm sure she will. ") +sm.sendSay("#bIn fact, I bet she'll respect you for being so brave. ") +sm.setParam(37) +sm.sendSay("You... you really think so? Sniff...") +sm.setParam(57) +sm.sendSay("#bI'm sure of it. Trust me. ") +sm.setParam(37) +sm.sendSay("Well... okay. But what do I say? I mean, I know how to apologize, but... I just...") +sm.setParam(57) +sm.sendSay("#bJust be honest. And if you need my help, I'm always right here. ") +sm.setParam(37) +sm.sendSay("Oh, I can't thank you enough, hero!") +sm.lockInGameUI(True, False) +sm.showNpcSpecialActionByTemplateId(9400589, "attack1", -1) +sm.showNpcSpecialActionByTemplateId(9400592, "attack1", -1) +sm.sendDelay(3000) +sm.setParam(57) +sm.sendNext("#b(Aruhi sounded so sincere... like he was really telling the truth.) ") +sm.sendSay("#bHm... ") +sm.sendDelay(1000) +sm.sendNext("#b(Since Sanaan has been living in the forest all this time, maybe she's seen something.) ") +sm.sendSay("#b(I'll probably see her before Ullan does.) ") +sm.sendSay("#b(I should head to the General Store to find Sanaan.)") +sm.lockInGameUI(False, True) +sm.createQuestWithQRValue(64112, "chk1=1") +sm.completeQuestNoCheck(parentID) +sm.startQuest(64112) diff --git a/scripts/quest/q64112e.py b/scripts/quest/q64112e.py new file mode 100755 index 0000000..89de359 --- /dev/null +++ b/scripts/quest/q64112e.py @@ -0,0 +1,119 @@ +# id 64112 ([MONAD: The First Omen] Another Witness), field 867202300 +sm.lockInGameUI(True, False) +sm.forcedFlip(True) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bSanaan! ") +sm.flipNpcByTemplateId(9400586, False) +sm.flipNpcByTemplateId(9400601, False) +sm.sendSay("#bI was on my way to meet you! What are you doing here? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Oh, #h0#... The child that lives here gives me such grief. He's held the doors shut on me for days... ") +sm.setParam(57) +sm.sendSay("#bIn this house? ") +sm.flipNpcByTemplateId(9400586, True) +sm.setParam(37) +sm.sendSay("Yes! Such a nuisance... nothing but skin and bones! I wonder what's made him shut us out this time? ") +sm.flipNpcByTemplateId(9400601, True) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Shh, Sanaan. Einar might hear you. ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("I hope he does! ") +sm.flipNpcByTemplateId(9400586, False) +sm.flipNpcByTemplateId(9400601, False) +sm.sendSay("Now then, what did you need me for? ") +sm.setParam(57) +sm.sendSay("#bI wanted to ask you a question. Did you see any outsiders while you were living in the forest? Or anyone suspicious? ") +sm.setParam(37) +sm.sendSay("I've seen several outsiders. Anything more specific? ") +sm.setParam(57) +sm.sendSay("#bHmm... Did you see any around 6 months ago? ") +sm.setParam(37) +sm.sendSay("...No. I didn't see who took the townsfolk. ") +sm.setParam(57) +sm.sendSay("#bAh, yeah. Sorry if that's a painful memory for you. ") +sm.setParam(37) +sm.sendSay("No, I'm fine. It's all in the past. Ask me anything that you think might help us find my Blanche. ") +sm.blind(True, 255, 0, 0, 0, 250) +sm.sendDelay(250) +sm.spawnNpc(9400586, 710, 0) +sm.showNpcSpecialActionByTemplateId(9400586, "summon", 0) +sm.spawnNpc(9400601, 770, 0) +sm.showNpcSpecialActionByTemplateId(9400601, "summon", 0) +sm.forcedFlip(True) +sm.moveNpcByTemplateId(9400601, False, 150, 70) +sm.moveNpcByTemplateId(9400586, False, 150, 70) +sm.blind(True, 255, 0, 0, 0, 0) +sm.sendDelay(100) +sm.blind(False, 0, 0, 0, 0, 250) +sm.sendDelay(300) +sm.sendDelay(1500) +sm.forcedMove(False, 100) +sm.showEffect("Effect/OnUserEff.img/emotion/oh", 0, 0, 0, 0, 34418552, 0, 0) +sm.sendNext("That reminds me. I wanted to tell you something. ") +sm.sendDelay(900) +sm.setParam(57) +sm.sendNext("#bWhat would that be? ") +sm.flipNpcByTemplateId(9400586, True) +sm.flipNpcByTemplateId(9400601, True) +sm.setParam(37) +sm.sendSay("I'm sure you saw them when you were in the forest. Those sticky pink things? ") +sm.sendSay("They're everywhere, even around my cabin! ") +sm.setParam(57) +sm.sendSay("#bYes, we've seen them. Alika and I call them Jellyrashes. ") +sm.setParam(37) +sm.sendSay("Ha! Quite a fitting name. ") +sm.sendSay("Living out there on my own, I had plenty of time to observe those bizarre things. ") +sm.sendSay("It would seem the giant creature controls all the monsters of the forest through the Jellyrashes. ") +sm.setParam(57) +sm.sendSay("#bI knew it! We were on the right track... ") +sm.flipNpcByTemplateId(9400586, False) +sm.flipNpcByTemplateId(9400601, False) +sm.sendDelay(300) +sm.moveNpcByTemplateId(9400601, False, 150, 70) +sm.moveNpcByTemplateId(9400586, False, 150, 70) +sm.sendDelay(900) +sm.setParam(37) +sm.sendNext("Then I assume you know where the Jellyrashes come from? ") +sm.forcedMove(False, 100) +sm.sendDelay(900) +sm.setParam(57) +sm.sendNext("#bWhere they come from?") +sm.sendDelay(900) +sm.setParam(37) +sm.sendNext("The same giant creature is creating them. ") +sm.setParam(57) +sm.sendSay("#bWe did suspect there might be a connection... ") +sm.flipNpcByTemplateId(9400586, True) +sm.flipNpcByTemplateId(9400601, True) +sm.setParam(37) +sm.sendSay("When the giant appears, it fills the sky with its strange snow. It doesn't make snow, but its huge feet kick up great clouds of it. ") +sm.sendSay("What the beast makes is a strange red powder that mixes with the snow, which is what makes the storm look red. ") +sm.sendSay("I only saw the creature itself once, and it was strange... it seemed to be tearing parts of its own body off. ") +sm.sendSay("If that's how it creates Jellyrashes, that would mean it can only create so many at once. ") +sm.setParam(57) +sm.sendSay("#bAre you sure?") +sm.setParam(37) +sm.sendSay("I am. ") +sm.sendSay("If the beast is really using those Jellyrashes to control the monsters... ") +sm.setParam(57) +sm.sendSay("#bThat means if we take them out faster than it can make them, at some point it won't be able to keep up. ") +sm.setParam(37) +sm.sendSay("Exactly! ") +sm.setParam(57) +sm.sendSay("#bThat alone won't solve our problem, though. When we destroyed some of the Jellyrashes the monsters calmed down, but they fell back under its control when the creature came near. ") +sm.setParam(37) +sm.sendSay("So the beast can control the monsters directly as well. ") +sm.setParam(57) +sm.sendSay("#bRight. But I'm sure clearing its Jellyrashes would make it easier to combat. ") +sm.setParam(37) +sm.sendSay("Good, good. I'm glad I did something useful with my time out there in my cabin. ") +sm.sendSay("Is there anything else you need? ") +sm.sendSay("Considering you've been surviving the harsh realities of Abrup for some time now, I would think there isn't much you don't know already. ") +sm.sendSay("I'll let you know if anything else comes to mind. ") +sm.setParam(57) +sm.sendSay("#bGreat. Thank you, Sanaan.") +sm.completeQuestNoCheck(parentID) +sm.lockInGameUI(False, True) diff --git a/scripts/quest/q64113s.py b/scripts/quest/q64113s.py new file mode 100755 index 0000000..2c0e0eb --- /dev/null +++ b/scripts/quest/q64113s.py @@ -0,0 +1,47 @@ +# id 64113 ([MONAD: The First Omen] Source of the Rumor), field 867202300 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendNext("Ah...") +sm.sendSay("Greetings. I'm Elva, and run the general store here in Skuas. ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("As I said, this fine young lady here was the one that brought me back to town. ") +sm.sendSay("While I was living out there in my cabin, I'd come to the general store here in Skuas to pick up supplies. ") +sm.sendSay("But when I stopped coming around, she came looking for me. ") +sm.setParam(57) +sm.sendSay("#bHow considerate! ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Oh, a store owner should always remember her customers.") +sm.sendSay("Many, many people come by the store, often with news or gossip to share. ") +sm.sendSay("And that's why I think I might be able to answer your earlier question, #h0#. ") +sm.setParam(57) +sm.sendSay("#bDo you mean when I asked about seeing anyone suspicious? ") +sm.setParam(37) +sm.sendSay("Yes, although I didn't see anyone myself. ") +sm.sendSay("Around 6 months ago, one of our herb gatherers told me they saw someone suspicious out in the forest. ") +sm.sendSay("I hadn't thought much of it since it was such an odd tale, but what you said reminded me, #h0#. ") +sm.setParam(57) +sm.sendSay("#bCould you elaborate? ") +sm.setParam(37) +sm.sendSay("Let's see... they said they saw someone in white steel armor, completely closed. Even their face was covered... I remember them saying you would lose them in a blizzard. ") +sm.sendSay("At first they thought the person was blinking around the forest, but they realized there were many of them moving around. ") +sm.setParam(57) +sm.sendSay("#bIt's the same story... ") +sm.setParam(37) +sm.sendSay("Pardon? ") +sm.setParam(57) +sm.sendSay("#bWe have another witness who saw the exact same thing. ") +sm.setParam(37) +sm.sendSay("Is that so? That's... chilling. ") +sm.setParam(57) +sm.sendSay("#bWho did you hear this from? ") +sm.setParam(37) +sm.sendSay("An herb gatherer... he went into the forest to find his missing wife, and never came back. ") +sm.setParam(57) +sm.sendSay("#bI see... ") +sm.sendSay("#bThank you, Elva. ") +sm.sendSay("#b(Turns out Aruhi wasn't just rambling after all.)") +sm.createQuestWithQRValue(64039, "chk1=1;chk2=1") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64114e.py b/scripts/quest/q64114e.py new file mode 100755 index 0000000..b9d022f --- /dev/null +++ b/scripts/quest/q64114e.py @@ -0,0 +1,12 @@ +# id 64114 ([MONAD: The First Omen] Elva's Role), field 867202300 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendNext("#h0#, you're back. Did you get the ingredients?") +sm.setParam(57) +sm.sendSay("#bI sure did. Here you go!") +sm.setParam(37) +sm.sendSay("Eyeful antennae... one, two, three... Optusa leaves... It's all there!") +res = sm.sendAskYesNo("Thank you. Oh, and did you bring me my notes? You can keep them if you like, I made copies.") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64114s.py b/scripts/quest/q64114s.py new file mode 100755 index 0000000..826fb71 --- /dev/null +++ b/scripts/quest/q64114s.py @@ -0,0 +1,43 @@ +# id 64114 ([MONAD: The First Omen] Elva's Role), field 867202300 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendNext("While we're on the subject of paying thanks, #h0#... ") +sm.sendSay("Do you think you might be able to do me a small favor? ") +sm.sendSay("I mean... Oh, I hope I don't come off as just being greedy. I know you're so busy... Ahh, how can I say this... ") +sm.setParam(57) +sm.sendSay("#bPlease, it's no trouble. Tell me what you need. ") +sm.setParam(37) +sm.sendSay("Thank you. You see, I may be a simple merchant but I'm very dedicated to my work. And my work is to make sure I always have what people need. ") +sm.sendSay("Some people might laugh at the idea of a shopkeeper being so dedicated, but... ") +sm.setParam(57) +sm.sendSay("#bNo one thinks that. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Who would think such a thing? Everyone I know adores you. ") +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("Oh, goodness... ") +sm.sendSay("You see, we haven't been able to trade with other villages or El Nath for a while because of the chaos, and that's left me light on supplies. ") +sm.sendSay("I'm not worried about luxuries or entertainment, mind you, I mean basics like potions. Considering the situation, that could be a problem. ") +sm.sendSay("I hate to trouble you, but this is for everyone's sake. ") +sm.setParam(57) +sm.sendSay("#bDon't sweat it. We could all use more potions. I'll help in anyway way I can. ") +sm.setParam(37) +sm.sendSay("Thank you. That really puts my mind at ease. ") +sm.sendSay("I'm no alchemist but I can brew decent potions. I just need a few ingredients. ") +sm.setParam(57) +sm.sendSay("#bSure. What do you need? ") +sm.setParam(37) +sm.sendSay("Hold on. I had them written down somewhere... Ah! Here they are. ") +sm.sendSay("Twenty Eyeful antennae, ten Optusa leaves, ten Leatty Crystals, ten vials of the clear Actinops blood... ") +sm.sendSay("Oh. It's a bit more than a few, actually...") +sm.setParam(57) +sm.sendSay("#bHa, that's okay, I'm used to it. Twenty Eyeful antennae, ten Optusa leaves... What was the rest?") +sm.setParam(37) +sm.sendSay("Ten Leatty Crystals and ten vials of the clear Actinops blood! ") +sm.sendSay("You know what? Just take the note. It includes how to get each ingredient as well. ") +sm.startQuest(parentID) +sm.sendSay("All right. Here on page ten: How to Make a Super Elixir! ") +sm.setParam(57) +sm.sendSay("#bAlright. I'll be back soon.") diff --git a/scripts/quest/q64116s.py b/scripts/quest/q64116s.py new file mode 100755 index 0000000..158876c --- /dev/null +++ b/scripts/quest/q64116s.py @@ -0,0 +1,40 @@ +# id 64116 ([MONAD: The First Omen] Shabby Armor), field 867202300 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendNext("I was just helping Granny Sanaan make some armor. ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("I wouldn't say make, dear. We're more mending. Taking old pieces and putting them together into new armor. ") +sm.setParam(57) +sm.sendSay("#bArmor? ") +sm.setParam(37) +sm.sendSay("Yes, I know someone who's in desperate need of some armor. ") +sm.sendSay("You know who. It's that little nuisance I was telling you about earlier. ") +res = sm.sendNext("While we're on the topic of armor... do you have any extra lying around that you're not using? I need something to cover the arm here...#b\r\n#L0# I don't have anything.#l\r\n#L1# Let me check... #l") +sm.sendNext("Oh, well, that's too bad...") +sm.sendSay("It needs some finishing touches... What do you think? ") +sm.sendSay("Armorsmithing isn't my specialty, but it should work better than it looks. ") +sm.sendSay("He's a lot like me. ") +sm.sendSay("I'm hoping this armor will give the boy the courage to venture outside... But I suppose it's up to him in the end. ") +sm.sendSay("Still, it's always better to do what little you can than do nothing at all. ") +sm.sendSay("Here, take a look at this helmet! I'm rather proud of the horns here. ") +sm.setParam(57) +sm.sendSay("#bImpressive. ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("I can imagine Einar striding out of his house wearing this. Magnificent! ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("I hope he's ready for magnificence... ") +sm.setInnerOverrideSpeakerTemplateID(9400601) # Elva +sm.sendSay("I'm sure he'll... Hey, what is that noise? What's going on? ") +sm.setInnerOverrideSpeakerTemplateID(9400586) # Sanaan +sm.sendSay("Sounds to me like someone's getting a bit rowdy. ") +sm.setParam(57) +sm.sendSay("#bWe'd better head over and check it out. ") +sm.setParam(37) +sm.sendSay("Yes, let's go.") +sm.sendSay("Ah, before we go... This is for you. It's nothing compared to what you're wearing, but humor an old woman and take it.") +sm.playExclSoundWithDownBGM("Field.img/masteryBook/EnchantSuccess", 100) +sm.completeQuestNoCheck(parentID) +sm.warp(867202305) diff --git a/scripts/quest/q64130e.py b/scripts/quest/q64130e.py new file mode 100755 index 0000000..7c4b9a8 --- /dev/null +++ b/scripts/quest/q64130e.py @@ -0,0 +1,18 @@ +# id 64130 ([MONAD: The First Omen] A Reason to Fight), field 867202300 +sm.setSpeakerType(3) +sm.setParam(37) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendNext("#face0#Einar, you should have blocked that last attack. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face3#...I'm sorry. ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#It's fine, but you should always treat training like an actual battle. ") +sm.setInnerOverrideSpeakerTemplateID(9400602) # Einar +sm.sendSay("#face3#Okay... ") +sm.setInnerOverrideSpeakerTemplateID(9400582) # Cayne +sm.sendSay("#face0#Let's break for a moment and then try one more time. ") +sm.sendSay("#face0#Alika still looks so serious. I wonder what's going on...") +sm.setParam(57) +sm.sendSay("#bI know, she's been talking the whole time we've been sparring. ") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64133e.py b/scripts/quest/q64133e.py new file mode 100755 index 0000000..a31a176 --- /dev/null +++ b/scripts/quest/q64133e.py @@ -0,0 +1,7 @@ +# id 64133 ([MONAD: The First Omen] Building a Catapult), field 867202810 +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#b(I've gathered enough. I should get back.) ") +sm.completeQuestNoCheck(parentID) +sm.warp(867202313) diff --git a/scripts/quest/q64133s.py b/scripts/quest/q64133s.py new file mode 100755 index 0000000..7ce7835 --- /dev/null +++ b/scripts/quest/q64133s.py @@ -0,0 +1,36 @@ +# id 64133 ([MONAD: The First Omen] Building a Catapult), field 867202300 +sm.lockInGameUI(True, False) +sm.setSpeakerType(3) +sm.setParam(57) +sm.setColor(1) +sm.sendNext("#bAlika, what's the matter? ") +sm.setParam(37) +sm.setInnerOverrideSpeakerTemplateID(9400580) # Alika +sm.sendSay("#face0#Ah... #h0#... ") +sm.sendSay("#face0#It's the catapult.") +sm.setParam(57) +sm.sendSay("#bThe catapult? The one you've been working on? Is something wrong? ") +sm.setParam(37) +sm.sendSay("#face0#Just a minor thing. We've built the frame, and stocked up on rocks to launch. ") +sm.sendSay("#face4#The problem is that we can't find any rope in Skuas that's strong enough to strap the rocks into. ") +sm.setParam(57) +sm.sendSay("#bWell, we just need to go out and get some! ") +sm.setParam(37) +sm.sendSay("#face4#Remember, Fembris were spotted near the village not long ago. That means an attack could be coming at any moment.") +sm.sendSay("#face4#With that threat out there, I can't let anyone leave the town. Not even you. ") +sm.setParam(57) +sm.sendSay("#bHm... ") +sm.sendSay("#b(I could probably slip out and come right back.) ") +sm.sendSay("#b...How strong does the rope need to be? ") +sm.setParam(37) +sm.sendSay("#face5##h0#, don't you even think about leaving. It's too dangerous. ") +sm.setParam(57) +sm.sendSay("#bLook, the catapult could make a huge difference for our defenses. If I go alone, I can find what you need and be back in a flash. ") +sm.setParam(37) +sm.sendSay("#face5#No, I can't let you go alone. It's too risky. ") +sm.sendSay("#face4#Just forget about the rope. We'll find something to substitute for it.") +sm.setParam(57) +sm.sendSay("#b(Yeah, might as well sneak out and get this done.) ") +sm.lockInGameUI(False, True) +sm.startQuest(parentID) +sm.warp(867202200) diff --git a/scripts/quest/q64215s.py b/scripts/quest/q64215s.py new file mode 100755 index 0000000..e12eeb7 --- /dev/null +++ b/scripts/quest/q64215s.py @@ -0,0 +1,5 @@ +# id 64215 (Title: Alika's Knight), field 867202101 +sm.sendDelay(2000) +sm.playSound("Sound/VoicePL.img/MONAD1_P2/1", 128) +sm.sendDelay(6000) +sm.createFieldTextEffect("#fnᄈᆰᄡᆴᄚ■ᄉ￱ ExtraBold##fs35#Svarti also fell.", 50, 3866, 7, 0, -50, 1, 4, 1, 300, 300) diff --git a/scripts/quest/q64216s.py b/scripts/quest/q64216s.py new file mode 100755 index 0000000..bbee4c7 --- /dev/null +++ b/scripts/quest/q64216s.py @@ -0,0 +1,2 @@ +# id 64216 (Title: Savior of Abrup), field 867200110 +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q64273s.py b/scripts/quest/q64273s.py new file mode 100755 index 0000000..a9a34d9 --- /dev/null +++ b/scripts/quest/q64273s.py @@ -0,0 +1,29 @@ +# id 64273 ([MONAD] Abrup Mission Board Unlocked!), field 867200110 +sm.setSpeakerType(3) +sm.setParam(36) +sm.setColor(1) +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendNext("Hi!") +sm.sendSay("My mommy, Ullan, and some other villagers prepared this for you.") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("Hawalu, what are you doing over there?") +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendSay("I wanna tell them about the Mission Board!") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("You're not old enough to explain well yet. I'll take it from here.") +sm.sendSay("Thank you for helping us so much.\r\nWe all got together to think of a way to pay you back and prepared this #eMission Board#n!") +sm.openUI(1886) +sm.sendSay("The #eMission Board#n has #bDaily Missions#k, #bWeekly Missions#k, and #bAchievement Missions#k.") +sm.sendSay("#bDaily Missions#k are tasks that can be completed every day. Just don't forget that they #breset at midnight#k!") +sm.sendSay("#bWeekly Missions#k can be done once a week. You'll have no trouble completing them if you visit Abrup every day! \r\nWeekly missions are#b reset every Wednesday#k, so make sure you claim your gift before then!") +sm.sendSay("#bAchievement Missions#k are missions that can only be completed once. We really wanted to repay you for your hard work, so we prepared amazing gifts for you!") +sm.sendSay("You can view the gift you'll receive for completing each mission when you place your cursor above the gift box icon for it.") +sm.sendSay("There are also great titles like #i3700493:# #t3700493#, #i3700502:# #t3700502#, and #i3700496:# #t3700496#, and there are useful items like #i2048724:# #t2048724# and #i2028372:# #t2028372#, so don't forget to take them with you! ") +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendSay("Don't forget to take them!") +sm.setInnerOverrideSpeakerTemplateID(9400588) # Ullan +sm.sendSay("See you later!") +sm.setInnerOverrideSpeakerTemplateID(9400593) # Hawalu +sm.sendSay("See you later!") +sm.createQuestWithQRValue(parentID, "chk=1") +sm.completeQuestNoCheck(parentID) diff --git a/scripts/quest/q6601s.py b/scripts/quest/q6601s.py new file mode 100755 index 0000000..bc66e7d --- /dev/null +++ b/scripts/quest/q6601s.py @@ -0,0 +1,6 @@ +# Elven Blessing link skill quest + +sm.getChr().addSkill(20021110, 1, 3) +sm.sendSayOkay("I've added your link skill, enjoy!.") +sm.completeQuest(6601) +sm.dispose() diff --git a/scripts/quest/q7707s.py b/scripts/quest/q7707s.py new file mode 100755 index 0000000..3208ee3 --- /dev/null +++ b/scripts/quest/q7707s.py @@ -0,0 +1,3 @@ +# 7707 - Midnight Rest Quest (just keeps spamming until you complete it) + +sm.startQuest(parentID) \ No newline at end of file diff --git a/scripts/quest/undefined.py b/scripts/quest/undefined.py new file mode 100755 index 0000000..51bf5ab --- /dev/null +++ b/scripts/quest/undefined.py @@ -0,0 +1,8 @@ +if startQuest: + sm.chat("Starting quest " + str(parentID) + " without checking requirements, as there was no script found.") + sm.startQuestNoCheck(parentID) + sm.dispose() +else: + sm.chat("Completing quest " + str(parentID) + " without rewards, as there was no script found.") + sm.completeQuestNoRewards(parentID) + sm.dispose() diff --git a/scripts/reactor/9218000action.py b/scripts/reactor/9218000action.py new file mode 100755 index 0000000..66fab50 --- /dev/null +++ b/scripts/reactor/9218000action.py @@ -0,0 +1,12 @@ +# Prison Door (9218000) | Used in Escape Party Quest + +PRISON_KEY = 4001528 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + if sm.hasItem(PRISON_KEY): + sm.consumeItem(PRISON_KEY) + sm.removeReactor() + else: + sm.chat("You need a key in order to open the Prison.") + sm.dispose() diff --git a/scripts/reactor/9250000action.py b/scripts/reactor/9250000action.py new file mode 100755 index 0000000..d5bf5c2 --- /dev/null +++ b/scripts/reactor/9250000action.py @@ -0,0 +1,18 @@ +# Flower | Primrose Hill +STAGE_1_CLEARED = "Stage1Cleared" +STAGE_1_FLOWER_DATA = "Stage1FlowerData" + +sm.increaseReactorState(9250000, 1) +sm.consumeItem(4000884) + +field.setProperty(STAGE_1_FLOWER_DATA, field.getProperty(STAGE_1_FLOWER_DATA) + 1) + +if field.getProperty(STAGE_1_FLOWER_DATA) == 6: + field.setProperty(STAGE_1_CLEARED, True) + field.clearRespawn() + mobids = [9300900, 9300901] + field.setNoRespawn(mobids) + sm.killMobs(); + sm.spawnMob(9300902, -198, -189, False) + sm.spawnMob(9300907, -198, -189, False) + sm.chat("Stage cleared") \ No newline at end of file diff --git a/scripts/reactor/9250001action.py b/scripts/reactor/9250001action.py new file mode 100755 index 0000000..8626199 --- /dev/null +++ b/scripts/reactor/9250001action.py @@ -0,0 +1,18 @@ +# Flower | Primrose Hill +STAGE_1_CLEARED = "Stage1Cleared" +STAGE_1_FLOWER_DATA = "Stage1FlowerData" + +sm.increaseReactorState(9250001, 1) +sm.consumeItem(4000884) + +field.setProperty(STAGE_1_FLOWER_DATA, field.getProperty(STAGE_1_FLOWER_DATA) + 1) + +if field.getProperty(STAGE_1_FLOWER_DATA) == 6: + field.setProperty(STAGE_1_CLEARED, True) + field.clearRespawn() + mobids = [9300900, 9300901] + field.setNoRespawn(mobids) + sm.killMobs(); + sm.spawnMob(9300902, -198, -189, False) + sm.spawnMob(9300907, -198, -189, False) + sm.chat("Stage cleared") \ No newline at end of file diff --git a/scripts/reactor/9250002action.py b/scripts/reactor/9250002action.py new file mode 100755 index 0000000..6d1893c --- /dev/null +++ b/scripts/reactor/9250002action.py @@ -0,0 +1,17 @@ +# Flower | Primrose Hill +STAGE_1_CLEARED = "Stage1Cleared" +STAGE_1_FLOWER_DATA = "Stage1FlowerData" +sm.increaseReactorState(9250002, 1) +sm.consumeItem(4000884) + +field.setProperty(STAGE_1_FLOWER_DATA, field.getProperty(STAGE_1_FLOWER_DATA) + 1) + +if field.getProperty(STAGE_1_FLOWER_DATA) == 6: + field.setProperty(STAGE_1_CLEARED, True) + field.clearRespawn() + mobids = [9300900, 9300901] + field.setNoRespawn(mobids) + sm.killMobs(); + sm.spawnMob(9300902, -198, -189, False) + sm.spawnMob(9300907, -198, -189, False) + sm.chat("Stage cleared") \ No newline at end of file diff --git a/scripts/reactor/9250003action.py b/scripts/reactor/9250003action.py new file mode 100755 index 0000000..2d9fe17 --- /dev/null +++ b/scripts/reactor/9250003action.py @@ -0,0 +1,18 @@ +# Flower | Primrose Hill +STAGE_1_CLEARED = "Stage1Cleared" +STAGE_1_FLOWER_DATA = "Stage1FlowerData" + +sm.increaseReactorState(9250003, 1) +sm.consumeItem(4000884) + +field.setProperty(STAGE_1_FLOWER_DATA, field.getProperty(STAGE_1_FLOWER_DATA) + 1) + +if field.getProperty(STAGE_1_FLOWER_DATA) == 6: + field.setProperty(STAGE_1_CLEARED, True) + field.clearRespawn() + mobids = [9300900, 9300901] + field.setNoRespawn(mobids) + sm.killMobs(); + sm.spawnMob(9300902, -198, -189, False) + sm.spawnMob(9300907, -198, -189, False) + sm.chat("Stage cleared") \ No newline at end of file diff --git a/scripts/reactor/9250004action.py b/scripts/reactor/9250004action.py new file mode 100755 index 0000000..e50cd2d --- /dev/null +++ b/scripts/reactor/9250004action.py @@ -0,0 +1,18 @@ +# Flower | Primrose Hill +STAGE_1_CLEARED = "Stage1Cleared" +STAGE_1_FLOWER_DATA = "Stage1FlowerData" + +sm.increaseReactorState(9250004, 1) +sm.consumeItem(4000884) + +field.setProperty(STAGE_1_FLOWER_DATA, field.getProperty(STAGE_1_FLOWER_DATA) + 1) + +if field.getProperty(STAGE_1_FLOWER_DATA) == 6: + field.setProperty(STAGE_1_CLEARED, True) + field.clearRespawn() + mobids = [9300900, 9300901] + field.setNoRespawn(mobids) + sm.killMobs(); + sm.spawnMob(9300902, -198, -189, False) + sm.spawnMob(9300907, -198, -189, False) + sm.chat("Stage cleared") \ No newline at end of file diff --git a/scripts/reactor/9250005action.py b/scripts/reactor/9250005action.py new file mode 100755 index 0000000..1684b1d --- /dev/null +++ b/scripts/reactor/9250005action.py @@ -0,0 +1,18 @@ +# Flower | Primrose Hill +STAGE_1_CLEARED = "Stage1Cleared" +STAGE_1_FLOWER_DATA = "Stage1FlowerData" + +sm.increaseReactorState(9250005, 1) +sm.consumeItem(4000884) + +field.setProperty(STAGE_1_FLOWER_DATA, field.getProperty(STAGE_1_FLOWER_DATA) + 1) + +if field.getProperty(STAGE_1_FLOWER_DATA) == 6: + field.setProperty(STAGE_1_CLEARED, True) + field.clearRespawn() + mobids = [9300900, 9300901] + field.setNoRespawn(mobids) + sm.killMobs(); + sm.spawnMob(9300902, -198, -189, False) + sm.spawnMob(9300907, -198, -189, False) + sm.chat("Stage cleared") \ No newline at end of file diff --git a/scripts/reactor/JPludiMob0.py b/scripts/reactor/JPludiMob0.py new file mode 100755 index 0000000..c3369af --- /dev/null +++ b/scripts/reactor/JPludiMob0.py @@ -0,0 +1,7 @@ +# Festive Box | Used in Ludi Maze + +sm.chat("owo cute message here") +for i in range (10): + sm.spawnMob(5130107, -40, -120, False) + sm.spawnMob(5130108, -40, -120, False) +sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/JPludiMob1.py b/scripts/reactor/JPludiMob1.py new file mode 100755 index 0000000..95ea941 --- /dev/null +++ b/scripts/reactor/JPludiMob1.py @@ -0,0 +1,3 @@ +# Festive Box | Used in Ludi Maze + +sm.chat("pludi1") diff --git a/scripts/reactor/JPludiMob2.py b/scripts/reactor/JPludiMob2.py new file mode 100755 index 0000000..5a8f8bf --- /dev/null +++ b/scripts/reactor/JPludiMob2.py @@ -0,0 +1,7 @@ +# Festive Box | Used in Ludi Maze + +sm.chat("uwu mordred big support") +for i in range (10): + sm.spawnMob(4230117, 95, 145, False) + sm.spawnMob(4230118, 95, 145, False) +sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/JPludiMob3.py b/scripts/reactor/JPludiMob3.py new file mode 100755 index 0000000..265216f --- /dev/null +++ b/scripts/reactor/JPludiMob3.py @@ -0,0 +1,7 @@ +# Festive Box | Used in Ludi Maze + +sm.chat("dm sjonnie for cute") +for i in range (10): + sm.spawnMob(2600229, 155, 27, False) + sm.spawnMob(4230107, 155, 27, False) +sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/balogItem0.py b/scripts/reactor/balogItem0.py new file mode 100755 index 0000000..e69de29 diff --git a/scripts/reactor/banbanChaos.py b/scripts/reactor/banbanChaos.py new file mode 100755 index 0000000..d101749 --- /dev/null +++ b/scripts/reactor/banbanChaos.py @@ -0,0 +1,5 @@ +chaosVonBon = 8910000 +if chr.getInstance() is not None and reactor.getHitCount() == 0: + sm.spawnMob(chaosVonBon, -135, 455, False) + reactor.incHitCount() + sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/banbanNormal.py b/scripts/reactor/banbanNormal.py new file mode 100755 index 0000000..a03c060 --- /dev/null +++ b/scripts/reactor/banbanNormal.py @@ -0,0 +1,10 @@ + +if chr.getInstance() is not None and reactor.getHitCount() == 0: + # global hitCount + # hitCount += 1 + # sm.chat(str(hitCount)) + # if hitCount >= 1: + reactor.incHitCount() + sm.spawnMob(9303154, -135, 455, False) + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/bellumChaos.py b/scripts/reactor/bellumChaos.py new file mode 100755 index 0000000..e1b5e14 --- /dev/null +++ b/scripts/reactor/bellumChaos.py @@ -0,0 +1,5 @@ +from net.swordie.ms.enums import WeatherEffNoticeType +if chr.getInstance() is not None: + sm.removeReactor() + sm.invokeAfterDelay(1500, "spawnMob", 8930000, -200, 440, False) + sm.showWeatherNotice("You ignore my warnings?! I will show you no mercy!", WeatherEffNoticeType.BossVellum, 10000) \ No newline at end of file diff --git a/scripts/reactor/bellumNormal.py b/scripts/reactor/bellumNormal.py new file mode 100755 index 0000000..8bb9803 --- /dev/null +++ b/scripts/reactor/bellumNormal.py @@ -0,0 +1,6 @@ +from net.swordie.ms.enums import WeatherEffNoticeType +if chr.getInstance() is not None: + sm.removeReactor() + sm.invokeAfterDelay(1500, "spawnMob", 9400942, -200, 440, False) + sm.showWeatherNotice("You ignore my warnings?! I will show you no mercy!", WeatherEffNoticeType.BossVellum, 10000) + sm.dispose() diff --git a/scripts/reactor/chaoshontaleBoss.py b/scripts/reactor/chaoshontaleBoss.py new file mode 100755 index 0000000..d8026da --- /dev/null +++ b/scripts/reactor/chaoshontaleBoss.py @@ -0,0 +1,16 @@ +from net.swordie.ms.scripts import ScriptType + +reactor.incHitCount() +reactor.increaseState() +if reactor.getHitCount() >= 4: + sm.removeReactor() + sm.startScript(0, "HorntailFight", ScriptType.Field) + sm.spawnMob(8810102, 95, 260, False) + sm.spawnMob(8810103, 95, 260, False) + sm.spawnMob(8810104, 95, 260, False) + sm.spawnMob(8810105, 95, 260, False) + sm.spawnMob(8810106, 95, 260, False) + sm.spawnMob(8810107, 95, 260, False) + sm.spawnMob(8810108, 95, 260, False) + sm.spawnMob(8810109, 95, 260, False) + sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/davyItem0.py b/scripts/reactor/davyItem0.py new file mode 100755 index 0000000..39899b6 --- /dev/null +++ b/scripts/reactor/davyItem0.py @@ -0,0 +1,13 @@ +# Chest in the Lord Pirate PQ +LORD_PIRATE_ENRAGED_KRU = 9300115 +LORD_PIRATE_ENRAGED_CAPTAIN = 9300116 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + i = 1 + while i < 10: + sm.spawnMob(LORD_PIRATE_ENRAGED_KRU, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + sm.spawnMob(LORD_PIRATE_ENRAGED_CAPTAIN, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + i += 1 + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/davyMob0.py b/scripts/reactor/davyMob0.py new file mode 100755 index 0000000..1296358 --- /dev/null +++ b/scripts/reactor/davyMob0.py @@ -0,0 +1,13 @@ +# Chest in the Lord Pirate Party Quest +LORD_PIRATE_GINSENG_JAR = 9300109 +LORD_PIRATE_BELLFLOWER = 9300110 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + i = 1 + while i < 5: + sm.spawnMob(LORD_PIRATE_GINSENG_JAR, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + sm.spawnMob(LORD_PIRATE_BELLFLOWER, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + i += 1 + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/davyMob1.py b/scripts/reactor/davyMob1.py new file mode 100755 index 0000000..437e868 --- /dev/null +++ b/scripts/reactor/davyMob1.py @@ -0,0 +1,13 @@ +# Chest in the Lord Pirate PQ +LORD_PIRATE_ENRAGED_KRU = 9300115 +LORD_PIRATE_ENRAGED_CAPTAIN = 9300116 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + i = 1 + while i < 5: + sm.spawnMob(LORD_PIRATE_ENRAGED_KRU, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + sm.spawnMob(LORD_PIRATE_ENRAGED_CAPTAIN, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + i += 1 + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/davyScript0.py b/scripts/reactor/davyScript0.py new file mode 100755 index 0000000..6256125 --- /dev/null +++ b/scripts/reactor/davyScript0.py @@ -0,0 +1,10 @@ +# To close the door in Lord Pirate PQ +OLD_METAL_KEY = 4001117 +hitCount = 0 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + if sm.hasItem(OLD_METAL_KEY): + sm.consumeItem(OLD_METAL_KEY) + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/davyScript1.py b/scripts/reactor/davyScript1.py new file mode 100755 index 0000000..6723c51 --- /dev/null +++ b/scripts/reactor/davyScript1.py @@ -0,0 +1,9 @@ +# To close the door in Lord Pirate PQ +OLD_METAL_KEY = 4001117 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + if sm.hasItem(OLD_METAL_KEY): + sm.consumeItem(OLD_METAL_KEY) + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/davyScript2.py b/scripts/reactor/davyScript2.py new file mode 100755 index 0000000..6723c51 --- /dev/null +++ b/scripts/reactor/davyScript2.py @@ -0,0 +1,9 @@ +# To close the door in Lord Pirate PQ +OLD_METAL_KEY = 4001117 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + if sm.hasItem(OLD_METAL_KEY): + sm.consumeItem(OLD_METAL_KEY) + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/davyScript3.py b/scripts/reactor/davyScript3.py new file mode 100755 index 0000000..6723c51 --- /dev/null +++ b/scripts/reactor/davyScript3.py @@ -0,0 +1,9 @@ +# To close the door in Lord Pirate PQ +OLD_METAL_KEY = 4001117 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + if sm.hasItem(OLD_METAL_KEY): + sm.consumeItem(OLD_METAL_KEY) + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/dual_ball00.py b/scripts/reactor/dual_ball00.py new file mode 100755 index 0000000..1204051 --- /dev/null +++ b/scripts/reactor/dual_ball00.py @@ -0,0 +1,2 @@ +sm.dropItem(2430071, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY()) +sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/easyhontaleBoss.py b/scripts/reactor/easyhontaleBoss.py new file mode 100755 index 0000000..d1f1179 --- /dev/null +++ b/scripts/reactor/easyhontaleBoss.py @@ -0,0 +1,16 @@ +from net.swordie.ms.scripts import ScriptType + +reactor.incHitCount() +reactor.increaseState() +if reactor.getHitCount() >= 4: + sm.removeReactor() + sm.startScript(0, "HorntailFight", ScriptType.Field) + sm.spawnMob(8810202, 95, 260, False) + sm.spawnMob(8810203, 95, 260, False) + sm.spawnMob(8810204, 95, 260, False) + sm.spawnMob(8810205, 95, 260, False) + sm.spawnMob(8810206, 95, 260, False) + sm.spawnMob(8810207, 95, 260, False) + sm.spawnMob(8810208, 95, 260, False) + sm.spawnMob(8810209, 95, 260, False) + sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/edelItem0.py b/scripts/reactor/edelItem0.py new file mode 100755 index 0000000..ccce71c --- /dev/null +++ b/scripts/reactor/edelItem0.py @@ -0,0 +1,11 @@ +# Acorn tree reactor | edelstein +REQUEST_FROM_A_DOCTOR = 23003 +WHOLE_ACORN = 4034738 + +reactor.incHitCount() + +if reactor.getHitCount() >= 3: + if sm.hasQuest(REQUEST_FROM_A_DOCTOR) and not sm.hasItem(WHOLE_ACORN, 2): + sm.dropItem(WHOLE_ACORN, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY()) + + sm.removeReactor() diff --git a/scripts/reactor/erebMob0.py b/scripts/reactor/erebMob0.py new file mode 100755 index 0000000..b35cc37 --- /dev/null +++ b/scripts/reactor/erebMob0.py @@ -0,0 +1,11 @@ +# Spawns mobs that drop Proof of Exam for Cygnus tutorial. + +TRAINING_TIMU = 9300732 + +reactor.incHitCount() + +if reactor.getHitCount() >= 3: + for x in range(2): + sm.spawnMobOnChar(TRAINING_TIMU) + + sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/fake_timecapsule.py b/scripts/reactor/fake_timecapsule.py new file mode 100755 index 0000000..9cdd305 --- /dev/null +++ b/scripts/reactor/fake_timecapsule.py @@ -0,0 +1,4 @@ +reactor.incHitCount() +reactor.increaseState() +if reactor.getHitCount() >= 4: + sm.removeReactor() diff --git a/scripts/reactor/farmItem0.py b/scripts/reactor/farmItem0.py new file mode 100755 index 0000000..6c565d5 --- /dev/null +++ b/scripts/reactor/farmItem0.py @@ -0,0 +1,7 @@ +reactor = sm.getReactor(objectID) +if reactor is not None and sm.hasQuest(22502): + reactor.incHitCount() + if reactor.getHitCount() >= 5: + sm.dropItem(4032452,sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY()) + reactor.setHitCount(0) + sm.dispose() \ No newline at end of file diff --git a/scripts/reactor/gather_Item0.py b/scripts/reactor/gather_Item0.py new file mode 100755 index 0000000..0af805a --- /dev/null +++ b/scripts/reactor/gather_Item0.py @@ -0,0 +1,120 @@ +# https://strategywiki.org/wiki/MapleStory/Professions +# this was the first big script i did so forgive the mess lol + +import random + +# unsure if all of these are handled here but they are all grouped together and look the same so.. idk + +PRIMAL_ESSENCE = 4021022 # Occasionally found from Heartstones, Gold Flowers, Mysterious Ore Veins, Mysterious Legendary Ore Veins, Mysterious Herbs, and Mysterious Legendary Herbs +DUSK_ESSENCE = 4023023 # occasionally found from Heartstones, Gold Flowers, Mysterious Ore Veins, and Mysterious Herbs +BRILLIANT_DUSK_ESSENCE = 4023024 # occasionally found from Mysterious Legendary Ore Veins and Mysterious Herbs +PIECE_OF_TIME = 4020009 + +UNRELENTING_FLAME = 4023025 # occasionally found in Mysterious Herbs +FOREVER_UNRELENTING_FLAME = 4023026 # occasionally found in Mysterious Legendary Herbs + +CUBIC_BLADE = 4021041 # Occasionally found in Mysterious Ore Veins +CUBIC_CHAOS_BLADE = 4021042 # Occasionally found in Mysterious Legendary Ore Veins + +# legend: [REACTOR_ID], [DROP_ID], [DROP_ID] + +RANDOM_POWDER = [4007001, 4007002, 4007003, 4007004, 4007005, 4007006, 4007007] +RANDOM_ADVANCED = [PRIMAL_ESSENCE, DUSK_ESSENCE, PIECE_OF_TIME] + +# basic +HERBS = [ +[100000, 4022000, 4022001], # marjorama seed & flower +[100010, 4022000, 4022001], # marjorama seed & flower +[100001, 4022002, 4022003], # lavender seed & flower +[100002, 4022004, 4022005], # rosemary seed & flower +[100003, 4022006, 4022007], # mandarin seed & flower +[100004, 4022008, 4022009, 4022010], # lemon balm seed & flower, and peppermint flower +[100005, 4022011, 4022012], # jasmine seed & flower +[100006, 4022013, 4022014], # tea tree seed & flower +[100007, 4022015, 4022016], # chamomille seed & flower +[100008, 4022017, 4022018], # patchouli seed & flower +[100009, 4022019, 4022020, 4022021]] # juniper berry seed & flower, and hyssop flower + +# advanced +GOLD_FLOWER = 100011 +ADVANCED_HERBS = [ +[100012, UNRELENTING_FLAME, BRILLIANT_DUSK_ESSENCE], # mysterious herb +[100013, UNRELENTING_FLAME, FOREVER_UNRELENTING_FLAME, BRILLIANT_DUSK_ESSENCE]] # mysterious legendary herb + +# basic +VEINS = [ +[200000, 4010004, 4020004], # silver and opal ore +[200010, 4010004, 4020004], # silver and opal ore +[200001, 4010005, 4020001], # orihalcon and amethyst ore +[200002, 4010001, 4020005], # steel and sapphire ore +[200003, 4010003, 4010000], # adamantium and bronze ore +[200004, 4010002, 4020003, 4004002], # mithril and emerald ore, and dex crystal ore +[200005, 4010006, 4020006], # gold and topaz ore +[200006, 4020002, 4020007], # aquamarine and diamond ore +[200007, 4020000, 4004000], # garnet and power crystal ore +[200008, 4020008, 4004004], # black crystal and dark crystal ore +[200009, 4004001, 4004003, 4010007]] # luk crystal and wisdom crystal ore, and lidium ore + + +# advanced +HEARTSTONE = 200011 +ADVANCED_VEINS = [ +[200012, CUBIC_BLADE, BRILLIANT_DUSK_ESSENCE], # MYSTERIOUS_VEIN +[200013, BRILLIANT_DUSK_ESSENCE, CUBIC_BLADE, CUBIC_CHAOS_BLADE]] # MYSTERIOUS_LEGENDARY_VEIN + +OTHER = [ +[1209002]] # nautilus quest herb + +RANDOM_FLOWER = [4034886, 4034887, 4034888, 4034889, 4034890, 4034891, 4034892] # drops when reactor isn't coded + +reward = 0 + +# iterate herbs +for i in HERBS: + if parentID in i: + i.remove(parentID) + reward = random.choice(i) + break + +# iterate advanced herbs +if reward == 0: + for i in ADVANCED_HERBS: + if parentID in i: + i.remove(parentID) + reward = random.choice(i + RANDOM_ADVANCED) + break + +# iterate veins +if reward == 0: + for i in VEINS: + if parentID in i: + i.remove(parentID) + reward = random.choice(i) + break + +# iterate advanced veins +if reward == 0: + for i in ADVANCED_VEINS: + if parentID in i: + i.remove(parentID) + reward = random.choice(i + RANDOM_ADVANCED) + break + +if reward == 0: + if parentID == HEARTSTONE or parentID == GOLD_FLOWER: + reward = random.choice(RANDOM_POWDER + RANDOM_ADVANCED) + +#if reward > 0: +# for i in OTHER: +# if parentID in i: +# i.remove(parentID) +# reward = random.choice(i) + +pos = sm.getPosition(objectID) +sm.removeReactor() + +if reward <= 0: + reward = random.choice(RANDOM_FLOWER) + sm.systemMessage("Oopsie, it seems like [" + str(parentID) + "] this cute little guy doesn't know what to do! Alert staff so they can help him find his purpose. :)") + +sm.dropItem(reward, pos.getX(), pos.getY()) \ No newline at end of file diff --git a/scripts/reactor/glpqskill0.py b/scripts/reactor/glpqskill0.py new file mode 100755 index 0000000..5f038d6 --- /dev/null +++ b/scripts/reactor/glpqskill0.py @@ -0,0 +1,27 @@ + +# Warrior Sigil - 6109000 + +WarriorJobs = [100,110,111,112,120,121,122,130,131,132,1100,1110,1111,1112,2100,2110,2111,2112,3100,3110,3111,3112,3101,3120,3121,3122,3700,3710,3711,3712,4100,4110,4111,4112,5100,5110,5111,5112,6100,6110,6111,6112,10000,10100,10110,10111,10112] +FieldProperties = ["WarriorSigil","ArcherSigil","MageSigil","ThiefSigil","PirateSigil"] +SigilIDS = [6109000,6109001,6109002,6109003,6109004] + +reactor.incHitCount() + +if sm.getFieldID() == 610030200: + if chr.getJob() in WarriorJobs: + if reactor.getHitCount() == 1: + sm.changeReactorState(6109000,1,1,1) + sm.chatBlue("The Warrior Sigil has been activated!") + sm.setFieldProperty("WarriorSigil",True) + if sm.fieldHasProperty("ArcherSigil") and sm.fieldHasProperty("MageSigil") and sm.fieldHasProperty("ThiefSigil") and sm.fieldHasProperty("PirateSigil"): + sm.chatBlue("The Antellion grants you access to the next portal! proceed.") + sm.setFieldProperty("Stage1Cleared", True) + sm.dispose() + else: + for x in range(len(FieldProperties)): + sm.setFieldProperty(str(FieldProperties[x]), False) + sm.chatRed("Someone has tampered with the wrong Sigil!") + sm.chatRed("All of the Sigils have been reset!") + for x in range(len(SigilIDS)): + sm.changeReactorState(int(SigilIDS[x]),0,0,0) +#if sm.getFieldID() == 610030300: diff --git a/scripts/reactor/glpqskill1.py b/scripts/reactor/glpqskill1.py new file mode 100755 index 0000000..6ecf926 --- /dev/null +++ b/scripts/reactor/glpqskill1.py @@ -0,0 +1,26 @@ + +# Archer Sigil - 6109001 + +ArcherJobs = [300,310,311,312,320,321,322,1300,1310,1311,1312,2002,2300,2310,2311,2312,3300,3310,3311,3312] +FieldProperties = ["WarriorSigil","ArcherSigil","MageSigil","ThiefSigil","PirateSigil"] +SigilIDS = [6109000,6109001,6109002,6109003,6109004] + +reactor.incHitCount() + +if sm.getFieldID() == 610030200: + if chr.getJob() in ArcherJobs: + if reactor.getHitCount() == 5: + sm.changeReactorState(6109001,1,1,1) + sm.chatBlue("The Archer Sigil has been activated!") + sm.setFieldProperty("ArcherSigil",True) + if sm.fieldHasProperty("WarriorSigil") and sm.fieldHasProperty("MageSigil") and sm.fieldHasProperty("ThiefSigil") and sm.fieldHasProperty("PirateSigil"): + sm.chatBlue("The Antellion grants you access to the next portal! proceed.") + sm.setFieldProperty("Stage1Cleared", True) + sm.dispose() + else: + for x in range(len(FieldProperties)): + sm.setFieldProperty(str(FieldProperties[x]), False) + sm.chatRed("Someone has tampered with the wrong Sigil!") + sm.chatRed("All of the Sigils have been reset!") + for x in range(len(SigilIDS)): + sm.changeReactorState(int(SigilIDS[x]),0,0,0) \ No newline at end of file diff --git a/scripts/reactor/glpqskill2.py b/scripts/reactor/glpqskill2.py new file mode 100755 index 0000000..9041ebc --- /dev/null +++ b/scripts/reactor/glpqskill2.py @@ -0,0 +1,26 @@ + +# Mage Sigil - 6109002 + +MageJobs = [200,210,211,212,220,221,222,230,231,232,1200,1210,1211,1212,2210,2212,2214,2218,2004,2700,2710,2711,2712,3200,3210,3211,3212,4200,4210,4211,4212,11200,11210,11211,11212,14000,14200,14210,14211,14212] +FieldProperties = ["WarriorSigil","ArcherSigil","MageSigil","ThiefSigil","PirateSigil"] +SigilIDS = [6109000,6109001,6109002,6109003,6109004] + +reactor.incHitCount() + +if sm.getFieldID() == 610030200: + if chr.getJob() in MageJobs: + if reactor.getHitCount() == 5: + sm.changeReactorState(6109002,1,1,1) + sm.chatBlue("The Mage Sigil has been activated!") + sm.setFieldProperty("MageSigil",True) + if sm.fieldHasProperty("WarriorSigil") and sm.fieldHasProperty("ArcherSigil") and sm.fieldHasProperty("ThiefSigil") and sm.fieldHasProperty("PirateSigil"): + sm.chatBlue("The Antellion grants you access to the next portal! proceed.") + sm.setFieldProperty("Stage1Cleared", True) + sm.dispose() + else: + for x in range(len(FieldProperties)): + sm.setFieldProperty(str(FieldProperties[x]), False) + sm.chatRed("Someone has tampered with the wrong Sigil!") + sm.chatRed("All of the Sigils have been reset!") + for x in range(len(SigilIDS)): + sm.changeReactorState(int(SigilIDS[x]),0,0,0) \ No newline at end of file diff --git a/scripts/reactor/glpqskill3.py b/scripts/reactor/glpqskill3.py new file mode 100755 index 0000000..a9995b9 --- /dev/null +++ b/scripts/reactor/glpqskill3.py @@ -0,0 +1,26 @@ + +# Thief Sigil - 6109000 + +ThiefJobs = [400,410,411,412,420,421,422,430,431,432,433,434,1400,1400,1410,1411,1412,2003,2400,2410,2411,2412,3600,3610,3611,3612] +FieldProperties = ["WarriorSigil","ArcherSigil","MageSigil","ThiefSigil","PirateSigil"] +SigilIDS = [6109000,6109001,6109002,6109003,6109004] + +reactor.incHitCount() + +if sm.getFieldID() == 610030200: + if chr.getJob() in ThiefJobs: + if reactor.getHitCount() == 5: + sm.changeReactorState(6109003,1,1,1) + sm.chatBlue("The Thief Sigil has been activated!") + sm.setFieldProperty("ThiefSigil",True) + if sm.fieldHasProperty("WarriorSigil") and sm.fieldHasProperty("ArcherSigil") and sm.fieldHasProperty("MageSigil") and sm.fieldHasProperty("PirateSigil"): + sm.chatBlue("The Antellion grants you access to the next portal! proceed.") + sm.setFieldProperty("Stage1Cleared", True) + sm.dispose() + else: + for x in range(len(FieldProperties)): + sm.setFieldProperty(str(FieldProperties[x]), False) + sm.chatRed("Someone has tampered with the wrong Sigil!") + sm.chatRed("All of the Sigils have been reset!") + for x in range(len(SigilIDS)): + sm.changeReactorState(int(SigilIDS[x]),0,0,0) \ No newline at end of file diff --git a/scripts/reactor/glpqskill4.py b/scripts/reactor/glpqskill4.py new file mode 100755 index 0000000..2d1bd1e --- /dev/null +++ b/scripts/reactor/glpqskill4.py @@ -0,0 +1,26 @@ + +# Pirate Sigil - 6109000 + +PirateJobs = [500,501,508,510,511,512,520,521,522,530,531,532,570,571,572,1500,1510,1511,1512,2005,2500,2510,2511,2512,3500,3510,3511,3512,3600,3610,3611,3612,6001,6500,6510,6511,6512] +FieldProperties = ["WarriorSigil","ArcherSigil","MageSigil","ThiefSigil","PirateSigil"] +SigilIDS = [6109000,6109001,6109002,6109003,6109004] + +reactor.incHitCount() + +if sm.getFieldID() == 610030200: + if chr.getJob() in PirateJobs: + if reactor.getHitCount() == 5: + sm.changeReactorState(6109004,1,1,1) + sm.chatBlue("The Pirate Sigil has been activated!") + sm.setFieldProperty("PirateSigil",True) + if sm.fieldHasProperty("WarriorSigil") and sm.fieldHasProperty("ArcherSigil") and sm.fieldHasProperty("MageSigil") and sm.fieldHasProperty("ThiefSigil"): + sm.chatBlue("The Antellion grants you access to the next portal! proceed.") + sm.setFieldProperty("Stage1Cleared", True) + sm.dispose() + else: + for x in range(len(FieldProperties)): + sm.setFieldProperty(str(FieldProperties[x]), False) + sm.chatRed("Someone has tampered with the wrong Sigil!") + sm.chatRed("All of the Sigils have been reset!") + for x in range(len(SigilIDS)): + sm.changeReactorState(int(SigilIDS[x]),0,0,0) \ No newline at end of file diff --git a/scripts/reactor/hontaleBoss.py b/scripts/reactor/hontaleBoss.py new file mode 100755 index 0000000..720df67 --- /dev/null +++ b/scripts/reactor/hontaleBoss.py @@ -0,0 +1,7 @@ +from net.swordie.ms.scripts import ScriptType + +reactor.incHitCount() +reactor.increaseState() +if reactor.getHitCount() == 4: + sm.removeReactor() + sm.startScript(0, "HorntailFight", ScriptType.Field) \ No newline at end of file diff --git a/scripts/reactor/mBoxItem0.py b/scripts/reactor/mBoxItem0.py new file mode 100755 index 0000000..18b3fac --- /dev/null +++ b/scripts/reactor/mBoxItem0.py @@ -0,0 +1,31 @@ +# Maple Road - Inside the Dangerous Forest/South Perry Reactor + +# Reactor Tutorial Maple Island Explorer +DANGEROUS_FOREST = 4000014 +FIRST_EXPLORER_GIFT_BOX = 4033915 + +# Maple Island Explorer Storyline +SOUTH_PERRY = 4000030 +FLUSTERED_EXPLORER = 32213 +BOAT_BOARDING_TICKET = 4033914 + +KINDLING = 4032980 # Quest Item for Cannoneer Intro + +reactor.incHitCount() +reactor.increaseState() + +if reactor.getHitCount() < 4: + sm.dispose() + +x, y = sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY() + +if sm.getFieldID() == DANGEROUS_FOREST: + sm.dropItem(FIRST_EXPLORER_GIFT_BOX, x, y) +elif sm.getFieldID() == SOUTH_PERRY: + if sm.hasQuest(FLUSTERED_EXPLORER): + if not sm.hasItem(BOAT_BOARDING_TICKET): + sm.dropItem(BOAT_BOARDING_TICKET, x, y) +else: + sm.dropItem(KINDLING, x, y) + +sm.removeReactor() diff --git a/scripts/reactor/mihailItem00.py b/scripts/reactor/mihailItem00.py new file mode 100755 index 0000000..60c9a36 --- /dev/null +++ b/scripts/reactor/mihailItem00.py @@ -0,0 +1,16 @@ +STATE_LENGTH = [156, 146, 136, 115, 105, 95, 84, 43, 33, 0] +BIGBY_REACTOR = 1301000 +BIGBY_MOB = 9001051 +EGG = 4033196 + +if sm.hasQuest(20033): + if sm.getReactorState(BIGBY_REACTOR) < 10: + sm.dropItem(EGG, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY()) + sm.increaseReactorState(BIGBY_REACTOR, STATE_LENGTH[sm.getReactorState(BIGBY_REACTOR)]) + sm.removeReactor() + if sm.getReactorState(BIGBY_REACTOR) == 10: + sm.systemMessage("Bigby's leash has torn into two.") + sm.spawnMob(BIGBY_MOB, 229, 65, False) + sm.dispose() + + \ No newline at end of file diff --git a/scripts/reactor/periFlower0.py b/scripts/reactor/periFlower0.py new file mode 100755 index 0000000..7f24587 --- /dev/null +++ b/scripts/reactor/periFlower0.py @@ -0,0 +1,4 @@ +# fire flower in perion mountains + +sm.dropItem(4033051, sm.getObjectPositionX(), sm.getObjectPositionY()) +sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/platformer_trap.py b/scripts/reactor/platformer_trap.py new file mode 100755 index 0000000..ea2e6bf --- /dev/null +++ b/scripts/reactor/platformer_trap.py @@ -0,0 +1 @@ +sm.teleportInField(1000, 0) diff --git a/scripts/reactor/platformer_trap0.py b/scripts/reactor/platformer_trap0.py new file mode 100755 index 0000000..9938c42 --- /dev/null +++ b/scripts/reactor/platformer_trap0.py @@ -0,0 +1 @@ +sm.teleportInField(1000, 0) \ No newline at end of file diff --git a/scripts/reactor/platformer_trap1.py b/scripts/reactor/platformer_trap1.py new file mode 100755 index 0000000..9938c42 --- /dev/null +++ b/scripts/reactor/platformer_trap1.py @@ -0,0 +1 @@ +sm.teleportInField(1000, 0) \ No newline at end of file diff --git a/scripts/reactor/platformer_trap3.py b/scripts/reactor/platformer_trap3.py new file mode 100755 index 0000000..9938c42 --- /dev/null +++ b/scripts/reactor/platformer_trap3.py @@ -0,0 +1 @@ +sm.teleportInField(1000, 0) \ No newline at end of file diff --git a/scripts/reactor/platformer_trap4.py b/scripts/reactor/platformer_trap4.py new file mode 100755 index 0000000..9938c42 --- /dev/null +++ b/scripts/reactor/platformer_trap4.py @@ -0,0 +1 @@ +sm.teleportInField(1000, 0) \ No newline at end of file diff --git a/scripts/reactor/prisonBreakItem0.py b/scripts/reactor/prisonBreakItem0.py new file mode 100755 index 0000000..bbc6e84 --- /dev/null +++ b/scripts/reactor/prisonBreakItem0.py @@ -0,0 +1,8 @@ +# Key Chest (921160600) | Drops a key on the map | Used in Escape Party Quest +PRISON_KEY = 4001528 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + sm.dropItem(PRISON_KEY, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY()) + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/prisonBreakMob0.py b/scripts/reactor/prisonBreakMob0.py new file mode 100755 index 0000000..18f7539 --- /dev/null +++ b/scripts/reactor/prisonBreakMob0.py @@ -0,0 +1,15 @@ +# Key Chest (921160600) | Spawns mobs & Drops a key | Used in Escape Party Quest +PRISON_GUARD_BOAR = 9300452 +PRISON_GUARD_RHINO = 9300453 +PRISON_KEY = 4001528 + +reactor.incHitCount() +if reactor.getHitCount() >= 1: + i = 0 + while i < 10: + sm.spawnMob(PRISON_GUARD_BOAR, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + sm.spawnMob(PRISON_GUARD_RHINO, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY(), False) + i += 1 + sm.dropItem(PRISON_KEY, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY()) + sm.removeReactor() + sm.dispose() diff --git a/scripts/reactor/queenChaos.py b/scripts/reactor/queenChaos.py new file mode 100755 index 0000000..3949a24 --- /dev/null +++ b/scripts/reactor/queenChaos.py @@ -0,0 +1,14 @@ +from net.swordie.ms.enums import WeatherEffNoticeType + +chaosQueenId = 8920000 +if chr.getInstance() is not None: + if sm.hasFieldProperty("QueenSummoned"): + sm.removeReactor() + sm.setFieldProperty("QueenSummoned", False) + sm.dispose() + reactor.incHitCount() + sm.showWeatherNotice("Please allow me to mourn over your imminent demise.", WeatherEffNoticeType.BossCrimsonQueenCrownPink, 10000) + if reactor.getHitCount() == 5: + sm.spawnMob(chaosQueenId, 37, 135, False) + sm.removeReactor() + sm.setFieldProperty("QueenSummoned", True) \ No newline at end of file diff --git a/scripts/reactor/queenNormal.py b/scripts/reactor/queenNormal.py new file mode 100755 index 0000000..56eedb6 --- /dev/null +++ b/scripts/reactor/queenNormal.py @@ -0,0 +1,17 @@ +from net.swordie.ms.enums import WeatherEffNoticeType +from time import sleep +if chr.getInstance() is not None: + QueenId = 8920100 + if field.hasProperty("QueenSummoned"): + sm.removeReactor() + field.setProperty("QueenSummoned", False) + sm.dispose() + reactor.incHitCount() + sm.showWeatherNotice("Please allow me to mourn over your imminent demise.", WeatherEffNoticeType.BossCrimsonQueenCrownPink, 10000) + if reactor.getHitCount() == 5: + sm.spawnMob(QueenId, 37, 135, False) + sm.removeReactor() + field.setProperty("QueenSummoned", True) + sleep(2) + sm.removeReactor() + sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/real_timecapsule.py b/scripts/reactor/real_timecapsule.py new file mode 100755 index 0000000..9530e3b --- /dev/null +++ b/scripts/reactor/real_timecapsule.py @@ -0,0 +1,16 @@ +reactor.incHitCount() +reactor.increaseState() +if reactor.getHitCount() >= 4: + sm.removeReactor() + sm.lockInGameUI(True) + sm.flipDialoguePlayerAsSpeaker() + sm.removeEscapeButton() + # todo: show time capsule in below dialog + sm.sendNext("This ## must be it. I know we promised to open it together guys, but I'm sure you all would understand.") + sm.sendSay("This is definite Phantom's. A scroll? Hm, Luminious must've put it in. This whetstone must've been used to sharpen Maha. He DOES cherish Maha...") + sm.sendSay("What's this black thing? Ah, Afrien's scale. And this...the token fo the Ruler of the Elves. Wonder if Mercedes really meant to put this in here. I thought this is supposed to be really important.") + sm.sendSay("And the last is...") + # todo: show picture of heroes + sm.lockInGameUI(False) + sm.createQuestWithQRValue(38075, "clear") + sm.completeQuest(38075) diff --git a/scripts/reactor/rienItem0.py b/scripts/reactor/rienItem0.py new file mode 100755 index 0000000..3f89c2d --- /dev/null +++ b/scripts/reactor/rienItem0.py @@ -0,0 +1,3 @@ +# 140090300 +sm.dropItem(4032310, sm.getPosition(objectID).getX(), sm.getPosition(objectID).getY()) +sm.removeReactor() \ No newline at end of file diff --git a/scripts/reactor/undefined.py b/scripts/reactor/undefined.py new file mode 100755 index 0000000..0c7e084 --- /dev/null +++ b/scripts/reactor/undefined.py @@ -0,0 +1,2 @@ +sm.chat("(Reactor) Not coded. Admin was lazy and didn't fix this :). ID: " + str(parentID)) +sm.dispose() diff --git a/sql/1 - InitTables_characters.sql b/sql/1 - InitTables_characters.sql new file mode 100755 index 0000000..bffd43c --- /dev/null +++ b/sql/1 - InitTables_characters.sql @@ -0,0 +1,1147 @@ +set FOREIGN_KEY_CHECKS = 0; +drop table if exists + users, + accounts, + damageskinsavedatas, + matrix_records, + friends, + linkskills, + monster_collection_rewards, + monster_collection_mobs, + monster_collection_explorations, + monster_collections, + macroskills, + macros, + familiars, + stolenskills, + chosenskills, + skillcooltimes, + hyperrockfields, + characterpotentials, + test, + skills, + characters, + avatardata, + alliance_gradenames, + alliances, + keymaps, + funckeymap, + offenses, + offense_managers, + characterstats, + hairequips, + unseenequips, + petids, + totems, + spset, + extendsp, + noncombatstatdaylimit, + systemtimes, + charactercards, + avatarlook, + equips, + petitems, + items, + auction_items, + inventories, + questprogressrequirements, + questprogressitemrequirements, + questprogresslevelrequirements, + questprogressmoneyrequirements, + questprogressmobrequirements, + questlists, + questmanagers, + quests, + questlists_ex, + quests_ex, + bbs_replies, + bbs_records, + gradenames, + guildmembers, + guildrequestors, + guildskills, + guildskill, + guilds, + monsterbookcards, + monsterbookinfos, + trunks, + towerchairs, + merchantitems, + cashiteminfos, + unions, + employeetrunk, + eventscooltimes, + sdc, + unionboards, + unionmembers, + achievements, + dailychallenge, + ignoreddrops, + hottimerewards, + bosscooldowns, + beautyalbuminventory, + charactercard +; + +create table merchantitems ( + id bigint not null auto_increment, + merchantitemid int, + bundles int, + price long, + employeetrunkid int, + primary key (id) +); + +create table employeetrunk ( + id int(11) not null auto_increment, + money bigint(20) default '0', + primary key (id) +); + +create table trunks +( + id int not null auto_increment, + slotcount tinyint, + money bigint, + primary key (id) +); + +create table cashiteminfos +( + id bigint not null auto_increment, + accountid int, + characterid int, + commodityid int, + buycharacterid varchar(255), + paybackrate int, + discount double, + orderno int, + productno int, + refundable boolean, + sourceflag tinyint, + storebank boolean, + itemid int, + trunkid int, + position int, + primary key (id) +); + +create table quests +( + id bigint not null auto_increment, + qrkey int, + qrvalue varchar(255), + status int, + completedtime datetime, + primary key (id) +); + +create table quests_ex ( + id bigint not null auto_increment, + charid int, + questid int, + qrValue varchar(255), + primary key (id), + foreign key (charid) references characters(id) +); + +create table questmanagers +( + id bigint not null auto_increment, + primary key (id) +); + +create table questlists +( + questlist_id bigint not null auto_increment, + questmanager_id bigint, + questid int, + fk_questid bigint, + primary key (questlist_id), + foreign key (questmanager_id) references questmanagers (id) on delete cascade, + foreign key (fk_questid) references quests (id) +); + +create table questprogressrequirements +( + id bigint not null auto_increment, + orderNum int, + progresstype varchar(255), + questid bigint, + unitid int, + requiredcount int, + currentcount int, + primary key (id), + foreign key (questid) references quests (id) on delete cascade +); + +create table inventories +( + id int not null auto_increment, + type int, + slots smallint, + primary key (id) +); + +create table items +( + id bigint not null auto_increment, + inventoryid int, # item can be inside an inventory or storage, so cannot be a foreign key :( + trunkid int, + itemid int, + bagindex int, + cashitemserialnumber bigint, + dateexpire datetime, + invtype int, + type int, + iscash boolean, + quantity int, + owner varchar(255), + primary key (id) +); + +create table auction_items +( + id int not null auto_increment, + type int, + accountid int, + charid int, + state int, + itemType int, + charName varchar(255), + price bigint, + secondprice bigint, + directprice bigint, + endDate datetime, + biduserid int, + bidusername varchar(255), + idk int, + bidworld int, + oid int, + regdate datetime, + deposit bigint, + sstype int, + idk2 int, + idk3 int, + unkdate datetime, + item int, + itemname varchar(255), + soldquantity int, + primary key (id) +); + +create table petitems +( + itemid bigint, + name varchar(255), + level tinyint, + tameness smallint, + repleteness tinyint, + petattribute smallint, + petskill int, + datedead datetime, + remainlife int, + attribute smallint, + activestate tinyint, + autobuffskill int, + pethue int, + giantrate smallint, + primary key (itemid), + foreign key (itemid) references items (id) on delete cascade +); + +create table guilds +( + id int not null auto_increment, + name varchar(255), + leaderid int, + worldid int, + markbg int, + markbgcolor int, + mark int, + markcolor int, + maxmembers int, + notice varchar(255), + points int, + seasonpoints int, + allianceid int, + level int, + `rank` int, + ggp int, + appliable boolean, + joinsetting int, + reqlevel int, + bbsNotice int, + battleSp int, + fk_allianceid int, + primary key (id) +); + +create table equips +( + serialnumber bigint, + itemid bigint, + title varchar(255), + equippeddate datetime, + prevbonusexprate int, + options varchar(255), + sockets varchar(255), + tuc smallint, + cuc smallint, + istr smallint, + idex smallint, + iint smallint, + iluk smallint, + imaxhp smallint, + imaxmp smallint, + ipad smallint, + imad smallint, + ipdd smallint, + imdd smallint, + iacc smallint, + ieva smallint, + icraft smallint, + ispeed smallint, + ijump smallint, + attribute smallint, + leveluptype smallint, + level smallint, + exp smallint, + durability smallint, + iuc smallint, + ipvpdamage smallint, + ireducereq smallint, + specialattribute smallint, + durabilitymax smallint, + iincreq smallint, + growthenchant smallint, + psenchant smallint, + hyperupgrade smallint, + bdr smallint, + imdr smallint, + damr smallint, + statr smallint, + cuttable smallint, + exgradeoption bigint, + itemstate smallint, + grade smallint, + chuc smallint, + souloptionid smallint, + soulsocketid smallint, + souloption smallint, + rstr smallint, + rdex smallint, + rint smallint, + rluk smallint, + rlevel smallint, + rjob smallint, + rpop smallint, + specialgrade int, + fixedpotential boolean, + tradeblock boolean, + isonly boolean, + notsale boolean, + attackspeed int, + price int, + charmexp int, + expireonlogout boolean, + setitemid int, + exitem boolean, + equiptradeblock boolean, + islot varchar(255), + vslot varchar(255), + fixedgrade int, + nopotential tinyint, + arc smallint, + symbolexp int, + symbollevel smallint, + bossreward tinyint, + fstr smallint, + fdex smallint, + fint smallint, + fluk smallint, + fatt smallint, + fmatt smallint, + fdef smallint, + fhp smallint, + fmp smallint, + fspeed smallint, + fjump smallint, + fallstat smallint, + fboss smallint, + fdamage smallint, + flevel smallint, + superioreqp tinyint, + android int, + androidgrade int, + primary key (itemid), + foreign key (itemid) references items (id) on delete cascade +); + +create table monsterbookinfos +( + id int not null auto_increment, + setid int, + coverid int, + primary key (id) +); + +create table monsterbookcards +( + id bigint not null auto_increment, + bookid int, + cardid int, + primary key (id), + foreign key (bookid) references monsterbookinfos (id) on delete cascade +); + +create table avatarlook +( + id int not null auto_increment, + gender int, + skin int, + face int, + hair int, + weaponstickerid int, + weaponid int, + subweaponid int, + job int, + drawelfear boolean, + demonslayerdeffaceacc int, + xenondeffaceacc int, + beasttamerdeffaceacc int, + iszerobetalook boolean, + mixedhaircolor int, + mixhairpercent int, + ears int, + tail int, + primary key (id) +); + +create table hairequips +( + id int not null auto_increment, + alid int, + equipid int, + primary key (id), + foreign key (alid) references avatarlook (id) on delete cascade +); + +create table unseenequips +( + id int not null auto_increment, + alid int, + equipid int, + primary key (id), + foreign key (alid) references avatarlook (id) on delete cascade +); + +create table petids +( + id int not null auto_increment, + alid int, + petid int, + primary key (id), + foreign key (alid) references avatarlook (id) on delete cascade +); + +create table totems +( + id int not null auto_increment, + alid int, + totemid int, + primary key (id), + foreign key (alid) references avatarlook (id) on delete cascade +); + +create table extendsp +( + id int not null auto_increment, + primary key (id) +); + +create table spset +( + id int not null auto_increment, + extendsp_id int, + joblevel tinyint, + sp int, + primary key (id), + foreign key (extendsp_id) references extendsp (id) on delete cascade +); + +create table systemtimes +( + id int not null auto_increment, + yr int, + mnth int, + primary key (id) +); + +create table noncombatstatdaylimit +( + id int not null auto_increment, + charisma smallint, + charm smallint, + insight smallint, + will smallint, + craft smallint, + sense smallint, + lastupdatecharmbycashpr datetime, + charmbycashpr tinyint, + primary key (id) +); + +create table charactercards +( + id int not null auto_increment, + characterid int, + job int, + level tinyint, + primary key (id) +); + +create table characterstats +( + id int not null auto_increment, + characterid int, + characteridforlog int, + worldidforlog int, + name varchar(255), + gender int, + skin int, + face int, + hair int, + mixbasehaircolor int, + mixaddhaircolor int, + mixhairbaseprob int, + level int, + job int, + str int, + dex int, + inte int, + luk int, + hp int, + maxhp int, + mp int, + maxmp int, + ap int, + sp int, + exp long, + pop int, + money long, + wp int, + extendsp int, + posmap long, + portal int, + subjob int, + deffaceacc int, + fatigue int, + lastfatigueupdatetime int, + charismaexp int, + insightexp int, + willexp int, + craftexp int, + senseexp int, + charmexp int, + noncombatstatdaylimit int, + pvpexp int, + pvpgrade int, + pvppoint int, + pvpmodelevel int, + pvpmodetype int, + eventpoint int, + pierce double not null default '0', + albaactivityid int, + albastarttime datetime, + albaduration int, + albaspecialreward int, + burning boolean, + charactercard int, + accountlastlogout int, + lastlogout datetime, + gachexp int, + honorexp int, + nextavailablefametime datetime, + primary key (id), + foreign key (extendsp) references extendsp (id), + foreign key (noncombatstatdaylimit) references noncombatstatdaylimit (id), + foreign key (charactercard) references charactercards (id), + foreign key (accountlastlogout) references systemtimes (id) +); + +create table avatardata +( + id int not null auto_increment, + characterstat int, + avatarlook int, + zeroavatarlook int, + primary key (id), + foreign key (characterstat) references characterstats (id), + foreign key (avatarlook) references avatarlook (id), + foreign key (zeroavatarlook) references avatarlook (id) +); + +create table funckeymap ( + id int not null auto_increment, + primary key (id), + charId int, + ord int +); + +create table keymaps ( + id int not null auto_increment, + fkmapid int, + idx int, + type tinyint, + val int, + primary key (id), + foreign key (fkmapid) references funckeymap(id) +); + +create table alliances +( + id int not null auto_increment, + name varchar(255), + maxmembernum int, + notice varchar(255), + primary key (id) +); + +create table alliance_gradenames +( + id int not null auto_increment, + gradename varchar(255), + allianceid int, + primary key (id), + foreign key (allianceid) references alliances (id) on delete cascade +); + +create table bbs_records +( + id int not null auto_increment, + idforbbs int, + creatorid int, + subject varchar(255), + msg text, + creationdate datetime, + icon int, + guildid int, + primary key (id) +); + +create table bbs_replies +( + id int not null auto_increment, + idforreply int, + creatorid int, + creationdate datetime, + msg text, + recordid int, + primary key (id), + foreign key (recordid) references bbs_records (id) on delete cascade +); + +create table offense_managers +( + id int not null auto_increment, + points int, + primary key (id) +); + +create table offenses +( + id bigint not null auto_increment, + manager_id int, + charid int, + accountid int, + msg text, + type varchar(255), + issuedate datetime, + issuer_char_id int, + primary key (id), + foreign key (manager_id) references offense_managers (id) on delete cascade +); + +create table monster_collections +( + id int not null auto_increment, + primary key (id) +); + +create table users +( + id int not null auto_increment, + banExpireDate datetime, + banReason varchar(255), + offensemanager int, + votepoints int default 0, + reserveVotePoints int default 0, + donationpoints int default 0, + reserveDonationPoints int default 0, + maplePoints int default 0, + nxPrepaid int default 0, + name varchar(255), + password varchar(255), + pic varchar(255), + mac varchar(255), + accounttype int default 0, + age int default 0, + vipgrade int default 0, + nblockreason int default 0, + gender tinyint default 0, + msg2 tinyint default 0, + purchaseexp tinyint default 0, + pblockreason tinyint default 3, + chatunblockdate bigint default 0, + hascensorednxloginid boolean default 0, + gradecode tinyint default 0, + censorednxloginid varchar(255), + characterslots int default 4, + creationdate datetime, + email varchar(255), + registerip varchar(255), + primary key (id), + foreign key (offensemanager) references offense_managers (id) +); + +create table accounts +( + id int not null auto_increment, + worldid int, + userid int, + trunkid int, + nxCredit int default 0, + friendshipPoints int default 0, + dojopoints int default 0, + shipLevel int default 0, + shipExp int default 0, + monstercollectionid int, + employeetrunkid int, + unionid int, + primary key (id), + foreign key (userid) references users (id) on delete cascade, + foreign key (trunkid) references trunks (id), + foreign key (monstercollectionid) references monster_collections (id), + secondaryPendantEndDate datetime(3) +); + +create table eventscooltimes ( + id int not null auto_increment, + accid int, + eventType int, + amountDone int, + nextresettime bigint, + primary key (id), + foreign key (accid) references accounts(id) +); + +create table sdc ( + id int not null auto_increment, + accountid int, + sdcType int, + timesCompleted int, + collected int, + primary key (id), + foreign key (accountid) references accounts(id) on delete cascade +); + + +create table characters +( + id int not null auto_increment, + accid int, + userid int, + avatardata int, + faceinventory int, + hairinventory int, + equippedinventory int, + equipinventory int, + consumeinventory int, + etcinventory int, + installinventory int, + cashinventory int, + funckeymap_id int, + fieldid int, + questmanager bigint, + guild int, + rewardPoints int, + monsterbook int, + partyid int, + monsterparkcount tinyint default 0, + previousFieldID bigint, + quickslotKeys varchar(255), # inlined array + location int, + runeStoneCooldown bigint default 0, + primary key (id), + foreign key (accid) references accounts (id) on delete cascade, + foreign key (avatardata) references avatardata (id), + foreign key (faceinventory) references inventories(id), + foreign key (hairinventory) references inventories(id), + foreign key (equippedinventory) references inventories (id), + foreign key (equipinventory) references inventories (id), + foreign key (consumeinventory) references inventories (id), + foreign key (etcinventory) references inventories (id), + foreign key (installinventory) references inventories (id), + foreign key (cashinventory) references inventories (id), + foreign key (funckeymap_id) references funckeymap (id), + foreign key (questmanager) references questmanagers (id), + foreign key (monsterbook) references monsterbookinfos (id) +); + +create table achievements ( + id int not null auto_increment, + accountid int, + ord int, + achid int, + primary key (id), + foreign key (accountid) references accounts(id) +); + +create table ignoreddrops ( + id bigint not null auto_increment, + charid int, + ord int, + itemid int, + primary key (id), + foreign key (charid) references characters(id) on delete cascade +); + +create table dailychallenge ( + id int not null auto_increment, + charid int, + sdcid int, + timesUsed int, + primary key (id), + foreign key (charid) references characters(id) on delete cascade +); + +create table familiars ( + id bigint not null auto_increment, + charid int, + idk1 int, + familiarid int, + name varchar(13), + idk2 boolean, + idk3 smallint, + fatigue int, + idk4 bigint, + idk5 bigint, + expiration datetime(3), + vitality smallint, + primary key (id), + foreign key (charid) references characters(id) on delete cascade +); + +create table stolenskills +( + id int not null auto_increment, + charid int, + skillid int, + position int, + currentlv tinyint, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table chosenskills +( + id int not null auto_increment, + charid int, + skillid int, + position int, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table skillcooltimes +( + id int not null auto_increment, + charid int, + skillid int, + nextusabletime bigint, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table bosscooldowns +( + id int not null auto_increment, + accid int, + boss varchar(255), + nextentrytime datetime, + primary key (id), + foreign key (accid) references accounts (id) on delete cascade +); + +create table hyperrockfields +( + id bigint not null auto_increment, + charid int, + ord int, + fieldid int, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table towerchairs +( + id bigint not null auto_increment, + charid int, + ord int, + chairid int, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table characterpotentials +( + id bigint not null auto_increment, + potkey tinyint, + skillid int, + slv int, + grade tinyint, + charid int, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table guildskill +( + id int not null auto_increment, + skillid int, + level int, + expiredate datetime, + buycharactername varchar(255), + extendcharactername varchar(255), + primary key (id) +); + +create table guildskills +( + guildskill_id int not null auto_increment, + skills_id int, + guild_id int, + skillid int, + fk_guildskillid int, + primary key (guildskill_id), + foreign key (guild_id) references guilds (id) on delete cascade, + foreign key (fk_guildskillid) references guildskill (id) on delete cascade +); + +create table guildmembers +( + id int not null auto_increment, + charid int, + guildid int, + grade int, + alliancegrade int, + commitment int, + daycommitment int, + igp int, + commitmentinctime datetime, + name varchar(255), + job int, + level int, + loggedin boolean, + primary key (id), + foreign key (guildid) references guilds (id) on delete cascade +); + +drop table if exists guildrequestors; +create table guildrequestors +( + id int not null auto_increment, + charid int, + guildid int, + name varchar(255), + job int, + level int, + loggedin boolean, + primary key (id), + foreign key (guildid) references guilds (id) on delete cascade +); + +create table gradenames +( + id int not null auto_increment, + gradename varchar(255), + guildid int, + primary key (id), + foreign key (guildid) references guilds (id) on delete cascade +); + + +create table skills +( + id int not null auto_increment, + charid int, + skillid int, + rootid int, + maxlevel int, + currentlevel int, + masterlevel int, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table macros +( + id bigint not null auto_increment, + charid int, + muted boolean, + name varchar(255), + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table macroskills +( + id bigint not null auto_increment, + ordercol int, + skillid int, + macroid bigint, + primary key (id), + foreign key (macroid) references macros (id) on delete cascade +); + + +create table monster_collection_mobs +( + id int not null auto_increment, + collectionid int, + mobid int, + primary key (id) +); + +create table monster_collection_explorations +( + id bigint not null auto_increment, + collectionid int, + collectionkey int, + monsterkey varchar(255), + endDate datetime, + position int, + primary key (id) +); + +create table monster_collection_rewards +( + region int, + session int, + groupid int, + collectionid int, + primary key (region, session, groupid) +); + + + +create table linkskills +( + id bigint not null auto_increment, + accid int, + linkskillid int, + level int, + originid int, + usingid int, + primary key (id), + foreign key (accid) references accounts (id) on delete cascade +); + +create table matrix_records +( + id bigint not null auto_increment, + iconid int, + skillid1 int, + skillid2 int, + skillid3 int, + slv int, + maxLevel int, + `row` int, + exp int, + crc bigint, + expiredate datetime, + active boolean, + charid int, + position int, + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); + +create table damageskinsavedatas +( + id bigint not null auto_increment, + damageskinid int, + itemid int, + notsave boolean, + description varchar(255), + accid int, + primary key (id), + foreign key (accid) references accounts (id) on delete cascade +); + +create table friends +( + id int not null auto_increment, + ownerid int, + owneraccid int, + friendid int, + friendaccountid int, + name varchar(255), + flag tinyint, + groupname varchar(255), + mobile tinyint, + nickname varchar(255), + memo varchar(255), + primary key (id) +); + +create table unions +( + id bigint not null auto_increment, + unionCoin int, + unionRank int, + presets int, + primary key (id) +); + +create table unionboards +( + id bigint not null auto_increment, + unionid bigint, + unionpower int, + uniondamage bigint, + synergyGrid text, + primary key (id), + foreign key (unionid) references unions (id) on delete cascade +); + +create table unionmembers +( + id bigint not null auto_increment, + unionboardid bigint, + type int, + charid int, + mobileName varchar(30), + gridpos int, + gridrotation int, + primary key (id), + foreign key (unionboardid) references unionboards (id) on delete cascade +); + +create table hottimerewards +( + id bigint not null auto_increment, + charid int, + starttime datetime, + endtime datetime, + rewardtype int, + itemid int, + quantity int, + maplepointamount int, + mesoamount int, + expamount int, + description varchar(255), + primary key (id), + foreign key (charid) references characters (id) on delete cascade +); \ No newline at end of file diff --git a/sql/10 - InitTables_shops.sql b/sql/10 - InitTables_shops.sql new file mode 100755 index 0000000..b8ab288 --- /dev/null +++ b/sql/10 - InitTables_shops.sql @@ -0,0 +1,6192 @@ +drop table if exists shopitems; + +create table shopitems ( + id bigint not null auto_increment, + shopid int, + itemid int, + price int, + tokenitemid int, + tokenprice int, + pointquestid int, + pointprice int, + starcoin int, + questexid int default 0, + questexkey varchar(255), + questexvalue int, + itemperiod int, + levellimited int, + showlevmin int, + showlevmax int, + questid int, + sellstart datetime, + sellend datetime, + tabindex int, + worldblock boolean default false, + potentialgrade int default 0, + buylimit int, + quantity smallint, + unitprice bigint, + maxperslot smallint, + discountperc int default 0, + primary key (id) +); + +insert into shopitems (shopid, itemid, buylimit, tabindex, itemperiod, price, tokenitemid, tokenprice, pointquestid, + pointprice, starcoin, levellimited, showlevmin, showlevmax, questid, questexkey, questexvalue, + quantity, unitprice, maxperslot) values + +# Shiro (9100018) +(9100018, 01212129, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shadow Warrior's Sword Ticket +(9100018, 2439822, 2000000000, 0, 0, 0, 4310194, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shadow Warrior's Tunic (M) Ticket +(9100018, 01232122, 2000000000, 0, 0, 0, 4310194, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Genesis Desperado +(9100018, 2439824, 2000000000, 0, 0, 0, 4310194, 32, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shadow Warrior's Veil Ticket +(9100018, 2439825, 2000000000, 0, 0, 0, 4310194, 28, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Flower Ribbon Headband Ticket +(9100018, 2439826, 2000000000, 0, 0, 0, 4310194, 28, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cat Monster Hat Ticket +(9100018, 2439827, 2000000000, 0, 0, 0, 4310194, 40, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cat Monster Outfit Ticket +(9100018, 2439828, 2000000000, 0, 0, 0, 4310194, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cat Balloon Cape Ticket +(9100018, 2439829, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphim Suit (M) Ticket +(9100018, 2439830, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umbral Cloak Ticket +(9100018, 2439831, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Night Angel Wings Ticket +(9100018, 2439832, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heaven's Seraphim Ticket +(9100018, 2439833, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dynamic Seraphim Ticket +(9100018, 2439834, 2000000000, 0, 0, 0, 4310194, 40, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Water Granos and Weapon Ticket +(9100018, 2439835, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Enchanter Staff Ticket +(9100018, 2439836, 2000000000, 0, 0, 0, 4310194, 40, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Tome Weapon Ticket +(9100018, 2439837, 2000000000, 0, 0, 0, 4310194, 40, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Noble Lady's Black Fan Ticket +(9100018, 2630257, 2000000000, 0, 0, 0, 4310194, 35, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphim Suit Fan (F) Ticket + +# Collector (9001212) +(9001212, 1004808, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Knight Hat +(9001212, 1004809, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Mage Hat +(9001212, 1004810, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Archer Hat +(9001212, 1004811, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Thief Hat +(9001212, 1004812, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Pirate Hat +(9001212, 1053063, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Knight Suit +(9001212, 1053064, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Mage Suit +(9001212, 1053065, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Archer Suit +(9001212, 1053066, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Thief Suit +(9001212, 1053067, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Pirate Suit +(9001212, 1073158, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Knight Shoes +(9001212, 1073159, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Mage Shoes +(9001212, 1073160, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Archer Shoes +(9001212, 1073161, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Thief Shoes +(9001212, 1073162, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Pirate Shoes +(9001212, 1082695, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Knight Gloves +(9001212, 1082696, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Mage Gloves +(9001212, 1082697, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Archer Gloves +(9001212, 1082698, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Thief Gloves +(9001212, 1082699, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Pirate Gloves +(9001212, 1102940, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Knight Cape +(9001212, 1102941, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Mage Cape +(9001212, 1102942, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Archer Cape +(9001212, 1102943, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Thief Cape +(9001212, 1102944, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Pirate Cape +(9001212, 1152196, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Knight Shoulder +(9001212, 1152197, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Mage Shoulder +(9001212, 1152198, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Archer Shoulder +(9001212, 1152199, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Thief Shoulder +(9001212, 1152200, 1, 0, 0, 0, 4310218, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Pirate Shoulder +(9001212, 1212120, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Shining Rod +(9001212, 1222113, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Soul Shooter +(9001212, 1232113, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Desperado +(9001212, 1242121, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Energy Chain +(9001212, 1242122, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0), # Arcane Umbra Energy Chain +(9001212, 1252098, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Scepter +(9001212, 1262039, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Psy-limiter +(9001212, 1272017, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Chain +(9001212, 1282017, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Lucent Gauntlet +(9001212, 1302343, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Saber +(9001212, 1312203, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Axe +(9001212, 1322255, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Hammer +(9001212, 1332279, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Dagger +(9001212, 1342104, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Katara +(9001212, 1362140, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Cane +(9001212, 1372228, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Wand +(9001212, 1382265, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Staff +(9001212, 1402259, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Two-handed Sword +(9001212, 1412181, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Two-Handed Axe +(9001212, 1422189, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1), # Arcane Umbra Two-Handed Hammer +(9001212, 1432218, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Spear +(9001212, 1442274, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Polearm +(9001212, 1452257, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Bow +(9001212, 1462243, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Crossbow +(9001212, 1472265, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Guards +(9001212, 1482221, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Knuckle +(9001212, 1492235, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Pistol +(9001212, 1522143, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Dual Bowguns +(9001212, 1532150, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Siege Gun +(9001212, 1542117, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Katana +(9001212, 1552119, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Fan +(9001212, 1582023, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Ellaha +(9001212, 1592020, 1, 0, 0, 0, 4310249, 2500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Umbra Ancient Bow +(9001212, 1113072, 1, 0, 0, 0, 4310097, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cracked Gollux Ring +(9001212, 1113073, 1, 0, 0, 0, 4310097, 400, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Gollux Ring +(9001212, 1113074, 1, 0, 0, 0, 4310097, 900, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reinforced Gollux Ring +(9001212, 1113075, 1, 0, 0, 0, 4310097, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Superior Gollux Ring +(9001212, 1032220, 1, 0, 0, 0, 4310097, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cracked Gollux Earrings +(9001212, 1032221, 1, 0, 0, 0, 4310097, 400, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Gollux Earrings +(9001212, 1032222, 1, 0, 0, 0, 4310097, 900, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reinforced Gollux Earrings +(9001212, 1032223, 1, 0, 0, 0, 4310097, 1100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Superior Gollux Earrings +(9001212, 1122264, 1, 0, 0, 0, 4310097, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cracked Engraved Gollux Pendant +(9001212, 1122265, 1, 0, 0, 0, 4310097, 400, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Engraved Gollux Pendant +(9001212, 1122266, 1, 0, 0, 0, 4310097, 900, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reinforced Engraved Gollux Pendant +(9001212, 1122267, 1, 0, 0, 0, 4310097, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Superior Engraved Gollux Pendant +(9001212, 1132243, 1, 0, 0, 0, 4310097, 300, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cracked Engraved Gollux Belt +(9001212, 1132244, 1, 0, 0, 0, 4310097, 400, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Engraved Gollux Belt +(9001212, 1132245, 1, 0, 0, 0, 4310097, 900, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reinforced Engraved Gollux Belt +(9001212, 1132246, 1, 0, 0, 0, 4310097, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Superior Engraved Gollux Belt +(9001212, 1022231, 1, 0, 0, 0, 4310210, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aquatic Letter Eye Accessory +(9001212, 1012478, 1, 0, 0, 0, 4310210, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Condensed Power Crystal +(9001212, 1152124, 1, 0, 0, 0, 4310210, 300, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tinkerer's Black Shoulder Accessory +(9001212, 1132215, 1, 0, 0, 0, 4310210, 300, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tinkerer's Black Belt +(9001212, 2615001, 1, 0, 0, 0, 4310097, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Advanced Gollux Scroll +(9001212, 4001832, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Spell Trace +(9001212, 1004422, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Helm +(9001212, 1004423, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Crown +(9001212, 1004424, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Hood +(9001212, 1004425, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Cap +(9001212, 1004426, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Fedora +(9001212, 1052882, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Suit +(9001212, 1052887, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Suit +(9001212, 1052888, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Suit +(9001212, 1052889, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Suit +(9001212, 1052890, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Suit +(9001212, 1073030, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Shoes +(9001212, 1073032, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Shoes +(9001212, 1073033, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Shoes +(9001212, 1073034, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Shoes +(9001212, 1073035, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Shoes +(9001212, 1082636, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Gloves +(9001212, 1082637, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Gloves +(9001212, 1082638, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Gloves +(9001212, 1082639, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Gloves +(9001212, 1082640, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Gloves +(9001212, 1102775, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Cape +(9001212, 1102794, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Cape +(9001212, 1102795, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Cape +(9001212, 1102796, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Cape +(9001212, 1102797, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Cape +(9001212, 1152174, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Shoulder +(9001212, 1152176, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Shoulder +(9001212, 1152177, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Shoulder +(9001212, 1152178, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Shoulder +(9001212, 1152179, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Shoulder +(9001212, 1212115, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Shining Rod +(9001212, 1222109, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Soul Shooter +(9001212, 1232109, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Desperado +(9001212, 1242116, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Whip Blade +(9001212, 1242120, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Whip Blade +(9001212, 1252093, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Scepter +(9001212, 1262017, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Psy-Limiter +(9001212, 1272016, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Chain +(9001212, 1282016, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Lucent Gauntlet +(9001212, 1302333, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Saber +(9001212, 1312199, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Axe +(9001212, 1322250, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bit Hammer +(9001212, 1332274, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Blade Lord +(9001212, 1342101, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Katara +(9001212, 1362135, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Forked Cane +(9001212, 1372222, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Spellsong Wand +(9001212, 1382259, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Spellsong Staff +(9001212, 1402251, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Broad Saber +(9001212, 1412177, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Broad Axe +(9001212, 1422184, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Broad Hammer +(9001212, 1432214, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Piercing Spear +(9001212, 1442268, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Hellslayer +(9001212, 1452252, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Sureshot Bow +(9001212, 1462239, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Crossbow +(9001212, 1472261, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Revenge Guard +(9001212, 1482216, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Blast Knuckle +(9001212, 1492231, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Point Gun +(9001212, 1522138, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Gual Bowguns +(9001212, 1532144, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Blast Cannon +(9001212, 1542108, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Katana +(9001212, 1552110, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Summoner +(9001212, 1582017, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pile God +(9001212, 1592019, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Ancient Bow +(9001212, 4310216, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Essence +(9001212, 1012632, 1, 1, 0, 0, 04310156, 1500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Berserked +(9001212, 1022278, 1, 1, 0, 0, 04310156, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Eyepatch + +# Jimmy-Jack (9072201) +(9072201, 2001552, 1000000, 2, 0, 0, 4310069, 2, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 3000), # Apple Pie +(9072201, 2001552, 1000000, 2, 0, 0, 4310069, 20, 0, 0, 0, 0, 999, 999, 0, '', 0, 10, 0, 3000), # Apple Pie +(9072201, 2001552, 1000000, 2, 0, 0, 4310069, 100, 0, 0, 0, 0, 999, 999, 0, '', 0, 50, 0, 3000), # Apple Pie +(9072201, 2001553, 1000000, 2, 0, 0, 4310069, 4, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Fairy Tears +(9072201, 2001553, 1000000, 2, 0, 0, 4310069, 20, 0, 0, 0, 0, 999, 999, 0, '', 0, 10, 0, 3000), # Fairy Tears +(9072201, 2001553, 1000000, 2, 0, 0, 4310069, 100, 0, 0, 0, 0, 999, 999, 0, '', 0, 50, 0, 3000), # Fairy Tears +(9072201, 2028202, 1000000, 2, 0, 0, 4310069, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Pipsqueak Monster Metamorph Box +(9072201, 2028204, 1000000, 2, 0, 0, 4310069, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Monster Life Box +(9072201, 4001832, 2000000000, 2, 0, 0, 4310069, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 100, 0, 9000), # Spell Trace +(9072201, 2028182, 1000, 1, 0, 0, 4310069, 20, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 80 Warrior Weapon Box +(9072201, 2028183, 1000, 1, 0, 0, 4310069, 20, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 80 Magician Weapon Box +(9072201, 2028184, 1000, 1, 0, 0, 4310069, 20, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 80 Bowman Weapon Box +(9072201, 2028185, 1000, 1, 0, 0, 4310069, 20, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 80 Thief Weapon Box +(9072201, 2028186, 1000, 1, 0, 0, 4310069, 20, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 80 Pirate Weapon Box +(9072201, 2028187, 1000, 1, 0, 0, 4310069, 30, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 100 Warrior Weapon Box +(9072201, 2028188, 1000, 1, 0, 0, 4310069, 30, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 100 Magician Weapon Box +(9072201, 2028189, 1000, 1, 0, 0, 4310069, 30, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 100 Bowman Weapon Box +(9072201, 2028190, 1000, 1, 0, 0, 4310069, 30, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 100 Thief Weapon Box +(9072201, 2028191, 1000, 1, 0, 0, 4310069, 30, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 100), # Monster Life Lv. 100 Pirate Weapon Box +(9072201, 2431935, 1000000, 2, 0, 0, 4310069, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 5), # Mastery Book 20 +(9072201, 2431936, 1000000, 2, 0, 0, 4310069, 2000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 5), # Mastery Book 30 +(9072201, 2436893, 1000000, 2, 0, 0, 4310069, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Monster Life Farm Reset Scroll + +# Neville (9072100) +(9072100, 1352200, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Powers Medallion +(9072100, 1352201, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orders Medallion +(9072100, 1352202, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Virtues Medallion +(9072100, 1352210, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Rosary +(9072100, 1352211, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Divine Rosary +(9072100, 1352212, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sacred Rosary +(9072100, 1352220, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Stark Chain +(9072100, 1352221, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Chain +(9072100, 1352222, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Berserk Chain +(9072100, 1352230, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rusty Book +(9072100, 1352231, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rusty Book +(9072100, 1352232, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rusty Book +(9072100, 1352240, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metallic Blue Book +(9072100, 1352241, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metallic Blue Book +(9072100, 1352242, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metallic Blue Book +(9072100, 1352250, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Gold Book +(9072100, 1352251, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Gold Book +(9072100, 1352252, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Gold Book +(9072100, 1352260, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Breezy Feather +(9072100, 1352261, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gusty Feather +(9072100, 1352262, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blasted Feather +(9072100, 1352270, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # One Shot +(9072100, 1352271, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sure Shot +(9072100, 1352272, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # True Shot +(9072100, 1352280, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hidden Shadow +(9072100, 1352281, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vanishing Shadow +(9072100, 1352282, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Slashing Shadow +(9072100, 1352290, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # All Souls Charm +(9072100, 1352291, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Ender Charm +(9072100, 1352292, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Death Sender Charm +(9072100, 1352900, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wrist Band +(9072100, 1352901, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wrist Guard +(9072100, 1352902, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wrist Armor +(9072100, 1352910, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eagle Eye +(9072100, 1352911, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkeye +(9072100, 1352912, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Falcon Eye +(9072100, 1352920, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pin Fire Bomb +(9072100, 1352921, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rim Fire Bomb +(9072100, 1352922, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Center Fire Bomb +(9072100, 1352930, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Beast Mass +(9072100, 1352931, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Phoenix Mass +(9072100, 1352932, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dragon Mass +(9072100, 1352940, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dragon Master's Records +(9072100, 1352941, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dragon Master's Research +(9072100, 1352942, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dragon Master's Legacy +(9072100, 1352000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Arrows +(9072100, 1352001, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sharp Magic Arrows +(9072100, 1352002, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eternal Magic Arrows +(9072100, 1352003, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Infinite Magic Arrows +(9072100, 1352100, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Carte Magique +(9072100, 1352101, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Carte Fantasmatique +(9072100, 1352102, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Carte Magnifique +(9072100, 1352103, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Carte Finale +(9072100, 1353100, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fox Marble +(9072100, 1353101, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fox Marble +(9072100, 1353102, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Fox Marble +(9072100, 1353103, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Fox Marble +(9072100, 1352400, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Orb +(9072100, 1352401, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shining Orb +(9072100, 1352402, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Twinkling Orb +(9072100, 1352403, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Karma Orb +(9072100, 1099004, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Force Shield of Extremes +(9072100, 1099009, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Force Shield of Extremes +(9072100, 1353400, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rudimentary Charges +(9072100, 1353401, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Standard Charges +(9072100, 1353402, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # High Powered Charges +(9072100, 1353403, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Masterwork Charges +(9072100, 1352950, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Equalizer Ball +(9072100, 1352951, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Energizer Ball +(9072100, 1352952, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maximizer Ball +(9072100, 1352960, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wild Beak +(9072100, 1352961, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wild Crow +(9072100, 1352962, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wild Heron +(9072100, 1353004, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Octa Core Controller +(9072100, 1352703, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eternal Magnum +(9072100, 1098003, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Soul Shield of Justice +(9072100, 1352970, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ereve Fragment +(9072100, 1352971, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ereve Idea +(9072100, 1352972, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ereve Brilliance +(9072100, 1352503, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Truth Essence +(9072100, 1353300, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Transmitter Type-D +(9072100, 1353301, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Transmitter Type-C +(9072100, 1353302, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Transmitter Type-B +(9072100, 1353303, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Transmitter Type-A +(9072100, 1352604, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Soul Ring +(9072100, 1353200, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pawn Chess Piece +(9072100, 1353201, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Knight Chess Piece +(9072100, 1353202, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rook Chess Piece +(9072100, 1353203, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Queen Chess Piece +(9072100, 1353500, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Lucent Wings +(9072100, 1353501, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Core Lucent Wings +(9072100, 1353502, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Lucent Wings +(9072100, 1353503, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Glory Lucent Wings +(9072100, 1353600, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Initial Path +(9072100, 1353601, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Secondary Path +(9072100, 1353602, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Advanced Path +(9072100, 1353603, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ultimate Path +(9072100, 1352800, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Tiger Blade +(9072100, 1352801, 100, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Dragon Blade +(9072100, 1352803, 100, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fire Phoenix Blade +(9072100, 1352810, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tiny Whisper +(9072100, 1352811, 100, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Friend's Whisper +(9072100, 1352812, 100, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tutelary Whisper +(9072100, 1352813, 100, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mother Nature Whisper +(9072100, 1352820, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Fist +(9072100, 1352821, 100, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Proxima Fist +(9072100, 1352822, 100, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sirius Fist +(9072100, 1352823, 100, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcturus Fist + +# Neri the Fairy (2012003) +(2012003, 1252003, 100, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Talon Scepter +(2012003, 1252004, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Panther Scepter +(2012003, 1542053, 10000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Savior +(2012003, 1542054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Death's Whisper +(2012003, 1552053, 10000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fan of Enlightenment +(2012003, 1552054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Melodic Fan +(2012003, 1302010, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jeweled Katar +(2012003, 1302011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neocora +(2012003, 1312008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Buck +(2012003, 1312009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkhead +(2012003, 1322017, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Knuckle Mace +(2012003, 1322018, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tamus +(2012003, 1332003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shinkita +(2012003, 1332016, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sai +(2012003, 1332015, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deadly Fin +(2012003, 1332017, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Coil +(2012003, 1342003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Majestic Katara +(2012003, 1342004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ascalon Katara +(2012003, 1362008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Oriental Royal Cane +(2012003, 1362009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bijou Canne +(2012003, 1372007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cromi +(2012003, 1372014, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Tale +(2012003, 1382001, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arc Staff +(2012003, 1382006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Thorns +(2012003, 1402003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lion's Fang +(2012003, 1402011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sparta +(2012003, 1412003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Rising +(2012003, 1412007, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Shining +(2012003, 1422005, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Mole +(2012003, 1422009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Blessing +(2012003, 1432004, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Tongue +(2012003, 1432006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Spear +(2012003, 1442005, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Nine Dragons +(2012003, 1442010, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Skylar +(2012003, 1452008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Olympus +(2012003, 1452004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Asianic Bow +(2012003, 1462007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rower +(2012003, 1462008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Crow +(2012003, 1472021, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Slain +(2012003, 1472025, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Gigantic +(2012003, 1482007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fury Claw +(2012003, 1482008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphims +(2012003, 1492007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mr. Rasfelt +(2012003, 1492008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Burning Hell +(2012003, 1522007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Judge & Jury +(2012003, 1522008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Glory +(2012003, 1532007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dreadnought +(2012003, 1532008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Bigshot +(2012003, 1212003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Decor +(2012003, 1212004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vallentier + +# Nuri the Fairy (2012004) +(2012004, 1002028, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Crusader Helm +(2012004, 1002216, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Golden Circlet +(2012004, 1002212, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Maro +(2012004, 1002207, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sonata +(2012004, 1002631, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Leather Ocean Hat +(2012004, 1002084, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(2012004, 1002243, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(2012004, 1002268, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(2012004, 1002247, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(2012004, 1002634, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(2012004, 1040087, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shouldermail +(2012004, 1040088, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Shouldermail +(2012004, 1040089, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Shouldermail +(2012004, 1040094, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red China +(2012004, 1040095, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue China +(2012004, 1040096, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown China +(2012004, 1040097, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green China +(2012004, 1041087, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shouldermail +(2012004, 1041088, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ivory Shouldermail +(2012004, 1041089, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Shouldermail +(2012004, 1041077, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Moon +(2012004, 1041078, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon +(2012004, 1041079, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon +(2012004, 1041080, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon +(2012004, 1060076, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shouldermail Pants +(2012004, 1060077, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Shouldermail Pants +(2012004, 1060078, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Shouldermail Pants +(2012004, 1060083, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red China Pants +(2012004, 1060084, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue China Pants +(2012004, 1060085, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown China Pants +(2012004, 1060086, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green China Pants +(2012004, 1061086, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shouldermail Pants +(2012004, 1061087, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ivory Shouldermail Pants +(2012004, 1061088, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Shouldermail Pants +(2012004, 1061076, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Moon Pants +(2012004, 1061077, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Pants +(2012004, 1061078, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon Pants +(2012004, 1061079, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Pants +(2012004, 1040090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(2012004, 1040091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(2012004, 1040092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(2012004, 1040093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(2012004, 1040098, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(2012004, 1040099, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(2012004, 1040100, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(2012004, 1041091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(2012004, 1041092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(2012004, 1041093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(2012004, 1041094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(2012004, 1041095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(2012004, 1041096, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(2012004, 1060079, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(2012004, 1060080, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(2012004, 1060081, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(2012004, 1060082, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(2012004, 1060087, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(2012004, 1060088, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(2012004, 1060089, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(2012004, 1061090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(2012004, 1061091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(2012004, 1061092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(2012004, 1061093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(2012004, 1061094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(2012004, 1061095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(2012004, 1050045, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Calas +(2012004, 1050046, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Calas +(2012004, 1050047, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Calas +(2012004, 1050049, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Calas +(2012004, 1050048, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Calas +(2012004, 1050051, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red-Lined Kismet +(2012004, 1050052, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue-Lined Kismet +(2012004, 1051030, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Calaf +(2012004, 1051031, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Calaf +(2012004, 1051032, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Calaf +(2012004, 1051033, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Calaf +(2012004, 1051034, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Calaf +(2012004, 1051037, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lumati +(2012004, 1051038, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lumati +(2012004, 1051039, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lumati +(2012004, 1052116, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Plasteer +(2012004, 1050053, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(2012004, 1050054, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(2012004, 1050055, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(2012004, 1050056, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(2012004, 1050058, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(2012004, 1050059, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(2012004, 1050060, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(2012004, 1051044, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(2012004, 1051045, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(2012004, 1051046, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(2012004, 1051047, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(2012004, 1051041, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(2012004, 1051042, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(2012004, 1051043, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(2012004, 1052119, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(2012004, 1072135, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Hildon Boots +(2012004, 1072143, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Goldenwind Shoes +(2012004, 1072125, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steel-Tip Boots +(2012004, 1072129, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Goni Shoes +(2012004, 1072303, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Double Boots +(2012004, 1072149, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(2012004, 1072139, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(2012004, 1072146, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(2012004, 1072152, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(2012004, 1072306, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(2012004, 1082011, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Brist +(2012004, 1082082, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pennance +(2012004, 1082085, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Willow +(2012004, 1082067, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Gloves +(2012004, 1082198, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Royce +(2012004, 1082061, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(2012004, 1082088, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(2012004, 1082091, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(2012004, 1082094, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(2012004, 1082201, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult + +# Pancho Sanza (9010107) +(9010107, 2023658, 1000000, 0, 14400, 0, 4310229, 10, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Might Lv. 1 +(9010107, 2023659, 1000000, 0, 14400, 0, 4310229, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Might Lv. 2 +(9010107, 2023660, 1000000, 0, 14400, 0, 4310229, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Might Lv. 3 +(9010107, 2450147, 1000000, 0, 14400, 0, 4310229, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Expertise Lv. 1 +(9010107, 2450148, 1000000, 0, 14400, 0, 4310229, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Expertise Lv. 2 +(9010107, 2450149, 1000000, 0, 14400, 0, 4310229, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Expertise Lv. 3 +(9010107, 2023661, 1000000, 0, 14400, 0, 4310229, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Luck Lv. 1 +(9010107, 2023662, 1000000, 0, 14400, 0, 4310229, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Luck Lv. 2 +(9010107, 2023663, 1000000, 0, 14400, 0, 4310229, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Luck Lv. 3 +(9010107, 2023664, 1000000, 0, 14400, 0, 4310229, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Wealth Lv. 1 +(9010107, 2023665, 1000000, 0, 14400, 0, 4310229, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Wealth Lv. 2 +(9010107, 2023666, 1000000, 0, 14400, 0, 4310229, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Wealth Lv. 3 +(9010107, 2049018, 1000000, 0, 14400, 0, 4310229, 60, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Clean Slate Scroll 10% +(9010107, 2049710, 1000000, 0, 14400, 0, 4310229, 140, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Epic Potential Scroll 50% +(9010107, 2049509, 1000000, 0, 14400, 0, 4310229, 40, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Potential Stamp +(9010107, 2710002, 1000000, 0, 14400, 0, 4310229, 140, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Master Craftsman's Cube +(9010107, 2436614, 1000000, 0, 14400, 0, 4310229, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Legion Meso Box +(9010107, 2436615, 1000000, 0, 14400, 0, 4310229, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Intermediate Legion Meso Box +(9010107, 2436616, 1000000, 0, 14400, 0, 4310229, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Advanced Legion Meso Box +(9010107, 2436617, 1000000, 0, 14400, 0, 4310229, 75, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Legion Growth Potion +(9010107, 2436618, 1000000, 0, 14400, 0, 4310229, 110, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Intermediate Legion Growth Potion +(9010107, 2436619, 1000000, 0, 14400, 0, 4310229, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Advanced Legion Growth Potion +(9010107, 2436884, 1000000, 0, 43200, 0, 4310229, 500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion Preset Coupon +(9010107, 2048311, 1000000, 0, 14400, 0, 4310229, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bonus Potential Scroll 50% +(9010107, 2535000, 1000000, 0, 10080, 0, 4310229, 300, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Catalyst +(9010107, 2048724, 1000000, 0, 14400, 0, 4310229, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Powerful Rebirth Flame + +# Bronze (9110005) +(9110005, 2022024, 10000000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Takoyaki (Octopus Ball) +(9110005, 2022025, 10000000, 0, 0, 4200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Takoyaki (jumbo) +(9110005, 2022026, 10000000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Yakisoba +(9110005, 2022027, 10000000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Yakisoba (x2) +(9110005, 2022017, 10000000, 0, 0, 1100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ramen +(9110005, 2022018, 10000000, 0, 0, 1600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Kinoko Ramen(roasted pork) +(9110005, 2022019, 10000000, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Kinoko Ramen(pig head) +(9110005, 2022020, 10000000, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Kinoko Ramen(salt) +(9110005, 2022014, 10000000, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Dango +(9110005, 2022023, 10000000, 0, 0, 1350, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Tri-colored Dango +(9110005, 2022021, 10000000, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Fish Cake(skewer) +(9110005, 2022022, 10000000, 0, 0, 1300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Fish Cake(dish) + +# Qian Qian (9310030) +(9310030, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(9310030, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(9310030, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(9310030, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(9310030, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(9310030, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(9310030, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(9310030, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(9310030, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(9310030, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(9310030, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(9310030, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(9310030, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(9310030, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(9310030, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(9310030, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(9310030, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(9310030, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(9310030, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(9310030, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(9310030, 2020012, 1000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(9310030, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(9310030, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(9310030, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(9310030, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(9310030, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(9310030, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(9310030, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(9310030, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(9310030, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(9310030, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(9310030, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow + +# Jin Zhong Zhao (9310033) +(9310033, 1002084, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(9310033, 1002243, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(9310033, 1002268, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(9310033, 1002247, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(9310033, 1002634, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(9310033, 1002030, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Planet +(9310033, 1002254, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Infinium Circlet +(9310033, 1002289, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Patriot +(9310033, 1002285, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Nightfox +(9310033, 1002637, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pirate's Bandana +(9310033, 1040090, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(9310033, 1040091, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(9310033, 1040092, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(9310033, 1040093, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(9310033, 1040098, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(9310033, 1040099, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(9310033, 1040100, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(9310033, 1041091, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(9310033, 1041092, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(9310033, 1041093, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(9310033, 1041094, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(9310033, 1041095, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(9310033, 1041096, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(9310033, 1060079, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(9310033, 1060080, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(9310033, 1060081, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(9310033, 1060082, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(9310033, 1060087, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(9310033, 1060088, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(9310033, 1060089, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(9310033, 1061090, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(9310033, 1061091, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(9310033, 1061092, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(9310033, 1061093, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(9310033, 1061094, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(9310033, 1061095, 100, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(9310033, 1040102, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Platine +(9310033, 1040103, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine +(9310033, 1040104, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine +(9310033, 1040105, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Top +(9310033, 1040106, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Top +(9310033, 1040107, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Top +(9310033, 1041097, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina +(9310033, 1041098, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina +(9310033, 1041099, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina +(9310033, 1041100, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique +(9310033, 1041101, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique +(9310033, 1041102, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique +(9310033, 1041103, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique +(9310033, 1060091, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine Pants +(9310033, 1060092, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine Pants +(9310033, 1060093, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Pants +(9310033, 1060094, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Pants +(9310033, 1060095, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Pants +(9310033, 1061096, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina Pants +(9310033, 1061097, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina Pants +(9310033, 1061098, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina Pants +(9310033, 1061099, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique Pants +(9310033, 1061100, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique Pants +(9310033, 1061101, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique Pants +(9310033, 1061102, 100, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Pants +(9310033, 1050053, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(9310033, 1050054, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(9310033, 1050055, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(9310033, 1050056, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(9310033, 1050058, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(9310033, 1050059, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(9310033, 1050060, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(9310033, 1051044, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(9310033, 1051045, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(9310033, 1051046, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(9310033, 1051047, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(9310033, 1051041, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(9310033, 1051042, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(9310033, 1051043, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(9310033, 1052119, 100, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(9310033, 1050067, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requiem +(9310033, 1050068, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requiem +(9310033, 1050069, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requiem +(9310033, 1050070, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requiem +(9310033, 1050061, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Linnex +(9310033, 1050062, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Linnex +(9310033, 1050063, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Linnex +(9310033, 1050064, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Linnex +(9310033, 1051052, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requierre +(9310033, 1051053, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requierre +(9310033, 1051054, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requierre +(9310033, 1051055, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requierre +(9310033, 1051062, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lineros +(9310033, 1051063, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Lineros +(9310033, 1051064, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lineros +(9310033, 1051065, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lineros +(9310033, 1052122, 100, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viska +(9310033, 1072149, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(9310033, 1072139, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(9310033, 1072146, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(9310033, 1072152, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(9310033, 1072306, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(9310033, 1072156, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Carzen Boots +(9310033, 1072160, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Lapiz Sandals +(9310033, 1072167, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Elf Shoes +(9310033, 1072163, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Shoes +(9310033, 1072309, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Voyson Shoes +(9310033, 1082061, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(9310033, 1082088, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(9310033, 1082091, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(9310033, 1082094, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(9310033, 1082201, 100, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult +(9310033, 1082105, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Husk +(9310033, 1082100, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lorin +(9310033, 1082108, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Eyes +(9310033, 1082097, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Rover +(9310033, 1082204, 100, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bisk + +# Xiapolang (9310038) +(9310038, 1252004, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Panther Scepter +(9310038, 1252005, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grizzly Scepter +(9310038, 1302011, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neocora +(9310038, 1302012, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Katana +(9310038, 1312009, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkhead +(9310038, 1312010, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mikhail +(9310038, 1322018, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tamus +(9310038, 1322019, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Judgement +(9310038, 1332015, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deadly Fin +(9310038, 1332017, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Coil +(9310038, 1332018, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Kandine +(9310038, 1332019, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden River +(9310038, 1342004, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ascalon Katara +(9310038, 1342005, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavenly Katara +(9310038, 1362009, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bijou Canne +(9310038, 1362010, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Regne +(9310038, 1372014, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Tale +(9310038, 1372015, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Angel Wings +(9310038, 1382006, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Thorns +(9310038, 1382007, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Wings +(9310038, 1402011, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sparta +(9310038, 1402012, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Doombringer +(9310038, 1412007, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Shining +(9310038, 1412008, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Chrono +(9310038, 1422009, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Blessing +(9310038, 1422010, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gigantic Sledge +(9310038, 1432006, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Spear +(9310038, 1432007, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Redemption +(9310038, 1442010, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Skylar +(9310038, 1442008, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Gold Dragon +(9310038, 1452004, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Asianic Bow +(9310038, 1452009, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hinkel +(9310038, 1462008, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Crow +(9310038, 1462009, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gross Jaeger +(9310038, 1472025, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Gigantic +(9310038, 1472029, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Scarab +(9310038, 1482008, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphims +(9310038, 1482009, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beia Crash +(9310038, 1492008, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Burning Hell +(9310038, 1492009, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Abyss Shooter +(9310038, 1522008, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Glory +(9310038, 1522009, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Twin Zephyrs +(9310038, 1532008, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Bigshot +(9310038, 1532009, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Infernalizer +(9310038, 1212004, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vallentier +(9310038, 1212005, 100, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sharp Slaver + +# Gali (1091002) +(1091002, 4170050, 100000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(1091002, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1091002, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1091002, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1091002, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1091002, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1091002, 2022000, 100000, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(1091002, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1091002, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1091002, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1091002, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1091002, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1091002, 2010000, 100000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1091002, 2010002, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1091002, 2010001, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1091002, 2010003, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1091002, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1091002, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(1091002, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1091002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1091002, 2030019, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Nautilus Return Scroll +(1091002, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1091002, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1091002, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1091002, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1091002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Morgan (1091000) +(1091000, 1492000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pistol +(1091000, 1492001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dellinger Special +(1091000, 1492002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Negotiator +(1091000, 1492003, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Hook +(1091000, 1492004, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cold Mind +(1091000, 1492005, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shooting Star +(1091000, 1492006, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Shooter +(1091000, 1532000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Novice Cannon +(1091000, 1532001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Cannon +(1091000, 1532002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ironside +(1091000, 1532003, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Beast +(1091000, 1532004, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Artillery +(1091000, 1532005, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Titan Cannon +(1091000, 1532006, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grand Cannon +(1091000, 1482000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Knuckler +(1091000, 1482001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Arms +(1091000, 1482002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Double Tail Knuckler +(1091000, 1482003, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Norman Grip +(1091000, 1482004, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Prime Hands +(1091000, 1482005, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Maiden +(1091000, 1482006, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neozard +(1091000, 1442004, 100000, 0, 0, 24000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Janitor's Mop +(1091000, 1302007, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Long Sword +(1091000, 1322007, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Purse + +# Rodos (1091001) +(1091001, 1002610, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Rocky Bandana +(1091001, 1002613, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lagger Cap +(1091001, 1002616, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Double Marine +(1091001, 1002619, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pitz Bandana +(1091001, 1002622, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Oceania Cap +(1091001, 1002625, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Den Marine +(1091001, 1002628, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Misty +(1091001, 1052095, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Rocky Suit +(1091001, 1052098, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Cotton Lagger +(1091001, 1052101, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Carribean +(1091001, 1052104, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Turk Gally +(1091001, 1052107, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pollard +(1091001, 1052110, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Brace Look +(1091001, 1052113, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Barbay +(1091001, 1072285, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lagger Slipper +(1091001, 1072288, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skeedy Sandals +(1091001, 1072291, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Wooden Krag +(1091001, 1072294, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Paulie Boots +(1091001, 1072297, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Locote Shoes +(1091001, 1072300, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Leather Krag +(1091001, 1082180, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lagger Halfglove +(1091001, 1082183, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Leather Armor Gloves +(1091001, 1082186, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hard Leather Gloves +(1091001, 1082189, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Tartis +(1091001, 1082192, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jeweled +(1091001, 1082195, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Barbee + +# Maroon (3000021) +(3000021, 4170050, 1000000000, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000 +), # Andersen's Key +(3000021, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(3000021, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(3000021, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(3000021, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(3000021, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(3000021, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(3000021, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(3000021, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(3000021, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(3000021, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(3000021, 2010000, 10000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(3000021, 2010002, 10000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(3000021, 2010001, 10000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(3000021, 2010003, 10000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(3000021, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(3000021, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(3000021, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(3000021, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(3000021, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(3000021, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(3000021, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(3000021, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(3000021, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(3000021, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(3000021, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Harpoon (3000020) +(3000020, 1190000, 1000000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lesser Dragon Emblem +(3000020, 1190001, 1000000, 0, 0, 1010000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dragon Emblem +(3000020, 1190100, 1000000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lesser Angel Emblem +(3000020, 1190101, 1000000, 0, 0, 1010000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Angel Emblem +(3000020, 1402001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Sword +(3000020, 1402000, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Sword +(3000020, 1402008, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Broadsword +(3000020, 1402002, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Scimitar +(3000020, 1402006, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lionheart +(3000020, 1402007, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zard +(3000020, 1222001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Haze +(3000020, 1222002, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Haze +(3000020, 1222003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Hatchling +(3000020, 1222004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jade Hatchling +(3000020, 1222005, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Wormhead +(3000020, 1002043, 100000, 0, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Coif +(3000020, 1002039, 100000, 0, 0, 2700, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Helmet +(3000020, 1002051, 100000, 0, 0, 3500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Full Helm +(3000020, 1002055, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Football Helmet +(3000020, 1002059, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Viking Helm +(3000020, 1002027, 100000, 0, 0, 11500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sharp Helm +(3000020, 1002005, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Burgernet Helm +(3000020, 1002023, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jousting Helmet +(3000020, 1002048, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Great Blue Helmet +(3000020, 1002021, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Nordic Helm +(3000020, 1040015, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Armor +(3000020, 1040038, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Armor +(3000020, 1040009, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal +(3000020, 1040037, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal +(3000020, 1040012, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sergeant +(3000020, 1040039, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant +(3000020, 1040040, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant +(3000020, 1040016, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant +(3000020, 1040041, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant +(3000020, 1040021, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hwarang Shirt +(3000020, 1040026, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hwarang Shirt +(3000020, 1041014, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Lolica Armor +(3000020, 1041064, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blueberry Lolica Armor +(3000020, 1041019, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lamelle +(3000020, 1041020, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lamelle +(3000020, 1041021, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lamelle +(3000020, 1041022, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark +(3000020, 1041023, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark +(3000020, 1041024, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark +(3000020, 1050005, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Kendo Robe +(3000020, 1050006, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Kendo Robe +(3000020, 1050007, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Kendo Robe +(3000020, 1050011, 100000, 0, 0, 70000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Dragon Robe +(3000020, 1051000, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fitted Mail +(3000020, 1051010, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Engrit +(3000020, 1051011, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Engrit +(3000020, 1051012, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Engrit +(3000020, 1051013, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Engrit +(3000020, 1040000, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Jangoon Armor +(3000020, 1040085, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Armor +(3000020, 1041084, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Armor +(3000020, 1041085, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Armor +(3000020, 1050000, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Crusader Chainmail +(3000020, 1050021, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Crusader Chainmail +(3000020, 1051001, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Fitted Mail +(3000020, 1051014, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Fitted Mail +(3000020, 1060075, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Pants +(3000020, 1060074, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Jangoon Pants +(3000020, 1061083, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Skirt +(3000020, 1061084, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Skirt +(3000020, 1060008, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Pants +(3000020, 1060028, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Pants +(3000020, 1060009, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal Pants +(3000020, 1060027, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal Pants +(3000020, 1060010, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sergeant Kilt +(3000020, 1060029, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant Kilt +(3000020, 1060011, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant Kilt +(3000020, 1060030, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant Kilt +(3000020, 1060060, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant Kilt +(3000020, 1060016, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Martial Arts Pants +(3000020, 1060017, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Martial Arts Pants +(3000020, 1060018, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Martial Arts Pants +(3000020, 1060019, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Martial Arts Pants +(3000020, 1061014, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rookie Pants +(3000020, 1061023, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sophia Pants +(3000020, 1061016, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ramel Skirt +(3000020, 1061017, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ramel Skirt +(3000020, 1061018, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ramel Skirt +(3000020, 1061015, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark Skirt +(3000020, 1061019, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark Skirt +(3000020, 1061020, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark Skirt +(3000020, 1072009, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Greaves +(3000020, 1072050, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Greaves +(3000020, 1072007, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown High Boots +(3000020, 1072046, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange High Boots +(3000020, 1072047, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue High Boots +(3000020, 1072011, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril War Boots +(3000020, 1072051, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver War Boots +(3000020, 1072052, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark War Boots +(3000020, 1072053, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold War Boots +(3000020, 1072039, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Battle Greaves +(3000020, 1072040, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Battle Greaves +(3000020, 1072041, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Battle Greaves +(3000020, 1072112, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Trigger +(3000020, 1072113, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Trigger +(3000020, 1072126, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Shoes +(3000020, 1072127, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jangoon Shoes +(3000020, 1082003, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Juno +(3000020, 1082000, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fingerless Gloves +(3000020, 1082004, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Venon +(3000020, 1082001, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Fingerless Gloves +(3000020, 1082006, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Missel +(3000020, 1082036, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Briggon +(3000020, 1082025, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Knuckle + +# Puno (1200001) +(1200001, 1442000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Polearm +(1200001, 1442006, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Ball +(1200001, 1442007, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Studded Polearm +(1200001, 1040002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Undershirt +(1200001, 1040006, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Undershirt +(1200001, 1040010, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey T-Shirt +(1200001, 1041002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Tubetop +(1200001, 1041006, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow T-Shirt +(1200001, 1041010, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green T-Shirt +(1200001, 1041011, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red-Striped Top +(1200001, 1060002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jean Shorts +(1200001, 1060006, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Cotton Shorts +(1200001, 1061002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Miniskirt +(1200001, 1061008, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Indigo Miniskirt +(1200001, 1072001, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Rubber Boots +(1200001, 1072005, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Sandals + +# Puri Puri (1200002) +(1200002, 4170050, 100000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(1200002, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1200002, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1200002, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1200002, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1200002, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1200002, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1200002, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1200002, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1200002, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1200002, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1200002, 2010000, 1000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1200002, 2010002, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1200002, 2010001, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1200002, 2010003, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1200002, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1200002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1200002, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1200002, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1200002, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1200002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Silver (1001000) +(1001000, 1542000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Simple Iron Sword +(1001000, 1302000, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sword +(1001000, 1312004, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hand Axe +(1001000, 1322005, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Club +(1001000, 1302007, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Long Sword +(1001000, 1312000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Double Axe +(1001000, 1332007, 100000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fruit Knife + +# Natasha (1001001) +(1001001, 1002008, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skullcap +(1001001, 1002014, 100000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Headband +(1001001, 1002066, 100000, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Headband +(1001001, 1002067, 100000, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Headband +(1001001, 1002068, 100000, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Headband +(1001001, 1002069, 100000, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Headband +(1001001, 1002132, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Swimming Cap +(1001001, 1002133, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Swimming Cap +(1001001, 1002134, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Swimming Cap +(1001001, 1002019, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Bandana +(1001001, 1002001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Gear +(1001001, 1040013, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue One-Lined T-Shirt +(1001001, 1040014, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Sporty T-Shirt +(1001001, 1041004, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Starry Shirt +(1001001, 1041012, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red-Striped T-Shirt +(1001001, 1060007, 100000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jean Capris +(1001001, 1060004, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Thick Sweat Pants +(1001001, 1062000, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ice Jeans +(1001001, 1062001, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sandblasted Jeans +(1001001, 1072001, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Rubber Boots +(1001001, 1072037, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Rubber Boots +(1001001, 1072038, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Rubber Boots +(1001001, 1072005, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Sandals +(1001001, 1072008, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Aroa Shoes +(1001001, 1072048, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Aroa Boots +(1001001, 1072049, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Aroa Boots +(1001001, 1072017, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ankle-Strap Sandals +(1001001, 1072062, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ankle-Strap Sandals +(1001001, 1072063, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ankle-Strap Sandals +(1001001, 1092003, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Stolen Fence +(1001001, 3010001, 100000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky-blue Wooden Chair + +# Mina (1001100) +(1001100, 4036032, 1000000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Roswaal's Oil Bottle +(1001100, 4170050, 100000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(1001100, 4032470, 1000000, 0, 0, 19800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tropical Fruit Punch +(1001100, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1001100, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1001100, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1001100, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1001100, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1001100, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1001100, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1001100, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1001100, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1001100, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1001100, 2010000, 100000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1001100, 2010002, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1001100, 2010001, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1001100, 2010003, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1001100, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1001100, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(1001100, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1001100, 2030001, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Lith Harbor +(1001100, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1001100, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1001100, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1001100, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1001100, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Balika (9390212) +(9390212, 1002008, 100, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skullcap +(9390212, 1002033, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wisconsin +(9390212, 1002012, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Baseball Cap +(9390212, 1002060, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Baseball Cap +(9390212, 1002061, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Baseball Cap +(9390212, 1002062, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Baseball Cap +(9390212, 1002063, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Baseball Cap +(9390212, 1002112, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Feather Hat +(9390212, 1002113, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Feather Hat +(9390212, 1002114, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Feather Hat +(9390212, 1002115, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Feather Hat +(9390212, 1002116, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Feather Hat +(9390212, 1002117, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Robin Hat +(9390212, 1002118, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Robin Hat +(9390212, 1002119, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Robin Hat +(9390212, 1002120, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Robin Hat +(9390212, 1002121, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Robin Hat +(9390212, 1002010, 100, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Winter Hat +(9390212, 1002057, 100, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Winter Hat +(9390212, 1002156, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter +(9390212, 1002157, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter +(9390212, 1002158, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter +(9390212, 1002159, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Hunter +(9390212, 1002160, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hunter +(9390212, 1002161, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hawkeye +(9390212, 1002162, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hawkeye +(9390212, 1002163, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hawkeye +(9390212, 1002164, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hawkeye +(9390212, 1002165, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hawkeye +(9390212, 1032001, 100, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Single Earring +(9390212, 1032003, 100, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Amethyst Earrings +(9390212, 1040008, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Archer Top +(9390212, 1040071, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Archer Top +(9390212, 1040007, 100, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Leather Hoodwear +(9390212, 1040011, 100, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Leather Hoodwear +(9390212, 1040003, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Top +(9390212, 1040022, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(9390212, 1040023, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bennis Chainmail +(9390212, 1040024, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(9390212, 1040025, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(9390212, 1040067, 100, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Armor +(9390212, 1040068, 100, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Armor +(9390212, 1040069, 100, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Armor +(9390212, 1040070, 100, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Armor +(9390212, 1041007, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin +(9390212, 1041061, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin +(9390212, 1041008, 100, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor +(9390212, 1041062, 100, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Able Armor +(9390212, 1041063, 100, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Armor +(9390212, 1041013, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail +(9390212, 1041027, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail +(9390212, 1041028, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail +(9390212, 1041032, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(9390212, 1041033, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(9390212, 1041034, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(9390212, 1041035, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Bennis Chainmail +(9390212, 1041054, 100, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Armor +(9390212, 1041055, 100, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Armor +(9390212, 1041056, 100, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Armor +(9390212, 1060005, 100, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Warfare Pants +(9390212, 1060056, 100, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Pants +(9390212, 1060057, 100, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Pants +(9390212, 1060058, 100, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Pants +(9390212, 1060059, 100, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Pants +(9390212, 1061009, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin Skirt +(9390212, 1061057, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin Skirt +(9390212, 1061006, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor Skirt +(9390212, 1061058, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Able Skirt +(9390212, 1061059, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Skirt +(9390212, 1061024, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail Skirt +(9390212, 1061025, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail Skirt +(9390212, 1061026, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail Skirt +(9390212, 1061050, 100, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Pants +(9390212, 1061051, 100, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Pants +(9390212, 1061052, 100, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Pants +(9390212, 1062004, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Archer Pants +(9390212, 1062002, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Pants +(9390212, 1062006, 100, 0, 0, 13000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bennis Chainpants +(9390212, 1072015, 100, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Boots +(9390212, 1072059, 100, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hard Leather Boots +(9390212, 1072016, 100, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Woodsman Boots +(9390212, 1072060, 100, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Woodsman Boots +(9390212, 1072061, 100, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Woodsman Boots +(9390212, 1072025, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deer Huntertop +(9390212, 1072026, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rabbit Huntertop +(9390212, 1072067, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bear Huntertop +(9390212, 1072068, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # LIon Huntertop +(9390212, 1072012, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Whitebottom Shoes +(9390212, 1072054, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Whitebottom Boots +(9390212, 1072055, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Whitebottom Boots +(9390212, 1072056, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Whitebottom Boots +(9390212, 1072018, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneakers +(9390212, 1072064, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sneakers +(9390212, 1002043, 100, 0, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Coif +(9390212, 1002039, 100, 0, 0, 2700, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Helmet +(9390212, 1002051, 100, 0, 0, 3500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Full Helm +(9390212, 1002055, 100, 0, 0, 8700, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Football Helmet +(9390212, 1002059, 100, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Viking Helm +(9390212, 1002027, 100, 0, 0, 11500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sharp Helm +(9390212, 1002005, 100, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Burgernet Helm +(9390212, 1040015, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Armor +(9390212, 1040038, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Armor +(9390212, 1040009, 100, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal +(9390212, 1040037, 100, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal +(9390212, 1040012, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sergeant +(9390212, 1040039, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant +(9390212, 1040040, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant +(9390212, 1040016, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant +(9390212, 1040041, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant +(9390212, 1040021, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hwarang Shirt +(9390212, 1040026, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hwarang Shirt +(9390212, 1041014, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Lolica Armor +(9390212, 1041064, 100, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blueberry Lolica Armor +(9390212, 1041019, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lamelle +(9390212, 1041020, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lamelle +(9390212, 1041021, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lamelle +(9390212, 1041022, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark +(9390212, 1041023, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark +(9390212, 1041024, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark +(9390212, 1050005, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Kendo Robe +(9390212, 1050006, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Kendo Robe +(9390212, 1050007, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Kendo Robe +(9390212, 1050011, 100, 0, 0, 70000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Dragon Robe +(9390212, 1051000, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fitted Mail +(9390212, 1051010, 100, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Engrit +(9390212, 1051011, 100, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Engrit +(9390212, 1051012, 100, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Engrit +(9390212, 1051013, 100, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Engrit +(9390212, 1060008, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Pants +(9390212, 1060028, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Pants +(9390212, 1060009, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal Pants +(9390212, 1060027, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal Pants +(9390212, 1060010, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sergeant Kilt +(9390212, 1060029, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant Kilt +(9390212, 1060011, 100, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant Kilt +(9390212, 1060030, 100, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant Kilt +(9390212, 1060060, 100, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant Kilt +(9390212, 1060016, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Martial Arts Pants +(9390212, 1060017, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Martial Arts Pants +(9390212, 1060018, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Martial Arts Pants +(9390212, 1060019, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Martial Arts Pants +(9390212, 1061014, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rookie Pants +(9390212, 1061023, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sophia Pants +(9390212, 1061016, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ramel Skirt +(9390212, 1061017, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ramel Skirt +(9390212, 1061018, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ramel Skirt +(9390212, 1061015, 100, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark Skirt +(9390212, 1061019, 100, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark Skirt +(9390212, 1061020, 100, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark Skirt +(9390212, 1072009, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Greaves +(9390212, 1072050, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Greaves +(9390212, 1072007, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown High Boots +(9390212, 1072046, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange High Boots +(9390212, 1072047, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue High Boots +(9390212, 1072011, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril War Boots +(9390212, 1092005, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Buckler +(9390212, 1092000, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Shield +(9390212, 1002122, 100, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ghetto Beanie +(9390212, 1002123, 100, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ghetto Beanie +(9390212, 1002124, 100, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ghetto Beanie +(9390212, 1002125, 100, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Ghetto Beanie +(9390212, 1002126, 100, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ghetto Beanie +(9390212, 1002001, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Gear +(9390212, 1002107, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Thief Hood +(9390212, 1002108, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Thief Hood +(9390212, 1002109, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Thief Hood +(9390212, 1002110, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Thief Hood +(9390212, 1002111, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Thief Hood +(9390212, 1002127, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Loosecap +(9390212, 1002128, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Loosecap +(9390212, 1002129, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Loosecap +(9390212, 1002130, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Loosecap +(9390212, 1002131, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Loosecap +(9390212, 1002020, 100, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Starry Bandana +(9390212, 1002096, 100, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Blue Starry Bandana +(9390212, 1002097, 100, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Starry Bandana +(9390212, 1002146, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tiberian +(9390212, 1002147, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tiberian +(9390212, 1002148, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Tiberian +(9390212, 1002149, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Tiberian +(9390212, 1002150, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Tiberian +(9390212, 1002171, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Guise +(9390212, 1002172, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Guise +(9390212, 1002173, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Guise +(9390212, 1002174, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Guise +(9390212, 1002175, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Guise +(9390212, 1040031, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Vest +(9390212, 1040032, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Vest +(9390212, 1040033, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Vest +(9390212, 1040034, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Nightshift +(9390212, 1040035, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Nightshift +(9390212, 1040042, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pao +(9390212, 1040043, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pao +(9390212, 1040044, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pao +(9390212, 1040048, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Sneak +(9390212, 1040049, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneak +(9390212, 1040050, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Sneak +(9390212, 1040057, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Stealer +(9390212, 1040058, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Silver Stealer +(9390212, 1040059, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Gold Stealer +(9390212, 1040060, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Black Stealer +(9390212, 1041036, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Vest +(9390212, 1041037, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Vest +(9390212, 1041038, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Vest +(9390212, 1041044, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Nightshift +(9390212, 1041045, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Nightshift +(9390212, 1041003, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao +(9390212, 1041039, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Qi Pao +(9390212, 1041040, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao +(9390212, 1041057, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Sneak +(9390212, 1041058, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Sneak +(9390212, 1041059, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Sneak +(9390212, 1041060, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Sneak +(9390212, 1041047, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Steal +(9390212, 1041048, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Steal +(9390212, 1041049, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Steal +(9390212, 1041050, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steal +(9390212, 1060021, 100, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Pants +(9390212, 1060022, 100, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Pants +(9390212, 1060023, 100, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Pants +(9390212, 1060024, 100, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Nightshift Pants +(9390212, 1060025, 100, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Nightshift Pants +(9390212, 1060031, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pao Bottom +(9390212, 1060032, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pao Bottom +(9390212, 1060033, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pao Bottom +(9390212, 1060037, 100, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Sneak Pants +(9390212, 1060038, 100, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Sneak Pants +(9390212, 1060039, 100, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Sneak Pants +(9390212, 1060043, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Stealer Pants +(9390212, 1060044, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Silver Stealer Pants +(9390212, 1060045, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red / Gold Stealer Pants +(9390212, 1060046, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver / Black Stealer Pants +(9390212, 1061029, 100, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Pants +(9390212, 1061030, 100, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Pants +(9390212, 1061031, 100, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Pants +(9390212, 1061037, 100, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Nightshift Pants +(9390212, 1061038, 100, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Nightshift Pants +(9390212, 1061003, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao Pants +(9390212, 1061032, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Qi Pao Pants +(9390212, 1061033, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao Pants +(9390212, 1061040, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao Skirt +(9390212, 1061041, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Qi Pao Skirt +(9390212, 1061042, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao Skirt +(9390212, 1061053, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Sneak Pants +(9390212, 1061054, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Sneak Pants +(9390212, 1061055, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Sneak Pants +(9390212, 1061056, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Sneak Pants +(9390212, 1061043, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Steal Pants +(9390212, 1061044, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Steal Pants +(9390212, 1061045, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Steal Pants +(9390212, 1061046, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steal Pants +(9390212, 1072070, 100, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Gidder Shoes +(9390212, 1072071, 100, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Gidder Shoes +(9390212, 1072004, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Gomushin +(9390212, 1072042, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Gomushin +(9390212, 1072043, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Smelly Gomushin +(9390212, 1072028, 100, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Ninja Sandals +(9390212, 1072029, 100, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Ninja Sandals +(9390212, 1072030, 100, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ninja Sandals +(9390212, 1072031, 100, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ninja Sandals +(9390212, 1072022, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Enamel Boots +(9390212, 1072065, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Enamel Boots +(9390212, 1072066, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Enamel Boots +(9390212, 1002610, 1000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Rocky Bandana +(9390212, 1002613, 1000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lagger Cap +(9390212, 1002616, 1000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Double Marine +(9390212, 1002619, 1000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pitz Bandana +(9390212, 1052095, 1000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Rocky Suit +(9390212, 1052098, 1000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Cotton Lagger +(9390212, 1052101, 1000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Carribean +(9390212, 1052104, 1000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Turk Gally +(9390212, 1052107, 1000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pollard +(9390212, 1072285, 1000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lagger Slipper +(9390212, 1072288, 1000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skeedy Sandals +(9390212, 1002017, 100, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Apprentice Hat +(9390212, 1002102, 100, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Conehat +(9390212, 1002103, 100, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Moon Conehat +(9390212, 1002104, 100, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Moon Conehat +(9390212, 1002105, 100, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moon Conehat +(9390212, 1002106, 100, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon Conehat +(9390212, 1002016, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizardry Hat +(9390212, 1040004, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Shirt +(9390212, 1040017, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Shirt +(9390212, 1040018, 100, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Piece +(9390212, 1040019, 100, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Split Piece +(9390212, 1040020, 100, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Split Piece +(9390212, 1041015, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine +(9390212, 1041016, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine +(9390212, 1041017, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne +(9390212, 1041018, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne +(9390212, 1041025, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne +(9390212, 1041026, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne +(9390212, 1041029, 100, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split +(9390212, 1041030, 100, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Split +(9390212, 1041031, 100, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Split +(9390212, 1041041, 100, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Top +(9390212, 1041042, 100, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Top +(9390212, 1041043, 100, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Top +(9390212, 1050008, 100, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Plain Robe +(9390212, 1050009, 100, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Plain Robe +(9390212, 1050010, 100, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Plain Robe +(9390212, 1050001, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doros Robe +(9390212, 1050023, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Doros Robe +(9390212, 1050024, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Doros Robe +(9390212, 1050025, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Doros Robe +(9390212, 1050003, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Wizard Robe +(9390212, 1050026, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Wizard Robe +(9390212, 1050027, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Mage Robe +(9390212, 1050028, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizard Robe +(9390212, 1051004, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Doroness Robe +(9390212, 1051005, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Doroness Robe +(9390212, 1051003, 100, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doroness Robe +(9390212, 1060012, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Pants +(9390212, 1060013, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Pants +(9390212, 1060014, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Pants +(9390212, 1060015, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Pants +(9390212, 1061010, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine Skirt +(9390212, 1061011, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine Skirt +(9390212, 1061012, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne Skirt +(9390212, 1061013, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne Skirt +(9390212, 1061021, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne Skirt +(9390212, 1061022, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne Skirt +(9390212, 1061027, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Skirt +(9390212, 1061028, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Skirt +(9390212, 1061034, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Skirt +(9390212, 1061035, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Skirt +(9390212, 1061036, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Skirt +(9390212, 1072006, 100, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Basic Boots +(9390212, 1072044, 100, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Basic Boots +(9390212, 1072045, 100, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Basic Boots +(9390212, 1072023, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Nitty +(9390212, 1072024, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Nitty +(9390212, 1612000, 100, 0, 0, 68000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Copper Engine +(9390212, 1612001, 100, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Engine +(9390212, 1622000, 100, 0, 0, 53000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Copper Machine Arm +(9390212, 1622001, 100, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Machine Arm +(9390212, 1632000, 100, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Machine Leg +(9390212, 1642000, 100, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Body Frame +(9390212, 1652000, 100, 0, 0, 53000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Copper Transistor +(9390212, 1652001, 100, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Transistor + +# Silbaron (9390210) +(9390210, 1302007, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Long Sword +(9390210, 1302005, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sabre +(9390210, 1302002, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Viking Sword +(9390210, 1302006, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Machete +(9390210, 1302003, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eloon +(9390210, 1302008, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gladius +(9390210, 1332006, 100, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Field Dagger +(9390210, 1332008, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Coconut Knife +(9390210, 1332010, 100, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Dagger +(9390210, 1312001, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Axe +(9390210, 1312003, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Axe +(9390210, 1312005, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fireman's Axe +(9390210, 1322000, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mace +(9390210, 1322002, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Mace +(9390210, 1322004, 100, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fusion Mace +(9390210, 1322014, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Hammer +(9390210, 1402001, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Sword +(9390210, 1402000, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Sword +(9390210, 1402008, 100, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Broadsword +(9390210, 1412001, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Axe +(9390210, 1412002, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Axe +(9390210, 1412000, 100, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Axe +(9390210, 1412006, 100, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Axe +(9390210, 1422002, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Mace +(9390210, 1422003, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Square Hammer +(9390210, 1422006, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pickaxe +(9390210, 1432001, 100, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fork on a Stick +(9390210, 1442000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Polearm +(9390210, 1442006, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Ball +(9390210, 1442007, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Studded Polearm +(9390210, 1372005, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Wand +(9390210, 1372006, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hardwood Wand +(9390210, 1372002, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Wand +(9390210, 1372004, 100, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ice Wand +(9390210, 1372003, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Wand +(9390210, 1382000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Staff +(9390210, 1382003, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Staff +(9390210, 1382005, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Staff +(9390210, 1382004, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wooden Staff +(9390210, 1382002, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Staff +(9390210, 1322002, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Mace +(9390210, 1452002, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Bow +(9390210, 1452003, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Composite Bow +(9390210, 1452001, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hunter's Bow +(9390210, 1452000, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Bow +(9390210, 1462001, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crossbow +(9390210, 1462002, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Crossbow +(9390210, 1462003, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Balanche +(9390210, 1462000, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mountain Crossbow +(9390210, 1332000, 100, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triangular Zamadar +(9390210, 1332002, 100, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triple-Tipped Zamadar +(9390210, 1332008, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Coconut Knife +(9390210, 1332013, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Stinger +(9390210, 1332010, 100, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Dagger +(9390210, 1332004, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Forked Dagger +(9390210, 1332012, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reef Claw +(9390210, 1332009, 100, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cass +(9390210, 1322009, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plunger +(9390210, 1472000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Garnier +(9390210, 1342000, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Champion Katara +(9390210, 1342001, 100, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Guardian Katara +(9390210, 1492000, 1000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pistol +(9390210, 1492001, 1000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dellinger Special +(9390210, 1492002, 1000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Negotiator +(9390210, 1492003, 1000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Hook +(9390210, 1492004, 1000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cold Mind +(9390210, 1532000, 1000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Novice Cannon +(9390210, 1532001, 1000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Cannon +(9390210, 1532002, 1000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ironside +(9390210, 1532003, 1000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Beast +(9390210, 1532004, 1000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Artillery +(9390210, 1482000, 1000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Knuckler +(9390210, 1482001, 1000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Arms +(9390210, 1482002, 1000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Double Tail Knuckler +(9390210, 1482003, 1000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Norman Grip +(9390210, 1482004, 1000, 0, 0, 52000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Prime Hands +(9390210, 1422004, 100, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Monkey Wrench +(9390210, 1442004, 100, 0, 0, 24000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Janitor's Mop +(9390210, 1322007, 100, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Purse +(9390210, 1322008, 100, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hard Briefcase +(9390210, 1422000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Mallet +(9390210, 1432000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spear +(9390210, 1232001, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ravager +(9390210, 1232002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dim Memory +(9390210, 1232003, 100, 0, 0, 215000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eternal Wanderer +(9390210, 1190200, 1000000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Hybrid Heart +(9390210, 1190201, 1000000, 0, 0, 1010000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hybrid Heart +(9390210, 1242001, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Horned Blade +(9390210, 1242002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ridge Cutter +(9390210, 1242003, 100, 0, 0, 215000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rough Violet +(9390210, 1212001, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plain +(9390210, 1212002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Shine +(9390210, 1542000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Simple Iron Sword +(9390210, 1542001, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tempered Steel Sword +(9390210, 1542002, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Guardian +(9390210, 1552000, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Fan +(9390210, 1552001, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metallic Fan +(9390210, 1552002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triple Fan +(9390210, 1252001, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beast Tamer Scepter +(9390210, 1252002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Assign Scepter + +# Kentucky (9390211) +(9390211, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(9390211, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(9390211, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(9390211, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(9390211, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(9390211, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(9390211, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(9390211, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(9390211, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(9390211, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(9390211, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(9390211, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(9390211, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(9390211, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(9390211, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(9390211, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(9390211, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(9390211, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(9390211, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(9390211, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(9390211, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(9390211, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(9390211, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(9390211, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(9390211, 2050003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(9390211, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(9390211, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(9390211, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(9390211, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(9390211, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(9390211, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food + +# Kikkawa Motoharu (9130029) +(9130029, 1302004, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cutlass +(9130029, 1302009, 10000, 0, 0, 225000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Traus +(9130029, 1542000, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Simple Iron Sword +(9130029, 1542001, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tempered Steel Sword +(9130029, 1542002, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Guardian +(9130029, 1542003, 10000, 0, 0, 225000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bare Blade +(9130029, 1352800, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Tiger Blade +(9130029, 1352801, 100, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Dragon Blade +(9130029, 1352802, 100, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lake Monster Blade +(9130029, 1352803, 100, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fire Phoenix Blade +(9130029, 1312006, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dankke +(9130029, 1312007, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Counter +(9130029, 1322015, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Hammer +(9130029, 1322016, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jacker +(9130029, 1332001, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Halfmoon Zamadar +(9130029, 1332011, 10000, 0, 0, 425000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bazlud +(9130029, 1332014, 10000, 0, 0, 375000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gephart +(9130029, 1342002, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Justice Katara +(9130029, 1372000, 10000, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fairy Wand +(9130029, 1372001, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Wand +(9130029, 1552000, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Fan +(9130029, 1552001, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metallic Fan +(9130029, 1552002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triple Fan +(9130029, 1552003, 10000, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crane Fan +(9130029, 1402006, 10000, 0, 0, 350000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lionheart +(9130029, 1402007, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zard +(9130029, 1412004, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Niam +(9130029, 1412005, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sabretooth +(9130029, 1422007, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Titan +(9130029, 1422008, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sledgehammer +(9130029, 1432003, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nakamaki +(9130029, 1432005, 10000, 0, 0, 225000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zeco +(9130029, 1442003, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Axe Polearm +(9130029, 1442009, 10000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crescent Polearm +(9130029, 1452006, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viper +(9130029, 1452007, 10000, 0, 0, 375000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vaulter 2000 +(9130029, 1462004, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eagle Crow +(9130029, 1462005, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heckler +(9130029, 1472004, 10000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Igor +(9130029, 1472007, 10000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Meba +(9130029, 1482005, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Maiden +(9130029, 1482006, 10000, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neozard +(9130029, 1492005, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shooting Star +(9130029, 1492006, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Shooter +(9130029, 1002004, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Great Brown Helmet +(9130029, 1002135, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pole-Feather Hat +(9130029, 1002137, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Pole-Feather Hat +(9130029, 1002138, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pole-Feather Hat +(9130029, 1002139, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pole-Feather Hat +(9130029, 1002141, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Matty +(9130029, 1002142, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Matty +(9130029, 1002143, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Matty +(9130029, 1002144, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Matty +(9130029, 1002176, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Burgler +(9130029, 1002177, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Burglar +(9130029, 1002178, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Burgler +(9130029, 1002179, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Burgler +(9130029, 1002180, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Burglar +(9130029, 1002625, 10000, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Den Marine +(9130029, 1040000, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Jangoon Armor +(9130029, 1040061, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Knucklevest +(9130029, 1040062, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Knucklevest +(9130029, 1040063, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Knucklevest +(9130029, 1040072, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier +(9130029, 1040073, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier +(9130029, 1040074, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier +(9130029, 1040076, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier +(9130029, 1040079, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette +(9130029, 1040081, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piette +(9130029, 1040082, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Khaki Shadow +(9130029, 1040083, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Marine Shadow +(9130029, 1040085, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Armor +(9130029, 1041051, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Top +(9130029, 1041052, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Top +(9130029, 1041065, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia +(9130029, 1041066, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia +(9130029, 1041067, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia +(9130029, 1041069, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia +(9130029, 1041074, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shadow +(9130029, 1041075, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shadow +(9130029, 1041081, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra +(9130029, 1041082, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra +(9130029, 1041084, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Armor +(9130029, 1041085, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Armor +(9130029, 1050000, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Crusader Chainmail +(9130029, 1050002, 10000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Chaos Robe +(9130029, 1050021, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Crusader Chainmail +(9130029, 1050031, 10000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Chaos Robe +(9130029, 1050035, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Starlight +(9130029, 1050036, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Starlight +(9130029, 1050037, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Starlight +(9130029, 1050038, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Starlight +(9130029, 1051001, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Fitted Mail +(9130029, 1051007, 10000, 0, 0, 111000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Avenger +(9130029, 1051008, 10000, 0, 0, 111000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Avenger +(9130029, 1051009, 10000, 0, 0, 111000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Avenger +(9130029, 1051014, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Fitted Mail +(9130029, 1051023, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Moonlight +(9130029, 1051024, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moonlight +(9130029, 1051025, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moonlight +(9130029, 1051027, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moonlight +(9130029, 1052110, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Brace Look +(9130029, 1052113, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Barbay +(9130029, 1060050, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Knucklevest Pants +(9130029, 1060051, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Knucklevest Pants +(9130029, 1060052, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Knucklevest Pants +(9130029, 1060061, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier Pants +(9130029, 1060062, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier Pants +(9130029, 1060063, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier Pants +(9130029, 1060065, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier Pants +(9130029, 1060069, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette Pants +(9130029, 1060070, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Piette Pants +(9130029, 1060071, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Khaki Shadow Pants +(9130029, 1060072, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Marine Shadow Pants +(9130029, 1060074, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Jangoon Pants +(9130029, 1060075, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Pants +(9130029, 1061047, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Skirt +(9130029, 1061048, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Skirt +(9130029, 1061060, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia Pants +(9130029, 1061061, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia Pants +(9130029, 1061062, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia Pants +(9130029, 1061064, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia Pants +(9130029, 1061069, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shadow Pants +(9130029, 1061070, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shadow Pants +(9130029, 1061080, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra Skirt +(9130029, 1061081, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra Skirt +(9130029, 1061083, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Skirt +(9130029, 1061084, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Skirt +(9130029, 1072168, 1000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Snowshoes +(9130029, 1072169, 1000, 0, 0, 28000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Snowshoes +(9130029, 1072170, 1000, 0, 0, 29000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Snowshoes +(9130029, 1072171, 1000, 0, 0, 29000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Snowshoes +(9130029, 4033277, 10000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Excellent Harness +(9130029, 1072338, 1000, 0, 0, 29000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Snowshoes +(9130029, 1092001, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Triangular Shield +(9130029, 1092002, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cross Shield + +# Kobayakawa Takakage (9130030) +(9130030, 4170050, 100000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(9130030, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(9130030, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(9130030, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(9130030, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(9130030, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(9130030, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(9130030, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(9130030, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(9130030, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(9130030, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(9130030, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(9130030, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(9130030, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(9130030, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(9130030, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(9130030, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(9130030, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(9130030, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(9130030, 2020012, 1000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(9130030, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(9130030, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(9130030, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(9130030, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(9130030, 2022001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Bean Porridge +(9130030, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(9130030, 2022186, 1000000, 0, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Soft White Bun +(9130030, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(9130030, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(9130030, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(9130030, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(9130030, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(9130030, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(9130030, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(9130030, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(9130030, 4033278, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Spirit Shroom + + +# General Mau (1011101) +(1011101, 1252001, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beast Tamer Scepter +(1011101, 1252002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Assign Scepter +(1011101, 1372005, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Wand +(1011101, 1372006, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hardwood Wand +(1011101, 1372002, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Wand +(1011101, 1372004, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ice Wand +(1011101, 1372003, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Wand +(1011101, 1372001, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Wand +(1011101, 1372000, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fairy Wand +(1011101, 1382000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Staff +(1011101, 1382003, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Staff +(1011101, 1382005, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Staff +(1011101, 1382004, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wooden Staff +(1011101, 1382002, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Staff +(1011101, 1382017, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Circle-Winded Staff +(1011101, 1382018, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Petal Staff +(1011101, 1382019, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hall Staff +(1011101, 1452002, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Bow +(1011101, 1452003, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Composite Bow +(1011101, 1452001, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hunter's Bow +(1011101, 1452000, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Bow +(1011101, 1452005, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ryden +(1011101, 1452006, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viper +(1011101, 1452007, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vaulter 2000 +(1011101, 1462001, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crossbow +(1011101, 1462002, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Crossbow +(1011101, 1462003, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Balanche +(1011101, 1462000, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mountain Crossbow +(1011101, 1462004, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eagle Crow +(1011101, 1462005, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heckler +(1011101, 1462006, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Crow +(1011101, 1212001, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plain +(1011101, 1212002, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Shine +(1011101, 1002017, 100000, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Apprentice Hat +(1011101, 1002102, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Conehat +(1011101, 1002103, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Moon Conehat +(1011101, 1002104, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Moon Conehat +(1011101, 1002105, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moon Conehat +(1011101, 1002106, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon Conehat +(1011101, 1002016, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizardry Hat +(1011101, 1002034, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jester +(1011101, 1002035, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Jester +(1011101, 1002036, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Jester +(1011101, 1002037, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Jester +(1011101, 1002038, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jester +(1011101, 1002141, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Matty +(1011101, 1002142, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Matty +(1011101, 1002143, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Matty +(1011101, 1002144, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Matty +(1011101, 1002151, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Guiltian +(1011101, 1002152, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Guiltian +(1011101, 1002153, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Guiltian +(1011101, 1002154, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Guiltian +(1011101, 1002155, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Guiltian +(1011101, 1040004, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Shirt +(1011101, 1040017, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Shirt +(1011101, 1040018, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Piece +(1011101, 1040019, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Split Piece +(1011101, 1040020, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Split Piece +(1011101, 1041015, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine +(1011101, 1041016, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine +(1011101, 1041017, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne +(1011101, 1041018, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne +(1011101, 1041025, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne +(1011101, 1041026, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne +(1011101, 1041029, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split +(1011101, 1041030, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Split +(1011101, 1041031, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Split +(1011101, 1041041, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Top +(1011101, 1041042, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Top +(1011101, 1041043, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Top +(1011101, 1041052, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Top +(1011101, 1041051, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Top +(1011101, 1050008, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Plain Robe +(1011101, 1050009, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Plain Robe +(1011101, 1050010, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Plain Robe +(1011101, 1050001, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doros Robe +(1011101, 1050023, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Doros Robe +(1011101, 1050024, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Doros Robe +(1011101, 1050025, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Doros Robe +(1011101, 1050003, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Wizard Robe +(1011101, 1050026, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Wizard Robe +(1011101, 1050027, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Mage Robe +(1011101, 1050028, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizard Robe +(1011101, 1051004, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Doroness Robe +(1011101, 1051005, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Doroness Robe +(1011101, 1051003, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doroness Robe +(1011101, 1050031, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Chaos Robe +(1011101, 1050002, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Chaos Robe +(1011101, 1050035, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Starlight +(1011101, 1050038, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Starlight +(1011101, 1050036, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Starlight +(1011101, 1050037, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Starlight +(1011101, 1051023, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Moonlight +(1011101, 1051025, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moonlight +(1011101, 1051024, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moonlight +(1011101, 1051027, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moonlight +(1011101, 1060012, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Pants +(1011101, 1060013, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Pants +(1011101, 1060014, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Pants +(1011101, 1060015, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Pants +(1011101, 1061010, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine Skirt +(1011101, 1061011, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine Skirt +(1011101, 1061012, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne Skirt +(1011101, 1061013, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne Skirt +(1011101, 1061021, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne Skirt +(1011101, 1061022, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne Skirt +(1011101, 1061027, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Skirt +(1011101, 1061028, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Skirt +(1011101, 1061034, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Skirt +(1011101, 1061035, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Skirt +(1011101, 1061036, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Skirt +(1011101, 1061048, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Skirt +(1011101, 1061047, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Skirt +(1011101, 1072006, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Basic Boots +(1011101, 1072044, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Basic Boots +(1011101, 1072045, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Basic Boots +(1011101, 1072023, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Nitty +(1011101, 1072024, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Nitty +(1011101, 1072019, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jewelry Boots +(1011101, 1072020, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Jewelry Boots +(1011101, 1072021, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jewelry Boots +(1011101, 1072072, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Windshoes +(1011101, 1072073, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Windshoes +(1011101, 1072074, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Windshoes +(1011101, 1072075, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Magicshoes +(1011101, 1072076, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Magicshoes +(1011101, 1072077, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Magicshoes +(1011101, 1072078, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Magicshoes +(1011101, 1072089, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Salt Shoes +(1011101, 1072090, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Salt Shoes +(1011101, 1072091, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Salt Shoes +(1011101, 1072114, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Shoes +(1011101, 1072115, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Shoes +(1011101, 1072116, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Moon Shoes +(1011101, 1072117, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moon Shoes +(1011101, 1082019, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lemona +(1011101, 1082022, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Morrican +(1011101, 1082028, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Mesana +(1011101, 1082053, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Lutia +(1011101, 1082056, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Noel +(1011101, 1082064, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Arten +(1011101, 1002112, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Feather Hat +(1011101, 1002113, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Feather Hat +(1011101, 1002114, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Feather Hat +(1011101, 1002115, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Feather Hat +(1011101, 1002116, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Feather Hat +(1011101, 1002117, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Robin Hat +(1011101, 1002118, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Robin Hat +(1011101, 1002119, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Robin Hat +(1011101, 1002120, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Robin Hat +(1011101, 1002121, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Robin Hat +(1011101, 1002161, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hawkeye +(1011101, 1002162, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hawkeye +(1011101, 1002163, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hawkeye +(1011101, 1002164, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hawkeye +(1011101, 1002165, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hawkeye +(1011101, 1002135, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pole-Feather Hat +(1011101, 1002136, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pole-Feather Hat +(1011101, 1002137, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Pole-Feather Hat +(1011101, 1002138, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pole-Feather Hat +(1011101, 1002139, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pole-Feather Hat +(1011101, 1002166, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Distinction +(1011101, 1002167, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Distinction +(1011101, 1002168, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Distinction +(1011101, 1002169, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Distinction +(1011101, 1002170, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Distinction +(1011101, 1002010, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Winter Hat +(1011101, 1002057, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Winter Hat +(1011101, 1002156, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter +(1011101, 1002157, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter +(1011101, 1002158, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter +(1011101, 1002159, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Hunter +(1011101, 1002160, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hunter +(1011101, 1040008, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Archer Top +(1011101, 1040071, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Archer Top +(1011101, 1040007, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Leather Hoodwear +(1011101, 1040011, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Leather Hoodwear +(1011101, 1040003, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Top +(1011101, 1040022, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(1011101, 1040023, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bennis Chainmail +(1011101, 1040024, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(1011101, 1040025, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(1011101, 1040067, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Armor +(1011101, 1040068, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Armor +(1011101, 1040069, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Armor +(1011101, 1040070, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Armor +(1011101, 1041007, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin +(1011101, 1041061, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin +(1011101, 1041008, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor +(1011101, 1041062, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Able Armor +(1011101, 1041063, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Armor +(1011101, 1041013, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail +(1011101, 1041027, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail +(1011101, 1041028, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail +(1011101, 1041032, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(1011101, 1041033, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(1011101, 1041034, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(1011101, 1041035, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Bennis Chainmail +(1011101, 1041054, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Armor +(1011101, 1041055, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Armor +(1011101, 1041056, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Armor +(1011101, 1040072, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier +(1011101, 1040073, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier +(1011101, 1040074, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier +(1011101, 1040076, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier +(1011101, 1040081, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piette +(1011101, 1040079, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette +(1011101, 1041066, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia +(1011101, 1041069, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia +(1011101, 1041065, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia +(1011101, 1041067, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia +(1011101, 1041082, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra +(1011101, 1041081, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra +(1011101, 1060005, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Warfare Pants +(1011101, 1060056, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Pants +(1011101, 1060057, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Pants +(1011101, 1060058, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Pants +(1011101, 1060059, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Pants +(1011101, 1061009, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin Skirt +(1011101, 1061057, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin Skirt +(1011101, 1061006, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor Skirt +(1011101, 1061058, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Able Skirt +(1011101, 1061059, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Skirt +(1011101, 1061024, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail Skirt +(1011101, 1061025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail Skirt +(1011101, 1061026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail Skirt +(1011101, 1061050, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Pants +(1011101, 1061051, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Pants +(1011101, 1061052, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Pants +(1011101, 1060062, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier Pants +(1011101, 1060065, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier Pants +(1011101, 1060061, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier Pants +(1011101, 1060063, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier Pants +(1011101, 1060070, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Piette Pants +(1011101, 1060069, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette Pants +(1011101, 1061061, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia Pants +(1011101, 1061064, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia Pants +(1011101, 1061060, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia Pants +(1011101, 1061062, 100000, 0, 0, 67501, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia Pants +(1011101, 1061081, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra Skirt +(1011101, 1061080, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra Skirt +(1011101, 1062002, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Pants +(1011101, 1062006, 100000, 0, 0, 13000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bennis Chainpants +(1011101, 1072015, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Boots +(1011101, 1072059, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hard Leather Boots +(1011101, 1072016, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Woodsman Boots +(1011101, 1072060, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Woodsman Boots +(1011101, 1072061, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Woodsman Boots +(1011101, 1072025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deer Huntertop +(1011101, 1072026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rabbit Huntertop +(1011101, 1072067, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bear Huntertop +(1011101, 1072068, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # LIon Huntertop +(1011101, 1072034, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Jack Boots +(1011101, 1072069, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jack Boots +(1011101, 1072079, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter Boots +(1011101, 1072080, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter Boots +(1011101, 1072081, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter Boots +(1011101, 1072082, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Hunter Boots +(1011101, 1072083, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hunter Boots +(1011101, 1072101, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Silky Boots +(1011101, 1072102, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Silky Boots +(1011101, 1072103, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Silky Boots +(1011101, 1072118, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pierre Shoes +(1011101, 1072119, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Pierre Shoes +(1011101, 1072120, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pierre Shoes +(1011101, 1072121, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pierre Shoes +(1011101, 1072012, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Whitebottom Shoes +(1011101, 1072054, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Whitebottom Boots +(1011101, 1072055, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Whitebottom Boots +(1011101, 1072056, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Whitebottom Boots +(1011101, 1072018, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneakers +(1011101, 1072064, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sneakers +(1011101, 1082012, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Archer Gloves +(1011101, 1082015, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Diros +(1011101, 1082018, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Savata +(1011101, 1082050, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Marker +(1011101, 1082070, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Scaler +(1011101, 1082073, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brace + +# Karl (1011000) +(1011000, 1452002, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Bow +(1011000, 1452003, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Composite Bow +(1011000, 1452001, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hunter's Bow +(1011000, 1452000, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Bow +(1011000, 1452005, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ryden +(1011000, 1452006, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viper +(1011000, 1452007, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vaulter 2000 +(1011000, 1462001, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crossbow +(1011000, 1462002, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Crossbow +(1011000, 1462003, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Balanche +(1011000, 1462000, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mountain Crossbow +(1011000, 1462004, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eagle Crow +(1011000, 1462005, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heckler +(1011000, 1462006, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Crow +(1011000, 1302007, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Long Sword +(1011000, 1322007, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Purse +(1011000, 1322008, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hard Briefcase +(1011000, 1422004, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Monkey Wrench +(1011000, 1442004, 100000, 0, 0, 24000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Janitor's Mop + +# Sam (1011001) +(1011001, 1002008, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skullcap +(1011001, 1002033, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wisconsin +(1011001, 1002012, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Baseball Cap +(1011001, 1002060, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Baseball Cap +(1011001, 1002061, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Baseball Cap +(1011001, 1002062, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Baseball Cap +(1011001, 1002063, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Baseball Cap +(1011001, 1002112, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Feather Hat +(1011001, 1002113, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Feather Hat +(1011001, 1002114, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Feather Hat +(1011001, 1002115, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Feather Hat +(1011001, 1002116, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Feather Hat +(1011001, 1002117, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Robin Hat +(1011001, 1002118, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Robin Hat +(1011001, 1002119, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Robin Hat +(1011001, 1002120, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Robin Hat +(1011001, 1002121, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Robin Hat +(1011001, 1002161, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hawkeye +(1011001, 1002162, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hawkeye +(1011001, 1002163, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hawkeye +(1011001, 1002164, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hawkeye +(1011001, 1002165, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hawkeye +(1011001, 1002135, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pole-Feather Hat +(1011001, 1002136, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pole-Feather Hat +(1011001, 1002137, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Pole-Feather Hat +(1011001, 1002138, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pole-Feather Hat +(1011001, 1002139, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pole-Feather Hat +(1011001, 1002166, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Distinction +(1011001, 1002167, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Distinction +(1011001, 1002168, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Distinction +(1011001, 1002169, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Distinction +(1011001, 1002170, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Distinction +(1011001, 1002010, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Winter Hat +(1011001, 1002057, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Winter Hat +(1011001, 1002156, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter +(1011001, 1002157, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter +(1011001, 1002158, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter +(1011001, 1002159, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Hunter +(1011001, 1002160, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hunter +(1011001, 1032001, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Single Earring +(1011001, 1032003, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Amethyst Earrings +(1011001, 1040008, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Archer Top +(1011001, 1040071, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Archer Top +(1011001, 1040007, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Leather Hoodwear +(1011001, 1040011, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Leather Hoodwear +(1011001, 1040003, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Top +(1011001, 1040022, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(1011001, 1040023, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bennis Chainmail +(1011001, 1040024, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(1011001, 1040025, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(1011001, 1040067, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Armor +(1011001, 1040068, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Armor +(1011001, 1040069, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Armor +(1011001, 1040070, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Armor +(1011001, 1041007, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin +(1011001, 1041061, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin +(1011001, 1041008, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor +(1011001, 1041062, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Able Armor +(1011001, 1041063, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Armor +(1011001, 1041013, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail +(1011001, 1041027, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail +(1011001, 1041028, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail +(1011001, 1041032, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(1011001, 1041033, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(1011001, 1041034, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(1011001, 1041035, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Bennis Chainmail +(1011001, 1041054, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Armor +(1011001, 1041055, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Armor +(1011001, 1041056, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Armor +(1011001, 1040072, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier +(1011001, 1040073, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier +(1011001, 1040074, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier +(1011001, 1040076, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier +(1011001, 1040081, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piette +(1011001, 1040079, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette +(1011001, 1041066, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia +(1011001, 1041069, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia +(1011001, 1041065, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia +(1011001, 1041067, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia +(1011001, 1041082, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra +(1011001, 1041081, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra +(1011001, 1060005, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Warfare Pants +(1011001, 1060056, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Pants +(1011001, 1060057, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Pants +(1011001, 1060058, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Pants +(1011001, 1060059, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Pants +(1011001, 1061009, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin Skirt +(1011001, 1061057, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin Skirt +(1011001, 1061006, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor Skirt +(1011001, 1061058, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Able Skirt +(1011001, 1061059, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Skirt +(1011001, 1061024, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail Skirt +(1011001, 1061025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail Skirt +(1011001, 1061026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail Skirt +(1011001, 1061050, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Pants +(1011001, 1061051, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Pants +(1011001, 1061052, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Pants +(1011001, 1060062, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier Pants +(1011001, 1060065, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier Pants +(1011001, 1060061, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier Pants +(1011001, 1060063, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier Pants +(1011001, 1060070, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Piette Pants +(1011001, 1060069, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette Pants +(1011001, 1061061, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia Pants +(1011001, 1061064, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia Pants +(1011001, 1061060, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia Pants +(1011001, 1061062, 100000, 0, 0, 67501, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia Pants +(1011001, 1061081, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra Skirt +(1011001, 1061080, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra Skirt +(1011001, 1062002, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Pants +(1011001, 1062006, 100000, 0, 0, 13000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bennis Chainpants +(1011001, 1072015, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Boots +(1011001, 1072059, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hard Leather Boots +(1011001, 1072016, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Woodsman Boots +(1011001, 1072060, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Woodsman Boots +(1011001, 1072061, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Woodsman Boots +(1011001, 1072025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deer Huntertop +(1011001, 1072026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rabbit Huntertop +(1011001, 1072067, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bear Huntertop +(1011001, 1072068, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # LIon Huntertop +(1011001, 1072034, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Jack Boots +(1011001, 1072069, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jack Boots +(1011001, 1072079, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter Boots +(1011001, 1072080, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter Boots +(1011001, 1072081, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter Boots +(1011001, 1072082, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Hunter Boots +(1011001, 1072083, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hunter Boots +(1011001, 1072101, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Silky Boots +(1011001, 1072102, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Silky Boots +(1011001, 1072103, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Silky Boots +(1011001, 1072118, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pierre Shoes +(1011001, 1072119, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Pierre Shoes +(1011001, 1072120, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pierre Shoes +(1011001, 1072121, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pierre Shoes +(1011001, 1072012, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Whitebottom Shoes +(1011001, 1072054, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Whitebottom Boots +(1011001, 1072055, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Whitebottom Boots +(1011001, 1072056, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Whitebottom Boots +(1011001, 1072018, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneakers +(1011001, 1072064, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sneakers +(1011001, 1082012, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Archer Gloves +(1011001, 1082015, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Diros +(1011001, 1082018, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Savata +(1011001, 1082050, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Marker +(1011001, 1082070, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Scaler +(1011001, 1082073, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brace + +# Luna (1011100) +(1011100, 4036031, 1000000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Roswaal's Mandarin Flower +(1011100, 4170050, 1000000000, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(1011100, 2432409, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Guard Mastery Book Coupon +(1011100, 2432410, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Booster Mastery Book Coupon +(1011100, 2432411, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Critical Magic Mastery Book Coupon +(1011100, 2431789, 100000, 0, 0, 3000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mastery Book 20 +(1011100, 2431790, 100000, 0, 0, 5000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mastery Book 30 +(1011100, 2431935, 100000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 5), # Mastery Book 20 +(1011100, 2431936, 100000, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 5), # Mastery Book 30 +(1011100, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1011100, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1011100, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1011100, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1011100, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1011100, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1011100, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1011100, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1011100, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1011100, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1011100, 2010000, 100000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1011100, 2010002, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1011100, 2010001, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1011100, 2010003, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1011100, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1011100, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(1011100, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1011100, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1011100, 2030004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Henesys +(1011100, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1011100, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1011100, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1011100, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1011100, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1011100, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1011100, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1011100, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Lao (2091012) +(2091012, 2436812, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Kemdi Scarecrow Summoning Sack +(2091012, 2436813, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # So Gong Scarecrow Summoning Sack +(2091012, 3015240, 2000000000, 0, 0, 0, 0, 0, 3887, 99000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mini Mu Lung Dojo Chair +(2091012, 3015241, 2000000000, 0, 0, 0, 0, 0, 3887, 99000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mu Lung Scarecrow Chair +(2091012, 1082394, 2000000000, 0, 10080, 0, 0, 0, 3887, 70000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # So Gong's Gloves +(2091012, 1082709, 2000000000, 0, 10080, 0, 0, 0, 3887, 70000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # So Gong's Gloves +(2091012, 1082660, 2000000000, 0, 10080, 0, 0, 0, 3887, 50000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert's Gloves +(2091012, 1082710, 2000000000, 0, 10080, 0, 0, 0, 3887, 50000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert's Gloves +(2091012, 1082661, 2000000000, 0, 10080, 0, 0, 0, 3887, 30000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert Apprentice's Gloves +(2091012, 1082711, 2000000000, 0, 10080, 0, 0, 0, 3887, 30000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert's Apprentice Gloves +(2091012, 2434284, 2000000000, 0, 0, 0, 0, 0, 3887, 2000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mu Lung Dojo Unidentified Belt Box +(2091012, 2434285, 2000000000, 0, 0, 0, 0, 0, 3887, 2000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mu Lung Dojo Unidentified Gloves Box +(2091012, 2434286, 2000000000, 0, 10080, 0, 0, 0, 3887, 1500, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unidentified Traits Growth Box +(2091012, 2434288, 2000000000, 0, 10080, 0, 0, 0, 3887, 6000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Special Medal of Honor +(2091012, 2434287, 2000000000, 0, 10080, 0, 0, 0, 3887, 5000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mu Gong's Honor EXP Guarantee +(2091012, 1122215, 2000000000, 0, 4320, 0, 0, 0, 3887, 3000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pendant of the Spirit +(2091012, 4001851, 2000000000, 0, 10080, 0, 0, 0, 3887, 1500, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (30 minutes) +(2091012, 4001852, 2000000000, 0, 10080, 0, 0, 0, 3887, 3000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (1 hour) +(2091012, 4001853, 2000000000, 0, 10080, 0, 0, 0, 3887, 8000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (3 hours) +(2091012, 4001854, 2000000000, 0, 10080, 0, 0, 0, 3887, 15000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (6 hours) +(2091012, 4001881, 2000000000, 0, 10080, 0, 0, 0, 3887, 22000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (9 hours) +(2091012, 4001862, 2000000000, 0, 10080, 0, 0, 0, 3887, 28000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (12 hours) +(2091012, 4001882, 2000000000, 0, 10080, 0, 0, 0, 3887, 54000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (24 hours) +(2091012, 2049710, 2000000000, 0, 10080, 0, 0, 0, 3887, 15000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Epic Potential Scroll 50% +(2091012, 2048311, 2000000000, 0, 10080, 0, 0, 0, 3887, 25000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bonus Potential Scroll 50% +(2091012, 2590004, 2000000000, 0, 0, 0, 0, 0, 3887, 1000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Prototype Soul Enchanter +(2091012, 4001832, 2000000000, 0, 0, 0, 0, 0, 3887, 800, 0, 0, 0, 0, 0, '', 0, 100, 0, 9000), # Spell Trace +(2091012, 2048724, 2000000000, 0, 10080, 0, 0, 0, 3887, 25000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Powerful Rebirth Flame +(2091012, 2434289, 2000000000, 0, 10080, 0, 0, 0, 3887, 70000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mu Lung Dojo Damage Skin +(2091012, 2434325, 2000000000, 0, 0, 0, 0, 0, 3887, 2500, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Scarecrow Summoning Sack +(2091012, 2434330, 2000000000, 0, 0, 0, 0, 0, 3887, 2500, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Scarecrow Summoning Sack +(2091012, 2436812, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 999, 999, 0, '', 0, 1, 0, 300), # Kemdi Scarecrow Summoning Sack +(2091012, 2436813, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 999, 999, 0, '', 0, 1, 0, 300), # So Gong Scarecrow Summoning Sack + +# Kok Hua (9270057) +(9270057, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(9270057, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(9270057, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(9270057, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(9270057, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(9270057, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(9270057, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(9270057, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(9270057, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(9270057, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(9270057, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(9270057, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(9270057, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(9270057, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(9270057, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(9270057, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(9270057, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(9270057, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(9270057, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(9270057, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(9270057, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(9270057, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(9270057, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(9270057, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(9270057, 2050003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(9270057, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(9270057, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(9270057, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(9270057, 2022015, 1000000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mushroom Miso Ramen + +# Chiang (9270055) +(9270055, 1302008, 10000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gladius +(9270055, 1302004, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cutlass +(9270055, 1302009, 10000, 0, 0, 225000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Traus +(9270055, 1312005, 10000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fireman's Axe +(9270055, 1312006, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dankke +(9270055, 1312007, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Counter +(9270055, 1322014, 10000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Hammer +(9270055, 1322015, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Hammer +(9270055, 1322016, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jacker +(9270055, 1332009, 10000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cass +(9270055, 1332012, 10000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reef Claw +(9270055, 1332001, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Halfmoon Zamadar +(9270055, 1332014, 10000, 0, 0, 375000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gephart +(9270055, 1332011, 10000, 0, 0, 425000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bazlud +(9270055, 1372003, 10000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Wand +(9270055, 1372001, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Wand +(9270055, 1372000, 10000, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fairy Wand +(9270055, 1382002, 10000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Staff +(9270055, 1402002, 10000, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Scimitar +(9270055, 1402006, 10000, 0, 0, 350000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lionheart +(9270055, 1402007, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zard +(9270055, 1412006, 10000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Axe +(9270055, 1412004, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Niam +(9270055, 1412005, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sabretooth +(9270055, 1422001, 10000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Maul +(9270055, 1422008, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sledgehammer +(9270055, 1422007, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Titan +(9270055, 1432002, 10000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Forked Spear +(9270055, 1432003, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nakamaki +(9270055, 1432005, 10000, 0, 0, 225000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zeco +(9270055, 1442001, 10000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Polearm +(9270055, 1442003, 10000, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Axe Polearm +(9270055, 1442009, 10000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crescent Polearm +(9270055, 1452005, 10000, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ryden +(9270055, 1452006, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viper +(9270055, 1452007, 10000, 0, 0, 375000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vaulter 2000 +(9270055, 1462000, 10000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mountain Crossbow +(9270055, 1462004, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eagle Crow +(9270055, 1462005, 10000, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heckler +(9270055, 1472001, 10000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Titans +(9270055, 1472004, 10000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Igor +(9270055, 1472007, 10000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Meba +(9270055, 1482003, 1000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Norman Grip +(9270055, 1482004, 1000, 0, 0, 52000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Prime Hands +(9270055, 1482005, 1000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Maiden +(9270055, 1482006, 1000, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neozard +(9270055, 1492003, 1000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Hook +(9270055, 1492004, 1000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cold Mind +(9270055, 1492005, 1000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shooting Star +(9270055, 1492006, 1000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Shooter + +# Riduan (9270056) +(9270056, 1002004, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Great Brown Helmet +(9270056, 1040000, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Jangoon Armor +(9270056, 1040085, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Armor +(9270056, 1041084, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Armor +(9270056, 1041085, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Armor +(9270056, 1050000, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Crusader Chainmail +(9270056, 1050021, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Crusader Chainmail +(9270056, 1051001, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Fitted Mail +(9270056, 1051014, 10000, 0, 0, 112500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Fitted Mail +(9270056, 1060075, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Pants +(9270056, 1060074, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Jangoon Pants +(9270056, 1061083, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Skirt +(9270056, 1061084, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Skirt +(9270056, 1092001, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Triangular Shield +(9270056, 1092002, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cross Shield +(9270056, 1002141, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Matty +(9270056, 1002142, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Matty +(9270056, 1002143, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Matty +(9270056, 1002144, 10000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Matty +(9270056, 1041052, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Top +(9270056, 1041051, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Top +(9270056, 1050031, 10000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Chaos Robe +(9270056, 1050002, 10000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Chaos Robe +(9270056, 1050035, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Starlight +(9270056, 1050038, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Starlight +(9270056, 1050036, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Starlight +(9270056, 1050037, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Starlight +(9270056, 1051023, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Moonlight +(9270056, 1051025, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moonlight +(9270056, 1051024, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moonlight +(9270056, 1051027, 10000, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moonlight +(9270056, 1061048, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Skirt +(9270056, 1061047, 10000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Skirt +(9270056, 1002138, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pole-Feather Hat +(9270056, 1002139, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pole-Feather Hat +(9270056, 1002135, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pole-Feather Hat +(9270056, 1002137, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Pole-Feather Hat +(9270056, 1040072, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier +(9270056, 1040073, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier +(9270056, 1040074, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier +(9270056, 1040076, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier +(9270056, 1040081, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piette +(9270056, 1040079, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette +(9270056, 1041066, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia +(9270056, 1041069, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia +(9270056, 1041065, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia +(9270056, 1041067, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia +(9270056, 1041082, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra +(9270056, 1041081, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra +(9270056, 1060062, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolier Pants +(9270056, 1060065, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolier Pants +(9270056, 1060061, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolier Pants +(9270056, 1060063, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolier Pants +(9270056, 1060070, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Piette Pants +(9270056, 1060069, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piette Pants +(9270056, 1061061, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Legolia Pants +(9270056, 1061064, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Legolia Pants +(9270056, 1061060, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Legolia Pants +(9270056, 1061062, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Legolia Pants +(9270056, 1061081, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Piettra Skirt +(9270056, 1061080, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Piettra Skirt +(9270056, 1002176, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Burgler +(9270056, 1002177, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Burglar +(9270056, 1002178, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Burgler +(9270056, 1002179, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Burgler +(9270056, 1002180, 10000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Burglar +(9270056, 1040063, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Knucklevest +(9270056, 1040062, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Knucklevest +(9270056, 1040061, 10000, 0, 0, 114000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Knucklevest +(9270056, 1040082, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Khaki Shadow +(9270056, 1040083, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Marine Shadow +(9270056, 1041075, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shadow +(9270056, 1041074, 10000, 0, 0, 180000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shadow +(9270056, 1051007, 10000, 0, 0, 111000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Avenger +(9270056, 1051008, 10000, 0, 0, 111000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Avenger +(9270056, 1051009, 10000, 0, 0, 111000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Avenger +(9270056, 1060051, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Knucklevest Pants +(9270056, 1060050, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Knucklevest Pants +(9270056, 1060052, 10000, 0, 0, 108000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Knucklevest Pants +(9270056, 1060071, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Khaki Shadow Pants +(9270056, 1060072, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Marine Shadow Pants +(9270056, 1061070, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shadow Pants +(9270056, 1061069, 10000, 0, 0, 160000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shadow Pants + +# Laku (9071001) +(9071001, 4170050, 100000000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(9071001, 2550000, 2000000000, 7, 0, 0, 4310020, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Spiegelmann's Badge Chest +(9071001, 1012270, 2000000000, 7, 7200, 0, 4310020, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spiegelmann's Mustache +(9071001, 1162008, 2000000000, 7, 10080, 0, 4310020, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spiegelmann's Autograph +(9071001, 2430275, 2000000000, 7, 0, 0, 4310020, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Spiegelmann's Hot-Air Balloon 7-Day Coupon +(9071001, 2023125, 2000000000, 7, 0, 0, 4310020, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Extreme Red Potion +(9071001, 2023126, 2000000000, 7, 0, 0, 4310020, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Extreme Green Potion +(9071001, 2023127, 2000000000, 7, 0, 0, 4310020, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Extreme Blue Potion +(9071001, 2023128, 2000000000, 7, 0, 0, 4310020, 10, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Extreme Gold Potion +(9071001, 1122219, 2000000000, 7, 0, 0, 4310020, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Greed Pendant +(9071001, 2434824, 2000000000, 7, 0, 0, 4310020, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Monster Park Damage Skin +(9071001, 2000000, 9999999, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(9071001, 2000001, 9999999, 2, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(9071001, 2000002, 9999999, 2, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(9071001, 2000003, 9999999, 2, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(9071001, 2000006, 9999999, 2, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(9071001, 2002000, 9999999, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(9071001, 2002001, 9999999, 2, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(9071001, 2002002, 9999999, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(9071001, 2002004, 9999999, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(9071001, 2002005, 9999999, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(9071001, 2001000, 9999999, 2, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(9071001, 2001001, 9999999, 2, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(9071001, 2001002, 9999999, 2, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(9071001, 2010000, 9999999, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(9071001, 2010002, 9999999, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(9071001, 2010001, 9999999, 2, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(9071001, 2010003, 9999999, 2, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(9071001, 2010004, 9999999, 2, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(9071001, 2020012, 9999999, 2, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(9071001, 2020013, 9999999, 2, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(9071001, 2020014, 9999999, 2, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(9071001, 2020015, 9999999, 2, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(9071001, 2060000, 9999999, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(9071001, 2061000, 9999999, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(9071001, 2060000, 9999999, 2, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(9071001, 2061000, 9999999, 2, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(9071001, 2060001, 9999999, 2, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(9071001, 2061001, 9999999, 2, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# Serabi the Fairy (1031001) +(1031001, 1002017, 100000, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Apprentice Hat +(1031001, 1002102, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Conehat +(1031001, 1002103, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Moon Conehat +(1031001, 1002104, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Moon Conehat +(1031001, 1002105, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moon Conehat +(1031001, 1002106, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon Conehat +(1031001, 1002016, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizardry Hat +(1031001, 1002034, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jester +(1031001, 1002035, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Jester +(1031001, 1002036, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Jester +(1031001, 1002037, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Jester +(1031001, 1002038, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jester +(1031001, 1002141, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Matty +(1031001, 1002142, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Matty +(1031001, 1002143, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Matty +(1031001, 1002144, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Matty +(1031001, 1002151, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Guiltian +(1031001, 1002152, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Guiltian +(1031001, 1002153, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Guiltian +(1031001, 1002154, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Guiltian +(1031001, 1002155, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Guiltian +(1031001, 1040004, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Shirt +(1031001, 1040017, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Shirt +(1031001, 1040018, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Piece +(1031001, 1040019, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Split Piece +(1031001, 1040020, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Split Piece +(1031001, 1041015, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine +(1031001, 1041016, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine +(1031001, 1041017, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne +(1031001, 1041018, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne +(1031001, 1041025, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne +(1031001, 1041026, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne +(1031001, 1041029, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split +(1031001, 1041030, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Split +(1031001, 1041031, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Split +(1031001, 1041041, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Top +(1031001, 1041042, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Top +(1031001, 1041043, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Top +(1031001, 1041052, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Top +(1031001, 1041051, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Top +(1031001, 1050008, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Plain Robe +(1031001, 1050009, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Plain Robe +(1031001, 1050010, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Plain Robe +(1031001, 1050001, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doros Robe +(1031001, 1050023, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Doros Robe +(1031001, 1050024, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Doros Robe +(1031001, 1050025, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Doros Robe +(1031001, 1050003, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Wizard Robe +(1031001, 1050026, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Wizard Robe +(1031001, 1050027, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Mage Robe +(1031001, 1050028, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizard Robe +(1031001, 1051004, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Doroness Robe +(1031001, 1051005, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Doroness Robe +(1031001, 1051003, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doroness Robe +(1031001, 1050031, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Chaos Robe +(1031001, 1050002, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Chaos Robe +(1031001, 1050035, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Starlight +(1031001, 1050038, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Starlight +(1031001, 1050036, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Starlight +(1031001, 1050037, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Starlight +(1031001, 1051023, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Moonlight +(1031001, 1051025, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moonlight +(1031001, 1051024, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moonlight +(1031001, 1051027, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moonlight +(1031001, 1060012, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Pants +(1031001, 1060013, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Pants +(1031001, 1060014, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Pants +(1031001, 1060015, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Pants +(1031001, 1061010, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine Skirt +(1031001, 1061011, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine Skirt +(1031001, 1061012, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne Skirt +(1031001, 1061013, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne Skirt +(1031001, 1061021, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne Skirt +(1031001, 1061022, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne Skirt +(1031001, 1061027, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Skirt +(1031001, 1061028, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Skirt +(1031001, 1061034, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Skirt +(1031001, 1061035, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Skirt +(1031001, 1061036, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Skirt +(1031001, 1061048, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Amoria Skirt +(1031001, 1061047, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Amoria Skirt +(1031001, 1072006, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Basic Boots +(1031001, 1072044, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Basic Boots +(1031001, 1072045, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Basic Boots +(1031001, 1072023, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Nitty +(1031001, 1072024, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Nitty +(1031001, 1072019, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jewelry Boots +(1031001, 1072020, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Jewelry Boots +(1031001, 1072021, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jewelry Boots +(1031001, 1072072, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Windshoes +(1031001, 1072073, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Windshoes +(1031001, 1072074, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Windshoes +(1031001, 1072075, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Magicshoes +(1031001, 1072076, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Magicshoes +(1031001, 1072077, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Magicshoes +(1031001, 1072078, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Magicshoes +(1031001, 1072089, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Salt Shoes +(1031001, 1072090, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Salt Shoes +(1031001, 1072091, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Salt Shoes +(1031001, 1072114, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Shoes +(1031001, 1072115, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Shoes +(1031001, 1072116, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Moon Shoes +(1031001, 1072117, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moon Shoes +(1031001, 1082019, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lemona +(1031001, 1082022, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Morrican +(1031001, 1082028, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Mesana +(1031001, 1082053, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Lutia +(1031001, 1082056, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Noel +(1031001, 1082064, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Arten + +# Flora the Fairy (1031000) +(1031000, 1252001, 100, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beast Tamer Scepter +(1031000, 1552049, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Fan +(1031000, 1552050, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metallic Fan +(1031000, 1552051, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triple Fan +(1031000, 1552052, 10000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crane Fan +(1031000, 1372005, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Wand +(1031000, 1372006, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hardwood Wand +(1031000, 1372002, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Wand +(1031000, 1372004, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ice Wand +(1031000, 1372003, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Wand +(1031000, 1372001, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Wand +(1031000, 1372000, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fairy Wand +(1031000, 1382000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Staff +(1031000, 1382003, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Staff +(1031000, 1382005, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Staff +(1031000, 1382004, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wooden Staff +(1031000, 1382002, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Staff +(1031000, 1382017, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Circle-Winded Staff +(1031000, 1382018, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Petal Staff +(1031000, 1382019, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hall Staff +(1031000, 1322002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Mace +(1031000, 1212001, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plain +(1031000, 1212002, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Shine +(1031000, 1212003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Decor + +# River (1021000) +(1021000, 1542049, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Simple Iron Sword +(1021000, 1542050, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Slicer +(1021000, 1542051, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Guardian +(1021000, 1542052, 100, 0, 0, 140000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bare Blade +(1021000, 1302007, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Long Sword +(1021000, 1302005, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sabre +(1021000, 1302002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Viking Sword +(1021000, 1302006, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Machete +(1021000, 1302003, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eloon +(1021000, 1302008, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gladius +(1021000, 1302004, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cutlass +(1021000, 1302009, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Traus +(1021000, 1332006, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Field Dagger +(1021000, 1332008, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Coconut Knife +(1021000, 1332010, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Dagger +(1021000, 1312001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Axe +(1021000, 1312003, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Axe +(1021000, 1312005, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fireman's Axe +(1021000, 1312006, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dankke +(1021000, 1312007, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Counter +(1021000, 1322000, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mace +(1021000, 1322002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Mace +(1021000, 1322004, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fusion Mace +(1021000, 1322014, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Hammer +(1021000, 1322015, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Hammer +(1021000, 1322016, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jacker +(1021000, 1342000, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Champion Katara +(1021000, 1342001, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Guardian Katara +(1021000, 1402001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Sword +(1021000, 1402000, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Sword +(1021000, 1402008, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Broadsword +(1021000, 1402002, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Scimitar +(1021000, 1402006, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lionheart +(1021000, 1402007, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zard +(1021000, 1412001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Axe +(1021000, 1412002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Axe +(1021000, 1412000, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Axe +(1021000, 1412006, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Axe +(1021000, 1412004, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Niam +(1021000, 1412005, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sabretooth +(1021000, 1422000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Mallet +(1021000, 1422002, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Mace +(1021000, 1422003, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Square Hammer +(1021000, 1422006, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pickaxe +(1021000, 1422004, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Monkey Wrench +(1021000, 1422001, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Maul +(1021000, 1422008, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sledgehammer +(1021000, 1422007, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Titan +(1021000, 1432000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spear +(1021000, 1432001, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fork on a Stick +(1021000, 1432008, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fish Spear +(1021000, 1432002, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Forked Spear +(1021000, 1432003, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nakamaki +(1021000, 1432005, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zeco +(1021000, 1442000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Polearm +(1021000, 1442006, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Ball +(1021000, 1442007, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Studded Polearm +(1021000, 1442004, 100000, 0, 0, 24000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Janitor's Mop +(1021000, 1442001, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Polearm +(1021000, 1442003, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Axe Polearm +(1021000, 1442009, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crescent Polearm + +# Harry (1021001) +(1021001, 1002043, 100000, 0, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Coif +(1021001, 1002039, 100000, 0, 0, 2700, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Helmet +(1021001, 1002051, 100000, 0, 0, 3500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Full Helm +(1021001, 1002055, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Football Helmet +(1021001, 1002059, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Viking Helm +(1021001, 1002027, 100000, 0, 0, 11500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sharp Helm +(1021001, 1002005, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Burgernet Helm +(1021001, 1002023, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jousting Helmet +(1021001, 1002048, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Great Blue Helmet +(1021001, 1002021, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Nordic Helm +(1021001, 1040015, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Armor +(1021001, 1040038, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Armor +(1021001, 1040009, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal +(1021001, 1040037, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal +(1021001, 1040012, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sergeant +(1021001, 1040039, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant +(1021001, 1040040, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant +(1021001, 1040016, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant +(1021001, 1040041, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant +(1021001, 1040021, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hwarang Shirt +(1021001, 1040026, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hwarang Shirt +(1021001, 1041014, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Lolica Armor +(1021001, 1041064, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blueberry Lolica Armor +(1021001, 1041019, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lamelle +(1021001, 1041020, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lamelle +(1021001, 1041021, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lamelle +(1021001, 1041022, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark +(1021001, 1041023, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark +(1021001, 1041024, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark +(1021001, 1050005, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Kendo Robe +(1021001, 1050006, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Kendo Robe +(1021001, 1050007, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Kendo Robe +(1021001, 1050011, 100000, 0, 0, 70000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Dragon Robe +(1021001, 1051000, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fitted Mail +(1021001, 1051010, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Engrit +(1021001, 1051011, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Engrit +(1021001, 1051012, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Engrit +(1021001, 1051013, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Engrit +(1021001, 1040000, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Jangoon Armor +(1021001, 1040085, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Armor +(1021001, 1041084, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Armor +(1021001, 1041085, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Armor +(1021001, 1050000, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Crusader Chainmail +(1021001, 1050021, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Crusader Chainmail +(1021001, 1051001, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Fitted Mail +(1021001, 1051014, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Fitted Mail +(1021001, 1060075, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Pants +(1021001, 1060074, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Jangoon Pants +(1021001, 1061083, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Skirt +(1021001, 1061084, 100000, 0, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Skirt +(1021001, 1060008, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Pants +(1021001, 1060028, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Pants +(1021001, 1060009, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal Pants +(1021001, 1060027, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal Pants +(1021001, 1060010, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sergeant Kilt +(1021001, 1060029, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant Kilt +(1021001, 1060011, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant Kilt +(1021001, 1060030, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant Kilt +(1021001, 1060060, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant Kilt +(1021001, 1060016, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Martial Arts Pants +(1021001, 1060017, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Martial Arts Pants +(1021001, 1060018, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Martial Arts Pants +(1021001, 1060019, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Martial Arts Pants +(1021001, 1061014, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rookie Pants +(1021001, 1061023, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sophia Pants +(1021001, 1061016, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ramel Skirt +(1021001, 1061017, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ramel Skirt +(1021001, 1061018, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ramel Skirt +(1021001, 1061015, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark Skirt +(1021001, 1061019, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark Skirt +(1021001, 1061020, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark Skirt +(1021001, 1072009, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Greaves +(1021001, 1072050, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Greaves +(1021001, 1072007, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown High Boots +(1021001, 1072046, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange High Boots +(1021001, 1072047, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue High Boots +(1021001, 1072011, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril War Boots +(1021001, 1072051, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver War Boots +(1021001, 1072052, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark War Boots +(1021001, 1072053, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold War Boots +(1021001, 1072039, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Battle Greaves +(1021001, 1072040, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Battle Greaves +(1021001, 1072041, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Battle Greaves +(1021001, 1072112, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Trigger +(1021001, 1072113, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Trigger +(1021001, 1072126, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Shoes +(1021001, 1072127, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jangoon Shoes +(1021001, 1082003, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Juno +(1021001, 1082000, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fingerless Gloves +(1021001, 1082004, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Venon +(1021001, 1082001, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Fingerless Gloves +(1021001, 1082006, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Missel +(1021001, 1082036, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Briggon +(1021001, 1082025, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Knuckle +(1021001, 1092005, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Buckler +(1021001, 1092000, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Shield +(1021001, 1092001, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Triangular Shield +(1021001, 1092002, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cross Shield + +# Arturo (1021100) +(1021100, 4036033, 1000000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Roswaal's Magic Powder +(1021100, 4170050, 100000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(1021100, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1021100, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1021100, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1021100, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1021100, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1021100, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1021100, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1021100, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1021100, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1021100, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1021100, 2010000, 10000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1021100, 2010002, 10000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1021100, 2010001, 10000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1021100, 2010003, 10000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1021100, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1021100, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1021100, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1021100, 2030003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Perion +(1021100, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1021100, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1021100, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1021100, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1021100, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1021100, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1021100, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1021100, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Cutthroat Manny (1051000) +(1051000, 1302007, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Long Sword +(1051000, 1332000, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triangular Zamadar +(1051000, 1332006, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Field Dagger +(1051000, 1332002, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triple-Tipped Zamadar +(1051000, 1332008, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Coconut Knife +(1051000, 1332013, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Stinger +(1051000, 1332010, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Dagger +(1051000, 1332004, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Forked Dagger +(1051000, 1332012, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reef Claw +(1051000, 1332014, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gephart +(1051000, 1332001, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Halfmoon Zamadar +(1051000, 1332011, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bazlud +(1051000, 1332031, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dragon Toenail +(1051000, 1332009, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cass +(1051000, 1322009, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plunger +(1051000, 1402001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Sword +(1051000, 1412001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Axe +(1051000, 1422000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Mallet +(1051000, 1432000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spear +(1051000, 1432001, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fork on a Stick +(1051000, 1442000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Polearm +(1051000, 1472000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Garnier +(1051000, 1472001, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Titans +(1051000, 1472002, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Titans +(1051000, 1472003, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Titans +(1051000, 1472004, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Igor +(1051000, 1472005, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Igor +(1051000, 1472006, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Adamantium Igor +(1051000, 1472007, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Meba +(1051000, 1472008, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Guards +(1051000, 1472009, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Guards +(1051000, 1472010, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Adamantium Guards +(1051000, 1472011, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Guardian +(1051000, 1472012, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Guardian +(1051000, 1472013, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Guardian +(1051000, 1472014, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Avarice +(1051000, 1472015, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Avarice +(1051000, 1472016, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Adamantium Avarice +(1051000, 1342000, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Champion Katara +(1051000, 1342001, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Guardian Katara +(1051000, 1342002, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Justice Katara + +# Don Hwang (1051001) +(1051001, 1002122, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ghetto Beanie +(1051001, 1002123, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ghetto Beanie +(1051001, 1002124, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ghetto Beanie +(1051001, 1002125, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Ghetto Beanie +(1051001, 1002126, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ghetto Beanie +(1051001, 1002001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Gear +(1051001, 1002107, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Thief Hood +(1051001, 1002108, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Thief Hood +(1051001, 1002109, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Thief Hood +(1051001, 1002110, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Thief Hood +(1051001, 1002111, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Thief Hood +(1051001, 1002127, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Loosecap +(1051001, 1002128, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Loosecap +(1051001, 1002129, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Loosecap +(1051001, 1002130, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Loosecap +(1051001, 1002131, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Loosecap +(1051001, 1002020, 100000, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Starry Bandana +(1051001, 1002096, 100000, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Blue Starry Bandana +(1051001, 1002097, 100000, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Starry Bandana +(1051001, 1002146, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tiberian +(1051001, 1002147, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tiberian +(1051001, 1002148, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Tiberian +(1051001, 1002149, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Tiberian +(1051001, 1002150, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Tiberian +(1051001, 1002171, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Guise +(1051001, 1002172, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Guise +(1051001, 1002173, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Guise +(1051001, 1002174, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Guise +(1051001, 1002175, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Guise +(1051001, 1002176, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Burgler +(1051001, 1002177, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Burglar +(1051001, 1002178, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Burgler +(1051001, 1002179, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Burgler +(1051001, 1002180, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Burglar +(1051001, 1002181, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pilfer +(1051001, 1002182, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pilfer +(1051001, 1002183, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Pilfer +(1051001, 1002184, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pilfer +(1051001, 1002185, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pilfer +(1051001, 1040031, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Vest +(1051001, 1040032, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Vest +(1051001, 1040033, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Vest +(1051001, 1040034, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Nightshift +(1051001, 1040035, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Nightshift +(1051001, 1040042, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pao +(1051001, 1040043, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pao +(1051001, 1040044, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pao +(1051001, 1040048, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Sneak +(1051001, 1040049, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneak +(1051001, 1040050, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Sneak +(1051001, 1040057, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Stealer +(1051001, 1040058, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Silver Stealer +(1051001, 1040059, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Gold Stealer +(1051001, 1040060, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Black Stealer +(1051001, 1040063, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Knucklevest +(1051001, 1040062, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Knucklevest +(1051001, 1040061, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Knucklevest +(1051001, 1040082, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Khaki Shadow +(1051001, 1040083, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Marine Shadow +(1051001, 1041036, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Vest +(1051001, 1041037, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Vest +(1051001, 1041038, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Vest +(1051001, 1041044, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Nightshift +(1051001, 1041045, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Nightshift +(1051001, 1041003, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao +(1051001, 1041039, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Qi Pao +(1051001, 1041040, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao +(1051001, 1041057, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Sneak +(1051001, 1041058, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Sneak +(1051001, 1041059, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Sneak +(1051001, 1041060, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Sneak +(1051001, 1041047, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Steal +(1051001, 1041048, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Steal +(1051001, 1041049, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Steal +(1051001, 1041050, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steal +(1051001, 1041075, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shadow +(1051001, 1041074, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shadow +(1051001, 1060021, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Pants +(1051001, 1060022, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Pants +(1051001, 1060023, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Pants +(1051001, 1060024, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Nightshift Pants +(1051001, 1060025, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Nightshift Pants +(1051001, 1060031, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pao Bottom +(1051001, 1060032, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pao Bottom +(1051001, 1060033, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pao Bottom +(1051001, 1060037, 100000, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Sneak Pants +(1051001, 1060038, 100000, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Sneak Pants +(1051001, 1060039, 100000, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Sneak Pants +(1051001, 1060043, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Stealer Pants +(1051001, 1060044, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Silver Stealer Pants +(1051001, 1060045, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red / Gold Stealer Pants +(1051001, 1060046, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver / Black Stealer Pants +(1051001, 1060051, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Knucklevest Pants +(1051001, 1060050, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Knucklevest Pants +(1051001, 1060052, 100000, 0, 0, 67500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Knucklevest Pants +(1051001, 1060071, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Khaki Shadow Pants +(1051001, 1060072, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Marine Shadow Pants +(1051001, 1061029, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Pants +(1051001, 1061030, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Pants +(1051001, 1061031, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Pants +(1051001, 1061037, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Nightshift Pants +(1051001, 1061038, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Nightshift Pants +(1051001, 1061003, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao Pants +(1051001, 1061032, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Qi Pao Pants +(1051001, 1061033, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao Pants +(1051001, 1061040, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao Skirt +(1051001, 1061041, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Qi Pao Skirt +(1051001, 1061042, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao Skirt +(1051001, 1061053, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Sneak Pants +(1051001, 1061054, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Sneak Pants +(1051001, 1061055, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Sneak Pants +(1051001, 1061056, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Sneak Pants +(1051001, 1061043, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Steal Pants +(1051001, 1061044, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Steal Pants +(1051001, 1061045, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Steal Pants +(1051001, 1061046, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steal Pants +(1051001, 1061069, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shadow Pants +(1051001, 1061070, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shadow Pants +(1051001, 1051007, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Avenger +(1051001, 1051008, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Avenger +(1051001, 1051009, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Avenger +(1051001, 1072070, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Gidder Shoes +(1051001, 1072071, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Gidder Shoes +(1051001, 1072004, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Gomushin +(1051001, 1072042, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Gomushin +(1051001, 1072043, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Smelly Gomushin +(1051001, 1072028, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Ninja Sandals +(1051001, 1072029, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Ninja Sandals +(1051001, 1072030, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ninja Sandals +(1051001, 1072031, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ninja Sandals +(1051001, 1072022, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Enamel Boots +(1051001, 1072065, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Enamel Boots +(1051001, 1072066, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Enamel Boots +(1051001, 1072084, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lappy Boots +(1051001, 1072085, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lappy Boots +(1051001, 1072086, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lappy Boots +(1051001, 1072087, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Lappy Boots +(1051001, 1072032, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Chain Boots +(1051001, 1072033, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Chain Boots +(1051001, 1072104, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red White-Lined Boots +(1051001, 1072105, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green White-Lined Boots +(1051001, 1072106, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue White-Lined Boots +(1051001, 1072107, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Red-Lined Shoes +(1051001, 1072108, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Green-Lined Shoes +(1051001, 1072109, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Yellow-Lined Shoes +(1051001, 1072110, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Blue-Lines Shoes +(1051001, 1082031, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Duo +(1051001, 1082034, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Mischief +(1051001, 1082039, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Wolfskin +(1051001, 1082044, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Sylvia +(1051001, 1082047, 100000, 0, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Arbion +(1051001, 1082074, 100000, 0, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Cleave + +# Dr. Faymus (1051002) +(1051002, 4036029, 1000000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Roswaal's Magical Ore +(1051002, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1051002, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1051002, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1051002, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1051002, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1051002, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1051002, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1051002, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1051002, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1051002, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1051002, 2010000, 1000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1051002, 2010002, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1051002, 2010001, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1051002, 2010003, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1051002, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1051002, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1051002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1051002, 2030005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Kerning City +(1051002, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1051002, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1051002, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1051002, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1051002, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1051002, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1051002, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1051002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Shinta (9120000) +(9120000, 1382011, 100, 0, 0, 2000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mystic Cane +(9120000, 1332024, 100, 0, 0, 2000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bushido +(9120000, 1302022, 100, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bamboo Sword +(9120000, 1302021, 100, 0, 0, 1250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pico-Pico Hammer +(9120000, 1462006, 100, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Crow +(9120000, 1402010, 100, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aluminum Baseball Bat +(9120000, 1432008, 100, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fish Spear +(9120000, 1402009, 100, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Baseball Bat +(9120000, 1322012, 100, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Brick +(9120000, 1312013, 100, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Paint Brush +(9120000, 1472008, 100, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Guards + +# Doran (9120002) +(9120002, 2060003, 9999999, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Red Arrow for Bow +(9120002, 2000001, 10000000, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(9120002, 2000002, 10000000, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(9120002, 2001001, 10000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(9120002, 2020012, 10000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(9120002, 2000003, 10000000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(9120002, 2000006, 10000000, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(9120002, 2001002, 10000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(9120002, 2022002, 100000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cider +(9120002, 2020014, 10000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew + +# Tatsu (9110100) +(9110100, 1402018, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Samurai Sword +(9110100, 1332054, 100, 0, 0, 15000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Diamond Dagger +(9110100, 1302019, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nameless Sword +(9110100, 1472054, 100, 0, 0, 15000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shinobi Bracer +(9110100, 1302232, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Japanese War Fan +(9110100, 1332030, 100, 0, 0, 15000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fan +(9110100, 1332231, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The 18th Blade +(9110100, 1302063, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Flaming Katana +(9110100, 1302025, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Umbrella +(9110100, 1302026, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Umbrella +(9110100, 1312014, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Paint Brush +(9110100, 1302024, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Newspaper Sword +(9110100, 1402013, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Japanese Map +(9110100, 1322031, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pig Illustrated +(9110100, 1322027, 100, 0, 0, 10000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Frying Pan +(9110100, 1322024, 100, 0, 0, 5000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Tube +(9110100, 1322011, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pointed Shovel +(9110100, 1312002, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Scythe +(9110100, 1302016, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Umbrella +(9110100, 1302001, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Saw +(9110100, 1402029, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aluminum Bat +(9110100, 1382015, 100, 0, 0, 15000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Poison Mushroom +(9110100, 1372017, 100, 0, 0, 50000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Streetlight +(9110100, 1332021, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plastic Bottle +(9110100, 1322033, 100, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Goblin Bat + +# Sentsu (9110101) +(9110101, 1050083, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Battle Lord +(9110101, 1051080, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Battle Empress +(9110101, 1050074, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Enigmatic +(9110101, 1051058, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Enigma +(9110101, 1050078, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pris +(9110101, 1051069, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pria +(9110101, 1052125, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Pioneer +(9110101, 1040110, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pirate Top +(9110101, 1060099, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pirate Pants +(9110101, 1041107, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pirate Blouse +(9110101, 1061106, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pirate Skirt +(9110101, 1072174, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pirate Boots +(9110101, 1072179, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Enigma Shoes +(9110101, 1072185, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Wing Boots +(9110101, 1072212, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Rivers Boots +(9110101, 1072312, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pageant +(9110101, 1082112, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Cordon +(9110101, 1082117, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Emperor +(9110101, 1082120, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Larceny +(9110101, 1082123, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clarity +(9110101, 1082207, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Halfgloves +(9110101, 1002274, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Galaxy +(9110101, 1002278, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Falcon +(9110101, 1002330, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Pireta Hat +(9110101, 1002340, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Dragon Barbute +(9110101, 1002640, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sun Boat Hat +(9110101, 1002418, 10000000, 0, 0, 25000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Newspaper Hat +(9110101, 1072182, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Wing Boots +(9110101, 1072211, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Rivers Boots +(9110101, 1050076, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pris +(9110101, 1051067, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pria +(9110101, 1002272, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Galaxy +(9110101, 1002275, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Falcon +(9110101, 1050073, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Enigmatic +(9110101, 1002339, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Dragon Barbute +(9110101, 1082110, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cordon +(9110101, 1082122, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Clarity +(9110101, 1050082, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Battle Lord +(9110101, 1082114, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Emperor +(9110101, 1051079, 10000000, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Battle Empress + +# Kiriwing (1100002) +(1100002, 4170050, 100000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(1100002, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1100002, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1100002, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1100002, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1100002, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1100002, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1100002, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1100002, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1100002, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1100002, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1100002, 2010000, 1000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1100002, 2010002, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1100002, 2010001, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1100002, 2010003, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1100002, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1100002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1100002, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1100002, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1100002, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1100002, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1100002, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1100002, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1100002, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1100002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Kiriyu (1100001) +(1100001, 1302000, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sword +(1100001, 1312004, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hand Axe +(1100001, 1322005, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Club +(1100001, 1332005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Razor +(1100001, 1040002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Undershirt +(1100001, 1040006, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Undershirt +(1100001, 1040010, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey T-Shirt +(1100001, 1041002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Tubetop +(1100001, 1041006, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow T-Shirt +(1100001, 1041010, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green T-Shirt +(1100001, 1041011, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red-Striped Top +(1100001, 1060002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jean Shorts +(1100001, 1060006, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Cotton Shorts +(1100001, 1061002, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Miniskirt +(1100001, 1061008, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Indigo Miniskirt +(1100001, 1072001, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Rubber Boots +(1100001, 1072005, 100000, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Sandals + +# Bonjasky (2150001) +(2150001, 1252001, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beast Tamer Scepter +(2150001, 1252002, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Assign Scepter +(2150001, 1542049, 100, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Simple Iron Sword +(2150001, 1542050, 100, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Slicer +(2150001, 1542051, 100, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Guardian +(2150001, 1552049, 100, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Fan +(2150001, 1552050, 100, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metallic Fan +(2150001, 1552051, 100, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triple Fan +(2150001, 1302007, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Long Sword +(2150001, 1302005, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sabre +(2150001, 1302002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Viking Sword +(2150001, 1302006, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Machete +(2150001, 1302003, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eloon +(2150001, 1302008, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gladius +(2150001, 1332006, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Field Dagger +(2150001, 1332008, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Coconut Knife +(2150001, 1332010, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Dagger +(2150001, 1312001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Axe +(2150001, 1312003, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Axe +(2150001, 1312005, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fireman's Axe +(2150001, 1322000, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mace +(2150001, 1322002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Mace +(2150001, 1322004, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fusion Mace +(2150001, 1322014, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Hammer +(2150001, 1402001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Sword +(2150001, 1402000, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Sword +(2150001, 1402008, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Broadsword +(2150001, 1412001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Axe +(2150001, 1412002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Axe +(2150001, 1412000, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Axe +(2150001, 1412006, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Axe +(2150001, 1422002, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Mace +(2150001, 1422003, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Square Hammer +(2150001, 1422006, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pickaxe +(2150001, 1432001, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fork on a Stick +(2150001, 1442000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Polearm +(2150001, 1442006, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Ball +(2150001, 1442007, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Studded Polearm +(2150001, 1372005, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Wand +(2150001, 1372006, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hardwood Wand +(2150001, 1372002, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Wand +(2150001, 1372004, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ice Wand +(2150001, 1372003, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Wand +(2150001, 1382000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Staff +(2150001, 1382003, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Staff +(2150001, 1382005, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Staff +(2150001, 1382004, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wooden Staff +(2150001, 1382002, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wizard Staff +(2150001, 1322002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Mace +(2150001, 1452002, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # War Bow +(2150001, 1452003, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Composite Bow +(2150001, 1452001, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hunter's Bow +(2150001, 1452000, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Bow +(2150001, 1462001, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crossbow +(2150001, 1462002, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Battle Crossbow +(2150001, 1462003, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Balanche +(2150001, 1462000, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mountain Crossbow +(2150001, 1332000, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triangular Zamadar +(2150001, 1332002, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Triple-Tipped Zamadar +(2150001, 1332008, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Coconut Knife +(2150001, 1332013, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Stinger +(2150001, 1332010, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Dagger +(2150001, 1332004, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Forked Dagger +(2150001, 1332012, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reef Claw +(2150001, 1332009, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cass +(2150001, 1322009, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plunger +(2150001, 1472000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Garnier +(2150001, 1342000, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Champion Katara +(2150001, 1342001, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Guardian Katara +(2150001, 1492000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pistol +(2150001, 1492001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dellinger Special +(2150001, 1492002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Negotiator +(2150001, 1492003, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Hook +(2150001, 1492004, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cold Mind +(2150001, 1532000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Novice Cannon +(2150001, 1532001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Cannon +(2150001, 1532002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ironside +(2150001, 1532003, 100000, 0, 0, 22000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Beast +(2150001, 1532004, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavy Artillery +(2150001, 1482000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Knuckler +(2150001, 1482001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Arms +(2150001, 1482002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Double Tail Knuckler +(2150001, 1482003, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Norman Grip +(2150001, 1482004, 100000, 0, 0, 52000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Prime Hands +(2150001, 1422004, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Monkey Wrench +(2150001, 1442004, 100000, 0, 0, 24000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Janitor's Mop +(2150001, 1322007, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Leather Purse +(2150001, 1322008, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hard Briefcase +(2150001, 1422000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Mallet +(2150001, 1432000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spear +(2150001, 1232001, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ravager +(2150001, 1232002, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dim Memory +(2150001, 1232003, 100000, 0, 0, 215000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eternal Wanderer +(2150001, 1190200, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Hybrid Heart +(2150001, 1190201, 100000, 0, 0, 1010000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hybrid Heart +(2150001, 1242001, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Horned Blade +(2150001, 1242002, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ridge Cutter +(2150001, 1242003, 100000, 0, 0, 215000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rough Violet +(2150001, 1212001, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Plain +(2150001, 1212002, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Shine +(2150001, 1582000, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hand Buster +(2150001, 1582001, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hand Crusher +(2150001, 1582002, 100000, 0, 0, 215000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blow Bomb +(2150001, 1002008, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skullcap +(2150001, 1002033, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wisconsin +(2150001, 1002012, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Baseball Cap +(2150001, 1002060, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Baseball Cap +(2150001, 1002061, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Baseball Cap +(2150001, 1002062, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Baseball Cap +(2150001, 1002063, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Baseball Cap +(2150001, 1002112, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Feather Hat +(2150001, 1002113, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Feather Hat +(2150001, 1002114, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Feather Hat +(2150001, 1002115, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Feather Hat +(2150001, 1002116, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Feather Hat +(2150001, 1002117, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Robin Hat +(2150001, 1002118, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Robin Hat +(2150001, 1002119, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Robin Hat +(2150001, 1002120, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Robin Hat +(2150001, 1002121, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Robin Hat +(2150001, 1002010, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Winter Hat +(2150001, 1002057, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Winter Hat +(2150001, 1002156, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter +(2150001, 1002157, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter +(2150001, 1002158, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter +(2150001, 1002159, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Hunter +(2150001, 1002160, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hunter +(2150001, 1002161, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hawkeye +(2150001, 1002162, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hawkeye +(2150001, 1002163, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hawkeye +(2150001, 1002164, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hawkeye +(2150001, 1002165, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hawkeye +(2150001, 1032001, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Single Earring +(2150001, 1032003, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Amethyst Earrings +(2150001, 1040008, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Archer Top +(2150001, 1040071, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Archer Top +(2150001, 1040007, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Leather Hoodwear +(2150001, 1040011, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Leather Hoodwear +(2150001, 1040003, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Top +(2150001, 1040022, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(2150001, 1040023, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bennis Chainmail +(2150001, 1040024, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(2150001, 1040025, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(2150001, 1040067, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Armor +(2150001, 1040068, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Armor +(2150001, 1040069, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Armor +(2150001, 1040070, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Armor +(2150001, 1041007, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin +(2150001, 1041061, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin +(2150001, 1041008, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor +(2150001, 1041062, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Able Armor +(2150001, 1041063, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Armor +(2150001, 1041013, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail +(2150001, 1041027, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail +(2150001, 1041028, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail +(2150001, 1041032, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(2150001, 1041033, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(2150001, 1041034, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(2150001, 1041035, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Bennis Chainmail +(2150001, 1041054, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Armor +(2150001, 1041055, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Armor +(2150001, 1041056, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Armor +(2150001, 1060005, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Warfare Pants +(2150001, 1060056, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Pants +(2150001, 1060057, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Pants +(2150001, 1060058, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Pants +(2150001, 1060059, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Pants +(2150001, 1061009, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin Skirt +(2150001, 1061057, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin Skirt +(2150001, 1061006, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor Skirt +(2150001, 1061058, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Able Skirt +(2150001, 1061059, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Skirt +(2150001, 1061024, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail Skirt +(2150001, 1061025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail Skirt +(2150001, 1061026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail Skirt +(2150001, 1061050, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Pants +(2150001, 1061051, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Pants +(2150001, 1061052, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Pants +(2150001, 1062004, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Archer Pants +(2150001, 1062002, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Pants +(2150001, 1062006, 100000, 0, 0, 13000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bennis Chainpants +(2150001, 1072015, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Boots +(2150001, 1072059, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hard Leather Boots +(2150001, 1072016, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Woodsman Boots +(2150001, 1072060, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Woodsman Boots +(2150001, 1072061, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Woodsman Boots +(2150001, 1072025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deer Huntertop +(2150001, 1072026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rabbit Huntertop +(2150001, 1072067, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bear Huntertop +(2150001, 1072068, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # LIon Huntertop +(2150001, 1072012, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Whitebottom Shoes +(2150001, 1072054, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Whitebottom Boots +(2150001, 1072055, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Whitebottom Boots +(2150001, 1072056, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Whitebottom Boots +(2150001, 1072018, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneakers +(2150001, 1072064, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sneakers +(2150001, 1002043, 100000, 0, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Coif +(2150001, 1002039, 100000, 0, 0, 2700, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Helmet +(2150001, 1002051, 100000, 0, 0, 3500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Full Helm +(2150001, 1002055, 100000, 0, 0, 8700, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Football Helmet +(2150001, 1002059, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Viking Helm +(2150001, 1002027, 100000, 0, 0, 11500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sharp Helm +(2150001, 1002005, 100000, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Burgernet Helm +(2150001, 1040015, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Armor +(2150001, 1040038, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Armor +(2150001, 1040009, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal +(2150001, 1040037, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal +(2150001, 1040012, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sergeant +(2150001, 1040039, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant +(2150001, 1040040, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant +(2150001, 1040016, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant +(2150001, 1040041, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant +(2150001, 1040021, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hwarang Shirt +(2150001, 1040026, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hwarang Shirt +(2150001, 1041014, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Lolica Armor +(2150001, 1041064, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blueberry Lolica Armor +(2150001, 1041019, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lamelle +(2150001, 1041020, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lamelle +(2150001, 1041021, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lamelle +(2150001, 1041022, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark +(2150001, 1041023, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark +(2150001, 1041024, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark +(2150001, 1050005, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Kendo Robe +(2150001, 1050006, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Kendo Robe +(2150001, 1050007, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Kendo Robe +(2150001, 1050011, 100000, 0, 0, 70000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Dragon Robe +(2150001, 1051000, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fitted Mail +(2150001, 1051010, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Engrit +(2150001, 1051011, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Engrit +(2150001, 1051012, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Engrit +(2150001, 1051013, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Engrit +(2150001, 1060008, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Pants +(2150001, 1060028, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Pants +(2150001, 1060009, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal Pants +(2150001, 1060027, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal Pants +(2150001, 1060010, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sergeant Kilt +(2150001, 1060029, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant Kilt +(2150001, 1060011, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant Kilt +(2150001, 1060030, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant Kilt +(2150001, 1060060, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant Kilt +(2150001, 1060016, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Martial Arts Pants +(2150001, 1060017, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Martial Arts Pants +(2150001, 1060018, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Martial Arts Pants +(2150001, 1060019, 100000, 0, 0, 38000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Martial Arts Pants +(2150001, 1061014, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rookie Pants +(2150001, 1061023, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sophia Pants +(2150001, 1061016, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ramel Skirt +(2150001, 1061017, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ramel Skirt +(2150001, 1061018, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ramel Skirt +(2150001, 1061015, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark Skirt +(2150001, 1061019, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark Skirt +(2150001, 1061020, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark Skirt +(2150001, 1072009, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Greaves +(2150001, 1072050, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Greaves +(2150001, 1072007, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown High Boots +(2150001, 1072046, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange High Boots +(2150001, 1072047, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue High Boots +(2150001, 1072011, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril War Boots +(2150001, 1092005, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Buckler +(2150001, 1092000, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Shield +(2150001, 1002122, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ghetto Beanie +(2150001, 1002123, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ghetto Beanie +(2150001, 1002124, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ghetto Beanie +(2150001, 1002125, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Ghetto Beanie +(2150001, 1002126, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ghetto Beanie +(2150001, 1002001, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Metal Gear +(2150001, 1002107, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Thief Hood +(2150001, 1002108, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Thief Hood +(2150001, 1002109, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Thief Hood +(2150001, 1002110, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Thief Hood +(2150001, 1002111, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Thief Hood +(2150001, 1002127, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Loosecap +(2150001, 1002128, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Loosecap +(2150001, 1002129, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Loosecap +(2150001, 1002130, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Loosecap +(2150001, 1002131, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Loosecap +(2150001, 1002020, 100000, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Starry Bandana +(2150001, 1002096, 100000, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Blue Starry Bandana +(2150001, 1002097, 100000, 0, 0, 7400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Starry Bandana +(2150001, 1002146, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tiberian +(2150001, 1002147, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tiberian +(2150001, 1002148, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Tiberian +(2150001, 1002149, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Tiberian +(2150001, 1002150, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Tiberian +(2150001, 1002171, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Guise +(2150001, 1002172, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Guise +(2150001, 1002173, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Guise +(2150001, 1002174, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Guise +(2150001, 1002175, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Guise +(2150001, 1040031, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Vest +(2150001, 1040032, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Vest +(2150001, 1040033, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Vest +(2150001, 1040034, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Nightshift +(2150001, 1040035, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Nightshift +(2150001, 1040042, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pao +(2150001, 1040043, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pao +(2150001, 1040044, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pao +(2150001, 1040048, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Sneak +(2150001, 1040049, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneak +(2150001, 1040050, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Sneak +(2150001, 1040057, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Stealer +(2150001, 1040058, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Silver Stealer +(2150001, 1040059, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Gold Stealer +(2150001, 1040060, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Black Stealer +(2150001, 1041036, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Vest +(2150001, 1041037, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Vest +(2150001, 1041038, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Vest +(2150001, 1041044, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Nightshift +(2150001, 1041045, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Nightshift +(2150001, 1041003, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao +(2150001, 1041039, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Qi Pao +(2150001, 1041040, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao +(2150001, 1041057, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Sneak +(2150001, 1041058, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Sneak +(2150001, 1041059, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Sneak +(2150001, 1041060, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Sneak +(2150001, 1041047, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Steal +(2150001, 1041048, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Steal +(2150001, 1041049, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Steal +(2150001, 1041050, 100000, 0, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steal +(2150001, 1060021, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Pants +(2150001, 1060022, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Pants +(2150001, 1060023, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Pants +(2150001, 1060024, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Nightshift Pants +(2150001, 1060025, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Nightshift Pants +(2150001, 1060031, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pao Bottom +(2150001, 1060032, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Pao Bottom +(2150001, 1060033, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pao Bottom +(2150001, 1060037, 100000, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Sneak Pants +(2150001, 1060038, 100000, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Sneak Pants +(2150001, 1060039, 100000, 0, 0, 19000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Sneak Pants +(2150001, 1060043, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Brown Stealer Pants +(2150001, 1060044, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Silver Stealer Pants +(2150001, 1060045, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red / Gold Stealer Pants +(2150001, 1060046, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver / Black Stealer Pants +(2150001, 1061029, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Cloth Pants +(2150001, 1061030, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Cloth Pants +(2150001, 1061031, 100000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Cloth Pants +(2150001, 1061037, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Nightshift Pants +(2150001, 1061038, 100000, 0, 0, 4800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Nightshift Pants +(2150001, 1061003, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao Pants +(2150001, 1061032, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Qi Pao Pants +(2150001, 1061033, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao Pants +(2150001, 1061040, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Qi Pao Skirt +(2150001, 1061041, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Qi Pao Skirt +(2150001, 1061042, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Qi Pao Skirt +(2150001, 1061053, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Sneak Pants +(2150001, 1061054, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Sneak Pants +(2150001, 1061055, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Sneak Pants +(2150001, 1061056, 100000, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Sneak Pants +(2150001, 1061043, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Steal Pants +(2150001, 1061044, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Steal Pants +(2150001, 1061045, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Steal Pants +(2150001, 1061046, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steal Pants +(2150001, 1072070, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Gidder Shoes +(2150001, 1072071, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Gidder Shoes +(2150001, 1072004, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Gomushin +(2150001, 1072042, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Gomushin +(2150001, 1072043, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Smelly Gomushin +(2150001, 1072028, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Ninja Sandals +(2150001, 1072029, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Ninja Sandals +(2150001, 1072030, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ninja Sandals +(2150001, 1072031, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ninja Sandals +(2150001, 1072022, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Enamel Boots +(2150001, 1072065, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Enamel Boots +(2150001, 1072066, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Enamel Boots +(2150001, 1002610, 100000, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Rocky Bandana +(2150001, 1002613, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lagger Cap +(2150001, 1002616, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Double Marine +(2150001, 1002619, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pitz Bandana +(2150001, 1052095, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Rocky Suit +(2150001, 1052098, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Cotton Lagger +(2150001, 1052101, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Carribean +(2150001, 1052104, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Turk Gally +(2150001, 1052107, 100000, 0, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Pollard +(2150001, 1072285, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lagger Slipper +(2150001, 1072288, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skeedy Sandals +(2150001, 1002017, 100000, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Apprentice Hat +(2150001, 1002102, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Conehat +(2150001, 1002103, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Moon Conehat +(2150001, 1002104, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Moon Conehat +(2150001, 1002105, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moon Conehat +(2150001, 1002106, 100000, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon Conehat +(2150001, 1002016, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizardry Hat +(2150001, 1040004, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Shirt +(2150001, 1040017, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Shirt +(2150001, 1040018, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Piece +(2150001, 1040019, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Split Piece +(2150001, 1040020, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Split Piece +(2150001, 1041015, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine +(2150001, 1041016, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine +(2150001, 1041017, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne +(2150001, 1041018, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne +(2150001, 1041025, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne +(2150001, 1041026, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne +(2150001, 1041029, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split +(2150001, 1041030, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Split +(2150001, 1041031, 100000, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Split +(2150001, 1041041, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Top +(2150001, 1041042, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Top +(2150001, 1041043, 100000, 0, 0, 42000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Top +(2150001, 1050008, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Plain Robe +(2150001, 1050009, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Plain Robe +(2150001, 1050010, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Plain Robe +(2150001, 1050001, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doros Robe +(2150001, 1050023, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Doros Robe +(2150001, 1050024, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Doros Robe +(2150001, 1050025, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Doros Robe +(2150001, 1050003, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Wizard Robe +(2150001, 1050026, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Wizard Robe +(2150001, 1050027, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Mage Robe +(2150001, 1050028, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Wizard Robe +(2150001, 1051004, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Doroness Robe +(2150001, 1051005, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Doroness Robe +(2150001, 1051003, 100000, 0, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Doroness Robe +(2150001, 1060012, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Training Pants +(2150001, 1060013, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey / Brown Training Pants +(2150001, 1060014, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Pants +(2150001, 1060015, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Pants +(2150001, 1061010, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Armine Skirt +(2150001, 1061011, 100000, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Armine Skirt +(2150001, 1061012, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Arianne Skirt +(2150001, 1061013, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Arianne Skirt +(2150001, 1061021, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Arianne Skirt +(2150001, 1061022, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Arianne Skirt +(2150001, 1061027, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Split Skirt +(2150001, 1061028, 100000, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Split Skirt +(2150001, 1061034, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Fairy Skirt +(2150001, 1061035, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fairy Skirt +(2150001, 1061036, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fairy Skirt +(2150001, 1072006, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Basic Boots +(2150001, 1072044, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Basic Boots +(2150001, 1072045, 100000, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Basic Boots +(2150001, 1072023, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Nitty +(2150001, 1072024, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Nitty +(2150001, 1612000, 100000, 0, 0, 68000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Copper Engine +(2150001, 1612001, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Engine +(2150001, 1622000, 100000, 0, 0, 53000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Copper Machine Arm +(2150001, 1622001, 100000, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Machine Arm +(2150001, 1632000, 100000, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Machine Leg +(2150001, 1642000, 100000, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Body Frame +(2150001, 1652000, 100000, 0, 0, 53000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Copper Transistor +(2150001, 1652001, 100000, 0, 0, 75000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Transistor + +# Carol (2150002) +(2150002, 4170050, 1000000000, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(2150002, 2432409, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Guard Mastery Book Coupon +(2150002, 2432410, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Booster Mastery Book Coupon +(2150002, 2432411, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Critical Magic Mastery Book Coupon +(2150002, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2150002, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2150002, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2150002, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2150002, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2150002, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2150002, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2150002, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2150002, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2150002, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2150002, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2150002, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2150002, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2150002, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2150002, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2150002, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2150002, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2150002, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2150002, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2150002, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2150002, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(2150002, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(2150002, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(2150002, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(2150002, 2050003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(2150002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2150002, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2150002, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2150002, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2150002, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2150002, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(2150002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Lunch Vendor (9330469) +(9330469, 1004531, 10000000, 0, 0, 0, 4310186, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Alishan Traditional Hat +(9330469, 1052943, 10000000, 0, 0, 0, 4310186, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Alishan Traditional Outfit +(9330469, 1142901, 10000000, 0, 0, 0, 4310186, 300, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Alishan Pride +(9330469, 1202160, 10000000, 0, 0, 0, 4310186, 1000, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shao Spirit Totem +(9330469, 1202161, 10000000, 0, 0, 0, 4310186, 500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spirit of Fire Totem +(9330469, 1202162, 10000000, 0, 0, 0, 4310186, 500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spirit of Water Totem +(9330469, 1202163, 10000000, 0, 0, 0, 4310186, 500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spirit of Earth Totem +(9330469, 1202164, 10000000, 0, 0, 0, 4310186, 500, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Spirit of Wind Totem +(9330469, 2010040, 10000000, 1, 0, 0, 4310186, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Alishan Lunch Box +(9330469, 2434004, 10000000, 1, 0, 0, 4310186, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Alishan Damage Skin +(9330469, 3013009, 10000000, 2, 0, 0, 4310186, 400, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Alishan Train + +# Brass (2180001) +(2180001, 2000000, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2180001, 2000001, 9999999, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2180001, 2000002, 9999999, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2180001, 2000003, 9999999, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2180001, 2000006, 9999999, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2180001, 2002000, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2180001, 2002001, 9999999, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2180001, 2002002, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2180001, 2002004, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2180001, 2002005, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2180001, 2001000, 9999999, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2180001, 2001001, 9999999, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2180001, 2001002, 9999999, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2180001, 2010000, 9999999, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2180001, 2010002, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2180001, 2010001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2180001, 2010003, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2180001, 2010004, 9999999, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2180001, 2022000, 9999999, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2180001, 2022003, 9999999, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2180001, 2030000, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2180001, 2020012, 9999999, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2180001, 2020013, 9999999, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2180001, 2020014, 9999999, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2180001, 2020015, 9999999, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2180001, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2180001, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2180001, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2180001, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2180001, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(2180001, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# Havis (1064004) +(1064004, 4033611, 100000, 0, 1440, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Gnarled Wooden Key +(1064004, 4033611, 100000, 0, 1440, 0, 4310064, 1, 0, 0, 0, 0, 0, 0, 0, '', 0, 2, 0, 100), # Gnarled Wooden Key +(1064004, 2431265, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Portable Repair Kit + +# Oko (1064003) +(1064003, 2431935, 1000000, 0, 0, 0, 4310064, 4, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 5), # Mastery Book 20 +(1064003, 2431936, 1000000, 0, 0, 0, 4310064, 6, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 5), # Mastery Book 30 +(1064003, 2028154, 1000000, 0, 0, 0, 4310064, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Sealed Box (Hat) +(1064003, 2028155, 1000000, 0, 0, 0, 4310064, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Sealed Box (Overall, Top, Bottom) +(1064003, 2028156, 1000000, 0, 0, 0, 4310064, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Sealed Box (Shoes, Gloves) +(1064003, 2028161, 1000000, 0, 0, 0, 4310064, 4, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Sealed Box (Weapon) +(1064003, 1073138, 1000000, 0, 0, 0, 4310064, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Antique Root Boots +(1064003, 1073138, 1000000, 0, 0, 0, 4310065, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Antique Root Boots +(1064003, 2028162, 1000000, 0, 0, 0, 4310065, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Chaos Sealed Box (Hat) +(1064003, 2028163, 1000000, 0, 0, 0, 4310065, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Chaos Sealed Box (Overall, Top, Bottom) +(1064003, 2028164, 1000000, 0, 0, 0, 4310065, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Chaos Sealed Box (Shoes, Gloves) +(1064003, 2028165, 1000000, 0, 0, 0, 4310065, 4, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Chaos Sealed Box (Weapon) +(1064003, 2001000, 10000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(1064003, 2001001, 10000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(1064003, 2001002, 10000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(1064003, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(1064003, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(1064003, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(1064003, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1064003, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1064003, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(1064003, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow +(1064003, 3700339, 1000000, 0, 0, 3000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Root Abyss Master + +# Glinda (2540017) +(2540017, 2432465, 1000000, 0, 0, 0, 0, 0, 42003, 300000, 0, 0, 0, 0, 42002, 'tf', 30, 1, 0, 1), # Alicia's Damage Skin +(2540017, 2431965, 1000000, 0, 0, 0, 0, 0, 42003, 5000, 0, 0, 0, 0, 42002, 'tf', 5, 1, 0, 100), # Basic Damage Skin +(2540017, 2432463, 1000000, 0, 0, 0, 0, 0, 42003, 210000, 0, 0, 0, 0, 42002, 'tf', 25, 1, 0, 1), # Shovel Snow Manual +(2540017, 3014002, 1000000, 0, 0, 0, 0, 0, 42003, 150000, 0, 0, 0, 0, 42002, 'tf', 20, 1, 0, 1), # High-Five Comic Chair +(2540017, 2432468, 1000000, 0, 0, 0, 0, 0, 42003, 20000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Broken Box Piece +(2540017, 2433841, 1000000, 0, 0, 0, 0, 0, 42003, 1000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tower of Oz Question Ring Box +(2540017, 4001832, 1000000, 0, 0, 0, 0, 0, 42003, 1500, 0, 0, 0, 0, 0, '', 0, 100, 0, 9000), # Spell Trace +(2540017, 2432438, 1000000, 0, 0, 0, 0, 0, 42003, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Prescription Really Not Very Stupid At All Pill +(2540017, 2432439, 1000000, 0, 0, 0, 0, 0, 42003, 90, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Prescription Less Stupid Pill +(2540017, 2432440, 1000000, 0, 0, 0, 0, 0, 42003, 150, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Prescription Kinda Stupid Pill +(2540017, 2432441, 1000000, 0, 0, 0, 0, 0, 42003, 300, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Prescription Pretty Stupid Pill +(2540017, 2432442, 1000000, 0, 0, 0, 0, 0, 42003, 600, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Prescription Pants-On-Head Stupid Pill +(2540017, 2432443, 1000000, 0, 0, 0, 0, 0, 42003, 60, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Generic Really Not Very Stupid At All Pill +(2540017, 2432444, 1000000, 0, 0, 0, 0, 0, 42003, 180, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Generic Less Stupid Pill +(2540017, 2432445, 1000000, 0, 0, 0, 0, 0, 42003, 300, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Generic Kinda Stupid Pill +(2540017, 2432446, 1000000, 0, 0, 0, 0, 0, 42003, 600, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Generic Pretty Stupid Pill +(2540017, 2432447, 1000000, 0, 0, 0, 0, 0, 42003, 1200, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Generic Pants-On-Head Stupid Pill +(2540017, 2020013, 1000000, 0, 0, 0, 0, 0, 42003, 100, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2540017, 2020014, 1000000, 0, 0, 0, 0, 0, 42003, 160, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2540017, 2050004, 1000000, 0, 0, 0, 0, 0, 42003, 160, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # All Cure Potion +(2540017, 2432589, 1000000, 0, 0, 0, 0, 0, 42003, 10, 0, 0, 0, 0, 42002, 'tf', 1, 1, 0, 300), # Tower of Oz Practice Ticket + +# Pub (9076002) +(9076002, 2432201, 100000, 0, 0, 0, 0, 0, 7907, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Folded Diary Page +(9076002, 2437006, 100000, 0, 0, 0, 0, 0, 7907, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Torn Notebook Page +(9076002, 2437007, 100000, 0, 0, 0, 0, 0, 7907, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Old Book Page +(9076002, 2437008, 100000, 0, 0, 0, 0, 0, 7907, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # An Old Letter +(9076002, 4001832, 2000000000, 14, 0, 0, 4310060, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Spell Trace +(9076002, 4000999, 100000, 0, 0, 0, 0, 0, 7907, 30, 0, 0, 0, 0, 0, '', 0, 10, 0, 9000), # Spell Trace +(9076002, 2023677, 100000, 0, 10080, 0, 0, 0, 7907, 50, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Party EXP Booster +(9076002, 2431935, 100000, 0, 0, 0, 0, 0, 7907, 90, 0, 0, 0, 0, 0, '', 0, 1, 0, 5), # Mastery Book 20 +(9076002, 2431936, 100000, 0, 0, 0, 0, 0, 7907, 120, 0, 0, 0, 0, 0, '', 0, 1, 0, 5), # Mastery Book 30 +(9076002, 2640020, 100000, 0, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Party Quest Scroll for One-Handed Weapon for ATT +(9076002, 2640021, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Party Quest Scroll for One-Handed Weapon for Magic ATT +(9076002, 2047836, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Party Quest Scroll for Two-Handed Weapon for ATT +(9076002, 1152205, 100000, 0, 20160, 0, 0, 0, 7907, 860, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Crimsonheart Epaulette +(9076002, 1113283, 100000, 0, 20160, 0, 0, 0, 7907, 1480, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Champion Ring +(9076002, 2437010, 100000, 0, 0, 0, 0, 0, 7907, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Party Quest Gift Box +(9076002, 3010705, 100000, 0, 0, 0, 0, 0, 7907, 350, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Slime Launcher Chair +(9076002, 2431965, 100000, 0, 0, 0, 0, 0, 7907, 740, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Basic Damage Skin +(9076002, 2432131, 100000, 0, 0, 0, 0, 0, 7907, 960, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Party Quest Damage Skin +(9076002, 2437009, 100000, 0, 0, 0, 0, 0, 7907, 1200, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Party Quest Damage Skin + +# Lao (2091012) +(2091012, 2436812, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Kemdi Scarecrow Summoning Sack +(2091012, 2436813, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # So Gong Scarecrow Summoning Sack +(2091012, 3015240, 2000000000, 0, 0, 0, 0, 0, 3887, 99000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mini Mu Lung Dojo Chair +(2091012, 3015241, 2000000000, 0, 0, 0, 0, 0, 3887, 99000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mu Lung Scarecrow Chair +(2091012, 1082394, 2000000000, 0, 10080, 0, 0, 0, 3887, 70000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # So Gong's Gloves +(2091012, 1082709, 2000000000, 0, 10080, 0, 0, 0, 3887, 70000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # So Gong's Gloves +(2091012, 1082660, 2000000000, 0, 10080, 0, 0, 0, 3887, 50000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert's Gloves +(2091012, 1082710, 2000000000, 0, 10080, 0, 0, 0, 3887, 50000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert's Gloves +(2091012, 1082661, 2000000000, 0, 10080, 0, 0, 0, 3887, 30000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert Apprentice's Gloves +(2091012, 1082711, 2000000000, 0, 10080, 0, 0, 0, 3887, 30000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Expert's Apprentice Gloves +(2091012, 2434284, 2000000000, 0, 0, 0, 0, 0, 3887, 2000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mu Lung Dojo Unidentified Belt Box +(2091012, 2434285, 2000000000, 0, 0, 0, 0, 0, 3887, 2000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mu Lung Dojo Unidentified Gloves Box +(2091012, 2434286, 2000000000, 0, 10080, 0, 0, 0, 3887, 1500, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unidentified Traits Growth Box +(2091012, 2434288, 2000000000, 0, 10080, 0, 0, 0, 3887, 6000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Special Medal of Honor +(2091012, 2434287, 2000000000, 0, 10080, 0, 0, 0, 3887, 5000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mu Gong's Honor EXP Guarantee +(2091012, 1122215, 2000000000, 0, 4320, 0, 0, 0, 3887, 3000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pendant of the Spirit +(2091012, 4001851, 2000000000, 0, 10080, 0, 0, 0, 3887, 1500, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (30 minutes) +(2091012, 4001852, 2000000000, 0, 10080, 0, 0, 0, 3887, 3000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (1 hour) +(2091012, 4001853, 2000000000, 0, 10080, 0, 0, 0, 3887, 8000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (3 hours) +(2091012, 4001854, 2000000000, 0, 10080, 0, 0, 0, 3887, 15000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (6 hours) +(2091012, 4001881, 2000000000, 0, 10080, 0, 0, 0, 3887, 22000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (9 hours) +(2091012, 4001862, 2000000000, 0, 10080, 0, 0, 0, 3887, 28000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (12 hours) +(2091012, 4001882, 2000000000, 0, 10080, 0, 0, 0, 3887, 54000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unity Training Center Entrance Charm (24 hours) +(2091012, 2049710, 2000000000, 0, 10080, 0, 0, 0, 3887, 15000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Epic Potential Scroll 50% +(2091012, 2048311, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bonus Potential Scroll 50% +(2091012, 2590004, 2000000000, 0, 0, 0, 0, 0, 3887, 1000, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Prototype Soul Enchanter +(2091012, 4001832, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Spell Trace +(2091012, 2048724, 2000000000, 0, 10080, 0, 0, 0, 3887, 25000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Powerful Rebirth Flame +(2091012, 2434289, 2000000000, 0, 10080, 0, 0, 0, 3887, 70000, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mu Lung Dojo Damage Skin +(2091012, 2434325, 2000000000, 0, 0, 0, 0, 0, 3887, 2500, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Scarecrow Summoning Sack +(2091012, 2434330, 2000000000, 0, 0, 0, 0, 0, 3887, 2500, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Scarecrow Summoning Sack +(2091012, 2436812, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 999, 999, 0, '', 0, 1, 0, 300), # Kemdi Scarecrow Summoning Sack +(2091012, 2436813, 2000000000, 0, 0, 0, 0, 0, 3887, 5000, 0, 0, 999, 999, 0, '', 0, 1, 0, 300), # So Gong Scarecrow Summoning Sack + +# Mr. Sweatbottom (1061002) +(1061002, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1061002, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1061002, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1061002, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1061002, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1061002, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1061002, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1061002, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1061002, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1061002, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1061002, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(1061002, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(1061002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1061002, 2030006, 1000000, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Sleepywood +(1061002, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1061002, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1061002, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1061002, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1061002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Randolf (9390122) +(9390122, 2022794, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Premium Hair Wax +(9390122, 2022795, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Premium Carrot Juice +(9390122, 2022796, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Snake Bone Soup +(9390122, 2022797, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Extra-Strength Hand Sanitizer +(9390122, 2022798, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Cafe Latte +(9390122, 2022799, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Premium Cologne +(9390122, 2431232, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Suspicious Mineral Pouch +(9390122, 2431233, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Suspicious Herb Pouch +(9390122, 4021013, 100000, 0, 0, 0, 4310098, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Basic Item Crystal +(9390122, 4021014, 100000, 0, 0, 0, 4310098, 7, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Intermediate Item Crystal +(9390122, 4021015, 100000, 0, 0, 0, 4310098, 10, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Advanced Item Crystal +(9390122, 2046223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Armor STR 60% +(9390122, 2046224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Armor INT 60% +(9390122, 2046225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Armor for DEX 60% +(9390122, 2046226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Armor LUK 60% +(9390122, 2046314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Accessory STR 60% +(9390122, 2046315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Accessory INT 60% +(9390122, 2046316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Accessory for DEX 60% +(9390122, 2046317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Accessory LUK 60% +(9390122, 2046012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for One-Handed Weapon ATT 60% +(9390122, 2046013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for One-Handed Weapon M. ATT 60% +(9390122, 2046112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Two-Handed Weapon ATT 60% +(9390122, 2612004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Scroll for Two-Handed Weapon Magic ATT 60% +(9390122, 2049401, 100000, 0, 0, 0, 4310098, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Potential Scroll +(9390122, 2049301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Equip Enhancement Scroll +(9390122, 2430442, 100000, 0, 10080, 0, 4310098, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Profession Coupon +(9390122, 2049300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Advanced Equip Enhancement Scroll +(9390122, 2049400, 100000, 0, 0, 0, 4310098, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Advanced Potential Scroll +(9390122, 2049100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Chaos Scroll 60% +(9390122, 2003048, 100000, 0, 0, 0, 4310098, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Gollux Sapphire Piercing Potion +(9390122, 2003049, 100000, 0, 0, 0, 4310098, 30, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Gollux Ruby Dominance Potion +(9390122, 2003581, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Star Potion +(9390122, 2510171, 100000, 0, 0, 0, 4310098, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Android (M) Recipe +(9390122, 2510172, 100000, 0, 0, 0, 4310098, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Android (F) Recipe +(9390122, 2510176, 100000, 0, 0, 0, 4310098, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Iron Heart Recipe +(9390122, 2510240, 100000, 0, 0, 0, 4310098, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Gold Heart Recipe +(9390122, 2047906, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Armor for ATT 90% +(9390122, 2047907, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Armor for M. ATT 90% +(9390122, 2047908, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Armor for STR 90% +(9390122, 2047909, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Armor for INT 90% +(9390122, 2047910, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Armor for DEX 90% +(9390122, 2047911, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Armor for LUK 90% +(9390122, 2046831, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Accessory for ATT 90% +(9390122, 2046832, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Accessory for M. ATT 90% +(9390122, 2046833, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Accessory for STR 90% +(9390122, 2046834, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Accessory for INT 90% +(9390122, 2046835, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Accessory for DEX 90% +(9390122, 2046836, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Occult Scroll for Accessory for LUK 90% +(9390122, 4033982, 10000000, 0, 0, 0, 4310098, 10, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Fallen Heart Tree Key + +# Lucia (9390123) +(9390123, 4021016, 30, 0, 0, 0, 4310097, 3, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Superior Item Crystal +(9390123, 2510108, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Carabella Recipe +(9390123, 2510109, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Axe Recipe +(9390123, 2510110, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Mace Recipe +(9390123, 2510111, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Kanzir Recipe +(9390123, 2510112, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Kreda Recipe +(9390123, 2510113, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Wand Recipe +(9390123, 2510114, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Staff Recipe +(9390123, 2510115, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Claymore Recipe +(9390123, 2510116, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Battle Axe Recipe +(9390123, 2510117, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Flame Recipe +(9390123, 2510118, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Faltizan Recipe +(9390123, 2510119, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Chelbird Recipe +(9390123, 2510120, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Shiner Bow Recipe +(9390123, 2510121, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Shiner Cross Recipe +(9390123, 2510122, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Green Sleve Recipe +(9390123, 2510123, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Purple Sleve Recipe +(9390123, 2510124, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragon Slash Claw Recipe +(9390123, 2510125, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dragonfire Revolver Recipe +(9390123, 2049000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Clean Slate Scroll 1% +(9390123, 2510173, 10000000, 0, 0, 0, 4310098, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Deluxe Android (M) Recipe +(9390123, 2510174, 10000000, 0, 0, 0, 4310098, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Deluxe Android (F) Recipe +(9390123, 2510241, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Garnet Heart Recipe +(9390123, 2510242, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Crystal Heart Recipe +(9390123, 2511043, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Red Bear Pendant Recipe +(9390123, 2511044, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Pink Bear Pendant Recipe +(9390123, 2511047, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Red Owl Pendant Recipe +(9390123, 2511048, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Pink Owl Pendant Recipe +(9390123, 2511051, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Red Wolf Pendant Recipe +(9390123, 2511052, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Pink Wolf Pendant Recipe +(9390123, 2511055, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Red Peacock Pendant Recipe +(9390123, 2511056, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Pink Peacock Pendant Recipe +(9390123, 2511066, 10000000, 0, 0, 0, 4310097, 20, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Ring V Recipe +(9390123, 1032220, 10000000, 0, 0, 0, 4310097, 10, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cracked Gollux Earrings +(9390123, 1032221, 10000000, 0, 0, 0, 4310097, 40, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Gollux Earrings +(9390123, 1032222, 10000000, 0, 0, 0, 4310097, 90, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reinforced Gollux Earrings +(9390123, 1032223, 10000000, 0, 0, 0, 4310097, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Superior Gollux Earrings +(9390123, 1113072, 10000000, 0, 0, 0, 4310097, 15, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cracked Gollux Ring +(9390123, 1113073, 10000000, 0, 0, 0, 4310097, 50, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Solid Gollux Ring +(9390123, 1113074, 10000000, 0, 0, 0, 4310097, 110, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Reinforced Gollux Ring +(9390123, 1113075, 10000000, 0, 0, 0, 4310097, 160, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Superior Gollux Ring +(9390123, 3010698, 10000000, 0, 0, 0, 4310097, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gollux Chair +(9390123, 3010699, 10000000, 0, 0, 0, 4310097, 200, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gollux Head Chair +(9390123, 2615000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 200), # Basic Gollux Scroll +(9390123, 2615001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 200), # Advanced Gollux Scroll + +# Supplier Salio (1540894) +(1540894, 1542108, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Katana +(1540894, 1552110, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Summoner +(1540894, 1252093, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Scepter +(1540894, 2048915, 0, 0, 0, 0, 1918285148, -2147409152, 352997008, 0, 1913632003, 0, 0, 0, 0, '', 0, 0, 0, 100), # AbsoLab Lucky Item Scroll +(1540894, 4310216, 2000000000, 0, 4320, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Essence +(1540894, 1212115, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Shining Rod +(1540894, 1222109, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Soul Shooter +(1540894, 1232109, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Desperado +(1540894, 1242120, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Whip Blade +(1540894, 1242116, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Whip Blade +(1540894, 1302333, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Saber +(1540894, 1312199, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Axe +(1540894, 1322250, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bit Hammer +(1540894, 1332274, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Blade Lord +(1540894, 1342101, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Katara +(1540894, 1362135, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Forked Cane +(1540894, 1372222, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Spellsong Wand +(1540894, 1382259, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Spellsong Staff +(1540894, 1262017, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Psy-limiter +(1540894, 1272016, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Chain +(1540894, 1282016, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Lucent Gauntlet +(1540894, 1582017, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pile God +(1540894, 1402251, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Broad Saber +(1540894, 1412177, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Broad Axe +(1540894, 1422184, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Broad Hammer +(1540894, 1432214, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Piercing Spear +(1540894, 1442268, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Hellslayer +(1540894, 1452252, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Sureshot Bow +(1540894, 1462239, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Crossbow +(1540894, 1472261, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Revenge Guard +(1540894, 1482216, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Blast Knuckle +(1540894, 1492231, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Point Gun +(1540894, 1522138, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Dual Bowguns +(1540894, 1532144, 2000000000, 1, 0, 0, 4310199, 5, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Blast Cannon +(1540894, 1004422, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Helm +(1540894, 1004423, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Crown +(1540894, 1004424, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Hood +(1540894, 1004425, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Cap +(1540894, 1004426, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Fedora +(1540894, 1052882, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Suit +(1540894, 1052887, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Suit +(1540894, 1052888, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Suit +(1540894, 1052889, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Bandit Suit +(1540894, 1052890, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Suit +(1540894, 1152174, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Knight Shoulder +(1540894, 1152176, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Mage Shoulder +(1540894, 1152177, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Archer Shoulder +(1540894, 1152178, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Thief Shoulder +(1540894, 1152179, 2000000000, 1, 0, 0, 4310199, 2, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # AbsoLab Pirate Shoulder +(1540894, 2120000, 1000000000, 2, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1540894, 2022003, 1000000, 2, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(1540894, 2022000, 1000000, 2, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(1540894, 2001000, 1000000, 2, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(1540894, 2001001, 1000000, 2, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(1540894, 2001002, 1000000, 2, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(1540894, 2020012, 1000000, 2, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(1540894, 2020013, 1000000, 2, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(1540894, 2020014, 1000000, 2, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(1540894, 2020015, 1000000, 2, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(1540894, 2002000, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1540894, 2002001, 100000, 2, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1540894, 2002002, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1540894, 2002004, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1540894, 2002005, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1540894, 2030000, 100000, 2, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1540894, 2060000, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1540894, 2061000, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1540894, 2060000, 0, 2, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1540894, 2061000, 0, 2, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1540894, 2050000, 100000, 2, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1540894, 2050001, 100000, 2, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1540894, 2050002, 100000, 2, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic + +# Doofus (1012004) +(1012004, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1012004, 2260000, 1000000000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Revitalizer +(1012004, 2432512, 1000000000, 0, 0, 6000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 10), # Accelerator + +# Thorr (1302022) +(1302022, 2000000, 2000000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1302022, 2000001, 2000000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1302022, 2000002, 2000000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1302022, 2000003, 2000000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1302022, 2000006, 2000000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1302022, 2002000, 2000000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1302022, 2002001, 2000000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1302022, 2002002, 2000000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1302022, 2002004, 2000000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1302022, 2002005, 2000000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1302022, 2050000, 2000000000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1302022, 2050001, 2000000000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1302022, 2050002, 2000000000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1302022, 2050003, 2000000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(1302022, 2022003, 2000000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(1302022, 2022000, 2000000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(1302022, 2001001, 2000000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(1302022, 2001002, 2000000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(1302022, 2020012, 2000000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(1302022, 2020013, 2000000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(1302022, 2020014, 2000000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(1302022, 2020015, 2000000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(1302022, 2060000, 2000000000, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1302022, 2061000, 2000000000, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1302022, 2030000, 2000000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1302022, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food + +# Mozza Mozza (1013303) +(1013303, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1013303, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1013303, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1013303, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1013303, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1013303, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1013303, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1013303, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1013303, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1013303, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1013303, 2010000, 1000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1013303, 2010002, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1013303, 2010001, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1013303, 2010003, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1013303, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1013303, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1013303, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1013303, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1013303, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1013303, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1013303, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic + +# June (1052254) +(1052254, 2001000, 10000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(1052254, 2001001, 10000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(1052254, 2001002, 10000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(1052254, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(1052254, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(1052254, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(1052254, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1052254, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1052254, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1052254, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1052254, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(1052254, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# Squire Pancho Sanza (9010111) +(9010111, 2023658, 1000000, 0, 14400, 0, 0, 0, 500629, 10, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Might Lv. 1 +(9010111, 2023659, 1000000, 0, 14400, 0, 0, 0, 500629, 20, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Might Lv. 2 +(9010111, 2023660, 1000000, 0, 14400, 0, 0, 0, 500629, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Might Lv. 3 +(9010111, 2450147, 1000000, 0, 14400, 0, 0, 0, 500629, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Expertise Lv. 1 +(9010111, 2450148, 1000000, 0, 14400, 0, 0, 0, 500629, 50, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Expertise Lv. 2 +(9010111, 2450149, 1000000, 0, 14400, 0, 0, 0, 500629, 70, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Expertise Lv. 3 +(9010111, 2023661, 1000000, 0, 14400, 0, 0, 0, 500629, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Luck Lv. 1 +(9010111, 2023662, 1000000, 0, 14400, 0, 0, 0, 500629, 50, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Luck Lv. 2 +(9010111, 2023663, 1000000, 0, 14400, 0, 0, 0, 500629, 70, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Luck Lv. 3 +(9010111, 2023664, 1000000, 0, 14400, 0, 0, 0, 500629, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Wealth Lv. 1 +(9010111, 2023665, 1000000, 0, 14400, 0, 0, 0, 500629, 50, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Wealth Lv. 2 +(9010111, 2023666, 1000000, 0, 14400, 0, 0, 0, 500629, 70, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion's Wealth Lv. 3 +(9010111, 2049018, 2000000000, 1, 0, 0, 4310057, 68, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Clean Slate Scroll 10% +(9010111, 2049710, 1000000, 0, 14400, 0, 0, 0, 500629, 140, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Epic Potential Scroll 50% +(9010111, 2049509, 1000000, 0, 14400, 0, 0, 0, 500629, 40, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Potential Stamp +(9010111, 2710002, 1000000, 0, 14400, 0, 0, 0, 500629, 140, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Master Craftsman's Cube +(9010111, 2048724, 1000000, 0, 14400, 0, 0, 0, 500629, 100, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Powerful Rebirth Flame +(9010111, 2436614, 1000000, 0, 14400, 0, 0, 0, 500629, 30, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Legion Meso Box +(9010111, 2436615, 1000000, 0, 14400, 0, 0, 0, 500629, 50, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Intermediate Legion Meso Box +(9010111, 2436616, 1000000, 0, 14400, 0, 0, 0, 500629, 70, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Advanced Legion Meso Box +(9010111, 2436617, 1000000, 0, 14400, 0, 0, 0, 500629, 75, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Basic Legion Growth Potion +(9010111, 2436618, 1000000, 0, 14400, 0, 0, 0, 500629, 110, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Intermediate Legion Growth Potion +(9010111, 2436619, 1000000, 0, 14400, 0, 0, 0, 500629, 150, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Advanced Legion Growth Potion +(9010111, 2436884, 1000000, 0, 43200, 0, 0, 0, 500629, 500, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Legion Preset Coupon +(9010111, 2048311, 2000000000, 1, 0, 0, 4310057, 83, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bonus Potential Scroll 50% +(9010111, 2535000, 1000000, 0, 10080, 0, 0, 0, 500629, 300, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arcane Catalyst + +# Rana the Fairy (1531031) +(1531031, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1531031, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1531031, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1531031, 2000003, 100000, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1531031, 2000006, 100000, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1531031, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1531031, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1531031, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1531031, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1531031, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1531031, 2010000, 100000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1531031, 2010002, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1531031, 2010001, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1531031, 2010003, 100000, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1531031, 2010004, 100000, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1531031, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1531031, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1531031, 2030002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Ellinia +(1531031, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1531031, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1531031, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1531031, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1531031, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1531031, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1531031, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1531031, 2050003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water + +# Ethos (1033001) +(1033001, 1522000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Trusty & Faithful +(1033001, 1522001, 100000, 0, 0, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blinding Light +(1033001, 1522002, 100000, 0, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elven Diplomacy +(1033001, 1522003, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Songs of Nature +(1033001, 1522004, 100000, 0, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Twin Angels +(1033001, 1522005, 100000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Proud Blossoms +(1033001, 1522006, 100000, 0, 0, 225000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Argents +(1033001, 1352000, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magic Arrows +(1033001, 1352001, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sharp Magic Arrows +(1033001, 1352002, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Eternal Magic Arrows +(1033001, 1352003, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Infinite Magic Arrows +(1033001, 1353100, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Fox Marble +(1033001, 1353101, 100000, 0, 0, 79000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Fox Marble +(1033001, 1353102, 100000, 0, 0, 330000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Fox Marble +(1033001, 1353103, 100000, 0, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Fox Marble +(1033001, 1002008, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Skullcap +(1033001, 1002033, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Old Wisconsin +(1033001, 1002012, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Baseball Cap +(1033001, 1002060, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Baseball Cap +(1033001, 1002061, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Baseball Cap +(1033001, 1002062, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Baseball Cap +(1033001, 1002063, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Baseball Cap +(1033001, 1002112, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Feather Hat +(1033001, 1002113, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Feather Hat +(1033001, 1002114, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Feather Hat +(1033001, 1002115, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Feather Hat +(1033001, 1002116, 100000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Feather Hat +(1033001, 1002117, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Robin Hat +(1033001, 1002118, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Robin Hat +(1033001, 1002119, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Robin Hat +(1033001, 1002120, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Robin Hat +(1033001, 1002121, 100000, 0, 0, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Robin Hat +(1033001, 1002010, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Winter Hat +(1033001, 1002057, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Winter Hat +(1033001, 1002156, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter +(1033001, 1002157, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter +(1033001, 1002158, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter +(1033001, 1002159, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Hunter +(1033001, 1002160, 100000, 0, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hunter +(1033001, 1002161, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hawkeye +(1033001, 1002162, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hawkeye +(1033001, 1002163, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hawkeye +(1033001, 1002164, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hawkeye +(1033001, 1002165, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hawkeye +(1033001, 1032001, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Single Earring +(1033001, 1032003, 100000, 0, 0, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Amethyst Earrings +(1033001, 1040008, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Archer Top +(1033001, 1040071, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Archer Top +(1033001, 1040007, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Leather Hoodwear +(1033001, 1040011, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Leather Hoodwear +(1033001, 1040003, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Top +(1033001, 1040022, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(1033001, 1040023, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bennis Chainmail +(1033001, 1040024, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(1033001, 1040025, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(1033001, 1040067, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Armor +(1033001, 1040068, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Armor +(1033001, 1040069, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Armor +(1033001, 1040070, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Armor +(1033001, 1041007, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin +(1033001, 1041061, 100000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin +(1033001, 1041008, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor +(1033001, 1041062, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Able Armor +(1033001, 1041063, 100000, 0, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Armor +(1033001, 1041013, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail +(1033001, 1041027, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail +(1033001, 1041028, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail +(1033001, 1041032, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Bennis Chainmail +(1033001, 1041033, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Bennis Chainmail +(1033001, 1041034, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Bennis Chainmail +(1033001, 1041035, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Bennis Chainmail +(1033001, 1041054, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Armor +(1033001, 1041055, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Armor +(1033001, 1041056, 100000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Armor +(1033001, 1060005, 100000, 0, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Warfare Pants +(1033001, 1060056, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hunter's Pants +(1033001, 1060057, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Hunter's Pants +(1033001, 1060058, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hunter's Pants +(1033001, 1060059, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Hunter's Pants +(1033001, 1061009, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Avelin Skirt +(1033001, 1061057, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Avelin Skirt +(1033001, 1061006, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Able Armor Skirt +(1033001, 1061058, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Able Skirt +(1033001, 1061059, 100000, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grey Able Skirt +(1033001, 1061024, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Shivermail Skirt +(1033001, 1061025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shivermail Skirt +(1033001, 1061026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Shivermail Skirt +(1033001, 1061050, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Huntress Pants +(1033001, 1061051, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Huntress Pants +(1033001, 1061052, 100000, 0, 0, 44000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Huntress Pants +(1033001, 1062004, 100000, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Archer Pants +(1033001, 1062002, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Pants +(1033001, 1062006, 100000, 0, 0, 13000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bennis Chainpants +(1033001, 1072015, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Hard Leather Boots +(1033001, 1072059, 100000, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hard Leather Boots +(1033001, 1072016, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Woodsman Boots +(1033001, 1072060, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Woodsman Boots +(1033001, 1072061, 100000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Woodsman Boots +(1033001, 1072025, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deer Huntertop +(1033001, 1072026, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rabbit Huntertop +(1033001, 1072067, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bear Huntertop +(1033001, 1072068, 100000, 0, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # LIon Huntertop +(1033001, 1072012, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Whitebottom Shoes +(1033001, 1072054, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Whitebottom Boots +(1033001, 1072055, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Whitebottom Boots +(1033001, 1072056, 100000, 0, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Whitebottom Boots +(1033001, 1072018, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sneakers +(1033001, 1072064, 100000, 0, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sneakers + +# Erwin (1033002) +(1033002, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(1033002, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1033002, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1033002, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1033002, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1033002, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1033002, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1033002, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1033002, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1033002, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1033002, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1033002, 2010000, 100000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1033002, 2010002, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1033002, 2010001, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1033002, 2010003, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1033002, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1033002, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(1033002, 4032977, 100000, 0, 0, 10000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Unicorn Special Meal +(1033002, 2030004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Henesys +(1033002, 2030025, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Elluel Return Scroll +(1033002, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1033002, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1033002, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1033002, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1033002, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1033002, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1033002, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1033002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Len the Fairy (1031100) +(1031100, 4036030, 1000000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Roswaal's Magic Crystal +(1031100, 4170050, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Andersen's Key +(1031100, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1031100, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1031100, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1031100, 2000003, 100000, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1031100, 2000006, 100000, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1031100, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1031100, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1031100, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1031100, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1031100, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1031100, 2010000, 100000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1031100, 2010002, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1031100, 2010001, 100000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1031100, 2010003, 100000, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1031100, 2010004, 100000, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1031100, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(1031100, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1031100, 2030002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll to Ellinia +(1031100, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1031100, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1031100, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1031100, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1031100, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1031100, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1031100, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(1031100, 2050003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(1031100, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Mason (1082001) +(1082001, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(1082001, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1082001, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1082001, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1082001, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1082001, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1082001, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1082001, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1082001, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1082001, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1082001, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1082001, 2010000, 1000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1082001, 2010002, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1082001, 2010001, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1082001, 2010003, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1082001, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1082001, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1082001, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1082001, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1082001, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1082001, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1082001, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(1082001, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(1082001, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic + +# Renard (1501005) +(1501005, 2000000, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1501005, 2000001, 9999999, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1501005, 2000002, 9999999, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1501005, 2000003, 9999999, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1501005, 2000006, 9999999, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1501005, 2002000, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1501005, 2002001, 9999999, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1501005, 2002002, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1501005, 2002004, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1501005, 2002005, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1501005, 2001000, 9999999, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(1501005, 2001001, 9999999, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(1501005, 2001002, 9999999, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(1501005, 2010000, 9999999, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1501005, 2010002, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1501005, 2010001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1501005, 2010003, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1501005, 2010004, 9999999, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1501005, 2020012, 9999999, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(1501005, 2020013, 9999999, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(1501005, 2020014, 9999999, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(1501005, 2020015, 9999999, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(1501005, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1501005, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1501005, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1501005, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(1501005, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# 24 Hr Mobile Store (1061001) +(1061001, 4170050, 0, 0, 0, 158666200, 2, 158694748, 2, 158704424, 2, 0, 0, 0, 158698852, '', 2, 0, 0, 1000), # Andersen's Key +(1061001, 2020001, 100000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Fried Chicken +(1061001, 2020005, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hot Dog +(1061001, 2020003, 100000, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pizza +(1061001, 2020004, 100000, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hamburger +(1061001, 2020006, 100000, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hot Dog Supreme +(1061001, 2022003, 100000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(1061001, 2020000, 100000, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Salad +(1061001, 2022000, 100000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(1061001, 2020002, 100000, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Cake +(1061001, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1061001, 2060000, 10000000, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1061001, 2061000, 10000000, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1061001, 2060000, 10000000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1061001, 2061000, 10000000, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow + +# Melias (2060003) +(2060003, 1002084, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(2060003, 1002243, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(2060003, 1002268, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(2060003, 1002247, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(2060003, 1002634, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(2060003, 1002030, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Planet +(2060003, 1002254, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Infinium Circlet +(2060003, 1002289, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Patriot +(2060003, 1002285, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Nightfox +(2060003, 1002637, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pirate's Bandana +(2060003, 1040090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(2060003, 1040091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(2060003, 1040092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(2060003, 1040093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(2060003, 1040098, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(2060003, 1040099, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(2060003, 1040100, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(2060003, 1041091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(2060003, 1041092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(2060003, 1041093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(2060003, 1041094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(2060003, 1041095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(2060003, 1041096, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(2060003, 1060079, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(2060003, 1060080, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(2060003, 1060081, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(2060003, 1060082, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(2060003, 1060087, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(2060003, 1060088, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(2060003, 1060089, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(2060003, 1061090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(2060003, 1061091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(2060003, 1061092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(2060003, 1061093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(2060003, 1061094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(2060003, 1061095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(2060003, 1040102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Platine +(2060003, 1040103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine +(2060003, 1040104, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine +(2060003, 1040105, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Top +(2060003, 1040106, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Top +(2060003, 1040107, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Top +(2060003, 1041097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina +(2060003, 1041098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina +(2060003, 1041099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina +(2060003, 1041100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique +(2060003, 1041101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique +(2060003, 1041102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique +(2060003, 1041103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique +(2060003, 1060091, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine Pants +(2060003, 1060092, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine Pants +(2060003, 1060093, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Pants +(2060003, 1060094, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Pants +(2060003, 1060095, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Pants +(2060003, 1061096, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina Pants +(2060003, 1061097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina Pants +(2060003, 1061098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina Pants +(2060003, 1061099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique Pants +(2060003, 1061100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique Pants +(2060003, 1061101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique Pants +(2060003, 1061102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Pants +(2060003, 1050053, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(2060003, 1050054, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(2060003, 1050055, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(2060003, 1050056, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(2060003, 1050058, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(2060003, 1050059, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(2060003, 1050060, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(2060003, 1051044, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(2060003, 1051045, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(2060003, 1051046, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(2060003, 1051047, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(2060003, 1051041, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(2060003, 1051042, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(2060003, 1051043, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(2060003, 1052119, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(2060003, 1050067, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requiem +(2060003, 1050068, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requiem +(2060003, 1050069, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requiem +(2060003, 1050070, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requiem +(2060003, 1050061, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Linnex +(2060003, 1050062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Linnex +(2060003, 1050063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Linnex +(2060003, 1050064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Linnex +(2060003, 1051052, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requierre +(2060003, 1051053, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requierre +(2060003, 1051054, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requierre +(2060003, 1051055, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requierre +(2060003, 1051062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lineros +(2060003, 1051063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Lineros +(2060003, 1051064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lineros +(2060003, 1051065, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lineros +(2060003, 1052122, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viska +(2060003, 1072149, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(2060003, 1072139, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(2060003, 1072146, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(2060003, 1072152, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(2060003, 1072306, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(2060003, 1072156, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Carzen Boots +(2060003, 1072160, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Lapiz Sandals +(2060003, 1072167, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Elf Shoes +(2060003, 1072163, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Shoes +(2060003, 1072309, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Voyson Shoes +(2060003, 1082061, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(2060003, 1082088, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(2060003, 1082091, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(2060003, 1082094, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(2060003, 1082201, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult +(2060003, 1082105, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Husk +(2060003, 1082100, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lorin +(2060003, 1082108, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Eyes +(2060003, 1082097, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Rover +(2060003, 1082204, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bisk + +# Calypso (2060007) +(2060007, 1252004, 100, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Panther Scepter +(2060007, 1252005, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grizzly Scepter +(2060007, 1542006, 10000, 0, 0, 380000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Helix +(2060007, 1542055, 10000, 0, 0, 380000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Helix +(2060007, 1552005, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Melodic Fan +(2060007, 1552055, 10000, 0, 0, 380000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unique Fan +(2060007, 1302011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neocora +(2060007, 1302012, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Katana +(2060007, 1312009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkhead +(2060007, 1312010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mikhail +(2060007, 1322018, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tamus +(2060007, 1322019, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Judgement +(2060007, 1332015, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deadly Fin +(2060007, 1332017, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Coil +(2060007, 1332018, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Kandine +(2060007, 1332019, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden River +(2060007, 1342004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ascalon Katara +(2060007, 1342005, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavenly Katara +(2060007, 1362009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bijou Canne +(2060007, 1362010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Regne +(2060007, 1372014, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Tale +(2060007, 1372015, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Angel Wings +(2060007, 1382006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Thorns +(2060007, 1382007, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Wings +(2060007, 1402011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sparta +(2060007, 1402012, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Doombringer +(2060007, 1412007, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Shining +(2060007, 1412008, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Chrono +(2060007, 1422009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Blessing +(2060007, 1422010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gigantic Sledge +(2060007, 1432006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Spear +(2060007, 1432007, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Redemption +(2060007, 1442010, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Skylar +(2060007, 1442008, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Gold Dragon +(2060007, 1452004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Asianic Bow +(2060007, 1452009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hinkel +(2060007, 1462008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Crow +(2060007, 1462009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gross Jaeger +(2060007, 1592003, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Avaris Ancient Bow +(2060007, 1592004, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magna Ancient Bow +(2060007, 1472025, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Gigantic +(2060007, 1472029, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Scarab +(2060007, 1482008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphims +(2060007, 1482009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beia Crash +(2060007, 1492008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Burning Hell +(2060007, 1492009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Abyss Shooter +(2060007, 1522008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Glory +(2060007, 1522009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Twin Zephyrs +(2060007, 1532008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Bigshot +(2060007, 1532009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Infernalizer +(2060007, 1212004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vallentier +(2060007, 1212005, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sharp Slaver + +# Toly (2040051) +(2040051, 4170050, 0, 0, 0, 38619404, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2040051, 2002010, 1000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Speed Pill +(2040051, 2002006, 1000, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Warrior Pill +(2040051, 2002007, 1000, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Magic Pill +(2040051, 2002008, 1000, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Sniper Pill +(2040051, 2002009, 1000, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Dexterity Pill +(2040051, 2022003, 10000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2040051, 2022000, 10000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2040051, 2001001, 10000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2040051, 2001002, 10000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2040051, 2020012, 10000, 0, 0, 4680, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2040051, 2020013, 1000, 0, 0, 5824, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2040051, 2020014, 1000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2040051, 2020015, 1000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2040051, 2000007, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Pill +(2040051, 2000000, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2040051, 2000008, 1000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Pill +(2040051, 2000001, 1000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2040051, 2000009, 1000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Pill +(2040051, 2000002, 1000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2040051, 2000010, 1000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Pill +(2040051, 2000003, 1000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2040051, 2000011, 1000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir Pill +(2040051, 2000006, 1000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2040051, 2050000, 1000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(2040051, 2050001, 1000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(2040051, 2050002, 1000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(2040051, 2050003, 1000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(2040051, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2040051, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2040051, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2040051, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2040051, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(2040051, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow +(2040051, 2030000, 1000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town + +# Patricia (2041014) +(2041014, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(2041014, 2260000, 1000000000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Revitalizer +(2041014, 2432512, 1000000000, 0, 0, 6000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 10), # Accelerator +(2041014, 4031993, 1000000000, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Bartos's Favorite Juice + +# Misky (2041006) +(2041006, 4170050, -1205756656, -1205768888, 1, 0, 0, -1205761208, 1, -1205764696, 1, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2041006, 2000007, 50000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Pill +(2041006, 2000000, 9999999, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2041006, 2000008, 50000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Pill +(2041006, 2000001, 9999999, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2041006, 2000009, 50000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Pill +(2041006, 2000002, 9999999, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2041006, 2000010, 50000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Pill +(2041006, 2000003, 9999999, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2041006, 2000011, 50000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir Pill +(2041006, 2000006, 9999999, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2041006, 2001001, 9999999, 0, 0, 2185, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2041006, 2001002, 9999999, 0, 0, 3800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2041006, 2002006, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Warrior Pill +(2041006, 2002007, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Magic Pill +(2041006, 2002008, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Sniper Pill +(2041006, 2002009, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Dexterity Pill +(2041006, 2002010, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 600), # Speed Pill +(2041006, 2010001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2041006, 2010002, 9999999, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2041006, 2020001, 9999999, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Fried Chicken +(2041006, 2020002, 9999999, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Cake +(2041006, 2020003, 9999999, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pizza +(2041006, 2020004, 9999999, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hamburger +(2041006, 2020005, 9999999, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hot Dog +(2041006, 2020006, 9999999, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hot Dog Supreme +(2041006, 2020028, 9999999, 0, 0, 1994, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(2041006, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2041006, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2041006, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2041006, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2041006, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2041006, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(2041006, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow +(2041006, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Miru (2041003) +(2041003, 1002028, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Crusader Helm +(2041003, 1002216, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Golden Circlet +(2041003, 1002212, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Maro +(2041003, 1002207, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sonata +(2041003, 1002631, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Leather Ocean Hat +(2041003, 1002084, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(2041003, 1002243, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(2041003, 1002268, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(2041003, 1002247, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(2041003, 1002634, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(2041003, 1040087, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shouldermail +(2041003, 1040088, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Shouldermail +(2041003, 1040089, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Shouldermail +(2041003, 1040094, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red China +(2041003, 1040095, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue China +(2041003, 1040096, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown China +(2041003, 1040097, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green China +(2041003, 1041087, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shouldermail +(2041003, 1041088, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ivory Shouldermail +(2041003, 1041089, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Shouldermail +(2041003, 1041077, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Moon +(2041003, 1041078, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon +(2041003, 1041079, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon +(2041003, 1041080, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon +(2041003, 1060076, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shouldermail Pants +(2041003, 1060077, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Shouldermail Pants +(2041003, 1060078, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Shouldermail Pants +(2041003, 1060083, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red China Pants +(2041003, 1060084, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue China Pants +(2041003, 1060085, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown China Pants +(2041003, 1060086, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green China Pants +(2041003, 1061086, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shouldermail Pants +(2041003, 1061087, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ivory Shouldermail Pants +(2041003, 1061088, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Shouldermail Pants +(2041003, 1061076, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Moon Pants +(2041003, 1061077, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Pants +(2041003, 1061078, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon Pants +(2041003, 1061079, 100000, 0, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Pants +(2041003, 1040090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(2041003, 1040091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(2041003, 1040092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(2041003, 1040093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(2041003, 1040098, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(2041003, 1040099, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(2041003, 1040100, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(2041003, 1041091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(2041003, 1041092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(2041003, 1041093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(2041003, 1041094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(2041003, 1041095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(2041003, 1041096, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(2041003, 1060079, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(2041003, 1060080, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(2041003, 1060081, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(2041003, 1060082, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(2041003, 1060087, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(2041003, 1060088, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(2041003, 1060089, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(2041003, 1061090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(2041003, 1061091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(2041003, 1061092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(2041003, 1061093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(2041003, 1061094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(2041003, 1061095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(2041003, 1050045, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Calas +(2041003, 1050046, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Calas +(2041003, 1050047, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Calas +(2041003, 1050049, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Calas +(2041003, 1050048, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Calas +(2041003, 1050051, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red-Lined Kismet +(2041003, 1050052, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue-Lined Kismet +(2041003, 1051030, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Calaf +(2041003, 1051031, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Calaf +(2041003, 1051032, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Calaf +(2041003, 1051033, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Calaf +(2041003, 1051034, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Calaf +(2041003, 1051037, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lumati +(2041003, 1051038, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lumati +(2041003, 1051039, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lumati +(2041003, 1052116, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Plasteer +(2041003, 1050053, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(2041003, 1050054, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(2041003, 1050055, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(2041003, 1050056, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(2041003, 1050058, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(2041003, 1050059, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(2041003, 1050060, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(2041003, 1051044, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(2041003, 1051045, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(2041003, 1051046, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(2041003, 1051047, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(2041003, 1051041, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(2041003, 1051042, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(2041003, 1051043, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(2041003, 1052119, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(2041003, 1072135, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Hildon Boots +(2041003, 1072143, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Goldenwind Shoes +(2041003, 1072125, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steel-Tip Boots +(2041003, 1072129, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Goni Shoes +(2041003, 1072303, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Double Boots +(2041003, 1072149, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(2041003, 1072139, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(2041003, 1072146, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(2041003, 1072152, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(2041003, 1072306, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(2041003, 1082011, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Brist +(2041003, 1082082, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pennance +(2041003, 1082085, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Willow +(2041003, 1082067, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Gloves +(2041003, 1082198, 100000, 0, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Royce +(2041003, 1082061, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(2041003, 1082088, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(2041003, 1082091, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(2041003, 1082094, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(2041003, 1082201, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult + +# Hid (2041002) +(2041002, 1252003, 100, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Talon Scepter +(2041002, 1252004, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Panther Scepter +(2041002, 1542053, 10000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Savior +(2041002, 1542054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Death's Whisper +(2041002, 1552053, 10000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fan of Enlightenment +(2041002, 1552054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Melodic Fan +(2041002, 1302010, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jeweled Katar +(2041002, 1302011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neocora +(2041002, 1312008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Buck +(2041002, 1312009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkhead +(2041002, 1322017, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Knuckle Mace +(2041002, 1322018, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tamus +(2041002, 1332003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shinkita +(2041002, 1332016, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sai +(2041002, 1332015, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deadly Fin +(2041002, 1332017, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Coil +(2041002, 1342003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Majestic Katara +(2041002, 1342004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ascalon Katara +(2041002, 1362008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Oriental Royal Cane +(2041002, 1362009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bijou Canne +(2041002, 1372007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cromi +(2041002, 1372014, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Tale +(2041002, 1382001, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arc Staff +(2041002, 1382006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Thorns +(2041002, 1402003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lion's Fang +(2041002, 1402011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sparta +(2041002, 1412003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Rising +(2041002, 1412007, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Shining +(2041002, 1422005, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Mole +(2041002, 1422009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Blessing +(2041002, 1432004, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Tongue +(2041002, 1432006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Spear +(2041002, 1442005, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Nine Dragons +(2041002, 1442010, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Skylar +(2041002, 1452008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Olympus +(2041002, 1452004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Asianic Bow +(2041002, 1462007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rower +(2041002, 1462008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Crow +(2041002, 1592003, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Avaris Ancient Bow +(2041002, 1592002, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Uruk Ancient Bow +(2041002, 1472021, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Slain +(2041002, 1472025, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Gigantic +(2041002, 1482007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fury Claw +(2041002, 1482008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphims +(2041002, 1492007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mr. Rasfelt +(2041002, 1492008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Burning Hell +(2041002, 1522007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Judge & Jury +(2041002, 1522008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Glory +(2041002, 1532007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dreadnought +(2041002, 1532008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Bigshot +(2041002, 1212003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Decor +(2041002, 1212004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vallentier + +# Mayoren (2130000) +(2130000, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2130000, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2130000, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2130000, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2130000, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2130000, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2130000, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2130000, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2130000, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2130000, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2130000, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2130000, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2130000, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2130000, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2130000, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2130000, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2130000, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2130000, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2130000, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2130000, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2130000, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2130000, 2020012, 1000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2130000, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2130000, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2130000, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2130000, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(2130000, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(2130000, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(2130000, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2130000, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2130000, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2130000, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2130000, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow + +# Halsted (2190002) +(2190002, 4170050, 0, -243992652, 0, 0, 0, -243992608, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2190002, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2190002, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2190002, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2190002, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2190002, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2190002, 2020012, 1000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2190002, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2190002, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2190002, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2190002, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2190002, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2190002, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2190002, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2190002, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2190002, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(2190002, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(2190002, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(2190002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2190002, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2190002, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2190002, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2190002, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow + +# Puddin (1511000) +(1511000, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(1511000, 2000000, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(1511000, 2000001, 9999999, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(1511000, 2000002, 9999999, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(1511000, 2000003, 9999999, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(1511000, 2000006, 9999999, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(1511000, 2002000, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(1511000, 2002001, 9999999, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(1511000, 2002002, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(1511000, 2002004, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(1511000, 2002005, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(1511000, 2001000, 9999999, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(1511000, 2001001, 9999999, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(1511000, 2001002, 9999999, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(1511000, 2010000, 9999999, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(1511000, 2010002, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(1511000, 2010001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(1511000, 2010003, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(1511000, 2010004, 9999999, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(1511000, 2020012, 9999999, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(1511000, 2020013, 9999999, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(1511000, 2020014, 9999999, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(1511000, 2020015, 9999999, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(1511000, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(1511000, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(1511000, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(1511000, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(1511000, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(1511000, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(1511000, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# Johanna (2140004) +(2140004, 2001000, 10000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2140004, 2001001, 10000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2140004, 2001002, 10000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2140004, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2140004, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2140004, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2140004, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2140004, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(2140004, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2140004, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2140004, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(2140004, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow +(2140004, 2050004, 9999999, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # All Cure Potion + +# Maya (2142000) +(2142000, 4170050, 0, 0, 0, 38660920, 2, 38646744, 2, 38653064, 2, 2, -9008, 2, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2142000, 2002000, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2142000, 2002001, 9999999, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2142000, 2002002, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2142000, 2002004, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2142000, 2002005, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2142000, 2001000, 9999999, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2142000, 2001001, 9999999, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2142000, 2001002, 9999999, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2142000, 2010000, 9999999, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2142000, 2010002, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2142000, 2010001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2142000, 2010003, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2142000, 2010004, 9999999, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2142000, 2020012, 9999999, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2142000, 2020013, 9999999, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2142000, 2020014, 9999999, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2142000, 2020015, 9999999, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2142000, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2142000, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2142000, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2142000, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2142000, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2142000, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(2142000, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# Cobie (2142112) +(2142112, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2142112, 2002000, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2142112, 2002001, 9999999, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2142112, 2002002, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2142112, 2002004, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2142112, 2002005, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2142112, 2001000, 9999999, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2142112, 2001001, 9999999, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2142112, 2001002, 9999999, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2142112, 2010000, 9999999, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2142112, 2010002, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2142112, 2010001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2142112, 2010003, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2142112, 2010004, 9999999, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2142112, 2020012, 9999999, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2142112, 2020013, 9999999, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2142112, 2020014, 9999999, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2142112, 2020015, 9999999, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2142112, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2142112, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2142112, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2142112, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2142112, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2142112, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(2142112, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# Moodie (2080004) +(2080004, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(2080004, 2260000, 1000000000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Revitalizer +(2080004, 2432512, 1000000000, 0, 0, 6000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 10), # Accelerator + +# Max (2080002) +(2080002, 1002084, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(2080002, 1002243, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(2080002, 1002268, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(2080002, 1002247, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(2080002, 1002634, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(2080002, 1002030, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Planet +(2080002, 1002254, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Infinium Circlet +(2080002, 1002289, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Patriot +(2080002, 1002285, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Nightfox +(2080002, 1002637, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pirate's Bandana +(2080002, 1040090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(2080002, 1040091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(2080002, 1040092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(2080002, 1040093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(2080002, 1040098, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(2080002, 1040099, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(2080002, 1040100, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(2080002, 1041091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(2080002, 1041092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(2080002, 1041093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(2080002, 1041094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(2080002, 1041095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(2080002, 1041096, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(2080002, 1060079, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(2080002, 1060080, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(2080002, 1060081, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(2080002, 1060082, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(2080002, 1060087, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(2080002, 1060088, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(2080002, 1060089, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(2080002, 1061090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(2080002, 1061091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(2080002, 1061092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(2080002, 1061093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(2080002, 1061094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(2080002, 1061095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(2080002, 1040102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Platine +(2080002, 1040103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine +(2080002, 1040104, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine +(2080002, 1040105, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Top +(2080002, 1040106, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Top +(2080002, 1040107, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Top +(2080002, 1041097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina +(2080002, 1041098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina +(2080002, 1041099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina +(2080002, 1041100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique +(2080002, 1041101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique +(2080002, 1041102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique +(2080002, 1041103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique +(2080002, 1060091, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine Pants +(2080002, 1060092, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine Pants +(2080002, 1060093, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Pants +(2080002, 1060094, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Pants +(2080002, 1060095, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Pants +(2080002, 1061096, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina Pants +(2080002, 1061097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina Pants +(2080002, 1061098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina Pants +(2080002, 1061099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique Pants +(2080002, 1061100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique Pants +(2080002, 1061101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique Pants +(2080002, 1061102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Pants +(2080002, 1050053, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(2080002, 1050054, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(2080002, 1050055, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(2080002, 1050056, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(2080002, 1050058, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(2080002, 1050059, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(2080002, 1050060, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(2080002, 1051044, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(2080002, 1051045, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(2080002, 1051046, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(2080002, 1051047, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(2080002, 1051041, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(2080002, 1051042, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(2080002, 1051043, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(2080002, 1052119, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(2080002, 1050067, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requiem +(2080002, 1050068, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requiem +(2080002, 1050069, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requiem +(2080002, 1050070, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requiem +(2080002, 1050061, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Linnex +(2080002, 1050062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Linnex +(2080002, 1050063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Linnex +(2080002, 1050064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Linnex +(2080002, 1051052, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requierre +(2080002, 1051053, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requierre +(2080002, 1051054, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requierre +(2080002, 1051055, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requierre +(2080002, 1051062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lineros +(2080002, 1051063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Lineros +(2080002, 1051064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lineros +(2080002, 1051065, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lineros +(2080002, 1052122, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viska +(2080002, 1072149, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(2080002, 1072139, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(2080002, 1072146, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(2080002, 1072152, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(2080002, 1072306, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(2080002, 1072156, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Carzen Boots +(2080002, 1072160, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Lapiz Sandals +(2080002, 1072167, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Elf Shoes +(2080002, 1072163, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Shoes +(2080002, 1072309, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Voyson Shoes +(2080002, 1082061, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(2080002, 1082088, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(2080002, 1082091, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(2080002, 1082094, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(2080002, 1082201, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult +(2080002, 1082105, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Husk +(2080002, 1082100, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lorin +(2080002, 1082108, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Eyes +(2080002, 1082097, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Rover +(2080002, 1082204, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bisk + +# Illiad (2080008) +(2080008, 2431789, 100000, 0, 0, 3000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mastery Book 20 +(2080008, 2431790, 100000, 0, 0, 5000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mastery Book 30 +(2080008, 2431935, 100000, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 5), # Mastery Book 20 +(2080008, 2431936, 100000, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 999, 999, 0, '', 0, 1, 0, 5), # Mastery Book 30 + +# Gugu (2211000) +(2211000, 4170050, 0, 0, 0, 29247332, 0, 0, 0, 29231972, 2, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2211000, 2050004, 9999999, 0, 0, 8500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # All Cure Potion +(2211000, 2000000, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2211000, 2000001, 9999999, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2211000, 2000002, 9999999, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2211000, 2000003, 9999999, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2211000, 2000006, 9999999, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2211000, 2002000, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2211000, 2002001, 9999999, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2211000, 2002002, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2211000, 2002004, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2211000, 2002005, 9999999, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2211000, 2022089, 9999999, 0, 0, 3400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Baby Dragon Food +(2211000, 2001000, 9999999, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2211000, 2001001, 9999999, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2211000, 2001002, 9999999, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2211000, 2010000, 9999999, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2211000, 2010002, 9999999, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2211000, 2010001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2211000, 2010003, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2211000, 2010004, 9999999, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2211000, 2020012, 9999999, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2211000, 2020013, 9999999, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2211000, 2020014, 9999999, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2211000, 2020015, 9999999, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2211000, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2211000, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2211000, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2211000, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2211000, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2211000, 2060001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Bow +(2211000, 2061001, 9999999, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Bronze Arrow for Crossbow + +# So Won (2093001) +(2093001, 1002084, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(2093001, 1002243, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(2093001, 1002268, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(2093001, 1002247, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(2093001, 1002634, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(2093001, 1002030, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Planet +(2093001, 1002254, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Infinium Circlet +(2093001, 1002289, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Patriot +(2093001, 1002285, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Nightfox +(2093001, 1002637, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pirate's Bandana +(2093001, 1040090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(2093001, 1040091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(2093001, 1040092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(2093001, 1040093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(2093001, 1040098, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(2093001, 1040099, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(2093001, 1040100, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(2093001, 1041091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(2093001, 1041092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(2093001, 1041093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(2093001, 1041094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(2093001, 1041095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(2093001, 1041096, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(2093001, 1060079, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(2093001, 1060080, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(2093001, 1060081, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(2093001, 1060082, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(2093001, 1060087, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(2093001, 1060088, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(2093001, 1060089, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(2093001, 1061090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(2093001, 1061091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(2093001, 1061092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(2093001, 1061093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(2093001, 1061094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(2093001, 1061095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(2093001, 1040102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Platine +(2093001, 1040103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine +(2093001, 1040104, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine +(2093001, 1040105, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Top +(2093001, 1040106, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Top +(2093001, 1040107, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Top +(2093001, 1041097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina +(2093001, 1041098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina +(2093001, 1041099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina +(2093001, 1041100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique +(2093001, 1041101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique +(2093001, 1041102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique +(2093001, 1041103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique +(2093001, 1060091, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine Pants +(2093001, 1060092, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine Pants +(2093001, 1060093, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Pants +(2093001, 1060094, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Pants +(2093001, 1060095, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Pants +(2093001, 1061096, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina Pants +(2093001, 1061097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina Pants +(2093001, 1061098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina Pants +(2093001, 1061099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique Pants +(2093001, 1061100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique Pants +(2093001, 1061101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique Pants +(2093001, 1061102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Pants +(2093001, 1050053, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(2093001, 1050054, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(2093001, 1050055, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(2093001, 1050056, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(2093001, 1050058, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(2093001, 1050059, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(2093001, 1050060, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(2093001, 1051044, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(2093001, 1051045, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(2093001, 1051046, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(2093001, 1051047, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(2093001, 1051041, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(2093001, 1051042, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(2093001, 1051043, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(2093001, 1052119, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(2093001, 1050067, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requiem +(2093001, 1050068, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requiem +(2093001, 1050069, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requiem +(2093001, 1050070, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requiem +(2093001, 1050061, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Linnex +(2093001, 1050062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Linnex +(2093001, 1050063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Linnex +(2093001, 1050064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Linnex +(2093001, 1051052, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requierre +(2093001, 1051053, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requierre +(2093001, 1051054, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requierre +(2093001, 1051055, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requierre +(2093001, 1051062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lineros +(2093001, 1051063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Lineros +(2093001, 1051064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lineros +(2093001, 1051065, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lineros +(2093001, 1052122, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viska +(2093001, 1072149, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(2093001, 1072139, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(2093001, 1072146, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(2093001, 1072152, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(2093001, 1072306, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(2093001, 1072156, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Carzen Boots +(2093001, 1072160, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Lapiz Sandals +(2093001, 1072167, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Elf Shoes +(2093001, 1072163, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Shoes +(2093001, 1072309, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Voyson Shoes +(2093001, 1082061, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(2093001, 1082088, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(2093001, 1082091, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(2093001, 1082094, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(2093001, 1082201, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult +(2093001, 1082105, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Husk +(2093001, 1082100, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lorin +(2093001, 1082108, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Eyes +(2093001, 1082097, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Rover +(2093001, 1082204, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bisk + +# Mu Tan (2093000) +(2093000, 1252004, 100, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Panther Scepter +(2093000, 1252005, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grizzly Scepter +(2093000, 1542054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Death's Whisper +(2093000, 1542055, 10000, 0, 0, 380000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Helix +(2093000, 1552054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Melodic Fan +(2093000, 1552055, 10000, 0, 0, 380000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unique Fan +(2093000, 1302011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neocora +(2093000, 1302012, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Katana +(2093000, 1312009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkhead +(2093000, 1312010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mikhail +(2093000, 1322018, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tamus +(2093000, 1322019, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Judgement +(2093000, 1332015, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deadly Fin +(2093000, 1332017, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Coil +(2093000, 1332018, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Kandine +(2093000, 1332019, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden River +(2093000, 1342004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ascalon Katara +(2093000, 1342005, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavenly Katara +(2093000, 1362009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bijou Canne +(2093000, 1362010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Regne +(2093000, 1372014, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Tale +(2093000, 1372015, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Angel Wings +(2093000, 1382006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Thorns +(2093000, 1382007, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Wings +(2093000, 1402011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sparta +(2093000, 1402012, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Doombringer +(2093000, 1412007, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Shining +(2093000, 1412008, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Chrono +(2093000, 1422009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Blessing +(2093000, 1422010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gigantic Sledge +(2093000, 1432006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Spear +(2093000, 1432007, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Redemption +(2093000, 1442010, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Skylar +(2093000, 1442008, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Gold Dragon +(2093000, 1452004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Asianic Bow +(2093000, 1452009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hinkel +(2093000, 1462008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Crow +(2093000, 1462009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gross Jaeger +(2093000, 1592003, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Avaris Ancient Bow +(2093000, 1592004, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magna Ancient Bow +(2093000, 1472025, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Gigantic +(2093000, 1472029, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Scarab +(2093000, 1482008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphims +(2093000, 1482009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beia Crash +(2093000, 1492008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Burning Hell +(2093000, 1492009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Abyss Shooter +(2093000, 1522008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Glory +(2093000, 1522009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Twin Zephyrs +(2093000, 1532008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Bigshot +(2093000, 1532009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Infernalizer +(2093000, 1212004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vallentier +(2093000, 1212005, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sharp Slaver + +# Lan Ming (2093002) +(2093002, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2093002, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2093002, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2093002, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2093002, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2093002, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2093002, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2093002, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2093002, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2093002, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2093002, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2093002, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2093002, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2093002, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2093002, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2093002, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2093002, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2093002, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2093002, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2093002, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2093002, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(2093002, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(2093002, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(2093002, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(2093002, 2050003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(2093002, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2093002, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2093002, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2093002, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2093002, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2093002, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Gong Gong (2090001) +(2090001, 1252004, 100, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Panther Scepter +(2090001, 1252005, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Grizzly Scepter +(2090001, 1542054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Death's Whisper +(2090001, 1542055, 10000, 0, 0, 380000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Helix +(2090001, 1552054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Melodic Fan +(2090001, 1552055, 10000, 0, 0, 380000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Unique Fan +(2090001, 1302011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neocora +(2090001, 1302012, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Katana +(2090001, 1312009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkhead +(2090001, 1312010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mikhail +(2090001, 1322018, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tamus +(2090001, 1322019, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Judgement +(2090001, 1332015, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deadly Fin +(2090001, 1332017, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Coil +(2090001, 1332018, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Kandine +(2090001, 1332019, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden River +(2090001, 1342004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ascalon Katara +(2090001, 1342005, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Heavenly Katara +(2090001, 1362009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bijou Canne +(2090001, 1362010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Regne +(2090001, 1372014, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Tale +(2090001, 1372015, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Angel Wings +(2090001, 1382006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Thorns +(2090001, 1382007, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Wings +(2090001, 1402011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sparta +(2090001, 1402012, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Doombringer +(2090001, 1412007, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Shining +(2090001, 1412008, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Chrono +(2090001, 1422009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Blessing +(2090001, 1422010, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gigantic Sledge +(2090001, 1432006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Spear +(2090001, 1432007, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Redemption +(2090001, 1442010, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Skylar +(2090001, 1442008, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Gold Dragon +(2090001, 1452004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Asianic Bow +(2090001, 1452009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hinkel +(2090001, 1592003, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Avaris Ancient Bow +(2090001, 1592004, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Magna Ancient Bow +(2090001, 1462008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Crow +(2090001, 1462009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gross Jaeger +(2090001, 1472025, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Gigantic +(2090001, 1472029, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Scarab +(2090001, 1482008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphims +(2090001, 1482009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beia Crash +(2090001, 1492008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Burning Hell +(2090001, 1492009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Abyss Shooter +(2090001, 1522008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Glory +(2090001, 1522009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Twin Zephyrs +(2090001, 1532008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Bigshot +(2090001, 1532009, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Infernalizer +(2090001, 1212004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vallentier +(2090001, 1212005, 100000, 0, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sharp Slaver + +# Bidiwon (2090002) +(2090002, 1002084, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(2090002, 1002243, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(2090002, 1002268, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(2090002, 1002247, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(2090002, 1002634, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(2090002, 1002030, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Planet +(2090002, 1002254, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Infinium Circlet +(2090002, 1002289, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Patriot +(2090002, 1002285, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Nightfox +(2090002, 1002637, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Pirate's Bandana +(2090002, 1040090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(2090002, 1040091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(2090002, 1040092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(2090002, 1040093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(2090002, 1040098, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(2090002, 1040099, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(2090002, 1040100, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(2090002, 1041091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(2090002, 1041092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(2090002, 1041093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(2090002, 1041094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(2090002, 1041095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(2090002, 1041096, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(2090002, 1060079, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(2090002, 1060080, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(2090002, 1060081, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(2090002, 1060082, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(2090002, 1060087, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(2090002, 1060088, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(2090002, 1060089, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(2090002, 1061090, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(2090002, 1061091, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(2090002, 1061092, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(2090002, 1061093, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(2090002, 1061094, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(2090002, 1061095, 100000, 0, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(2090002, 1040102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Platine +(2090002, 1040103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine +(2090002, 1040104, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine +(2090002, 1040105, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Top +(2090002, 1040106, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Top +(2090002, 1040107, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Top +(2090002, 1041097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina +(2090002, 1041098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina +(2090002, 1041099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina +(2090002, 1041100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique +(2090002, 1041101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique +(2090002, 1041102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique +(2090002, 1041103, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique +(2090002, 1060091, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Platine Pants +(2090002, 1060092, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Platine Pants +(2090002, 1060093, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Studded Pants +(2090002, 1060094, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Studded Pants +(2090002, 1060095, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Studded Pants +(2090002, 1061096, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Platina Pants +(2090002, 1061097, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Violet Platina Pants +(2090002, 1061098, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Platina Pants +(2090002, 1061099, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Mystique Pants +(2090002, 1061100, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Mystique Pants +(2090002, 1061101, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Mystique Pants +(2090002, 1061102, 100000, 0, 0, 138000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Pants +(2090002, 1050053, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(2090002, 1050054, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(2090002, 1050055, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(2090002, 1050056, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(2090002, 1050058, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(2090002, 1050059, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(2090002, 1050060, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(2090002, 1051044, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(2090002, 1051045, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(2090002, 1051046, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(2090002, 1051047, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(2090002, 1051041, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(2090002, 1051042, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(2090002, 1051043, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(2090002, 1052119, 100000, 0, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(2090002, 1050067, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requiem +(2090002, 1050068, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requiem +(2090002, 1050069, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requiem +(2090002, 1050070, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requiem +(2090002, 1050061, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Linnex +(2090002, 1050062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Linnex +(2090002, 1050063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Linnex +(2090002, 1050064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Linnex +(2090002, 1051052, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Requierre +(2090002, 1051053, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Requierre +(2090002, 1051054, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Requierre +(2090002, 1051055, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Requierre +(2090002, 1051062, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lineros +(2090002, 1051063, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Beige Lineros +(2090002, 1051064, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lineros +(2090002, 1051065, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lineros +(2090002, 1052122, 100000, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Viska +(2090002, 1072149, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(2090002, 1072139, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(2090002, 1072146, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(2090002, 1072152, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(2090002, 1072306, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(2090002, 1072156, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Carzen Boots +(2090002, 1072160, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Lapiz Sandals +(2090002, 1072167, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Elf Shoes +(2090002, 1072163, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Mystique Shoes +(2090002, 1072309, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Voyson Shoes +(2090002, 1082061, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(2090002, 1082088, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(2090002, 1082091, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(2090002, 1082094, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(2090002, 1082201, 100000, 0, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult +(2090002, 1082105, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Husk +(2090002, 1082100, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Lorin +(2090002, 1082108, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Eyes +(2090002, 1082097, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Rover +(2090002, 1082204, 100000, 0, 0, 158000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Bisk + +# Laya (2090006) +(2090006, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(2090006, 2260000, 1000000000, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 200), # Revitalizer + +# Edel the Fairy (2012005) +(2012005, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2012005, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2012005, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2012005, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2012005, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2012005, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2012005, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2012005, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2012005, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2012005, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2012005, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2012005, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2012005, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2012005, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2012005, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2012005, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2012005, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2012005, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2012005, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2012005, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2012005, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2012005, 2020028, 100000, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Chocolate +(2012005, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(2012005, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(2012005, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(2012005, 2050003, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Holy Water +(2012005, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2012005, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2012005, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2012005, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2012005, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2012005, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Hana (2022001) +(2022001, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(2022001, 2022001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Bean Porridge +(2022001, 2022186, 1000000, 0, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Soft White Bun +(2022001, 2000000, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(2022001, 2000001, 1000000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2022001, 2000002, 1000000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2022001, 2000003, 1000000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2022001, 2000006, 1000000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2022001, 2002000, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2022001, 2002001, 1000000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2022001, 2002002, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2022001, 2002004, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2022001, 2002005, 1000000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2022001, 2010000, 1000000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(2022001, 2010002, 1000000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(2022001, 2010001, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(2022001, 2010003, 1000000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(2022001, 2010004, 1000000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2022001, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2022001, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2022001, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2022001, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2022001, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2022001, 2020012, 1000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2022001, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2022001, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2022001, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2022001, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(2022001, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(2022001, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(2022001, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2022001, 2060000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2022001, 2061000, 9999999, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2022001, 2060000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2022001, 2061000, 9999999, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(2022001, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Rumi (2022000) +(2022000, 1002028, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Crusader Helm +(2022000, 1002216, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Aqua Golden Circlet +(2022000, 1002212, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Maro +(2022000, 1002207, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sonata +(2022000, 1002631, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Leather Ocean Hat +(2022000, 1002084, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Oriental Helmet +(2022000, 1002243, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Seraphis +(2022000, 1002268, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Polyfeather Hat +(2022000, 1002247, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Identity +(2022000, 1002634, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Cast Linen +(2022000, 1040087, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shouldermail +(2022000, 1040088, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Shouldermail +(2022000, 1040089, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Shouldermail +(2022000, 1040094, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red China +(2022000, 1040095, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue China +(2022000, 1040096, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown China +(2022000, 1040097, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green China +(2022000, 1041087, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shouldermail +(2022000, 1041088, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ivory Shouldermail +(2022000, 1041089, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Shouldermail +(2022000, 1041077, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Moon +(2022000, 1041078, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon +(2022000, 1041079, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon +(2022000, 1041080, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon +(2022000, 1060076, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shouldermail Pants +(2022000, 1060077, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Shouldermail Pants +(2022000, 1060078, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Shouldermail Pants +(2022000, 1060083, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red China Pants +(2022000, 1060084, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue China Pants +(2022000, 1060085, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown China Pants +(2022000, 1060086, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green China Pants +(2022000, 1061086, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shouldermail Pants +(2022000, 1061087, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ivory Shouldermail Pants +(2022000, 1061088, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Shouldermail Pants +(2022000, 1061076, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Moon Pants +(2022000, 1061077, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Moon Pants +(2022000, 1061078, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Moon Pants +(2022000, 1061079, 100000, 1, 0, 96000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Pants +(2022000, 1040090, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican +(2022000, 1040091, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican +(2022000, 1040092, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican +(2022000, 1040093, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican +(2022000, 1040098, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio +(2022000, 1040099, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio +(2022000, 1040100, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio +(2022000, 1041091, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen +(2022000, 1041092, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen +(2022000, 1041093, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen +(2022000, 1041094, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis +(2022000, 1041095, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis +(2022000, 1041096, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis +(2022000, 1060079, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Orientican Pants +(2022000, 1060080, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Orientican Pants +(2022000, 1060081, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Orientican Pants +(2022000, 1060082, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Orientican Pants +(2022000, 1060087, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Scorpio Pants +(2022000, 1060088, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ocher Scorpio Pants +(2022000, 1060089, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Scorpio Pants +(2022000, 1061090, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ice Queen Skirt +(2022000, 1061091, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ice Queen Skirt +(2022000, 1061092, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Ice Queen Skirt +(2022000, 1061093, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Light Mantis Pants +(2022000, 1061094, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bloody Mantis Pants +(2022000, 1061095, 100000, 1, 0, 115000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Umber Mantis Pants +(2022000, 1050045, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Calas +(2022000, 1050046, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Calas +(2022000, 1050047, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Calas +(2022000, 1050049, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Calas +(2022000, 1050048, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Calas +(2022000, 1050051, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red-Lined Kismet +(2022000, 1050052, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue-Lined Kismet +(2022000, 1051030, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Calaf +(2022000, 1051031, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Calaf +(2022000, 1051032, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Calaf +(2022000, 1051033, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Calaf +(2022000, 1051034, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Calaf +(2022000, 1051037, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lumati +(2022000, 1051038, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lumati +(2022000, 1051039, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lumati +(2022000, 1052116, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Plasteer +(2022000, 1050053, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakamoon +(2022000, 1050054, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakamoon +(2022000, 1050055, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakamoon +(2022000, 1050056, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakamoon +(2022000, 1050058, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Tai +(2022000, 1050059, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Tai +(2022000, 1050060, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Tai +(2022000, 1051044, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Anakarune +(2022000, 1051045, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Anakarune +(2022000, 1051046, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Anakarune +(2022000, 1051047, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Anakarune +(2022000, 1051041, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Choro +(2022000, 1051042, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Choro +(2022000, 1051043, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Choro +(2022000, 1052119, 100000, 1, 0, 173000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Royal Barone +(2022000, 1072135, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Hildon Boots +(2022000, 1072143, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Goldenwind Shoes +(2022000, 1072125, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Steel-Tip Boots +(2022000, 1072129, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Goni Shoes +(2022000, 1072303, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Double Boots +(2022000, 1072149, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Camel Boots +(2022000, 1072139, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Goldrunners +(2022000, 1072146, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Gore Boots +(2022000, 1072152, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Moss Boots +(2022000, 1072306, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Basile Boots +(2022000, 1082011, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Brist +(2022000, 1082082, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Pennance +(2022000, 1082085, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Willow +(2022000, 1082067, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Moon Gloves +(2022000, 1082198, 100000, 1, 0, 120000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Royce +(2022000, 1082061, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Clench +(2022000, 1082088, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Manute +(2022000, 1082091, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Garner +(2022000, 1082094, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold Pow +(2022000, 1082201, 100000, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Schult +(2022000, 1072168, 100000, 7, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Snowshoes +(2022000, 1072169, 100000, 7, 0, 28000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Snowshoes +(2022000, 1072170, 100000, 7, 0, 29000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Snowshoes +(2022000, 1072171, 100000, 7, 0, 29000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Snowshoes +(2022000, 1072338, 100000, 7, 0, 29000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Snowshoes + +# Scott (2020001) +(2020001, 1252003, 100, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Talon Scepter +(2020001, 1252004, 100, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Panther Scepter +(2020001, 1542053, 10000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Savior +(2020001, 1542054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Death's Whisper +(2020001, 1552053, 10000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fan of Enlightenment +(2020001, 1552054, 10000, 0, 0, 320000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Melodic Fan +(2020001, 1302010, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jeweled Katar +(2020001, 1302011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Neocora +(2020001, 1312008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Buck +(2020001, 1312009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Hawkhead +(2020001, 1322017, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Knuckle Mace +(2020001, 1322018, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tamus +(2020001, 1332003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Shinkita +(2020001, 1332016, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sai +(2020001, 1332015, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Deadly Fin +(2020001, 1332017, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Coil +(2020001, 1342003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Majestic Katara +(2020001, 1342004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Ascalon Katara +(2020001, 1362008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Oriental Royal Cane +(2020001, 1362009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bijou Canne +(2020001, 1372007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Cromi +(2020001, 1372014, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Evil Tale +(2020001, 1382001, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Arc Staff +(2020001, 1382006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Thorns +(2020001, 1402003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lion's Fang +(2020001, 1402011, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sparta +(2020001, 1412003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Rising +(2020001, 1412007, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Shining +(2020001, 1422005, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Mole +(2020001, 1422009, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Blessing +(2020001, 1432004, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Serpent's Tongue +(2020001, 1432006, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Holy Spear +(2020001, 1442005, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Nine Dragons +(2020001, 1442010, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Skylar +(2020001, 1452008, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Olympus +(2020001, 1452004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Asianic Bow +(2020001, 1592002, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Uruk Ancient Bow +(2020001, 1592003, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Avaris Ancient Bow +(2020001, 1462007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rower +(2020001, 1462008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Golden Crow +(2020001, 1472021, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Slain +(2020001, 1472025, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Gigantic +(2020001, 1482007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Fury Claw +(2020001, 1482008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Seraphims +(2020001, 1492007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mr. Rasfelt +(2020001, 1492008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Burning Hell +(2020001, 1522007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Judge & Jury +(2020001, 1522008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lunar Glory +(2020001, 1532007, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dreadnought +(2020001, 1532008, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # The Bigshot +(2020001, 1212003, 100000, 0, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Decor +(2020001, 1212004, 100000, 0, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Vallentier + +# Glibber (2030009) +(2030009, 4170050, 81793028, 86500276, 2, 0, 0, 0, 0, 86495360, 2, 2, 0, 0, 86495580, '', 2, 0, 0, 1000), # Andersen's Key +(2030009, 2000001, 100000, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(2030009, 2000002, 100000, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(2030009, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(2030009, 2000006, 100000, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(2030009, 2002000, 100000, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(2030009, 2002001, 100000, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(2030009, 2002002, 100000, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(2030009, 2002004, 100000, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(2030009, 2002005, 100000, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(2030009, 2001000, 100000, 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(2030009, 2001001, 100000, 0, 0, 2392, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(2030009, 2001002, 100000, 0, 0, 4160, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(2030009, 2020005, 100000, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hot Dog +(2030009, 2010004, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(2030009, 2020001, 100000, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Fried Chicken +(2030009, 2020003, 100000, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pizza +(2030009, 2020004, 100000, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hamburger +(2030009, 2020006, 100000, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Hot Dog Supreme +(2030009, 2022003, 100000, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(2030009, 2022000, 100000, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(2030009, 2020012, 100000, 0, 0, 4680, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(2030009, 2020013, 100000, 0, 0, 5824, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(2030009, 2020014, 100000, 0, 0, 8424, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(2030009, 2020015, 100000, 0, 0, 10608, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(2030009, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(2030009, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(2030009, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(2030009, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(2030009, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow + +# Rento (3003100) +(3003100, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(3003100, 2020012, 1000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(3003100, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(3003100, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(3003100, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(3003100, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(3003100, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(3003100, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(3003100, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(3003100, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(3003100, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(3003100, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(3003100, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(3003100, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(3003100, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(3003100, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(3003100, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(3003100, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic +(3003100, 2432805, 1000000, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1000), # Appearance Reset Coupon + +# Zatsu (3001422) +(3001422, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(3001422, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(3001422, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(3001422, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(3001422, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(3001422, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(3001422, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(3001422, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(3001422, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(3001422, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(3001422, 2010000, 1000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(3001422, 2010002, 1000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(3001422, 2010001, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(3001422, 2010003, 1000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(3001422, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(3001422, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(3001422, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(3001422, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(3001422, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(3001422, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(3001422, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(3001422, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(3001422, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic + +# Karin (3001019) +(3001019, 4170050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 1000), # Andersen's Key +(3001019, 2000000, 100000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(3001019, 2000001, 100000, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(3001019, 2000002, 100000, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(3001019, 2000003, 100000, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(3001019, 2000006, 100000, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(3001019, 2022003, 1000000, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(3001019, 2022000, 1000000, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(3001019, 2001000, 1000000, 0, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(3001019, 2001001, 1000000, 0, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(3001019, 2001002, 1000000, 0, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(3001019, 2020012, 1000000, 0, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(3001019, 2020013, 1000000, 0, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(3001019, 2020014, 1000000, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(3001019, 2020015, 1000000, 0, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(3001019, 2002000, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(3001019, 2002001, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(3001019, 2002002, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(3001019, 2002004, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(3001019, 2002005, 100000, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(3001019, 2010000, 10000, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(3001019, 2010002, 10000, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(3001019, 2010001, 10000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(3001019, 2010003, 10000, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(3001019, 2010004, 100000, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(3001019, 2120000, 1000000000, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(3001019, 2030000, 100000, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(3001019, 2060000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(3001019, 2061000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(3001019, 2060000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(3001019, 2061000, 0, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(3001019, 2050000, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(3001019, 2050001, 100000, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(3001019, 2050002, 100000, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic + +# Mayala (3001108) +(3001108, 1190000, 1000000, 1, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lesser Dragon Emblem +(3001108, 1190001, 1000000, 1, 0, 1010000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dragon Emblem +(3001108, 1190100, 1000000, 1, 0, 580000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lesser Angel Emblem +(3001108, 1190101, 1000000, 1, 0, 1010000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Angel Emblem +(3001108, 1402001, 100, 1, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Wooden Sword +(3001108, 1402000, 100, 1, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Two-Handed Sword +(3001108, 1402008, 100, 1, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Broadsword +(3001108, 1402002, 100, 1, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Scimitar +(3001108, 1402006, 100, 1, 0, 80000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Lionheart +(3001108, 1402007, 100, 1, 0, 144000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Zard +(3001108, 1222001, 100, 1, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Haze +(3001108, 1222002, 100, 1, 0, 40000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Haze +(3001108, 1222003, 100, 1, 0, 230000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Purple Hatchling +(3001108, 1222004, 100, 1, 0, 322000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jade Hatchling +(3001108, 1222005, 100, 1, 0, 387000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Pink Wormhead +(3001108, 1002043, 100, 1, 0, 2400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Coif +(3001108, 1002039, 100, 1, 0, 2700, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Helmet +(3001108, 1002051, 100, 1, 0, 3500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Full Helm +(3001108, 1002055, 100, 1, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Football Helmet +(3001108, 1002059, 100, 1, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Viking Helm +(3001108, 1002027, 100, 1, 0, 11500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sharp Helm +(3001108, 1002005, 100, 1, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Iron Burgernet Helm +(3001108, 1002023, 100, 1, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Jousting Helmet +(3001108, 1002048, 100, 1, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Great Blue Helmet +(3001108, 1002021, 100, 1, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Nordic Helm +(3001108, 1040015, 100, 1, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Armor +(3001108, 1040038, 100, 1, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Armor +(3001108, 1040009, 100, 1, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal +(3001108, 1040037, 100, 1, 0, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal +(3001108, 1040012, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Sergeant +(3001108, 1040039, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant +(3001108, 1040040, 100, 1, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant +(3001108, 1040016, 100, 1, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant +(3001108, 1040041, 100, 1, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant +(3001108, 1040021, 100, 1, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Hwarang Shirt +(3001108, 1040026, 100, 1, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Hwarang Shirt +(3001108, 1041014, 100, 1, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange Lolica Armor +(3001108, 1041064, 100, 1, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blueberry Lolica Armor +(3001108, 1041019, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Lamelle +(3001108, 1041020, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Lamelle +(3001108, 1041021, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lamelle +(3001108, 1041022, 100, 1, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark +(3001108, 1041023, 100, 1, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark +(3001108, 1041024, 100, 1, 0, 16000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark +(3001108, 1050005, 100, 1, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Kendo Robe +(3001108, 1050006, 100, 1, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Kendo Robe +(3001108, 1050007, 100, 1, 0, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Kendo Robe +(3001108, 1050011, 100, 1, 0, 70000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Dragon Robe +(3001108, 1051000, 100, 1, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fitted Mail +(3001108, 1051010, 100, 1, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Engrit +(3001108, 1051011, 100, 1, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Engrit +(3001108, 1051012, 100, 1, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Engrit +(3001108, 1051013, 100, 1, 0, 60000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Engrit +(3001108, 1040000, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Yellow Jangoon Armor +(3001108, 1040085, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Armor +(3001108, 1041084, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Armor +(3001108, 1041085, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Armor +(3001108, 1050000, 10000, 1, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Crusader Chainmail +(3001108, 1050021, 10000, 1, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Crusader Chainmail +(3001108, 1051001, 10000, 1, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Emerald Fitted Mail +(3001108, 1051014, 10000, 1, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sapphire Fitted Mail +(3001108, 1060075, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Pants +(3001108, 1060074, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Jangoon Pants +(3001108, 1061083, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Jangoon Skirt +(3001108, 1061084, 10000, 1, 0, 81000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Jangoon Skirt +(3001108, 1060008, 100, 1, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Lolico Pants +(3001108, 1060028, 100, 1, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Lolico Pants +(3001108, 1060009, 100, 1, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Corporal Pants +(3001108, 1060027, 100, 1, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Corporal Pants +(3001108, 1060010, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Sergeant Kilt +(3001108, 1060029, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Sergeant Kilt +(3001108, 1060011, 100, 1, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Master Sergeant Kilt +(3001108, 1060030, 100, 1, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Master Sergeant Kilt +(3001108, 1060060, 100, 1, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Master Sergeant Kilt +(3001108, 1060016, 100, 1, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Black Martial Arts Pants +(3001108, 1060017, 100, 1, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Martial Arts Pants +(3001108, 1060018, 100, 1, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Martial Arts Pants +(3001108, 1060019, 100, 1, 0, 45000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Martial Arts Pants +(3001108, 1061014, 100, 1, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Rookie Pants +(3001108, 1061023, 100, 1, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sophia Pants +(3001108, 1061016, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Ramel Skirt +(3001108, 1061017, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Green Ramel Skirt +(3001108, 1061018, 100, 1, 0, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown Ramel Skirt +(3001108, 1061015, 100, 1, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Shark Skirt +(3001108, 1061019, 100, 1, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Sky Shark Skirt +(3001108, 1061020, 100, 1, 0, 14000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Red Shark Skirt +(3001108, 1072009, 100, 1, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Greaves +(3001108, 1072050, 100, 1, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Bronze Greaves +(3001108, 1072007, 100, 1, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Brown High Boots +(3001108, 1072046, 100, 1, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orange High Boots +(3001108, 1072047, 100, 1, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue High Boots +(3001108, 1072011, 100, 1, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril War Boots +(3001108, 1072051, 100, 1, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver War Boots +(3001108, 1072052, 100, 1, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark War Boots +(3001108, 1072053, 100, 1, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Gold War Boots +(3001108, 1072039, 100, 1, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Battle Greaves +(3001108, 1072040, 100, 1, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Silver Battle Greaves +(3001108, 1072041, 100, 1, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blood Battle Greaves +(3001108, 1072112, 100, 1, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Mithril Trigger +(3001108, 1072113, 100, 1, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Trigger +(3001108, 1072126, 100, 1, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Maroon Jangoon Shoes +(3001108, 1072127, 100, 1, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Blue Jangoon Shoes +(3001108, 1082003, 100, 1, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Juno +(3001108, 1082000, 100, 1, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Steel Fingerless Gloves +(3001108, 1082004, 100, 1, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Venon +(3001108, 1082001, 100, 1, 0, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # White Fingerless Gloves +(3001108, 1082006, 100, 1, 0, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Orihalcon Missel +(3001108, 1082036, 100, 1, 0, 66000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Briggon +(3001108, 1082025, 100, 1, 0, 92000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Dark Knuckle +(3001108, 1082688, 2000000000, 7, 0, 0, 4310059, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Antique Root Gloves +(3001108, 1082688, 2000000000, 7, 0, 0, 4310058, 3, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Antique Root Gloves +(3001108, 1102471, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Warrior Cape +(3001108, 1102472, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Magician Cape +(3001108, 1102473, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Bowman Cape +(3001108, 1102474, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Thief Cape +(3001108, 1102475, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Pirate Cape +(3001108, 1072732, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Warrior Boots +(3001108, 1072733, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Magician Boots +(3001108, 1072734, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Bowman Boots +(3001108, 1072735, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Thief Boots +(3001108, 1072736, 2000000000, 7, 0, 0, 4310059, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Pirate Boots +(3001108, 1132164, 2000000000, 7, 0, 0, 4310059, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Warrior Belt +(3001108, 1132165, 2000000000, 7, 0, 0, 4310059, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Magician Belt +(3001108, 1132166, 2000000000, 7, 0, 0, 4310059, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Bowman Belt +(3001108, 1132167, 2000000000, 7, 0, 0, 4310059, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Thief Belt +(3001108, 1132168, 2000000000, 7, 0, 0, 4310059, 150, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Elite Heliseum Pirate Belt +(3001108, 1102476, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Hyades Cloak +(3001108, 1102477, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Hermes Cloak +(3001108, 1102478, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Charon Cloak +(3001108, 1102479, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Lycaon Cloak +(3001108, 1102480, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Altair Cloak +(3001108, 1072737, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Hyades Boots +(3001108, 1072738, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Hermes Boots +(3001108, 1072739, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Charon Boots +(3001108, 1072740, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Lycaon Boots +(3001108, 1072741, 2000000000, 7, 0, 0, 4310059, 250, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Nova Altair Boots +(3001108, 1102481, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Hyades Cloak +(3001108, 1102482, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Hermes Cloak +(3001108, 1102483, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Charon Cloak +(3001108, 1102484, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Lycaon Cloak +(3001108, 1102485, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Altair Cloak +(3001108, 1072743, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Hyades Boots +(3001108, 1072744, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Hermes Boots +(3001108, 1072745, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Charon Boots +(3001108, 1072746, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Lycaon Boots +(3001108, 1072747, 2000000000, 7, 0, 0, 4310058, 70, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Altair Boots +(3001108, 1132174, 2000000000, 7, 0, 0, 4310058, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Hyades Belt +(3001108, 1132175, 2000000000, 7, 0, 0, 4310058, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Hermes Belt +(3001108, 1132176, 2000000000, 7, 0, 0, 4310058, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Charon Belt +(3001108, 1132177, 2000000000, 7, 0, 0, 4310058, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Lycaon Belt +(3001108, 1132178, 2000000000, 7, 0, 0, 4310058, 100, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Tyrant Altair Belt +(3001108, 2000000, 100000, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Red Potion +(3001108, 2000001, 100000, 2, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Orange Potion +(3001108, 2000002, 100000, 2, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # White Potion +(3001108, 2000003, 100000, 2, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Blue Potion +(3001108, 2000006, 100000, 2, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Mana Elixir +(3001108, 2022003, 1000000, 2, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Unagi +(3001108, 2022000, 1000000, 2, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Pure Water +(3001108, 2001000, 1000000, 2, 0, 3200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Watermelon +(3001108, 2001001, 1000000, 2, 0, 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Ice Cream Pop +(3001108, 2001002, 1000000, 2, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Very Special Sundae +(3001108, 2020012, 1000000, 2, 0, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Melting Cheese +(3001108, 2020013, 1000000, 2, 0, 5600, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Reindeer Milk +(3001108, 2020014, 1000000, 2, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunrise Dew +(3001108, 2020015, 1000000, 2, 0, 10200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 3000), # Sunset Dew +(3001108, 2002000, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Dexterity Potion +(3001108, 2002001, 100000, 2, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Speed Potion +(3001108, 2002002, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Magic Potion +(3001108, 2002004, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Warrior Potion +(3001108, 2002005, 100000, 2, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Sniper Potion +(3001108, 2010000, 10000, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Apple +(3001108, 2010002, 10000, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Egg +(3001108, 2010001, 10000, 2, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Meat +(3001108, 2010003, 10000, 2, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Orange +(3001108, 2010004, 100000, 2, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 300), # Lemon +(3001108, 2120000, 1000000000, 2, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Pet Food +(3001108, 2030000, 100000, 2, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Return Scroll - Nearest Town +(3001108, 2060000, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(3001108, 2061000, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(3001108, 2060000, 0, 2, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(3001108, 2061000, 0, 2, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow +(3001108, 2050000, 100000, 2, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Antidote +(3001108, 2050001, 100000, 2, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Eyedrop +(3001108, 2050002, 100000, 2, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Tonic + +# Nack (9031007) +(9031007, 1672034, 9999999, 11, 20160, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Electronic Heart S-Series +(9031007, 1672035, 9999999, 11, 20160, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Electronic Heart I-Series +(9031007, 1672036, 9999999, 11, 20160, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Electronic Heart D-Series +(9031007, 1672037, 9999999, 11, 20160, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Electronic Heart L-Series +(9031007, 1672038, 9999999, 11, 20160, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 1), # Electronic Heart G-Series +(9031007, 4340000, 9999999, 11, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Imp Disease Cure +(9031007, 4024004, 9999999, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Basic Mold +(9031007, 4024005, 9999999, 11, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Intermediate Mold +(9031007, 4024006, 9999999, 11, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Advanced Mold +(9031007, 4024007, 9999999, 11, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Superior Mold +(9031007, 4025000, 9999999, 11, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Basic Abrasive +(9031007, 4025001, 9999999, 11, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Intermediate Abrasive +(9031007, 4025002, 9999999, 11, 0, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Advanced Abrasive +(9031007, 4025003, 9999999, 11, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Superior Abrasive +(9031007, 4024000, 9999999, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Basic Herb Oil Bottle +(9031007, 4024001, 9999999, 11, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Intermediate Herb Oil Bottle +(9031007, 4024002, 9999999, 11, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Advanced Herb Oil Bottle +(9031007, 4024003, 9999999, 11, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Superior Herb Oil Bottle +(9031007, 4025004, 9999999, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Basic Empty Bottle +(9031007, 4025005, 9999999, 11, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Intermediate Empty Bottle +(9031007, 4025006, 9999999, 11, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Advanced Empty Bottle +(9031007, 4025007, 9999999, 11, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Superior Empty Bottle +(9031007, 4025008, 9999999, 11, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Basic Potion Coagulant +(9031007, 4025009, 9999999, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Intermediate Potion Coagulant +(9031007, 4025010, 9999999, 11, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Advanced Potion Coagulant +(9031007, 4025011, 9999999, 11, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Superior Potion Coagulant +(9031007, 4021017, 9999999, 11, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9000), # Alchemist Stone +(9031007, 2060000, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Bow +(9031007, 2061000, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 9999), # Arrow for Crossbow +(9031007, 2060000, 0, 11, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Bow +(9031007, 2061000, 0, 11, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 2000, 0, 9999), # Arrow for Crossbow + +# Angelica (9031015) +(9031015, 2512000, 9999999, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion III Recipe +(9031015, 2512001, 9999999, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion IV Recipe +(9031015, 2512002, 9999999, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion V Recipe +(9031015, 2512003, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion VI Recipe +(9031015, 2512004, 9999999, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion VII Recipe +(9031015, 2512005, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion VIII Recipe +(9031015, 2512006, 9999999, 0, 0, 350000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion IX Recipe +(9031015, 2512007, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Potion X Recipe +(9031015, 2512008, 9999999, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion III Recipe +(9031015, 2512009, 9999999, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion IV Recipe +(9031015, 2512010, 9999999, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion V Recipe +(9031015, 2512011, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion VI Recipe +(9031015, 2512012, 9999999, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion VII Recipe +(9031015, 2512013, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion VIII Recipe +(9031015, 2512014, 9999999, 0, 0, 350000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion IX Recipe +(9031015, 2512015, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Potion X Recipe +(9031015, 2512016, 9999999, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion III Recipe +(9031015, 2512017, 9999999, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion IV Recipe +(9031015, 2512018, 9999999, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion V Recipe +(9031015, 2512019, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion VI Recipe +(9031015, 2512020, 9999999, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion VII Recipe +(9031015, 2512021, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion VIII Recipe +(9031015, 2512022, 9999999, 0, 0, 350000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion IX Recipe +(9031015, 2512023, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Potion X Recipe +(9031015, 2512024, 9999999, 0, 0, 50000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion III Recipe +(9031015, 2512025, 9999999, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion IV Recipe +(9031015, 2512026, 9999999, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion V Recipe +(9031015, 2512027, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion VI Recipe +(9031015, 2512028, 9999999, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion VII Recipe +(9031015, 2512029, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion VIII Recipe +(9031015, 2512030, 9999999, 0, 0, 350000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion IX Recipe +(9031015, 2512031, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Potion X Recipe +(9031015, 2512032, 9999999, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Potion I Recipe +(9031015, 2512033, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Potion II Recipe +(9031015, 2512034, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Potion III Recipe +(9031015, 2512035, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Potion IV Recipe +(9031015, 2512036, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Potion V Recipe +(9031015, 2512037, 9999999, 0, 0, 100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Potion I Recipe +(9031015, 2512038, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Potion II Recipe +(9031015, 2512039, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Potion III Recipe +(9031015, 2512040, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Potion IV Recipe +(9031015, 2512041, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Potion V Recipe +(9031015, 2512069, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (1000) Recipe +(9031015, 2512070, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (1500) Recipe +(9031015, 2512071, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (2000) Recipe +(9031015, 2512072, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (2500) Recipe +(9031015, 2512073, 9999999, 0, 0, 600000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (3000) Recipe +(9031015, 2512074, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (3500) Recipe +(9031015, 2512075, 9999999, 0, 0, 800000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (4000) Recipe +(9031015, 2512076, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (5000) Recipe +(9031015, 2512077, 9999999, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (6000) Recipe +(9031015, 2512078, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Health Pill (7000) Recipe +(9031015, 2512079, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (1000) Recipe +(9031015, 2512080, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (1500) Recipe +(9031015, 2512081, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (2000) Recipe +(9031015, 2512082, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (2500) Recipe +(9031015, 2512083, 9999999, 0, 0, 600000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (3000) Recipe +(9031015, 2512084, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (3500) Recipe +(9031015, 2512085, 9999999, 0, 0, 800000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (4000) Recipe +(9031015, 2512086, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (5000) Recipe +(9031015, 2512087, 9999999, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (6000) Recipe +(9031015, 2512088, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Mana Pill (7000) Recipe +(9031015, 2512139, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill I Recipe +(9031015, 2512140, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill II Recipe +(9031015, 2512141, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill III Recipe +(9031015, 2512142, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill IV Recipe +(9031015, 2512143, 9999999, 0, 0, 600000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill V Recipe +(9031015, 2512144, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill VI Recipe +(9031015, 2512145, 9999999, 0, 0, 800000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill VII Recipe +(9031015, 2512146, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill VIII Recipe +(9031015, 2512147, 9999999, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill IX Recipe +(9031015, 2512148, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Strength Pill X Recipe +(9031015, 2512159, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill I Recipe +(9031015, 2512160, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill II Recipe +(9031015, 2512161, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill III Recipe +(9031015, 2512162, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill IV Recipe +(9031015, 2512163, 9999999, 0, 0, 600000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill V Recipe +(9031015, 2512164, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill VI Recipe +(9031015, 2512165, 9999999, 0, 0, 800000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill VII Recipe +(9031015, 2512166, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill VIII Recipe +(9031015, 2512167, 9999999, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill IX Recipe +(9031015, 2512168, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Dexterity Pill X Recipe +(9031015, 2512179, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill I Recipe +(9031015, 2512180, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill II Recipe +(9031015, 2512181, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill III Recipe +(9031015, 2512182, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill IV Recipe +(9031015, 2512183, 9999999, 0, 0, 600000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill V Recipe +(9031015, 2512184, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill VI Recipe +(9031015, 2512185, 9999999, 0, 0, 800000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill VII Recipe +(9031015, 2512186, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill VIII Recipe +(9031015, 2512187, 9999999, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill IX Recipe +(9031015, 2512188, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Intelligence Pill X Recipe +(9031015, 2512199, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill I Recipe +(9031015, 2512200, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill II Recipe +(9031015, 2512201, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill III Recipe +(9031015, 2512202, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill IV Recipe +(9031015, 2512203, 9999999, 0, 0, 600000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill V Recipe +(9031015, 2512204, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill VI Recipe +(9031015, 2512205, 9999999, 0, 0, 800000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill VII Recipe +(9031015, 2512206, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill VIII Recipe +(9031015, 2512207, 9999999, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill IX Recipe +(9031015, 2512208, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Luck Pill X Recipe +(9031015, 2512219, 9999999, 0, 0, 125000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill I Recipe +(9031015, 2512220, 9999999, 0, 0, 150000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill II Recipe +(9031015, 2512221, 9999999, 0, 0, 175000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill III Recipe +(9031015, 2512222, 9999999, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill IV Recipe +(9031015, 2512223, 9999999, 0, 0, 250000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill V Recipe +(9031015, 2512224, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill VI Recipe +(9031015, 2512225, 9999999, 0, 0, 350000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill VII Recipe +(9031015, 2512226, 9999999, 0, 0, 400000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill VIII Recipe +(9031015, 2512227, 9999999, 0, 0, 450000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill IX Recipe +(9031015, 2512228, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Defense Pill X Recipe +(9031015, 2512239, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Pill I Recipe +(9031015, 2512240, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Pill II Recipe +(9031015, 2512241, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Pill III Recipe +(9031015, 2512242, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Pill IV Recipe +(9031015, 2512243, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Attack Pill V Recipe +(9031015, 2512249, 9999999, 0, 0, 300000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Pill I Recipe +(9031015, 2512250, 9999999, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Pill II Recipe +(9031015, 2512251, 9999999, 0, 0, 700000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Pill III Recipe +(9031015, 2512252, 9999999, 0, 0, 900000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Pill IV Recipe +(9031015, 2512253, 9999999, 0, 0, 1100000, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0, 100), # Magic Attack Pill V Recipe +(9031015, 2512262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Intermediate Extractor Recipe +(9031015, 2512263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 100), # Advanced Extractor Recipe + + +(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 0, 0); # Dummy diff --git a/sql/2 - InitTables_drops.sql b/sql/2 - InitTables_drops.sql new file mode 100755 index 0000000..41fc254 --- /dev/null +++ b/sql/2 - InitTables_drops.sql @@ -0,0 +1,9610 @@ +drop table if exists mob_drops; +create table mob_drops +( + id bigint not null auto_increment, + mobid int, + itemid int, + chance int, + minquant int default 1, + maxquant int default 1, + primary key (id) +); + +insert into `mob_drops` (`mobid`, `itemid`, `chance`, `minquant`, `maxquant`) +values + # -1 = global drops + (-1, 4001832, 500, 5, 40), # 5% for spell traces + + (8230009, 4009155, 100, 1, 1), + (8230009, 4021033, 100, 1, 1), + (8230009, 4021034, 100, 1, 1), + (8230009, 2001528, 100, 1, 1), + (8230009, 2434021, 100, 1, 1), + (8230009, 2000037, 100, 1, 1), + (8230009, 4021031, 100, 1, 1), + (8230009, 2590004, 100, 1, 1), + (8230009, 4021032, 100, 1, 1), + (8230009, 4021035, 100, 1, 1), + (8230008, 4021031, 100, 1, 1), + (8230008, 4021035, 100, 1, 1), + (8230008, 4021032, 100, 1, 1), + (8230008, 4021034, 100, 1, 1), + (8230008, 4009154, 100, 1, 1), + (8230008, 4021033, 100, 1, 1), + (8230005, 4033978, 100, 1, 1), + (8230005, 4021033, 100, 1, 1), + (8230005, 4021034, 100, 1, 1), + (8230005, 4009151, 100, 1, 1), + (8230005, 4021032, 100, 1, 1), + (8230005, 4021035, 100, 1, 1), + (8230004, 4021031, 100, 1, 1), + (8230004, 4021035, 100, 1, 1), + (8230004, 4021033, 100, 1, 1), + (8230004, 4009150, 100, 1, 1), + (8230004, 4021032, 100, 1, 1), + (8230004, 4021034, 100, 1, 1), + (8230004, 4033978, 100, 1, 1), + (8230007, 4009153, 100, 1, 1), + (8230007, 2590004, 100, 1, 1), + (8230007, 4021032, 100, 1, 1), + (8230007, 4021033, 100, 1, 1), + (8230007, 2000037, 100, 1, 1), + (8230007, 2001528, 100, 1, 1), + (8230007, 2434021, 100, 1, 1), + (8230007, 4021031, 100, 1, 1), + (8230007, 4021035, 100, 1, 1), + (8230007, 4021034, 100, 1, 1), + (6230100, 4000032, 100, 1, 1), + (8230006, 4021032, 100, 1, 1), + (8230006, 4021034, 100, 1, 1), + (8230006, 4021031, 100, 1, 1), + (8230006, 4021035, 100, 1, 1), + (8230006, 4009152, 100, 1, 1), + (8230006, 4021033, 100, 1, 1), + (8230006, 4033978, 100, 1, 1), + (8145008, 2431174, 100, 1, 1), + (8145008, 2000037, 100, 1, 1), + (8145008, 4021031, 100, 1, 1), + (8145008, 2590004, 100, 1, 1), + (8145008, 4021032, 100, 1, 1), + (8145008, 4021035, 100, 1, 1), + (8145008, 4000686, 100, 1, 1), + (8145008, 4021033, 100, 1, 1), + (8145008, 4021034, 100, 1, 1), + (8145008, 2001528, 100, 1, 1), + (8230003, 4021033, 100, 1, 1), + (8230003, 4021031, 100, 1, 1), + (8230003, 4033978, 100, 1, 1), + (8230003, 4021032, 100, 1, 1), + (8230003, 4009078, 100, 1, 1), + (8230003, 4021034, 100, 1, 1), + (8230003, 4021035, 100, 1, 1), + (8145004, 4021034, 100, 1, 1), + (8145004, 4033238, 100, 1, 1), + (8145004, 4021031, 100, 1, 1), + (8145004, 2000037, 100, 1, 1), + (8145004, 2001528, 100, 1, 1), + (8145004, 4021032, 100, 1, 1), + (8145004, 4021035, 100, 1, 1), + (8145004, 4021033, 100, 1, 1), + (8145004, 4000682, 100, 1, 1), + (8145005, 4000683, 100, 1, 1), + (8145005, 4021035, 100, 1, 1), + (8145005, 4033234, 100, 1, 1), + (8145005, 4021034, 100, 1, 1), + (8145005, 4021032, 100, 1, 1), + (8145005, 4021033, 100, 1, 1), + (8145005, 4021031, 100, 1, 1), + (8145006, 4000684, 100, 1, 1), + (8145006, 4021032, 100, 1, 1), + (8145006, 4021034, 100, 1, 1), + (8145006, 4021035, 100, 1, 1), + (8145006, 4033234, 100, 1, 1), + (8145006, 4021031, 100, 1, 1), + (8145006, 4021033, 100, 1, 1), + (8145007, 4021033, 100, 1, 1), + (8145007, 4021035, 100, 1, 1), + (8145007, 4000685, 100, 1, 1), + (8145007, 2001528, 100, 1, 1), + (8145007, 4021032, 100, 1, 1), + (8145007, 4021034, 100, 1, 1), + (8145007, 4021031, 100, 1, 1), + (8145007, 2000037, 100, 1, 1), + (8145000, 4021034, 100, 1, 1), + (8145000, 4021033, 100, 1, 1), + (8145000, 2001528, 100, 1, 1), + (8145000, 4021035, 100, 1, 1), + (8145000, 2000037, 100, 1, 1), + (8145000, 4000679, 100, 1, 1), + (8145000, 4021032, 100, 1, 1), + (8145000, 4021031, 100, 1, 1), + (9300121, 4001117, 1000, 1, 1), + (8145001, 2001528, 100, 1, 1), + (8145001, 4000680, 100, 1, 1), + (8145001, 2000037, 100, 1, 1), + (8145001, 4021033, 100, 1, 1), + (8145001, 4021031, 100, 1, 1), + (8145001, 4021035, 100, 1, 1), + (8145001, 4021032, 100, 1, 1), + (8145001, 4021034, 100, 1, 1), + (9300120, 4001117, 1000, 1, 1), + (8145002, 4021035, 100, 1, 1), + (8145002, 4021033, 100, 1, 1), + (8145002, 2001528, 100, 1, 1), + (8145002, 4021031, 100, 1, 1), + (8145002, 4021034, 100, 1, 1), + (8145002, 4021032, 100, 1, 1), + (8145002, 2000037, 100, 1, 1), + (8145003, 4033234, 100, 1, 1), + (8145003, 4000681, 100, 1, 1), + (8145003, 4021033, 100, 1, 1), + (8145003, 4021032, 100, 1, 1), + (8145003, 4021031, 100, 1, 1), + (8145003, 4021034, 100, 1, 1), + (8145003, 4021035, 100, 1, 1), + (8800401, 2001554, 100, 1, 1), + (8800401, 2590004, 100, 1, 1), + (8800401, 4033783, 100, 1, 1), + (8800401, 4021035, 100, 1, 1), + (8800401, 4021032, 100, 1, 1), + (8800401, 2434021, 100, 1, 1), + (8800401, 2000036, 100, 1, 1), + (8800401, 4021034, 100, 1, 1), + (8800401, 4000887, 100, 1, 1), + (8800401, 4021033, 100, 1, 1), + (8800401, 4021020, 100, 1, 1), + (8800401, 4021031, 100, 1, 1), + (9300122, 4001117, 1000, 1, 1), + (9300116, 4001121, 1000, 1, 1), + (9300116, 4001122, 1000, 1, 1), + (9300116, 4001120, 1000, 1, 1), + (9300115, 4001122, 1000, 1, 1), + (9300115, 4001120, 1000, 1, 1), + (9300115, 4001121, 1000, 1, 1), + (9300114, 4001121, 1000, 1, 1), + (9300114, 4001120, 1000, 1, 1), + (9300114, 4001122, 1000, 1, 1), + (1150001, 2870017, 100, 1, 1), + (1150001, 2040900, 100, 1, 1), + (1150001, 2060000, 100, 1, 1), + (1150001, 2000001, 100, 1, 1), + (1150001, 2061000, 100, 1, 1), + (1150001, 2040003, 100, 1, 1), + (1150001, 2000003, 100, 1, 1), + (1150001, 2000000, 100, 1, 1), + (1150001, 2000002, 100, 1, 1), + (1150001, 4000599, 100, 1, 1), + (1150001, 2040000, 100, 1, 1), + (4220000, 4000166, 100, 1, 1), + (4220000, 4000167, 100, 1, 1), + (4220000, 4032474, 100, 1, 1), + (1150000, 2040901, 100, 1, 1), + (1150000, 2040614, 100, 1, 1), + (1150000, 2870016, 100, 1, 1), + (1150000, 2000000, 100, 1, 1), + (1150000, 2000003, 100, 1, 1), + (1150000, 2000002, 100, 1, 1), + (1150000, 2060000, 100, 1, 1), + (1150000, 2061000, 100, 1, 1), + (1150000, 4000598, 100, 1, 1), + (1150000, 2000001, 100, 1, 1), + (1150000, 2048000, 100, 1, 1), + (4220001, 4000166, 100, 1, 1), + (4220001, 4032474, 100, 1, 1), + (4220001, 4000167, 100, 1, 1), + (1150002, 2043000, 100, 1, 1), + (1150002, 2040515, 100, 1, 1), + (1150002, 2870018, 100, 1, 1), + (1150002, 2000002, 100, 1, 1), + (1150002, 2000003, 100, 1, 1), + (1150002, 2000001, 100, 1, 1), + (1150002, 2000000, 100, 1, 1), + (1150002, 2044400, 100, 1, 1), + (1150002, 2061000, 100, 1, 1), + (1150002, 4000600, 100, 1, 1), + (1150002, 2060000, 100, 1, 1), + (8150100, 2590004, 100, 1, 1), + (8150100, 4031252, 100, 1, 1), + (8150100, 2001528, 100, 1, 1), + (8150100, 4021034, 100, 1, 1), + (8150100, 4031255, 100, 1, 1), + (8150100, 2870336, 100, 1, 1), + (8150100, 2000037, 100, 1, 1), + (8150100, 4021031, 100, 1, 1), + (8150100, 4021033, 100, 1, 1), + (8150100, 4021032, 100, 1, 1), + (8150100, 2434021, 100, 1, 1), + (8150100, 4000180, 100, 1, 1), + (8150100, 4021035, 100, 1, 1), + (8150101, 2590004, 100, 1, 1), + (8150101, 2870337, 100, 1, 1), + (8150101, 2001528, 100, 1, 1), + (8150101, 4021032, 100, 1, 1), + (8150101, 4021033, 100, 1, 1), + (8150101, 4021031, 100, 1, 1), + (8150101, 4021034, 100, 1, 1), + (8150101, 4000181, 100, 1, 1), + (8150101, 2000037, 100, 1, 1), + (8150101, 4021035, 100, 1, 1), + (8150101, 4031252, 100, 1, 1), + (8150101, 4031255, 100, 1, 1), + (8150101, 2434021, 100, 1, 1), + (5120100, 4021033, 100, 1, 1), + (5120100, 4021031, 100, 1, 1), + (5120100, 2434021, 100, 1, 1), + (5120100, 4021020, 100, 1, 1), + (5120100, 2590004, 100, 1, 1), + (5120100, 4021035, 100, 1, 1), + (5120100, 4021034, 100, 1, 1), + (5120100, 4021032, 100, 1, 1), + (5120100, 2001554, 100, 1, 1), + (5120100, 2870195, 100, 1, 1), + (5120100, 2000036, 100, 1, 1), + (9000100, 4031013, 9000, 1, 1), + (2700312, 2870226, 100, 1, 1), + (130101, 2022053, 100, 1, 1), + (130101, 2000003, 100, 1, 1), + (130101, 2000000, 100, 1, 1), + (130101, 2870004, 100, 1, 1), + (130101, 2870004, 100, 1, 1), + (130101, 4010004, 100, 1, 1), + (130101, 2010009, 100, 1, 1), + (130101, 4000016, 100, 1, 1), + (130101, 2022054, 100, 1, 1), + (130101, 2022055, 100, 1, 1), + (130101, 2061000, 100, 1, 1), + (130101, 2060000, 100, 1, 1), + (130101, 4020004, 100, 1, 1), + (7130200, 4000053, 100, 1, 1), + (7130200, 4021032, 100, 1, 1), + (7130200, 2049401, 100, 1, 1), + (7130200, 2060000, 100, 1, 1), + (7130200, 2001528, 100, 1, 1), + (7130200, 2041058, 100, 1, 1), + (7130200, 4021035, 100, 1, 1), + (7130200, 2870284, 100, 1, 1), + (7130200, 4021031, 100, 1, 1), + (7130200, 2001527, 100, 1, 1), + (7130200, 4021033, 100, 1, 1), + (7130200, 2430692, 100, 1, 1), + (7130200, 4006000, 100, 1, 1), + (7130200, 2330005, 100, 1, 1), + (7130200, 2590004, 100, 1, 1), + (7130200, 2001001, 100, 1, 1), + (7130200, 4021034, 100, 1, 1), + (7130200, 2434021, 100, 1, 1), + (130100, 2000000, 100, 1, 1), + (130100, 2000003, 100, 1, 1), + (130100, 4000003, 100, 1, 1), + (130100, 2870003, 100, 1, 1), + (130100, 2010009, 100, 1, 1), + (8910000, 4310064, 100, 1, 1), + (8910000, 4310065, 100, 1, 1), + (8910000, 4310029, 100, 1, 1), + (8910000, 2000005, 100, 1, 1), + (8910000, 4009096, 100, 1, 1), + (8910000, 3010512, 100, 1, 1), + (8910000, 2433103, 100, 1, 1), + (8910000, 2433515, 100, 1, 1), + (8147014, 4030017, 100, 1, 1), + (8147014, 4033784, 100, 1, 1), + (8147008, 4021020, 100, 1, 1), + (8147008, 4021034, 100, 1, 1), + (8147008, 2001554, 100, 1, 1), + (8147008, 4000891, 100, 1, 1), + (8147008, 4021033, 100, 1, 1), + (8147008, 2434021, 100, 1, 1), + (8147008, 2590004, 100, 1, 1), + (8147008, 2000036, 100, 1, 1), + (8147008, 4021032, 100, 1, 1), + (8147008, 4021031, 100, 1, 1), + (8147008, 4021035, 100, 1, 1), + (8147009, 4021035, 100, 1, 1), + (8147009, 4021033, 100, 1, 1), + (8147009, 4021020, 100, 1, 1), + (8147009, 4021034, 100, 1, 1), + (8147009, 2434021, 100, 1, 1), + (8147009, 4000892, 100, 1, 1), + (8147009, 2000036, 100, 1, 1), + (8147009, 4021032, 100, 1, 1), + (8147009, 4021031, 100, 1, 1), + (8147009, 2001554, 100, 1, 1), + (8147009, 2590004, 100, 1, 1), + (2700311, 2870089, 100, 1, 1), + (2700311, 4000026, 100, 1, 1), + (2700311, 4000029, 100, 1, 1), + (8147010, 4000891, 100, 1, 1), + (8147010, 4021035, 100, 1, 1), + (8147010, 4021032, 100, 1, 1), + (8147010, 2000036, 100, 1, 1), + (8147010, 4021020, 100, 1, 1), + (8147010, 2434021, 100, 1, 1), + (8147010, 4021034, 100, 1, 1), + (8147010, 4021033, 100, 1, 1), + (8147010, 4021031, 100, 1, 1), + (8147010, 2001554, 100, 1, 1), + (8147010, 2590004, 100, 1, 1), + (2700310, 4009221, 100, 1, 1), + (8147011, 4021020, 100, 1, 1), + (8147011, 2000036, 100, 1, 1), + (8147011, 4021031, 100, 1, 1), + (8147011, 4021034, 100, 1, 1), + (8147011, 4021033, 100, 1, 1), + (8147011, 4021032, 100, 1, 1), + (8147011, 2001554, 100, 1, 1), + (8147011, 4000894, 100, 1, 1), + (8147011, 4021035, 100, 1, 1), + (8147011, 2434021, 100, 1, 1), + (8147011, 2590004, 100, 1, 1), + (8147004, 2590004, 100, 1, 1), + (8147004, 4000883, 100, 1, 1), + (8147004, 2000036, 100, 1, 1), + (8147004, 4021032, 100, 1, 1), + (8147004, 4021031, 100, 1, 1), + (8147004, 2001554, 100, 1, 1), + (8147004, 4021035, 100, 1, 1), + (8147004, 4021034, 100, 1, 1), + (8147004, 2434021, 100, 1, 1), + (8147004, 4033781, 100, 1, 1), + (8147004, 4021020, 100, 1, 1), + (8147004, 4021033, 100, 1, 1), + (8147005, 4021035, 100, 1, 1), + (8147005, 2590004, 100, 1, 1), + (8147005, 4021033, 100, 1, 1), + (8147005, 4000885, 100, 1, 1), + (8147005, 4021020, 100, 1, 1), + (8147005, 4021032, 100, 1, 1), + (8147005, 4033782, 100, 1, 1), + (8147005, 2001554, 100, 1, 1), + (8147005, 2000036, 100, 1, 1), + (8147005, 2434021, 100, 1, 1), + (8147005, 4021034, 100, 1, 1), + (8147005, 4021031, 100, 1, 1), + (8147006, 4021031, 100, 1, 1), + (8147006, 2000036, 100, 1, 1), + (8147006, 2434021, 100, 1, 1), + (8147006, 4033783, 100, 1, 1), + (8147006, 4000887, 100, 1, 1), + (8147006, 2001554, 100, 1, 1), + (8147006, 4021033, 100, 1, 1), + (8147006, 4021035, 100, 1, 1), + (8147006, 4021032, 100, 1, 1), + (8147006, 4021034, 100, 1, 1), + (8147006, 2590004, 100, 1, 1), + (8147006, 4021020, 100, 1, 1), + (8147007, 4021034, 100, 1, 1), + (8147007, 4021031, 100, 1, 1), + (8147007, 2001554, 100, 1, 1), + (8147007, 4021020, 100, 1, 1), + (8147007, 2590004, 100, 1, 1), + (8147007, 2434021, 100, 1, 1), + (8147007, 4021035, 100, 1, 1), + (8147007, 4021032, 100, 1, 1), + (8147007, 2000036, 100, 1, 1), + (8147007, 4021033, 100, 1, 1), + (8147007, 4030017, 100, 1, 1), + (8147007, 4033784, 100, 1, 1), + (8147007, 4000889, 100, 1, 1), + (1110100, 2022055, 100, 1, 1), + (1110100, 2022054, 100, 1, 1), + (1110100, 2060000, 100, 1, 1), + (1110100, 2870009, 100, 1, 1), + (1110100, 2043102, 100, 1, 1), + (1110100, 4000012, 100, 1, 1), + (1110100, 4010004, 100, 1, 1), + (1110100, 2000000, 100, 1, 1), + (1110100, 4020003, 100, 1, 1), + (1110100, 4020002, 100, 1, 1), + (1110100, 2022053, 100, 1, 1), + (1110100, 2000003, 100, 1, 1), + (8147000, 4021032, 100, 1, 1), + (8147000, 4021033, 100, 1, 1), + (8147000, 2000036, 100, 1, 1), + (8147000, 4021034, 100, 1, 1), + (8147000, 4021035, 100, 1, 1), + (8147000, 2434021, 100, 1, 1), + (8147000, 4021020, 100, 1, 1), + (8147000, 4000878, 100, 1, 1), + (8147000, 2590004, 100, 1, 1), + (8147000, 4021031, 100, 1, 1), + (8147000, 2001554, 100, 1, 1), + (1110101, 4010001, 100, 1, 1), + (1110101, 2040802, 100, 1, 1), + (1110101, 2061000, 100, 1, 1), + (1110101, 4020000, 100, 1, 1), + (1110101, 2000000, 100, 1, 1), + (1110101, 2022054, 100, 1, 1), + (1110101, 2022053, 100, 1, 1), + (1110101, 4000005, 100, 1, 1), + (1110101, 2022055, 100, 1, 1), + (1110101, 2870010, 100, 1, 1), + (8147001, 4021032, 100, 1, 1), + (8147001, 4021034, 100, 1, 1), + (8147001, 2434021, 100, 1, 1), + (8147001, 4021031, 100, 1, 1), + (8147001, 4000879, 100, 1, 1), + (8147001, 2001554, 100, 1, 1), + (8147001, 2000036, 100, 1, 1), + (8147001, 4021033, 100, 1, 1), + (8147001, 2590004, 100, 1, 1), + (8147001, 4021035, 100, 1, 1), + (8147001, 4021020, 100, 1, 1), + (8147002, 2001554, 100, 1, 1), + (8147002, 2434021, 100, 1, 1), + (8147002, 2000036, 100, 1, 1), + (8147002, 4000880, 100, 1, 1), + (8147002, 4021020, 100, 1, 1), + (8147002, 4021035, 100, 1, 1), + (8147002, 2590004, 100, 1, 1), + (8147002, 4021032, 100, 1, 1), + (8147002, 4021031, 100, 1, 1), + (8147002, 4021034, 100, 1, 1), + (8147002, 4021033, 100, 1, 1), + (8147003, 4021020, 100, 1, 1), + (8147003, 2590004, 100, 1, 1), + (8147003, 4021035, 100, 1, 1), + (8147003, 4021034, 100, 1, 1), + (8147003, 4021031, 100, 1, 1), + (8147003, 2000036, 100, 1, 1), + (8147003, 4000881, 100, 1, 1), + (8147003, 4033780, 100, 1, 1), + (8147003, 4021032, 100, 1, 1), + (8147003, 2001554, 100, 1, 1), + (8147003, 2434021, 100, 1, 1), + (8147003, 4021033, 100, 1, 1), + (8240181, 4021031, 100, 1, 1), + (8240181, 4021035, 100, 1, 1), + (8240181, 4021032, 100, 1, 1), + (8240181, 2001554, 100, 1, 1), + (8240181, 4021034, 100, 1, 1), + (8240181, 2434021, 100, 1, 1), + (8240181, 4021020, 100, 1, 1), + (8240181, 2590004, 100, 1, 1), + (8240181, 2000036, 100, 1, 1), + (8240181, 4021033, 100, 1, 1), + (8240181, 4001868, 100, 1, 1), + (8240180, 4021035, 100, 1, 1), + (8240180, 4021020, 100, 1, 1), + (8240180, 2434021, 100, 1, 1), + (8240180, 2590004, 100, 1, 1), + (8240180, 4021033, 100, 1, 1), + (8240180, 4001868, 100, 1, 1), + (8240180, 4021032, 100, 1, 1), + (8240180, 2001554, 100, 1, 1), + (8240180, 4021034, 100, 1, 1), + (8240180, 4021031, 100, 1, 1), + (8240180, 2000036, 100, 1, 1), + (5120002, 4021032, 100, 1, 1), + (5120002, 4021034, 100, 1, 1), + (5120002, 4021035, 100, 1, 1), + (5120002, 4021033, 100, 1, 1), + (5120002, 4033145, 100, 1, 1), + (5120002, 2001002, 100, 1, 1), + (5120002, 2590004, 100, 1, 1), + (5120002, 2001001, 100, 1, 1), + (5120002, 2430692, 100, 1, 1), + (5120002, 4000071, 100, 1, 1), + (5120002, 2431174, 100, 1, 1), + (5120002, 2870193, 100, 1, 1), + (5120003, 4021033, 100, 1, 1), + (5120003, 4000072, 100, 1, 1), + (5120003, 4033145, 100, 1, 1), + (5120003, 4021034, 100, 1, 1), + (5120003, 2001001, 100, 1, 1), + (5120003, 2590004, 100, 1, 1), + (5120003, 2001002, 100, 1, 1), + (5120003, 2430692, 100, 1, 1), + (5120003, 2431174, 100, 1, 1), + (5120003, 4021032, 100, 1, 1), + (5120003, 2870194, 100, 1, 1), + (5120003, 4021035, 100, 1, 1), + (5120000, 2431174, 100, 1, 1), + (5120000, 2001002, 100, 1, 1), + (5120000, 4021034, 100, 1, 1), + (5120000, 4021035, 100, 1, 1), + (5120000, 2001001, 100, 1, 1), + (5120000, 2870191, 100, 1, 1), + (5120000, 2590004, 100, 1, 1), + (5120000, 4021032, 100, 1, 1), + (5120000, 4031309, 100, 1, 1), + (5120000, 2430692, 100, 1, 1), + (5120000, 4000061, 100, 1, 1), + (5120000, 4021033, 100, 1, 1), + (5120001, 4000070, 100, 1, 1), + (5120001, 2001001, 100, 1, 1), + (5120001, 2431174, 100, 1, 1), + (5120001, 2590004, 100, 1, 1), + (5120001, 4021034, 100, 1, 1), + (5120001, 4021035, 100, 1, 1), + (5120001, 4033145, 100, 1, 1), + (5120001, 4021033, 100, 1, 1), + (5120001, 2870192, 100, 1, 1), + (5120001, 2001002, 100, 1, 1), + (5120001, 2430692, 100, 1, 1), + (5120001, 4021032, 100, 1, 1), + (8148012, 4000905, 100, 1, 1), + (8610003, 2512137, 100, 1, 1), + (8610003, 4021031, 100, 1, 1), + (8610003, 2001554, 100, 1, 1), + (8610003, 4021033, 100, 1, 1), + (8610003, 2430692, 100, 1, 1), + (8610003, 2512285, 100, 1, 1), + (8610003, 2512266, 100, 1, 1), + (8610003, 2512099, 100, 1, 1), + (8610003, 2512128, 100, 1, 1), + (8610003, 2512154, 100, 1, 1), + (8610003, 2512287, 100, 1, 1), + (8610003, 4000663, 100, 1, 1), + (8610003, 2512175, 100, 1, 1), + (8610003, 4021020, 100, 1, 1), + (8610003, 2049401, 100, 1, 1), + (8610003, 4021032, 100, 1, 1), + (8610003, 2512271, 100, 1, 1), + (8610003, 4034983, 100, 1, 1), + (8610003, 2512270, 100, 1, 1), + (8610003, 4021034, 100, 1, 1), + (8610003, 2070004, 100, 1, 1), + (8610003, 2590004, 100, 1, 1), + (8610003, 2512283, 100, 1, 1), + (8610003, 4021035, 100, 1, 1), + (8610003, 2000036, 100, 1, 1), + (8610003, 2434021, 100, 1, 1), + (8870103, 4021033, 100, 1, 1), + (8870103, 4021032, 100, 1, 1), + (8870103, 4021035, 100, 1, 1), + (8870103, 4021031, 100, 1, 1), + (8870103, 4021034, 100, 1, 1), + (8610002, 4021031, 100, 1, 1), + (8610002, 2512175, 100, 1, 1), + (8610002, 2049401, 100, 1, 1), + (8610002, 2512271, 100, 1, 1), + (8610002, 4021034, 100, 1, 1), + (8610002, 4034983, 100, 1, 1), + (8610002, 4021033, 100, 1, 1), + (8610002, 2512099, 100, 1, 1), + (8610002, 2001554, 100, 1, 1), + (8610002, 2434021, 100, 1, 1), + (8610002, 2512287, 100, 1, 1), + (8610002, 2048004, 100, 1, 1), + (8610002, 2000036, 100, 1, 1), + (8610002, 2512266, 100, 1, 1), + (8610002, 4021035, 100, 1, 1), + (8610002, 2590004, 100, 1, 1), + (8610002, 2512137, 100, 1, 1), + (8610002, 2512283, 100, 1, 1), + (8610002, 2048001, 100, 1, 1), + (8610002, 4000662, 100, 1, 1), + (8610002, 4021020, 100, 1, 1), + (8610002, 4021032, 100, 1, 1), + (8610002, 2512128, 100, 1, 1), + (8610002, 2512154, 100, 1, 1), + (8610002, 2070003, 100, 1, 1), + (8610002, 2512285, 100, 1, 1), + (8610002, 2512270, 100, 1, 1), + (8870102, 4021031, 100, 1, 1), + (8870102, 4021032, 100, 1, 1), + (8870102, 4021035, 100, 1, 1), + (8870102, 4021033, 100, 1, 1), + (8870102, 4021034, 100, 1, 1), + (8610001, 2512154, 100, 1, 1), + (8610001, 2434021, 100, 1, 1), + (8610001, 2049401, 100, 1, 1), + (8610001, 2001554, 100, 1, 1), + (8610001, 2512128, 100, 1, 1), + (8610001, 2048005, 100, 1, 1), + (8610001, 2512270, 100, 1, 1), + (8610001, 2070005, 100, 1, 1), + (8610001, 2512285, 100, 1, 1), + (8610001, 4034983, 100, 1, 1), + (8610001, 2512137, 100, 1, 1), + (8610001, 2590004, 100, 1, 1), + (8610001, 4000661, 100, 1, 1), + (8610001, 2512175, 100, 1, 1), + (8610001, 2512271, 100, 1, 1), + (8610001, 2512099, 100, 1, 1), + (8610001, 2000036, 100, 1, 1), + (8610001, 2512266, 100, 1, 1), + (8610001, 4021032, 100, 1, 1), + (8610001, 4021031, 100, 1, 1), + (8610001, 2330005, 100, 1, 1), + (8610001, 4021033, 100, 1, 1), + (8610001, 2430692, 100, 1, 1), + (8610001, 2512283, 100, 1, 1), + (8610001, 4021020, 100, 1, 1), + (8610001, 4021034, 100, 1, 1), + (8610001, 4021035, 100, 1, 1), + (8610001, 2512287, 100, 1, 1), + (8870101, 4021032, 100, 1, 1), + (8870101, 4021034, 100, 1, 1), + (8870101, 4021035, 100, 1, 1), + (8870101, 4021033, 100, 1, 1), + (8870101, 4021031, 100, 1, 1), + (8610000, 2512137, 100, 1, 1), + (8610000, 2430692, 100, 1, 1), + (8610000, 2510255, 100, 1, 1), + (8610000, 2512285, 100, 1, 1), + (8610000, 4021034, 100, 1, 1), + (8610000, 2512175, 100, 1, 1), + (8610000, 2510258, 100, 1, 1), + (8610000, 4034983, 100, 1, 1), + (8610000, 4021020, 100, 1, 1), + (8610000, 2512266, 100, 1, 1), + (8610000, 2512283, 100, 1, 1), + (8610000, 2510256, 100, 1, 1), + (8610000, 2510259, 100, 1, 1), + (8610000, 2330004, 100, 1, 1), + (8610000, 2512099, 100, 1, 1), + (8610000, 2512154, 100, 1, 1), + (8610000, 2000036, 100, 1, 1), + (8610000, 2590004, 100, 1, 1), + (8610000, 2512270, 100, 1, 1), + (8610000, 2512128, 100, 1, 1), + (8610000, 2434021, 100, 1, 1), + (8610000, 4021032, 100, 1, 1), + (8610000, 4021033, 100, 1, 1), + (8610000, 2512287, 100, 1, 1), + (8610000, 2510257, 100, 1, 1), + (8610000, 4000660, 100, 1, 1), + (8610000, 4021031, 100, 1, 1), + (8610000, 2001554, 100, 1, 1), + (8610000, 2512271, 100, 1, 1), + (8610000, 4021035, 100, 1, 1), + (8148008, 4000901, 100, 1, 1), + (8148008, 2000036, 100, 1, 1), + (8148008, 4021033, 100, 1, 1), + (8148008, 4021034, 100, 1, 1), + (8148008, 2434021, 100, 1, 1), + (8148008, 4021032, 100, 1, 1), + (8148008, 2590004, 100, 1, 1), + (8148008, 2001554, 100, 1, 1), + (8148008, 4021031, 100, 1, 1), + (8148008, 4021035, 100, 1, 1), + (8610007, 4021031, 100, 1, 1), + (8610007, 4021032, 100, 1, 1), + (8610007, 2870466, 100, 1, 1), + (8610007, 4021034, 100, 1, 1), + (8610007, 2590004, 100, 1, 1), + (8610007, 2001554, 100, 1, 1), + (8610007, 4021033, 100, 1, 1), + (8610007, 4032926, 100, 1, 1), + (8610007, 4000651, 100, 1, 1), + (8610007, 2000036, 100, 1, 1), + (8610007, 2070004, 100, 1, 1), + (8610007, 2434021, 100, 1, 1), + (8610007, 4034983, 100, 1, 1), + (8610007, 4021035, 100, 1, 1), + (8610007, 4021020, 100, 1, 1), + (8148009, 4021034, 100, 1, 1), + (8148009, 2001554, 100, 1, 1), + (8148009, 4021031, 100, 1, 1), + (8148009, 2000036, 100, 1, 1), + (8148009, 4021035, 100, 1, 1), + (8148009, 2590004, 100, 1, 1), + (8148009, 2434021, 100, 1, 1), + (8148009, 4021033, 100, 1, 1), + (8148009, 4000902, 100, 1, 1), + (8148009, 4021032, 100, 1, 1), + (8610006, 4021033, 100, 1, 1), + (8610006, 4032941, 100, 1, 1), + (8610006, 4034983, 100, 1, 1), + (8610006, 2049401, 100, 1, 1), + (8610006, 2434021, 100, 1, 1), + (8610006, 2512271, 100, 1, 1), + (8610006, 4021035, 100, 1, 1), + (8610006, 4021032, 100, 1, 1), + (8610006, 2070009, 100, 1, 1), + (8610006, 2512287, 100, 1, 1), + (8610006, 2870465, 100, 1, 1), + (8610006, 2512128, 100, 1, 1), + (8610006, 4000650, 100, 1, 1), + (8610006, 4021020, 100, 1, 1), + (8610006, 2001554, 100, 1, 1), + (8610006, 2512175, 100, 1, 1), + (8610006, 2512154, 100, 1, 1), + (8610006, 2430692, 100, 1, 1), + (8610006, 2512099, 100, 1, 1), + (8610006, 2512270, 100, 1, 1), + (8610006, 2512285, 100, 1, 1), + (8610006, 2000036, 100, 1, 1), + (8610006, 2512266, 100, 1, 1), + (8610006, 4021031, 100, 1, 1), + (8610006, 2512283, 100, 1, 1), + (8610006, 2590004, 100, 1, 1), + (8610006, 2512137, 100, 1, 1), + (8610006, 4021034, 100, 1, 1), + (8148010, 4021035, 100, 1, 1), + (8148010, 4021031, 100, 1, 1), + (8148010, 4021034, 100, 1, 1), + (8148010, 2001554, 100, 1, 1), + (8148010, 2000036, 100, 1, 1), + (8148010, 2590004, 100, 1, 1), + (8148010, 4021033, 100, 1, 1), + (8148010, 2434021, 100, 1, 1), + (8148010, 4000903, 100, 1, 1), + (8148010, 4021032, 100, 1, 1), + (8610005, 2434021, 100, 1, 1), + (8610005, 4021035, 100, 1, 1), + (8610005, 2512099, 100, 1, 1), + (8610005, 2512154, 100, 1, 1), + (8610005, 4034983, 100, 1, 1), + (8610005, 2000036, 100, 1, 1), + (8610005, 2512128, 100, 1, 1), + (8610005, 2870464, 100, 1, 1), + (8610005, 2512266, 100, 1, 1), + (8610005, 4021020, 100, 1, 1), + (8610005, 2512175, 100, 1, 1), + (8610005, 2512285, 100, 1, 1), + (8610005, 2512271, 100, 1, 1), + (8610005, 4021034, 100, 1, 1), + (8610005, 2590004, 100, 1, 1), + (8610005, 4021033, 100, 1, 1), + (8610005, 2512137, 100, 1, 1), + (8610005, 2512287, 100, 1, 1), + (8610005, 2430692, 100, 1, 1), + (8610005, 4000649, 100, 1, 1), + (8610005, 2001554, 100, 1, 1), + (8610005, 4021031, 100, 1, 1), + (8610005, 2049401, 100, 1, 1), + (8610005, 2070007, 100, 1, 1), + (8610005, 2330002, 100, 1, 1), + (8610005, 4021032, 100, 1, 1), + (8610005, 2330003, 100, 1, 1), + (8610005, 2512270, 100, 1, 1), + (8610005, 2048003, 100, 1, 1), + (8610005, 2512283, 100, 1, 1), + (8148011, 4021034, 100, 1, 1), + (8148011, 4021035, 100, 1, 1), + (8148011, 2434021, 100, 1, 1), + (8148011, 4021032, 100, 1, 1), + (8148011, 4021033, 100, 1, 1), + (8148011, 4000904, 100, 1, 1), + (8148011, 2590004, 100, 1, 1), + (8148011, 4021031, 100, 1, 1), + (8148011, 2000036, 100, 1, 1), + (8148011, 2001554, 100, 1, 1), + (8610004, 2512285, 100, 1, 1), + (8610004, 2048003, 100, 1, 1), + (8610004, 4034983, 100, 1, 1), + (8610004, 2510169, 100, 1, 1), + (8610004, 2000036, 100, 1, 1), + (8610004, 2512271, 100, 1, 1), + (8610004, 2512128, 100, 1, 1), + (8610004, 2512283, 100, 1, 1), + (8610004, 4021020, 100, 1, 1), + (8610004, 4021032, 100, 1, 1), + (8610004, 2590004, 100, 1, 1), + (8610004, 2430692, 100, 1, 1), + (8610004, 2512137, 100, 1, 1), + (8610004, 2430200, 100, 1, 1), + (8610004, 4021035, 100, 1, 1), + (8610004, 2049401, 100, 1, 1), + (8610004, 2512154, 100, 1, 1), + (8610004, 4021033, 100, 1, 1), + (8610004, 2512287, 100, 1, 1), + (8610004, 2001554, 100, 1, 1), + (8610004, 2512270, 100, 1, 1), + (8610004, 2512175, 100, 1, 1), + (8610004, 2512266, 100, 1, 1), + (8610004, 2512099, 100, 1, 1), + (8610004, 4021031, 100, 1, 1), + (8610004, 4021034, 100, 1, 1), + (8610004, 2434021, 100, 1, 1), + (8610011, 4021020, 100, 1, 1), + (8610011, 4021035, 100, 1, 1), + (8610011, 2590004, 100, 1, 1), + (8610011, 4021034, 100, 1, 1), + (8610011, 4021032, 100, 1, 1), + (8610011, 4021031, 100, 1, 1), + (8610011, 2434021, 100, 1, 1), + (8610011, 4000655, 100, 1, 1), + (8610011, 2001554, 100, 1, 1), + (8610011, 4034983, 100, 1, 1), + (8610011, 2000036, 100, 1, 1), + (8610011, 4021033, 100, 1, 1), + (8610011, 2870470, 100, 1, 1), + (8148005, 4021032, 100, 1, 1), + (8148005, 4000898, 100, 1, 1), + (8148005, 4021033, 100, 1, 1), + (8148005, 2000037, 100, 1, 1), + (8148005, 4021031, 100, 1, 1), + (8148005, 4021035, 100, 1, 1), + (8148005, 2431174, 100, 1, 1), + (8148005, 2000036, 100, 1, 1), + (8148005, 4021034, 100, 1, 1), + (8148005, 2590004, 100, 1, 1), + (8610010, 4021020, 100, 1, 1), + (8610010, 2870469, 100, 1, 1), + (8610010, 4034983, 100, 1, 1), + (8610010, 4021034, 100, 1, 1), + (8610010, 2000036, 100, 1, 1), + (8610010, 2590004, 100, 1, 1), + (8610010, 2434021, 100, 1, 1), + (8610010, 4021033, 100, 1, 1), + (8610010, 4021031, 100, 1, 1), + (8610010, 4000654, 100, 1, 1), + (8610010, 4021035, 100, 1, 1), + (8610010, 2001554, 100, 1, 1), + (8610010, 4021032, 100, 1, 1), + (8148006, 4021033, 100, 1, 1), + (8148006, 4021035, 100, 1, 1), + (8148006, 4032010, 100, 1, 1), + (8148006, 4021031, 100, 1, 1), + (8148006, 4021034, 100, 1, 1), + (8148006, 4021032, 100, 1, 1), + (8148006, 4032011, 100, 1, 1), + (8610009, 2590004, 100, 1, 1), + (8610009, 4021034, 100, 1, 1), + (8610009, 4021032, 100, 1, 1), + (8610009, 2070005, 100, 1, 1), + (8610009, 2000036, 100, 1, 1), + (8610009, 2434021, 100, 1, 1), + (8610009, 4034983, 100, 1, 1), + (8610009, 2870468, 100, 1, 1), + (8610009, 4021031, 100, 1, 1), + (8610009, 4021033, 100, 1, 1), + (8610009, 4021035, 100, 1, 1), + (8610009, 4000653, 100, 1, 1), + (8610009, 4021020, 100, 1, 1), + (8610009, 2001554, 100, 1, 1), + (8148007, 4021032, 100, 1, 1), + (8148007, 2000036, 100, 1, 1), + (8148007, 2001554, 100, 1, 1), + (8148007, 4021035, 100, 1, 1), + (8148007, 4021033, 100, 1, 1), + (8148007, 4021031, 100, 1, 1), + (8148007, 2434021, 100, 1, 1), + (8148007, 2590004, 100, 1, 1), + (8148007, 4000900, 100, 1, 1), + (8148007, 4021034, 100, 1, 1), + (8610008, 2000036, 100, 1, 1), + (8610008, 4021031, 100, 1, 1), + (8610008, 4021032, 100, 1, 1), + (8610008, 4021034, 100, 1, 1), + (8610008, 2434021, 100, 1, 1), + (8610008, 4021020, 100, 1, 1), + (8610008, 2001554, 100, 1, 1), + (8610008, 2870467, 100, 1, 1), + (8610008, 2590004, 100, 1, 1), + (8610008, 4000652, 100, 1, 1), + (8610008, 4034983, 100, 1, 1), + (8610008, 4021035, 100, 1, 1), + (8610008, 4021033, 100, 1, 1), + (8148000, 4021031, 100, 1, 1), + (8148000, 4021034, 100, 1, 1), + (8148000, 4021032, 100, 1, 1), + (8148000, 4000895, 100, 1, 1), + (8148000, 4021035, 100, 1, 1), + (8148000, 4021033, 100, 1, 1), + (8148001, 4021035, 100, 1, 1), + (8148001, 2431174, 100, 1, 1), + (8148001, 2000037, 100, 1, 1), + (8148001, 4021034, 100, 1, 1), + (8148001, 2590004, 100, 1, 1), + (8148001, 4000896, 100, 1, 1), + (8148001, 2000036, 100, 1, 1), + (8148001, 4021031, 100, 1, 1), + (8148001, 4021033, 100, 1, 1), + (8148001, 4021032, 100, 1, 1), + (8610014, 4021020, 100, 1, 1), + (8610014, 4021034, 100, 1, 1), + (8610014, 2000036, 100, 1, 1), + (8610014, 4021033, 100, 1, 1), + (8610014, 4032927, 100, 1, 1), + (8610014, 2434021, 100, 1, 1), + (8610014, 4000658, 100, 1, 1), + (8610014, 2870473, 100, 1, 1), + (8610014, 4034983, 100, 1, 1), + (8610014, 4021031, 100, 1, 1), + (8610014, 4021035, 100, 1, 1), + (8610014, 4021032, 100, 1, 1), + (8610014, 2001554, 100, 1, 1), + (8610014, 2590004, 100, 1, 1), + (8610013, 2434021, 100, 1, 1), + (8610013, 4032928, 100, 1, 1), + (8610013, 4021031, 100, 1, 1), + (8610013, 2590004, 100, 1, 1), + (8610013, 4021020, 100, 1, 1), + (8610013, 4034983, 100, 1, 1), + (8610013, 4000657, 100, 1, 1), + (8610013, 2000036, 100, 1, 1), + (8610013, 4021035, 100, 1, 1), + (8610013, 4021033, 100, 1, 1), + (8610013, 4021032, 100, 1, 1), + (8610013, 2001554, 100, 1, 1), + (8610013, 2870472, 100, 1, 1), + (8610013, 4021034, 100, 1, 1), + (8610012, 4021031, 100, 1, 1), + (8610012, 2000036, 100, 1, 1), + (8610012, 4021035, 100, 1, 1), + (8610012, 2590004, 100, 1, 1), + (8610012, 4021020, 100, 1, 1), + (8610012, 4021034, 100, 1, 1), + (8610012, 2434021, 100, 1, 1), + (8610012, 4021033, 100, 1, 1), + (8610012, 4000656, 100, 1, 1), + (8610012, 4034983, 100, 1, 1), + (8610012, 2001554, 100, 1, 1), + (8610012, 4021032, 100, 1, 1), + (8610012, 2870471, 100, 1, 1), + (8870104, 4021032, 100, 1, 1), + (8870104, 4021033, 100, 1, 1), + (8870104, 4021031, 100, 1, 1), + (8870104, 4021034, 100, 1, 1), + (8870104, 4021035, 100, 1, 1), + (2600007, 2512256, 100, 1, 1), + (2600007, 2061000, 100, 1, 1), + (2600007, 2044112, 100, 1, 1), + (2600007, 2040802, 100, 1, 1), + (2600007, 2022057, 100, 1, 1), + (2600007, 2512274, 100, 1, 1), + (2600007, 2510037, 100, 1, 1), + (2600007, 4000243, 100, 1, 1), + (2600007, 2049100, 100, 1, 1), + (2600007, 2043114, 100, 1, 1), + (2600007, 2512040, 100, 1, 1), + (2600007, 2040516, 100, 1, 1), + (2600007, 2510427, 100, 1, 1), + (2600007, 2040902, 100, 1, 1), + (2600007, 2040002, 100, 1, 1), + (2600007, 2040621, 100, 1, 1), + (2600007, 2040901, 100, 1, 1), + (2600007, 2044801, 100, 1, 1), + (2600007, 2512272, 100, 1, 1), + (2600007, 2870346, 100, 1, 1), + (2600007, 4004002, 100, 1, 1), + (2600007, 2040532, 100, 1, 1), + (2600007, 2043214, 100, 1, 1), + (2600007, 2040925, 100, 1, 1), + (2600007, 2512283, 100, 1, 1), + (2600007, 2510272, 100, 1, 1), + (2600007, 2040602, 100, 1, 1), + (2600007, 2510294, 100, 1, 1), + (2600007, 4000244, 100, 1, 1), + (2600007, 2512280, 100, 1, 1), + (2600007, 40302, 100, 1, 1), + (2600007, 2510133, 100, 1, 1), + (2600007, 2040709, 100, 1, 1), + (2600007, 4000245, 100, 1, 1), + (2600007, 2001527, 100, 1, 1), + (2600007, 4004003, 100, 1, 1), + (2600007, 2040513, 100, 1, 1), + (2600007, 2512271, 100, 1, 1), + (2600007, 2000037, 100, 1, 1), + (2600007, 2040618, 100, 1, 1), + (2600007, 2040005, 100, 1, 1), + (2600007, 2511101, 100, 1, 1), + (2600007, 2043701, 100, 1, 1), + (2600007, 2512048, 100, 1, 1), + (2600007, 2040505, 100, 1, 1), + (2600007, 2512287, 100, 1, 1), + (2600007, 4004001, 100, 1, 1), + (2600007, 2040402, 100, 1, 1), + (2600007, 4004000, 100, 1, 1), + (2600007, 2512112, 100, 1, 1), + (2600007, 4001402, 100, 1, 1), + (2600007, 2001002, 100, 1, 1), + (2600007, 2040502, 100, 1, 1), + (2600007, 2510394, 100, 1, 1), + (2600007, 2511027, 100, 1, 1), + (2600007, 2510476, 100, 1, 1), + (2600007, 2511052, 100, 1, 1), + (2600006, 2510247, 100, 1, 1), + (2600006, 4007005, 100, 1, 1), + (2600006, 2510272, 100, 1, 1), + (2600006, 4000261, 100, 1, 1), + (2600006, 2512209, 100, 1, 1), + (2600006, 4004003, 100, 1, 1), + (2600006, 2040824, 100, 1, 1), + (2600006, 2060000, 100, 1, 1), + (2600006, 2510396, 100, 1, 1), + (2600006, 2001001, 100, 1, 1), + (2600006, 2510037, 100, 1, 1), + (2600006, 4020001, 100, 1, 1), + (2600006, 2512135, 100, 1, 1), + (2600006, 2512285, 100, 1, 1), + (2600006, 2040621, 100, 1, 1), + (2600006, 4006000, 100, 1, 1), + (2600006, 2512287, 100, 1, 1), + (2600006, 4007007, 100, 1, 1), + (2600006, 2330002, 100, 1, 1), + (2600006, 2001526, 100, 1, 1), + (2600006, 2870292, 100, 1, 1), + (2600006, 2044802, 100, 1, 1), + (2600006, 2512274, 100, 1, 1), + (2600006, 4020007, 100, 1, 1), + (2600006, 2044201, 100, 1, 1), + (2600006, 2000037, 100, 1, 1), + (2600006, 2512276, 100, 1, 1), + (2600006, 2061000, 100, 1, 1), + (2600006, 2510427, 100, 1, 1), + (2600006, 2044602, 100, 1, 1), + (6400000, 2590004, 100, 1, 1), + (6400000, 4021032, 100, 1, 1), + (6400000, 4021034, 100, 1, 1), + (6400000, 2001528, 100, 1, 1), + (6400000, 2434021, 100, 1, 1), + (6400000, 4021035, 100, 1, 1), + (6400000, 2000037, 100, 1, 1), + (6400000, 4000056, 100, 1, 1), + (6400000, 2870264, 100, 1, 1), + (6400000, 4021031, 100, 1, 1), + (6400000, 4021033, 100, 1, 1), + (2600005, 2512266, 100, 1, 1), + (2600005, 2512244, 100, 1, 1), + (2600005, 4000260, 100, 1, 1), + (2600005, 2044412, 100, 1, 1), + (2600005, 2000037, 100, 1, 1), + (2600005, 4010001, 100, 1, 1), + (2600005, 2512041, 100, 1, 1), + (2600005, 2512283, 100, 1, 1), + (2600005, 2043401, 100, 1, 1), + (2600005, 2512126, 100, 1, 1), + (2600005, 4007000, 100, 1, 1), + (2600005, 2000005, 100, 1, 1), + (2600005, 4007006, 100, 1, 1), + (2600005, 2512194, 100, 1, 1), + (2600005, 2061000, 100, 1, 1), + (2600005, 2044601, 100, 1, 1), + (2600005, 2870291, 100, 1, 1), + (2600005, 2000004, 100, 1, 1), + (2600005, 2022057, 100, 1, 1), + (2600005, 2512280, 100, 1, 1), + (2600005, 4010000, 100, 1, 1), + (2600005, 4004002, 100, 1, 1), + (2600005, 4006001, 100, 1, 1), + (2600005, 2512276, 100, 1, 1), + (6400003, 2870265, 100, 1, 1), + (2600004, 4001402, 100, 1, 1), + (2600004, 2870290, 100, 1, 1), + (2600004, 4004002, 100, 1, 1), + (2600004, 4000229, 100, 1, 1), + (2600004, 2043301, 100, 1, 1), + (2600004, 2001526, 100, 1, 1), + (2600004, 4020002, 100, 1, 1), + (2600004, 4010002, 100, 1, 1), + (2600004, 2512214, 100, 1, 1), + (2600004, 4007002, 100, 1, 1), + (2600004, 2511075, 100, 1, 1), + (2600004, 2510299, 100, 1, 1), + (2600004, 2512149, 100, 1, 1), + (2600004, 2512275, 100, 1, 1), + (2600004, 2060000, 100, 1, 1), + (2600004, 2000037, 100, 1, 1), + (2600004, 2022057, 100, 1, 1), + (2600004, 2512288, 100, 1, 1), + (2600004, 2001527, 100, 1, 1), + (2600004, 4007003, 100, 1, 1), + (2600004, 2512287, 100, 1, 1), + (2600004, 2512278, 100, 1, 1), + (2600004, 2000005, 100, 1, 1), + (2600004, 4006001, 100, 1, 1), + (2600004, 2043002, 100, 1, 1), + (2600004, 2001002, 100, 1, 1), + (2600003, 4010001, 100, 1, 1), + (2600003, 4004000, 100, 1, 1), + (2600003, 2043701, 100, 1, 1), + (2600003, 2040705, 100, 1, 1), + (2600003, 4020000, 100, 1, 1), + (2600003, 2511018, 100, 1, 1), + (2600003, 4006001, 100, 1, 1), + (2600003, 2000037, 100, 1, 1), + (2600003, 4000227, 100, 1, 1), + (2600003, 4007007, 100, 1, 1), + (2600003, 2060000, 100, 1, 1), + (2600003, 2048003, 100, 1, 1), + (2600003, 4000228, 100, 1, 1), + (2600003, 4007000, 100, 1, 1), + (2600003, 2000005, 100, 1, 1), + (2600003, 2870289, 100, 1, 1), + (2600003, 2044901, 100, 1, 1), + (2600003, 4000226, 100, 1, 1), + (2600003, 2001001, 100, 1, 1), + (2600003, 2022057, 100, 1, 1), + (2600003, 2001528, 100, 1, 1), + (2220100, 4000009, 100, 1, 1), + (2220100, 4010006, 100, 1, 1), + (2220100, 2044002, 100, 1, 1), + (2220100, 4131016, 100, 1, 1), + (2220100, 2060000, 100, 1, 1), + (2220100, 2000003, 100, 1, 1), + (2220100, 2870043, 100, 1, 1), + (2220100, 2022016, 100, 1, 1), + (2220100, 4020005, 100, 1, 1), + (2220100, 2061000, 100, 1, 1), + (2220100, 4020006, 100, 1, 1), + (2600002, 4010004, 100, 1, 1), + (2600002, 2044101, 100, 1, 1), + (2600002, 4004004, 100, 1, 1), + (2600002, 4007003, 100, 1, 1), + (2600002, 2001527, 100, 1, 1), + (2600002, 2510011, 100, 1, 1), + (2600002, 2001002, 100, 1, 1), + (2600002, 2044314, 100, 1, 1), + (2600002, 4020004, 100, 1, 1), + (2600002, 2870276, 100, 1, 1), + (2600002, 2049100, 100, 1, 1), + (2600002, 2070010, 100, 1, 1), + (2600002, 2510479, 100, 1, 1), + (2600002, 4006000, 100, 1, 1), + (2600002, 2512094, 100, 1, 1), + (2600002, 2510403, 100, 1, 1), + (2600002, 4000231, 100, 1, 1), + (2600002, 2044301, 100, 1, 1), + (2600002, 4007005, 100, 1, 1), + (2600002, 2512112, 100, 1, 1), + (2600002, 2048004, 100, 1, 1), + (2600002, 2000006, 100, 1, 1), + (2600002, 2510268, 100, 1, 1), + (2600002, 2512288, 100, 1, 1), + (2600002, 2512110, 100, 1, 1), + (2600002, 2061000, 100, 1, 1), + (2600002, 2512274, 100, 1, 1), + (6400004, 2870266, 100, 1, 1), + (2600001, 2060000, 100, 1, 1), + (2600001, 2512286, 100, 1, 1), + (2600001, 2510038, 100, 1, 1), + (2600001, 2870275, 100, 1, 1), + (2600001, 4007007, 100, 1, 1), + (2600001, 4001402, 100, 1, 1), + (2600001, 4004003, 100, 1, 1), + (2600001, 2512198, 100, 1, 1), + (2600001, 2044901, 100, 1, 1), + (2600001, 2000005, 100, 1, 1), + (2600001, 4007000, 100, 1, 1), + (2600001, 2044801, 100, 1, 1), + (2600001, 2022057, 100, 1, 1), + (2600001, 2001526, 100, 1, 1), + (2600001, 4020003, 100, 1, 1), + (2600001, 2044803, 100, 1, 1), + (2600001, 4006000, 100, 1, 1), + (2600001, 2000037, 100, 1, 1), + (2600001, 4000237, 100, 1, 1), + (2600001, 4010003, 100, 1, 1), + (2600001, 2061000, 100, 1, 1), + (2600001, 2510245, 100, 1, 1), + (2600001, 2044501, 100, 1, 1), + (2600001, 2510009, 100, 1, 1), + (2600001, 2510398, 100, 1, 1), + (6400007, 2870267, 100, 1, 1), + (2600000, 2330004, 100, 1, 1), + (2600000, 4007007, 100, 1, 1), + (2600000, 2001002, 100, 1, 1), + (2600000, 4004001, 100, 1, 1), + (2600000, 2870274, 100, 1, 1), + (2600000, 4000236, 100, 1, 1), + (2600000, 4010000, 100, 1, 1), + (2600000, 2061000, 100, 1, 1), + (2600000, 4007006, 100, 1, 1), + (2600000, 2048003, 100, 1, 1), + (2600000, 2022057, 100, 1, 1), + (2600000, 2043017, 100, 1, 1), + (2600000, 4020001, 100, 1, 1), + (2600000, 4001402, 100, 1, 1), + (2600000, 2510141, 100, 1, 1), + (2600000, 2000037, 100, 1, 1), + (2600000, 2000005, 100, 1, 1), + (2600000, 2044212, 100, 1, 1), + (2600000, 2330002, 100, 1, 1), + (2600000, 4006000, 100, 1, 1), + (2600000, 2044014, 100, 1, 1), + (2600015, 2000006, 100, 1, 1), + (2600015, 2871092, 100, 1, 1), + (2600015, 2070005, 100, 1, 1), + (2600015, 4020001, 100, 1, 1), + (2600015, 2000037, 100, 1, 1), + (2600015, 2070007, 100, 1, 1), + (2600015, 2330004, 100, 1, 1), + (2600015, 4020007, 100, 1, 1), + (2600015, 2070010, 100, 1, 1), + (2600015, 4010005, 100, 1, 1), + (2600015, 2001001, 100, 1, 1), + (2600015, 2330005, 100, 1, 1), + (2600015, 4000234, 100, 1, 1), + (2600015, 2001526, 100, 1, 1), + (2600015, 2330002, 100, 1, 1), + (2600015, 2330003, 100, 1, 1), + (2600015, 2000005, 100, 1, 1), + (2600015, 4000232, 100, 1, 1), + (2600015, 4020005, 100, 1, 1), + (2600015, 2070003, 100, 1, 1), + (2600015, 4000233, 100, 1, 1), + (2600015, 2070004, 100, 1, 1), + (2600015, 2001002, 100, 1, 1), + (2600015, 4020002, 100, 1, 1), + (2600014, 2870320, 100, 1, 1), + (2600014, 2070006, 100, 1, 1), + (2600014, 4010003, 100, 1, 1), + (2600014, 2040323, 100, 1, 1), + (2600014, 4007000, 100, 1, 1), + (2600014, 4020003, 100, 1, 1), + (2600014, 2040610, 100, 1, 1), + (2600014, 2001526, 100, 1, 1), + (2600014, 4000242, 100, 1, 1), + (2600014, 2022057, 100, 1, 1), + (2600014, 2000037, 100, 1, 1), + (2600014, 2043214, 100, 1, 1), + (2600014, 2043401, 100, 1, 1), + (2600014, 4007002, 100, 1, 1), + (2600014, 4004003, 100, 1, 1), + (2600014, 4006001, 100, 1, 1), + (2600014, 2048000, 100, 1, 1), + (2600014, 2040801, 100, 1, 1), + (2600013, 4020008, 100, 1, 1), + (2600013, 2044702, 100, 1, 1), + (2600013, 4000241, 100, 1, 1), + (2600013, 4004002, 100, 1, 1), + (2600013, 4006000, 100, 1, 1), + (2600013, 2044601, 100, 1, 1), + (2600013, 2043802, 100, 1, 1), + (2600013, 2040924, 100, 1, 1), + (2600013, 2061000, 100, 1, 1), + (2600013, 4010006, 100, 1, 1), + (2600013, 4007003, 100, 1, 1), + (2600013, 2022057, 100, 1, 1), + (2600013, 2000005, 100, 1, 1), + (2600013, 2870319, 100, 1, 1), + (2600013, 2000037, 100, 1, 1), + (2600013, 2044101, 100, 1, 1), + (2600013, 4007001, 100, 1, 1), + (2600012, 4007005, 100, 1, 1), + (2600012, 4006000, 100, 1, 1), + (2600012, 4010000, 100, 1, 1), + (2600012, 2000037, 100, 1, 1), + (2600012, 2000005, 100, 1, 1), + (2600012, 2000006, 100, 1, 1), + (2600012, 2044314, 100, 1, 1), + (2600012, 2061000, 100, 1, 1), + (2600012, 4161016, 100, 1, 1), + (2600012, 2870318, 100, 1, 1), + (2600012, 4020001, 100, 1, 1), + (2600012, 2022057, 100, 1, 1), + (2600012, 2001001, 100, 1, 1), + (2600012, 4007006, 100, 1, 1), + (2600012, 2001002, 100, 1, 1), + (2600012, 4000233, 100, 1, 1), + (2600012, 2044012, 100, 1, 1), + (2600012, 2043701, 100, 1, 1), + (2600012, 2041058, 100, 1, 1), + (2600012, 2040601, 100, 1, 1), + (2600012, 2332000, 100, 1, 1), + (2600012, 4004002, 100, 1, 1), + (2600011, 2022057, 100, 1, 1), + (2600011, 4004004, 100, 1, 1), + (2600011, 2870317, 100, 1, 1), + (2600011, 2330002, 100, 1, 1), + (2600011, 2043101, 100, 1, 1), + (2600011, 2044501, 100, 1, 1), + (2600011, 2060000, 100, 1, 1), + (2600011, 2001527, 100, 1, 1), + (2600011, 2040805, 100, 1, 1), + (2600011, 4161015, 100, 1, 1), + (2600011, 2001526, 100, 1, 1), + (2600011, 4006000, 100, 1, 1), + (2600011, 2331000, 100, 1, 1), + (2600011, 4000232, 100, 1, 1), + (2600011, 4020000, 100, 1, 1), + (2600011, 4007004, 100, 1, 1), + (2600011, 2001002, 100, 1, 1), + (2600011, 2070004, 100, 1, 1), + (2600011, 4007001, 100, 1, 1), + (2600011, 4010001, 100, 1, 1), + (2600011, 2040901, 100, 1, 1), + (2600010, 4004003, 100, 1, 1), + (2600010, 2040825, 100, 1, 1), + (2600010, 2001001, 100, 1, 1), + (2600010, 2022057, 100, 1, 1), + (2600010, 2060000, 100, 1, 1), + (2600010, 4007001, 100, 1, 1), + (2600010, 4000234, 100, 1, 1), + (2600010, 2000006, 100, 1, 1), + (2600010, 4010003, 100, 1, 1), + (2600010, 2870316, 100, 1, 1), + (2600010, 4020001, 100, 1, 1), + (2600010, 2040824, 100, 1, 1), + (2600010, 2330002, 100, 1, 1), + (2600010, 2048000, 100, 1, 1), + (2600010, 2043401, 100, 1, 1), + (2600010, 4007007, 100, 1, 1), + (2600010, 4006001, 100, 1, 1), + (2600010, 2070007, 100, 1, 1), + (2600010, 2000005, 100, 1, 1), + (2600009, 2044412, 100, 1, 1), + (2600009, 2870314, 100, 1, 1), + (2600009, 2001528, 100, 1, 1), + (2600009, 4007003, 100, 1, 1), + (2600009, 4007000, 100, 1, 1), + (2600009, 2049000, 100, 1, 1), + (2600009, 2060000, 100, 1, 1), + (2600009, 2000037, 100, 1, 1), + (2600009, 4000239, 100, 1, 1), + (2600009, 2001002, 100, 1, 1), + (2600009, 2022057, 100, 1, 1), + (2600009, 4020007, 100, 1, 1), + (2600009, 2070007, 100, 1, 1), + (2600009, 2040026, 100, 1, 1), + (2600009, 2001526, 100, 1, 1), + (2600009, 4004001, 100, 1, 1), + (2600009, 2043017, 100, 1, 1), + (2600009, 4000240, 100, 1, 1), + (2600009, 2040707, 100, 1, 1), + (2600009, 4010006, 100, 1, 1), + (2600009, 4006001, 100, 1, 1), + (2220110, 2044002, 100, 1, 1), + (2220110, 4020006, 100, 1, 1), + (2220110, 2070008, 100, 1, 1), + (2220110, 2000003, 100, 1, 1), + (2220110, 4010006, 100, 1, 1), + (2220110, 4000009, 100, 1, 1), + (2220110, 2040900, 100, 1, 1), + (2220110, 2870044, 100, 1, 1), + (2220110, 2040403, 100, 1, 1), + (2220110, 2000001, 100, 1, 1), + (2220110, 2000002, 100, 1, 1), + (2220110, 2048000, 100, 1, 1), + (2220110, 4020005, 100, 1, 1), + (2220110, 2022016, 100, 1, 1), + (2220110, 2060000, 100, 1, 1), + (2600008, 4020005, 100, 1, 1), + (2600008, 2000004, 100, 1, 1), + (2600008, 4007007, 100, 1, 1), + (2600008, 4004000, 100, 1, 1), + (2600008, 4000238, 100, 1, 1), + (2600008, 2870313, 100, 1, 1), + (2600008, 2000006, 100, 1, 1), + (2600008, 4006000, 100, 1, 1), + (2600008, 2044602, 100, 1, 1), + (2600008, 2001527, 100, 1, 1), + (2600008, 2048001, 100, 1, 1), + (2600008, 2001001, 100, 1, 1), + (2600008, 2060000, 100, 1, 1), + (2600008, 2044701, 100, 1, 1), + (2600008, 2040318, 100, 1, 1), + (2600008, 4010005, 100, 1, 1), + (2600008, 4007005, 100, 1, 1), + (2600008, 2043401, 100, 1, 1), + (2600023, 2001002, 100, 1, 1), + (2600023, 2870340, 100, 1, 1), + (2600023, 4004002, 100, 1, 1), + (2600023, 4020000, 100, 1, 1), + (2600023, 4006001, 100, 1, 1), + (2600023, 2043114, 100, 1, 1), + (2600023, 4007001, 100, 1, 1), + (2600023, 2048000, 100, 1, 1), + (2600023, 4000245, 100, 1, 1), + (2600023, 2001001, 100, 1, 1), + (2600023, 4001402, 100, 1, 1), + (2600023, 4007000, 100, 1, 1), + (2600023, 4001077, 100, 1, 1), + (2600023, 2070005, 100, 1, 1), + (2600023, 2000006, 100, 1, 1), + (2600023, 4000268, 100, 1, 1), + (2600023, 2043002, 100, 1, 1), + (2600023, 2060000, 100, 1, 1), + (2600023, 4000244, 100, 1, 1), + (2600023, 2070007, 100, 1, 1), + (2600023, 2043212, 100, 1, 1), + (2600023, 2044301, 100, 1, 1), + (2600023, 2022057, 100, 1, 1), + (2600023, 4010001, 100, 1, 1), + (2600022, 2044601, 100, 1, 1), + (2600022, 4001402, 100, 1, 1), + (2600022, 2044701, 100, 1, 1), + (2600022, 2044401, 100, 1, 1), + (2600022, 2044501, 100, 1, 1), + (2600022, 2045301, 100, 1, 1), + (2600022, 2043201, 100, 1, 1), + (2600022, 2045201, 100, 1, 1), + (2600022, 2044201, 100, 1, 1), + (2600022, 2044901, 100, 1, 1), + (2600022, 2043212, 100, 1, 1), + (2600022, 2000037, 100, 1, 1), + (2600022, 2044301, 100, 1, 1), + (2600022, 4000245, 100, 1, 1), + (2600022, 2042301, 100, 1, 1), + (2600022, 4000235, 100, 1, 1), + (2600022, 2040621, 100, 1, 1), + (2600022, 2043301, 100, 1, 1), + (2600022, 2043801, 100, 1, 1), + (2600022, 4004002, 100, 1, 1), + (2600022, 2040901, 100, 1, 1), + (2600022, 2043001, 100, 1, 1), + (2600022, 2044014, 100, 1, 1), + (2600022, 2043112, 100, 1, 1), + (2600022, 2044001, 100, 1, 1), + (2600022, 2044101, 100, 1, 1), + (2600022, 2040805, 100, 1, 1), + (2600022, 2870345, 100, 1, 1), + (2600022, 4004003, 100, 1, 1), + (2600022, 4000244, 100, 1, 1), + (2600022, 4004001, 100, 1, 1), + (2600022, 2044801, 100, 1, 1), + (2600022, 2022057, 100, 1, 1), + (2600022, 2001527, 100, 1, 1), + (2600022, 2040328, 100, 1, 1), + (2600022, 2043701, 100, 1, 1), + (2600022, 2040824, 100, 1, 1), + (2600022, 4001076, 100, 1, 1), + (2600022, 4004000, 100, 1, 1), + (2600022, 2043101, 100, 1, 1), + (2600022, 2049000, 100, 1, 1), + (2600022, 2000004, 100, 1, 1), + (2600021, 2001001, 100, 1, 1), + (2600021, 4006000, 100, 1, 1), + (2600021, 2040320, 100, 1, 1), + (2600021, 4000271, 100, 1, 1), + (2600021, 4004003, 100, 1, 1), + (2600021, 2001528, 100, 1, 1), + (2600021, 2870347, 100, 1, 1), + (2600021, 4000245, 100, 1, 1), + (2600021, 4021020, 100, 1, 1), + (2600021, 2044901, 100, 1, 1), + (2600021, 2044104, 100, 1, 1), + (2600021, 2000037, 100, 1, 1), + (2600021, 4007004, 100, 1, 1), + (2600021, 2043019, 100, 1, 1), + (2600021, 4001402, 100, 1, 1), + (2600021, 4020007, 100, 1, 1), + (2600021, 4010005, 100, 1, 1), + (2600021, 2044201, 100, 1, 1), + (2600021, 2040707, 100, 1, 1), + (2600021, 2061000, 100, 1, 1), + (2600021, 4000244, 100, 1, 1), + (2600021, 4006001, 100, 1, 1), + (2600020, 2000036, 100, 1, 1), + (2600020, 4000244, 100, 1, 1), + (2600020, 4006001, 100, 1, 1), + (2600020, 2049000, 100, 1, 1), + (2600020, 2001002, 100, 1, 1), + (2600020, 4010000, 100, 1, 1), + (2600020, 2044702, 100, 1, 1), + (2600020, 4007000, 100, 1, 1), + (2600020, 4020004, 100, 1, 1), + (2600020, 4000272, 100, 1, 1), + (2600020, 4000245, 100, 1, 1), + (2600020, 4001402, 100, 1, 1), + (2600020, 4021020, 100, 1, 1), + (2600020, 2061000, 100, 1, 1), + (2600020, 4007005, 100, 1, 1), + (2600020, 4004001, 100, 1, 1), + (2600020, 2022057, 100, 1, 1), + (2600020, 2001526, 100, 1, 1), + (2600020, 2040419, 100, 1, 1), + (2600020, 2000037, 100, 1, 1), + (2600020, 4006000, 100, 1, 1), + (2600020, 2048003, 100, 1, 1), + (2600019, 4004003, 100, 1, 1), + (2600019, 2001526, 100, 1, 1), + (2600019, 2043201, 100, 1, 1), + (2600019, 2040901, 100, 1, 1), + (2600019, 4000244, 100, 1, 1), + (2600019, 4007005, 100, 1, 1), + (2600019, 2000037, 100, 1, 1), + (2600019, 4020008, 100, 1, 1), + (2600019, 4000265, 100, 1, 1), + (2600019, 4020006, 100, 1, 1), + (2600019, 4000245, 100, 1, 1), + (2600019, 2000005, 100, 1, 1), + (2600019, 2870328, 100, 1, 1), + (2600019, 4001402, 100, 1, 1), + (2600019, 4007004, 100, 1, 1), + (2600019, 2044012, 100, 1, 1), + (2600019, 2022057, 100, 1, 1), + (2600019, 2001002, 100, 1, 1), + (2600018, 4000244, 100, 1, 1), + (2600018, 2870327, 100, 1, 1), + (2600018, 2061000, 100, 1, 1), + (2600018, 4007003, 100, 1, 1), + (2600018, 4004002, 100, 1, 1), + (2600018, 2000037, 100, 1, 1), + (2600018, 2044001, 100, 1, 1), + (2600018, 4000245, 100, 1, 1), + (2600018, 2043101, 100, 1, 1), + (2600018, 4020008, 100, 1, 1), + (2600018, 4000264, 100, 1, 1), + (2600018, 4020003, 100, 1, 1), + (2600018, 2043401, 100, 1, 1), + (2600018, 2045201, 100, 1, 1), + (2600018, 2022057, 100, 1, 1), + (2600018, 2000005, 100, 1, 1), + (2600018, 4007000, 100, 1, 1), + (2600018, 4001402, 100, 1, 1), + (2600017, 2000037, 100, 1, 1), + (2600017, 2043601, 100, 1, 1), + (2600017, 2040601, 100, 1, 1), + (2600017, 4010001, 100, 1, 1), + (2600017, 2070005, 100, 1, 1), + (2600017, 2060000, 100, 1, 1), + (2600017, 2061000, 100, 1, 1), + (2600017, 4000244, 100, 1, 1), + (2600017, 4020005, 100, 1, 1), + (2600017, 4000245, 100, 1, 1), + (2600017, 2001001, 100, 1, 1), + (2600017, 4000263, 100, 1, 1), + (2600017, 2001002, 100, 1, 1), + (2600017, 4007002, 100, 1, 1), + (2600017, 4004001, 100, 1, 1), + (2600017, 2043112, 100, 1, 1), + (2600017, 2870326, 100, 1, 1), + (2600017, 2044101, 100, 1, 1), + (2600017, 4007000, 100, 1, 1), + (2600017, 2022057, 100, 1, 1), + (2600017, 2001527, 100, 1, 1), + (2600017, 4001402, 100, 1, 1), + (2600016, 2048000, 100, 1, 1), + (2600016, 4020001, 100, 1, 1), + (2600016, 2000005, 100, 1, 1), + (2600016, 4004000, 100, 1, 1), + (2600016, 2870325, 100, 1, 1), + (2600016, 2001527, 100, 1, 1), + (2600016, 4007000, 100, 1, 1), + (2600016, 4007003, 100, 1, 1), + (2600016, 2043017, 100, 1, 1), + (2600016, 2001001, 100, 1, 1), + (2600016, 2022057, 100, 1, 1), + (2600016, 2000006, 100, 1, 1), + (2600016, 4001402, 100, 1, 1), + (2600016, 4000245, 100, 1, 1), + (2600016, 2044314, 100, 1, 1), + (2600016, 2044902, 100, 1, 1), + (2600016, 4000262, 100, 1, 1), + (2600016, 4020007, 100, 1, 1), + (2600016, 4000244, 100, 1, 1), + (4230200, 4031265, 100, 1, 1), + (4230200, 4000158, 100, 1, 1), + (4230200, 2870156, 100, 1, 1), + (2600030, 2870366, 100, 1, 1), + (2600030, 2040824, 100, 1, 1), + (2600030, 2060000, 100, 1, 1), + (2600030, 2001527, 100, 1, 1), + (2600030, 2044012, 100, 1, 1), + (2600030, 4006000, 100, 1, 1), + (2600030, 2040927, 100, 1, 1), + (2600030, 2001001, 100, 1, 1), + (2600030, 4000269, 100, 1, 1), + (2600030, 2040801, 100, 1, 1), + (2600030, 2048000, 100, 1, 1), + (2600030, 2070003, 100, 1, 1), + (2600030, 2044212, 100, 1, 1), + (2600030, 2001002, 100, 1, 1), + (2600030, 2000004, 100, 1, 1), + (2600030, 2000036, 100, 1, 1), + (2600030, 2044412, 100, 1, 1), + (2600030, 2048002, 100, 1, 1), + (2600030, 2044101, 100, 1, 1), + (2600030, 2044112, 100, 1, 1), + (2600030, 2061000, 100, 1, 1), + (2600030, 2001526, 100, 1, 1), + (2600030, 2001528, 100, 1, 1), + (2600030, 4000268, 100, 1, 1), + (2600030, 2049100, 100, 1, 1), + (2600030, 4000270, 100, 1, 1), + (2600030, 2044312, 100, 1, 1), + (2600030, 2000005, 100, 1, 1), + (2600030, 4006001, 100, 1, 1), + (4230201, 2870157, 100, 1, 1), + (4230201, 4000159, 100, 1, 1), + (8950001, 4001843, 100, 1, 1), + (8950001, 4310029, 100, 1, 1), + (8950001, 4001877, 100, 1, 1), + (8950001, 4310029, 100, 1, 1), + (8950001, 2433593, 100, 1, 1), + (8950001, 2000005, 100, 1, 1), + (8950001, 2433103, 100, 1, 1), + (2600029, 4004004, 100, 1, 1), + (2600029, 2000006, 100, 1, 1), + (2600029, 2043701, 100, 1, 1), + (2600029, 4020002, 100, 1, 1), + (2600029, 4000273, 100, 1, 1), + (2600029, 4006001, 100, 1, 1), + (2600029, 4021020, 100, 1, 1), + (2600029, 2070003, 100, 1, 1), + (2600029, 2061000, 100, 1, 1), + (2600029, 4020006, 100, 1, 1), + (2600029, 4007002, 100, 1, 1), + (2600029, 2060000, 100, 1, 1), + (2600029, 2048003, 100, 1, 1), + (2600029, 4000245, 100, 1, 1), + (2600029, 4001402, 100, 1, 1), + (2600029, 4007004, 100, 1, 1), + (2600029, 2001001, 100, 1, 1), + (2600029, 4000244, 100, 1, 1), + (2600029, 4006000, 100, 1, 1), + (2600029, 2022057, 100, 1, 1), + (2600029, 2044212, 100, 1, 1), + (2600029, 2870349, 100, 1, 1), + (2600029, 2044214, 100, 1, 1), + (8950002, 4001877, 100, 1, 1), + (8950002, 4310029, 100, 1, 1), + (8950002, 2433593, 100, 1, 1), + (8950002, 4001843, 100, 1, 1), + (8950002, 4310029, 100, 1, 1), + (8950002, 2433103, 100, 1, 1), + (8950002, 2000005, 100, 1, 1), + (2600028, 4021020, 100, 1, 1), + (2600028, 2044701, 100, 1, 1), + (2600028, 4006000, 100, 1, 1), + (2600028, 2044902, 100, 1, 1), + (2600028, 2044602, 100, 1, 1), + (2600028, 4007007, 100, 1, 1), + (2600028, 4000274, 100, 1, 1), + (2600028, 4006001, 100, 1, 1), + (2600028, 2070003, 100, 1, 1), + (2600028, 2022057, 100, 1, 1), + (2600028, 4000244, 100, 1, 1), + (2600028, 2040805, 100, 1, 1), + (2600028, 2000005, 100, 1, 1), + (2600028, 4001402, 100, 1, 1), + (2600028, 4010001, 100, 1, 1), + (2600028, 4020001, 100, 1, 1), + (2600028, 2001001, 100, 1, 1), + (2600028, 4000245, 100, 1, 1), + (2600028, 4007003, 100, 1, 1), + (2600028, 4004001, 100, 1, 1), + (2600028, 2001002, 100, 1, 1), + (2600028, 2000006, 100, 1, 1), + (2600028, 2870348, 100, 1, 1), + (2600028, 2049000, 100, 1, 1), + (2600027, 4001402, 100, 1, 1), + (2600027, 2049100, 100, 1, 1), + (2600027, 4001075, 100, 1, 1), + (2600027, 4007005, 100, 1, 1), + (2600027, 2870339, 100, 1, 1), + (2600027, 2000036, 100, 1, 1), + (2600027, 2044802, 100, 1, 1), + (2600027, 2000005, 100, 1, 1), + (2600027, 2000006, 100, 1, 1), + (2600027, 4007003, 100, 1, 1), + (2600027, 4004004, 100, 1, 1), + (2600027, 4000267, 100, 1, 1), + (2600027, 2044601, 100, 1, 1), + (2600027, 2040302, 100, 1, 1), + (2600027, 2040801, 100, 1, 1), + (2600027, 4021020, 100, 1, 1), + (2600027, 4010001, 100, 1, 1), + (2600027, 2000037, 100, 1, 1), + (2600027, 4000245, 100, 1, 1), + (2600027, 2001002, 100, 1, 1), + (2600027, 4000244, 100, 1, 1), + (2600027, 2001001, 100, 1, 1), + (2600027, 2044501, 100, 1, 1), + (2600027, 2022057, 100, 1, 1), + (2600027, 4020002, 100, 1, 1), + (2600026, 4000244, 100, 1, 1), + (2600026, 4001075, 100, 1, 1), + (2600026, 2001526, 100, 1, 1), + (2600026, 2048001, 100, 1, 1), + (2600026, 4007000, 100, 1, 1), + (2600026, 4007007, 100, 1, 1), + (2600026, 2044801, 100, 1, 1), + (2600026, 2000006, 100, 1, 1), + (2600026, 4001402, 100, 1, 1), + (2600026, 2043017, 100, 1, 1), + (2600026, 4010002, 100, 1, 1), + (2600026, 4004004, 100, 1, 1), + (2600026, 4010005, 100, 1, 1), + (2600026, 2870338, 100, 1, 1), + (2600026, 2000005, 100, 1, 1), + (2600026, 4000245, 100, 1, 1), + (2600026, 2022057, 100, 1, 1), + (2600026, 4000266, 100, 1, 1), + (2600025, 4010005, 100, 1, 1), + (2600025, 4001402, 100, 1, 1), + (2600025, 2000005, 100, 1, 1), + (2600025, 2040924, 100, 1, 1), + (2600025, 4020002, 100, 1, 1), + (2600025, 2045301, 100, 1, 1), + (2600025, 4007001, 100, 1, 1), + (2600025, 2044412, 100, 1, 1), + (2600025, 2000006, 100, 1, 1), + (2600025, 2044402, 100, 1, 1), + (2600025, 2060000, 100, 1, 1), + (2600025, 4000244, 100, 1, 1), + (2600025, 2001526, 100, 1, 1), + (2600025, 2040302, 100, 1, 1), + (2600025, 4000245, 100, 1, 1), + (2600025, 4007007, 100, 1, 1), + (2600025, 2870342, 100, 1, 1), + (2600025, 4000270, 100, 1, 1), + (2600025, 4001077, 100, 1, 1), + (2600025, 2022057, 100, 1, 1), + (2600025, 4021020, 100, 1, 1), + (2600025, 2000036, 100, 1, 1), + (2600025, 2330005, 100, 1, 1), + (2600025, 4004000, 100, 1, 1), + (2600025, 4006000, 100, 1, 1), + (2600025, 2044401, 100, 1, 1), + (2600025, 4006001, 100, 1, 1), + (2600025, 2061000, 100, 1, 1), + (2600024, 4010004, 100, 1, 1), + (2600024, 2001527, 100, 1, 1), + (2600024, 2044112, 100, 1, 1), + (2600024, 2022057, 100, 1, 1), + (2600024, 2000005, 100, 1, 1), + (2600024, 4004003, 100, 1, 1), + (2600024, 2000006, 100, 1, 1), + (2600024, 2070009, 100, 1, 1), + (2600024, 2870341, 100, 1, 1), + (2600024, 4001077, 100, 1, 1), + (2600024, 2070004, 100, 1, 1), + (2600024, 4000245, 100, 1, 1), + (2600024, 2043112, 100, 1, 1), + (2600024, 4000244, 100, 1, 1), + (2600024, 2001002, 100, 1, 1), + (2600024, 2000037, 100, 1, 1), + (2600024, 4007007, 100, 1, 1), + (2600024, 4001402, 100, 1, 1), + (2600024, 4007001, 100, 1, 1), + (2600024, 4020005, 100, 1, 1), + (2600024, 4006001, 100, 1, 1), + (2600024, 2043201, 100, 1, 1), + (2600024, 4000269, 100, 1, 1), + (2600103, 2870028, 100, 1, 1), + (2600103, 2512053, 100, 1, 1), + (2600103, 2001001, 100, 1, 1), + (2600103, 2070003, 100, 1, 1), + (2600103, 4000330, 100, 1, 1), + (2600103, 2045201, 100, 1, 1), + (2600103, 4020004, 100, 1, 1), + (2600103, 2044314, 100, 1, 1), + (2600103, 2048002, 100, 1, 1), + (2600103, 2044001, 100, 1, 1), + (2600103, 4010007, 100, 1, 1), + (2600103, 2022155, 100, 1, 1), + (2600103, 2001002, 100, 1, 1), + (2600103, 2043701, 100, 1, 1), + (2600103, 2070004, 100, 1, 1), + (2600103, 2061000, 100, 1, 1), + (2600103, 4010003, 100, 1, 1), + (2600103, 2001527, 100, 1, 1), + (2600103, 2001526, 100, 1, 1), + (2600102, 2001001, 100, 1, 1), + (2600102, 4000329, 100, 1, 1), + (2600102, 2870027, 100, 1, 1), + (2600102, 4010002, 100, 1, 1), + (2600102, 4010007, 100, 1, 1), + (2600102, 2044012, 100, 1, 1), + (2600102, 2000006, 100, 1, 1), + (2600102, 2044312, 100, 1, 1), + (2600102, 2061000, 100, 1, 1), + (2600102, 2048003, 100, 1, 1), + (2600102, 2040705, 100, 1, 1), + (2600102, 2070004, 100, 1, 1), + (2600102, 2022155, 100, 1, 1), + (2600102, 4020004, 100, 1, 1), + (2600102, 2044102, 100, 1, 1), + (2600102, 2001527, 100, 1, 1), + (7120110, 4021033, 100, 1, 1), + (7120110, 4021032, 100, 1, 1), + (7120110, 4021034, 100, 1, 1), + (7120110, 4021035, 100, 1, 1), + (7120110, 4021031, 100, 1, 1), + (7120110, 4001755, 100, 1, 1), + (7120111, 4021033, 100, 1, 1), + (7120111, 4021031, 100, 1, 1), + (7120111, 4021032, 100, 1, 1), + (7120111, 4021034, 100, 1, 1), + (7120111, 4021035, 100, 1, 1), + (7120111, 4001756, 100, 1, 1), + (2600105, 4000329, 100, 1, 1), + (2600105, 4010002, 100, 1, 1), + (2600105, 2040924, 100, 1, 1), + (2600105, 2001527, 100, 1, 1), + (2600105, 2040927, 100, 1, 1), + (2600105, 2040824, 100, 1, 1), + (2600105, 2045301, 100, 1, 1), + (2600105, 2040501, 100, 1, 1), + (2600105, 4000331, 100, 1, 1), + (2600105, 2022155, 100, 1, 1), + (2600105, 2044101, 100, 1, 1), + (2600105, 4010007, 100, 1, 1), + (2600105, 2040004, 100, 1, 1), + (2600105, 2040801, 100, 1, 1), + (2600105, 2041007, 100, 1, 1), + (2600105, 4000330, 100, 1, 1), + (2600105, 2040504, 100, 1, 1), + (2600105, 2043801, 100, 1, 1), + (2600105, 2045201, 100, 1, 1), + (2600105, 2044001, 100, 1, 1), + (2600105, 2048004, 100, 1, 1), + (2600105, 2044201, 100, 1, 1), + (2600105, 2870091, 100, 1, 1), + (2600105, 2048000, 100, 1, 1), + (2600105, 2043201, 100, 1, 1), + (2600105, 4020003, 100, 1, 1), + (2600105, 2044601, 100, 1, 1), + (2600105, 2044501, 100, 1, 1), + (2600105, 2000001, 100, 1, 1), + (2600105, 2000003, 100, 1, 1), + (2600105, 2043701, 100, 1, 1), + (2600104, 4020005, 100, 1, 1), + (2600104, 2044412, 100, 1, 1), + (2600104, 2001001, 100, 1, 1), + (2600104, 2043214, 100, 1, 1), + (2600104, 2512059, 100, 1, 1), + (2600104, 2043401, 100, 1, 1), + (2600104, 2044901, 100, 1, 1), + (2600104, 2000002, 100, 1, 1), + (2600104, 2001526, 100, 1, 1), + (2600104, 4000331, 100, 1, 1), + (2600104, 2870029, 100, 1, 1), + (2600104, 4004001, 100, 1, 1), + (2600104, 4010007, 100, 1, 1), + (2600104, 4020006, 100, 1, 1), + (2600104, 2022155, 100, 1, 1), + (2600104, 2000006, 100, 1, 1), + (2130100, 2000000, 100, 1, 1), + (2130100, 2040503, 100, 1, 1), + (2130100, 2060000, 100, 1, 1), + (2130100, 2000001, 100, 1, 1), + (2130100, 2040417, 100, 1, 1), + (2130100, 2044202, 100, 1, 1), + (2130100, 4010001, 100, 1, 1), + (2130100, 2040420, 100, 1, 1), + (2130100, 2870036, 100, 1, 1), + (2130100, 4020007, 100, 1, 1), + (2130100, 4000018, 100, 1, 1), + (2130100, 4006001, 100, 1, 1), + (2130103, 4020006, 100, 1, 1), + (2130103, 2000003, 100, 1, 1), + (2130103, 2040926, 100, 1, 1), + (2130103, 2040000, 100, 1, 1), + (2130103, 2070000, 100, 1, 1), + (2130103, 2000002, 100, 1, 1), + (2130103, 2870037, 100, 1, 1), + (2130103, 4000034, 100, 1, 1), + (2130103, 2040614, 100, 1, 1), + (2130103, 4010002, 100, 1, 1), + (8140000, 4006001, 100, 1, 1), + (8140000, 2870312, 100, 1, 1), + (8140000, 2512110, 100, 1, 1), + (8140000, 4021034, 100, 1, 1), + (8140000, 2512276, 100, 1, 1), + (8140000, 4021035, 100, 1, 1), + (8140000, 2000037, 100, 1, 1), + (8140000, 2710002, 100, 1, 1), + (8140000, 2001528, 100, 1, 1), + (8140000, 2940000, 100, 1, 1), + (8140000, 2512243, 100, 1, 1), + (8140000, 2431174, 100, 1, 1), + (8140000, 4003005, 100, 1, 1), + (8140000, 2512267, 100, 1, 1), + (8140000, 2511011, 100, 1, 1), + (8140000, 2040727, 100, 1, 1), + (8140000, 4000054, 100, 1, 1), + (8140000, 4021031, 100, 1, 1), + (8140000, 2512106, 100, 1, 1), + (8140000, 2049401, 100, 1, 1), + (8140000, 2512274, 100, 1, 1), + (8140000, 2430692, 100, 1, 1), + (8140000, 2070006, 100, 1, 1), + (8140000, 4021032, 100, 1, 1), + (8140000, 2512269, 100, 1, 1), + (8140000, 4021033, 100, 1, 1), + (8140000, 2590004, 100, 1, 1), + (8140000, 2512272, 100, 1, 1), + (8880167, 2433103, 100, 1, 1), + (8880167, 2000005, 100, 1, 1), + (8880167, 4001879, 100, 1, 1), + (8880167, 4310029, 100, 1, 1), + (8880167, 2436039, 100, 1, 1), + (9300013, 2430115, 100, 1, 1), + (4300000, 4000530, 100, 1, 1), + (4300000, 2870171, 100, 1, 1), + (8920106, 2000005, 100, 1, 1), + (8920106, 4310064, 100, 1, 1), + (8920106, 4310029, 100, 1, 1), + (8920106, 3010514, 100, 1, 1), + (8920106, 2433103, 100, 1, 1), + (8920106, 2433591, 100, 1, 1), + (4300002, 4000532, 100, 1, 1), + (4300002, 2870172, 100, 1, 1), + (9300014, 2430115, 100, 1, 1), + (9001005, 4031013, 9000, 1, 1), + (9300009, 2430115, 100, 1, 1), + (4300004, 4000534, 100, 1, 1), + (4300004, 2870173, 100, 1, 1), + (9300008, 2430115, 100, 1, 1), + (4300007, 4000526, 100, 1, 1), + (4300007, 2870175, 100, 1, 1), + (4300006, 4000525, 100, 1, 1), + (4300006, 2870174, 100, 1, 1), + (9001006, 4031013, 9000, 1, 1), + (9300010, 2430115, 100, 1, 1), + (4300009, 2870177, 100, 1, 1), + (4300009, 4000528, 100, 1, 1), + (9300005, 2430115, 100, 1, 1), + (4300008, 2870176, 100, 1, 1), + (4300008, 4000527, 100, 1, 1), + (4300011, 4000536, 100, 1, 1), + (4300011, 2870179, 100, 1, 1), + (9300007, 2430115, 100, 1, 1), + (4300010, 4000529, 100, 1, 1), + (4300010, 2870178, 100, 1, 1), + (9300006, 2430115, 100, 1, 1), + (4300013, 2870181, 100, 1, 1), + (4300013, 2431655, 100, 1, 1), + (4300012, 4000537, 100, 1, 1), + (4300012, 2870180, 100, 1, 1), + (4090000, 2870134, 100, 1, 1), + (4090000, 2431174, 100, 1, 1), + (4090000, 4000039, 100, 1, 1), + (4090000, 4033055, 100, 1, 1), + (8920103, 2000005, 100, 1, 1), + (8920103, 3010514, 100, 1, 1), + (8920103, 4310029, 100, 1, 1), + (8920103, 2433103, 100, 1, 1), + (8920103, 2433591, 100, 1, 1), + (8920103, 4310064, 100, 1, 1), + (9001021, 4000589, 100, 1, 1), + (9001020, 4000588, 100, 1, 1), + (8880177, 4001879, 100, 1, 1), + (8880177, 2433103, 100, 1, 1), + (8880177, 2000005, 100, 1, 1), + (8880177, 4310029, 100, 1, 1), + (8880177, 2436039, 100, 1, 1), + (9001023, 4000591, 100, 1, 1), + (210100, 2022053, 100, 1, 1), + (210100, 2061000, 100, 1, 1), + (210100, 4000010, 100, 1, 1), + (210100, 2022054, 100, 1, 1), + (210100, 2872038, 100, 1, 1), + (210100, 4020005, 100, 1, 1), + (210100, 4000004, 100, 1, 1), + (210100, 2000001, 100, 1, 1), + (210100, 2000003, 100, 1, 1), + (210100, 4010005, 100, 1, 1), + (210100, 2010009, 100, 1, 1), + (210100, 2022055, 100, 1, 1), + (9001022, 4000590, 100, 1, 1), + (9001009, 4032101, 100, 1, 1), + (6220000, 4000032, 100, 1, 1), + (6220000, 4000033, 100, 1, 1), + (9300018, 4033920, 100, 1, 1), + (9000001, 4031013, 9000, 1, 1), + (9001024, 2870390, 100, 1, 1), + (9001024, 4032326, 100, 1, 1), + (9001027, 4000593, 100, 1, 1), + (5200002, 2870216, 100, 1, 1), + (5200002, 4000085, 100, 1, 1), + (9001028, 4000594, 100, 1, 1), + (5200001, 2870215, 100, 1, 1), + (5200001, 4000084, 100, 1, 1), + (5200000, 4031802, 100, 1, 1), + (5200000, 2001002, 100, 1, 1), + (5200000, 2001001, 100, 1, 1), + (5200000, 2431174, 100, 1, 1), + (5200000, 4021034, 100, 1, 1), + (5200000, 4021032, 100, 1, 1), + (5200000, 2590004, 100, 1, 1), + (5200000, 2870214, 100, 1, 1), + (5200000, 4021033, 100, 1, 1), + (5200000, 4021035, 100, 1, 1), + (4230300, 4021032, 100, 1, 1), + (4230300, 2000037, 100, 1, 1), + (4230300, 2870158, 100, 1, 1), + (4230300, 4021031, 100, 1, 1), + (4230300, 2431174, 100, 1, 1), + (4230300, 2590004, 100, 1, 1), + (4230300, 4021034, 100, 1, 1), + (4230300, 4021035, 100, 1, 1), + (4230300, 4034629, 100, 1, 1), + (4230300, 4034633, 100, 1, 1), + (4230300, 4021033, 100, 1, 1), + (4230300, 2001528, 100, 1, 1), + (3210450, 4000153, 100, 1, 1), + (3210450, 2870088, 100, 1, 1), + (2300100, 4020000, 100, 1, 1), + (2300100, 2040024, 100, 1, 1), + (2300100, 2060000, 100, 1, 1), + (2300100, 4000042, 100, 1, 1), + (2300100, 2001535, 100, 1, 1), + (2300100, 2044110, 100, 1, 1), + (2300100, 4003004, 100, 1, 1), + (2300100, 2044010, 100, 1, 1), + (2300100, 2070000, 100, 1, 1), + (2300100, 2040800, 100, 1, 1), + (2300100, 2870060, 100, 1, 1), + (2300100, 4010001, 100, 1, 1), + (2300100, 2000000, 100, 1, 1), + (6230200, 2001002, 100, 1, 1), + (6230200, 4000057, 100, 1, 1), + (6230200, 2434021, 100, 1, 1), + (6230200, 2001001, 100, 1, 1), + (6230200, 2590004, 100, 1, 1), + (8870004, 4021035, 100, 1, 1), + (8870004, 4021034, 100, 1, 1), + (8870004, 4021033, 100, 1, 1), + (8870004, 4021032, 100, 1, 1), + (8870004, 4021031, 100, 1, 1), + (8144008, 4021032, 100, 1, 1), + (8144008, 4033176, 100, 1, 1), + (8144008, 4021031, 100, 1, 1), + (8144008, 4000678, 100, 1, 1), + (8144008, 4001687, 100, 1, 1), + (8144008, 4001686, 100, 1, 1), + (8144008, 4021035, 100, 1, 1), + (8144008, 4021034, 100, 1, 1), + (8144008, 4021033, 100, 1, 1), + (8144008, 4001685, 100, 1, 1), + (8870003, 4021035, 100, 1, 1), + (8870003, 4021032, 100, 1, 1), + (8870003, 4021033, 100, 1, 1), + (8870003, 4021031, 100, 1, 1), + (8870003, 4021034, 100, 1, 1), + (8870002, 4021032, 100, 1, 1), + (8870002, 4021035, 100, 1, 1), + (8870002, 4021031, 100, 1, 1), + (8870002, 4021033, 100, 1, 1), + (8870002, 4021034, 100, 1, 1), + (8870001, 4021031, 100, 1, 1), + (8870001, 4021032, 100, 1, 1), + (8870001, 4021034, 100, 1, 1), + (8870001, 4021033, 100, 1, 1), + (8870001, 4021035, 100, 1, 1), + (8144004, 4021031, 100, 1, 1), + (8144004, 4000564, 100, 1, 1), + (8144004, 4001687, 100, 1, 1), + (8144004, 4021034, 100, 1, 1), + (8144004, 4001686, 100, 1, 1), + (8144004, 4021033, 100, 1, 1), + (8144004, 4001685, 100, 1, 1), + (8144004, 4021032, 100, 1, 1), + (8144004, 4021035, 100, 1, 1), + (8144004, 4033176, 100, 1, 1), + (3110102, 2001002, 100, 1, 1), + (3110102, 4021032, 100, 1, 1), + (3110102, 2870070, 100, 1, 1), + (3110102, 2431174, 100, 1, 1), + (3110102, 4021035, 100, 1, 1), + (3110102, 4021033, 100, 1, 1), + (3110102, 4021034, 100, 1, 1), + (3110102, 2001001, 100, 1, 1), + (3110102, 4000095, 100, 1, 1), + (3110102, 2590004, 100, 1, 1), + (8144005, 4001686, 100, 1, 1), + (8144005, 4000563, 100, 1, 1), + (8144005, 4021033, 100, 1, 1), + (8144005, 4001687, 100, 1, 1), + (8144005, 4021034, 100, 1, 1), + (8144005, 4021035, 100, 1, 1), + (8144005, 4033176, 100, 1, 1), + (8144005, 4021031, 100, 1, 1), + (8144005, 4021032, 100, 1, 1), + (8144005, 4001685, 100, 1, 1), + (8144006, 4021032, 100, 1, 1), + (8144006, 4033176, 100, 1, 1), + (8144006, 4000565, 100, 1, 1), + (8144006, 4001686, 100, 1, 1), + (8144006, 4021035, 100, 1, 1), + (8144006, 4021033, 100, 1, 1), + (8144006, 4001685, 100, 1, 1), + (8144006, 4001687, 100, 1, 1), + (8144006, 4021031, 100, 1, 1), + (8144006, 4021034, 100, 1, 1), + (3110100, 2430692, 100, 1, 1), + (3110100, 4032463, 100, 1, 1), + (3110100, 2001527, 100, 1, 1), + (3110100, 2590004, 100, 1, 1), + (3110100, 2001526, 100, 1, 1), + (3110100, 4000032, 100, 1, 1), + (3110100, 2431174, 100, 1, 1), + (3110100, 2710002, 100, 1, 1), + (3110100, 2870068, 100, 1, 1), + (3110100, 4031164, 100, 1, 1), + (8144007, 4021035, 100, 1, 1), + (8144007, 4001685, 100, 1, 1), + (8144007, 4021032, 100, 1, 1), + (8144007, 4021033, 100, 1, 1), + (8144007, 4033176, 100, 1, 1), + (8144007, 4001687, 100, 1, 1), + (8144007, 4000677, 100, 1, 1), + (8144007, 4021034, 100, 1, 1), + (8144007, 4021031, 100, 1, 1), + (8144007, 4001686, 100, 1, 1), + (8144000, 4021031, 100, 1, 1), + (8144000, 4021034, 100, 1, 1), + (8144000, 4000561, 100, 1, 1), + (8144000, 4021035, 100, 1, 1), + (8144000, 4021032, 100, 1, 1), + (8144000, 4021033, 100, 1, 1), + (8144001, 4001686, 100, 1, 1), + (8144001, 4000562, 100, 1, 1), + (8144001, 4021033, 100, 1, 1), + (8144001, 4021035, 100, 1, 1), + (8144001, 4001687, 100, 1, 1), + (8144001, 4021034, 100, 1, 1), + (8144001, 4021031, 100, 1, 1), + (8144001, 4001685, 100, 1, 1), + (8144001, 4021032, 100, 1, 1), + (8144001, 4033177, 100, 1, 1), + (8144002, 4001686, 100, 1, 1), + (8144002, 4021032, 100, 1, 1), + (8144002, 4001685, 100, 1, 1), + (8144002, 4021031, 100, 1, 1), + (8144002, 4021033, 100, 1, 1), + (8144002, 4033175, 100, 1, 1), + (8144002, 4000559, 100, 1, 1), + (8144002, 4021034, 100, 1, 1), + (8144002, 4001687, 100, 1, 1), + (8144002, 4021035, 100, 1, 1), + (8144003, 4001686, 100, 1, 1), + (8144003, 4021031, 100, 1, 1), + (8144003, 4000560, 100, 1, 1), + (8144003, 4001687, 100, 1, 1), + (8144003, 4021032, 100, 1, 1), + (8144003, 4021033, 100, 1, 1), + (8144003, 4021035, 100, 1, 1), + (8144003, 4001685, 100, 1, 1), + (8144003, 4021034, 100, 1, 1), + (2600231, 2049000, 100, 1, 1), + (2600231, 4020008, 100, 1, 1), + (2600231, 2870311, 100, 1, 1), + (2600231, 2512054, 100, 1, 1), + (2600231, 2070007, 100, 1, 1), + (3401011, 4000764, 100, 1, 1), + (3401011, 4000763, 100, 1, 1), + (3401011, 4000762, 100, 1, 1), + (6300000, 4021032, 100, 1, 1), + (6300000, 2590004, 100, 1, 1), + (6300000, 4021034, 100, 1, 1), + (6300000, 4021031, 100, 1, 1), + (6300000, 4021033, 100, 1, 1), + (6300000, 2870259, 100, 1, 1), + (6300000, 4000049, 100, 1, 1), + (6300000, 2001528, 100, 1, 1), + (6300000, 2434021, 100, 1, 1), + (6300000, 4021035, 100, 1, 1), + (6300000, 2000037, 100, 1, 1), + (2600230, 4007001, 100, 1, 1), + (2600230, 4007004, 100, 1, 1), + (2600230, 4000046, 100, 1, 1), + (2600230, 2001001, 100, 1, 1), + (2600230, 4006001, 100, 1, 1), + (2600230, 2060000, 100, 1, 1), + (2600230, 2048001, 100, 1, 1), + (2600230, 4001112, 100, 1, 1), + (2600230, 2048000, 100, 1, 1), + (2600230, 2022057, 100, 1, 1), + (2600230, 2043212, 100, 1, 1), + (2600230, 4020008, 100, 1, 1), + (2600230, 2061000, 100, 1, 1), + (2600230, 4010003, 100, 1, 1), + (2600230, 2044114, 100, 1, 1), + (2600230, 2870280, 100, 1, 1), + (3401010, 4033627, 100, 1, 1), + (3401010, 4000763, 100, 1, 1), + (2600229, 2870279, 100, 1, 1), + (2600229, 2512058, 100, 1, 1), + (2600229, 2061000, 100, 1, 1), + (2600229, 4010006, 100, 1, 1), + (2600229, 4007004, 100, 1, 1), + (2600229, 4006000, 100, 1, 1), + (2600229, 2022057, 100, 1, 1), + (2600229, 4000028, 100, 1, 1), + (2600229, 2000006, 100, 1, 1), + (2600229, 2001527, 100, 1, 1), + (2600229, 2048002, 100, 1, 1), + (2600229, 2001526, 100, 1, 1), + (2600229, 4007003, 100, 1, 1), + (2600229, 2040801, 100, 1, 1), + (2600229, 2060000, 100, 1, 1), + (2600229, 2040421, 100, 1, 1), + (2600229, 2049000, 100, 1, 1), + (3401009, 4000762, 100, 1, 1), + (8820100, 4021032, 100, 1, 1), + (8820100, 4021033, 100, 1, 1), + (8820100, 4021034, 100, 1, 1), + (8820100, 4021031, 100, 1, 1), + (8820100, 2431661, 100, 1, 1), + (8820100, 4310029, 100, 1, 1), + (8820100, 2000005, 100, 1, 1), + (8820100, 2433103, 100, 1, 1), + (8820100, 4021020, 100, 1, 1), + (8820100, 4021035, 100, 1, 1), + (2600228, 2001526, 100, 1, 1), + (2600228, 2045201, 100, 1, 1), + (2600228, 4007007, 100, 1, 1), + (2600228, 4001077, 100, 1, 1), + (2600228, 2044001, 100, 1, 1), + (2600228, 4007003, 100, 1, 1), + (2600228, 4010003, 100, 1, 1), + (2600228, 2043301, 100, 1, 1), + (2600228, 2000002, 100, 1, 1), + (2600228, 4000186, 100, 1, 1), + (2600228, 2043110, 100, 1, 1), + (2600228, 2000006, 100, 1, 1), + (2600228, 4010005, 100, 1, 1), + (2600228, 2044801, 100, 1, 1), + (2600228, 2022057, 100, 1, 1), + (2600228, 2040024, 100, 1, 1), + (2600228, 4000030, 100, 1, 1), + (2600228, 2070005, 100, 1, 1), + (2600228, 2044501, 100, 1, 1), + (2600228, 4020007, 100, 1, 1), + (2600228, 2870257, 100, 1, 1), + (2600228, 4020008, 100, 1, 1), + (3401008, 4033622, 100, 1, 1), + (3401008, 4000761, 100, 1, 1), + (6300003, 2870260, 100, 1, 1), + (2600227, 2332000, 100, 1, 1), + (2600227, 2041014, 100, 1, 1), + (2600227, 2000006, 100, 1, 1), + (2600227, 2022057, 100, 1, 1), + (2600227, 4010004, 100, 1, 1), + (2600227, 2070003, 100, 1, 1), + (2600227, 4007000, 100, 1, 1), + (2600227, 4007004, 100, 1, 1), + (2600227, 4020007, 100, 1, 1), + (2600227, 2044414, 100, 1, 1), + (2600227, 2040328, 100, 1, 1), + (2600227, 2040301, 100, 1, 1), + (2600227, 4000030, 100, 1, 1), + (2600227, 4001077, 100, 1, 1), + (2600227, 2040002, 100, 1, 1), + (2600227, 2043015, 100, 1, 1), + (2600227, 2000002, 100, 1, 1), + (2600227, 2001527, 100, 1, 1), + (2600227, 2870256, 100, 1, 1), + (2600227, 4020005, 100, 1, 1), + (2600227, 4000185, 100, 1, 1), + (2600227, 4010006, 100, 1, 1), + (2600227, 2061000, 100, 1, 1), + (2600227, 4006000, 100, 1, 1), + (6300004, 2870261, 100, 1, 1), + (2600226, 4010006, 100, 1, 1), + (2600226, 2040927, 100, 1, 1), + (2600226, 2044801, 100, 1, 1), + (2600226, 2870249, 100, 1, 1), + (2600226, 2060000, 100, 1, 1), + (2600226, 4000027, 100, 1, 1), + (2600226, 2040414, 100, 1, 1), + (2600226, 4007001, 100, 1, 1), + (2600226, 2049100, 100, 1, 1), + (2600226, 2040824, 100, 1, 1), + (2600226, 2070005, 100, 1, 1), + (2600226, 2022057, 100, 1, 1), + (2600226, 2044809, 100, 1, 1), + (2600226, 4020008, 100, 1, 1), + (2600226, 4007005, 100, 1, 1), + (2600226, 2000006, 100, 1, 1), + (2600226, 2040323, 100, 1, 1), + (6300005, 2870262, 100, 1, 1), + (6300005, 2070006, 100, 1, 1), + (6300005, 4000176, 100, 1, 1), + (2600225, 2044212, 100, 1, 1), + (2600225, 4000030, 100, 1, 1), + (2600225, 4010005, 100, 1, 1), + (2600225, 4020007, 100, 1, 1), + (2600225, 4007000, 100, 1, 1), + (2600225, 2050099, 100, 1, 1), + (2600225, 4000014, 100, 1, 1), + (2600225, 2040612, 100, 1, 1), + (2600225, 2040501, 100, 1, 1), + (2600225, 2331000, 100, 1, 1), + (2600225, 2040901, 100, 1, 1), + (2600225, 4001077, 100, 1, 1), + (2600225, 2000002, 100, 1, 1), + (2600225, 2022057, 100, 1, 1), + (2600225, 2043210, 100, 1, 1), + (2600225, 4007002, 100, 1, 1), + (2600225, 2870235, 100, 1, 1), + (2600225, 2001526, 100, 1, 1), + (2600225, 2000006, 100, 1, 1), + (2600224, 4000014, 100, 1, 1), + (2600224, 2060000, 100, 1, 1), + (2600224, 2041017, 100, 1, 1), + (2600224, 4007000, 100, 1, 1), + (2600224, 2040928, 100, 1, 1), + (2600224, 4007002, 100, 1, 1), + (2600224, 4000030, 100, 1, 1), + (2600224, 2041022, 100, 1, 1), + (2600224, 2001526, 100, 1, 1), + (2600224, 2041007, 100, 1, 1), + (2600224, 2012003, 100, 1, 1), + (2600224, 2012000, 100, 1, 1), + (2600224, 2061000, 100, 1, 1), + (2600224, 4020007, 100, 1, 1), + (2600224, 2000002, 100, 1, 1), + (2600224, 2022057, 100, 1, 1), + (2600224, 2000006, 100, 1, 1), + (2600224, 2870203, 100, 1, 1), + (2600224, 4001077, 100, 1, 1), + (2600224, 4010006, 100, 1, 1), + (2600224, 2043212, 100, 1, 1), + (4130103, 2001002, 100, 1, 1), + (4130103, 2870129, 100, 1, 1), + (4130103, 4021035, 100, 1, 1), + (4130103, 4021032, 100, 1, 1), + (4130103, 4021033, 100, 1, 1), + (4130103, 2001001, 100, 1, 1), + (4130103, 2590004, 100, 1, 1), + (4130103, 2434021, 100, 1, 1), + (4130103, 4000124, 100, 1, 1), + (4130103, 4000616, 100, 1, 1), + (4130103, 4021034, 100, 1, 1), + (8220021, 4021034, 100, 1, 1), + (8220021, 4021033, 100, 1, 1), + (8220021, 4021032, 100, 1, 1), + (8220021, 4021040, 100, 1, 1), + (8220021, 2434021, 100, 1, 1), + (8220021, 4009114, 100, 1, 1), + (8220021, 4021035, 100, 1, 1), + (8220021, 4310085, 100, 1, 1), + (8220021, 2001554, 100, 1, 1), + (8220021, 2000036, 100, 1, 1), + (8220021, 4021031, 100, 1, 1), + (8220021, 2590004, 100, 1, 1), + (4130102, 4000062, 100, 1, 1), + (8220020, 2000036, 100, 1, 1), + (8220020, 4021033, 100, 1, 1), + (8220020, 4021031, 100, 1, 1), + (8220020, 4021035, 100, 1, 1), + (8220020, 4021032, 100, 1, 1), + (8220020, 4021020, 100, 1, 1), + (8220020, 4021034, 100, 1, 1), + (8220020, 2001554, 100, 1, 1), + (8220020, 2590004, 100, 1, 1), + (8220020, 2434021, 100, 1, 1), + (8220017, 4021032, 100, 1, 1), + (8220017, 4021033, 100, 1, 1), + (8220017, 4021034, 100, 1, 1), + (8220017, 4021031, 100, 1, 1), + (8220017, 4021035, 100, 1, 1), + (8220016, 4021031, 100, 1, 1), + (8220016, 4021032, 100, 1, 1), + (8220016, 4021034, 100, 1, 1), + (8220016, 4021033, 100, 1, 1), + (8220016, 4021035, 100, 1, 1), + (8220019, 4021034, 100, 1, 1), + (8220019, 4021033, 100, 1, 1), + (8220019, 4021035, 100, 1, 1), + (8220019, 4021032, 100, 1, 1), + (8220019, 4021031, 100, 1, 1), + (8220018, 4021035, 100, 1, 1), + (8220018, 4021033, 100, 1, 1), + (8220018, 4021034, 100, 1, 1), + (8220018, 4021031, 100, 1, 1), + (8220018, 4021032, 100, 1, 1), + (3401003, 4033626, 100, 1, 1), + (3401003, 4000756, 100, 1, 1), + (3401003, 4033631, 100, 1, 1), + (3401002, 4000755, 100, 1, 1), + (3401001, 4033623, 100, 1, 1), + (3401001, 4033624, 100, 1, 1), + (3401001, 4000754, 100, 1, 1), + (3401001, 4033622, 100, 1, 1), + (3401000, 4000753, 100, 1, 1), + (3401000, 4033622, 100, 1, 1), + (3401007, 4000760, 100, 1, 1), + (8220001, 4310029, 100, 1, 1), + (8220001, 4000049, 100, 1, 1), + (8220001, 4021033, 100, 1, 1), + (8220001, 4000257, 100, 1, 1), + (8220001, 4021032, 100, 1, 1), + (8220001, 4000048, 100, 1, 1), + (8220001, 4000051, 100, 1, 1), + (8220001, 4021035, 100, 1, 1), + (8220001, 4021034, 100, 1, 1), + (8220001, 4000021, 100, 1, 1), + (8220001, 4021031, 100, 1, 1), + (3401006, 4000759, 100, 1, 1), + (8220000, 4000074, 100, 1, 1), + (8220000, 4000073, 100, 1, 1), + (3401005, 4000758, 100, 1, 1), + (3401004, 4033630, 100, 1, 1), + (3401004, 4000757, 100, 1, 1), + (4230500, 2590004, 100, 1, 1), + (4230500, 2870160, 100, 1, 1), + (4230500, 4021034, 100, 1, 1), + (4230500, 4021031, 100, 1, 1), + (4230500, 2000037, 100, 1, 1), + (4230500, 2431174, 100, 1, 1), + (4230500, 2511106, 100, 1, 1), + (4230500, 2049401, 100, 1, 1), + (4230500, 4021035, 100, 1, 1), + (4230500, 4000276, 100, 1, 1), + (4230500, 2430692, 100, 1, 1), + (4230500, 4000021, 100, 1, 1), + (4230500, 4021033, 100, 1, 1), + (4230500, 2001528, 100, 1, 1), + (4230500, 4021032, 100, 1, 1), + (8900003, 2000005, 100, 1, 1), + (8900003, 2434585, 100, 1, 1), + (8900003, 2433103, 100, 1, 1), + (8900003, 4310064, 100, 1, 1), + (8900003, 3010513, 100, 1, 1), + (8900003, 2433446, 100, 1, 1), + (8900003, 4310029, 100, 1, 1), + (8900003, 4310065, 100, 1, 1), + (4230501, 4021035, 100, 1, 1), + (4230501, 2870161, 100, 1, 1), + (4230501, 2001526, 100, 1, 1), + (4230501, 2060000, 100, 1, 1), + (4230501, 2430692, 100, 1, 1), + (4230501, 2431174, 100, 1, 1), + (4230501, 4000277, 100, 1, 1), + (4230501, 4021034, 100, 1, 1), + (4230501, 2000002, 100, 1, 1), + (4230501, 4021033, 100, 1, 1), + (4230501, 4021032, 100, 1, 1), + (4230501, 2049000, 100, 1, 1), + (4230501, 2590004, 100, 1, 1), + (4230501, 2001527, 100, 1, 1), + (4230501, 2512056, 100, 1, 1), + (4230502, 2512057, 100, 1, 1), + (4230502, 4021032, 100, 1, 1), + (4230502, 2590004, 100, 1, 1), + (4230502, 2430692, 100, 1, 1), + (4230502, 2001527, 100, 1, 1), + (4230502, 2870162, 100, 1, 1), + (4230502, 2001001, 100, 1, 1), + (4230502, 4021034, 100, 1, 1), + (4230502, 4021033, 100, 1, 1), + (4230502, 2061000, 100, 1, 1), + (4230502, 4021035, 100, 1, 1), + (4230502, 2431174, 100, 1, 1), + (4230502, 2000002, 100, 1, 1), + (4230502, 2049401, 100, 1, 1), + (4230502, 2048001, 100, 1, 1), + (4230502, 4000278, 100, 1, 1), + (4230503, 4021033, 100, 1, 1), + (4230503, 2870163, 100, 1, 1), + (4230503, 4000280, 100, 1, 1), + (4230503, 4021032, 100, 1, 1), + (4230503, 2430692, 100, 1, 1), + (4230503, 2001527, 100, 1, 1), + (4230503, 2000006, 100, 1, 1), + (4230503, 2590004, 100, 1, 1), + (4230503, 2049401, 100, 1, 1), + (4230503, 2060000, 100, 1, 1), + (4230503, 2431174, 100, 1, 1), + (4230503, 2001001, 100, 1, 1), + (4230503, 2001002, 100, 1, 1), + (4230503, 4021034, 100, 1, 1), + (4230503, 2511106, 100, 1, 1), + (4230503, 4021035, 100, 1, 1), + (4230503, 4000281, 100, 1, 1), + (4230504, 2512067, 100, 1, 1), + (4230504, 4021032, 100, 1, 1), + (4230504, 2590004, 100, 1, 1), + (4230504, 4021033, 100, 1, 1), + (4230504, 2061000, 100, 1, 1), + (4230504, 4000281, 100, 1, 1), + (4230504, 2001526, 100, 1, 1), + (4230504, 2060000, 100, 1, 1), + (4230504, 2870164, 100, 1, 1), + (4230504, 2049401, 100, 1, 1), + (4230504, 4000279, 100, 1, 1), + (4230504, 4021035, 100, 1, 1), + (4230504, 4021034, 100, 1, 1), + (4230504, 2431174, 100, 1, 1), + (4230505, 2512287, 100, 1, 1), + (4230505, 2430692, 100, 1, 1), + (4230505, 2431174, 100, 1, 1), + (4230505, 2000037, 100, 1, 1), + (4230505, 2512273, 100, 1, 1), + (4230505, 4032908, 100, 1, 1), + (4230505, 4021035, 100, 1, 1), + (4230505, 4021033, 100, 1, 1), + (4230505, 2049401, 100, 1, 1), + (4230505, 2001528, 100, 1, 1), + (4230505, 4006001, 100, 1, 1), + (4230505, 2048002, 100, 1, 1), + (4230505, 4021032, 100, 1, 1), + (4230505, 4000291, 100, 1, 1), + (4230505, 2590004, 100, 1, 1), + (4230505, 4021031, 100, 1, 1), + (4230505, 2870165, 100, 1, 1), + (4230505, 4021034, 100, 1, 1), + (2600215, 4000753, 100, 1, 1), + (2600214, 4000967, 100, 1, 1), + (2600213, 4000966, 100, 1, 1), + (2600212, 4000965, 100, 1, 1), + (2600211, 2040901, 100, 1, 1), + (2600211, 4007002, 100, 1, 1), + (2600211, 4000177, 100, 1, 1), + (2600211, 2000000, 100, 1, 1), + (2600211, 4007003, 100, 1, 1), + (2600211, 4010006, 100, 1, 1), + (2600211, 2040923, 100, 1, 1), + (2600211, 2000001, 100, 1, 1), + (2600211, 2043000, 100, 1, 1), + (2600211, 2870212, 100, 1, 1), + (2600211, 2022057, 100, 1, 1), + (2600211, 2040926, 100, 1, 1), + (2600211, 2040319, 100, 1, 1), + (2600210, 2040512, 100, 1, 1), + (2600210, 4007002, 100, 1, 1), + (2600210, 2048000, 100, 1, 1), + (2600210, 2070009, 100, 1, 1), + (2600210, 2870205, 100, 1, 1), + (2600210, 2044310, 100, 1, 1), + (2600210, 4020008, 100, 1, 1), + (2600210, 2044802, 100, 1, 1), + (2600210, 4004004, 100, 1, 1), + (2600210, 2044400, 100, 1, 1), + (2600210, 4000025, 100, 1, 1), + (2600210, 2060000, 100, 1, 1), + (2600210, 2043105, 100, 1, 1), + (2600210, 2000003, 100, 1, 1), + (2600210, 2044800, 100, 1, 1), + (2600210, 4007001, 100, 1, 1), + (2600209, 2040900, 100, 1, 1), + (2600209, 4000022, 100, 1, 1), + (2600209, 4020008, 100, 1, 1), + (2600209, 2044500, 100, 1, 1), + (2600209, 2061000, 100, 1, 1), + (2600209, 4007001, 100, 1, 1), + (2600209, 2022057, 100, 1, 1), + (2600209, 2040403, 100, 1, 1), + (2600209, 2000002, 100, 1, 1), + (2600209, 4007006, 100, 1, 1), + (2600209, 2870204, 100, 1, 1), + (2600209, 2000001, 100, 1, 1), + (2600223, 2000001, 100, 1, 1), + (2600223, 4000030, 100, 1, 1), + (2600223, 2040002, 100, 1, 1), + (2600223, 4010005, 100, 1, 1), + (2600223, 4006001, 100, 1, 1), + (2600223, 2044014, 100, 1, 1), + (2600223, 4001077, 100, 1, 1), + (2600223, 4007004, 100, 1, 1), + (2600223, 2000002, 100, 1, 1), + (2600223, 4006000, 100, 1, 1), + (2600223, 4020008, 100, 1, 1), + (2600223, 2001527, 100, 1, 1), + (2600223, 4007001, 100, 1, 1), + (2600223, 2040824, 100, 1, 1), + (2600223, 2044012, 100, 1, 1), + (2600223, 2041021, 100, 1, 1), + (2600223, 2022057, 100, 1, 1), + (2600223, 2870127, 100, 1, 1), + (2600223, 2040025, 100, 1, 1), + (2600223, 2070009, 100, 1, 1), + (2600223, 4000014, 100, 1, 1), + (8643003, 4021034, 100, 1, 1), + (8643003, 4021035, 100, 1, 1), + (8643003, 2000036, 100, 1, 1), + (8643003, 4001878, 100, 1, 1), + (8643003, 4034983, 100, 1, 1), + (8643003, 4021033, 100, 1, 1), + (8643003, 2000037, 100, 1, 1), + (8643003, 4021032, 100, 1, 1), + (8643003, 2435902, 100, 1, 1), + (8643003, 4021020, 100, 1, 1), + (8643003, 4021031, 100, 1, 1), + (2600222, 4000764, 100, 1, 1), + (8643002, 4021034, 100, 1, 1), + (8643002, 4021035, 100, 1, 1), + (8643002, 4001878, 100, 1, 1), + (8643002, 4021020, 100, 1, 1), + (8643002, 2435902, 100, 1, 1), + (8643002, 4021031, 100, 1, 1), + (8643002, 2000036, 100, 1, 1), + (8643002, 4034983, 100, 1, 1), + (8643002, 2000037, 100, 1, 1), + (8643002, 4021032, 100, 1, 1), + (8643002, 4021033, 100, 1, 1), + (2600221, 4000763, 100, 1, 1), + (8643001, 4021034, 100, 1, 1), + (8643001, 4034983, 100, 1, 1), + (8643001, 4021031, 100, 1, 1), + (8643001, 4021032, 100, 1, 1), + (8643001, 4034979, 100, 1, 1), + (8643001, 4021020, 100, 1, 1), + (8643001, 4021033, 100, 1, 1), + (8643001, 2435902, 100, 1, 1), + (8643001, 4001878, 100, 1, 1), + (8643001, 2000037, 100, 1, 1), + (8643001, 2000036, 100, 1, 1), + (8643001, 4021035, 100, 1, 1), + (2600220, 4000762, 100, 1, 1), + (8643000, 4021031, 100, 1, 1), + (8643000, 2435902, 100, 1, 1), + (8643000, 4001878, 100, 1, 1), + (8643000, 2000036, 100, 1, 1), + (8643000, 2000037, 100, 1, 1), + (8643000, 4021035, 100, 1, 1), + (8643000, 4021034, 100, 1, 1), + (8643000, 4034983, 100, 1, 1), + (8643000, 4021020, 100, 1, 1), + (8643000, 4021033, 100, 1, 1), + (8643000, 4021032, 100, 1, 1), + (2600219, 4000761, 100, 1, 1), + (8643007, 4021035, 100, 1, 1), + (8643007, 4021020, 100, 1, 1), + (8643007, 4021034, 100, 1, 1), + (8643007, 4034983, 100, 1, 1), + (8643007, 4021032, 100, 1, 1), + (8643007, 2000036, 100, 1, 1), + (8643007, 2000037, 100, 1, 1), + (8643007, 2435902, 100, 1, 1), + (8643007, 4001878, 100, 1, 1), + (8643007, 4021031, 100, 1, 1), + (8643007, 4021033, 100, 1, 1), + (2600218, 4000760, 100, 1, 1), + (8643006, 2000037, 100, 1, 1), + (8643006, 4021034, 100, 1, 1), + (8643006, 4021033, 100, 1, 1), + (8643006, 4034983, 100, 1, 1), + (8643006, 4021035, 100, 1, 1), + (8643006, 4021032, 100, 1, 1), + (8643006, 4034982, 100, 1, 1), + (8643006, 2000036, 100, 1, 1), + (8643006, 4001878, 100, 1, 1), + (8643006, 4021031, 100, 1, 1), + (8643006, 2435902, 100, 1, 1), + (8643006, 4021020, 100, 1, 1), + (2600217, 4000759, 100, 1, 1), + (8643005, 2000036, 100, 1, 1), + (8643005, 4034983, 100, 1, 1), + (8643005, 4021032, 100, 1, 1), + (8643005, 4034981, 100, 1, 1), + (8643005, 4021035, 100, 1, 1), + (8643005, 4021031, 100, 1, 1), + (8643005, 2435902, 100, 1, 1), + (8643005, 4021034, 100, 1, 1), + (8643005, 2000037, 100, 1, 1), + (8643005, 4001878, 100, 1, 1), + (8643005, 4021033, 100, 1, 1), + (8643005, 4021020, 100, 1, 1), + (2600216, 4000756, 100, 1, 1), + (8643004, 4021035, 100, 1, 1), + (8643004, 4021031, 100, 1, 1), + (8643004, 4021033, 100, 1, 1), + (8643004, 2000036, 100, 1, 1), + (8643004, 4021020, 100, 1, 1), + (8643004, 4021032, 100, 1, 1), + (8643004, 2000037, 100, 1, 1), + (8643004, 4021034, 100, 1, 1), + (8643004, 4001878, 100, 1, 1), + (8643004, 4034983, 100, 1, 1), + (8643004, 2435902, 100, 1, 1), + (4230400, 2870159, 100, 1, 1), + (4230400, 2431174, 100, 1, 1), + (4230400, 4000178, 100, 1, 1), + (8600003, 2512280, 100, 1, 1), + (8600003, 2434021, 100, 1, 1), + (8600003, 4000645, 100, 1, 1), + (8600003, 2512012, 100, 1, 1), + (8600003, 4021020, 100, 1, 1), + (8600003, 4021032, 100, 1, 1), + (8600003, 4021035, 100, 1, 1), + (8600003, 2512284, 100, 1, 1), + (8600003, 2590004, 100, 1, 1), + (8600003, 2512278, 100, 1, 1), + (8600003, 2512286, 100, 1, 1), + (8600003, 2512272, 100, 1, 1), + (8600003, 2512282, 100, 1, 1), + (8600003, 2070010, 100, 1, 1), + (8600003, 2330005, 100, 1, 1), + (8600003, 2512247, 100, 1, 1), + (8600003, 2000036, 100, 1, 1), + (8600003, 2049401, 100, 1, 1), + (8600003, 2511098, 100, 1, 1), + (8600003, 4021034, 100, 1, 1), + (8600003, 2001554, 100, 1, 1), + (8600003, 2870455, 100, 1, 1), + (8600003, 2512279, 100, 1, 1), + (8600003, 2512270, 100, 1, 1), + (8600003, 2511099, 100, 1, 1), + (8600003, 4032940, 100, 1, 1), + (8600003, 2510261, 100, 1, 1), + (8600003, 4034983, 100, 1, 1), + (8600003, 2512107, 100, 1, 1), + (8600003, 4021033, 100, 1, 1), + (8600003, 4021031, 100, 1, 1), + (8600003, 2048002, 100, 1, 1), + (8600003, 2430692, 100, 1, 1), + (8643011, 2000036, 100, 1, 1), + (8643011, 4034983, 100, 1, 1), + (8643011, 2000037, 100, 1, 1), + (8643011, 2435902, 100, 1, 1), + (8643011, 4021033, 100, 1, 1), + (8643011, 4001878, 100, 1, 1), + (8643011, 4021035, 100, 1, 1), + (8643011, 4021032, 100, 1, 1), + (8643011, 4021031, 100, 1, 1), + (8643011, 4021020, 100, 1, 1), + (8643011, 4021034, 100, 1, 1), + (8600002, 2512276, 100, 1, 1), + (8600002, 2511035, 100, 1, 1), + (8600002, 4021020, 100, 1, 1), + (8600002, 2049401, 100, 1, 1), + (8600002, 2870454, 100, 1, 1), + (8600002, 2434021, 100, 1, 1), + (8600002, 2512269, 100, 1, 1), + (8600002, 2000036, 100, 1, 1), + (8600002, 2510243, 100, 1, 1), + (8600002, 2512286, 100, 1, 1), + (8600002, 4034983, 100, 1, 1), + (8600002, 4021034, 100, 1, 1), + (8600002, 2511075, 100, 1, 1), + (8600002, 2512279, 100, 1, 1), + (8600002, 4021031, 100, 1, 1), + (8600002, 2512267, 100, 1, 1), + (8600002, 2048001, 100, 1, 1), + (8600002, 2512271, 100, 1, 1), + (8600002, 4021035, 100, 1, 1), + (8600002, 2512195, 100, 1, 1), + (8600002, 2512023, 100, 1, 1), + (8600002, 4000644, 100, 1, 1), + (8600002, 2590004, 100, 1, 1), + (8600002, 4021033, 100, 1, 1), + (8600002, 2512274, 100, 1, 1), + (8600002, 2048005, 100, 1, 1), + (8600002, 4021032, 100, 1, 1), + (8600002, 2001554, 100, 1, 1), + (8600002, 2430692, 100, 1, 1), + (8600002, 2512126, 100, 1, 1), + (8643010, 2000037, 100, 1, 1), + (8643010, 4021031, 100, 1, 1), + (8643010, 4021032, 100, 1, 1), + (8643010, 4001878, 100, 1, 1), + (8643010, 2000036, 100, 1, 1), + (8643010, 4021034, 100, 1, 1), + (8643010, 4021035, 100, 1, 1), + (8643010, 4034983, 100, 1, 1), + (8643010, 4021020, 100, 1, 1), + (8643010, 2435902, 100, 1, 1), + (8643010, 4021033, 100, 1, 1), + (8600001, 4021034, 100, 1, 1), + (8600001, 2512212, 100, 1, 1), + (8600001, 2870453, 100, 1, 1), + (8600001, 2510267, 100, 1, 1), + (8600001, 4021020, 100, 1, 1), + (8600001, 2590004, 100, 1, 1), + (8600001, 2512287, 100, 1, 1), + (8600001, 4000643, 100, 1, 1), + (8600001, 2512272, 100, 1, 1), + (8600001, 4032930, 100, 1, 1), + (8600001, 2510430, 100, 1, 1), + (8600001, 2000036, 100, 1, 1), + (8600001, 4021035, 100, 1, 1), + (8600001, 2049401, 100, 1, 1), + (8600001, 2512282, 100, 1, 1), + (8600001, 2510271, 100, 1, 1), + (8600001, 2434021, 100, 1, 1), + (8600001, 4034983, 100, 1, 1), + (8600001, 2510261, 100, 1, 1), + (8600001, 4021032, 100, 1, 1), + (8600001, 2512279, 100, 1, 1), + (8600001, 2001554, 100, 1, 1), + (8600001, 2070005, 100, 1, 1), + (8600001, 2512156, 100, 1, 1), + (8600001, 2512179, 100, 1, 1), + (8600001, 2070004, 100, 1, 1), + (8600001, 2430692, 100, 1, 1), + (8600001, 4021031, 100, 1, 1), + (8600001, 2512092, 100, 1, 1), + (8600001, 4021033, 100, 1, 1), + (8643009, 4021034, 100, 1, 1), + (8643009, 4021033, 100, 1, 1), + (8643009, 4021035, 100, 1, 1), + (8643009, 2435902, 100, 1, 1), + (8643009, 2000037, 100, 1, 1), + (8643009, 4021032, 100, 1, 1), + (8643009, 4034983, 100, 1, 1), + (8643009, 4001878, 100, 1, 1), + (8643009, 2000036, 100, 1, 1), + (8643009, 4021031, 100, 1, 1), + (8643009, 4021020, 100, 1, 1), + (8600000, 2512269, 100, 1, 1), + (8600000, 2512096, 100, 1, 1), + (8600000, 2512216, 100, 1, 1), + (8600000, 4021035, 100, 1, 1), + (8600000, 2001554, 100, 1, 1), + (8600000, 2434021, 100, 1, 1), + (8600000, 2000036, 100, 1, 1), + (8600000, 2430692, 100, 1, 1), + (8600000, 4034983, 100, 1, 1), + (8600000, 2870452, 100, 1, 1), + (8600000, 4021032, 100, 1, 1), + (8600000, 2512283, 100, 1, 1), + (8600000, 2512271, 100, 1, 1), + (8600000, 2512284, 100, 1, 1), + (8600000, 2512270, 100, 1, 1), + (8600000, 2512090, 100, 1, 1), + (8600000, 2512102, 100, 1, 1), + (8600000, 2512275, 100, 1, 1), + (8600000, 4000642, 100, 1, 1), + (8600000, 4021033, 100, 1, 1), + (8600000, 2048003, 100, 1, 1), + (8600000, 2590004, 100, 1, 1), + (8600000, 2510249, 100, 1, 1), + (8600000, 4021020, 100, 1, 1), + (8600000, 2512112, 100, 1, 1), + (8600000, 4021031, 100, 1, 1), + (8600000, 4032921, 100, 1, 1), + (8600000, 2049401, 100, 1, 1), + (8600000, 4021034, 100, 1, 1), + (8643008, 2000037, 100, 1, 1), + (8643008, 4034983, 100, 1, 1), + (8643008, 4021035, 100, 1, 1), + (8643008, 2000036, 100, 1, 1), + (8643008, 4021031, 100, 1, 1), + (8643008, 4021020, 100, 1, 1), + (8643008, 4021033, 100, 1, 1), + (8643008, 4034980, 100, 1, 1), + (8643008, 2435902, 100, 1, 1), + (8643008, 4021034, 100, 1, 1), + (8643008, 4001878, 100, 1, 1), + (8643008, 4021032, 100, 1, 1), + (8600006, 2048003, 100, 1, 1), + (8600006, 2512285, 100, 1, 1), + (8600006, 2512276, 100, 1, 1), + (8600006, 2512284, 100, 1, 1), + (8600006, 4021034, 100, 1, 1), + (8600006, 2511049, 100, 1, 1), + (8600006, 2512109, 100, 1, 1), + (8600006, 4021035, 100, 1, 1), + (8600006, 2590004, 100, 1, 1), + (8600006, 2512267, 100, 1, 1), + (8600006, 4021033, 100, 1, 1), + (8600006, 2430692, 100, 1, 1), + (8600006, 4034983, 100, 1, 1), + (8600006, 4021020, 100, 1, 1), + (8600006, 2512130, 100, 1, 1), + (8600006, 2512029, 100, 1, 1), + (8600006, 2004095, 100, 1, 1), + (8600006, 2512283, 100, 1, 1), + (8600006, 2000036, 100, 1, 1), + (8600006, 2512286, 100, 1, 1), + (8600006, 4021032, 100, 1, 1), + (8600006, 2434021, 100, 1, 1), + (8600006, 2870458, 100, 1, 1), + (8600006, 4021031, 100, 1, 1), + (8600006, 2512281, 100, 1, 1), + (8600006, 2001554, 100, 1, 1), + (8600006, 4000648, 100, 1, 1), + (8600006, 2512272, 100, 1, 1), + (8600006, 2048000, 100, 1, 1), + (8600006, 2049401, 100, 1, 1), + (8600005, 2003544, 100, 1, 1), + (8600005, 2590004, 100, 1, 1), + (8600005, 2003541, 100, 1, 1), + (8600005, 2330004, 100, 1, 1), + (8600005, 4021031, 100, 1, 1), + (8600005, 4021020, 100, 1, 1), + (8600005, 2070010, 100, 1, 1), + (8600005, 4021034, 100, 1, 1), + (8600005, 2430692, 100, 1, 1), + (8600005, 2387093, 100, 1, 1), + (8600005, 4021032, 100, 1, 1), + (8600005, 2003543, 100, 1, 1), + (8600005, 2049401, 100, 1, 1), + (8600005, 4021035, 100, 1, 1), + (8600005, 2330002, 100, 1, 1), + (8600005, 2003532, 100, 1, 1), + (8600005, 2003534, 100, 1, 1), + (8600005, 4021033, 100, 1, 1), + (8600005, 2434021, 100, 1, 1), + (8600005, 2000036, 100, 1, 1), + (8600005, 4000647, 100, 1, 1), + (8600005, 4034983, 100, 1, 1), + (8600005, 2001554, 100, 1, 1), + (8600004, 4021031, 100, 1, 1), + (8600004, 2512013, 100, 1, 1), + (8600004, 2512288, 100, 1, 1), + (8600004, 2870456, 100, 1, 1), + (8600004, 4021020, 100, 1, 1), + (8600004, 4021032, 100, 1, 1), + (8600004, 2512271, 100, 1, 1), + (8600004, 4021035, 100, 1, 1), + (8600004, 2512268, 100, 1, 1), + (8600004, 2000036, 100, 1, 1), + (8600004, 4034983, 100, 1, 1), + (8600004, 2512172, 100, 1, 1), + (8600004, 2512229, 100, 1, 1), + (8600004, 2590004, 100, 1, 1), + (8600004, 2434021, 100, 1, 1), + (8600004, 2512136, 100, 1, 1), + (8600004, 2512283, 100, 1, 1), + (8600004, 2512274, 100, 1, 1), + (8600004, 4000646, 100, 1, 1), + (8600004, 4021033, 100, 1, 1), + (8600004, 2512134, 100, 1, 1), + (8600004, 2048000, 100, 1, 1), + (8600004, 2511035, 100, 1, 1), + (8600004, 4021034, 100, 1, 1), + (8600004, 2001554, 100, 1, 1), + (8600004, 2512091, 100, 1, 1), + (8600004, 2430692, 100, 1, 1), + (8600004, 2512191, 100, 1, 1), + (8600004, 2511101, 100, 1, 1), + (8643012, 4001878, 100, 1, 1), + (8643012, 2000037, 100, 1, 1), + (8643012, 2435902, 100, 1, 1), + (8643012, 4021020, 100, 1, 1), + (8643012, 4021034, 100, 1, 1), + (8643012, 4021031, 100, 1, 1), + (8643012, 2000036, 100, 1, 1), + (8643012, 4021035, 100, 1, 1), + (8643012, 4021033, 100, 1, 1), + (8643012, 4021032, 100, 1, 1), + (8643012, 4034983, 100, 1, 1), + (2600303, 2870245, 100, 1, 1), + (2600303, 2040901, 100, 1, 1), + (2600303, 4003005, 100, 1, 1), + (2600303, 2000037, 100, 1, 1), + (2600303, 2022057, 100, 1, 1), + (2600303, 2001527, 100, 1, 1), + (2600303, 2044701, 100, 1, 1), + (2600303, 2510479, 100, 1, 1), + (2600303, 4007001, 100, 1, 1), + (2600303, 2512287, 100, 1, 1), + (2600303, 2510076, 100, 1, 1), + (2600303, 4006000, 100, 1, 1), + (2600303, 4000289, 100, 1, 1), + (2600303, 2001001, 100, 1, 1), + (2600303, 2512269, 100, 1, 1), + (2600303, 4004003, 100, 1, 1), + (2600303, 4020004, 100, 1, 1), + (2600303, 2001526, 100, 1, 1), + (2600303, 4007000, 100, 1, 1), + (2600303, 2512272, 100, 1, 1), + (2600303, 2330003, 100, 1, 1), + (2600303, 4020002, 100, 1, 1), + (2600303, 2070003, 100, 1, 1), + (2600303, 4000021, 100, 1, 1), + (2600303, 2044312, 100, 1, 1), + (2600302, 2022057, 100, 1, 1), + (2600302, 2040601, 100, 1, 1), + (2600302, 2044412, 100, 1, 1), + (2600302, 2001001, 100, 1, 1), + (2600302, 4007002, 100, 1, 1), + (2600302, 4000299, 100, 1, 1), + (2600302, 2000005, 100, 1, 1), + (2600302, 2060000, 100, 1, 1), + (2600302, 4010006, 100, 1, 1), + (2600302, 2070003, 100, 1, 1), + (2600302, 2040825, 100, 1, 1), + (2600302, 2000006, 100, 1, 1), + (2600302, 4000298, 100, 1, 1), + (2600302, 4007007, 100, 1, 1), + (2600302, 2512055, 100, 1, 1), + (2600302, 4020008, 100, 1, 1), + (2600302, 2001526, 100, 1, 1), + (2600302, 2043017, 100, 1, 1), + (2600302, 2870202, 100, 1, 1), + (2600301, 4020002, 100, 1, 1), + (2600301, 4010006, 100, 1, 1), + (2600301, 2512066, 100, 1, 1), + (2600301, 4000287, 100, 1, 1), + (2600301, 2022057, 100, 1, 1), + (2600301, 2040621, 100, 1, 1), + (2600301, 2048004, 100, 1, 1), + (2600301, 2001526, 100, 1, 1), + (2600301, 2040825, 100, 1, 1), + (2600301, 2000006, 100, 1, 1), + (2600301, 4006001, 100, 1, 1), + (2600301, 4004000, 100, 1, 1), + (2600301, 2000005, 100, 1, 1), + (2600301, 2870200, 100, 1, 1), + (2600301, 2040619, 100, 1, 1), + (2600301, 2001001, 100, 1, 1), + (2600301, 4007006, 100, 1, 1), + (2600301, 4007004, 100, 1, 1), + (2600301, 2043301, 100, 1, 1), + (2600300, 2040026, 100, 1, 1), + (2600300, 2061000, 100, 1, 1), + (2600300, 2000005, 100, 1, 1), + (2600300, 4000286, 100, 1, 1), + (2600300, 2040801, 100, 1, 1), + (2600300, 2044301, 100, 1, 1), + (2600300, 2070010, 100, 1, 1), + (2600300, 2044602, 100, 1, 1), + (2600300, 4007004, 100, 1, 1), + (2600300, 4004002, 100, 1, 1), + (2600300, 2060000, 100, 1, 1), + (2600300, 2512067, 100, 1, 1), + (2600300, 2043401, 100, 1, 1), + (2600300, 2870199, 100, 1, 1), + (2600300, 4007000, 100, 1, 1), + (2600300, 2001526, 100, 1, 1), + (2600300, 4020005, 100, 1, 1), + (6090000, 2870228, 100, 1, 1), + (6090000, 4021034, 100, 1, 1), + (6090000, 4021031, 100, 1, 1), + (6090000, 4021033, 100, 1, 1), + (6090000, 4000336, 100, 1, 1), + (6090000, 4021035, 100, 1, 1), + (6090000, 4000633, 100, 1, 1), + (6090000, 4021032, 100, 1, 1), + (6090001, 4000415, 100, 1, 1), + (6090001, 2870229, 100, 1, 1), + (6090002, 4021034, 100, 1, 1), + (6090002, 4021033, 100, 1, 1), + (6090002, 4021031, 100, 1, 1), + (6090002, 4000414, 100, 1, 1), + (6090002, 4021032, 100, 1, 1), + (6090002, 4021035, 100, 1, 1), + (6090003, 4000416, 100, 1, 1), + (6090003, 2870231, 100, 1, 1), + (2600311, 2512153, 100, 1, 1), + (2600311, 2070004, 100, 1, 1), + (2600311, 2330003, 100, 1, 1), + (2600311, 4021031, 100, 1, 1), + (2600311, 2512236, 100, 1, 1), + (2600311, 2871088, 100, 1, 1), + (2600311, 2512051, 100, 1, 1), + (2600311, 2060000, 100, 1, 1), + (2600311, 2512270, 100, 1, 1), + (2600311, 2512258, 100, 1, 1), + (8642003, 4034945, 100, 1, 1), + (8642003, 4021020, 100, 1, 1), + (8642003, 2000037, 100, 1, 1), + (8642003, 2431174, 100, 1, 1), + (8642003, 4021031, 100, 1, 1), + (8642003, 4021035, 100, 1, 1), + (8642003, 2435902, 100, 1, 1), + (8642003, 2000036, 100, 1, 1), + (8642003, 2590004, 100, 1, 1), + (8642003, 4021034, 100, 1, 1), + (8642003, 4021032, 100, 1, 1), + (8642003, 4021033, 100, 1, 1), + (2600310, 4007004, 100, 1, 1), + (2600310, 2001526, 100, 1, 1), + (2600310, 2000005, 100, 1, 1), + (2600310, 2044212, 100, 1, 1), + (2600310, 2061000, 100, 1, 1), + (2600310, 4004000, 100, 1, 1), + (2600310, 2060000, 100, 1, 1), + (2600310, 4000281, 100, 1, 1), + (2600310, 2870164, 100, 1, 1), + (2600310, 4007003, 100, 1, 1), + (2600310, 2022057, 100, 1, 1), + (2600310, 4010002, 100, 1, 1), + (2600310, 2044801, 100, 1, 1), + (2600310, 4000279, 100, 1, 1), + (2600310, 2044901, 100, 1, 1), + (2600310, 2044002, 100, 1, 1), + (2600310, 4010004, 100, 1, 1), + (2600310, 2512067, 100, 1, 1), + (2600310, 2070004, 100, 1, 1), + (8642002, 4021020, 100, 1, 1), + (8642002, 4021033, 100, 1, 1), + (8642002, 2435902, 100, 1, 1), + (8642002, 4021031, 100, 1, 1), + (8642002, 4034944, 100, 1, 1), + (8642002, 4021034, 100, 1, 1), + (8642002, 2431174, 100, 1, 1), + (8642002, 2590004, 100, 1, 1), + (8642002, 2000036, 100, 1, 1), + (8642002, 2000037, 100, 1, 1), + (8642002, 4021032, 100, 1, 1), + (8642002, 4021035, 100, 1, 1), + (2600309, 4000280, 100, 1, 1), + (2600309, 2040705, 100, 1, 1), + (2600309, 2330002, 100, 1, 1), + (2600309, 4000281, 100, 1, 1), + (2600309, 4004001, 100, 1, 1), + (2600309, 2043301, 100, 1, 1), + (2600309, 2000006, 100, 1, 1), + (2600309, 4020005, 100, 1, 1), + (2600309, 4007007, 100, 1, 1), + (2600309, 2048002, 100, 1, 1), + (2600309, 2060000, 100, 1, 1), + (2600309, 2511106, 100, 1, 1), + (2600309, 4010004, 100, 1, 1), + (2600309, 2001001, 100, 1, 1), + (2600309, 2001527, 100, 1, 1), + (2600309, 2001002, 100, 1, 1), + (2600309, 4007005, 100, 1, 1), + (2600309, 2870163, 100, 1, 1), + (2600309, 2044501, 100, 1, 1), + (8642001, 4021031, 100, 1, 1), + (8642001, 4021020, 100, 1, 1), + (8642001, 2431174, 100, 1, 1), + (8642001, 4021033, 100, 1, 1), + (8642001, 2435902, 100, 1, 1), + (8642001, 4021032, 100, 1, 1), + (8642001, 4021035, 100, 1, 1), + (8642001, 2000037, 100, 1, 1), + (8642001, 4034943, 100, 1, 1), + (8642001, 4021034, 100, 1, 1), + (8642001, 2000036, 100, 1, 1), + (8642001, 2590004, 100, 1, 1), + (2600308, 4004003, 100, 1, 1), + (2600308, 2001527, 100, 1, 1), + (2600308, 4000278, 100, 1, 1), + (2600308, 2000002, 100, 1, 1), + (2600308, 2870162, 100, 1, 1), + (2600308, 2044201, 100, 1, 1), + (2600308, 4020004, 100, 1, 1), + (2600308, 2061000, 100, 1, 1), + (2600308, 2512057, 100, 1, 1), + (2600308, 4020008, 100, 1, 1), + (2600308, 2001001, 100, 1, 1), + (2600308, 4007002, 100, 1, 1), + (2600308, 2048001, 100, 1, 1), + (2600308, 4007007, 100, 1, 1), + (2600308, 2043114, 100, 1, 1), + (2600308, 2044601, 100, 1, 1), + (8642000, 2000037, 100, 1, 1), + (8642000, 4021035, 100, 1, 1), + (8642000, 4034942, 100, 1, 1), + (8642000, 2000036, 100, 1, 1), + (8642000, 2435902, 100, 1, 1), + (8642000, 2590004, 100, 1, 1), + (8642000, 4021031, 100, 1, 1), + (8642000, 2431174, 100, 1, 1), + (8642000, 4021020, 100, 1, 1), + (8642000, 4021032, 100, 1, 1), + (8642000, 4021033, 100, 1, 1), + (8642000, 4021034, 100, 1, 1), + (2600307, 2040621, 100, 1, 1), + (2600307, 2070007, 100, 1, 1), + (2600307, 2870161, 100, 1, 1), + (2600307, 2044601, 100, 1, 1), + (2600307, 4000277, 100, 1, 1), + (2600307, 2049000, 100, 1, 1), + (2600307, 2511106, 100, 1, 1), + (2600307, 2001001, 100, 1, 1), + (2600307, 2000002, 100, 1, 1), + (2600307, 2044801, 100, 1, 1), + (2600307, 2001002, 100, 1, 1), + (2600307, 4010001, 100, 1, 1), + (2600307, 2022057, 100, 1, 1), + (2600307, 4004002, 100, 1, 1), + (2600307, 2330002, 100, 1, 1), + (8642007, 4034949, 100, 1, 1), + (8642007, 4021031, 100, 1, 1), + (8642007, 4021034, 100, 1, 1), + (8642007, 4021033, 100, 1, 1), + (8642007, 4021032, 100, 1, 1), + (8642007, 2000037, 100, 1, 1), + (8642007, 2590004, 100, 1, 1), + (8642007, 2000036, 100, 1, 1), + (8642007, 2431174, 100, 1, 1), + (8642007, 4021020, 100, 1, 1), + (8642007, 2435902, 100, 1, 1), + (8642007, 4021035, 100, 1, 1), + (2600306, 2044601, 100, 1, 1), + (2600306, 4007006, 100, 1, 1), + (2600306, 2022057, 100, 1, 1), + (2600306, 2870160, 100, 1, 1), + (2600306, 2330002, 100, 1, 1), + (2600306, 2001527, 100, 1, 1), + (2600306, 2048005, 100, 1, 1), + (2600306, 4000021, 100, 1, 1), + (2600306, 2000002, 100, 1, 1), + (2600306, 2000006, 100, 1, 1), + (2600306, 2511106, 100, 1, 1), + (2600306, 4010006, 100, 1, 1), + (2600306, 2061000, 100, 1, 1), + (2600306, 2070007, 100, 1, 1), + (2600306, 2044801, 100, 1, 1), + (2600306, 4010001, 100, 1, 1), + (2600306, 2001001, 100, 1, 1), + (2600306, 4000276, 100, 1, 1), + (2600306, 4007005, 100, 1, 1), + (8642006, 4021034, 100, 1, 1), + (8642006, 4034948, 100, 1, 1), + (8642006, 4021020, 100, 1, 1), + (8642006, 4021033, 100, 1, 1), + (8642006, 2435902, 100, 1, 1), + (8642006, 2431174, 100, 1, 1), + (8642006, 4021035, 100, 1, 1), + (8642006, 4021032, 100, 1, 1), + (8642006, 2000036, 100, 1, 1), + (8642006, 4021031, 100, 1, 1), + (8642006, 2000037, 100, 1, 1), + (8642006, 2590004, 100, 1, 1), + (8642005, 4021034, 100, 1, 1), + (8642005, 2431174, 100, 1, 1), + (8642005, 2590004, 100, 1, 1), + (8642005, 4021020, 100, 1, 1), + (8642005, 2435902, 100, 1, 1), + (8642005, 4021031, 100, 1, 1), + (8642005, 2000037, 100, 1, 1), + (8642005, 4021032, 100, 1, 1), + (8642005, 4021033, 100, 1, 1), + (8642005, 4034947, 100, 1, 1), + (8642005, 4021035, 100, 1, 1), + (8642005, 2000036, 100, 1, 1), + (2600304, 2022149, 100, 1, 1), + (2600304, 2512055, 100, 1, 1), + (2600304, 2512153, 100, 1, 1), + (2600304, 2061001, 100, 1, 1), + (2600304, 2512115, 100, 1, 1), + (2600304, 2512236, 100, 1, 1), + (2600304, 2000003, 100, 1, 1), + (2600304, 4000298, 100, 1, 1), + (2600304, 4009003, 100, 1, 1), + (2600304, 4010005, 100, 1, 1), + (2600304, 4004004, 100, 1, 1), + (2600304, 2070007, 100, 1, 1), + (2600304, 2049000, 100, 1, 1), + (2600304, 4000412, 100, 1, 1), + (2600304, 2000002, 100, 1, 1), + (2600304, 2870302, 100, 1, 1), + (2600304, 4020008, 100, 1, 1), + (2600304, 2870183, 100, 1, 1), + (2600304, 2060001, 100, 1, 1), + (2600304, 2600305, 100, 1, 1), + (2600304, 2000005, 100, 1, 1), + (2600304, 2512028, 100, 1, 1), + (8642004, 2431174, 100, 1, 1), + (8642004, 4021031, 100, 1, 1), + (8642004, 4021035, 100, 1, 1), + (8642004, 4034946, 100, 1, 1), + (8642004, 2000036, 100, 1, 1), + (8642004, 2435902, 100, 1, 1), + (8642004, 4021020, 100, 1, 1), + (8642004, 4021034, 100, 1, 1), + (8642004, 4021033, 100, 1, 1), + (8642004, 2000037, 100, 1, 1), + (8642004, 4021032, 100, 1, 1), + (8642004, 2590004, 100, 1, 1), + (2600319, 4000293, 100, 1, 1), + (2600319, 2001001, 100, 1, 1), + (2600319, 2043017, 100, 1, 1), + (2600319, 2040801, 100, 1, 1), + (2600319, 4004003, 100, 1, 1), + (2600319, 2001526, 100, 1, 1), + (2600319, 2060000, 100, 1, 1), + (2600319, 2000037, 100, 1, 1), + (2600319, 2043201, 100, 1, 1), + (2600319, 4006000, 100, 1, 1), + (2600319, 2512281, 100, 1, 1), + (2600319, 2511019, 100, 1, 1), + (2600319, 2870197, 100, 1, 1), + (2600319, 4020005, 100, 1, 1), + (2600319, 2330002, 100, 1, 1), + (2600319, 2044903, 100, 1, 1), + (2600319, 2512273, 100, 1, 1), + (2600319, 2512275, 100, 1, 1), + (2600319, 4007004, 100, 1, 1), + (2600319, 2022057, 100, 1, 1), + (2600319, 4010001, 100, 1, 1), + (2600319, 4007003, 100, 1, 1), + (8642011, 2000037, 100, 1, 1), + (8642011, 2590004, 100, 1, 1), + (8642011, 4021020, 100, 1, 1), + (8642011, 4034953, 100, 1, 1), + (8642011, 4021033, 100, 1, 1), + (8642011, 4021031, 100, 1, 1), + (8642011, 2431174, 100, 1, 1), + (8642011, 4021034, 100, 1, 1), + (8642011, 2000036, 100, 1, 1), + (8642011, 2435902, 100, 1, 1), + (8642011, 4021032, 100, 1, 1), + (8642011, 4021035, 100, 1, 1), + (2600318, 2048005, 100, 1, 1), + (2600318, 2040601, 100, 1, 1), + (2600318, 2512273, 100, 1, 1), + (2600318, 2510053, 100, 1, 1), + (2600318, 2061000, 100, 1, 1), + (2600318, 2000037, 100, 1, 1), + (2600318, 2512269, 100, 1, 1), + (2600318, 4000292, 100, 1, 1), + (2600318, 2070009, 100, 1, 1), + (2600318, 4007002, 100, 1, 1), + (2600318, 2512281, 100, 1, 1), + (2600318, 4010001, 100, 1, 1), + (2600318, 2000005, 100, 1, 1), + (2600318, 2048001, 100, 1, 1), + (2600318, 2870166, 100, 1, 1), + (2600318, 4020000, 100, 1, 1), + (2600318, 2001526, 100, 1, 1), + (2600318, 2049100, 100, 1, 1), + (2600318, 4006001, 100, 1, 1), + (2600318, 2022057, 100, 1, 1), + (2600318, 4007004, 100, 1, 1), + (8642010, 4021034, 100, 1, 1), + (8642010, 4021020, 100, 1, 1), + (8642010, 4021033, 100, 1, 1), + (8642010, 2431174, 100, 1, 1), + (8642010, 4034952, 100, 1, 1), + (8642010, 2000037, 100, 1, 1), + (8642010, 2435902, 100, 1, 1), + (8642010, 4021032, 100, 1, 1), + (8642010, 4021031, 100, 1, 1), + (8642010, 2590004, 100, 1, 1), + (8642010, 2000036, 100, 1, 1), + (8642010, 4021035, 100, 1, 1), + (2600317, 4007004, 100, 1, 1), + (2600317, 2048001, 100, 1, 1), + (2600317, 4007001, 100, 1, 1), + (2600317, 2043401, 100, 1, 1), + (2600317, 2061000, 100, 1, 1), + (2600317, 2001001, 100, 1, 1), + (2600317, 2001002, 100, 1, 1), + (2600317, 2070003, 100, 1, 1), + (2600317, 2512287, 100, 1, 1), + (2600317, 4000291, 100, 1, 1), + (2600317, 4020000, 100, 1, 1), + (2600317, 2044102, 100, 1, 1), + (2600317, 2044412, 100, 1, 1), + (2600317, 2001527, 100, 1, 1), + (2600317, 2870165, 100, 1, 1), + (2600317, 2511026, 100, 1, 1), + (2600317, 4020006, 100, 1, 1), + (2600317, 2022057, 100, 1, 1), + (2600317, 2512273, 100, 1, 1), + (2600317, 4004002, 100, 1, 1), + (2600317, 4006001, 100, 1, 1), + (2600317, 2000005, 100, 1, 1), + (8642009, 4021035, 100, 1, 1), + (8642009, 4021032, 100, 1, 1), + (8642009, 4021034, 100, 1, 1), + (8642009, 2435902, 100, 1, 1), + (8642009, 2431174, 100, 1, 1), + (8642009, 4021020, 100, 1, 1), + (8642009, 4021033, 100, 1, 1), + (8642009, 2590004, 100, 1, 1), + (8642009, 4034951, 100, 1, 1), + (8642009, 4021031, 100, 1, 1), + (8642009, 2000036, 100, 1, 1), + (8642009, 2000037, 100, 1, 1), + (2600316, 4000284, 100, 1, 1), + (2600316, 2510260, 100, 1, 1), + (2600316, 2512058, 100, 1, 1), + (2600316, 2002011, 100, 1, 1), + (2600316, 2512056, 100, 1, 1), + (2600316, 2000005, 100, 1, 1), + (2600316, 2512266, 100, 1, 1), + (2600316, 2512281, 100, 1, 1), + (2600316, 2061001, 100, 1, 1), + (2600316, 4000021, 100, 1, 1), + (2600316, 4020006, 100, 1, 1), + (2600316, 2000002, 100, 1, 1), + (2600316, 2870300, 100, 1, 1), + (2600316, 4011007, 100, 1, 1), + (2600316, 2022142, 100, 1, 1), + (2600316, 4000285, 100, 1, 1), + (2600316, 4010001, 100, 1, 1), + (2600316, 2070004, 100, 1, 1), + (2600316, 4004000, 100, 1, 1), + (2600316, 2512053, 100, 1, 1), + (2600316, 4000283, 100, 1, 1), + (2600316, 2510172, 100, 1, 1), + (2600316, 2049100, 100, 1, 1), + (2600316, 2060001, 100, 1, 1), + (2600316, 2000003, 100, 1, 1), + (2600316, 4021009, 100, 1, 1), + (8642008, 2435902, 100, 1, 1), + (8642008, 2590004, 100, 1, 1), + (8642008, 2000037, 100, 1, 1), + (8642008, 2431174, 100, 1, 1), + (8642008, 4021035, 100, 1, 1), + (8642008, 2000036, 100, 1, 1), + (8642008, 4021031, 100, 1, 1), + (8642008, 4034950, 100, 1, 1), + (8642008, 4021034, 100, 1, 1), + (8642008, 4021020, 100, 1, 1), + (8642008, 4021032, 100, 1, 1), + (8642008, 4021033, 100, 1, 1), + (2600315, 4003005, 100, 1, 1), + (2600315, 2044014, 100, 1, 1), + (2600315, 2000006, 100, 1, 1), + (2600315, 2001002, 100, 1, 1), + (2600315, 2512057, 100, 1, 1), + (2600315, 2044601, 100, 1, 1), + (2600315, 2043401, 100, 1, 1), + (2600315, 2001527, 100, 1, 1), + (2600315, 2870241, 100, 1, 1), + (2600315, 4007007, 100, 1, 1), + (2600315, 4000283, 100, 1, 1), + (2600315, 2070005, 100, 1, 1), + (2600315, 4010005, 100, 1, 1), + (2600315, 4020007, 100, 1, 1), + (2600315, 4007003, 100, 1, 1), + (2600315, 2022057, 100, 1, 1), + (2600315, 2000005, 100, 1, 1), + (2600315, 2061000, 100, 1, 1), + (2600315, 2044301, 100, 1, 1), + (2600315, 4000285, 100, 1, 1), + (2600315, 4000021, 100, 1, 1), + (8642015, 2000037, 100, 1, 1), + (8642015, 4034957, 100, 1, 1), + (8642015, 4021032, 100, 1, 1), + (8642015, 2435902, 100, 1, 1), + (8642015, 2431174, 100, 1, 1), + (8642015, 4021020, 100, 1, 1), + (8642015, 4021031, 100, 1, 1), + (8642015, 4021034, 100, 1, 1), + (8642015, 4021035, 100, 1, 1), + (8642015, 4021033, 100, 1, 1), + (8642015, 2590004, 100, 1, 1), + (8642015, 2000036, 100, 1, 1), + (2600314, 2001527, 100, 1, 1), + (2600314, 2510479, 100, 1, 1), + (2600314, 4020004, 100, 1, 1), + (2600314, 2040901, 100, 1, 1), + (2600314, 2043401, 100, 1, 1), + (2600314, 2061000, 100, 1, 1), + (2600314, 2512281, 100, 1, 1), + (2600314, 2511044, 100, 1, 1), + (2600314, 2870243, 100, 1, 1), + (2600314, 4000021, 100, 1, 1), + (2600314, 2001528, 100, 1, 1), + (2600314, 4000282, 100, 1, 1), + (2600314, 2040328, 100, 1, 1), + (2600314, 2022057, 100, 1, 1), + (2600314, 2048000, 100, 1, 1), + (2600314, 4007006, 100, 1, 1), + (2600314, 2512272, 100, 1, 1), + (2600314, 4003005, 100, 1, 1), + (2600314, 2060000, 100, 1, 1), + (2600314, 4007007, 100, 1, 1), + (2600314, 2001001, 100, 1, 1), + (8642014, 4021031, 100, 1, 1), + (8642014, 2000036, 100, 1, 1), + (8642014, 2590004, 100, 1, 1), + (8642014, 4021032, 100, 1, 1), + (8642014, 4021033, 100, 1, 1), + (8642014, 2000037, 100, 1, 1), + (8642014, 2435902, 100, 1, 1), + (8642014, 4021020, 100, 1, 1), + (8642014, 4021035, 100, 1, 1), + (8642014, 4034956, 100, 1, 1), + (8642014, 2431174, 100, 1, 1), + (8642014, 4021034, 100, 1, 1), + (2600313, 2512067, 100, 1, 1), + (2600313, 2049000, 100, 1, 1), + (2600313, 4010006, 100, 1, 1), + (2600313, 4007005, 100, 1, 1), + (2600313, 2000005, 100, 1, 1), + (2600313, 2043801, 100, 1, 1), + (2600313, 2870201, 100, 1, 1), + (2600313, 2000006, 100, 1, 1), + (2600313, 2040621, 100, 1, 1), + (2600313, 2001526, 100, 1, 1), + (2600313, 4007007, 100, 1, 1), + (2600313, 4003005, 100, 1, 1), + (2600313, 2001002, 100, 1, 1), + (2600313, 4000021, 100, 1, 1), + (2600313, 2060000, 100, 1, 1), + (2600313, 2061000, 100, 1, 1), + (2600313, 2043017, 100, 1, 1), + (8642013, 4021034, 100, 1, 1), + (8642013, 2000037, 100, 1, 1), + (8642013, 2431174, 100, 1, 1), + (8642013, 4021033, 100, 1, 1), + (8642013, 4021031, 100, 1, 1), + (8642013, 2590004, 100, 1, 1), + (8642013, 4021035, 100, 1, 1), + (8642013, 4021020, 100, 1, 1), + (8642013, 2000036, 100, 1, 1), + (8642013, 4034955, 100, 1, 1), + (8642013, 2435902, 100, 1, 1), + (8642013, 4021032, 100, 1, 1), + (2600312, 4004004, 100, 1, 1), + (2600312, 2512058, 100, 1, 1), + (2600312, 2043001, 100, 1, 1), + (2600312, 4000283, 100, 1, 1), + (2600312, 4007002, 100, 1, 1), + (2600312, 4020004, 100, 1, 1), + (2600312, 2000005, 100, 1, 1), + (2600312, 2001001, 100, 1, 1), + (2600312, 2049100, 100, 1, 1), + (2600312, 2040601, 100, 1, 1), + (2600312, 2001526, 100, 1, 1), + (2600312, 4004002, 100, 1, 1), + (2600312, 4000284, 100, 1, 1), + (2600312, 2040031, 100, 1, 1), + (2600312, 2870196, 100, 1, 1), + (2600312, 4000021, 100, 1, 1), + (2600312, 4003005, 100, 1, 1), + (2600312, 4010005, 100, 1, 1), + (2600312, 2000006, 100, 1, 1), + (8642012, 2000037, 100, 1, 1), + (8642012, 4021020, 100, 1, 1), + (8642012, 4021031, 100, 1, 1), + (8642012, 2000036, 100, 1, 1), + (8642012, 2590004, 100, 1, 1), + (8642012, 4021035, 100, 1, 1), + (8642012, 4034954, 100, 1, 1), + (8642012, 2431174, 100, 1, 1), + (8642012, 4021032, 100, 1, 1), + (8642012, 2435902, 100, 1, 1), + (8642012, 4021033, 100, 1, 1), + (8642012, 4021034, 100, 1, 1), + (8642016, 4034958, 100, 1, 1), + (8142100, 4021035, 100, 1, 1), + (8142100, 4021034, 100, 1, 1), + (8142100, 2590004, 100, 1, 1), + (8142100, 4021033, 100, 1, 1), + (8142100, 2000037, 100, 1, 1), + (8142100, 4000184, 100, 1, 1), + (8142100, 4021032, 100, 1, 1), + (8142100, 2434021, 100, 1, 1), + (8142100, 2001528, 100, 1, 1), + (8142100, 4021031, 100, 1, 1), + (8142100, 2870333, 100, 1, 1), + (8641003, 4021034, 100, 1, 1), + (8641003, 4021035, 100, 1, 1), + (8641003, 4021032, 100, 1, 1), + (8641003, 4034925, 100, 1, 1), + (8641003, 4021031, 100, 1, 1), + (8641003, 4034917, 100, 1, 1), + (8641003, 4021033, 100, 1, 1), + (8641003, 2435902, 100, 1, 1), + (8641003, 2000037, 100, 1, 1), + (8641003, 4034934, 100, 1, 1), + (8641003, 4021020, 100, 1, 1), + (8641003, 2000036, 100, 1, 1), + (8641002, 4021032, 100, 1, 1), + (8641002, 2000037, 100, 1, 1), + (8641002, 4021031, 100, 1, 1), + (8641002, 2000036, 100, 1, 1), + (8641002, 4034924, 100, 1, 1), + (8641002, 4021034, 100, 1, 1), + (8641002, 4021020, 100, 1, 1), + (8641002, 2435902, 100, 1, 1), + (8641002, 4021033, 100, 1, 1), + (8641002, 4034934, 100, 1, 1), + (8641002, 4021035, 100, 1, 1), + (8641002, 4034916, 100, 1, 1), + (8641001, 4034934, 100, 1, 1), + (8641001, 4021020, 100, 1, 1), + (8641001, 4021035, 100, 1, 1), + (8641001, 4021032, 100, 1, 1), + (8641001, 4021031, 100, 1, 1), + (8641001, 4021034, 100, 1, 1), + (8641001, 4034915, 100, 1, 1), + (8641001, 4021033, 100, 1, 1), + (8641001, 2000036, 100, 1, 1), + (8641001, 2435902, 100, 1, 1), + (8641001, 4034923, 100, 1, 1), + (8641001, 2000037, 100, 1, 1), + (8641000, 4021035, 100, 1, 1), + (8641000, 2000037, 100, 1, 1), + (8641000, 4021034, 100, 1, 1), + (8641000, 4021020, 100, 1, 1), + (8641000, 4034934, 100, 1, 1), + (8641000, 4034914, 100, 1, 1), + (8641000, 2435902, 100, 1, 1), + (8641000, 4021031, 100, 1, 1), + (8641000, 4021033, 100, 1, 1), + (8641000, 4034922, 100, 1, 1), + (8641000, 4021032, 100, 1, 1), + (8641000, 2000036, 100, 1, 1), + (8641007, 4021020, 100, 1, 1), + (8641007, 4021032, 100, 1, 1), + (8641007, 4021031, 100, 1, 1), + (8641007, 4021033, 100, 1, 1), + (8641007, 4034921, 100, 1, 1), + (8641007, 4034929, 100, 1, 1), + (8641007, 2000037, 100, 1, 1), + (8641007, 2000036, 100, 1, 1), + (8641007, 4021034, 100, 1, 1), + (8641007, 2435902, 100, 1, 1), + (8641007, 4021035, 100, 1, 1), + (8641007, 4034936, 100, 1, 1), + (8641006, 4021032, 100, 1, 1), + (8641006, 4021035, 100, 1, 1), + (8641006, 4034920, 100, 1, 1), + (8641006, 2000037, 100, 1, 1), + (8641006, 4034935, 100, 1, 1), + (8641006, 4034928, 100, 1, 1), + (8641006, 2000036, 100, 1, 1), + (8641006, 4021033, 100, 1, 1), + (8641006, 4021031, 100, 1, 1), + (8641006, 4021034, 100, 1, 1), + (8641006, 2435902, 100, 1, 1), + (8641006, 4021020, 100, 1, 1), + (8641005, 4021035, 100, 1, 1), + (8641005, 4034935, 100, 1, 1), + (8641005, 4021032, 100, 1, 1), + (8641005, 4021033, 100, 1, 1), + (8641005, 4021031, 100, 1, 1), + (8641005, 4034919, 100, 1, 1), + (8641005, 2000036, 100, 1, 1), + (8641005, 2435902, 100, 1, 1), + (8641005, 4021020, 100, 1, 1), + (8641005, 2000037, 100, 1, 1), + (8641005, 4021034, 100, 1, 1), + (8641005, 4034927, 100, 1, 1), + (8641004, 4021031, 100, 1, 1), + (8641004, 4021033, 100, 1, 1), + (8641004, 4021020, 100, 1, 1), + (8641004, 4021032, 100, 1, 1), + (8641004, 4021035, 100, 1, 1), + (8641004, 2000037, 100, 1, 1), + (8641004, 4034918, 100, 1, 1), + (8641004, 4034935, 100, 1, 1), + (8641004, 4021034, 100, 1, 1), + (8641004, 2000036, 100, 1, 1), + (8641004, 2435902, 100, 1, 1), + (8641004, 4034926, 100, 1, 1), + (3400001, 4034452, 100, 1, 1), + (3400001, 4034451, 100, 1, 1), + (3400001, 3400002, 100, 1, 1), + (8641009, 4021020, 100, 1, 1), + (8641009, 4021034, 100, 1, 1), + (8641009, 4021035, 100, 1, 1), + (8641009, 2435902, 100, 1, 1), + (8641009, 4021033, 100, 1, 1), + (8641009, 2000036, 100, 1, 1), + (8641009, 4021031, 100, 1, 1), + (8641009, 2000037, 100, 1, 1), + (8641009, 4021032, 100, 1, 1), + (3400000, 4034450, 100, 1, 1), + (8641008, 4021032, 100, 1, 1), + (8641008, 4021031, 100, 1, 1), + (8641008, 2000037, 100, 1, 1), + (8641008, 4034930, 100, 1, 1), + (8641008, 4021033, 100, 1, 1), + (8641008, 2000036, 100, 1, 1), + (8641008, 4021020, 100, 1, 1), + (8641008, 4021035, 100, 1, 1), + (8641008, 2435902, 100, 1, 1), + (8641008, 4034921, 100, 1, 1), + (8641008, 4034936, 100, 1, 1), + (8641008, 4021034, 100, 1, 1), + (3400006, 4000543, 100, 1, 1), + (3400004, 4000257, 100, 1, 1), + (5150001, 2870213, 100, 1, 1), + (5150001, 4000206, 100, 1, 1), + (5150001, 2434021, 100, 1, 1), + (9000201, 4031013, 9000, 1, 1), + (4230600, 4000332, 100, 1, 1), + (4230600, 2870167, 100, 1, 1), + (8141300, 2070004, 100, 1, 1), + (8141300, 2434021, 100, 1, 1), + (8141300, 2590004, 100, 1, 1), + (8141300, 4021035, 100, 1, 1), + (8141300, 2001528, 100, 1, 1), + (8141300, 2000037, 100, 1, 1), + (8141300, 4021033, 100, 1, 1), + (8141300, 4000183, 100, 1, 1), + (8141300, 4021032, 100, 1, 1), + (8141300, 4021031, 100, 1, 1), + (8141300, 2870331, 100, 1, 1), + (8141300, 4021034, 100, 1, 1), + (5400000, 4000088, 100, 1, 1), + (5400000, 2870227, 100, 1, 1), + (8910100, 3010512, 100, 1, 1), + (8910100, 2000005, 100, 1, 1), + (8910100, 2433515, 100, 1, 1), + (8910100, 4310064, 100, 1, 1), + (8910100, 2433103, 100, 1, 1), + (8910100, 4310029, 100, 1, 1), + (1140100, 4010004, 100, 1, 1), + (1140100, 4000195, 100, 1, 1), + (1140100, 4020007, 100, 1, 1), + (1140100, 4010000, 100, 1, 1), + (1140100, 2040620, 100, 1, 1), + (1140100, 2043100, 100, 1, 1), + (1140100, 2040823, 100, 1, 1), + (1140100, 2044802, 100, 1, 1), + (1140100, 2870014, 100, 1, 1), + (1140100, 2000001, 100, 1, 1), + (1140100, 2060000, 100, 1, 1), + (8300006, 4001401, 100, 1, 1), + (8300007, 4001545, 100, 1, 1), + (8300007, 2431657, 100, 1, 1), + (2600326, 4021035, 100, 1, 1), + (2600326, 4021033, 100, 1, 1), + (2600326, 4021032, 100, 1, 1), + (2600326, 2000036, 100, 1, 1), + (2600326, 4021040, 100, 1, 1), + (2600326, 2001554, 100, 1, 1), + (2600326, 2434021, 100, 1, 1), + (2600326, 4021031, 100, 1, 1), + (2600326, 4009026, 100, 1, 1), + (2600326, 4021034, 100, 1, 1), + (2600326, 4310085, 100, 1, 1), + (2600326, 2590004, 100, 1, 1), + (2600325, 2000036, 100, 1, 1), + (2600325, 4021032, 100, 1, 1), + (2600325, 4310085, 100, 1, 1), + (2600325, 4009025, 100, 1, 1), + (2600325, 4021040, 100, 1, 1), + (2600325, 4021034, 100, 1, 1), + (2600325, 4021031, 100, 1, 1), + (2600325, 2434021, 100, 1, 1), + (2600325, 4021033, 100, 1, 1), + (2600325, 4021035, 100, 1, 1), + (2600325, 2001554, 100, 1, 1), + (2600325, 2590004, 100, 1, 1), + (2600324, 4021032, 100, 1, 1), + (2600324, 4021035, 100, 1, 1), + (2600324, 4021033, 100, 1, 1), + (2600324, 2001554, 100, 1, 1), + (2600324, 4021031, 100, 1, 1), + (2600324, 4021034, 100, 1, 1), + (2600324, 2870283, 100, 1, 1), + (2600324, 2000036, 100, 1, 1), + (2600324, 2590004, 100, 1, 1), + (2600324, 2434021, 100, 1, 1), + (2600324, 4000297, 100, 1, 1), + (2600323, 4021034, 100, 1, 1), + (2600323, 2000037, 100, 1, 1), + (2600323, 2049401, 100, 1, 1), + (2600323, 4000296, 100, 1, 1), + (2600323, 4021032, 100, 1, 1), + (2600323, 2590004, 100, 1, 1), + (2600323, 4021033, 100, 1, 1), + (2600323, 2434021, 100, 1, 1), + (2600323, 2430692, 100, 1, 1), + (2600323, 2001528, 100, 1, 1), + (2600323, 4021035, 100, 1, 1), + (2600323, 2870244, 100, 1, 1), + (2600323, 4021031, 100, 1, 1), + (3230101, 2870093, 100, 1, 1), + (3230101, 4000035, 100, 1, 1), + (2600322, 2430692, 100, 1, 1), + (2600322, 4003005, 100, 1, 1), + (2600322, 4021034, 100, 1, 1), + (2600322, 4021031, 100, 1, 1), + (2600322, 2512127, 100, 1, 1), + (2600322, 2512272, 100, 1, 1), + (2600322, 2434021, 100, 1, 1), + (2600322, 4021032, 100, 1, 1), + (2600322, 4021035, 100, 1, 1), + (2600322, 2049401, 100, 1, 1), + (2600322, 2000037, 100, 1, 1), + (2600322, 2870242, 100, 1, 1), + (2600322, 2049000, 100, 1, 1), + (2600322, 4021033, 100, 1, 1), + (2600322, 2512278, 100, 1, 1), + (2600322, 4000021, 100, 1, 1), + (2600322, 2590004, 100, 1, 1), + (2600322, 2001528, 100, 1, 1), + (2600322, 2048002, 100, 1, 1), + (2600322, 4000295, 100, 1, 1), + (3230100, 2870092, 100, 1, 1), + (3230100, 4000013, 100, 1, 1), + (2600321, 4310085, 100, 1, 1), + (2600321, 4021032, 100, 1, 1), + (2600321, 4021031, 100, 1, 1), + (2600321, 4021035, 100, 1, 1), + (2600321, 4021034, 100, 1, 1), + (2600321, 4021040, 100, 1, 1), + (2600321, 4021033, 100, 1, 1), + (3230103, 2870095, 100, 1, 1), + (3230103, 4000100, 100, 1, 1), + (8820000, 2433103, 100, 1, 1), + (8820000, 4021034, 100, 1, 1), + (8820000, 4021033, 100, 1, 1), + (8820000, 4021032, 100, 1, 1), + (8820000, 2431661, 100, 1, 1), + (8820000, 2000005, 100, 1, 1), + (8820000, 4310029, 100, 1, 1), + (8820000, 4021031, 100, 1, 1), + (8820000, 4021035, 100, 1, 1), + (8820000, 4021020, 100, 1, 1), + (3230102, 2870094, 100, 1, 1), + (3230102, 4000043, 100, 1, 1), + (5100005, 2000036, 100, 1, 1), + (5100005, 2001554, 100, 1, 1), + (5100005, 4021031, 100, 1, 1), + (5100005, 4021034, 100, 1, 1), + (5100005, 2870187, 100, 1, 1), + (5100005, 2434021, 100, 1, 1), + (5100005, 4021033, 100, 1, 1), + (5100005, 4021032, 100, 1, 1), + (5100005, 4034651, 100, 1, 1), + (5100005, 4034653, 100, 1, 1), + (5100005, 4021035, 100, 1, 1), + (5100005, 2590004, 100, 1, 1), + (3230104, 2870096, 100, 1, 1), + (3230104, 4000167, 100, 1, 1), + (5100004, 2870186, 100, 1, 1), + (5100004, 4000172, 100, 1, 1), + (5100004, 4000021, 100, 1, 1), + (5100000, 2590004, 100, 1, 1), + (5100000, 2431174, 100, 1, 1), + (5100000, 4021034, 100, 1, 1), + (5100000, 2870184, 100, 1, 1), + (5100000, 4021033, 100, 1, 1), + (5100000, 4021032, 100, 1, 1), + (5100000, 2001001, 100, 1, 1), + (5100000, 4021035, 100, 1, 1), + (5100000, 2001002, 100, 1, 1), + (5100000, 4000048, 100, 1, 1), + (5100003, 2000036, 100, 1, 1), + (5100003, 4021033, 100, 1, 1), + (5100003, 4021035, 100, 1, 1), + (5100003, 4021032, 100, 1, 1), + (5100003, 2870185, 100, 1, 1), + (5100003, 2000037, 100, 1, 1), + (5100003, 2431174, 100, 1, 1), + (5100003, 2590004, 100, 1, 1), + (5100003, 4021034, 100, 1, 1), + (5100002, 4000081, 100, 1, 1), + (3110301, 2870072, 100, 1, 1), + (3110301, 4000352, 100, 1, 1), + (1140130, 2043800, 100, 1, 1), + (1140130, 2000000, 100, 1, 1), + (1140130, 4000195, 100, 1, 1), + (1140130, 2870015, 100, 1, 1), + (1140130, 2044802, 100, 1, 1), + (1140130, 2044200, 100, 1, 1), + (1140130, 2044400, 100, 1, 1), + (1140130, 2060000, 100, 1, 1), + (5120502, 2590004, 100, 1, 1), + (5120502, 2512124, 100, 1, 1), + (5120502, 2001528, 100, 1, 1), + (5120502, 2512281, 100, 1, 1), + (5120502, 2048000, 100, 1, 1), + (5120502, 4006000, 100, 1, 1), + (5120502, 2431174, 100, 1, 1), + (5120502, 2000037, 100, 1, 1), + (5120502, 4021034, 100, 1, 1), + (5120502, 4021033, 100, 1, 1), + (5120502, 2430692, 100, 1, 1), + (5120502, 4009020, 100, 1, 1), + (5120502, 4021031, 100, 1, 1), + (5120502, 2870198, 100, 1, 1), + (5120502, 4021032, 100, 1, 1), + (5120502, 4021035, 100, 1, 1), + (5120502, 2049401, 100, 1, 1), + (5120500, 4003005, 100, 1, 1), + (5120500, 2049100, 100, 1, 1), + (5120500, 4000284, 100, 1, 1), + (5120500, 2590004, 100, 1, 1), + (5120500, 2001526, 100, 1, 1), + (5120500, 2512058, 100, 1, 1), + (5120500, 4021033, 100, 1, 1), + (5120500, 2870196, 100, 1, 1), + (5120500, 2000006, 100, 1, 1), + (5120500, 4021032, 100, 1, 1), + (5120500, 2001001, 100, 1, 1), + (5120500, 2430692, 100, 1, 1), + (5120500, 4021034, 100, 1, 1), + (5120500, 4021035, 100, 1, 1), + (5120500, 4000283, 100, 1, 1), + (5120500, 2431174, 100, 1, 1), + (5120500, 2001527, 100, 1, 1), + (5120500, 4000021, 100, 1, 1), + (2600423, 4000617, 100, 1, 1), + (2600423, 2870307, 100, 1, 1), + (2600422, 2001002, 100, 1, 1), + (2600422, 4021032, 100, 1, 1), + (2600422, 2590004, 100, 1, 1), + (2600422, 4000616, 100, 1, 1), + (2600422, 4021033, 100, 1, 1), + (2600422, 4021034, 100, 1, 1), + (2600422, 2434021, 100, 1, 1), + (2600422, 2001001, 100, 1, 1), + (2600422, 4021035, 100, 1, 1), + (2600421, 4021033, 100, 1, 1), + (2600421, 4021034, 100, 1, 1), + (2600421, 2001002, 100, 1, 1), + (2600421, 2434021, 100, 1, 1), + (2600421, 2001001, 100, 1, 1), + (2600421, 2590004, 100, 1, 1), + (2600421, 4021032, 100, 1, 1), + (2600421, 4021035, 100, 1, 1), + (2600421, 4000615, 100, 1, 1), + (8520000, 4000175, 100, 1, 1), + (8520000, 4021033, 100, 1, 1), + (8520000, 4021035, 100, 1, 1), + (8520000, 4001085, 100, 1, 1), + (8520000, 4021034, 100, 1, 1), + (8520000, 4021032, 100, 1, 1), + (8520000, 4031253, 100, 1, 1), + (8520000, 4021031, 100, 1, 1), + (8520000, 2431895, 100, 1, 1), + (2600420, 4000613, 100, 1, 1), + (2600419, 4009046, 100, 1, 1), + (2600418, 2870309, 100, 1, 1), + (2600418, 4032776, 100, 1, 1), + (2600418, 4000619, 100, 1, 1), + (2600417, 2870297, 100, 1, 1), + (2600417, 4032771, 100, 1, 1), + (2600417, 4000614, 100, 1, 1), + (2600416, 4032771, 100, 1, 1), + (2600416, 4021033, 100, 1, 1), + (2600416, 4021032, 100, 1, 1), + (2600416, 4021034, 100, 1, 1), + (2600416, 2870297, 100, 1, 1), + (2600416, 2434021, 100, 1, 1), + (2600416, 2001002, 100, 1, 1), + (2600416, 2001001, 100, 1, 1), + (2600416, 2590004, 100, 1, 1), + (2600416, 4034533, 100, 1, 1), + (2600416, 4021035, 100, 1, 1), + (3230200, 4000059, 100, 1, 1), + (3230200, 2430692, 100, 1, 1), + (3230200, 2870097, 100, 1, 1), + (3230200, 2431174, 100, 1, 1), + (3230200, 4021032, 100, 1, 1), + (3230200, 4021035, 100, 1, 1), + (3230200, 2001001, 100, 1, 1), + (3230200, 2001002, 100, 1, 1), + (3230200, 4021033, 100, 1, 1), + (3230200, 2590004, 100, 1, 1), + (3230200, 4031309, 100, 1, 1), + (3230200, 4021034, 100, 1, 1), + (2600424, 4000618, 100, 1, 1), + (2600424, 2870308, 100, 1, 1), + (4250000, 4033109, 500, 1, 1), + (4250000, 4000436, 100, 1, 1), + (4250000, 2870169, 100, 1, 1), + (4250001, 2870170, 100, 1, 1), + (4250001, 4033109, 500, 1, 1), + (4250001, 4000438, 100, 1, 1), + (6230401, 2870254, 100, 1, 1), + (8860002, 2002058, 100, 1, 1), + (9000300, 4031013, 9000, 1, 1), + (8860001, 2433103, 100, 1, 1), + (8860001, 4021033, 100, 1, 1), + (8860001, 4021035, 100, 1, 1), + (8860001, 4021032, 100, 1, 1), + (8860001, 2000005, 100, 1, 1), + (8860001, 4310029, 100, 1, 1), + (8860001, 4021031, 100, 1, 1), + (8860001, 4021034, 100, 1, 1), + (8860001, 2431753, 100, 1, 1), + (8860000, 4021033, 100, 1, 1), + (8860000, 4310029, 100, 1, 1), + (8860000, 4021031, 100, 1, 1), + (8860000, 2431753, 100, 1, 1), + (8860000, 4021032, 100, 1, 1), + (8860000, 2000004, 100, 1, 1), + (8860000, 4021034, 100, 1, 1), + (8860000, 2433103, 100, 1, 1), + (8860000, 4021035, 100, 1, 1), + (6130101, 4000040, 100, 1, 1), + (6130101, 2070006, 100, 1, 1), + (3100102, 2870067, 100, 1, 1), + (3100102, 4000335, 100, 1, 1), + (3100101, 2870066, 100, 1, 1), + (3100101, 4000334, 100, 1, 1), + (6130103, 2001002, 100, 1, 1), + (6130103, 2590004, 100, 1, 1), + (6130103, 2001001, 100, 1, 1), + (6130103, 2434021, 100, 1, 1), + (6130103, 4000050, 100, 1, 1), + (150002, 2060000, 100, 1, 1), + (150002, 4000597, 100, 1, 1), + (150002, 2870007, 100, 1, 1), + (150002, 4020006, 100, 1, 1), + (150002, 4011004, 100, 1, 1), + (150002, 2061000, 100, 1, 1), + (150002, 2000003, 100, 1, 1), + (150002, 2000000, 100, 1, 1), + (2600407, 2000003, 100, 1, 1), + (2600407, 2434021, 100, 1, 1), + (2600407, 2430692, 100, 1, 1), + (2600407, 2060000, 100, 1, 1), + (2600407, 4034341, 100, 1, 1), + (2600407, 2000002, 100, 1, 1), + (2600407, 2870017, 100, 1, 1), + (150000, 2000001, 100, 1, 1), + (150000, 2061000, 100, 1, 1), + (150000, 2000003, 100, 1, 1), + (150000, 2000000, 100, 1, 1), + (150000, 4020005, 100, 1, 1), + (150000, 4010004, 100, 1, 1), + (150000, 2870005, 100, 1, 1), + (150000, 2060000, 100, 1, 1), + (150000, 4000595, 100, 1, 1), + (2600405, 2434021, 100, 1, 1), + (2600405, 4000765, 100, 1, 1), + (2600405, 2000006, 100, 1, 1), + (2600405, 2430692, 100, 1, 1), + (150001, 4020000, 100, 1, 1), + (150001, 2870006, 100, 1, 1), + (150001, 4020005, 100, 1, 1), + (150001, 2000000, 100, 1, 1), + (150001, 4000596, 100, 1, 1), + (150001, 2060000, 100, 1, 1), + (150001, 2000003, 100, 1, 1), + (150001, 2000001, 100, 1, 1), + (150001, 4010003, 100, 1, 1), + (150001, 2061000, 100, 1, 1), + (2600404, 2000002, 100, 1, 1), + (2600404, 4000604, 100, 1, 1), + (2600404, 4033123, 100, 1, 1), + (2600404, 2000003, 100, 1, 1), + (2600404, 2434021, 100, 1, 1), + (2600404, 2430692, 100, 1, 1), + (2600404, 2870041, 100, 1, 1), + (2600403, 2000002, 100, 1, 1), + (2600403, 2000003, 100, 1, 1), + (2600403, 2434021, 100, 1, 1), + (2600403, 4000603, 100, 1, 1), + (2600403, 2870040, 100, 1, 1), + (2600403, 2430692, 100, 1, 1), + (2600402, 2000003, 100, 1, 1), + (2600402, 2870039, 100, 1, 1), + (2600402, 2430692, 100, 1, 1), + (2600402, 2000002, 100, 1, 1), + (2600402, 2434021, 100, 1, 1), + (2600402, 2060000, 100, 1, 1), + (2600402, 4000602, 100, 1, 1), + (2600401, 4000601, 100, 1, 1), + (2600401, 2000002, 100, 1, 1), + (2600401, 2870038, 100, 1, 1), + (2600401, 2061000, 100, 1, 1), + (2600401, 2000003, 100, 1, 1), + (2600401, 2434021, 100, 1, 1), + (2600401, 2430692, 100, 1, 1), + (2600400, 4000598, 100, 1, 1), + (2600400, 2000003, 100, 1, 1), + (2600400, 2870016, 100, 1, 1), + (2600400, 4033121, 100, 1, 1), + (2600400, 2060000, 100, 1, 1), + (2600400, 2000002, 100, 1, 1), + (2600400, 2434021, 100, 1, 1), + (2600400, 2430692, 100, 1, 1), + (2600415, 4032770, 100, 1, 1), + (2600415, 4000611, 100, 1, 1), + (2600415, 2434021, 100, 1, 1), + (2600415, 2870296, 100, 1, 1), + (2600415, 2430692, 100, 1, 1), + (8220037, 4021031, 100, 1, 1), + (8220037, 4021034, 100, 1, 1), + (8220037, 2434021, 100, 1, 1), + (8220037, 4021032, 100, 1, 1), + (8220037, 2590004, 100, 1, 1), + (8220037, 4021033, 100, 1, 1), + (8220037, 2000036, 100, 1, 1), + (8220037, 2001554, 100, 1, 1), + (8220037, 4021035, 100, 1, 1), + (2600414, 4034074, 100, 1, 1), + (2600414, 2430692, 100, 1, 1), + (2600414, 2870295, 100, 1, 1), + (2600414, 4000610, 100, 1, 1), + (2600414, 2434021, 100, 1, 1), + (2600413, 4000609, 100, 1, 1), + (2600413, 2870294, 100, 1, 1), + (2600413, 2430692, 100, 1, 1), + (2600413, 2434021, 100, 1, 1), + (2600412, 4009039, 100, 1, 1), + (2600412, 2430692, 100, 1, 1), + (2600412, 2434021, 100, 1, 1), + (2600411, 2000002, 100, 1, 1), + (2600411, 2000006, 100, 1, 1), + (2600411, 4000607, 100, 1, 1), + (2600411, 2430692, 100, 1, 1), + (2600411, 2382119, 100, 1, 1), + (2600411, 2434021, 100, 1, 1), + (2600410, 2434021, 100, 1, 1), + (2600410, 4000606, 100, 1, 1), + (2600410, 2000006, 100, 1, 1), + (2600410, 2382115, 100, 1, 1), + (2600410, 2000002, 100, 1, 1), + (2600410, 2430692, 100, 1, 1), + (2600409, 2000002, 100, 1, 1), + (2600409, 4000605, 100, 1, 1), + (2600409, 2434021, 100, 1, 1), + (2600409, 2000006, 100, 1, 1), + (2600409, 2382114, 100, 1, 1), + (2600409, 2430692, 100, 1, 1), + (2600408, 2000003, 100, 1, 1), + (2600408, 2430692, 100, 1, 1), + (2600408, 4033122, 100, 1, 1), + (2600408, 2434021, 100, 1, 1), + (2600408, 2870018, 100, 1, 1), + (2600408, 4000600, 100, 1, 1), + (2600408, 2000002, 100, 1, 1), + (5100109, 4021035, 100, 1, 1), + (5100109, 2434021, 100, 1, 1), + (5100109, 4021032, 100, 1, 1), + (5100109, 4021033, 100, 1, 1), + (5100109, 4021034, 100, 1, 1), + (5100109, 2000036, 100, 1, 1), + (5100109, 4021031, 100, 1, 1), + (5100109, 2590004, 100, 1, 1), + (5100109, 2001554, 100, 1, 1), + (8810118, 4310029, 100, 1, 1), + (8810118, 2435367, 100, 1, 1), + (8810118, 2000005, 100, 1, 1), + (8810118, 2433103, 100, 1, 1), + (8810118, 4001094, 100, 1, 1), + (5100108, 2434021, 100, 1, 1), + (5100108, 2000036, 100, 1, 1), + (5100108, 2590004, 100, 1, 1), + (5100108, 4021033, 100, 1, 1), + (5100108, 2001554, 100, 1, 1), + (5100108, 2870286, 100, 1, 1), + (5100108, 4021034, 100, 1, 1), + (5100108, 4021035, 100, 1, 1), + (5100108, 4021031, 100, 1, 1), + (5100108, 4021032, 100, 1, 1), + (5100104, 2001554, 100, 1, 1), + (5100104, 4021033, 100, 1, 1), + (5100104, 4021034, 100, 1, 1), + (5100104, 2434021, 100, 1, 1), + (5100104, 2590004, 100, 1, 1), + (5100104, 4021032, 100, 1, 1), + (5100104, 2000036, 100, 1, 1), + (5100104, 4021031, 100, 1, 1), + (5100104, 4021035, 100, 1, 1), + (5100107, 4021035, 100, 1, 1), + (5100107, 2001554, 100, 1, 1), + (5100107, 2000036, 100, 1, 1), + (5100107, 2590004, 100, 1, 1), + (5100107, 4021031, 100, 1, 1), + (5100107, 2434021, 100, 1, 1), + (5100107, 2870288, 100, 1, 1), + (5100107, 4021032, 100, 1, 1), + (5100107, 4021033, 100, 1, 1), + (5100107, 4021034, 100, 1, 1), + (5100106, 4021031, 100, 1, 1), + (5100106, 4021032, 100, 1, 1), + (5100106, 2001554, 100, 1, 1), + (5100106, 4021034, 100, 1, 1), + (5100106, 2434021, 100, 1, 1), + (5100106, 2590004, 100, 1, 1), + (5100106, 4021033, 100, 1, 1), + (5100106, 2000036, 100, 1, 1), + (5100106, 2870287, 100, 1, 1), + (5100106, 4021035, 100, 1, 1), + (2600503, 4021034, 100, 1, 1), + (2600503, 4021035, 100, 1, 1), + (2600503, 4021033, 100, 1, 1), + (2600503, 2870074, 100, 1, 1), + (2600503, 4034481, 100, 1, 1), + (2600503, 4021032, 100, 1, 1), + (3220001, 2044001, 100, 1, 1), + (3220001, 2048004, 100, 1, 1), + (3220001, 2022155, 100, 1, 1), + (3220001, 2045301, 100, 1, 1), + (3220001, 2000001, 100, 1, 1), + (3220001, 2000003, 100, 1, 1), + (3220001, 2040004, 100, 1, 1), + (3220001, 4010002, 100, 1, 1), + (3220001, 2040927, 100, 1, 1), + (3220001, 2040504, 100, 1, 1), + (3220001, 4020003, 100, 1, 1), + (3220001, 2040801, 100, 1, 1), + (3220001, 4000331, 100, 1, 1), + (3220001, 2044201, 100, 1, 1), + (3220001, 2043701, 100, 1, 1), + (3220001, 4010007, 100, 1, 1), + (3220001, 2041007, 100, 1, 1), + (3220001, 2044501, 100, 1, 1), + (3220001, 2044601, 100, 1, 1), + (3220001, 2040824, 100, 1, 1), + (3220001, 2045201, 100, 1, 1), + (3220001, 2048000, 100, 1, 1), + (3220001, 2001527, 100, 1, 1), + (3220001, 2040501, 100, 1, 1), + (3220001, 2043801, 100, 1, 1), + (3220001, 2040924, 100, 1, 1), + (3220001, 2044101, 100, 1, 1), + (3220001, 2043201, 100, 1, 1), + (3220001, 2870091, 100, 1, 1), + (3220001, 4000330, 100, 1, 1), + (3220001, 4000329, 100, 1, 1), + (2600502, 4021032, 100, 1, 1), + (2600502, 4021033, 100, 1, 1), + (2600502, 2870073, 100, 1, 1), + (2600502, 4034481, 100, 1, 1), + (2600502, 4021034, 100, 1, 1), + (2600502, 4021035, 100, 1, 1), + (3220000, 4000003, 100, 1, 1), + (3220000, 4000195, 100, 1, 1), + (3220000, 4000005, 100, 1, 1), + (3220000, 2870090, 100, 1, 1), + (3220000, 4000018, 100, 1, 1), + (2600501, 4021034, 100, 1, 1), + (2600501, 4021035, 100, 1, 1), + (2600501, 4009061, 100, 1, 1), + (2600501, 4021032, 100, 1, 1), + (2600501, 4021033, 100, 1, 1), + (2600500, 2001002, 100, 1, 1), + (2600500, 4021032, 100, 1, 1), + (2600500, 4021033, 100, 1, 1), + (2600500, 2870071, 100, 1, 1), + (2600500, 4021035, 100, 1, 1), + (2600500, 2590004, 100, 1, 1), + (2600500, 4021034, 100, 1, 1), + (2600500, 2001001, 100, 1, 1), + (2600500, 2434021, 100, 1, 1), + (2600500, 4000353, 100, 1, 1), + (6230602, 2434021, 100, 1, 1), + (6230602, 2870258, 100, 1, 1), + (6230602, 4000207, 100, 1, 1), + (2600511, 2870271, 100, 1, 1), + (2600511, 4021034, 100, 1, 1), + (2600511, 2001001, 100, 1, 1), + (2600511, 4021031, 100, 1, 1), + (2600511, 4000361, 100, 1, 1), + (2600511, 2590004, 100, 1, 1), + (2600511, 2434021, 100, 1, 1), + (2600511, 4021032, 100, 1, 1), + (2600511, 2001002, 100, 1, 1), + (2600511, 4021035, 100, 1, 1), + (2600511, 4021033, 100, 1, 1), + (2600510, 2001002, 100, 1, 1), + (2600510, 4021035, 100, 1, 1), + (2600510, 4021034, 100, 1, 1), + (2600510, 2870233, 100, 1, 1), + (2600510, 2434021, 100, 1, 1), + (2600510, 4021032, 100, 1, 1), + (2600510, 4021033, 100, 1, 1), + (2600510, 4034482, 100, 1, 1), + (2600510, 2590004, 100, 1, 1), + (2600510, 2001001, 100, 1, 1), + (2600509, 4021032, 100, 1, 1), + (2600509, 4021035, 100, 1, 1), + (2600509, 4000411, 100, 1, 1), + (2600509, 4021034, 100, 1, 1), + (2600509, 4021033, 100, 1, 1), + (2600508, 4021033, 100, 1, 1), + (2600508, 2590004, 100, 1, 1), + (2600508, 2001002, 100, 1, 1), + (2600508, 4021035, 100, 1, 1), + (2600508, 4021034, 100, 1, 1), + (2600508, 2870188, 100, 1, 1), + (2600508, 2001001, 100, 1, 1), + (2600508, 4000360, 100, 1, 1), + (2600508, 4021032, 100, 1, 1), + (2600508, 2434021, 100, 1, 1), + (2600507, 4021033, 100, 1, 1), + (2600507, 2001002, 100, 1, 1), + (2600507, 2434021, 100, 1, 1), + (2600507, 4021032, 100, 1, 1), + (2600507, 4021035, 100, 1, 1), + (2600507, 4000359, 100, 1, 1), + (2600507, 2001001, 100, 1, 1), + (2600507, 2870126, 100, 1, 1), + (2600507, 4021034, 100, 1, 1), + (2600507, 2590004, 100, 1, 1), + (2600506, 4021032, 100, 1, 1), + (2600506, 2590004, 100, 1, 1), + (2600506, 4000358, 100, 1, 1), + (2600506, 4021034, 100, 1, 1), + (2600506, 4021035, 100, 1, 1), + (2600506, 2434021, 100, 1, 1), + (2600506, 2001002, 100, 1, 1), + (2600506, 2001001, 100, 1, 1), + (2600506, 4021033, 100, 1, 1), + (2600506, 2870125, 100, 1, 1), + (2600504, 4021032, 100, 1, 1), + (2600504, 4021034, 100, 1, 1), + (2600504, 4021033, 100, 1, 1), + (2600504, 4021035, 100, 1, 1), + (2600504, 4034505, 100, 1, 1), + (8210013, 2431656, 100, 1, 1), + (8210005, 4032838, 100, 1, 1), + (8210005, 4021031, 100, 1, 1), + (8210005, 2001528, 100, 1, 1), + (8210005, 4021033, 100, 1, 1), + (8210005, 2512031, 100, 1, 1), + (8210005, 2000037, 100, 1, 1), + (8210005, 4033113, 100, 1, 1), + (8210005, 2434021, 100, 1, 1), + (8210005, 4021034, 100, 1, 1), + (8210005, 2512007, 100, 1, 1), + (8210005, 2512176, 100, 1, 1), + (8210005, 2512275, 100, 1, 1), + (8210005, 2590004, 100, 1, 1), + (8210005, 4032835, 100, 1, 1), + (8210005, 2512170, 100, 1, 1), + (8210005, 2512278, 100, 1, 1), + (8210005, 4021032, 100, 1, 1), + (8210005, 4000629, 100, 1, 1), + (8210005, 2430692, 100, 1, 1), + (8210005, 4000630, 100, 1, 1), + (8210005, 2511049, 100, 1, 1), + (8210005, 2870448, 100, 1, 1), + (8210005, 4021035, 100, 1, 1), + (8210004, 2512266, 100, 1, 1), + (8210004, 2512275, 100, 1, 1), + (8210004, 4000627, 100, 1, 1), + (8210004, 4021032, 100, 1, 1), + (8210004, 2870447, 100, 1, 1), + (8210004, 4021035, 100, 1, 1), + (8210004, 2430692, 100, 1, 1), + (8210004, 2512284, 100, 1, 1), + (8210004, 4021031, 100, 1, 1), + (8210004, 4021033, 100, 1, 1), + (8210004, 2434021, 100, 1, 1), + (8210004, 2001528, 100, 1, 1), + (8210004, 4033113, 100, 1, 1), + (8210004, 2049401, 100, 1, 1), + (8210004, 2000037, 100, 1, 1), + (8210004, 4021034, 100, 1, 1), + (8210004, 2590004, 100, 1, 1), + (8210004, 4000630, 100, 1, 1), + (8210004, 4000628, 100, 1, 1), + (8210001, 4033113, 100, 1, 1), + (8210001, 2512176, 100, 1, 1), + (8210001, 4021034, 100, 1, 1), + (8210001, 2512117, 100, 1, 1), + (8210001, 2511049, 100, 1, 1), + (8210001, 2512269, 100, 1, 1), + (8210001, 2512284, 100, 1, 1), + (8210001, 4021035, 100, 1, 1), + (8210001, 2430692, 100, 1, 1), + (8210001, 4021033, 100, 1, 1), + (8210001, 2048004, 100, 1, 1), + (8210001, 2512248, 100, 1, 1), + (8210001, 2590004, 100, 1, 1), + (8210001, 2070005, 100, 1, 1), + (8210001, 2048000, 100, 1, 1), + (8210001, 4021032, 100, 1, 1), + (8210001, 4000626, 100, 1, 1), + (8210001, 2512283, 100, 1, 1), + (8210001, 2070003, 100, 1, 1), + (8210001, 2001528, 100, 1, 1), + (8210001, 2870444, 100, 1, 1), + (8210001, 2049401, 100, 1, 1), + (8210001, 2512245, 100, 1, 1), + (8210001, 4021031, 100, 1, 1), + (8210001, 4000630, 100, 1, 1), + (8210001, 2512273, 100, 1, 1), + (8210001, 2000037, 100, 1, 1), + (8210001, 2434021, 100, 1, 1), + (8210001, 2512133, 100, 1, 1), + (8210000, 2070005, 100, 1, 1), + (8210000, 4033113, 100, 1, 1), + (8210000, 4021035, 100, 1, 1), + (8210000, 4021033, 100, 1, 1), + (8210000, 4000630, 100, 1, 1), + (8210000, 4021032, 100, 1, 1), + (8210000, 2434021, 100, 1, 1), + (8210000, 2870443, 100, 1, 1), + (8210000, 4021034, 100, 1, 1), + (8210000, 4021031, 100, 1, 1), + (8210000, 4000625, 100, 1, 1), + (8210000, 2001528, 100, 1, 1), + (8210000, 2000037, 100, 1, 1), + (8210003, 4000627, 100, 1, 1), + (8210003, 4021032, 100, 1, 1), + (8210003, 4021031, 100, 1, 1), + (8210003, 2434021, 100, 1, 1), + (8210003, 2001528, 100, 1, 1), + (8210003, 4021033, 100, 1, 1), + (8210003, 4033113, 100, 1, 1), + (8210003, 4021035, 100, 1, 1), + (8210003, 2000037, 100, 1, 1), + (8210003, 2870446, 100, 1, 1), + (8210003, 2070010, 100, 1, 1), + (8210003, 2512270, 100, 1, 1), + (8210003, 2590004, 100, 1, 1), + (8210003, 4000630, 100, 1, 1), + (8210003, 2512006, 100, 1, 1), + (8210003, 2048004, 100, 1, 1), + (8210003, 2049401, 100, 1, 1), + (8210003, 2330004, 100, 1, 1), + (8210003, 2512279, 100, 1, 1), + (8210003, 4021034, 100, 1, 1), + (8210002, 2590004, 100, 1, 1), + (8210002, 4021033, 100, 1, 1), + (8210002, 2870445, 100, 1, 1), + (8210002, 4033113, 100, 1, 1), + (8210002, 4000626, 100, 1, 1), + (8210002, 4021032, 100, 1, 1), + (8210002, 4021035, 100, 1, 1), + (8210002, 2000037, 100, 1, 1), + (8210002, 4021031, 100, 1, 1), + (8210002, 2434021, 100, 1, 1), + (8210002, 4021034, 100, 1, 1), + (8210002, 2001528, 100, 1, 1), + (8210002, 4000630, 100, 1, 1), + (8211004, 4021033, 100, 1, 1), + (8211004, 4021035, 100, 1, 1), + (8211004, 4000630, 100, 1, 1), + (8211004, 4021032, 100, 1, 1), + (8211004, 4009173, 100, 1, 1), + (8211004, 4021031, 100, 1, 1), + (8211004, 4021034, 100, 1, 1), + (8211004, 4033113, 100, 1, 1), + (8211001, 2001528, 100, 1, 1), + (8211001, 2590004, 100, 1, 1), + (8211001, 4021031, 100, 1, 1), + (8211001, 4009170, 100, 1, 1), + (8211001, 4021035, 100, 1, 1), + (8211001, 4030032, 100, 1, 1), + (8211001, 4021032, 100, 1, 1), + (8211001, 2000037, 100, 1, 1), + (8211001, 4033113, 100, 1, 1), + (8211001, 4021034, 100, 1, 1), + (8211001, 2434021, 100, 1, 1), + (8211001, 4021033, 100, 1, 1), + (8211001, 4000630, 100, 1, 1), + (8211000, 4000630, 100, 1, 1), + (8211000, 2434021, 100, 1, 1), + (8211000, 2000037, 100, 1, 1), + (8211000, 4033113, 100, 1, 1), + (8211000, 4021033, 100, 1, 1), + (8211000, 4021035, 100, 1, 1), + (8211000, 4009169, 100, 1, 1), + (8211000, 4021031, 100, 1, 1), + (8211000, 4021032, 100, 1, 1), + (8211000, 4021034, 100, 1, 1), + (8211000, 2590004, 100, 1, 1), + (8211000, 4030036, 100, 1, 1), + (8211000, 2001528, 100, 1, 1), + (8211003, 4009172, 100, 1, 1), + (8211003, 4021033, 100, 1, 1), + (8211003, 4021031, 100, 1, 1), + (8211003, 4021032, 100, 1, 1), + (8211003, 4021034, 100, 1, 1), + (8211003, 4000630, 100, 1, 1), + (8211003, 4033113, 100, 1, 1), + (8211003, 4021035, 100, 1, 1), + (8211002, 4033113, 100, 1, 1), + (8211002, 4009171, 100, 1, 1), + (8211002, 2434021, 100, 1, 1), + (8211002, 4021032, 100, 1, 1), + (8211002, 4021031, 100, 1, 1), + (8211002, 4021033, 100, 1, 1), + (8211002, 4021034, 100, 1, 1), + (8211002, 4021035, 100, 1, 1), + (8211002, 4000630, 100, 1, 1), + (8211002, 2001528, 100, 1, 1), + (8211002, 2590004, 100, 1, 1), + (8211002, 2000037, 100, 1, 1), + (2150000, 2043000, 100, 1, 1), + (2150000, 2061000, 100, 1, 1), + (2150000, 2043700, 100, 1, 1), + (2150000, 2044000, 100, 1, 1), + (2150000, 2000003, 100, 1, 1), + (2150000, 4010002, 100, 1, 1), + (2150000, 2000002, 100, 1, 1), + (2150000, 4020004, 100, 1, 1), + (2150000, 2000003, 100, 1, 1), + (2150000, 2000000, 100, 1, 1), + (2150000, 2870039, 100, 1, 1), + (2150000, 4000601, 100, 1, 1), + (2150000, 2000000, 100, 1, 1), + (2150000, 2000002, 100, 1, 1), + (2150000, 2000006, 100, 1, 1), + (2150000, 4010006, 100, 1, 1), + (2150000, 2043200, 100, 1, 1), + (2150000, 4020002, 100, 1, 1), + (2150000, 2000001, 100, 1, 1), + (2150000, 2000001, 100, 1, 1), + (2150000, 4000602, 100, 1, 1), + (2150000, 2061000, 100, 1, 1), + (2150000, 2870038, 100, 1, 1), + (2150000, 2060000, 100, 1, 1), + (2150000, 2044600, 100, 1, 1), + (2150000, 2060000, 100, 1, 1), + (2150000, 2150001, 100, 1, 1), + (2150000, 2043800, 100, 1, 1), + (3230304, 2870101, 100, 1, 1), + (3230304, 4000105, 100, 1, 1), + (2150002, 2060000, 100, 1, 1), + (2150002, 2870040, 100, 1, 1), + (2150002, 4010006, 100, 1, 1), + (2150002, 2040709, 100, 1, 1), + (2150002, 2000000, 100, 1, 1), + (2150002, 2061000, 100, 1, 1), + (2150002, 2040417, 100, 1, 1), + (2150002, 2000006, 100, 1, 1), + (2150002, 2000002, 100, 1, 1), + (2150002, 4010001, 100, 1, 1), + (2150002, 2040926, 100, 1, 1), + (2150002, 4000603, 100, 1, 1), + (2150002, 2000001, 100, 1, 1), + (3230307, 2870104, 100, 1, 1), + (3230307, 4000123, 100, 1, 1), + (2150003, 2870041, 100, 1, 1), + (2150003, 4000604, 100, 1, 1), + (2150003, 4010001, 100, 1, 1), + (2150003, 4010006, 100, 1, 1), + (2150003, 2000001, 100, 1, 1), + (2150003, 2044805, 100, 1, 1), + (2150003, 2040901, 100, 1, 1), + (2150003, 2040515, 100, 1, 1), + (2150003, 2060000, 100, 1, 1), + (2150003, 2000000, 100, 1, 1), + (2150003, 2061000, 100, 1, 1), + (2150003, 2000006, 100, 1, 1), + (2150003, 2000003, 100, 1, 1), + (8930000, 4310065, 100, 1, 1), + (8930000, 2000005, 100, 1, 1), + (8930000, 4310029, 100, 1, 1), + (8930000, 4310064, 100, 1, 1), + (8930000, 2433103, 100, 1, 1), + (8930000, 2433592, 100, 1, 1), + (8810214, 2000004, 100, 1, 1), + (8810214, 4310029, 100, 1, 1), + (8810214, 4001094, 100, 1, 1), + (8810214, 2433103, 100, 1, 1), + (2600518, 4000418, 100, 1, 1), + (2600518, 4310029, 100, 1, 1), + (2600517, 4000362, 100, 1, 1), + (2600517, 2870270, 100, 1, 1), + (2600516, 2590004, 100, 1, 1), + (2600516, 2001001, 100, 1, 1), + (2600516, 2001002, 100, 1, 1), + (2600516, 2434021, 100, 1, 1), + (2600516, 2870190, 100, 1, 1), + (2600515, 4000364, 100, 1, 1), + (2600515, 2870189, 100, 1, 1), + (1130100, 2044000, 100, 1, 1), + (1130100, 4010005, 100, 1, 1), + (1130100, 4020004, 100, 1, 1), + (1130100, 4000018, 100, 1, 1), + (1130100, 2040512, 100, 1, 1), + (1130100, 2043202, 100, 1, 1), + (1130100, 2000002, 100, 1, 1), + (1130100, 2000003, 100, 1, 1), + (1130100, 2048003, 100, 1, 1), + (1130100, 2870013, 100, 1, 1), + (2600514, 4000356, 100, 1, 1), + (2600514, 4000364, 100, 1, 1), + (2600514, 4000365, 100, 1, 1), + (2600514, 4310029, 100, 1, 1), + (2600514, 4021032, 100, 1, 1), + (1000041, 4031013, 9000, 1, 1), + (2600513, 2386043, 100, 1, 1), + (2600513, 2001001, 100, 1, 1), + (2600513, 2001002, 100, 1, 1), + (2600513, 4021033, 100, 1, 1), + (2600513, 2590004, 100, 1, 1), + (2600513, 2434021, 100, 1, 1), + (2600513, 4021032, 100, 1, 1), + (2600513, 4000363, 100, 1, 1), + (2600513, 4021034, 100, 1, 1), + (2600513, 4021035, 100, 1, 1), + (2600512, 4021035, 100, 1, 1), + (2600512, 2870310, 100, 1, 1), + (2600512, 4033637, 100, 1, 1), + (2600512, 4021032, 100, 1, 1), + (2600512, 4021034, 100, 1, 1), + (2600512, 4000355, 100, 1, 1), + (2600512, 4021033, 100, 1, 1), + (3230301, 2590004, 100, 1, 1), + (3230301, 2710002, 100, 1, 1), + (3230301, 4000067, 100, 1, 1), + (3230301, 2430692, 100, 1, 1), + (3230301, 2000002, 100, 1, 1), + (3230301, 2000006, 100, 1, 1), + (3230301, 2870098, 100, 1, 1), + (8170000, 4021031, 100, 1, 1), + (8170000, 2001528, 100, 1, 1), + (8170000, 4021033, 100, 1, 1), + (8170000, 4021034, 100, 1, 1), + (8170000, 2000037, 100, 1, 1), + (8170000, 2434021, 100, 1, 1), + (8170000, 4021032, 100, 1, 1), + (8170000, 4034181, 100, 1, 1), + (8170000, 4021035, 100, 1, 1), + (8170000, 4031172, 100, 1, 1), + (8170000, 2870344, 100, 1, 1), + (8170000, 2590004, 100, 1, 1), + (3230300, 2870098, 100, 1, 1), + (3230300, 2710002, 100, 1, 1), + (3230300, 4000067, 100, 1, 1), + (3230300, 2000006, 100, 1, 1), + (3230300, 2430692, 100, 1, 1), + (3230300, 2000002, 100, 1, 1), + (3230300, 2590004, 100, 1, 1), + (3230303, 2870100, 100, 1, 1), + (3230303, 4000104, 100, 1, 1), + (5140000, 4032644, 100, 1, 1), + (5140000, 4021034, 100, 1, 1), + (5140000, 4032643, 100, 1, 1), + (5140000, 2870211, 100, 1, 1), + (5140000, 4031218, 100, 1, 1), + (5140000, 2001001, 100, 1, 1), + (5140000, 4021035, 100, 1, 1), + (5140000, 4032642, 100, 1, 1), + (5140000, 2001002, 100, 1, 1), + (5140000, 2434021, 100, 1, 1), + (5140000, 4021032, 100, 1, 1), + (5140000, 4021033, 100, 1, 1), + (5140000, 4031054, 100, 1, 1), + (5140000, 2590004, 100, 1, 1), + (5140000, 4032645, 100, 1, 1), + (5140000, 4000052, 100, 1, 1), + (5140000, 4032646, 100, 1, 1), + (3230302, 4031089, 100, 1, 1), + (3230302, 2870099, 100, 1, 1), + (3230302, 4000099, 100, 1, 1), + (9100024, 4032603, 100, 1, 1), + (8630007, 4021035, 100, 1, 1), + (8630007, 4033930, 100, 1, 1), + (8630007, 4009139, 100, 1, 1), + (8630007, 4021033, 100, 1, 1), + (8630007, 2000036, 100, 1, 1), + (8630007, 4021031, 100, 1, 1), + (8630007, 4021034, 100, 1, 1), + (8630007, 2431174, 100, 1, 1), + (8630007, 4021032, 100, 1, 1), + (8630007, 4021020, 100, 1, 1), + (8630007, 2590004, 100, 1, 1), + (8630007, 2000037, 100, 1, 1), + (8630006, 2590004, 100, 1, 1), + (8630006, 4021031, 100, 1, 1), + (8630006, 4021034, 100, 1, 1), + (8630006, 4021032, 100, 1, 1), + (8630006, 2000036, 100, 1, 1), + (8630006, 2431174, 100, 1, 1), + (8630006, 4033930, 100, 1, 1), + (8630006, 4021035, 100, 1, 1), + (8630006, 4021020, 100, 1, 1), + (8630006, 4021033, 100, 1, 1), + (8630006, 2000037, 100, 1, 1), + (8630006, 4009138, 100, 1, 1), + (8630005, 2431174, 100, 1, 1), + (8630005, 4009137, 100, 1, 1), + (8630005, 2000036, 100, 1, 1), + (8630005, 2000037, 100, 1, 1), + (8630005, 2590004, 100, 1, 1), + (8630005, 4021020, 100, 1, 1), + (8630005, 4021032, 100, 1, 1), + (8630005, 4021034, 100, 1, 1), + (8630005, 4033930, 100, 1, 1), + (8630005, 4021035, 100, 1, 1), + (8630005, 4021033, 100, 1, 1), + (8630005, 4021031, 100, 1, 1), + (8630011, 4021035, 100, 1, 1), + (8630011, 2590004, 100, 1, 1), + (8630011, 2431174, 100, 1, 1), + (8630011, 2000037, 100, 1, 1), + (8630011, 4021033, 100, 1, 1), + (8630011, 4009143, 100, 1, 1), + (8630011, 2000036, 100, 1, 1), + (8630011, 4021031, 100, 1, 1), + (8630011, 4033933, 100, 1, 1), + (8630011, 4021020, 100, 1, 1), + (8630011, 4021032, 100, 1, 1), + (8630011, 4021034, 100, 1, 1), + (8630010, 2000036, 100, 1, 1), + (8630010, 2000037, 100, 1, 1), + (8630010, 4021032, 100, 1, 1), + (8630010, 4021033, 100, 1, 1), + (8630010, 4021031, 100, 1, 1), + (8630010, 2431174, 100, 1, 1), + (8630010, 4021020, 100, 1, 1), + (8630010, 4021034, 100, 1, 1), + (8630010, 4033933, 100, 1, 1), + (8630010, 4021035, 100, 1, 1), + (8630010, 2590004, 100, 1, 1), + (8630010, 4009142, 100, 1, 1), + (8630009, 2590004, 100, 1, 1), + (8630009, 4021020, 100, 1, 1), + (8630009, 4021034, 100, 1, 1), + (8630009, 4021033, 100, 1, 1), + (8630009, 2000037, 100, 1, 1), + (8630009, 4009141, 100, 1, 1), + (8630009, 2431174, 100, 1, 1), + (8630009, 4033930, 100, 1, 1), + (8630009, 4021031, 100, 1, 1), + (8630009, 2000036, 100, 1, 1), + (8630009, 4021032, 100, 1, 1), + (8630009, 4021035, 100, 1, 1), + (8630008, 4021034, 100, 1, 1), + (8630008, 4021031, 100, 1, 1), + (8630008, 4021035, 100, 1, 1), + (8630008, 4033930, 100, 1, 1), + (8630008, 2590004, 100, 1, 1), + (8630008, 4009140, 100, 1, 1), + (8630008, 2000037, 100, 1, 1), + (8630008, 4021033, 100, 1, 1), + (8630008, 2000036, 100, 1, 1), + (8630008, 4021032, 100, 1, 1), + (8630008, 2431174, 100, 1, 1), + (8630008, 4021020, 100, 1, 1), + (8630015, 2590004, 100, 1, 1), + (8630015, 4021035, 100, 1, 1), + (8630015, 4021020, 100, 1, 1), + (8630015, 4021031, 100, 1, 1), + (8630015, 2431174, 100, 1, 1), + (8630015, 4021032, 100, 1, 1), + (8630015, 2000037, 100, 1, 1), + (8630015, 4009147, 100, 1, 1), + (8630015, 2000036, 100, 1, 1), + (8630015, 4021033, 100, 1, 1), + (8630015, 4021034, 100, 1, 1), + (8630014, 2000037, 100, 1, 1), + (8630014, 4009146, 100, 1, 1), + (8630014, 4021020, 100, 1, 1), + (8630014, 4021033, 100, 1, 1), + (8630014, 4021032, 100, 1, 1), + (8630014, 2431174, 100, 1, 1), + (8630014, 2590004, 100, 1, 1), + (8630014, 4021035, 100, 1, 1), + (8630014, 4021031, 100, 1, 1), + (8630014, 4033933, 100, 1, 1), + (8630014, 2000036, 100, 1, 1), + (8630014, 4021034, 100, 1, 1), + (8630013, 4021033, 100, 1, 1), + (8630013, 2000036, 100, 1, 1), + (8630013, 4021020, 100, 1, 1), + (8630013, 2000037, 100, 1, 1), + (8630013, 4021034, 100, 1, 1), + (8630013, 2590004, 100, 1, 1), + (8630013, 4033933, 100, 1, 1), + (8630013, 4021031, 100, 1, 1), + (8630013, 4021035, 100, 1, 1), + (8630013, 4021032, 100, 1, 1), + (8630013, 2431174, 100, 1, 1), + (8630013, 4009145, 100, 1, 1), + (8630012, 4021032, 100, 1, 1), + (8630012, 4021033, 100, 1, 1), + (8630012, 4021031, 100, 1, 1), + (8630012, 4021034, 100, 1, 1), + (8630012, 4021035, 100, 1, 1), + (8630012, 4021020, 100, 1, 1), + (8630012, 4009144, 100, 1, 1), + (8630012, 2000036, 100, 1, 1), + (8630012, 2000037, 100, 1, 1), + (8630012, 4033933, 100, 1, 1), + (8630012, 2590004, 100, 1, 1), + (8630012, 2431174, 100, 1, 1), + (2600615, 4021034, 100, 1, 1), + (2600615, 2001528, 100, 1, 1), + (2600615, 4021031, 100, 1, 1), + (2600615, 4021033, 100, 1, 1), + (2600615, 4000148, 100, 1, 1), + (2600615, 2434021, 100, 1, 1), + (2600615, 2000037, 100, 1, 1), + (2600615, 2590004, 100, 1, 1), + (2600615, 4021035, 100, 1, 1), + (2600615, 4034181, 100, 1, 1), + (2600615, 2870285, 100, 1, 1), + (2600615, 4021032, 100, 1, 1), + (8900103, 3010513, 100, 1, 1), + (8900103, 4310064, 100, 1, 1), + (8900103, 2433446, 100, 1, 1), + (8900103, 2000005, 100, 1, 1), + (8900103, 4310029, 100, 1, 1), + (8900103, 2433103, 100, 1, 1), + (2600614, 4000147, 100, 1, 1), + (2600614, 4034181, 100, 1, 1), + (2600614, 4021032, 100, 1, 1), + (2600614, 2870277, 100, 1, 1), + (2600614, 2590004, 100, 1, 1), + (2600614, 4021034, 100, 1, 1), + (2600614, 4021035, 100, 1, 1), + (2600614, 2434021, 100, 1, 1), + (2600614, 4021033, 100, 1, 1), + (2600614, 2000037, 100, 1, 1), + (2600614, 4021031, 100, 1, 1), + (2600614, 2001528, 100, 1, 1), + (2600613, 4000113, 100, 1, 1), + (2600613, 4021035, 100, 1, 1), + (2600613, 4000114, 100, 1, 1), + (2600613, 4021033, 100, 1, 1), + (2600613, 4021032, 100, 1, 1), + (2600613, 4000115, 100, 1, 1), + (2600613, 4021034, 100, 1, 1), + (2600612, 2870145, 100, 1, 1), + (2600612, 2434021, 100, 1, 1), + (2600612, 2590004, 100, 1, 1), + (2600612, 4034343, 100, 1, 1), + (2600612, 2000037, 100, 1, 1), + (2600612, 4021034, 100, 1, 1), + (2600612, 4021035, 100, 1, 1), + (2600612, 4021032, 100, 1, 1), + (2600612, 2001528, 100, 1, 1), + (2600612, 4021033, 100, 1, 1), + (2600612, 4021031, 100, 1, 1), + (2600611, 4021031, 100, 1, 1), + (2600611, 4021034, 100, 1, 1), + (2600611, 2001528, 100, 1, 1), + (2600611, 2590004, 100, 1, 1), + (2600611, 4021035, 100, 1, 1), + (2600611, 2000037, 100, 1, 1), + (2600611, 2434021, 100, 1, 1), + (2600611, 4021033, 100, 1, 1), + (2600611, 2870144, 100, 1, 1), + (2600611, 4021032, 100, 1, 1), + (2600611, 4034343, 100, 1, 1), + (2600610, 2434021, 100, 1, 1), + (2600610, 4021033, 100, 1, 1), + (2600610, 2870103, 100, 1, 1), + (2600610, 2000037, 100, 1, 1), + (2600610, 4034343, 100, 1, 1), + (2600610, 2590004, 100, 1, 1), + (2600610, 4021032, 100, 1, 1), + (2600610, 2001528, 100, 1, 1), + (2600610, 4021034, 100, 1, 1), + (2600610, 4021035, 100, 1, 1), + (2600609, 4009087, 100, 1, 1), + (2600609, 4021032, 100, 1, 1), + (2600609, 2870143, 100, 1, 1), + (2600609, 4021033, 100, 1, 1), + (2600609, 4021034, 100, 1, 1), + (2600609, 4021035, 100, 1, 1), + (2600609, 4031098, 100, 1, 1), + (2600608, 4021033, 100, 1, 1), + (2600608, 4021034, 100, 1, 1), + (2600608, 2870086, 100, 1, 1), + (2600608, 4021035, 100, 1, 1), + (2600608, 4021032, 100, 1, 1), + (2600608, 4001532, 100, 1, 1), + (2600623, 4021034, 100, 1, 1), + (2600623, 2434021, 100, 1, 1), + (2600623, 4021031, 100, 1, 1), + (2600623, 2001528, 100, 1, 1), + (2600623, 4000132, 100, 1, 1), + (2600623, 4021033, 100, 1, 1), + (2600623, 4034181, 100, 1, 1), + (2600623, 2000037, 100, 1, 1), + (2600623, 4021032, 100, 1, 1), + (2600623, 2590004, 100, 1, 1), + (2600623, 4021035, 100, 1, 1), + (2600623, 2870293, 100, 1, 1), + (2600622, 4001023, 100, 1, 1), + (2600621, 2001528, 100, 1, 1), + (2600621, 2434021, 100, 1, 1), + (2600621, 2000037, 100, 1, 1), + (2600621, 4021033, 100, 1, 1), + (2600621, 4000129, 100, 1, 1), + (2600621, 4021035, 100, 1, 1), + (2600621, 4021031, 100, 1, 1), + (2600621, 4021032, 100, 1, 1), + (2600621, 2870252, 100, 1, 1), + (2600621, 4034181, 100, 1, 1), + (2600621, 2590004, 100, 1, 1), + (2600621, 4021034, 100, 1, 1), + (2600621, 4031189, 100, 1, 1), + (2600620, 4021031, 100, 1, 1), + (2600620, 2870239, 100, 1, 1), + (2600620, 4000128, 100, 1, 1), + (2600620, 4021035, 100, 1, 1), + (2600620, 2590004, 100, 1, 1), + (2600620, 4021032, 100, 1, 1), + (2600620, 2001528, 100, 1, 1), + (2600620, 4034181, 100, 1, 1), + (2600620, 2000037, 100, 1, 1), + (2600620, 2434021, 100, 1, 1), + (2600620, 4021033, 100, 1, 1), + (2600620, 4021034, 100, 1, 1), + (2600619, 2001528, 100, 1, 1), + (2600619, 2434021, 100, 1, 1), + (2600619, 4000131, 100, 1, 1), + (2600619, 4021033, 100, 1, 1), + (2600619, 2590004, 100, 1, 1), + (2600619, 4021034, 100, 1, 1), + (2600619, 2000037, 100, 1, 1), + (2600619, 4021031, 100, 1, 1), + (2600619, 4034181, 100, 1, 1), + (2600619, 2870268, 100, 1, 1), + (2600619, 4021035, 100, 1, 1), + (2600619, 4021032, 100, 1, 1), + (2600618, 4021033, 100, 1, 1), + (2600618, 4021032, 100, 1, 1), + (2600618, 4021031, 100, 1, 1), + (2600618, 2000037, 100, 1, 1), + (2600618, 2590004, 100, 1, 1), + (2600618, 4021034, 100, 1, 1), + (2600618, 4034181, 100, 1, 1), + (2600618, 2001528, 100, 1, 1), + (2600618, 4021035, 100, 1, 1), + (2600618, 2870263, 100, 1, 1), + (2600618, 4000130, 100, 1, 1), + (2600618, 2434021, 100, 1, 1), + (2600617, 4021034, 100, 1, 1), + (2600617, 4021031, 100, 1, 1), + (2600617, 2001528, 100, 1, 1), + (2600617, 4021035, 100, 1, 1), + (2600617, 2434021, 100, 1, 1), + (2600617, 2590004, 100, 1, 1), + (2600617, 4021032, 100, 1, 1), + (2600617, 4000144, 100, 1, 1), + (2600617, 2870255, 100, 1, 1), + (2600617, 4021033, 100, 1, 1), + (2600617, 4034181, 100, 1, 1), + (2600617, 2000037, 100, 1, 1), + (2600616, 4021031, 100, 1, 1), + (2600616, 2870253, 100, 1, 1), + (2600616, 4021032, 100, 1, 1), + (2600616, 2590004, 100, 1, 1), + (2600616, 2434021, 100, 1, 1), + (2600616, 4021033, 100, 1, 1), + (2600616, 2001528, 100, 1, 1), + (2600616, 4034181, 100, 1, 1), + (2600616, 4021034, 100, 1, 1), + (2600616, 2000037, 100, 1, 1), + (2600616, 4021035, 100, 1, 1), + (2600616, 4000143, 100, 1, 1), + (2600631, 2000005, 100, 1, 1), + (2600631, 4310029, 100, 1, 1), + (2600631, 2433103, 100, 1, 1), + (2600631, 4031196, 100, 1, 1), + (2600630, 4006001, 100, 1, 1), + (2600630, 2434021, 100, 1, 1), + (2600630, 2870334, 100, 1, 1), + (2600630, 2001528, 100, 1, 1), + (2600630, 4021033, 100, 1, 1), + (2600630, 2430692, 100, 1, 1), + (2600630, 4034181, 100, 1, 1), + (2600630, 4021031, 100, 1, 1), + (2600630, 4021034, 100, 1, 1), + (2600630, 2000037, 100, 1, 1), + (2600630, 2590004, 100, 1, 1), + (2600630, 4021035, 100, 1, 1), + (2600630, 4000150, 100, 1, 1), + (2600630, 4021032, 100, 1, 1), + (2600629, 2870332, 100, 1, 1), + (2600629, 4000149, 100, 1, 1), + (2600629, 2001528, 100, 1, 1), + (2600629, 4021031, 100, 1, 1), + (2600629, 4021032, 100, 1, 1), + (2600629, 4021034, 100, 1, 1), + (2600629, 4021033, 100, 1, 1), + (2600629, 2434021, 100, 1, 1), + (2600629, 2000037, 100, 1, 1), + (2600629, 2590004, 100, 1, 1), + (2600629, 4034181, 100, 1, 1), + (2600629, 4021035, 100, 1, 1), + (2600628, 2870330, 100, 1, 1), + (2600628, 2001528, 100, 1, 1), + (2600628, 4021031, 100, 1, 1), + (2600628, 4021032, 100, 1, 1), + (2600628, 2590004, 100, 1, 1), + (2600628, 4021034, 100, 1, 1), + (2600628, 4021033, 100, 1, 1), + (2600628, 2434021, 100, 1, 1), + (2600628, 4000135, 100, 1, 1), + (2600628, 2000037, 100, 1, 1), + (2600628, 4021035, 100, 1, 1), + (2600628, 4034181, 100, 1, 1), + (2600627, 2000037, 100, 1, 1), + (2600627, 2590004, 100, 1, 1), + (2600627, 4000134, 100, 1, 1), + (2600627, 4021031, 100, 1, 1), + (2600627, 4034181, 100, 1, 1), + (2600627, 2870329, 100, 1, 1), + (2600627, 4021032, 100, 1, 1), + (2600627, 4021033, 100, 1, 1), + (2600627, 4021034, 100, 1, 1), + (2600627, 2434021, 100, 1, 1), + (2600627, 4021035, 100, 1, 1), + (2600627, 2001528, 100, 1, 1), + (2600626, 4021034, 100, 1, 1), + (2600626, 4021033, 100, 1, 1), + (2600626, 4000146, 100, 1, 1), + (2600626, 4021031, 100, 1, 1), + (2600626, 2000037, 100, 1, 1), + (2600626, 2001528, 100, 1, 1), + (2600626, 2870322, 100, 1, 1), + (2600626, 4021032, 100, 1, 1), + (2600626, 2590004, 100, 1, 1), + (2600626, 2434021, 100, 1, 1), + (2600626, 4021035, 100, 1, 1), + (2600626, 4034181, 100, 1, 1), + (2600625, 2001528, 100, 1, 1), + (2600625, 4021031, 100, 1, 1), + (2600625, 4034181, 100, 1, 1), + (2600625, 4000145, 100, 1, 1), + (2600625, 4021033, 100, 1, 1), + (2600625, 2870321, 100, 1, 1), + (2600625, 2434021, 100, 1, 1), + (2600625, 2000037, 100, 1, 1), + (2600625, 4021034, 100, 1, 1), + (2600625, 4021032, 100, 1, 1), + (2600625, 4021035, 100, 1, 1), + (2600625, 2590004, 100, 1, 1), + (2600624, 4000133, 100, 1, 1), + (2600624, 2000037, 100, 1, 1), + (2600624, 4021034, 100, 1, 1), + (2600624, 4021032, 100, 1, 1), + (2600624, 2001528, 100, 1, 1), + (2600624, 4034181, 100, 1, 1), + (2600624, 4021031, 100, 1, 1), + (2600624, 4021035, 100, 1, 1), + (2600624, 2590004, 100, 1, 1), + (2600624, 2434021, 100, 1, 1), + (2600624, 2870299, 100, 1, 1), + (2600624, 4021033, 100, 1, 1), + (5090001, 4021032, 100, 1, 1), + (5090001, 4000412, 100, 1, 1), + (5090001, 4310029, 100, 1, 1), + (5090001, 2870183, 100, 1, 1), + (5090001, 4021035, 100, 1, 1), + (5090001, 4021034, 100, 1, 1), + (5090001, 4021033, 100, 1, 1), + (5090000, 4033041, 100, 1, 1), + (5090000, 4033040, 100, 1, 1), + (5090000, 2870182, 100, 1, 1), + (100001, 2010009, 100, 1, 1), + (100001, 4000000, 100, 1, 1), + (100001, 2000003, 100, 1, 1), + (100001, 2061000, 100, 1, 1), + (100001, 2870001, 100, 1, 1), + (100000, 2870000, 100, 1, 1), + (100000, 2060000, 100, 1, 1), + (100000, 2000000, 100, 1, 1), + (100000, 4000019, 100, 1, 1), + (100000, 2010009, 100, 1, 1), + (100003, 2061000, 100, 1, 1), + (100003, 4000011, 100, 1, 1), + (100003, 2870002, 100, 1, 1), + (100003, 2010009, 100, 1, 1), + (100003, 2000000, 100, 1, 1), + (100002, 2022055, 100, 1, 1), + (100002, 2022054, 100, 1, 1), + (100002, 2022053, 100, 1, 1), + (100002, 4020004, 100, 1, 1), + (100002, 2010009, 100, 1, 1), + (100002, 2060000, 100, 1, 1), + (100002, 2000000, 100, 1, 1), + (100002, 2000003, 100, 1, 1), + (100002, 2870004, 100, 1, 1), + (100002, 4010004, 100, 1, 1), + (100002, 4000016, 100, 1, 1), + (100002, 2870004, 100, 1, 1), + (100002, 2061000, 100, 1, 1), + (100005, 2000003, 100, 1, 1), + (100005, 2010009, 100, 1, 1), + (100005, 4000003, 100, 1, 1), + (100005, 2870003, 100, 1, 1), + (100005, 2000000, 100, 1, 1), + (8810018, 4310029, 100, 1, 1), + (8810018, 2000004, 100, 1, 1), + (8810018, 2433103, 100, 1, 1), + (8810018, 4001094, 100, 1, 1), + (100004, 4000001, 100, 1, 1), + (100004, 2000001, 100, 1, 1), + (100004, 4020007, 100, 1, 1), + (100004, 2022055, 100, 1, 1), + (100004, 2870021, 100, 1, 1), + (100004, 2060000, 100, 1, 1), + (100004, 2040705, 100, 1, 1), + (100004, 2022053, 100, 1, 1), + (100004, 2022054, 100, 1, 1), + (100004, 4010000, 100, 1, 1), + (100007, 4000017, 100, 1, 1), + (100007, 2000003, 100, 1, 1), + (100007, 2010009, 100, 1, 1), + (100007, 2060000, 100, 1, 1), + (100007, 4000021, 100, 1, 1), + (100007, 4010006, 100, 1, 1), + (100007, 4020006, 100, 1, 1), + (100007, 2022055, 100, 1, 1), + (100007, 2022054, 100, 1, 1), + (100007, 2022053, 100, 1, 1), + (100007, 2870019, 100, 1, 1), + (100007, 4000017, 100, 1, 1), + (100006, 4020005, 100, 1, 1), + (100006, 2010009, 100, 1, 1), + (100006, 2000001, 100, 1, 1), + (100006, 2022053, 100, 1, 1), + (100006, 4000004, 100, 1, 1), + (100006, 2022054, 100, 1, 1), + (100006, 4000010, 100, 1, 1), + (100006, 2872038, 100, 1, 1), + (100006, 2022055, 100, 1, 1), + (100006, 2000003, 100, 1, 1), + (100006, 2061000, 100, 1, 1), + (100006, 4010005, 100, 1, 1), + (8140500, 4021033, 100, 1, 1), + (8140500, 2590004, 100, 1, 1), + (8140500, 2434021, 100, 1, 1), + (8140500, 4021031, 100, 1, 1), + (8140500, 2000036, 100, 1, 1), + (8140500, 4000080, 100, 1, 1), + (8140500, 4021035, 100, 1, 1), + (8140500, 4021032, 100, 1, 1), + (8140500, 4021034, 100, 1, 1), + (8140500, 2001554, 100, 1, 1), + (8140500, 2870323, 100, 1, 1), + (8510000, 4021035, 100, 1, 1), + (8510000, 4000175, 100, 1, 1), + (8510000, 4001085, 100, 1, 1), + (8510000, 4021031, 100, 1, 1), + (8510000, 4021034, 100, 1, 1), + (8510000, 2431895, 100, 1, 1), + (8510000, 4021032, 100, 1, 1), + (8510000, 4021033, 100, 1, 1), + (8510000, 4031253, 100, 1, 1), + (2600607, 4021032, 100, 1, 1), + (2600607, 4310085, 100, 1, 1), + (2600607, 4021034, 100, 1, 1), + (2600607, 4000687, 100, 1, 1), + (2600607, 4021033, 100, 1, 1), + (2600607, 4021040, 100, 1, 1), + (2600607, 4021031, 100, 1, 1), + (2600607, 4021035, 100, 1, 1), + (2600606, 4021034, 100, 1, 1), + (2600606, 4000112, 100, 1, 1), + (2600606, 4031130, 100, 1, 1), + (2600606, 4021032, 100, 1, 1), + (2600606, 4021035, 100, 1, 1), + (2600606, 4021033, 100, 1, 1), + (2600606, 2870142, 100, 1, 1), + (2600605, 2870141, 100, 1, 1), + (2600605, 2590004, 100, 1, 1), + (2600605, 4021033, 100, 1, 1), + (2600605, 2001528, 100, 1, 1), + (2600605, 4021031, 100, 1, 1), + (2600605, 2000037, 100, 1, 1), + (2600605, 4021035, 100, 1, 1), + (2600605, 4021032, 100, 1, 1), + (2600605, 4000111, 100, 1, 1), + (2600605, 2434021, 100, 1, 1), + (2600605, 4021034, 100, 1, 1), + (2600604, 4000110, 100, 1, 1), + (2600604, 4021032, 100, 1, 1), + (2600604, 4021034, 100, 1, 1), + (2600604, 4021033, 100, 1, 1), + (2600604, 4021035, 100, 1, 1), + (2600603, 2870083, 100, 1, 1), + (2600603, 4021034, 100, 1, 1), + (2600603, 4021031, 100, 1, 1), + (2600603, 4021032, 100, 1, 1), + (2600603, 4021033, 100, 1, 1), + (2600603, 4021035, 100, 1, 1), + (2600602, 4021034, 100, 1, 1), + (2600602, 4021035, 100, 1, 1), + (2600602, 2870082, 100, 1, 1), + (2600602, 4009080, 100, 1, 1), + (2600602, 4021033, 100, 1, 1), + (2600602, 4021032, 100, 1, 1), + (2600601, 4021035, 100, 1, 1), + (2600601, 4021031, 100, 1, 1), + (2600601, 4021034, 100, 1, 1), + (2600601, 4021032, 100, 1, 1), + (2600601, 2870069, 100, 1, 1), + (2600601, 4000107, 100, 1, 1), + (2600601, 4021033, 100, 1, 1), + (2600600, 4021034, 100, 1, 1), + (2600600, 2870063, 100, 1, 1), + (2600600, 4000106, 100, 1, 1), + (2600600, 4021032, 100, 1, 1), + (2600600, 4021033, 100, 1, 1), + (2600600, 2434021, 100, 1, 1), + (2600600, 4021035, 100, 1, 1), + (2600600, 2001528, 100, 1, 1), + (2600600, 2000037, 100, 1, 1), + (2600600, 2590004, 100, 1, 1), + (4240000, 4000125, 100, 1, 1), + (4240000, 2870168, 100, 1, 1), + (8250028, 4021035, 100, 1, 1), + (8250028, 2000036, 100, 1, 1), + (8250028, 4034302, 100, 1, 1), + (8250028, 4001842, 100, 1, 1), + (8250028, 4021034, 100, 1, 1), + (8250028, 4021032, 100, 1, 1), + (8250028, 4021020, 100, 1, 1), + (8250028, 2434021, 100, 1, 1), + (8250028, 4021033, 100, 1, 1), + (8250028, 2001554, 100, 1, 1), + (8250028, 2590004, 100, 1, 1), + (8250028, 4021031, 100, 1, 1), + (2700029, 2431964, 100, 1, 1), + (2700029, 4021035, 100, 1, 1), + (2700029, 4021033, 100, 1, 1), + (2700029, 2000005, 100, 1, 1), + (2700029, 2433103, 100, 1, 1), + (2700029, 4310059, 100, 1, 1), + (2700029, 4021034, 100, 1, 1), + (2700029, 4021032, 100, 1, 1), + (8250024, 4034300, 100, 1, 1), + (8250024, 4001842, 100, 1, 1), + (8250024, 2590004, 100, 1, 1), + (8250024, 2434021, 100, 1, 1), + (8250024, 2000036, 100, 1, 1), + (8250024, 4021035, 100, 1, 1), + (8250024, 2001554, 100, 1, 1), + (8250024, 4021031, 100, 1, 1), + (8250024, 4021034, 100, 1, 1), + (8250024, 4021033, 100, 1, 1), + (8250024, 4021020, 100, 1, 1), + (8250024, 4021032, 100, 1, 1), + (8250026, 4021020, 100, 1, 1), + (8250026, 4021032, 100, 1, 1), + (8250026, 4021035, 100, 1, 1), + (8250026, 4034301, 100, 1, 1), + (8250026, 2001554, 100, 1, 1), + (8250026, 2000036, 100, 1, 1), + (8250026, 4001842, 100, 1, 1), + (8250026, 4021033, 100, 1, 1), + (8250026, 2434021, 100, 1, 1), + (8250026, 2590004, 100, 1, 1), + (8250026, 4021031, 100, 1, 1), + (8250026, 4021034, 100, 1, 1), + (2110200, 4020006, 100, 1, 1), + (2110200, 2040929, 100, 1, 1), + (2110200, 2043214, 100, 1, 1), + (2110200, 2040600, 100, 1, 1), + (2110200, 2000001, 100, 1, 1), + (2110200, 2044300, 100, 1, 1), + (2110200, 2060000, 100, 1, 1), + (2110200, 2044102, 100, 1, 1), + (2110200, 4000015, 100, 1, 1), + (2110200, 4010000, 100, 1, 1), + (2110200, 2870034, 100, 1, 1), + (2600703, 2512155, 100, 1, 1), + (2600703, 4021032, 100, 1, 1), + (2600703, 2511035, 100, 1, 1), + (2600703, 2512215, 100, 1, 1), + (2600703, 4021035, 100, 1, 1), + (2600703, 2000036, 100, 1, 1), + (2600703, 2512123, 100, 1, 1), + (2600703, 4021034, 100, 1, 1), + (2600703, 2430692, 100, 1, 1), + (2600703, 2512152, 100, 1, 1), + (2600703, 4021020, 100, 1, 1), + (2600703, 4000459, 100, 1, 1), + (2600703, 4021033, 100, 1, 1), + (2600703, 4000447, 100, 1, 1), + (2600703, 2000037, 100, 1, 1), + (2600703, 2512283, 100, 1, 1), + (2600703, 2512278, 100, 1, 1), + (2600703, 2330002, 100, 1, 1), + (2600703, 2431174, 100, 1, 1), + (2600703, 2512036, 100, 1, 1), + (2600703, 2511057, 100, 1, 1), + (2600703, 2049401, 100, 1, 1), + (2600703, 2590004, 100, 1, 1), + (2600703, 4021031, 100, 1, 1), + (2600703, 4009096, 100, 1, 1), + (2600703, 2870353, 100, 1, 1), + (2600702, 2590004, 100, 1, 1), + (2600702, 4021020, 100, 1, 1), + (2600702, 4021031, 100, 1, 1), + (2600702, 2000036, 100, 1, 1), + (2600702, 2048004, 100, 1, 1), + (2600702, 2512112, 100, 1, 1), + (2600702, 4021033, 100, 1, 1), + (2600702, 2870352, 100, 1, 1), + (2600702, 2512284, 100, 1, 1), + (2600702, 4021034, 100, 1, 1), + (2600702, 2000037, 100, 1, 1), + (2600702, 2431174, 100, 1, 1), + (2600702, 2430692, 100, 1, 1), + (2600702, 2049401, 100, 1, 1), + (2600702, 4000446, 100, 1, 1), + (2600702, 4021035, 100, 1, 1), + (2600702, 2510170, 100, 1, 1), + (2600702, 2510244, 100, 1, 1), + (2600702, 2512274, 100, 1, 1), + (2600702, 4021032, 100, 1, 1), + (2600702, 4000445, 100, 1, 1), + (2600702, 2512268, 100, 1, 1), + (2600702, 2512276, 100, 1, 1), + (2600702, 4009096, 100, 1, 1), + (8250020, 4021034, 100, 1, 1), + (8250020, 4034298, 100, 1, 1), + (8250020, 4001842, 100, 1, 1), + (8250020, 2590004, 100, 1, 1), + (8250020, 2000036, 100, 1, 1), + (8250020, 4021035, 100, 1, 1), + (8250020, 2001554, 100, 1, 1), + (8250020, 2434021, 100, 1, 1), + (8250020, 4021020, 100, 1, 1), + (8250020, 4021031, 100, 1, 1), + (8250020, 4021032, 100, 1, 1), + (8250020, 4021033, 100, 1, 1), + (2600701, 2870351, 100, 1, 1), + (2600701, 2430692, 100, 1, 1), + (2600701, 4021033, 100, 1, 1), + (2600701, 4033171, 100, 1, 1), + (2600701, 2512266, 100, 1, 1), + (2600701, 2512274, 100, 1, 1), + (2600701, 4009096, 100, 1, 1), + (2600701, 4021032, 100, 1, 1), + (2600701, 4021031, 100, 1, 1), + (2600701, 2000037, 100, 1, 1), + (2600701, 2512092, 100, 1, 1), + (2600701, 4000444, 100, 1, 1), + (2600701, 4021034, 100, 1, 1), + (2600701, 2330003, 100, 1, 1), + (2600701, 2431174, 100, 1, 1), + (2600701, 2510310, 100, 1, 1), + (2600701, 2049401, 100, 1, 1), + (2600701, 2590004, 100, 1, 1), + (2600701, 4021020, 100, 1, 1), + (2600701, 2512273, 100, 1, 1), + (2600701, 2512271, 100, 1, 1), + (2600701, 2512095, 100, 1, 1), + (2600701, 4021035, 100, 1, 1), + (2600701, 2512286, 100, 1, 1), + (2600701, 2511031, 100, 1, 1), + (2600701, 2510307, 100, 1, 1), + (2600701, 4000446, 100, 1, 1), + (2600701, 2000036, 100, 1, 1), + (2600700, 2000036, 100, 1, 1), + (2600700, 4021034, 100, 1, 1), + (2600700, 4021033, 100, 1, 1), + (2600700, 4009096, 100, 1, 1), + (2600700, 4021035, 100, 1, 1), + (2600700, 4032972, 100, 1, 1), + (2600700, 4021020, 100, 1, 1), + (2600700, 4021032, 100, 1, 1), + (2600700, 4021031, 100, 1, 1), + (8250022, 4021035, 100, 1, 1), + (8250022, 4021032, 100, 1, 1), + (8250022, 4034299, 100, 1, 1), + (8250022, 4021020, 100, 1, 1), + (8250022, 2001554, 100, 1, 1), + (8250022, 2434021, 100, 1, 1), + (8250022, 4001842, 100, 1, 1), + (8250022, 2590004, 100, 1, 1), + (8250022, 4021034, 100, 1, 1), + (8250022, 4021033, 100, 1, 1), + (8250022, 2000036, 100, 1, 1), + (8250022, 4021031, 100, 1, 1), + (8850012, 4021032, 100, 1, 1), + (8850012, 2431711, 100, 1, 1), + (8850012, 2000005, 100, 1, 1), + (8850012, 4021033, 100, 1, 1), + (8850012, 4000659, 100, 1, 1), + (8850012, 2434589, 100, 1, 1), + (8850012, 2434588, 100, 1, 1), + (8850012, 4021020, 100, 1, 1), + (8850012, 4021035, 100, 1, 1), + (8850012, 4021034, 100, 1, 1), + (8850012, 2433103, 100, 1, 1), + (8850012, 4310029, 100, 1, 1), + (8850012, 4021031, 100, 1, 1), + (8850011, 2433103, 100, 1, 1), + (8850011, 2434589, 100, 1, 1), + (8850011, 4310029, 100, 1, 1), + (8850011, 4021032, 100, 1, 1), + (8850011, 4021033, 100, 1, 1), + (8850011, 4021035, 100, 1, 1), + (8850011, 4021031, 100, 1, 1), + (8850011, 2431711, 100, 1, 1), + (8850011, 2000005, 100, 1, 1), + (8850011, 2434588, 100, 1, 1), + (8850011, 4021034, 100, 1, 1), + (8850011, 4021020, 100, 1, 1), + (8250016, 4021031, 100, 1, 1), + (8250016, 4021020, 100, 1, 1), + (8250016, 4021034, 100, 1, 1), + (8250016, 2434021, 100, 1, 1), + (8250016, 2590004, 100, 1, 1), + (8250016, 2000036, 100, 1, 1), + (8250016, 2001554, 100, 1, 1), + (8250016, 4021035, 100, 1, 1), + (8250016, 4021033, 100, 1, 1), + (8250016, 4034296, 100, 1, 1), + (8250016, 4001842, 100, 1, 1), + (8250016, 4021032, 100, 1, 1), + (6160003, 2431709, 100, 1, 1), + (8250018, 4021020, 100, 1, 1), + (8250018, 4021031, 100, 1, 1), + (8250018, 4021033, 100, 1, 1), + (8250018, 2001554, 100, 1, 1), + (8250018, 2000036, 100, 1, 1), + (8250018, 4021035, 100, 1, 1), + (8250018, 4001842, 100, 1, 1), + (8250018, 2434021, 100, 1, 1), + (8250018, 4021034, 100, 1, 1), + (8250018, 2590004, 100, 1, 1), + (8250018, 4034297, 100, 1, 1), + (8250018, 4021032, 100, 1, 1), + (8250013, 4001842, 100, 1, 1), + (8250013, 2434021, 100, 1, 1), + (8250013, 2590004, 100, 1, 1), + (8250013, 4021033, 100, 1, 1), + (8250013, 2001554, 100, 1, 1), + (8250013, 4021031, 100, 1, 1), + (8250013, 4034294, 100, 1, 1), + (8250013, 2000036, 100, 1, 1), + (8250013, 4021035, 100, 1, 1), + (8250013, 4021032, 100, 1, 1), + (8250013, 4021034, 100, 1, 1), + (8250013, 4021020, 100, 1, 1), + (8250014, 2000036, 100, 1, 1), + (8250014, 4021031, 100, 1, 1), + (8250014, 4021033, 100, 1, 1), + (8250014, 4034295, 100, 1, 1), + (8250014, 4021032, 100, 1, 1), + (8250014, 4001842, 100, 1, 1), + (8250014, 4021020, 100, 1, 1), + (8250014, 2434021, 100, 1, 1), + (8250014, 4021035, 100, 1, 1), + (8250014, 2590004, 100, 1, 1), + (8250014, 4021034, 100, 1, 1), + (8250014, 2001554, 100, 1, 1), + (1210102, 4020007, 100, 1, 1), + (1210102, 2022055, 100, 1, 1), + (1210102, 2000001, 100, 1, 1), + (1210102, 2022053, 100, 1, 1), + (1210102, 2870021, 100, 1, 1), + (1210102, 2040705, 100, 1, 1), + (1210102, 4010000, 100, 1, 1), + (1210102, 2022054, 100, 1, 1), + (1210102, 2060000, 100, 1, 1), + (1210102, 4000001, 100, 1, 1), + (8250009, 4021020, 100, 1, 1), + (8250009, 4021034, 100, 1, 1), + (8250009, 4021033, 100, 1, 1), + (8250009, 2434021, 100, 1, 1), + (8250009, 4021035, 100, 1, 1), + (8250009, 4021031, 100, 1, 1), + (8250009, 2590004, 100, 1, 1), + (8250009, 4001842, 100, 1, 1), + (8250009, 2000036, 100, 1, 1), + (8250009, 2001554, 100, 1, 1), + (8250009, 4034290, 100, 1, 1), + (8250009, 4021032, 100, 1, 1), + (1210103, 4020005, 100, 1, 1), + (1210103, 2000003, 100, 1, 1), + (1210103, 2043302, 100, 1, 1), + (1210103, 2870022, 100, 1, 1), + (1210103, 2000000, 100, 1, 1), + (1210103, 4000037, 100, 1, 1), + (1210103, 4006000, 100, 1, 1), + (1210103, 4010002, 100, 1, 1), + (8250008, 2590004, 100, 1, 1), + (8250008, 4021035, 100, 1, 1), + (8250008, 4034289, 100, 1, 1), + (8250008, 4021031, 100, 1, 1), + (8250008, 2434021, 100, 1, 1), + (8250008, 4021033, 100, 1, 1), + (8250008, 4001842, 100, 1, 1), + (8250008, 4021034, 100, 1, 1), + (8250008, 2000036, 100, 1, 1), + (8250008, 4021032, 100, 1, 1), + (8250008, 2001554, 100, 1, 1), + (8250008, 4021020, 100, 1, 1), + (1210100, 2010009, 100, 1, 1), + (1210100, 2022054, 100, 1, 1), + (1210100, 2870019, 100, 1, 1), + (1210100, 4000017, 100, 1, 1), + (1210100, 2022055, 100, 1, 1), + (1210100, 2000003, 100, 1, 1), + (1210100, 4000017, 100, 1, 1), + (1210100, 4000021, 100, 1, 1), + (1210100, 2060000, 100, 1, 1), + (1210100, 4010006, 100, 1, 1), + (1210100, 4020006, 100, 1, 1), + (1210100, 2022053, 100, 1, 1), + (8250011, 4021032, 100, 1, 1), + (8250011, 4021031, 100, 1, 1), + (8250011, 2434021, 100, 1, 1), + (8250011, 2590004, 100, 1, 1), + (8250011, 2000036, 100, 1, 1), + (8250011, 4021020, 100, 1, 1), + (8250011, 4021033, 100, 1, 1), + (8250011, 2001554, 100, 1, 1), + (8250011, 4021035, 100, 1, 1), + (8250011, 4021034, 100, 1, 1), + (8250011, 4001842, 100, 1, 1), + (8250011, 4034292, 100, 1, 1), + (1210101, 4000002, 100, 1, 1), + (1210101, 2060000, 100, 1, 1), + (1210101, 4010002, 100, 1, 1), + (1210101, 4000021, 100, 1, 1), + (1210101, 4003004, 100, 1, 1), + (1210101, 4020001, 100, 1, 1), + (1210101, 2000003, 100, 1, 1), + (1210101, 2872039, 100, 1, 1), + (1210101, 2000001, 100, 1, 1), + (1210101, 4000017, 100, 1, 1), + (8250010, 2590004, 100, 1, 1), + (8250010, 2000036, 100, 1, 1), + (8250010, 4021031, 100, 1, 1), + (8250010, 2001554, 100, 1, 1), + (8250010, 4021035, 100, 1, 1), + (8250010, 4021020, 100, 1, 1), + (8250010, 4021032, 100, 1, 1), + (8250010, 4001842, 100, 1, 1), + (8250010, 4021033, 100, 1, 1), + (8250010, 4034291, 100, 1, 1), + (8250010, 2434021, 100, 1, 1), + (8250010, 4021034, 100, 1, 1), + (8250005, 2590004, 100, 1, 1), + (8250005, 4034286, 100, 1, 1), + (8250005, 2000036, 100, 1, 1), + (8250005, 4001842, 100, 1, 1), + (8250005, 4021031, 100, 1, 1), + (8250005, 4021035, 100, 1, 1), + (8250005, 2434021, 100, 1, 1), + (8250005, 2001554, 100, 1, 1), + (8250005, 4021033, 100, 1, 1), + (8250005, 4021020, 100, 1, 1), + (8250005, 4021032, 100, 1, 1), + (8250005, 4021034, 100, 1, 1), + (8250004, 4021035, 100, 1, 1), + (8250004, 4021020, 100, 1, 1), + (8250004, 2001554, 100, 1, 1), + (8250004, 4021034, 100, 1, 1), + (8250004, 4021032, 100, 1, 1), + (8250004, 2434021, 100, 1, 1), + (8250004, 4001842, 100, 1, 1), + (8250004, 4034285, 100, 1, 1), + (8250004, 4021031, 100, 1, 1), + (8250004, 2590004, 100, 1, 1), + (8250004, 2000036, 100, 1, 1), + (8250004, 4021033, 100, 1, 1), + (1210104, 2870023, 100, 1, 1), + (1210104, 4000622, 100, 1, 1), + (1210104, 2060000, 100, 1, 1), + (1210104, 2043200, 100, 1, 1), + (1210104, 4000017, 100, 1, 1), + (1210104, 2000001, 100, 1, 1), + (1210104, 2061000, 100, 1, 1), + (1210104, 2040901, 100, 1, 1), + (1210104, 2000003, 100, 1, 1), + (3000007, 2870065, 100, 1, 1), + (3000007, 4000620, 100, 1, 1), + (8250007, 4021033, 100, 1, 1), + (8250007, 2590004, 100, 1, 1), + (8250007, 2000036, 100, 1, 1), + (8250007, 2434021, 100, 1, 1), + (8250007, 4021032, 100, 1, 1), + (8250007, 2001554, 100, 1, 1), + (8250007, 4021034, 100, 1, 1), + (8250007, 4034288, 100, 1, 1), + (8250007, 4021031, 100, 1, 1), + (8250007, 4021020, 100, 1, 1), + (8250007, 4021035, 100, 1, 1), + (8250007, 4001842, 100, 1, 1), + (3000006, 2870064, 100, 1, 1), + (3000006, 4000166, 100, 1, 1), + (8250006, 4021032, 100, 1, 1), + (8250006, 4021031, 100, 1, 1), + (8250006, 2001554, 100, 1, 1), + (8250006, 4001842, 100, 1, 1), + (8250006, 2000036, 100, 1, 1), + (8250006, 4021033, 100, 1, 1), + (8250006, 2434021, 100, 1, 1), + (8250006, 4021020, 100, 1, 1), + (8250006, 4021035, 100, 1, 1), + (8250006, 2590004, 100, 1, 1), + (8250006, 4034287, 100, 1, 1), + (8250006, 4021034, 100, 1, 1), + (3000001, 4000068, 100, 1, 1), + (8250001, 2434021, 100, 1, 1), + (8250001, 2590004, 100, 1, 1), + (8250001, 2000036, 100, 1, 1), + (8250001, 4034282, 100, 1, 1), + (8250001, 4021033, 100, 1, 1), + (8250001, 4001842, 100, 1, 1), + (8250001, 4021034, 100, 1, 1), + (8250001, 4021031, 100, 1, 1), + (8250001, 4021020, 100, 1, 1), + (8250001, 4021032, 100, 1, 1), + (8250001, 2001554, 100, 1, 1), + (8250001, 4021035, 100, 1, 1), + (3000000, 2870061, 100, 1, 1), + (3000000, 4000063, 100, 1, 1), + (5220002, 2870218, 100, 1, 1), + (8250000, 2001554, 100, 1, 1), + (8250000, 4021033, 100, 1, 1), + (8250000, 2434021, 100, 1, 1), + (8250000, 2000036, 100, 1, 1), + (8250000, 4021031, 100, 1, 1), + (8250000, 2590004, 100, 1, 1), + (8250000, 4021032, 100, 1, 1), + (8250000, 4021034, 100, 1, 1), + (8250000, 4021035, 100, 1, 1), + (8250000, 4001842, 100, 1, 1), + (8250000, 4021020, 100, 1, 1), + (8250000, 4034281, 100, 1, 1), + (8250003, 4034284, 100, 1, 1), + (8250003, 4021032, 100, 1, 1), + (8250003, 2001554, 100, 1, 1), + (8250003, 2434021, 100, 1, 1), + (8250003, 4021034, 100, 1, 1), + (8250003, 4001842, 100, 1, 1), + (8250003, 4021033, 100, 1, 1), + (8250003, 4021035, 100, 1, 1), + (8250003, 4021031, 100, 1, 1), + (8250003, 2590004, 100, 1, 1), + (8250003, 2000036, 100, 1, 1), + (8250003, 4021020, 100, 1, 1), + (5220000, 2870217, 100, 1, 1), + (8250002, 4034283, 100, 1, 1), + (8250002, 2001554, 100, 1, 1), + (8250002, 4021031, 100, 1, 1), + (8250002, 2590004, 100, 1, 1), + (8250002, 4021034, 100, 1, 1), + (8250002, 2434021, 100, 1, 1), + (8250002, 4021020, 100, 1, 1), + (8250002, 4021033, 100, 1, 1), + (8250002, 2000036, 100, 1, 1), + (8250002, 4001842, 100, 1, 1), + (8250002, 4021035, 100, 1, 1), + (8250002, 4021032, 100, 1, 1), + (3230400, 4000127, 100, 1, 1), + (3230400, 2870106, 100, 1, 1), + (3230405, 2870107, 100, 1, 1), + (3230405, 4000154, 100, 1, 1), + (100101, 4000000, 100, 1, 1), + (100101, 2010009, 100, 1, 1), + (100101, 2870001, 100, 1, 1), + (100101, 2061000, 100, 1, 1), + (100101, 2000003, 100, 1, 1), + (100100, 2010009, 100, 1, 1), + (100100, 4000019, 100, 1, 1), + (100100, 2060000, 100, 1, 1), + (100100, 2000000, 100, 1, 1), + (100100, 2870000, 100, 1, 1), + (2600711, 4021031, 100, 1, 1), + (2600711, 4021033, 100, 1, 1), + (2600711, 4009096, 100, 1, 1), + (2600711, 4033171, 100, 1, 1), + (2600711, 2000037, 100, 1, 1), + (2600711, 2049401, 100, 1, 1), + (2600711, 2512233, 100, 1, 1), + (2600711, 4021020, 100, 1, 1), + (2600711, 2430692, 100, 1, 1), + (2600711, 2510244, 100, 1, 1), + (2600711, 2512257, 100, 1, 1), + (2600711, 2512237, 100, 1, 1), + (2600711, 2512288, 100, 1, 1), + (2600711, 4000454, 100, 1, 1), + (2600711, 2512151, 100, 1, 1), + (2600711, 2590004, 100, 1, 1), + (2600711, 2870359, 100, 1, 1), + (2600711, 4021035, 100, 1, 1), + (2600711, 4000456, 100, 1, 1), + (2600711, 2512279, 100, 1, 1), + (2600711, 2000036, 100, 1, 1), + (2600711, 2431174, 100, 1, 1), + (2600711, 2512245, 100, 1, 1), + (2600711, 4021034, 100, 1, 1), + (2600711, 4021032, 100, 1, 1), + (2600710, 4009096, 100, 1, 1), + (2600710, 4021020, 100, 1, 1), + (2600710, 4021034, 100, 1, 1), + (2600710, 4021033, 100, 1, 1), + (2600710, 4021035, 100, 1, 1), + (2600710, 4021031, 100, 1, 1), + (2600710, 4021032, 100, 1, 1), + (2600710, 4000461, 100, 1, 1), + (100131, 4010006, 100, 1, 1), + (100131, 2010009, 100, 1, 1), + (100131, 2060000, 100, 1, 1), + (100131, 4020006, 100, 1, 1), + (100131, 2000003, 100, 1, 1), + (100131, 4000494, 100, 1, 1), + (2600709, 2049401, 100, 1, 1), + (2600709, 2870358, 100, 1, 1), + (2600709, 2431174, 100, 1, 1), + (2600709, 2512271, 100, 1, 1), + (2600709, 2512278, 100, 1, 1), + (2600709, 4021033, 100, 1, 1), + (2600709, 2000037, 100, 1, 1), + (2600709, 4000459, 100, 1, 1), + (2600709, 2430692, 100, 1, 1), + (2600709, 4021020, 100, 1, 1), + (2600709, 2000036, 100, 1, 1), + (2600709, 2511053, 100, 1, 1), + (2600709, 2512142, 100, 1, 1), + (2600709, 4031090, 100, 1, 1), + (2600709, 4000453, 100, 1, 1), + (2600709, 4009096, 100, 1, 1), + (2600709, 2512272, 100, 1, 1), + (2600709, 4021035, 100, 1, 1), + (2600709, 2590004, 100, 1, 1), + (2600709, 2512236, 100, 1, 1), + (2600709, 4021031, 100, 1, 1), + (2600709, 4021032, 100, 1, 1), + (2600709, 2512028, 100, 1, 1), + (2600709, 4021034, 100, 1, 1), + (2600709, 2512286, 100, 1, 1), + (2600709, 2512197, 100, 1, 1), + (100130, 2060000, 100, 1, 1), + (100130, 2000003, 100, 1, 1), + (100130, 2000001, 100, 1, 1), + (100130, 4000493, 100, 1, 1), + (100130, 2010009, 100, 1, 1), + (100130, 2001532, 100, 1, 1), + (100130, 4020005, 100, 1, 1), + (100130, 4010005, 100, 1, 1), + (2600708, 4021033, 100, 1, 1), + (2600708, 4021035, 100, 1, 1), + (2600708, 2512100, 100, 1, 1), + (2600708, 4009096, 100, 1, 1), + (2600708, 2512287, 100, 1, 1), + (2600708, 2512270, 100, 1, 1), + (2600708, 4021031, 100, 1, 1), + (2600708, 2048005, 100, 1, 1), + (2600708, 2512273, 100, 1, 1), + (2600708, 4021034, 100, 1, 1), + (2600708, 2431174, 100, 1, 1), + (2600708, 2512124, 100, 1, 1), + (2600708, 2512174, 100, 1, 1), + (2600708, 2512274, 100, 1, 1), + (2600708, 4000452, 100, 1, 1), + (2600708, 2512280, 100, 1, 1), + (2600708, 4021032, 100, 1, 1), + (2600708, 4021020, 100, 1, 1), + (2600708, 2870357, 100, 1, 1), + (2600708, 2000036, 100, 1, 1), + (2600708, 4031090, 100, 1, 1), + (2600708, 2512090, 100, 1, 1), + (2600708, 2510310, 100, 1, 1), + (2600708, 2000037, 100, 1, 1), + (2600708, 4000459, 100, 1, 1), + (2600708, 2430692, 100, 1, 1), + (2600708, 2510240, 100, 1, 1), + (2600708, 2590004, 100, 1, 1), + (100133, 4000496, 100, 1, 1), + (100133, 4010001, 100, 1, 1), + (100133, 4020003, 100, 1, 1), + (100133, 2000000, 100, 1, 1), + (100133, 2060000, 100, 1, 1), + (100133, 2010009, 100, 1, 1), + (2600707, 2512279, 100, 1, 1), + (2600707, 4000450, 100, 1, 1), + (2600707, 4021035, 100, 1, 1), + (2600707, 2430692, 100, 1, 1), + (2600707, 2512280, 100, 1, 1), + (2600707, 2510310, 100, 1, 1), + (2600707, 4000451, 100, 1, 1), + (2600707, 2000036, 100, 1, 1), + (2600707, 2590004, 100, 1, 1), + (2600707, 2512273, 100, 1, 1), + (2600707, 4021034, 100, 1, 1), + (2600707, 2512197, 100, 1, 1), + (2600707, 2512248, 100, 1, 1), + (2600707, 2000037, 100, 1, 1), + (2600707, 4021031, 100, 1, 1), + (2600707, 2511078, 100, 1, 1), + (2600707, 2512287, 100, 1, 1), + (2600707, 4021032, 100, 1, 1), + (2600707, 2431174, 100, 1, 1), + (2600707, 4033171, 100, 1, 1), + (2600707, 2512217, 100, 1, 1), + (2600707, 2512176, 100, 1, 1), + (2600707, 4021033, 100, 1, 1), + (2600707, 4009096, 100, 1, 1), + (2600707, 2870356, 100, 1, 1), + (2600707, 4021020, 100, 1, 1), + (100132, 2000003, 100, 1, 1), + (100132, 4000495, 100, 1, 1), + (100132, 2010009, 100, 1, 1), + (100132, 4010000, 100, 1, 1), + (100132, 2061000, 100, 1, 1), + (100132, 4020007, 100, 1, 1), + (2600706, 2512269, 100, 1, 1), + (2600706, 4021020, 100, 1, 1), + (2600706, 4021031, 100, 1, 1), + (2600706, 4021035, 100, 1, 1), + (2600706, 2512268, 100, 1, 1), + (2600706, 2512280, 100, 1, 1), + (2600706, 4021034, 100, 1, 1), + (2600706, 4021033, 100, 1, 1), + (2600706, 2590004, 100, 1, 1), + (2600706, 2870355, 100, 1, 1), + (2600706, 4000451, 100, 1, 1), + (2600706, 2000036, 100, 1, 1), + (2600706, 2512274, 100, 1, 1), + (2600706, 4009096, 100, 1, 1), + (2600706, 4000449, 100, 1, 1), + (2600706, 4021032, 100, 1, 1), + (2600706, 2431174, 100, 1, 1), + (2600706, 2004008, 100, 1, 1), + (2600706, 4033171, 100, 1, 1), + (2600706, 2049401, 100, 1, 1), + (2600706, 2000037, 100, 1, 1), + (2600706, 2430692, 100, 1, 1), + (2600706, 2512277, 100, 1, 1), + (2600705, 4021033, 100, 1, 1), + (2600705, 4021032, 100, 1, 1), + (2600705, 4000460, 100, 1, 1), + (2600705, 4021020, 100, 1, 1), + (2600705, 4009096, 100, 1, 1), + (2600705, 4021031, 100, 1, 1), + (2600705, 4021035, 100, 1, 1), + (2600705, 4021034, 100, 1, 1), + (100134, 4000497, 100, 1, 1), + (100134, 2010009, 100, 1, 1), + (100134, 2000001, 100, 1, 1), + (100134, 4010002, 100, 1, 1), + (100134, 2060000, 100, 1, 1), + (100134, 2000000, 100, 1, 1), + (100134, 4020002, 100, 1, 1), + (2600704, 4000459, 100, 1, 1), + (2600704, 2870354, 100, 1, 1), + (2600704, 4021020, 100, 1, 1), + (2600704, 2070009, 100, 1, 1), + (2600704, 2000036, 100, 1, 1), + (2600704, 2049401, 100, 1, 1), + (2600704, 4009096, 100, 1, 1), + (2600704, 2000037, 100, 1, 1), + (2600704, 2512279, 100, 1, 1), + (2600704, 4000448, 100, 1, 1), + (2600704, 2512286, 100, 1, 1), + (2600704, 2512241, 100, 1, 1), + (2600704, 4021034, 100, 1, 1), + (2600704, 2430692, 100, 1, 1), + (2600704, 4021032, 100, 1, 1), + (2600704, 4021035, 100, 1, 1), + (2600704, 2590004, 100, 1, 1), + (2600704, 2431174, 100, 1, 1), + (2600704, 4021033, 100, 1, 1), + (2600704, 4021031, 100, 1, 1), + (2600715, 4021020, 100, 1, 1), + (2600715, 4310029, 100, 1, 1), + (2600715, 4021031, 100, 1, 1), + (2600715, 4000462, 100, 1, 1), + (2600715, 4021035, 100, 1, 1), + (2600715, 4021033, 100, 1, 1), + (2600715, 4021034, 100, 1, 1), + (2600715, 4021032, 100, 1, 1), + (2600715, 4009096, 100, 1, 1), + (2600714, 4021032, 100, 1, 1), + (2600714, 4021035, 100, 1, 1), + (2600714, 2512280, 100, 1, 1), + (2600714, 4021020, 100, 1, 1), + (2600714, 2512246, 100, 1, 1), + (2600714, 2512274, 100, 1, 1), + (2600714, 2512273, 100, 1, 1), + (2600714, 2431174, 100, 1, 1), + (2600714, 2511077, 100, 1, 1), + (2600714, 2430692, 100, 1, 1), + (2600714, 2512288, 100, 1, 1), + (2600714, 2870362, 100, 1, 1), + (2600714, 4021033, 100, 1, 1), + (2600714, 2511015, 100, 1, 1), + (2600714, 4021031, 100, 1, 1), + (2600714, 4009096, 100, 1, 1), + (2600714, 2000037, 100, 1, 1), + (2600714, 2049401, 100, 1, 1), + (2600714, 2590004, 100, 1, 1), + (2600714, 2512235, 100, 1, 1), + (2600714, 2512036, 100, 1, 1), + (2600714, 2000036, 100, 1, 1), + (2600714, 2512286, 100, 1, 1), + (2600714, 2512198, 100, 1, 1), + (2600714, 4021034, 100, 1, 1), + (2600714, 4000459, 100, 1, 1), + (2600714, 4000458, 100, 1, 1), + (6150000, 2870246, 100, 1, 1), + (6150000, 4000608, 100, 1, 1), + (2600713, 4021031, 100, 1, 1), + (2600713, 4021033, 100, 1, 1), + (2600713, 2590004, 100, 1, 1), + (2600713, 2049401, 100, 1, 1), + (2600713, 2000036, 100, 1, 1), + (2600713, 4009096, 100, 1, 1), + (2600713, 2512035, 100, 1, 1), + (2600713, 2512214, 100, 1, 1), + (2600713, 2512283, 100, 1, 1), + (2600713, 4021020, 100, 1, 1), + (2600713, 2512278, 100, 1, 1), + (2600713, 4021034, 100, 1, 1), + (2600713, 2512020, 100, 1, 1), + (2600713, 2048005, 100, 1, 1), + (2600713, 4021032, 100, 1, 1), + (2600713, 2512268, 100, 1, 1), + (2600713, 2512281, 100, 1, 1), + (2600713, 2512105, 100, 1, 1), + (2600713, 4021035, 100, 1, 1), + (2600713, 2512176, 100, 1, 1), + (2600713, 2430692, 100, 1, 1), + (2600713, 4000457, 100, 1, 1), + (2600713, 2512113, 100, 1, 1), + (2600713, 2870361, 100, 1, 1), + (2600713, 4000459, 100, 1, 1), + (2600713, 2431174, 100, 1, 1), + (2600713, 2000037, 100, 1, 1), + (2600712, 2590004, 100, 1, 1), + (2600712, 4021035, 100, 1, 1), + (2600712, 2000036, 100, 1, 1), + (2600712, 2048003, 100, 1, 1), + (2600712, 2510310, 100, 1, 1), + (2600712, 4021031, 100, 1, 1), + (2600712, 2510168, 100, 1, 1), + (2600712, 4000455, 100, 1, 1), + (2600712, 4000456, 100, 1, 1), + (2600712, 2049401, 100, 1, 1), + (2600712, 4021032, 100, 1, 1), + (2600712, 2431174, 100, 1, 1), + (2600712, 4021020, 100, 1, 1), + (2600712, 2512283, 100, 1, 1), + (2600712, 2512267, 100, 1, 1), + (2600712, 2512288, 100, 1, 1), + (2600712, 4009096, 100, 1, 1), + (2600712, 2000037, 100, 1, 1), + (2600712, 2512281, 100, 1, 1), + (2600712, 2430692, 100, 1, 1), + (2600712, 2870360, 100, 1, 1), + (2600712, 4021033, 100, 1, 1), + (2600712, 4021034, 100, 1, 1), + (2600712, 2070009, 100, 1, 1), + (2600712, 2512270, 100, 1, 1), + (5130108, 4021033, 100, 1, 1), + (5130108, 2512193, 100, 1, 1), + (5130108, 4000069, 100, 1, 1), + (5130108, 4021032, 100, 1, 1), + (5130108, 2512115, 100, 1, 1), + (5130108, 2512269, 100, 1, 1), + (5130108, 2001528, 100, 1, 1), + (5130108, 2431174, 100, 1, 1), + (5130108, 2512198, 100, 1, 1), + (5130108, 2000037, 100, 1, 1), + (5130108, 2512154, 100, 1, 1), + (5130108, 4021031, 100, 1, 1), + (5130108, 2512286, 100, 1, 1), + (5130108, 2870210, 100, 1, 1), + (5130108, 2512041, 100, 1, 1), + (5130108, 2512132, 100, 1, 1), + (5130108, 2590004, 100, 1, 1), + (5130108, 4034183, 100, 1, 1), + (5130108, 2512271, 100, 1, 1), + (5130108, 2512276, 100, 1, 1), + (5130108, 4021034, 100, 1, 1), + (5130108, 2430692, 100, 1, 1), + (5130108, 4000082, 100, 1, 1), + (5130108, 4021035, 100, 1, 1), + (5130107, 4000069, 100, 1, 1), + (5130107, 4021031, 100, 1, 1), + (5130107, 4021032, 100, 1, 1), + (5130107, 4021034, 100, 1, 1), + (5130107, 4021033, 100, 1, 1), + (5130107, 4021035, 100, 1, 1), + (5130104, 4032646, 100, 1, 1), + (5130104, 2870207, 100, 1, 1), + (5130104, 4031054, 100, 1, 1), + (5130104, 4031218, 100, 1, 1), + (5130104, 4000051, 100, 1, 1), + (5130104, 4032643, 100, 1, 1), + (5130104, 4032645, 100, 1, 1), + (5130104, 4032644, 100, 1, 1), + (5130104, 4032642, 100, 1, 1), + (5130105, 2870208, 100, 1, 1), + (5130105, 4000055, 100, 1, 1), + (5130103, 2870206, 100, 1, 1), + (5130103, 4000033, 100, 1, 1), + (3300104, 4034110, 100, 1, 1), + (2230114, 2000001, 100, 1, 1), + (2230114, 2040614, 100, 1, 1), + (2230114, 2000003, 100, 1, 1), + (2230114, 2870057, 100, 1, 1), + (2230114, 2060000, 100, 1, 1), + (2230114, 2000006, 100, 1, 1), + (2230114, 2048003, 100, 1, 1), + (2230114, 4000623, 100, 1, 1), + (2230114, 2043600, 100, 1, 1), + (2230114, 2043300, 100, 1, 1), + (2230114, 2000002, 100, 1, 1), + (2230114, 2040900, 100, 1, 1), + (2230112, 2000000, 100, 1, 1), + (2230112, 2000002, 100, 1, 1), + (2230112, 2040417, 100, 1, 1), + (2230112, 2000003, 100, 1, 1), + (2230112, 2043200, 100, 1, 1), + (2230112, 2044700, 100, 1, 1), + (2230112, 4020004, 100, 1, 1), + (2230112, 4010003, 100, 1, 1), + (2230112, 2870055, 100, 1, 1), + (2230112, 4000020, 100, 1, 1), + (2230112, 4003004, 100, 1, 1), + (2230113, 2870056, 100, 1, 1), + (2230113, 2000001, 100, 1, 1), + (2230113, 2044200, 100, 1, 1), + (2230113, 2060000, 100, 1, 1), + (2230113, 2000006, 100, 1, 1), + (2230113, 2044210, 100, 1, 1), + (2230113, 2061000, 100, 1, 1), + (2230113, 2040926, 100, 1, 1), + (2230113, 2070010, 100, 1, 1), + (2230113, 2330000, 100, 1, 1), + (2230113, 2000002, 100, 1, 1), + (2230113, 4000621, 100, 1, 1), + (2230113, 2040929, 100, 1, 1), + (3210100, 2431174, 100, 1, 1), + (3210100, 2870078, 100, 1, 1), + (3210100, 2001527, 100, 1, 1), + (3210100, 2001526, 100, 1, 1), + (3210100, 4000024, 100, 1, 1), + (8140600, 2870324, 100, 1, 1), + (8140600, 4021034, 100, 1, 1), + (8140600, 2434021, 100, 1, 1), + (8140600, 2000037, 100, 1, 1), + (8140600, 4021032, 100, 1, 1), + (8140600, 4000182, 100, 1, 1), + (8140600, 2590004, 100, 1, 1), + (8140600, 4021035, 100, 1, 1), + (8140600, 4031256, 100, 1, 1), + (8140600, 4021033, 100, 1, 1), + (8140600, 2001528, 100, 1, 1), + (8140600, 4021031, 100, 1, 1), + (8920003, 4310065, 100, 1, 1), + (8920003, 4310029, 100, 1, 1), + (8920003, 4310064, 100, 1, 1), + (8920003, 2434586, 100, 1, 1), + (8920003, 2000005, 100, 1, 1), + (8920003, 2433103, 100, 1, 1), + (8920003, 2433591, 100, 1, 1), + (8920003, 3010514, 100, 1, 1), + (8800202, 4001685, 100, 1, 1), + (8800202, 4021031, 100, 1, 1), + (8800202, 4021035, 100, 1, 1), + (8800202, 4021034, 100, 1, 1), + (8800202, 4001687, 100, 1, 1), + (8800202, 4000563, 100, 1, 1), + (8800202, 4021033, 100, 1, 1), + (8800202, 4021032, 100, 1, 1), + (8800202, 4033176, 100, 1, 1), + (8800202, 4001686, 100, 1, 1), + (8290099, 4001877, 100, 1, 1), + (8290099, 4310029, 100, 1, 1), + (8800203, 4001686, 100, 1, 1), + (8800203, 4021032, 100, 1, 1), + (8800203, 4021034, 100, 1, 1), + (8800203, 4021033, 100, 1, 1), + (8800203, 4033176, 100, 1, 1), + (8800203, 4000565, 100, 1, 1), + (8800203, 4001685, 100, 1, 1), + (8800203, 4001687, 100, 1, 1), + (8800203, 4021035, 100, 1, 1), + (8800203, 4021031, 100, 1, 1), + (8800201, 4021035, 100, 1, 1), + (8800201, 4000564, 100, 1, 1), + (8800201, 4001685, 100, 1, 1), + (8800201, 4021034, 100, 1, 1), + (8800201, 4001686, 100, 1, 1), + (8800201, 4021032, 100, 1, 1), + (8800201, 4001687, 100, 1, 1), + (8800201, 4021031, 100, 1, 1), + (8800201, 4021033, 100, 1, 1), + (8800201, 4033176, 100, 1, 1), + (2230131, 4010003, 100, 1, 1), + (2230131, 2000000, 100, 1, 1), + (2230131, 4020003, 100, 1, 1), + (2230131, 2045302, 100, 1, 1), + (2230131, 2040538, 100, 1, 1), + (2230131, 2044302, 100, 1, 1), + (2230131, 4010002, 100, 1, 1), + (2230131, 2049100, 100, 1, 1), + (2230131, 2040530, 100, 1, 1), + (2230131, 4000047, 100, 1, 1), + (2230131, 2870058, 100, 1, 1), + (2230131, 2000001, 100, 1, 1), + (2230131, 4000008, 100, 1, 1), + (8620003, 4021034, 100, 1, 1), + (8620003, 4021033, 100, 1, 1), + (8620003, 4021035, 100, 1, 1), + (8620003, 4033750, 100, 1, 1), + (8620003, 2590004, 100, 1, 1), + (8620003, 4033733, 100, 1, 1), + (8620003, 2000036, 100, 1, 1), + (8620003, 4033727, 100, 1, 1), + (8620003, 4021020, 100, 1, 1), + (8620003, 4000829, 100, 1, 1), + (8620003, 4021032, 100, 1, 1), + (8620003, 4021031, 100, 1, 1), + (8620003, 2434021, 100, 1, 1), + (8620003, 4033732, 100, 1, 1), + (8620003, 2001554, 100, 1, 1), + (8620002, 4000826, 100, 1, 1), + (8620002, 4021034, 100, 1, 1), + (8620002, 4021031, 100, 1, 1), + (8620002, 4033733, 100, 1, 1), + (8620002, 2590004, 100, 1, 1), + (8620002, 2001554, 100, 1, 1), + (8620002, 4021020, 100, 1, 1), + (8620002, 2000036, 100, 1, 1), + (8620002, 4021033, 100, 1, 1), + (8620002, 2434021, 100, 1, 1), + (8620002, 4021032, 100, 1, 1), + (8620002, 4021035, 100, 1, 1), + (8620002, 4033726, 100, 1, 1), + (8620002, 4033732, 100, 1, 1), + (8620001, 2590004, 100, 1, 1), + (8620001, 4021034, 100, 1, 1), + (8620001, 2001554, 100, 1, 1), + (8620001, 4000827, 100, 1, 1), + (8620001, 2000036, 100, 1, 1), + (8620001, 4021032, 100, 1, 1), + (8620001, 4033732, 100, 1, 1), + (8620001, 4021035, 100, 1, 1), + (8620001, 4021033, 100, 1, 1), + (8620001, 4033733, 100, 1, 1), + (8620001, 4021020, 100, 1, 1), + (8620001, 4033726, 100, 1, 1), + (8620001, 2434021, 100, 1, 1), + (8620001, 4021031, 100, 1, 1), + (8880101, 4310029, 100, 1, 1), + (8880101, 2000005, 100, 1, 1), + (8880101, 2435369, 100, 1, 1), + (8880101, 2433103, 100, 1, 1), + (8880101, 4001869, 100, 1, 1), + (8620000, 4021033, 100, 1, 1), + (8620000, 4021031, 100, 1, 1), + (8620000, 2590004, 100, 1, 1), + (8620000, 4000826, 100, 1, 1), + (8620000, 4021034, 100, 1, 1), + (8620000, 4021032, 100, 1, 1), + (8620000, 4021035, 100, 1, 1), + (8620000, 4021020, 100, 1, 1), + (8620000, 4033732, 100, 1, 1), + (8620000, 2001554, 100, 1, 1), + (8620000, 4033726, 100, 1, 1), + (8620000, 4033733, 100, 1, 1), + (8620000, 2434021, 100, 1, 1), + (8620000, 2000036, 100, 1, 1), + (8620000, 4034983, 100, 1, 1), + (8620007, 2001554, 100, 1, 1), + (8620007, 4000833, 100, 1, 1), + (8620007, 4033733, 100, 1, 1), + (8620007, 4033732, 100, 1, 1), + (8620007, 4021032, 100, 1, 1), + (8620007, 2590004, 100, 1, 1), + (8620007, 2000036, 100, 1, 1), + (8620007, 4021031, 100, 1, 1), + (8620007, 4021034, 100, 1, 1), + (8620007, 4021035, 100, 1, 1), + (8620007, 4021033, 100, 1, 1), + (8620007, 4033730, 100, 1, 1), + (8620007, 4021020, 100, 1, 1), + (8620007, 2434021, 100, 1, 1), + (8620006, 4033732, 100, 1, 1), + (8620006, 4033733, 100, 1, 1), + (8620006, 4021020, 100, 1, 1), + (8620006, 4021032, 100, 1, 1), + (8620006, 4033730, 100, 1, 1), + (8620006, 2590004, 100, 1, 1), + (8620006, 4021034, 100, 1, 1), + (8620006, 2434021, 100, 1, 1), + (8620006, 4021033, 100, 1, 1), + (8620006, 4021035, 100, 1, 1), + (8620006, 2001554, 100, 1, 1), + (8620006, 2000036, 100, 1, 1), + (8620006, 4000832, 100, 1, 1), + (8620006, 4021031, 100, 1, 1), + (8620005, 2001554, 100, 1, 1), + (8620005, 2434021, 100, 1, 1), + (8620005, 4021033, 100, 1, 1), + (8620005, 4021034, 100, 1, 1), + (8620005, 4033727, 100, 1, 1), + (8620005, 4021031, 100, 1, 1), + (8620005, 4033733, 100, 1, 1), + (8620005, 2000036, 100, 1, 1), + (8620005, 4021035, 100, 1, 1), + (8620005, 2590004, 100, 1, 1), + (8620005, 4021020, 100, 1, 1), + (8620005, 4033732, 100, 1, 1), + (8620005, 4000831, 100, 1, 1), + (8620005, 4021032, 100, 1, 1), + (8620004, 2001554, 100, 1, 1), + (8620004, 4021032, 100, 1, 1), + (8620004, 4021034, 100, 1, 1), + (8620004, 4021031, 100, 1, 1), + (8620004, 2000036, 100, 1, 1), + (8620004, 4033732, 100, 1, 1), + (8620004, 4033727, 100, 1, 1), + (8620004, 2434021, 100, 1, 1), + (8620004, 4021033, 100, 1, 1), + (8620004, 4000830, 100, 1, 1), + (8620004, 4033733, 100, 1, 1), + (8620004, 4021035, 100, 1, 1), + (8620004, 4021020, 100, 1, 1), + (8620004, 4033753, 100, 1, 1), + (8620004, 2590004, 100, 1, 1), + (8620011, 4000835, 100, 1, 1), + (8620011, 2434021, 100, 1, 1), + (8620011, 2000036, 100, 1, 1), + (8620011, 2001554, 100, 1, 1), + (8620011, 4021033, 100, 1, 1), + (8620011, 4033733, 100, 1, 1), + (8620011, 4000836, 100, 1, 1), + (8620011, 4033731, 100, 1, 1), + (8620011, 4033732, 100, 1, 1), + (8620011, 4021035, 100, 1, 1), + (8620011, 4021034, 100, 1, 1), + (8620011, 4021032, 100, 1, 1), + (8620011, 4021031, 100, 1, 1), + (8620011, 2590004, 100, 1, 1), + (8620011, 4021020, 100, 1, 1), + (8620010, 4021033, 100, 1, 1), + (8620010, 4021035, 100, 1, 1), + (8620010, 2590004, 100, 1, 1), + (8620010, 4033752, 100, 1, 1), + (8620010, 2001554, 100, 1, 1), + (8620010, 4033731, 100, 1, 1), + (8620010, 4033733, 100, 1, 1), + (8620010, 4021020, 100, 1, 1), + (8620010, 4021031, 100, 1, 1), + (8620010, 4033732, 100, 1, 1), + (8620010, 2000036, 100, 1, 1), + (8620010, 4000836, 100, 1, 1), + (8620010, 4021032, 100, 1, 1), + (8620010, 2434021, 100, 1, 1), + (8620010, 4021034, 100, 1, 1), + (8880110, 4001869, 100, 1, 1), + (8880110, 2000005, 100, 1, 1), + (8880110, 2435369, 100, 1, 1), + (8880110, 4310029, 100, 1, 1), + (8880110, 2433103, 100, 1, 1), + (8620009, 2000036, 100, 1, 1), + (8620009, 4033731, 100, 1, 1), + (8620009, 4000835, 100, 1, 1), + (8620009, 4021035, 100, 1, 1), + (8620009, 4021031, 100, 1, 1), + (8620009, 4021033, 100, 1, 1), + (8620009, 4033751, 100, 1, 1), + (8620009, 4021034, 100, 1, 1), + (8620009, 4033733, 100, 1, 1), + (8620009, 4033732, 100, 1, 1), + (8620009, 4021032, 100, 1, 1), + (8620009, 2001554, 100, 1, 1), + (8620009, 2590004, 100, 1, 1), + (8620009, 4021020, 100, 1, 1), + (8620009, 2434021, 100, 1, 1), + (8620008, 4021020, 100, 1, 1), + (8620008, 4033732, 100, 1, 1), + (8620008, 2590004, 100, 1, 1), + (8620008, 4021034, 100, 1, 1), + (8620008, 2000036, 100, 1, 1), + (8620008, 2434021, 100, 1, 1), + (8620008, 4021033, 100, 1, 1), + (8620008, 2001554, 100, 1, 1), + (8620008, 4021035, 100, 1, 1), + (8620008, 4000834, 100, 1, 1), + (8620008, 4021031, 100, 1, 1), + (8620008, 4021032, 100, 1, 1), + (8620008, 4033754, 100, 1, 1), + (8620008, 4033733, 100, 1, 1), + (8620015, 2870466, 100, 1, 1), + (8620015, 2590004, 100, 1, 1), + (8620015, 2070004, 100, 1, 1), + (8620015, 2000036, 100, 1, 1), + (8620015, 2001554, 100, 1, 1), + (8620015, 2434021, 100, 1, 1), + (8620015, 4021035, 100, 1, 1), + (8620015, 4021020, 100, 1, 1), + (8620015, 4021034, 100, 1, 1), + (8620015, 4034983, 100, 1, 1), + (8620015, 4032926, 100, 1, 1), + (8620015, 4021032, 100, 1, 1), + (8620015, 4021033, 100, 1, 1), + (8620015, 4000651, 100, 1, 1), + (8620015, 4021031, 100, 1, 1), + (8620014, 4021034, 100, 1, 1), + (8620014, 4021032, 100, 1, 1), + (8620014, 2512266, 100, 1, 1), + (8620014, 2512270, 100, 1, 1), + (8620014, 4021035, 100, 1, 1), + (8620014, 2512175, 100, 1, 1), + (8620014, 2049401, 100, 1, 1), + (8620014, 2000036, 100, 1, 1), + (8620014, 2512154, 100, 1, 1), + (8620014, 4021020, 100, 1, 1), + (8620014, 2512128, 100, 1, 1), + (8620014, 2512285, 100, 1, 1), + (8620014, 2512283, 100, 1, 1), + (8620014, 4021031, 100, 1, 1), + (8620014, 2001554, 100, 1, 1), + (8620014, 4000650, 100, 1, 1), + (8620014, 4021033, 100, 1, 1), + (8620014, 2434021, 100, 1, 1), + (8620014, 2590004, 100, 1, 1), + (8620014, 2512271, 100, 1, 1), + (8620014, 2512287, 100, 1, 1), + (8620014, 2430692, 100, 1, 1), + (8620014, 2512099, 100, 1, 1), + (8620014, 2070009, 100, 1, 1), + (8620014, 2870465, 100, 1, 1), + (8620014, 4032941, 100, 1, 1), + (8620014, 2512137, 100, 1, 1), + (8620014, 4034983, 100, 1, 1), + (8620013, 4021034, 100, 1, 1), + (8620013, 4021032, 100, 1, 1), + (8620013, 2512154, 100, 1, 1), + (8620013, 2512137, 100, 1, 1), + (8620013, 2512266, 100, 1, 1), + (8620013, 2512285, 100, 1, 1), + (8620013, 4021020, 100, 1, 1), + (8620013, 2049401, 100, 1, 1), + (8620013, 2330003, 100, 1, 1), + (8620013, 2590004, 100, 1, 1), + (8620013, 2512287, 100, 1, 1), + (8620013, 2512128, 100, 1, 1), + (8620013, 2000036, 100, 1, 1), + (8620013, 4034983, 100, 1, 1), + (8620013, 2330002, 100, 1, 1), + (8620013, 2512271, 100, 1, 1), + (8620013, 2434021, 100, 1, 1), + (8620013, 2048003, 100, 1, 1), + (8620013, 2070007, 100, 1, 1), + (8620013, 4021033, 100, 1, 1), + (8620013, 2870464, 100, 1, 1), + (8620013, 4021031, 100, 1, 1), + (8620013, 4021035, 100, 1, 1), + (8620013, 2512099, 100, 1, 1), + (8620013, 4000649, 100, 1, 1), + (8620013, 2512175, 100, 1, 1), + (8620013, 2430692, 100, 1, 1), + (8620013, 2512270, 100, 1, 1), + (8620013, 2001554, 100, 1, 1), + (8620013, 2512283, 100, 1, 1), + (8620012, 4033732, 100, 1, 1), + (8620012, 2001554, 100, 1, 1), + (8620012, 4021020, 100, 1, 1), + (8620012, 2000036, 100, 1, 1), + (8620012, 4021031, 100, 1, 1), + (8620012, 4021032, 100, 1, 1), + (8620012, 4021034, 100, 1, 1), + (8620012, 4033729, 100, 1, 1), + (8620012, 4033733, 100, 1, 1), + (8620012, 2434021, 100, 1, 1), + (8620012, 4000826, 100, 1, 1), + (8620012, 4021035, 100, 1, 1), + (8620012, 4000827, 100, 1, 1), + (8620012, 2590004, 100, 1, 1), + (8620012, 4021033, 100, 1, 1), + (8620012, 4000828, 100, 1, 1), + (5300000, 2870224, 100, 1, 1), + (5300000, 4000086, 100, 1, 1), + (5300001, 2870225, 100, 1, 1), + (5300001, 4000087, 100, 1, 1), + (8620017, 2870468, 100, 1, 1), + (8620017, 4034983, 100, 1, 1), + (8620017, 2590004, 100, 1, 1), + (8620017, 4021034, 100, 1, 1), + (8620017, 4021035, 100, 1, 1), + (8620017, 4021020, 100, 1, 1), + (8620017, 2001554, 100, 1, 1), + (8620017, 4000653, 100, 1, 1), + (8620017, 4021032, 100, 1, 1), + (8620017, 4021031, 100, 1, 1), + (8620017, 2434021, 100, 1, 1), + (8620017, 4021033, 100, 1, 1), + (8620017, 2000036, 100, 1, 1), + (8620017, 2070005, 100, 1, 1), + (8620016, 4000652, 100, 1, 1), + (8620016, 4034983, 100, 1, 1), + (8620016, 2001554, 100, 1, 1), + (8620016, 4021034, 100, 1, 1), + (8620016, 4021020, 100, 1, 1), + (8620016, 2870467, 100, 1, 1), + (8620016, 4021035, 100, 1, 1), + (8620016, 4021031, 100, 1, 1), + (8620016, 2434021, 100, 1, 1), + (8620016, 4021032, 100, 1, 1), + (8620016, 4021033, 100, 1, 1), + (8620016, 2000036, 100, 1, 1), + (8620016, 2590004, 100, 1, 1), + (2230102, 2060000, 100, 1, 1), + (2230102, 2870047, 100, 1, 1), + (2230102, 2000000, 100, 1, 1), + (2230102, 2044310, 100, 1, 1), + (2230102, 2040500, 100, 1, 1), + (2230102, 2044700, 100, 1, 1), + (2230102, 4003004, 100, 1, 1), + (2230102, 4010003, 100, 1, 1), + (2230102, 4000021, 100, 1, 1), + (2230102, 2000002, 100, 1, 1), + (2230102, 4020004, 100, 1, 1), + (2230102, 4000020, 100, 1, 1), + (1120100, 2022054, 100, 1, 1), + (1120100, 2043002, 100, 1, 1), + (1120100, 2022053, 100, 1, 1), + (1120100, 2022014, 100, 1, 1), + (1120100, 4020002, 100, 1, 1), + (1120100, 4010003, 100, 1, 1), + (1120100, 2000003, 100, 1, 1), + (1120100, 2870012, 100, 1, 1), + (1120100, 2022055, 100, 1, 1), + (1120100, 2000002, 100, 1, 1), + (2230103, 2040417, 100, 1, 1), + (2230103, 4130023, 100, 1, 1), + (2230103, 2070008, 100, 1, 1), + (2230103, 2044112, 100, 1, 1), + (2230103, 2044802, 100, 1, 1), + (2230103, 2000001, 100, 1, 1), + (2230103, 4000097, 100, 1, 1), + (2230103, 4004003, 100, 1, 1), + (2230103, 2040002, 100, 1, 1), + (2230103, 2001521, 100, 1, 1), + (2230103, 2000006, 100, 1, 1), + (2230103, 2043201, 100, 1, 1), + (2230103, 4010003, 100, 1, 1), + (2230103, 2043601, 100, 1, 1), + (2230103, 2044114, 100, 1, 1), + (2230103, 4131000, 100, 1, 1), + (2230103, 2061000, 100, 1, 1), + (2230100, 2044800, 100, 1, 1), + (2230100, 2070001, 100, 1, 1), + (2230100, 2040515, 100, 1, 1), + (2230100, 4020005, 100, 1, 1), + (2230100, 4010004, 100, 1, 1), + (2230100, 2870045, 100, 1, 1), + (2230100, 2044402, 100, 1, 1), + (2230100, 2048000, 100, 1, 1), + (2230100, 2000001, 100, 1, 1), + (2230100, 4000007, 100, 1, 1), + (2230100, 2061000, 100, 1, 1), + (2230101, 4020003, 100, 1, 1), + (2230101, 4010002, 100, 1, 1), + (2230101, 2040003, 100, 1, 1), + (2230101, 2000003, 100, 1, 1), + (2230101, 2044210, 100, 1, 1), + (2230101, 2044700, 100, 1, 1), + (2230101, 4000008, 100, 1, 1), + (2230101, 2044302, 100, 1, 1), + (2230101, 2872040, 100, 1, 1), + (2230101, 2061000, 100, 1, 1), + (2230101, 2045302, 100, 1, 1), + (2230106, 2000002, 100, 1, 1), + (2230106, 2040004, 100, 1, 1), + (2230106, 4000163, 100, 1, 1), + (2230106, 2044412, 100, 1, 1), + (2230106, 2000004, 100, 1, 1), + (2230106, 2001527, 100, 1, 1), + (2230106, 2001526, 100, 1, 1), + (2230106, 2048004, 100, 1, 1), + (2230106, 2040514, 100, 1, 1), + (2230106, 2040602, 100, 1, 1), + (2230106, 2060000, 100, 1, 1), + (2230106, 2870049, 100, 1, 1), + (2230107, 2070008, 100, 1, 1), + (2230107, 4020005, 100, 1, 1), + (2230107, 4010002, 100, 1, 1), + (2230107, 2044010, 100, 1, 1), + (2230107, 2040613, 100, 1, 1), + (2230107, 2045302, 100, 1, 1), + (2230107, 2044302, 100, 1, 1), + (2230107, 2040902, 100, 1, 1), + (2230107, 2040326, 100, 1, 1), + (2230107, 2040321, 100, 1, 1), + (2230107, 2001527, 100, 1, 1), + (2230107, 2060000, 100, 1, 1), + (2230107, 2870050, 100, 1, 1), + (2230107, 2000002, 100, 1, 1), + (2230107, 4000162, 100, 1, 1), + (2230104, 2040924, 100, 1, 1), + (2230104, 2041009, 100, 1, 1), + (2230104, 2001527, 100, 1, 1), + (2230104, 4000098, 100, 1, 1), + (2230104, 4131010, 100, 1, 1), + (2230104, 4010002, 100, 1, 1), + (2230104, 4010001, 100, 1, 1), + (2230104, 4004002, 100, 1, 1), + (2230104, 2044112, 100, 1, 1), + (2230104, 2040516, 100, 1, 1), + (2230104, 2001522, 100, 1, 1), + (2230105, 2040620, 100, 1, 1), + (2230105, 2070001, 100, 1, 1), + (2230105, 2040824, 100, 1, 1), + (2230105, 4004003, 100, 1, 1), + (2230105, 2001526, 100, 1, 1), + (2230105, 2870048, 100, 1, 1), + (2230105, 4000161, 100, 1, 1), + (2230105, 2040505, 100, 1, 1), + (2230105, 2041010, 100, 1, 1), + (2230105, 2044601, 100, 1, 1), + (2230105, 2070009, 100, 1, 1), + (2230105, 2000002, 100, 1, 1), + (2230105, 4010001, 100, 1, 1), + (2230105, 2001527, 100, 1, 1), + (2230105, 2060000, 100, 1, 1), + (2230105, 2061000, 100, 1, 1), + (2230105, 4131000, 100, 1, 1), + (2110300, 4020007, 100, 1, 1), + (2110300, 4130023, 100, 1, 1), + (2110300, 2000004, 100, 1, 1), + (2110300, 4020000, 100, 1, 1), + (2110300, 4010007, 100, 1, 1), + (2110300, 2043214, 100, 1, 1), + (2110300, 2040924, 100, 1, 1), + (2110300, 2070003, 100, 1, 1), + (2110300, 4000350, 100, 1, 1), + (2110300, 2001527, 100, 1, 1), + (2110300, 2048000, 100, 1, 1), + (2110300, 2000002, 100, 1, 1), + (2110300, 2000006, 100, 1, 1), + (2230110, 4020001, 100, 1, 1), + (2230110, 2040420, 100, 1, 1), + (2230110, 2044805, 100, 1, 1), + (2230110, 2000001, 100, 1, 1), + (2230110, 4010000, 100, 1, 1), + (2230110, 2870053, 100, 1, 1), + (2230110, 4020002, 100, 1, 1), + (2230110, 2040316, 100, 1, 1), + (2230110, 2061000, 100, 1, 1), + (2230110, 2044010, 100, 1, 1), + (2230110, 4000196, 100, 1, 1), + (2230110, 2040530, 100, 1, 1), + (2230110, 2000006, 100, 1, 1), + (8160000, 2000037, 100, 1, 1), + (8160000, 2434021, 100, 1, 1), + (8160000, 2870343, 100, 1, 1), + (8160000, 2430692, 100, 1, 1), + (8160000, 4034181, 100, 1, 1), + (8160000, 4021031, 100, 1, 1), + (8160000, 4021032, 100, 1, 1), + (8160000, 4000151, 100, 1, 1), + (8160000, 2590004, 100, 1, 1), + (8160000, 4021034, 100, 1, 1), + (8160000, 4031172, 100, 1, 1), + (8160000, 4021033, 100, 1, 1), + (8160000, 4021035, 100, 1, 1), + (8160000, 2001528, 100, 1, 1), + (2110301, 2048002, 100, 1, 1), + (2110301, 2001002, 100, 1, 1), + (2110301, 4010001, 100, 1, 1), + (2110301, 2044901, 100, 1, 1), + (2110301, 2512055, 100, 1, 1), + (2110301, 2043002, 100, 1, 1), + (2110301, 4010002, 100, 1, 1), + (2110301, 2043114, 100, 1, 1), + (2110301, 2001526, 100, 1, 1), + (2110301, 4000351, 100, 1, 1), + (2110301, 2060000, 100, 1, 1), + (2110301, 4010007, 100, 1, 1), + (2110301, 2000005, 100, 1, 1), + (2110301, 4004002, 100, 1, 1), + (2110301, 2001001, 100, 1, 1), + (2110301, 2061000, 100, 1, 1), + (2110301, 2870035, 100, 1, 1), + (2110301, 2048004, 100, 1, 1), + (2230111, 2000006, 100, 1, 1), + (2230111, 2000000, 100, 1, 1), + (2230111, 4010001, 100, 1, 1), + (2230111, 2044210, 100, 1, 1), + (2230111, 2070008, 100, 1, 1), + (2230111, 2044110, 100, 1, 1), + (2230111, 4020003, 100, 1, 1), + (2230111, 2040534, 100, 1, 1), + (2230111, 2870054, 100, 1, 1), + (2230111, 2060000, 100, 1, 1), + (2230111, 4000197, 100, 1, 1), + (2230111, 2049000, 100, 1, 1), + (2230111, 2043800, 100, 1, 1), + (2230111, 4010005, 100, 1, 1), + (2230108, 2043017, 100, 1, 1), + (2230108, 2043201, 100, 1, 1), + (2230108, 2001527, 100, 1, 1), + (2230108, 2870051, 100, 1, 1), + (2230108, 4000160, 100, 1, 1), + (2230108, 4010000, 100, 1, 1), + (2230108, 2040620, 100, 1, 1), + (2230108, 4006001, 100, 1, 1), + (2230108, 2044807, 100, 1, 1), + (2230108, 2044202, 100, 1, 1), + (2230108, 2044012, 100, 1, 1), + (2230108, 2000002, 100, 1, 1), + (2230108, 4020007, 100, 1, 1), + (2230109, 4020003, 100, 1, 1), + (2230109, 2070002, 100, 1, 1), + (2230109, 2000002, 100, 1, 1), + (2230109, 4010004, 100, 1, 1), + (2230109, 4131010, 100, 1, 1), + (2230109, 2000006, 100, 1, 1), + (2230109, 2001526, 100, 1, 1), + (2230109, 2040534, 100, 1, 1), + (2230109, 2060000, 100, 1, 1), + (2230109, 2040513, 100, 1, 1), + (2230109, 2049210, 100, 1, 1), + (2230109, 4000164, 100, 1, 1), + (2230109, 2040925, 100, 1, 1), + (2230109, 4004002, 100, 1, 1), + (2230109, 2870052, 100, 1, 1), + (2230109, 2040902, 100, 1, 1), + (3502005, 4001806, 100, 1, 1), + (3502005, 2431174, 100, 1, 1), + (3502005, 4030025, 100, 1, 1), + (5250000, 4033109, 500, 1, 1), + (5250000, 2870221, 100, 1, 1), + (5250000, 4000437, 100, 1, 1), + (3502004, 4001805, 100, 1, 1), + (3502004, 2431174, 100, 1, 1), + (5250001, 2870222, 100, 1, 1), + (5250001, 4000439, 100, 1, 1), + (5250001, 4033109, 500, 1, 1), + (3502007, 2431174, 100, 1, 1), + (3502007, 4030030, 100, 1, 1), + (3502007, 4001808, 100, 1, 1), + (5250002, 2001001, 100, 1, 1), + (5250002, 2590004, 100, 1, 1), + (5250002, 2870223, 100, 1, 1), + (5250002, 2434021, 100, 1, 1), + (5250002, 4033109, 500, 1, 1), + (5250002, 4000440, 100, 1, 1), + (5250002, 4021034, 100, 1, 1), + (5250002, 4021031, 100, 1, 1), + (5250002, 2001002, 100, 1, 1), + (5250002, 4021033, 100, 1, 1), + (5250002, 4021035, 100, 1, 1), + (5250002, 4021032, 100, 1, 1), + (8630017, 4021035, 100, 1, 1), + (8630017, 4021034, 100, 1, 1), + (8630017, 4021020, 100, 1, 1), + (8630017, 4021031, 100, 1, 1), + (8630017, 4021033, 100, 1, 1), + (8630017, 2431174, 100, 1, 1), + (8630017, 2590004, 100, 1, 1), + (8630017, 2000036, 100, 1, 1), + (8630017, 4021032, 100, 1, 1), + (8630017, 4009149, 100, 1, 1), + (8630017, 2000037, 100, 1, 1), + (3502006, 2431174, 100, 1, 1), + (3502006, 4001807, 100, 1, 1), + (8630016, 4021020, 100, 1, 1), + (8630016, 4021034, 100, 1, 1), + (8630016, 4021035, 100, 1, 1), + (8630016, 4021033, 100, 1, 1), + (8630016, 2000037, 100, 1, 1), + (8630016, 4021032, 100, 1, 1), + (8630016, 2000036, 100, 1, 1), + (8630016, 2431174, 100, 1, 1), + (8630016, 2590004, 100, 1, 1), + (8630016, 4009148, 100, 1, 1), + (8630016, 4021031, 100, 1, 1), + (3502001, 4001802, 100, 1, 1), + (3502001, 2431174, 100, 1, 1), + (5250004, 4000674, 100, 1, 1), + (5250004, 4033109, 500, 1, 1), + (8800002, 4001083, 100, 1, 1), + (8800002, 2431710, 100, 1, 1), + (8800002, 2000004, 100, 1, 1), + (8800002, 4310029, 100, 1, 1), + (8800002, 2433103, 100, 1, 1), + (3502000, 4001801, 100, 1, 1), + (3502000, 2431174, 100, 1, 1), + (5250005, 4033109, 500, 1, 1), + (5250005, 4000675, 100, 1, 1), + (3502003, 2431174, 100, 1, 1), + (3502003, 4001804, 100, 1, 1), + (5250006, 4033109, 500, 1, 1), + (5250006, 4000676, 100, 1, 1), + (3502002, 4001803, 100, 1, 1), + (3502002, 2431174, 100, 1, 1), + (5250007, 2431752, 100, 1, 1), + (5250007, 4033109, 500, 1, 1), + (3502008, 4034229, 100, 1, 1), + (3502008, 2431174, 100, 1, 1), + (8800022, 2433103, 100, 1, 1), + (8800022, 2431710, 100, 1, 1), + (8800022, 2000004, 100, 1, 1), + (3503009, 4021032, 100, 1, 1), + (3503009, 4001868, 100, 1, 1), + (3503009, 2590004, 100, 1, 1), + (3503009, 2000036, 100, 1, 1), + (3503009, 2000037, 100, 1, 1), + (3503009, 4021034, 100, 1, 1), + (3503009, 4021033, 100, 1, 1), + (3503009, 4021020, 100, 1, 1), + (3503009, 4034878, 100, 1, 1), + (3503009, 4021031, 100, 1, 1), + (3503009, 2431174, 100, 1, 1), + (3503009, 4021035, 100, 1, 1), + (4230100, 4000023, 100, 1, 1), + (4230100, 4034068, 100, 1, 1), + (4230100, 2870131, 100, 1, 1), + (3503008, 2431174, 100, 1, 1), + (3503008, 2000036, 100, 1, 1), + (3503008, 4021034, 100, 1, 1), + (3503008, 4001868, 100, 1, 1), + (3503008, 4021031, 100, 1, 1), + (3503008, 4021035, 100, 1, 1), + (3503008, 4034878, 100, 1, 1), + (3503008, 2590004, 100, 1, 1), + (3503008, 4021032, 100, 1, 1), + (3503008, 4021033, 100, 1, 1), + (3503008, 2000037, 100, 1, 1), + (3503008, 4021020, 100, 1, 1), + (4230101, 4031013, 9000, 1, 1), + (4230101, 4031013, 9000, 1, 1), + (4230102, 2870133, 100, 1, 1), + (4230102, 4031155, 100, 1, 1), + (4230102, 4000036, 100, 1, 1), + (4230103, 4033055, 100, 1, 1), + (4230103, 2870134, 100, 1, 1), + (4230103, 4000039, 100, 1, 1), + (4230103, 2431174, 100, 1, 1), + (4230105, 4031200, 100, 1, 1), + (4230105, 2590004, 100, 1, 1), + (4230105, 2434021, 100, 1, 1), + (4230105, 2001002, 100, 1, 1), + (4230105, 2022039, 100, 1, 1), + (4230105, 2001001, 100, 1, 1), + (4230105, 4000058, 100, 1, 1), + (2230200, 4004000, 100, 1, 1), + (2230200, 4010006, 100, 1, 1), + (2230200, 2070002, 100, 1, 1), + (2230200, 2040621, 100, 1, 1), + (2230200, 4000165, 100, 1, 1), + (2230200, 2060000, 100, 1, 1), + (2230200, 2512059, 100, 1, 1), + (2230200, 2048001, 100, 1, 1), + (2230200, 2001001, 100, 1, 1), + (2230200, 2000004, 100, 1, 1), + (2230200, 2070005, 100, 1, 1), + (2230200, 2043212, 100, 1, 1), + (2230200, 2001527, 100, 1, 1), + (2230200, 2870059, 100, 1, 1), + (2230200, 2001526, 100, 1, 1), + (2230200, 4020002, 100, 1, 1), + (4230106, 2434021, 100, 1, 1), + (4230106, 4021035, 100, 1, 1), + (4230106, 4031309, 100, 1, 1), + (4230106, 4021033, 100, 1, 1), + (4230106, 2001002, 100, 1, 1), + (4230106, 4000060, 100, 1, 1), + (4230106, 4021032, 100, 1, 1), + (4230106, 2590004, 100, 1, 1), + (4230106, 2870136, 100, 1, 1), + (4230106, 2001001, 100, 1, 1), + (4230106, 4021034, 100, 1, 1), + (4230107, 4021034, 100, 1, 1), + (4230107, 2431174, 100, 1, 1), + (4230107, 2430692, 100, 1, 1), + (4230107, 2870137, 100, 1, 1), + (4230107, 4021032, 100, 1, 1), + (4230107, 4031309, 100, 1, 1), + (4230107, 4021035, 100, 1, 1), + (4230107, 2000037, 100, 1, 1), + (4230107, 2001528, 100, 1, 1), + (4230107, 2590004, 100, 1, 1), + (4230107, 4021033, 100, 1, 1), + (4230107, 4000076, 100, 1, 1), + (7130103, 2870282, 100, 1, 1), + (7130103, 2434021, 100, 1, 1), + (7130103, 4000208, 100, 1, 1), + (4230108, 4000078, 100, 1, 1), + (4230108, 2590004, 100, 1, 1), + (4230108, 4021035, 100, 1, 1), + (4230108, 4021033, 100, 1, 1), + (4230108, 2870138, 100, 1, 1), + (4230108, 2431174, 100, 1, 1), + (4230108, 4021032, 100, 1, 1), + (4230108, 4021034, 100, 1, 1), + (4230108, 4021031, 100, 1, 1), + (4230108, 2000036, 100, 1, 1), + (4230108, 2000037, 100, 1, 1), + (4230109, 4000101, 100, 1, 1), + (4230109, 2001002, 100, 1, 1), + (4230109, 4021035, 100, 1, 1), + (4230109, 4021033, 100, 1, 1), + (4230109, 4021032, 100, 1, 1), + (4230109, 2590004, 100, 1, 1), + (4230109, 4021034, 100, 1, 1), + (4230109, 2870139, 100, 1, 1), + (4230109, 2434021, 100, 1, 1), + (4230109, 2001001, 100, 1, 1), + (4230110, 2870140, 100, 1, 1), + (4230110, 4000102, 100, 1, 1), + (4230110, 2870140, 100, 1, 1), + (8240098, 4310029, 100, 1, 1), + (8240098, 4001843, 100, 1, 1), + (8240098, 2000005, 100, 1, 1), + (8240098, 2433103, 100, 1, 1), + (8240098, 2433593, 100, 1, 1), + (8500002, 2433103, 100, 1, 1), + (8500002, 2000004, 100, 1, 1), + (8500002, 4001084, 100, 1, 1), + (8500002, 4031196, 100, 1, 1), + (2100100, 2000006, 100, 1, 1), + (2100100, 4000324, 100, 1, 1), + (2100100, 2044601, 100, 1, 1), + (2100100, 4003004, 100, 1, 1), + (2100100, 4020006, 100, 1, 1), + (2100100, 2001001, 100, 1, 1), + (2100100, 2512055, 100, 1, 1), + (2100100, 2043112, 100, 1, 1), + (2100100, 2870025, 100, 1, 1), + (2100100, 2044801, 100, 1, 1), + (2100100, 2001002, 100, 1, 1), + (2100100, 2001527, 100, 1, 1), + (2100100, 4010007, 100, 1, 1), + (2100100, 2049000, 100, 1, 1), + (2100100, 2061000, 100, 1, 1), + (2100100, 4010001, 100, 1, 1), + (4230116, 2431174, 100, 1, 1), + (4230116, 2000037, 100, 1, 1), + (4230116, 4021033, 100, 1, 1), + (4230116, 2512154, 100, 1, 1), + (4230116, 4021032, 100, 1, 1), + (4230116, 4021034, 100, 1, 1), + (4230116, 4021031, 100, 1, 1), + (4230116, 2000036, 100, 1, 1), + (4230116, 2870146, 100, 1, 1), + (4230116, 2590004, 100, 1, 1), + (4230116, 4021020, 100, 1, 1), + (4230116, 4021035, 100, 1, 1), + (4230116, 4000117, 100, 1, 1), + (2100101, 2061000, 100, 1, 1), + (2100101, 4020001, 100, 1, 1), + (2100101, 2512054, 100, 1, 1), + (2100101, 2049000, 100, 1, 1), + (2100101, 2044312, 100, 1, 1), + (2100101, 2000002, 100, 1, 1), + (2100101, 2040621, 100, 1, 1), + (2100101, 2044602, 100, 1, 1), + (2100101, 2048004, 100, 1, 1), + (2100101, 2001001, 100, 1, 1), + (2100101, 2870026, 100, 1, 1), + (2100101, 4000325, 100, 1, 1), + (2100101, 2001002, 100, 1, 1), + (2100101, 4003004, 100, 1, 1), + (2100101, 4010006, 100, 1, 1), + (2100101, 4010007, 100, 1, 1), + (4230117, 2000036, 100, 1, 1), + (4230117, 2870147, 100, 1, 1), + (4230117, 2590004, 100, 1, 1), + (4230117, 4021033, 100, 1, 1), + (4230117, 2431174, 100, 1, 1), + (4230117, 4021034, 100, 1, 1), + (4230117, 4021032, 100, 1, 1), + (4230117, 4021035, 100, 1, 1), + (4230117, 4021031, 100, 1, 1), + (4230117, 2000037, 100, 1, 1), + (4230117, 4021020, 100, 1, 1), + (2100102, 4010002, 100, 1, 1), + (2100102, 2044012, 100, 1, 1), + (2100102, 2048003, 100, 1, 1), + (2100102, 2040705, 100, 1, 1), + (2100102, 2000006, 100, 1, 1), + (2100102, 2001527, 100, 1, 1), + (2100102, 4000329, 100, 1, 1), + (2100102, 2022155, 100, 1, 1), + (2100102, 2061000, 100, 1, 1), + (2100102, 4020004, 100, 1, 1), + (2100102, 4010007, 100, 1, 1), + (2100102, 2001001, 100, 1, 1), + (2100102, 2044312, 100, 1, 1), + (2100102, 2870027, 100, 1, 1), + (2100102, 2070004, 100, 1, 1), + (2100102, 2044102, 100, 1, 1), + (4230118, 4021035, 100, 1, 1), + (4230118, 4021033, 100, 1, 1), + (4230118, 2431174, 100, 1, 1), + (4230118, 4021032, 100, 1, 1), + (4230118, 2000036, 100, 1, 1), + (4230118, 4021031, 100, 1, 1), + (4230118, 2870148, 100, 1, 1), + (4230118, 4021034, 100, 1, 1), + (4230118, 4021020, 100, 1, 1), + (4230118, 2590004, 100, 1, 1), + (4230118, 2000037, 100, 1, 1), + (2100103, 4000330, 100, 1, 1), + (2100103, 2044001, 100, 1, 1), + (2100103, 2022155, 100, 1, 1), + (2100103, 2048002, 100, 1, 1), + (2100103, 2061000, 100, 1, 1), + (2100103, 2001526, 100, 1, 1), + (2100103, 2512053, 100, 1, 1), + (2100103, 4010003, 100, 1, 1), + (2100103, 2045201, 100, 1, 1), + (2100103, 2001527, 100, 1, 1), + (2100103, 4010007, 100, 1, 1), + (2100103, 2870028, 100, 1, 1), + (2100103, 2044314, 100, 1, 1), + (2100103, 2070004, 100, 1, 1), + (2100103, 2001001, 100, 1, 1), + (2100103, 4020004, 100, 1, 1), + (2100103, 2070003, 100, 1, 1), + (2100103, 2001002, 100, 1, 1), + (2100103, 2043701, 100, 1, 1), + (4230119, 4021035, 100, 1, 1), + (4230119, 2431174, 100, 1, 1), + (4230119, 2870149, 100, 1, 1), + (4230119, 2590004, 100, 1, 1), + (4230119, 4021031, 100, 1, 1), + (4230119, 2000036, 100, 1, 1), + (4230119, 4021032, 100, 1, 1), + (4230119, 4021020, 100, 1, 1), + (4230119, 4000120, 100, 1, 1), + (4230119, 4021033, 100, 1, 1), + (4230119, 4021034, 100, 1, 1), + (4230119, 2000037, 100, 1, 1), + (2100104, 2001001, 100, 1, 1), + (2100104, 2870029, 100, 1, 1), + (2100104, 2043214, 100, 1, 1), + (2100104, 2044412, 100, 1, 1), + (2100104, 2512059, 100, 1, 1), + (2100104, 2000002, 100, 1, 1), + (2100104, 4020005, 100, 1, 1), + (2100104, 2044901, 100, 1, 1), + (2100104, 4004001, 100, 1, 1), + (2100104, 2001526, 100, 1, 1), + (2100104, 4020006, 100, 1, 1), + (2100104, 2022155, 100, 1, 1), + (2100104, 4000331, 100, 1, 1), + (2100104, 2000006, 100, 1, 1), + (2100104, 4010007, 100, 1, 1), + (2100104, 2043401, 100, 1, 1), + (3503005, 4021020, 100, 1, 1), + (3503005, 4021035, 100, 1, 1), + (3503005, 4001868, 100, 1, 1), + (3503005, 4021033, 100, 1, 1), + (3503005, 4034876, 100, 1, 1), + (3503005, 2000037, 100, 1, 1), + (3503005, 4021034, 100, 1, 1), + (3503005, 4021031, 100, 1, 1), + (3503005, 2431174, 100, 1, 1), + (3503005, 4021032, 100, 1, 1), + (3503005, 2000036, 100, 1, 1), + (3503005, 2590004, 100, 1, 1), + (4230120, 4021034, 100, 1, 1), + (4230120, 4021032, 100, 1, 1), + (4230120, 2000036, 100, 1, 1), + (4230120, 4021020, 100, 1, 1), + (4230120, 2000037, 100, 1, 1), + (4230120, 4021031, 100, 1, 1), + (4230120, 2590004, 100, 1, 1), + (4230120, 2870150, 100, 1, 1), + (4230120, 2431174, 100, 1, 1), + (4230120, 4021035, 100, 1, 1), + (4230120, 4000121, 100, 1, 1), + (4230120, 4021033, 100, 1, 1), + (2100105, 4000328, 100, 1, 1), + (2100105, 2043212, 100, 1, 1), + (2100105, 4006001, 100, 1, 1), + (2100105, 2043114, 100, 1, 1), + (2100105, 2000006, 100, 1, 1), + (2100105, 2001001, 100, 1, 1), + (2100105, 2001002, 100, 1, 1), + (2100105, 2044201, 100, 1, 1), + (2100105, 2870030, 100, 1, 1), + (2100105, 4010004, 100, 1, 1), + (2100105, 2001527, 100, 1, 1), + (2100105, 2044002, 100, 1, 1), + (2100105, 2001526, 100, 1, 1), + (3503004, 2431174, 100, 1, 1), + (3503004, 4034876, 100, 1, 1), + (3503004, 2590004, 100, 1, 1), + (3503004, 4021035, 100, 1, 1), + (3503004, 4021034, 100, 1, 1), + (3503004, 4021033, 100, 1, 1), + (3503004, 4021020, 100, 1, 1), + (3503004, 2000037, 100, 1, 1), + (3503004, 4021032, 100, 1, 1), + (3503004, 4001868, 100, 1, 1), + (3503004, 2000036, 100, 1, 1), + (3503004, 4021031, 100, 1, 1), + (4230121, 4021033, 100, 1, 1), + (4230121, 4021034, 100, 1, 1), + (4230121, 2512158, 100, 1, 1), + (4230121, 4021035, 100, 1, 1), + (4230121, 2000036, 100, 1, 1), + (4230121, 2431174, 100, 1, 1), + (4230121, 2000037, 100, 1, 1), + (4230121, 4021020, 100, 1, 1), + (4230121, 4021031, 100, 1, 1), + (4230121, 4021032, 100, 1, 1), + (4230121, 4000122, 100, 1, 1), + (4230121, 2590004, 100, 1, 1), + (4230121, 2870151, 100, 1, 1), + (2100106, 4020007, 100, 1, 1), + (2100106, 2048005, 100, 1, 1), + (2100106, 4000326, 100, 1, 1), + (2100106, 2870031, 100, 1, 1), + (2100106, 2000006, 100, 1, 1), + (2100106, 2512057, 100, 1, 1), + (2100106, 2000004, 100, 1, 1), + (2100106, 4010007, 100, 1, 1), + (2100106, 2044101, 100, 1, 1), + (2100106, 2001527, 100, 1, 1), + (2100106, 4020000, 100, 1, 1), + (2100106, 2061000, 100, 1, 1), + (2100106, 2048004, 100, 1, 1), + (2100106, 4131016, 100, 1, 1), + (3503007, 4021020, 100, 1, 1), + (3503007, 4021033, 100, 1, 1), + (3503007, 4021031, 100, 1, 1), + (3503007, 4001868, 100, 1, 1), + (3503007, 2431174, 100, 1, 1), + (3503007, 2590004, 100, 1, 1), + (3503007, 4021032, 100, 1, 1), + (3503007, 4034877, 100, 1, 1), + (3503007, 2000036, 100, 1, 1), + (3503007, 2000037, 100, 1, 1), + (3503007, 4021034, 100, 1, 1), + (3503007, 4021035, 100, 1, 1), + (2100107, 2001001, 100, 1, 1), + (2100107, 4010007, 100, 1, 1), + (2100107, 2070002, 100, 1, 1), + (2100107, 4020003, 100, 1, 1), + (2100107, 4000327, 100, 1, 1), + (2100107, 2001002, 100, 1, 1), + (2100107, 2870032, 100, 1, 1), + (2100107, 2043001, 100, 1, 1), + (2100107, 2001527, 100, 1, 1), + (2100107, 2043112, 100, 1, 1), + (2100107, 2061000, 100, 1, 1), + (2100107, 2048002, 100, 1, 1), + (2100107, 2001526, 100, 1, 1), + (2100107, 4020002, 100, 1, 1), + (3503006, 4034877, 100, 1, 1), + (3503006, 2431174, 100, 1, 1), + (3503006, 4021032, 100, 1, 1), + (3503006, 4021033, 100, 1, 1), + (3503006, 4001868, 100, 1, 1), + (3503006, 2000037, 100, 1, 1), + (3503006, 4021020, 100, 1, 1), + (3503006, 4021035, 100, 1, 1), + (3503006, 4021034, 100, 1, 1), + (3503006, 2590004, 100, 1, 1), + (3503006, 2000036, 100, 1, 1), + (3503006, 4021031, 100, 1, 1), + (4230123, 2870152, 100, 1, 1), + (4230123, 4031266, 100, 1, 1), + (4230123, 4000156, 100, 1, 1), + (4230123, 4000157, 100, 1, 1), + (2100108, 4010007, 100, 1, 1), + (2100108, 4010001, 100, 1, 1), + (2100108, 2040801, 100, 1, 1), + (2100108, 4003004, 100, 1, 1), + (2100108, 2044214, 100, 1, 1), + (2100108, 2060000, 100, 1, 1), + (2100108, 4010002, 100, 1, 1), + (2100108, 4004002, 100, 1, 1), + (2100108, 2001002, 100, 1, 1), + (2100108, 4000333, 100, 1, 1), + (2100108, 2000002, 100, 1, 1), + (2100108, 2512260, 100, 1, 1), + (2100108, 2043002, 100, 1, 1), + (2100108, 2044014, 100, 1, 1), + (2100108, 2330003, 100, 1, 1), + (2100108, 2044212, 100, 1, 1), + (2100108, 2001526, 100, 1, 1), + (2100108, 2048004, 100, 1, 1), + (2100108, 2870033, 100, 1, 1), + (3503001, 4021033, 100, 1, 1), + (3503001, 2000037, 100, 1, 1), + (3503001, 4021034, 100, 1, 1), + (3503001, 4021031, 100, 1, 1), + (3503001, 4021035, 100, 1, 1), + (3503001, 2590004, 100, 1, 1), + (3503001, 2431174, 100, 1, 1), + (3503001, 4021032, 100, 1, 1), + (3503001, 4001868, 100, 1, 1), + (3503001, 2000036, 100, 1, 1), + (3503001, 4021020, 100, 1, 1), + (4230124, 4031267, 100, 1, 1), + (4230124, 2870153, 100, 1, 1), + (4230124, 4000157, 100, 1, 1), + (4230124, 4000156, 100, 1, 1), + (3503000, 4021035, 100, 1, 1), + (3503000, 2431174, 100, 1, 1), + (3503000, 2590004, 100, 1, 1), + (3503000, 2000037, 100, 1, 1), + (3503000, 4021020, 100, 1, 1), + (3503000, 4021031, 100, 1, 1), + (3503000, 4001868, 100, 1, 1), + (3503000, 2000036, 100, 1, 1), + (3503000, 4021033, 100, 1, 1), + (3503000, 4021032, 100, 1, 1), + (3503000, 4021034, 100, 1, 1), + (4230125, 2870154, 100, 1, 1), + (4230125, 4000204, 100, 1, 1), + (4230125, 2431174, 100, 1, 1), + (3503003, 4034875, 100, 1, 1), + (3503003, 2431174, 100, 1, 1), + (3503003, 4021033, 100, 1, 1), + (3503003, 4001868, 100, 1, 1), + (3503003, 2590004, 100, 1, 1), + (3503003, 4021034, 100, 1, 1), + (3503003, 4021031, 100, 1, 1), + (3503003, 4021032, 100, 1, 1), + (3503003, 4021035, 100, 1, 1), + (3503003, 4021020, 100, 1, 1), + (3503003, 2000036, 100, 1, 1), + (3503003, 2000037, 100, 1, 1), + (4230126, 2001002, 100, 1, 1), + (4230126, 4000205, 100, 1, 1), + (4230126, 2001001, 100, 1, 1), + (4230126, 2870155, 100, 1, 1), + (4230126, 2431174, 100, 1, 1), + (4230126, 2590004, 100, 1, 1), + (3503002, 4021031, 100, 1, 1), + (3503002, 4021035, 100, 1, 1), + (3503002, 2431174, 100, 1, 1), + (3503002, 2000036, 100, 1, 1), + (3503002, 2590004, 100, 1, 1), + (3503002, 4001868, 100, 1, 1), + (3503002, 4034875, 100, 1, 1), + (3503002, 4021020, 100, 1, 1), + (3503002, 4021032, 100, 1, 1), + (3503002, 4021034, 100, 1, 1), + (3503002, 2000037, 100, 1, 1), + (3503002, 4021033, 100, 1, 1), + (8930100, 2433103, 100, 1, 1), + (8930100, 2433592, 100, 1, 1), + (8930100, 4310029, 100, 1, 1), + (8930100, 2000005, 100, 1, 1), + (8930100, 4310064, 100, 1, 1), + (8840006, 4310010, 100, 1, 1), + (8840006, 4021032, 100, 1, 1), + (8840006, 2512264, 100, 1, 1), + (8840006, 2431662, 100, 1, 1), + (8840006, 4021033, 100, 1, 1), + (8840006, 2000005, 100, 1, 1), + (8840006, 2433103, 100, 1, 1), + (8840006, 4021034, 100, 1, 1), + (8840006, 4021035, 100, 1, 1), + (8840006, 4021031, 100, 1, 1), + (8840006, 2070005, 100, 1, 1), + (8840007, 2000005, 100, 1, 1), + (8840007, 4021034, 100, 1, 1), + (8840007, 4021032, 100, 1, 1), + (8840007, 2433103, 100, 1, 1), + (8840007, 4021031, 100, 1, 1), + (8840007, 4021020, 100, 1, 1), + (8840007, 4021035, 100, 1, 1), + (8840007, 2512264, 100, 1, 1), + (8840007, 2431662, 100, 1, 1), + (8840007, 4021033, 100, 1, 1), + (8840000, 4021033, 100, 1, 1), + (8840000, 2433103, 100, 1, 1), + (8840000, 4021035, 100, 1, 1), + (8840000, 4021031, 100, 1, 1), + (8840000, 2000004, 100, 1, 1), + (8840000, 2431662, 100, 1, 1), + (8840000, 4021034, 100, 1, 1), + (8840000, 4310010, 100, 1, 1), + (8840000, 4021032, 100, 1, 1), + (8840000, 2512264, 100, 1, 1), + (7130020, 4021033, 100, 1, 1), + (7130020, 4021032, 100, 1, 1), + (7130020, 4021034, 100, 1, 1), + (7130020, 4021031, 100, 1, 1), + (7130020, 4000179, 100, 1, 1), + (7130020, 4021035, 100, 1, 1), + (3210208, 4000095, 100, 1, 1), + (3210208, 2870087, 100, 1, 1), + (2600903, 2590004, 100, 1, 1), + (2600903, 2590004, 100, 1, 1), + (2600903, 4021032, 100, 1, 1), + (2600903, 2431174, 100, 1, 1), + (2600903, 4021020, 100, 1, 1), + (2600903, 4009136, 100, 1, 1), + (2600903, 4021035, 100, 1, 1), + (2600903, 4021032, 100, 1, 1), + (2600903, 4021033, 100, 1, 1), + (2600903, 4021034, 100, 1, 1), + (2600903, 4021020, 100, 1, 1), + (2600903, 4033927, 100, 1, 1), + (2600903, 2000036, 100, 1, 1), + (2600903, 4033927, 100, 1, 1), + (2600903, 2000037, 100, 1, 1), + (2600903, 4009136, 100, 1, 1), + (2600903, 4021031, 100, 1, 1), + (2600903, 2000036, 100, 1, 1), + (2600903, 4021033, 100, 1, 1), + (2600903, 2431174, 100, 1, 1), + (2600903, 4021035, 100, 1, 1), + (2600903, 4021031, 100, 1, 1), + (2600903, 2000037, 100, 1, 1), + (2600903, 4021034, 100, 1, 1), + (8800102, 2000005, 100, 1, 1), + (8800102, 4310029, 100, 1, 1), + (8800102, 2433103, 100, 1, 1), + (8800102, 4001083, 100, 1, 1), + (8800102, 2431710, 100, 1, 1), + (2600902, 4021031, 100, 1, 1), + (2600902, 4021035, 100, 1, 1), + (2600902, 2431174, 100, 1, 1), + (2600902, 4021033, 100, 1, 1), + (2600902, 4021020, 100, 1, 1), + (2600902, 4021020, 100, 1, 1), + (2600902, 4009135, 100, 1, 1), + (2600902, 2000036, 100, 1, 1), + (2600902, 4021032, 100, 1, 1), + (2600902, 4021033, 100, 1, 1), + (2600902, 2590004, 100, 1, 1), + (2600902, 4021035, 100, 1, 1), + (2600902, 2000037, 100, 1, 1), + (2600902, 4009135, 100, 1, 1), + (2600902, 4021034, 100, 1, 1), + (2600902, 4021032, 100, 1, 1), + (2600902, 2590004, 100, 1, 1), + (2600902, 2431174, 100, 1, 1), + (2600902, 2000036, 100, 1, 1), + (2600902, 2000037, 100, 1, 1), + (2600902, 4033927, 100, 1, 1), + (2600902, 4021031, 100, 1, 1), + (2600902, 4021034, 100, 1, 1), + (2600902, 4033927, 100, 1, 1), + (4034527, 4021035, 100, 1, 1), + (4034527, 4021032, 100, 1, 1), + (4034527, 4021034, 100, 1, 1), + (4034527, 4021033, 100, 1, 1), + (2600901, 2590004, 100, 1, 1), + (2600901, 4021034, 100, 1, 1), + (2600901, 2000037, 100, 1, 1), + (2600901, 4021035, 100, 1, 1), + (2600901, 4021031, 100, 1, 1), + (2600901, 4009134, 100, 1, 1), + (2600901, 4021031, 100, 1, 1), + (2600901, 4021033, 100, 1, 1), + (2600901, 2431174, 100, 1, 1), + (2600901, 2431174, 100, 1, 1), + (2600901, 4033927, 100, 1, 1), + (2600901, 2590004, 100, 1, 1), + (2600901, 4021020, 100, 1, 1), + (2600901, 4021020, 100, 1, 1), + (2600901, 4021034, 100, 1, 1), + (2600901, 4021035, 100, 1, 1), + (2600901, 2000036, 100, 1, 1), + (2600901, 2000036, 100, 1, 1), + (2600901, 2000037, 100, 1, 1), + (2600901, 4021033, 100, 1, 1), + (2600901, 4033927, 100, 1, 1), + (2600901, 4021032, 100, 1, 1), + (2600901, 4009134, 100, 1, 1), + (2600901, 4021032, 100, 1, 1), + (2600900, 2590004, 100, 1, 1), + (2600900, 4021034, 100, 1, 1), + (2600900, 4033927, 100, 1, 1), + (2600900, 4021035, 100, 1, 1), + (2600900, 4021020, 100, 1, 1), + (2600900, 4021033, 100, 1, 1), + (2600900, 4021031, 100, 1, 1), + (2600900, 2000037, 100, 1, 1), + (2600900, 2431174, 100, 1, 1), + (2600900, 4009133, 100, 1, 1), + (2600900, 4021032, 100, 1, 1), + (2600900, 2000036, 100, 1, 1), + (3501008, 4000997, 100, 1, 1), + (3501008, 4000998, 100, 1, 1), + (3501008, 4000992, 100, 1, 1), + (3501008, 4000993, 100, 1, 1), + (3501008, 4000995, 100, 1, 1), + (3501008, 4034562, 100, 1, 1), + (3501008, 4000991, 100, 1, 1), + (3501008, 4000996, 100, 1, 1), + (3501008, 4000990, 100, 1, 1), + (3210200, 2870079, 100, 1, 1), + (3210200, 4000073, 100, 1, 1), + (3210201, 2870080, 100, 1, 1), + (3210201, 4000073, 100, 1, 1), + (3210202, 2870081, 100, 1, 1), + (3210202, 4000073, 100, 1, 1), + (3210205, 4000096, 100, 1, 1), + (3210205, 4021033, 100, 1, 1), + (3210205, 2001002, 100, 1, 1), + (3210205, 4021034, 100, 1, 1), + (3210205, 4031093, 100, 1, 1), + (3210205, 2431174, 100, 1, 1), + (3210205, 2870084, 100, 1, 1), + (3210205, 2001001, 100, 1, 1), + (3210205, 4021032, 100, 1, 1), + (3210205, 2590004, 100, 1, 1), + (3210205, 4021035, 100, 1, 1), + (3210205, 4032734, 100, 1, 1), + (2600905, 4021034, 100, 1, 1), + (2600905, 2000036, 100, 1, 1), + (2600905, 2431174, 100, 1, 1), + (2600905, 4021035, 100, 1, 1), + (2600905, 4021032, 100, 1, 1), + (2600905, 2000037, 100, 1, 1), + (2600905, 4009133, 100, 1, 1), + (2600905, 4021031, 100, 1, 1), + (2600905, 4021020, 100, 1, 1), + (2600905, 4021033, 100, 1, 1), + (2600905, 4033927, 100, 1, 1), + (2600905, 2590004, 100, 1, 1), + (3210206, 2870085, 100, 1, 1), + (3210206, 4000103, 100, 1, 1), + (2600904, 4009132, 100, 1, 1), + (2600904, 4021031, 100, 1, 1), + (2600904, 2000037, 100, 1, 1), + (2600904, 4021020, 100, 1, 1), + (2600904, 2431174, 100, 1, 1), + (2600904, 4021034, 100, 1, 1), + (2600904, 2590004, 100, 1, 1), + (2600904, 4021034, 100, 1, 1), + (2600904, 4033927, 100, 1, 1), + (2600904, 2000036, 100, 1, 1), + (2600904, 4021033, 100, 1, 1), + (2600904, 4021032, 100, 1, 1), + (2600904, 4021035, 100, 1, 1), + (2600904, 4021032, 100, 1, 1), + (2600904, 4021031, 100, 1, 1), + (2600904, 2590004, 100, 1, 1), + (2600904, 2431174, 100, 1, 1), + (2600904, 2000036, 100, 1, 1), + (2600904, 4021035, 100, 1, 1), + (2600904, 2000037, 100, 1, 1), + (2600904, 4021020, 100, 1, 1), + (2600904, 4009132, 100, 1, 1), + (2600904, 4033927, 100, 1, 1), + (2600904, 4021033, 100, 1, 1), + (3501005, 4000995, 100, 1, 1), + (3501005, 2431769, 100, 1, 1), + (3501004, 2431768, 100, 1, 1), + (3501004, 2000002, 100, 1, 1), + (3501004, 2000006, 100, 1, 1), + (3501004, 4034562, 100, 1, 1), + (3501007, 4000997, 100, 1, 1), + (3501006, 4000996, 100, 1, 1), + (3501001, 4000991, 100, 1, 1), + (3501001, 4033825, 100, 1, 1), + (7130000, 2870272, 100, 1, 1), + (7130000, 4000074, 100, 1, 1), + (3501000, 4033824, 100, 1, 1), + (3501000, 4000990, 100, 1, 1), + (7130001, 4021035, 100, 1, 1), + (7130001, 2434021, 100, 1, 1), + (7130001, 4021032, 100, 1, 1), + (7130001, 4021031, 100, 1, 1), + (7130001, 4000079, 100, 1, 1), + (7130001, 2590004, 100, 1, 1), + (7130001, 4021033, 100, 1, 1), + (7130001, 4021034, 100, 1, 1), + (7130001, 2000036, 100, 1, 1), + (7130001, 2001554, 100, 1, 1), + (7130001, 2870273, 100, 1, 1), + (3501003, 2000002, 100, 1, 1), + (3501003, 2000003, 100, 1, 1), + (3501003, 4033826, 100, 1, 1), + (3501003, 4000992, 100, 1, 1), + (3501002, 4000992, 100, 1, 1), + (3501002, 2000002, 100, 1, 1), + (3501002, 2000003, 100, 1, 1), + (3501002, 4033826, 100, 1, 1), + (3501002, 4033827, 100, 1, 1), + (1110100, 4033021, 100, 1, 1), + (2110200, 4033026, 100, 1, 1), + (2110200, 4033025, 100, 1, 1), + (2110200, 4033024, 100, 1, 1), + (2220100, 4033029, 100, 1, 1), + (5130101, 4033031, 100, 1, 1), + (5130102, 4000025, 100, 1, 1), + (5150000, 4000177, 100, 1, 1), + (5150002, 4000671, 100, 1, 1), + (5150003, 4000672, 100, 1, 1), + (9600015, 4034635, 100, 1, 1), + (9600016, 4034635, 100, 1, 1), + (9600017, 4034636, 100, 1, 1), + (9600024, 4034724, 100, 1, 1), + (9600022, 4034724, 100, 1, 1), + (3401001, 4033625, 100, 1, 1), + (9390008, 4000870, 100, 1, 1), + (9390008, 4000869, 100, 1, 1), + (9390007, 4000870, 100, 1, 1), + (9390007, 4000869, 100, 1, 1), + (9390014, 4000870, 100, 1, 1), + (9390014, 4000869, 100, 1, 1), + (9390015, 4000870, 100, 1, 1), + (9390015, 4000869, 100, 1, 1), + (9390009, 4000870, 100, 1, 1), + (9390009, 4000869, 100, 1, 1), + (9390010, 4000870, 100, 1, 1), + (9390010, 4000869, 100, 1, 1), + (2400200, 4009219, 2000, 1, 1), + (2400201, 4009220, 2000, 1, 1), + (2400202, 4009221, 2000, 1, 1), + (2400203, 4009222, 2000, 1, 1), + (2400204, 4009223, 2000, 1, 1), + (2400205, 4009224, 2000, 1, 1), + (2400206, 4009225, 2000, 1, 1), + (2400207, 4009226, 2000, 1, 1), + (2400208, 4009227, 2000, 1, 1), + (2400209, 4009228, 2000, 1, 1), + (100200, 4033072, 2000, 1, 1), + (9001012, 4032311, 10000, 1, 1), + (9001013, 4032339, 10000, 1, 1), + (8641000, 4034914, 5000, 1, 1), + (8641001, 4034915, 5000, 1, 1), + (8641002, 4034916, 5000, 1, 1), + (8641003, 4034917, 5000, 1, 1), + (8641013, 4034917, 5000, 1, 1), + (8641004, 4034918, 5000, 1, 1), + (8641005, 4034919, 5000, 1, 1), + (8641006, 4034920, 5000, 1, 1), + (8641014, 4034920, 8000, 1, 1), + (8641008, 4034921, 8000, 1, 1), + (8641007, 4034921, 8000, 1, 1), + (8641008, 4034937, 8000, 1, 1), + (8641007, 4034937, 8000, 1, 1), + (8641008, 4034938, 8000, 1, 1), + (8641007, 4034938, 8000, 1, 1), + (9001012, 4032311, 9000, 1, 1), + (9001013, 4032339, 10000, 1, 1), + (2230113, 4000621, 10000, 1, 1), + (150000, 4000595, 10000, 1, 1), + (150002, 4000597, 10000, 1, 1), + (9001017, 4031013, 10000, 1, 1), + (9001003, 4031059, 10000, 1, 1), + (9300730, 4000489, 10000, 1, 1), + (9300731, 4000489, 10000, 1, 1), + (9001000, 4031059, 10000, 1, 1), + (9001001, 4031059, 10000, 1, 1), + (9001002, 4031059, 10000, 1, 1), + (9001003, 4031059, 10000, 1, 1), + (9001004, 4031059, 10000, 1, 1), + + (9001031, 4032737, 10000, 1, 1), + (9001031, 4032738, 10000, 1, 1), + (9001031, 4032739, 10000, 1, 1), + (9001031, 4034787, 10000, 1, 1), + + (9001043, 4031343, 10000, 1, 1), + (9001043, 4031514, 10000, 1, 1), + (9001043, 4031511, 10000, 1, 1), + (9001043, 4031517, 10000, 1, 1), + (9001043, 4031860, 10000, 1, 1), + + (9001044, 4031344, 10000, 1, 1), + (9001044, 4031515, 10000, 1, 1), + (9001044, 4031512, 10000, 1, 1), + (9001044, 4031518, 10000, 1, 1), + (9001044, 4031861, 10000, 1, 1), + + # Ark questline drops + (2400350, 4036344, 10000, 1, 1), + (2400351, 4036345, 10000, 1, 1), + (2400352, 4036346, 10000, 1, 1), + (2400353, 4036347, 10000, 1, 1), + (2400354, 4036348, 10000, 1, 1), + (2400355, 4036349, 10000, 1, 1), + + # Illium questline drops + (2400413, 4036162, 10000, 1, 1), + + (100200, 4033072, 2000, 1, 1), + + + # Easy Magnus + (8880010, 2431964, 10000, 1, 1), + (8880010, 2431964, 6000, 2, 3), + (8880010, 2048700, 2500, 1, 1), + (8880010, 1152170, 2500, 1, 1), + (8880010, 1182087, 2500, 1, 1), + (8880010, 4310058, 10000, 5, 15), + + + # Normal Magnus + (8880002, 1072732, 400, 1, 1), + (8880002, 1072733, 400, 1, 1), + (8880002, 1072734, 400, 1, 1), + (8880002, 1072735, 400, 1, 1), + (8880002, 1072736, 400, 1, 1), + + (8880002, 1102471, 400, 1, 1), + (8880002, 1102472, 400, 1, 1), + (8880002, 1102473, 400, 1, 1), + (8880002, 1102474, 400, 1, 1), + (8880002, 1102475, 400, 1, 1), + + (8880002, 1132164, 400, 1, 1), + (8880002, 1132165, 400, 1, 1), + (8880002, 1132166, 400, 1, 1), + (8880002, 1132167, 400, 1, 1), + (8880002, 1132168, 400, 1, 1), + + (8880002, 2048703, 2500, 1, 1), + (8880002, 4310058, 10000, 15, 35), + + + # Hard Magnus + (8880001, 1072743, 250, 1, 1), + (8880001, 1072744, 250, 1, 1), + (8880001, 1072745, 250, 1, 1), + (8880001, 1072746, 250, 1, 1), + (8880001, 1072747, 250, 1, 1), + + (8880001, 1082543, 250, 1, 1), + (8880001, 1082544, 250, 1, 1), + (8880001, 1082545, 250, 1, 1), + (8880001, 1082546, 250, 1, 1), + (8880001, 1082547, 250, 1, 1), + + (8880001, 1102481, 250, 1, 1), + (8880001, 1102482, 250, 1, 1), + (8880001, 1102483, 250, 1, 1), + (8880001, 1102484, 250, 1, 1), + (8880001, 1102485, 250, 1, 1), + + (8880001, 1132175, 250, 1, 1), + (8880001, 1132176, 250, 1, 1), + (8880001, 1132177, 250, 1, 1), + (8880001, 1132178, 250, 1, 1), + (8880001, 1132179, 250, 1, 1), + (8880001, 2048703, 2500, 1, 1), + + (8880001, 2048716, 1500, 1, 1), + (8880001, 2048717, 500, 1, 1), + + + # Normal Hilla + (8870000, 4310029, 8000, 10, 15), + (8870000, 2433103, 100, 1, 1), + (8870000, 2431896, 5000, 1, 3), + (8870000, 2430690, 100, 1, 1), + (8870000, 1032136, 500, 1, 1), + (8870000, 1162009, 2000, 1, 1), + + + # Hard Hilla + (8870100, 4310029, 8000, 10, 15), + (8870100, 2433103, 100, 1, 1), + (8870100, 2431896, 5000, 3, 5), + (8870100, 2430690, 100, 1, 1), + (8870100, 1032136, 1000, 1, 1), + (8870100, 1162009, 3000, 1, 1), + (8870100, 1112952, 50, 1, 1), + + # Normal/Easy Cygnus - ID = 8850111 + + (8850111, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8850111, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8850111, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8850111, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8850111, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8850111, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8850111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8850111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8850111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8850111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8850111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8850111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8850111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8850111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8850111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8850111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8850111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8850111, 4310018, 6000, 2, 2), # Crusader Coin + (8850111, 4310018, 6000, 2, 2), # Crusader Coin + (8850111, 4310018, 6000, 2, 2), # Crusader Coin + (8850111, 4310018, 6000, 2, 2), # Crusader Coin + (8850111, 4310018, 6000, 2, 2), # Crusader Coin + (8850111, 2048701, 5000, 1, 1), # Rebirth Flame Lv. 120 + (8850111, 1942001, 2500, 1, 1), # Gold Mask + (8850111, 1952001, 2500, 1, 1), # Gold Pendant + (8850111, 1962001, 2500, 1, 1), # Gold Wings + (8850111, 1972001, 2500, 1, 1), # Gold Tail + (8850111, 4001886, 10000, 1, 1), # Intense Power Crystal + (8850111, 1612004, 2500, 1, 1), # Pure Gold Engine + (8850111, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8850111, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8850111, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8850111, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8850111, 4021035, 10000, 5, 15), # Grand Spell Essence + (8850111, 4021034, 10000, 5, 15), # Fine Spell Essence + (8850111, 4021033, 10000, 5, 15), # Basic Spell Essence + (8850111, 4021032, 10000, 5, 15), # Mana Crystal + (8850111, 4021031, 10000, 5, 15), # Twisted Time + (8850111, 4021020, 10000, 5, 15), # Confusion Fragment + (8850111, 4000659, 10000, 1, 1), # Cygnus Circlet + (8850111, 4000659, 10000, 1, 1), # Cygnus Circlet + (8850111, 4000659, 10000, 1, 1), # Cygnus Circlet + (8850111, 3010406, 3500, 1, 1), # Mini Shinsoo Chair + (8850111, 2431711, 7000, 1, 1), # Cygnus Soul Shard + (8850111, 2431711, 3500, 1, 1), # Cygnus Soul Shard + (8850111, 2431711, 1500, 1, 1), # Cygnus Soul Shard + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434588, 3500, 1, 1), # Piece of Ruin for lionheard wep + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + (8850111, 2434589, 3500, 1, 1), # Piece of Darkness for lionheard armor + + # Easy Arkarium - ID = 8860005 + + (8860005, 2046374, 5000, 1, 1), # Fragment of Distorted Time + (8860005, 2046374, 5000, 1, 1), # Fragment of Distorted Time + (8860005, 2511126, 1500, 1, 1), # Guardian Eternal Ring Recipe + (8860005, 2511127, 1500, 1, 1), # Berserker Eternal Ring Recipe + (8860005, 2511128, 1500, 1, 1), # High Lord Eternal Ring Recipe + (8860005, 2511129, 1500, 1, 1), # Oracle Eternal Ring Recipe + (8860005, 2511130, 1000, 1, 1), # Dominator Pendant Recipe + (8860005, 1122254, 1000, 1, 1), # Mechanator Pendant + (8860005, 2431753, 7000, 1, 1), # Arkarium Soul Shard + (8860005, 2431753, 3500, 1, 1), # Arkarium Soul Shard + (8860005, 2022176, 10000, 20, 20), # Power Elixir (Tradeable) + (8860005, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8860005, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8860005, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8860005, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8860005, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860005, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860005, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860005, 4310018, 6000, 2, 2), # Crusader Coin + (8860005, 4310018, 6000, 2, 2), # Crusader Coin + (8860005, 4310018, 6000, 2, 2), # Crusader Coin + (8860005, 4310018, 6000, 2, 2), # Crusader Coin + (8860005, 4310018, 6000, 2, 2), # Crusader Coin + (8860005, 2048702, 5000, 1, 1), # Rebirth Flame Lv. 130 + (8860005, 1942001, 2500, 1, 1), # Gold Mask + (8860005, 1952001, 2500, 1, 1), # Gold Pendant + (8860005, 1962001, 2500, 1, 1), # Gold Wings + (8860005, 1972001, 2500, 1, 1), # Gold Tail + (8860005, 4001886, 10000, 1, 1), # Intense Power Crystal + (8860005, 1612004, 2500, 1, 1), # Pure Gold Engine + (8860005, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8860005, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8860005, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8860005, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8860005, 4021035, 10000, 5, 15), # Grand Spell Essence + (8860005, 4021034, 10000, 5, 15), # Fine Spell Essence + (8860005, 4021033, 10000, 5, 15), # Basic Spell Essence + (8860005, 4021032, 10000, 5, 15), # Mana Crystal + (8860005, 4021031, 10000, 5, 15), # Twisted Time + (8860005, 4021020, 10000, 5, 15), # Confusion Fragment + (8860005, 4001832, 10000, 20, 60), # Spell Trace + (8860005, 4001832, 10000, 20, 60), # Spell Trace + (8860005, 4001832, 10000, 20, 60), # Spell Trace + (8860005, 3010321, 2000, 1, 1), # Arkarium Storytime Chair + + # Normal Arkarium - ID = 8860000 + + (8860000, 1122150, 1500, 1, 1), # Dominator Pendant + (8860000, 1122150, 1500, 1, 1), # Dominator Pendant + (8860000, 2046374, 6000, 1, 1), # Fragment of Distorted Time + (8860000, 2046374, 6000, 1, 1), # Fragment of Distorted Time + (8860000, 2046374, 6000, 1, 1), # Fragment of Distorted Time + (8860000, 2046374, 6000, 1, 1), # Fragment of Distorted Time + (8860000, 2511126, 2000, 1, 1), # Guardian Eternal Ring Recipe + (8860000, 2511127, 2000, 1, 1), # Berserker Eternal Ring Recipe + (8860000, 2511128, 2000, 1, 1), # High Lord Eternal Ring Recipe + (8860000, 2511129, 2000, 1, 1), # Oracle Eternal Ring Recipe + (8860000, 2511130, 2000, 1, 1), # Dominator Pendant Recipe + (8860000, 1122254, 1500, 1, 1), # Mechanator Pendant + (8860000, 1122254, 1500, 1, 1), # Mechanator Pendant + (8860000, 2431753, 8000, 1, 1), # Arkarium Soul Shard + (8860000, 2431753, 4000, 1, 1), # Arkarium Soul Shard + (8860000, 2431753, 2000, 1, 1), # Arkarium Soul Shard + (8860000, 2022176, 10000, 20, 20), # Power Elixir (Tradeable) + (8860000, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8860000, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8860000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8860000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8860000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8860000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8860000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8860000, 4310018, 6000, 2, 2), # Crusader Coin + (8860000, 4310018, 6000, 2, 2), # Crusader Coin + (8860000, 4310018, 6000, 2, 2), # Crusader Coin + (8860000, 4310018, 6000, 2, 2), # Crusader Coin + (8860000, 4310018, 6000, 2, 2), # Crusader Coin + (8860000, 2048702, 5000, 1, 1), # Rebirth Flame Lv. 130 + (8860000, 1942001, 2500, 1, 1), # Gold Mask + (8860000, 1952001, 2500, 1, 1), # Gold Pendant + (8860000, 1962001, 2500, 1, 1), # Gold Wings + (8860000, 1972001, 2500, 1, 1), # Gold Tail + (8860000, 4001886, 10000, 1, 1), # Intense Power Crystal + (8860000, 1612004, 2500, 1, 1), # Pure Gold Engine + (8860000, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8860000, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8860000, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8860000, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8860000, 4021035, 10000, 5, 15), # Grand Spell Essence + (8860000, 4021034, 10000, 5, 15), # Fine Spell Essence + (8860000, 4021033, 10000, 5, 15), # Basic Spell Essence + (8860000, 4021032, 10000, 5, 15), # Mana Crystal + (8860000, 4021031, 10000, 5, 15), # Twisted Time + (8860000, 4021020, 10000, 5, 15), # Confusion Fragment + (8860000, 4001832, 10000, 20, 60), # Spell Trace + (8860000, 4001832, 10000, 20, 60), # Spell Trace + (8860000, 4001832, 10000, 20, 60), # Spell Trace + (8860000, 3010321, 2000, 1, 1), # Arkarium Storytime Chair + + # Cra and Ra Drops + + # Crimson Queen Normal Box ID = 8920106 + + (8920106, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8920106, 1003717, 7000, 1, 1), # Queens Tiara + (8920106, 3010514, 750, 1, 1), # Crimson Queens Throne´ + (8920106, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920106, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920106, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920106, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920106, 4001886, 10000, 1, 1), # Intense Power Crystal + (8920106, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920106, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920106, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920106, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920106, 4310018, 6000, 2, 2), # Crusader Coin + (8920106, 4310018, 6000, 2, 2), # Crusader Coin + (8920106, 4310018, 6000, 2, 2), # Crusader Coin + (8920106, 4310018, 6000, 2, 2), # Crusader Coin + (8920106, 4310018, 6000, 2, 2), # Crusader Coin + (8920106, 2433591, 7000, 1, 1), # Crimson Queen Soul Shard + (8920106, 2433591, 3500, 1, 1), # Crimson Queen Soul Shard + (8920106, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8920106, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8920106, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + # Crimson Queen Chaos Box ID = 8920006 + + (8920006, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8920006, 4310065, 10000, 1, 1), # Chaos Yggdrasil Rune + (8920006, 1003717, 7000, 1, 1), # Queens Tiara + (8920006, 1003721, 5000, 1, 1), # Chaos Queen Tiara + (8920006, 3010514, 1000, 1, 1), # Crimson Queens Throne´ + (8920006, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8920006, 4001886, 10000, 1, 1), # Intense Power Crystal + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 4310018, 6000, 2, 2), # Crusader Coin + (8920006, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8920006, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8920006, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8920006, 2433591, 8000, 1, 1), # Crimson Queen Soul Shard + (8920006, 2433591, 4000, 1, 1), # Crimson Queen Soul Shard + (8920006, 2433591, 2000, 1, 1), # Crimson Queen Soul Shard + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + (8920006, 2434586, 3500, 1, 1), # Piece of Anguish + + # Normal Von Bon ID = 8910100 + + (8910100, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8910100, 1003716, 7000, 1, 1), # Von Bon Helmet + (8910100, 3010512, 750, 1, 1), # Von Bon Von Chair + (8910100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910100, 4001886, 10000, 1, 1), # Intense Power Crystal + (8910100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910100, 4310018, 6000, 2, 2), # Crusader Coin + (8910100, 4310018, 6000, 2, 2), # Crusader Coin + (8910100, 4310018, 6000, 2, 2), # Crusader Coin + (8910100, 4310018, 6000, 2, 2), # Crusader Coin + (8910100, 4310018, 6000, 2, 2), # Crusader Coin + (8910100, 2433515, 7000, 1, 1), # Von Bon Soul Shard + (8910100, 2433515, 3500, 1, 1), # Von Bon Soul Shard + (8910100, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8910100, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8910100, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + + # Chaos Von Bon ID = 8910000 + + (8910000, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8910000, 4310065, 10000, 1, 1), # Chaos Yggdrasil Rune + (8910000, 1003716, 7000, 1, 1), # Von Bon Helmet + (8910000, 1003720, 5000, 1, 1), # Chaos Von Bon Helmet + (8910000, 3010512, 1000, 1, 1), # Von Bon Von Chair + (8910000, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8910000, 4001886, 10000, 1, 1), # Intense Power Crystal + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 4310018, 6000, 2, 2), # Crusader Coin + (8910000, 2433515, 8000, 1, 1), # Von Bon Soul Shard + (8910000, 2433515, 4000, 1, 1), # Von Bon Soul Shard + (8910000, 2433515, 2000, 1, 1), # Von Bon Soul Shard + (8910000, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8910000, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8910000, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + (8910000, 2434584, 3500, 1, 1), # Piece of Time + + # Normal Pierre Box ID = 8900103 + + (8900103, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8900103, 1003715, 7000, 1, 1), # Pierre Hat + (8900103, 3010513, 750, 1, 1), # Happy Pierre Chair + (8900103, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900103, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900103, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900103, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900103, 4001886, 10000, 1, 1), # Intense Power Crystal + (8900103, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900103, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900103, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900103, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900103, 4310018, 6000, 2, 2), # Crusader Coin + (8900103, 4310018, 6000, 2, 2), # Crusader Coin + (8900103, 4310018, 6000, 2, 2), # Crusader Coin + (8900103, 4310018, 6000, 2, 2), # Crusader Coin + (8900103, 4310018, 6000, 2, 2), # Crusader Coin + (8900103, 2433446, 7000, 1, 1), # Pierre Soul Shard + (8900103, 2433446, 3500, 1, 1), # Pierre Soul Shard + (8900103, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8900103, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8900103, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + # Choas Pierre Box ID = 8900003 + + (8900003, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8900003, 4310065, 10000, 1, 1), # Chaos Yggdrasil Rune + (8900003, 1003715, 7000, 1, 1), # Pierre Hat + (8900003, 1003719, 5000, 1, 1), # Chaos Pierre Hat + (8900003, 3010513, 1000, 1, 1), # Happy Pierre Chair + (8900003, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8900003, 4001886, 10000, 1, 1), # Intense Power Crystal + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 4310018, 6000, 2, 2), # Crusader Coin + (8900003, 2433446, 8000, 1, 1), # Pierre Soul Shard + (8900003, 2433446, 4000, 1, 1), # Pierre Soul Shard + (8900003, 2433446, 2000, 1, 1), # Pierre Soul Shard + (8900003, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8900003, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8900003, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + (8900003, 2434585, 3500, 1, 1), # Piece of Mockery + + # Normal Vellum ID = 8930100 + + (8930100, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8930100, 1003718, 7000, 1, 1), # Vellum Helm + (8930100, 3010515, 750, 1, 1), # Vellum Rock Chair + (8930100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930100, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930100, 4001886, 10000, 1, 1), # Intense Power Crystal + (8930100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930100, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930100, 4310018, 6000, 2, 2), # Crusader Coin + (8930100, 4310018, 6000, 2, 2), # Crusader Coin + (8930100, 4310018, 6000, 2, 2), # Crusader Coin + (8930100, 4310018, 6000, 2, 2), # Crusader Coin + (8930100, 4310018, 6000, 2, 2), # Crusader Coin + (8930100, 2433592, 7000, 1, 1), # Vellum Soul Shard + (8930100, 2433592, 3500, 1, 1), # Vellum Soul Shard + (8930100, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8930100, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8930100, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + # Chaos Vellum ID = 8930000 + + (8930000, 4310064, 10000, 1, 1), # Yggdrasil Rune + (8930000, 4310065, 10000, 1, 1), # Chaos Yggdrasil Rune + (8930000, 1003718, 7000, 1, 1), # Vellum Helm + (8930000, 1003722, 5000, 1, 1), # Chaos Vellum Helm + (8930000, 3010515, 1000, 1, 1), # Vellum Rock Chair + (8930000, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8930000, 4001886, 10000, 1, 1), # Intense Power Crystal + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 4310018, 6000, 2, 2), # Crusader Coin + (8930000, 2433592, 8000, 1, 1), # Vellum Soul Shard + (8930000, 2433592, 4000, 1, 1), # Vellum Soul Shard + (8930000, 2433592, 2000, 1, 1), # Vellum Soul Shard + (8930000, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8930000, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8930000, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8930000, 2432295, 500, 1, 1), # Permanent Vellum Mount + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + (8930000, 2434587, 3500, 1, 1), # Piece of Destruction + + + # 9421589 - RANMARU chaos + # Terminus Weapons + + (9421589, 1092113, 125, 1, 1), # Terminus Defender + (9421589, 1212080, 125, 1, 1), # Terminus Illuminator + (9421589, 1222075, 125, 1, 1), # Terminus Firebreather + (9421589, 1232075, 125, 1, 1), # Terminus Vanquisher + (9421589, 1242081, 125, 1, 1), # Terminus Jaeger + (9421589, 1252066, 125, 1, 1), # Terminus Scepter + (9421589, 1262030, 125, 1, 1), # Terminus Psy-limiter + (9421589, 1272029, 125, 1, 1), # Terminus Chain + (9421589, 1282029, 125, 1, 1), # Terminus Lucent Gauntlet + (9421589, 1302290, 125, 1, 1), # Terminus Divider + (9421589, 1312166, 125, 1, 1), # Terminus Chopper + (9421589, 1322216, 125, 1, 1), # Terminus Crusher + (9421589, 1332239, 125, 1, 1), # Terminus Prowler + (9421589, 1342086, 125, 1, 1), # Terminus Silencer + (9421589, 1362102, 125, 1, 1), # Terminus Orchestrator + (9421589, 1372189, 125, 1, 1), # Terminus Enchanter + (9421589, 1382223, 125, 1, 1), # Terminus Mesmerizer + (9421589, 1402211, 125, 1, 1), # Terminus Dominator + (9421589, 1412148, 125, 1, 1), # Terminus Devastator + (9421589, 1422153, 125, 1, 1), # Terminus Demolisher + (9421589, 1432179, 125, 1, 1), # Terminus Impaler + (9421589, 1442235, 125, 1, 1), # Terminus Warmonger + (9421589, 1452217, 125, 1, 1), # Terminus Stormchaser + (9421589, 1462205, 125, 1, 1), # Terminus Bolter + (9421589, 1472227, 125, 1, 1), # Terminus Executioner + (9421589, 1482180, 125, 1, 1), # Terminus Striker + (9421589, 1492191, 125, 1, 1), # Terminus Raider + (9421589, 1522106, 125, 1, 1), # Terminus Raptor + (9421589, 1532110, 125, 1, 1), # Terminus Scorcher + (9421589, 1542068, 125, 1, 1), # Terminus Grand Master + (9421589, 1552068, 125, 1, 1), # Terminus Summoner + (9421589, 1582026, 125, 1, 1), # Terminus Gauntlet + + + # Japan Weapons ID + + (9421589, 1232072, 300, 1, 1), # Amaterasu Death Bringer + (9421589, 1302229, 300, 1, 1), # Amaterasu Nimbus Sword + (9421589, 1312118, 300, 1, 1), # Amaterasu Axe of a Thousand Blades + (9421589, 1322164, 300, 1, 1), # Amaterasu Golden Slice + (9421589, 1402153, 300, 1, 1), # Amaterasu Weeping Spirit Sword + (9421589, 1412106, 300, 1, 1), # Amaterasu Smoldering Spirit Axe + (9421589, 1422109, 300, 1, 1), # Amaterasu Mace of Ruin + (9421589, 1432140, 300, 1, 1), # Amaterasu Final Wind + (9421589, 1442184, 300, 1, 1), # Amaterasu Pelting Rain + (9421589, 1542045, 300, 1, 1), # Amaterasu Muramasa + (9421589, 1452172, 300, 1, 1), # Oyamatsumi Fire Spirit Bow + (9421589, 1462161, 300, 1, 1), # Oyamatsumi Mind Expansion Bow + (9421589, 1522073, 300, 1, 1), # Oyamatsumi Dragon Bow + (9421589, 1212057, 300, 1, 1), # Ame-no-Uzume Shining Rod + (9421589, 1282027, 300, 1, 1), # Ame-no-Uzumes Lucent Gauntlet + (9421589, 1252056, 300, 1, 1), # Ame-no-Uzume spirit Pole + (9421589, 1372141, 300, 1, 1), # Ame-no-Uzume Crooked Soul Staff + (9421589, 1382170, 300, 1, 1), # Ame-no-Uzume Sinister Spirit Hand + (9421589, 1552045, 300, 1, 1), # Ame-no-Uzume Red Flower + (9421589, 1222052, 300, 1, 1), # Susano-o Rainbow Shooter + (9421589, 1482142, 300, 1, 1), # Susano-o Bloodstained Sword + (9421589, 1492154, 300, 1, 1), # Susano-o Baleful Blaster + (9421589, 1532076, 300, 1, 1), # Susano-o Solar Cannon + (9421589, 1242077, 300, 1, 1), # Tsukuyomi Energy Chain THIEF + (9421589, 1242078, 300, 1, 1), # Tsukuyomi Energy Chain PIRATE + (9421589, 1272027, 300, 1, 1), # Tsukuyomi Chain + (9421589, 1332195, 300, 1, 1), # Tsukuyomi Execution Sword + (9421589, 1342071, 300, 1, 1), # Tsukuyomi Sword of Sorrow + (9421589, 1362069, 300, 1, 1), # Tsukuyomi Wraith Hand + (9421589, 1472181, 300, 1, 1), # Tsukuyomi Fist of Malice + (9421589, 1262028, 300, 1, 1), # Sengoku Era Psy-limiter + (9421589, 1582022, 300, 1, 1), # Meister Titan + + + # Common items EQP - USE - ETC - SETUP + + (9421589, 4310018, 6000, 2, 2), # Crusader Coin + (9421589, 4310018, 6000, 2, 2), # Crusader Coin + (9421589, 4310018, 6000, 2, 2), # Crusader Coin + (9421589, 4310018, 6000, 2, 2), # Crusader Coin + (9421589, 4310018, 6000, 2, 2), # Crusader Coin + (9421589, 4310018, 6000, 2, 2), # Crusader Coin + (9421589, 4310018, 6000, 2, 2), # Crusader Coin + (9421589, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421589, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421589, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421589, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421589, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421589, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421589, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421589, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421589, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421589, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421589, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421589, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421589, 4021029, 10000, 10, 25), # Condensed Spirit + (9421589, 4021030, 10000, 1, 1), # Spirit Stone of the Sixth Sky + (9421589, 2048716, 4000, 1, 1), # Powerful Rebirth Flame + (9421589, 2048708, 2000, 1, 1), # Rebirth Flame Lv. 150 + (9421589, 4021031, 10000, 125, 250), # Twisted Time + (9421589, 3015195, 700, 1, 1), # Ghost Fox Chair + (9421589, 4001832, 10000, 20, 60), # Spell Trace + (9421589, 4001832, 10000, 20, 60), # Spell Trace + (9421589, 4001832, 10000, 20, 60), # Spell Trace + (9421589, 1113173, 500, 1, 1), # Lightning God Ring + (9421589, 2870528, 5000, 1, 1), # Ranmaru Familiar + + # Normal Ranmaru ID = 9421584 + + (9421584, 4001832, 10000, 20, 60), # Spell Trace + (9421584, 4001832, 10000, 20, 60), # Spell Trace + (9421584, 4001832, 10000, 20, 60), # Spell Trace + (9421584, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421584, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421584, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9421584, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421584, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421584, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421584, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (9421584, 4310018, 6000, 2, 2), # Crusader Coin + (9421584, 4310018, 6000, 2, 2), # Crusader Coin + (9421584, 2870528, 5000, 1, 1), # Ranmaru Familia + (9421584, 4021029, 10000, 10, 25), # Condensed Spirit + (9421584, 3015195, 100, 1, 1), # Ghost Fox Chair + + # Hard Damien Drops ID = 8880111 + + (8880111, 1082636, 200, 1, 1), # AbsoLab Knight Gloves + (8880111, 1082637, 200, 1, 1), # AbsoLab Mage Gloves + (8880111, 1082638, 200, 1, 1), # AbsoLab Archer Gloves + (8880111, 1082639, 200, 1, 1), # AbsoLab Bandit Gloves + (8880111, 1082640, 200, 1, 1), # AbsoLab Pirate Gloves + (8880111, 1102775, 200, 1, 1), # AbsoLab Knight Cape + (8880111, 1102794, 200, 1, 1), # AbsoLab Mage Cape + (8880111, 1102795, 200, 1, 1), # AbsoLab Archer Cape + (8880111, 1102796, 200, 1, 1), # AbsoLab Bandit Cape + (8880111, 1102797, 200, 1, 1), # AbsoLab Pirate Cape + (8880111, 1662088, 750, 1, 1), # Damienroid + (8880111, 1099015, 2000, 1, 1), # Ruin Force Shield + (8880111, 1022278, 100, 1, 1), # Magic Eyepatch + (8880111, 1212115, 125, 1, 1), # AbsoLab Shining Rod + (8880111, 1222109, 125, 1, 1), # AbsoLab Soul Shooter + (8880111, 1232109, 125, 1, 1), # AbsoLab Desperado + (8880111, 1242116, 125, 1, 1), # AbsoLab Whip Blade + (8880111, 1252093, 125, 1, 1), # AbsoLab Scepter + (8880111, 1262017, 125, 1, 1), # AbsoLab Psy-limiter + (8880111, 1272016, 125, 1, 1), # AbsoLab Chain + (8880111, 1282016, 125, 1, 1), # AbsoLab Lucent Gauntlet + (8880111, 1302333, 125, 1, 1), # AbsoLab Saber + (8880111, 1312199, 125, 1, 1), # AbsoLab Axe + (8880111, 1322250, 125, 1, 1), # AbsoLab Bit Hammer + (8880111, 1332274, 125, 1, 1), # AbsoLab Blade Lord + (8880111, 1342101, 125, 1, 1), # AbsoLab Katara + (8880111, 1362135, 125, 1, 1), # AbsoLab Forked Cane + (8880111, 1372222, 125, 1, 1), # AbsoLab Spellsong Wand + (8880111, 1382259, 125, 1, 1), # AbsoLab Spellsong Staff + (8880111, 1402251, 125, 1, 1), # AbsoLab Broad Saber + (8880111, 1412177, 125, 1, 1), # AbsoLab Broad Axe + (8880111, 1422184, 125, 1, 1), # AbsoLab Broad Hammer + (8880111, 1432214, 125, 1, 1), # AbsoLab Piercing Spear + (8880111, 1442268, 125, 1, 1), # AbsoLab Hellslayer + (8880111, 1452252, 125, 1, 1), # AbsoLab Sureshot Bow + (8880111, 1462239, 125, 1, 1), # AbsoLab Crossbow + (8880111, 1472261, 125, 1, 1), # AbsoLab Revenge Guard + (8880111, 1482216, 125, 1, 1), # Absolute Labs Blast Knuckle + (8880111, 1492231, 125, 1, 1), # AbsoLab Point Gun + (8880111, 1522138, 125, 1, 1), # AbsoLab Dual Bowguns + (8880111, 1532144, 125, 1, 1), # AbsoLab Blast Cannon + (8880111, 1542108, 125, 1, 1), # AbsoLab Katana + (8880111, 1552110, 125, 1, 1), # AbsoLab Summoner + (8880111, 1582017, 125, 1, 1), # AbsoLab Pile God + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 4310018, 6000, 2, 2), # Crusader Coin + (8880111, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880111, 4001886, 10000, 1, 1), # Intense Power Crystal + (8880111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880111, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880111, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880111, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880111, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880111, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880111, 2435369, 8000, 1, 1), # Damien Soul Shard + (8880111, 2435369, 6000, 1, 1), # Damien Soul Shard + (8880111, 2435369, 4000, 1, 1), # Damien Soul Shard + (8880111, 4001869, 10000, 1, 1), # Twisted Stigma Spirit Stone 100% + (8880111, 4001869, 5000, 1, 1), # Twisted Stigma Spirit Stone 50% + (8880111, 4001869, 2500, 1, 1), # Twisted Stigma Spirit Stone 25% + (8880111, 4001869, 1000, 1, 1), # Twisted Stigma Spirit Stone 10% + (8880111, 4001869, 500, 1, 1), # Twisted Stigma Spirit Stone 5% + (8880111, 2434157, 100, 1, 1), # Damien Band Damage Skin + + # Normal Damien - ID = 8880101 + + (8880101, 1099015, 2000, 1, 1), # Ruin Force Shield + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 4310018, 6000, 2, 2), # Crusader Coin + (8880101, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8880101, 2048716, 4000, 1, 1), # Powerful Rebirth Flame + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880101, 4001886, 10000, 1, 1), # Intense Power Crystal + (8880101, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880101, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880101, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880101, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880101, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880101, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880101, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880101, 4001869, 6000, 1, 1), # Twisted Stigma Spirit Stone 60% + (8880101, 4001869, 3000, 1, 1), # Twisted Stigma Spirit Stone 30% + (8880101, 4001869, 1000, 1, 1), # Twisted Stigma Spirit Stone 10% + (8880101, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880101, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880101, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880101, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + # Chaos Horntail Drops ID - 8810118 + + (8810118, 1122076, 10000, 1, 1), # Chaos Horntail Necklace + (8810118, 1122076, 8000, 1, 1), # Chaos Horntail Necklace + (8810118, 1122076, 6000, 1, 1), # Chaos Horntail Necklace + (8810118, 1122076, 4000, 1, 1), # Chaos Horntail Necklace + (8810118, 1113149, 5000, 1, 1), # Silver Blossom Ring + (8810118, 1032241, 5000, 1, 1), # Dea Sidus Earring + (8810118, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8810118, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8810118, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8810118, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8810118, 4001094, 5000, 1, 1), # Nine Spirit Egg + (8810118, 4001094, 2500, 1, 1), # Nine Spirit Egg + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 4310018, 6000, 2, 2), # Crusader Coin + (8810118, 2022176, 10000, 10, 25), # Power Elixir (Tradeable) + (8810118, 2022176, 10000, 10, 25), # Power Elixir (Tradeable) + (8810118, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8810118, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8810118, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8810118, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8810118, 3010128, 2000, 1, 1), # Horntail Chair + (8810118, 1042243, 5000, 1, 1), # Horntail Ab T-Shirt + (8810118, 2020015, 10000, 10, 25), # Sunset Dew (Tradeable) + (8810118, 2020015, 10000, 10, 25), # Sunset Dew (Tradeable) + (8810118, 1942001, 2500, 1, 1), # Gold Mask + (8810118, 1952001, 2500, 1, 1), # Gold Pendant + (8810118, 1962001, 2500, 1, 1), # Gold Wings + (8810118, 1972001, 2500, 1, 1), # Gold Tail + (8810118, 4001886, 10000, 1, 1), # Intense Power Crystal + (8810118, 1612004, 2500, 1, 1), # Pure Gold Engine + (8810118, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8810118, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8810118, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8810118, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8810118, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810118, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810118, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810118, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810118, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810118, 2048705, 5000, 1, 1), # Rebirth Flame Lv. 120 (Tradeable) + + + # Normal Horntail Drops ID - 8810018 + + (8810018, 1122000, 10000, 1, 1), # Horntail Necklace + (8810018, 1122000, 8000, 1, 1), # Horntail Necklace + (8810018, 1122000, 4000, 1, 1), # Horntail Necklace + (8810018, 1113149, 3000, 1, 1), # Silver Blossom Ring + (8810018, 1032241, 3000, 1, 1), # Dea Sidus Earring + (8810018, 4310018, 6000, 2, 2), # Crusader Coin + (8810018, 4310018, 6000, 2, 2), # Crusader Coin + (8810018, 4310018, 6000, 2, 2), # Crusader Coin + (8810018, 4310018, 6000, 2, 2),# Crusader Coin + (8810018, 4310018, 6000, 2, 2), # Crusader Coin + (8810018, 4310018, 6000, 2, 2), # Crusader Coin + (8810018, 4310018, 6000, 2, 2), # Crusader Coin + (8810018, 2022176, 10000, 10, 25), # Power Elixir (Tradeable) + (8810018, 2022176, 10000, 10, 25), # Power Elixir (Tradeable) + (8810018, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8810018, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8810018, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8810018, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8810018, 3010128, 2000, 1, 1), # Horntail Chair + (8810018, 1042243, 5000, 1, 1), # Horntail Ab T-Shirt + (8810018, 2020015, 10000, 10, 25), # Sunset Dew (Tradeable) + (8810018, 2020015, 10000, 10, 25), # Sunset Dew (Tradeable) + (8810018, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8810018, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8810018, 4001094, 5000, 1, 1), # Nine Spirit Egg + (8810018, 4001094, 2500, 1, 1), # Nine Spirit Egg + (8810018, 1942001, 2500, 1, 1), # Gold Mask + (8810018, 1952001, 2500, 1, 1), # Gold Pendant + (8810018, 1962001, 2500, 1, 1), # Gold Wings + (8810018, 1972001, 2500, 1, 1), # Gold Tail + (8810018, 4001886, 10000, 1, 1), # Intense Power Crystal + (8810018, 1612004, 2500, 1, 1), # Pure Gold Engine + (8810018, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8810018, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8810018, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8810018, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8810018, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810018, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810018, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810018, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810018, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810018, 2048705, 5000, 1, 1), # Rebirth Flame Lv. 120 (Tradeable) + + # Easy Horntail Drops ID - 8810214 + + (8810214, 1942001, 2500, 1, 1), # Gold Mask + (8810214, 1952001, 2500, 1, 1), # Gold Pendant + (8810214, 1962001, 2500, 1, 1), # Gold Wings + (8810214, 1972001, 2500, 1, 1), # Gold Tail + (8810214, 4001886, 10000, 1, 1), # Intense Power Crystal + (8810214, 1612004, 2500, 1, 1), # Pure Gold Engine + (8810214, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8810214, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8810214, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8810214, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8810214, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8810214, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810214, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810214, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8810214, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8810214, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8810214, 2022176, 10000, 10, 25), # Power Elixir (Tradeable) + (8810214, 2020015, 10000, 10, 25), # Sunset Dew (Tradeable) + (8810214, 4310018, 6000, 2, 2), # Crusader Coin + (8810214, 4310018, 6000, 2, 2), # Crusader Coin + (8810214, 4310018, 6000, 2, 2), # Crusader Coin + (8810214, 4310018, 6000, 2, 2), # Crusader Coin + (8810214, 2433103, 10000, 1, 1), # Boss Medal of Honor + + # Verus Hilla ID = 8880410 + + (8880410, 1122430, 125, 1, 1), # Source of Suffering + (8880410, 4001894, 10000, 1, 1), # Shadow of Annihilation + (8880410, 4001894, 5000, 1, 1), # Shadow of Annihilation + (8880410, 4001894, 2500, 1, 1), # Shadow of Annihilation + (8880410, 2439567, 10000, 1, 1), # Verus Hilla Soul Shard + (8880410, 2439567, 5000, 1, 1), # Verus Hilla Soul Shard + (8880410, 2439567, 2500, 1, 1), # Verus Hilla Soul Shard + (8880410, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880410, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880410, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880410, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880410, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880410, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 4310018, 6000, 2, 2), # Crusader Coin + (8880410, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8880410, 2048716, 5000, 1, 1), # Powerfull Rebirth Flame + (8880410, 4001886, 10000, 1, 1), # Intense Power Crystal + + # Hard Lotus Drops ID = 8950002 + + (8950002, 4001877, 250, 1, 1), # Damaged Black Heart + (8950002, 1004422, 200, 1, 1), # AbsoLab Knight Helm + (8950002, 1004423, 200, 1, 1), # AbsoLab Mage Crown + (8950002, 1004424, 200, 1, 1), # AbsoLab Archer Hood + (8950002, 1004425, 200, 1, 1), # AbsoLab Bandit Cap + (8950002, 1004426, 200, 1, 1), # AbsoLab Bandit Cap + (8950002, 1052882, 200, 1, 1), # AbsoLab Knight Suit + (8950002, 1052887, 200, 1, 1), # AbsoLab Mage Suit + (8950002, 1052888, 200, 1, 1), # AbsoLab Archer Suit + (8950002, 1052889, 200, 1, 1), # AbsoLab Bandit Suit + (8950002, 1052890, 200, 1, 1), # AbsoLab Pirate Suit + (8950002, 1073030, 200, 1, 1), # AbsoLab Knight Shoes + (8950002, 1073032, 200, 1, 1), # AbsoLab Mage Shoes + (8950002, 1073033, 200, 1, 1), # AbsoLab Archer Shoes + (8950002, 1073034, 200, 1, 1), # AbsoLab Bandit Shoes + (8950002, 1073035, 200, 1, 1), # AbsoLab Pirate Shoes + (8950002, 1152174, 200, 1, 1), # AbsoLab Knight Shoulder + (8950002, 1152176, 200, 1, 1), # AbsoLab Mage Shoulder + (8950002, 1152177, 200, 1, 1), # AbsoLab Archer Shoulder + (8950002, 1152178, 200, 1, 1), # AbsoLab Thief Shoulder + (8950002, 1152179, 200, 1, 1), # AbsoLab Pirate Shoulder + (8950002, 4001843, 9000, 1, 1), # Extraordinary Energy Core 90% + (8950002, 4001843, 8000, 1, 1), # Extraordinary Energy Core 80% + (8950002, 4001843, 6000, 1, 1), # Extraordinary Energy Core 60% + (8950002, 4001843, 1000, 1, 1), # Extraordinary Energy Core 10% + (8950002, 4001843, 500, 1, 1), # Extraordinary Energy Core 5% + (8950002, 4001843, 250, 1, 1), # Extraordinary Energy Core 2,5% + (8950002, 4001886, 10000, 1, 1), # Intense Power Crystal + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950002, 2434795, 300, 1, 1), # Lotus Damage Skin + (8950002, 2434794, 300, 1, 1), # Orchid Damage Skin + (8950002, 2434796, 100, 1, 1), # Black Heaven Damage Skin + (8950002, 2433593, 7000, 1, 1), # Lotus Soul Shard + (8950002, 2433593, 4000, 1, 1), # Lotus Soul Shard + (8950002, 2433593, 2000, 1, 1), # Lotus Soul Shard + (8950002, 1012632, 500, 1, 1), # Berserked + (8950002, 2049517, 5000, 1, 1), # Gold Potential Stamp + (8950002, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8950002, 2048716, 5000, 1, 1), # Powerful Rebirth Flame + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 4310018, 6000, 2, 2), # Crusader Coin + (8950002, 3015514, 750, 1, 1), # Blazing Lotus Chair + (8950002, 3015003, 750, 1, 1), # Forever Lotus Pillow Chair + (8950002, 2711000, 4500, 1, 1), # Occult Cube (Tradeable) + (8950002, 2711000, 4500, 1, 1), # Occult Cube (Tradeable) + (8950002, 2711000, 4500, 1, 1), # Occult Cube (Tradeable) + (8950002, 2711000, 4500, 1, 1), # Occult Cube (Tradeable) + (8950002, 2711000, 4500, 1, 1), # Occult Cube (Tradeable) + (8950002, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + + # Normal Lotus Drops ID = 8950102 + + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 4310018, 6000, 2, 2), # Crusader Coin + (8950102, 2433593, 5000, 1, 1), # Lotus Soul Shard + (8950102, 2433593, 2500, 1, 1), # Lotus Soul Shard + (8950102, 2434795, 100, 1, 1), # Lotus Damage Skin + (8950102, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8950102, 2048716, 4000, 1, 1), # Powerful Rebirth Flame + (8950102, 4001843, 10000, 1, 1), # Extraordinary Energy Core 100% + (8950102, 4001843, 3000, 1, 1), # Extraordinary Energy Core 30% + (8950102, 4001843, 500, 1, 1), # Extraordinary Energy Core 5% + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8950102, 4001886, 10000, 1, 1), # Intense Power Crystal + (8950102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8950102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8950102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8950102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8950102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8950102, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + + # Hard Lucid - ID of Box = 8880177 + + (8880177, 1132308, 250, 1, 1), # Dreamy Belt + (8880177, 1152196, 200, 1, 1), # Arcane Umbra Knight Shoulder + (8880177, 1152197, 200, 1, 1), # Arcane Umbra Mage Shoulder + (8880177, 1152198, 200, 1, 1), # Arcane Umbra Archer Shoulder + (8880177, 1152199, 200, 1, 1), # Arcane Umbra Thief Shoulder + (8880177, 1152200, 200, 1, 1), # Arcane Umbra Pirate Shoulder + (8880177, 1004808, 200, 1, 1), # Arcane Umbra Knight Hat + (8880177, 1004809, 200, 1, 1), # Arcane Umbra Mage Hat + (8880177, 1004810, 200, 1, 1), # Arcane Umbra Archer Hat + (8880177, 1004811, 200, 1, 1), # Arcane Umbra Thief Hat + (8880177, 1004812, 200, 1, 1), # Arcane Umbra Pirate Hat + (8880177, 1053063, 200, 1, 1), # Arcane Umbra Knight Suit + (8880177, 1053064, 200, 1, 1), # Arcane Umbra Mage Suit + (8880177, 1053065, 200, 1, 1), # Arcane Umbra Archer Suit + (8880177, 1053066, 200, 1, 1), # Arcane Umbra Thief Suit + (8880177, 1053067, 200, 1, 1), # Arcane Umbra Pirate Suit + (8880177, 1073158, 200, 1, 1), # Arcane Umbra Knight Shoes + (8880177, 1073159, 200, 1, 1), # Arcane Umbra Mage Shoes + (8880177, 1073160, 200, 1, 1), # Arcane Umbra Archer Shoes + (8880177, 1073161, 200, 1, 1), # Arcane Umbra Thief Shoes + (8880177, 1073162, 200, 1, 1), # Arcane Umbra Pirate Shoes + (8880177, 4001879, 9000, 1, 1), # Butterfly Droplet Stone 90% + (8880177, 4001879, 8000, 1, 1), # Butterfly Droplet Stone 80% + (8880177, 4001879, 7000, 1, 1), # Butterfly Droplet Stone 70% + (8880177, 4001879, 750, 1, 1), # Butterfly Droplet Stone 7,5% + (8880177, 4001879, 300, 1, 1), # Butterfly Droplet Stone 3% + (8880177, 2436039, 10000, 1, 1), # Lucid Soul Shard + (8880177, 2436039, 5000, 1, 1), # Lucid Soul Shard + (8880177, 2436039, 2500, 1, 1), # Lucid Soul Shard + (8880177, 1662111, 1000, 1, 1), # Lucidroid + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 4310018, 6000, 2, 2), # Crusader Coin + (8880177, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8880177, 2048716, 4000, 1, 1), # Powerful Rebirth Flame + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880177, 4001886, 10000, 1, 1), # Intense Power Crystal + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2435902, 3500, 1, 1), # Nodestone + (8880177, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880177, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880177, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880177, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880177, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880177, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880177, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880177, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880177, 2436228, 100, 1, 1), # Lucid Butterfly Damage Skin + (8880177, 2870698, 1000, 1, 1), # Dreaming Lucid Familiar + (8880177, 2870861, 1000, 1, 1), # Lucid Familiar + (8880177, 3015712, 3500, 1, 1), # Lucid Nightmare Bed + (8880177, 3015637, 3000, 1, 1), # Bloom of Lucid + + # Normal Lucid- ID of Box = 8880166 + + (8880166, 4001879, 6000, 1, 1), # Butterfly Droplet Stone 60% + (8880166, 4001879, 3000, 1, 1), # Butterfly Droplet Stone 30% + (8880166, 4001879, 1000, 1, 1), # Butterfly Droplet Stone 10% + (8880166, 2436039, 10000, 1, 1), # Lucid Soul Shard + (8880166, 2436039, 5000, 1, 1), # Lucid Soul Shard + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 4310018, 6000, 2, 2), # Crusader Coin + (8880166, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8880166, 2048716, 4000, 1, 1), # Powerful Rebirth Flame + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8880166, 4001886, 10000, 1, 1), # Intense Power Crystal + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2435902, 3500, 1, 1), # Nodestone + (8880166, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880166, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880166, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880166, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880166, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8880166, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8880166, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880166, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8880166, 2870861, 1000, 1, 1), # Lucid Familiar + (8880166, 3015712, 2000, 1, 1), # Lucid Nightmare Bed + (8880166, 3015637, 1500, 1, 1), # Bloom of Lucid + + + # Easy Papulatus - ID = 8500002 + + (8500002, 2437478, 5000, 1, 1), # Papulatus Soul Shard + (8500002, 1942001, 3500, 1, 1), # Gold Mask + (8500002, 1952001, 3500, 1, 1), # Gold Pendant + (8500002, 1962001, 3500, 1, 1), # Gold Wings + (8500002, 1972001, 3500, 1, 1), # Gold Tail + (8500002, 4001886, 10000, 1, 1), # Intense Power Crystal + (8500002, 1612004, 3500, 1, 1), # Pure Gold Engine + (8500002, 1622004, 3500, 1, 1), # Pure Gold Machine Arm + (8500002, 1632003, 3500, 1, 1), # Pure Gold Machine Leg + (8500002, 1642002, 3500, 1, 1), # Pure Gold Body Frame + (8500002, 1652004, 3500, 1, 1), # Pure Gold Transistor + (8500002, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8500002, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8500002, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8500002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500002, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500002, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500002, 4031196, 6000, 2, 2), # Dark Tachion + (8500002, 4031196, 6000, 2, 2), # Dark Tachion + (8500002, 4031196, 6000, 2, 2), # Dark Tachion + (8500002, 4031196, 6000, 2, 2), # Dark Tachion + (8500002, 4031196, 6000, 2, 2), # Dark Tachion + (8500002, 4031196, 6000, 2, 2), # Dark Tachion + + # Normal Papulatus - ID = 8500012 + + (8500012, 3016206, 1000, 1, 1), # Papulatus Clock Chair + (8500012, 2437478, 8000, 1, 1), # Papulatus Soul Shard + (8500012, 2437478, 4000, 1, 1), # Papulatus Soul Shard + (8500012, 1942001, 2500, 1, 1), # Gold Mask + (8500012, 1952001, 2500, 1, 1), # Gold Pendant + (8500012, 1962001, 2500, 1, 1), # Gold Wings + (8500012, 1972001, 2500, 1, 1), # Gold Tail + (8500012, 2048700, 5000, 1, 1), # Rebirth Flame Lv. 110 + (8500012, 4001886, 10000, 1, 1), # Intense Power Crystal + (8500012, 1612004, 2500, 1, 1), # Pure Gold Engine + (8500012, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8500012, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8500012, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8500012, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8500012, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8500012, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8500012, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8500012, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500012, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500012, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500012, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500012, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500012, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500012, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500012, 4310018, 6000, 2, 2), # Crusader Coin + (8500012, 4310018, 6000, 2, 2), # Crusader Coin + (8500012, 4310018, 6000, 2, 2), # Crusader Coin + (8500012, 4310018, 6000, 2, 2), # Crusader Coin + (8500012, 4031196, 6000, 2, 2), # Dark Tachion + (8500012, 4031196, 6000, 2, 2), # Dark Tachion + (8500012, 4031196, 6000, 2, 2), # Dark Tachion + (8500012, 4031196, 6000, 2, 2), # Dark Tachion + (8500012, 4031196, 6000, 2, 2), # Dark Tachion + (8500012, 4031196, 6000, 2, 2), # Dark Tachion + + # Chaos Papulatus - ID = 8500022 + + (8500022, 1022277, 300, 1, 1), # Papulatus Mark + (8500022, 3016206, 2000, 1, 1), # Papulatus Clock Chair + (8500022, 2437478, 8000, 1, 1), # Papulatus Soul Shard + (8500022, 2437478, 4000, 1, 1), # Papulatus Soul Shard + (8500022, 2437478, 2000, 1, 1), # Papulatus Soul Shard + (8500022, 1942001, 2500, 1, 1), # Gold Mask + (8500022, 1952001, 2500, 1, 1), # Gold Pendant + (8500022, 1962001, 2500, 1, 1), # Gold Wings + (8500022, 1972001, 2500, 1, 1), # Gold Tail + (8500022, 2048700, 5000, 1, 1), # Rebirth Flame Lv. 110 + (8500022, 4001886, 10000, 1, 1), # Intense Power Crystal + (8500022, 1612004, 2500, 1, 1), # Pure Gold Engine + (8500022, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8500022, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8500022, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8500022, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8500022, 2048700, 7000, 1, 1), # Rebirth Flame Lv. 110 + (8500022, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8500022, 2022176, 10000, 30, 30), # Power Elixir (Tradeable) + (8500022, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8500022, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8500022, 2022176, 10000, 30, 30), # Power Elixir (Tradeable) + (8500022, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8500022, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8500022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8500022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4310018, 6000, 2, 2), # Crusader Coin + (8500022, 4031196, 6000, 2, 2), # Dark Tachion + (8500022, 4031196, 6000, 2, 2), # Dark Tachion + (8500022, 4031196, 6000, 2, 2), # Dark Tachion + (8500022, 4031196, 6000, 2, 2), # Dark Tachion + (8500022, 4031196, 6000, 2, 2), # Dark Tachion + (8500022, 4031196, 6000, 2, 2), # Dark Tachion + (8500022, 4031196, 6000, 2, 2), # Dark Tachion + + # Normal Pinkbean ID = 8820014 + + (8820014, 1162025, 4000, 1, 1), # Pink Holy Cup + (8820014, 1132272, 4000, 1, 1), # Golden Clover Belt + (8820014, 1212012, 2000, 1, 1), # Reverse Dead End + (8820014, 1222012, 2000, 1, 1), # Reverse Purple Dragon + (8820014, 1232012, 2000, 1, 1), # Reverse Grim Seeker + (8820014, 1242012, 2000, 1, 1), # Reverse Hefty Head + (8820014, 1252012, 2000, 1, 1), # Reverse Kitty Pride Scepter + (8820014, 1302086, 2000, 1, 1), # Reverse Executioner + (8820014, 1312038, 2000, 1, 1), # Reverse Bardiche + (8820014, 1322061, 2000, 1, 1), # Reverse Allargando + (8820014, 1332075, 2000, 1, 1), # Reverse Pescas + (8820014, 1332076, 2000, 1, 1), # Reverse Killic + (8820014, 1342012, 2000, 1, 1), # Reverse Katara + (8820014, 1362017, 2000, 1, 1), # Reverse Persona + (8820014, 1372045, 2000, 1, 1), # Reverse Enlil Tear + (8820014, 1382059, 2000, 1, 1), # Reverse Aeas Hand + (8820014, 1402047, 2000, 1, 1), # Reverse Nibleheim + (8820014, 1412034, 2000, 1, 1), # Reverse Tabarzin + (8820014, 1422038, 2000, 1, 1), # Reverse Bellocce + (8820014, 1432049, 2000, 1, 1), # Reverse Alchupiz + (8820014, 1442067, 2000, 1, 1), # Reverse Diesra + (8820014, 1452059, 2000, 1, 1), # Reverse Engaw + (8820014, 1462051, 2000, 1, 1), # Reverse Black Beauty + (8820014, 1472071, 2000, 1, 1), # Reverse Lampion + (8820014, 1482024, 2000, 1, 1), # Reverse Equinox + (8820014, 1492025, 2000, 1, 1), # Reverse Blindness + (8820014, 1522016, 2000, 1, 1), # Reverse Blooms + (8820014, 1532016, 2000, 1, 1), # Reverse Eradicator + (8820014, 1542012, 2000, 1, 1), # Reverse Great Sword of Creation + (8820014, 1552012, 2000, 1, 1), # Reverse Fan of Altruism + (8820014, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8820014, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8820014, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8820014, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820014, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820014, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820014, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820014, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820014, 4310018, 6000, 2, 2), # Crusader Coin + (8820014, 4310018, 6000, 2, 2), # Crusader Coin + (8820014, 4310018, 6000, 2, 2), # Crusader Coin + (8820014, 4310018, 6000, 2, 2), # Crusader Coin + (8820014, 4310018, 6000, 2, 2), # Crusader Coin + (8820014, 2048701, 5000, 1, 1), # Rebirth Flame Lv. 120 + (8820014, 1942001, 2500, 1, 1), # Gold Mask + (8820014, 1952001, 2500, 1, 1), # Gold Pendant + (8820014, 1962001, 2500, 1, 1), # Gold Wings + (8820014, 1972001, 2500, 1, 1), # Gold Tail + (8820014, 4001886, 10000, 1, 1), # Intense Power Crystal + (8820014, 1612004, 2500, 1, 1), # Pure Gold Engine + (8820014, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8820014, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8820014, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8820014, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8820014, 4021035, 10000, 5, 15), # Grand Spell Essence + (8820014, 4021034, 10000, 5, 15), # Fine Spell Essence + (8820014, 4021033, 10000, 5, 15), # Basic Spell Essence + (8820014, 4021032, 10000, 5, 15), # Mana Crystal + (8820014, 4021031, 10000, 5, 15), # Twisted Time + (8820014, 4021020, 10000, 5, 15), # Confusion Fragment + (8820014, 2431661, 7000, 1, 1), # Pink Bean Soul Shard + (8820014, 2431661, 3500, 1, 1), # Pink Bean Soul Shard + (8820014, 3010323, 1000, 1, 1), # Pink Bean Chair + + # Chaos Pinkbean ID = 8820212 + + (8820212, 1003621, 2000, 1, 1), # Chaos Pink Bean Hat + (8820212, 1003622, 2000, 1, 1), # Black Bean Hat + (8820212, 1052526, 2000, 1, 1), # Chaos Pink Bean Suit + (8820212, 1052527, 2000, 1, 1), # Black Bean Suit + (8820212, 1022232, 3500, 1, 1), # Black Bean Mark + (8820212, 1162025, 6000, 1, 1), # Pink Holy Cup + (8820212, 1132272, 6000, 1, 1), # Golden Clover Belt + (8820212, 1212012, 2000, 1, 1), # Reverse Dead End + (8820212, 1222012, 2000, 1, 1), # Reverse Purple Dragon + (8820212, 1232012, 2000, 1, 1), # Reverse Grim Seeker + (8820212, 1242012, 2000, 1, 1), # Reverse Hefty Head + (8820212, 1252012, 2000, 1, 1), # Reverse Kitty Pride Scepter + (8820212, 1302086, 2000, 1, 1), # Reverse Executioner + (8820212, 1312038, 2000, 1, 1), # Reverse Bardiche + (8820212, 1322061, 2000, 1, 1), # Reverse Allargando + (8820212, 1332075, 2000, 1, 1), # Reverse Pescas + (8820212, 1332076, 2000, 1, 1), # Reverse Killic + (8820212, 1342012, 2000, 1, 1), # Reverse Katara + (8820212, 1362017, 2000, 1, 1), # Reverse Persona + (8820212, 1372045, 2000, 1, 1), # Reverse Enlil Tear + (8820212, 1382059, 2000, 1, 1), # Reverse Aeas Hand + (8820212, 1402047, 2000, 1, 1), # Reverse Nibleheim + (8820212, 1412034, 2000, 1, 1), # Reverse Tabarzin + (8820212, 1422038, 2000, 1, 1), # Reverse Bellocce + (8820212, 1432049, 2000, 1, 1), # Reverse Alchupiz + (8820212, 1442067, 2000, 1, 1), # Reverse Diesra + (8820212, 1452059, 2000, 1, 1), # Reverse Engaw + (8820212, 1462051, 2000, 1, 1), # Reverse Black Beauty + (8820212, 1472071, 2000, 1, 1), # Reverse Lampion + (8820212, 1482024, 2000, 1, 1), # Reverse Equinox + (8820212, 1492025, 2000, 1, 1), # Reverse Blindness + (8820212, 1522016, 2000, 1, 1), # Reverse Blooms + (8820212, 1532016, 2000, 1, 1), # Reverse Eradicator + (8820212, 1542012, 2000, 1, 1), # Reverse Great Sword of Creation + (8820212, 1552012, 2000, 1, 1), # Reverse Fan of Altruism + (8820212, 2022176, 10000, 40, 40), # Power Elixir (Tradeable) + (8820212, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8820212, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8820212, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820212, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820212, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820212, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820212, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820212, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8820212, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820212, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820212, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820212, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820212, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8820212, 4310018, 6000, 2, 2), # Crusader Coin + (8820212, 4310018, 6000, 2, 2), # Crusader Coin + (8820212, 4310018, 6000, 2, 2), # Crusader Coin + (8820212, 4310018, 6000, 2, 2), # Crusader Coin + (8820212, 4310018, 6000, 2, 2), # Crusader Coin + (8820212, 2048702, 5000, 1, 1), # Rebirth Flame Lv. 130 + (8820212, 1942001, 2500, 1, 1), # Gold Mask + (8820212, 1952001, 2500, 1, 1), # Gold Pendant + (8820212, 1962001, 2500, 1, 1), # Gold Wings + (8820212, 1972001, 2500, 1, 1), # Gold Tail + (8820212, 4001886, 10000, 1, 1), # Intense Power Crystal + (8820212, 1612004, 2500, 1, 1), # Pure Gold Engine + (8820212, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8820212, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8820212, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8820212, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8820212, 4021035, 10000, 5, 15), # Grand Spell Essence + (8820212, 4021034, 10000, 5, 15), # Fine Spell Essence + (8820212, 4021033, 10000, 5, 15), # Basic Spell Essence + (8820212, 4021032, 10000, 5, 15), # Mana Crystal + (8820212, 4021031, 10000, 5, 15), # Twisted Time + (8820212, 4021020, 10000, 5, 15), # Confusion Fragment + (8820212, 2431661, 8000, 1, 1), # Pink Bean Soul Shard + (8820212, 2431661, 4000, 1, 1), # Pink Bean Soul Shard + (8820212, 2431661, 2000, 1, 1), # Pink Bean Soul Shard + (8820212, 3010323, 2000, 1, 1), # Pink Bean Chair + (8820212, 2433981, 200, 1, 1), # Pink Bean Damage Skin (Tradeable) + + # Easy VonLeon - ID = 8840007 + + (8840007, 2048701, 5000, 1, 1), # Rebirth Flame Lv. 120 + (8840007, 1942001, 2500, 1, 1), # Gold Mask + (8840007, 1952001, 2500, 1, 1), # Gold Pendant + (8840007, 1962001, 2500, 1, 1), # Gold Wings + (8840007, 1972001, 2500, 1, 1), # Gold Tail + (8840007, 4001886, 10000, 1, 1), # Intense Power Crystal + (8840007, 1612004, 2500, 1, 1), # Pure Gold Engine + (8840007, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8840007, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8840007, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8840007, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8840007, 4021035, 10000, 5, 15), # Grand Spell Essence + (8840007, 4021034, 10000, 5, 15), # Fine Spell Essence + (8840007, 4021033, 10000, 5, 15), # Basic Spell Essence + (8840007, 4021032, 10000, 5, 15), # Mana Crystal + (8840007, 4021031, 10000, 5, 15), # Twisted Time + (8840007, 4021020, 10000, 5, 15), # Confusion Fragment + (8840007, 4310010, 8000, 1, 1), # Royal Lion King Medal + (8840007, 4310010, 8000, 1, 1), # Royal Lion King Medal + (8840007, 2512264, 2500, 1, 1), # Special Von Leon Transform Potion Recipe + (8840007, 4001832, 10000, 20, 60), # Spell Trace + (8840007, 4001832, 10000, 20, 60), # Spell Trace + (8840007, 4001832, 10000, 20, 60), # Spell Trace + (8840007, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8840007, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8840007, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8840007, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8840007, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840007, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840007, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840007, 4310018, 6000, 2, 2), # Crusader Coin + (8840007, 4310018, 6000, 2, 2), # Crusader Coin + (8840007, 4310018, 6000, 2, 2), # Crusader Coin + (8840007, 3010188, 1000, 1, 1), # Von Leon Chair + (8840007, 2431662, 6000, 1, 1), # Von Leon Soul Shard + (8840007, 2431662, 3000, 1, 1), # Von Leon Soul Shard + + # Normal/Hard VonLeon - ID = 8840000 + + (8840000, 1004234, 1000, 1, 1), # Royal Von Leon Warrior Helm + (8840000, 1004235, 1000, 1, 1), # Royal Von Leon Magician Helm + (8840000, 1004236, 1000, 1, 1), # Royal Von Leon Sentinel Helm + (8840000, 1004237, 1000, 1, 1), # Royal Von Leon Chaser Helm + (8840000, 1004238, 1000, 1, 1), # Royal Von Leon Skipper Helm + (8840000, 1102713, 1000, 1, 1), # Royal Von Leon Warrior Cape + (8840000, 1102714, 1000, 1, 1), # Royal Von Leon Mage Cape + (8840000, 1102715, 1000, 1, 1), # Royal Von Leon Sentinel Cape + (8840000, 1102716, 1000, 1, 1), # Royal Von Leon Chaser Cape + (8840000, 1102717, 1000, 1, 1), # Royal Von Leon Skipper Cape + (8840000, 1082613, 1000, 1, 1), # Royal Von Leon Warrior Hands + (8840000, 1082614, 1000, 1, 1), # Royal Von Leon Mage Hands + (8840000, 1082615, 1000, 1, 1), # Royal Von Leon Sentinel Hands + (8840000, 1082616, 1000, 1, 1), # Royal Von Leon Chaser Hands + (8840000, 1082617, 1000, 1, 1), # Royal Von Leon Skipper Hands + (8840000, 1052804, 1000, 1, 1), # Royal Von Leon Warrior Suit + (8840000, 1052805, 1000, 1, 1), # Royal Von Leon Mage Suit + (8840000, 1052806, 1000, 1, 1), # Royal Von Leon Sentinel Suit + (8840000, 1052807, 1000, 1, 1), # Royal Von Leon Chaser Suit + (8840000, 1052808, 1000, 1, 1), # Royal Von Leon Skipper Suit + (8840000, 1072972, 1000, 1, 1), # Royal Von Leon Warrior Boots + (8840000, 1072973, 1000, 1, 1), # Royal Von Leon Mage Boots + (8840000, 1072974, 1000, 1, 1), # Royal Von Leon Sentinel Boots + (8840000, 1072975, 1000, 1, 1), # Royal Von Leon Chaser Boots + (8840000, 1072976, 1000, 1, 1), # Royal Von Leon Skipper Boots + (8840000, 1212102, 1000, 1, 1), # Royal Von Leon Glorier + (8840000, 1222096, 1000, 1, 1), # Royal Von Leon White Worm + (8840000, 1232096, 1000, 1, 1), # Royal Von Leon Blood Fury + (8840000, 1242103, 1000, 1, 1), # Royal Von Leon Energy Chain + (8840000, 1252087, 1000, 1, 1), # Royal Von Leon Stick + (8840000, 1262014, 1000, 1, 1), # Royal Von Leon Psy-limiter + (8840000, 1272012, 1000, 1, 1), # Royal Von Leon Chain + (8840000, 1282012, 1000, 1, 1), # Royal Von Leon Lucent Gauntlet + (8840000, 1302316, 1000, 1, 1), # Royal Von Leon Saber + (8840000, 1312186, 1000, 1, 1), # Royal Von Leon Axe + (8840000, 1322237, 1000, 1, 1), # Royal Von Leon Hammer + (8840000, 1332261, 1000, 1, 1), # Royal Von Leon Dagger + (8840000, 1362122, 1000, 1, 1), # Royal Von Leon Cane + (8840000, 1372208, 1000, 1, 1), # Royal Von Leon Wand + (8840000, 1382246, 1000, 1, 1), # Royal Von Leon Staff + (8840000, 1402237, 1000, 1, 1), # Royal Von Leon Sword + (8840000, 1412179, 1000, 1, 1), # Royal Von Leon Two-Handed Axe + (8840000, 1422186, 1000, 1, 1), # Royal Von Leon Two-Handed Hammer + (8840000, 1432201, 1000, 1, 1), # Royal Von Leon Spear + (8840000, 1442255, 1000, 1, 1), # Royal Von Leon Hellslayer + (8840000, 1452239, 1000, 1, 1), # Royal Von Leon Bow + (8840000, 1462226, 1000, 1, 1), # Royal Von Leon Crossbow + (8840000, 1472248, 1000, 1, 1), # Royal Von Leon Guards + (8840000, 1482203, 1000, 1, 1), # Royal Von Leon Claw + (8840000, 1492213, 1000, 1, 1), # Royal Von Leon Pistol + (8840000, 1522125, 1000, 1, 1), # Royal Von Leon Dual Bowguns + (8840000, 1532131, 1000, 1, 1), # Royal Von Leon Siege Gun + (8840000, 1542102, 1000, 1, 1), # Royal Von Leon Katana + (8840000, 1552103, 1000, 1, 1), # Royal Von Leon Fan + (8840000, 1582014, 1000, 1, 1), # Royal Von Leon Ymir + (8840000, 1032227, 3000, 1, 1), # Ifia Earrings + (8840000, 1113089, 3000, 1, 1), # Ifia Ring + (8840000, 1122274, 3000, 1, 1), # Ifia Necklace + (8840000, 2048706, 5000, 1, 1), # Rebirth Flame Lv. 130 + (8840000, 1942001, 2500, 1, 1), # Gold Mask + (8840000, 1952001, 2500, 1, 1), # Gold Pendant + (8840000, 1962001, 2500, 1, 1), # Gold Wings + (8840000, 1972001, 2500, 1, 1), # Gold Tail + (8840000, 4001886, 10000, 1, 1), # Intense Power Crystal + (8840000, 1612004, 2500, 1, 1), # Pure Gold Engine + (8840000, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8840000, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8840000, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8840000, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8840000, 4021035, 10000, 5, 15), # Grand Spell Essence + (8840000, 4021034, 10000, 5, 15), # Fine Spell Essence + (8840000, 4021033, 10000, 5, 15), # Basic Spell Essence + (8840000, 4021032, 10000, 5, 15), # Mana Crystal + (8840000, 4021031, 10000, 5, 15), # Twisted Time + (8840000, 4021020, 10000, 5, 15), # Confusion Fragment + (8840000, 4310010, 8000, 1, 1), # Royal Lion King Medal + (8840000, 4310010, 8000, 1, 1), # Royal Lion King Medal + (8840000, 4310010, 8000, 1, 1), # Royal Lion King Medal + (8840000, 4310010, 8000, 1, 1), # Royal Lion King Medal + (8840000, 4310010, 8000, 1, 1), # Royal Lion King Medal + (8840000, 2512264, 3500, 1, 1), # Special Von Leon Transform Potion Recipe + (8840000, 4001832, 10000, 20, 60), # Spell Trace + (8840000, 4001832, 10000, 20, 60), # Spell Trace + (8840000, 4001832, 10000, 20, 60), # Spell Trace + (8840000, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8840000, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8840000, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8840000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8840000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8840000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8840000, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8840000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840000, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8840000, 4310018, 6000, 2, 2), # Crusader Coin + (8840000, 4310018, 6000, 2, 2), # Crusader Coin + (8840000, 4310018, 6000, 2, 2), # Crusader Coin + (8840000, 4310018, 6000, 2, 2), # Crusader Coin + (8840000, 4310018, 6000, 2, 2), # Crusader Coin + (8840000, 3010188, 2000, 1, 1), # Von Leon Chair + (8840000, 2431662, 7000, 1, 1), # Von Leon Soul Shard + (8840000, 2431662, 4000, 1, 1), # Von Leon Soul Shard + (8840000, 2431662, 2000, 1, 1), # Von Leon Soul Shard + + # Easy Zakum ID = 8800022 + + (8800022, 1372049, 10000, 1, 1), # Zakum Tree Branch + (8800022, 1002357, 10000, 1, 1), # Zakum Helmet + (8800022, 2431710, 5000, 1, 1), # Zakum Soul Shard + (8800022, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8800022, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8800022, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8800022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8800022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800022, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800022, 4310018, 6000, 2, 2), # Crusader Coin + (8800022, 4310018, 6000, 2, 2), # Crusader Coin + (8800022, 4001083, 10000, 1, 1), # Zakum Certificate + + # Normal Zakum ID = 8800002 + + (8800002, 1372049, 10000, 1, 1), # Zakum Tree Branch + (8800002, 1002357, 10000, 1, 1), # Zakum Helmet + (8800002, 1002357, 8000, 1, 1), # Zakum Helmet + (8800002, 1002357, 6000, 1, 1), # Zakum Helmet + (8800002, 1022231, 4000, 1, 1), # Aquatic Letter Eye Accessory + (8800002, 1012478, 4000, 1, 1), # Condensed Power Crystal + (8800002, 1212098, 1000, 1, 1), # Zakum Poisonic Shining Rod + (8800002, 1222092, 1000, 1, 1), # Zakum Poisonic Soul Shooter + (8800002, 1232092, 1000, 1, 1), # Zakum Poisonic Desperado + (8800002, 1242099, 1000, 1, 1), # Zakum Poisonic Whip Blade + (8800002, 1252083, 1000, 1, 1), # Zakum Poisonic Shining Stick + (8800002, 1262012, 1000, 1, 1), # Zakum Poisonic Psy-limiter + (8800002, 1272020, 1000, 1, 1), # Zakum Poisonic Chain + (8800002, 1282020, 1000, 1, 1), # Zakum Poisonic Lucent Gauntlet + (8800002, 1302312, 1000, 1, 1), # Zakum Poisonic Sword + (8800002, 1312182, 1000, 1, 1), # Zakum Poisonic Axe + (8800002, 1322233, 1000, 1, 1), # Zakum Poisonic Hammer + (8800002, 1332257, 1000, 1, 1), # Zakum Poisonic Dagger + (8800002, 1342097, 1000, 1, 1), # Zakum Poisonic Katara + (8800002, 1362118, 1000, 1, 1), # Zakum Poisonic Cane + (8800002, 1372204, 1000, 1, 1), # Zakum Poisonic Wand + (8800002, 1382242, 1000, 1, 1), # Zakum Poisonic Staff + (8800002, 1402233, 1000, 1, 1), # Zakum Poisonic Two-handed Sword + (8800002, 1412161, 1000, 1, 1), # Zakum Poisonic Two-handed Axe + (8800002, 1422168, 1000, 1, 1), # Zakum Poisonic Sledgehammer + (8800002, 1432197, 1000, 1, 1), # Zakum Poisonic Spear + (8800002, 1442251, 1000, 1, 1), # Zakum Poisonic Polearm + (8800002, 1452235, 1000, 1, 1), # Zakum Poisonic Bow + (8800002, 1462222, 1000, 1, 1), # Zakum Poisonic Crossbow + (8800002, 1472244, 1000, 1, 1), # Zakum Poisonic Guards + (8800002, 1482199, 1000, 1, 1), # Zakum Poisonic Knuckle + (8800002, 1492209, 1000, 1, 1), # Zakum Poisonic Gun + (8800002, 1522121, 1000, 1, 1), # Zakum Poisonic Dual Bowguns + (8800002, 1532127, 1000, 1, 1), # Zakum Poisonic Hand Cannon + (8800002, 1542098, 1000, 1, 1), # Zakum Poisonic Katana + (8800002, 1552099, 1000, 1, 1), # Zakum Poisonic Fan + (8800002, 1582012, 1000, 1, 1), # Zakum Poisonic Arm Cannon + (8800002, 3010333, 2500, 1, 1), # Zakum Chair + (8800002, 2048700, 5000, 1, 1), # Rebirth Flame Lv. 110 + (8800002, 2431710, 8000, 1, 1), # Zakum Soul Shard + (8800002, 2431710, 4000, 1, 1), # Zakum Soul Shard + (8800002, 1942001, 2500, 1, 1), # Gold Mask + (8800002, 1952001, 2500, 1, 1), # Gold Pendant + (8800002, 1962001, 2500, 1, 1), # Gold Wings + (8800002, 1972001, 2500, 1, 1), # Gold Tail + (8800002, 4001886, 10000, 1, 1), # Intense Power Crystal + (8800002, 1612004, 2500, 1, 1), # Pure Gold Engine + (8800002, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8800002, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8800002, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8800002, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8800002, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (8800002, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8800002, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8800002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8800002, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8800002, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800002, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800002, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800002, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800002, 4310018, 6000, 2, 2), # Crusader Coin + (8800002, 4310018, 6000, 2, 2), # Crusader Coin + (8800002, 4310018, 6000, 2, 2), # Crusader Coin + (8800002, 4310018, 6000, 2, 2), # Crusader Coin + (8800002, 4001083, 10000, 1, 1), # Zakum Certificate + + # Chaos Zakum ID = 8800102 + + (8800102, 1372073, 10000, 1, 1), # Chaos Zakum Tree Branch + (8800102, 1003112, 10000, 1, 1), # Chaos Zakum Helmet + (8800102, 1003112, 8000, 1, 1), # Chaos Zakum Helmet + (8800102, 1003112, 6000, 1, 1), # Chaos Zakum Helmet + (8800102, 1004637, 500, 1, 1), # Enraged Zakum Helmet + (8800102, 1102871, 500, 1, 1), # Enraged Zakum Cape + (8800102, 1132296, 500, 1, 1), # Enraged Zakum Belt + (8800102, 1022231, 5000, 1, 1), # Aquatic Letter Eye Accessory + (8800102, 1012478, 5000, 1, 1), # Condensed Power Crystal + (8800102, 1212098, 1500, 1, 1), # Zakum Poisonic Shining Rod + (8800102, 1222092, 1500, 1, 1), # Zakum Poisonic Soul Shooter + (8800102, 1232092, 1500, 1, 1), # Zakum Poisonic Desperado + (8800102, 1242099, 1500, 1, 1), # Zakum Poisonic Whip Blade + (8800102, 1252083, 1500, 1, 1), # Zakum Poisonic Shining Stick + (8800102, 1262012, 1500, 1, 1), # Zakum Poisonic Psy-limiter + (8800102, 1272020, 1500, 1, 1), # Zakum Poisonic Chain + (8800102, 1282020, 1500, 1, 1), # Zakum Poisonic Lucent Gauntlet + (8800102, 1302312, 1500, 1, 1), # Zakum Poisonic Sword + (8800102, 1312182, 1500, 1, 1), # Zakum Poisonic Axe + (8800102, 1322233, 1500, 1, 1), # Zakum Poisonic Hammer + (8800102, 1332257, 1500, 1, 1), # Zakum Poisonic Dagger + (8800102, 1342097, 1500, 1, 1), # Zakum Poisonic Katara + (8800102, 1362118, 1500, 1, 1), # Zakum Poisonic Cane + (8800102, 1372204, 1500, 1, 1), # Zakum Poisonic Wand + (8800102, 1382242, 1500, 1, 1), # Zakum Poisonic Staff + (8800102, 1402233, 1500, 1, 1), # Zakum Poisonic Two-handed Sword + (8800102, 1412161, 1500, 1, 1), # Zakum Poisonic Two-handed Axe + (8800102, 1422168, 1500, 1, 1), # Zakum Poisonic Sledgehammer + (8800102, 1432197, 1500, 1, 1), # Zakum Poisonic Spear + (8800102, 1442251, 1500, 1, 1), # Zakum Poisonic Polearm + (8800102, 1452235, 1500, 1, 1), # Zakum Poisonic Bow + (8800102, 1462222, 1500, 1, 1), # Zakum Poisonic Crossbow + (8800102, 1472244, 1500, 1, 1), # Zakum Poisonic Guards + (8800102, 1482199, 1500, 1, 1), # Zakum Poisonic Knuckle + (8800102, 1492209, 1500, 1, 1), # Zakum Poisonic Gun + (8800102, 1522121, 1500, 1, 1), # Zakum Poisonic Dual Bowguns + (8800102, 1532127, 1500, 1, 1), # Zakum Poisonic Hand Cannon + (8800102, 1542098, 1500, 1, 1), # Zakum Poisonic Katana + (8800102, 1552099, 1500, 1, 1), # Zakum Poisonic Fan + (8800102, 1582012, 1500, 1, 1), # Zakum Poisonic Arm Cannon + (8800102, 3010333, 3500, 1, 1), # Zakum Chair + (8800102, 2048700, 5000, 1, 1), # Rebirth Flame Lv. 110 + (8800102, 2431710, 8000, 1, 1), # Zakum Soul Shard + (8800102, 2431710, 4000, 1, 1), # Zakum Soul Shard + (8800102, 2431710, 2000, 1, 1), # Zakum Soul Shard + (8800102, 1942001, 2500, 1, 1), # Gold Mask + (8800102, 1952001, 2500, 1, 1), # Gold Pendant + (8800102, 1962001, 2500, 1, 1), # Gold Wings + (8800102, 1972001, 2500, 1, 1), # Gold Tail + (8800102, 4001886, 10000, 1, 1), # Intense Power Crystal + (8800102, 1612004, 2500, 1, 1), # Pure Gold Engine + (8800102, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8800102, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8800102, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8800102, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8800102, 2022176, 10000, 30, 30), # Power Elixir (Tradeable) + (8800102, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8800102, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8800102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8800102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8800102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8800102, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8800102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800102, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8800102, 4310018, 6000, 2, 2), # Crusader Coin + (8800102, 4310018, 6000, 2, 2), # Crusader Coin + (8800102, 4310018, 6000, 2, 2), # Crusader Coin + (8800102, 4310018, 6000, 2, 2), # Crusader Coin + (8800102, 4310018, 6000, 2, 2), # Crusader Coin + (8800102, 4310018, 6000, 2, 2), # Crusader Coin + (8800102, 4001083, 10000, 1, 1), # Zakum Certificate + + # Princess No Drop ID = 9450022 + + (9450022, 2432755, 8000, 1, 1), # Princess No Gold Jewel Box + (9450022, 2432755, 4000, 1, 1), # Princess No Gold Jewel Box + (9450022, 2432755, 2000, 1, 1), # Princess No Gold Jewel Box + (9450022, 2432754, 10000, 1, 1), # Princess No Silver Jewel Box + (9450022, 2432754, 5000, 1, 1), # Princess No Silver Jewel Box + (9450022, 2432754, 2500, 1, 1), # Princess No Silver Jewel Box + (9450022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9450022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9450022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9450022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9450022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9450022, 2433103, 10000, 1, 1), # Boss Medal of Honor + (9450022, 2711000, 10000, 1, 1), # Occult Cube (Tradeable) + (9450022, 2711000, 10000, 1, 1), # Occult Cube (Tradeable) + (9450022, 2711000, 10000, 1, 1), # Occult Cube (Tradeable) + (9450022, 2711000, 10000, 1, 1), # Occult Cube (Tradeable) + (9450022, 2711000, 10000, 1, 1), # Occult Cube (Tradeable) + (9450022, 2711000, 10000, 1, 1), # Occult Cube (Tradeable) + (9450022, 4001832, 10000, 20, 40), # Spell Trace + (9450022, 4001832, 10000, 20, 40), # Spell Trace + (9450022, 4001832, 10000, 20, 40), # Spell Trace + + # Pianus Left = 8520000 + + (8520000, 1942001, 2500, 1, 1), # Gold Mask + (8520000, 1952001, 2500, 1, 1), # Gold Pendant + (8520000, 1962001, 2500, 1, 1), # Gold Wings + (8520000, 1972001, 2500, 1, 1), # Gold Tail + (8520000, 1612004, 2500, 1, 1), # Pure Gold Engine + (8520000, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8520000, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8520000, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8520000, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8520000, 4021035, 10000, 5, 15), # Grand Spell Essence + (8520000, 4021034, 10000, 5, 15), # Fine Spell Essence + (8520000, 4021033, 10000, 5, 15), # Basic Spell Essence + (8520000, 4021032, 10000, 5, 15), # Mana Crystal + (8520000, 4001832, 10000, 2, 10), # Spell Trace + (8520000, 4001085, 2500, 1, 1), # Pianus Certificate + (8520000, 2431895, 8000, 1, 1), # Pianus Soul Shard + + # Pianus Right = 8510000 + + (8510000, 1942001, 2500, 1, 1), # Gold Mask + (8510000, 1952001, 2500, 1, 1), # Gold Pendant + (8510000, 1962001, 2500, 1, 1), # Gold Wings + (8510000, 1972001, 2500, 1, 1), # Gold Tail + (8510000, 1612004, 2500, 1, 1), # Pure Gold Engine + (8510000, 1622004, 2500, 1, 1), # Pure Gold Machine Arm + (8510000, 1632003, 2500, 1, 1), # Pure Gold Machine Leg + (8510000, 1642002, 2500, 1, 1), # Pure Gold Body Frame + (8510000, 1652004, 2500, 1, 1), # Pure Gold Transistor + (8510000, 4021035, 10000, 5, 15), # Grand Spell Essence + (8510000, 4021034, 10000, 5, 15), # Fine Spell Essence + (8510000, 4021033, 10000, 5, 15), # Basic Spell Essence + (8510000, 4021032, 10000, 5, 15), # Mana Crystal + (8510000, 4001832, 10000, 2, 10), # Spell Trace + (8510000, 4001085, 2500, 1, 1), # Pianus Certificate + (8510000, 2431895, 7000, 1, 1), # Pianus Soul Shard + + # Ephenia = 5250007 + + (5250007, 2431752, 10000, 1, 1), # Ephenia Soul Shard + (5250007, 1112683, 5000, 1, 1), # Ephenia Ring + (5250007, 2022176, 10000, 10, 10), # Power Elixir (Tradeable) + (5250007, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (5250007, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + # Black Knight = 8220022 + + (8220022, 2433834, 10000, 1, 1), # Rare Treasure Chest + (8220022, 2433834, 7000, 1, 1), # Rare Treasure Chest + (8220022, 2433834, 3500, 1, 1), # Rare Treasure Chest + (8220022, 2433834, 1500, 1, 1), # Rare Treasure Chest + + # Mad Mage = 8220023 + + (8220023, 2433834, 10000, 1, 1), # Rare Treasure Chest + (8220023, 2433834, 7000, 1, 1), # Rare Treasure Chest + (8220023, 2433834, 3500, 1, 1), # Rare Treasure Chest + (8220023, 2433834, 1500, 1, 1), # Rare Treasure Chest + + # Rampant Cyborg = 8220024 + + (8220024, 2433834, 10000, 1, 1), # Rare Treasure Chest + (8220024, 2433834, 7000, 1, 1), # Rare Treasure Chest + (8220024, 2433834, 3500, 1, 1), # Rare Treasure Chest + (8220024, 2433834, 1500, 1, 1), # Rare Treasure Chest + + # Rampant Cyborg = 8220025 + + (8220025, 2433834, 10000, 1, 1), # Rare Treasure Chest + (8220025, 2433834, 7000, 1, 1), # Rare Treasure Chest + (8220025, 2433834, 3500, 1, 1), # Rare Treasure Chest + (8220025, 2433834, 1500, 1, 1), # Rare Treasure Chest + + # Bad Brawler = 8220026 + + (8220026, 2433834, 10000, 1, 1), # Rare Treasure Chest + (8220026, 2433834, 7000, 1, 1), # Rare Treasure Chest + (8220026, 2433834, 3500, 1, 1), # Rare Treasure Chest + (8220026, 2433834, 1500, 1, 1), # Rare Treasure Chest + + # Gollux Mobs + + (9390624, 4310098, 5000, 1, 1), # Gollux Penny + (9390624, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390624, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390624, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + (9390625, 4310098, 5000, 1, 1), # Gollux Penny + (9390625, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390625, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390625, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + (9390634, 4310098, 5000, 1, 1), # Gollux Penny + (9390634, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390634, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390634, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + (9390637, 4310098, 5000, 1, 1), # Gollux Penny + (9390637, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390637, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390637, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + (9390643, 4310098, 5000, 1, 1), # Gollux Penny + (9390643, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390643, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390643, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + (9390640, 4310098, 5000, 1, 1), # Gollux Penny + (9390640, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390640, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390640, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + + # Gollux Right Shoulder = 9390610 + + (9390612, 4310097, 10000, 1, 1), # Gollux Coin + (9390610, 4310098, 10000, 1, 1), # Gollux Penny + (9390610, 4310098, 10000, 1, 1), # Gollux Penny + (9390610, 4310098, 10000, 1, 1), # Gollux Penny + (9390610, 4310098, 10000, 1, 1), # Gollux Penny + (9390610, 4310098, 10000, 1, 1), # Gollux Penny + (9390610, 4310098, 10000, 1, 1), # Gollux Penny + (9390610, 4001832, 10000, 10, 30), # Spell Trace + (9390610, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390610, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390610, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390610, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390610, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390610, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + + # Gollux Left Shoulder = 9390611 + + (9390612, 4310097, 10000, 1, 1), # Gollux Coin + (9390611, 4310098, 10000, 1, 1), # Gollux Penny + (9390611, 4310098, 10000, 1, 1), # Gollux Penny + (9390611, 4310098, 10000, 1, 1), # Gollux Penny + (9390611, 4310098, 10000, 1, 1), # Gollux Penny + (9390611, 4310098, 10000, 1, 1), # Gollux Penny + (9390611, 4310098, 10000, 1, 1), # Gollux Penny + (9390611, 4001832, 10000, 10, 30), # Spell Trace + (9390611, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390611, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390611, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390611, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390611, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390611, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + + # Gollux Abdomen = 9390612 + + (9390612, 4310097, 10000, 1, 1), # Gollux Coin + (9390612, 4310098, 10000, 1, 1), # Gollux Penny + (9390612, 4310098, 10000, 1, 1), # Gollux Penny + (9390612, 4310098, 10000, 1, 1), # Gollux Penny + (9390612, 4310098, 10000, 1, 1), # Gollux Penny + (9390612, 4310098, 10000, 1, 1), # Gollux Penny + (9390612, 4310098, 10000, 1, 1), # Gollux Penny + (9390612, 4001832, 10000, 10, 30), # Spell Trace + (9390612, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390612, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390612, 2022176, 10000, 10, 20), # Power Elixir (Tradeable) + (9390612, 2432091, 250, 1, 1), # Gollux Head Teleport Rock + (9390612, 2432092, 250, 1, 1), # Gollux Left Shoulder Teleport Rock + (9390612, 2432093, 250, 1, 1), # Gollux Right Shoulder Teleport Rock + + # Giant Monster Gloom = 8644650 + + (8644650, 4001893, 10000, 10, 20), # Spark of Determination + (8644650, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8644650, 4001886, 10000, 1, 1), # Intense Power Crystal + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4310018, 6000, 2, 2), # Crusader Coin + (8644650, 4021031, 10000, 125, 250), # Twisted Time + (8644650, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8644650, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8644650, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + # Darknell = 8645009 + + (8645009, 4001893, 10000, 10, 20), # Spark of Determination + (8645009, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8645009, 2439568, 8000, 1, 1), # Darknell Soul Shard + (8645009, 2439568, 6000, 1, 1), # Darknell Soul Shard + (8645009, 2439568, 4000, 1, 1), # Darknell Soul Shard + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 4001886, 10000, 1, 1), # Intense Power Crystal + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4021031, 10000, 125, 250), # Twisted Time + (8645009, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8645009, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8645009, 2000004, 10000, 10, 25), # Elixir (Tradeable) + + # Julieta drop box = 9402282 + + (8645009, 2048708, 5000, 1, 1), # Rebirth Flame Lv. 150 + (8645009, 2048702, 5000, 1, 1), # Rebirth Flame Lv. 130 + (8645009, 2048701, 5000, 1, 1), # Rebirth Flame Lv. 120 + (8645009, 2048700, 5000, 1, 1), # Rebirth Flame Lv. 110 + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 2433103, 10000, 1, 1), # Boss Medal of Honor + (8645009, 4001886, 10000, 1, 1), # Intense Power Crystal + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 2711000, 3500, 1, 1), # Occult Cube (Tradeable) + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4310018, 6000, 2, 2), # Crusader Coin + (8645009, 4021031, 10000, 125, 250), # Twisted Time + (8645009, 2022176, 10000, 50, 50), # Power Elixir (Tradeable) + (8645009, 2020013, 10000, 10, 25), # Reindeer Milk (Tradeable) + (8645009, 2000004, 10000, 10, 25), # Elixir (Tradeable) + (8645009, 2512062, 2500, 1, 1), # Advanced Blessing Potion Recipe + (8645009, 2512066, 2500, 1, 1), # Advanced Luck Boost Potion Recipe + (8645009, 2512291, 2500, 1, 1), # Invincibility Potion Recipe + (8645009, 2512292, 2500, 1, 1), # EXP Accumulation Potion Recipe + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + (8645009, 2439500, 3500, 1, 1), # Eyeful Armor Coupon (Special) + + # Pathfinder intro + (2300200, 4036523, 5000, 1, 1), + + + # Dummy + (0, 0, 0, 0, 0); + + + + + + diff --git a/sql/3 - InitTables_cashshop.sql b/sql/3 - InitTables_cashshop.sql new file mode 100755 index 0000000..3e8102c --- /dev/null +++ b/sql/3 - InitTables_cashshop.sql @@ -0,0 +1,9182 @@ +drop table if exists cs_categories; +drop table if exists cs_items; + +create table cs_categories ( + id int not null auto_increment, + idx int, + name varchar(255), + flag int, + parentIdx int, + stock int, + primary key (id) +); + +create table cs_items ( + id int not null auto_increment, + itemID int not null, + stock int default 1, + shopItemFlag int default 0, + idk1 int default 0, + idk2 int default 0, + oldPrice int default 0, + newPrice int default 0, + idkTime1 datetime, + idkTime2 datetime, + idkTime3 datetime, + idkTime4 datetime, + idk3 int default 0, + bundleQuantity int default 0, + availableDays int default 0, + buyableWithMaplePoints smallint default 1, + buyableWithCredit smallint default 1, + buyableWithPrepaid smallint default 1, + likable smallint default 1, + meso smallint default 0, + favoritable smallint default 1, + gender int default 2, + likes int default 0, + requiredLevel int default 0, + idk10 varchar(255), + idk11 int default 0, + idk13 int default 0, + idk14 int default 0, + category varchar(255), + primary key (id) +); + +insert into `cs_categories` (`idx`, `name`, `parentIdx`, `stock`) values ('2000000', 'Favourite', '0', '100'), + + +('1010000', 'Special Promotions', '0', '100'), +('1010100', 'New Arrivals', '0', '100'), +('1010200', 'Discounted', '0', '100'), +('1010300', 'Limited Time', '0', '100'), +('1010400', 'Limited Quantity', '0', '100'), +('1010500', 'Daily Deals', '0', '100'), +('1010600', 'Maple Rewards Shop', '0', '100'), + + +('1020000', 'Time Savers', '0', '100'), +('1020100', 'Teleport Rocks', '0', '100'), +('1020200', 'Item Stores', '0', '100'), +('1020300', 'Quest Helpers', '0', '100'), +('1020400', 'Dungeon Passes', '0', '100'), + + +('1030000', 'Random Rewards', '0', '100'), +('1030100', 'Gachapon Tickets', '0', '100'), +('1030200', 'Surprise Boxes', '0', '100'), +('1030300', 'Special Items', '0', '100'), +('1030400', 'Meso Sacks', '0', '100'), + + +('1040000', 'Equipment Modifications', '0', '100'), +('1040100', 'Miracle Cubes', '0', '100'), +('1040200', 'Scrolls', '0', '100'), +('1040300', 'Upgrade Slots', '0', '100'), +('1040400', 'Trade', '0', '100'), +('1040500', 'Other', '0', '100'), +('1040501', 'Item Tag', '0', '100'), +('1040502', 'Item Guards', '0', '100'), +('1040600', 'Duration', '0', '100'), +('1040700', 'Bypass Keys', '0', '100'), +('1040800', 'Fusion Anvils', '0', '100'), + + +('1050000', 'Character Modifications', '0', '100'), +('1050100', 'SP/AP modifications', '0', '100'), +('1050200', 'EXP Coupons', '0', '100'), +('1050300', 'Drop Coupons', '0', '100'), +('1050400', 'Inventory slots', '0', '100'), +('1050500', 'Skill Modifications', '0', '100'), +('1050600', 'Protection', '0', '100'), +('1050700', 'Wedding', '0', '100'), +('1050800', 'Other', '0', '100'), +('1050900', 'Mount', '0', '100'), + + +('1060000', 'Equipment', '0', '100'), +('1060100', 'Weapon', '0', '100'), +('1060200', 'Weapon 2', '0', '100'), +('1060300', 'Weapon 3', '0', '100'), +('1060400', 'Weapon 4', '0', '100'), +('1060500', 'Hat', '0', '100'), +('1060600', 'Hat 2', '0', '100'), +('1060700', 'Hat 3', '0', '100'), +('1060800', 'Hat 4', '0', '100'), +('1060900', 'Hat 5', '0', '100'), +('1061000', 'Hat 6', '0', '100'), +('1061100', 'Hat 7', '0', '100'), +('1061200', 'Hat 8', '0', '100'), +('1061300', 'Face', '0', '100'), +('1061400', 'Eye', '0', '100'), +('1061500', 'Accessory', '0', '100'), +('1061600', 'Earrings', '0', '100'), +('1061700', 'Overall', '0', '100'), +('1061800', 'Overall 2', '0', '100'), +('1061900', 'Overall 3', '0', '100'), +('1062000', 'Overall 4', '0', '100'), +('1062100', 'Overall 5', '0', '100'), +('1062200', 'Overall 6', '0', '100'), +('1062300', 'Top', '0', '100'), +('1062400', 'Top 2', '0', '100'), +('1062500', 'Bottom', '0', '100'), +('1062600', 'Bottom 2', '0', '100'), +('1062700', 'Shoes', '0', '100'), +('1062800', 'Shoes 2', '0', '100'), +('1062900', 'Shoes 3', '0', '100'), +('1063000', 'Glove', '0', '100'), +('1063100', 'Ring', '0', '100'), +('1063200', 'Ring 2', '0', '100'), +('1063300', 'Cape', '0', '100'), +('1063400', 'Cape 2', '0', '100'), +('1063500', 'Cape 3', '0', '100'), + + +('1064000', 'Transparent', '0', '100'), + + +('1070000', 'Appearance', '0', '100'), +('1070100', 'Beauty Parlor', '0', '100'), +('1070101', 'Hair', '0', '100'), +('1070102', 'Face', '0', '100'), +('1070103', 'Skin', '0', '100'), +('1070200', 'Facial Expressions', '0', '100'), +('1070300', 'Effect', '0', '100'), +('1070400', 'Transformations', '0', '100'), +('1070500', 'Special', '0', '100'), + + +('1080000', 'Pet', '0', '100'), +('1080100', 'Pets', '0', '100'), +('1080200', 'Pets 2', '0', '100'), +('1080300', 'Pet Appearance', '0', '100'), +('1080400', 'Pet Appearance 2', '0', '100'), +('1080500', 'Pet Use', '0', '100'), +('1080600', 'Pet Food', '0', '100'), +('1080700', 'Pet Skills', '0', '100'), + + +('1090000', 'Messenger and Social', '0', '100'), +('1090100', 'Megaphones', '0', '100'), +('1090200', 'Messengers', '0', '100'), +('1090300', 'Weather Effects', '0', '100'), +('1090301', 'Stats', '0', '100'), +('1090302', 'Non-Stat', '0', '100'), +('1090400', 'Other', '0', '100'); + + + + + +/* TIME SAVERS */ + +/*Page 1*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`) values ('5040004', '9900', 'Teleport Rocks'), /*Hyper Teleport Rock*/ + + + +/*Page 1*/ +('5450004', '1000', 'Item Stores'), /*Traveling Merchant (30-day)*/ +('5450005', '1000', 'Item Stores'), /*Portable Storage (30-day)*/ +('5450006', '400', 'Item Stores'), /*Traveling Merchant (1-day)*/ +('5450008', '400', 'Item Stores'), /*Portable Storage (1-day)*/ + + + +/*Page 1*/ +('5252030', '300', 'Dungeon Passes'); /*Monster Park Additional Entry Ticket*/ + + + + + +/* RANDOM REWARDS */ + +/*Page 1*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`) values ('5680021', '2500', 'Gachapon Tickets'); /*Chair Gachapon Ticket*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`, `bundleQuantity`) values ('5680021', '25000', 'Gachapon Tickets', '11'); /*Chair Gachapon Ticket (11)*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`) values ('5451000', '1050', 'Gachapon Tickets'); /*Remote Gachapon Ticket*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`, `bundleQuantity`) values ('5451000', '10500', 'Gachapon Tickets', '11'); /*Remote Gachapon Ticket (11)*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`, `bundleQuantity`) values ('5220000', '10000', 'Gachapon Tickets', '11'); /*Gachapon Ticket (11)*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`) values ('5220000', '1000', 'Gachapon Tickets'), /*Gachapon Ticket*/ + + + +/*Page 1*/ +('5222060', '3400', 'Surprise Boxes'); /*Premium Surprise Style Box*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`, `bundleQuantity`) values ('5222060', '34000', 'Surprise Boxes', '11'); /*Premium Surprise Style Box (11)*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`) values ('5222006', '2100', 'Surprise Boxes'); /*Surprise Style Box*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`, `bundleQuantity`) values ('5222006', '21000', 'Surprise Boxes', '11'); /*Surprise Style Box (11)*/ + + + +/*Page 1*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`) values ('5202000', '1000', 'Meso Sacks'), /*Rare Meso Sack*/ +('5202001', '3000', 'Meso Sacks'), /*Unique Meso Sack*/ +('5202002', '2000', 'Meso Sacks'), /*Epic Meso Sack*/ + + + + + +/* EQUIPMENT MODIFICATIONS */ + + +/* CUBES */ + +/*Page 1*/ +('5062009', '1000', 'Miracle Cubes'), # Red Cube +('5062010', '3000', 'Miracle Cubes'), # Black Cube +('5062024', '10000', 'Miracle Cubes'), # Violet Cube +('5062500', '5000', 'Miracle Cubes'), # Bonus Potential Cube + +# Scrolls + +# Upgrade Slots + +# Trade + +# Other + +/*Page 1*/ +('5700000', '1200', 'Other'), /*Android Naming Coupon*/ +('5060000', '1800', 'Other'), /*Item Tag*/ + +# Other -> Item Tag + +/*Page 1*/ +('5700000', '1200', 'Item Tag'), /*Android Naming Coupon*/ +('5060000', '1800', 'Item Tag'), /*Item Tag*/ + +# Other -> Item Guards + +# Duration + +# Bypass Keys + +# Fusion Anvils + + +/* CHARACTER MODIFICATIONS */ + +/*Page 1*/ +('5430000', '6900', 'Inventory slots'), /*Extra Character Slot Coupon*/ +('9110000', '5000', 'Inventory slots'), /*Add Storage Slots*/ +('9111000', '5000', 'Inventory slots'), /*Add Equip Slots*/ +('9112000', '5000', 'Inventory slots'), /*Add Use Slots*/ +('9114000', '5000', 'Inventory slots'), /*Add ETC Slots*/ +('9113000', '5000', 'Inventory slots'), /*Add Set-up Slots*/ + + + + + +/* EQUIPMENT */ + +/* Weapon */ +/*Page 1*/ +('1701000', '7600', 'Weapon'), /*Elizabeth Fan*/ +('1702009', '5600', 'Weapon'), /*Tiger Paw*/ +('1702008', '6400', 'Weapon'), /*Santa Sack*/ +('1702011', '5200', 'Weapon'), /*Pink Toy Hammer*/ +('1702010', '3600', 'Weapon'), /*Orange Toy Hammer*/ +('1702013', '5200', 'Weapon'), /*Teddy Bear*/ +('1702012', '4700', 'Weapon'), /*Yellow Spatula*/ +('1702015', '5000', 'Weapon'), /*Bug Net*/ +('1702014', '6400', 'Weapon'), /*Toy RIfle*/ +/*Page 2*/ +('1702001', '7100', 'Weapon'), /*Bouquet*/ +('1702000', '3400', 'Weapon'), /*Dual Plasma Blade*/ +('1702003', '4000', 'Weapon'), /*Plastic Slingshot*/ +('1702002', '8800', 'Weapon'), /*Wooden Slingshot*/ +('1702005', '6300', 'Weapon'), /*Yellow Candy Cane*/ +('1702004', '6400', 'Weapon'), /*Angel Wand*/ +('1702007', '6300', 'Weapon'), /*Green Candy Cane*/ +('1702006', '4900', 'Weapon'), /*Red Candy Cane*/ +('1702041', '6400', 'Weapon'), /*Horoscope Sword*/ +/*Page 3*/ +('1702040', '5600', 'Weapon'), /*Horoscope Bow*/ +('1702043', '6000', 'Weapon'), /*Poo Stick*/ +('1702042', '4900', 'Weapon'), /*Microphone*/ +('1702045', '6300', 'Weapon'), /*Sunflower Stalk*/ +('1702044', '3200', 'Weapon'), /*Toy Machine Gun*/ +('1702047', '3600', 'Weapon'), /*Snowflake Staff*/ +('1702046', '3800', 'Weapon'), /*Horoscope Crossbow*/ +('1702033', '4700', 'Weapon'), /*Sun Quan Staff*/ +('1702032', '7400', 'Weapon'), /*Zhu-Ge-Liang Wand*/ +/*Page 4*/ +('1702035', '5600', 'Weapon'), /*Cao Cao Bow*/ +('1702034', '3200', 'Weapon'), /*Guan Yu Spear*/ +('1702037', '7100', 'Weapon'), /*Coffee Pot*/ +('1702036', '3200', 'Weapon'), /*Witch's Broomstick*/ +('1702039', '7100', 'Weapon'), /*Horoscope Net*/ +('1702038', '8800', 'Weapon'), /*Horoscope Claw*/ +('1702025', '7600', 'Weapon'), /*Cherub's Bow*/ +('1702024', '3400', 'Weapon'), /*Cupid's Bow*/ +('1702027', '4900', 'Weapon'), /*Blazing Sword*/ +/*Page 5*/ +('1702026', '5200', 'Weapon'), /*Cupid's Crossbow*/ +('1702029', '4900', 'Weapon'), /*White Rabbit's Foot*/ +('1702028', '3200', 'Weapon'), /*Donut*/ +('1702031', '3200', 'Weapon'), /*Liu Bei Sword*/ +('1702030', '6300', 'Weapon'), /*Diao Chan Sword*/ +('1702017', '4700', 'Weapon'), /*Pink Rabbit Puppet*/ +('1702016', '3600', 'Weapon'), /*Picnic Basket*/ +('1702019', '7600', 'Weapon'), /*Pillow*/ +('1702018', '4700', 'Weapon'), /*Vanilla Ice Cream*/ +/*Page 6*/ +('1702021', '7400', 'Weapon'), /*Black Electric Guitar*/ +('1702020', '3200', 'Weapon'), /*Lollipop*/ +('1702023', '7600', 'Weapon'), /*Green Electric Guitar*/ +('1702022', '5600', 'Weapon'), /*Brown Electric Guitar*/ +('1702073', '4900', 'Weapon'), /*Blue Shiner Crossbow*/ +('1702072', '5600', 'Weapon'), /*Laser Sword*/ +('1702075', '7100', 'Weapon'), /*USA Cheer Towel*/ +('1702074', '3200', 'Weapon'), /*Pink Shiner Crossbow*/ +('1702077', '3200', 'Weapon'), /*Australia Cheer Towel*/ +/*Page 7*/ +('1702076', '5200', 'Weapon'), /*Mexico Cheer Towel*/ +('1702079', '6400', 'Weapon'), /*Blue Blazing Sword*/ +('1702078', '3400', 'Weapon'), /*Fairy Fan*/ +('1702065', '4700', 'Weapon'), /*Paper Stick*/ +('1702064', '4900', 'Weapon'), /*Rock Stick*/ +('1702067', '6000', 'Weapon'), /*England Cheer Towel*/ +('1702066', '4900', 'Weapon'), /*Canvas Tote Bag*/ +('1702069', '3200', 'Weapon'), /*Brazil Cheer Towel*/ +('1702068', '3400', 'Weapon'), /*France Cheer Towel*/ +/*Page 8*/ +('1702071', '3600', 'Weapon'), /*Japan Cheer Towel*/ +('1702070', '3200', 'Weapon'), /*Sporty Band*/ +('1702057', '8800', 'Weapon'), /*Blue Guitar*/ +('1702056', '4900', 'Weapon'), /*Guitar*/ +('1702059', '8800', 'Weapon'), /*Cactus*/ +('1702058', '4900', 'Weapon'), /*Big Hand*/ +('1702061', '4900', 'Weapon'), /*Red Fist of Fury*/ +('1702060', '5000', 'Weapon'), /*Shiner*/ +('1702063', '7400', 'Weapon'), /*Scissor Stick*/ +/*Page 9*/ +('1702062', '8800', 'Weapon'), /*Blue Fist of Fury*/ +('1702049', '4900', 'Weapon'), /*Snowman Claw*/ +('1702048', '5600', 'Weapon'), /*Green Wash Cloth*/ +('1702051', '8800', 'Weapon'), /*Hong Bao*/ +('1702050', '8800', 'Weapon'), /*Cellphone*/ +('1702053', '4000', 'Weapon'), /*In-Hand FB Helmet(Away)*/ +('1702052', '3600', 'Weapon'), /*In-Hand FB Helmet(Home)*/ +('1702055', '4700', 'Weapon'), /*Ancient Korean Bow*/ +('1702054', '3400', 'Weapon'), /*Football Claw*/ +/*Page 10*/ +('1702105', '6000', 'Weapon'), /*Heart Key*/ +('1702104', '3200', 'Weapon'), /*Deluxe Cone*/ +('1702107', '4000', 'Weapon'), /*Chocolate*/ +('1702106', '5200', 'Weapon'), /*Melting Chocolate*/ +('1702108', '4000', 'Weapon'), /*Giant Lollipop*/ +('1702097', '4900', 'Weapon'), /*Fire Katana*/ +('1702096', '8800', 'Weapon'), /*Pizza Pan*/ +('1702099', '7400', 'Weapon'), /*Transparent Claw*/ +('1702098', '7100', 'Weapon'), /*Violin*/ +/*Page 11*/ +('1702101', '4700', 'Weapon'), /*Meso Gunner*/ +('1702100', '4900', 'Weapon'), /*Christmas Bell*/ +('1702103', '3200', 'Weapon'), /*Pink Ribbon Umbrella*/ +('1702102', '7400', 'Weapon'), /*Stellar Staff*/ +('1702089', '5000', 'Weapon'), /*Candy Hammer*/ +('1702088', '4000', 'Weapon'), /*Super Scrubber*/ +('1702091', '3600', 'Weapon'), /*Tennis Racquet*/ +('1702090', '3200', 'Weapon'), /*Feather Scimitar*/ +('1702093', '6400', 'Weapon'), /*Okie Donkie*/ +/*Page 12*/ +('1702092', '4000', 'Weapon'), /*Glowing Pumpkin Basket*/ +('1702095', '3800', 'Weapon'), /*Frog Glove*/ +('1702094', '6300', 'Weapon'), /*Mad Cow*/ +('1702081', '7600', 'Weapon'), /*Purple Blazing Sword*/ +('1702080', '4900', 'Weapon'), /*Green Blazing Sword*/ +('1702083', '6000', 'Weapon'), /*Foam Hand*/ +('1702082', '5200', 'Weapon'), /*Harp*/ +('1702085', '3200', 'Weapon'), /*Frog Claw*/ +('1702084', '3600', 'Weapon'), /*Toy Pinwheel*/ +/*Page 13*/ +('1702087', '6000', 'Weapon'), /*Red Pencil*/ +('1702086', '4700', 'Weapon'), /*Chicken Smackaroo*/ +('1702136', '7100', 'Weapon'), /*Ice Flower*/ +('1702139', '4900', 'Weapon'), /*Hook Hand*/ +('1702138', '8800', 'Weapon'), /*Spanish Ham*/ +('1702141', '3800', 'Weapon'), /*My Buddy Max*/ +('1702140', '5200', 'Weapon'), /*Giant Orchid*/ +('1702143', '4900', 'Weapon'), /*Combat Syringe*/ +('1702142', '5200', 'Weapon'), /*Pink Angel Stick*/ +/*Page 14*/ +('1702129', '4900', 'Weapon'), /*Purple Shiner*/ +('1702128', '3200', 'Weapon'), /*Green Shiner*/ +('1702131', '4700', 'Weapon'), /*Pepe Beak*/ +('1702130', '5000', 'Weapon'), /*Red Shiner*/ +('1702133', '7600', 'Weapon'), /*Smackdown Fist */ +('1702132', '3400', 'Weapon'), /*Slime Stick*/ +('1702135', '6300', 'Weapon'), /*Vengence Claw*/ +('1702134', '5000', 'Weapon'), /*Serpent Staff */ +('1702121', '6000', 'Weapon'), /*Seal Pillow*/ +/*Page 15*/ +('1702120', '7400', 'Weapon'), /*Veamoth Sword*/ +('1702123', '6000', 'Weapon'), /*Forked Pork*/ +('1702122', '7600', 'Weapon'), /*Dragon's Fury*/ +('1702125', '3400', 'Weapon'), /*Heart Cane*/ +('1702124', '4000', 'Weapon'), /*Kitty*/ +('1702127', '5600', 'Weapon'), /*Water Gun*/ +('1702126', '6300', 'Weapon'), /*Blue Shiner */ +('1702113', '3200', 'Weapon'), /*Maoster Pole Arm*/ +('1702112', '3200', 'Weapon'), /*Celestial Wand*/ +/*Page 16*/ +('1702115', '5600', 'Weapon'), /*Red Rose*/ +('1702114', '8800', 'Weapon'), /*Wonky's Leaf*/ +('1702117', '5000', 'Weapon'), /*Jie 2*/ +('1702116', '5200', 'Weapon'), /*Jie 1*/ +('1702119', '7600', 'Weapon'), /*Sachiel Sword*/ +('1702118', '6300', 'Weapon'), /*Janus Sword*/ +('1702169', '6000', 'Weapon'), /*My Buddy Tina*/ +('1702168', '7600', 'Weapon'), /*Holiday Tree Ring*/ +('1702171', '4700', 'Weapon'), /*Party Popper*/ +/*Page 17*/ +('1702170', '3600', 'Weapon'), /*Electric Knuckle*/ +('1702173', '5000', 'Weapon'), /*Hessonite Saber*/ +('1702172', '5600', 'Weapon'), /*Bluebird*/ +('1702175', '6300', 'Weapon'), /*Hot Dog Link*/ +('1702174', '6400', 'Weapon'), /*Butterfly Staff*/ +('1702161', '7600', 'Weapon'), /*Dogged Out*/ +('1702160', '4700', 'Weapon'), /*Tiger Paw Knuckle*/ +('1702163', '4000', 'Weapon'), /*Hot Dog Fork*/ +('1702162', '4900', 'Weapon'), /*Koala Doll*/ +/*Page 18*/ +('1702165', '4000', 'Weapon'), /*My Buddy DJ*/ +('1702164', '3600', 'Weapon'), /*Bunny Nunchucks*/ +('1702167', '6000', 'Weapon'), /*Glow Fingers*/ +('1702166', '7400', 'Weapon'), /*Holiday Candy Cane*/ +('1702153', '3600', 'Weapon'), /*Crissagrim Blade*/ +('1702152', '8800', 'Weapon'), /*Flame Tongue*/ +('1702155', '3800', 'Weapon'), /*Shooting Star*/ +('1702154', '5600', 'Weapon'), /*Plasma Saber*/ +('1702157', '6300', 'Weapon'), /*Burning Marshmellow*/ +/*Page 19*/ +('1702156', '6000', 'Weapon'), /*Forked Turkey*/ +('1702159', '3400', 'Weapon'), /*Blackbeard's Knuckle*/ +('1702158', '4000', 'Weapon'), /*The Jackal*/ +('1702145', '3800', 'Weapon'), /*Bionic Claw*/ +('1702144', '5600', 'Weapon'), /*Broken Sword*/ +('1702147', '5600', 'Weapon'), /*Skull Axe*/ +('1702146', '3800', 'Weapon'), /*Skull Staff*/ +('1702149', '7400', 'Weapon'), /*Tania Sword*/ +('1702148', '8800', 'Weapon'), /*Moon Baton*/ +/*Page 20*/ +('1702151', '7100', 'Weapon'), /*Royal Oaken Staff*/ +('1702150', '5200', 'Weapon'), /*Mercury Sword*/ +('1702201', '5200', 'Weapon'), /*Bone Weapon*/ +('1702200', '6400', 'Weapon'), /*Plastic umbrella*/ +('1702203', '5000', 'Weapon'), /*Halloween Teddy*/ +('1702202', '3800', 'Weapon'), /*Baby Ellie*/ +('1702204', '8800', 'Weapon'), /*Japanese War Fan*/ +('1702207', '6300', 'Weapon'), /*Musical Violin*/ +('1702193', '7600', 'Weapon'), /*Towel Whip*/ +/*Page 21*/ +('1702195', '7100', 'Weapon'), /*MapleGirl Wand*/ +('1702197', '3600', 'Weapon'), /*Tsunami Wave*/ +('1702196', '4000', 'Weapon'), /*Fly Blue Bird*/ +('1702198', '3800', 'Weapon'), /*Bullseye Board*/ +('1702185', '8800', 'Weapon'), /*White & Yellow Seraphim*/ +('1702184', '3400', 'Weapon'), /*Aqua Seraphim*/ +('1702187', '6300', 'Weapon'), /*Patriot Seraphim*/ +('1702186', '4700', 'Weapon'), /*3rd Anniversary Weapon*/ +('1702189', '7400', 'Weapon'), /*Crabby*/ +/*Page 22*/ +('1702188', '6000', 'Weapon'), /*Pink Seraphim*/ +('1702191', '7600', 'Weapon'), /*Rainbow Sabre*/ +('1702190', '7100', 'Weapon'), /*Transparent Knuckle*/ +('1702177', '4700', 'Weapon'), /*Power Pesticide*/ +('1702179', '3400', 'Weapon'), /*Cloud 9 Pillow*/ +('1702178', '6300', 'Weapon'), /*MDAS Weapon*/ +('1702181', '6300', 'Weapon'), /*Picky Ducky*/ +('1702180', '7600', 'Weapon'), /*Dark Seraphim*/ +('1702183', '4900', 'Weapon'), /*Sunset Seraphim*/ +/*Page 23*/ +('1702182', '3600', 'Weapon'), /*Giant Pop with a Swirl*/ +('1702233', '4000', 'Weapon'), /*Rainbow Brush*/ +('1702232', '5200', 'Weapon'), /*My friend Gold Bulldog*/ +('1702235', '7100', 'Weapon'), /*Metallic Arm*/ +('1702234', '3400', 'Weapon'), /*Pluto Legend Hall*/ +('1702237', '4900', 'Weapon'), /*Inari the White Fox*/ +('1702236', '7600', 'Weapon'), /*Death Note*/ +('1702239', '8800', 'Weapon'), /*Holy Mystics*/ +('1702238', '3600', 'Weapon'), /*Soft Plush Dolphin*/ +/*Page 24*/ +('1702224', '3600', 'Weapon'), /*Transparent Weapon*/ +('1702226', '3800', 'Weapon'), /*My Buddy Whale*/ +('1702229', '7400', 'Weapon'), /*Demon Sickle*/ +('1702228', '8800', 'Weapon'), /*Choco Banana*/ +('1702231', '8800', 'Weapon'), /*We Care! Weapon*/ +('1702230', '6000', 'Weapon'), /*Popsicle Sword*/ +('1702217', '3800', 'Weapon'), /*Ducky Tube*/ +('1702216', '5200', 'Weapon'), /*Magic Heart Stick*/ +('1702219', '7100', 'Weapon'), /*Knockout Boxing Gloves*/ +/*Page 25*/ +('1702218', '6300', 'Weapon'), /*Dumbell Weapon*/ +('1702221', '3400', 'Weapon'), /*Mini Bean Propeller*/ +('1702220', '4700', 'Weapon'), /*Transparent Wand*/ +('1702223', '7600', 'Weapon'), /*Sparkler*/ +('1702222', '5200', 'Weapon'), /*Fanfare Firecracker*/ +('1702209', '3600', 'Weapon'), /*Rudolph Stick*/ +('1702208', '4000', 'Weapon'), /*Alligator Tube*/ +('1702211', '3600', 'Weapon'), /*Blizzard Stick*/ +('1702210', '3200', 'Weapon'), /*Santa Buddy*/ +/*Page 26*/ +('1702213', '6300', 'Weapon'), /*Heartbreak Sword*/ +('1702212', '6400', 'Weapon'), /*Galactic Legend*/ +('1702215', '5200', 'Weapon'), /*Boleadoras*/ +('1702214', '7600', 'Weapon'), /*Whip*/ +('1702264', '6300', 'Weapon'), /*Strawberry Basket*/ +('1702266', '5600', 'Weapon'), /*Sunshine Pan*/ +('1702269', '8800', 'Weapon'), /*Mini Dawn Warrior*/ +('1702268', '5600', 'Weapon'), /*Evan Wand*/ +('1702271', '7100', 'Weapon'), /*Mini Wind Archer*/ +/*Page 27*/ +('1702270', '6400', 'Weapon'), /*Mini Blaze Wizard*/ +('1702257', '4900', 'Weapon'), /*Mini Dawn Warrior*/ +('1702256', '6000', 'Weapon'), /*Mini Wind Archer*/ +('1702259', '3400', 'Weapon'), /*Mini Thunder Breaker*/ +('1702258', '7100', 'Weapon'), /*Mini Blaze Wizard*/ +('1702261', '3600', 'Weapon'), /*Cherry Blossom Weapon*/ +('1702260', '7100', 'Weapon'), /*Mini Night Walker*/ +('1702263', '3400', 'Weapon'), /*Kitty Spirit Weapon*/ +('1702262', '6300', 'Weapon'), /*Green Leaf Guards*/ +/*Page 28*/ +('1702249', '3400', 'Weapon'), /*Gosling Cushion*/ +('1702248', '5000', 'Weapon'), /*Rudolph*/ +('1702251', '8800', 'Weapon'), /*Saw Machine Gun*/ +('1702250', '3400', 'Weapon'), /*Steel Briefcase*/ +('1702253', '5000', 'Weapon'), /*Bunny Umbrella*/ +('1702252', '3400', 'Weapon'), /*Hunting Hawk*/ +('1702254', '3400', 'Weapon'), /*Rudolph*/ +('1702240', '5000', 'Weapon'), /*Holy Mystics*/ +('1702246', '3800', 'Weapon'), /*Ghost Weapon*/ +/*Page 29*/ +('1702296', '5600', 'Weapon'), /*Yo Yo*/ +('1702299', '4700', 'Weapon'), /*Chocolate Dipped Stick*/ +('1702301', '5000', 'Weapon'), /*Rabbit Weapon*/ + + + +/*Page 1*/ +('1702303', '3400', 'Weapon 2'), /*Baby Bottle*/ +('1702302', '5600', 'Weapon 2'), /*Alien Mug*/ +('1702289', '5000', 'Weapon 2'), /*Royal Marine Flag*/ +('1702288', '7600', 'Weapon 2'), /*Wild Hunter Crossbow*/ +('1702291', '7400', 'Weapon 2'), /*Elizabeth Fan*/ +('1702293', '4900', 'Weapon 2'), /*Suitcase*/ +('1702295', '6300', 'Weapon 2'), /*Playing Cards*/ +('1702281', '4000', 'Weapon 2'), /*Shining Feather Lord*/ +('1702280', '6400', 'Weapon 2'), /*Shining Feather Slayer*/ +/*Page 2*/ +('1702283', '4700', 'Weapon 2'), /*Shining Feather Knuckle*/ +('1702282', '6000', 'Weapon 2'), /*Shining Feather Bow*/ +('1702285', '4900', 'Weapon 2'), /*Handbag (Blue)*/ +('1702284', '4000', 'Weapon 2'), /*Handbag (Pink)*/ +('1702287', '7600', 'Weapon 2'), /*Battle Mage Staff*/ +('1702286', '6400', 'Weapon 2'), /*Marchosias*/ +('1702273', '5600', 'Weapon 2'), /*Mini Thunder Breaker*/ +('1702272', '4700', 'Weapon 2'), /*Mini Night Walker*/ +('1702275', '3200', 'Weapon 2'), /*Rainbow Umbrella*/ +/*Page 3*/ +('1702274', '8800', 'Weapon 2'), /*Dragon Lord Gloves*/ +('1702277', '3600', 'Weapon 2'), /*Test Pen*/ +('1702276', '5600', 'Weapon 2'), /*Rainbow Bow*/ +('1702279', '6000', 'Weapon 2'), /*Shining Feather Sword*/ +('1702278', '7400', 'Weapon 2'), /*King Crow Fan*/ +('1702329', '7400', 'Weapon 2'), /*Strawberry Delight*/ +('1702328', '5200', 'Weapon 2'), /*Pink Angel Syringe*/ +('1702330', '6300', 'Weapon 2'), /*Milky Way*/ +('1702333', '5000', 'Weapon 2'), /*Strawberry Sword*/ +/*Page 4*/ +('1702335', '4000', 'Weapon 2'), /*Alchemist Potion Weapon*/ +('1702334', '7100', 'Weapon 2'), /*Crystal Fantasia Wand*/ +('1702321', '5600', 'Weapon 2'), /*Dark Magenta Sabre*/ +('1702320', '4900', 'Weapon 2'), /*Slate Thunder Sabre*/ +('1702323', '5000', 'Weapon 2'), /*Ombra & Luce Sabre*/ +('1702322', '3600', 'Weapon 2'), /*Soild Black Sabre*/ +('1702324', '3200', 'Weapon 2'), /*Shock Wave*/ +('1702313', '3600', 'Weapon 2'), /*Orange Seraphim*/ +('1702315', '6400', 'Weapon 2'), /*Stellar Seraphim*/ +/*Page 5*/ +('1702314', '6400', 'Weapon 2'), /*Heaven's Seraphim*/ +('1702317', '7100', 'Weapon 2'), /*Bloody Ruby Sabre*/ +('1702316', '3800', 'Weapon 2'), /*Dynamic Seraphim*/ +('1702319', '3800', 'Weapon 2'), /*Evergreen Sabre*/ +('1702318', '4000', 'Weapon 2'), /*Twilight Sabre*/ +('1702305', '3200', 'Weapon 2'), /*Carrot*/ +('1702304', '7600', 'Weapon 2'), /*Funny Punch Yo-yo*/ +('1702306', '7100', 'Weapon 2'), /*Burning Breeze Fan*/ +('1702309', '3400', 'Weapon 2'), /*Rainbow Sparkle*/ +/*Page 6*/ +('1702308', '3400', 'Weapon 2'), /*Spring Blossoms*/ +('1702311', '3200', 'Weapon 2'), /*MSE 4 Years & Unstoppable Star*/ +('1702310', '3200', 'Weapon 2'), /*6th Anniversary Party Wand*/ +('1702361', '6400', 'Weapon 2'), /*Hunter Hawk*/ +('1702360', '3600', 'Weapon 2'), /*Coin Sword*/ +('1702363', '7600', 'Weapon 2'), /*Crystalline Sheen*/ +('1702362', '7400', 'Weapon 2'), /*Pink Bean Buddy*/ +('1702365', '3800', 'Weapon 2'), /*Tedimus Beartaculous*/ +('1702364', '7400', 'Weapon 2'), /*Dragon Familiar*/ +/*Page 7*/ +('1702367', '5200', 'Weapon 2'), /*Rose Butterwand*/ +('1702366', '5600', 'Weapon 2'), /*Shark-sicle*/ +('1702352', '4700', 'Weapon 2'), /*Magic Herb Teaspoon*/ +('1702355', '4700', 'Weapon 2'), /*Lucky Weapon*/ +('1702357', '6300', 'Weapon 2'), /*Starfall Magic Square*/ +('1702356', '3800', 'Weapon 2'), /*Legendary Weapon*/ +('1702359', '7400', 'Weapon 2'), /*Blue Angel Syringe*/ +('1702358', '4700', 'Weapon 2'), /*Pink Bean Buddy*/ +('1702345', '6400', 'Weapon 2'), /*Fierce Cat*/ +/*Page 8*/ +('1702344', '5200', 'Weapon 2'), /*Boom Box*/ +('1702347', '4700', 'Weapon 2'), /*Fortune Flash*/ +('1702346', '4700', 'Weapon 2'), /*Lucky Pouch Weapon*/ +('1702348', '4700', 'Weapon 2'), /*Snowflake Rod*/ +('1702351', '7400', 'Weapon 2'), /*Tedtacular Bearingtons*/ +('1702350', '7100', 'Weapon 2'), /*Chocolatier Stick*/ +('1702337', '4900', 'Weapon 2'), /*Lightning Soul*/ +('1702336', '4900', 'Weapon 2'), /*Lord Tempest*/ +('1702341', '4000', 'Weapon 2'), /*Sweet Lollipop*/ +/*Page 9*/ +('1702340', '4900', 'Weapon 2'), /*Rabbit in a Hat*/ +('1702342', '8800', 'Weapon 2'), /*Orchid's Bunny Doll*/ +('1702393', '4700', 'Weapon 2'), /*Slither Style Snake Sword*/ +('1702392', '7100', 'Weapon 2'), /*Dark Devil Weapon*/ +('1702395', '5200', 'Weapon 2'), /*Baller Cane*/ +('1702394', '5200', 'Weapon 2'), /*Golden Holy Cup*/ +('1702397', '5200', 'Weapon 2'), /*Twinkle Sparkle*/ +('1702399', '7600', 'Weapon 2'), /*Neo Light Sword*/ +('1702398', '3600', 'Weapon 2'), /*Fairy Lamp*/ +/*Page 10*/ +('1702385', '4000', 'Weapon 2'), /*[MS Special] Hunting Hawk*/ +('1702387', '7600', 'Weapon 2'), /*[MS Special] Dragon Familiar*/ +('1702386', '5600', 'Weapon 2'), /*[MS Special] Crystalline Sheen*/ +('1702389', '4000', 'Weapon 2'), /*[MS Special] Fly Blue Bird*/ +('1702388', '7400', 'Weapon 2'), /*[MS Special] Tedimus Beartaculous*/ +('1702390', '5600', 'Weapon 2'), /*Halloween Leopard Umbrella*/ +('1702377', '5000', 'Weapon 2'), /*Strawberry Delight*/ +('1702376', '3800', 'Weapon 2'), /*Onmyouji Fan*/ +('1702379', '4000', 'Weapon 2'), /*Arabian Magic Lamp*/ +/*Page 11*/ +('1702381', '7600', 'Weapon 2'), /*Twin Crescent Blade*/ +('1702380', '3400', 'Weapon 2'), /*Azure Crystal Crusher*/ +('1702382', '3200', 'Weapon 2'), /*Persimmon Branch*/ +('1702368', '7600', 'Weapon 2'), /*Iris Butterwand*/ +('1702371', '6300', 'Weapon 2'), /*Pimp Stick*/ +('1702372', '6300', 'Weapon 2'), /*Pimp Chalice*/ +('1702375', '6400', 'Weapon 2'), /*Atlantis*/ +('1702374', '3600', 'Weapon 2'), /*Bladed Falcon's Katana*/ +('1702424', '7400', 'Weapon 2'), /*Stylish Iron*/ +/*Page 12*/ +('1702427', '7400', 'Weapon 2'), /*Ombra & Luce Sabre*/ +('1702426', '3800', 'Weapon 2'), /*Lord Tempest*/ +('1702429', '6000', 'Weapon 2'), /*Heaven's Seraphim*/ +('1702428', '5000', 'Weapon 2'), /*Bloody Ruby Sabre*/ +('1702431', '7100', 'Weapon 2'), /*GM Nori's Syringe*/ +('1702430', '7400', 'Weapon 2'), /*Dynamic Seraphim*/ +('1702417', '6300', 'Weapon 2'), /*Blue Rose Parasol*/ +('1702416', '7400', 'Weapon 2'), /*Lord of the Carrots*/ +('1702419', '3800', 'Weapon 2'), /*Pink Bean Buddy*/ +/*Page 13*/ +('1702418', '6300', 'Weapon 2'), /*Hunter Hawk*/ +('1702421', '5000', 'Weapon 2'), /*Dragon Familiar*/ +('1702420', '6300', 'Weapon 2'), /*Crystalline Sheen*/ +('1702423', '5000', 'Weapon 2'), /*Goblin Fire*/ + +('1702409', '4700', 'Weapon 2'), /*Hilla Weapon*/ +('1702408', '8800', 'Weapon 2'), /*Francis's Puppet*/ +('1702411', '3800', 'Weapon 2'), /*Mini Blaze Wizard*/ +('1702410', '4700', 'Weapon 2'), /*Mini Dawn Warrior*/ +/*Page 14*/ +('1702413', '3200', 'Weapon 2'), /*Mini Night Walker*/ +('1702412', '7600', 'Weapon 2'), /*Mini Wind Archer*/ +('1702415', '8800', 'Weapon 2'), /*Dreamy Candy Pillow*/ +('1702414', '6400', 'Weapon 2'), /*Mini Thunder Breaker*/ +('1702401', '3800', 'Weapon 2'), /*Rabbit with Carrot*/ +('1702400', '6000', 'Weapon 2'), /*Lotus's Bunny Doll*/ +('1702403', '4000', 'Weapon 2'), /*Sherlock's Magnifier*/ +('1702402', '3800', 'Weapon 2'), /*Stylish Iron*/ +('1702405', '4000', 'Weapon 2'), /*Starlight Heart Scepter*/ +/*Page 15*/ +('1702404', '5600', 'Weapon 2'), /*Muffin*/ +('1702407', '8800', 'Weapon 2'), /*Dandelion Seed Weapon*/ +('1702406', '7400', 'Weapon 2'), /*Starfall Magic Square*/ +('1702457', '4900', 'Weapon 2'), /*Fantastic Ice Pop*/ +('1702456', '3600', 'Weapon 2'), /*Fairy Pico*/ +('1702459', '3200', 'Weapon 2'), /*Cotton Candy*/ +('1702458', '3400', 'Weapon 2'), /*Fireworks Fan*/ +('1702461', '3800', 'Weapon 2'), /*Chicky-Chicky Boom*/ +('1702460', '3200', 'Weapon 2'), /*Star Weapon*/ +/*Page 16*/ +('1702462', '3800', 'Weapon 2'), /*Fantasy Butterfly Flower*/ +('1702449', '8800', 'Weapon 2'), /*Strawberry Delight*/ +('1702448', '5600', 'Weapon 2'), /*Funny Punch Yo-yo*/ +('1702451', '6400', 'Weapon 2'), /*Superstar Microphone*/ +('1702450', '4000', 'Weapon 2'), /*Tedimus Beartaculous*/ +('1702453', '6400', 'Weapon 2'), /*Astral Bolt*/ +('1702455', '7100', 'Weapon 2'), /*RED Paint Bucket*/ +('1702454', '5200', 'Weapon 2'), /*Seal Wave Snuggler*/ +('1702443', '4000', 'Weapon 2'), /*Puppeteer's Promise*/ +/*Page 17*/ +('1702442', '7100', 'Weapon 2'), /*Baseball Bat*/ +('1702445', '4700', 'Weapon 2'), /*Detective Glass*/ +('1702444', '3400', 'Weapon 2'), /*Fermata*/ +('1702446', '7100', 'Weapon 2'), /*Sea Otter Slammer*/ +('1702433', '8800', 'Weapon 2'), /*Salamander*/ +('1702437', '4900', 'Weapon 2'), /*Spring Blossoms*/ +('1702436', '3600', 'Weapon 2'), /*Galactic Legend*/ +('1702439', '6400', 'Weapon 2'), /*Evergreen Sabre*/ +('1702438', '6400', 'Weapon 2'), /*Stellar Seraphim*/ +/*Page 18*/ +('1702489', '5000', 'Weapon 2'), /*Sweet Chocolate Fondue Stick*/ +('1702488', '6400', 'Weapon 2'), /*Pony's Carrot*/ +('1702491', '3600', 'Weapon 2'), /*Bubble Cleaner*/ +('1702492', '3400', 'Weapon 2'), /*Red Lantern*/ +('1702480', '5200', 'Weapon 2'), /*Celena*/ +('1702485', '4900', 'Weapon 2'), /*Goodie Bundle*/ +('1702487', '4900', 'Weapon 2'), /*Red Flower*/ +('1702486', '3200', 'Weapon 2'), /*Fluttering Camellia Flower*/ +('1702473', '7600', 'Weapon 2'), /*Shadow Executor*/ +/*Page 19*/ +('1702472', '7400', 'Weapon 2'), /*Vampire Phantom's Fate*/ +('1702475', '3400', 'Weapon 2'), /*Maha*/ +('1702474', '5200', 'Weapon 2'), /*Evan Wand*/ +('1702477', '3200', 'Weapon 2'), /*Evil Skull*/ +('1702476', '4700', 'Weapon 2'), /*Sweet Snake*/ +('1702479', '3600', 'Weapon 2'), /*バットソード*/ +('1702478', '8800', 'Weapon 2'), /*Cat Soul*/ +('1702464', '3200', 'Weapon 2'), /*Sparkling Buddy*/ +('1702467', '4900', 'Weapon 2'), /*Cotton Candy Cloud*/ +/*Page 20*/ +('1702466', '7100', 'Weapon 2'), /*Mint Chocolatier Stick*/ +('1702469', '5000', 'Weapon 2'), /*Arachne*/ +('1702468', '6300', 'Weapon 2'), /*Soft Chocolate Fondue Scepter*/ +('1702471', '6300', 'Weapon 2'), /*Dark Devil Weapon*/ +('1702470', '6400', 'Weapon 2'), /*Free Spirit*/ +('1702521', '3200', 'Weapon 2'), /*Blue Swallow*/ +('1702523', '4700', 'Weapon 2'), /*Sunny Day Rainbow*/ +('1702522', '5200', 'Weapon 2'), /*Viking Sword for Transformation*/ +('1702525', '4700', 'Weapon 2'), /*Final Ingredient*/ +/*Page 21*/ +('1702524', '3400', 'Weapon 2'), /*Plump Tomato*/ +('1702526', '3200', 'Weapon 2'), /*Rifle Blade*/ +('1702512', '4000', 'Weapon 2'), /*Crown Rod*/ +('1702519', '8800', 'Weapon 2'), /*Pink Antique Parasol*/ +('1702505', '5600', 'Weapon 2'), /*Breezy Bamboo*/ +('1702504', '5600', 'Weapon 2'), /*Frozen Heart*/ +('1702507', '3200', 'Weapon 2'), /*Contemporary Chic Fan*/ +('1702506', '6000', 'Weapon 2'), /*Perfect Cooking */ +('1702509', '8800', 'Weapon 2'), /*Sunny Rainbow */ +/*Page 22*/ +('1702510', '5200', 'Weapon 2'), /*Rabbit and Bear Flashlight*/ +('1702497', '6400', 'Weapon 2'), /*Sparkling Luck Sack*/ +('1702499', '4700', 'Weapon 2'), /*Guardian Scepter*/ +('1702501', '7400', 'Weapon 2'), /*Flower Dance*/ +('1702503', '6400', 'Weapon 2'), /*Bubbling Shot*/ +('1702502', '6400', 'Weapon 2'), /*Cane From the Stars*/ +('1702553', '3200', 'Weapon 2'), /*Dangerous Medicine Bottle*/ +('1702555', '3400', 'Weapon 2'), /*Noble Lady's Black Fan*/ +('1702554', '3600', 'Weapon 2'), /*Scary Huge Hand*/ +/*Page 23*/ +('1702557', '6400', 'Weapon 2'), /*Duster*/ +('1702556', '3800', 'Weapon 2'), /*Blade*/ +('1702559', '3600', 'Weapon 2'), /*Puppy Pal Weapon (White)*/ +('1702547', '3800', 'Weapon 2'), /*Sweet Persimmon*/ +('1702549', '7400', 'Weapon 2'), /*Pom-pom Power*/ +('1702551', '7400', 'Weapon 2'), /*Korean Thanksgiving Persimmon Branch*/ +('1702550', '7600', 'Weapon 2'), /*Peach Trio*/ +('1702538', '7400', 'Weapon 2'), /*Dewdrop Lantern*/ +('1702541', '6000', 'Weapon 2'), /*Perfect Baby*/ +/*Page 24*/ +('1702540', '6000', 'Weapon 2'), /*Here's the Flashlight!*/ +('1702529', '5000', 'Weapon 2'), /*Shadow Lamp*/ +('1702528', '3400', 'Weapon 2'), /*Xylophone Melody*/ +('1702530', '6400', 'Weapon 2'), /*Sweet Summer Hammer*/ +('1702533', '7600', 'Weapon 2'), /*Photo-op*/ +('1702535', '3600', 'Weapon 2'), /*Hula Hula Penglyn*/ +('1702534', '4000', 'Weapon 2'), /*Baby Paci*/ +('1702585', '5200', 'Weapon 2'), /*Universal Transparent Weapon*/ +('1702584', '4700', 'Weapon 2'), /*Cutie Puppy*/ +/*Page 25*/ +('1702587', '6300', 'Weapon 2'), /*Rockin' Guitar*/ +('1702586', '4900', 'Weapon 2'), /*Dreaming Dandelion*/ +('1702589', '6000', 'Weapon 2'), /*Fairy Blossom*/ +('1702588', '8800', 'Weapon 2'), /*Black Cat Plush*/ +('1702591', '4900', 'Weapon 2'), /*Grand Romance*/ +('1702590', '3800', 'Weapon 2'), /*자이언트 돼지바*/ +('1702577', '7100', 'Weapon 2'), /*Lalala Goldfish Fishing Net*/ +('1702576', '8800', 'Weapon 2'), /*Ground Pounder*/ +('1702579', '3600', 'Weapon 2'), /*Crystal Cat Weapon*/ +/*Page 26*/ +('1702581', '4000', 'Weapon 2'), /*Sweetie Bros*/ +('1702583', '7400', 'Weapon 2'), /*Kitty Pringles*/ +('1702571', '3600', 'Weapon 2'), /*Top Snow Shovel*/ +('1702570', '7100', 'Weapon 2'), /*Fluffy Snow Bunny*/ +('1702572', '3200', 'Weapon 2'), /*Red Rose Umbrella*/ +('1702575', '6400', 'Weapon 2'), /*Lovely Chocolate Basket*/ +('1702574', '8800', 'Weapon 2'), /*Beast Trainer*/ +('1702561', '6000', 'Weapon 2'), /*Sweet Fork Cake*/ +('1702560', '3400', 'Weapon 2'), /*Puppy Pal Weapon (Brown)*/ +/*Page 27*/ +('1702562', '4000', 'Weapon 2'), /*Winter Snowman*/ +('1702565', '4700', 'Weapon 2'), /*Death's Scythe*/ +('1702564', '3800', 'Weapon 2'), /*Funny Punch Yo-yo*/ +('1702567', '4700', 'Weapon 2'), /*Rawrin' Tiger Weapon*/ +('1702566', '5200', 'Weapon 2'), /*Rammy Scepter*/ +('1702617', '5000', 'Weapon 2'), /*Lotus Fantasy*/ +('1702616', '5000', 'Weapon 2'), /*Ducky Candy Bar*/ +('1702619', '6000', 'Weapon 2'), /*Musical Green Onion*/ +('1702621', '8800', 'Weapon 2'), /*Mystery Dice*/ +/*Page 28*/ +('1702620', '3800', 'Weapon 2'), /*Mystery Dice*/ +('1702623', '6000', 'Weapon 2'), /*Today Jay*/ +('1702608', '5200', 'Weapon 2'), /*Marine Stripe Umbrella*/ +('1702611', '3600', 'Weapon 2'), /*Duckling Cross Bag Weapon*/ +('1702613', '6300', 'Weapon 2'), /*Crown Rod*/ +('1702612', '7400', 'Weapon 2'), /*Fairy Pico*/ +('1702614', '5000', 'Weapon 2'), /*Baseball Bat*/ +('1702601', '5200', 'Weapon 2'), /*Bacon*/ +('1702600', '3200', 'Weapon 2'), /*Pasta*/ +/*Page 29*/ +('1702603', '3400', 'Weapon 2'), /*Rib Steak*/ +('1702602', '7100', 'Weapon 2'), /*Hamburger*/ +('1702605', '8800', 'Weapon 2'), /*Donut*/ + + + +/*Page 1*/ +('1702604', '6400', 'Weapon 3'), /*Parfait*/ +('1702607', '8800', 'Weapon 3'), /*Cheese 'n' Carrots Stick*/ +('1702606', '4900', 'Weapon 3'), /*Squid*/ +('1702593', '4000', 'Weapon 3'), /*Winding Sky Bamboo*/ +('1702595', '6400', 'Weapon 3'), /*Mint Kitty Tea Time*/ +('1702594', '5000', 'Weapon 3'), /*Sweepy Orchid*/ +('1702597', '7100', 'Weapon 3'), /*Rainbow Seashell*/ +('1702599', '3600', 'Weapon 3'), /*Hoya Roar*/ +('1702649', '4900', 'Weapon 3'), /*Shining Rod of Equilibrium*/ +/*Page 2*/ +('1702648', '6300', 'Weapon 3'), /*Maha the Polearm*/ +('1702651', '3400', 'Weapon 3'), /*Forgotten Hero's Knuckle*/ +('1702650', '7600', 'Weapon 3'), /*Shining Rod of Equilibrium*/ +('1702653', '8800', 'Weapon 3'), /*Transparent Arm Cannon*/ +('1702652', '6000', 'Weapon 3'), /*Forgotten Hero's Knuckle*/ +('1702655', '5200', 'Weapon 3'), /*Lil Mercedes*/ +('1702654', '6300', 'Weapon 3'), /*Mr. Hot Spring Kitty*/ +('1702641', '5200', 'Weapon 3'), /*Dragon Master's Wand*/ +('1702640', '4700', 'Weapon 3'), /*Bunny Snowman Attacker*/ +/*Page 3*/ +('1702643', '5000', 'Weapon 3'), /*Elven Monarch's Dual Bowguns*/ +('1702642', '6300', 'Weapon 3'), /*Dragon Master's Wand*/ +('1702645', '3800', 'Weapon 3'), /*Phantom's Cane*/ +('1702644', '5600', 'Weapon 3'), /*Elven Monarch's Dual Bowguns*/ +('1702647', '4700', 'Weapon 3'), /*Maha the Polearm*/ +('1702646', '8800', 'Weapon 3'), /*Phantom's Cane*/ +('1702633', '4900', 'Weapon 3'), /*Banana Monkey Attacker*/ +('1702632', '4000', 'Weapon 3'), /*Zakum Arms*/ +('1702635', '7600', 'Weapon 3'), /*Mr. Orlov Coin Sword*/ +/*Page 4*/ +('1702634', '6400', 'Weapon 3'), /*Maple Zombies*/ +('1702637', '7100', 'Weapon 3'), /*Hard Carrier Suitcase*/ +('1702636', '7400', 'Weapon 3'), /*Arctic Narwhal Pillow*/ +('1702639', '6400', 'Weapon 3'), /*Kitty Bangle*/ +('1702638', '3800', 'Weapon 3'), /*Blue Marine Thirst For Knowledge*/ +('1702625', '6300', 'Weapon 3'), /*Sparking Bluebird*/ +('1702624', '6000', 'Weapon 3'), /*Master Time*/ +('1702627', '5000', 'Weapon 3'), /*Sakura Sword*/ +('1702626', '5200', 'Weapon 3'), /*British Handbag Weapon*/ +/*Page 5*/ +('1702629', '5200', 'Weapon 3'), /*Vintage Cellphone*/ +('1702628', '7100', 'Weapon 3'), /*Farmer's Glorious Egg Stick*/ +('1702631', '3200', 'Weapon 3'), /*Bloody Fairytale*/ +('1702630', '5200', 'Weapon 3'), /*Striking Lantern*/ +('1702681', '3800', 'Weapon 3'), /*Flask of Life*/ +('1702680', '3200', 'Weapon 3'), /*Camellia's Sword*/ +('1702682', '3800', 'Weapon 3'), /*Triple Fish Skewer*/ +('1702685', '7600', 'Weapon 3'), /*Red Phoenix Weapon*/ +('1702684', '4900', 'Weapon 3'), /*Blue Phoenix Weapon*/ +/*Page 6*/ +('1702687', '7400', 'Weapon 3'), /*Strawberry Bon Bon*/ +('1702686', '8800', 'Weapon 3'), /*Sweet Pig Weapon*/ +('1702673', '3400', 'Weapon 3'), /*Monkey Banana*/ +('1702672', '7400', 'Weapon 3'), /*Duckling Cross Bag*/ +('1702675', '5600', 'Weapon 3'), /*Smile Seed Weapon*/ +('1702677', '3200', 'Weapon 3'), /*Lil Damien*/ +('1702676', '4700', 'Weapon 3'), /*Muse Crystal*/ +('1702679', '6400', 'Weapon 3'), /*Playful Black Nyanya*/ +('1702678', '7600', 'Weapon 3'), /*Lil Alicia*/ +/*Page 7*/ +('1702665', '3400', 'Weapon 3'), /*Lil Evan*/ +('1702667', '6000', 'Weapon 3'), /*Lil Phantom*/ +('1702666', '3600', 'Weapon 3'), /*Lil Aran*/ +('1702668', '3400', 'Weapon 3'), /*Winter Deer Tambourine*/ +('1702671', '3400', 'Weapon 3'), /*Magic Tome Weapon*/ +('1702657', '3600', 'Weapon 3'), /*Lil Shade*/ +('1702656', '7400', 'Weapon 3'), /*Lil Luminous*/ +('1702659', '3400', 'Weapon 3'), /*Timemaster*/ +('1702658', '4700', 'Weapon 3'), /*Holiday Tree Ring*/ +/*Page 8*/ +('1702660', '7600', 'Weapon 3'), /*Snowman Weapon*/ +('1702713', '4000', 'Weapon 3'), /*Bichon Paw Weapon*/ +('1702712', '4000', 'Weapon 3'), /*Moon Bunny Bell Weapon*/ +('1702715', '6000', 'Weapon 3'), /*Lachelein Fantasia*/ +('1702714', '3200', 'Weapon 3'), /*Witch's Staff*/ +('1702717', '7400', 'Weapon 3'), /*Glow Stick of Love*/ +('1702716', '8800', 'Weapon 3'), /*Dew Parasol*/ +('1702719', '4900', 'Weapon 3'), /*Flutter Flower Doll Weapon*/ +('1702718', '3800', 'Weapon 3'), /*Shadow Warrior's Sword*/ +/*Page 9*/ +('1702705', '3400', 'Weapon 3'), /*Teddy Tube Wave*/ +('1702704', '7400', 'Weapon 3'), /*Blue Marine Knowledge*/ +('1702707', '7400', 'Weapon 3'), /*Pony's Carrot*/ +('1702706', '4900', 'Weapon 3'), /*Ice Cream Scream*/ +('1702709', '3800', 'Weapon 3'), /*High-five Neon V*/ +('1702708', '3600', 'Weapon 3'), /*Heaven's Seraphim*/ +('1702711', '4000', 'Weapon 3'), /*Owl Spellbook*/ +('1702710', '3200', 'Weapon 3'), /*Kamaitachi's Sickle*/ +('1702697', '7100', 'Weapon 3'), /*Cup Cat Weapon*/ +/*Page 10*/ +('1702696', '8800', 'Weapon 3'), /*Silver Wolf*/ +('1702699', '6000', 'Weapon 3'), /*Colorful Beach Ball*/ +('1702698', '6000', 'Weapon 3'), /*Blaster Weapon*/ +('1702701', '3200', 'Weapon 3'), /*Dragonmare Ninth Sword*/ + +('1702703', '3200', 'Weapon 3'), /*Natural Ink Painting*/ +('1702702', '6300', 'Weapon 3'), /*Porong Fan*/ +('1702689', '6300', 'Weapon 3'), /*Fairy Flora*/ +('1702688', '7400', 'Weapon 3'), /*Superstar M*/ +/*Page 11*/ +('1702691', '4900', 'Weapon 3'), /*Fairy Flora*/ +('1702690', '5600', 'Weapon 3'), /*Noble Maple Rod*/ +('1702693', '7600', 'Weapon 3'), /*Bubble Leaf Weapon*/ +('1702692', '6300', 'Weapon 3'), /*Chicken Cutie Weapon*/ +('1702695', '5000', 'Weapon 3'), /*Overly Cute Puppy*/ +('1702694', '5000', 'Weapon 3'), /*Pastel Rose*/ +('1702745', '7100', 'Weapon 3'), /*Spring Fairy Flower*/ +('1702744', '3800', 'Weapon 3'), /*Starlight Lantern*/ +('1702747', '5000', 'Weapon 3'), /*Baby Magpie Buddy*/ +/*Page 12*/ +('1702746', '3600', 'Weapon 3'), /*Dinofrog*/ +('1702749', '3800', 'Weapon 3'), /*Love Letter Book Bag*/ +('1702748', '4900', 'Weapon 3'), /*Guinea Pig Weapon*/ +('1702750', '5600', 'Weapon 3'), /*Strawberry Fitness Jump Rope*/ +('1702737', '4700', 'Weapon 3'), /*Frost Staff*/ +('1702736', '3400', 'Weapon 3'), /*Frost Staff*/ +('1702740', '6400', 'Weapon 3'), /*Go Yellow Chicks!*/ +('1702742', '7600', 'Weapon 3'), /*Nova Enchanter Staff*/ +('1702729', '5600', 'Weapon 3'), /*Deep-fried Drumstick*/ +/*Page 13*/ +('1702728', '6000', 'Weapon 3'), /*Sweet Jelly Paw*/ +('1702731', '3400', 'Weapon 3'), /*Snowrabbit*/ +('1702733', '4000', 'Weapon 3'), /*Monk Drum*/ +('1702732', '3800', 'Weapon 3'), /*Rabbit in a Hat*/ +('1702735', '3600', 'Weapon 3'), /*Rose Constellation*/ +('1702734', '6000', 'Weapon 3'), /*Maple 5000-Day Flag*/ +('1702721', '7100', 'Weapon 3'), /*죽음의 키읔*/ +('1702720', '7600', 'Weapon 3'), /*Maple M Playphone*/ +('1702723', '4700', 'Weapon 3'), /*Power Porker Trio*/ +/*Page 14*/ +('1702722', '3400', 'Weapon 3'), /*Winter Bunny*/ +('1702725', '8800', 'Weapon 3'), /*Necromancer*/ +('1702724', '3400', 'Weapon 3'), /*Undead Teddy*/ +('1702727', '3600', 'Weapon 3'), /*Rabbit Soap Shooter*/ +('1702726', '3600', 'Weapon 3'), /*Pumpkin Star*/ +('1702777', '5000', 'Weapon 3'), /*Refreshing Lemon Weapon*/ +('1702776', '3800', 'Weapon 3'), /*Water Granos and Weapon*/ +('1702779', '8800', 'Weapon 3'), /*Fluffy Teddy Candy*/ +('1702778', '5000', 'Weapon 3'), /*Summer Flower Fairy Weapon*/ +/*Page 15*/ +('1702781', '4000', 'Weapon 3'), /*Fish on a Stick*/ +('1702780', '8800', 'Weapon 3'), /*Bitten Donut Ring*/ +('1702783', '4900', 'Weapon 3'), /*Rabble Rouser Weapon*/ +('1702782', '5000', 'Weapon 3'), /*Surf's Up*/ +('1702769', '5200', 'Weapon 3'), /*Maple Galaxy Laser Gun*/ +('1702768', '8800', 'Weapon 3'), /*Mallow Fluff on a Stick*/ +('1702771', '4900', 'Weapon 3'), /*Banana Shake*/ +('1702770', '8800', 'Weapon 3'), /*Fancy Feather Quill*/ +('1702773', '8800', 'Weapon 3'), /*Eagle Weapon*/ +/*Page 16*/ +('1702772', '3400', 'Weapon 3'), /*Carrot Cake Shake*/ +('1702775', '3400', 'Weapon 3'), /*Watermelon Slice*/ +('1702774', '4900', 'Weapon 3'), /*Ocean Hydrangea*/ +('1702761', '4000', 'Weapon 3'), /*Sproutbrella*/ +('1702760', '6300', 'Weapon 3'), /*Hamster Devotion!*/ +('1702765', '3800', 'Weapon 3'), /*Soda Pop Weapon*/ +('1702764', '3400', 'Weapon 3'), /*Iron Mace Uniform Weapon*/ +('1702767', '7600', 'Weapon 3'), /*Mustachio on a Stick*/ +('1702766', '7600', 'Weapon 3'), /*Diamond Brilliance*/ +/*Page 17*/ +('1702753', '3800', 'Weapon 3'), /*Pandora Weapon*/ +('1702752', '3600', 'Weapon 3'), /*Silver Flower Child Weapon*/ +('1702755', '5600', 'Weapon 3'), /*Sweet Baguette*/ +('1702757', '5200', 'Weapon 3'), /*Cygnus's Guard*/ +('1702756', '3400', 'Weapon 3'), /*Starlit Dreamweaver*/ +('1702759', '4700', 'Weapon 3'), /*Charming Cherry Pop*/ +('1702758', '5200', 'Weapon 3'), /*Pop Star Mic Skin*/ +('1702809', '3200', 'Weapon 3'), /*Bunny Marker*/ +('1702808', '7600', 'Weapon 3'), /*Iron Mace*/ +/*Page 18*/ +('1702811', '7600', 'Weapon 3'), /*Luminous Sea*/ +('1702810', '7600', 'Weapon 3'), /*Soft Snow*/ +('1702813', '4000', 'Weapon 3'), /*Royal Guard Weapon*/ +('1702812', '7100', 'Weapon 3'), /*Lunar New Year VIP Weapon*/ +('1702815', '4700', 'Weapon 3'), /*Plum Blossom*/ +('1702814', '6300', 'Weapon 3'), /*Rainbow Dreamcloud Weapon*/ +('1702801', '3600', 'Weapon 3'), /*Busy Penguin Bubble*/ +('1702800', '5600', 'Weapon 3'), /*Strawberry Fitness Jump Rope*/ +('1702803', '3400', 'Weapon 3'), /*Fish Bubbles Weapon*/ +/*Page 19*/ +('1702802', '4900', 'Weapon 3'), /*Cadena Vendetta Chain*/ +('1702805', '8800', 'Weapon 3'), /*Party Scepter*/ +('1702804', '3800', 'Weapon 3'), /*Take Me Too!*/ +('1702807', '6300', 'Weapon 3'), /*Steamed Sweet*/ +('1702806', '8800', 'Weapon 3'), /*Glowing Pumpkin Basket*/ +('1702793', '7400', 'Weapon 3'), /*Eggplant of Doom*/ +('1702792', '6300', 'Weapon 3'), /*Blood Oath Weapon*/ +('1702795', '5000', 'Weapon 3'), /*Enchanting Flute*/ +('1702794', '4900', 'Weapon 3'), /*Cattail Cutlass*/ +/*Page 20*/ +('1702797', '4000', 'Weapon 3'), /*Meow Weapon*/ +('1702796', '6300', 'Weapon 3'), /*Organic Rice*/ +('1702799', '4700', 'Weapon 3'), /*Small Formosan Deer Weapon*/ +('1702798', '6000', 'Weapon 3'), /*Christmas Bunny Weapon*/ +('1702785', '3200', 'Weapon 3'), /*Cursed Bat Weapon*/ +('1702784', '6400', 'Weapon 3'), /*Feather Messenger Weapon*/ +('1702787', '4700', 'Weapon 3'), /*Shadow Tactician Weapon*/ +('1702786', '3200', 'Weapon 3'), /*Blood Oath Weapon*/ +('1702789', '7600', 'Weapon 3'), /*Pupmallow Pop Weapon*/ +/*Page 21*/ +('1702788', '3800', 'Weapon 3'), /*Cat Cafe Weapon*/ +('1702791', '5200', 'Weapon 3'), /*Master of Hearts*/ +('1702790', '7100', 'Weapon 3'), /*Golden Eventides*/ +('1702841', '6000', 'Weapon 3'), /*Erda Weapon*/ +('1702840', '4000', 'Weapon 3'), /*Happy Ghost Weapon*/ +('1702842', '3600', 'Weapon 3'), /*Navy Telescope Weapon*/ +('1702845', '6300', 'Weapon 3'), /*Your Good Side*/ +('1702844', '6000', 'Weapon 3'), /*Antoine Pocket Watch*/ +('1702847', '3400', 'Weapon 3'), /*Cloudy Paper Plane Weapon*/ +/*Page 22*/ +('1702846', '6300', 'Weapon 3'), /*Summer Story Weapon*/ +('1702833', '5000', 'Weapon 3'), /*Oceanic Requiem Weapon*/ +('1702832', '4900', 'Weapon 3'), /*Spring Flower Deer*/ +('1702835', '4900', 'Weapon 3'), /*Uglee*/ +('1702834', '4700', 'Weapon 3'), /*Electric Weapon*/ +('1702837', '3800', 'Weapon 3'), /*Candy Angel*/ +('1702836', '8800', 'Weapon 3'), /*Maple Gumshoe's Tablet*/ +('1702839', '5000', 'Weapon 3'), /*Bichon Bam*/ +('1702838', '3200', 'Weapon 3'), /*Jailbreak Spoon*/ +/*Page 23*/ +('1702825', '7600', 'Weapon 3'), /*Homeless Cat Weapon*/ +('1702824', '3400', 'Weapon 3'), /*Golden Mochi*/ +('1702827', '3200', 'Weapon 3'), /*Rainbow Bubbles*/ +('1702826', '6400', 'Weapon 3'), /*Kiddy Crayon*/ +('1702829', '4000', 'Weapon 3'), /*Little Darling*/ +('1702828', '5600', 'Weapon 3'), /*Carbon Wings*/ +('1702831', '3400', 'Weapon 3'), /*Tennis Racket*/ +('1702830', '7100', 'Weapon 3'), /*Spring Rain Parasol*/ +('1702817', '3600', 'Weapon 3'), /*Invincible Blade*/ +/*Page 24*/ +('1702816', '5600', 'Weapon 3'), /*Flurry Bear*/ +('1702819', '5000', 'Weapon 3'), /*Tennis Weapon*/ +('1702818', '3800', 'Weapon 3'), /*World of Pink Weapon*/ +('1702821', '4000', 'Weapon 3'), /*Picnic Basket Weapon*/ +('1702820', '4000', 'Weapon 3'), /*Butterfly Weapon*/ +('1702823', '3200', 'Weapon 3'), /*Maple Blitzer Strategist Deck*/ +('1702822', '6300', 'Weapon 3'), /*Pink Puzzle Weapon*/ +('1702873', '7100', 'Weapon 3'), /*Tri-color Bag Weapon*/ +('1702872', '6400', 'Weapon 3'), /*Cluck, Cluck, Bean*/ +/*Page 25*/ +('1702875', '7600', 'Weapon 3'), /*Frostblade Weapon*/ +('1702874', '7100', 'Weapon 3'), /*Little Star Cocoon Weapon*/ +('1702877', '7600', 'Weapon 3'), /*Mu Young's Sword*/ +('1702876', '5000', 'Weapon 3'), /*Necrotic Whip*/ +('1702879', '5600', 'Weapon 3'), /*Dreamland Unicorn*/ +('1702878', '4700', 'Weapon 3'), /*Regal Romance Parasol*/ +('1702865', '3800', 'Weapon 3'), /*Reflection of Truth*/ +('1702867', '6300', 'Weapon 3'), /*Fairy in a Gilded Cage*/ +('1702866', '5000', 'Weapon 3'), /*Firefly Firelight Lantern*/ +/*Page 26*/ +('1702869', '7100', 'Weapon 3'), /*Autumn Lantern Weapon*/ +('1702868', '5000', 'Weapon 3'), /*Heavenly Prayer Weapon*/ +('1702871', '8800', 'Weapon 3'), /*Heart Diary*/ +('1702870', '5200', 'Weapon 3'), /*Imperial Honor*/ +('1702857', '8800', 'Weapon 3'), /*Infinite Star Cluster*/ +('1702856', '3400', 'Weapon 3'), /*Infinite Star Cluster*/ +('1702859', '6000', 'Weapon 3'), /*Lotus's Lovey Doll*/ +('1702858', '3800', 'Weapon 3'), /*Seafoam Coral Blade*/ +('1702861', '4900', 'Weapon 3'), /*One-Eyed Grim Reaper Weapon*/ +/*Page 27*/ +('1702860', '3600', 'Weapon 3'), /*Starry Summer Night Weapon*/ +('1702863', '4900', 'Weapon 3'), /*Alliance Commander Wing Sword*/ +('1702862', '3600', 'Weapon 3'), /*Night Procession Spirit Lamp Weapon*/ +('1702849', '7400', 'Weapon 3'), /*Crispy Carrot Skateboard*/ +('1702848', '5000', 'Weapon 3'), /*Retro Scalene Rapier*/ +('1702851', '4700', 'Weapon 3'), /*Catkerchief Packed Lunch*/ +('1702850', '4000', 'Weapon 3'), /*Spring Green Foxtail*/ +('1702853', '5200', 'Weapon 3'), /*Traditional Thai Attire Weapon*/ +('1702855', '3600', 'Weapon 3'), /*White Ducky Inner Tube*/ +/*Page 28*/ +('1702854', '4900', 'Weapon 3'), /*Maple Alliance Flag*/ +('1702905', '6000', 'Weapon 3'), /*Wish Fulfiller Crossbody Tote*/ +('1702904', '3200', 'Weapon 3'), /*Midnight Magician Weapon*/ +('1702906', '4900', 'Weapon 3'), /*Cursed Bow*/ +('1702909', '6000', 'Weapon 3'), /*Gorgon Baston*/ +('1702911', '4900', 'Weapon 3'), /*Drowsy Rabbit*/ +('1702910', '4700', 'Weapon 3'), /*Bushmaster Sword*/ +('1702897', '3800', 'Weapon 3'), /*SALLY's Skateboard*/ +('1702896', '7100', 'Weapon 3'), /*LEONARD's Leafy Greens*/ +/*Page 29*/ +('1702899', '4000', 'Weapon 3'), /*Valiant EDWARD*/ +('1702898', '5600', 'Weapon 3'), /*Gamboling CONY*/ +('1702901', '4000', 'Weapon 3'), /*Crystalline Wand*/ + + + +/*Page 1*/ +('1702900', '4900', 'Weapon 4'), /*Azure Sunset Sword*/ +('1702903', '6000', 'Weapon 4'), /*Sunny Songbird Weapon*/ +('1702902', '5000', 'Weapon 4'), /*Celestial Staff*/ +('1702889', '5600', 'Weapon 4'), /*Hunny Bun Bear Bell*/ +('1702888', '5600', 'Weapon 4'), /*Drowsy Bunny*/ +('1702891', '8800', 'Weapon 4'), /*Scribble Bloom*/ +('1702890', '5600', 'Weapon 4'), /*Rainbow Duster*/ +('1702893', '5600', 'Weapon 4'), /*Green Leaf Goobie*/ +('1702892', '3800', 'Weapon 4'), /*Sugarsweet Candy Spear*/ +/*Page 2*/ +('1702895', '6000', 'Weapon 4'), /*Golden Attack Pig*/ +('1702894', '5200', 'Weapon 4'), /*Ice Cream CONY*/ +('1702881', '4700', 'Weapon 4'), /*Chrome Dumbbell*/ +('1702880', '8800', 'Weapon 4'), /*Reaper's Wing*/ +('1702883', '5600', 'Weapon 4'), /*Pajama Party*/ +('1702882', '4700', 'Weapon 4'), /*Snowflake Sugarpop*/ +('1702885', '3800', 'Weapon 4'), /*Lunar New Year Pudgy Piggy*/ +('1702884', '6000', 'Weapon 4'), /*Cobalt Filigree*/ +('1702887', '5200', 'Weapon 4'), /*Camelia Tea Time*/ +/*Page 3*/ +('1702886', '6400', 'Weapon 4'), /*Sweet Beary Chocolate*/ +('1702927', '6400', 'Weapon 4'), /*Red Lotus Spirit Walker's Fan*/ +('1702913', '8800', 'Weapon 4'), /*Starry Light Weapon*/ +('1702912', '8800', 'Weapon 4'), /*Demonic Sword*/ +('1702915', '6000', 'Weapon 4'), /*Fox Fire Familiar*/ +('1702917', '4700', 'Weapon 4'), /*Blue Flame Whip*/ +('1702916', '6300', 'Weapon 4'), /*Springtime Sprout Greenery*/ + + + + + +/* Hat */ +/*Page 1*/ +('1000015', '7100', 'Hat'), /*Blue Crown*/ +('1000014', '7400', 'Hat'), /*Green Crown*/ +('1000013', '7100', 'Hat'), /*Yellow Crown*/ +('1000012', '6000', 'Hat'), /*Black M-Forcer Helmet*/ +('1000011', '5000', 'Hat'), /*Green M-Forcer Helmet*/ +('1000010', '6300', 'Hat'), /*Blue M-Forcer Helmet*/ +('1000009', '7100', 'Hat'), /*Red M-Forcer Helmet*/ +('1000008', '3800', 'Hat'), /*Detective Hat*/ +('1000007', '5200', 'Hat'), /*Hat of Death*/ +/*Page 2*/ +('1000006', '4000', 'Hat'), /*Samurai Hair-do*/ +('1000005', '3800', 'Hat'), /*Men's Ninja Hat*/ +('1000004', '8800', 'Hat'), /*Old School Uniform Hat*/ +('1000003', '7600', 'Hat'), /*Ghost Mask*/ +('1000002', '7400', 'Hat'), /*Fine Blue Hanbok Hat*/ +('1000001', '5600', 'Hat'), /*Fine Black Hanbok Hat*/ +('1000000', '3400', 'Hat'), /*Blue Beanie*/ +('1000031', '5600', 'Hat'), /*Veamoth Wig (M)*/ +('1000030', '4700', 'Hat'), /*Sachiel Wig (M)*/ +/*Page 3*/ +('1000029', '3800', 'Hat'), /*Wedding veil*/ +('1000028', '4700', 'Hat'), /*Korean Official Hat*/ +('1000027', '3400', 'Hat'), /*Lunar Festivities Cap*/ +('1000026', '5600', 'Hat'), /*Santa Boy Hat*/ +('1000024', '3600', 'Hat'), /*Oriental Bridegroom Hat*/ +('1000023', '5200', 'Hat'), /*Race Ace Cap*/ +('1000022', '7400', 'Hat'), /*General's Wig*/ +('1000021', '3800', 'Hat'), /*General's Wig*/ +('1000020', '3200', 'Hat'), /*Chief Hat*/ +/*Page 4*/ +('1000019', '3600', 'Hat'), /*Green Goya Hat*/ +('1000018', '8800', 'Hat'), /*Kuniragi Hat*/ +('1000017', '7600', 'Hat'), /*Van Hat*/ +('1000016', '5600', 'Hat'), /*Red Crown*/ +('1000046', '3400', 'Hat'), /*Elven Spirit Band (M)*/ +('1000045', '3800', 'Hat'), /*Dark Force Horns (M) */ +('1000044', '5000', 'Hat'), /*Twinkling Boy Hat*/ +('1000043', '8800', 'Hat'), /*Santa Hat*/ +('1000042', '7400', 'Hat'), /*Napoleon Hat*/ +/*Page 5*/ +('1000041', '5200', 'Hat'), /*Napoleon Hat*/ +('1000035', '8800', 'Hat'), /*White Floral Hat*/ +('1000032', '7400', 'Hat'), /*Janus Wig (M)*/ +('1000062', '7400', 'Hat'), /*Cool Carrot Hat*/ +('1000061', '6400', 'Hat'), /*Alps Boy Hat*/ +('1000060', '3600', 'Hat'), /*Dark Force Horns*/ +('1000059', '7100', 'Hat'), /*[MS Custom] Black M-Forcer Helmet*/ +('1000058', '6400', 'Hat'), /*Evergreen Magistrate Hat*/ +('1000051', '7100', 'Hat'), /*Aerial Elven Spirit Band*/ +/*Page 6*/ +('1000050', '5200', 'Hat'), /*Mint Snow Cap*/ +('1000079', '4900', 'Hat'), /*Mad Doctor Bolt*/ +('1000077', '6300', 'Hat'), /*Dylan's Silk Hat*/ +('1000076', '5600', 'Hat'), /*Red Dusk*/ +('1000074', '7100', 'Hat'), /*Yellow Picnic Beret*/ +('1000072', '6000', 'Hat'), /*Jumpy Blue*/ +('1000071', '5200', 'Hat'), /*Blue Pedora*/ +('1000070', '3200', 'Hat'), /*Bon-Bon Pony Hat*/ +('1000069', '6300', 'Hat'), /*Moonlight Floral Hat*/ +/*Page 7*/ +('1000095', '3800', 'Hat'), /*Floral Bandana*/ +('1000094', '3600', 'Hat'), /*Bon-Bon Pony Hair*/ +('1000092', '4000', 'Hat'), /*Nutcracker Hat*/ +('1000091', '7100', 'Hat'), /*Bloody Guardian Hood*/ +('1000090', '7400', 'Hat'), /*Penguin Hood*/ +('1000089', '7600', 'Hat'), /*Kinesis Wig*/ +('1000088', '4900', 'Hat'), /*Kinesis Wig*/ +('1000087', '7400', 'Hat'), /*Ribbon Headband*/ +('1000086', '7100', 'Hat'), /*Team Wig*/ +/*Page 8*/ +('1000085', '6300', 'Hat'), /*Aquamarine Gem*/ +('1000084', '7100', 'Hat'), /*Little Wing Cap*/ +('1000083', '5600', 'Hat'), /*Maple Festival Wig*/ +('1000082', '4700', 'Hat'), /*Fashionista Wig (M)*/ + +('1000080', '6400', 'Hat'), /*Santa Boy Hat*/ +('1000101', '5600', 'Hat'), /*Santa Boy Hat*/ +('1000100', '6000', 'Hat'), /*Movie Protagonist Wig*/ +('1000099', '5600', 'Hat'), /*New Year Photo Protagonist Wig*/ +/*Page 9*/ +('1000097', '4900', 'Hat'), /*Night Ciel*/ +('1000096', '5000', 'Hat'), /*Moonlit Night Hair*/ +('1001007', '3600', 'Hat'), /*Miko Wig*/ +('1001006', '5200', 'Hat'), /*SF Ninja Hat*/ +('1001005', '4700', 'Hat'), /*Women's Ninja Hat*/ +('1001004', '3800', 'Hat'), /*White Nurse Hat*/ +('1001003', '6400', 'Hat'), /*Pink Nurse Hat*/ +('1001002', '5600', 'Hat'), /*Witch Hat*/ +('1001001', '7600', 'Hat'), /*Hanbok Jobawi*/ +/*Page 10*/ +('1001000', '4000', 'Hat'), /*Orange Beanie*/ +('1001023', '5200', 'Hat'), /*Picnic Hat*/ +('1001022', '6000', 'Hat'), /*Van Hat with Heart*/ +('1001021', '3400', 'Hat'), /*The Gabera Hat*/ +('1001020', '5600', 'Hat'), /*Lady Yellow*/ +('1001019', '3200', 'Hat'), /*Lady Pink*/ +('1001018', '6000', 'Hat'), /*Lady Blue*/ +('1001017', '8800', 'Hat'), /*Princess Tiara*/ +('1001016', '4900', 'Hat'), /*Black M-Forcer Helmet*/ +/*Page 11*/ +('1001015', '4900', 'Hat'), /*Yellow M-Forcer Helmet*/ +('1001014', '5000', 'Hat'), /*Pink M-Forcer Helmet*/ +('1001013', '3800', 'Hat'), /*Beret*/ +('1001012', '4900', 'Hat'), /*Tiara*/ +('1001011', '7100', 'Hat'), /*Strawberry Headgear*/ +('1001010', '3400', 'Hat'), /*Teddy Bear Hat*/ +('1001009', '6300', 'Hat'), /*Ribbon*/ +('1001008', '3800', 'Hat'), /*A Ladylike Hat*/ +('1001039', '3200', 'Hat'), /*Lunar Festivities Ornament*/ +/*Page 12*/ +('1001038', '4900', 'Hat'), /*Korean Dress Wig*/ +('1001037', '3800', 'Hat'), /*Leopard Print Hat*/ +('1001036', '4700', 'Hat'), /*Santa Girl Hat*/ +('1001034', '5200', 'Hat'), /*Oriental Princess Hat*/ +('1001033', '3800', 'Hat'), /*Maid Hat*/ +('1001032', '7400', 'Hat'), /*Black Cat Ears*/ +('1001031', '3800', 'Hat'), /*White Cat Ears*/ +('1001030', '6000', 'Hat'), /*Diao Chan Headpiece*/ +('1001029', '3600', 'Hat'), /*Yellow Bride's Veil*/ +/*Page 13*/ +('1001028', '7400', 'Hat'), /*Jami Wig*/ +('1001027', '7400', 'Hat'), /*Blue-Feathered Bandana*/ +('1001026', '7100', 'Hat'), /*Red-Feathered Bandana*/ +('1001025', '4000', 'Hat'), /*Ruby Tiara*/ +('1001024', '5000', 'Hat'), /*Diamond Tiara*/ +('1001055', '5000', 'Hat'), /*Strawberry Milk Frill Bonnet*/ +('1001049', '5200', 'Hat'), /*Gothic Headband*/ +('1001048', '4900', 'Hat'), /*Gothic Mini Hat*/ +('1001047', '4900', 'Hat'), /*Janus Wig (F)*/ +/*Page 14*/ +('1001046', '3200', 'Hat'), /*Veamoth Wig (F)*/ +('1001045', '8800', 'Hat'), /*Sachiel Wig (F)*/ +('1001044', '3400', 'Hat'), /*Green Bride's Veil*/ +('1001043', '6000', 'Hat'), /*Royal Tiara*/ +('1001042', '6000', 'Hat'), /*Purple Bride's Veil*/ +('1001041', '6300', 'Hat'), /*Royal Nurse Hat*/ +('1001040', '7100', 'Hat'), /*Royal Maid Hat*/ +('1001071', '3800', 'Hat'), /*Silver Angora Gatsby*/ +('1001070', '4000', 'Hat'), /*Gold Angora Gatsby*/ +/*Page 15*/ +('1001069', '3400', 'Hat'), /*Elven Spirit Band (F) */ +('1001068', '7400', 'Hat'), /*Dark Force Horns (F) */ +('1001066', '5000', 'Hat'), /*Red Hood Bandana*/ +('1001065', '3200', 'Hat'), /*Pink Angel Wing Cap*/ +('1001064', '4900', 'Hat'), /*Twinkling Girl Hat*/ +('1001063', '6400', 'Hat'), /*Dear Christmas*/ +('1001062', '5200', 'Hat'), /*Elizabeth Hat*/ +('1001061', '5000', 'Hat'), /*Elizabeth Hat*/ +('1001058', '7100', 'Hat'), /*Native American Chief Hat*/ +/*Page 16*/ +('1001087', '7600', 'Hat'), /*Dark Force Horns*/ +('1001085', '4000', 'Hat'), /*Pinky Butterfly Hair Pin*/ +('1001084', '5000', 'Hat'), /*Angelic Navy Cap*/ +('1001083', '3200', 'Hat'), /*Angelic Ribbon*/ +('1001082', '4700', 'Hat'), /*Red Hood Bandana*/ +('1001077', '4900', 'Hat'), /*Aerial Elven Spirit Band*/ +('1001076', '5600', 'Hat'), /*Cherry Snow Cap*/ +('1001075', '3200', 'Hat'), /*Star of Ereve*/ +('1001103', '3600', 'Hat'), /*Fashionista Wig (F)*/ +/*Page 17*/ +('1001101', '7400', 'Hat'), /*Santa Girl Hat*/ +('1001100', '4900', 'Hat'), /*Ribbon Angel Cap*/ +('1001099', '6000', 'Hat'), /*Rosalia's Rose*/ +('1001098', '7400', 'Hat'), /*Blue Twilight*/ +('1001097', '5000', 'Hat'), /*White Picnic Beret*/ +('1001095', '5600', 'Hat'), /*Jumpy Pink*/ +('1001094', '4000', 'Hat'), /*Lace Cap*/ +('1001093', '5600', 'Hat'), /*Bon-Bon Pony Cap*/ +('1001092', '4900', 'Hat'), /*Moonlight Floral Hairpin*/ +/*Page 18*/ +('1001091', '3600', 'Hat'), /*Dumpling Head Wig*/ +('1001090', '4900', 'Hat'), /*Fluffy Cat Hood*/ +('1001089', '3400', 'Hat'), /*Warm Carrot Hat*/ +('1001088', '6300', 'Hat'), /*Alps Girl Hat*/ +('1001119', '7600', 'Hat'), /*Snowy Night Hair*/ +('1001118', '3400', 'Hat'), /*Floral Ayam*/ +('1001117', '5200', 'Hat'), /*Lucid's Hat*/ +('1001116', '7600', 'Hat'), /*Pon-Pon Pony Hat*/ +('1001113', '7600', 'Hat'), /*Bloody Veil*/ +/*Page 19*/ +('1001112', '4900', 'Hat'), /*Penguin Hood*/ +('1001111', '4000', 'Hat'), /*Kinesis Wig*/ +('1001110', '6300', 'Hat'), /*Kinesis Wig*/ +('1001109', '6400', 'Hat'), /*Odette Tiara*/ +('1001108', '5000', 'Hat'), /*Ribbon Headband*/ +('1001107', '4700', 'Hat'), /*Momo Wig*/ +('1001106', '5600', 'Hat'), /*Pink Diamond Gem*/ +('1001105', '4700', 'Hat'), /*Little Wing Fedora*/ +('1001104', '5000', 'Hat'), /*Maple Festival Wig*/ +/*Page 20*/ +('1001124', '5200', 'Hat'), /*Santa Girl Hat*/ +('1001123', '6300', 'Hat'), /*Movie Protagonist Wig*/ +('1001122', '5200', 'Hat'), /*New Year Photo Protagonist Wig*/ +('1001120', '4900', 'Hat'), /*Night Elodie*/ +('1002015', '7600', 'Hat'), /*Red Swimming Goggle*/ +('1002000', '5200', 'Hat'), /*Brown Flight Headgear*/ +('1002031', '6000', 'Hat'), /*Cat Hat*/ +('1002018', '4000', 'Hat'), /*Green Camping Hat*/ +('1002032', '4900', 'Hat'), /*Puffy Brown Hat*/ +/*Page 21*/ +('1002079', '5000', 'Hat'), /*Pink Camping Hat*/ +('1002078', '3200', 'Hat'), /*Sky Blue Camping Hat*/ +('1002077', '3400', 'Hat'), /*Blue Flight Headgear*/ +('1002076', '3600', 'Hat'), /*Red Flight Headgear*/ +('1002071', '7400', 'Hat'), /*Blue Swimming Goggle*/ +('1002070', '7600', 'Hat'), /*Green Swimming Goggle*/ +('1002191', '5600', 'Hat'), /*Red Pre-School Hat*/ +('1002190', '6300', 'Hat'), /*Blue Pre-School Hat*/ +('1002189', '5200', 'Hat'), /*Dark Cowboy Hat*/ +/*Page 22*/ +('1002188', '7100', 'Hat'), /*Red Cowboy Hat*/ +('1002187', '5600', 'Hat'), /*Blue Cowboy Hat*/ +('1002186', '7100', 'Hat'), /*Transparent Hat*/ +('1002206', '7400', 'Hat'), /*Green Rain Cap*/ +('1002205', '3200', 'Hat'), /*Sky Blue Rain Cap*/ +('1002204', '7400', 'Hat'), /*Red Rain Cap*/ +('1002203', '6300', 'Hat'), /*Yellow Rain Cap*/ +('1002202', '7100', 'Hat'), /*Orange Visor*/ +('1002201', '5600', 'Hat'), /*Sky Blue Visor*/ +/*Page 23*/ +('1002200', '5600', 'Hat'), /*Green Visor*/ +('1002199', '4900', 'Hat'), /*Black Baseball Helmet*/ +('1002198', '4700', 'Hat'), /*Indigo Baseball Helmet*/ +('1002197', '4000', 'Hat'), /*Red Baseball Helmet*/ +('1002196', '8800', 'Hat'), /*Blue Baseball Helmet*/ +('1002195', '7600', 'Hat'), /*Flowery Swimming Cap*/ +('1002194', '7100', 'Hat'), /*Rosy Swimming Cap*/ +('1002193', '3200', 'Hat'), /*Maroon Chinese Undead Hat*/ +('1002192', '3200', 'Hat'), /*Blue Chinese Undead Hat*/ +/*Page 24*/ +('1002223', '5600', 'Hat'), /*Blue Upside-Down Visor*/ +('1002222', '5200', 'Hat'), /*Red Upside-Down Visor*/ +('1002221', '3800', 'Hat'), /*Purple Slanted Visor*/ +('1002220', '7400', 'Hat'), /*Black Slanted Visor*/ +('1002219', '4900', 'Hat'), /*Destreza Hat*/ +('1002239', '3400', 'Hat'), /*The Legendary Gold Poop Hat*/ +('1002238', '6400', 'Hat'), /*Construction Hardhat*/ +('1002237', '3400', 'Hat'), /*Blue Cap*/ +('1002236', '7100', 'Hat'), /*Khaki Goggled Beanie*/ +/*Page 25*/ +('1002235', '5200', 'Hat'), /*Sky Blue Goggled Beanie*/ +('1002234', '7400', 'Hat'), /*Starry Sky Blue Beanie*/ +('1002233', '5600', 'Hat'), /*Starry Pink Beanie*/ +('1002232', '4700', 'Hat'), /*Starry Red Beanie*/ +('1002231', '4700', 'Hat'), /*Goggled Blue Cap*/ +('1002230', '7400', 'Hat'), /*Goggled Black Cap*/ +('1002229', '3400', 'Hat'), /*Goggled Red Cap*/ +('1002228', '7600', 'Hat'), /*Cabbie*/ +('1002227', '6400', 'Hat'), /*Blue Fisherman Hat*/ +/*Page 26*/ +('1002226', '3200', 'Hat'), /*Fashionable Hat*/ +('1002225', '8800', 'Hat'), /*Santa Hat*/ +('1002224', '5000', 'Hat'), /*Tiger Mask*/ +('1002255', '5000', 'Hat'), /*Circus Cowboy Hat*/ +('1002251', '8800', 'Hat'), /*The Graduation Hat*/ +('1002250', '4000', 'Hat'), /*Headphone Bandana*/ +('1002241', '3800', 'Hat'), /*Techwin Wig*/ +('1002240', '4700', 'Hat'), /*Hajimaki*/ +('1002266', '7400', 'Hat'), /*Basic Earmuff*/ +/*Page 27*/ +('1002265', '5600', 'Hat'), /*Elf's Ear*/ +('1002264', '5200', 'Hat'), /*Hardhat*/ +('1002263', '5600', 'Hat'), /*Green Trucker Hat*/ +('1002262', '7400', 'Hat'), /*Red Trucker Hat*/ +('1002261', '6300', 'Hat'), /*Blue Trucker Hat*/ +('1002260', '4700', 'Hat'), /*Yellow Trucker Hat*/ +('1002259', '3400', 'Hat'), /*Black Top Hat*/ +('1002258', '7600', 'Hat'), /*Blue Diamondy Bandana*/ +('1002257', '5600', 'Hat'), /*Blue Mushroom Hat*/ +/*Page 28*/ +('1002256', '5600', 'Hat'), /*Orange Mushroom Hat*/ +('1002280', '6300', 'Hat'), /*Ducky Hat*/ +('1002279', '6400', 'Hat'), /*Bunny Hat*/ +('1002303', '4000', 'Hat'), /*Blue Picnic Hat*/ +('1002302', '3200', 'Hat'), /*Pink Picnic Hat*/ +('1002301', '6300', 'Hat'), /*Yellow Picnic Hat*/ +('1002300', '4000', 'Hat'), /*Green Picnic Hat*/ +('1002299', '7100', 'Hat'), /*Cubic Newsie Hat*/ +('1002298', '3800', 'Hat'), /*Blue Bucket Hat*/ +/*Page 29*/ +('1002297', '6400', 'Hat'), /*Brown Bucket Hat*/ +('1002296', '7600', 'Hat'), /*Slime Hat*/ +('1002295', '7100', 'Hat'), /*Chef's Hat*/ + + + +/*Page 1*/ +('1002294', '8800', 'Hat 2'), /*Red Frill Pajama Hat*/ +('1002293', '4700', 'Hat 2'), /*Blue Pajama Hat*/ +('1002292', '6300', 'Hat 2'), /*Pink Frill Pajama Hat*/ +('1002291', '3600', 'Hat 2'), /*Starred Hunting Hat*/ +('1002290', '6400', 'Hat 2'), /*Camouflaged Helmet*/ +('1002319', '7600', 'Hat 2'), /*Whale Hat*/ +('1002318', '4000', 'Hat 2'), /*Red Headband*/ +('1002317', '3800', 'Hat 2'), /*Grey Headband*/ +('1002316', '7400', 'Hat 2'), /*Blue Straw Hat*/ +/*Page 2*/ +('1002315', '5600', 'Hat 2'), /*Red Straw Hat*/ +('1002314', '3400', 'Hat 2'), /*Zombie Mushroom Hat*/ +('1002313', '3400', 'Hat 2'), /*Palm Tree Hat*/ +('1002312', '3600', 'Hat 2'), /*Evil Watermelon Hat*/ +('1002311', '7400', 'Hat 2'), /*Traveler's Hat*/ +('1002310', '8800', 'Hat 2'), /*Flower Crown*/ +('1002309', '6400', 'Hat 2'), /*Watermelon Hat*/ +('1002308', '7100', 'Hat 2'), /*Orange B-Ball Headband*/ +('1002307', '3200', 'Hat 2'), /*Blue B-Ball Headband*/ +/*Page 3*/ +('1002306', '7600', 'Hat 2'), /*Brown Headband*/ +('1002305', '5600', 'Hat 2'), /*Blue Headband*/ +('1002304', '8800', 'Hat 2'), /*Silver Chain Hat*/ +('1002335', '5600', 'Hat 2'), /*Triangular Hat*/ +('1002334', '7400', 'Hat 2'), /*Raccoon Hat*/ +('1002333', '5600', 'Hat 2'), /*Big Halo*/ +('1002332', '7400', 'Hat 2'), /*Cloud Goblin*/ +('1002331', '7100', 'Hat 2'), /*Wind Goblin*/ +('1002322', '4700', 'Hat 2'), /*Lobster Hat*/ +/*Page 4*/ +('1002321', '6000', 'Hat 2'), /*Crow Hat*/ +('1002320', '7100', 'Hat 2'), /*Fuji Hat*/ +('1002351', '7100', 'Hat 2'), /*Yellow Cowboy Hat*/ +('1002350', '7100', 'Hat 2'), /*Red Cowboy Hat*/ +('1002349', '8800', 'Hat 2'), /*Black Cowboy Hat*/ +('1002348', '5600', 'Hat 2'), /*Bamboo Hat*/ +('1002347', '4000', 'Hat 2'), /*Brown Corporal Hat*/ +('1002346', '7600', 'Hat 2'), /*Blue Corporal Hat*/ +('1002345', '7400', 'Hat 2'), /*Party Hat*/ +/*Page 5*/ +('1002344', '6000', 'Hat 2'), /*Woodsman Hat*/ +('1002343', '3800', 'Hat 2'), /*White Beanie*/ +('1002342', '3400', 'Hat 2'), /*Olive Beanie*/ +('1002341', '5200', 'Hat 2'), /*Starry Olive Beanie*/ +('1002337', '7600', 'Hat 2'), /*Laurel Crown*/ +('1002336', '6300', 'Hat 2'), /*Noble Moca*/ +('1002367', '8800', 'Hat 2'), /*Angel Halo*/ +('1002362', '6400', 'Hat 2'), /*White Festive Gumball*/ +('1002361', '7600', 'Hat 2'), /*Red Festive Gumball*/ +/*Page 6*/ +('1002360', '7100', 'Hat 2'), /*Pink Knitted Gumball*/ +('1002359', '6400', 'Hat 2'), /*Blue Knitted Gumball*/ +('1002358', '6300', 'Hat 2'), /*Green Knitted Gumball*/ +('1002356', '5200', 'Hat 2'), /*Yellow Kitty Beanie*/ +('1002355', '7100', 'Hat 2'), /*Blue Kitty Beanie*/ +('1002354', '3200', 'Hat 2'), /*Yellow Knitted Hat*/ +('1002353', '5000', 'Hat 2'), /*Purple Knitted Hat*/ +('1002352', '4900', 'Hat 2'), /*Red Knitted Hat*/ +('1002376', '7400', 'Hat 2'), /*Pink Beret*/ +/*Page 7*/ +('1002375', '7600', 'Hat 2'), /*Yellow Beret*/ +('1002374', '8800', 'Hat 2'), /*Red Beret*/ +('1002373', '5600', 'Hat 2'), /*Cloth Wrapper*/ +('1002372', '3400', 'Hat 2'), /*Feathered Bandana with Hearts*/ +('1002371', '7100', 'Hat 2'), /*Red-Dotted Feathered Bandana*/ +('1002370', '3200', 'Hat 2'), /*Black-Striped Feathered Bandana*/ +('1002369', '8800', 'Hat 2'), /*Antenna Hairband*/ +('1002368', '6000', 'Hat 2'), /*Reindeer Hat*/ +('1002397', '7400', 'Hat 2'), /*Sunflower Petal*/ +/*Page 8*/ +('1002396', '7100', 'Hat 2'), /*Hawaiian Flower*/ +('1002389', '6300', 'Hat 2'), /*Devilish Horns*/ +('1002388', '5000', 'Hat 2'), /*Peter Pan Hat*/ +('1002387', '3600', 'Hat 2'), /*Green Eskimo Hat*/ +('1002386', '3400', 'Hat 2'), /*Brown Eskimo Hat*/ +('1002385', '3800', 'Hat 2'), /*Red Eskimo Hat*/ +('1002384', '7600', 'Hat 2'), /*Casual Cowboy Hat*/ +('1002415', '4700', 'Hat 2'), /*Zombie Mushroom Hat*/ +('1002414', '8800', 'Hat 2'), /*Orange Mushroom Hat*/ +/*Page 9*/ +('1002413', '7600', 'Hat 2'), /*Octopus Hat*/ +('1002412', '5200', 'Hat 2'), /*Skyblue Turban*/ +('1002411', '3200', 'Hat 2'), /*Yellow Turban*/ +('1002410', '3600', 'Hat 2'), /*Pink Turban*/ +('1002409', '6400', 'Hat 2'), /*Tin Bucket*/ +('1002431', '3400', 'Hat 2'), /*Bull's Horn*/ +('1002429', '3600', 'Hat 2'), /*Meshcap*/ +('1002428', '6300', 'Hat 2'), /*Beige Checkered Hat*/ +('1002427', '7400', 'Hat 2'), /*Green Goya Beret*/ +/*Page 10*/ +('1002426', '7100', 'Hat 2'), /*Beige Goya Beret*/ +('1002423', '7400', 'Hat 2'), /*Yellow Knitted Beanie*/ +('1002422', '7600', 'Hat 2'), /*Blue Knitted Beanie*/ +('1002421', '5000', 'Hat 2'), /*Pink Knitted Beanie*/ +('1002420', '7100', 'Hat 2'), /*Biker Bandana*/ +('1002417', '3400', 'Hat 2'), /*Drake Hat*/ +('1002416', '3600', 'Hat 2'), /*Slime Hat*/ +('1002447', '3800', 'Hat 2'), /*Rolled Towel*/ +('1002446', '3400', 'Hat 2'), /*Sun Quan Headpiece*/ +/*Page 11*/ +('1002445', '4900', 'Hat 2'), /*Cao Cao Headpiece*/ +('1002444', '4000', 'Hat 2'), /*Liu Bei Headpiece*/ +('1002443', '3400', 'Hat 2'), /*Patissier Hat*/ +('1002442', '3400', 'Hat 2'), /*Rainbow Afro Wig*/ +('1002440', '7400', 'Hat 2'), /*Pink Jelly Cap*/ +('1002439', '3400', 'Hat 2'), /*Blue Jelly Cap*/ +('1002438', '3600', 'Hat 2'), /*Zhu-Ge-Liang Hat*/ +('1002437', '6400', 'Hat 2'), /*Guan Yu Headpiece*/ +('1002435', '7600', 'Hat 2'), /*Korean Flower Petal*/ +/*Page 12*/ +('1002434', '4900', 'Hat 2'), /*Autumn Hat*/ +('1002433', '3600', 'Hat 2'), /*Summer Hat*/ +('1002432', '6000', 'Hat 2'), /*Spring Hat*/ +('1002463', '8800', 'Hat 2'), /*Horoscope Hat (Virgo)*/ +('1002462', '4900', 'Hat 2'), /*Horoscope Hat (Leo)*/ +('1002461', '8800', 'Hat 2'), /*Horoscope Hat (Cancer)*/ +('1002460', '5200', 'Hat 2'), /*Horoscope Hat (Gemini)*/ +('1002459', '3600', 'Hat 2'), /*Horoscope Hat (Taurus)*/ +('1002458', '3200', 'Hat 2'), /*Horoscope Hat (Aries)*/ +/*Page 13*/ +('1002457', '7400', 'Hat 2'), /*Horoscope Hat (Pisces)*/ +('1002456', '3600', 'Hat 2'), /*Horoscope Hat (Aquarius)*/ +('1002451', '4700', 'Hat 2'), /*Starfish*/ +('1002450', '7400', 'Hat 2'), /*Conch Cap*/ +('1002449', '3200', 'Hat 2'), /*Winged Cap*/ +('1002479', '5600', 'Hat 2'), /*Snowman Mask*/ +('1002478', '3800', 'Hat 2'), /*Mushroom Hair Pin*/ +('1002477', '5600', 'Hat 2'), /*Slime Hair Pin*/ +('1002476', '7400', 'Hat 2'), /*Rough Hat*/ +/*Page 14*/ +('1002472', '6400', 'Hat 2'), /*Cabbage Patch Hat*/ +('1002470', '4900', 'Hat 2'), /*Welding Mask*/ +('1002469', '3600', 'Hat 2'), /*Jester Hat*/ +('1002468', '3200', 'Hat 2'), /*Golden Bulldog Hat*/ +('1002467', '8800', 'Hat 2'), /*Horoscope Hat (Capricorn)*/ +('1002466', '8800', 'Hat 2'), /*Horoscope Hat (Sagittarius)*/ +('1002465', '6400', 'Hat 2'), /*Horoscope Hat (Scorpius)*/ +('1002464', '4700', 'Hat 2'), /*Horoscope Hat (Libra)*/ +('1002495', '6300', 'Hat 2'), /*Angora Hat*/ +/*Page 15*/ +('1002493', '7100', 'Hat 2'), /*Teddy Bear Headgear*/ +('1002491', '3200', 'Hat 2'), /*Musashi Hat*/ +('1002490', '3800', 'Hat 2'), /*Football Helmet (Away)*/ +('1002489', '3800', 'Hat 2'), /*Football Helmet (Home)*/ +('1002488', '3800', 'Hat 2'), /*Military Fur Hat*/ +('1002487', '6300', 'Hat 2'), /*Rainbow Visor Beanie*/ +('1002486', '7100', 'Hat 2'), /*Green Visor Beanie*/ +('1002485', '3800', 'Hat 2'), /*Grey Visor Beanie*/ +('1002484', '5200', 'Hat 2'), /*Polar Bear Hat*/ +/*Page 16*/ +('1002482', '3800', 'Hat 2'), /*Red Snowboard Helmet*/ +('1002481', '7600', 'Hat 2'), /*Black Snowboard Helmet*/ +('1002480', '6400', 'Hat 2'), /*White Wig Hat*/ +('1002507', '7400', 'Hat 2'), /*Soccer Ball Hat*/ +('1002506', '3200', 'Hat 2'), /*Flower Crown*/ +('1002505', '4700', 'Hat 2'), /*Sergeant Hat*/ +('1002504', '4000', 'Hat 2'), /*Old Fisherman Hat*/ +('1002503', '6300', 'Hat 2'), /*Vintage Pink Hat*/ +('1002502', '3400', 'Hat 2'), /*Vintage Denim Hat*/ +/*Page 17*/ +('1002501', '5600', 'Hat 2'), /*Reggae Hat*/ +('1002500', '7100', 'Hat 2'), /*Korean Flag Bandana*/ +('1002499', '4900', 'Hat 2'), /*White Tiger Hat*/ +('1002498', '4700', 'Hat 2'), /*Bald Wig*/ +('1002497', '6400', 'Hat 2'), /*Hunting Cap*/ +('1002496', '3600', 'Hat 2'), /*Black Skull Bandana*/ +('1002526', '6000', 'Hat 2'), /*Skull Hat*/ +('1002525', '5200', 'Hat 2'), /*Mummy Hat*/ +('1002524', '3600', 'Hat 2'), /*Coke Hat*/ +/*Page 18*/ +('1002523', '3600', 'Hat 2'), /*Paper Boat Hat*/ +('1002522', '4900', 'Hat 2'), /*Pink-Dotted Hairband*/ +('1002521', '3400', 'Hat 2'), /*White Hairband*/ +('1002520', '7400', 'Hat 2'), /*Red Rose*/ +('1002519', '3600', 'Hat 2'), /*White Felt Hat*/ +('1002513', '5600', 'Hat 2'), /*Maple Party Hat*/ +('1002512', '3600', 'Hat 2'), /*Red Spirit Bandana*/ +('1002543', '8800', 'Hat 2'), /*Acorn Helmet*/ +('1002542', '6300', 'Hat 2'), /*Acorn Headgear*/ +/*Page 19*/ +('1002536', '6400', 'Hat 2'), /*Paper Bag*/ +('1002534', '6400', 'Hat 2'), /*White Puppy Hat*/ +('1002559', '3800', 'Hat 2'), /*Nordic Knitted Beanie*/ +('1002558', '4900', 'Hat 2'), /*Werebeast*/ +('1002557', '6300', 'Hat 2'), /*Jr. Lioner Hat*/ +('1002556', '6000', 'Hat 2'), /*Maple-Stein Head*/ +('1002555', '3200', 'Hat 2'), /*Demon Goblin*/ +('1002552', '3200', 'Hat 2'), /*Moon Bunny Headgear*/ +('1002549', '3400', 'Hat 2'), /*Black Cat Hat*/ +/*Page 20*/ +('1002548', '5600', 'Hat 2'), /*White Rabbit Hat*/ +('1002545', '5600', 'Hat 2'), /*Yellow Slime Hat*/ +('1002544', '6300', 'Hat 2'), /*Pumpkin Headgear*/ +('1002575', '4900', 'Hat 2'), /*Angel Headband*/ +('1002570', '7100', 'Hat 2'), /*Pastel Cap*/ +('1002569', '3200', 'Hat 2'), /*Candlelight hat*/ +('1002568', '3200', 'Hat 2'), /*Tweed Headband*/ +('1002567', '7100', 'Hat 2'), /*Elf Hat*/ +('1002566', '4900', 'Hat 2'), /*Skull Beanie*/ +/*Page 21*/ +('1002565', '6300', 'Hat 2'), /*Fur Hat*/ +('1002560', '7100', 'Hat 2'), /*Striped Knitted Beanie*/ +('1002591', '4900', 'Hat 2'), /*Leatty Hat*/ +('1002590', '8800', 'Hat 2'), /*Star Baseball Cap*/ +('1002583', '6300', 'Hat 2'), /*Wrestling Mask*/ +('1002582', '4900', 'Hat 2'), /*Maximus Galea*/ +('1002576', '5000', 'Hat 2'), /*Fallen Angel Headband*/ +('1002607', '5200', 'Hat 2'), /*Zhu Ba Jie Hat*/ +('1002605', '3600', 'Hat 2'), /*Jet Black Head Scarf*/ +/*Page 22*/ +('1002599', '3200', 'Hat 2'), /*Golden Trench Helmet*/ +('1002598', '7100', 'Hat 2'), /*Rabbit Ear*/ +('1002597', '4700', 'Hat 2'), /*Husky Hat*/ +('1002596', '7100', 'Hat 2'), /*Bulldog Cap*/ +('1002594', '6400', 'Hat 2'), /*Goggled Smiley Headgear*/ +('1002593', '6300', 'Hat 2'), /*Smiley Headgear*/ +('1002592', '6400', 'Hat 2'), /*Sun Wu Kong Hat*/ +('1002609', '8800', 'Hat 2'), /*Crazy Bunny Hat*/ +('1002608', '3200', 'Hat 2'), /*Superstar Cap*/ +/*Page 23*/ +('1002654', '3400', 'Hat 2'), /*Orange Mushroom Hat*/ +('1002653', '4000', 'Hat 2'), /*Stack of Books*/ +('1002650', '7400', 'Hat 2'), /*Vintage Grey Cap*/ +('1002667', '3800', 'Hat 2'), /*Star Hair Pin*/ +('1002666', '7600', 'Hat 2'), /*White Basic Cap*/ +('1002665', '5200', 'Hat 2'), /*Tomato Hat*/ +('1002661', '4900', 'Hat 2'), /*Bird Nest*/ +('1002660', '4900', 'Hat 2'), /*Orange Cap with Shades*/ +('1002679', '4000', 'Hat 2'), /*Eye Poppers*/ +/*Page 24*/ +('1002678', '6000', 'Hat 2'), /*Old Hockey Mask*/ +('1002674', '5000', 'Hat 2'), /*Helm of the Bronze Monk*/ +('1002673', '3200', 'Hat 2'), /*Helm of the Silver Monk*/ +('1002672', '7100', 'Hat 2'), /*Helm of the Golden Monk*/ +('1002703', '3400', 'Hat 2'), /*Big Blue Eye - Bluesy*/ +('1002701', '7600', 'Hat 2'), /*Huge Green Lips*/ +('1002700', '8800', 'Hat 2'), /*Big Green Eye*/ +('1002698', '8800', 'Hat 2'), /*Vintage Khaki Cap*/ +('1002697', '7600', 'Hat 2'), /*Devilfish Headgear*/ +/*Page 25*/ +('1002696', '4000', 'Hat 2'), /*Stoplight Hat*/ +('1002695', '3200', 'Hat 2'), /*Soul Teddy Hat*/ +('1002694', '5000', 'Hat 2'), /*Centaurus Horns (Light)*/ +('1002693', '3800', 'Hat 2'), /*Centaurus Horns (Green)*/ +('1002692', '8800', 'Hat 2'), /*Centaurus Horns (Ghost)*/ +('1002691', '5600', 'Hat 2'), /*Centaurus Horns*/ +('1002715', '5600', 'Hat 2'), /*Military Beanie*/ +('1002714', '3400', 'Hat 2'), /*Christmas Tree Hat*/ +('1002713', '7600', 'Hat 2'), /*Black Bubble Beanie*/ +/*Page 26*/ +('1002712', '7100', 'Hat 2'), /*Black Kitty Ears*/ +('1002711', '4000', 'Hat 2'), /*White Kitty Ears*/ +('1002710', '3400', 'Hat 2'), /*Pink Kitty Hat*/ +('1002709', '7100', 'Hat 2'), /*Snowy Knitted Hat*/ +('1002708', '3800', 'Hat 2'), /*Red Vintage Bandana*/ +('1002706', '4000', 'Hat 2'), /*Huge Red Lips*/ +('1002705', '3200', 'Hat 2'), /*Huge Blue Lips*/ +('1002704', '6300', 'Hat 2'), /*Big Blue Eye - Bright*/ +('1002735', '3600', 'Hat 2'), /*Glowy Smile Cap*/ +/*Page 27*/ +('1002734', '6000', 'Hat 2'), /*Chinese Lion Headgear*/ +('1002727', '7100', 'Hat 2'), /*Huge Pink Ribbon*/ +('1002726', '5200', 'Hat 2'), /*Umbrella Hat*/ +('1002725', '5000', 'Hat 2'), /*Pierced Apple*/ +('1002724', '7100', 'Hat 2'), /*Cat Hat*/ +('1002722', '5200', 'Hat 2'), /*Teddy Earmuffs*/ +('1002721', '8800', 'Hat 2'), /*Raccoon Earmuffs*/ +('1002720', '4000', 'Hat 2'), /*Lovely Christmas*/ +('1002748', '6300', 'Hat 2'), /*Apple-Green Hood*/ +/*Page 28*/ +('1002747', '6000', 'Hat 2'), /*Superstar Headphones*/ +('1002746', '3600', 'Hat 2'), /*Sleepy Turkey*/ +('1002745', '8800', 'Hat 2'), /*Baby Gold Dragon*/ +('1002742', '7600', 'Hat 2'), /*Baby Turkey Hat*/ +('1002741', '7100', 'Hat 2'), /*Yellow Baby Dragon Hat*/ +('1002738', '8800', 'Hat 2'), /*Bunny Earmuffs*/ +('1002736', '6300', 'Hat 2'), /*Glowy Patterned Cap*/ +('1002761', '5200', 'Hat 2'), /*Maple Leaf eye mask*/ +('1002760', '8800', 'Hat 2'), /*Globe Cap*/ +/*Page 29*/ +('1002759', '6400', 'Hat 2'), /*Maple Hood Hat*/ +('1002756', '5000', 'Hat 2'), /*Hero's Casket*/ +('1002755', '3800', 'Hat 2'), /*Hero's Beret*/ + + + +/*Page 1*/ +('1002754', '7100', 'Hat 3'), /*Orange Mushroom Scholar*/ +('1002753', '3800', 'Hat 3'), /*Stylish Pink Cotton Cap*/ +('1002752', '5600', 'Hat 3'), /*Celestial Crown*/ +('1002775', '5000', 'Hat 3'), /*3rd Anniversary Hat*/ +('1002774', '6300', 'Hat 3'), /*Victory Hairpin*/ +('1002771', '4900', 'Hat 3'), /*Tiger Cub Hat*/ +('1002770', '5000', 'Hat 3'), /*Cone Ears*/ +('1002796', '6300', 'Hat 3'), /*Cutie Birk Hat*/ +('1002785', '7400', 'Hat 3'), /*Prismatic Sun Cap*/ +/*Page 2*/ +('1002784', '5000', 'Hat 3'), /*"A" Cap*/ +('1002811', '6000', 'Hat 3'), /*Striped Bandana*/ +('1002804', '3800', 'Hat 3'), /*Brown Felt Hat*/ +('1002803', '7100', 'Hat 3'), /*Mrs. Octopus*/ +('1002831', '7400', 'Hat 3'), /*Leo Hairpin*/ +('1002824', '7100', 'Hat 3'), /*Noob Hat*/ +('1002823', '3200', 'Hat 3'), /*Scarface Mask*/ +('1002822', '5200', 'Hat 3'), /*Bird Nest*/ +('1002821', '3800', 'Hat 3'), /*Violet Heart Beanie*/ +/*Page 3*/ +('1002820', '4900', 'Hat 3'), /*Inferno Horns*/ +('1002847', '3200', 'Hat 3'), /*Frog Hat*/ +('1002846', '7100', 'Hat 3'), /*Blue Bow Beret*/ +('1002845', '4900', 'Hat 3'), /*Pink Bunny Cap*/ +('1002844', '7600', 'Hat 3'), /*Chipmunk Ears*/ +('1002843', '7400', 'Hat 3'), /*Silver Fox Ears*/ +('1002842', '4000', 'Hat 3'), /*Golden Fox Ears*/ +('1002840', '5200', 'Hat 3'), /*Hatched Bird Cap*/ +('1002839', '3600', 'Hat 3'), /*Pumpkin Hat*/ +/*Page 4*/ +('1002837', '6000', 'Hat 3'), /*Tengu Mask*/ +('1002836', '5000', 'Hat 3'), /*Capricorn Hair Clip*/ +('1002835', '6000', 'Hat 3'), /*Sagittarius Hair Clip*/ +('1002834', '4000', 'Hat 3'), /*Scorpius Hairpin*/ +('1002863', '3600', 'Hat 3'), /*Bear Tassel Hat*/ +('1002849', '3600', 'Hat 3'), /*Panda Hat*/ +('1002878', '3600', 'Hat 3'), /*Snow Flake Hat*/ +('1002877', '5200', 'Hat 3'), /*Cow Mask*/ +('1002876', '3600', 'Hat 3'), /*Holly Hair Clip*/ +/*Page 5*/ +('1002870', '4900', 'Hat 3'), /*Moon Bunny Hat*/ +('1002891', '6400', 'Hat 3'), /*Green Ribbon Hairband*/ +('1002890', '3200', 'Hat 3'), /*Blue Ribbon Hairband*/ +('1002889', '6300', 'Hat 3'), /*Purple Ribbon Hairband*/ +('1002888', '5000', 'Hat 3'), /*Red Ribbon Hairband*/ +('1002887', '6000', 'Hat 3'), /*Pink Ribbon Hairband*/ +('1002886', '3600', 'Hat 3'), /*Strawberry Hairband*/ +('1002885', '7100', 'Hat 3'), /*Pink Bow*/ +('1002884', '3200', 'Hat 3'), /*Red Panda Cap*/ +/*Page 6*/ +('1002882', '6400', 'Hat 3'), /*Owl Hat*/ +('1002907', '5200', 'Hat 3'), /*Checkered Fedora*/ +('1002903', '7600', 'Hat 3'), /*Pink Bandana*/ +('1002923', '5000', 'Hat 3'), /*Treacherous Wolf Hat*/ +('1002922', '7400', 'Hat 3'), /*Navy Hoodie Cap*/ +('1002921', '3800', 'Hat 3'), /*Blue Mini Hat*/ +('1002920', '6300', 'Hat 3'), /*Pink Mini Hat*/ +('1002919', '4000', 'Hat 3'), /*Courageous Little Lamb Hat*/ +('1002913', '5600', 'Hat 3'), /*Miranda Ribbon*/ +/*Page 7*/ +('1002912', '3600', 'Hat 3'), /*Iljimae Mask*/ +('1002943', '3400', 'Hat 3'), /*Sailor Hat*/ +('1002942', '4000', 'Hat 3'), /*Green Mushroom Hat*/ +('1002941', '5000', 'Hat 3'), /*Moon Bloom Hair Pin*/ +('1002937', '4900', 'Hat 3'), /*Felt Hat*/ +('1002930', '7100', 'Hat 3'), /*6th Anniversary Cone Hat*/ +('1002929', '5000', 'Hat 3'), /*Colorful Striped Beanie*/ +('1002928', '4700', 'Hat 3'), /*Pink Star Beanie*/ +('1002957', '6400', 'Hat 3'), /*Pink Bean Hat*/ +/*Page 8*/ +('1002956', '5200', 'Hat 3'), /*Blue Mushroom Hat*/ +('1002955', '6000', 'Hat 3'), /*Brave Musashi Helmet*/ +('1002954', '3200', 'Hat 3'), /*Aran Helmet*/ +('1002953', '3800', 'Hat 3'), /*Fluttering Sunhat*/ +('1002952', '7400', 'Hat 3'), /*Purple Flower Headwrap*/ +('1002951', '7400', 'Hat 3'), /*Yellow Flower Headwrap*/ +('1002950', '7400', 'Hat 3'), /*Pink Flower Headwrap*/ +('1002945', '6000', 'Hat 3'), /*Heart Hairband*/ +('1002944', '5200', 'Hat 3'), /*Honey Bee Hat*/ +/*Page 9*/ +('1002975', '4700', 'Hat 3'), /*Aviator Pilot Goggles*/ +('1002974', '4700', 'Hat 3'), /*Jr. Lucida Hat*/ +('1002973', '5200', 'Hat 3'), /*Mysterious Mask*/ +('1002970', '5600', 'Hat 3'), /*Moon Bunny Hat*/ +('1002969', '4900', 'Hat 3'), /*Brown Puppy Ears*/ +('1002968', '6300', 'Hat 3'), /*Pancake Hat*/ +('1002967', '6300', 'Hat 3'), /*Teru Teru Hairband*/ +('1002962', '7600', 'Hat 3'), /*Peony Flower Accessory*/ +('1002961', '5200', 'Hat 3'), /*Gray Mask*/ +/*Page 10*/ +('1002960', '7400', 'Hat 3'), /*Black Crown*/ +('1002987', '3600', 'Hat 3'), /*Cursed Golden trench helmet*/ +('1002985', '7100', 'Hat 3'), /*Pachinko Marble-box Hat*/ +('1002984', '6000', 'Hat 3'), /*Spiegelmann's Hat*/ +('1002983', '4000', 'Hat 3'), /*We Care! Hat*/ +('1002979', '4000', 'Hat 3'), /*Marbum Headgear*/ +('1002978', '7600', 'Hat 3'), /*Cute Mouse Ears*/ +('1002976', '4900', 'Hat 3'), /*Maid Headband*/ +('1003006', '7400', 'Hat 3'), /*Kitty Camping Hat*/ +/*Page 11*/ +('1003005', '5000', 'Hat 3'), /*Maple Racing Helmet*/ +('1003001', '7600', 'Hat 3'), /*Chaos Metallic Helmet*/ +('1003000', '3600', 'Hat 3'), /*Cherry Blossom Hair*/ +('1002999', '3200', 'Hat 3'), /*Fire Shadow Hair*/ +('1002998', '8800', 'Hat 3'), /*Edwin Wig*/ +('1002995', '5200', 'Hat 3'), /*Royal Navy Hat*/ +('1003022', '4000', 'Hat 3'), /*Devil Horns*/ +('1003015', '7400', 'Hat 3'), /*Blue Scooter Helmet*/ +('1003014', '8800', 'Hat 3'), /*Pink Scooter Helmet*/ +/*Page 12*/ +('1003013', '3200', 'Hat 3'), /*Red Loose-Fit Beanie*/ +('1003010', '7100', 'Hat 3'), /*Dancing Blue Butterfly*/ +('1003009', '7400', 'Hat 3'), /*Christmas Light Hairband*/ +('1003008', '3400', 'Hat 3'), /*Pharaoh Crown*/ +('1003038', '6000', 'Hat 3'), /*Doll Face Hat*/ +('1003030', '5200', 'Hat 3'), /*Former Hero Male Face*/ +('1003029', '3800', 'Hat 3'), /*Former Hero Female Face*/ +('1003054', '4700', 'Hat 3'), /*White Fur Hat*/ +('1003053', '4000', 'Hat 3'), /*Pink Fur Hat*/ +/*Page 13*/ +('1003052', '8800', 'Hat 3'), /*Tilted Fedora*/ +('1003051', '4700', 'Hat 3'), /*Desert Fox*/ +('1003050', '7600', 'Hat 3'), /*Bunny Ears*/ +('1003049', '3400', 'Hat 3'), /*Giant Bear Cap*/ +('1003048', '6400', 'Hat 3'), /*Christmas Wreath*/ +('1003047', '3600', 'Hat 3'), /*Bear Hat*/ +('1003044', '5600', 'Hat 3'), /*Clown Hat*/ +('1003043', '3200', 'Hat 3'), /*Christmas Bell*/ +('1003071', '8800', 'Hat 3'), /*Pinky Bow*/ +/*Page 14*/ +('1003070', '3200', 'Hat 3'), /*Tiger-Print Cap*/ +('1003060', '5600', 'Hat 3'), /*Silver Coronet*/ +('1003059', '3400', 'Hat 3'), /*Qi-pao Hair*/ +('1003058', '5200', 'Hat 3'), /*Christmas Hairpin*/ +('1003057', '4000', 'Hat 3'), /*Mini Crown*/ +('1003084', '3600', 'Hat 3'), /*Royal Crown*/ +('1003083', '4700', 'Hat 3'), /*Sprout Hat*/ +('1003082', '7600', 'Hat 3'), /*Wolf Hat*/ +('1003080', '8800', 'Hat 3'), /*Cat Set Hat*/ +/*Page 15*/ +('1003079', '8800', 'Hat 3'), /*Green Leaf Hat*/ +('1003078', '4900', 'Hat 3'), /*Sparkling Butterfly*/ +('1003077', '3600', 'Hat 3'), /*Knitted Corsage Hat*/ +('1003074', '6000', 'Hat 3'), /*Strawberry Hat*/ +('1003072', '5600', 'Hat 3'), /*Black-Lace Ribbon*/ +('1003103', '3200', 'Hat 3'), /*6th Anniversary Top Hat*/ +('1003101', '7600', 'Hat 3'), /*Dunas Hat*/ +('1003092', '3200', 'Hat 3'), /*Hawkeye Captain Hat*/ +('1003089', '4700', 'Hat 3'), /*Evan Wing Headband*/ +/*Page 16*/ +('1003109', '6400', 'Hat 3'), /*Royal Rainbow Hood*/ +('1003135', '5000', 'Hat 3'), /*Wild Hunter's Hat*/ +('1003133', '6400', 'Hat 3'), /*White Bow*/ +('1003132', '3200', 'Hat 3'), /*Red Bow*/ +('1003131', '6000', 'Hat 3'), /*Black Dressy Ribbon*/ +('1003130', '3200', 'Hat 3'), /*Shining Feather*/ +('1003123', '4900', 'Hat 3'), /*Black Petite Scarf*/ +('1003122', '3200', 'Hat 3'), /*Yellow Petite Scarf*/ +('1003121', '3400', 'Hat 3'), /*Evan Headband*/ +/*Page 17*/ +('1003120', '5600', 'Hat 3'), /*Oz Magic Hat*/ +('1003149', '8800', 'Hat 3'), /*Rabbit Ear Hood*/ +('1003148', '8800', 'Hat 3'), /*Pilot Cap*/ +('1003147', '5600', 'Hat 3'), /*Maid Headband (Blue)*/ +('1003146', '6000', 'Hat 3'), /*Lace Ribbon (Pink)*/ +('1003145', '5000', 'Hat 3'), /*Dragon Hat*/ +('1003144', '6000', 'Hat 3'), /*King Crow Hat*/ +('1003141', '6400', 'Hat 3'), /*Straw Sun Hat*/ +('1003136', '4700', 'Hat 3'), /*Battle Mage Goggles*/ +/*Page 18*/ +('1003163', '3200', 'Hat 3'), /*Brown Hunting Cap*/ +('1003161', '5200', 'Hat 3'), /*Sanctus Combat Veil*/ +('1003182', '6400', 'Hat 3'), /*Paypal Cap*/ +('1003171', '7600', 'Hat 3'), /*Leather Cap*/ +('1003170', '8800', 'Hat 3'), /*Star Head Wrap*/ +('1003196', '5600', 'Hat 3'), /*Rudolph Santa Hat*/ +('1003194', '4700', 'Hat 3'), /*Rookie Bobble Heart Band*/ +('1003193', '5000', 'Hat 3'), /*Red Pre-School Uniform Hat*/ +('1003192', '4900', 'Hat 3'), /*Blue Pre-School Uniform Hat*/ +/*Page 19*/ +('1003187', '3200', 'Hat 3'), /*Gray Cat Hood*/ +('1003186', '3400', 'Hat 3'), /*Pink Cat Hood*/ +('1003185', '7600', 'Hat 3'), /*Rabbit hat*/ +('1003215', '3200', 'Hat 3'), /*Pink Snowdrop Cunning Hat*/ +('1003214', '4700', 'Hat 3'), /*Blue Snowdrop Cunning Hat*/ +('1003211', '6300', 'Hat 3'), /*Winter 2010 Moon Bunny Hat*/ +('1003210', '3600', 'Hat 3'), /*Earmuffs and Pom Pom Beanie*/ +('1003208', '8800', 'Hat 3'), /*Magic Hat*/ +('1003207', '3800', 'Hat 3'), /*Curly Rabbit Poof*/ +/*Page 20*/ +('1003204', '6000', 'Hat 3'), /*Courageous Bunny Hat*/ +('1003203', '5000', 'Hat 3'), /*Red Riding Hood*/ +('1003202', '3200', 'Hat 3'), /*Golden Beetle*/ +('1003226', '6000', 'Hat 3'), /*Rookie Hatchling Hat*/ +('1003223', '8800', 'Hat 3'), /*Lost Baby Chick*/ +('1003222', '7400', 'Hat 3'), /*Blue Polka Dot Bow*/ +('1003221', '3600', 'Hat 3'), /*Pink Polka Dot Bow*/ +('1003220', '8800', 'Hat 3'), /*Knit Flower Hairband*/ +('1003218', '4000', 'Hat 3'), /*Flower Heiress Band*/ +/*Page 21*/ +('1003217', '3200', 'Hat 3'), /*Flower Heir Cap*/ +('1003216', '6300', 'Hat 3'), /*Pirate Captain's Hat*/ +('1003247', '3600', 'Hat 3'), /*Mad Hatter's Hat*/ +('1003241', '4000', 'Hat 3'), /*6th Anniversary Party Hat*/ +('1003240', '6300', 'Hat 3'), /*Blueberry Candy Hoodie*/ +('1003239', '5000', 'Hat 3'), /*Raspberry Candy Hoodie*/ +('1003238', '5200', 'Hat 3'), /*Gray Puppy Ears*/ +('1003237', '3600', 'Hat 3'), /*Lion Head*/ +('1003235', '6000', 'Hat 3'), /*Blue Jeweled Chaplain Hat*/ +/*Page 22*/ +('1003234', '6000', 'Hat 3'), /*Pink Jeweled Chaplain Hat*/ +('1003233', '3600', 'Hat 3'), /*Honey Rabbit */ +('1003232', '3600', 'Hat 3'), /*Pretty Teddy*/ +('1003263', '4000', 'Hat 3'), /*MSE 4 Years & Unstoppable Hat*/ +('1003256', '5600', 'Hat 3'), /*Emerald Musical Note*/ +('1003255', '8800', 'Hat 3'), /*Quartz Musical Note*/ +('1003254', '8800', 'Hat 3'), /*Sapphire Musical Note*/ +('1003253', '3800', 'Hat 3'), /*Amber Musical Note*/ +('1003252', '7100', 'Hat 3'), /*Amethyst Musical Note*/ +/*Page 23*/ +('1003251', '3600', 'Hat 3'), /*Citrine Musical Note*/ +('1003250', '7400', 'Hat 3'), /*Ruby Musical Note*/ +('1003249', '6400', 'Hat 3'), /*Topaz Musical Note*/ +('1003279', '3200', 'Hat 3'), /*Chain Crusher Cap*/ +('1003278', '3600', 'Hat 3'), /*Mermaid Shell*/ +('1003277', '6400', 'Hat 3'), /*Grass Spirit*/ +('1003276', '6300', 'Hat 3'), /*Blue Heart Transparent Hat*/ +('1003272', '4900', 'Hat 3'), /*Bastille Hat*/ +('1003271', '6000', 'Hat 3'), /*Pink Heart Transparent Hat*/ +/*Page 24*/ +('1003269', '5000', 'Hat 3'), /*Button-a-holic Toy Cap*/ +('1003268', '8800', 'Hat 3'), /*Button-a-holic Sugar Cap*/ +('1003265', '5000', 'Hat 3'), /*Marine Tinia Shades*/ +('1003264', '3400', 'Hat 3'), /*Rose Tinia Shades*/ +('1003295', '8800', 'Hat 3'), /*Lazy Chicken Headband*/ +('1003358', '7100', 'Hat 3'), /*Sweet Purple Sun Cap*/ +('1003357', '7100', 'Hat 3'), /*Night Navy Sun Cap*/ +('1003356', '7100', 'Hat 3'), /*Crystal Blue Sun Cap*/ +('1003355', '6400', 'Hat 3'), /*Lime Green Sun Cap*/ +/*Page 25*/ +('1003354', '6400', 'Hat 3'), /*Fresh Lemon Sun Cap*/ +('1003353', '4900', 'Hat 3'), /*Dear Orange Sun Cap*/ +('1003352', '6300', 'Hat 3'), /*Tic Toc Red Sun Cap*/ +('1003368', '8800', 'Hat 3'), /*Western Cowboy Hat*/ +('1003367', '6400', 'Hat 3'), /*Crown of Flowers*/ +('1003362', '7100', 'Hat 3'), /*Rosy Pink Twin Ribbons*/ +('1003390', '4700', 'Hat 3'), /*Orchid's Black Wing Hat*/ +('1003387', '7400', 'Hat 3'), /*Beanie Headphone*/ +('1003386', '5000', 'Hat 3'), /*Bat Costume Hood*/ +/*Page 26*/ +('1003377', '6400', 'Hat 3'), /*Alchemist Hat*/ +('1003376', '3200', 'Hat 3'), /*Memorial Angel*/ +('1003404', '4000', 'Hat 3'), /*Imp Hat*/ +('1003403', '6000', 'Hat 3'), /*Dark Cygnus's Hairband*/ +('1003402', '3400', 'Hat 3'), /*Dark Hawkeye*/ +('1003401', '3800', 'Hat 3'), /*Dark Eckhart*/ +('1003400', '7600', 'Hat 3'), /*Dark Irena*/ +('1003399', '7100', 'Hat 3'), /*Dark Oz*/ +('1003398', '6400', 'Hat 3'), /*Dark Mihile*/ +/*Page 27*/ +('1003393', '7400', 'Hat 3'), /*Imperial Duke Crown*/ +('1003392', '3400', 'Hat 3'), /*Honeybee Antenna Hairband*/ +('1003422', '7400', 'Hat 3'), /*Garnet Raven Persona*/ +('1003421', '3400', 'Hat 3'), /*Noblesse Gold Hood*/ +('1003417', '6300', 'Hat 3'), /*Dino Cap*/ +('1003416', '3400', 'Hat 3'), /*Christmas Hairpin*/ +('1003463', '6000', 'Hat 3'), /*Pixiemom Hat*/ +('1003462', '3800', 'Hat 3'), /*Kitty Cap*/ +('1003461', '4700', 'Hat 3'), /*Lania's Flower Crown*/ +/*Page 28*/ +('1003460', '3200', 'Hat 3'), /*Milk Chocolate Cone*/ +('1003459', '5600', 'Hat 3'), /*Lucia Hat*/ +('1003487', '3200', 'Hat 3'), /*White Zodiac Dragon Cake*/ +('1003486', '5000', 'Hat 3'), /*Yellow Zodiac Dragon Cake*/ +('1003485', '6300', 'Hat 3'), /*Green Zodiac Dragon Cake*/ +('1003484', '6300', 'Hat 3'), /*White Zodiac Dragon Hat*/ +('1003483', '5600', 'Hat 3'), /*Pink Zodiac Dragon Hat*/ +('1003482', '4900', 'Hat 3'), /*Green Zodiac Dragon Hat*/ +('1003503', '5200', 'Hat 3'), /*Alice's Teacup*/ +/*Page 29*/ +('1003496', '3200', 'Hat 3'), /*Cute Shrimp Nigiri*/ +('1003495', '6300', 'Hat 3'), /*Tangy Fish Egg Nigiri*/ +('1003494', '3800', 'Hat 3'), /*Chewy Octopus Nigiri*/ + + + +/*Page 1*/ +('1003493', '3600', 'Hat 4'), /*Fresh Salmon Nigiri*/ +('1003492', '6000', 'Hat 4'), /*Crisp Egg Nigiri*/ +('1003490', '6400', 'Hat 4'), /*Maid Band*/ +('1003489', '3200', 'Hat 4'), /*Gas Mask and Helmet*/ +('1003519', '4700', 'Hat 4'), /*Sunset-colored Straw Hat*/ +('1003518', '3200', 'Hat 4'), /*Small Black Devil Hat*/ +('1003517', '3800', 'Hat 4'), /*Ebony Pimpernel Hat*/ +('1003516', '7400', 'Hat 4'), /*Honeybee Antenna Hairband*/ +('1003510', '3800', 'Hat 4'), /*Alice Rabbit Hat*/ +/*Page 2*/ +('1003509', '7100', 'Hat 4'), /*Sausage Hat*/ + +('1003506', '4000', 'Hat 4'), /*Intergalactic Hat*/ +('1003505', '8800', 'Hat 4'), /*Red Dragon Horn*/ +('1003504', '5600', 'Hat 4'), /*Blue Dragon Horn\r\n*/ +('1003533', '3200', 'Hat 4'), /*Legendary Hat*/ +('1003532', '7100', 'Hat 4'), /*Lucky Hat*/ +('1003531', '3400', 'Hat 4'), /*Dainty Hat*/ +('1003520', '7100', 'Hat 4'), /*Wire Headband*/ +/*Page 3*/ +('1003549', '6000', 'Hat 4'), /*Aerial Mystic Black Silk Ribbon*/ +('1003548', '3200', 'Hat 4'), /*Aerial Mystic Black Silk Hat*/ +('1003547', '3600', 'Hat 4'), /*Parfait Cupcake Hairpin*/ +('1003546', '4700', 'Hat 4'), /*Chocolate Cupcake Hairpin*/ +('1003545', '4700', 'Hat 4'), /*Melon Cupcake Hairpin*/ +('1003544', '5600', 'Hat 4'), /*Strawberry Cupcake Hairpin*/ +('1003543', '5600', 'Hat 4'), /*Macaroon Hairpin*/ +('1003542', '6000', 'Hat 4'), /*Strawberry Macaroon Hairpin*/ +('1003541', '6000', 'Hat 4'), /*Country Rabbit Hat*/ +/*Page 4*/ +('1003539', '5600', 'Hat 4'), /*GM Nori's Wing Cap*/ +('1003538', '3600', 'Hat 4'), /*Button-A-Holic Toy Cap*/ +('1003536', '6000', 'Hat 4'), /*Lucia Hat*/ +('1003560', '7100', 'Hat 4'), /*Yellow Cat Hood*/ +('1003559', '7600', 'Hat 4'), /*Blue Cat Hood*/ +('1003597', '3200', 'Hat 4'), /*Metal Crown Nuera*/ +('1003596', '6000', 'Hat 4'), /*Metal Pink Baseball Cap*/ +('1003595', '5000', 'Hat 4'), /*Curly Rabbit Poof*/ +('1003594', '3400', 'Hat 4'), /*Cool Summer Snorkeling*/ +/*Page 5*/ +('1003588', '6000', 'Hat 4'), /*Pink Teddy Hat*/ +('1003587', '4900', 'Hat 4'), /*Pink Ribbon Marine Cap*/ +('1003586', '3600', 'Hat 4'), /*Mint Star Marine Cap*/ +('1003626', '4700', 'Hat 4'), /*Jett's Hat*/ +('1003643', '6400', 'Hat 4'), /*Yin-Yang Hairpin*/ +('1003642', '5000', 'Hat 4'), /*Cheering Gold*/ +('1003641', '3800', 'Hat 4'), /*Cheering Green*/ +('1003640', '6000', 'Hat 4'), /*Cheering Blue*/ +('1003639', '3400', 'Hat 4'), /*Cheering Pink*/ +/*Page 6*/ +('1003636', '4700', 'Hat 4'), /*Aqua Shell*/ +('1003658', '5000', 'Hat 4'), /*Muneshige's Helm*/ +('1003657', '3800', 'Hat 4'), /*Shingen's Helm*/ +('1003656', '7400', 'Hat 4'), /*Hideyoshi's Helm*/ +('1003655', '7100', 'Hat 4'), /*Kanetsuku's Helm*/ +('1003654', '7400', 'Hat 4'), /*Yukimura's Helm*/ +('1003673', '7400', 'Hat 4'), /*Maple Green Beret*/ +('1003672', '3200', 'Hat 4'), /*Maple Black Beret*/ +('1003671', '7100', 'Hat 4'), /*Maple Blue Beret*/ +/*Page 7*/ +('1003670', '3600', 'Hat 4'), /*Maple Red Beret*/ +('1003669', '6300', 'Hat 4'), /*Hyper Honeybee Antenna Hairband*/ +('1003668', '7600', 'Hat 4'), /*Hyper Lost Baby Chick*/ +('1003667', '3600', 'Hat 4'), /*Red Arabian Hat*/ +('1003666', '3800', 'Hat 4'), /*Blue Arabian Hat*/ +('1003688', '7600', 'Hat 4'), /*Hyper Cat Hat*/ +('1003687', '6400', 'Hat 4'), /*Hyper Teddy Earmuffs*/ +('1003686', '4900', 'Hat 4'), /*Paper Bag*/ +('1003685', '4000', 'Hat 4'), /*Angel Halo*/ +/*Page 8*/ +('1003684', '7100', 'Hat 4'), /*Tiger Cub Hat*/ +('1003683', '4900', 'Hat 4'), /*Cow Mask*/ +('1003682', '4000', 'Hat 4'), /*Jiangshi Hat*/ +('1003681', '6300', 'Hat 4'), /*Ghost Mask*/ +('1003711', '8800', 'Hat 4'), /*[MS Custom] Doll Face Hat*/ +('1003710', '4700', 'Hat 4'), /*[MS Custom] Maple-Stein*/ +('1003709', '6300', 'Hat 4'), /*[MS Custom] Werebeast*/ +('1003708', '7400', 'Hat 4'), /*[MS Custom] The Chinese Undead's Hat (Maroon)*/ +('1003707', '6300', 'Hat 4'), /*[MS Custom] Black Snowboard Helmet*/ +/*Page 9*/ +('1003706', '5000', 'Hat 4'), /*[MS Custom] Zombie Mushroom Hat*/ +('1003705', '8800', 'Hat 4'), /*[MS Custom] Green Picnic Hat*/ +('1003704', '6300', 'Hat 4'), /*[MS Custom] Red Red Rain Cap*/ +('1003703', '8800', 'Hat 4'), /*[MS Custom] Patissier Hat*/ +('1003702', '7600', 'Hat 4'), /*[MS Custom] Sky Blue Rain Cap*/ +('1003701', '7600', 'Hat 4'), /*[MS Custom] Yellow Rain Cap*/ +('1003700', '5000', 'Hat 4'), /*[MS Custom] Red Festive Gumball*/ +('1003699', '8800', 'Hat 4'), /*Hidden Street Red Husky Hat*/ +('1003727', '4900', 'Hat 4'), /*Red Pierre Hat*/ +/*Page 10*/ +('1003714', '3400', 'Hat 4'), /*Halloween Leopard Ears*/ +('1003713', '7100', 'Hat 4'), /*Seal Hat*/ +('1003712', '4700', 'Hat 4'), /*[MS Discount] Chain Crusher Cap*/ +('1003743', '5000', 'Hat 4'), /*Slither Style Cap*/ +('1003742', '4000', 'Hat 4'), /*Dark Devil Hat*/ +('1003739', '3600', 'Hat 4'), /*Decked Out Santa Hat*/ +('1003738', '3400', 'Hat 4'), /*Santa Hat*/ +('1003737', '6000', 'Hat 4'), /*Snowman*/ +('1003736', '6300', 'Hat 4'), /*Reindeer Hat*/ +/*Page 11*/ +('1003735', '3200', 'Hat 4'), /*Scarlion Boss Hat*/ +('1003730', '5600', 'Hat 4'), /*Cat Lolita Hat*/ +('1003729', '3600', 'Hat 4'), /*Hyper Bunny Earmuffs*/ +('1003728', '5200', 'Hat 4'), /*Blue Pierre Hat*/ +('1003759', '4900', 'Hat 4'), /*Blue Point Kitty Hat*/ +('1003756', '3400', 'Hat 4'), /*Polar Bear Hat*/ +('1003750', '6400', 'Hat 4'), /*Ribbon Kitty Ears*/ +('1003749', '4900', 'Hat 4'), /*Zodiac Snake Cake*/ +('1003775', '6300', 'Hat 4'), /*GM Hat*/ +/*Page 12*/ +('1003763', '5600', 'Hat 4'), /*Black Wing Master's Hat*/ +('1003761', '4700', 'Hat 4'), /*Featherly Angel Hat*/ +('1003760', '4900', 'Hat 4'), /*Kitty Headphones*/ +('1003790', '5000', 'Hat 4'), /*Visor*/ +('1003789', '6000', 'Hat 4'), /*Zombie Hunter Hat*/ +('1003779', '6400', 'Hat 4'), /*White Rabbit Hat*/ +('1003778', '5000', 'Hat 4'), /*Fluffy Cat Hood*/ +('1003777', '7100', 'Hat 4'), /*Goth Cat Hood*/ +('1003776', '4700', 'Hat 4'), /*Harp Seal Mask*/ +/*Page 13*/ +('1003807', '3600', 'Hat 4'), /*Heart Sunglasses*/ +('1003804', '6000', 'Hat 4'), /*Ducky Hat*/ +('1003803', '4700', 'Hat 4'), /*Purple Dinosaur Hat*/ +('1003802', '5600', 'Hat 4'), /*Green Dinosaur Hat*/ +('1003792', '3800', 'Hat 4'), /*Inkwell Hat*/ +('1003820', '5000', 'Hat 4'), /*Dark Hawkeye*/ +('1003819', '4700', 'Hat 4'), /*Dark Eckhart*/ +('1003818', '6300', 'Hat 4'), /*Dark Irena*/ +('1003817', '6400', 'Hat 4'), /*Dark Oz*/ +/*Page 14*/ +('1003816', '3800', 'Hat 4'), /*Dark Mihile*/ +('1003815', '3800', 'Hat 4'), /*Hilla's Hairpin*/ +('1003809', '6000', 'Hat 4'), /*Mystic Black Silk Ribbon*/ +('1003808', '3400', 'Hat 4'), /*Mystic Black Silk Hat*/ +('1003839', '4900', 'Hat 4'), /*Goin' Nuclear Wig*/ +('1003838', '3200', 'Hat 4'), /*Wacky Olympus Wig*/ +('1003837', '5200', 'Hat 4'), /*Colorstream Wig*/ +('1003836', '3400', 'Hat 4'), /*Wild Spike Wig*/ +('1003831', '7400', 'Hat 4'), /*Ramling Hair Pin*/ +/*Page 15*/ +('1003830', '3400', 'Hat 4'), /*Blue Love Bonnet*/ +('1003829', '5600', 'Hat 4'), /*Bunny Top Hat*/ +('1003827', '3600', 'Hat 4'), /*Miko Wig*/ +('1003826', '5000', 'Hat 4'), /*Samurai Hair-do*/ +('1003825', '3200', 'Hat 4'), /*The Bladed Falcon's Helm*/ +('1003855', '5000', 'Hat 4'), /*Leaf Hat*/ +('1003853', '5600', 'Hat 4'), /*Blavy Angel Wing*/ +('1003852', '7600', 'Hat 4'), /*Cute Shrimp Nigiri*/ +('1003851', '7600', 'Hat 4'), /*Tangy Fish Egg Nigiri*/ +/*Page 16*/ +('1003850', '8800', 'Hat 4'), /*Chewy Octopus Nigiri*/ +('1003849', '7600', 'Hat 4'), /*Fresh Salmon Nigiri*/ +('1003848', '3400', 'Hat 4'), /*Crisp Egg Nigiri*/ +('1003847', '8800', 'Hat 4'), /*Slayer Wig*/ +('1003846', '5200', 'Hat 4'), /*Danjin Hat*/ +('1003845', '4000', 'Hat 4'), /*Lorna and Pan Hat*/ +('1003844', '8800', 'Hat 4'), /*Nao Hat*/ +('1003843', '5600', 'Hat 4'), /*Bizarre Fox Mask*/ +('1003842', '3600', 'Hat 4'), /*Succubus Hat*/ +/*Page 17*/ +('1003867', '6300', 'Hat 4'), /*Nice Shot Visor*/ +('1003865', '6400', 'Hat 4'), /*Starlight Wings*/ +('1003862', '3200', 'Hat 4'), /*Teddy Ribbon*/ +('1003861', '7400', 'Hat 4'), /*Funky Mini Crown*/ +('1003860', '4000', 'Hat 4'), /*Seria Wig*/ +('1003859', '3600', 'Hat 4'), /*Iris Psyche*/ +('1003884', '4900', 'Hat 4'), /*Cute Wire Hair Band*/ +('1003883', '7600', 'Hat 4'), /*Blue Bow Beret*/ +('1003882', '7400', 'Hat 4'), /*Giant Bear Cap*/ +/*Page 18*/ +('1003881', '7600', 'Hat 4'), /*Paper Boat Hat*/ +('1003878', '7400', 'Hat 4'), /*Pepe Hat*/ +('1003877', '5200', 'Hat 4'), /*Yeti Hat*/ +('1003876', '8800', 'Hat 4'), /*Lupin Hat*/ +('1003875', '5000', 'Hat 4'), /*Jr. Cellion Hat*/ +('1003874', '7600', 'Hat 4'), /*Blue Mossy Mom Hat*/ +('1003873', '5600', 'Hat 4'), /*Water Thief Hat*/ +('1003903', '6000', 'Hat 4'), /*Angelic Navy Cap*/ +('1003902', '4700', 'Hat 4'), /*Pretty Teddy*/ +/*Page 19*/ +('1003901', '7100', 'Hat 4'), /*Courageous Bunny Hat*/ +('1003900', '8800', 'Hat 4'), /*Blue Heart Transparent Hat*/ +('1003899', '6000', 'Hat 4'), /*Pirate Captain's Hat*/ +('1003897', '6300', 'Hat 4'), /*Indian Chief Hat*/ +('1003892', '5000', 'Hat 4'), /*Leaf Diamond*/ +('1003890', '7400', 'Hat 4'), /*GM Sori's Fedora*/ +('1003889', '5200', 'Hat 4'), /*I'm Controlled!*/ +('1003919', '8800', 'Hat 4'), /*Plait-Knitted Hat*/ +('1003918', '4700', 'Hat 4'), /*Winged Cap*/ +/*Page 20*/ +('1003917', '3200', 'Hat 4'), /*Pink Sunglasses Hat*/ +('1003915', '3200', 'Hat 4'), /*Pancake Hat*/ +('1003914', '4900', 'Hat 4'), /*Marine Tinia Shades*/ +('1003913', '3600', 'Hat 4'), /*Red Bow*/ +('1003912', '6000', 'Hat 4'), /*Puppy Ears*/ +('1003910', '4700', 'Hat 4'), /*Petite Diablo*/ +('1003909', '4700', 'Hat 4'), /*Pink Soda Cap*/ +('1003907', '8800', 'Hat 4'), /*Tenacious Zakum Helmet*/ +('1003906', '6400', 'Hat 4'), /*Triumphant Zakum Hat*/ +/*Page 21*/ +('1003905', '6400', 'Hat 4'), /*Tenacious Ribbon Pig Hat*/ +('1003904', '3800', 'Hat 4'), /*Triumphant Ribbon Pig Hat*/ +('1003935', '3200', 'Hat 4'), /*Anima Ears*/ +('1003934', '8800', 'Hat 4'), /*Shadow Hood*/ +('1003920', '3800', 'Hat 4'), /*Hawaiian Sunhat*/ +('1003951', '6300', 'Hat 4'), /*Odette Tiara*/ +('1003950', '7400', 'Hat 4'), /*Plump Bear Hood*/ +('1003949', '5600', 'Hat 4'), /*フューチャーロイドヘッドセンサー*/ +('1003948', '3400', 'Hat 4'), /*フューチャーロイドヘッドセンサー*/ +/*Page 22*/ +('1003945', '7100', 'Hat 4'), /*Superstar Crown*/ +('1003944', '7400', 'Hat 4'), /*Blue Polka Dot Bow*/ +('1003943', '5000', 'Hat 4'), /*Sleepy Turkey*/ +('1003942', '5600', 'Hat 4'), /*Blue Cheer*/ +('1003941', '3400', 'Hat 4'), /*Pink Cheer*/ +('1003940', '6300', 'Hat 4'), /*Curly Rabbit Poof*/ +('1003937', '3800', 'Hat 4'), /*Romantic Bamboo Hat*/ +('1003936', '3600', 'Hat 4'), /*Azalea Hair Pin*/ +('1003967', '6300', 'Hat 4'), /*Chocoram Doll Hat*/ +/*Page 23*/ +('1003966', '4900', 'Hat 4'), /*Camellia Hairpin*/ +('1003965', '6300', 'Hat 4'), /*Chicken Hataroo*/ +('1003964', '4900', 'Hat 4'), /*Star Checkered Cap*/ +('1003963', '5200', 'Hat 4'), /*PSY Hat*/ +('1003962', '4900', 'Hat 4'), /*Checkered Bonnet*/ +('1003958', '4700', 'Hat 4'), /*Pink Mochi Ice*/ +('1003957', '4700', 'Hat 4'), /*Mint Mochi Ice*/ +('1003955', '5600', 'Hat 4'), /*Romance Rose*/ +('1003954', '5000', 'Hat 4'), /*Head Cooler*/ +/*Page 24*/ +('1003953', '4000', 'Hat 4'), /*Rhinne Luster*/ +('1003952', '6000', 'Hat 4'), /*Odile Tiara*/ +('1003975', '6300', 'Hat 4'), /*Princess of Time Veil*/ +('1003972', '6400', 'Hat 4'), /*Powder Lace Band*/ +('1003971', '4700', 'Hat 4'), /*Powder Fedora*/ +('1003968', '3600', 'Hat 4'), /*Puffram Hat*/ +('1003998', '7400', 'Hat 4'), /*White Choco Bunny*/ +('1004015', '6300', 'Hat 4'), /*Freud's Face(M)*/ +('1004014', '3600', 'Hat 4'), /*Grab N' Pull*/ +/*Page 25*/ +('1004004', '5200', 'Hat 4'), /*Grey Nero Hoodie*/ +('1004003', '7600', 'Hat 4'), /*Pink Nero Hoodie*/ +('1004002', '7600', 'Hat 4'), /*Shadow Hood*/ +('1004001', '6400', 'Hat 4'), /*Vampire Phantom Hat*/ +('1004000', '6400', 'Hat 4'), /*Dark Devil Hat*/ +('1004029', '7100', 'Hat 4'), /*Snow Bear Beanie*/ +('1004028', '3600', 'Hat 4'), /*Orange Cat Beanie*/ +('1004027', '7600', 'Hat 4'), /*Sky Blue Cat Beanie*/ +('1004026', '6000', 'Hat 4'), /*Black Cat Beanie*/ +/*Page 26*/ +('1004024', '4900', 'Hat 4'), /*Cheese Hat*/ +('1004018', '3400', 'Hat 4'), /*Brave Aran's Helmet*/ +('1004017', '5000', 'Hat 4'), /*Aran's Helmet*/ +('1004016', '5600', 'Hat 4'), /*Freud's Face(F)*/ +('1004047', '7100', 'Hat 4'), /*Beast Tamer Animal Ears 8*/ +('1004046', '6000', 'Hat 4'), /*Beast Tamer Animal Ears 7*/ +('1004045', '5000', 'Hat 4'), /*Beast Tamer Animal Ears 6*/ +('1004044', '3800', 'Hat 4'), /*Bear Ears*/ +('1004043', '3400', 'Hat 4'), /*Puppy Ears*/ +/*Page 27*/ +('1004042', '6400', 'Hat 4'), /*Deluxe Rabbit Ears*/ +('1004041', '5000', 'Hat 4'), /*Chipmunk Ears*/ +('1004040', '3800', 'Hat 4'), /*Red Panda Ears*/ +('1004039', '3800', 'Hat 4'), /*Eunwol Fox Ears*/ +('1004038', '5600', 'Hat 4'), /*Ice Hat*/ +('1004036', '8800', 'Hat 4'), /*Mr. K's Cat Hat*/ +('1004035', '4900', 'Hat 4'), /*Snake Snapback Hat*/ +('1004034', '6400', 'Hat 4'), /*Study Break*/ + +/*Page 28*/ +('1004048', '5600', 'Hat 4'), /*Rudi's Hat*/ +('1004074', '7400', 'Hat 4'), /*Year of Horse Hat (Blue)*/ +('1004073', '3200', 'Hat 4'), /*Year of Horse Hat (Peach)*/ +('1004094', '3600', 'Hat 4'), /*White Choco Bunny*/ +('1004093', '5600', 'Hat 4'), /*Yellow Knitted Beanie*/ +('1004092', '6400', 'Hat 4'), /*Cutie Horse Hat*/ +('1004091', '7100', 'Hat 4'), /*Deer Headband*/ +('1004090', '7600', 'Hat 4'), /*Explorer Cap*/ + +/*Page 29*/ + +('1004081', '6300', 'Hat 4'), /*Dawn Bear Hoodie*/ +('1004111', '6000', 'Hat 4'), /*Red Ribbon Hairband*/ + + + +/*Page 1*/ +('1004110', '4000', 'Hat 5'), /*Blue Ribbon Hairband*/ +('1004109', '4000', 'Hat 5'), /*Transparent Hat*/ +('1004108', '6300', 'Hat 5'), /*Fancy Magician Hat*/ +('1004106', '3600', 'Hat 5'), /*Guardian Head Band*/ +('1004099', '6000', 'Hat 5'), /*Christmas Antlers*/ +('1004126', '7600', 'Hat 5'), /*Rainbow Hat*/ +('1004125', '4900', 'Hat 5'), /*Pineapple Hat*/ +('1004124', '7100', 'Hat 5'), /*Strawberry Headgear*/ +('1004123', '7600', 'Hat 5'), /*Contemporary Chic Hat*/ +/*Page 2*/ +('1004122', '5200', 'Hat 5'), /*Chef Hat*/ +('1004120', '3200', 'Hat 5'), /*Strawberry Fairy*/ +('1004117', '4700', 'Hat 5'), /*Candy Candy*/ +('1004113', '7600', 'Hat 5'), /*Ghost Bride's Antique Wedding Veil*/ +('1004143', '4900', 'Hat 5'), /*Commander Magnus Mask*/ +('1004142', '4000', 'Hat 5'), /*Commander Lucid Mask*/ +('1004141', '6000', 'Hat 5'), /*Commander Damien Mask*/ +('1004140', '5600', 'Hat 5'), /*Commander Lotus Mask*/ +('1004139', '8800', 'Hat 5'), /*Pink Panda Hat*/ +/*Page 3*/ +('1004137', '6400', 'Hat 5'), /*Rabbit and Bear Hat*/ +('1004136', '4900', 'Hat 5'), /*Nurse Cap*/ +('1004158', '7100', 'Hat 5'), /*LED Mouse Band*/ +('1004157', '5000', 'Hat 5'), /*Heart Headset*/ +('1004156', '3200', 'Hat 5'), /*Starry Earmuff*/ +('1004148', '3400', 'Hat 5'), /*Commander Hilla Mask*/ +('1004147', '7100', 'Hat 5'), /*Commander Will Mask*/ +('1004146', '3200', 'Hat 5'), /*Commander Orchid Mask*/ +('1004145', '7100', 'Hat 5'), /*Commander Arkarium Mask*/ +/*Page 4*/ +('1004144', '6400', 'Hat 5'), /*Commander Von Leon Mask*/ +('1004175', '5200', 'Hat 5'), /*Angelic Melody*/ +('1004171', '3600', 'Hat 5'), /*Dancing Carousel*/ +('1004170', '8800', 'Hat 5'), /*Colorful Marble Parfait*/ +('1004169', '5200', 'Hat 5'), /*Fried Egg Head*/ +('1004168', '5600', 'Hat 5'), /*Cat Hat*/ +('1004167', '6000', 'Hat 5'), /*Dinosaur Snapback*/ +('1004166', '3400', 'Hat 5'), /*Black Butterfly Ribbon Headband*/ +('1004165', '5000', 'Hat 5'), /*Spring Rose*/ +/*Page 5*/ +('1004164', '7400', 'Hat 5'), /*Targa Silk Hat*/ +('1004191', '5200', 'Hat 5'), /*粉红天使翅膀帽*/ +('1004190', '4700', 'Hat 5'), /*Island Travel Headphones*/ +('1004181', '3600', 'Hat 5'), /*Candy Party Ribbon Hairpin*/ +('1004180', '3200', 'Hat 5'), /*Disease Control STAR*/ +('1004179', '4700', 'Hat 5'), /*Red Elf Hat*/ +('1004178', '6000', 'Hat 5'), /*Slab*/ +('1004177', '5200', 'Hat 5'), /*Dark Cygnus*/ +('1004176', '3400', 'Hat 5'), /*Rabbit Mask*/ +/*Page 6*/ +('1004205', '4000', 'Hat 5'), /*Red Pony Hat*/ +('1004204', '4700', 'Hat 5'), /*Blue Pony Hat*/ +('1004203', '5200', 'Hat 5'), /*Kitty Kitty Hat*/ +('1004202', '5200', 'Hat 5'), /*隐武士战盔*/ +('1004201', '3800', 'Hat 5'), /*暗夜精灵战盔*/ +('1004200', '3200', 'Hat 5'), /*Sweet Summer Cap*/ +('1004199', '6400', 'Hat 5'), /*Ayame's Hairpin*/ +('1004198', '7100', 'Hat 5'), /*태극 머리띠*/ +('1004197', '6300', 'Hat 5'), /*Stop It Mr. Shark*/ +/*Page 7*/ +('1004195', '5200', 'Hat 5'), /*축구공 머리띠*/ +('1004194', '4900', 'Hat 5'), /*Prim Ribbon Beret*/ +('1004193', '7600', 'Hat 5'), /*Sparkling Goggles Cap*/ +('1004192', '6000', 'Hat 5'), /*Do-re-mi Headphone*/ +('1004213', '3200', 'Hat 5'), /*Hula Feather Decoration*/ +('1004212', '5200', 'Hat 5'), /*[[FROZEN CONTENT]] Frozen Dressy Ribbon*/ +('1004211', '6400', 'Hat 5'), /*Baby Earmuffs*/ +('1004209', '5600', 'Hat 5'), /*Peach Camellia Hairpin*/ +('1004239', '5200', 'Hat 5'), /*Peach Fairy*/ +/*Page 8*/ +('1004254', '5000', 'Hat 5'), /*Master-o-Bingo Hat*/ +('1004253', '7100', 'Hat 5'), /*Old School Uniform Hat*/ +('1004252', '6000', 'Hat 5'), /*Dark Devil Horns*/ +('1004251', '5000', 'Hat 5'), /*Bright Angel's Halo*/ +('1004250', '3400', 'Hat 5'), /*Star Candy Popsicle*/ +('1004269', '3200', 'Hat 5'), /*Apple Stalk Puffy Hat*/ +('1004268', '3800', 'Hat 5'), /*Flower of Life*/ +('1004285', '3200', 'Hat 5'), /*Pink Mustache Cap*/ +('1004284', '3200', 'Hat 5'), /*Orange Mustache Cap*/ +/*Page 9*/ +('1004283', '5200', 'Hat 5'), /*Aqua Mustache Cap*/ +('1004282', '5600', 'Hat 5'), /*Polka-Dot Red Ribbon*/ +('1004281', '4900', 'Hat 5'), /*Propeller Cap*/ +('1004279', '6400', 'Hat 5'), /*Squirrel Fedora*/ +('1004276', '4900', 'Hat 5'), /*Kemdi Mask*/ +('1004275', '4900', 'Hat 5'), /*Lucky Lucky Hat*/ +('1004303', '4000', 'Hat 5'), /*Slab*/ +('1004302', '6400', 'Hat 5'), /*Neville, the Legend*/ +('1004301', '7100', 'Hat 5'), /*Disease Control STAR*/ +/*Page 10*/ +('1004299', '3400', 'Hat 5'), /*Brown Puppy Hat*/ +('1004298', '7400', 'Hat 5'), /*White Puppy Hat*/ +('1004296', '8800', 'Hat 5'), /*Lovey Chick Hat*/ +('1004295', '3200', 'Hat 5'), /*Singing Chick Hat*/ +('1004294', '3800', 'Hat 5'), /*Sweet Persimmon Hat*/ +('1004319', '5200', 'Hat 5'), /*Commander Orchid Mask*/ +('1004318', '5200', 'Hat 5'), /*Commander Arkarium Mask*/ +('1004317', '4000', 'Hat 5'), /*Commander Von Leon Mask*/ +('1004316', '4000', 'Hat 5'), /*Commander Magnus Mask*/ +/*Page 11*/ +('1004315', '6000', 'Hat 5'), /*Commander Lucid Mask*/ +('1004314', '4900', 'Hat 5'), /*Commander Damien Mask*/ +('1004313', '7100', 'Hat 5'), /*Commander Lotus Mask*/ +('1004312', '3600', 'Hat 5'), /*Werebeast*/ +('1004311', '7600', 'Hat 5'), /*Old Hockey Mask*/ +('1004310', '7400', 'Hat 5'), /*Scarface Mask*/ +('1004309', '4900', 'Hat 5'), /*Slab*/ +('1004308', '3600', 'Hat 5'), /*Neville, the Legend*/ +('1004307', '8800', 'Hat 5'), /*Disease Control STAR*/ +/*Page 12*/ +('1004306', '4900', 'Hat 5'), /*Werebeast*/ +('1004305', '6400', 'Hat 5'), /*Old Hockey Mask*/ +('1004304', '6000', 'Hat 5'), /*Scarface Mask*/ +('1004332', '3800', 'Hat 5'), /*Brown Puppy Hat*/ +('1004329', '4900', 'Hat 5'), /*Blue Baseball Cap*/ +('1004328', '3800', 'Hat 5'), /*Pink Baseball Cap*/ +('1004327', '5000', 'Hat 5'), /*Starry Headband*/ +('1004326', '3200', 'Hat 5'), /*Neville, the Legend*/ +('1004325', '3800', 'Hat 5'), /*Disease Control STAR*/ +/*Page 13*/ +('1004324', '4900', 'Hat 5'), /*Gas Mask*/ +('1004323', '4700', 'Hat 5'), /*Slab*/ +('1004322', '3800', 'Hat 5'), /*Rose Hat*/ +('1004321', '7600', 'Hat 5'), /*Commander Hilla Mask*/ +('1004320', '3800', 'Hat 5'), /*Commander Will Mask*/ +('1004343', '5600', 'Hat 5'), /*Skull Hat*/ +('1004342', '4700', 'Hat 5'), /*Witch Hat*/ +('1004341', '3400', 'Hat 5'), /*Messy Wig*/ +('1004340', '3400', 'Hat 5'), /*Worn Skull Hat*/ +/*Page 14*/ +('1004339', '7400', 'Hat 5'), /*Worn Witch Hat*/ +('1004338', '4700', 'Hat 5'), /*Worn Messy Wig*/ +('1004337', '6400', 'Hat 5'), /*Ill Orchid Wig*/ +('1004336', '3800', 'Hat 5'), /*Raging Lotus Wig*/ +('1004399', '3400', 'Hat 5'), /*Sitting Mikasa*/ +('1004398', '4700', 'Hat 5'), /*Sitting Eren*/ +('1004397', '4000', 'Hat 5'), /*Cleaning Bandanna*/ +('1004396', '4700', 'Hat 5'), /*Levi Face*/ +('1004395', '3800', 'Hat 5'), /*Armin Face*/ +/*Page 15*/ +('1004394', '6400', 'Hat 5'), /*Mikasa Face*/ +('1004393', '7100', 'Hat 5'), /*Eren Face*/ +('1004386', '3600', 'Hat 5'), /*Reindeer Fawn Hat*/ +('1004385', '6000', 'Hat 5'), /*Pumpkin Cake Hat*/ +('1004384', '3600', 'Hat 5'), /*Dinofrog Hat*/ +('1004414', '3600', 'Hat 5'), /*Warm Bao*/ +('1004413', '4700', 'Hat 5'), /*Red Rudolph Horns*/ +('1004411', '7400', 'Hat 5'), /*Whipping Strawberry*/ +('1004408', '3800', 'Hat 5'), /*Icy Hat*/ +/*Page 16*/ +('1004407', '7600', 'Hat 5'), /*Ear Muffs and Pom Pom Beanie*/ +('1004406', '7600', 'Hat 5'), /*Humanity's Strongest Face*/ +('1004405', '3400', 'Hat 5'), /*Rawrin' Tiger Hat*/ +('1004403', '7600', 'Hat 5'), /*Cutie Bunny Hat*/ +('1004402', '7600', 'Hat 5'), /*Sitting Colossal Titan*/ +('1004401', '7400', 'Hat 5'), /*Sitting Levi*/ +('1004400', '6400', 'Hat 5'), /*Sitting Armin*/ +('1004431', '3200', 'Hat 5'), /*GS25 Jeonju Bibimbap*/ +('1004430', '3800', 'Hat 5'), /*GS25 Hot Fire Chicken*/ +/*Page 17*/ +('1004429', '4700', 'Hat 5'), /*GS25 Tuna Mayo*/ +('1004428', '6400', 'Hat 5'), /*Blue Bird Hat*/ +('1004419', '5000', 'Hat 5'), /*Aether Snow*/ +('1004418', '4000', 'Hat 5'), /*Unleashed Snow*/ +('1004417', '7400', 'Hat 5'), /*Pinnacle Snow*/ +('1004416', '8800', 'Hat 5'), /*Cutie Birk Hat*/ +('1004447', '6000', 'Hat 5'), /*Friendly Hat*/ +('1004446', '3400', 'Hat 5'), /*Loyal Hat*/ +('1004445', '5200', 'Hat 5'), /*Aurora Hat*/ +/*Page 18*/ +('1004443', '3200', 'Hat 5'), /*Snowman Mask*/ +('1004442', '4000', 'Hat 5'), /*Loyal Hat*/ +('1004441', '3400', 'Hat 5'), /*Friendly Hat*/ +('1004440', '7100', 'Hat 5'), /*Zodiac Ram Cake*/ +('1004439', '6300', 'Hat 5'), /*Silver Wolf Ears*/ +('1004438', '8800', 'Hat 5'), /*Fluffy Ram Earmuff*/ +('1004434', '7100', 'Hat 5'), /*GS25 Jeonju Bibimbap*/ +('1004433', '6300', 'Hat 5'), /*GS25 Hot Fire Chicken*/ +('1004432', '8800', 'Hat 5'), /*GS25 Tuna Mayo*/ +/*Page 19*/ +('1004463', '8800', 'Hat 5'), /*Star Planet Mascot Hat*/ +('1004462', '3400', 'Hat 5'), /*Pink Ram Horn Hat*/ +('1004461', '6000', 'Hat 5'), /*Blue Ram Horn Hat*/ +('1004460', '7400', 'Hat 5'), /*네네 오리엔탈파닭*/ +('1004459', '6000', 'Hat 5'), /*네네 쇼킹핫양념치킨*/ +('1004458', '6400', 'Hat 5'), /*네네 스노윙 치킨*/ +('1004456', '3400', 'Hat 5'), /*Lovely Princess Bonnet*/ +('1004455', '7400', 'Hat 5'), /*Cottontail Rabbit Hat*/ +('1004454', '8800', 'Hat 5'), /*Snow Raccoon Hat*/ +/*Page 20*/ +('1004453', '7600', 'Hat 5'), /*Snow Bunny Beret*/ +('1004450', '7100', 'Hat 5'), /*Cross Wing Hair Pin*/ +('1004448', '4900', 'Hat 5'), /*Happy Mouse Hat*/ +('1004479', '6300', 'Hat 5'), /*Hoi Poi Hat*/ +('1004478', '8800', 'Hat 5'), /*BOY Hat*/ +('1004472', '6000', 'Hat 5'), /*Devil Wolf Seduction*/ +('1004471', '7400', 'Hat 5'), /*Crystal Cat Ribbon*/ +('1004470', '7600', 'Hat 5'), /*Fluffy Trapper Hat*/ +('1004469', '7100', 'Hat 5'), /*Love Message*/ +/*Page 21*/ +('1004468', '3600', 'Hat 5'), /*Bubblecone Hat*/ +('1004467', '4700', 'Hat 5'), /*Giant Floppy Heart Hat*/ +('1004490', '6000', 'Hat 5'), /*Spike Headphone*/ +('1004489', '5200', 'Hat 5'), /*Skull Hairpin*/ +('1004488', '3400', 'Hat 5'), /*Healing Ribbon*/ +('1004487', '5000', 'Hat 5'), /*Starlight Hoodie*/ +('1004486', '4900', 'Hat 5'), /*Spring Crown*/ +('1004483', '6300', 'Hat 5'), /*Akatsuki's Hair-Tie*/ +('1004482', '8800', 'Hat 5'), /*Akarin's Butterfly Hairpin*/ +/*Page 22*/ +('1004480', '3200', 'Hat 5'), /*Naughty Boy Hat*/ +('1004511', '4000', 'Hat 5'), /*Orange Mushroom Cap Hat*/ +('1004510', '4900', 'Hat 5'), /*Bold Slime Hat*/ +('1004508', '3400', 'Hat 5'), /*The Kingdom Crown of Queen*/ +('1004506', '5600', 'Hat 5'), /*Cottontail Rabbit Hairband*/ +('1004505', '6000', 'Hat 5'), /*Pink Blossom Ribbon*/ +('1004504', '6400', 'Hat 5'), /*Noble Blossom Casquette*/ +('1004503', '7600', 'Hat 5'), /*Cat Hood*/ +('1004502', '4000', 'Hat 5'), /*Moonbeam Fox Ears*/ +/*Page 23*/ +('1004501', '3600', 'Hat 5'), /*The Kindom Crown of King*/ +('1004500', '3200', 'Hat 5'), /*Puffy Red Carp Hat*/ +('1004499', '6300', 'Hat 5'), /*Puffy Blue Carp Hat*/ +('1004527', '5200', 'Hat 5'), /*Soaring Goggles*/ +('1004526', '4700', 'Hat 5'), /*(Boiling)*/ +('1004525', '3800', 'Hat 5'), /*Hair Roll*/ +('1004524', '7400', 'Hat 5'), /*한입 덥썩 돼지바*/ +('1004515', '5000', 'Hat 5'), /*Candy Party Ribbon Hairpin*/ +('1004513', '4900', 'Hat 5'), /*Clingy Pepe Hat*/ +/*Page 24*/ +('1004512', '3200', 'Hat 5'), /*Happy Pink Bean Hat*/ +('1004543', '5600', 'Hat 5'), /*Polka-Dot Ribbon*/ +('1004541', '8800', 'Hat 5'), /*Tea Party Ribbon*/ +('1004540', '5200', 'Hat 5'), /*Evening Orchid Hoodie*/ +('1004539', '7400', 'Hat 5'), /*Tenacious Ribbon Pig Hat*/ +('1004538', '6400', 'Hat 5'), /*Triumphant Ribbon Pig Hat*/ +('1004537', '5200', 'Hat 5'), /*Tenacious Zakum Helmet*/ +('1004536', '5000', 'Hat 5'), /*Triumphant Zakum Hat*/ +('1004535', '7600', 'Hat 5'), /*Schwarzer Beret*/ +/*Page 25*/ +('1004534', '6000', 'Hat 5'), /*Modern Farm Straw Hat*/ +('1004533', '3200', 'Hat 5'), /*Gaming Moonbeam*/ +('1004532', '7400', 'Hat 5'), /*The Empress is Watching*/ +('1004530', '3800', 'Hat 5'), /*Blue Panda Doll Hat*/ +('1004528', '7600', 'Hat 5'), /*Silver Lotus Wig*/ +('1004559', '8800', 'Hat 5'), /*Beginner Chef Hat*/ +('1004558', '4000', 'Hat 5'), /*Hoya Hat*/ +('1004557', '6400', 'Hat 5'), /*Twinkling Star Helmet*/ +('1004548', '6300', 'Hat 5'), /*Crown Hat Tiger*/ +/*Page 26*/ +('1004547', '7400', 'Hat 5'), /*Red Ribbon Panda Hat*/ +('1004546', '4000', 'Hat 5'), /*Gentleman Bunny Hat*/ +('1004545', '4700', 'Hat 5'), /*Pink Ribbon Sheep Hat*/ +('1004544', '6000', 'Hat 5'), /*Fedora Hat Cat*/ +('1004575', '3400', 'Hat 5'), /*Romantic Rose*/ +('1004574', '5600', 'Hat 5'), /*Reboot Hat*/ +('1004571', '7600', 'Hat 5'), /*Black Sailor Ribbon Hat*/ +('1004570', '7100', 'Hat 5'), /*Black Sailor Hat*/ +('1004569', '6000', 'Hat 5'), /*Rainbow Flower Pin*/ +/*Page 27*/ +('1004568', '3800', 'Hat 5'), /*Mousy Bunny Hat*/ +('1004566', '4700', 'Hat 5'), /*Strawberry Shaved Ice Hat*/ +('1004565', '6400', 'Hat 5'), /*Mango Shaved Ice Hat*/ +('1004564', '7600', 'Hat 5'), /*Melon Shaved Ice Hat*/ +('1004563', '5000', 'Hat 5'), /*Chef Hat*/ +('1004562', '3800', 'Hat 5'), /*Sous-Chef Hat*/ +('1004561', '7600', 'Hat 5'), /*Advanced Chef Hat*/ +('1004560', '5000', 'Hat 5'), /*Intermediate Chef Hat*/ +('1004591', '3800', 'Hat 5'), /*White Time*/ +/*Page 28*/ +('1004590', '7600', 'Hat 5'), /*Blueberry Jewel Pin*/ +('1004589', '6000', 'Hat 5'), /*Jay's Sterilized Kitty Eye Patch*/ +('1004581', '7600', 'Hat 5'), /*Dango Dango Hat*/ +('1004580', '6300', 'Hat 5'), /*Yeonhwa School Sapphire Ornament*/ +('1004578', '6000', 'Hat 5'), /*Royal Crown*/ +('1004577', '3600', 'Hat 5'), /*Pink Soda Cap*/ +('1004576', '6300', 'Hat 5'), /*LED Mouse Band*/ +('1004603', '4700', 'Hat 5'), /*Star-Spangled Banner Hat*/ +('1004602', '3800', 'Hat 5'), /*Farmer's Treasure*/ +/*Page 29*/ +('1004601', '6400', 'Hat 5'), /*Baby Penguin Hat*/ +('1004600', '6400', 'Hat 5'), /*British Marine Hat*/ +('1004599', '3800', 'Hat 5'), /*Black Ursus Hat*/ + + + +/*Page 1*/ +('1004598', '3200', 'Hat 6'), /*Brown Ursus Hat*/ +('1004597', '6400', 'Hat 6'), /*White Ursus Hat*/ +('1004592', '3200', 'Hat 6'), /*Black Time*/ +('1004620', '5600', 'Hat 6'), /*Chestnut Rice Cake Hat*/ +('1004619', '7100', 'Hat 6'), /*Bean Rice Cake Hat*/ +('1004618', '8800', 'Hat 6'), /*Honey Rice Cake Hat*/ +('1004614', '4900', 'Hat 6'), /*Salmon Bowl Hat*/ +('1004613', '3600', 'Hat 6'), /*Pork Bowl Hat*/ +('1004612', '6000', 'Hat 6'), /*Eel Bowl Hat*/ +/*Page 2*/ +('1004610', '6400', 'Hat 6'), /*Flower Butterfly*/ +('1004609', '4700', 'Hat 6'), /*Head Sakura*/ +('1004639', '4900', 'Hat 6'), /*Arctic Hood*/ +('1004638', '3600', 'Hat 6'), /*Mr. Orlov Hat*/ +('1004636', '8800', 'Hat 6'), /*Banana Outing Hat*/ +('1004635', '7600', 'Hat 6'), /*Festive Gumball*/ +('1004634', '7100', 'Hat 6'), /*Midnight Black Cat*/ +('1004633', '3400', 'Hat 6'), /*Ghost Fedora*/ + +/*Page 3*/ + + + +('1004643', '6400', 'Hat 6'), /*Blue Marine Cap*/ +('1004642', '6000', 'Hat 6'), /*Shining Light*/ +('1004641', '6400', 'Hat 6'), /*Fairy's Flower Bud*/ +('1004640', '6300', 'Hat 6'), /*Block Party Cap*/ +('1004671', '6000', 'Hat 6'), /*Modern Farm Straw Hat*/ +('1004665', '3200', 'Hat 6'), /*Warm Rabbit Fur Hat*/ +/*Page 4*/ +('1004662', '3200', 'Hat 6'), /*Monkey Mochi Hat*/ +('1004661', '4900', 'Hat 6'), /*Fluffy Fox Ears (Silver)*/ +('1004660', '3200', 'Hat 6'), /*Fluffy Fox Ears (Gold)*/ +('1004659', '5200', 'Hat 6'), /*Polar Bear Hood*/ +('1004687', '4700', 'Hat 6'), /*Secret Shade*/ +('1004686', '5000', 'Hat 6'), /*Secret Shade*/ +('1004685', '3800', 'Hat 6'), /*Split Luminous*/ +('1004684', '7100', 'Hat 6'), /*Split Luminous*/ +('1004683', '3600', 'Hat 6'), /*Winter Aran*/ +/*Page 5*/ +('1004682', '3800', 'Hat 6'), /*Winter Aran*/ +('1004681', '5200', 'Hat 6'), /*Mystic Phantom*/ +('1004680', '6400', 'Hat 6'), /*Mystic Phantom*/ +('1004679', '3600', 'Hat 6'), /*Royal Mercedes*/ +('1004678', '8800', 'Hat 6'), /*Royal Mercedes*/ +('1004677', '5600', 'Hat 6'), /*Evan Golden Wings*/ +('1004676', '6400', 'Hat 6'), /*Evan Golden Wings*/ +('1004673', '5200', 'Hat 6'), /*Time Mistress Hat*/ +('1004672', '7400', 'Hat 6'), /*Time Master Hat*/ +/*Page 6*/ +('1004703', '4900', 'Hat 6'), /*Damien Snapback*/ +('1004702', '8800', 'Hat 6'), /*Fairy Knit Hat*/ +('1004701', '6000', 'Hat 6'), /*Winter Deer*/ +('1004700', '8800', 'Hat 6'), /*Beaky Owl Mask*/ +('1004698', '6000', 'Hat 6'), /*Black Time*/ +('1004697', '3200', 'Hat 6'), /*White Time*/ +('1004694', '3400', 'Hat 6'), /*Reindeer Hat*/ +('1004693', '5000', 'Hat 6'), /*Santa Hat*/ +('1004692', '4700', 'Hat 6'), /*Kid Snowman*/ +/*Page 7*/ +('1004691', '3400', 'Hat 6'), /*Fantastic Blue Rose*/ +('1004690', '7600', 'Hat 6'), /*Facewashing Band*/ +('1004689', '6000', 'Hat 6'), /*Rolled Towel*/ +('1004688', '7400', 'Hat 6'), /*Slumbering Dragon Snapback*/ +('1004718', '5000', 'Hat 6'), /*Eckhart Doll Hat*/ +('1004717', '7100', 'Hat 6'), /*Baby Binkie Bonnet*/ +('1004716', '6300', 'Hat 6'), /*Concert Muse Tiara*/ +('1004714', '7100', 'Hat 6'), /*Black Mage Snapback*/ +('1004713', '7400', 'Hat 6'), /*Kurama Ear Accessory*/ +/*Page 8*/ +('1004712', '3600', 'Hat 6'), /*Smile Seed Hat*/ +('1004711', '7400', 'Hat 6'), /*Oz Doll Hat*/ +('1004708', '3400', 'Hat 6'), /*Cozy Fur Hat */ +('1004706', '7400', 'Hat 6'), /*Winter Garden Hat*/ +('1004734', '7400', 'Hat 6'), /*Melon Shaved Ice Hat*/ +('1004733', '6300', 'Hat 6'), /*Gaming Moonbeam*/ +('1004732', '5000', 'Hat 6'), /*Calico Head Cat*/ +('1004731', '8800', 'Hat 6'), /*Adorable Gold Nyanya*/ +('1004730', '3400', 'Hat 6'), /*Hungry Moon Bunny*/ +/*Page 9*/ +('1004729', '3400', 'Hat 6'), /*Wee Moon Bunny's Rice Drop Soup*/ +('1004728', '3800', 'Hat 6'), /*Lady Moon Bunny's Rice Drop Soup*/ +('1004727', '4900', 'Hat 6'), /*Shade's Game of Yut*/ +('1004726', '7600', 'Hat 6'), /*Moonbeam's Game of Yut*/ +('1004725', '4000', 'Hat 6'), /*Pink Bean Likes Meat*/ +('1004724', '5600', 'Hat 6'), /*Bright New Year Hat*/ +('1004723', '3400', 'Hat 6'), /*Transcendence Stone Snapback*/ +('1004722', '7600', 'Hat 6'), /*Moon Dancer's Bandana*/ +('1004721', '4900', 'Hat 6'), /*Flower Dancer's Butterfly Pin*/ +/*Page 10*/ +('1004720', '5200', 'Hat 6'), /*Umbral Cap*/ +('1004751', '5000', 'Hat 6'), /*Windswept Rainbow Wig*/ +('1004750', '5000', 'Hat 6'), /*Casentino Rainbow Wig*/ + +('1004748', '8800', 'Hat 6'), /*Couples Army Helm*/ +('1004747', '4700', 'Hat 6'), /*Singles Army Helm*/ +('1004739', '3600', 'Hat 6'), /*Rainbow Clover*/ +('1004738', '7400', 'Hat 6'), /*Baby Ghost Hat*/ +('1004737', '6000', 'Hat 6'), /*Black Ribbon Hairpin*/ +/*Page 11*/ +('1004763', '7600', 'Hat 6'), /*Star Crusher Cap*/ +('1004762', '6400', 'Hat 6'), /*Cunning Sweet Pig Hat*/ +('1004761', '3800', 'Hat 6'), /*Mischievous Sweet Pig Hat*/ +('1004760', '6300', 'Hat 6'), /*Monster Kindergarten Hat*/ +('1004759', '3600', 'Hat 6'), /*Red Flame Phoenix Plume*/ +('1004758', '3400', 'Hat 6'), /*Blue Flame Phoenix Plume*/ +('1004757', '7100', 'Hat 6'), /*Cat in a Hat*/ +('1004756', '3400', 'Hat 6'), /*Shark Hoodie*/ +('1004754', '4900', 'Hat 6'), /*Fishtail Rainbow Wig*/ +/*Page 12*/ +('1004753', '7100', 'Hat 6'), /*Front Ponytail Rainbow Wig*/ +('1004752', '8800', 'Hat 6'), /*Rainbow Spore Wig*/ +('1004779', '6000', 'Hat 6'), /*Flower Garden Morning*/ +('1004778', '4900', 'Hat 6'), /*Noble Maple Crown*/ +('1004777', '7400', 'Hat 6'), /*Flower Garden Morning*/ +('1004776', '6400', 'Hat 6'), /*Spring Scene Rain Hat*/ +('1004775', '3400', 'Hat 6'), /*Lace Berry*/ +('1004774', '6400', 'Hat 6'), /*Bunny Bon Bon*/ +('1004799', '6300', 'Hat 6'), /*Carrot Rabbit Hairpin*/ +/*Page 13*/ +('1004798', '3800', 'Hat 6'), /*Scout Ribbon Beret*/ +('1004797', '5200', 'Hat 6'), /*Decorated Scout Beret*/ +('1004796', '6000', 'Hat 6'), /*Racing Elephant Hat*/ +('1004795', '3200', 'Hat 6'), /*Rose Blossom*/ +('1004794', '4000', 'Hat 6'), /*Rose Bud*/ +('1004793', '4900', 'Hat 6'), /*Lalala Earphones*/ +('1004792', '3800', 'Hat 6'), /*Hydrangea Lace Hairband*/ +('1004791', '3800', 'Hat 6'), /*Hydrangea Hair Pin*/ +('1004790', '3400', 'Hat 6'), /*Detective Hat*/ +/*Page 14*/ +('1004789', '3600', 'Hat 6'), /*Chicky Suds Hat*/ +('1004788', '5200', 'Hat 6'), /*Bubble Leaf Hat*/ +('1004787', '5000', 'Hat 6'), /*Chicken Cutie Hat*/ +('1004815', '3800', 'Hat 6'), /*Hearty Heart Antenna*/ +('1004814', '7600', 'Hat 6'), /*Kitty Hoodie Bandana*/ +('1004813', '3200', 'Hat 6'), /*Dragon Emperor's Helm*/ +('1004807', '5600', 'Hat 6'), /*Starfish and Clam*/ +('1004806', '5000', 'Hat 6'), /*Villain's Mask (Hat)*/ +('1004805', '3200', 'Hat 6'), /*Sky-blue Straw Hat*/ +/*Page 15*/ +('1004804', '4000', 'Hat 6'), /*Blaster Hat*/ +('1004803', '3600', 'Hat 6'), /*Blaster Hat*/ +('1004802', '4900', 'Hat 6'), /*Strawberry Headphone Hat*/ +('1004801', '7100', 'Hat 6'), /*Banana Headphone Hat*/ +('1004800', '3200', 'Hat 6'), /*Watermelon Headphone Hat*/ +('1004831', '7600', 'Hat 6'), /*Moon Bunny Bell Wig (F)*/ +('1004830', '8800', 'Hat 6'), /*Moon Bunny Bell Wig (M)*/ +('1004829', '6000', 'Hat 6'), /*Red Beret (M)*/ +('1004828', '6300', 'Hat 6'), /*Green Beret (F)*/ +/*Page 16*/ +('1004827', '5000', 'Hat 6'), /*Kamaitachi Hat*/ +('1004826', '5600', 'Hat 6'), /*Straw Cat Hat*/ +('1004825', '4000', 'Hat 6'), /*Time-Traveling Anniversary Headband*/ +('1004824', '6000', 'Hat 6'), /*Well-Liked Barrette*/ + +('1004821', '8800', 'Hat 6'), /*Wafer Fedora*/ +('1004820', '7600', 'Hat 6'), /*Goggled Watermelon Hat*/ +('1004819', '3400', 'Hat 6'), /*Watermelon Hat*/ +('1004818', '3800', 'Hat 6'), /*Queen's Ice Cream*/ +/*Page 17*/ +('1004817', '5600', 'Hat 6'), /*Round Wafer Ears*/ +('1004816', '7600', 'Hat 6'), /*Starry Night Orchid*/ +('1004847', '3400', 'Hat 6'), /*Fairy Dew Cap*/ +('1004846', '6400', 'Hat 6'), /*Midnight Bloom*/ +('1004845', '3800', 'Hat 6'), /*Midnight Legacy*/ +('1004844', '4000', 'Hat 6'), /*Poofy Bichon Hat*/ +('1004843', '7400', 'Hat 6'), /*Pumpkin-Colored Witch Hat*/ +('1004842', '6400', 'Hat 6'), /*Jack-o'-lantern Hat*/ +('1004841', '6400', 'Hat 6'), /*Ghost Hat*/ +/*Page 18*/ +('1004840', '4700', 'Hat 6'), /*Floral Veil*/ +('1004839', '5200', 'Hat 6'), /*Diamond Veil*/ +('1004835', '3200', 'Hat 6'), /*Chained Princess Ribbon*/ +('1004834', '6000', 'Hat 6'), /*Dark Musician Headphones*/ +('1004833', '6000', 'Hat 6'), /*Rudi's Hat*/ +('1004832', '4700', 'Hat 6'), /*White Combat Veil*/ +('1004863', '3800', 'Hat 6'), /*Winter Bunny Hat (Pink)*/ +('1004862', '5200', 'Hat 6'), /*Winter Bunny Hat (Teal)*/ +('1004861', '7100', 'Hat 6'), /*Vampire Phantom Mask*/ +/*Page 19*/ +('1004860', '4700', 'Hat 6'), /*Elsa's Flower Accessory*/ +('1004859', '7600', 'Hat 6'), /*Felt's Ribbon*/ +('1004858', '3800', 'Hat 6'), /*Puck's Hat*/ +('1004857', '5600', 'Hat 6'), /*Shadow Warrior's Veil*/ +('1004856', '6400', 'Hat 6'), /*소생의 니은*/ +('1004855', '7600', 'Hat 6'), /*Orange Mushroom Beret*/ +('1004854', '5600', 'Hat 6'), /*Devil Bear Cap*/ +('1004853', '6000', 'Hat 6'), /*Flutter Flower Panama*/ +('1004852', '5000', 'Hat 6'), /*Sweetheart Hat*/ +/*Page 20*/ +('1004851', '7600', 'Hat 6'), /*Japanese Veil*/ +('1004850', '3200', 'Hat 6'), /*Lucid's Silk Hat*/ +('1004849', '4700', 'Hat 6'), /*Cozy Penguin Hood*/ +('1004848', '4000', 'Hat 6'), /*Sweet Pengyin Hood*/ +('1004879', '8800', 'Hat 6'), /*Festive Lovers Hat (M)*/ +('1004878', '3400', 'Hat 6'), /*Cat Monster Hat*/ +('1004877', '3200', 'Hat 6'), /*Love Bell Hat*/ +('1004876', '6000', 'Hat 6'), /*Broken Egg Hat*/ +('1004875', '6400', 'Hat 6'), /*Halloween Cat-O-Lantern Mask*/ +/*Page 21*/ +('1004874', '4700', 'Hat 6'), /*Blushing Reindeer Hat*/ +('1004873', '7100', 'Hat 6'), /*Pumpkin Planet*/ +('1004872', '6400', 'Hat 6'), /*Alicorn Hat*/ +('1004871', '4000', 'Hat 6'), /*Purple Porker Cap*/ +('1004870', '3200', 'Hat 6'), /*Hallowkitty's Witch Hat*/ +('1004869', '5200', 'Hat 6'), /*Halloween Mummy Mask*/ +('1004868', '5600', 'Hat 6'), /*Halloween Werewolf Mask*/ +('1004867', '6300', 'Hat 6'), /*Halloween Skull Mask*/ +('1004866', '5000', 'Hat 6'), /*Halloween Frankenstein Mask*/ +/*Page 22*/ +('1004865', '6000', 'Hat 6'), /*Halloween Dracula Mask*/ +('1004895', '6000', 'Hat 6'), /*Star's Song*/ +('1004894', '5000', 'Hat 6'), /*Star's Melody*/ +('1004893', '6000', 'Hat 6'), /*Maple 5000-Day Hat*/ + +('1004891', '3200', 'Hat 6'), /*Glorious Red Bean Treat Hat*/ +('1004890', '7100', 'Hat 6'), /*White Night Horns*/ +('1004889', '3400', 'Hat 6'), /*Chicken Mochi Hat*/ + +/*Page 23*/ +('1004887', '6000', 'Hat 6'), /*Nutcracker Hat*/ +('1004885', '6300', 'Hat 6'), /*Big Expedition Hat*/ +('1004884', '5200', 'Hat 6'), /*Idol Ribbon Snapback*/ +('1004883', '7400', 'Hat 6'), /*Fried Chicken God's Angel*/ +('1004882', '3200', 'Hat 6'), /*Sweet Lace Ears*/ +('1004881', '5000', 'Hat 6'), /*Sweet Wiggly Ears*/ +('1004880', '7600', 'Hat 6'), /*Festive Lovers Hat (F)*/ +('1004911', '6300', 'Hat 6'), /*Sweet Fresh Cream Cake Hat*/ +('1004910', '3400', 'Hat 6'), /*Sweet Chocolate Cake Hat*/ +/*Page 24*/ +('1004909', '7400', 'Hat 6'), /*Polar Explorer Winter Hat*/ +('1004900', '8800', 'Hat 6'), /*Snow Queen*/ +('1004899', '7400', 'Hat 6'), /*Snow King*/ +('1004898', '6000', 'Hat 6'), /*Snow Queen*/ +('1004897', '4700', 'Hat 6'), /*Snow King*/ +('1004927', '8800', 'Hat 6'), /*Blue Penguin Winter Cap*/ +('1004926', '5600', 'Hat 6'), /*Pompom Knit Hat*/ +('1004925', '5600', 'Hat 6'), /*Rocket Hat*/ +('1004924', '6400', 'Hat 6'), /*Teddy Earmuffs*/ +/*Page 25*/ +('1004923', '5000', 'Hat 6'), /*Moonlight Sticky Cake*/ +('1004922', '3400', 'Hat 6'), /*Strawberry Latte Hat*/ +('1004921', '8800', 'Hat 6'), /*Caramel Latte Hat*/ +('1004920', '3600', 'Hat 6'), /*Green Tea Latte Hat*/ +('1004919', '4700', 'Hat 6'), /*Manji's Bamboo Hat*/ +('1004916', '3600', 'Hat 6'), /*Nova Enchanter Hat*/ +('1004912', '6300', 'Hat 6'), /*Yellow Chick Hat*/ +('1004942', '3400', 'Hat 6'), /*Huge Flower Hat*/ +('1004941', '3800', 'Hat 6'), /*Wildflower Mini Flower Pin*/ +/*Page 26*/ +('1004940', '3400', 'Hat 6'), /*Mini Mini Flower Pin*/ +('1004939', '6000', 'Hat 6'), /*Bell Mini Flower Pin*/ +('1004938', '3400', 'Hat 6'), /*Braided Mini Flower Pin*/ +('1004937', '6300', 'Hat 6'), /*Rose Mini Flower Pin*/ +('1004936', '6400', 'Hat 6'), /*Ladybug Hat*/ +('1004935', '4000', 'Hat 6'), /*White M-Forcer Helmet*/ +('1004934', '7100', 'Hat 6'), /*Strawberry Hairpin*/ +('1004933', '3600', 'Hat 6'), /*Cape Beret (F)*/ +('1004932', '7400', 'Hat 6'), /*Cape Beret (M)*/ +/*Page 27*/ +('1004931', '4000', 'Hat 6'), /*Spring Fairy Fur Hat*/ +('1004929', '6300', 'Hat 6'), /*Hand-knitted Chicken*/ +('1004928', '3400', 'Hat 6'), /*Pink Penguin Winter Cap*/ +('1004959', '3400', 'Hat 6'), /*Napoleonic Hat*/ +('1004958', '7100', 'Hat 6'), /*Elizabethan Hat*/ +('1004957', '7400', 'Hat 6'), /*Sprinkle Sprout*/ +('1004956', '3200', 'Hat 6'), /*Froggy Rainhat*/ +('1004955', '3400', 'Hat 6'), /*Cherry Bomb*/ +('1004954', '7400', 'Hat 6'), /*Cherry on Top*/ +/*Page 28*/ +('1004953', '4700', 'Hat 6'), /*Deerstalker Cap*/ +('1004952', '8800', 'Hat 6'), /*Foxy Teacher Hat*/ +('1004951', '7600', 'Hat 6'), /*Pop Star Hat (M)*/ +('1004950', '6000', 'Hat 6'), /*Pop Star Hat (F)*/ +('1004949', '3200', 'Hat 6'), /*Starlit Dreams Cowl*/ +('1004948', '7100', 'Hat 6'), /*Silky Skater Band*/ +('1004947', '4700', 'Hat 6'), /*Smiley Skater Lid*/ +('1004946', '7400', 'Hat 6'), /*Silver Flower Child Hat*/ +('1004945', '4900', 'Hat 6'), /*Pandora Hat*/ +/*Page 29*/ +('1004975', '5200', 'Hat 6'), /*Preppy Sprout Hat*/ +('1004974', '6000', 'Hat 6'), /*Maple Galaxy Helmet*/ +('1004973', '7100', 'Hat 6'), /*Steely Meow Helmet*/ + + + +/*Page 1*/ +('1004972', '5600', 'Hat 7'), /*Steely Blue Kitty Ears*/ +('1004971', '6400', 'Hat 7'), /*Steely Pink Kitty Ears*/ +('1004970', '7600', 'Hat 7'), /*Steely Pink Bunny Ears*/ +('1004969', '7400', 'Hat 7'), /*Pink Elephant Hat*/ +('1004968', '5200', 'Hat 7'), /*Mallow Fluff Cloud Hat*/ +('1004967', '3600', 'Hat 7'), /*Mustachioed Ballcap*/ +('1004966', '4900', 'Hat 7'), /*Mustachioed Bowler*/ +('1004965', '8800', 'Hat 7'), /*Apricot Bloom*/ +('1004964', '4700', 'Hat 7'), /*Iron Mace Uniform Hat*/ +/*Page 2*/ +('1004961', '7400', 'Hat 7'), /*Dango Set Hat*/ + +('1004989', '6300', 'Hat 7'), /*Watermelon Cat Ears*/ +('1004988', '4900', 'Hat 7'), /*Floral Wave*/ + +('1004985', '5600', 'Hat 7'), /*Rock Spirit Hat*/ +('1004984', '7100', 'Hat 7'), /*Blue Polka Dot Sunglasses*/ +('1004983', '6000', 'Hat 7'), /*Red Polka Dot Sunglasses*/ +('1004982', '4000', 'Hat 7'), /*Golden Laurel Crown*/ +/*Page 3*/ +('1004981', '3800', 'Hat 7'), /*Summer Pom Pom Straw Hat*/ + +('1004978', '4000', 'Hat 7'), /*Bunny Kit Hat*/ +('1004977', '6300', 'Hat 7'), /*Carrot Top*/ +('1004976', '3200', 'Hat 7'), /*Bananappeal Hat*/ +('1005007', '4700', 'Hat 7'), /*Mapo Tofu Hat*/ +('1005006', '6300', 'Hat 7'), /*Bulgogi Hat*/ +('1005005', '4900', 'Hat 7'), /*Rock Spirit*/ +('1005004', '7100', 'Hat 7'), /*Falling Darkness Hat*/ +/*Page 4*/ +('1005003', '6400', 'Hat 7'), /*Feather Messenger Hat*/ +('1005002', '5000', 'Hat 7'), /*Sunny Dino Head Wrap*/ +('1005001', '5600', 'Hat 7'), /*Mellow Dino Head Wrap*/ +('1005000', '3600', 'Hat 7'), /*Stitched Teddy Cap*/ +('1004999', '7600', 'Hat 7'), /*Dragon Pop Headband*/ +('1004998', '5000', 'Hat 7'), /*Summer Flower Fairy Hat*/ +('1004997', '6400', 'Hat 7'), /*Refreshing Lemon Hat*/ +('1004996', '4000', 'Hat 7'), /*Shampoo Cap*/ +('1004995', '6000', 'Hat 7'), /*Charlotte Sun Hat*/ +/*Page 5*/ +('1004994', '5600', 'Hat 7'), /*GS25 Jeonju Bibimbap*/ +('1004993', '6300', 'Hat 7'), /*GS25 Hot Fire Chicken*/ +('1004992', '7100', 'Hat 7'), /*GS25 Tuna Mayo*/ +('1005023', '4900', 'Hat 7'), /*Dog Rice Cake*/ +('1005022', '5200', 'Hat 7'), /*Shiba Hat*/ +('1005021', '5200', 'Hat 7'), /*Laziness Dog Hat*/ +('1005020', '5600', 'Hat 7'), /*Shadow Tactician Hat*/ +('1005019', '3200', 'Hat 7'), /*Cat Cafe Hat*/ +('1005018', '4700', 'Hat 7'), /*Apple Bunny Hat*/ +/*Page 6*/ +('1005017', '5200', 'Hat 7'), /*Sensible Denim Denim Hat*/ +('1005016', '6400', 'Hat 7'), /*Flowery Cat Hat*/ +('1005015', '6000', 'Hat 7'), /*Kitty Cat Ears Hat*/ +('1005014', '6400', 'Hat 7'), /*Custom Kitty Hat*/ +('1005013', '7400', 'Hat 7'), /*Tom Yum Soup Hat*/ +('1005012', '8800', 'Hat 7'), /*Hamburger Hat*/ +('1005011', '6400', 'Hat 7'), /*Spaghetti Hat*/ +('1005010', '6400', 'Hat 7'), /*Chili Crab Hat*/ +('1005009', '7400', 'Hat 7'), /*Beef Noodle Soup Hat*/ +/*Page 7*/ +('1005008', '5000', 'Hat 7'), /*Sushi Hat*/ +('1005039', '3800', 'Hat 7'), /*Crimson Fate Rosette*/ +('1005038', '3600', 'Hat 7'), /*Crimson Fate Rosette*/ +('1005037', '4000', 'Hat 7'), /*Crimson Fate Mark*/ +('1005036', '4900', 'Hat 7'), /*Ryude Hat*/ +('1005035', '6400', 'Hat 7'), /*Suit Heart Hair Clip*/ +('1005034', '8800', 'Hat 7'), /*Tree Spirit*/ +('1005033', '3400', 'Hat 7'), /*Ornate Gold-trimmed Memory*/ +('1005032', '4000', 'Hat 7'), /*Golden Memory*/ +/*Page 8*/ +('1005027', '5600', 'Hat 7'), /*Puppy Love Samurai Hat (F)*/ +('1005026', '4000', 'Hat 7'), /*Puppy Love Samurai Hat (M)*/ +('1005025', '7400', 'Hat 7'), /*Mushroom Dog Hat*/ +('1005024', '6000', 'Hat 7'), /*Pug Hat*/ +('1005055', '3200', 'Hat 7'), /*Cabbie Spiegelmask*/ +('1005054', '5200', 'Hat 7'), /*Cassandra Spitfire Mask*/ +('1005053', '7600', 'Hat 7'), /*Detective Kemdi Mask*/ +('1005052', '3200', 'Hat 7'), /*Dumpling Hat*/ + +/*Page 9*/ +('1005050', '6400', 'Hat 7'), /*Snowflake Ski Hat (M)*/ +('1005049', '3600', 'Hat 7'), /*Snowflake Ski Hat (F)*/ +('1005048', '7100', 'Hat 7'), /*Warm Blue Bear Hat*/ +('1005047', '3800', 'Hat 7'), /*Warm Pink Bear Hat*/ +('1005046', '8800', 'Hat 7'), /*Christmas Bunny Hat*/ +('1005045', '7400', 'Hat 7'), /*Meow Hat*/ +('1005044', '3800', 'Hat 7'), /*Pair of Peas*/ +('1005043', '5600', 'Hat 7'), /*Cat Diamond*/ +('1005042', '4700', 'Hat 7'), /*Cattail Hat*/ +/*Page 10*/ +('1005041', '3600', 'Hat 7'), /*Eggplant Top*/ +('1005040', '3200', 'Hat 7'), /*Crimson Fate Mark*/ +('1005071', '4900', 'Hat 7'), /*Sweet Choco Cake Slice*/ +('1005070', '3800', 'Hat 7'), /*Cherry Sundae Beanie*/ +('1005069', '7400', 'Hat 7'), /*Marshmallow Heart Earmuffs*/ +('1005068', '6400', 'Hat 7'), /*Shiny Crown*/ +('1005067', '6400', 'Hat 7'), /*Jawbreaker Ribbon*/ +('1005066', '7400', 'Hat 7'), /*Serene Heart Hair*/ +('1005065', '3600', 'Hat 7'), /*Drifting Heart Hair*/ +/*Page 11*/ +('1005064', '6400', 'Hat 7'), /*Snowy Mountain Hat*/ +('1005063', '3800', 'Hat 7'), /*Cadena Platinum Wig (M)*/ +('1005062', '7100', 'Hat 7'), /*Cadena Platinum Wig (F)*/ +('1005061', '6000', 'Hat 7'), /*Fried Hat*/ +('1005060', '7400', 'Hat 7'), /*Busy Penguin Hat*/ +('1005058', '4000', 'Hat 7'), /*Strawberry Hair Pin*/ +('1005057', '3200', 'Hat 7'), /*Pink Bean Hairband*/ +('1005056', '6000', 'Hat 7'), /*MFF Moon Bunny Mask*/ +('1005087', '6000', 'Hat 7'), /*Worn Skull Hat*/ +/*Page 12*/ +('1005086', '5000', 'Hat 7'), /*Worn Witch Hat*/ +('1005085', '3600', 'Hat 7'), /*Worn Messy Wig*/ +('1005084', '5600', 'Hat 7'), /*Flushed Puppy*/ +('1005083', '5000', 'Hat 7'), /*Mist Puppy*/ +('1005082', '7100', 'Hat 7'), /*4th Angel Hat*/ +('1005081', '3800', 'Hat 7'), /*Asuka Hat*/ +('1005080', '6000', 'Hat 7'), /*Angel Halo*/ +('1005079', '3200', 'Hat 7'), /*Tiger Cub Hat*/ +('1005078', '3600', 'Hat 7'), /*Cow Mask*/ +/*Page 13*/ +('1005077', '6000', 'Hat 7'), /*Lab Server Master Crown*/ +('1005076', '8800', 'Hat 7'), /*Paper Bag*/ +('1005075', '3200', 'Hat 7'), /*Soft Earmuffs*/ +('1005074', '7400', 'Hat 7'), /*Jiangshi Hat*/ +('1005073', '3200', 'Hat 7'), /*Ghost Mask*/ +('1005072', '7100', 'Hat 7'), /*Fresh Strawberry Cake Slice*/ +('1005103', '4000', 'Hat 7'), /*Slime Cuddle Fuzz Hat*/ +('1005102', '7400', 'Hat 7'), /*Pink Bean Cuddle Fuzz Hat*/ +('1005101', '7400', 'Hat 7'), /*Royal Guard Hat (M)*/ +/*Page 14*/ +('1005100', '7400', 'Hat 7'), /*Royal Guard Hat (F)*/ +('1005099', '6000', 'Hat 7'), /*Lunar New Year VIP Hat (M)*/ +('1005098', '6400', 'Hat 7'), /*Lunar New Year VIP Hat (F)*/ +('1005097', '4000', 'Hat 7'), /*Lunar New Year VIP Hat I*/ +('1005096', '5600', 'Hat 7'), /*Chunky Cable-Knit Hat*/ +('1005095', '5600', 'Hat 7'), /*Lunar New Year Fireworks Mask*/ +('1005094', '3400', 'Hat 7'), /*Oceanic Heart*/ +('1005093', '4900', 'Hat 7'), /*Oceanic Wings*/ +('1005092', '4000', 'Hat 7'), /*Soft Snow Hat*/ +/*Page 15*/ +('1005091', '4900', 'Hat 7'), /*Vengeful Nyen's Hat*/ +('1005090', '5000', 'Hat 7'), /*Nyen's Hat*/ +('1005089', '6400', 'Hat 7'), /*Bunny Snapback*/ +('1005088', '5600', 'Hat 7'), /*Santa Hat*/ +('1005119', '3600', 'Hat 7'), /*Girlfriend Hat (M)*/ +('1005118', '3400', 'Hat 7'), /*Butterfly Hat*/ +('1005117', '8800', 'Hat 7'), /*Tennis Hat (F)*/ +('1005116', '6400', 'Hat 7'), /*Tennis Hat (M)*/ +('1005115', '4900', 'Hat 7'), /*World of Pink Hat (F)*/ +/*Page 16*/ +('1005114', '5000', 'Hat 7'), /*World of Pink Hat (M)*/ +('1005113', '7600', 'Hat 7'), /*Red Bear Winter Hoodie*/ +('1005112', '4900', 'Hat 7'), /*Pink Horn Beanie*/ +('1005111', '5200', 'Hat 7'), /*Plum Blossom Bonnet*/ +('1005110', '7100', 'Hat 7'), /*Plum Blossom Petals*/ +('1005135', '8800', 'Hat 7'), /*Mochi Puppy*/ + +('1005131', '5200', 'Hat 7'), /*Alchemist Gem*/ +('1005130', '4900', 'Hat 7'), /*Treasure Ship Kemdi Mask*/ +/*Page 17*/ +('1005129', '8800', 'Hat 7'), /*Polar Kemdi Mask*/ +('1005128', '3200', 'Hat 7'), /*Desert Kemdi Mask*/ +('1005127', '3600', 'Hat 7'), /*Holiday Kemdi Mask*/ +('1005126', '8800', 'Hat 7'), /*Golden Kemdi Mask*/ +('1005125', '7400', 'Hat 7'), /*Golden Oink-Oink Beanie*/ +('1005124', '5200', 'Hat 7'), /*Gentle Bunny Hat*/ +('1005123', '7400', 'Hat 7'), /*Pink Bear Winter Hoodie*/ +('1005122', '3800', 'Hat 7'), /*Maple Blitzer Strategist Cap*/ +('1005121', '8800', 'Hat 7'), /*Cozy Bunny Hat*/ +/*Page 18*/ +('1005120', '4900', 'Hat 7'), /*Girlfriend Hat (F)*/ +('1005151', '4700', 'Hat 7'), /*Little Darling Beret*/ +('1005150', '3200', 'Hat 7'), /*Pink Hipster Baseball Cap*/ +('1005149', '6400', 'Hat 7'), /*Yellow Hipster Baseball Cap*/ +('1005145', '6400', 'Hat 7'), /*Fluffy Pink Ribbon*/ +('1005144', '5200', 'Hat 7'), /*Carbon Wing Cap*/ +('1005143', '5200', 'Hat 7'), /*Kiddy Crayon Cap*/ +('1005142', '3800', 'Hat 7'), /*Green Hipster Baseball Cap*/ +('1005141', '7100', 'Hat 7'), /*Easter Bonnet*/ +/*Page 19*/ +('1005140', '5000', 'Hat 7'), /*Flower Ribbon Headband*/ +('1005139', '5600', 'Hat 7'), /*Homeless Cat Hat*/ +('1005138', '7600', 'Hat 7'), /*Sakura's Hair Ornament*/ +('1005137', '8800', 'Hat 7'), /*Doggy Biscuit*/ +('1005136', '4700', 'Hat 7'), /*Floppy Puppy*/ +('1005167', '7400', 'Hat 7'), /*Jailbird Cap*/ +('1005166', '7100', 'Hat 7'), /*Candy Tiara*/ +('1005164', '4000', 'Hat 7'), /*Witchy Spring*/ +('1005163', '4700', 'Hat 7'), /*Upbeat Heart Hairband*/ +/*Page 20*/ +('1005162', '5200', 'Hat 7'), /*Catty Hilla*/ +('1005161', '5000', 'Hat 7'), /*Catty Von Leon*/ +('1005160', '6300', 'Hat 7'), /*Catty Arkarium*/ +('1005159', '3400', 'Hat 7'), /*Catty Magnus*/ +('1005158', '4900', 'Hat 7'), /*Catty Will*/ +('1005157', '7100', 'Hat 7'), /*Ark Hat*/ +('1005156', '6000', 'Hat 7'), /*Super Summer Hat (M)*/ +('1005155', '6000', 'Hat 7'), /*Super Summer Hat (F)*/ +('1005154', '3600', 'Hat 7'), /*Tennis Ribbon*/ +/*Page 21*/ +('1005153', '6400', 'Hat 7'), /*Tennis Cap*/ +('1005152', '5200', 'Hat 7'), /*Squirrel Hairband*/ +('1005183', '5200', 'Hat 7'), /*Hipster Baseball Cap*/ +('1005182', '3600', 'Hat 7'), /*Syaoran Battle Costume Hat*/ +('1005181', '5000', 'Hat 7'), /*Perched Tomoyo-chan*/ +('1005180', '5200', 'Hat 7'), /*Perched Syaoran-kun*/ +('1005179', '7600', 'Hat 7'), /*Perched Sakura-chan*/ +('1005178', '4000', 'Hat 7'), /*Perched Kero-chan*/ +('1005177', '5000', 'Hat 7'), /*Sakura Battle Costume Hat*/ +/*Page 22*/ +('1005176', '3400', 'Hat 7'), /*Kero-chan Hood*/ +('1005174', '5200', 'Hat 7'), /*Erda Hat*/ +('1005173', '3200', 'Hat 7'), /*Happy Ghost Hat*/ +('1005172', '3600', 'Hat 7'), /*Picnic Snapback Hat*/ +('1005171', '7100', 'Hat 7'), /*Picnic Musubi Hairpin*/ +('1005170', '3800', 'Hat 7'), /*Picnic Fruit Hairpin*/ +('1005169', '7400', 'Hat 7'), /*Picnic Maki Hairpin*/ +('1005168', '3600', 'Hat 7'), /*Maple Gumshoe's Fedora*/ +('1005195', '7100', 'Hat 7'), /*Watermelon Top*/ +/*Page 23*/ +('1005194', '4900', 'Hat 7'), /*Catkerchief Doll Hat*/ +('1005193', '8800', 'Hat 7'), /*Spring Green Ribbon*/ +('1005192', '4000', 'Hat 7'), /*Super Summer Snorkel*/ +('1005190', '3400', 'Hat 7'), /*Kitty Planet Posh Hat*/ +('1005189', '6300', 'Hat 7'), /*Summer Story Hat (M)*/ +('1005188', '7100', 'Hat 7'), /*Summer Story Hat (F)*/ + +('1005186', '6000', 'Hat 7'), /*Ballpark Buddies Hat*/ +('1005185', '7400', 'Hat 7'), /*Guardian Knight Hat*/ +/*Page 24*/ +('1005184', '3600', 'Hat 7'), /*Elite Knight Hat*/ +('1005212', '4000', 'Hat 7'), /*Misty Starlight*/ +('1005211', '3600', 'Hat 7'), /*Misty Moonlight*/ +('1005210', '3400', 'Hat 7'), /*Misty Starlight*/ +('1005209', '6400', 'Hat 7'), /*Misty Moonlight*/ +('1005208', '5200', 'Hat 7'), /*Flicker Mask*/ +('1005207', '7400', 'Hat 7'), /*Iron Rabbit Mask*/ +('1005206', '5600', 'Hat 7'), /*Ursie Mask*/ +('1005205', '5600', 'Hat 7'), /*Gym Cat Mask*/ +/*Page 25*/ +('1005204', '4000', 'Hat 7'), /*Nautically Pink Hat*/ +('1005203', '5600', 'Hat 7'), /*Maple Alliance Hat*/ +('1005231', '7400', 'Hat 7'), /*Detective Chappeau*/ +('1005228', '7400', 'Hat 7'), /*Hey, Corgi! Hat*/ +('1005224', '7600', 'Hat 7'), /*Custom Puppy Hat*/ +('1005223', '6000', 'Hat 7'), /*Alliance Commander Tiara*/ +('1005222', '3200', 'Hat 7'), /*One-Eyed Grim Reaper Hat*/ +('1005221', '8800', 'Hat 7'), /*Starry Summer Night Hat*/ +('1005220', '6300', 'Hat 7'), /*Carnation Diving Mask*/ +/*Page 26*/ +('1005219', '5200', 'Hat 7'), /*Cerulean Diving Mask*/ +('1005218', '3200', 'Hat 7'), /*Seafoam Ribbon*/ +('1005217', '6000', 'Hat 7'), /*Coral Ribbon*/ +('1005247', '3600', 'Hat 7'), /*Cluckhead*/ +('1005246', '5000', 'Hat 7'), /*Cloud Crown*/ +('1005245', '7100', 'Hat 7'), /*Lovely Plaid Cap*/ +('1005244', '4900', 'Hat 7'), /*Empress's Light*/ +('1005243', '8800', 'Hat 7'), /*Shinsoo's Light*/ +('1005239', '3800', 'Hat 7'), /*Happy Bear Hat (M)*/ +/*Page 27*/ +('1005238', '6300', 'Hat 7'), /*Happy Bear Hat (F)*/ +('1005237', '4900', 'Hat 7'), /*Delinquent Bear Hat*/ +('1005236', '3400', 'Hat 7'), /*Heavenly Prayer Hat*/ +('1005235', '8800', 'Hat 7'), /*Lucid Fedora*/ +('1005234', '5000', 'Hat 7'), /*Dawn Fascinator*/ +('1005233', '5200', 'Hat 7'), /*Alliance Commander Tiara*/ +('1005232', '3800', 'Hat 7'), /*Detective Millinery*/ +('1005263', '4900', 'Hat 7'), /*Roar Snapback*/ +('1005262', '4700', 'Hat 7'), /*Romantic Vagabond*/ +/*Page 28*/ +('1005261', '5000', 'Hat 7'), /*Glided Veil*/ +('1005260', '5600', 'Hat 7'), /*Gilded Cap*/ +('1005259', '6300', 'Hat 7'), /*Tri-color Hat (M)*/ + +('1005257', '7100', 'Hat 7'), /*Warm Winter Bear Hat*/ +('1005256', '6000', 'Hat 7'), /*Warm Winter Bunny Hat*/ +('1005255', '6300', 'Hat 7'), /*Warm Winter Penguin Hat*/ +('1005254', '8800', 'Hat 7'), /*Little Star Cocoon Hat*/ +('1005253', '3200', 'Hat 7'), /*Sweet Deer Hood*/ +/*Page 29*/ +('1005252', '3200', 'Hat 7'), /*Tri-color Hat (F)*/ +('1005279', '6000', 'Hat 7'), /*Lunar New Year Pudgy Piggy Hat*/ +('1005278', '6000', 'Hat 7'), /*Cobalt Filigree Comb (F)*/ + + + +/*Page 1*/ +('1005277', '7400', 'Hat 8'), /*Cobalt Filigree Pin (M)*/ +('1005276', '3800', 'Hat 8'), /*Silly Blue Pajama Hat (M)*/ +('1005275', '3200', 'Hat 8'), /*Frilly Pink Pajama Hat (F)*/ +('1005274', '5000', 'Hat 8'), /*Regal Romance Hat (M)*/ +('1005273', '6400', 'Hat 8'), /*Crown Fitness Ballcap*/ +('1005272', '7100', 'Hat 8'), /*Snowflake Earmuffs*/ +('1005271', '4000', 'Hat 8'), /*Forest Reindeer Hat*/ +('1005270', '6400', 'Hat 8'), /*Winterberry Snowman Hat*/ +('1005269', '8800', 'Hat 8'), /*Regal Romance Hat (F)*/ +/*Page 2*/ +('1005268', '3600', 'Hat 8'), /*Cozy Winter Clothes Hat*/ +('1005267', '6000', 'Hat 8'), /*Hallowkitty's Neon Hat*/ +('1005295', '5200', 'Hat 8'), /*Hunny Bun Bear Baubles*/ +('1005294', '5000', 'Hat 8'), /*Hunny Bun Bear Hood*/ +('1005293', '5000', 'Hat 8'), /*Mustachioed Strawberry Bauble*/ +('1005292', '3600', 'Hat 8'), /*Twinkle Lights Halo*/ +('1005291', '6000', 'Hat 8'), /*Candy Mane Hairpin*/ +('1005290', '3400', 'Hat 8'), /*Frost Flower Hairpin*/ +('1005289', '5600', 'Hat 8'), /*Santa Strawberry Bauble*/ +/*Page 3*/ +('1005288', '4900', 'Hat 8'), /*Glittering Rudolf Antlers*/ +('1005287', '3200', 'Hat 8'), /*Neckerchief Fascinator (Ivory)*/ +('1005286', '3800', 'Hat 8'), /*Neckerchief Fascinator (Red)*/ +('1005285', '3800', 'Hat 8'), /*Neckerchief Fascinator (Purple)*/ +('1005284', '3400', 'Hat 8'), /*Neckerchief Fascinator (Navy)*/ +('1005283', '5000', 'Hat 8'), /*Neckerchief Fascinator (Black)*/ +('1005281', '3400', 'Hat 8'), /*Camelia Tea Bonnet*/ +('1005280', '4700', 'Hat 8'), /*Camelia Newsboy Cap*/ +('1005311', '6000', 'Hat 8'), /*Spring Ducky Rain Hat*/ +/*Page 4*/ +('1005310', '3200', 'Hat 8'), /*Sugarsweet Candy Hat*/ +('1005309', '3400', 'Hat 8'), /*Peach Bloom Effect Hat*/ +('1005308', '3800', 'Hat 8'), /*Spring Cleaning Head Scarf*/ +('1005307', '3400', 'Hat 8'), /*Grim Reaper Mask*/ +('1005301', '3800', 'Hat 8'), /*Blushing Reindeer Hat*/ +('1005300', '7600', 'Hat 8'), /*Snowman Mask*/ +('1005299', '6400', 'Hat 8'), /*Blushing Reindeer Hat*/ +('1005298', '3200', 'Hat 8'), /*Santa Hat*/ +('1005297', '6400', 'Hat 8'), /*Reindeer Hat*/ +/*Page 5*/ +('1005296', '6400', 'Hat 8'), /*Mustachioed Beanie*/ +('1005326', '3800', 'Hat 8'), /*Sky Blue Bow*/ +('1005325', '3400', 'Hat 8'), /*Cursed Hunter Hood*/ +('1005324', '3600', 'Hat 8'), /*Wish Fulfiller Hat*/ +('1005323', '6300', 'Hat 8'), /*Midnight Magician Hat*/ +('1005322', '7400', 'Hat 8'), /*Sunny Songbird Hat*/ +('1005320', '6400', 'Hat 8'), /*Pink Bean Hooded Scarf*/ +('1005319', '3400', 'Hat 8'), /*Lavender Shearling Band*/ +('1005318', '3600', 'Hat 8'), /*Snoozing SALLY Topper*/ +/*Page 6*/ +('1005317', '6300', 'Hat 8'), /*SALLY Hood*/ +('1005316', '4700', 'Hat 8'), /*LEONARD Hood*/ +('1005315', '3800', 'Hat 8'), /*Piggy Pal Headpiece*/ +('1005314', '6400', 'Hat 8'), /*CONY Hood*/ +('1005312', '5000', 'Hat 8'), /*Super Coif*/ +('1005342', '7600', 'Hat 8'), /*Tulip Mini Hairpin*/ +('1005341', '5600', 'Hat 8'), /*Azalea Mini Hairpin*/ +('1005340', '5600', 'Hat 8'), /*Lilac Mini Hairpin*/ +('1005339', '4700', 'Hat 8'), /*Pearblossom Mini Hairpin*/ +/*Page 7*/ +('1005338', '3200', 'Hat 8'), /*Forsythia Mini Hairpin*/ +('1005337', '5600', 'Hat 8'), /*Starry Light Topper*/ +('1005336', '7600', 'Hat 8'), /*Starry Light Fascinator*/ +('1005335', '7100', 'Hat 8'), /*Blue Flame Hellion Hat*/ +('1005334', '4000', 'Hat 8'), /*Bunny Ear Beret*/ +('1005333', '6300', 'Hat 8'), /*Bunny Ear Beret*/ +('1005358', '7400', 'Hat 8'), /*Ice Cream Hat*/ +('1005353', '6300', 'Hat 8'), /*Springtime Sprout Hood*/ +('1005352', '5600', 'Hat 8'), /*Fox Fire Ears*/ +/*Page 8*/ +('1005363', '4000', 'Hat 8'), /*Red Lotus Spirit Walker's Flower*/ + + + + + +/* Face */ +/*Page 1*/ +('1010009', '3400', 'Face'), /*Black Blae Face Accessory*/ +('1010008', '5200', 'Face'), /*Blue Blae Face Accessory*/ +('1010007', '3800', 'Face'), /*Cold Make-up*/ +('1010006', '7400', 'Face'), /*Yakuza Scar*/ +('1010005', '3800', 'Face'), /*General's Mustache (2)*/ +('1010004', '4900', 'Face'), /*General's Mustache (1)*/ +('1010003', '4700', 'Face'), /*5 O'Clock Shadow*/ +('1010002', '4700', 'Face'), /*Ninja Mask for Men*/ +('1010001', '4000', 'Face'), /*Goatee*/ +/*Page 2*/ +('1010000', '7600', 'Face'), /*Long Brown Beard*/ +('1011007', '6400', 'Face'), /*Blue Blair Face Accessory*/ +('1011006', '5000', 'Face'), /*Soulful Make-up*/ +('1011003', '3600', 'Face'), /*Freckles*/ +('1011002', '6300', 'Face'), /*Heart*/ +('1011001', '7100', 'Face'), /*SF Ninja Mask*/ +('1011000', '3800', 'Face'), /*Ninja Mask for Women*/ +('1011008', '7600', 'Face'), /*Black Blair Face Accessory*/ +('1012010', '3800', 'Face'), /*Hinomaru*/ +/*Page 3*/ +('1012009', '7600', 'Face'), /*Kiss Mark*/ +('1012008', '4900', 'Face'), /*Censor*/ +('1012007', '5600', 'Face'), /*Santa Beard*/ +('1012006', '6000', 'Face'), /*Rose*/ +('1012005', '4000', 'Face'), /*Bruise*/ +('1012004', '7100', 'Face'), /*Camo Face Paint*/ +('1012003', '3800', 'Face'), /*Rouge*/ +('1012002', '3200', 'Face'), /*Leather Mask*/ +('1012001', '5600', 'Face'), /*Bindi*/ +/*Page 4*/ +('1012000', '5200', 'Face'), /*Battle Scar*/ +('1012031', '6000', 'Face'), /*Leaf*/ +('1012030', '4700', 'Face'), /*Eye Scar*/ +('1012029', '4700', 'Face'), /*Jester Mask*/ +('1012028', '3600', 'Face'), /*Blush*/ +('1012027', '3400', 'Face'), /*Bandage Strip*/ +('1012026', '4700', 'Face'), /*Guan Yu Beard*/ +('1012025', '7600', 'Face'), /*War Paint*/ +('1012024', '6000', 'Face'), /*Gentleman's Mustache*/ +/*Page 5*/ +('1012023', '5600', 'Face'), /*Yellow Kabuki Mask*/ +('1012022', '4000', 'Face'), /*Red Kabuki Mask*/ +('1012021', '5000', 'Face'), /*White Kabuki Mask*/ +('1012047', '3800', 'Face'), /*Fu Manchu*/ +('1012044', '7400', 'Face'), /*Mummy Mask*/ +('1012043', '4000', 'Face'), /*Australia Face Painting*/ +('1012042', '7400', 'Face'), /*Aztec Paint (Mexico)*/ +('1012041', '6300', 'Face'), /*Star Spangled Paint (USA)*/ +('1012040', '4000', 'Face'), /*Heart Face Painting*/ +/*Page 6*/ +('1012039', '7600', 'Face'), /*Taegeuk Paint (Korea)*/ +('1012038', '8800', 'Face'), /*Rising Sun Paint (Japan)*/ +('1012037', '4900', 'Face'), /*Armillary Shield Paint (Portugal)*/ +('1012036', '3400', 'Face'), /*Bundes Paint (Germany)*/ +('1012035', '3400', 'Face'), /*Brazillian Paint (Brazil)*/ +('1012034', '7600', 'Face'), /*Tri-color Paint (France)*/ +('1012033', '4000', 'Face'), /*England Face Painting*/ +('1012032', '3400', 'Face'), /*White Bread*/ +('1012063', '6400', 'Face'), /*Kitty Paint*/ +/*Page 7*/ +('1012062', '4700', 'Face'), /*Mild Pink Lipstick*/ +('1012057', '7100', 'Face'), /*Transparent Face Accessory*/ +('1012056', '6300', 'Face'), /*Doggy Mouth*/ +('1012055', '4000', 'Face'), /*Allergic Reaction*/ +('1012054', '8800', 'Face'), /*Purple Rage*/ +('1012053', '7600', 'Face'), /*Unmanaged Anger*/ +('1012052', '3200', 'Face'), /*Tongue Twister Scroll*/ +('1012051', '6400', 'Face'), /*Dark Jester*/ +('1012050', '6300', 'Face'), /*Maple-Stein Face*/ +/*Page 8*/ +('1012049', '6300', 'Face'), /*Ogre Mask*/ +('1012048', '3200', 'Face'), /*Dark Jack's Scar*/ +('1012075', '6300', 'Face'), /*Cold Sweat*/ +('1012074', '6400', 'Face'), /*Mocking Laughter*/ +('1012090', '7400', 'Face'), /*Facial Powder*/ +('1012085', '6300', 'Face'), /*Cherry Bubblegum*/ +('1012083', '3200', 'Face'), /*Dollish Pink*/ +('1012082', '6000', 'Face'), /*Ice Cold Red*/ +('1012081', '4000', 'Face'), /*MV Mask*/ +/*Page 9*/ +('1012080', '7600', 'Face'), /*Fat Lips*/ +('1012105', '6400', 'Face'), /*Super Sucker*/ +('1012104', '5000', 'Face'), /*Transparent Face Accessory*/ +('1012100', '4000', 'Face'), /*Facial Powder(red)*/ +('1012099', '7400', 'Face'), /*Facial Powder(blue)*/ +('1012097', '3200', 'Face'), /*Purple Noisemaker*/ +('1012096', '3600', 'Face'), /*Apple Bubble Gum*/ +('1012127', '4000', 'Face'), /*Crescent Paint (Singapore)*/ +('1012126', '7100', 'Face'), /*Yellow Star Paint (Vietnam)*/ +/*Page 10*/ +('1012125', '3400', 'Face'), /*Chakra Paint (Thailand)*/ +('1012124', '4000', 'Face'), /*Union Paint (UK)*/ +('1012123', '7100', 'Face'), /*Holland Paint (Netherlands)*/ +('1012122', '8800', 'Face'), /*Gold Nordic Paint (Sweden)*/ +('1012121', '7400', 'Face'), /*Coat of Arms Paint (Spain)*/ +('1012114', '6400', 'Face'), /*5-Starred Red Paint (China)*/ +('1012113', '3200', 'Face'), /*ROC Paint (Taiwan)*/ +('1012112', '7600', 'Face'), /*Bauhinia Paint (Hong Kong)*/ +('1012137', '5600', 'Face'), /*Star Face Painting*/ +/*Page 11*/ +('1012134', '4000', 'Face'), /*Tear Drop Face Tattoo*/ + +('1012131', '3400', 'Face'), /*Smiling Face*/ +('1012129', '6000', 'Face'), /*Maple Leaf Paint (Canada)*/ +('1012128', '6300', 'Face'), /*Jalur Gemilang Paint (Malaysia)*/ +('1012159', '6300', 'Face'), /*Foxy Mask*/ +('1012147', '4700', 'Face'), /*Immortal Mask*/ +('1012166', '7400', 'Face'), /*Villain Mask*/ +('1012165', '7100', 'Face'), /*Clown Nose*/ +/*Page 12*/ + +('1012180', '3200', 'Face'), /*Chocolate Heart*/ +('1012179', '3800', 'Face'), /*Reindeer Red Nose*/ +('1012176', '4700', 'Face'), /*Orange Blush*/ +('1012192', '5600', 'Face'), /*Shadow Mask*/ +('1012208', '7400', 'Face'), /*Lovely Smile*/ +('1012253', '3400', 'Face'), /*Heart Pounding Lip Gloss*/ +('1012275', '6000', 'Face'), /*6th Anniversary Party Glasses*/ +('1012298', '3200', 'Face'), /*Hand Mark*/ +/*Page 13*/ +('1012289', '5600', 'Face'), /*Transparent Face Accessory*/ +('1012315', '6300', 'Face'), /*Adhesive Bandage*/ +('1012366', '3200', 'Face'), /*Zombie Hunter Mask*/ +('1012379', '4700', 'Face'), /*Flushed Cheeks*/ +('1012374', '5200', 'Face'), /*Heartbreaker Lips*/ +('1012390', '7100', 'Face'), /*Peruvian Flag Face Paint*/ +('1012388', '5000', 'Face'), /*Clown*/ +('1012384', '5200', 'Face'), /*Playful Band*/ +('1012415', '6000', 'Face'), /*Blingin' Red Lipstick*/ +/*Page 14*/ +('1012413', '5200', 'Face'), /*Naked Face*/ +('1012412', '4000', 'Face'), /*Bloody Tears*/ +('1012431', '5200', 'Face'), /*Straight Face Accessory*/ +('1012430', '4700', 'Face'), /*Bear Nose Face Accessory*/ +('1012429', '6300', 'Face'), /*Round Eyes-And-Mouth Face Accessory*/ +('1012428', '7400', 'Face'), /*Thick Eyebrows Face Accessory*/ +('1012427', '5000', 'Face'), /*Surprised Face Accessory*/ +('1012437', '8800', 'Face'), /*Palm Print Mask*/ +('1012436', '7100', 'Face'), /*Enlightened Face Accessory*/ +/*Page 15*/ +('1012435', '6300', 'Face'), /*Gross Face Accessory*/ +('1012434', '4000', 'Face'), /*Mustache Face Accessory*/ +('1012433', '7400', 'Face'), /*Animal Face Accessory*/ +('1012432', '5200', 'Face'), /*Cat-Mouth Face Accessory*/ +('1012462', '6300', 'Face'), /*Ghost Bride's Shining Dark Eyes*/ +('1012450', '5200', 'Face'), /*Choco Candy Cookie*/ +('1012479', '7600', 'Face'), /*Ruddy Kitten Nose*/ +('1012475', '8800', 'Face'), /*태극 페인팅*/ +('1012474', '5200', 'Face'), /*Clobber*/ +/*Page 16*/ +('1012473', '3800', 'Face'), /*So Angry!!! Face*/ +('1012472', '5600', 'Face'), /*레인보우 페인팅*/ +('1012468', '7100', 'Face'), /*Yummy Candy*/ +('1012495', '5600', 'Face'), /*Skull Mask*/ +('1012494', '7400', 'Face'), /*Worn Skull Mask*/ +('1012489', '6300', 'Face'), /*LaLaLa Megaphone*/ +('1012488', '4000', 'Face'), /*Clobber*/ +('1012487', '5000', 'Face'), /*Oozer*/ +('1012486', '3200', 'Face'), /*Hothead*/ +/*Page 17*/ +('1012485', '5600', 'Face'), /*Sweet Persimmon Blush*/ +('1012482', '8800', 'Face'), /*Quack Quack*/ +('1012511', '7600', 'Face'), /*Cleaning Mask*/ +('1012510', '7400', 'Face'), /*Sasha's Delicious Bread*/ +('1012509', '7400', 'Face'), /*Hange's Glasses*/ + + + +('1012502', '3200', 'Face'), /*Frosty Frozen Face*/ +/*Page 18*/ +('1012501', '7100', 'Face'), /*No Biting!*/ +('1012527', '7600', 'Face'), /*Blushing Yeti*/ +('1012526', '5000', 'Face'), /*So Delish Ice Cream*/ +('1012525', '5200', 'Face'), /*Smile! It's the Sweet Maple Festival!*/ +('1012518', '3200', 'Face'), /*Von Bon Mask*/ +('1012517', '4900', 'Face'), /*Vellum Mask*/ +('1012515', '4000', 'Face'), /*Strawberry Cake*/ +('1012514', '7600', 'Face'), /*Heart-Shaped Chocolate*/ +('1012534', '3800', 'Face'), /*Rainbow Face Paint*/ +/*Page 19*/ +('1012533', '4000', 'Face'), /*Spring Cloud Piece*/ +('1012528', '7100', 'Face'), /*Boss Lotus Eyes*/ +('1012557', '6000', 'Face'), /*Nom Nom Oz*/ +('1012556', '8800', 'Face'), /*Vampire Eyes (Ruby)*/ +('1012555', '3200', 'Face'), /*Vampire Eyes (Sapphire)*/ +('1012552', '8800', 'Face'), /*Pink Bean Sadface*/ +('1012551', '5000', 'Face'), /*The Mighty Face*/ +('1012544', '4700', 'Face'), /*Culnesis*/ +('1012573', '5600', 'Face'), /*Pretty Pretty Smile*/ +/*Page 20*/ +('1012572', '6300', 'Face'), /*Little Kitten Face Accessory*/ +('1012571', '3600', 'Face'), /*Sleepy Zees*/ +('1012569', '3600', 'Face'), /*Baby Binkie*/ +('1012568', '3600', 'Face'), /*Shocked Eyes*/ +('1012567', '3400', 'Face'), /*Touched Tears*/ +('1012562', '5200', 'Face'), /*Heartbeam Face*/ +('1012589', '7100', 'Face'), /*So Sleepy*/ +('1012579', '4900', 'Face'), /*Pouty Face*/ +('1012607', '3600', 'Face'), /*>:3*/ +/*Page 21*/ +('1012603', '4700', 'Face'), /*Hangover Make-up*/ +('1012602', '4000', 'Face'), /*Squinting Toothy Smirk*/ +('1012601', '8800', 'Face'), /*Toothy Smirk*/ +('1012597', '4900', 'Face'), /*ㅅ ㅅ 얼굴장식*/ +('1012596', '4900', 'Face'), /*ㅅ_ㅅ 얼굴장식*/ +('1012595', '7400', 'Face'), /*ㅅㅂㅅ 얼굴장식*/ +('1012594', '3600', 'Face'), /*ㅇㅅㅇ 얼굴장식*/ +('1012593', '3200', 'Face'), /*ㅇ_ㅇ 얼굴장식*/ +('1012592', '5600', 'Face'), /*ㅇㅂㅇ 얼굴장식*/ +/*Page 22*/ +('1012623', '7100', 'Face'), /*Puppy Face Accessory*/ +('1012621', '5000', 'Face'), /*Grumpy Face*/ +('1012620', '7100', 'Face'), /*Squishy Face*/ +('1012619', '7600', 'Face'), /*Calabash Pipe*/ +('1012618', '7400', 'Face'), /*Strawberry Pastry*/ +('1012617', '8800', 'Face'), /*Strawberry Cake*/ +('1012616', '3800', 'Face'), /*Chocolate Heart*/ +('1012615', '8800', 'Face'), /*Furtive Smile Face*/ +('1012614', '6000', 'Face'), /*Face of Longing*/ +/*Page 23*/ +('1012612', '4700', 'Face'), /*Snowy Eyeliner (M)*/ +('1012611', '5000', 'Face'), /*Snowy Eyeliner (F)*/ +('1012610', '4900', 'Face'), /*Enigma*/ +('1012609', '6300', 'Face'), /*White Night Tattoo*/ +('1012608', '4700', 'Face'), /*Chocolate Overload Face Accessory*/ +('1012639', '3200', 'Face'), /*Rainbow Blush*/ +('1012638', '7100', 'Face'), /*중얼중얼 혼잣말*/ +('1012637', '8800', 'Face'), /*Worn Skull Mask*/ +('1012636', '5000', 'Face'), /*Dark Silence*/ +/*Page 24*/ +('1012635', '7600', 'Face'), /*Teeth Brushing Time*/ +('1012634', '3600', 'Face'), /*Nyan Nose*/ +('1012633', '6000', 'Face'), /*Lost in Thought*/ +('1012631', '3400', 'Face'), /*Bandaged Lips*/ +('1012630', '6300', 'Face'), /*Dreamy Cat Eyes Mask*/ +('1012629', '7400', 'Face'), /*Starshine Cat Eyes Mask*/ +('1012628', '7100', 'Face'), /*Custom Kitty Whiskers*/ +('1012626', '4900', 'Face'), /*Cadena Mask*/ +('1012625', '7600', 'Face'), /*Hearty Flush*/ +/*Page 25*/ +('1012624', '6400', 'Face'), /*Round Pucker Face*/ +('1012654', '7600', 'Face'), /*Steamed Bun Face*/ +('1012653', '3800', 'Face'), /*Topsy-turvy Face*/ + +('1012651', '7400', 'Face'), /*Teared Up*/ +('1012650', '6000', 'Face'), /*Scribbleface*/ +('1012649', '6400', 'Face'), /*So Angry*/ +('1012647', '5000', 'Face'), /*So Yummy*/ +('1012646', '5200', 'Face'), /*So Tasty*/ +/*Page 26*/ +('1012645', '4700', 'Face'), /*Skeleton Surgeon Mask*/ +('1012644', '4000', 'Face'), /*Teddy Surgeon Mask*/ +('1012642', '6000', 'Face'), /*Bubble Pup Mask*/ +('1012641', '3600', 'Face'), /*Peach Blossom*/ +('1012669', '8800', 'Face'), /*Lavender Doll*/ +('1012668', '5600', 'Face'), /*Purple Doll*/ +('1012663', '5600', 'Face'), /*Custom Puppy Whiskers*/ +('1012662', '7400', 'Face'), /*Ushishishi Face Accessory*/ +('1012661', '7600', 'Face'), /*Reaper's Face*/ +/*Page 27*/ +('1012660', '4700', 'Face'), /*Naturally Luminous*/ +('1012659', '4000', 'Face'), /*Pure Nostalgia*/ +('1012658', '6300', 'Face'), /*Antagonist Face*/ +('1012657', '6400', 'Face'), /*Hawalu's Teary-Eyed Face Accessory*/ +('1012656', '6300', 'Face'), /*Round Blush*/ +('1012687', '8800', 'Face'), /*Fox Fire Grin*/ +('1012686', '6000', 'Face'), /*Blue Flame Hellion Face Accessory*/ +('1012685', '3800', 'Face'), /*Stubborn Face*/ +('1012683', '3200', 'Face'), /*Blushing Frosty*/ +/*Page 28*/ +('1012682', '5200', 'Face'), /*Googly Face Accessory*/ +('1012681', '6000', 'Face'), /*Cobalt Filigree Face Accessory (M)*/ +('1012680', '3400', 'Face'), /*Cobalt Filigree Face Accessory (F)*/ +('1012679', '4700', 'Face'), /*Pajama Eye Mask*/ +('1012678', '4900', 'Face'), /*Regal Romance Eyes (M)*/ +('1012677', '3400', 'Face'), /*Regal Romance Eyes (F)*/ +('1012676', '3200', 'Face'), /*Black Moon*/ +('1012675', '7100', 'Face'), /*White Moon*/ +('1012674', '8800', 'Face'), /*Tri-color Face Accessory*/ +/*Page 29*/ +('1012673', '6300', 'Face'), /*Strawberry Glow*/ +('1012672', '3200', 'Face'), /*Grapefruit Glow*/ +('1012690', '6300', 'Face'), /*Mopey Face*/ + + + + + +/* Eye */ +/*Page 1*/ +('1020000', '5600', 'Eye'), /*Aqua Toy Shades*/ +('1021000', '3800', 'Eye'), /*Pink Toy Shades*/ +('1022015', '7400', 'Eye'), /*Black Aviator Shades*/ +('1022014', '4900', 'Eye'), /*Brown Aviator Shades*/ +('1022013', '4000', 'Eye'), /*Black Eye Guard*/ +('1022012', '7400', 'Eye'), /*Blue Eye Guard*/ +('1022011', '5200', 'Eye'), /*Red Eye Guard*/ +('1022010', '4900', 'Eye'), /*Blue & Red Eye Guard*/ +('1022009', '4900', 'Eye'), /*Dark Shades*/ +/*Page 2*/ +('1022008', '5600', 'Eye'), /*Orange Hard-Rimmed Glasses*/ +('1022007', '8800', 'Eye'), /*Green Hard-Rimmed Glasses*/ +('1022006', '3800', 'Eye'), /*Blue Hard-Rimmed Glasses*/ +('1022005', '8800', 'Eye'), /*Red Hard-Rimmed Glasses*/ +('1022004', '4900', 'Eye'), /*Black Sunglasses*/ +('1022003', '7100', 'Eye'), /*Green Shades*/ +('1022002', '8800', 'Eye'), /*Yellow Shades*/ +('1022001', '4700', 'Eye'), /*Blue Shades*/ +('1022000', '7100', 'Eye'), /*Orange Shades*/ +/*Page 3*/ +('1022031', '6400', 'Eye'), /*White Toy Shades*/ +('1022030', '8800', 'Eye'), /*Hot Teacher Glasses*/ +('1022029', '8800', 'Eye'), /*Spinning Piglet*/ +('1022028', '4000', 'Eye'), /*Spinning Groucho*/ +('1022027', '3600', 'Eye'), /*Medical Eye Patch*/ +('1022026', '5000', 'Eye'), /*Purple Starred Eye Patch*/ +('1022025', '8800', 'Eye'), /*Red Hearted Eye Patch*/ +('1022024', '6000', 'Eye'), /*Skull Patch*/ +('1022023', '7600', 'Eye'), /*Crested Eye Patch*/ +/*Page 4*/ +('1022022', '4000', 'Eye'), /*Blue Head-Spinning Glasses*/ +('1022021', '5200', 'Eye'), /*Red Head-Spinning Glasses*/ +('1022020', '3200', 'Eye'), /*Metal Shades*/ +('1022019', '4000', 'Eye'), /*Old-School Glasses*/ +('1022018', '5000', 'Eye'), /*Classic Masquerade Mask*/ +('1022017', '5600', 'Eye'), /*Purple Aviator Shades*/ +('1022016', '3600', 'Eye'), /*Blue Aviator Shades*/ +('1022047', '4000', 'Eye'), /*Owl Ball Mask*/ +('1022046', '4900', 'Eye'), /*Butterfly Ball Mask*/ +/*Page 5*/ +('1022045', '5200', 'Eye'), /*Red Bushido Bandana*/ +('1022044', '3200', 'Eye'), /*Nerdy Glasses*/ +('1022043', '3400', 'Eye'), /*Head Bandage*/ +('1022042', '6400', 'Eye'), /*Scouter*/ +('1022041', '3800', 'Eye'), /*Cyclist Shades*/ +('1022040', '5200', 'Eye'), /*Lead Monocle*/ +('1022039', '3400', 'Eye'), /*Orange Round Shades*/ +('1022038', '3400', 'Eye'), /*Purple Round Shades*/ +('1022037', '4700', 'Eye'), /*Frameless Glasses*/ +/*Page 6*/ +('1022036', '3200', 'Eye'), /*Green Sports Goggle*/ +('1022035', '6300', 'Eye'), /*Orange Sports Goggle*/ +('1022034', '4900', 'Eye'), /*Bizarre Monocle*/ +('1022033', '6300', 'Eye'), /*Politician Glasses*/ +('1022032', '5200', 'Eye'), /*Yellow Toy Shades*/ +('1022063', '4700', 'Eye'), /*Flat Mini Glasses*/ +('1022062', '4900', 'Eye'), /*Black Skull Eye Patch*/ +('1022061', '4000', 'Eye'), /*Redbeard's Pirate Eye Patch*/ +('1022059', '7600', 'Eye'), /*Black Shades*/ +/*Page 7*/ +('1022057', '3800', 'Eye'), /*Pop-Eye*/ +('1022056', '6400', 'Eye'), /*Pink Aviator Sunglasses*/ +('1022055', '4700', 'Eye'), /*Pink Sunglasses*/ +('1022054', '4900', 'Eye'), /*Round Shield Shades*/ +('1022053', '6300', 'Eye'), /*Futuristic Shades*/ +('1022052', '4900', 'Eye'), /*Future Vision Shades*/ +('1022051', '7100', 'Eye'), /*Red Half-Rim Glasses*/ +('1022050', '7100', 'Eye'), /*Vintage Glasses*/ +('1022049', '8800', 'Eye'), /*Green-Rimmed Glasses*/ +/*Page 8*/ +('1022048', '5200', 'Eye'), /*Transparent Eye Accessory*/ +('1022079', '7100', 'Eye'), /*Clear Glasses*/ +('1022075', '8800', 'Eye'), /*Twinkling Eyes*/ +('1022074', '7100', 'Eye'), /*Gaga Glasses*/ +('1022072', '5200', 'Eye'), /*Yellow Shutter Shades*/ +('1022071', '5000', 'Eye'), /*Red Shutter Shades*/ +('1022070', '5000', 'Eye'), /*Green Shutter Shades*/ +('1022069', '6400', 'Eye'), /*Orange Shutter Shades*/ +('1022068', '3400', 'Eye'), /*White Shades*/ +/*Page 9*/ +('1022066', '6000', 'Eye'), /*Star Spectacles*/ +('1022065', '7600', 'Eye'), /*Alphabet Glasses*/ +('1022064', '3800', 'Eye'), /*Big Red Glasses*/ +('1022095', '8800', 'Eye'), /*I Like Money*/ +('1022090', '4900', 'Eye'), /*Gaga Glasses*/ +('1022087', '7400', 'Eye'), /*Green Eye Mask*/ +('1022086', '3400', 'Eye'), /*Blue Eye Mask*/ +('1022085', '6400', 'Eye'), /*Pink Eye Mask*/ +('1022084', '8800', 'Eye'), /*Eye Mask (Red)*/ +/*Page 10*/ +('1022083', '7100', 'Eye'), /*Hitman Sunglasses*/ +('1022081', '3800', 'Eye'), /*Cracked Glasses*/ +('1022110', '4700', 'Eye'), /*Big White Sunglasses*/ +('1022109', '3400', 'Eye'), /*Pink Two-Toned Shades*/ +('1022108', '3200', 'Eye'), /*Yellow Two-Toned Shades*/ +('1022104', '8800', 'Eye'), /*3D Glasses*/ +('1022102', '5000', 'Eye'), /*LED Sunglasses*/ +('1022122', '6400', 'Eye'), /*6th B-Day Party Glasses*/ +('1022121', '3400', 'Eye'), /*Vision Google*/ +/*Page 11*/ +('1022142', '5000', 'Eye'), /*Yellow Shutter Shades*/ +('1022158', '5000', 'Eye'), /*[MS Discount] Black Sunglasses*/ +('1022174', '3600', 'Eye'), /*3D Glasses*/ +('1022173', '6400', 'Eye'), /*Silky Black Eye Patch*/ +('1022188', '4700', 'Eye'), /*Blank Eye Patch*/ +('1022187', '5600', 'Eye'), /*Broken Up Today*/ +('1022184', '8800', 'Eye'), /*Frozen Eye*/ +('1022183', '6000', 'Eye'), /*Blazing Eyes*/ +('1022177', '5200', 'Eye'), /*Star Sunglasses*/ +/*Page 12*/ +('1022176', '7400', 'Eye'), /*Cyclops Bandana*/ +('1022207', '5200', 'Eye'), /*PSY Sunglasses*/ +('1022201', '6000', 'Eye'), /*フューチャーロイド VR バイザー*/ +('1022196', '3600', 'Eye'), /*Money Lover*/ +('1022194', '3600', 'Eye'), /*Blaze Black Eye*/ +('1022223', '5200', 'Eye'), /*Romantic LED Sunglasses*/ +('1022230', '6300', 'Eye'), /*Bunny Glasses*/ +('1022229', '3800', 'Eye'), /*VIP Glasses*/ +('1022227', '8800', 'Eye'), /*Aviator Shades*/ +/*Page 13*/ +('1022250', '7400', 'Eye'), /*투시안경*/ +('1022249', '4700', 'Eye'), /*스마트안경*/ +('1022248', '7100', 'Eye'), /*Pineapple Glasses*/ +('1022247', '3400', 'Eye'), /*Black Sunglasses*/ +('1022244', '6300', 'Eye'), /*Damien's Eyepatch*/ +('1022243', '4900', 'Eye'), /*Donut Glasses*/ +('1022270', '4900', 'Eye'), /*Oversized Sunglasses*/ +('1022269', '3200', 'Eye'), /*Chained Princess Face Accessory*/ +('1022267', '5200', 'Eye'), /*Personal Info Protection Stick*/ +/*Page 14*/ +('1022266', '5600', 'Eye'), /*Strange Uncle Glasses*/ +('1022265', '3400', 'Eye'), /*Black Diamond*/ +('1022263', '7100', 'Eye'), /* Sleepy Eye Patch*/ +('1022262', '5600', 'Eye'), /*Scouter*/ +('1022259', '6000', 'Eye'), /*Bandage Blindfold*/ +('1022258', '8800', 'Eye'), /*Bat Wing Monocle*/ +('1022257', '3200', 'Eye'), /*Scouter*/ +('1022285', '5600', 'Eye'), /*Round Glasses*/ +('1022284', '5000', 'Eye'), /*Data Collection Goggles*/ +/*Page 15*/ +('1022283', '6000', 'Eye'), /*Street Smart Sunglasses*/ +('1022282', '4000', 'Eye'), /*33 Glasses*/ +('1022280', '3200', 'Eye'), /*Heart Eye Patch*/ +('1022279', '5200', 'Eye'), /*Black Eye Bandages*/ +('1022276', '3800', 'Eye'), /*Banana Peel Specs*/ +('1022275', '4900', 'Eye'), /*Polar Explorer Sunglasses*/ +('1022274', '4000', 'Eye'), /*Purple Rose Eye Patch*/ + + + + + +/* Earrings */ +/*Page 1*/ +('1032029', '6400', 'Earrings'), /*Silver Earrings*/ +('1032024', '7400', 'Earrings'), /*Transparent Earrings*/ +('1032038', '4900', 'Earrings'), /*Snow Earrings*/ +('1032036', '5200', 'Earrings'), /*Beaded Cross Earrings*/ +('1032034', '4900', 'Earrings'), /*Coke Earrings*/ +('1032063', '5200', 'Earrings'), /*Wireless Headset*/ +('1032054', '8800', 'Earrings'), /*Rainbow Earrings*/ +('1032053', '6000', 'Earrings'), /*Clover Earrings*/ +('1032052', '6000', 'Earrings'), /*Slime Earrings*/ +/*Page 2*/ +('1032051', '6000', 'Earrings'), /*Diamond Earrings*/ +('1032074', '4700', 'Earrings'), /*Heart Rainbow Earrings*/ +('1032073', '6300', 'Earrings'), /*Wind Bell Earrings*/ +('1032072', '3400', 'Earrings'), /*Shiny Altair Earrings*/ +('1032071', '3800', 'Earrings'), /*Altair Earrings*/ +('1032138', '3200', 'Earrings'), /*Dragon Spirit Earrings*/ +('1032145', '6000', 'Earrings'), /*Crab Earrings*/ +('1032175', '6300', 'Earrings'), /*Faraway Earring*/ +('1032204', '3200', 'Earrings'), /*フューチャーロイドサイバーイヤリング*/ +/*Page 3*/ +('1032192', '6300', 'Earrings'), /*Broken Up Today*/ +('1032234', '3600', 'Earrings'), /*Cold-hearted Earrings*/ +('1032233', '5000', 'Earrings'), /*Warm-hearted Earrings*/ +('1032228', '7600', 'Earrings'), /*Halloweenroid Sensor*/ +('1032255', '7100', 'Earrings'), /*White Earphones*/ +('1032264', '7100', 'Earrings'), /*Hydrangea Earrings*/ +('1032262', '5200', 'Earrings'), /*Umbral Earrings*/ +('1032260', '5200', 'Earrings'), /*Golden Bell Drops*/ +('1032310', '6000', 'Earrings'), /*EVA Android Hat*/ +/*Page 4*/ +('1033000', '4000', 'Earrings'), /*Lucid's Earrings*/ + + + + + +/* Overall */ +/*Page 1*/ +('1050004', '7100', 'Overall'), /*Blue Officer Uniform*/ +('1050012', '3400', 'Overall'), /*Grey Skull Overall*/ +('1050013', '4000', 'Overall'), /*Red Skull Overall*/ +('1050014', '8800', 'Overall'), /*Green Skull Overall*/ +('1050015', '6400', 'Overall'), /*Blue Skull Overall*/ +('1050032', '5000', 'Overall'), /*Silver Officer Uniform*/ +('1050033', '5600', 'Overall'), /*Black Officer Uniform*/ +('1050034', '5200', 'Overall'), /*Red Officer Uniform*/ +('1050040', '3400', 'Overall'), /*Red Swimming Trunk*/ +/*Page 2*/ +('1050041', '4900', 'Overall'), /*Blue Swimming Trunk*/ +('1050042', '3200', 'Overall'), /*Fine Brown Hanbok*/ +('1050043', '6300', 'Overall'), /*Fine Black Hanbok*/ +('1050044', '7600', 'Overall'), /*Fine Blue Hanbok*/ +('1050016', '8800', 'Overall'), /*Orange Skull Overall*/ +('1050017', '8800', 'Overall'), /*Yellow Tights*/ +('1050019', '7600', 'Overall'), /*Santa Costume*/ +('1050020', '8800', 'Overall'), /*Paper Box*/ +('1050065', '4900', 'Overall'), /*Blue Celebration Hanbok*/ +/*Page 3*/ +('1050066', '5000', 'Overall'), /*Green Celebration Hanbok*/ +('1050071', '4900', 'Overall'), /*Men's Ninja Overall*/ +('1050079', '4700', 'Overall'), /*Black Coat of Death*/ +('1050050', '3200', 'Overall'), /*Dark Suit*/ +('1050057', '7600', 'Overall'), /*Ghost Costume*/ +('1050101', '6300', 'Overall'), /*Western Cowboy*/ +('1050109', '4700', 'Overall'), /*Green Picnicwear*/ +('1050110', '4000', 'Overall'), /*Sky Blue Picnicwear*/ +('1050111', '7400', 'Overall'), /*Boxing Trunks*/ +/*Page 4*/ +('1050084', '5600', 'Overall'), /*Red M-Forcer*/ +('1050085', '5000', 'Overall'), /*Blue M-Forcer*/ +('1050086', '5200', 'Overall'), /*Green M-Forcer*/ +('1050087', '3400', 'Overall'), /*Black M-Forcer*/ +('1050128', '6400', 'Overall'), /*Go! Korea!*/ +('1050129', '4000', 'Overall'), /*Korean Martial Art Uniform*/ +('1050135', '3800', 'Overall'), /*Beau Tuxedo*/ +('1050136', '6300', 'Overall'), /*Black Male Fur Coat*/ +('1050137', '5600', 'Overall'), /*White Male Fur Coat*/ +/*Page 5*/ +('1050138', '6400', 'Overall'), /*School Uniform with Hoody Jumper*/ +('1050139', '8800', 'Overall'), /*Boys Uniform*/ +('1050140', '3400', 'Overall'), /*Thai Formal Dress*/ +('1050141', '6000', 'Overall'), /*Blue Kitty Hood*/ +('1050142', '8800', 'Overall'), /*Hooded Korean Traditional Costume*/ +('1050143', '3600', 'Overall'), /*Retro School Uniform*/ +('1050112', '6400', 'Overall'), /*Wedding Dress*/ +('1050113', '5600', 'Overall'), /*Wedding Tuxedo*/ +('1050114', '6300', 'Overall'), /*Poseidon Armor*/ +/*Page 6*/ +('1050115', '8800', 'Overall'), /*Sea Hermit Robe*/ +('1050116', '6400', 'Overall'), /*Race Ace Suit*/ +('1050117', '5600', 'Overall'), /*Tiny Blue Swimshorts*/ +('1050118', '7400', 'Overall'), /*Tiny Black Swimshorts*/ +('1050119', '6400', 'Overall'), /*Santa Boy Overall*/ +('1050120', '3600', 'Overall'), /*Horoscope Overall*/ +('1050121', '5200', 'Overall'), /*Oriental Bridegroom Suit*/ +('1050122', '3800', 'Overall'), /*Unseemly Wedding Suit*/ +('1050123', '5200', 'Overall'), /*Royal Hanbok*/ +/*Page 7*/ +('1050124', '6300', 'Overall'), /*Lunar Festivities Suit*/ +('1050125', '7400', 'Overall'), /*Brown Casual Look*/ +('1050126', '4900', 'Overall'), /*Imperial Uniform*/ +('1050160', '4700', 'Overall'), /*Nya-ong's Long Hood T-shirt*/ +('1050161', '7100', 'Overall'), /*Bunny Boy*/ +('1050168', '7400', 'Overall'), /*Evan Elegant Suit*/ +('1050170', '3400', 'Overall'), /*Napoleon Uniform*/ +('1050171', '3400', 'Overall'), /*Evan Outfit*/ +('1050145', '7100', 'Overall'), /*Violet Tunic*/ +/*Page 8*/ +('1050146', '6000', 'Overall'), /*Buddy Overall Jeans*/ +('1050147', '7100', 'Overall'), /*Princess Korean Traditional Costume*/ +('1050148', '6400', 'Overall'), /*Shin-Hwa High Uniform*/ +('1050152', '5600', 'Overall'), /*Sailor Outfit*/ +('1050153', '5200', 'Overall'), /*Exotic Festival Outfit*/ +('1050154', '5600', 'Overall'), /*Seraphim Suit*/ +('1050156', '3600', 'Overall'), /*Blue Towel*/ +('1050157', '4900', 'Overall'), /*Cutie Boy Overall*/ +('1050158', '6400', 'Overall'), /*Brown Casual Look*/ +/*Page 9*/ +('1050159', '7400', 'Overall'), /*Black Male Fur Coat*/ +('1050193', '7400', 'Overall'), /*Red Overall Pants*/ +('1050177', '6000', 'Overall'), /*Maple Boy School Uniform*/ +('1050178', '5600', 'Overall'), /*Napoleon Uniform*/ +('1050179', '7600', 'Overall'), /*Holiday Party Gear*/ +('1050186', '7400', 'Overall'), /*Rookie Maple Boy School Uniform*/ +('1050187', '5000', 'Overall'), /*Blue Snow Flower Wear*/ +('1050188', '6000', 'Overall'), /*Flower Heir Hanbok*/ +('1050190', '8800', 'Overall'), /*Military Pop Star*/ +/*Page 10*/ +('1050226', '3600', 'Overall'), /*Imperial Garnet Suit*/ +('1050227', '3800', 'Overall'), /*Mint Snow Outfit*/ +('1050228', '3200', 'Overall'), /*Elven Spirit Coat*/ +('1050229', '8800', 'Overall'), /*Gentle Hanbok*/ +('1050232', '8800', 'Overall'), /*Chamomile Tea Time*/ +('1050234', '5000', 'Overall'), /*Magic Star Suit*/ +('1050235', '5600', 'Overall'), /*Prince Charming*/ +('1050208', '3200', 'Overall'), /*Schoolboy Formals*/ +('1050209', '3800', 'Overall'), /*Moonlight Serenade Get-Up*/ +/*Page 11*/ +('1050210', '5600', 'Overall'), /*Light Cotton Candy Overalls*/ +('1050215', '7100', 'Overall'), /*Maple Doctor's Scrubs (M)*/ +('1050220', '7400', 'Overall'), /*Dark Force Mail (M) */ +('1050221', '5200', 'Overall'), /*Elven Spirit Coat (M) */ +('1050256', '5600', 'Overall'), /*Alps Boy Overall*/ +('1050241', '7400', 'Overall'), /*Jett's Outfit(M)*/ +('1050242', '3800', 'Overall'), /*Opening Star*/ +('1050246', '4900', 'Overall'), /*Saint Luminous*/ +('1050247', '6400', 'Overall'), /*Evergreen Magistrate Outfit*/ +/*Page 12*/ +('1050248', '6300', 'Overall'), /*Halloween Leopard Costume*/ +('1050255', '3600', 'Overall'), /*Dark Force Suit*/ +('1050291', '4900', 'Overall'), /*Tinky Baseball*/ +('1050292', '3200', 'Overall'), /*Blue Swimming Trunks*/ +('1050293', '3400', 'Overall'), /*Beach Bum Outfit*/ +('1050296', '5000', 'Overall'), /*Superstar Suit*/ +('1050297', '4700', 'Overall'), /*Rising Star*/ +('1050298', '6000', 'Overall'), /*Alpha Seraphim*/ +('1050299', '3800', 'Overall'), /*Baby Doll Puka*/ +/*Page 13*/ +('1050300', '6400', 'Overall'), /*Fresh Ice*/ +('1050301', '7600', 'Overall'), /*Blue Checkered Vacation*/ +('1050302', '4900', 'Overall'), /*Powder Butler's Digs (M)*/ +('1050303', '8800', 'Overall'), /*Ribbon Boy School Look*/ +('1050283', '5600', 'Overall'), /*Magic Star Suit*/ +('1050284', '3800', 'Overall'), /*Golden Bell Outfit*/ +('1050285', '4700', 'Overall'), /*Thermidor*/ +('1050321', '5200', 'Overall'), /*[[FROZEN CONTENT]] Kristoff Coat*/ +('1050322', '3200', 'Overall'), /*Party Prince*/ +/*Page 14*/ +('1050335', '5600', 'Overall'), /*Melody Boy*/ +('1050304', '3800', 'Overall'), /*Splash Choco Boy*/ +('1050305', '6400', 'Overall'), /*Bloody Leo*/ +('1050310', '3200', 'Overall'), /*Shiny Shopper*/ +('1050311', '3400', 'Overall'), /*Moonlight Costume*/ +('1050312', '4900', 'Overall'), /*Grand Pony*/ +('1050314', '7100', 'Overall'), /*Plop! Chocolate Boy*/ +('1050315', '6000', 'Overall'), /*Blue Shiny Suit*/ +('1050316', '6400', 'Overall'), /*Balloon Overalls*/ +/*Page 15*/ +('1050318', '7100', 'Overall'), /*White Proposal*/ +('1050319', '6000', 'Overall'), /*Sky Blue Picnic*/ +('1050353', '5600', 'Overall'), /*Sweet Patissier*/ +('1050354', '5200', 'Overall'), /*Blue Snow Flower Wear*/ +('1050355', '4000', 'Overall'), /*Santa Boy Overall*/ +('1050356', '4900', 'Overall'), /*Gothic Boys Uniform*/ +('1050359', '6000', 'Overall'), /*Cool Snow Flower*/ +('1050360', '8800', 'Overall'), /*Ryan D Suit*/ +('1050361', '7100', 'Overall'), /*Mr. Love Messenger Outfit*/ +/*Page 16*/ +('1050362', '3400', 'Overall'), /*Little Trainer Outfit (M)*/ +('1050364', '3400', 'Overall'), /*Leafy Love Outfit*/ +('1050365', '7400', 'Overall'), /*Starlight Outfit*/ +('1050366', '6400', 'Overall'), /*The Kingdom Suit of King*/ + +('1050336', '7100', 'Overall'), /*축구선수 유니폼*/ +('1050337', '5200', 'Overall'), /*Hawaiian Couple*/ +('1050338', '4000', 'Overall'), /*Maple Leaf High Swimsuit (M)*/ +('1050339', '3400', 'Overall'), /*Glowy Light*/ +/*Page 17*/ +('1050340', '5200', 'Overall'), /*Gentle Ice Boy*/ +('1050341', '5600', 'Overall'), /*In-forest Camping Look*/ +('1050343', '5000', 'Overall'), /*Gentle Dylan*/ +('1050346', '4900', 'Overall'), /*Cheer Uniform*/ +('1050351', '6300', 'Overall'), /*Mad Doctor Gown*/ +('1050384', '6000', 'Overall'), /*Penguin Doll Outfit*/ +('1050385', '3200', 'Overall'), /*Time Getup*/ +('1050386', '3600', 'Overall'), /*Sparkling Bluebird (M)*/ +('1050387', '3800', 'Overall'), /*British Marine Outfit (M)*/ +/*Page 18*/ +('1050388', '4900', 'Overall'), /*Ursus Gentleman's Suit*/ +('1050389', '5000', 'Overall'), /*Cutie Farmer Apron*/ +('1050390', '7600', 'Overall'), /*Polka-Dot Bell Bottoms*/ + +('1050392', '7400', 'Overall'), /*Bloody Guardian*/ +('1050393', '5200', 'Overall'), /*Banana Outing Clothes*/ +('1050394', '5200', 'Overall'), /*Bubbly Traveler*/ +('1050395', '4700', 'Overall'), /*Blue Marine Uniform (M)*/ + +/*Page 19*/ + + + +('1050368', '5200', 'Overall'), /*Romantic Sky*/ +('1050370', '6300', 'Overall'), /*Mint Kitty Tea Party*/ +('1050371', '7100', 'Overall'), /*Blue Crystal*/ +('1050372', '5200', 'Overall'), /*Mousy Bunny Trousers*/ +('1050373', '3800', 'Overall'), /*Tim Gentleman Suit*/ +('1050375', '3200', 'Overall'), /*Baby Doll Puka*/ +/*Page 20*/ +('1050376', '8800', 'Overall'), /*Party Prince*/ +('1050377', '3800', 'Overall'), /*Tinky Baseball*/ +('1050378', '6300', 'Overall'), /*Yeonhwa School Uniform*/ +('1050380', '4000', 'Overall'), /*Kinesis Uniform*/ +('1050381', '4700', 'Overall'), /*Kinesis Uniform*/ +('1050382', '3400', 'Overall'), /*Millionaire Suit*/ +('1050383', '4900', 'Overall'), /*Teddy Suspenders*/ +('1050416', '4000', 'Overall'), /*Time Tailcoat*/ +('1050417', '3400', 'Overall'), /*Ice Deer Parka*/ +/*Page 21*/ +('1050418', '3400', 'Overall'), /*Cozy Fur Outfit*/ +('1050419', '4000', 'Overall'), /*Winter Garden Outfit (M)*/ + + +('1050422', '3400', 'Overall'), /*Concert Muse (Tenor)*/ +('1050423', '7400', 'Overall'), /*Hopeful Spring Outing*/ +('1050424', '6400', 'Overall'), /*Dot Bon Bon*/ +('1050426', '3200', 'Overall'), /*Black & White*/ +('1050427', '4900', 'Overall'), /*Pure Dew*/ +/*Page 22*/ +('1050428', '7400', 'Overall'), /*Pure Dew*/ +('1050429', '5000', 'Overall'), /*Rose Prince Suit*/ +('1050430', '5000', 'Overall'), /*Black Boy Scout*/ +('1050431', '4900', 'Overall'), /*Orchid Light Dana*/ +('1050400', '7600', 'Overall'), /*Nutcracker Uniform*/ +('1050401', '3400', 'Overall'), /*Time Master*/ +('1050402', '3800', 'Overall'), /*Evan Dragon Suit*/ +('1050403', '3200', 'Overall'), /*Evan Dragon Suit*/ +('1050404', '5200', 'Overall'), /*Royal Mercedes Suit*/ +/*Page 23*/ +('1050405', '4000', 'Overall'), /*Royal Mercedes Suit*/ +('1050406', '5600', 'Overall'), /*Mystic Phantom Suit*/ +('1050407', '3600', 'Overall'), /*Mystic Phantom Suit*/ +('1050408', '8800', 'Overall'), /*Winter Aran Suit*/ +('1050409', '3600', 'Overall'), /*Winter Aran Suit*/ +('1050410', '7400', 'Overall'), /*Chiaroscuro Luminous Suit*/ +('1050411', '3400', 'Overall'), /*Chiaroscuro Luminous Suit*/ +('1050412', '6000', 'Overall'), /*Secret Shade Suit*/ +('1050413', '7400', 'Overall'), /*Secret Shade Suit*/ +/*Page 24*/ +('1050414', '4000', 'Overall'), /*Cozy Bathrobe*/ +('1050415', '5600', 'Overall'), /*Santa Costume*/ +('1050451', '8800', 'Overall'), /*Manji's Uniform*/ +('1050452', '4000', 'Overall'), /*Moonlight Sorbet*/ +('1050453', '3200', 'Overall'), /*Sweet Choco Suit*/ +('1050454', '3600', 'Overall'), /*Skater Fanboy*/ + +('1050456', '7400', 'Overall'), /*Cherry Trimmings*/ +('1050461', '6000', 'Overall'), /*Aqua Phoenix Robe*/ +/*Page 25*/ +('1050462', '4700', 'Overall'), /*Spaceyman*/ +('1050463', '3200', 'Overall'), /*Preppy Sprout Suit*/ +('1050432', '6000', 'Overall'), /*King's Ice Trunks*/ +('1050433', '8800', 'Overall'), /*Grand Pony Get-up*/ + +('1050435', '6300', 'Overall'), /*Midnight Suit*/ +('1050436', '5600', 'Overall'), /*Shadow Warrior's Tunic*/ +('1050437', '4000', 'Overall'), /*Lucid Dream*/ +('1050438', '7600', 'Overall'), /*Sweetheart Shirt*/ +/*Page 26*/ +('1050439', '5000', 'Overall'), /*Orange Mushroom Overalls*/ +('1050440', '3800', 'Overall'), /*Green Pig Outfit*/ +('1050441', '7400', 'Overall'), /*Pumpkin Galaxy*/ +('1050442', '5000', 'Overall'), /*Sweet Chocolate Suspenders*/ +('1050443', '3600', 'Overall'), /*Warm Rabbit Fur Coat*/ +('1050444', '7600', 'Overall'), /*Star's Serenade*/ +('1050445', '4900', 'Overall'), /*King's Banquet*/ +('1050446', '3400', 'Overall'), /*King's Banquet*/ +('1050447', '3400', 'Overall'), /*Maple M Shirt and Pants*/ +/*Page 27*/ +('1050480', '6400', 'Overall'), /*Santa Costume*/ +('1050481', '5000', 'Overall'), /*Snow Blossom Coat*/ +('1050482', '3400', 'Overall'), /*Oh My Captain*/ +('1050484', '6400', 'Overall'), /*Plum Blossom Robe*/ +('1050485', '5600', 'Overall'), /*Maple Blitzer Strategist Uniform*/ +('1050486', '3800', 'Overall'), /*Lemon Wafer Coat*/ +('1050487', '7400', 'Overall'), /*Carbon Wing Coat*/ +('1050488', '3800', 'Overall'), /*Little Darling Outfit*/ +('1050489', '5000', 'Overall'), /*Tennis Uniform*/ +/*Page 28*/ +('1050491', '7100', 'Overall'), /*Candy Darling*/ +('1050492', '4900', 'Overall'), /*Clockwork Knight Ensemble*/ +('1050493', '4900', 'Overall'), /*Ballpark Buddy Uniform*/ +('1050495', '7600', 'Overall'), /*Spring Green Finery*/ +('1050464', '4900', 'Overall'), /*Sky Sea Polo Outfit (M)*/ +('1050468', '3200', 'Overall'), /*Teddy Land Outfit*/ +('1050469', '3400', 'Overall'), /*Fab Beachwear*/ +('1050470', '5600', 'Overall'), /*Midnight Moonlight Outfit*/ +('1050471', '4700', 'Overall'), /*Suit Heart Outfit*/ +/*Page 29*/ +('1050472', '8800', 'Overall'), /*Crimson Fate Topcoat*/ +('1050473', '3400', 'Overall'), /*Crimson Fate Topcoat*/ +('1050474', '7600', 'Overall'), /*Tamino's Aria*/ + + + +/*Page 1*/ +('1050475', '5600', 'Overall 2'), /*Spooky Shorts*/ +('1050476', '4900', 'Overall 2'), /*Halloween Pumpkin Suit*/ +('1050477', '3800', 'Overall 2'), /*Soft Mist*/ +('1050478', '7400', 'Overall 2'), /*Iron Mace Officer*/ +('1050479', '4000', 'Overall 2'), /*Bunny Jersey*/ +('1050512', '3400', 'Overall 2'), /*Rudolf Hoody*/ +('1050513', '7100', 'Overall 2'), /*Rudolf Hoody*/ +('1050514', '6300', 'Overall 2'), /*Lavender Shearling Longcoat*/ +('1050515', '7600', 'Overall 2'), /*Piggy Pal Romper*/ +/*Page 2*/ +('1050516', '3800', 'Overall 2'), /*Wish Fulfiller Uniform*/ +('1050518', '5600', 'Overall 2'), /*Springtime Sprout Outfit (M)*/ +('1050519', '6000', 'Overall 2'), /*Retro Swimsuit (M)*/ +('1050496', '3200', 'Overall 2'), /*Nautically Pink Dress*/ +('1050497', '7100', 'Overall 2'), /*Majestic Moonlight Attire*/ +('1050498', '7400', 'Overall 2'), /*Majestic Moonlight Attire*/ +('1050499', '5200', 'Overall 2'), /*Seafoam Coral Coordinates*/ +('1050500', '5200', 'Overall 2'), /*Scuba Savvy Suit*/ +('1050502', '7600', 'Overall 2'), /*Firefly Firelight Top*/ +/*Page 3*/ +('1050503', '5200', 'Overall 2'), /*Shinsoo's Descent*/ +('1050504', '7100', 'Overall 2'), /*Lovely Plaid*/ +('1050505', '6300', 'Overall 2'), /*Necrotic*/ +('1050506', '7100', 'Overall 2'), /*Romantic Warrior*/ +('1050507', '8800', 'Overall 2'), /*Snowflake Pea Coat*/ +('1050508', '7600', 'Overall 2'), /*Forever Young Outfit*/ +('1050509', '4900', 'Overall 2'), /*Camelia Tea Livery*/ +('1050510', '7600', 'Overall 2'), /*Santa Boy Overall*/ +('1050511', '5000', 'Overall 2'), /*Santa Costume*/ +/*Page 4*/ +('1051002', '6400', 'Overall 2'), /*Cat Suit*/ +('1051028', '5000', 'Overall 2'), /*White Swimming Suit*/ +('1051029', '3800', 'Overall 2'), /*Red Swimming Suit*/ +('1051035', '4900', 'Overall 2'), /*Fine Red Hanbok*/ +('1051036', '4700', 'Overall 2'), /*Fine Blue Hanbok*/ +('1051018', '3800', 'Overall 2'), /*Purple Skull Overall*/ +('1051019', '7100', 'Overall 2'), /*Orange Skull Overall*/ +('1051020', '7100', 'Overall 2'), /*Green Skull Overall*/ +('1051021', '3200', 'Overall 2'), /*Blue Skull Overall*/ +/*Page 5*/ +('1051022', '3400', 'Overall 2'), /*Grey Skull Overall*/ +('1051059', '5200', 'Overall 2'), /*Pink Nurse Uniform*/ +('1051060', '6300', 'Overall 2'), /*White Nurse Uniform*/ +('1051061', '7100', 'Overall 2'), /*Women's Ninja Uniform*/ +('1051070', '5200', 'Overall 2'), /*Bunny Costume*/ +('1051071', '4700', 'Overall 2'), /*Pink Kimono*/ +('1051040', '8800', 'Overall 2'), /*Dark Enamel Suit*/ +('1051048', '5600', 'Overall 2'), /*Witch Clothes*/ +('1051049', '8800', 'Overall 2'), /*Mrs. Claus Costume*/ +/*Page 6*/ +('1051050', '8800', 'Overall 2'), /*Blue Celeberation Hanbok*/ +('1051051', '4900', 'Overall 2'), /*Pink Celebration Hanbok*/ +('1051088', '3400', 'Overall 2'), /*Yellow M-Forcer*/ +('1051089', '6300', 'Overall 2'), /*Black M-Forcer*/ +('1051099', '3400', 'Overall 2'), /*Prep Uniform*/ +('1051100', '7400', 'Overall 2'), /*Western Cowgirl*/ +('1051072', '3200', 'Overall 2'), /*White Kimono*/ +('1051073', '6000', 'Overall 2'), /*Red Kimono*/ +('1051074', '5200', 'Overall 2'), /*Yellow Kimono*/ +/*Page 7*/ +('1051075', '4900', 'Overall 2'), /*Blue Swimming Suit*/ +('1051076', '5000', 'Overall 2'), /*Ghost Suit*/ +('1051081', '4900', 'Overall 2'), /*Pink Kimono*/ +('1051086', '3200', 'Overall 2'), /*Ragged Hanbok*/ +('1051087', '5000', 'Overall 2'), /*Pink M-Forcer*/ +('1051120', '4900', 'Overall 2'), /*Flight Attendant Uniform*/ +('1051121', '7100', 'Overall 2'), /*Tropical Dress*/ +('1051122', '5200', 'Overall 2'), /*White Cat Costume*/ +('1051123', '7400', 'Overall 2'), /*Violet Strapless Dress*/ +/*Page 8*/ +('1051124', '5600', 'Overall 2'), /*Purple Ring One Piece*/ +('1051125', '3800', 'Overall 2'), /*Black Cat Costume*/ +('1051126', '3600', 'Overall 2'), /*Red Chinese Dress*/ +('1051127', '4900', 'Overall 2'), /*Maid Uniform*/ +('1051128', '3200', 'Overall 2'), /*Horoscope Overall*/ +('1051129', '6000', 'Overall 2'), /*Oriental Princess Gown*/ +('1051130', '5600', 'Overall 2'), /*Unseemly Wedding Dress*/ +('1051131', '3400', 'Overall 2'), /*Santa Girl Overall*/ +('1051132', '5200', 'Overall 2'), /*White Coat*/ +/*Page 9*/ +('1051133', '4000', 'Overall 2'), /*Rough Coat*/ +('1051134', '5000', 'Overall 2'), /*Leopard Print Coat*/ +('1051135', '4700', 'Overall 2'), /*Ruffled Coat*/ +('1051108', '4700', 'Overall 2'), /*Pink Picnic Dress*/ +('1051109', '3600', 'Overall 2'), /*Yellow Picnic Dress*/ +('1051110', '8800', 'Overall 2'), /*Purple Frill One Piece*/ +('1051111', '7600', 'Overall 2'), /*Blue Frill One Piece*/ +('1051112', '3200', 'Overall 2'), /*Boxing Gear*/ +('1051113', '3200', 'Overall 2'), /*Wedding Tuxedo (F)*/ +/*Page 10*/ +('1051114', '4900', 'Overall 2'), /*Wedding Dress*/ +('1051115', '6400', 'Overall 2'), /*Sea Queen Dress*/ +('1051116', '6000', 'Overall 2'), /*Race Queen Uniform*/ +('1051117', '4700', 'Overall 2'), /*Diao Chan Dress*/ +('1051118', '5600', 'Overall 2'), /*Pink Strapless Bikini*/ +('1051119', '5200', 'Overall 2'), /*Blue Strapless Bikini*/ +('1051154', '5000', 'Overall 2'), /*Princess Isis*/ +('1051155', '4700', 'Overall 2'), /*Queen Mary*/ +('1051156', '3600', 'Overall 2'), /*Black Female Fur Coat*/ +/*Page 11*/ +('1051157', '3600', 'Overall 2'), /*White Female Fur Coat*/ +('1051158', '7400', 'Overall 2'), /*School Uniform with Hoody Jumper*/ +('1051159', '6000', 'Overall 2'), /*Girls Uniform*/ +('1051160', '6300', 'Overall 2'), /*Pink-Striped Dress*/ +('1051161', '6000', 'Overall 2'), /*Thai Formal Dress*/ +('1051162', '4000', 'Overall 2'), /*Cute Sailor Dress*/ +('1051163', '7100', 'Overall 2'), /*Gothic Overall*/ +('1051164', '3800', 'Overall 2'), /*Kitty Hoodie*/ +('1051166', '5200', 'Overall 2'), /*Dressu Korean Traditional Costume*/ +/*Page 12*/ +('1051167', '3600', 'Overall 2'), /*Black Rockabilly Dress*/ +('1051136', '7600', 'Overall 2'), /*Royal Palace Hanbok*/ +('1051137', '5200', 'Overall 2'), /*Rabbit Fur Dress*/ +('1051138', '5600', 'Overall 2'), /*Lunar Festivities Dress*/ +('1051139', '6000', 'Overall 2'), /*White Ribboned Sailor Dress*/ +('1051141', '5200', 'Overall 2'), /*Female Shaman Costume*/ +('1051142', '5000', 'Overall 2'), /*Vibrant Yellow Dress*/ +('1051143', '3800', 'Overall 2'), /*Race Queen Tank Top & Skirt*/ +('1051144', '4900', 'Overall 2'), /*Elegant Blue One Piece*/ +/*Page 13*/ +('1051145', '3800', 'Overall 2'), /*Royal Maid Uniform*/ +('1051146', '4700', 'Overall 2'), /*Royal Nurse Uniform*/ +('1051147', '4000', 'Overall 2'), /*Street Cred Ensemble*/ +('1051148', '6300', 'Overall 2'), /*Navy Blue Au Luxe*/ +('1051149', '4700', 'Overall 2'), /*Princess Dress*/ +('1051185', '3200', 'Overall 2'), /*Maid Dress*/ +('1051188', '4900', 'Overall 2'), /*Blue Daisy Dress*/ +('1051189', '3200', 'Overall 2'), /*Yellow Anticipation*/ +('1051190', '4900', 'Overall 2'), /*Seraphim Suit*/ +/*Page 14*/ +('1051192', '7100', 'Overall 2'), /*Blue Marine Girl*/ +('1051193', '3600', 'Overall 2'), /*Orange Towel*/ +('1051195', '6000', 'Overall 2'), /*Cutie Girl Overall*/ +('1051196', '4000', 'Overall 2'), /*Black Top Dress*/ +('1051197', '3800', 'Overall 2'), /*Nya-ong's Long Hood T-shirt*/ +('1051198', '4000', 'Overall 2'), /*Pink mini dress*/ +('1051169', '6400', 'Overall 2'), /*Sky Blue Picnicwear [F]*/ +('1051170', '6400', 'Overall 2'), /*Buddy Overall Jeans*/ +('1051171', '4700', 'Overall 2'), /*Royal Costume*/ +/*Page 15*/ +('1051173', '4900', 'Overall 2'), /*Purple Dorothy Dress*/ +('1051174', '5000', 'Overall 2'), /*Bikini*/ +('1051175', '4000', 'Overall 2'), /*Strawberry Milk Dress*/ +('1051176', '7400', 'Overall 2'), /*Shin-Hwa High Uniform*/ +('1051179', '5000', 'Overall 2'), /*Pretty Girl*/ +('1051180', '3400', 'Overall 2'), /*Sailor Outfit*/ +('1051182', '8800', 'Overall 2'), /*Exotic Festival Outfit*/ +('1051183', '5200', 'Overall 2'), /*Night Fever Ensemble*/ +('1051218', '4700', 'Overall 2'), /*Maple Girl School Uniform*/ +/*Page 16*/ +('1051219', '8800', 'Overall 2'), /*Rainbow Mini Dress*/ +('1051220', '5200', 'Overall 2'), /*Elizabeth Dress*/ +('1051221', '6400', 'Overall 2'), /*Holiday Party Dress*/ +('1051227', '5600', 'Overall 2'), /*Rookie Maple Girl School Uniform*/ +('1051228', '3400', 'Overall 2'), /*Pink Snow Flower Wear*/ +('1051229', '5600', 'Overall 2'), /*Flower Heiress Hanbok*/ +('1051231', '3800', 'Overall 2'), /*Alps Girl*/ +('1051200', '4900', 'Overall 2'), /*Bunny Girl*/ +('1051206', '4700', 'Overall 2'), /*Retro School Uniform*/ +/*Page 17*/ +('1051208', '5000', 'Overall 2'), /*Strawberry Girl*/ +('1051209', '3800', 'Overall 2'), /*Evan Great Suit*/ +('1051211', '8800', 'Overall 2'), /*Elizabeth Dress*/ +('1051212', '6000', 'Overall 2'), /*Evan Outfit*/ +('1051252', '7600', 'Overall 2'), /*Pink Angel Uniform*/ +('1051253', '7400', 'Overall 2'), /*Little Red Riding Dress*/ +('1051254', '3400', 'Overall 2'), /*Schoolgirl Formals*/ +('1051255', '6400', 'Overall 2'), /*Golden Moonlight Dress*/ +('1051256', '5000', 'Overall 2'), /*Light Chiffon Dress*/ +/*Page 18*/ +('1051261', '8800', 'Overall 2'), /*Marchen Fantasy*/ +('1051262', '6300', 'Overall 2'), /*Maple Doctor's Scrubs (F)*/ +('1051232', '3600', 'Overall 2'), /*Pink Shock Pop Star*/ +('1051233', '3200', 'Overall 2'), /*Taxi Costume*/ +('1051235', '5200', 'Overall 2'), /*Orange Checked Squares*/ + +('1051280', '4900', 'Overall 2'), /*Gentle Hanbok*/ +('1051282', '7100', 'Overall 2'), /*Rosemary Tea*/ +('1051284', '5000', 'Overall 2'), /*Magic Star Dress*/ +/*Page 19*/ +('1051285', '7100', 'Overall 2'), /*Princess Charming*/ +('1051290', '3800', 'Overall 2'), /*Jett's Outfit(F)*/ +('1051292', '8800', 'Overall 2'), /*Opening Angel*/ +('1051294', '4000', 'Overall 2'), /*Lyrical Dress*/ +('1051295', '3600', 'Overall 2'), /*Magical Dress*/ +('1051264', '7600', 'Overall 2'), /*Silver Angora Fur Dress*/ +('1051265', '8800', 'Overall 2'), /*Gold Angora Fur Dress*/ +('1051270', '5000', 'Overall 2'), /*Dark Force Mail (F) */ +('1051271', '5000', 'Overall 2'), /*Elven Spirit Coat (F) */ +/*Page 20*/ +('1051276', '7100', 'Overall 2'), /*Imperial Garnet Suit*/ +('1051277', '3200', 'Overall 2'), /*Cygnus Dress*/ +('1051278', '4000', 'Overall 2'), /*Cherry Snow Outfit*/ +('1051279', '6000', 'Overall 2'), /*Elven Spirit Coat*/ +('1051312', '5000', 'Overall 2'), /*Alps Girl Dress*/ +('1051296', '4000', 'Overall 2'), /*Cynical Dress*/ +('1051297', '4900', 'Overall 2'), /*Little Red Riding Dress*/ +('1051301', '6400', 'Overall 2'), /*Saint Luminous*/ +('1051302', '4700', 'Overall 2'), /*Pink Fluffy Hanbok*/ +/*Page 21*/ +('1051304', '4000', 'Overall 2'), /*Halloween Leopard Dress*/ +('1051311', '3400', 'Overall 2'), /*Dark Force Suit*/ +('1051345', '3400', 'Overall 2'), /*Fluffy Cat Outfit*/ +('1051347', '8800', 'Overall 2'), /*Magic Star Dress*/ +('1051348', '3200', 'Overall 2'), /*Ellinia Magic Academy Uniform*/ +('1051349', '5200', 'Overall 2'), /*Succubus Dress*/ +('1051350', '6300', 'Overall 2'), /*Golden Bell Dress*/ +('1051351', '6000', 'Overall 2'), /*GM Nori's Uniform*/ +('1051352', '4900', 'Overall 2'), /*Thermidor*/ +/*Page 22*/ +('1051357', '5000', 'Overall 2'), /*Pinky Baseball*/ +('1051358', '5000', 'Overall 2'), /*Pink Cutie Bikini*/ +('1051359', '7100', 'Overall 2'), /*Beach Babe Outfit*/ +('1051332', '5600', 'Overall 2'), /*Logical Dress*/ +('1051333', '6000', 'Overall 2'), /*Miracle Dress*/ +('1051376', '6000', 'Overall 2'), /*Halloweenroid Dress*/ +('1051382', '4900', 'Overall 2'), /*Lovely Shopper*/ +('1051383', '4700', 'Overall 2'), /*Moonlight Outfit*/ +('1051384', '6300', 'Overall 2'), /*Glory Pony*/ +/*Page 23*/ +('1051385', '3400', 'Overall 2'), /*Plop! Chocolate Girl*/ +('1051386', '5600', 'Overall 2'), /*Blue Shiny Dress*/ +('1051387', '6400', 'Overall 2'), /*Pink Picnic Dress*/ +('1051389', '3400', 'Overall 2'), /*White Fiancee*/ +('1051390', '4700', 'Overall 2'), /*Forsythia Picnic*/ +('1051391', '3200', 'Overall 2'), /*Icy Dress*/ +('1051362', '6300', 'Overall 2'), /*Superstar Dress*/ +('1051363', '5000', 'Overall 2'), /*Rising Angel*/ +('1051365', '4900', 'Overall 2'), /*Beta Seraphim*/ +/*Page 24*/ +('1051366', '7600', 'Overall 2'), /*Baby Doll Linka*/ +('1051367', '4000', 'Overall 2'), /*Fresh Ice*/ +('1051368', '4700', 'Overall 2'), /*Fresh Checkered Vacation*/ +('1051369', '3800', 'Overall 2'), /*Powder Maid's Getup (F)*/ +('1051370', '5600', 'Overall 2'), /*Passionate Qi Pao*/ +('1051371', '3200', 'Overall 2'), /*Ribbon Girl School Look*/ +('1051372', '6300', 'Overall 2'), /*Splash Choco Girl*/ +('1051373', '4700', 'Overall 2'), /*Bloody Jeanne*/ +('1051374', '4900', 'Overall 2'), /*Odette Tutu*/ +/*Page 25*/ +('1051375', '5600', 'Overall 2'), /*Odile Tutu*/ +('1051408', '7100', 'Overall 2'), /*Shiny Light*/ +('1051409', '6000', 'Overall 2'), /*Gentle Ice Girl*/ +('1051410', '7100', 'Overall 2'), /*In-forest Camping Look*/ +('1051411', '4700', 'Overall 2'), /*Lady Rosalia*/ +('1051415', '7100', 'Overall 2'), /*Cheer Uniform*/ +('1051420', '8800', 'Overall 2'), /*Ribbon Angel Uniform*/ +('1051422', '6000', 'Overall 2'), /*Sweet Patissiere*/ +('1051423', '7100', 'Overall 2'), /*Pink Snow Flower Wear*/ +/*Page 26*/ +('1051392', '6300', 'Overall 2'), /*Party Princess*/ +('1051405', '6000', 'Overall 2'), /*Melody Girl*/ +('1051406', '7600', 'Overall 2'), /*Hawaiian Couple*/ +('1051407', '6400', 'Overall 2'), /*Maple Leaf High Swimsuit (F)*/ +('1051440', '3200', 'Overall 2'), /*Pink Sapphire*/ +('1051441', '3800', 'Overall 2'), /*Mousy Bunny Romper*/ +('1051442', '5000', 'Overall 2'), /*Momo Maid Dress*/ +('1051444', '7100', 'Overall 2'), /*Baby Doll Linka*/ +('1051445', '4000', 'Overall 2'), /*Party Princess*/ +/*Page 27*/ +('1051446', '4700', 'Overall 2'), /*Pinky Baseball*/ +('1051447', '3400', 'Overall 2'), /*Odette Tutu*/ +('1051448', '7600', 'Overall 2'), /*Yeonhwa School Uniform*/ +('1051450', '3600', 'Overall 2'), /*Kinesis Uniform*/ +('1051451', '3800', 'Overall 2'), /*Kinesis Uniform*/ +('1051452', '6000', 'Overall 2'), /*Orange Day*/ +('1051453', '6300', 'Overall 2'), /*Teddy Suspenders*/ +('1051454', '8800', 'Overall 2'), /*Penguin Doll Outfit*/ +('1051455', '5000', 'Overall 2'), /*Time Cantabile*/ +/*Page 28*/ +('1051424', '6300', 'Overall 2'), /*Santa Girl Overall*/ +('1051425', '4700', 'Overall 2'), /*Big Ribbon Yellow Dress*/ +('1051426', '4700', 'Overall 2'), /*Gothic Girls Uniform*/ +('1051429', '6000', 'Overall 2'), /*Sweet Snow Flower*/ +('1051430', '8800', 'Overall 2'), /*Sierra Grace Dress*/ +('1051431', '7600', 'Overall 2'), /*Ms. Love Messenger Outfit*/ +('1051432', '5200', 'Overall 2'), /*Little Trainer Outfit (F)*/ +('1051434', '3200', 'Overall 2'), /*Blooming Leafy Love Outfit*/ +('1051435', '3200', 'Overall 2'), /*Starlight Outfit*/ +/*Page 29*/ +('1051436', '4700', 'Overall 2'), /*The Kingdom Dress of Queen*/ +('1051437', '4900', 'Overall 2'), /*Pink Romance*/ +('1051439', '5000', 'Overall 2'), /*Mint Kitty Tea Party*/ + + + +/*Page 1*/ +('1051472', '7100', 'Overall 3'), /*Evan Dragon Suit*/ +('1051473', '7100', 'Overall 3'), /*Royal Mercedes Suit*/ +('1051474', '5200', 'Overall 3'), /*Royal Mercedes Suit*/ +('1051475', '5600', 'Overall 3'), /*Mystic Phantom Suit*/ +('1051476', '7400', 'Overall 3'), /*Mystic Phantom Suit*/ +('1051477', '6000', 'Overall 3'), /*Winter Aran Suit*/ +('1051478', '3200', 'Overall 3'), /*Winter Aran Suit*/ +('1051479', '7600', 'Overall 3'), /*Chiaroscuro Luminous Suit*/ +('1051480', '3800', 'Overall 3'), /*Chiaroscuro Luminous Suit*/ +/*Page 2*/ +('1051481', '7100', 'Overall 3'), /*Secret Shade Suit*/ +('1051482', '7100', 'Overall 3'), /*Secret Shade Suit*/ +('1051483', '4900', 'Overall 3'), /*Frilly Bathrobe*/ +('1051484', '6000', 'Overall 3'), /*Santa Costume*/ +('1051485', '4900', 'Overall 3'), /*Time Cantabile*/ +('1051486', '4900', 'Overall 3'), /*Snow Deer Parka*/ +('1051487', '5600', 'Overall 3'), /*Cozy Fur Outfit*/ +('1051456', '3800', 'Overall 3'), /*Sparkling Bluebird (F)*/ +('1051457', '3200', 'Overall 3'), /*British Marine Outfit (F)*/ +/*Page 3*/ +('1051458', '4900', 'Overall 3'), /*Ursus Lady's Suit*/ +('1051459', '5600', 'Overall 3'), /*Pure Farmer One-piece*/ +('1051460', '5200', 'Overall 3'), /*Polka Dot Dress*/ +('1051461', '3400', 'Overall 3'), /*Giant Ribbon Outfit (F)*/ + +('1051463', '6400', 'Overall 3'), /*Bloody Bride*/ +('1051464', '3800', 'Overall 3'), /*Banana Outing Clothes*/ +('1051465', '8800', 'Overall 3'), /*Shy Traveler*/ +('1051466', '7100', 'Overall 3'), /*Blue Marine Uniform (F)*/ +/*Page 4*/ + + +('1051469', '3200', 'Overall 3'), /*Nutcracker Uniform*/ +('1051470', '8800', 'Overall 3'), /*Time Mistress*/ +('1051471', '4700', 'Overall 3'), /*Evan Dragon Suit*/ +('1051504', '4700', 'Overall 3'), /*Lucid Dream*/ +('1051505', '7100', 'Overall 3'), /*Shadow Warrior's Tunic*/ +('1051506', '3400', 'Overall 3'), /*Sweetheart Dress*/ +('1051507', '7600', 'Overall 3'), /*Orange Mushroom Skirt*/ +/*Page 5*/ +('1051508', '3800', 'Overall 3'), /*Purple Porker Skirt*/ +('1051509', '3600', 'Overall 3'), /*Pumpkin Milky Way*/ +('1051510', '4700', 'Overall 3'), /*Sweet Chocolate Dress*/ +('1051511', '3800', 'Overall 3'), /*Warm Rabbit Fur Coat*/ +('1051512', '7400', 'Overall 3'), /*Star's Serenade*/ +('1051513', '4700', 'Overall 3'), /*Queen's Evening Party*/ +('1051514', '3800', 'Overall 3'), /*Queen's Evening Party*/ +('1051515', '7400', 'Overall 3'), /*Maple M Dress*/ +('1051519', '8800', 'Overall 3'), /*Moonlight Sherbet*/ +/*Page 6*/ +('1051488', '3400', 'Overall 3'), /*Winter Garden Outfit (F)*/ + +('1051490', '7600', 'Overall 3'), /*Concert Muse (Soprano)*/ +('1051491', '6400', 'Overall 3'), /*Fragrant Spring Outing*/ +('1051492', '4900', 'Overall 3'), /*Dot Berry*/ +('1051494', '6400', 'Overall 3'), /*Lady Black*/ +('1051495', '5000', 'Overall 3'), /*Crystal Dew*/ +('1051496', '7100', 'Overall 3'), /*Crystal Dew*/ +('1051497', '7100', 'Overall 3'), /*Rose Princess Gown*/ +/*Page 7*/ +('1051498', '5600', 'Overall 3'), /*Black Girl Scout*/ +('1051499', '8800', 'Overall 3'), /*Orchid Light Hanga*/ +('1051500', '6000', 'Overall 3'), /*Queen Mary*/ +('1051501', '8800', 'Overall 3'), /*Grand Pony Get-up*/ + +('1051503', '7100', 'Overall 3'), /*Pitch Dark Poem*/ +('1051536', '3400', 'Overall 3'), /*Fab Beachwear*/ +('1051537', '4900', 'Overall 3'), /*Midnight Moonlight Outfit*/ +('1051538', '7600', 'Overall 3'), /*Suit Heart Outfit*/ +/*Page 8*/ +('1051539', '5200', 'Overall 3'), /*Crimson Fate Topcoat*/ +('1051540', '7100', 'Overall 3'), /*Crimson Fate Topcoat*/ +('1051541', '7400', 'Overall 3'), /*Pamina's Aria*/ +('1051542', '3800', 'Overall 3'), /*Spooky Skirt*/ +('1051543', '7600', 'Overall 3'), /*Halloween Pumpkin Suit*/ +('1051544', '5200', 'Overall 3'), /*Soft Blushed*/ +('1051545', '6000', 'Overall 3'), /*Iron Mace Officer*/ +('1051546', '5000', 'Overall 3'), /*Bunny Jersey*/ +('1051547', '5200', 'Overall 3'), /*Santa Costume*/ +/*Page 9*/ +('1051548', '5000', 'Overall 3'), /*Snow Blossom Coat*/ +('1051549', '6300', 'Overall 3'), /*Oh My Captain*/ +('1051551', '3800', 'Overall 3'), /*Plum Blossom Dress*/ +('1051520', '8800', 'Overall 3'), /*Soft Cream Dress*/ +('1051521', '6400', 'Overall 3'), /*Skater Fangirl*/ + +('1051523', '6000', 'Overall 3'), /*Cherry Glaze*/ +('1051528', '8800', 'Overall 3'), /*Aqua Phoenix Dress*/ +('1051529', '6000', 'Overall 3'), /*Spaceywoman*/ +/*Page 10*/ +('1051530', '6000', 'Overall 3'), /*Preppy Sprout Garb*/ +('1051531', '3800', 'Overall 3'), /*Cloud Sea Outfit (F)*/ +('1051535', '7600', 'Overall 3'), /*Teddy Land Outfit*/ +('1051568', '4000', 'Overall 3'), /*Scuba Savvy Suit*/ +('1051572', '4900', 'Overall 3'), /*Firefly Firelight Top*/ +('1051573', '3400', 'Overall 3'), /*Audience with the Empress*/ +('1051574', '6300', 'Overall 3'), /*Lovely Plaid*/ +('1051575', '8800', 'Overall 3'), /*Necrotic*/ +('1051576', '4700', 'Overall 3'), /*Romantic Warrior*/ +/*Page 11*/ +('1051577', '7400', 'Overall 3'), /*Snowflake Pea Coat*/ +('1051578', '3200', 'Overall 3'), /*Forever Young Dress*/ +('1051579', '3800', 'Overall 3'), /*Camelia Tea Dress*/ +('1051580', '3800', 'Overall 3'), /*Santa Girl Overall*/ +('1051581', '3600', 'Overall 3'), /*Santa Costume*/ +('1051582', '3400', 'Overall 3'), /*Rudolf Hoody*/ +('1051583', '4000', 'Overall 3'), /*Rudolf Hoody*/ +('1051552', '6400', 'Overall 3'), /*Maple Blitzer Strategist Uniform*/ +('1051553', '4000', 'Overall 3'), /*Lemon Wafer Coat*/ +/*Page 12*/ +('1051554', '3400', 'Overall 3'), /*Carbon Wing Coat*/ +('1051555', '6000', 'Overall 3'), /*Little Darling Outfit*/ +('1051556', '5200', 'Overall 3'), /*Tennis Uniform*/ +('1051559', '3400', 'Overall 3'), /*Candy Darling*/ +('1051560', '3200', 'Overall 3'), /*Clockwork Knight Ensemble*/ +('1051561', '4900', 'Overall 3'), /*Ballpark Buddy Uniform*/ +('1051563', '7600', 'Overall 3'), /*Spring Green Finery*/ +('1051564', '3200', 'Overall 3'), /*Nautically Pink Dress*/ +('1051565', '4700', 'Overall 3'), /*Shimmering Starlight Attire*/ +/*Page 13*/ +('1051566', '3800', 'Overall 3'), /*Shimmering Starlight Attire*/ +('1051567', '4700', 'Overall 3'), /*Seafoam Coral Coordinates*/ +('1051584', '4900', 'Overall 3'), /*Lavender Shearling Longcoat*/ +('1051585', '5200', 'Overall 3'), /*Piggy Pal Romper*/ +('1051586', '3400', 'Overall 3'), /*Wish Fulfiller Uniform*/ +('1051588', '5200', 'Overall 3'), /*Retro Swimsuit (F)*/ +('1051591', '4000', 'Overall 3'), /*Springtime Sprout Outfit (F)*/ +('1052016', '5200', 'Overall 3'), /*Brown Shinsengumi Uniform*/ +('1052017', '3400', 'Overall 3'), /*Orange Life-Jacket*/ +/*Page 14*/ +('1052018', '8800', 'Overall 3'), /*Green Life-Jacket*/ +('1052019', '5600', 'Overall 3'), /*Blue Life-Jacket*/ +('1052020', '7100', 'Overall 3'), /*White Body Tights*/ +('1052021', '4000', 'Overall 3'), /*Black Body Tights*/ +('1052022', '3200', 'Overall 3'), /*White Holed Tights*/ +('1052023', '6300', 'Overall 3'), /*Black Holed Tights*/ +('1052024', '6000', 'Overall 3'), /*Big Kimono*/ +('1052025', '3800', 'Overall 3'), /*Denim Overall*/ +('1052026', '6300', 'Overall 3'), /*Grey Full Coat*/ +/*Page 15*/ +('1052027', '7400', 'Overall 3'), /*Red Full Coat*/ +('1052028', '7400', 'Overall 3'), /*Forest Samurai Outfit*/ +('1052029', '7600', 'Overall 3'), /*Premium Trenchcoat*/ +('1052030', '6000', 'Overall 3'), /*Toga*/ +('1052031', '6300', 'Overall 3'), /*Reindeer Suit*/ +('1052000', '6000', 'Overall 3'), /*Recycled Box*/ +('1052001', '5000', 'Overall 3'), /*Paper Box*/ +('1052002', '4000', 'Overall 3'), /*Cardboard Box*/ +('1052003', '5000', 'Overall 3'), /*Blue Chinese Undead Costume*/ +/*Page 16*/ +('1052004', '5000', 'Overall 3'), /*Maroon Chinese Undead Costume*/ +('1052005', '5600', 'Overall 3'), /*Yellow Raincoat*/ +('1052006', '3400', 'Overall 3'), /*Sky Blue Raincoat*/ +('1052007', '7100', 'Overall 3'), /*Red Raincoat*/ +('1052008', '6300', 'Overall 3'), /*Green Raincoat*/ +('1052009', '8800', 'Overall 3'), /*Orange Overall*/ +('1052010', '7600', 'Overall 3'), /*Pink Overall*/ +('1052011', '5200', 'Overall 3'), /*Blue Overall*/ +('1052012', '6300', 'Overall 3'), /*Green Overall*/ +/*Page 17*/ +('1052013', '3600', 'Overall 3'), /*Graduation Gown*/ +('1052014', '4700', 'Overall 3'), /*Ducky Costume*/ +('1052015', '5200', 'Overall 3'), /*Blue Shinsengumi Uniform*/ +('1052048', '5000', 'Overall 3'), /*Brown Snowboard Overall*/ +('1052049', '3600', 'Overall 3'), /*Yang In*/ +('1052050', '5600', 'Overall 3'), /*Red Hip Hop*/ +('1052051', '7100', 'Overall 3'), /*Blue Hip Hop*/ +('1052052', '4000', 'Overall 3'), /*Musashi Costume*/ +('1052053', '3800', 'Overall 3'), /*Teddy Bear Costume*/ +/*Page 18*/ +('1052054', '7100', 'Overall 3'), /*Welder Look*/ +('1052055', '5000', 'Overall 3'), /*Enamer*/ +('1052056', '3400', 'Overall 3'), /*Soccer Uniform*/ +('1052057', '5600', 'Overall 3'), /*Soccer Uniform (No.7)*/ +('1052058', '4000', 'Overall 3'), /*Soccer Uniform (No.10)*/ +('1052059', '3600', 'Overall 3'), /*Soccer Uniform (No.14)*/ +('1052060', '3600', 'Overall 3'), /*England Soccer Uniform(No.8)*/ +('1052061', '3800', 'Overall 3'), /*Brazil Soccer Uniform(No.9)*/ +('1052062', '4700', 'Overall 3'), /*France Soccer Uniform(No.10)*/ +/*Page 19*/ +('1052063', '6000', 'Overall 3'), /*USA Soccer Uniform(No.17)*/ +('1052032', '8800', 'Overall 3'), /*Red Bruma*/ +('1052033', '3600', 'Overall 3'), /*Green Bruma*/ +('1052034', '3600', 'Overall 3'), /*Blue Bruma*/ +('1052035', '3600', 'Overall 3'), /*Guan Yu Armor*/ +('1052036', '3800', 'Overall 3'), /*Zhu-Ge-Liang Gown*/ +('1052037', '6000', 'Overall 3'), /*Patissier Uniform*/ +('1052038', '8800', 'Overall 3'), /*Blue Robot Pilotgear*/ +('1052039', '7100', 'Overall 3'), /*Liu Bei Robe*/ +/*Page 20*/ +('1052040', '3800', 'Overall 3'), /*Cao Cao Robe*/ +('1052041', '3600', 'Overall 3'), /*Sun Quan Robe*/ +('1052042', '6000', 'Overall 3'), /*Pink Robot Pilotgear*/ +('1052043', '3400', 'Overall 3'), /*Hip Hop Sweats*/ +('1052044', '7600', 'Overall 3'), /*Scuba Diving Suit*/ +('1052045', '3400', 'Overall 3'), /*Mink Coat*/ +('1052046', '7100', 'Overall 3'), /*Snowman Costume*/ +('1052047', '4700', 'Overall 3'), /*Black Snowboard Overall*/ +('1052082', '4700', 'Overall 3'), /*Elf Overall*/ +/*Page 21*/ +('1052083', '4000', 'Overall 3'), /*Sun Wukong Robe*/ +('1052084', '8800', 'Overall 3'), /*Golden Armor*/ +('1052085', '6400', 'Overall 3'), /*Red Amorian Apron*/ +('1052086', '6300', 'Overall 3'), /*Blue Amorian Apron*/ +('1052087', '6000', 'Overall 3'), /*Dark Blue Robes*/ +('1052089', '6400', 'Overall 3'), /*Black Overcoat of Doom*/ +('1052090', '7100', 'Overall 3'), /*Rompers*/ +('1052091', '8800', 'Overall 3'), /*Sachiel Armor*/ +('1052092', '8800', 'Overall 3'), /*Veamoth Armor*/ +/*Page 22*/ +('1052093', '4900', 'Overall 3'), /*Janus Armor*/ +('1052094', '4000', 'Overall 3'), /*Zhu Ba Jie Overall*/ +('1052064', '4700', 'Overall 3'), /*Soccer Uniform(No.4)*/ +('1052065', '7100', 'Overall 3'), /*Soccer Uniform(No.21)*/ +('1052066', '3400', 'Overall 3'), /*Mexico Soccer Uniform(No.9)*/ +('1052067', '4900', 'Overall 3'), /*Mummy Suit*/ +('1052068', '3800', 'Overall 3'), /*Skull Suit*/ +('1052069', '3600', 'Overall 3'), /*Flamboyant Autumn Gear*/ +('1052070', '6300', 'Overall 3'), /*Golden Armor*/ +/*Page 23*/ +('1052073', '7600', 'Overall 3'), /*White Rabbit Suit*/ +('1052074', '8800', 'Overall 3'), /*Nero Bell Outfit*/ +('1052077', '6400', 'Overall 3'), /*Moon Bunny Costume*/ +('1052078', '3400', 'Overall 3'), /*Soap Bubble Bonanza*/ +('1052079', '5200', 'Overall 3'), /*Prince of Darkness*/ +('1052144', '7400', 'Overall 3'), /*Luxurious Padded Coat*/ +('1052145', '7400', 'Overall 3'), /*Christmas Party Suit*/ +('1052147', '5000', 'Overall 3'), /*Chinese Lion Costume*/ +('1052151', '6300', 'Overall 3'), /*Bosshunter Armor*/ +/*Page 24*/ +('1052152', '6000', 'Overall 3'), /*Bosshunter Gi*/ +('1052153', '4700', 'Overall 3'), /*Red Viska for Transformation*/ +('1052154', '3200', 'Overall 3'), /*Tiger Cub Costume*/ +('1052135', '4900', 'Overall 3'), /*Centaurus Legs*/ +('1052136', '3800', 'Overall 3'), /*2nd Anniversary Mushroom Suit*/ +('1052137', '4900', 'Overall 3'), /*Tomato Suit*/ +('1052142', '7600', 'Overall 3'), /*Shorts with Suspenders*/ +('1052143', '3600', 'Overall 3'), /*Sky Blue Padded Coat*/ +('1052176', '6400', 'Overall 3'), /*Fashionable Checkerwear*/ +/*Page 25*/ +('1052178', '7400', 'Overall 3'), /*Snowflake Knit*/ +('1052179', '3800', 'Overall 3'), /*Cow Costume*/ +('1052180', '6000', 'Overall 3'), /*Denim Overalls*/ +('1052182', '7100', 'Overall 3'), /*Galactic Hero Suit*/ +('1052183', '3600', 'Overall 3'), /*Stealth Suit*/ + +('1052168', '3800', 'Overall 3'), /*Cutie Birk Outfit*/ +('1052169', '5600', 'Overall 3'), /*Gaga Suit*/ +('1052170', '7100', 'Overall 3'), /*Noob Overall*/ +/*Page 26*/ +('1052171', '3400', 'Overall 3'), /*Baby Chick Apron*/ +('1052172', '7600', 'Overall 3'), /*Pumpkin Suit*/ +('1052174', '4900', 'Overall 3'), /*Fox Outfit*/ +('1052175', '3800', 'Overall 3'), /*Coastal Winter Wear*/ +('1052209', '7600', 'Overall 3'), /*Royal Navy Uniform*/ +('1052210', '6000', 'Overall 3'), /*Alchemist Overall*/ +('1052211', '6000', 'Overall 3'), /*Fire Shadow Suit*/ +('1052212', '5600', 'Overall 3'), /*Cherry Blossom Suit*/ +('1052213', '6300', 'Overall 3'), /*Chaos Armor*/ +/*Page 27*/ +('1052214', '6000', 'Overall 3'), /*Maple Racing Suit*/ +('1052218', '7600', 'Overall 3'), /*Clown Suit*/ +('1052192', '5000', 'Overall 3'), /*Bombacha*/ +('1052193', '5600', 'Overall 3'), /*Honeybee Costume*/ +('1052194', '3600', 'Overall 3'), /*Ugabuga*/ +('1052195', '4700', 'Overall 3'), /*Aran Armor*/ +('1052196', '8800', 'Overall 3'), /*Aran Armor*/ +('1052197', '3800', 'Overall 3'), /*Brave Soldier Armor*/ +('1052198', '7100', 'Overall 3'), /*Pink Bean Suit*/ +/*Page 28*/ +('1052199', '6400', 'Overall 3'), /*Blade Overall*/ +('1052200', '7100', 'Overall 3'), /*Lolli Pink Suit*/ +('1052201', '5000', 'Overall 3'), /*Shiny Sailor Uniform*/ +('1052203', '7600', 'Overall 3'), /*One Summer Night */ +('1052204', '7400', 'Overall 3'), /*Marine Girl Dress*/ +('1052205', '6300', 'Overall 3'), /*Pluto Hero Suit*/ +('1052206', '7400', 'Overall 3'), /*Gaga Suit*/ +('1052207', '3400', 'Overall 3'), /*Cursed Golden Armor*/ +('1052245', '6400', 'Overall 3'), /*Green Leaf Overall*/ +/*Page 29*/ +('1052246', '6000', 'Overall 3'), /*Cat Set Suit*/ +('1052248', '4900', 'Overall 3'), /*Dual Blade Suit*/ +('1052253', '5000', 'Overall 3'), /*Green Overall Shorts*/ + + + +/*Page 1*/ +('1052255', '6300', 'Overall 4'), /*Hawkeye Captain Suit*/ +('1052224', '4700', 'Overall 4'), /*Strawberry Baby*/ +('1052225', '3800', 'Overall 4'), /*Lolita Butterfly Dress*/ +('1052228', '3800', 'Overall 4'), /*Layered Long Skull Tee*/ +('1052229', '4900', 'Overall 4'), /*Qi-pao Dress*/ +('1052231', '7600', 'Overall 4'), /*Little Prince*/ +('1052232', '3800', 'Overall 4'), /*Pink Fur Ribbon Dress*/ +('1052233', '5600', 'Overall 4'), /*White Fur Ribbon Dress*/ +('1052234', '7100', 'Overall 4'), /*Stylish Layered Plaid*/ +/*Page 2*/ +('1052236', '6000', 'Overall 4'), /*Petite School Shawl*/ +('1052275', '6400', 'Overall 4'), /*Royal Rainbow Zip-Up Jacket*/ +('1052282', '3800', 'Overall 4'), /*Oz Magic Robe*/ +('1052283', '3400', 'Overall 4'), /*Henesys Academy Uniform (with skirt)*/ +('1052284', '3200', 'Overall 4'), /*Henesys Academy Uniform (with pants)*/ +('1052286', '7100', 'Overall 4'), /*Pilot Suit*/ +('1052268', '5000', 'Overall 4'), /*Violet Tunic*/ +('1052306', '6300', 'Overall 4'), /*Japanesque Dress*/ +('1052309', '3600', 'Overall 4'), /*Trench Coat*/ +/*Page 3*/ +('1052289', '6400', 'Overall 4'), /*Wild Hunter Suit*/ +('1052290', '6400', 'Overall 4'), /*Battle Mage Suit*/ +('1052291', '4900', 'Overall 4'), /*Hooded Track Suit*/ +('1052292', '5000', 'Overall 4'), /*King Crow Suit*/ +('1052293', '7400', 'Overall 4'), /*Sanctus Combat Dress*/ +('1052294', '8800', 'Overall 4'), /*Sanctus Combat Suit*/ +('1052295', '8800', 'Overall 4'), /*Maid Dress (Pink)*/ +('1052296', '7600', 'Overall 4'), /*Maid Dress (Blue)*/ +('1052298', '5000', 'Overall 4'), /*Rabbit Ear Dress*/ +/*Page 4*/ +('1052338', '4000', 'Overall 4'), /*Red's Dress*/ +('1052339', '6300', 'Overall 4'), /*Lab Gear (F)*/ +('1052340', '4900', 'Overall 4'), /*Lab Gear (M)*/ + +('1052345', '3200', 'Overall 4'), /*Winter 2010 Moon Bunny Outfit*/ +('1052348', '6300', 'Overall 4'), /*Commander Captain*/ +('1052349', '7600', 'Overall 4'), /*Belt Coat*/ +('1052324', '6300', 'Overall 4'), /*Paypal Suit*/ +('1052329', '3400', 'Overall 4'), /*Pitch Dark Outfit*/ +/*Page 5*/ +('1052330', '6400', 'Overall 4'), /*Blue Mage Gear*/ +('1052331', '8800', 'Overall 4'), /*Red Mage Gear*/ +('1052332', '6400', 'Overall 4'), /*Christmas Casual Outfit*/ +('1052368', '7100', 'Overall 4'), /*Starling Suit*/ +('1052369', '6300', 'Overall 4'), /* MSE 4 Years & Unstoppable Overall*/ +('1052370', '5200', 'Overall 4'), /*Victorian Vampire Suit*/ +('1052372', '6000', 'Overall 4'), /*Blue Arabian Outfit*/ +('1052373', '3400', 'Overall 4'), /*Red Arabian Outfit*/ +('1052354', '5000', 'Overall 4'), /*Rising Star Baggy Digs*/ +/*Page 6*/ +('1052355', '3600', 'Overall 4'), /*Rookie Yellow Raincoat*/ +('1052356', '7400', 'Overall 4'), /*Military Pop Star*/ +('1052367', '4900', 'Overall 4'), /*Crow Suit*/ +('1052408', '3400', 'Overall 4'), /*Kerning Engineering School Uniform*/ +('1052410', '7400', 'Overall 4'), /*Ribboned Justice Dress*/ +('1052411', '4700', 'Overall 4'), /*Alchemist Overall*/ +('1052412', '6300', 'Overall 4'), /*Toy Prince*/ +('1052435', '7100', 'Overall 4'), /*Princess Hakama*/ +('1052438', '5000', 'Overall 4'), /*Ganache Chocolate Suit*/ +/*Page 7*/ +('1052439', '4700', 'Overall 4'), /*Ellinia Magic School Uniform*/ +('1052440', '7100', 'Overall 4'), /*Mu Lung Dojo Uniform*/ +('1052442', '6000', 'Overall 4'), /*Combat Fatigues*/ +('1052443', '6300', 'Overall 4'), /*Taisho Romance*/ +('1052445', '4700', 'Overall 4'), /*Intergalactic Armor*/ +('1052446', '4900', 'Overall 4'), /*Light Chiffon Dress*/ +('1052447', '3800', 'Overall 4'), /*Light Cotton Candy Overalls*/ +('1052416', '4700', 'Overall 4'), /*Orchid's Black Wing Uniform*/ +('1052417', '7600', 'Overall 4'), /*Honeybee Suit*/ +/*Page 8*/ +('1052418', '3200', 'Overall 4'), /*Princely Daywear*/ +('1052419', '7600', 'Overall 4'), /*Pink Lolita Outfit*/ +('1052421', '7400', 'Overall 4'), /*Urban Pirate Outfit*/ +('1052423', '6300', 'Overall 4'), /*Hades Overall*/ +('1052424', '5000', 'Overall 4'), /*Fancy Noblesse Robe*/ +('1052425', '6400', 'Overall 4'), /*White Combat Tunic*/ +('1052426', '3800', 'Overall 4'), /*White Combat Habit*/ +('1052474', '4900', 'Overall 4'), /*The Onmyouji Ceremonial Robes*/ +('1052448', '7400', 'Overall 4'), /*Tomato Outfit*/ +/*Page 9*/ +('1052449', '5200', 'Overall 4'), /*Sausage Outfit*/ +('1052455', '7600', 'Overall 4'), /*Honeybee Suit*/ +('1052458', '7100', 'Overall 4'), /*Lucia Overall*/ +('1052459', '3800', 'Overall 4'), /*Blue Angel Uniform*/ +('1052503', '4900', 'Overall 4'), /*Cool Summer Look*/ +('1052531', '4000', 'Overall 4'), /*The Bladed Falcon's Armor*/ +('1052536', '7100', 'Overall 4'), /*Marine Stripe*/ +('1052537', '5200', 'Overall 4'), /*Hyper Honeybee Suit*/ +('1052538', '5000', 'Overall 4'), /*Ghost Costume*/ +/*Page 10*/ +('1052539', '4000', 'Overall 4'), /*Blue Jiangshi Costume*/ +('1052540', '5000', 'Overall 4'), /*Cow Costume*/ +('1052541', '6300', 'Overall 4'), /*Tiger Cub Costume*/ +('1052542', '6300', 'Overall 4'), /*Angel Costume*/ +('1052543', '7400', 'Overall 4'), /*Paper Box*/ +('1052565', '5200', 'Overall 4'), /*Reindeer Suit*/ +('1052566', '7600', 'Overall 4'), /*Snowman Costume*/ +('1052567', '3400', 'Overall 4'), /*Santa Costume*/ +('1052568', '5600', 'Overall 4'), /*Decked-Out Santa Outfit*/ +/*Page 11*/ +('1052571', '3400', 'Overall 4'), /*Dark Devil Outfit*/ +('1052574', '3800', 'Overall 4'), /*Flowing Flame Robes*/ +('1052575', '4000', 'Overall 4'), /*Pious Shaman Robes*/ +('1052544', '5000', 'Overall 4'), /*Hyper Rising Star Baggy Digs*/ +('1052549', '6300', 'Overall 4'), /*[MS Custom] Orange Life-Jacket*/ +('1052550', '4900', 'Overall 4'), /*Seal Costume*/ +('1052551', '8800', 'Overall 4'), /*Yellow Bell Robe*/ +('1052552', '7100', 'Overall 4'), /*Gray Bell Robe*/ +('1052554', '3800', 'Overall 4'), /*Cat Lolita Outfit*/ +/*Page 12*/ +('1052594', '4700', 'Overall 4'), /*Green Dinosaur Overall*/ +('1052595', '7400', 'Overall 4'), /*Purple Dinosaur Onesie*/ +('1052597', '3200', 'Overall 4'), /*Hilla Robe*/ +('1052598', '4700', 'Overall 4'), /*Hawkeye Captain Suit*/ +('1052599', '3800', 'Overall 4'), /*Oz Magic Robe*/ +('1052601', '7400', 'Overall 4'), /*Kerning Technical High Uniform*/ +('1052602', '3400', 'Overall 4'), /*Black Duster*/ +('1052603', '5200', 'Overall 4'), /*Mu Lung Academy Uniform*/ +('1052604', '7600', 'Overall 4'), /*Blue Love Dress*/ +/*Page 13*/ +('1052605', '4000', 'Overall 4'), /*Ramling PJs*/ +('1052576', '6000', 'Overall 4'), /*Lotus's Black Wings Uniform*/ +('1052577', '5600', 'Overall 4'), /*Stylish Layered Plaid*/ +('1052579', '3200', 'Overall 4'), /*Xenon NeoTech Suit*/ +('1052585', '6000', 'Overall 4'), /*Fluffy Cat Outfit*/ +('1052586', '4000', 'Overall 4'), /*Lucia Outfit*/ +('1052587', '5600', 'Overall 4'), /*Harp Seal Doll Outfit*/ +('1052624', '7600', 'Overall 4'), /*GM Haku's Pirate Gear*/ +('1052626', '8800', 'Overall 4'), /*Splash Wave*/ +/*Page 14*/ +('1052627', '7100', 'Overall 4'), /*Pirate Captain's Coat*/ +('1052628', '7100', 'Overall 4'), /*Blue Officer Uniform*/ +('1052629', '3200', 'Overall 4'), /*Silver Officer Uniform*/ +('1052630', '3800', 'Overall 4'), /*Black Officer Uniform*/ +('1052634', '8800', 'Overall 4'), /*Man's Shirts*/ +('1052636', '5200', 'Overall 4'), /*Patissier Uniform*/ +('1052610', '5000', 'Overall 4'), /*Succubus Dress*/ +('1052618', '5600', 'Overall 4'), /*Blue Kitty Hoodie*/ +('1052619', '7600', 'Overall 4'), /*Pink Kitty Hoodie*/ +/*Page 15*/ +('1052656', '5600', 'Overall 4'), /*White Swan Ballet Outfit*/ +('1052657', '7600', 'Overall 4'), /*Black Swan Ballet Outfit*/ +('1052660', '3800', 'Overall 4'), /*Balloon Overalls*/ +('1052661', '8800', 'Overall 4'), /*Chicken Coataroo*/ +('1052662', '5600', 'Overall 4'), /*Camellia Flower Lovely Night Clothes*/ +('1052663', '4900', 'Overall 4'), /*Flowing Wind Robe*/ +('1052664', '5600', 'Overall 4'), /*Gentleman Bow Tie Suit*/ +('1052665', '3400', 'Overall 4'), /*Gentleman Suit*/ +('1052666', '6300', 'Overall 4'), /*Chocoram Doll Outfit*/ +/*Page 16*/ +('1052667', '5000', 'Overall 4'), /*Puffram Onesie*/ +('1052668', '3200', 'Overall 4'), /*Princess of Time Dress*/ +('1052671', '3800', 'Overall 4'), /*Oversized Oxford*/ +('1052643', '7400', 'Overall 4'), /*Bloody Jeanne*/ +('1052644', '6300', 'Overall 4'), /*Shadow Executer*/ +('1052654', '3400', 'Overall 4'), /*フューチャーロイドネオンアーマー*/ +('1052655', '5600', 'Overall 4'), /*Dawn Bear Outfit*/ +('1052692', '7400', 'Overall 4'), /*Mr. K's Cat Outfit*/ +('1052693', '6400', 'Overall 4'), /*Rudi's Outfit*/ +/*Page 17*/ + +('1052674', '3400', 'Overall 4'), /*Dark Devil Outfit*/ +('1052675', '6000', 'Overall 4'), /*Vampire Phantom Suit*/ +('1052676', '3600', 'Overall 4'), /*Kirito's Outfit*/ +('1052677', '6000', 'Overall 4'), /*Asuna's Dress*/ +('1052678', '6300', 'Overall 4'), /*Leafa's Dress*/ +('1052679', '8800', 'Overall 4'), /*Freud's Robe*/ +('1052680', '6400', 'Overall 4'), /*Aran's Armor(M)*/ +('1052681', '6400', 'Overall 4'), /*Aran's Armor(F)*/ +/*Page 18*/ +('1052682', '5600', 'Overall 4'), /*Brave Aran's Armor*/ +('1052684', '4700', 'Overall 4'), /*Heathcliff's Armor*/ +('1052685', '6300', 'Overall 4'), /*Yui's Dress*/ +('1052724', '3400', 'Overall 4'), /*Cutie Horse Suit*/ +('1052725', '7100', 'Overall 4'), /*Fancy Magician Overall*/ +('1052726', '3800', 'Overall 4'), /*Ghost Bride Wedding Dress*/ +('1052727', '4700', 'Overall 4'), /*Refreshing Male Outfit*/ +('1052728', '6400', 'Overall 4'), /*Refreshing Female Cardigan Outfit*/ + +/*Page 19*/ + +('1052754', '5000', 'Overall 4'), /*Pink Panda Outfit*/ +('1052762', '5200', 'Overall 4'), /*Banana Overalls*/ +('1052746', '3800', 'Overall 4'), /*Chef Overall*/ +('1052747', '7100', 'Overall 4'), /*Contemporary Chic Outfit*/ +('1052749', '6400', 'Overall 4'), /*Nurse Dress*/ +('1052750', '4900', 'Overall 4'), /*Doctor Suit*/ +('1052771', '6000', 'Overall 4'), /*Ayame Overall Armor*/ +('1052772', '3800', 'Overall 4'), /*2014 유니폼*/ +/*Page 20*/ +('1052773', '7100', 'Overall 4'), /*暗夜精灵铠甲*/ +('1052774', '5200', 'Overall 4'), /*隐武士铠甲*/ +('1052779', '8800', 'Overall 4'), /*Peach Camellia Kimono*/ +('1052780', '5600', 'Overall 4'), /*Red Wind Robes*/ +('1052781', '4700', 'Overall 4'), /*Red Pony Overalls*/ +('1052782', '7400', 'Overall 4'), /*Blue Pony Overalls*/ +('1052811', '6300', 'Overall 4'), /*Bright Angel Coat*/ +('1052812', '7100', 'Overall 4'), /*Dark Devil Coat*/ +('1052852', '6000', 'Overall 4'), /*Raging Lotus Gown*/ +/*Page 21*/ +('1052853', '7100', 'Overall 4'), /*Ill Orchid Gown*/ +('1052854', '7100', 'Overall 4'), /*Worn Ghost Suit*/ +('1052855', '7400', 'Overall 4'), /*Worn Witch Outfit*/ +('1052856', '3800', 'Overall 4'), /*Worn Skull Outfit*/ +('1052857', '7100', 'Overall 4'), /*Ghost Suit*/ +('1052858', '3800', 'Overall 4'), /*Witch Outfit*/ +('1052859', '4900', 'Overall 4'), /*Skull Outfit*/ +('1052837', '4000', 'Overall 4'), /*Gym Teacher's Suit*/ +('1052838', '3400', 'Overall 4'), /*Student Swimsuit*/ +/*Page 22*/ +('1052841', '3400', 'Overall 4'), /*Sweet Persimmon Suit*/ +('1052842', '4900', 'Overall 4'), /*White Puppy Outfit*/ +('1052843', '3800', 'Overall 4'), /*Brown Puppy Outfit*/ +('1052844', '4700', 'Overall 4'), /*Corn Overalls*/ +('1052845', '4000', 'Overall 4'), /*Loose-fit Homecoming Duds*/ +('1052846', '3200', 'Overall 4'), /*Peach Overalls*/ +('1052891', '6300', 'Overall 4'), /*Blue Bird Overall*/ +('1052892', '7400', 'Overall 4'), /*Cutie Bunny Overall*/ +('1052894', '4000', 'Overall 4'), /*Romantic Dress*/ +/*Page 23*/ +('1052895', '6000', 'Overall 4'), /*Silver Wolf Outfit*/ +('1052864', '3600', 'Overall 4'), /*Pumpkin Bat Outfit*/ +('1052865', '3200', 'Overall 4'), /*Dinofrog Outfit*/ +('1052870', '7100', 'Overall 4'), /*Cadet Corps Uniform*/ +('1052871', '6000', 'Overall 4'), /*Scout Regiment Uniform*/ +('1052872', '7600', 'Overall 4'), /*Red Ribbon Dress*/ +('1052873', '3600', 'Overall 4'), /*Mikasa's Scout Regiment Uniform*/ +('1052874', '7400', 'Overall 4'), /*Levi's Scout Regiment Uniform*/ +('1052876', '5000', 'Overall 4'), /*Eren's Scout Regiment Uniform*/ +/*Page 24*/ +('1052912', '4900', 'Overall 4'), /*Quilting Fashion King*/ +('1052916', '3600', 'Overall 4'), /*Akarin's Flowery Dress*/ +('1052917', '3600', 'Overall 4'), /*Akatsuki's Dark Suit*/ +('1052920', '4000', 'Overall 4'), /*Red Mouse Hooded Onesie*/ +('1052921', '3600', 'Overall 4'), /*Bubbly Blue Carp Outfit*/ +('1052922', '5000', 'Overall 4'), /*Bubbly Red Carp Outfit*/ +('1052923', '4900', 'Overall 4'), /*Feline Blue Sleeves*/ +('1052924', '3600', 'Overall 4'), /*Noble Blossom Coat*/ +('1052925', '3400', 'Overall 4'), /*Pink Blossom Dress*/ +/*Page 25*/ +('1052926', '6000', 'Overall 4'), /*Cottontail Rabbit Dress*/ +('1052896', '5600', 'Overall 4'), /*Cutie Birk Outfit*/ +('1052897', '5600', 'Overall 4'), /*Snowman Costume*/ +('1052898', '6300', 'Overall 4'), /*Scuba Diving Suit*/ +('1052899', '4900', 'Overall 4'), /*Black Mouse Hooded Onesie*/ +('1052901', '3200', 'Overall 4'), /*Hipster*/ +('1052902', '3600', 'Overall 4'), /*Jumpsuit*/ +('1052903', '3800', 'Overall 4'), /*White Servant Tux*/ +('1052904', '5000', 'Overall 4'), /*Lovely Princess Dress*/ +/*Page 26*/ +('1052909', '6400', 'Overall 4'), /*Honeybee Coat*/ +('1052910', '6300', 'Overall 4'), /*Crystal Cat Outfit (M)*/ +('1052911', '3200', 'Overall 4'), /*Crystal Cat Outfit (F)*/ +('1052946', '8800', 'Overall 4'), /*Schwarzer Cross*/ +('1052947', '3200', 'Overall 4'), /*Red Mouse Hooded Onesie*/ +('1052948', '8800', 'Overall 4'), /*Evening Orchid*/ +('1052949', '5600', 'Overall 4'), /*Haku Cloth*/ +('1052951', '6000', 'Overall 4'), /*Polka Dot Dress*/ +('1052954', '8800', 'Overall 4'), /*Deep Sky*/ +/*Page 27*/ +('1052955', '7600', 'Overall 4'), /*Assistant Chef Outfit*/ +('1052956', '3600', 'Overall 4'), /*Beginner Chef Outfit*/ +('1052957', '6000', 'Overall 4'), /*Intermediate Chef Outfit*/ +('1052958', '6400', 'Overall 4'), /*Advanced Chef Outfit*/ +('1052959', '6400', 'Overall 4'), /*Sous-Chef Outfit*/ +('1052939', '7100', 'Overall 4'), /*돼지바 탱글딸기*/ +('1052940', '3400', 'Overall 4'), /*Spring Sunlight Pullover*/ +('1052941', '7100', 'Overall 4'), /*Dark Lotus Uniform*/ +('1052942', '6300', 'Overall 4'), /*Blue Panda Doll Outfit*/ +/*Page 28*/ +('1052976', '5000', 'Overall 4'), /*Clear Blue*/ +('1052977', '5200', 'Overall 4'), /*Pink Cardigan*/ +('1052960', '3800', 'Overall 4'), /*Chef Outfit*/ +('1052961', '3200', 'Overall 4'), /*Scuba Diving Suit*/ +('1052965', '7600', 'Overall 4'), /*Black Sailor Dress*/ +('1052966', '6000', 'Overall 4'), /*Hilla Android Uniform*/ +('1052967', '4900', 'Overall 4'), /*Magnus Android Uniform*/ +('1052970', '3600', 'Overall 4'), /*Toy Prince*/ +('1052975', '3600', 'Overall 4'), /*Preppy Suspenders*/ +/*Page 29*/ +('1053014', '4700', 'Overall 4'), /*Urban Pirate Outfit*/ +('1053015', '4700', 'Overall 4'), /*Reindeer Suit*/ +('1053016', '6300', 'Overall 4'), /*Show me the Meso*/ + + + +/*Page 1*/ +('1053017', '7400', 'Overall 5'), /*Undertaker*/ +('1053018', '6400', 'Overall 5'), /*Beaky Owl Outfit*/ +('1053022', '7400', 'Overall 5'), /*Umbral Attire*/ +('1053023', '5000', 'Overall 5'), /*Umbral Coat*/ +('1052994', '6000', 'Overall 5'), /*Abyss Burgunt*/ +('1052995', '7600', 'Overall 5'), /*Nyanya Steward Tuxedo*/ +('1052996', '3200', 'Overall 5'), /*Undertaker*/ +('1052997', '7400', 'Overall 5'), /*Arctic Suit*/ +('1052998', '7600', 'Overall 5'), /*Show me the Meso*/ +/*Page 2*/ +('1052999', '5600', 'Overall 5'), /*Polar Fur-Trimmed Dress*/ +('1053000', '5000', 'Overall 5'), /*Enari's Cow Outfit*/ +('1053001', '4000', 'Overall 5'), /*Flutter-sleeve Bell Suit*/ +('1053006', '5600', 'Overall 5'), /*Yarn Bunny Outfit*/ +('1053040', '3400', 'Overall 5'), /*Shark Bodysuit*/ +('1053041', '5000', 'Overall 5'), /*Blue Phoenix Toga*/ +('1053042', '4000', 'Overall 5'), /*Red Phoenix Toga*/ +('1053045', '5200', 'Overall 5'), /*Kitty Overall (Male)*/ +('1053046', '7400', 'Overall 5'), /*Winged Kitty Dress (Female)*/ +/*Page 3*/ +('1053047', '5000', 'Overall 5'), /*Mischievous Sweet Pig Outfit*/ +('1053048', '6300', 'Overall 5'), /*Cunning Sweet Pig Outfit*/ +('1053049', '3600', 'Overall 5'), /*Spring Scene Raincoat*/ +('1053050', '3600', 'Overall 5'), /*Noble Maple Suit*/ +('1053051', '7100', 'Overall 5'), /*Chicken Cutie Outfit*/ +('1053052', '8800', 'Overall 5'), /*Bubble Leaf Pants*/ +('1053053', '7400', 'Overall 5'), /*Bubble Leaf Skirt*/ +('1053054', '3600', 'Overall 5'), /*Hydrangea Kimono*/ +('1053055', '3600', 'Overall 5'), /*Racing Elephant Outfit*/ +/*Page 4*/ +('1053024', '3200', 'Overall 5'), /*Flower Dancer's Dress*/ +('1053025', '3800', 'Overall 5'), /*Moon Dancer's Attire*/ +('1053028', '8800', 'Overall 5'), /*Baby Binkie Spacesuit*/ + + +('1053033', '6300', 'Overall 5'), /*Damien Coat*/ +('1053034', '5600', 'Overall 5'), /*Alicia Dress*/ +('1053035', '3400', 'Overall 5'), /*Oversized Shirt*/ +('1053038', '6000', 'Overall 5'), /*Singles Army Combat Armor*/ +/*Page 5*/ +('1053039', '3200', 'Overall 5'), /*Couples Army Combat Armor*/ +('1053082', '8800', 'Overall 5'), /*Oversized Beach Gown*/ +('1053083', '7100', 'Overall 5'), /*Super Miracle Cube Outfit*/ +('1053084', '7100', 'Overall 5'), /*Violet Cube Outfit*/ +('1053085', '3600', 'Overall 5'), /*Black Cube Outfit*/ +('1053086', '3400', 'Overall 5'), /*Kamaitachi Outfit*/ +('1053087', '7600', 'Overall 5'), /*Formal Brown Shorts*/ +('1053056', '5600', 'Overall 5'), /*Blaster Outfit (M)*/ +('1053057', '7400', 'Overall 5'), /*Blaster Outfit (F)*/ +/*Page 6*/ +('1053058', '5600', 'Overall 5'), /*Sky-blue Overalls*/ +('1053059', '7100', 'Overall 5'), /*Villain's Cool Tights (Outfit)*/ +('1053060', '6400', 'Overall 5'), /*Colorful Bikini*/ +('1053061', '5200', 'Overall 5'), /*Colorful Beach Pants*/ + +('1053068', '6000', 'Overall 5'), /*Lake Monster Invincible Armor*/ +('1053069', '6400', 'Overall 5'), /*Kitty Bell*/ +('1053104', '7600', 'Overall 5'), /*Emilia Overall Outfit*/ +('1053105', '3400', 'Overall 5'), /*Subaru's Track Suit*/ +/*Page 7*/ +('1053106', '6400', 'Overall 5'), /*Felt Overall Outfit*/ +('1053107', '3600', 'Overall 5'), /*Priscilla's Dress*/ +('1053108', '7100', 'Overall 5'), /*Vampire Phantom Suit*/ +('1053109', '5000', 'Overall 5'), /*Winter Bunny Coat (Teal)*/ +('1053110', '3600', 'Overall 5'), /*Winter Bunny Coat (Pink)*/ +('1053114', '4900', 'Overall 5'), /*Alicorn Costume*/ +('1053115', '5000', 'Overall 5'), /*Egg Outfit*/ +('1053116', '7400', 'Overall 5'), /*Cat Monster Outfit*/ +('1053117', '6400', 'Overall 5'), /*Love Tree Outfit*/ +/*Page 8*/ +('1053118', '3600', 'Overall 5'), /*Festive Lovers Outfit (M)*/ +('1053119', '3600', 'Overall 5'), /*Festive Lovers Outfit (F)*/ +('1053088', '3400', 'Overall 5'), /*Formal Brown Skirt*/ +('1053089', '6300', 'Overall 5'), /*Moon Bunny Outfit (M)*/ +('1053090', '7100', 'Overall 5'), /*Moon Bunny Outfit (F)*/ +('1053091', '5600', 'Overall 5'), /*Dark Musician Coat*/ +('1053092', '7100', 'Overall 5'), /*Chained Princess Coat*/ +('1053093', '5200', 'Overall 5'), /*Halloween Festival Costume (M)*/ +('1053094', '7100', 'Overall 5'), /*Halloween Festival Costume (F)*/ +/*Page 9*/ +('1053095', '6000', 'Overall 5'), /*Bichon Outfit*/ +('1053096', '7600', 'Overall 5'), /*Roundy Round Fairy Outfit*/ +('1053097', '4900', 'Overall 5'), /*Sweet Penguin Doll Outfit*/ +('1053098', '8800', 'Overall 5'), /*Fresh Penguin Doll Outfit*/ +('1053099', '3200', 'Overall 5'), /*Flutter Flower Knit*/ +('1053102', '5600', 'Overall 5'), /*우리네 멜빵바지*/ +('1053103', '3200', 'Overall 5'), /*Red Cube Outfit*/ +('1053138', '3200', 'Overall 5'), /*Nova Enchanter Clothes*/ +('1053141', '5000', 'Overall 5'), /*Spring Fairy Outfit*/ +/*Page 10*/ +('1053142', '5600', 'Overall 5'), /*Rocket Outfit*/ +('1053144', '6000', 'Overall 5'), /*Cape Uniform (M)*/ +('1053145', '8800', 'Overall 5'), /*Cape Uniform (F)*/ +('1053146', '7600', 'Overall 5'), /*Heart Fur Coat*/ +('1053147', '6300', 'Overall 5'), /*White M-Forcer*/ +('1053148', '5200', 'Overall 5'), /*Ladybug Clothes*/ +('1053120', '7600', 'Overall 5'), /*Fried Chicken God's Garb (M)*/ +('1053121', '3400', 'Overall 5'), /*Fried Chicken God's Garb (F)*/ +('1053124', '3200', 'Overall 5'), /*Snow Moon Flower Outfit*/ +/*Page 11*/ +('1053125', '6300', 'Overall 5'), /*White Night Outfit*/ +('1053126', '5200', 'Overall 5'), /*Polka Dot Heart Dress (F)*/ +('1053127', '5000', 'Overall 5'), /*Heart Jumpsuit (M)*/ +('1053130', '3800', 'Overall 5'), /*Polar Explorer Winter Clothes*/ +('1053131', '5000', 'Overall 5'), /*Sweet Chocolate Dessert Suit*/ +('1053132', '7400', 'Overall 5'), /*Sweet Fresh Cream Dessert Dress*/ +('1053133', '3200', 'Overall 5'), /*Yellow Chick Clothes (M)*/ +('1053134', '7100', 'Overall 5'), /*Yellow Chick Clothes (F)*/ +('1053168', '5200', 'Overall 5'), /*Aspire Uniform*/ +/*Page 12*/ +('1053169', '4700', 'Overall 5'), /*Aster's Bon Bon Ribbon*/ +('1053170', '3800', 'Overall 5'), /*Rhea's Classical Dream*/ +('1053171', '3600', 'Overall 5'), /*Kat's Magic Kit*/ +('1053172', '3800', 'Overall 5'), /*Anastasia's Royal Serenade*/ +('1053173', '3600', 'Overall 5'), /*Roxxy's Full Moon Rhapsody*/ +('1053174', '6400', 'Overall 5'), /*Apollo's Steampunk Look*/ +('1053175', '3400', 'Overall 5'), /*Jax's Sonata Tuxedo*/ +('1053176', '6300', 'Overall 5'), /*Sarim's Midnight Show*/ +('1053177', '6400', 'Overall 5'), /*Detective Suit*/ +/*Page 13*/ +('1053180', '7600', 'Overall 5'), /*Dango Set Outfit*/ +('1053183', '5200', 'Overall 5'), /*Iron Mace Uniform Outfit (M)*/ +('1053155', '8800', 'Overall 5'), /*Silver Flower Child Outfit (F)*/ +('1053156', '4000', 'Overall 5'), /*Silver Flower Child Outfit (M)*/ +('1053157', '4900', 'Overall 5'), /*Pandora Outfit*/ +('1053158', '6000', 'Overall 5'), /*Eastern Inspiration*/ +('1053159', '6400', 'Overall 5'), /*Starlit Dreams Robe*/ +('1053162', '3800', 'Overall 5'), /*Pop Star Long Coat (F)*/ +('1053163', '5200', 'Overall 5'), /*Pop Star Long Coat (M)*/ +/*Page 14*/ +('1053164', '7100', 'Overall 5'), /*Foxy Teacher Outfit*/ +('1053165', '7600', 'Overall 5'), /*Froggy Raincoat*/ +('1053166', '6400', 'Overall 5'), /*Elizabethan Dress*/ +('1053167', '8800', 'Overall 5'), /*Napoleonic Uniform*/ +('1053200', '7400', 'Overall 5'), /*Watermelon Overalls (M)*/ +('1053201', '5200', 'Overall 5'), /*Simple Swimsuit (F)*/ +('1053202', '8800', 'Overall 5'), /*Simple Swimsuit (M)*/ +('1053203', '6400', 'Overall 5'), /*Watermelon Splash Suit*/ +('1053205', '7400', 'Overall 5'), /*Black and White Heart Outfit*/ +/*Page 15*/ +('1053207', '4700', 'Overall 5'), /*Loose-fit Flower Print Shirt*/ +('1053208', '4900', 'Overall 5'), /*Refreshing Lemon Outfit*/ +('1053209', '6400', 'Overall 5'), /*Summer Flower Fairy Outfit (F)*/ +('1053210', '7400', 'Overall 5'), /*Summer Flower Fairy Outfit (M)*/ +('1053215', '6000', 'Overall 5'), /*Mellow Dino Gown*/ +('1053184', '3800', 'Overall 5'), /*Iron Mace Uniform Outfit (F)*/ +('1053186', '3600', 'Overall 5'), /*Pink Elephant Outfit*/ +('1053187', '6400', 'Overall 5'), /*Maple Galaxy Space Suit*/ +('1053192', '6300', 'Overall 5'), /*Carrot Julius Overalls*/ +/*Page 16*/ +('1053194', '5200', 'Overall 5'), /*Summer Off-the-shoulder Outfit*/ +('1053195', '3600', 'Overall 5'), /*Forest Breeze Nightgown*/ +('1053196', '7600', 'Overall 5'), /*Forest Breeze Vest*/ +('1053197', '5600', 'Overall 5'), /*Red Striped Swimsuit*/ +('1053198', '8800', 'Overall 5'), /*Blue Striped Swimsuit*/ +('1053199', '4700', 'Overall 5'), /*Watermelon Dress (F)*/ +('1053232', '6000', 'Overall 5'), /*Sensible Denim Outfit (M)*/ +('1053234', '5200', 'Overall 5'), /*Ryude Robe*/ +('1053239', '6400', 'Overall 5'), /*Aspiring Aubergine*/ +/*Page 17*/ +('1053240', '3800', 'Overall 5'), /*Leafy*/ +('1053241', '7100', 'Overall 5'), /*Pea Pod*/ +('1053242', '7600', 'Overall 5'), /*Meow Outfit*/ +('1053243', '5200', 'Overall 5'), /*Christmas Bunny Outfit (F)*/ +('1053244', '3400', 'Overall 5'), /*Christmas Bunny Outfit (M)*/ +('1053245', '4700', 'Overall 5'), /*Warm Pink Bear Outfit*/ +('1053246', '7400', 'Overall 5'), /*Warm Blue Bear Outfit*/ +('1053247', '5200', 'Overall 5'), /*Fall Oversized Jacket*/ +('1053216', '3200', 'Overall 5'), /*Sunny Dino Gown*/ +/*Page 18*/ +('1053217', '6400', 'Overall 5'), /*Rabble Rouser Outfit (F)*/ +('1053218', '6400', 'Overall 5'), /*Rabble Rouser Outfit (M)*/ +('1053219', '4000', 'Overall 5'), /*Feather Messenger Outfit (F)*/ +('1053220', '5000', 'Overall 5'), /*Feather Messenger Outfit (M)*/ +('1053221', '6000', 'Overall 5'), /*Falling Darkness Outfit (F)*/ +('1053222', '3200', 'Overall 5'), /*Falling Darkness Outfit (M)*/ +('1053225', '7100', 'Overall 5'), /*Puppy Love Samurai Outfit (F)*/ +('1053226', '7600', 'Overall 5'), /*Puppy Love Samurai Outfit (M)*/ +('1053227', '5000', 'Overall 5'), /*Shadow Tactician Outfit*/ +/*Page 19*/ +('1053228', '7600', 'Overall 5'), /*Cat Cafe Outfit (F)*/ +('1053229', '8800', 'Overall 5'), /*Cat Cafe Outfit (M)*/ +('1053230', '3800', 'Overall 5'), /*Apple Bunny Shirt*/ +('1053231', '8800', 'Overall 5'), /*Sensible Denim Outfit (F)*/ +('1053264', '4000', 'Overall 5'), /*Paper Box*/ +('1053265', '3200', 'Overall 5'), /*Worn Ghost Suit*/ +('1053266', '5000', 'Overall 5'), /*Worn Witch Outfit*/ +('1053267', '4000', 'Overall 5'), /*Worn Skull Outfit*/ +('1053268', '5600', 'Overall 5'), /*아틀리에 비서로이드 근무복*/ +/*Page 20*/ +('1053269', '8800', 'Overall 5'), /*Adam's Aspire Personal Assistant Suit*/ +('1053270', '3800', 'Overall 5'), /*Eve's Aspire Personal Assistant Dress*/ +('1053277', '6400', 'Overall 5'), /*EVA Android Longcoat*/ +('1053278', '5000', 'Overall 5'), /*Asuka Plugsuit*/ +('1053279', '7400', 'Overall 5'), /*Rei Plugsuit*/ +('1053250', '5600', 'Overall 5'), /*Busy Girl Penguin Outfit*/ +('1053251', '6000', 'Overall 5'), /*Busy Boy Penguin Outfit*/ +('1053252', '4900', 'Overall 5'), /*Fried Suit*/ +('1053253', '7100', 'Overall 5'), /*Cadena Agent Suit (F)*/ +/*Page 21*/ +('1053254', '7600', 'Overall 5'), /*Cadena Agent Suit (M)*/ +('1053255', '3600', 'Overall 5'), /*Winter Fantasy Cape*/ +('1053256', '7600', 'Overall 5'), /*Snowy Mountain Outfit*/ +('1053257', '3800', 'Overall 5'), /*Doll's Nightwear*/ +('1053258', '7600', 'Overall 5'), /*Beware the Pumpkin*/ +('1053259', '7400', 'Overall 5'), /*Ghost Costume*/ +('1053260', '7100', 'Overall 5'), /*Blue Jiangshi Costume*/ +('1053261', '5200', 'Overall 5'), /*Angel Costume*/ +('1053262', '8800', 'Overall 5'), /*Tiger Cub Costume*/ +/*Page 22*/ +('1053263', '6400', 'Overall 5'), /*Cow Costume*/ +('1053296', '8800', 'Overall 5'), /*Pink Bear Winter Padded Coat*/ +('1053301', '5200', 'Overall 5'), /*Homeless Cat Outfit*/ +('1053302', '5600', 'Overall 5'), /*Green Hipster Track Suit*/ +('1053303', '3800', 'Overall 5'), /*Yellow Hipster Track Suit*/ +('1053304', '7600', 'Overall 5'), /*Pink Hipster Track Suit*/ +('1053305', '7400', 'Overall 5'), /*Raindrop Raincoat*/ +('1053306', '3600', 'Overall 5'), /*Super Summer Outfit (F)*/ +('1053307', '3600', 'Overall 5'), /*Super Summer Outfit (M)*/ +/*Page 23*/ +('1053308', '8800', 'Overall 5'), /*Ark Outfit (F)*/ +('1053309', '5600', 'Overall 5'), /*Ark Outfit (M)*/ +('1053310', '5000', 'Overall 5'), /*Draped Clothes*/ +('1053280', '5200', 'Overall 5'), /*Lunar New Year VIP Outfit (F)*/ +('1053281', '6000', 'Overall 5'), /*Lunar New Year VIP Outfit (M)*/ +('1053282', '6300', 'Overall 5'), /*Royal Guard Outfit (F)*/ +('1053283', '5200', 'Overall 5'), /*Royal Guard Outfit (M)*/ +('1053285', '5600', 'Overall 5'), /*Red Bear Winter Padded Coat*/ +('1053286', '3600', 'Overall 5'), /*World of Pink Outfit (M)*/ +/*Page 24*/ +('1053287', '7100', 'Overall 5'), /*World of Pink Outfit (F)*/ +('1053288', '3800', 'Overall 5'), /*Butterfly Outfit (M)*/ +('1053289', '7400', 'Overall 5'), /*Butterfly Outfit (F)*/ +('1053290', '5600', 'Overall 5'), /*Boyfriend Outfit (M)*/ +('1053291', '3800', 'Overall 5'), /*Girlfriend Outfit (F)*/ +('1053292', '5600', 'Overall 5'), /*Oversized Floral Shirt*/ +('1053293', '7400', 'Overall 5'), /*Valentine's Outfit (M)*/ +('1053294', '8800', 'Overall 5'), /*Valentine's Outfit (F)*/ +('1053295', '7400', 'Overall 5'), /*Alchemist Cloth*/ +/*Page 25*/ +('1053328', '6000', 'Overall 5'), /*Innocent Outfit*/ +('1053329', '4700', 'Overall 5'), /*Summer Story Outfit Package (F)*/ +('1053330', '3600', 'Overall 5'), /*Summer Story Outfit Package (M)*/ +('1053335', '3200', 'Overall 5'), /*Crispy Carrot Duds*/ +('1053336', '5000', 'Overall 5'), /*Catkerchief Doll Outfit*/ +('1053338', '4700', 'Overall 5'), /*Traditional Thai Attire Outfit (F)*/ +('1053339', '4000', 'Overall 5'), /*Traditional Thai Attire Outfit (M)*/ +('1053343', '6400', 'Overall 5'), /*Maple Alliance Suit*/ +('1053314', '5000', 'Overall 5'), /*Maple Gumshoe's Coat*/ +/*Page 26*/ +('1053315', '3200', 'Overall 5'), /*Jailbird Uniform*/ +('1053316', '5000', 'Overall 5'), /*Happy Ghost Outfit (F)*/ +('1053317', '6300', 'Overall 5'), /*Happy Ghost Outfit (M)*/ +('1053318', '5000', 'Overall 5'), /*Erda Outfit*/ +('1053321', '7400', 'Overall 5'), /*Kero-chan Bodysuit*/ +('1053322', '4700', 'Overall 5'), /*Sakura Battle Costume Outfit*/ +('1053323', '7600', 'Overall 5'), /*Syaoran Battle Costume Outfit*/ +('1053324', '5200', 'Overall 5'), /*Tomoeda Middle School Female Winter Uniform*/ +('1053325', '4700', 'Overall 5'), /*Tomoeda Middle School Male Winter Uniform*/ +/*Page 27*/ +('1053363', '7400', 'Overall 5'), /*Cluckbottom*/ +('1053364', '3400', 'Overall 5'), /*Tri-color Outfit (F)*/ +('1053365', '5600', 'Overall 5'), /*Tri-color Outfit (M)*/ +('1053366', '7600', 'Overall 5'), /*Sweet Deer Outfit*/ +('1053367', '7600', 'Overall 5'), /*Little Star Cocoon Outfit*/ +('1053371', '4000', 'Overall 5'), /*Cozy Winter Clothes Outfit (F)*/ +('1053372', '6000', 'Overall 5'), /*Cozy Winter Clothes Outfit (M)*/ +('1053373', '7100', 'Overall 5'), /*Regal Romance Outfit (F)*/ +('1053374', '5000', 'Overall 5'), /*Regal Romance Outfit (M)*/ +/*Page 28*/ +('1053375', '3800', 'Overall 5'), /*Blue Flame Magician Robe*/ +('1053344', '3400', 'Overall 5'), /*Starry Summer Night Outfit (F) */ +('1053345', '6300', 'Overall 5'), /*Starry Summer Night Outfit (M) */ +('1053346', '3800', 'Overall 5'), /*Reaper's Robe*/ +('1053347', '5000', 'Overall 5'), /*Alliance Commander Suit*/ +('1053351', '7100', 'Overall 5'), /*Cutie Pie Coat*/ +('1053352', '6400', 'Overall 5'), /*Veritas Attire*/ +('1053353', '5600', 'Overall 5'), /*Heavenly Prayer Outfit (F) */ +('1053354', '4000', 'Overall 5'), /*Heavenly Prayer Outfit (M) */ +/*Page 29*/ +('1053355', '5000', 'Overall 5'), /*Delinquent Bear Outfit*/ +('1053356', '8800', 'Overall 5'), /*Happy Bear Outfit (F)*/ +('1053357', '5600', 'Overall 5'), /*Happy Bear Outfit (M)*/ + + + +/*Page 1*/ +('1053393', '7100', 'Overall 6'), /*Snowman Costume*/ +('1053397', '7400', 'Overall 6'), /*Spring Cleaning Coveralls*/ +('1053398', '4700', 'Overall 6'), /*Spring Chicky Sportswear*/ +('1053399', '4000', 'Overall 6'), /*Sugarsweet Candy Boy Outfit (M)*/ +('1053400', '3200', 'Overall 6'), /*Sugarsweet Candy Girl Outfit (F)*/ +('1053401', '3600', 'Overall 6'), /*Spring Ducky Raincoat*/ +('1053403', '7100', 'Overall 6'), /*CONY Onesie*/ +('1053404', '3400', 'Overall 6'), /*Cursed Hunter Suit*/ +('1053405', '4700', 'Overall 6'), /*LEONARD Onesie*/ +/*Page 2*/ +('1053406', '6400', 'Overall 6'), /*SALLY Onesie*/ +('1053376', '6400', 'Overall 6'), /*Crown Fitness Track Suit*/ +('1053377', '6400', 'Overall 6'), /*Frilly Pink Pajamas (F)*/ +('1053378', '4000', 'Overall 6'), /*Silly Blue Pajamas (M)*/ +('1053379', '5600', 'Overall 6'), /*Cobalt Filigree Outfit (F)*/ +('1053380', '6400', 'Overall 6'), /*Cobalt Filigree Outfit (M)*/ +('1053381', '6300', 'Overall 6'), /*Lunar New Year Pudgy Piggy Outfit (F)*/ +('1053382', '6400', 'Overall 6'), /*Lunar New Year Pudgy Piggy Outfit (M)*/ +('1053383', '7400', 'Overall 6'), /*Sweet Shipmate Uniform (F)*/ +/*Page 3*/ +('1053384', '5000', 'Overall 6'), /*Sweet Shipmate Uniform (M)*/ +('1053385', '7400', 'Overall 6'), /*Outsized Sailor Coat (Brown & Black)*/ +('1053386', '6400', 'Overall 6'), /*Outsized Sailor Coat (Black & Ivory)*/ +('1053387', '7600', 'Overall 6'), /*Outsized Sailor Coat (Navy & White)*/ +('1053388', '6000', 'Overall 6'), /*Outsized Sailor Coat (White & Purple)*/ +('1053389', '7400', 'Overall 6'), /*Outsized Sailor Coat (White & Red)*/ +('1053390', '6300', 'Overall 6'), /*Hunny Bun Bear Onesie*/ +('1053391', '3600', 'Overall 6'), /*Reindeer Suit*/ +('1053424', '3600', 'Overall 6'), /*Starry Light Suit*/ +/*Page 4*/ +('1053434', '5200', 'Overall 6'), /*Fox Fire Shirt*/ +('1053411', '4000', 'Overall 6'), /*Springtime Boho Tunic*/ +('1053412', '4900', 'Overall 6'), /*Sunny Songbird Outfit (M)*/ +('1053413', '7100', 'Overall 6'), /*Sunny Songbird Outfit (F)*/ +('1053414', '8800', 'Overall 6'), /*Midnight Magician Outfit (M)*/ +('1053415', '4000', 'Overall 6'), /*Midnight Magician Outfit (F)*/ +('1053420', '5200', 'Overall 6'), /*Bunny Ear Outfit*/ +('1053421', '7400', 'Overall 6'), /*Bunny Ear Outfit*/ +('1053422', '4000', 'Overall 6'), /*Blue Flame Hellion Outfit*/ +/*Page 5*/ +('1053423', '7600', 'Overall 6'), /*Starry Light Gown*/ +('1053441', '3800', 'Overall 6'), /*Red Lotus Spirit Walker's Attire*/ + + + + + +/* Top */ +/*Page 1*/ +('1049000', '3600', 'Top'), /*Friendship Shirt*/ +('1040005', '4900', 'Top'), /*Orange Baseball Jacket*/ +('1040001', '3400', 'Top'), /*Black Blazer*/ +('1040027', '5000', 'Top'), /*Old School Blazer*/ +('1040047', '3400', 'Top'), /*Dark Rider*/ +('1040046', '3400', 'Top'), /*Shine Rider*/ +('1040045', '4900', 'Top'), /*Red Rider*/ +('1040056', '3600', 'Top'), /*Original Disco Shirt*/ +('1040055', '4900', 'Top'), /*Orange Disco Shirt*/ +/*Page 2*/ +('1040054', '6300', 'Top'), /*Green Disco Shirt*/ +('1040053', '5600', 'Top'), /*Orange Striped Trainer*/ +('1040052', '4000', 'Top'), /*Green Striped Trainer*/ +('1040051', '8800', 'Top'), /*Blue Striped Trainer*/ +('1040078', '3200', 'Top'), /*Pre-School Uniform Top*/ +('1040077', '5600', 'Top'), /*Cowboy Top*/ +('1040066', '4900', 'Top'), /*Red Wild Top*/ +('1040065', '4000', 'Top'), /*Brown Wild Top*/ +('1040064', '5200', 'Top'), /*Wild Top*/ +/*Page 3*/ +('1040101', '3200', 'Top'), /*Skull T-Shirt*/ +('1040127', '4700', 'Top'), /*Blue Heart Tanktop*/ +('1040126', '4000', 'Top'), /*Yellow Frill Sleeveless*/ +('1040125', '3800', 'Top'), /*Military Cargo Jacket*/ +('1040124', '6000', 'Top'), /*Crusader T-Shirt*/ +('1040123', '5000', 'Top'), /*Prep School Uniform*/ +('1040119', '4900', 'Top'), /*Ragged Top*/ +('1040114', '5600', 'Top'), /*Hawaiian Shirt*/ +('1040143', '6000', 'Top'), /*Pink Top*/ +/*Page 4*/ +('1040141', '4000', 'Top'), /*Blue Sailor Shirt*/ +('1040140', '4000', 'Top'), /*Pink Mimi Blouse*/ +('1040139', '6400', 'Top'), /*Island Beads (M)*/ +('1040138', '8800', 'Top'), /*Mercury Leather Jacket (M)*/ +('1040137', '3200', 'Top'), /*Tania Tailored Jacket*/ +('1040135', '7100', 'Top'), /*Muscle Man T*/ +('1040134', '5200', 'Top'), /*Orange Puffy Jacket*/ +('1040133', '4900', 'Top'), /*Long Blue Shirt*/ +('1040132', '4700', 'Top'), /*Palm Tree Tanktop*/ +/*Page 5*/ +('1040131', '8800', 'Top'), /*Pink Tie Casual Suit*/ +('1040130', '4700', 'Top'), /*Green Tie Casual Suit*/ +('1040129', '6300', 'Top'), /*Red Casual Suit*/ +('1040128', '3400', 'Top'), /*Blue Line Tanktop*/ +('1040154', '8800', 'Top'), /*Pre-School Top*/ +('1040148', '3200', 'Top'), /*Retro School Uniform Jacket*/ +('1040144', '3800', 'Top'), /*Bulletproof Vest*/ +('1040191', '4000', 'Top'), /*[MS Custom] Orange Disco Shirt*/ +('1040190', '6400', 'Top'), /*[MS Custom] Orange Striped Trainer*/ +/*Page 6*/ +('1040186', '6400', 'Top'), /*Cowboy Shirt*/ +('1040197', '3600', 'Top'), /*Lalala Sleeveless Shirt*/ +('1040196', '5000', 'Top'), /*Smile Seed Top*/ +('1040195', '3400', 'Top'), /*Sleeveless Purple Mustache Shirt (M)*/ +('1040194', '6400', 'Top'), /*Guys Pineapple Tank top*/ +('1040193', '8800', 'Top'), /*RED T-shirt*/ +('1040192', '3600', 'Top'), /*Green Bunny T-Shirt*/ +('1041005', '3600', 'Top'), /*Pink Mimi Blouse*/ +('1041001', '4700', 'Top'), /*Blue Sailor Shirt*/ +/*Page 7*/ +('1041000', '4700', 'Top'), /*Blue Frill Blouse*/ +('1041009', '8800', 'Top'), /*Red Sailor Shirt*/ +('1041071', '5600', 'Top'), /*Yellow Mimi Blouse*/ +('1041070', '3400', 'Top'), /*Sky Blue Mimi Blouse*/ +('1041073', '5200', 'Top'), /*Pre-School Uniform Top*/ +('1041072', '6000', 'Top'), /*Cowboy Top*/ +('1041090', '3600', 'Top'), /*Pink Top*/ +('1041114', '4900', 'Top'), /*Hawaiian Shirt*/ +('1041113', '5000', 'Top'), /*Pink Frill Pajama Top*/ +/*Page 8*/ +('1041112', '6000', 'Top'), /*Black Trainer Jacket*/ +('1041111', '3600', 'Top'), /*Pink Trainer Jacket*/ +('1041110', '7600', 'Top'), /*Sky Blue Trainer Jacket*/ +('1041109', '4700', 'Top'), /*Red Trainer Jacket*/ +('1041108', '6000', 'Top'), /*SF Ninja Top*/ +('1041104', '4900', 'Top'), /*Old School Uniform Top*/ +('1041135', '5000', 'Top'), /*Tube-Top Jacket*/ +('1041134', '8800', 'Top'), /*Angora Mustang*/ +('1041133', '5000', 'Top'), /*Grey Cardigan*/ +/*Page 9*/ +('1041132', '4000', 'Top'), /*Pink Frill Camisole*/ +('1041131', '6400', 'Top'), /*Pink Ribboned Janie*/ +('1041130', '3800', 'Top'), /*Blue Frill Camisole*/ +('1041129', '5600', 'Top'), /*Yellow Frill Camisole*/ +('1041128', '6300', 'Top'), /*Cross Sleeveless*/ +('1041127', '7600', 'Top'), /*Heart Sleeveless*/ +('1041126', '7600', 'Top'), /*Skull T-Shirt*/ +('1041125', '3600', 'Top'), /*Rainbow Knit*/ +('1041147', '8800', 'Top'), /*Muscle Man*/ +/*Page 10*/ +('1041146', '3200', 'Top'), /*Old School Blazer [F]*/ +('1041144', '7100', 'Top'), /*Retro School Uniform Jacket*/ +('1041143', '6000', 'Top'), /*Green Tie Casual Suit*/ +('1041142', '6400', 'Top'), /*Ribbon Frilled top*/ +('1041140', '6400', 'Top'), /*Island Beads (F)*/ +('1041139', '5200', 'Top'), /*Mercury Leather Jacket (F)*/ +('1041138', '6000', 'Top'), /*Tania Bolero*/ +('1041137', '5600', 'Top'), /*Pink-Dotted Top*/ +('1041136', '3400', 'Top'), /*Pink Vest Blouse*/ +/*Page 11*/ +('1041156', '7600', 'Top'), /*Pre-School Top*/ +('1041199', '6000', 'Top'), /*Lalala Pink T-shirt*/ +('1041198', '8800', 'Top'), /*Smile Seed Top*/ +('1041197', '7400', 'Top'), /*Pink Mustache T-Shirt (F)*/ +('1041196', '3600', 'Top'), /*Girls Pineapple Tank top*/ +('1041195', '4700', 'Top'), /*RED T-shirt*/ +('1041194', '6300', 'Top'), /*Pink Bunny T-Shirt*/ +('1041193', '3200', 'Top'), /*Tania Tailored Jacket*/ +('1041189', '5200', 'Top'), /*Cowgirl Shirt*/ +/*Page 12*/ +('1042015', '7400', 'Top'), /*Blue Layered Combo*/ +('1042014', '7600', 'Top'), /*Yellow Layered Combo*/ +('1042013', '8800', 'Top'), /*Green Snowboard Top*/ +('1042012', '6000', 'Top'), /*Yellow Snowboard Top*/ +('1042011', '7100', 'Top'), /*Wildcats Baseball Shirt (Alternate)*/ +('1042010', '5600', 'Top'), /*Baseball Shirt (Away)*/ +('1042009', '3400', 'Top'), /*Baseball Shirt (Home)*/ +('1042008', '5000', 'Top'), /*Wildcats Baseball Shirt (Basic)*/ +('1042007', '7400', 'Top'), /*Blue Camping Shirt*/ +/*Page 13*/ +('1042006', '3400', 'Top'), /*Green Camping Shirt*/ +('1042005', '6400', 'Top'), /*Pink Camping Shirt*/ +('1042004', '4900', 'Top'), /*Pink Hooded Vest*/ +('1042002', '5000', 'Top'), /*Red Hooded Vest*/ +('1042001', '8800', 'Top'), /*Black Hooded Vest*/ +('1042000', '7100', 'Top'), /*Orange Hooded Vest*/ +('1042031', '3800', 'Top'), /*Orange Mushroom T-Shirt*/ +('1042030', '3600', 'Top'), /*Slime T-Shirt*/ +('1042029', '6000', 'Top'), /*Octopus T-Shirt*/ +/*Page 14*/ +('1042028', '6400', 'Top'), /*Orange B-Ball Jersey*/ +('1042027', '8800', 'Top'), /*Blue B-Ball Jersey*/ +('1042026', '7400', 'Top'), /*Flowery Dress Shirt*/ +('1042025', '6300', 'Top'), /*Prisoner Top*/ +('1042024', '3200', 'Top'), /*Red Polka-Dot Pajama Top*/ +('1042023', '3600', 'Top'), /*Blue Polka-Dot Pajama Top*/ +('1042022', '5600', 'Top'), /*Camouflaged Uniform*/ +('1042021', '4900', 'Top'), /*Starry Layered Combo*/ +('1042020', '6000', 'Top'), /*Old Military Uniform*/ +/*Page 15*/ +('1042019', '3600', 'Top'), /*M Layered T-Shirt*/ +('1042018', '6400', 'Top'), /*Red T-Shirt w/ Heart*/ +('1042017', '6400', 'Top'), /*Sky Blue Snowboard Top*/ +('1042016', '6000', 'Top'), /*Pink Snowboard Top*/ +('1042047', '5600', 'Top'), /*Star-Patterned Yellow Shirt*/ +('1042046', '4900', 'Top'), /*White Casual Suit*/ +('1042045', '3800', 'Top'), /*Bowling Shirt*/ +('1042044', '5600', 'Top'), /*Pink Striped Rugby Tee*/ +('1042043', '6000', 'Top'), /*Green Striped Rugby Tee*/ +/*Page 16*/ +('1042042', '3400', 'Top'), /*White Hooded Vest*/ +('1042041', '4700', 'Top'), /*Black Allstar*/ +('1042040', '5000', 'Top'), /*Pink Allstar*/ +('1042039', '3200', 'Top'), /*Sky Blue Allstar*/ +('1042038', '3400', 'Top'), /*Red Sweater*/ +('1042037', '7600', 'Top'), /*Snowman Padded Jacket*/ +('1042036', '8800', 'Top'), /*Christmas Padded Jacket*/ +('1042035', '3600', 'Top'), /*Red Double-Coat*/ +('1042034', '7600', 'Top'), /*Green Double-Coat*/ +/*Page 17*/ +('1042033', '5600', 'Top'), /*Beige Double-Coat*/ +('1042032', '5000', 'Top'), /*Beetle Longsleeve*/ +('1042063', '6400', 'Top'), /*Red Turtleneck Sweater*/ +('1042062', '6000', 'Top'), /*Stitched Leather Jacket*/ +('1042061', '7600', 'Top'), /*Ball Zone Jumper*/ +('1042060', '6300', 'Top'), /*Pola Sweater*/ +('1042059', '3800', 'Top'), /*Preppy Red and White*/ +('1042058', '6400', 'Top'), /*Red Half*/ +('1042056', '3400', 'Top'), /*Beat Shirt*/ +/*Page 18*/ +('1042055', '5200', 'Top'), /*Pink Down Parka*/ +('1042054', '3600', 'Top'), /*Pink Wool Jacket*/ +('1042053', '5000', 'Top'), /*Blue Wool Jacket*/ +('1042052', '3600', 'Top'), /*Blue Down Parka*/ +('1042051', '4700', 'Top'), /*Bomber Jacket*/ +('1042050', '6000', 'Top'), /*Baseball Jumper*/ +('1042049', '3600', 'Top'), /*Short Denim Jacket*/ +('1042048', '3800', 'Top'), /*Purple Star Shirt*/ +('1042078', '5200', 'Top'), /*White & Blue Sailor Top*/ +/*Page 19*/ +('1042077', '5600', 'Top'), /*Rainbow T*/ +('1042076', '4000', 'Top'), /*Dotted Disco Shirt*/ +('1042075', '5000', 'Top'), /*Pink Pluto T*/ +('1042074', '8800', 'Top'), /*White Longsleeve With Star*/ +('1042073', '7100', 'Top'), /*Navy Blue Dress Shirt*/ +('1042072', '6000', 'Top'), /*Red Layered Hooded Shirt*/ +('1042071', '8800', 'Top'), /*Pastel Layered Hooded Shirt*/ +('1042070', '4700', 'Top'), /*Sky Blue Big-Belt Shirt*/ +('1042069', '8800', 'Top'), /*Pink Big-Belt Shirt*/ +/*Page 20*/ +('1042068', '6400', 'Top'), /*Drill Muffler*/ +('1042067', '3800', 'Top'), /*Orange Hooded Zip-Up*/ +('1042066', '6400', 'Top'), /*Orange Hooded Shirt*/ +('1042065', '5200', 'Top'), /*Football Top (Away)*/ +('1042064', '4000', 'Top'), /*Football Jersey (Home)*/ +('1042095', '3800', 'Top'), /*Vintage Hooded Shirt*/ +('1042094', '7400', 'Top'), /*Orange Snowflake Sweater*/ +('1042093', '6300', 'Top'), /*Pointed Double Coat*/ +('1042092', '3400', 'Top'), /*Pelvis Hoodie*/ +/*Page 21*/ +('1042091', '6400', 'Top'), /*Pink Skull Hooded Vest*/ +('1042090', '4700', 'Top'), /*Red Skull Hooded Vest*/ +('1042089', '6400', 'Top'), /*Blue Skull Hooded Vest*/ +('1042088', '4700', 'Top'), /*Black Skull Hooded Vest*/ +('1042087', '4700', 'Top'), /*Skull Shirt*/ +('1042086', '6300', 'Top'), /*Tourist T*/ +('1042085', '8800', 'Top'), /*Canary Heart T*/ +('1042084', '3800', 'Top'), /*Army General Hoodie*/ +('1042083', '4900', 'Top'), /*Rainbow Hooded Pancho*/ +/*Page 22*/ +('1042082', '5000', 'Top'), /*Black Cardigan Set*/ +('1042081', '6300', 'Top'), /*Cherry Layered T*/ +('1042080', '3200', 'Top'), /*Red Hot Racer T*/ +('1042110', '7400', 'Top'), /*Red Hooded Coat*/ +('1042109', '4700', 'Top'), /*Yellow & Red-Striped Jacket*/ +('1042108', '3800', 'Top'), /*Purple Tank*/ +('1042107', '7600', 'Top'), /*Pink Flower T-shirt*/ +('1042106', '3400', 'Top'), /*Rainbow-Striped Hoodie*/ +('1042105', '4700', 'Top'), /*Crown Hooded T*/ +/*Page 23*/ +('1042104', '3600', 'Top'), /*Lime Green Sleeveless*/ +('1042103', '3600', 'Top'), /*White Outlaw Shirt*/ +('1042102', '5600', 'Top'), /*Aqua Road T*/ +('1042101', '3400', 'Top'), /*Blanc Rose Top*/ +('1042100', '4000', 'Top'), /*Checkered Casual Suit*/ +('1042099', '4000', 'Top'), /*Striped Hooded Shirt*/ +('1042098', '8800', 'Top'), /*Camo Hooded Jacket*/ +('1042097', '4700', 'Top'), /*Print Layered Hoody*/ +('1042096', '7600', 'Top'), /*M Shirt*/ +/*Page 24*/ +('1042127', '3400', 'Top'), /*Green Suspenders*/ +('1042126', '5200', 'Top'), /*Red and Black Blazer*/ +('1042125', '6400', 'Top'), /*Yellow Longsleeve with Bunny Bag*/ +('1042122', '4700', 'Top'), /*Bowtie Jacket*/ +('1042121', '5000', 'Top'), /*Opera Pink Double Coat*/ +('1042120', '6000', 'Top'), /*Celeste Blue Double Coat*/ +('1042119', '7600', 'Top'), /*Vintage Muffler Jacket*/ +('1042118', '6000', 'Top'), /*Red Checkered Shirt*/ +('1042117', '5000', 'Top'), /*Green Baseball Jacket*/ +/*Page 25*/ +('1042116', '6400', 'Top'), /*Orange Pea Coat*/ +('1042143', '7400', 'Top'), /*Disco Tank Top*/ +('1042142', '6300', 'Top'), /*Rainbow Top*/ +('1042141', '3600', 'Top'), /*Pink Star Glow*/ +('1042140', '4900', 'Top'), /*Slick Agent Top*/ +('1042138', '4700', 'Top'), /*The White Tee*/ +('1042137', '7600', 'Top'), /*Dark Tech Top*/ +('1042136', '7400', 'Top'), /*Red Legolesse for Transformation*/ +('1042135', '3600', 'Top'), /*Dark Master Sergeant for Transformation*/ +/*Page 26*/ +('1042134', '3200', 'Top'), /*Yellow Shirt with Pads*/ +('1042133', '4000', 'Top'), /*Striped Hoodie Shirt*/ +('1042132', '4900', 'Top'), /*Aqua Green Star*/ +('1042131', '3200', 'Top'), /*Preppy Black Vest*/ +('1042130', '7400', 'Top'), /*Gold Chainz*/ +('1042129', '7400', 'Top'), /*"Black Tie Affair" Dress Shirt*/ +('1042128', '4000', 'Top'), /*Apple-Green Sweater*/ +('1042159', '5200', 'Top'), /*Animal One Piece*/ +('1042158', '5000', 'Top'), /*Baseball Classic*/ +/*Page 27*/ +('1042157', '5000', 'Top'), /*Lovely Pink Heart T-Shirt*/ +('1042156', '4700', 'Top'), /*Galaxy T-Shirt*/ +('1042155', '3200', 'Top'), /*Sky Rider Jacket*/ +('1042154', '5000', 'Top'), /*Bohemian Hooded Jacket*/ +('1042153', '7600', 'Top'), /*Red Plaid Duffle Coat*/ +('1042152', '3800', 'Top'), /*Rainbow Knitted Top*/ +('1042151', '6300', 'Top'), /*Brown Argyle Sweater*/ +('1042150', '7400', 'Top'), /*Black "Hit Me" Shirt*/ +('1042149', '7400', 'Top'), /*80's Knit Pullover*/ +/*Page 28*/ +('1042147', '4700', 'Top'), /*Preppy Knit Vest*/ +('1042146', '5200', 'Top'), /*Superstar Hoodie*/ +('1042145', '4700', 'Top'), /*Layered Duckie T*/ +('1042144', '6400', 'Top'), /*Checkered Resort Shirt*/ +('1042174', '3800', 'Top'), /*Camping Shirt*/ +('1042173', '7600', 'Top'), /*Green Polo*/ +('1042172', '8800', 'Top'), /*Preppy Blue Shirt*/ +('1042171', '3400', 'Top'), /*Idol Star Vest*/ +('1042170', '7100', 'Top'), /*Cool Summer Shirt*/ +/*Page 29*/ +('1042169', '5600', 'Top'), /*Rainbow Tie-Dye Shirt*/ +('1042168', '5200', 'Top'), /*Lightning T-Shirt*/ +('1042166', '6400', 'Top'), /*Leather Biker Jacket*/ + + + +/*Page 1*/ +('1042165', '8800', 'Top 2'), /*Pink Bowtie & White Vest*/ +('1042164', '6300', 'Top 2'), /*Green Tie & Shirt*/ +('1042163', '4000', 'Top 2'), /*Pink Heart T-Shirt & Muffler*/ +('1042162', '5600', 'Top 2'), /*Blue-Striped Undershirt*/ +('1042161', '3200', 'Top 2'), /*Yellow Spring Jacket*/ +('1042160', '5000', 'Top 2'), /*Navy Hoodie*/ +('1042190', '8800', 'Top 2'), /*Dual-Color Heart Tee*/ +('1042189', '4000', 'Top 2'), /*Lamb Wool Top*/ +('1042188', '3800', 'Top 2'), /*Puffy Raglan Tee*/ +/*Page 2*/ +('1042187', '3600', 'Top 2'), /*Pink Sweater*/ +('1042186', '3200', 'Top 2'), /*Fur Vest*/ +('1042185', '6400', 'Top 2'), /*JM's Street Gear*/ +('1042184', '5600', 'Top 2'), /*Tiger-Print Scarf & Top*/ +('1042183', '3400', 'Top 2'), /*Pink Argyle Plaid*/ +('1042182', '4000', 'Top 2'), /*Denim Hoodie*/ +('1042181', '5200', 'Top 2'), /*Napoleon Jacket*/ +('1042178', '3400', 'Top 2'), /*Puppy Tee*/ +('1042177', '5200', 'Top 2'), /*Vintage Hoodie Jacket*/ +/*Page 3*/ +('1042176', '7600', 'Top 2'), /*I Love CN Top*/ +('1042207', '7400', 'Top 2'), /*Star Trainer Jacket*/ +('1042206', '6400', 'Top 2'), /*Black Rider Jacket*/ +('1042204', '3400', 'Top 2'), /*Hamburger Tee*/ +('1042203', '7400', 'Top 2'), /*Orange Scarf Tee*/ +('1042202', '4000', 'Top 2'), /*Penguin Tee*/ +('1042200', '5200', 'Top 2'), /*Blue Smiley Tee*/ +('1042199', '3200', 'Top 2'), /*Pink Smiley Tee*/ +('1042198', '4000', 'Top 2'), /*Rainbow Tee*/ +/*Page 4*/ +('1042194', '7400', 'Top 2'), /*White Collared Shirt*/ +('1042193', '3600', 'Top 2'), /*Padded Vest*/ +('1042192', '8800', 'Top 2'), /*Green Tie Casual Suit*/ +('1042222', '3400', 'Top 2'), /*Lemon Freshness*/ +('1042221', '3200', 'Top 2'), /*Joyous 8th T-Shirt*/ +('1042220', '7100', 'Top 2'), /*Shiny Training Top*/ +('1042219', '4900', 'Top 2'), /*Blue Stars T-Shirt*/ +('1042218', '3200', 'Top 2'), /*Raspberry Candy T-Shirt*/ +('1042217', '5000', 'Top 2'), /*Black Viva Baseball*/ +/*Page 5*/ +('1042216', '8800', 'Top 2'), /*Red Viva Baseball*/ +('1042215', '6000', 'Top 2'), /*Jester Sweater*/ +('1042214', '4700', 'Top 2'), /*Spring Sweater Set*/ +('1042213', '5600', 'Top 2'), /*Pink Spring Jacket*/ +('1042212', '6300', 'Top 2'), /*Blue Spring Jacket*/ +('1042210', '7100', 'Top 2'), /*Mustang Vest Pink Tee*/ +('1042209', '6300', 'Top 2'), /*Mustang Vest Green Tee*/ +('1042208', '8800', 'Top 2'), /*Elephant Hoody*/ +('1042239', '6000', 'Top 2'), /*Cutie Raincoat*/ +/*Page 6*/ +('1042238', '5600', 'Top 2'), /*Pink Bunny Sweater*/ +('1042237', '6400', 'Top 2'), /*Gold Tailor Vest*/ +('1042236', '4000', 'Top 2'), /*Green Apple Sweater*/ +('1042235', '4000', 'Top 2'), /*Rabbit Top*/ +('1042232', '4000', 'Top 2'), /*Bat Costume Sweater*/ +('1042230', '6300', 'Top 2'), /*Cutie Raincoat*/ +('1042229', '6300', 'Top 2'), /*I Love MY Top*/ +('1042228', '5600', 'Top 2'), /*I Love SG Top*/ +('1042252', '8800', 'Top 2'), /*Cute Sleeveless Shirt*/ +/*Page 7*/ +('1042251', '5600', 'Top 2'), /*Slither Style Hoodie*/ +('1042250', '7600', 'Top 2'), /*Hyper Spring Sweater Set*/ +('1042249', '4700', 'Top 2'), /*[MS Custom] Red Double-Coat*/ +('1042248', '5200', 'Top 2'), /*[MS Custom] Beetle Longsleeve*/ +('1042247', '3600', 'Top 2'), /*[MS Custom] Baseball Shirt (Away)*/ +('1042246', '6300', 'Top 2'), /*Hyper Green Suspenders*/ +('1042245', '6400', 'Top 2'), /*Hyper Spring Jealousy*/ +('1042242', '3400', 'Top 2'), /*Summer Picnic*/ +('1042241', '4900', 'Top 2'), /*Flying Violet*/ +/*Page 8*/ +('1042240', '3800', 'Top 2'), /*Colorful T-Shirt*/ +('1042271', '8800', 'Top 2'), /*Meow T-shirt*/ +('1042270', '6300', 'Top 2'), /*Pink Bunny Sweater*/ +('1042269', '5600', 'Top 2'), /*Ribbon Days*/ +('1042268', '5200', 'Top 2'), /*Cutie Raincoat*/ +('1042267', '3600', 'Top 2'), /*Exciting Hoodie*/ +('1042266', '3800', 'Top 2'), /*Muscle Man*/ +('1042265', '5600', 'Top 2'), /*Strawberry Shirt*/ +('1042264', '8800', 'Top 2'), /*Colored Golf Shirt*/ +/*Page 9*/ +('1042263', '8800', 'Top 2'), /*Funky Jumper*/ +('1042262', '6400', 'Top 2'), /*Colorful T-Shirt*/ +('1042261', '3800', 'Top 2'), /*Black Viva Baseball*/ +('1042260', '3200', 'Top 2'), /*Loose Fit Sweater*/ +('1042259', '7600', 'Top 2'), /*Lemon Freshness*/ +('1042287', '3600', 'Top 2'), /*Red Check Rider*/ +('1042286', '3600', 'Top 2'), /*Athletic Hood*/ +('1042285', '3200', 'Top 2'), /*Pastel Dot Tee*/ +('1042282', '7100', 'Top 2'), /*Eum T-Shirt*/ +/*Page 10*/ +('1042281', '3600', 'Top 2'), /*Jeong T-Shirt*/ +('1042280', '6400', 'Top 2'), /*Min T-Shirt*/ +('1042279', '3600', 'Top 2'), /*Hun T-Shirt*/ +('1042278', '7400', 'Top 2'), /*Denim Hoodie*/ +('1042277', '3800', 'Top 2'), /*Star T-Shirt*/ +('1042275', '5200', 'Top 2'), /*Frog Raindrop*/ +('1042272', '8800', 'Top 2'), /*Slick Agent Top*/ +('1042294', '5600', 'Top 2'), /*Thumping Heart Vest*/ +('1042293', '4700', 'Top 2'), /*Guardian Clothing*/ +/*Page 11*/ +('1042292', '8800', 'Top 2'), /*Banana Cardigan*/ +('1042291', '7100', 'Top 2'), /*Vibrant Yellow Knit*/ +('1042290', '6300', 'Top 2'), /*White Cherry Knit*/ +('1042319', '5600', 'Top 2'), /*Hoi Poi T-shirt*/ + +('1042315', '4900', 'Top 2'), /*Bubbly Elephant Shirt*/ +('1042314', '7100', 'Top 2'), /*Rabbit and Bear Shirt*/ +('1042313', '5600', 'Top 2'), /*Full of Hearts T-Shirt*/ +('1042312', '6300', 'Top 2'), /*Blue Mushroom T-Shirt*/ +/*Page 12*/ +('1042311', '7400', 'Top 2'), /*Rainbow T-shirt*/ +('1042335', '6400', 'Top 2'), /*Pink Marine T-shirt*/ +('1042334', '8800', 'Top 2'), /*Green Kitty Shirt*/ +('1042333', '4000', 'Top 2'), /*Pink Kitty Sweatshirt*/ +('1042332', '3800', 'Top 2'), /*Red Ribbon Kitty Top*/ +('1042330', '7400', 'Top 2'), /*Charming Baby*/ +('1042329', '7100', 'Top 2'), /*Sweet Summer Shirt*/ +('1042320', '8800', 'Top 2'), /*Island Travel T-Shirt*/ +('1042351', '6300', 'Top 2'), /*Hoya T-shirt*/ +/*Page 13*/ + +('1042349', '4000', 'Top 2'), /*All About Black*/ +('1042348', '8800', 'Top 2'), /*Boldly Colored Polo*/ +('1042347', '7100', 'Top 2'), /*Naughty Boy T-Shirt*/ +('1042346', '3600', 'Top 2'), /*Baby Ram Pullover (Pink)*/ +('1042345', '5600', 'Top 2'), /*Baby Ram Pullover (Blue)*/ +('1042344', '4700', 'Top 2'), /*Gold Fur-Lined Jacket*/ +('1042343', '4000', 'Top 2'), /*New School Hoodie*/ +('1042342', '7400', 'Top 2'), /*Rawrin' Tiger Top*/ +/*Page 14*/ +('1042341', '6400', 'Top 2'), /*Hatchling T-shirt*/ +('1042339', '6000', 'Top 2'), /*White Kitty Pink Top*/ +('1042338', '3400', 'Top 2'), /*Brown Teddy Top*/ +('1042337', '7100', 'Top 2'), /*Teddy Picnic Shirt*/ +('1042336', '3600', 'Top 2'), /*Corny Top*/ +('1042367', '7600', 'Top 2'), /*Devil Bear T-Shirt*/ +('1042364', '6300', 'Top 2'), /*Marigold V Tee*/ +('1042363', '3600', 'Top 2'), /*Fuchsia V Tee */ +('1042362', '7400', 'Top 2'), /*Emerald V Tee*/ +/*Page 15*/ +('1042361', '7100', 'Top 2'), /*Red Cloud Top*/ +('1042360', '4900', 'Top 2'), /*Cherry Rabbit Hood*/ +('1042359', '7100', 'Top 2'), /*Hyper Spring Sweater Set*/ +('1042358', '7600', 'Top 2'), /*Soft Olive Knitwear*/ +('1042357', '5600', 'Top 2'), /*Cloud Prison*/ +('1042356', '5000', 'Top 2'), /*Chenghuiwan Effect T-Shirt*/ +('1042355', '5200', 'Top 2'), /*Ranbingluan Effect T-Shirt*/ +('1042354', '5600', 'Top 2'), /*Duang Effect T-Shirt*/ +('1042383', '6000', 'Top 2'), /*Tennis Top (M)*/ +/*Page 16*/ +('1042382', '5600', 'Top 2'), /*Chunky Cable-Knit Top*/ +('1042381', '3600', 'Top 2'), /*Khaki Field Coat*/ +('1042380', '5600', 'Top 2'), /*Strawberry Training Shirt*/ +('1042379', '3200', 'Top 2'), /*Shoulder Freedom*/ +('1042378', '7100', 'Top 2'), /*Tattoo Look*/ +('1042376', '6300', 'Top 2'), /*Snazzy Bunny Outfit*/ +('1042375', '6300', 'Top 2'), /*Strawberry Training Shirt*/ +('1042386', '7600', 'Top 2'), /*Rounded Tanktop*/ +('1042385', '6400', 'Top 2'), /*Trendy Denim Jacket*/ +/*Page 17*/ +('1042384', '6000', 'Top 2'), /*Tennis Top (F)*/ +('1048002', '3600', 'Top 2'), /*Carrot T-shirt*/ +('1048001', '3400', 'Top 2'), /*Bunny Love T-Shirt*/ +('1048000', '7400', 'Top 2'), /*Couple Shirt*/ + + + + + +/* Bottom */ +/*Page 1*/ +('1060001', '5000', 'Bottom'), /*Black Suit Pants*/ +('1060003', '7100', 'Bottom'), /*Military Shorts*/ +('1060048', '5000', 'Bottom'), /*Green Disco Pants*/ +('1060049', '8800', 'Bottom'), /*Blue Disco Pants*/ +('1060053', '4700', 'Bottom'), /*Wild Pants*/ +('1060054', '3400', 'Bottom'), /*Brown Wild Pants*/ +('1060055', '5600', 'Bottom'), /*Red Wild Pants*/ +('1060034', '3200', 'Bottom'), /*Blue Rider Pants*/ +('1060035', '5200', 'Bottom'), /*Shine Rider Pants*/ +/*Page 2*/ +('1060036', '4000', 'Bottom'), /*Dark Rider Pants*/ +('1060040', '7600', 'Bottom'), /*Blue Trainer Pants*/ +('1060041', '3600', 'Bottom'), /*Green Trainer Pants*/ +('1060042', '5200', 'Bottom'), /*Orange Trainer Pants*/ +('1060047', '4000', 'Bottom'), /*Original Disco Pants*/ +('1060066', '7600', 'Bottom'), /*Cowboy Pants*/ +('1060067', '6400', 'Bottom'), /*Pre-School Pants*/ +('1060112', '3800', 'Bottom'), /*Prep School Uniform Pants*/ +('1060113', '5600', 'Bottom'), /*Blue Leggings*/ +/*Page 3*/ +('1060114', '7100', 'Bottom'), /*Washed Jeans*/ +('1060116', '3400', 'Bottom'), /*Military Cargo Shorts*/ +('1060117', '7100', 'Bottom'), /*Tropical Shorts*/ +('1060118', '3200', 'Bottom'), /*Orange Puffy Pants*/ +('1060119', '7400', 'Bottom'), /*Denim Wrinkled Skirt*/ +('1060120', '5200', 'Bottom'), /*Tania Tartan Pants*/ +('1060121', '5200', 'Bottom'), /*Mercury Washed Jeans*/ +('1060122', '6300', 'Bottom'), /*Pink Miniskirt*/ +('1060123', '5600', 'Bottom'), /*Blue Sailor Skirt*/ +/*Page 4*/ +('1060125', '5200', 'Bottom'), /*Blue Skirt (m)*/ +('1060126', '6400', 'Bottom'), /*Black Wakeboard Pants*/ +('1060096', '7600', 'Bottom'), /*Old School Uniform Pants*/ +('1060103', '3200', 'Bottom'), /*Hawaiian Skirt*/ +('1060108', '3800', 'Bottom'), /*Torn-Up Jeans*/ +('1060145', '7600', 'Bottom'), /*Pre-School Pants*/ +('1060139', '8800', 'Bottom'), /*Retro School Uniform Pants*/ +('1060178', '5600', 'Bottom'), /*[MS Custom] Orange Trainer Pants*/ +('1060179', '7400', 'Bottom'), /*Golf Shorts*/ +/*Page 5*/ +('1060180', '6300', 'Bottom'), /*Puffy Puff Pants*/ +('1060181', '3400', 'Bottom'), /*Star Shorts*/ +('1060182', '7100', 'Bottom'), /*Golf Shorts*/ +('1060187', '3200', 'Bottom'), /*Green Rolled-Up Shorts*/ +('1060188', '3200', 'Bottom'), /*White Hot Pants*/ +('1060189', '6000', 'Bottom'), /*Smile Seed Pants*/ +('1060190', '6000', 'Bottom'), /*Lalala Dot Pants*/ +('1060174', '4000', 'Bottom'), /*Cowboy Pants*/ +('1061000', '8800', 'Bottom'), /*Blue Bell Dress*/ +/*Page 6*/ +('1061001', '7100', 'Bottom'), /*Blue Sailor Skirt*/ +('1061004', '3200', 'Bottom'), /*Pink Miniskirt*/ +('1061005', '6000', 'Bottom'), /*Roll-Up Jean*/ +('1061007', '8800', 'Bottom'), /*Red Sailor Skirt*/ +('1061072', '4000', 'Bottom'), /*Red Trainer Pants*/ +('1061073', '5200', 'Bottom'), /*Sky Blue Trainer Pants*/ +('1061074', '6400', 'Bottom'), /*Pink Trainer Pants*/ +('1061075', '5200', 'Bottom'), /*Black Trainer Pants*/ +('1061065', '3400', 'Bottom'), /*Sky Blue Miniskirt*/ +/*Page 7*/ +('1061066', '3600', 'Bottom'), /*Yellow Mimi Skirt*/ +('1061067', '3400', 'Bottom'), /*Cowboy Shorts*/ +('1061068', '3200', 'Bottom'), /*Pre-School Uniform Skirt*/ +('1061107', '6400', 'Bottom'), /*SF Ninja Pants*/ +('1061108', '6400', 'Bottom'), /*Red Training Shorts*/ +('1061109', '7100', 'Bottom'), /*Sky Blue Training Shorts*/ +('1061110', '7100', 'Bottom'), /*Pink Training Shorts*/ +('1061111', '6000', 'Bottom'), /*Black Training Shorts*/ +('1061112', '7100', 'Bottom'), /*Pink Frill Pajama Bottom*/ +/*Page 8*/ +('1061113', '8800', 'Bottom'), /*Hawaiian Skirt*/ +('1061089', '3200', 'Bottom'), /*Blue Skirt*/ +('1061103', '7400', 'Bottom'), /*Old School Uniform (Skirt)*/ +('1061136', '3600', 'Bottom'), /*Long Khaki Skirt*/ +('1061137', '4700', 'Bottom'), /*Dark Denim Skirt*/ +('1061138', '6300', 'Bottom'), /*Pink Heart Hot Pants*/ +('1061139', '8800', 'Bottom'), /*Military Cargo Shorts*/ +('1061140', '7600', 'Bottom'), /*Denim Skirt & Striped Sox*/ +('1061141', '4900', 'Bottom'), /*Tania Tartan Skirt*/ +/*Page 9*/ +('1061142', '3800', 'Bottom'), /*Mercury Jean Skirt*/ +('1061143', '3600', 'Bottom'), /*Amorian Pink Skirt*/ +('1061144', '6400', 'Bottom'), /*Blue Jeans*/ +('1061145', '7100', 'Bottom'), /*Retro School Uniform Pants*/ +('1061147', '4900', 'Bottom'), /*Old School Uniform Pants (F)*/ +('1061148', '3600', 'Bottom'), /*Pink Frill Swim Skirt*/ +('1061124', '5200', 'Bottom'), /*Red Leggings*/ +('1061126', '8800', 'Bottom'), /*Plitz Skirt*/ +('1061127', '3600', 'Bottom'), /*Blue Diamond Bootcuts*/ +/*Page 10*/ +('1061128', '7100', 'Bottom'), /*Pink Diamond Bootcuts*/ +('1061129', '4700', 'Bottom'), /*Butterfly Skirt*/ +('1061130', '6000', 'Bottom'), /*Green Long Skirt*/ +('1061131', '7600', 'Bottom'), /*Blue Slit Skirt*/ +('1061132', '5000', 'Bottom'), /*Skirt with Tights*/ +('1061133', '6000', 'Bottom'), /*Orange Long Skirt*/ +('1061134', '4000', 'Bottom'), /*Denim Miniskirt*/ +('1061135', '5600', 'Bottom'), /*Pink Layered Skirt*/ +('1061170', '4700', 'Bottom'), /*Bright Frilly Shorts*/ +/*Page 11*/ +('1061166', '7100', 'Bottom'), /*Pre-School Skirt*/ +('1061203', '6000', 'Bottom'), /*Puffy Puff Dress*/ +('1061204', '6300', 'Bottom'), /*Golf Skirt*/ +('1061206', '5600', 'Bottom'), /*Golf Skirt*/ +('1061207', '6300', 'Bottom'), /*Star Skirt*/ +('1061210', '7400', 'Bottom'), /*Check Skirt*/ +('1061211', '5600', 'Bottom'), /*Green Skirt*/ +('1061212', '5000', 'Bottom'), /*White Hot Pants*/ +('1061213', '6400', 'Bottom'), /*Smile Seed Skirt*/ +/*Page 12*/ +('1061214', '5200', 'Bottom'), /*Lalala Dot Skirt*/ +('1061198', '5200', 'Bottom'), /*Cowgirl Pants*/ +('1062003', '3600', 'Bottom'), /*Red Hip-Hop Pants*/ +('1062005', '7600', 'Bottom'), /*Lined Hip-Hop Pants*/ +('1062008', '5000', 'Bottom'), /*Pink Camping Shorts*/ +('1062009', '4700', 'Bottom'), /*Green Camping Shorts*/ +('1062010', '6400', 'Bottom'), /*Blue Camping Shorts*/ +('1062011', '7400', 'Bottom'), /*Wildcats Baseball Pants (Basic)*/ +('1062012', '5000', 'Bottom'), /*Baseball Pants (Home)*/ +/*Page 13*/ +('1062013', '4000', 'Bottom'), /*Baseball Pants (Away)*/ +('1062014', '7600', 'Bottom'), /*Wildcats Baseball Pants (Alternate)*/ +('1062015', '4700', 'Bottom'), /*Ripped Jeans*/ +('1062032', '6300', 'Bottom'), /*Cargo Pants*/ +('1062033', '5200', 'Bottom'), /*Red Checkered Pants*/ +('1062034', '6000', 'Bottom'), /*White Checkered Pants*/ +('1062035', '3200', 'Bottom'), /*Bone Buckled Slacks*/ +('1062038', '6000', 'Bottom'), /*Hip Hop Jeans*/ +('1062039', '3600', 'Bottom'), /*White Jeans*/ +/*Page 14*/ +('1062040', '3600', 'Bottom'), /*Washed Denim Cargos*/ +('1062041', '6400', 'Bottom'), /*Denim Cargos*/ +('1062042', '3600', 'Bottom'), /*Jeans with Chain*/ +('1062043', '7600', 'Bottom'), /*Black Leather Pants*/ +('1062044', '4900', 'Bottom'), /*Red Starrium*/ +('1062045', '3200', 'Bottom'), /*Patched Denim Jeans*/ +('1062046', '3200', 'Bottom'), /*Vintage Pocket Pants*/ +('1062047', '5600', 'Bottom'), /*Brisk*/ +('1062016', '6400', 'Bottom'), /*Yellow Snowboard Pants*/ +/*Page 15*/ +('1062017', '8800', 'Bottom'), /*Green Snowboard Pants*/ +('1062018', '4900', 'Bottom'), /*Bell-Bottomed Faded Jeans*/ +('1062019', '7400', 'Bottom'), /*Pink Snowboard Pants*/ +('1062020', '5600', 'Bottom'), /*Sky Blue Snowboard Pants*/ +('1062021', '4000', 'Bottom'), /*Jean Shorts*/ +('1062022', '7100', 'Bottom'), /*Old Army Pants*/ +('1062023', '5000', 'Bottom'), /*Baggy Jeans*/ +('1062024', '6400', 'Bottom'), /*Camouflaged Army Pants*/ +('1062025', '4000', 'Bottom'), /*Blue Polka-Dot Pajama Pants*/ +/*Page 16*/ +('1062026', '3600', 'Bottom'), /*Red Polka-Dot Pajama Pants*/ +('1062027', '4700', 'Bottom'), /*Prisoner Pants*/ +('1062028', '4000', 'Bottom'), /*Picnic Jean Shorts*/ +('1062029', '5200', 'Bottom'), /*Blue B-Ball Shorts*/ +('1062030', '3800', 'Bottom'), /*Orange B-Ball Shorts*/ +('1062031', '3400', 'Bottom'), /*Checkered Shorts*/ +('1062064', '5000', 'Bottom'), /*Checks Point Pants*/ +('1062065', '3200', 'Bottom'), /*White-Striped Trainer Shorts*/ +('1062066', '3200', 'Bottom'), /*Vintage Sky Blue Jeans*/ +/*Page 17*/ +('1062067', '6400', 'Bottom'), /*Summer Capris*/ +('1062068', '6400', 'Bottom'), /*Rainbow Shorts*/ +('1062069', '3200', 'Bottom'), /*Brown Chained Pants*/ +('1062070', '3800', 'Bottom'), /*Painted Blue Jeans*/ +('1062071', '6300', 'Bottom'), /*Low-Rise Ripped Jeans*/ +('1062072', '5200', 'Bottom'), /*Relaxed Fit Jeans*/ +('1062073', '3600', 'Bottom'), /*Olive Pumpkin Pants*/ +('1062074', '7100', 'Bottom'), /*Brown Pumpkin Pants*/ +('1062075', '6400', 'Bottom'), /*Vintage Black Pants*/ +/*Page 18*/ +('1062076', '6000', 'Bottom'), /*Light Blue Ripped Jeans*/ +('1062077', '5200', 'Bottom'), /*Brown Bubble Jeans*/ +('1062048', '5000', 'Bottom'), /*Brown Checkered Pants*/ +('1062049', '4000', 'Bottom'), /*Football Pants (Home)*/ +('1062050', '7100', 'Bottom'), /*Football Bottom (Away)*/ +('1062051', '5200', 'Bottom'), /*All-Star Blue Jeans*/ +('1062052', '6400', 'Bottom'), /*White Faded Jeans*/ +('1062053', '3200', 'Bottom'), /*Pink-Lined Shorts*/ +('1062054', '6400', 'Bottom'), /*Busy Bee Shorts*/ +/*Page 19*/ +('1062055', '6000', 'Bottom'), /*Jailbird Shorts*/ +('1062056', '3200', 'Bottom'), /*Military Cargo Pants*/ +('1062057', '5600', 'Bottom'), /*Scottish Pants*/ +('1062058', '5000', 'Bottom'), /*Inferno Jeans*/ +('1062059', '6400', 'Bottom'), /*Vintage Black Jeans*/ +('1062060', '3600', 'Bottom'), /*Blue Skinny Jeans*/ +('1062061', '6000', 'Bottom'), /*Olive Skinny Jeans*/ +('1062062', '3800', 'Bottom'), /*Red Wine Skinny Jeans*/ +('1062063', '5600', 'Bottom'), /*Dark Rocker Jeans*/ +/*Page 20*/ +('1062096', '6300', 'Bottom'), /*Practical Linen Trousers*/ +('1062097', '4700', 'Bottom'), /*Ella Blue Denim*/ +('1062098', '3800', 'Bottom'), /*Aqua Jeans*/ +('1062100', '5600', 'Bottom'), /*Rolled-Up Baggy Jeans*/ +('1062101', '4700', 'Bottom'), /*Rolled-Up Skinny Jeans*/ +('1062102', '4700', 'Bottom'), /*Twinkle Star Blue Jeans*/ +('1062103', '6000', 'Bottom'), /*Baggy Glow-in-the-Dark Pants*/ +('1062104', '3800', 'Bottom'), /*Dark Purple Jeans*/ +('1062105', '3400', 'Bottom'), /*Plaid Roll-Up Jeans*/ +/*Page 21*/ +('1062106', '7400', 'Bottom'), /*Bunny Frill Pants*/ +('1062107', '6000', 'Bottom'), /*Shooting Star Jeans*/ +('1062108', '5000', 'Bottom'), /*Vintage Jeans*/ +('1062109', '8800', 'Bottom'), /*Neon Skinny Jeans*/ +('1062110', '6300', 'Bottom'), /*Baby Pink Pants*/ +('1062111', '5200', 'Bottom'), /*Blue Ribbon Shorts*/ +('1062080', '7400', 'Bottom'), /*Amorian Pink Skirt*/ +('1062081', '4700', 'Bottom'), /*Bunny-Padded Snowboard Pants*/ +('1062082', '3200', 'Bottom'), /*Red and Black Warm-ups*/ +/*Page 22*/ +('1062083', '6300', 'Bottom'), /*Brown Pocket Shorts*/ +('1062084', '3600', 'Bottom'), /*Jewel Chain Jeans*/ +('1062085', '5200', 'Bottom'), /*"Black Tie Affair" Dress Pants*/ +('1062086', '3600', 'Bottom'), /*Dark Master Sergeant Skirt for Transformation*/ +('1062087', '5000', 'Bottom'), /*Red Legolia Pants for Transformation*/ +('1062088', '3400', 'Bottom'), /*Dark Night Pants for Transformation*/ +('1062089', '7600', 'Bottom'), /*Pink Heart Boxers*/ +('1062091', '3800', 'Bottom'), /*Black Checkered Shorts*/ +('1062092', '5200', 'Bottom'), /*Pink 80s Slacks*/ +/*Page 23*/ +('1062093', '6400', 'Bottom'), /*Moss Green Pants*/ +('1062094', '7600', 'Bottom'), /*Ruby-Buckled Shorts*/ +('1062095', '3800', 'Bottom'), /*Milan Jeans*/ +('1062129', '5000', 'Bottom'), /*Red Spotted Shorts*/ +('1062130', '4700', 'Bottom'), /*Blue Spotted Shorts*/ +('1062131', '5600', 'Bottom'), /*White Jeans*/ +('1062133', '3800', 'Bottom'), /*Star Trainer Pants*/ +('1062134', '4000', 'Bottom'), /*Super Pop Shorts*/ +('1062135', '7400', 'Bottom'), /*Shiny Gold Pants*/ +/*Page 24*/ +('1062136', '3400', 'Bottom'), /*Layered Denim Pants*/ +('1062137', '7400', 'Bottom'), /*Plum Sherbet Pants*/ +('1062138', '4000', 'Bottom'), /*Mint Sherbet Pants*/ +('1062139', '3400', 'Bottom'), /*Deep Blue Sea Knee Socks*/ +('1062112', '3400', 'Bottom'), /*Underpants*/ +('1062113', '7100', 'Bottom'), /*Crayon Shorts*/ +('1062114', '5200', 'Bottom'), /*Pink Heart Shorts*/ +('1062116', '8800', 'Bottom'), /*Star Beach Shorts*/ +('1062117', '5200', 'Bottom'), /*Idol Star Chain Pants*/ +/*Page 25*/ +('1062118', '4700', 'Bottom'), /*Stone Washed Jeans*/ +('1062119', '6300', 'Bottom'), /*Technicolour Funky Pants*/ +('1062121', '8800', 'Bottom'), /*Tiger-Print Leggings*/ +('1062122', '6300', 'Bottom'), /*Plaid-Cuffed Jeans*/ +('1062123', '7600', 'Bottom'), /*High-Rider*/ +('1062124', '7100', 'Bottom'), /*Saruel Pants*/ +('1062126', '8800', 'Bottom'), /*Pink Sprite Pants*/ +('1062160', '4700', 'Bottom'), /*Hyper Funky Xylophone Leggings*/ +('1062161', '6300', 'Bottom'), /*[MS Custom] Red Checkered Pants*/ +/*Page 26*/ +('1062162', '3800', 'Bottom'), /*Hyper Deep Blue Sea Knee Socks*/ +('1062163', '5200', 'Bottom'), /*Slither Style Pants*/ +('1062170', '6400', 'Bottom'), /*Aqua Jeans*/ +('1062171', '5000', 'Bottom'), /*Stocking Shorts*/ +('1062172', '3800', 'Bottom'), /*Checkered Tights*/ +('1062173', '5200', 'Bottom'), /*Funky Shorts*/ +('1062174', '6300', 'Bottom'), /*Hearts Tights*/ +('1062175', '3400', 'Bottom'), /*Pink Skinny Jeans*/ +('1062145', '3800', 'Bottom'), /*Funky Xylophone Leggings*/ +/*Page 27*/ +('1062147', '5200', 'Bottom'), /*Sky Rainbow Shorts [temp]*/ +('1062151', '5200', 'Bottom'), /*Rabbit Bottom*/ +('1062152', '4000', 'Bottom'), /*Neon Pink Pants*/ +('1062153', '6400', 'Bottom'), /*Vacation Denim Pants*/ +('1062154', '4000', 'Bottom'), /*Layered Denim Pants*/ +('1062155', '7100', 'Bottom'), /*Oceanic Sandblasted Jeans*/ +('1062156', '8800', 'Bottom'), /*Mosaic Purple*/ +('1062157', '6000', 'Bottom'), /*Chocolate Strawberry Pants*/ +('1062159', '3400', 'Bottom'), /*Hyper Chocolate Strawberry Pants*/ +/*Page 28*/ +('1062203', '6000', 'Bottom'), /*Otherworldly Slacks*/ +('1062204', '3800', 'Bottom'), /*Rainbow Pants*/ +('1062207', '7100', 'Bottom'), /*Hoi Poi Shorts*/ +('1062176', '4900', 'Bottom'), /*Plum Sherbet Pants*/ +('1062179', '7100', 'Bottom'), /*Little Bunny Pants*/ +('1062182', '3600', 'Bottom'), /*Sapphire Jeans*/ +('1062183', '3400', 'Bottom'), /*Hot Pink Overalls*/ +('1062184', '6400', 'Bottom'), /*Cargo Hiphop Pants*/ +('1062185', '5600', 'Bottom'), /*Violet Dot Jeans*/ +/*Page 29*/ +('1062188', '5000', 'Bottom'), /*Roll-Up Jean*/ +('1062189', '4700', 'Bottom'), /*Guardian Pants*/ +('1062225', '3200', 'Bottom'), /*Heart Patch Knit Pants*/ + + + +/*Page 1*/ +('1062226', '5600', 'Bottom 2'), /*Rawrin' Tiger Pants*/ +('1062228', '4700', 'Bottom 2'), /*White Rainbow Leggings*/ +('1062229', '6000', 'Bottom 2'), /*Naughty Boy Pants*/ +('1062230', '3200', 'Bottom 2'), /*White Rainbow Leggings*/ +('1062231', '3200', 'Bottom 2'), /*All About Jeans*/ +('1062232', '3800', 'Bottom 2'), /*Hoya Shorts*/ +('1062233', '3600', 'Bottom 2'), /*Dark Slate Jeans*/ +('1062234', '8800', 'Bottom 2'), /*Saggy Pants*/ +('1062235', '3800', 'Bottom 2'), /*Red Cloud Bottom*/ +/*Page 2*/ +('1062236', '7100', 'Bottom 2'), /*Red Cloud Bottom*/ +('1062237', '3200', 'Bottom 2'), /*Celebrity Pants: Fashion*/ +('1062238', '6000', 'Bottom 2'), /*Celebrity Pants: Amour*/ +('1062239', '5200', 'Bottom 2'), /*Celebrity Pants: Defi*/ +('1062208', '7100', 'Bottom 2'), /*Bunny Patch Pants*/ +('1062209', '4700', 'Bottom 2'), /*Mini Bunny Pants*/ +('1062210', '6000', 'Bottom 2'), /*Island Travel Shorts*/ +('1062211', '4000', 'Bottom 2'), /*Sweet Summer Shorts*/ +('1062212', '5600', 'Bottom 2'), /*Heart Hot Pants*/ +/*Page 3*/ +('1062213', '7600', 'Bottom 2'), /*Baby Purple Shorts*/ +('1062214', '3200', 'Bottom 2'), /*Teddy Hip Pants*/ +('1062216', '3200', 'Bottom 2'), /*Mismatched Shorts*/ +('1062217', '5600', 'Bottom 2'), /*Polka-Dot A Line Skirt*/ +('1062218', '6300', 'Bottom 2'), /*Green Speckled Sweatpants*/ +('1062219', '3800', 'Bottom 2'), /*Colorful Blue Pants*/ +('1062220', '4700', 'Bottom 2'), /*White Shorts*/ +('1062221', '4000', 'Bottom 2'), /*Teddy Picnic Pants*/ +('1062222', '6300', 'Bottom 2'), /*Brown Teddy Capris Pants*/ +/*Page 4*/ +('1062223', '7600', 'Bottom 2'), /*Pink Kitty Denim Skirt*/ +('1062244', '3400', 'Bottom 2'), /*Strawberry Training Pants*/ +('1062245', '6300', 'Bottom 2'), /*Denim Shorts*/ +('1062247', '4900', 'Bottom 2'), /*Knee Freedom*/ +('1062248', '3400', 'Bottom 2'), /*Strawberry Training Pants*/ +('1062249', '5000', 'Bottom 2'), /*Chunky Cable-Knit Bottoms*/ +('1062250', '5000', 'Bottom 2'), /*Tennis Bottom (M)*/ +('1062251', '8800', 'Bottom 2'), /*Tennis Bottom (F)*/ +('1062252', '8800', 'Bottom 2'), /*Scallion Leggings*/ + + + + + +/* Shoes */ +/*Page 1*/ +('1070000', '3400', 'Shoes'), /*꽃 고무신*/ +('1070001', '7600', 'Shoes'), /*Black Santa Boots*/ +('1070002', '6000', 'Shoes'), /*Kimono Shoes (M)*/ +('1070003', '5600', 'Shoes'), /*Black Shoes of Death*/ +('1070004', '7600', 'Shoes'), /*Blue Western Walkers*/ +('1070005', '3600', 'Shoes'), /*Santa Boy Boots*/ +('1070006', '6300', 'Shoes'), /*Royal Costume Shoes*/ +('1070007', '3600', 'Shoes'), /*Lunar Celebration Shoes*/ +('1070008', '5000', 'Shoes'), /*Korean Martial Arts Shoes*/ +/*Page 2*/ +('1070009', '6300', 'Shoes'), /*Paris Wingtips*/ +('1070014', '3600', 'Shoes'), /*Veras Heels [m]*/ +('1070015', '6300', 'Shoes'), /*Bunny Boots [m]*/ +('1070016', '5600', 'Shoes'), /*Dandy Silver Sneaks*/ +('1070018', '8800', 'Shoes'), /*Napoleon Shoes */ +('1070019', '6400', 'Shoes'), /*Napoleon Boots*/ +('1070020', '4900', 'Shoes'), /*Twinkling Boy Glow Shoes*/ +('1070024', '6000', 'Shoes'), /*Garnet-Studded Boots*/ +('1070028', '3800', 'Shoes'), /*Evergreen Magistrate Pretty Shoes*/ +/*Page 3*/ +('1070031', '6000', 'Shoes'), /*Alps Boy Shoes*/ +('1070064', '3200', 'Shoes'), /*Mad Doctor Boots*/ +('1070065', '5200', 'Shoes'), /*Blue Macaron Shoes*/ +('1070066', '4000', 'Shoes'), /*Santa Boy Boots*/ +('1070067', '4000', 'Shoes'), /*Cozy Snow Flower*/ +('1070068', '7400', 'Shoes'), /*The Kingdom Dress Shoes of King*/ +('1070069', '6000', 'Shoes'), /*Soaring Sky*/ +('1070070', '5600', 'Shoes'), /*Yeonhwa School Shoes*/ +('1070071', '4700', 'Shoes'), /*Mr. Time Shoes*/ +/*Page 4*/ +('1070072', '3600', 'Shoes'), /*Cutie Farmer Sneakers*/ +('1070073', '4700', 'Shoes'), /*Bloody Sneakers*/ +('1070074', '5600', 'Shoes'), /*Soldier Shoes*/ +('1070075', '3400', 'Shoes'), /*Time Master Shoes*/ +('1070076', '4000', 'Shoes'), /*Red Santa Boots*/ +('1070077', '3800', 'Shoes'), /*Mr. Time Shoes*/ +('1070078', '7100', 'Shoes'), /*Concert Muse Shoes*/ +('1070079', '5600', 'Shoes'), /*Sky Blue Spring Sandals*/ +('1070057', '8800', 'Shoes'), /*Shadow Sandals*/ +/*Page 5*/ +('1070059', '3600', 'Shoes'), /*Rainbow Picnic Shoes*/ +('1070060', '4700', 'Shoes'), /*[[FROZEN CONTENT]] Kristoff Shoes*/ +('1070061', '8800', 'Shoes'), /*Glass Sneakers*/ +('1070096', '6000', 'Shoes'), /*Santa Boots*/ +('1070097', '6400', 'Shoes'), /*Flowery Path*/ +('1070098', '4700', 'Shoes'), /*Carbon Wing Boots*/ +('1070099', '5200', 'Shoes'), /*Little Darling Shoes*/ +('1070100', '6300', 'Shoes'), /*Majestic Moonlight Oxfords*/ +('1070101', '3600', 'Shoes'), /*Majestic Moonlight Oxfords*/ +/*Page 6*/ +('1070103', '7400', 'Shoes'), /*Shinsoo's Steps*/ +('1070105', '4900', 'Shoes'), /*Necrotic Boots*/ +('1070106', '4000', 'Shoes'), /*Warrior's Steps*/ +('1070107', '5600', 'Shoes'), /*Camelia Loafers*/ +('1070108', '3200', 'Shoes'), /*Santa Boy Boots*/ +('1070109', '5600', 'Shoes'), /*Santa Boots*/ +('1070110', '4000', 'Shoes'), /*Snappy Delivery Shoes*/ +('1070080', '3600', 'Shoes'), /*Navillera Loafers*/ +('1070081', '7600', 'Shoes'), /*Navillera Loafers*/ +/*Page 7*/ +('1070082', '6300', 'Shoes'), /*Pure Angel Shoes*/ +('1070083', '3200', 'Shoes'), /*Blueberry Shoes*/ +('1070084', '4000', 'Shoes'), /*Sweet Sugar Shoes*/ +('1070085', '7400', 'Shoes'), /*Constellation Shoes*/ +('1070086', '4900', 'Shoes'), /*Fancy Dance Shoes*/ +('1070087', '3400', 'Shoes'), /*Fancy Dance Shoes*/ +('1070088', '4900', 'Shoes'), /*Cherry Strut*/ +('1070089', '5000', 'Shoes'), /*Light as a Feather*/ +('1070090', '7600', 'Shoes'), /*Wedding Loafers*/ +/*Page 8*/ +('1070091', '3800', 'Shoes'), /*Crimson Fate Shoes*/ +('1070092', '6300', 'Shoes'), /*Crimson Fate Shoes*/ +('1070093', '5200', 'Shoes'), /*Music Stairs*/ +('1070094', '8800', 'Shoes'), /*Spooky Shoes*/ +('1070095', '5600', 'Shoes'), /*Iron Mace Shoes*/ +('1071000', '5200', 'Shoes'), /*Blue Loose Sox*/ +('1071001', '4700', 'Shoes'), /*Red Loose Sox*/ +('1071002', '3400', 'Shoes'), /*Blue Gomushin*/ +('1071003', '7400', 'Shoes'), /*Red Santa Boots*/ +/*Page 9*/ +('1071004', '7100', 'Shoes'), /*Pink Nurse Shoes*/ +('1071005', '4000', 'Shoes'), /*White Nurse Shoes*/ +('1071006', '7400', 'Shoes'), /*SF Ninja Shoes*/ +('1071007', '6300', 'Shoes'), /*Bunny Boots*/ +('1071024', '5000', 'Shoes'), /*Black Dress Shoes [f]*/ +('1071025', '5200', 'Shoes'), /*Paris Wingtips [F]*/ +('1071026', '6400', 'Shoes'), /*White High Top*/ +('1071030', '3600', 'Shoes'), /*Twinkling Girl Glow Shoes*/ +('1071031', '7600', 'Shoes'), /*Pink Angel Wing Shoes*/ +/*Page 10*/ +('1071032', '7600', 'Shoes'), /*Red Ribbon Shoes*/ +('1071036', '3800', 'Shoes'), /*Garnet-Studded Boots*/ +('1071037', '6000', 'Shoes'), /*Cygnus Sandals*/ +('1071008', '3200', 'Shoes'), /*Kimono Shoes (F)*/ +('1071009', '3600', 'Shoes'), /*Blue Western Walkers*/ +('1071010', '6400', 'Shoes'), /*Sea Queen Sandals*/ +('1071011', '4700', 'Shoes'), /*Race Queen Boots*/ +('1071012', '7400', 'Shoes'), /*Diao Chan Shoes*/ +('1071013', '7600', 'Shoes'), /*White Cat Shoes*/ +/*Page 11*/ +('1071014', '8800', 'Shoes'), /*Black Cat Shoes*/ +('1071015', '5000', 'Shoes'), /*Maid Shoes*/ +('1071016', '5200', 'Shoes'), /*Santa Girl Boots*/ +('1071017', '3600', 'Shoes'), /*Leopard Print Shoes*/ +('1071018', '6000', 'Shoes'), /*Brown Leather Boots*/ +('1071019', '3400', 'Shoes'), /*Lunar Celebration Pumps*/ +('1071020', '4900', 'Shoes'), /*Veras Heels*/ +('1071021', '4000', 'Shoes'), /*Gothic Boots*/ +('1071040', '8800', 'Shoes'), /*Red Ribbon Shoes*/ +/*Page 12*/ +('1071044', '6300', 'Shoes'), /*Pinky Pretty Gomushin*/ +('1071048', '4700', 'Shoes'), /*Alps Girl Shoes*/ +('1071088', '5000', 'Shoes'), /*Ms. Time Shoes*/ +('1071089', '5600', 'Shoes'), /*Pure Farmer Sandals*/ +('1071090', '7400', 'Shoes'), /*Bloody Heels*/ +('1071091', '5200', 'Shoes'), /*Soldier Shoes*/ +('1071092', '6400', 'Shoes'), /*Time Mistress Shoes*/ +('1071093', '8800', 'Shoes'), /*Red Santa Boots*/ +('1071094', '3200', 'Shoes'), /*Ms. Time Shoes*/ +/*Page 13*/ +('1071095', '7600', 'Shoes'), /*Concert Muse Heels*/ +('1071096', '4000', 'Shoes'), /*Pink Spring Sandals*/ +('1071097', '3800', 'Shoes'), /*Navillera Flats*/ +('1071098', '3800', 'Shoes'), /*Navillera Flats*/ +('1071099', '6000', 'Shoes'), /*Angel Rose Shoes*/ +('1071100', '5600', 'Shoes'), /*Lemon Shoes*/ +('1071101', '4900', 'Shoes'), /*Sweet Sugar Shoes*/ +('1071102', '6000', 'Shoes'), /*Constellation Heels*/ +('1071103', '7400', 'Shoes'), /*Brilliant Dance Shoes*/ +/*Page 14*/ +('1071074', '6000', 'Shoes'), /*Shadow Garter*/ +('1071076', '7600', 'Shoes'), /*Colorful Picnic Shoes*/ +('1071077', '5600', 'Shoes'), /*[[FROZEN CONTENT]] Elsa Heels*/ +('1071078', '3800', 'Shoes'), /*Glass Slippers*/ +('1071080', '3800', 'Shoes'), /*Ribbon Angel Shoes*/ +('1071081', '3200', 'Shoes'), /*Pink Macaron Shoes*/ +('1071082', '7400', 'Shoes'), /*Santa Girl Boots*/ +('1071083', '4900', 'Shoes'), /*Cozy Snow Flower*/ +('1071084', '5000', 'Shoes'), /*The Kingdom Blue Heels of Queen*/ +/*Page 15*/ +('1071085', '3400', 'Shoes'), /*Soaring Cloud*/ +('1071087', '5200', 'Shoes'), /*Yeonhwa School Shoes*/ +('1071120', '4000', 'Shoes'), /*Empress's Steps*/ +('1071121', '4700', 'Shoes'), /*Necrotic Shoes*/ +('1071122', '5000', 'Shoes'), /*Warrior's Steps*/ +('1071123', '7100', 'Shoes'), /*Camelia Pumps*/ +('1071124', '4700', 'Shoes'), /*Santa Girl Boots*/ +('1071125', '5600', 'Shoes'), /*Santa Boots*/ +('1071126', '3200', 'Shoes'), /*Snappy Delivery Shoes*/ +/*Page 16*/ +('1071104', '4000', 'Shoes'), /*Brilliant Dance Shoes*/ +('1071105', '6400', 'Shoes'), /*Cherry Sashay*/ +('1071106', '6400', 'Shoes'), /*Swift as a Bird*/ +('1071107', '5000', 'Shoes'), /*Wedding Pumps*/ +('1071108', '5600', 'Shoes'), /*Crimson Fate Shoes*/ +('1071109', '4900', 'Shoes'), /*Crimson Fate Shoes*/ +('1071110', '7100', 'Shoes'), /*Music Stairs*/ +('1071111', '5600', 'Shoes'), /*Spooky Heels*/ +('1071112', '6000', 'Shoes'), /*Iron Mace Shoes*/ +/*Page 17*/ +('1071113', '3200', 'Shoes'), /*Santa Boots*/ +('1071114', '3600', 'Shoes'), /*Flowery Path*/ +('1071115', '4000', 'Shoes'), /*Carbon Wing Boots*/ +('1071116', '3800', 'Shoes'), /*Little Darling Shoes*/ +('1071117', '5600', 'Shoes'), /*Shimmering Starlight Pumps*/ +('1071118', '8800', 'Shoes'), /*Shimmering Starlight Pumps*/ +('1072010', '6300', 'Shoes'), /*Black Dress Shoes*/ +('1072013', '8800', 'Shoes'), /*Red Air H's*/ +('1072014', '4900', 'Shoes'), /*Camping Boots*/ +/*Page 18*/ +('1072057', '3600', 'Shoes'), /*Blue Air H's*/ +('1072058', '7600', 'Shoes'), /*Black Air H's*/ +('1072088', '5200', 'Shoes'), /*Cowboy Boots*/ +('1072092', '3200', 'Shoes'), /*Yellow Flippers*/ +('1072093', '3800', 'Shoes'), /*Blue Flippers*/ +('1072094', '3400', 'Shoes'), /*Yellow Rain Boots*/ +('1072095', '5200', 'Shoes'), /*Sky Blue Rain Boots*/ +('1072096', '3400', 'Shoes'), /*Red Rain Boots*/ +('1072097', '7400', 'Shoes'), /*Green Rain Boots*/ +/*Page 19*/ +('1072098', '5600', 'Shoes'), /*Blue Baseball Cleats*/ +('1072099', '4700', 'Shoes'), /*Red Baseball Cleats*/ +('1072100', '6300', 'Shoes'), /*Black Baseball Cleats*/ +('1072111', '7600', 'Shoes'), /*Black Leather Boots*/ +('1072153', '3800', 'Shoes'), /*Transparent Shoes*/ +('1072176', '4900', 'Shoes'), /*Military Boots*/ +('1072180', '5000', 'Shoes'), /*Flipper Boots*/ +('1072181', '7400', 'Shoes'), /*Green Ting Slippers*/ +('1072186', '4900', 'Shoes'), /*Gold Kitty Slippers*/ +/*Page 20*/ +('1072187', '5600', 'Shoes'), /*Blue Marble Slippers*/ +('1072188', '5200', 'Shoes'), /*Red Marble Slippers*/ +('1072189', '6300', 'Shoes'), /*Bunny Slippers*/ +('1072190', '6400', 'Shoes'), /*Blue B-ball Sneakers*/ +('1072191', '6300', 'Shoes'), /*Orange B-ball Sneakers*/ +('1072175', '7100', 'Shoes'), /*Ninja Shoes*/ +('1072217', '6000', 'Shoes'), /*Beige Golashes*/ +('1072218', '6400', 'Shoes'), /*Sky Blue Golashes*/ +('1072219', '6300', 'Shoes'), /*Pink Golashes*/ +/*Page 21*/ +('1072199', '3600', 'Shoes'), /*Ragged Gomushin*/ +('1072200', '7600', 'Shoes'), /*Brown Dress Shoes*/ +('1072201', '5600', 'Shoes'), /*Red Leather Boots*/ +('1072202', '7400', 'Shoes'), /*M-Forcer Boots*/ +('1072240', '7400', 'Shoes'), /*Big Rabbit Feet*/ +('1072241', '7600', 'Shoes'), /*Liu Bei Shoes*/ +('1072242', '3400', 'Shoes'), /*Cao Cao Shoes*/ +('1072243', '6000', 'Shoes'), /*Sun Quan Shoes*/ +('1072244', '8800', 'Shoes'), /*Red Enamel Shoes*/ +/*Page 22*/ +('1072245', '5600', 'Shoes'), /*Blue Enamel Shoes*/ +('1072246', '8800', 'Shoes'), /*Pink Sneakers*/ +('1072247', '5000', 'Shoes'), /*Hunting Boots*/ +('1072250', '5200', 'Shoes'), /*Horoscope Shoes*/ +('1072251', '4700', 'Shoes'), /*Pro-Cat Sticker*/ +('1072252', '6400', 'Shoes'), /*Snowboard Boots*/ +('1072253', '3200', 'Shoes'), /*Red Santa Shoes*/ +('1072254', '7600', 'Shoes'), /*Football Cleats (Home)*/ +('1072255', '8800', 'Shoes'), /*Football Cleats (Away)*/ +/*Page 23*/ +('1072230', '5200', 'Shoes'), /*Black Boxing Shoes*/ +('1072231', '4000', 'Shoes'), /*Blue Boxing Shoes*/ +('1072232', '4900', 'Shoes'), /*Red Boxing Shoes*/ +('1072233', '3200', 'Shoes'), /*Bear Shoes*/ +('1072234', '6300', 'Shoes'), /*Bubbling Slippers*/ +('1072235', '7400', 'Shoes'), /*Slime Slippers*/ +('1072236', '7600', 'Shoes'), /*Guan Yu Shoes*/ +('1072237', '5200', 'Shoes'), /*Zhu-Ge-Liang Shoes*/ +('1072274', '5200', 'Shoes'), /*Moon Bunny Paws*/ +/*Page 24*/ +('1072276', '3800', 'Shoes'), /*Booster Shoes*/ +('1072277', '5000', 'Shoes'), /*Red Elf shoes*/ +('1072278', '8800', 'Shoes'), /*Rudolph Slippers*/ +('1072279', '6000', 'Shoes'), /*Super Booster Shoes*/ +('1072280', '6300', 'Shoes'), /*Golden Shoes*/ +('1072281', '3800', 'Shoes'), /*Sachiel Shoes*/ +('1072282', '3800', 'Shoes'), /*Veamoth Shoes*/ +('1072283', '7400', 'Shoes'), /*Janus Shoes*/ +('1072284', '6300', 'Shoes'), /*Zhu Ba Jie Shoes*/ +/*Page 25*/ +('1072256', '5200', 'Shoes'), /*Teddy Bear Shoes*/ +('1072257', '7600', 'Shoes'), /*Puppy Slippers*/ +('1072258', '8800', 'Shoes'), /*Gray Kitty Slippers*/ +('1072259', '7400', 'Shoes'), /*Chick Slippers*/ +('1072260', '8800', 'Shoes'), /*Penguin Slippers*/ +('1072265', '3800', 'Shoes'), /*Blue Soccer Cleats*/ +('1072266', '5600', 'Shoes'), /*Black Soccer Cleats*/ +('1072267', '7100', 'Shoes'), /*Red Soccer Cleats*/ +('1072270', '4900', 'Shoes'), /*White Rabbit Shoes*/ +/*Page 26*/ +('1072271', '4000', 'Shoes'), /*Black Cat Shoes*/ +('1072336', '4900', 'Shoes'), /*Soccer Cleats*/ +('1072337', '5600', 'Shoes'), /*Fluffy Slippers*/ +('1072341', '3800', 'Shoes'), /*Orange Sneakz*/ +('1072347', '6300', 'Shoes'), /*Olive Green Kicks*/ +('1072348', '5000', 'Shoes'), /*Elephant Slippers*/ +('1072349', '3800', 'Shoes'), /*Green Sneakz*/ +('1072350', '6300', 'Shoes'), /*Black High Tops*/ +('1072351', '8800', 'Shoes'), /*Green Ankle Boots for Transformation*/ +/*Page 27*/ +('1072322', '5600', 'Shoes'), /*Rollerskates*/ +('1072323', '5200', 'Shoes'), /*Starry Slippers*/ +('1072324', '4000', 'Shoes'), /*Piggy Slippers*/ +('1072325', '3800', 'Shoes'), /*Red Slime Slippers*/ +('1072326', '6300', 'Shoes'), /*Yellow Slime Slippers*/ +('1072327', '6300', 'Shoes'), /*Tania En Fuego*/ +('1072328', '3800', 'Shoes'), /*Mercury Lightning*/ +('1072329', '4000', 'Shoes'), /*Flipped Blue High Top*/ +('1072330', '3800', 'Shoes'), /*Black Classic Sneakers*/ +/*Page 28*/ +('1072331', '3800', 'Shoes'), /*Velcro High Tops*/ +('1072332', '4900', 'Shoes'), /*Black Enamel Shoes*/ +('1072333', '6300', 'Shoes'), /*Green Classic Sneakers*/ +('1072334', '4900', 'Shoes'), /*Red Checkered Sneakers*/ +('1072335', '7400', 'Shoes'), /*Natural Golashes*/ +('1072370', '6000', 'Shoes'), /*Gaga Shoes*/ +('1072371', '4700', 'Shoes'), /*Custom Blue High Tops*/ +('1072373', '6000', 'Shoes'), /*Purple Rainbow Sneaks*/ +('1072374', '6300', 'Shoes'), /*Lace Long Boots*/ +/*Page 29*/ +('1072377', '5200', 'Shoes'), /*Treacherous Wolf Shoes*/ +('1072379', '6300', 'Shoes'), /*Yellow Rainbow Sneaks*/ +('1072380', '4700', 'Shoes'), /*White & Blue Sandals*/ + + + +/*Page 1*/ +('1072381', '7600', 'Shoes 2'), /*Aran Combat Shoes*/ +('1072382', '4000', 'Shoes 2'), /*Brave Soldier Shoes */ +('1072352', '3800', 'Shoes 2'), /*Red Silky Boots for Transformation*/ +('1072353', '3800', 'Shoes 2'), /*White Ninja Sandals for Transformation*/ +('1072354', '5600', 'Shoes 2'), /*Black Voyson Shoes for Transformation*/ +('1072367', '5200', 'Shoes 2'), /*Cutie Birk Shoes*/ +('1072404', '6000', 'Shoes 2'), /*Alchemist Shoes*/ +('1072405', '7600', 'Shoes 2'), /*Ninja Shoes*/ +('1072406', '5000', 'Shoes 2'), /*Chaos Metallic Shoes*/ +/*Page 2*/ +('1072407', '3400', 'Shoes 2'), /*Kawaii Kitty Shoes*/ +('1072408', '6300', 'Shoes 2'), /*Maple Racing Shoes*/ +('1072410', '3400', 'Shoes 2'), /*Super Booster Shoes*/ +('1072384', '3200', 'Shoes 2'), /*Bling Bling Shoes*/ +('1072385', '4700', 'Shoes 2'), /*White Slipshoes*/ +('1072386', '5200', 'Shoes 2'), /*Black Geda*/ +('1072387', '6300', 'Shoes 2'), /*Pink Geda*/ +('1072388', '4000', 'Shoes 2'), /*Stripe Knee Socks*/ +('1072389', '6000', 'Shoes 2'), /*Black Platform Boots*/ +/*Page 3*/ +('1072392', '7100', 'Shoes 2'), /*Red Ankle-Strap Shoes*/ +('1072393', '4700', 'Shoes 2'), /*We Care! Shoes*/ +('1072394', '7400', 'Shoes 2'), /*Pink Polka-Dotted Boots*/ +('1072395', '5600', 'Shoes 2'), /*Mix-n-Match Sneakers*/ +('1072396', '6300', 'Shoes 2'), /*Gaga Shoes*/ +('1072397', '5200', 'Shoes 2'), /*Idol Star Snickers*/ +('1072398', '6000', 'Shoes 2'), /*Cursed Golden shoes*/ +('1072433', '6300', 'Shoes 2'), /*Passionate Flats*/ +('1072437', '4000', 'Shoes 2'), /*Pink Bean Shoes*/ +/*Page 4*/ +('1072438', '3800', 'Shoes 2'), /*Green Leaf Shoes*/ +('1072439', '4000', 'Shoes 2'), /*Strawberry Shoes*/ +('1072440', '8800', 'Shoes 2'), /*Cat Set Boots*/ +('1072441', '6000', 'Shoes 2'), /*Dual Blade Boots*/ +('1072443', '4700', 'Shoes 2'), /*Evan Golden Boots*/ +('1072444', '7600', 'Shoes 2'), /*Hawkeye Ocean Boots*/ +('1072417', '6000', 'Shoes 2'), /*Clown Shoes*/ +('1072425', '6300', 'Shoes 2'), /*Freud's Shoes*/ +('1072426', '4000', 'Shoes 2'), /*Shiny Anklet*/ +/*Page 5*/ +('1072464', '6300', 'Shoes 2'), /*Combat Boots*/ +('1072465', '5200', 'Shoes 2'), /*King Crow Kimono Shoes*/ +('1072466', '6300', 'Shoes 2'), /*Henesys Academy Shoes*/ +('1072467', '4900', 'Shoes 2'), /*Pilot Boots*/ +('1072468', '5600', 'Shoes 2'), /*Lolita Knee Socks Shoes*/ +('1072469', '3600', 'Shoes 2'), /*Striped Leggings (Pink)*/ +('1072470', '3800', 'Shoes 2'), /*Striped Leggings (Blue)*/ +('1072478', '4900', 'Shoes 2'), /*Brown Ankle Boots*/ +('1072448', '6300', 'Shoes 2'), /*Rainbow Boots*/ +/*Page 6*/ +('1072454', '4000', 'Shoes 2'), /*Oz Magic Boots*/ +('1072456', '5200', 'Shoes 2'), /*Evan Boots*/ +('1072457', '6000', 'Shoes 2'), /*Blue Slip-Ons*/ +('1072461', '6400', 'Shoes 2'), /*Battle Mage Boots*/ +('1072462', '4900', 'Shoes 2'), /*Wild Hunter Boots*/ +('1072507', '8800', 'Shoes 2'), /*Pearl Anklet*/ +('1072508', '3800', 'Shoes 2'), /*Winter 2010 Moon Bunny Shoes*/ +('1072509', '6300', 'Shoes 2'), /*Red's Shoes*/ +('1072482', '5600', 'Shoes 2'), /*Panda Slippers*/ +/*Page 7*/ +('1072483', '7100', 'Shoes 2'), /*White Boots*/ +('1072484', '6000', 'Shoes 2'), /*Black Kitty Slippers*/ +('1072495', '7600', 'Shoes 2'), /*Blue Sneakers*/ +('1072529', '3200', 'Shoes 2'), /*Pink Elephant Slippers*/ +('1072531', '3600', 'Shoes 2'), /*Koala Slippers*/ +('1072532', '7600', 'Shoes 2'), /*MSE 4 Years & Unstoppable Shoes*/ +('1072536', '3400', 'Shoes 2'), /*Starling Shoes*/ +('1072537', '4700', 'Shoes 2'), /*Crow Shoes*/ +('1072514', '8800', 'Shoes 2'), /*Pink Winged Shoes*/ +/*Page 8*/ +('1072515', '4000', 'Shoes 2'), /*Furry Lion Slippers*/ +('1072516', '5200', 'Shoes 2'), /*Rookie Chick Slippers*/ +('1072517', '6000', 'Shoes 2'), /*Winged Shoes*/ +('1072520', '4700', 'Shoes 2'), /*6th Anniversary Item*/ + +('1072627', '8800', 'Shoes 2'), /*Dark Force Boots */ +('1072628', '8800', 'Shoes 2'), /*Elven Spirit Boots */ +('1072631', '8800', 'Shoes 2'), /*Urban Pirate Shoes*/ +('1072632', '5200', 'Shoes 2'), /*Ebony Pimpernel Boots*/ +/*Page 9*/ +('1072633', '3200', 'Shoes 2'), /*GM Haku's Pirate Shoes*/ +('1072637', '4000', 'Shoes 2'), /*Hades Shoes*/ +('1072609', '6400', 'Shoes 2'), /*Ribboned Justice Boots*/ +('1072613', '8800', 'Shoes 2'), /*Western Cowboy Boots*/ +('1072622', '5000', 'Shoes 2'), /*Orchid's Black Wing Shoes*/ +('1072658', '8800', 'Shoes 2'), /*Glowing Foot Ring*/ +('1072662', '3600', 'Shoes 2'), /*Lucia Shoes*/ +('1072663', '6300', 'Shoes 2'), /*GM Nori's Wing Shoes*/ +('1072646', '5200', 'Shoes 2'), /*Elven Spirit Boots*/ +/*Page 10*/ +('1072647', '6400', 'Shoes 2'), /*Kerning Engineering School Shoes*/ +('1072648', '4900', 'Shoes 2'), /*Ellinia Magic School Shoes*/ +('1072649', '6400', 'Shoes 2'), /*Mu Lung Dojo Training Shoes*/ +('1072650', '4700', 'Shoes 2'), /*Blue Dragon Shoes*/ +('1072651', '3800', 'Shoes 2'), /*Red Dragon Shoes*/ +('1072652', '3800', 'Shoes 2'), /*Intergalactic Shoes*/ +('1072676', '3200', 'Shoes 2'), /*The Onmyouji's Shoes*/ +('1072680', '3200', 'Shoes 2'), /*Blue Arabian Shoes*/ +('1072681', '3400', 'Shoes 2'), /*Red Arabian Shoes*/ +/*Page 11*/ +('1072729', '6000', 'Shoes 2'), /*Jett's Boots*/ +('1072708', '3400', 'Shoes 2'), /*Cool Summer Flippers*/ +('1072756', '8800', 'Shoes 2'), /*Hyper Kitten Mittens*/ +('1072757', '4900', 'Shoes 2'), /*[MS Custom] Red Rain Boots*/ +('1072758', '3200', 'Shoes 2'), /*Kitty Slippers*/ +('1072759', '7600', 'Shoes 2'), /*Chick Slippers*/ +('1072760', '3400', 'Shoes 2'), /*Halloween Leopard Shoes*/ +('1072742', '3200', 'Shoes 2'), /*Nero Paws*/ +('1072748', '3600', 'Shoes 2'), /*Exotic Festival Shoes*/ +/*Page 12*/ +('1072749', '6300', 'Shoes 2'), /*Bubble Bubble Chocolate Shoes*/ +('1072750', '3600', 'Shoes 2'), /*The Bladed Falcon's Shoes*/ +('1072791', '6400', 'Shoes 2'), /*Green Dinosaur Shoes*/ +('1072770', '5600', 'Shoes 2'), /*Dark Devil Shoes*/ +('1072771', '6400', 'Shoes 2'), /*Slither Style High-Tops*/ +('1072772', '5200', 'Shoes 2'), /*Pious Shaman Stockings*/ +('1072773', '6400', 'Shoes 2'), /*Red Strap Clogs*/ +('1072778', '7400', 'Shoes 2'), /*Dark Force Boots*/ +('1072779', '8800', 'Shoes 2'), /*Featherly Angel Shoes*/ +/*Page 13*/ +('1072780', '7100', 'Shoes 2'), /*Blue Point Kitty Shoes*/ +('1072781', '6000', 'Shoes 2'), /*Kitty Shoes*/ +('1072782', '3800', 'Shoes 2'), /*Xenon Neo-Tech Shoes*/ +('1072783', '6000', 'Shoes 2'), /*Lotus's Black Wing Shoes*/ +('1072816', '6000', 'Shoes 2'), /*Succubus Shoes*/ +('1072817', '5000', 'Shoes 2'), /*Blavy Angel Shoes*/ +('1072820', '8800', 'Shoes 2'), /*Funky Shoes*/ +('1072821', '3200', 'Shoes 2'), /*Golden Bell Shoes*/ +('1072823', '5600', 'Shoes 2'), /*Golf Shoes*/ +/*Page 14*/ +('1072824', '4000', 'Shoes 2'), /*Angel Wing Shoes*/ +('1072830', '3400', 'Shoes 2'), /*GM Daejang's Lucia Shoes*/ +('1072831', '5000', 'Shoes 2'), /*Flame Boots*/ +('1072800', '7400', 'Shoes 2'), /*Mid High Golf Shoes*/ +('1072803', '3200', 'Shoes 2'), /*Purple Dinosaur Shoes*/ +('1072807', '5200', 'Shoes 2'), /*Hilla's Shoes*/ +('1072808', '3800', 'Shoes 2'), /*Ramling Slippers*/ +('1072809', '5600', 'Shoes 2'), /*Kerning Technical High Shoes*/ +('1072810', '5000', 'Shoes 2'), /*Ellinia Magic Academy Shoes*/ +/*Page 15*/ +('1072811', '4700', 'Shoes 2'), /*Mu Lung Academy Training Shoes*/ +('1072812', '7400', 'Shoes 2'), /*Kimono Sandals*/ +('1072813', '8800', 'Shoes 2'), /*Kimono Shoes*/ +('1072848', '4700', 'Shoes 2'), /*Bloody Garter*/ +('1072851', '3200', 'Shoes 2'), /*Bubble Bubble Shoes*/ +('1072852', '3800', 'Shoes 2'), /*Superstar Shoes*/ +('1072854', '3600', 'Shoes 2'), /*フューチャーロイドスキンシューズ*/ +('1072855', '3800', 'Shoes 2'), /*フューチャーロイドネオンブーツ*/ +('1072856', '6300', 'Shoes 2'), /*Dawn Bear Comfy Boots*/ +/*Page 16*/ +('1072857', '6400', 'Shoes 2'), /*Odette Ballet Slippers*/ +('1072858', '3200', 'Shoes 2'), /*Odile Ballet Slippers*/ +('1072859', '3200', 'Shoes 2'), /*Cobalt Zero Shoes*/ +('1072860', '3800', 'Shoes 2'), /*Star Winkle*/ +('1072862', '5000', 'Shoes 2'), /*Heart Pudding Slippers*/ +('1072863', '3600', 'Shoes 2'), /*Stirkandbock Sandals*/ +('1072832', '7100', 'Shoes 2'), /*Pink Bean Slippers*/ +('1072836', '4700', 'Shoes 2'), /*Baseball Shoes*/ +('1072838', '5600', 'Shoes 2'), /*Panda Slippers*/ +/*Page 17*/ +('1072839', '4900', 'Shoes 2'), /*Shoes of Life*/ +('1072840', '3400', 'Shoes 2'), /*Shoes of Destruction*/ +('1072843', '3400', 'Shoes 2'), /*Bubble Flip Flops*/ +('1072880', '7600', 'Shoes 2'), /*Aran's Boots*/ +('1072881', '3400', 'Shoes 2'), /*Brave Aran's Boots*/ +('1072883', '3200', 'Shoes 2'), /*Heathcliff's Boots*/ +('1072884', '7100', 'Shoes 2'), /*Yui's Anklet*/ +('1072889', '5600', 'Shoes 2'), /*Snake High-tops*/ +('1072890', '3600', 'Shoes 2'), /*Mr. K's Cat Shoes*/ +/*Page 18*/ +('1072864', '7600', 'Shoes 2'), /*PSY Shoes*/ +('1072865', '5000', 'Shoes 2'), /*Camellia Flower Geta*/ +('1072866', '5600', 'Shoes 2'), /*Chocoram Doll Shoes*/ +('1072867', '3400', 'Shoes 2'), /*Puffram Shoes*/ +('1072868', '6400', 'Shoes 2'), /*Powder Flats*/ +('1072869', '3200', 'Shoes 2'), /*Princess of Time Heels*/ +('1072871', '7400', 'Shoes 2'), /*Halloweenroid Boots*/ +('1072873', '7600', 'Shoes 2'), /*Asuna's Shoes*/ +('1072875', '4900', 'Shoes 2'), /*Leafa's Shoes*/ +/*Page 19*/ +('1072876', '4000', 'Shoes 2'), /*Cacao Bear Shoes*/ +('1072877', '5200', 'Shoes 2'), /*Dark Devil Shoes*/ +('1072878', '6400', 'Shoes 2'), /*Vampire Phantom Boots*/ +('1072879', '6400', 'Shoes 2'), /*Freud's Shoes*/ +('1072913', '4900', 'Shoes 2'), /*Blue Slippers*/ +('1072916', '6300', 'Shoes 2'), /*Guardian Shoes*/ +('1072917', '4900', 'Shoes 2'), /*Cutie Horse Shoes*/ +('1072918', '4900', 'Shoes 2'), /*Pink Flowery Shoes*/ +('1072919', '6000', 'Shoes 2'), /*Blue Butterfly Shoes*/ +/*Page 20*/ +('1072920', '3200', 'Shoes 2'), /*Ghost Bride's Shoes*/ +('1072921', '3600', 'Shoes 2'), /*Fancy Magician Shoes*/ +('1072922', '3600', 'Shoes 2'), /*Chef Shoes*/ +('1072923', '6000', 'Shoes 2'), /*Contemporary Chic Shoes*/ +('1072924', '4900', 'Shoes 2'), /*Nurse Boots*/ +('1072925', '3600', 'Shoes 2'), /*Doctor Boots*/ +('1072926', '8800', 'Shoes 2'), /*Colorful Sneakers*/ +('1072897', '4700', 'Shoes 2'), /*Blue Moccasin*/ +('1072901', '4900', 'Shoes 2'), /*Moonlight Marble Shoes*/ +/*Page 21*/ +('1072908', '7100', 'Shoes 2'), /*Pony Wing Shoes*/ +('1072909', '7400', 'Shoes 2'), /*Purple Rainbow Sneaks*/ +('1072910', '5000', 'Shoes 2'), /*Cacao Bear Shoes*/ +('1072944', '5600', 'Shoes 2'), /*暗夜精灵战靴*/ +('1072945', '5200', 'Shoes 2'), /*隐武士战靴*/ +('1072949', '4700', 'Shoes 2'), /*Red Pony Sneakers*/ +('1072950', '7400', 'Shoes 2'), /*Blue Pony Sneakers*/ +('1072951', '8800', 'Shoes 2'), /*Hula Hula Beaded Anklet*/ +('1072934', '3200', 'Shoes 2'), /*Rainbow Sneakers*/ +/*Page 22*/ +('1072942', '7600', 'Shoes 2'), /*Island Travel Shoes*/ +('1072943', '6300', 'Shoes 2'), /*Humming Shoes*/ +('1072978', '4700', 'Shoes 2'), /*Glowy Leather Shoes*/ +('1072979', '7600', 'Shoes 2'), /*Bright Angel Boots*/ +('1072980', '7600', 'Shoes 2'), /*Dark Devil Boots*/ +('1073008', '7400', 'Shoes 2'), /*Scarlet Sneakers*/ +('1073009', '3400', 'Shoes 2'), /*Corn Shoes*/ +('1073011', '7400', 'Shoes 2'), /*Cheerleader Shoes*/ +('1073013', '6000', 'Shoes 2'), /*Wiggly Puppy Shoes*/ +/*Page 23*/ +('1073014', '3600', 'Shoes 2'), /*Pink Puppy Shoes*/ +('1073019', '3400', 'Shoes 2'), /*Dinofrog Shoes*/ +('1073022', '3800', 'Shoes 2'), /*Pink Kitty Blue Sneakers*/ +('1072998', '5200', 'Shoes 2'), /*Rabbit-Bear Slippers*/ +('1072999', '5600', 'Shoes 2'), /*Ribbon Red Shoes*/ +('1073040', '5000', 'Shoes 2'), /*Maple Mouse Shoes*/ +('1073041', '3800', 'Shoes 2'), /*Black Forte Boots*/ +('1073044', '6300', 'Shoes 2'), /*-*/ +('1073046', '7100', 'Shoes 2'), /*Baby Ram Slippers (Blue)*/ +/*Page 24*/ +('1073047', '6400', 'Shoes 2'), /*Baby Ram Slippers (Pink)*/ +('1073050', '7400', 'Shoes 2'), /*Ring Sneakers*/ +('1073051', '3800', 'Shoes 2'), /*Ryan D Shoes*/ +('1073052', '6300', 'Shoes 2'), /*Sierra Grace Boots */ +('1073055', '7100', 'Shoes 2'), /*Akarin's Flowery Shoes*/ +('1073024', '4700', 'Shoes 2'), /*Red Shoes*/ +('1073025', '5600', 'Shoes 2'), /*Hatchling Shoes*/ +('1073027', '7400', 'Shoes 2'), /*ODM Gear*/ +('1073036', '5600', 'Shoes 2'), /*Blue Bird Shoes*/ +/*Page 25*/ +('1073037', '7600', 'Shoes 2'), /*Cutie Bunny Shoes*/ +('1073038', '7400', 'Shoes 2'), /*Soft Pink Boots*/ +('1073039', '4700', 'Shoes 2'), /*Cutie Birk Shoes*/ +('1073074', '4700', 'Shoes 2'), /*Schwarzer Boots*/ +('1073075', '5000', 'Shoes 2'), /*Mint Kitty Slippers*/ +('1073079', '3800', 'Shoes 2'), /*Mousy Bunny Jelly Flops*/ +('1073080', '5000', 'Shoes 2'), /*Black Sailor Shoes*/ +('1073082', '7600', 'Shoes 2'), /*Odette Ballet Slippers*/ +('1073084', '4900', 'Shoes 2'), /*Kinesis Shoes*/ +/*Page 26*/ +('1073085', '7600', 'Shoes 2'), /*Kinesis Shoes*/ +('1073056', '4000', 'Shoes 2'), /*Blooming Spring*/ +('1073058', '6300', 'Shoes 2'), /*Naughty Boy Shoes*/ +('1073059', '6400', 'Shoes 2'), /*Cat Knee Socks*/ +('1073060', '7600', 'Shoes 2'), /*Noble Blossom Shoes*/ +('1073061', '7400', 'Shoes 2'), /*Pink Blossom Shoes*/ +('1073062', '3400', 'Shoes 2'), /*Cottontail Rabbit Shoes*/ +('1073105', '5000', 'Shoes 2'), /*Exciting Kicks*/ +('1073106', '5200', 'Shoes 2'), /*Polar Booties*/ +/*Page 27*/ +('1073107', '4700', 'Shoes 2'), /*Wooden Bell Shoes*/ +('1073108', '3200', 'Shoes 2'), /*Flutter Bell Sandals*/ +('1073115', '6000', 'Shoes 2'), /*Evan Dragon Boots*/ +('1073116', '4900', 'Shoes 2'), /*Evan Dragon Boots*/ +('1073117', '3600', 'Shoes 2'), /*Royal Mercedes Shoes*/ +('1073118', '7100', 'Shoes 2'), /*Royal Mercedes Shoes*/ +('1073119', '4700', 'Shoes 2'), /*Mystic Phantom Shoes*/ +('1073088', '6300', 'Shoes 2'), /*Bluebird Shoes*/ +('1073090', '5600', 'Shoes 2'), /*White Ursus Slippers*/ +/*Page 28*/ +('1073091', '7600', 'Shoes 2'), /*Brown Ursus Slippers*/ +('1073092', '5600', 'Shoes 2'), /*Black Ursus Slippers*/ +('1073096', '5000', 'Shoes 2'), /*Little Vampire Shoes*/ + +('1073098', '6000', 'Shoes 2'), /*Arctic Snow Shoes*/ +('1073144', '3400', 'Shoes 2'), /*Shark Bite Shoes*/ +('1073145', '8800', 'Shoes 2'), /*Kitty Follower*/ +('1073148', '3200', 'Shoes 2'), /*Berry Shoes*/ +('1073149', '3400', 'Shoes 2'), /*Noble Maple Shoes*/ +/*Page 29*/ +('1073150', '4900', 'Shoes 2'), /*Chicken Cutie Shoes*/ +('1073151', '4000', 'Shoes 2'), /*Hydrangea Shoes*/ +('1073120', '7100', 'Shoes 2'), /*Mystic Phantom Shoes*/ + + + +/*Page 1*/ +('1073121', '6000', 'Shoes 3'), /*Winter Aran Boots*/ +('1073122', '8800', 'Shoes 3'), /*Winter Aran Boots*/ +('1073123', '6400', 'Shoes 3'), /*Chiaroscuro Luminous Shoes*/ +('1073124', '5000', 'Shoes 3'), /*Chiaroscuro Luminous Shoes*/ +('1073125', '3800', 'Shoes 3'), /*Secret Shade Boots*/ +('1073126', '3400', 'Shoes 3'), /*Secret Shade Boots*/ +('1073127', '3400', 'Shoes 3'), /*Cozy Fluffy Slippers*/ +('1073128', '3800', 'Shoes 3'), /*Snow Boots*/ +('1073129', '8800', 'Shoes 3'), /*Cozy Fur Shoes*/ +/*Page 2*/ +('1073132', '3600', 'Shoes 3'), /*Umbral Shoes*/ +('1073133', '3400', 'Shoes 3'), /*Umbral Boots*/ +('1073134', '5000', 'Shoes 3'), /*Flower Dancer's Sandals*/ +('1073135', '7100', 'Shoes 3'), /*Moon Dancer's Boots*/ +('1073168', '3800', 'Shoes 3'), /*Chained Princess Shoes*/ +('1073169', '8800', 'Shoes 3'), /*Bichon Shoes*/ +('1073170', '8800', 'Shoes 3'), /*Midnight Steps*/ +('1073171', '3600', 'Shoes 3'), /*Midnight Tiptoes*/ +('1073172', '3200', 'Shoes 3'), /*Vampire Phantom Boots*/ +/*Page 3*/ +('1073175', '5200', 'Shoes 3'), /*Sweetheart Shoes*/ +('1073176', '7600', 'Shoes 3'), /*Sweetheart Slippers*/ +('1073177', '7100', 'Shoes 3'), /*Emilia's Heels*/ +('1073178', '4700', 'Shoes 3'), /*Subaru's Sneakers*/ +('1073179', '6000', 'Shoes 3'), /*Felt's Shoes*/ +('1073180', '5600', 'Shoes 3'), /*Priscilla's Heels*/ +('1073181', '6400', 'Shoes 3'), /*Winter Bunny Boots (Teal)*/ +('1073182', '5200', 'Shoes 3'), /*Winter Bunny Boots (Pink)*/ +('1073183', '5600', 'Shoes 3'), /*Pumpkin Cookie*/ +/*Page 4*/ +('1073152', '6000', 'Shoes 3'), /*Black Scout Shoes*/ +('1073153', '3600', 'Shoes 3'), /*Blaster Shoes*/ +('1073154', '3800', 'Shoes 3'), /*Blaster Shoes*/ +('1073155', '5600', 'Shoes 3'), /*Villain Shoes*/ +('1073156', '3600', 'Shoes 3'), /*Colorful Beach Sandals*/ +('1073157', '7100', 'Shoes 3'), /*Red Cloud Shoes*/ +('1073163', '3200', 'Shoes 3'), /*Starry Night Flowers*/ +('1073164', '4000', 'Shoes 3'), /*Winged Pony Boots*/ + +/*Page 5*/ +('1073167', '3200', 'Shoes 3'), /*Dark Musician Shoes*/ +('1073200', '5000', 'Shoes 3'), /*Soft Moon*/ +('1073201', '7100', 'Shoes 3'), /*Spring Fairy Shoes*/ +('1073203', '7400', 'Shoes 3'), /*Cape Shoes (M)*/ +('1073204', '6300', 'Shoes 3'), /*Cape Shoes (F)*/ +('1073205', '6400', 'Shoes 3'), /*Strawberry Sneakers*/ +('1073212', '6000', 'Shoes 3'), /*Retro Roller Skates*/ +('1073213', '3200', 'Shoes 3'), /*Starlit Dreamwalkers*/ + +/*Page 6*/ +('1073215', '3200', 'Shoes 3'), /*Pop Star Shoes (F)*/ +('1073184', '8800', 'Shoes 3'), /*Pumpkin Soup*/ +('1073185', '7600', 'Shoes 3'), /*Chick Shoes*/ +('1073186', '5200', 'Shoes 3'), /*Cluck Cluck Slippers*/ +('1073188', '6000', 'Shoes 3'), /*White Night Sandals*/ +('1073189', '6400', 'Shoes 3'), /*Snow Moon Flower Sandals*/ +('1073192', '7600', 'Shoes 3'), /*Polar Explorer Boots*/ +('1073193', '7400', 'Shoes 3'), /*Sweet Chocolate Dessert Shoes*/ +('1073194', '6400', 'Shoes 3'), /*Sweet Fresh Cream Dessert Shoes*/ +/*Page 7*/ +('1073195', '7100', 'Shoes 3'), /*Yellow Chick Shoes (M)*/ +('1073196', '7100', 'Shoes 3'), /*Yellow Chick Shoes (F)*/ +('1073237', '6000', 'Shoes 3'), /*Stitched Sneakers*/ +('1073238', '4900', 'Shoes 3'), /*Rabble Rouser Shoes (F)*/ +('1073239', '6000', 'Shoes 3'), /*Rabble Rouser Shoes (M)*/ +('1073240', '5000', 'Shoes 3'), /*Cat Cafe Kicks (M)*/ +('1073241', '3600', 'Shoes 3'), /*Cat Cafe Kicks (F)*/ +('1073242', '3800', 'Shoes 3'), /*Shadow Tactician Shoes*/ +('1073243', '3600', 'Shoes 3'), /*Puppy Love Samurai Shoes (M)*/ +/*Page 8*/ +('1073244', '4700', 'Shoes 3'), /*Puppy Love Samurai Shoes (F)*/ +('1073246', '4000', 'Shoes 3'), /*Gold Strap Shoes*/ +('1073247', '5000', 'Shoes 3'), /*Meow Shoes*/ +('1073216', '4700', 'Shoes 3'), /*Pop Star Shoes (M)*/ +('1073217', '6300', 'Shoes 3'), /*Oxford Shoes*/ +('1073218', '3400', 'Shoes 3'), /*Froggy Rainboots*/ +('1073219', '6400', 'Shoes 3'), /*Napoleonic Boots*/ +('1073222', '5600', 'Shoes 3'), /*Iron Mace Uniform Shoes (F)*/ +('1073223', '5200', 'Shoes 3'), /*Iron Mace Uniform Shoes (M)*/ +/*Page 9*/ +('1073226', '6400', 'Shoes 3'), /*Preppy Sprout Boaters*/ +('1073228', '6400', 'Shoes 3'), /*Forest Breeze Sandals*/ +('1073229', '4000', 'Shoes 3'), /*Red Flipflops*/ +('1073230', '8800', 'Shoes 3'), /*Blue Flipflops*/ +('1073264', '5600', 'Shoes 3'), /*Royal Guard Shoes (M)*/ +('1073265', '7400', 'Shoes 3'), /*Red Bear Winter Boots*/ +('1073266', '3200', 'Shoes 3'), /*World of Pink Shoes (M)*/ +('1073267', '6300', 'Shoes 3'), /*World of Pink Shoes (F)*/ +('1073268', '5200', 'Shoes 3'), /*Pink Bear Winter Boots*/ +/*Page 10*/ +('1073269', '4000', 'Shoes 3'), /*Alchemist Shoes*/ +('1073270', '8800', 'Shoes 3'), /*Homeless Cat Shoes*/ +('1073271', '4900', 'Shoes 3'), /*Kiddy Crayon Shoes*/ +('1073272', '4000', 'Shoes 3'), /*Tennis Shoes*/ +('1073273', '7600', 'Shoes 3'), /*Raindrop Boots*/ +('1073274', '5600', 'Shoes 3'), /*Super Summer Shoes (F)*/ +('1073275', '8800', 'Shoes 3'), /*Super Summer Shoes (M)*/ +('1073276', '3400', 'Shoes 3'), /*Ark Shoes*/ +('1073250', '4700', 'Shoes 3'), /*Warm Pink Bear Shoes*/ +/*Page 11*/ +('1073251', '4900', 'Shoes 3'), /*Warm Blue Bear Shoes*/ +('1073252', '3200', 'Shoes 3'), /*Strawberry Sneakers*/ +('1073253', '6400', 'Shoes 3'), /*Cadena Agent Shoes*/ +('1073254', '4000', 'Shoes 3'), /*Half Bandage*/ +('1073255', '8800', 'Shoes 3'), /*Soft Boots*/ +('1073258', '3600', 'Shoes 3'), /*Soft Snow Slippers*/ +('1073259', '6400', 'Shoes 3'), /*Captain Boots*/ +('1073261', '4900', 'Shoes 3'), /*Chunky Cable-Knit Shoes*/ +('1073262', '5200', 'Shoes 3'), /*Lunar New Year VIP Shoes*/ +/*Page 12*/ +('1073263', '3200', 'Shoes 3'), /*Royal Guard Shoes (F)*/ +('1073297', '5200', 'Shoes 3'), /*Crispy Carrot Flippers*/ +('1073298', '4700', 'Shoes 3'), /*Spring Green Slip-Ons*/ +('1073299', '3400', 'Shoes 3'), /*Traditional Thai Attire Shoes*/ +('1073302', '3200', 'Shoes 3'), /*Seafoam Coral Anklet*/ +('1073303', '7600', 'Shoes 3'), /*Starry Summer Night Shoes*/ +('1073304', '7100', 'Shoes 3'), /*Rock Spirit Slippers*/ +('1073305', '4700', 'Shoes 3'), /*Alliance Commander Shoes*/ +('1073308', '7100', 'Shoes 3'), /*Cutie Pie Trainers*/ +/*Page 13*/ +('1073309', '4900', 'Shoes 3'), /*Cutie Pie High-Tops*/ +('1073310', '8800', 'Shoes 3'), /*Heavenly Prayer Shoes*/ +('1073280', '5600', 'Shoes 3'), /*Candy Shoes*/ +('1073281', '4900', 'Shoes 3'), /*Maple Gumshoe's Gumshoes*/ +('1073282', '7400', 'Shoes 3'), /*Ball and Chain*/ +('1073283', '3800', 'Shoes 3'), /*Erda Shoes*/ +('1073284', '5600', 'Shoes 3'), /*Sakura Battle Costume Shoes*/ +('1073285', '5200', 'Shoes 3'), /*Tomoeda Middle School Male Shoes*/ +('1073286', '3200', 'Shoes 3'), /*Tomoeda Middle School Female Shoes*/ +/*Page 14*/ +('1073287', '3200', 'Shoes 3'), /*Syaoran Battle Costume Shoes*/ +('1073290', '3400', 'Shoes 3'), /*Clockwork Knight Shoes*/ +('1073291', '3600', 'Shoes 3'), /*Buddy Sneakers*/ +('1073292', '3400', 'Shoes 3'), /*Summer Story Shoes*/ +('1073328', '3400', 'Shoes 3'), /*Lunar New Year Pudgy Piggy Shoes*/ +('1073329', '6000', 'Shoes 3'), /*Sweet Shipmate Boaters (F)*/ +('1073330', '8800', 'Shoes 3'), /*Sweet Shipmate Boaters (M)*/ +('1073331', '7600', 'Shoes 3'), /*Hunny Bun Bear Slippers*/ +('1073335', '7400', 'Shoes 3'), /*Lavender Shearling Boots*/ +/*Page 15*/ +('1073338', '5600', 'Shoes 3'), /*Midnight Magician Shoes (M)*/ +('1073339', '7100', 'Shoes 3'), /*Midnight Magician Shoes (F)*/ +('1073341', '3200', 'Shoes 3'), /*Cursed Hunter Shoes*/ +('1073312', '7400', 'Shoes 3'), /*Delinquent Bear Shoes*/ +('1073315', '4900', 'Shoes 3'), /*Lovely Plaid Shoes*/ +('1073316', '7400', 'Shoes 3'), /*Sweet Deer Anklet*/ +('1073317', '5000', 'Shoes 3'), /*Little Star Cocoon Anklet*/ +('1073319', '7100', 'Shoes 3'), /*Cozy Winter Clothes Shoes*/ +('1073320', '5200', 'Shoes 3'), /*Regal Romance Shoes*/ +/*Page 16*/ +('1073321', '7600', 'Shoes 3'), /*Throwback Loafers*/ +('1073322', '7400', 'Shoes 3'), /*Snowflake Snowboots*/ +('1073323', '7400', 'Shoes 3'), /*Crown Fitness Trainers*/ +('1073324', '5600', 'Shoes 3'), /*Frilly Pink Pajama Slippers (F) */ +('1073325', '4700', 'Shoes 3'), /*Silly Blue Pajama Slippers (M)*/ +('1073326', '3200', 'Shoes 3'), /*Cobalt Filigree Mary Janes (F)*/ +('1073327', '7100', 'Shoes 3'), /*Cobalt Filigree Oxfords (M)*/ +('1073347', '6400', 'Shoes 3'), /*Blue Flame Hellion Shoes*/ +('1073348', '6000', 'Shoes 3'), /*Starry Light Wedges*/ +/*Page 17*/ +('1073349', '6400', 'Shoes 3'), /*Starry Light Boots*/ +('1073354', '6000', 'Shoes 3'), /*Fox Fire Anklet*/ +('1073357', '6400', 'Shoes 3'), /*Red Lotus Spirit Walker's Geta*/ + + + + + +/* Glove */ +/*Page 1*/ +('1082040', '7600', 'Glove'), /*Red Boxing Gloves*/ +('1082041', '7100', 'Glove'), /*Blue Boxing Gloves*/ +('1082077', '4900', 'Glove'), /*White Bandage*/ +('1082078', '8800', 'Glove'), /*Brown Bandage*/ +('1082079', '7600', 'Glove'), /*Black Bandage*/ +('1082057', '3200', 'Glove'), /*Brown Baseball Glove*/ +('1082058', '7100', 'Glove'), /*Blue Baseball Glove*/ +('1082101', '8800', 'Glove'), /*Santa Gloves*/ +('1082102', '3600', 'Glove'), /*Transparent Gloves*/ +/*Page 2*/ +('1082113', '4900', 'Glove'), /*Hair-Cutter Gloves*/ +('1082124', '7600', 'Glove'), /*M-Forcer Gloves*/ +('1082161', '5600', 'Glove'), /*Star Gloves*/ +('1082162', '8800', 'Glove'), /*Love Gloves*/ +('1082165', '7100', 'Glove'), /*White Rabbit Gloves*/ +('1082166', '3800', 'Glove'), /*Nero Gloves*/ +('1082169', '4000', 'Glove'), /*Moon Bunny Gloves*/ +('1082170', '5000', 'Glove'), /*Rose Crystal Watch*/ +('1082171', '5600', 'Glove'), /*Blue Watch*/ +/*Page 3*/ +('1082172', '3800', 'Glove'), /*Snowflake Gloves*/ +('1082173', '3200', 'Glove'), /*Lightning Gloves*/ +('1082155', '3200', 'Glove'), /*Snowman Gloves*/ +('1082156', '4000', 'Glove'), /*Teddy Bear Gloves*/ +('1082157', '4700', 'Glove'), /*Skull Gloves*/ +('1082224', '7400', 'Glove'), /*Tania Gloves*/ +('1082225', '3800', 'Glove'), /*Mercury Gloves*/ +('1082227', '7600', 'Glove'), /*Skull Tattoo*/ +('1082229', '8800', 'Glove'), /*Heart Ribbon Glove*/ +/*Page 4*/ +('1082231', '3200', 'Glove'), /*Luxury Wristwatch*/ +('1082233', '3400', 'Glove'), /*Moomoo Gloves*/ +('1082261', '6400', 'Glove'), /*Freud's Gloves*/ +('1082263', '8800', 'Glove'), /*Bunny Gloves*/ +('1082267', '7600', 'Glove'), /*Cat Set Mittens*/ +('1082268', '3600', 'Glove'), /*Dual Blade Gloves*/ +('1082247', '3200', 'Glove'), /*Cutie Birk Gloves*/ +('1082249', '7400', 'Glove'), /*Neon Amulet*/ +('1082250', '7400', 'Glove'), /*Treacherous Wolf Gloves*/ +/*Page 5*/ +('1082251', '4000', 'Glove'), /*Rock Chain Armlet*/ +('1082253', '5200', 'Glove'), /*Neon Sign Amulet*/ +('1082255', '4900', 'Glove'), /*Maple Racing Glove*/ +('1082272', '4900', 'Glove'), /*Evan Golden Gloves*/ +('1082273', '6300', 'Glove'), /*Hawkeye Ocean Gloves*/ +('1082274', '5200', 'Glove'), /*Evan Gloves*/ +('1082282', '3400', 'Glove'), /*Battle Mage Gloves*/ +('1082310', '6000', 'Glove'), /*Winter 2011 Moon Bunny Gloves*/ +('1082312', '3600', 'Glove'), /*Rainbow Bracelet*/ +/*Page 6*/ +('1082421', '8800', 'Glove'), /*Blue Dragon Gloves*/ +('1082422', '3200', 'Glove'), /*Red Dragon Gloves*/ +('1082423', '5200', 'Glove'), /*Intergalactic Gloves*/ +('1082407', '8800', 'Glove'), /*Dark Force Gloves */ +('1082408', '3400', 'Glove'), /*Elven Spirit Gloves*/ +('1082448', '4700', 'Glove'), /*Arabian Gold Bracelet*/ +('1082493', '6000', 'Glove'), /*Harp Seal Doll Gloves*/ +('1082495', '6400', 'Glove'), /*Cat Lolita Gloves*/ +('1082517', '6000', 'Glove'), /*Golf Gloves*/ +/*Page 7*/ +('1082519', '3200', 'Glove'), /*Purple Dinosaur Gloves*/ +('1082520', '3200', 'Glove'), /*Ramling Fur Glove*/ + +('1082524', '5000', 'Glove'), /*Blavy Angel Bangle*/ +('1082525', '3200', 'Glove'), /*Succubus Gloves*/ +('1082527', '5200', 'Glove'), /*Golf Gloves*/ +('1082500', '7400', 'Glove'), /*Dark Devil Gloves*/ +('1082501', '6300', 'Glove'), /*Dark Force Gloves*/ +('1082502', '7400', 'Glove'), /*Blue Point Kitty Gloves*/ +/*Page 8*/ +('1082503', '5600', 'Glove'), /*Featherly Angel Gloves*/ +('1082504', '4000', 'Glove'), /*Kitty Gloves*/ +('1082505', '6000', 'Glove'), /*Xenon Neo-Tech Gloves*/ +('1082511', '3600', 'Glove'), /*Green Dinosaur Gloves*/ +('1082548', '5600', 'Glove'), /*Star Bracelet*/ +('1082549', '7100', 'Glove'), /*Chicken Glovaroo*/ +('1082550', '3600', 'Glove'), /*White Ghostly Cloth*/ +('1082551', '7600', 'Glove'), /*Chocoram Doll Gloves*/ +('1082552', '3800', 'Glove'), /*Puffram Gloves*/ +/*Page 9*/ +('1082554', '8800', 'Glove'), /*Princess of Time Gloves*/ +('1082555', '4900', 'Glove'), /*Fairy Spark*/ +('1082558', '3600', 'Glove'), /*Kirito's Gloves*/ + + +('1082580', '3400', 'Glove'), /*Pony Gloves*/ +('1082581', '5600', 'Glove'), /*Chocolate Ribbon*/ +('1082585', '5600', 'Glove'), /*Guardian Gloves*/ +('1082587', '8800', 'Glove'), /*Pink Panda Gloves*/ +/*Page 10*/ +('1082588', '6300', 'Glove'), /*Rainbow Marbles*/ + +('1082560', '7100', 'Glove'), /*Dark Devil Gloves*/ +('1082561', '7600', 'Glove'), /*Freud's Gloves*/ +('1082563', '7600', 'Glove'), /*Heathcliff's Gloves*/ +('1082564', '7600', 'Glove'), /*Yui's Gloves*/ +('1082565', '7600', 'Glove'), /*Chocolate Ribbon*/ +('1082571', '3800', 'Glove'), /*Mr. K's Cat Gloves*/ +('1082620', '5600', 'Glove'), /*Aloha Flower Accessory*/ +/*Page 11*/ +('1082623', '7100', 'Glove'), /*Bright Angel Gloves*/ +('1082592', '3800', 'Glove'), /*Burning Ghost Wristband*/ +('1082641', '3400', 'Glove'), /*Blue Bird Gloves*/ +('1082642', '5600', 'Glove'), /*Snowman Gloves*/ +('1082643', '4000', 'Glove'), /*Cutie Birk Gloves*/ +('1082624', '3200', 'Glove'), /*Dark Devil Gloves*/ +('1082631', '8800', 'Glove'), /*Glowing Bracelet*/ +('1082632', '5000', 'Glove'), /*Worn Skull Gloves*/ +('1082633', '4900', 'Glove'), /*Skull Gloves*/ +/*Page 12*/ +('1082634', '6400', 'Glove'), /*Dinofrog Gloves*/ +('1082672', '6400', 'Glove'), /*Arctic Mittens*/ +('1082683', '5000', 'Glove'), /*Santa Gloves*/ +('1082684', '5600', 'Glove'), /*Beaky Owl Gloves*/ +('1082685', '7100', 'Glove'), /*Winter Garden Gloves*/ +('1082657', '3200', 'Glove'), /*Blue Panda Doll Gloves*/ +('1082666', '4700', 'Glove'), /*White Ursus Gloves*/ +('1082667', '7100', 'Glove'), /*Brown Ursus Gloves*/ +('1082668', '7600', 'Glove'), /*Black Ursus Gloves*/ +/*Page 13*/ +('1082704', '3400', 'Glove'), /*Sweet Penguin Gloves*/ +('1082705', '6000', 'Glove'), /*Cozy Penguin Gloves*/ +('1082712', '7100', 'Glove'), /*Felt's Gloves*/ +('1082713', '6300', 'Glove'), /*Winter Bunny Gloves (Teal)*/ +('1082714', '6400', 'Glove'), /*Winter Bunny Gloves (Pink)*/ +('1082715', '4700', 'Glove'), /*Chick Gloves*/ +('1082717', '6300', 'Glove'), /*Yellow Chick Gloves (M)*/ +('1082718', '7600', 'Glove'), /*Yellow Chick Gloves (F)*/ +('1082689', '5600', 'Glove'), /*Paw Gloves*/ +/*Page 14*/ +('1082690', '5000', 'Glove'), /*Flower Star*/ +('1082691', '3200', 'Glove'), /*Flower Star*/ +('1082692', '3600', 'Glove'), /*Candybear Watch*/ +('1082693', '7600', 'Glove'), /*Racing Elephant Gloves*/ +('1082694', '4900', 'Glove'), /*Villain Gloves*/ +('1082700', '5200', 'Glove'), /*Bubble Bands*/ +('1082701', '5000', 'Glove'), /*Pony Gloves*/ +('1082702', '3400', 'Glove'), /*Kamaitachi Gloves*/ +('1082703', '4900', 'Glove'), /*Bichon Gloves*/ +/*Page 15*/ +('1082737', '7600', 'Glove'), /*LEONARD Gloves*/ +('1082738', '7400', 'Glove'), /*SALLY Gloves*/ +('1082741', '7600', 'Glove'), /*Fox Fire Sweeping Sleeves*/ +('1082720', '6400', 'Glove'), /*Elizabethan Gloves*/ +('1082721', '5600', 'Glove'), /*Pink Elephant Gloves*/ +('1082722', '4700', 'Glove'), /*Meow Gloves*/ +('1082723', '5600', 'Glove'), /*Busy Penguin Gloves*/ +('1082724', '7400', 'Glove'), /*Worn Skull Gloves*/ +('1082725', '6300', 'Glove'), /*Santa Gloves*/ +/*Page 16*/ +('1082726', '7400', 'Glove'), /*Royal Guard Gloves (F)*/ +('1082727', '6400', 'Glove'), /*Royal Guard Gloves (M)*/ +('1082728', '3600', 'Glove'), /*Homeless Cat Gloves*/ +('1082730', '5000', 'Glove'), /*Catkerchief Gloves*/ +('1082731', '6000', 'Glove'), /*Delinquent Bear Gloves*/ +('1082733', '8800', 'Glove'), /*Santa Gloves*/ +('1082734', '3800', 'Glove'), /*Snowman Gloves*/ +('1082735', '6300', 'Glove'), /*CONY Gloves*/ +('1080000', '3600', 'Glove'), /*White Ninja Gloves*/ +/*Page 17*/ +('1080001', '4900', 'Glove'), /*Wedding Gloves*/ +('1080007', '8800', 'Glove'), /*크리스토프 장갑*/ +('1080008', '6300', 'Glove'), /*Whip Cream Pon Pon*/ +('1080009', '4000', 'Glove'), /*Penguin Gloves*/ +('1081013', '3400', 'Glove'), /*엘사 장갑*/ +('1081014', '3800', 'Glove'), /*Whip Cream Bon Bon*/ +('1081015', '4700', 'Glove'), /*Penguin Gloves*/ +('1081000', '6400', 'Glove'), /*Red Ninja Gloves*/ +('1081001', '6000', 'Glove'), /*Blue Ninja Gloves*/ +/*Page 18*/ +('1081002', '3200', 'Glove'), /*Wedding Gloves*/ +('1081003', '7100', 'Glove'), /*White Cat Gloves*/ +('1081004', '8800', 'Glove'), /*Black Cat Gloves*/ +('1081006', '4900', 'Glove'), /*Elizabeth Gloves*/ +('1081007', '5200', 'Glove'), /*Elizabeth Gloves*/ + + + + + +/* Ring */ +/*Page 1*/ +('1114401', '7100', 'Ring'), /*The Ring of Torment*/ +('1114400', '5600', 'Ring'), /*Firestarter Ring*/ +('1115003', '3200', 'Ring'), /*Carrot Rabbit Chat Ring*/ +('1115005', '7400', 'Ring'), /*Pineapple Chat Ring*/ +('1115004', '7400', 'Ring'), /*Honey Bee Chat Ring*/ +('1115007', '4000', 'Ring'), /*Black Hat Chat Ring*/ +('1115006', '4000', 'Ring'), /*Princess Diary Chat Ring*/ +('1115025', '3800', 'Ring'), /*Shark Chat Ring*/ +('1115024', '3400', 'Ring'), /*Colorbug Chat Ring*/ +/*Page 2*/ +('1115027', '5200', 'Ring'), /*Red Cloud Chat Ring*/ +('1115026', '3200', 'Ring'), /*Cat Skein Chat Ring*/ +('1115029', '7100', 'Ring'), /*DJ JM Chat Ring*/ +('1115028', '3200', 'Ring'), /*V Chat Ring*/ +('1115031', '6000', 'Ring'), /*Pink Bean Chat Ring*/ +('1115030', '5000', 'Ring'), /*Pink Bean Chocolate Chat Ring*/ +('1115033', '8800', 'Ring'), /*진지한 말풍선 반지*/ +('1115032', '3200', 'Ring'), /*Spider Chat Ring*/ +('1115035', '5600', 'Ring'), /*Starry Night Orchid Chat Ring*/ +/*Page 3*/ +('1115034', '7400', 'Ring'), /*Christmas Chat Ring*/ +('1115037', '4700', 'Ring'), /*Christmas Wreath Chat Ring*/ +('1115036', '6300', 'Ring'), /*Override Chat Ring*/ +('1115039', '7600', 'Ring'), /*Ladybug Chat Ring*/ +('1115038', '8800', 'Ring'), /*Baby Chick Chat Ring*/ +('1115009', '6400', 'Ring'), /*Blue Hat Chat Ring*/ +('1115008', '4900', 'Ring'), /*Green Hat Chat Ring*/ +('1115011', '6400', 'Ring'), /*Rascally Monster Chat Ring*/ +('1115010', '7400', 'Ring'), /*Good Night Monster Chat Ring*/ +/*Page 4*/ +('1115013', '3200', 'Ring'), /*MVP Chat Ring (Gold)*/ +('1115012', '5200', 'Ring'), /*MVP Chat Ring (Silver)*/ +('1115015', '7100', 'Ring'), /*Snowman's Red Scarf Chat Ring*/ +('1115014', '8800', 'Ring'), /*MVP Chat Ring (Diamond)*/ +('1115017', '5000', 'Ring'), /*Christmas Chat Ring*/ +('1115016', '7400', 'Ring'), /*Heroes Slumbering Dragon Island Chat Ring*/ +('1115019', '8800', 'Ring'), /*Heroes Damien Chat Ring*/ +('1115018', '5200', 'Ring'), /*Mighty Banana Chat Ring*/ +('1115021', '7100', 'Ring'), /*Heroes Black Mage Chat Ring*/ +/*Page 5*/ +('1115020', '3600', 'Ring'), /*Heroes Transcendence Stone Chat Ring*/ +('1115023', '4000', 'Ring'), /*Sunshine Ranch Chat Ring*/ +('1115022', '5000', 'Ring'), /*Bunny Chat Ring*/ +('1115057', '4700', 'Ring'), /*Little Poodle Chat Ring*/ +('1115056', '5600', 'Ring'), /*Ark Chat Ring*/ +('1115059', '5600', 'Ring'), /*Plum Blossom Chat Ring*/ +('1115058', '3600', 'Ring'), /*Corgi Chat Ring*/ +('1115061', '3400', 'Ring'), /*Choco Chat Ring*/ +('1115060', '4700', 'Ring'), /*White Chocolate Chat Ring*/ +/*Page 6*/ +('1115063', '3200', 'Ring'), /*Baby Chick Chat Ring*/ +('1115062', '4000', 'Ring'), /*Children's Day Chat Ring*/ +('1115065', '5000', 'Ring'), /*Clockwork Knight Chat Ring*/ +('1115066', '3600', 'Ring'), /*Note Chat Ring*/ +('1115069', '8800', 'Ring'), /*Peach Blossom Fox Chat Ring*/ +('1115068', '8800', 'Ring'), /*Frosty Cherry Blossom Chat Ring*/ +('1115071', '5000', 'Ring'), /*Golden Piggy Chat Ring*/ +('1115041', '4700', 'Ring'), /*Camellia's Sword Chat Ring*/ +('1115040', '5000', 'Ring'), /*Dark Magician Chat Ring*/ +/*Page 7*/ +('1115043', '7600', 'Ring'), /*보안관 말풍선 반지*/ +('1115042', '3400', 'Ring'), /*Mustache Chat Ring*/ +('1115045', '6000', 'Ring'), /*Nova Chat Ring*/ +('1115044', '7400', 'Ring'), /*Glistening Eluna Chat Ring*/ +('1115047', '3600', 'Ring'), /*Jam Chat Ring*/ +('1115046', '8800', 'Ring'), /*Honey Pot Chat Ring*/ +('1115049', '4700', 'Ring'), /*Wave Chat Ring*/ +('1115048', '3400', 'Ring'), /*Falling Darkness Chat Ring*/ +('1115051', '6400', 'Ring'), /*Palm Leaf Chat Ring*/ +/*Page 8*/ +('1115050', '5000', 'Ring'), /*Flutterby Dream Chat Ring*/ +('1115053', '3600', 'Ring'), /*Pea Chat Ring*/ +('1115052', '5600', 'Ring'), /*Moonlight Bunny Chat Ring*/ +('1115055', '7400', 'Ring'), /*Mobile Mansion Chat Ring*/ +('1115054', '3600', 'Ring'), /*Vampire Chat Ring*/ +('1115101', '4900', 'Ring'), /*MVP Label Ring (Gold)*/ +('1115100', '3800', 'Ring'), /*MVP Label Ring (Silver)*/ +('1115103', '3600', 'Ring'), /*Heroes Slumbering Dragon Island Label Ring*/ +('1115102', '3600', 'Ring'), /*MVP Label Ring (Diamond)*/ +/*Page 9*/ +('1115073', '7600', 'Ring'), /*Adventure Chat Ring*/ +('1115072', '3400', 'Ring'), /*'80s Jelly Heart Chat Ring*/ +('1115075', '3800', 'Ring'), /*CONY Chat Ring*/ +('1115074', '5000', 'Ring'), /*BROWN Chat Ring*/ +('1115077', '7600', 'Ring'), /*CHOCO Chat Ring*/ +('1115076', '7400', 'Ring'), /*LEONARD Chat Ring*/ +('1115079', '5000', 'Ring'), /*Grim Reaper Chat Ring*/ +('1115078', '7400', 'Ring'), /*SALLY Chat Ring*/ +('1115081', '6400', 'Ring'), /*Drowsy Rabbit Chat Ring*/ +/*Page 10*/ +('1115080', '5600', 'Ring'), /*Bunny Blossom Chat Ring*/ +('1115082', '3200', 'Ring'), /*Piggy Chat Ring*/ +('1115121', '3600', 'Ring'), /*Spider Label Ring*/ +('1115120', '4900', 'Ring'), /*Pink Bean Label Ring*/ +('1115123', '3600', 'Ring'), /*Christmas Label Ring*/ +('1115122', '5600', 'Ring'), /*진지한 명찰 반지*/ +('1115125', '6300', 'Ring'), /*Override Label Ring*/ +('1115124', '7400', 'Ring'), /*Starry Night Orchid Label Ring*/ +('1115127', '6400', 'Ring'), /*Baby Chick Label Ring*/ +/*Page 11*/ +('1115126', '7600', 'Ring'), /*Christmas Wreath Label Ring*/ +('1115129', '7100', 'Ring'), /*Dark Magician Label Ring*/ +('1115128', '6400', 'Ring'), /*Ladybug Label Ring*/ +('1115131', '4000', 'Ring'), /*Mustache Label Ring*/ +('1115130', '3200', 'Ring'), /*Camellia's Sword Label Ring*/ +('1115133', '5600', 'Ring'), /*Glistening Eluna Label Ring*/ +('1115132', '4900', 'Ring'), /*보안관 명찰 반지*/ +('1115135', '6300', 'Ring'), /*Honey Pot Label Ring*/ +('1115134', '7600', 'Ring'), /*Nova Label Ring*/ +/*Page 12*/ +('1115105', '5200', 'Ring'), /*Mighty Banana Label Ring*/ +('1115104', '3600', 'Ring'), /*Christmas Label Ring*/ +('1115109', '5600', 'Ring'), /*Heroes Transcendence Stone Label Ring*/ +('1115108', '5600', 'Ring'), /*Heroes Damien Label Ring*/ +('1115111', '7400', 'Ring'), /*Bunny Label Ring*/ +('1115110', '6400', 'Ring'), /*Heroes Black Mage Label Ring*/ +('1115113', '6300', 'Ring'), /*Colorbug Label Ring*/ +('1115112', '4000', 'Ring'), /*Sunshine Ranch Label Ring*/ +('1115115', '7400', 'Ring'), /*Cat Skein Label Ring*/ +/*Page 13*/ +('1115114', '8800', 'Ring'), /*Shark Label Ring*/ +('1115117', '5600', 'Ring'), /*V Label Ring*/ +('1115116', '5000', 'Ring'), /*Red Cloud Label Ring*/ +('1115119', '3800', 'Ring'), /*Pink Bean Chocolate Label Ring*/ +('1115118', '8800', 'Ring'), /*DJ JM Label Ring*/ +('1115152', '6000', 'Ring'), /*Baby Chick Label Ring*/ +('1115155', '6400', 'Ring'), /*Note Label Ring*/ +('1115154', '8800', 'Ring'), /*Clockwork Knight Label Ring*/ +('1115157', '4700', 'Ring'), /*Snowy Cherry Blossom Label Ring*/ +/*Page 14*/ +('1115158', '4000', 'Ring'), /*Peach Blossom Fox Label Ring*/ +('1115161', '7100', 'Ring'), /*'80s Jelly Heart Label Ring*/ +('1115160', '4700', 'Ring'), /*Golden Piggy Label Ring*/ +('1115163', '7600', 'Ring'), /*BROWN Label Ring*/ +('1115162', '4900', 'Ring'), /*Adventure Label Ring*/ +('1115165', '4900', 'Ring'), /*LEONARD Label Ring*/ +('1115164', '3200', 'Ring'), /*CONY Label Ring*/ +('1115167', '4700', 'Ring'), /*SALLY Label Ring*/ +('1115166', '3800', 'Ring'), /*CHOCO Label Ring*/ +/*Page 15*/ +('1115137', '3400', 'Ring'), /*Falling Darkness Label Ring*/ +('1115136', '7600', 'Ring'), /*Jam Label Ring*/ +('1115139', '4900', 'Ring'), /*Flutterby Dream Label Ring*/ +('1115138', '8800', 'Ring'), /*Wave Label Ring*/ +('1115141', '6000', 'Ring'), /*Moonlight Bunny Label Ring*/ +('1115140', '6300', 'Ring'), /*Palm Leaf Label Ring*/ +('1115143', '7100', 'Ring'), /*Vampire Label Ring*/ +('1115142', '4900', 'Ring'), /*Pea Label Ring*/ +('1115145', '6400', 'Ring'), /*Ark Label Ring*/ +/*Page 16*/ +('1115144', '3400', 'Ring'), /*Mobile Mansion Label Ring*/ +('1115147', '7600', 'Ring'), /*Corgi Label Ring*/ +('1115146', '7400', 'Ring'), /*Little Poodle Label Ring*/ +('1115149', '6000', 'Ring'), /*White Chocolate Label Ring*/ +('1115148', '8800', 'Ring'), /*Plum Blossom Label Ring*/ +('1115151', '6000', 'Ring'), /*Children's Day Label Ring*/ +('1115150', '5200', 'Ring'), /*Choco Label Ring*/ +('1115169', '5600', 'Ring'), /*Bunny Blossom Label Ring*/ +('1115168', '5600', 'Ring'), /*Grim Reaper Label Ring*/ +/*Page 17*/ +('1115171', '3400', 'Ring'), /*Piggy Label Ring*/ +('1115170', '4900', 'Ring'), /*Drowsy Rabbit Label Ring*/ +('1112016', '4700', 'Ring'), /*Snowflake Ring*/ +('1112000', '5000', 'Ring'), /*Sparkling Ring*/ +('1112001', '5000', 'Ring'), /*Promise Ring*/ +('1112002', '5200', 'Ring'), /*Cloud Promise Ring*/ +('1112003', '3400', 'Ring'), /*Cupid Ring*/ +('1112005', '7600', 'Ring'), /*Venus Fireworks*/ +('1112006', '7600', 'Ring'), /*Crossed Hearts*/ +/*Page 18*/ +('1112007', '7600', 'Ring'), /*Mistletoe Promise Ring*/ +('1112012', '5600', 'Ring'), /*Rose Promise Ring*/ +('1112013', '6400', 'Ring'), /*Firery Love String Promise Ring*/ +('1112014', '6400', 'Ring'), /*Flaming Red Lips Ring*/ +('1112015', '3200', 'Ring'), /*Illumination Couples Ring*/ +('1112112', '3600', 'Ring'), /*Beach Label Ring*/ +('1112113', '7400', 'Ring'), /*Chocolate Label Ring*/ +('1112114', '6000', 'Ring'), /*Pink Candy Label Ring*/ +('1112115', '5200', 'Ring'), /*MapleBowl Label Ring */ +/*Page 19*/ +('1112116', '5200', 'Ring'), /*White Cloud Label Ring*/ +('1112117', '3600', 'Ring'), /*Rainbow Label Ring*/ +('1112118', '6300', 'Ring'), /*Rainbow Label RingaCoke Label Ring*/ +('1112119', '3800', 'Ring'), /*Coke (Red) Label Ring*/ +('1112120', '3200', 'Ring'), /*Coke (White) Label Ring*/ +('1112121', '3400', 'Ring'), /*Gingerman Label Ring*/ +('1112122', '6000', 'Ring'), /*Deluxe Rainbow Label Ring*/ +('1112123', '5200', 'Ring'), /*Red Pencil Label Ring*/ +('1112124', '3400', 'Ring'), /*Blue Pencil Label Ring*/ +/*Page 20*/ +('1112125', '7100', 'Ring'), /*Green Pencil Label Ring*/ +('1112126', '6300', 'Ring'), /*Brown Teddy Label Ring*/ +('1112127', '3800', 'Ring'), /*Welcome Back Ring*/ +('1112100', '7400', 'Ring'), /*White Label Ring*/ +('1112101', '7600', 'Ring'), /*Blue Label Ring*/ +('1112102', '7600', 'Ring'), /*Blue Label Ring 2*/ +('1112103', '3400', 'Ring'), /*The Legendary Gold Ring*/ +('1112104', '5200', 'Ring'), /*Bubbly Label Ring*/ +('1112105', '8800', 'Ring'), /*Pink-Ribboned Label Ring*/ +/*Page 21*/ +('1112106', '5000', 'Ring'), /*Blue-Ribboned Label Ring*/ +('1112107', '7100', 'Ring'), /*Skull Label Ring*/ +('1112108', '5600', 'Ring'), /*Butterfly Label Ring*/ +('1112109', '7100', 'Ring'), /*Scoreboard Label Ring*/ +('1112110', '4900', 'Ring'), /*SK Basketball Team Label Ring*/ +('1112111', '4000', 'Ring'), /*KTF Basketball Team Label Ring*/ +('1112144', '7100', 'Ring'), /*Cat-ger Label Ring*/ +('1112145', '4700', 'Ring'), /*Romantic Lace Label Ring*/ +('1112146', '3400', 'Ring'), /*Green Apple Label Ring*/ +/*Page 22*/ +('1112148', '3200', 'Ring'), /*Mister Mustache Label Ring*/ +('1112149', '4700', 'Ring'), /*Naver Label Ring*/ +('1112150', '3200', 'Ring'), /*Angel Label Ring*/ +('1112151', '5600', 'Ring'), /*Strawberry Cake Label Ring*/ +('1112152', '3400', 'Ring'), /*Blue Strawberry Basket Label Ring*/ +('1112153', '3400', 'Ring'), /*Strawberry Label Ring*/ +('1112154', '7400', 'Ring'), /*Moon Bunny Label Ring*/ +('1112155', '5600', 'Ring'), /*Frog Label Ring*/ +('1112156', '6300', 'Ring'), /*Oink Label Ring*/ +/*Page 23*/ +('1112157', '4700', 'Ring'), /*Blue Beard Label Ring*/ +('1112159', '3200', 'Ring'), /*Diamond Label Ring*/ +('1112129', '6000', 'Ring'), /*German Label Ring*/ +('1112130', '6400', 'Ring'), /*Dutch Label Ring*/ +('1112131', '4900', 'Ring'), /*French Label Ring*/ +('1112132', '4900', 'Ring'), /*British Label Ring*/ +('1112134', '4900', 'Ring'), /*Bamboo Name Tag Ring*/ +('1112135', '6000', 'Ring'), /*Ink-and-Wash Painting Name Tag Ring*/ +('1112136', '4700', 'Ring'), /*Sausage Ring*/ +/*Page 24*/ +('1112137', '6000', 'Ring'), /*Mountain Dew Label Ring*/ +('1112141', '4000', 'Ring'), /*Red Rose Label Ring*/ +('1112142', '7400', 'Ring'), /*Mummy Label Ring*/ +('1112143', '7100', 'Ring'), /*Luxury Pearl Label Ring*/ +('1112176', '6300', 'Ring'), /*G Clef Label Ring*/ +('1112177', '3800', 'Ring'), /*Attack on Titan Label Ring*/ +('1112178', '5600', 'Ring'), /*Snow Day Dream Label Ring*/ +('1112179', '7100', 'Ring'), /*Snowy Christmas Label Ring*/ +('1112180', '6400', 'Ring'), /*Kinship Label Ring*/ +/*Page 25*/ +('1112181', '7100', 'Ring'), /*Sheep Label Ring*/ +('1112182', '4000', 'Ring'), /*Baby Label Ring*/ +('1112183', '8800', 'Ring'), /*Meadow Sheep Label Ring*/ +('1112184', '6000', 'Ring'), /*Squishy Pink Label Ring*/ +('1112190', '7400', 'Ring'), /*Carrot Rabbit Label Ring*/ +('1112191', '6400', 'Ring'), /*Honey Bee Label Ring*/ +('1112160', '3600', 'Ring'), /*Watermelon Label Ring*/ +('1112161', '5000', 'Ring'), /*Quack Quack Label Ring*/ +('1112162', '3400', 'Ring'), /*Island Travel Name Tag Ring*/ +/*Page 26*/ +('1112163', '5200', 'Ring'), /*Starring Me Label Ring*/ +('1112164', '5000', 'Ring'), /*Sweet Summer Label Ring*/ +('1112165', '5200', 'Ring'), /*Green Forest Label Ring*/ +('1112166', '3800', 'Ring'), /*Baby Label Ring*/ +('1112170', '4000', 'Ring'), /*Star Label Ring*/ +('1112171', '8800', 'Ring'), /*White Puppy Label Ring*/ +('1112172', '5600', 'Ring'), /*Brown Puppy Label Ring*/ +('1112173', '7400', 'Ring'), /*Bunny Label Ring*/ +('1112208', '7400', 'Ring'), /*Skull Quote Ring*/ +/*Page 27*/ +('1112209', '3200', 'Ring'), /*Blue-Hearted Quote Ring*/ +('1112210', '3400', 'Ring'), /*Gold-Yellow Quote Ring*/ +('1112211', '6000', 'Ring'), /*Pink Lady Quote Ring*/ +('1112212', '7100', 'Ring'), /*Silver-Blue Quote Ring*/ +('1112213', '4900', 'Ring'), /*Gold-Yellow Quote Ring 2*/ +('1112214', '6400', 'Ring'), /*Pink Lady Quote Ring 2*/ +('1112215', '7400', 'Ring'), /*Blue Marine Quote Ring*/ +('1112216', '6000', 'Ring'), /*Kitty Quote Ring*/ +('1112217', '3200', 'Ring'), /*Paw-Print Quote Ring*/ +/*Page 28*/ +('1112218', '6400', 'Ring'), /*Teddy Bear Quote Ring*/ +('1112219', '4000', 'Ring'), /*Scoreboard Quote Ring*/ +('1112220', '3200', 'Ring'), /*SK Basketball Team Quote Ring*/ +('1112221', '3200', 'Ring'), /*KTF Basketball Team Quote Ring*/ +('1112222', '7100', 'Ring'), /*Starflower Ring*/ +('1112223', '4000', 'Ring'), /*Beach Quote Ring*/ +('1112192', '7100', 'Ring'), /*Pineapple Label Ring*/ +('1112193', '4700', 'Ring'), /*Princess Diary Label Ring*/ +('1112194', '6400', 'Ring'), /*Black Hat Label Ring*/ +/*Page 29*/ +('1112195', '5000', 'Ring'), /*Green Hat Label Ring*/ +('1112196', '5000', 'Ring'), /*Blue Hat Label Ring*/ +('1112197', '4900', 'Ring'), /*Good Night Monster Label Ring*/ + + + +/*Page 1*/ +('1112198', '7100', 'Ring 2'), /*Rascally Monster Label Ring*/ +('1112199', '5200', 'Ring 2'), /*Snowman's Red Scarf Label Ring*/ +('1112200', '4000', 'Ring 2'), /*Pink Quote Ring*/ +('1112201', '8800', 'Ring 2'), /*Pink-Hearted Quote Ring*/ +('1112202', '4000', 'Ring 2'), /*Blue Quote Ring*/ +('1112203', '3400', 'Ring 2'), /*The Golden Fly Ring*/ +('1112204', '4000', 'Ring 2'), /*Pink-Flowered Quote Ring*/ +('1112205', '3800', 'Ring 2'), /*Blue-Flowered Quote Ring*/ +('1112206', '4900', 'Ring 2'), /*Pink-Ribboned Quote Ring*/ +/*Page 2*/ +('1112207', '5000', 'Ring 2'), /*Blue-Ribboned Quote Ring*/ +('1112240', '4000', 'Ring 2'), /*Mountain Dew Quote Ring*/ +('1112244', '4700', 'Ring 2'), /*Darkness Bat Ring*/ +('1112248', '7600', 'Ring 2'), /*[MS Custom] Pink Quote Ring*/ +('1112249', '7600', 'Ring 2'), /*[MS Custom] Blue-Flowered Quote Ring*/ +('1112250', '7100', 'Ring 2'), /*[MS Custom]Pink-Flowered Quote Ring*/ +('1112252', '7600', 'Ring 2'), /*Red Rose Chat Ring*/ +('1112253', '5200', 'Ring 2'), /*Mummy Word Bubble Ring*/ +('1112254', '5600', 'Ring 2'), /*Luxury Pearl Word Bubble Ring*/ +/*Page 3*/ +('1112224', '3800', 'Ring 2'), /*Chocolate Quote Ring*/ +('1112225', '5200', 'Ring 2'), /*Pink Candy Quote Ring*/ +('1112226', '5600', 'Ring 2'), /*White Cloud Quote Ring*/ +('1112227', '7600', 'Ring 2'), /*Rainbow Quote Ring*/ +('1112228', '3200', 'Ring 2'), /*Coke Quote Ring*/ +('1112229', '5200', 'Ring 2'), /*Coke (Red) Quote Ring*/ +('1112230', '5200', 'Ring 2'), /*Coke (White) Quote Ring*/ +('1112231', '6000', 'Ring 2'), /*Gingerman Quote Ring*/ +('1112232', '5200', 'Ring 2'), /*Deluxe Rainbow Quote Ring*/ +/*Page 4*/ +('1112233', '6400', 'Ring 2'), /*Red Notebook Quote Ring*/ +('1112234', '7600', 'Ring 2'), /*Blue Notebook Quote Ring*/ +('1112235', '6000', 'Ring 2'), /*Green Notebook Quote Ring*/ +('1112236', '7100', 'Ring 2'), /*Brown Teddy Quote Ring*/ +('1112237', '6300', 'Ring 2'), /*Bamboo Thought Bubble Ring*/ +('1112238', '5200', 'Ring 2'), /*Ink-and-Wash Thought Bubble Ring*/ +('1112272', '7600', 'Ring 2'), /*Watermelon Chat Bubble Ring*/ +('1112273', '3600', 'Ring 2'), /*Quack Quack Word Bubble Ring*/ +('1112274', '7600', 'Ring 2'), /*Island Travel Speech Bubble Ring*/ +/*Page 5*/ +('1112275', '8800', 'Ring 2'), /*Me From the Star Word Bubble Ring*/ +('1112276', '5200', 'Ring 2'), /*Sweet Summer Chat Ring*/ +('1112277', '3400', 'Ring 2'), /*Green Forest Chat Ring*/ +('1112278', '6400', 'Ring 2'), /*Baby Chat Ring*/ +('1112282', '6000', 'Ring 2'), /*Star Word Bubble Ring*/ +('1112283', '6400', 'Ring 2'), /*White Puppy Chat Ring*/ +('1112284', '5000', 'Ring 2'), /*Brown Puppy Chat Ring*/ +('1112285', '4900', 'Ring 2'), /*Bunny Word Bubble Ring*/ +('1112256', '4000', 'Ring 2'), /*Kitty Word Bubble Ring*/ +/*Page 6*/ +('1112257', '4000', 'Ring 2'), /*Romantic Lace Word Bubble Ring*/ +('1112258', '3600', 'Ring 2'), /*Green Apple Word Bubble Ring*/ +('1112259', '4900', 'Ring 2'), /*Mister Mustache Word Bubble Ring*/ +('1112260', '5600', 'Ring 2'), /*Guild Word Bubble Ring*/ +('1112261', '6300', 'Ring 2'), /*Naver Word Bubble Ring*/ +('1112262', '8800', 'Ring 2'), /*Angel Word Bubble Ring*/ +('1112263', '6000', 'Ring 2'), /*Strawberry Cake Word Bubble Ring*/ +('1112264', '3800', 'Ring 2'), /*Blue Strawberry Basket Chat Ring*/ +('1112265', '3200', 'Ring 2'), /*Red Strawberry Basket Chat Ring*/ +/*Page 7*/ +('1112266', '7400', 'Ring 2'), /*Moon Bunny Word Bubble Ring*/ +('1112267', '5000', 'Ring 2'), /*Frog Word Bubble Ring*/ +('1112268', '8800', 'Ring 2'), /*Oink Word Bubble Ring*/ +('1112269', '4700', 'Ring 2'), /*Blue Beard Quote Ring*/ +('1112271', '7600', 'Ring 2'), /*Diamond Quote Ring*/ +('1112288', '4000', 'Ring 2'), /*G Clef Word Bubble Ring*/ +('1112289', '6400', 'Ring 2'), /*Attack on Titan Word Bubble Ring*/ +('1112290', '4000', 'Ring 2'), /*Snow Day Dream Word Bubble Ring*/ +('1112291', '4700', 'Ring 2'), /*Snowy Christmas Chat Ring*/ +/*Page 8*/ +('1112292', '3200', 'Ring 2'), /*Silver Guild Word Bubble Ring*/ +('1112293', '5600', 'Ring 2'), /*Kinship Word Bubble Ring*/ +('1112294', '4700', 'Ring 2'), /*Sheep Word Bubble Ring*/ +('1112295', '6300', 'Ring 2'), /*Baby Word Bubble Ring*/ +('1112296', '5200', 'Ring 2'), /*Meadow Sheep Chat Bubble Ring*/ +('1112724', '8800', 'Ring 2'), /*I'm New Ring*/ +('1112728', '7100', 'Ring 2'), /*Mapler Ring*/ +('1112757', '4000', 'Ring 2'), /*Grin Ring*/ +('1112741', '5200', 'Ring 2'), /*Welcome Back Ring*/ +/*Page 9*/ +('1112816', '3400', 'Ring 2'), /*Snow Dome Friendship Ring*/ +('1112817', '3800', 'Ring 2'), /*Psyche Special Friendship Ring*/ +('1112820', '7100', 'Ring 2'), /*Friendship Ring: Dragon and Pheonix*/ +('1112823', '5200', 'Ring 2'), /*Promise Ring*/ +('1112800', '5000', 'Ring 2'), /*Friendship Ring: Clover*/ +('1112801', '3800', 'Ring 2'), /*Friendship Ring: Flower Petal*/ +('1112802', '6400', 'Ring 2'), /*Friendship Ring: Star*/ +('1112808', '6300', 'Ring 2'), /*MapleBowl Quote Ring */ +('1112810', '4900', 'Ring 2'), /*Christmas Night Bells Friendship Ring*/ +/*Page 10*/ +('1112811', '3800', 'Ring 2'), /*Christmas Party Friendship Ring*/ +('1112812', '6300', 'Ring 2'), /*Shared Umbrella Ring*/ +('1112916', '4700', 'Ring 2'), /*Solo Ring*/ +('1112917', '7400', 'Ring 2'), /*I'm New Ring*/ +('1112918', '5200', 'Ring 2'), /*Welcome Back Ring*/ +('1112919', '5200', 'Ring 2'), /*Mapler Ring*/ +('1112924', '3400', 'Ring 2'), /*Lemon Shooting Star Ring*/ +('1112925', '7400', 'Ring 2'), /*Blue Shooting Star Ring*/ +('1112926', '4900', 'Ring 2'), /*Pink Shooting Star Ring*/ +/*Page 11*/ +('1112900', '7100', 'Ring 2'), /*Lalala Ring*/ +('1112901', '7600', 'Ring 2'), /*Starry Spotlight Ring*/ +('1112902', '6400', 'Ring 2'), /*Baby Blue*/ +('1112903', '8800', 'Ring 2'), /*Amorian Aura Ring*/ +('1112904', '4700', 'Ring 2'), /*Rainbow Star Ring*/ +('1112905', '6000', 'Ring 2'), /*Bright Hot Pink Heart*/ +('1112906', '3200', 'Ring 2'), /*Baby Pink Heart*/ +('1112908', '5600', 'Ring 2'), /*Aura Ring*/ +('1112909', '7400', 'Ring 2'), /*Aura Ring*/ +/*Page 12*/ +('1112910', '3600', 'Ring 2'), /*Aura Ring*/ +('1112945', '8800', 'Ring 2'), /*Always Craving Sweet N' Sour BBQ*/ +('1112946', '4700', 'Ring 2'), /*Rainbow Jewelry*/ +('1112948', '7100', 'Ring 2'), /*Couture Critic Ring*/ +('1112949', '7400', 'Ring 2'), /*Melody Ring*/ +('1112953', '7600', 'Ring 2'), /*Blue Shooting Star Ring*/ +('1112954', '6300', 'Ring 2'), /*Pink Shooting Star Ring*/ +('1112955', '3600', 'Ring 2'), /*Best Friends Ring*/ +('1112956', '6300', 'Ring 2'), /*Shining Star Ring*/ +/*Page 13*/ +('1112958', '7400', 'Ring 2'), /*Honey Bee Flower Effect Ring*/ +('1112959', '5200', 'Ring 2'), /*Butterfly Flower Effect Ring*/ +('1112928', '8800', 'Ring 2'), /*Peach Shooting Star Ring*/ +('1112929', '7400', 'Ring 2'), /*Von Leon Ring*/ +('1112930', '5600', 'Ring 2'), /*Tomato Ring*/ +('1112935', '5200', 'Ring 2'), /*Lalala Ring*/ +('1112937', '7400', 'Ring 2'), /*Sleepy Zzz*/ +('1112940', '5600', 'Ring 2'), /*Mapler Ring*/ +('1112941', '6400', 'Ring 2'), /*Welcome Back Ring*/ +/*Page 14*/ +('1112943', '7400', 'Ring 2'), /*Fashion Week Ring*/ +('1112976', '5000', 'Ring 2'), /*Dreamland Thief Effect Ring*/ +('1112960', '5000', 'Ring 2'), /*Memory Guide Ring*/ +('1112961', '4000', 'Ring 2'), /*Cheery Yeti Ring*/ +('1112964', '3400', 'Ring 2'), /*White Christmas Ring*/ +('1112965', '5200', 'Ring 2'), /*Lucid Butterfly Ring*/ +('1112969', '5000', 'Ring 2'), /*Beyond the Clouds Effect Ring*/ +('1112970', '3200', 'Ring 2'), /*Rainy Day Doll Ring*/ +('1112971', '3200', 'Ring 2'), /*Clear Day Doll Ring*/ +/*Page 15*/ +('1112972', '5200', 'Ring 2'), /*Aurora Winter Night Ring*/ +('1112973', '3600', 'Ring 2'), /*Summer Constellation Ring*/ +('1112974', '3200', 'Ring 2'), /*Autumn Constellation Ring*/ +('1112975', '3600', 'Ring 2'), /*New Year Party People Effect Ring*/ +('1113003', '7100', 'Ring 2'), /*Dark Devil Ring*/ +('1113171', '3800', 'Ring 2'), /*Grin Ring*/ +('1113298', '7100', 'Ring 2'), /*Spirit Ring*/ +('1113299', '7600', 'Ring 2'), /*Determination Ring*/ + +/*Page 16*/ +('1113289', '5600', 'Ring 2'), /*Busy Penguin Ring*/ +('1114000', '5200', 'Ring 2'), /*Kinship Ring*/ + + + + + +/* Cape */ +/*Page 1*/ +('1100000', '4000', 'Cape'), /*Napoleon Cape*/ +('1100001', '5600', 'Cape'), /*Napoleon Cape*/ +('1100004', '7400', 'Cape'), /*Mad Doctor Stethoscope*/ +('1101000', '6000', 'Cape'), /*Ribbon Angel Syringe*/ +('1102005', '3200', 'Cape'), /*Baby Angel Wings*/ +('1102006', '8800', 'Cape'), /*Devil Wings*/ +('1102007', '3800', 'Cape'), /*Yellow Star Cape*/ +('1102008', '8800', 'Cape'), /*Blue Star Cape*/ +('1102009', '6400', 'Cape'), /*Red Star Cape*/ +/*Page 2*/ +('1102010', '8800', 'Cape'), /*Black Star Cape*/ +('1102036', '4700', 'Cape'), /*Red Landcell Pack*/ +('1102037', '7100', 'Cape'), /*Black Landcell Pack*/ +('1102038', '7400', 'Cape'), /*Blue Landcell Pack*/ +('1102039', '7600', 'Cape'), /*Transparent Cape*/ +('1102044', '5600', 'Cape'), /*Red G-Wing Jetpack*/ +('1102045', '7400', 'Cape'), /*Blue G-Wing Jetpack*/ +('1102019', '7100', 'Cape'), /*Korean-Flagged Cape*/ +('1102020', '4700', 'Cape'), /*Turtle Shell*/ +/*Page 3*/ +('1102025', '3200', 'Cape'), /*Red Hood Cape*/ +('1102065', '3600', 'Cape'), /*Christmas Cape*/ +('1102066', '6400', 'Cape'), /*Dracula Cloak*/ +('1102067', '7400', 'Cape'), /*Tiger Tail*/ +('1102068', '6300', 'Cape'), /*Harpie Cape*/ +('1102069', '3800', 'Cape'), /*Pink Wings*/ +('1102070', '8800', 'Cape'), /*Blue Book Bag*/ +('1102072', '4900', 'Cape'), /*Yellow-Green Backpack*/ +('1102073', '7400', 'Cape'), /*Hot Pink Backpack*/ +/*Page 4*/ +('1102074', '4700', 'Cape'), /*Dragonfly Wings*/ +('1102075', '3400', 'Cape'), /*Bat's Bane*/ +('1102076', '3400', 'Cape'), /*Newspaper Cape*/ +('1102077', '7600', 'Cape'), /*Cotton Blanket*/ +('1102049', '5200', 'Cape'), /*Blue Nymph Wing*/ +('1102050', '7400', 'Cape'), /*Green Nymph Wing*/ +('1102051', '7400', 'Cape'), /*Yellow Nymph Wing*/ +('1102052', '6300', 'Cape'), /*Pink Nymph Wing*/ +('1102058', '7100', 'Cape'), /*Gargoyle Wings*/ +/*Page 5*/ +('1102059', '4000', 'Cape'), /*Michael Wings*/ +('1102060', '6400', 'Cape'), /*Pink Ribbon*/ +('1102062', '7100', 'Cape'), /*Martial Cape*/ +('1102063', '7600', 'Cape'), /*Fallen Angel Wings*/ +('1102096', '8800', 'Cape'), /*Sachiel Wings*/ +('1102097', '7600', 'Cape'), /*Janus Wings*/ +('1102098', '4700', 'Cape'), /*Coffin of Gloom*/ +('1102107', '3600', 'Cape'), /*Rocket Booster*/ +('1102108', '4000', 'Cape'), /*Fallen Angel Tail*/ +/*Page 6*/ +('1102110', '5000', 'Cape'), /*Chipmunk Tail*/ +('1102111', '4700', 'Cape'), /*Elephant Balloon*/ +('1102091', '4700', 'Cape'), /*Summer Kite*/ +('1102092', '6300', 'Cape'), /*Cuddle Bear*/ +('1102093', '5000', 'Cape'), /*Heart Balloon*/ +('1102094', '6000', 'Cape'), /*Sun Wu Kong Tail*/ +('1102095', '3800', 'Cape'), /*Veamoth Wings*/ +('1102137', '6300', 'Cape'), /*Orange Mushroom Balloon*/ +('1102138', '6000', 'Cape'), /*Pink Wing Bag*/ +/*Page 7*/ +('1102141', '3400', 'Cape'), /*Pepe Balloon*/ +('1102142', '5000', 'Cape'), /*The Flaming Cape*/ +('1102112', '6000', 'Cape'), /*Bunny Doll*/ +('1102160', '5600', 'Cape'), /*Baby Lupin Cape*/ +('1102162', '7100', 'Cape'), /*Baby White Monkey Balloon*/ +('1102164', '3800', 'Cape'), /*Maple MSX Guitar*/ +('1102169', '5200', 'Cape'), /*Blue Wing Bag*/ +('1102171', '5200', 'Cape'), /*3rd Anniversary Balloon*/ +('1102175', '7100', 'Cape'), /*Cutie Birk Wings*/ +/*Page 8*/ +('1102144', '6300', 'Cape'), /*Sage Cape*/ +('1102148', '4000', 'Cape'), /*Tania Cloak*/ +('1102149', '5000', 'Cape'), /*Mercury Cloak*/ +('1102150', '4700', 'Cape'), /*Count Dracula Cape*/ +('1102151', '6000', 'Cape'), /*Lost Kitty*/ +('1102152', '4000', 'Cape'), /*Pirate Emblem Flag*/ +('1102153', '6400', 'Cape'), /*Sunfire Wings*/ +('1102154', '8800', 'Cape'), /*Zakum Arms*/ +('1102155', '3400', 'Cape'), /*My Buddy Rex*/ +/*Page 9*/ +('1102156', '3800', 'Cape'), /*Aerial Wave Cape*/ +('1102157', '4000', 'Cape'), /*Puppet Strings*/ +('1102158', '4900', 'Cape'), /*Peacock Feather Cape*/ +('1102159', '6300', 'Cape'), /*White Monkey Balloon*/ +('1102196', '3600', 'Cape'), /*Snowflake Scarf*/ +('1102197', '6400', 'Cape'), /*Yellow Canary*/ +('1102202', '6000', 'Cape'), /*Galactic Flame Cape*/ +('1102203', '5200', 'Cape'), /*Super Rocket Booster*/ +('1102204', '4900', 'Cape'), /*Romantic Rose*/ +/*Page 10*/ +('1102184', '8800', 'Cape'), /*Aurora Happy Wing*/ +('1102185', '5200', 'Cape'), /*Rainbow Scarf*/ +('1102186', '6400', 'Cape'), /*Kitty Parachute*/ +('1102187', '6000', 'Cape'), /*Golden Fox Tail*/ +('1102188', '7400', 'Cape'), /*Silver Fox Tail*/ +('1102224', '8800', 'Cape'), /*Lamby Cape*/ +('1102229', '4700', 'Cape'), /*Bear Cape*/ +('1102230', '5000', 'Cape'), /*Penguin Sled*/ +('1102232', '7100', 'Cape'), /*Celestial Star*/ +/*Page 11*/ +('1102233', '4900', 'Cape'), /*Snowman Cape*/ +('1102238', '6400', 'Cape'), /*Cat Set Tail*/ +('1102239', '6000', 'Cape'), /*Dual Blade Cape*/ +('1102208', '5600', 'Cape'), /*Slime Effect Cape*/ +('1102209', '4900', 'Cape'), /*Baby White Monkey Balloon*/ +('1102210', '5200', 'Cape'), /*Honeybee's Sting*/ +('1102211', '3400', 'Cape'), /*Bound Wings*/ +('1102212', '5200', 'Cape'), /*Lost Child*/ +('1102213', '7400', 'Cape'), /*Pink Bean Tail*/ +/*Page 12*/ +('1102214', '3200', 'Cape'), /*Pink Bean Balloon*/ +('1102215', '6000', 'Cape'), /*Balloon Bouquet*/ +('1102216', '6300', 'Cape'), /*Brown Dog Tail*/ +('1102217', '4900', 'Cape'), /*Goblin Cat*/ +('1102218', '3400', 'Cape'), /*Pink Floating Ribbon*/ +('1102220', '8800', 'Cape'), /*Pachinko Marble-box Cape*/ +('1102221', '5000', 'Cape'), /*Pluto Flame Cape*/ +('1102222', '4900', 'Cape'), /*Seraphim Cape*/ +('1102223', '6300', 'Cape'), /*Star Tail*/ +/*Page 13*/ +('1102257', '3600', 'Cape'), /*Marines Maple Balloon*/ +('1102258', '4700', 'Cape'), /*Teddy Bear Balloon*/ +('1102259', '3400', 'Cape'), /*Flying Dragon Cape*/ +('1102261', '5200', 'Cape'), /*Equalizer Scarf*/ +('1102267', '5600', 'Cape'), /*Friendly Nine-Tailed Fox Tails*/ +('1102270', '5000', 'Cape'), /*Moon and Sun Cape*/ +('1102271', '4000', 'Cape'), /*Lovely Chocolate Balloons*/ +('1102240', '7400', 'Cape'), /*Royal Cape*/ +('1102242', '7100', 'Cape'), /*Hawkeye Ocean Cape*/ +/*Page 14*/ +('1102243', '7100', 'Cape'), /*Dunas Cape*/ +('1102245', '3800', 'Cape'), /*Sun Cape*/ +('1102249', '6300', 'Cape'), /*Oz Magic Cape*/ +('1102250', '4700', 'Cape'), /*Murgoth's Feather*/ +('1102251', '8800', 'Cape'), /*World Cup Towel*/ +('1102252', '3200', 'Cape'), /*Phoenix Wing*/ +('1102253', '6300', 'Cape'), /*Purple Wings*/ +('1102254', '7600', 'Cape'), /*Wild Hunter Cape*/ +('1102255', '5600', 'Cape'), /*Battle Mage Cape*/ +/*Page 15*/ +('1102288', '6300', 'Cape'), /*Piggyback Snowman*/ +('1102290', '6400', 'Cape'), /*Silken Flower Cape*/ +('1102291', '7600', 'Cape'), /*Nekomata*/ +('1102292', '5000', 'Cape'), /*Twinkling Rainbow*/ +('1102296', '3200', 'Cape'), /*Gray Puppy Tail*/ +('1102300', '5600', 'Cape'), /*6th B-Day Party Ball*/ +('1102301', '3800', 'Cape'), /*Traveler's Cape*/ +('1102273', '3400', 'Cape'), /*Lucifer Half Wing*/ +('1102285', '7400', 'Cape'), /*Pink Teru Cape*/ +/*Page 16*/ +('1102286', '6000', 'Cape'), /*Blue Teru Cape*/ +('1102287', '3600', 'Cape'), /*Yellow Teru Cape*/ +('1102323', '7400', 'Cape'), /*Legends Pink Balloon*/ +('1102324', '3400', 'Cape'), /*Legends Twin Balloons*/ +('1102325', '3800', 'Cape'), /*Harmony Wings*/ +('1102326', '7600', 'Cape'), /*Angelic Feathers*/ +('1102307', '5200', 'Cape'), /*New Sachiel Wings*/ +('1102308', '4000', 'Cape'), /*New Veamoth Wings*/ +('1102309', '7400', 'Cape'), /*New Janus Wings*/ +/*Page 17*/ +('1102310', '4900', 'Cape'), /*Fairytale Mantle*/ +('1102318', '7100', 'Cape'), /*Demon Wings*/ +('1102319', '5000', 'Cape'), /*Legends Balloon*/ +('1102355', '5600', 'Cape'), /*Jewel Blizzard*/ +('1102356', '4900', 'Cape'), /*Angelic Emerald*/ +('1102357', '5200', 'Cape'), /*Pretty Pink Bean Balloon*/ +('1102358', '6300', 'Cape'), /*Round-We-Go Mirror Ball*/ +('1102359', '8800', 'Cape'), /*Floaty Snowman Balloon*/ +('1102367', '6400', 'Cape'), /*Elven Spirit Cape*/ +/*Page 18*/ +('1102336', '5600', 'Cape'), /*Alchemist Cape*/ +('1102338', '7600', 'Cape'), /*Honeybee Wings */ +('1102343', '6000', 'Cape'), /*Dark Force Cape */ +('1102344', '6000', 'Cape'), /*Elven Spirit Cape*/ +('1102349', '5200', 'Cape'), /*Fairy Wing Cape*/ +('1102350', '8800', 'Cape'), /*Pink Teru Cape*/ +('1102385', '5200', 'Cape'), /*Lux Cherubim*/ +('1102386', '8800', 'Cape'), /*Nox Cherubim*/ +('1102387', '5200', 'Cape'), /*Blue Dragon Tail*/ +/*Page 19*/ +('1102388', '6000', 'Cape'), /*Red Dragon Tail*/ +('1102389', '6000', 'Cape'), /*Aurora Pharady*/ +('1102390', '3800', 'Cape'), /*Aurora Angel*/ +('1102391', '4700', 'Cape'), /*Honeybee Wings */ +('1102392', '6300', 'Cape'), /*Dainty Cape*/ +('1102396', '7100', 'Cape'), /*Ebony Pimpernel Cape*/ +('1102368', '7600', 'Cape'), /*Floating Silken Flower Cape*/ +('1102373', '6300', 'Cape'), /*Lucia Cape*/ +('1102374', '3800', 'Cape'), /*Monkey Cape*/ +/*Page 20*/ +('1102376', '6300', 'Cape'), /*Psyche Flora*/ +('1102377', '5000', 'Cape'), /*Psyche Mystic*/ +('1102378', '4900', 'Cape'), /*Psyche Melody*/ +('1102380', '5200', 'Cape'), /*Frog Cronies*/ +('1102381', '8800', 'Cape'), /*Imperial Duke Wing*/ +('1102419', '6400', 'Cape'), /*Lucia Cape*/ +('1102420', '3200', 'Cape'), /*Magic Star Cape*/ +('1102421', '5000', 'Cape'), /*Lemon Floating Smile*/ +('1102423', '3800', 'Cape'), /*Euro Balloon (PL)*/ +/*Page 21*/ +('1102424', '7100', 'Cape'), /*Euro Balloon (GR)*/ +('1102425', '3800', 'Cape'), /*Euro Balloon (RU)*/ +('1102426', '8800', 'Cape'), /*Euro Balloon (CZ)*/ +('1102427', '4900', 'Cape'), /*Euro Balloon (NL)*/ +('1102428', '4700', 'Cape'), /*Euro Balloon (DK)*/ +('1102429', '4700', 'Cape'), /*Euro Balloon (DE)*/ +('1102430', '5200', 'Cape'), /*Euro Balloon (PT)*/ +('1102431', '8800', 'Cape'), /*Euro Balloon (ES)*/ +('1102450', '7100', 'Cape'), /*Heavenly Aura*/ +/*Page 22*/ +('1102451', '4000', 'Cape'), /*Void Aura*/ +('1102452', '4000', 'Cape'), /*Fairy Aura*/ +('1102453', '6000', 'Cape'), /*Dryad*/ +('1102461', '3600', 'Cape'), /*Valentine's Cape*/ +('1102432', '4900', 'Cape'), /*Euro Balloon (IT)*/ +('1102433', '5000', 'Cape'), /*Euro Balloon (IE)*/ +('1102434', '3600', 'Cape'), /*Euro Balloon (HR)*/ +('1102435', '7600', 'Cape'), /*Euro Balloon (UA)*/ +('1102436', '4900', 'Cape'), /*Euro Balloon (SE)*/ +/*Page 23*/ +('1102437', '5600', 'Cape'), /*Euro Balloon (FR)*/ +('1102438', '5200', 'Cape'), /*Euro Balloon (GB)*/ +('1102486', '6400', 'Cape'), /*BasilMarket Billionaire Balloon*/ +('1102487', '6000', 'Cape'), /*Luminous Cherubim*/ +('1102488', '4700', 'Cape'), /*Cupcake Balloon*/ +('1102491', '4900', 'Cape'), /*Sunny Day*/ +('1102465', '6000', 'Cape'), /*Jett's Cape*/ +('1102466', '6000', 'Cape'), /*Flying Nobilitas*/ +('1102512', '6000', 'Cape'), /*Dark Force Cape*/ +/*Page 24*/ +('1102513', '8800', 'Cape'), /*Flying Nobilitas*/ +('1102496', '5000', 'Cape'), /*Hyper Honeybee Wings*/ +('1102501', '4000', 'Cape'), /*[MS Discount] Nine-Tailed Fox Tails*/ +('1102503', '6000', 'Cape'), /*Frisky Cat Tail*/ +('1102508', '3800', 'Cape'), /*Koala Cape*/ +('1102510', '3200', 'Cape'), /*Ribbon Kitty Tail*/ +('1102511', '8800', 'Cape'), /*Angel Cherub*/ +('1102544', '3800', 'Cape'), /*Albatross Cape*/ +('1102545', '5000', 'Cape'), /*Albatross Cape*/ +/*Page 25*/ +('1102546', '4000', 'Cape'), /*Blue Bird Dream Wings*/ +('1102547', '3600', 'Cape'), /*Amethyst Dream Wings*/ +('1102548', '3600', 'Cape'), /*Leafy Dream Wings*/ +('1102549', '6400', 'Cape'), /*Steward Cat*/ +('1102550', '3400', 'Cape'), /*Lime Green Wings*/ +('1102551', '7100', 'Cape'), /*Sapphire Wings*/ +('1102554', '4900', 'Cape'), /*Succubus Wings*/ +('1102555', '4900', 'Cape'), /*Angelic White Wings*/ +('1102532', '4900', 'Cape'), /*Light Wing Cherubim*/ +/*Page 26*/ +('1102537', '7400', 'Cape'), /*Magic Star Cape*/ +('1102542', '7400', 'Cape'), /*Hawkeye Ocean Cape*/ +('1102543', '3200', 'Cape'), /*Oz Magic Cape*/ +('1102576', '4900', 'Cape'), /*Nox Cherubim*/ +('1102577', '7600', 'Cape'), /*Aurora Angel*/ +('1102582', '5600', 'Cape'), /*GM Daejang's Lucia Cape*/ +('1102583', '5000', 'Cape'), /*Baby Dragon Pobi*/ +('1102587', '4900', 'Cape'), /*Heavenly Aura*/ +('1102588', '4900', 'Cape'), /*Void Aura*/ +/*Page 27*/ +('1102589', '3200', 'Cape'), /*Fairy Aura*/ +('1102591', '3400', 'Cape'), /*Battle Monster Victory Cape*/ +('1102564', '5000', 'Cape'), /*Angel's Ribbon*/ +('1102572', '7400', 'Cape'), /*Gratias Aura*/ +('1102574', '3600', 'Cape'), /*Chicky Pile*/ +('1102575', '3800', 'Cape'), /*Lux Cherubim*/ +('1102608', '7100', 'Cape'), /*Superstar Mirror Ball*/ +('1102609', '3600', 'Cape'), /*Psyche Flora*/ +('1102610', '7400', 'Cape'), /*Psyche Mystic*/ +/*Page 28*/ +('1102611', '4700', 'Cape'), /*Psyche Melody*/ +('1102613', '4900', 'Cape'), /*Futuroid Tail Sensor*/ +('1102614', '5200', 'Cape'), /*Futuroid Tail Sensor*/ +('1102615', '6000', 'Cape'), /*Clocktower Wind-up Doll*/ +('1102616', '6000', 'Cape'), /*Lapis's Spirit*/ +('1102617', '6300', 'Cape'), /*Lazuli's Spirit*/ +('1102619', '6400', 'Cape'), /*Icy Sweet Penguin*/ +('1102620', '7400', 'Cape'), /*My Own Fireworks*/ +('1102621', '4900', 'Cape'), /*Nagging Megaphone*/ +/*Page 29*/ +('1102622', '5000', 'Cape'), /*Princess of Time Pocket Watch*/ +('1102592', '4900', 'Cape'), /*Battle Monster Consolation Cape*/ +('1102593', '4700', 'Cape'), /*Floaty Baseball*/ + + + +/*Page 1*/ +('1102604', '6300', 'Cape 2'), /*Gear Wing*/ +('1102605', '3400', 'Cape 2'), /*Shadow Peacemaker*/ +('1102640', '3200', 'Cape 2'), /*Aran's Cape*/ +('1102641', '4000', 'Cape 2'), /*Yui's Spirit*/ +('1102642', '5000', 'Cape 2'), /*Yui's Wings*/ +('1102643', '5200', 'Cape 2'), /*Golden Age*/ +('1102644', '4700', 'Cape 2'), /*Pretty Pixie*/ +('1102648', '5000', 'Cape 2'), /*Mr. K's Cat Tail*/ +('1102650', '6000', 'Cape 2'), /*Eunwol Foxtail*/ +/*Page 2*/ +('1102651', '6400', 'Cape 2'), /*Red Panda Tail*/ +('1102652', '6000', 'Cape 2'), /*Chipmunk Tail*/ +('1102653', '5600', 'Cape 2'), /*Deluxe Rabbit Tail*/ +('1102654', '5200', 'Cape 2'), /*Puppy Tail*/ +('1102655', '4900', 'Cape 2'), /*Bear Tail*/ +('1102624', '7400', 'Cape 2'), /*Aeolus Aura*/ +('1102625', '3800', 'Cape 2'), /*Snail Shell*/ +('1102629', '4700', 'Cape 2'), /*Pink Cherubim*/ +('1102630', '8800', 'Cape 2'), /*Romantic Wing Cherubim*/ +/*Page 3*/ +('1102631', '4000', 'Cape 2'), /*Vampire Phantom Cape*/ +('1102632', '3400', 'Cape 2'), /*Shadow Peacemaker*/ +('1102673', '4900', 'Cape 2'), /*Ghost Balloon*/ +('1102674', '4900', 'Cape 2'), /*Food Escape*/ +('1102675', '6400', 'Cape 2'), /*Candy Party Ribbon*/ +('1102682', '5000', 'Cape 2'), /*Nurse Syringe*/ +('1102683', '6300', 'Cape 2'), /*Rabbit and Bear Book Bag*/ +('1102684', '5600', 'Cape 2'), /*Doctor Stethoscope*/ +('1102685', '7600', 'Cape 2'), /*Baby Pink Panda Cape*/ +/*Page 4*/ +('1102656', '7400', 'Cape 2'), /*Bunny Tail*/ +('1102657', '6000', 'Cape 2'), /*Cat o' Nine Tails*/ +('1102658', '7400', 'Cape 2'), /*Cute Kitty Tail*/ +('1102667', '7100', 'Cape 2'), /*Magical Misty Moon*/ +('1102668', '4000', 'Cape 2'), /*Night Angel Wings*/ +('1102669', '3800', 'Cape 2'), /*Royal Spoiled Fairy*/ +('1102705', '3400', 'Cape 2'), /*Island Travel Bags*/ +('1102706', '3800', 'Cape 2'), /*Melodic Aurora*/ +('1102707', '3200', 'Cape 2'), /*Dreaming Conch*/ +/*Page 5*/ +('1102708', '8800', 'Cape 2'), /*Blushy Conch*/ +('1102709', '3200', 'Cape 2'), /*Lumina Flutter*/ +('1102712', '6300', 'Cape 2'), /*Long-awaited Resort*/ +('1102688', '4000', 'Cape 2'), /*Boom Boom Fireworks*/ +('1102694', '3200', 'Cape 2'), /*Mini-Mini Slime*/ +('1102695', '6300', 'Cape 2'), /*Spirited Nine Tails*/ +('1102697', '6400', 'Cape 2'), /*Ruby Dragonfly Wings*/ +('1102698', '4900', 'Cape 2'), /*Emerald Dragonfly Wings*/ +('1102699', '5000', 'Cape 2'), /*Magma Wings*/ +/*Page 6*/ +('1102700', '3800', 'Cape 2'), /*Petit Ciel*/ +('1102702', '6400', 'Cape 2'), /*Ruby Monarch*/ +('1102703', '6400', 'Cape 2'), /*Jade Monarch*/ +('1102747', '4900', 'Cape 2'), /*Cutie Pandas*/ +('1102748', '4700', 'Cape 2'), /*Rabbit-Bear Camping Bag*/ +('1102749', '8800', 'Cape 2'), /*Starland Balloon*/ +('1102723', '3800', 'Cape 2'), /*Giant Bright Angel Wings*/ +('1102724', '3400', 'Cape 2'), /*Giant Dark Devil Wings*/ +('1102725', '8800', 'Cape 2'), /*Flopping Baby Sea Otter*/ +/*Page 7*/ +('1102726', '4900', 'Cape 2'), /*Carrot Cape*/ +('1102729', '4700', 'Cape 2'), /*Glowing Lights*/ +('1102730', '5200', 'Cape 2'), /*Glorious Aura*/ +('1102768', '4900', 'Cape 2'), /*Worn Witch Cape*/ +('1102769', '6000', 'Cape 2'), /*Witch Cape*/ +('1102772', '3800', 'Cape 2'), /*Worn Ghost Cape*/ +('1102773', '5600', 'Cape 2'), /*Ghost Cape*/ +('1102774', '5200', 'Cape 2'), /*Total Lunar Eclipse Cape*/ +('1102778', '6000', 'Cape 2'), /*Lolli Lolli Lollipop*/ +/*Page 8*/ +('1102779', '3800', 'Cape 2'), /*Gold Wing*/ +('1102780', '6300', 'Cape 2'), /*With Eren*/ +('1102781', '6300', 'Cape 2'), /*With Mikasa*/ +('1102782', '7600', 'Cape 2'), /*With Annie*/ +('1102783', '5600', 'Cape 2'), /*With Sasha*/ +('1102754', '7400', 'Cape 2'), /*Idol of the Birds*/ +('1102755', '7100', 'Cape 2'), /*Boom Star Balloon*/ +('1102756', '7100', 'Cape 2'), /*Corn Cape*/ +('1102758', '3200', 'Cape 2'), /*Victory Wings*/ +/*Page 9*/ +('1102759', '6300', 'Cape 2'), /*Ball Buddies*/ +('1102766', '7400', 'Cape 2'), /*Raging Lotus Aura*/ +('1102767', '5600', 'Cape 2'), /*Ill Orchid IV*/ +('1102800', '6300', 'Cape 2'), /*Fluffy Bell Cape*/ +('1102801', '3200', 'Cape 2'), /*Silver Wolf Coat*/ +('1102802', '3800', 'Cape 2'), /*Round-We-Go Mirror Ball*/ +('1102803', '3400', 'Cape 2'), /*Pretty Pink Bean Balloon*/ +('1102804', '7400', 'Cape 2'), /*Pink Teru Cape*/ +('1102805', '4000', 'Cape 2'), /*Floaty Snowman Balloon*/ +/*Page 10*/ +('1102806', '5000', 'Cape 2'), /*Cutie Birk Wings*/ +('1102808', '4000', 'Cape 2'), /*Loved Mouse Couple*/ +('1102809', '3200', 'Cape 2'), /*Death Waltz Cloak*/ +('1102811', '6000', 'Cape 2'), /*Snow Bloom*/ +('1102812', '7100', 'Cape 2'), /*Blizzard Drive*/ +('1102813', '4900', 'Cape 2'), /*Shoulder Blanche*/ +('1102815', '5200', 'Cape 2'), /*Lucky Charm Bag*/ +('1102784', '4900', 'Cape 2'), /*With Christa*/ +('1102785', '4000', 'Cape 2'), /*With Levi*/ +/*Page 11*/ +('1102786', '6400', 'Cape 2'), /*Titan Escape*/ +('1102787', '7600', 'Cape 2'), /*Scout Regiment Cape*/ +('1102788', '6000', 'Cape 2'), /*With Armin*/ +('1102789', '6300', 'Cape 2'), /*Snow Bear Scarf*/ +('1102798', '4700', 'Cape 2'), /*Blue Bird Wings*/ +('1102832', '5200', 'Cape 2'), /*Machine Cape*/ +('1102835', '6400', 'Cape 2'), /*Schwarzer Coat*/ +('1102836', '7400', 'Cape 2'), /*Wonder Kitty*/ +('1102837', '6400', 'Cape 2'), /*Dreams Within Dreams*/ +/*Page 12*/ +('1102839', '6300', 'Cape 2'), /*Pink Zakum Arms*/ +('1102841', '7400', 'Cape 2'), /*Iris Pearl*/ +('1102842', '5000', 'Cape 2'), /*Pineapple Bag*/ +('1102843', '6400', 'Cape 2'), /*Pink Cherubim*/ +('1102844', '6400', 'Cape 2'), /*Mousy Bunny Bouncy Buddies*/ +('1102845', '3800', 'Cape 2'), /*Blue Panda*/ +('1102847', '7400', 'Cape 2'), /*Yeonhwa School Guardian Soul Fire*/ +('1102816', '5000', 'Cape 2'), /*Fairy Bell*/ +('1102818', '4900', 'Cape 2'), /*Crystal Cat Star Cape*/ +/*Page 13*/ +('1102819', '4700', 'Cape 2'), /*Naughty Boy Backpack*/ +('1102820', '4000', 'Cape 2'), /*Hazy Night Tassel*/ +('1102822', '3200', 'Cape 2'), /*Flowery Breeze*/ +('1102823', '6000', 'Cape 2'), /*Petite Devil Wings*/ +('1102824', '6000', 'Cape 2'), /*Halfblood Wings*/ +('1102827', '5600', 'Cape 2'), /*The Kingdom Cape of King*/ +('1102830', '3600', 'Cape 2'), /*돼지바의 요정*/ +('1102831', '7400', 'Cape 2'), /*Soaring High*/ +('1102864', '4000', 'Cape 2'), /*Farmer's Grace*/ +/*Page 14*/ +('1102865', '4700', 'Cape 2'), /*Thundercrash Cape*/ +('1102868', '3200', 'Cape 2'), /*Triple Bat Cape*/ +('1102869', '3400', 'Cape 2'), /*Bloody Rose*/ +('1102870', '7600', 'Cape 2'), /*Midnight Black Coffin*/ +('1102872', '7600', 'Cape 2'), /*Shining Noblesse*/ +('1102873', '3600', 'Cape 2'), /*Eternal Noblesse*/ +('1102874', '6000', 'Cape 2'), /*Lumin Wings*/ +('1102875', '7400', 'Cape 2'), /*Amnesiac Alien*/ +('1102876', '7600', 'Cape 2'), /*Selfie Time*/ +/*Page 15*/ +('1102877', '5600', 'Cape 2'), /*Blue Marine Sunshine*/ + + +('1102848', '5200', 'Cape 2'), /*Gravity*/ +('1102849', '4700', 'Cape 2'), /*Gravity*/ +('1102857', '5200', 'Cape 2'), /*Legendary Fish Man*/ +('1102858', '7400', 'Cape 2'), /*Eternal Clockwork*/ +('1102859', '4000', 'Cape 2'), /*Sapphire Snow*/ +('1102860', '5000', 'Cape 2'), /*British Weather Cape*/ +/*Page 16*/ +('1102861', '6400', 'Cape 2'), /*Ursus Light*/ +('1102863', '3400', 'Cape 2'), /*Sparkly Rainbow Cape*/ +('1102896', '4900', 'Cape 2'), /*Chiaroscuro Luminous Cape*/ +('1102897', '4900', 'Cape 2'), /*Chiaroscuro Luminous Cape*/ +('1102898', '3800', 'Cape 2'), /*Secret Shade Cape*/ +('1102899', '4900', 'Cape 2'), /*Secret Shade Cape*/ +('1102900', '7400', 'Cape 2'), /*Lumpy Snowflakes*/ +('1102901', '3400', 'Cape 2'), /*Sparkler*/ +('1102902', '3200', 'Cape 2'), /*Dokidoki*/ +/*Page 17*/ +('1102903', '6300', 'Cape 2'), /*Floating Monkey*/ +('1102904', '3200', 'Cape 2'), /*Eternal Clockwork*/ +('1102905', '6300', 'Cape 2'), /*Today's Sunshine Cape*/ +('1102906', '5000', 'Cape 2'), /*Snug Black Nero*/ +('1102907', '8800', 'Cape 2'), /*Ice Flower Wing*/ +('1102908', '3200', 'Cape 2'), /*Winter Garden Cape*/ +('1102910', '6400', 'Cape 2'), /*Smile Seed Cape*/ + + +/*Page 18*/ + + +('1102884', '5000', 'Cape 2'), /*Angelic Polar Cape*/ +('1102885', '8800', 'Cape 2'), /*Fluffy Fox Tail (Gold)*/ +('1102886', '6300', 'Cape 2'), /*Fluffy Fox Tail (Silver)*/ +('1102888', '3800', 'Cape 2'), /*Evan Dragon Cape*/ +('1102889', '7100', 'Cape 2'), /*Evan Dragon Cape*/ +('1102890', '7100', 'Cape 2'), /*Royal Mercedes Cape*/ +('1102891', '3600', 'Cape 2'), /*Royal Mercedes Cape*/ +/*Page 19*/ +('1102892', '7100', 'Cape 2'), /*Mystic Phantom Cape*/ +('1102893', '4700', 'Cape 2'), /*Mystic Phantom Cape*/ +('1102894', '7400', 'Cape 2'), /*Winter Aran Cape*/ +('1102895', '6400', 'Cape 2'), /*Winter Aran Cape*/ +('1102928', '5200', 'Cape 2'), /*Sweet Berry*/ +('1102929', '6300', 'Cape 2'), /*Jet Black Devil*/ +('1102930', '6300', 'Cape 2'), /*Spring Rain Drippy-drop*/ +('1102931', '3400', 'Cape 2'), /*Noble Maple Cape*/ +('1102932', '4000', 'Cape 2'), /*Alicia's Flower Wings*/ +/*Page 20*/ +('1102933', '5600', 'Cape 2'), /*Alicia's Flower Wings*/ +('1102934', '6000', 'Cape 2'), /*Snow Angel*/ +('1102935', '6300', 'Cape 2'), /*Whistling Wind*/ +('1102936', '3800', 'Cape 2'), /*Forest Whisper*/ +('1102937', '6300', 'Cape 2'), /*Cats All Over Cape*/ +('1102938', '8800', 'Cape 2'), /*Fantastic Beach Cape*/ +('1102939', '3400', 'Cape 2'), /*Red Cloud Cape*/ +('1102912', '3800', 'Cape 2'), /*Umbral Cloak*/ +('1102913', '5600', 'Cape 2'), /*Flower Dancer's Red Cape*/ +/*Page 21*/ +('1102914', '3400', 'Cape 2'), /*Dancing Blue Butterflies*/ +('1102915', '8800', 'Cape 2'), /*Concert Muse*/ +('1102916', '6000', 'Cape 2'), /*Baby Binkie Toys*/ +('1102917', '8800', 'Cape 2'), /*Angel's Cookie Backpack*/ +('1102918', '7400', 'Cape 2'), /*Blazing Aura*/ +('1102919', '5000', 'Cape 2'), /*Tag-along Baby Duck*/ +('1102920', '5600', 'Cape 2'), /*Spring Energy*/ +('1102923', '7600', 'Cape 2'), /*Singles Army Combat Cape*/ +('1102924', '5200', 'Cape 2'), /*Couples Army Combat Cape*/ +/*Page 22*/ +('1102926', '5000', 'Cape 2'), /*Shark Cape*/ +('1102927', '7100', 'Cape 2'), /*Windy Paw Scarf*/ +('1102960', '7100', 'Cape 2'), /*Pure Dream Wings*/ +('1102961', '5000', 'Cape 2'), /*Alert! Alert!*/ +('1102964', '3400', 'Cape 2'), /*Sweetheart's Affection*/ +('1102965', '5600', 'Cape 2'), /*Dancing Fireflies*/ +('1102966', '5000', 'Cape 2'), /*Puck's Cape*/ +('1102967', '5000', 'Cape 2'), /*Vampire Phantom Cloak*/ +('1102968', '5600', 'Cape 2'), /*Icicle Wings*/ +/*Page 23*/ +('1102969', '7400', 'Cape 2'), /*Clear Skies*/ +('1102970', '5200', 'Cape 2'), /*Rainy Day*/ +('1102971', '4700', 'Cape 2'), /*Lightning Storm*/ +('1102972', '6000', 'Cape 2'), /*Winter Wings*/ +('1102973', '6300', 'Cape 2'), /*Trace of the Alicorn*/ +('1102974', '5200', 'Cape 2'), /*Stellar Specters*/ +('1102975', '5200', 'Cape 2'), /*Cat Balloon Cape*/ +('1102945', '6400', 'Cape 2'), /*Kitty Wuv*/ +('1102946', '3600', 'Cape 2'), /*Sarasa*/ +/*Page 24*/ +('1102947', '5000', 'Cape 2'), /*New Angelic Emerald*/ +('1102948', '7600', 'Cape 2'), /*Lil Neon Wings*/ +('1102949', '6400', 'Cape 2'), /*Bubble Wings*/ +('1102950', '3400', 'Cape 2'), /*Bu-bu-bubbles!*/ +('1102951', '6300', 'Cape 2'), /*Popsicle Pals*/ + +('1102953', '3200', 'Cape 2'), /*Kamaitachi Tail*/ +('1102954', '5200', 'Cape 2'), /*Owl Balloon*/ +('1102955', '6000', 'Cape 2'), /*Moon Bunny Cape*/ +/*Page 25*/ +('1102956', '8800', 'Cape 2'), /*Dark Musician Scarf*/ +('1102957', '7400', 'Cape 2'), /*Chained Princess Chain*/ +('1102958', '3200', 'Cape 2'), /*Light Bulb Wings*/ +('1102959', '5600', 'Cape 2'), /*Sultry Dream Wings*/ +('1102992', '5000', 'Cape 2'), /*Star Shadow*/ +('1102995', '4900', 'Cape 2'), /*Nova Enchanter Winged Cape*/ +('1102998', '4900', 'Cape 2'), /*Fuzzy Cotton Tail*/ +('1102999', '6000', 'Cape 2'), /*Mischievous Rainbow*/ +('1103000', '6300', 'Cape 2'), /*Rocket Fuse Cape*/ +/*Page 26*/ +('1103001', '4000', 'Cape 2'), /*Korean Kite Cape*/ +('1103003', '5200', 'Cape 2'), /*Heart Bling Wings*/ +('1103004', '4700', 'Cape 2'), /*Pthbttt Cape*/ +('1103007', '4900', 'Cape 2'), /*Demon Bag*/ +('1102976', '4000', 'Cape 2'), /*Sweet Sugar Powder*/ +('1102977', '4700', 'Cape 2'), /*Fried Chicken God's Blessings*/ +('1102978', '3800', 'Cape 2'), /*Christmas Tree Ornament Cape*/ +('1102980', '4700', 'Cape 2'), /*Lil Dark Angel Wings*/ +('1102981', '8800', 'Cape 2'), /*Wrapped with Love Cape*/ +/*Page 27*/ +('1102982', '6400', 'Cape 2'), /*Phoenix Wing Cape*/ +('1102983', '5000', 'Cape 2'), /*Snowflake Umbrella*/ +('1102984', '3400', 'Cape 2'), /*White Night Cape*/ +('1102987', '7100', 'Cape 2'), /*Maple Galaxy Cape*/ +('1102988', '3200', 'Cape 2'), /*Winter's Whisper*/ +('1102989', '6000', 'Cape 2'), /*Winter's Whisper*/ +('1102991', '8800', 'Cape 2'), /*Polar Explorer Backpack*/ +('1103024', '7100', 'Cape 2'), /*Fantabulous Fruit*/ +('1103026', '5000', 'Cape 2'), /*Forest Breeze Floral Effect*/ +/*Page 28*/ +('1103027', '5600', 'Cape 2'), /*Underwater Essentials Cape*/ +('1103028', '3800', 'Cape 2'), /*Elunite Elemental Cape*/ +('1103029', '7600', 'Cape 2'), /*Floral Bubbles*/ +('1103031', '7400', 'Cape 2'), /*Charlotte's Garden*/ +('1103032', '4900', 'Cape 2'), /*Round-We-Go Mirror Ball*/ +('1103033', '7400', 'Cape 2'), /*Refreshing Lemon Cape*/ +('1103034', '6000', 'Cape 2'), /*Summer Flower Fairy Cape*/ +('1103035', '4000', 'Cape 2'), /*Teddy Picnic*/ +('1103036', '6000', 'Cape 2'), /*Shooting Stars*/ +/*Page 29*/ +('1103037', '3400', 'Cape 2'), /*Feather Messenger Cape*/ +('1103038', '7100', 'Cape 2'), /*Falling Darkness Cape (F)*/ +('1103039', '3200', 'Cape 2'), /*Black Shadow Cape*/ + + + +/*Page 1*/ +('1103008', '7100', 'Cape 3'), /*Pandora Cape*/ +('1103009', '4700', 'Cape 3'), /*Silver Flower Child Cape*/ +('1103010', '6000', 'Cape 3'), /*Skater Love Cape*/ +('1103011', '4000', 'Cape 3'), /*The Erda Flow*/ +('1103012', '5000', 'Cape 3'), /*Detective Mush Cape*/ +('1103013', '6000', 'Cape 3'), /*Blossom Breeze*/ +('1103014', '5600', 'Cape 3'), /*Weightless Sparkle*/ +('1103015', '3600', 'Cape 3'), /*Napoleonic Cape*/ +('1103018', '5000', 'Cape 3'), /*Water Dance*/ +/*Page 2*/ +('1103019', '5000', 'Cape 3'), /*Chooble Fluff*/ +('1103020', '4700', 'Cape 3'), /*Space Fluffs*/ +('1103021', '5600', 'Cape 3'), /*Prism Wings*/ +('1103022', '3800', 'Cape 3'), /*Maple Galaxy Cape*/ +('1103023', '4000', 'Cape 3'), /*Dream Breeze*/ +('1103056', '4700', 'Cape 3'), /*Dreamland*/ +('1103057', '7400', 'Cape 3'), /*Fairy Pearl*/ +('1103058', '4700', 'Cape 3'), /*Christmas Bunny Cape*/ +('1103060', '5600', 'Cape 3'), /*Warm Pink Bear Cape*/ +/*Page 3*/ +('1103061', '4900', 'Cape 3'), /*Warm Blue Bear Cape*/ +('1103065', '5000', 'Cape 3'), /*Chain Wings*/ +('1103066', '7400', 'Cape 3'), /*Outburst*/ +('1103067', '5600', 'Cape 3'), /*Bound by Dreams*/ +('1103068', '3600', 'Cape 3'), /*Royal Mantle*/ +('1103069', '6300', 'Cape 3'), /*Worn Ghost Cape*/ +('1103070', '5200', 'Cape 3'), /*Worn Witch Cape*/ +('1103071', '4900', 'Cape 3'), /*AT Field*/ +('1103040', '3200', 'Cape 3'), /*I Heart Cats Cape*/ +/*Page 4*/ +('1103041', '5600', 'Cape 3'), /*Pastel Wings*/ +('1103042', '4700', 'Cape 3'), /*Falling Darkness Cape (M)*/ +('1103043', '7600', 'Cape 3'), /*Custom Kitty Tail*/ +('1103044', '6000', 'Cape 3'), /*Swishing Kitty Tail*/ +('1103045', '8800', 'Cape 3'), /*Flowery Cat Balloon*/ +('1103046', '4000', 'Cape 3'), /*Shadow Tactician Cape*/ +('1103047', '5000', 'Cape 3'), /*Excavation Dog*/ +('1103048', '7600', 'Cape 3'), /*Puppy Love Samurai Tail (M)*/ +('1103049', '3400', 'Cape 3'), /*Puppy Love Samurai Tail (F)*/ +/*Page 5*/ +('1103050', '7400', 'Cape 3'), /*Golden Flash*/ +('1103051', '5000', 'Cape 3'), /*Golden Wind-up*/ +('1103052', '4000', 'Cape 3'), /*Angelic Silk*/ +('1103053', '3800', 'Cape 3'), /*Crimson Fate Seal*/ +('1103054', '3400', 'Cape 3'), /*Crimson Fate Seal*/ +('1103055', '5200', 'Cape 3'), /*Magic Bandmaster*/ +('1103089', '6400', 'Cape 3'), /*Choco Pup*/ +('1103090', '5200', 'Cape 3'), /*Fluff Pup*/ +('1103092', '5600', 'Cape 3'), /*Homeless Cat Cape*/ +/*Page 6*/ +('1103093', '8800', 'Cape 3'), /*Anniversary Cape*/ +('1103094', '6400', 'Cape 3'), /*Field of Flowers*/ +('1103095', '3600', 'Cape 3'), /*Shadow Self*/ +('1103096', '5000', 'Cape 3'), /*Squirrel Tail*/ +('1103097', '5200', 'Cape 3'), /*Effusive Exclamations*/ +('1103098', '3600', 'Cape 3'), /*Super Summer Cape (F)*/ +('1103099', '8800', 'Cape 3'), /*Super Summer Cape (M)*/ +('1103100', '3400', 'Cape 3'), /*Ark Cape*/ +('1103101', '7400', 'Cape 3'), /*Cotton Candy Wings*/ +/*Page 7*/ +('1103102', '4900', 'Cape 3'), /*Down in the Dumps*/ +('1103103', '4700', 'Cape 3'), /*Maple Gumshoe's File Fairy*/ +('1103072', '5000', 'Cape 3'), /*Soft Cloud*/ + +('1103074', '6000', 'Cape 3'), /*First Snow*/ +('1103075', '3800', 'Cape 3'), /*Shoulder Squatter*/ +('1103076', '8800', 'Cape 3'), /*Lunar New Year VIP Cape*/ +('1103077', '4900', 'Cape 3'), /*Royal Guard Cape*/ +('1103079', '4700', 'Cape 3'), /*Plum Blossom Perfume Pouch*/ +/*Page 8*/ +('1103080', '5200', 'Cape 3'), /*Ark Aura*/ +('1103081', '6300', 'Cape 3'), /*Happy Puppy*/ +('1103082', '4900', 'Cape 3'), /*World of Pink Cape*/ +('1103083', '3400', 'Cape 3'), /*Butterfly Cape*/ +('1103084', '3400', 'Cape 3'), /*Boyfriend Cape (M)*/ +('1103085', '3600', 'Cape 3'), /*Girlfriend Cape (F)*/ +('1103086', '8800', 'Cape 3'), /*Alchemist Backpack*/ +('1103087', '8800', 'Cape 3'), /*Chocoverse*/ +('1103124', '7400', 'Cape 3'), /*Maple Alliance Cape*/ +/*Page 9*/ +('1103126', '4900', 'Cape 3'), /*Misty Nocturne*/ +('1103127', '5600', 'Cape 3'), /*Misty Fantasia*/ +('1103128', '3800', 'Cape 3'), /*Misty Nocturne*/ +('1103129', '4000', 'Cape 3'), /*Misty Fantasia*/ +('1103130', '5200', 'Cape 3'), /*Seafoam Coral Brilliance*/ +('1103131', '3200', 'Cape 3'), /*Reaper's Cape*/ +('1103133', '4700', 'Cape 3'), /*Custom Puppy Tail*/ +('1103104', '6000', 'Cape 3'), /*Picnic Balloons*/ +('1103105', '3400', 'Cape 3'), /*Rock Spirit Triplets*/ +/*Page 10*/ +('1103106', '7600', 'Cape 3'), /*Picnic Time*/ +('1103107', '6300', 'Cape 3'), /*Happy Ghost Cape*/ +('1103108', '4900', 'Cape 3'), /*Erda Cape*/ +('1103110', '3600', 'Cape 3'), /*Mechanic Wings*/ +('1103111', '3200', 'Cape 3'), /*14th Anniversary Cape*/ +('1103112', '6400', 'Cape 3'), /*Superfan Tomoyo*/ +('1103114', '4900', 'Cape 3'), /*Clockwork Wings*/ +('1103115', '6400', 'Cape 3'), /*Burning Desire*/ + +/*Page 11*/ +('1103117', '7600', 'Cape 3'), /*Rain Puddle Cape*/ +('1103118', '5000', 'Cape 3'), /*Spring Green Morning*/ +('1103119', '3200', 'Cape 3'), /*Catkerchief Sack*/ +('1103152', '6400', 'Cape 3'), /*Glimmering Snowflakes*/ +('1103153', '7400', 'Cape 3'), /*Starstruck*/ +('1103154', '3800', 'Cape 3'), /*Floating Golden Piggy*/ +('1103155', '3400', 'Cape 3'), /*Cobalt Filigree Cape*/ +('1103156', '3800', 'Cape 3'), /*Lunar New Year Pudgy Piggy Cape*/ +('1103157', '4000', 'Cape 3'), /*Glittering Elegance Cape*/ +/*Page 12*/ +('1103158', '3200', 'Cape 3'), /*Plaid Pashmina (Brown)*/ +('1103159', '7600', 'Cape 3'), /*Plaid Pashmina (Green)*/ +('1103160', '6000', 'Cape 3'), /*Plaid Pashmina (Pink)*/ +('1103161', '8800', 'Cape 3'), /*Plaid Pashmina (Purple)*/ +('1103162', '3400', 'Cape 3'), /*Plaid Pashmina (Red)*/ +('1103163', '5000', 'Cape 3'), /*Plaid Pashmina (Fuschia)*/ +('1103164', '4900', 'Cape 3'), /*Plaid Pashmina (Ivory)*/ +('1103138', '4700', 'Cape 3'), /*Detective's Key*/ +('1103139', '4900', 'Cape 3'), /*Crystal Wings*/ +/*Page 13*/ +('1103140', '5600', 'Cape 3'), /*Pastel Angel Wings*/ +('1103141', '3200', 'Cape 3'), /*Heavenly Prayer Cape*/ +('1103142', '6000', 'Cape 3'), /*Alliance Commander Cape*/ +('1103144', '4700', 'Cape 3'), /*Fairy Tale Ballad*/ +('1103147', '8800', 'Cape 3'), /*Tri-color Cape*/ +('1103148', '7400', 'Cape 3'), /*Necrotic Flow*/ +('1103149', '3800', 'Cape 3'), /*Defender's Stone*/ +('1103150', '6000', 'Cape 3'), /*Regal Romance Cape*/ +('1103151', '5000', 'Cape 3'), /*Black Mage's Aura*/ +/*Page 14*/ +('1103184', '5600', 'Cape 3'), /*Springtime Sprout Cape*/ +('1103189', '4900', 'Cape 3'), /*Destroyer Cape*/ +('1103190', '3600', 'Cape 3'), /*Creator Cape*/ +('1103195', '6300', 'Cape 3'), /*Red Lotus Spirit Walker's Dark Tent*/ +('1103168', '3400', 'Cape 3'), /*Adventurer's Wings*/ +('1103169', '5600', 'Cape 3'), /*Sugarsweet Candy Cape*/ +('1103170', '5600', 'Cape 3'), /*Peek-a-Boo CONY*/ +('1103171', '7400', 'Cape 3'), /*Lavender Melody*/ +('1103172', '5200', 'Cape 3'), /*Sunny Songbird Cape*/ +/*Page 15*/ +('1103173', '7600', 'Cape 3'), /*Midnight Magician Cape*/ +('1103175', '6300', 'Cape 3'), /*Speedy Petite Wings*/ +('1103176', '6300', 'Cape 3'), /*Cursed Hunter Cape*/ +('1103179', '7600', 'Cape 3'), /*Adventurer Cape*/ +('1103181', '3800', 'Cape 3'), /*Blue Flame Hellion Cape*/ +('1103182', '4000', 'Cape 3'), /*Starry Light Cape*/ +('1103183', '3600', 'Cape 3'), /*Fox Fire Spectral Tail*/ + + + + + +/*Page 1*/ +('1702585', '3700', 'Transparent'), /*Universal Transparent Weapon*/ +('1002186', '6800', 'Transparent'), /*Transparent Hat*/ +('1012057', '6300', 'Transparent'), /*Transparent Face Accessory*/ +('1022048', '3700', 'Transparent'), /*Transparent Eye Accessory*/ +('1032024', '7800', 'Transparent'), /*Transparent Earrings*/ +('1072153', '6500', 'Transparent'), /*Transparent Shoes*/ +('1082102', '5700', 'Transparent'), /*Transparent Gloves*/ +('1092064', '6500', 'Transparent'), /*Transparent Shield*/ +('1102039', '6300', 'Transparent'), /*Transparent Cape*/ +/*Page 2*/ +('1342069', '6300', 'Transparent'), /*Transparent Katara*/ + + + + + +/* APPEARANCE */ + +/*Page 1*/ +('5160000', '3700', 'Facial Expressions'), /*Queasy*/ +('5160001', '6300', 'Facial Expressions'), /*Panicky*/ +('5160002', '5000', 'Facial Expressions'), /*Sweetness*/ +('5160003', '2700', 'Facial Expressions'), /*Smoochies*/ +('5160004', '6300', 'Facial Expressions'), /*Wink*/ +('5160005', '7400', 'Facial Expressions'), /*Ouch*/ +('5160006', '6300', 'Facial Expressions'), /*Sparkling Eyes*/ +('5160007', '4300', 'Facial Expressions'), /*Flaming*/ +('5160008', '2700', 'Facial Expressions'), /*Ray*/ +/*Page 2*/ +('5160009', '2700', 'Facial Expressions'), /*Goo Goo*/ +('5160010', '2700', 'Facial Expressions'), /*Whoa Whoa*/ +('5160011', '3700', 'Facial Expressions'), /*Constant Sigh*/ +('5160012', '5600', 'Facial Expressions'), /*Drool*/ +('5160013', '3200', 'Facial Expressions'), /*Dragon Breath*/ +('5160014', '3200', 'Facial Expressions'), /*Bleh*/ +('5160015', '3700', 'Facial Expressions'), /*Dizzy*/ +('5160016', '2700', 'Facial Expressions'), /*Awkward*/ +('5160017', '6800', 'Facial Expressions'), /*Villainous*/ +/*Page 3*/ +('5160019', '6800', 'Facial Expressions'), /*Queasy*/ +('5160020', '6300', 'Facial Expressions'), /*Panicky*/ +('5160021', '4300', 'Facial Expressions'), /*Sweetness*/ +('5160022', '7400', 'Facial Expressions'), /*Smoochies*/ +('5160023', '5600', 'Facial Expressions'), /*Wink*/ +('5160024', '5000', 'Facial Expressions'), /*Ouch*/ +('5160025', '3700', 'Facial Expressions'), /*Sparkling Eyes*/ +('5160026', '6300', 'Facial Expressions'), /*Flaming*/ +('5160027', '3700', 'Facial Expressions'), /*Ray*/ +/*Page 4*/ +('5160028', '4300', 'Facial Expressions'), /*Goo Goo*/ +('5160029', '2700', 'Facial Expressions'), /*Whoa Whoa*/ +('5160030', '7400', 'Facial Expressions'), /*Constant Sigh*/ +('5160031', '7400', 'Facial Expressions'), /*Drool*/ +('5160032', '3200', 'Facial Expressions'), /*Dragon Breath*/ +('5160033', '6800', 'Facial Expressions'), /*Bleh*/ +('5160034', '5600', 'Facial Expressions'), /*Nosebleed*/ +('5160035', '6800', 'Facial Expressions'), /*Awesome*/ +('5160036', '7400', 'Facial Expressions'), /*Troll*/ + + + +/*Page 1*/ +('5010000', '5000', 'Effect'), /*Sunny Day*/ +('5010001', '2700', 'Effect'), /*Moon & the Stars*/ +('5010002', '2700', 'Effect'), /*Colorful Rainbow*/ +('5010003', '4700', 'Effect'), /*Little Devil*/ +('5010004', '3200', 'Effect'), /*Underwater*/ +('5010005', '3700', 'Effect'), /*Looking for Love*/ +('5010006', '4700', 'Effect'), /*Baby Angel*/ +('5010007', '7400', 'Effect'), /*Fugitive*/ +('5010008', '6800', 'Effect'), /*Mr. Jackpot*/ +/*Page 2*/ +('5010009', '5000', 'Effect'), /*Martial Effect*/ +('5010010', '2700', 'Effect'), /*Play with Me*/ +('5010011', '2700', 'Effect'), /*Loner*/ +('5010012', '3200', 'Effect'), /*Equalizer*/ +('5010013', '5000', 'Effect'), /*Fireworks*/ +('5010014', '4700', 'Effect'), /*Stormy Cloud*/ +('5010015', '3700', 'Effect'), /*777 Effect*/ +('5010016', '2700', 'Effect'), /*Siren*/ +('5010017', '3700', 'Effect'), /*Twinkling Star*/ +/*Page 3*/ +('5010018', '3700', 'Effect'), /*Smile*/ +('5010019', '6300', 'Effect'), /*Heart*/ +('5010020', '6300', 'Effect'), /*Go! Korea!*/ +('5010021', '4300', 'Effect'), /*Skeleton of Horror*/ +('5010022', '2700', 'Effect'), /*Star Trail*/ +('5010023', '4700', 'Effect'), /*Pumping Heart*/ +('5010024', '4300', 'Effect'), /*The Flocking Ducks*/ +('5010025', '4700', 'Effect'), /*Silent Spectre*/ +('5010026', '3700', 'Effect'), /*Bat Manager Effect*/ +/*Page 4*/ +('5010027', '3200', 'Effect'), /*Hot Head*/ +('5010028', '5600', 'Effect'), /*Indigo Flames*/ +('5010029', '5600', 'Effect'), /*Demonfyre*/ +('5010030', '4300', 'Effect'), /*Nuclear Fire*/ +('5010031', '5000', 'Effect'), /*My Boyfriend*/ +('5010032', '4300', 'Effect'), /*My Girlfriend*/ +('5010033', '5600', 'Effect'), /*Sheer Fear*/ +('5010034', '5600', 'Effect'), /*Christmas Tree*/ +('5010035', '5000', 'Effect'), /*Snowman*/ +/*Page 5*/ +('5010038', '6800', 'Effect'), /*Shower Power*/ +('5010039', '5000', 'Effect'), /*Spotlight*/ +('5010041', '3700', 'Effect'), /*Super Symphony*/ +('5010042', '3700', 'Effect'), /*Busy Bee*/ +('5010043', '4700', 'Effect'), /*Eyelighter*/ +('5010044', '2700', 'Effect'), /*Shadow Style*/ +('5010045', '4300', 'Effect'), /*Struck by Lightning*/ +('5010046', '5600', 'Effect'), /*Maple Champion*/ +('5010048', '4700', 'Effect'), /*Maple Champion*/ +/*Page 6*/ +('5010049', '6300', 'Effect'), /*Maple Champion*/ +('5010051', '7400', 'Effect'), /*O Maplemas Tree*/ +('5010052', '3700', 'Effect'), /*Santa Sled*/ +('5010053', '6300', 'Effect'), /*Mistletoe*/ +('5010054', '4700', 'Effect'), /*Jingling Santa*/ +('5010055', '5000', 'Effect'), /*UFO*/ +('5010056', '5600', 'Effect'), /*Garden Trail*/ +('5010057', '6800', 'Effect'), /*Flower Fairy*/ +('5010059', '5600', 'Effect'), /*Trail of Darkness Effect*/ +/*Page 7*/ +('5010060', '5600', 'Effect'), /*Happy Winter Effect*/ +('5010061', '3200', 'Effect'), /*Ace of Hearts*/ +('5010064', '4300', 'Effect'), /*Rock Band Effect*/ +('5010065', '5000', 'Effect'), /*Scoreboard Effect*/ +('5010066', '2700', 'Effect'), /*Disco Effect*/ +('5010068', '4300', 'Effect'), /*Return of Angel Wing*/ +('5010069', '6800', 'Effect'), /*Seraphim's Dark Wings*/ +('5010070', '6300', 'Effect'), /*Sprite Wings*/ +('5010073', '2700', 'Effect'), /*Miss Popular*/ +/*Page 8*/ +('5010074', '4700', 'Effect'), /*Mr. Popular*/ +('5010075', '6800', 'Effect'), /*I'm in London*/ +('5010076', '4700', 'Effect'), /*PARIS Je T'aime*/ +('5010078', '4300', 'Effect'), /*Owl Effect*/ +('5010079', '5000', 'Effect'), /*Cygnus Effect*/ +('5010080', '3200', 'Effect'), /*Spring Rain*/ +('5010081', '3200', 'Effect'), /*Peacock Effect*/ +('5010082', '3700', 'Effect'), /*Shining Star*/ +('5010083', '5600', 'Effect'), /*Winter Wonderland*/ +/*Page 9*/ +('5010095', '3200', 'Effect'), /*[Sale] Winter Wonderland*/ +('5010096', '2700', 'Effect'), /*[Sale] Shining Star*/ +('5010097', '5600', 'Effect'), /*[Sale] Echo Wings*/ +('5010098', '4300', 'Effect'), /*[Sale] Long Lost Angel Wing*/ +('5010099', '4300', 'Effect'), /*[Special] Shadow Style*/ +('5010100', '5000', 'Effect'), /*Maple Style Effect*/ +('5010101', '3200', 'Effect'), /*Rainbow Wings*/ +('5010102', '2700', 'Effect'), /*Sorry!*/ +('5010103', '7400', 'Effect'), /*Friends Plz*/ +/*Page 10*/ +('5010104', '2700', 'Effect'), /*Party Plz*/ +('5010106', '5600', 'Effect'), /*Shining Effect*/ +('5010109', '3200', 'Effect'), /*Je t'aime Paris*/ +('5010110', '2700', 'Effect'), /*Rhinne's Protection*/ +('5010111', '3700', 'Effect'), /*Tropical Beach*/ +('5010112', '5000', 'Effect'), /*London Night Effect*/ +('5010113', '3200', 'Effect'), /*PSY Effect*/ + + + + + +/* PET */ + +/*Page 1*/ +('5000000', '11700', 'Pets'), /*Brown Kitty*/ +('5000001', '9800', 'Pets'), /*Brown Puppy*/ +('5000002', '8400', 'Pets'), /*Pink Bunny*/ +('5000003', '11700', 'Pets'), /*Mini Kargo*/ +('5000004', '7500', 'Pets'), /*Black Kitty*/ +('5000005', '7500', 'Pets'), /*White Bunny*/ +('5000006', '9600', 'Pets'), /*Husky*/ +('5000007', '6000', 'Pets'), /*Black Pig*/ +('5000008', '8400', 'Pets'), /*Panda*/ +/*Page 2*/ +('5000009', '10600', 'Pets'), /*Dino Boy*/ +('5000010', '9800', 'Pets'), /*Dino Girl*/ +('5000011', '7500', 'Pets'), /*Monkey*/ +('5000012', '8700', 'Pets'), /*White Tiger*/ +('5000013', '9600', 'Pets'), /*Elephant*/ +('5000014', '9800', 'Pets'), /*Rudolph*/ +('5000015', '7500', 'Pets'), /*Dasher*/ +('5000017', '9600', 'Pets'), /*Robot*/ +('5000018', '8400', 'Pets'), /*Husky*/ +/*Page 3*/ +('5000020', '10600', 'Pets'), /*Mini Yeti*/ +('5000021', '6600', 'Pets'), /*Monkey*/ +('5000022', '8700', 'Pets'), /*Turkey*/ +('5000023', '6600', 'Pets'), /*Penguin*/ +('5000024', '10600', 'Pets'), /*Jr. Balrog*/ +('5000025', '9600', 'Pets'), /*Golden Pig*/ +('5000026', '10600', 'Pets'), /*Sun Wu Kong*/ +('5000028', '14400', 'Pets'), /*Dragon*/ +('5000029', '6000', 'Pets'), /*Baby Dragon*/ +/*Page 4*/ +('5000030', '9800', 'Pets'), /*Green Dragon*/ +('5000031', '10600', 'Pets'), /*Red Dragon*/ +('5000032', '6000', 'Pets'), /*Blue Dragon*/ +('5000033', '10600', 'Pets'), /*Black Dragon*/ +('5000034', '14400', 'Pets'), /*Black Bunny*/ +('5000036', '8700', 'Pets'), /*Jr. Reaper*/ +('5000037', '8700', 'Pets'), /*Husky*/ +('5000038', '9600', 'Pets'), /*White Monkey*/ +('5000039', '9600', 'Pets'), /*Porcupine*/ +/*Page 5*/ +('5000041', '6000', 'Pets'), /*Snowman*/ +('5000042', '9600', 'Pets'), /*Kino*/ +('5000044', '6600', 'Pets'), /*Orange Tiger*/ +('5000045', '7500', 'Pets'), /*Skunk*/ +('5000047', '9600', 'Pets'), /*Robo*/ +('5000048', '14400', 'Pets'), /*Baby Robo*/ +('5000049', '7500', 'Pets'), /*Blue Robo*/ +('5000050', '6600', 'Pets'), /*Red Robo*/ +('5000051', '7500', 'Pets'), /*Green Robo*/ +/*Page 6*/ +('5000052', '9800', 'Pets'), /*Gold Robo*/ +('5000053', '11700', 'Pets'), /*Gorilla Robo*/ +('5000054', '8400', 'Pets'), /*Snail*/ +('5000055', '9800', 'Pets'), /*Crys.Rudolph*/ +('5000056', '14400', 'Pets'), /*Toucan*/ +('5000058', '9600', 'Pets'), /*White Duck*/ +('5000060', '14400', 'Pets'), /*Pink Bean*/ +('5000066', '6000', 'Pets'), /*Baby Tiger*/ +('5000067', '6000', 'Pets'), /*Weird Alien*/ +/*Page 7*/ +('5000070', '7500', 'Pets'), /*Mir*/ +('5000071', '11700', 'Pets'), /*Ruby*/ +('5000074', '9800', 'Pets'), /*Bing Monkey*/ +('5000076', '14400', 'Pets'), /*Corgi Pup*/ +('5000078', '6000', 'Pets'), /*Monkey*/ +('5000079', '11700', 'Pets'), /*Black Kitty*/ +('5000080', '11700', 'Pets'), /*Penguin*/ +('5000082', '6000', 'Pets'), /*Baby Tiger*/ +('5000083', '7500', 'Pets'), /*Persian Cat*/ +/*Page 8*/ +('5000084', '10600', 'Pets'), /*Esel*/ +('5000085', '9800', 'Pets'), /*Cake*/ +('5000086', '7500', 'Pets'), /*Pie*/ +('5000087', '14400', 'Pets'), /*Black Bunny*/ +('5000088', '7500', 'Pets'), /*Black Bunny*/ +('5000089', '11700', 'Pets'), /*Tiel*/ +('5000090', '8700', 'Pets'), /*Galiel*/ +('5000091', '8400', 'Pets'), /*Esel*/ +('5000092', '9600', 'Pets'), /*Tiel*/ +/*Page 9*/ +('5000093', '8700', 'Pets'), /*Galiel*/ +('5000096', '8700', 'Pets'), /*Dummbo*/ +('5000098', '9800', 'Pets'), /*Shark*/ +('5000100', '10600', 'Pets'), /*Kino*/ +('5000101', '11700', 'Pets'), /*White Tiger*/ +('5000102', '6000', 'Pets'), /*Mini Yeti*/ +('5000103', '14400', 'Pets'), /*Chroma Bean*/ +('5000105', '14400', 'Pets'), /*Baby Tiger*/ +('5000106', '8700', 'Pets'), /*Ruby*/ +/*Page 10*/ +('5000107', '6600', 'Pets'), /*Black Pig*/ +('5000108', '14400', 'Pets'), /*Cake*/ +('5000109', '8400', 'Pets'), /*Pie*/ +('5000110', '6000', 'Pets'), /*Corgi Pup*/ +('5000111', '8700', 'Pets'), /*Persian Cat*/ +('5000114', '8400', 'Pets'), /*Rudolph*/ +('5000116', '6000', 'Pets'), /*Jr. Reaper*/ +('5000117', '9600', 'Pets'), /*White Bunny*/ +('5000118', '6600', 'Pets'), /*Mir*/ +/*Page 11*/ +('5000120', '6000', 'Pets'), /*Tiel*/ +('5000121', '10600', 'Pets'), /*Esel*/ +('5000122', '9800', 'Pets'), /*Galiel*/ +('5000130', '11700', 'Pets'), /*Metus*/ +('5000131', '8700', 'Pets'), /*Mors*/ +('5000132', '8400', 'Pets'), /*Invidia*/ +('5000133', '9800', 'Pets'), /*Storm Dragon*/ +('5000134', '9600', 'Pets'), /*Fennec Fox*/ +('5000135', '6000', 'Pets'), /*Gingerbready*/ +/*Page 12*/ +('5000136', '9600', 'Pets'), /*Ice Knight*/ +('5000138', '9600', 'Pets'), /*Merlion Pet*/ +('5000139', '10600', 'Pets'), /*Butterfly*/ +('5000141', '8700', 'Pets'), /*Shark*/ +('5000142', '10600', 'Pets'), /*Puffram*/ +('5000143', '10600', 'Pets'), /*Craw*/ +('5000144', '6000', 'Pets'), /*Adriano*/ +('5000145', '14400', 'Pets'), /*Bonkey*/ +('5000146', '10600', 'Pets'), /*Harp Seal*/ +/*Page 13*/ +('5000147', '6600', 'Pets'), /*Penguin*/ +('5000148', '8400', 'Pets'), /*White Duck*/ +('5000149', '11700', 'Pets'), /*Silver Husky*/ +('5000150', '11700', 'Pets'), /*Pink Yeti*/ +('5000151', '8700', 'Pets'), /*Bandit*/ +('5000152', '6000', 'Pets'), /*Miracle Cat*/ +('5000155', '10600', 'Pets'), /*Abel*/ +('5000156', '10600', 'Pets'), /*Axel*/ +('5000161', '9600', 'Pets'), /*Pink*/ +/*Page 14*/ +('5000162', '8700', 'Pets'), /*Aaron*/ +('5000163', '6000', 'Pets'), /*Mint*/ +('5000167', '9600', 'Pets'), /*Starwing*/ +('5000168', '8400', 'Pets'), /*Stickman*/ +('5000170', '14400', 'Pets'), /*PSY*/ +('5000171', '6600', 'Pets'), /*MagiCookie*/ +('5000172', '6000', 'Pets'), /*Mini Yeti*/ +('5000176', '8700', 'Pets'), /*Kangaroo*/ +('5000193', '14400', 'Pets'), /*Von Soup*/ +/*Page 15*/ +('5000194', '8700', 'Pets'), /*Pink Bunny*/ +('5000195', '14400', 'Pets'), /*Black Bunny*/ +('5000197', '6000', 'Pets'), /*Sassy Snake*/ +('5000198', '8400', 'Pets'), /*Lil Moonbeam*/ +('5000199', '10600', 'Pets'), /*Adel*/ +('5000201', '14400', 'Pets'), /*Pink Bean*/ +('5000202', '10600', 'Pets'), /*Corgi Pup*/ +('5000203', '7500', 'Pets'), /*Craw*/ +('5000204', '6600', 'Pets'), /*Adriano*/ +/*Page 16*/ +('5000205', '14400', 'Pets'), /*Bonkey*/ +('5000206', '9600', 'Pets'), /*Fennec Fox*/ +('5000207', '10600', 'Pets'), /*Corgi Pup*/ +('5000209', '9800', 'Pets'), /*Storm Dragon*/ +('5000210', '8700', 'Pets'), /*Penguin*/ +('5000211', '14400', 'Pets'), /*Scurvy Bird*/ +('5000212', '9800', 'Pets'), /*Metus*/ +('5000213', '11700', 'Pets'), /*Mors*/ +('5000214', '6600', 'Pets'), /*Invidia*/ +/*Page 17*/ +('5000215', '14400', 'Pets'), /*Chunky */ +('5000216', '6600', 'Pets'), /*Brown Burro*/ +('5000217', '10600', 'Pets'), /*Blackheart*/ +('5000221', '14400', 'Pets'), /*Harp Seal*/ +('5000225', '8700', 'Pets'), /*Puffram*/ +('5000228', '6600', 'Pets'), /*Demon Metus*/ +('5000229', '10600', 'Pets'), /*Demon Mors*/ +('5000230', '9600', 'Pets'), /*Invidia*/ +('5000231', '9800', 'Pets'), /*Demon Metus*/ +/*Page 18*/ +('5000232', '8700', 'Pets'), /*Demon Mors*/ +('5000233', '8400', 'Pets'), /*Invidia*/ +('5000234', '7500', 'Pets'), /*Metus*/ +('5000235', '9600', 'Pets'), /*Mors*/ +('5000236', '14400', 'Pets'), /*Invidia*/ +('5000237', '8700', 'Pets'), /*Starwing*/ +('5000238', '9800', 'Pets'), /*Baby Tiger*/ +('5000239', '6600', 'Pets'), /*Shark*/ +('5000240', '10600', 'Pets'), /*Pink Bean*/ +/*Page 19*/ +('5000241', '9600', 'Pets'), /*Puffram*/ +('5000243', '6000', 'Pets'), /*Pink Dragon*/ +('5000244', '7500', 'Pets'), /*Ice Dragon*/ +('5000245', '7500', 'Pets'), /*Red Dragon*/ +('5000246', '9800', 'Pets'), /*Chroma Bean*/ +('5000249', '6000', 'Pets'), /*Fluffy Teddy*/ +('5000250', '6000', 'Pets'), /*Cutie Teddy*/ +('5000251', '11700', 'Pets'), /*Puffy Teddy*/ +('5000254', '9600', 'Pets'), /*Red Elly*/ +/*Page 20*/ +('5000255', '14400', 'Pets'), /*Blue Burro*/ +('5000256', '11700', 'Pets'), /*Pumpkin Jack*/ +('5000257', '9600', 'Pets'), /*Pumpkin Zack*/ +('5000258', '14400', 'Pets'), /*Pumpkin Mack*/ +('5000261', '6000', 'Pets'), /*Royal Thumpy*/ +('5000262', '6000', 'Pets'), /*Merlion*/ +('5000263', '6600', 'Pets'), /*Butterfly*/ +('5000264', '8400', 'Pets'), /*Kangaroo*/ +('5000265', '11700', 'Pets'), /*Crys.Rudolph*/ +/*Page 21*/ +('5000266', '9800', 'Pets'), /*Pink Bean*/ +('5000269', '6000', 'Pets'), /*Hedgehog*/ +('5000270', '10600', 'Pets'), /*Fennec Fox*/ +('5000271', '14400', 'Pets'), /*Frumpy Koala*/ +('5000272', '6600', 'Pets'), /*Grumpy Koala*/ +('5000273', '9800', 'Pets'), /*Nerdy Koala*/ +('5000275', '7500', 'Pets'), /*Chippermunk*/ +('5000276', '8400', 'Pets'), /*Chipmunch*/ +('5000277', '7500', 'Pets'), /*Chubmunk*/ +/*Page 22*/ +('5000281', '6000', 'Pets'), /*Vile Metus*/ +('5000282', '7500', 'Pets'), /*Dire Mors*/ +('5000283', '8400', 'Pets'), /*Wild Invidia*/ +('5000290', '8700', 'Pets'), /*Honey Angel*/ +('5000291', '8700', 'Pets'), /*Lime Angel*/ +('5000292', '9600', 'Pets'), /*Peach Angel*/ +('5000293', '9600', 'Pets'), /*Roo-A*/ +('5000294', '9600', 'Pets'), /*Roo-B*/ +('5000295', '14400', 'Pets'), /*Roo-C*/ +/*Page 23*/ +('5000296', '14400', 'Pets'), /*Toasty Devil*/ +('5000297', '7500', 'Pets'), /*Icy Devil*/ +('5000298', '8700', 'Pets'), /*Miasma Devil*/ +('5000299', '10600', 'Pets'), /*Gingerhead*/ +('5000300', '6000', 'Pets'), /*Devil Ipos*/ +('5000301', '11700', 'Pets'), /*Devil Shaz*/ +('5000302', '10600', 'Pets'), /*Devil Ose*/ +('5000303', '6000', 'Pets'), /*Devil Iros*/ +('5000304', '8700', 'Pets'), /*Devil Maz*/ +/*Page 24*/ +('5000305', '8700', 'Pets'), /*Devil Fose*/ +('5000306', '8400', 'Pets'), /*Devil Imos*/ +('5000307', '10600', 'Pets'), /*Devil Gaz*/ +('5000308', '6600', 'Pets'), /*Devil Tose*/ +('5000309', '9600', 'Pets'), /*Mini Queen*/ +('5000310', '10600', 'Pets'), /*Von Bon*/ +('5000311', '6000', 'Pets'), /*Pierre*/ +('5000312', '14400', 'Pets'), /*Blue Dragon*/ +('5000314', '9800', 'Pets'), /*Sun Wu Kong*/ +/*Page 25*/ +('5000316', '11700', 'Pets'), /*Sassy Snake*/ +('5000317', '10600', 'Pets'), /*Ice Knight*/ +('5000318', '6000', 'Pets'), /*Yeti Robot*/ +('5000320', '6000', 'Pets'), /*Pinkadillo*/ +('5000321', '8700', 'Pets'), /*Yellowdillo*/ +('5000322', '9600', 'Pets'), /*Greenadillo*/ +('5000328', '8700', 'Pets'), /*Von Soup*/ +('5000329', '9800', 'Pets'), /*Red Dragon*/ +('5000330', '9800', 'Pets'), /*Jr. Von Leon*/ +/*Page 26*/ +('5000331', '9800', 'Pets'), /*Jr. Orchid*/ +('5000332', '8400', 'Pets'), /*Jr. Hilla*/ +('5000337', '10600', 'Pets'), /*PSY*/ +('5000341', '9800', 'Pets'), /*Punchyroo*/ +('5000342', '11700', 'Pets'), /*Unripe Nut*/ +('5000343', '6000', 'Pets'), /*Chestnut*/ +('5000344', '8400', 'Pets'), /*Burnt Nut*/ +('5000345', '6600', 'Pets'), /*Tiny Gollux*/ +('5000352', '9800', 'Pets'), /*White Candle*/ +/*Page 27*/ +('5000353', '14400', 'Pets'), /*Blue Candle*/ +('5000354', '6000', 'Pets'), /*Grape Candle*/ +('5000362', '6600', 'Pets'), /*RED Rudolph*/ +('5000363', '8700', 'Pets'), /*RED Yeti*/ +('5000364', '9800', 'Pets'), /*RED Penguin*/ +('5000365', '6600', 'Pets'), /*Kiwi Puff*/ +('5000366', '11700', 'Pets'), /*Berry Puff*/ +('5000367', '8400', 'Pets'), /*Mango Puff*/ +('5000368', '9800', 'Pets'), /*Happy Bean*/ +/*Page 28*/ +('5000369', '8700', 'Pets'), /*Li'l Lai*/ +('5000370', '7500', 'Pets'), /*Li'l Fort*/ +('5000371', '10600', 'Pets'), /*L'il Arby*/ +('5000375', '6600', 'Pets'), /*Pink Pengy*/ +('5000376', '9800', 'Pets'), /*Purple Pengy*/ +('5000377', '6600', 'Pets'), /*Blue Pengy*/ +('5000381', '11700', 'Pets'), /*Toto*/ +('5000382', '8700', 'Pets'), /*Frankie*/ +('5000383', '10600', 'Pets'), /*Lil Moonbeam*/ +/*Page 29*/ +('5000384', '6600', 'Pets'), /*Petite Mario*/ +('5000385', '7500', 'Pets'), /*Abel*/ +('5000386', '11700', 'Pets'), /*Axel*/ + + + +/*Page 1*/ +('5000387', '6600', 'Pets 2'), /*Adel*/ +('5000402', '14400', 'Pets 2'), /*Ballet Lyn*/ +('5000403', '9600', 'Pets 2'), /*Soldier Hong*/ +('5000404', '6600', 'Pets 2'), /*Soldier Chun*/ +('5000405', '6000', 'Pets 2'), /*Green Chad*/ +('5000406', '9800', 'Pets 2'), /*Pink Mel*/ +('5000407', '7500', 'Pets 2'), /*Orange Leon*/ +('5000408', '6000', 'Pets 2'), /*Jr. Sierra*/ +('5000409', '8700', 'Pets 2'), /*Jr. Ryan*/ +/*Page 2*/ +('5000414', '10600', 'Pets 2'), /*Lil' Bobble*/ +('5000415', '14400', 'Pets 2'), /*Lil' Lotus*/ +('5000416', '6600', 'Pets 2'), /*Ill Orchid*/ +('5000417', '9600', 'Pets 2'), /*Gelimer*/ +('5000424', '9800', 'Pets 2'), /*Sheep*/ +('5000428', '9600', 'Pets 2'), /*Holoyeti*/ +('5000429', '6000', 'Pets 2'), /*Pink Seal*/ +('5000430', '14400', 'Pets 2'), /*New Seal*/ +('5000431', '6600', 'Pets 2'), /*Newer Seal*/ +/*Page 3*/ +('5000432', '9600', 'Pets 2'), /*Pinker Seal*/ +('5000433', '14400', 'Pets 2'), /*War Sheep*/ +('5000434', '9600', 'Pets 2'), /*Mage Sheep*/ +('5000435', '9800', 'Pets 2'), /*Cleric Sheep*/ +('5000437', '6000', 'Pets 2'), /*Orange*/ +('5000442', '6600', 'Pets 2'), /*Gelimer*/ +('5000443', '9600', 'Pets 2'), /*Furry Elwin*/ +('5000444', '10600', 'Pets 2'), /*Fluffy Lily*/ +('5000445', '9800', 'Pets 2'), /*Baby Nero*/ +/*Page 4*/ +('5000446', '6600', 'Pets 2'), /*Strawbear*/ +('5000447', '14400', 'Pets 2'), /*Bananabear*/ +('5000448', '7500', 'Pets 2'), /*Cookiebear*/ +('5000449', '9800', 'Pets 2'), /*Gengerbready*/ +('5000451', '8700', 'Pets 2'), /*Gorilla Robo*/ +('5000452', '10600', 'Pets 2'), /*Squishy Bean*/ +('5000456', '6000', 'Pets 2'), /*Macha Man*/ +('5000457', '7500', 'Pets 2'), /*Lady Hot Tea*/ +('5000458', '6000', 'Pets 2'), /*Captain Cafe*/ +/*Page 5*/ +('5000459', '8700', 'Pets 2'), /*Black Kitty*/ +('5000460', '6000', 'Pets 2'), /*Sailor Seal*/ +('5000461', '10600', 'Pets 2'), /*Admiral Seal*/ +('5000462', '9800', 'Pets 2'), /*Steward Seal*/ +('5000463', '8700', 'Pets 2'), /*Burnt Nut*/ +('5000464', '8700', 'Pets 2'), /*Gingerhead*/ +('5000465', '6600', 'Pets 2'), /*Orange*/ +('5000466', '10600', 'Pets 2'), /*Ducky*/ +('5000468', '11700', 'Pets 2'), /*Starwing*/ +/*Page 6*/ +('5000469', '6600', 'Pets 2'), /*Tiny Nero*/ +('5000470', '9600', 'Pets 2'), /*Cheesy Cat*/ +('5000471', '6600', 'Pets 2'), /*Samson Cat*/ +('5000473', '11700', 'Pets 2'), /*Little Ursus*/ +('5000474', '9600', 'Pets 2'), /*Moist Cake*/ +('5000475', '6000', 'Pets 2'), /*Nutty Pie*/ +('5000476', '11700', 'Pets 2'), /*Sweet Candy*/ +('5000479', '9800', 'Pets 2'), /*Lil Zakum*/ +('5000480', '11700', 'Pets 2'), /*Ice Dragon*/ +/*Page 7*/ +('5000482', '7500', 'Pets 2'), /*Galiel*/ +('5000483', '8700', 'Pets 2'), /*Mouse Monkey*/ +('5000484', '10600', 'Pets 2'), /*Lil Evan*/ +('5000485', '11700', 'Pets 2'), /*Lil Aran*/ +('5000486', '14400', 'Pets 2'), /*Lil Phantom*/ +('5000490', '10600', 'Pets 2'), /*Lil Luminous*/ +('5000491', '9600', 'Pets 2'), /*Lil Mercedes*/ +('5000492', '14400', 'Pets 2'), /*Lil Shade*/ +('5000493', '11700', 'Pets 2'), /*Persian Cat*/ +/*Page 8*/ +('5000494', '9600', 'Pets 2'), /*Lil Damien*/ +('5000495', '6000', 'Pets 2'), /*Lil Alicia*/ +('5000496', '9600', 'Pets 2'), /*Lil Lilin*/ +('5000497', '11700', 'Pets 2'), /*Invidia*/ +('5000498', '9800', 'Pets 2'), /*Fennec Fox*/ +('5000499', '7500', 'Pets 2'), /*Stickman*/ +('5000500', '9800', 'Pets 2'), /*Turkey*/ +('5000501', '9600', 'Pets 2'), /*Pumpkin Jack*/ +('5000502', '7500', 'Pets 2'), /*Pumpkin O'*/ +/*Page 9*/ +('5000503', '7500', 'Pets 2'), /*Pumpkin L*/ +('5000505', '11700', 'Pets 2'), /*Frankie*/ +('5000507', '10600', 'Pets 2'), /*Blue Husky*/ +('5000508', '10600', 'Pets 2'), /*Crys.Rudolph*/ +('5000509', '14400', 'Pets 2'), /*Snowman*/ +('5000510', '10600', 'Pets 2'), /*Fluffram*/ +('5000511', '14400', 'Pets 2'), /*Jr. Von Leon*/ +('5000513', '7500', 'Pets 2'), /*Jr. Hilla*/ +('5000514', '6000', 'Pets 2'), /*Macha Man*/ +/*Page 10*/ +('5000515', '9800', 'Pets 2'), /*Lady Hot Tea*/ +('5000516', '6600', 'Pets 2'), /*Captain Cafe*/ +('5000517', '8700', 'Pets 2'), /*Hekaton*/ +('5000518', '6600', 'Pets 2'), /*Hekaton S*/ +('5000519', '6000', 'Pets 2'), /*Hekaton E*/ +('5000520', '6600', 'Pets 2'), /*Hekaton A*/ +('5000521', '7500', 'Pets 2'), /*Lil' Ninja*/ +('5000522', '9600', 'Pets 2'), /*Toucan*/ +('5000524', '11700', 'Pets 2'), /*Alpaca*/ +/*Page 11*/ +('5000525', '10600', 'Pets 2'), /*Lil' Lotus*/ +('5000526', '8400', 'Pets 2'), /*Ill Orchid*/ +('5000527', '9800', 'Pets 2'), /*Gelimer*/ +('5000528', '7500', 'Pets 2'), /*Meerkat Mob*/ +('5000529', '8400', 'Pets 2'), /*Pudgycat*/ +('5000530', '6600', 'Pets 2'), /*War Sheep*/ +('5000531', '7500', 'Pets 2'), /*Mage Sheep*/ +('5000532', '7500', 'Pets 2'), /*Cleric Sheep*/ +('5000533', '6000', 'Pets 2'), /*Furry Elwin*/ +/*Page 12*/ +('5000534', '8400', 'Pets 2'), /*Fluffy Lily*/ +('5000535', '6600', 'Pets 2'), /*Baby Nero*/ +('5000536', '7500', 'Pets 2'), /*Strawbear*/ +('5000537', '11700', 'Pets 2'), /*Bananabear*/ +('5000538', '6600', 'Pets 2'), /*Cookiebear*/ +('5000545', '14400', 'Pets 2'), /*Black Bean*/ +('5000546', '8700', 'Pets 2'), /*Skunk*/ +('5000547', '11700', 'Pets 2'), /*Porcupine*/ +('5000548', '11700', 'Pets 2'), /*Roo-A*/ +/*Page 13*/ +('5000549', '9800', 'Pets 2'), /*Roo-B*/ +('5000550', '11700', 'Pets 2'), /*Roo-C*/ +('5000551', '14400', 'Pets 2'), /*Pink Dragon*/ +('5000552', '8400', 'Pets 2'), /*Ice Dragon*/ +('5000553', '7500', 'Pets 2'), /*Red Dragon*/ +('5000554', '6600', 'Pets 2'), /*Kiwi Puff*/ +('5000555', '14400', 'Pets 2'), /*Berry Puff*/ +('5000556', '7500', 'Pets 2'), /*Mango Puff*/ +('5000557', '10600', 'Pets 2'), /*Tiny Nero*/ +/*Page 14*/ +('5000558', '9800', 'Pets 2'), /*Cheesy Cat*/ +('5000559', '6000', 'Pets 2'), /*Samson Cat*/ +('5000561', '9600', 'Pets 2'), /*Monkey*/ +('5000563', '6600', 'Pets 2'), /*Mouse Monkey*/ +('5000568', '8400', 'Pets 2'), /*Purple Cake*/ +('5000569', '7500', 'Pets 2'), /*Stjartmes*/ +('5000570', '9800', 'Pets 2'), /*Lil Tutu*/ +('5000571', '7500', 'Pets 2'), /*Lil Nene*/ +('5000572', '6600', 'Pets 2'), /*Lil Lingling*/ +/*Page 15*/ +('5000573', '9600', 'Pets 2'), /*Lil Evan*/ +('5000574', '6000', 'Pets 2'), /*Lil Aran*/ +('5000575', '6000', 'Pets 2'), /*Lil Phantom*/ +('5000576', '6600', 'Pets 2'), /*Lil Luminous*/ +('5000577', '10600', 'Pets 2'), /*Lil Mercedes*/ +('5000578', '6000', 'Pets 2'), /*Lil Shade*/ +('5000579', '9600', 'Pets 2'), /*Gorilla Robo*/ +('5000580', '14400', 'Pets 2'), /*Lil Damien*/ +('5000581', '10600', 'Pets 2'), /*Lil Alicia*/ +/*Page 16*/ +('5000582', '10600', 'Pets 2'), /*Lil Lilin*/ +('5000585', '14400', 'Pets 2'), /*Lil Tengu*/ +('5000586', '7500', 'Pets 2'), /*Beagle*/ +('5000587', '7500', 'Pets 2'), /*Salem Cat*/ +('5000588', '8700', 'Pets 2'), /*Binx Cat*/ +('5000589', '14400', 'Pets 2'), /*Kit Cat*/ +('5000590', '8700', 'Pets 2'), /*Bichon*/ +('5000600', '7500', 'Pets 2'), /*Ursie*/ +('5000601', '7500', 'Pets 2'), /*Punch Cat*/ +/*Page 17*/ +('5000602', '8400', 'Pets 2'), /*Iron Rabbit*/ +('5000604', '6000', 'Pets 2'), /*Brown Kitty*/ +('5000605', '8700', 'Pets 2'), /*Lil Zakum*/ +('5000606', '9600', 'Pets 2'), /*Stjartmes*/ +('5000607', '8400', 'Pets 2'), /*Lil Tutu*/ +('5000608', '6600', 'Pets 2'), /*Lil Nene*/ +('5000609', '8400', 'Pets 2'), /*Lil Lingling*/ +('5000610', '10600', 'Pets 2'), /*Moist Cake*/ +('5000611', '7500', 'Pets 2'), /*Purple Cake*/ +/*Page 18*/ +('5000612', '6000', 'Pets 2'), /*Lil Moonbeam*/ +('5000613', '11700', 'Pets 2'), /*Jr. Hilla*/ +('5000614', '11700', 'Pets 2'), /*Jr. Orchid*/ +('5000615', '9600', 'Pets 2'), /*Jr. Von Leon*/ +('5000617', '8400', 'Pets 2'), /*Stjartmes*/ +('5000618', '9600', 'Pets 2'), /*Stjartmes*/ +('5000623', '8700', 'Pets 2'), /*Esel*/ +('5000626', '9600', 'Pets 2'), /*Lil Damien*/ +('5000627', '14400', 'Pets 2'), /*Lil Alicia*/ +/*Page 19*/ +('5000628', '6000', 'Pets 2'), /*Lil Lilin*/ +('5000629', '14400', 'Pets 2'), /*Merlion Pet*/ +('5000630', '9800', 'Pets 2'), /*Toucan*/ +('5000631', '10600', 'Pets 2'), /*Lil Tengu*/ +('5000632', '14400', 'Pets 2'), /*Beagle*/ +('5000636', '6000', 'Pets 2'), /*Salem Cat*/ +('5000637', '6600', 'Pets 2'), /*Binx Cat*/ +('5000638', '6000', 'Pets 2'), /*Kit Cat*/ +('5000639', '6600', 'Pets 2'), /*Bichon*/ +/*Page 20*/ +('5000644', '6000', 'Pets 2'), /*Craw*/ +('5000645', '8700', 'Pets 2'), /*Adriano*/ +('5000646', '9800', 'Pets 2'), /*Bonkey*/ +('5000647', '14400', 'Pets 2'), /*Mage Sheep*/ +('5000648', '11700', 'Pets 2'), /*War Sheep*/ +('5000649', '10600', 'Pets 2'), /*Cleric Sheep*/ +('5000650', '8400', 'Pets 2'), /*Furry Elwin*/ +('5000651', '9600', 'Pets 2'), /*Fluffy Lily*/ +('5000652', '9600', 'Pets 2'), /*Baby Nero*/ + + + +/*Page 1*/ +('1802000', '2700', 'Pet Appearance'), /*Red Ribbon*/ +('1802001', '7400', 'Pet Appearance'), /*Yellow Hat*/ +('1802002', '7400', 'Pet Appearance'), /*Red Hat*/ +('1802003', '3200', 'Pet Appearance'), /*Black Hat*/ +('1802004', '3700', 'Pet Appearance'), /*Pink Laced Cap*/ +('1802005', '5000', 'Pet Appearance'), /*Sky Blue Lace Cap*/ +('1802006', '4700', 'Pet Appearance'), /*Blue Top Hat*/ +('1802007', '4300', 'Pet Appearance'), /*Red Top Hat*/ +('1802008', '5600', 'Pet Appearance'), /*Rudolph's Hat*/ +/*Page 2*/ +('1802009', '6300', 'Pet Appearance'), /*Tree Hat*/ +('1802010', '6300', 'Pet Appearance'), /*Mushroom Suit*/ +('1802011', '4700', 'Pet Appearance'), /*Red Fur Coat*/ +('1802012', '6800', 'Pet Appearance'), /*Chestnut Cap*/ +('1802013', '3200', 'Pet Appearance'), /*Red Scarf*/ +('1802014', '7400', 'Pet Appearance'), /*Mini Kargo Wings*/ +('1802015', '2700', 'Pet Appearance'), /*Dino King & Queen*/ +('1802016', '3700', 'Pet Appearance'), /*Husky's Yellow Tights*/ +('1802017', '5000', 'Pet Appearance'), /*Monkey Sack*/ +/*Page 3*/ +('1802018', '7400', 'Pet Appearance'), /*Panda's Clown Costume*/ +('1802019', '4300', 'Pet Appearance'), /*Rudolph's Sleigh*/ +('1802020', '4300', 'Pet Appearance'), /*White Tiger's Thief Suit*/ +('1802021', '6800', 'Pet Appearance'), /*Elephant Hat*/ +('1802022', '6800', 'Pet Appearance'), /*Aladin Vest*/ +('1802023', '6300', 'Pet Appearance'), /*Pelvis Hair*/ +('1802024', '5600', 'Pet Appearance'), /*White Tiger the Wizard*/ +('1802025', '5600', 'Pet Appearance'), /*Bunny Suit*/ +('1802026', '3200', 'Pet Appearance'), /*Prince Pepe*/ +/*Page 4*/ +('1802027', '6800', 'Pet Appearance'), /*Husky's Bare Bones*/ +('1802028', '2700', 'Pet Appearance'), /*Dino Ghosty*/ +('1802029', '5000', 'Pet Appearance'), /*Panda's Pet-o-Lantern*/ +('1802030', '5000', 'Pet Appearance'), /*Penguin Earmuff Set*/ +('1802031', '4700', 'Pet Appearance'), /*Cowboy Kargo*/ +('1802032', '4300', 'Pet Appearance'), /*Snowboard Gear*/ +('1802033', '2700', 'Pet Appearance'), /*Crimson Mask*/ +('1802034', '6800', 'Pet Appearance'), /*White Angel*/ +('1802035', '5600', 'Pet Appearance'), /*Cute Beggar Overall*/ +/*Page 5*/ +('1802036', '6300', 'Pet Appearance'), /*Golden Pig Fortune Pouch*/ +('1802037', '5600', 'Pet Appearance'), /*Husky's Oinker Suit*/ +('1802038', '4300', 'Pet Appearance'), /*Mini Celestial Wand*/ +('1802039', '6800', 'Pet Appearance'), /*Golden Pig Lucky Sack*/ +('1802042', '6800', 'Pet Appearance'), /*Baby Turkey Carriage*/ +('1802044', '7400', 'Pet Appearance'), /*Dragon's soul*/ +('1802045', '7400', 'Pet Appearance'), /*Jr. Reaper's Guitar */ +('1802046', '7400', 'Pet Appearance'), /*Rabbit Ears*/ +('1802047', '5600', 'Pet Appearance'), /*Porcupine Sunglasses*/ +/*Page 6*/ +('1802048', '7400', 'Pet Appearance'), /*Dragon Armor*/ +('1802049', '6800', 'Pet Appearance'), /*Jr. Reaper's Sign (I'm with stoopid)*/ +('1802050', '3700', 'Pet Appearance'), /*Jr. Reaper's Sign (<--Noob)*/ +('1802051', '4300', 'Pet Appearance'), /*Jr. Reaper's Sign (cc plz)*/ +('1802052', '4700', 'Pet Appearance'), /*Jr. Reaper's Sign (I love pie)*/ +('1802053', '2700', 'Pet Appearance'), /*Snowman Gear*/ +('1802054', '6300', 'Pet Appearance'), /*Kino's Green Mushroom Hat*/ +('1802055', '3200', 'Pet Appearance'), /*Gas Mask*/ +('1802059', '3200', 'Pet Appearance'), /*Jail Bird Pet Costume*/ +/*Page 7*/ +('1802060', '6300', 'Pet Appearance'), /*Crystal Rudolph's Wings*/ +('1802061', '3700', 'Pet Appearance'), /*Scuba Mask*/ +('1802062', '4700', 'Pet Appearance'), /*Starry Stereo Headset*/ +('1802063', '3700', 'Pet Appearance'), /*Baby Tiger Wings*/ +('1802064', '4300', 'Pet Appearance'), /*Alien's Pet*/ +('1802065', '5600', 'Pet Appearance'), /*Baby Tiger Wings*/ +('1802066', '5000', 'Pet Appearance'), /*Dragon Egg Shell*/ +('1802067', '6800', 'Pet Appearance'), /*Scuba Mask*/ +('1802068', '2700', 'Pet Appearance'), /*Gas Mask*/ +/*Page 8*/ +('1802070', '2700', 'Pet Appearance'), /*Pilot's Cat*/ +('1802071', '4700', 'Pet Appearance'), /*Pink Oxygen Tank*/ +('1802072', '4700', 'Pet Appearance'), /*Caught Fish*/ +('1802073', '6800', 'Pet Appearance'), /*Blue Birdy*/ +('1802077', '6800', 'Pet Appearance'), /*Mango Creampuff Wing's*/ +('1802078', '6300', 'Pet Appearance'), /*Esel's Coronet*/ +('1802079', '3200', 'Pet Appearance'), /*B-Day Candle*/ +('1802080', '6300', 'Pet Appearance'), /*Tiel's Tiara*/ +('1802081', '4300', 'Pet Appearance'), /*Galiel's Angel Star*/ +/*Page 9*/ +('1802082', '6800', 'Pet Appearance'), /*Pink Yeti's Blue BFF*/ +('1802083', '5600', 'Pet Appearance'), /*Silver Husky's Hip Glasses*/ +('1802084', '2700', 'Pet Appearance'), /*Dummbo's Hat*/ +('1802085', '6800', 'Pet Appearance'), /*Red Ribbon*/ +('1802086', '3700', 'Pet Appearance'), /*Mini Kargo Wings*/ +('1802087', '6800', 'Pet Appearance'), /*Blue Top Hat*/ +('1802088', '5000', 'Pet Appearance'), /*Red Top Hat*/ +('1802089', '3700', 'Pet Appearance'), /*Yellow Hat*/ +('1802090', '5000', 'Pet Appearance'), /*Red Hat*/ +/*Page 10*/ +('1802091', '4700', 'Pet Appearance'), /*Black Hat*/ +('1802092', '4300', 'Pet Appearance'), /*Pink Laced Cap*/ +('1802093', '6300', 'Pet Appearance'), /*Sky Blue Laced Cap*/ +('1802094', '5000', 'Pet Appearance'), /*Red Scarf*/ +('1802095', '3200', 'Pet Appearance'), /*Mushroom Suit*/ +('1802096', '5600', 'Pet Appearance'), /*Husky Yellow Tights*/ +('1802097', '7400', 'Pet Appearance'), /*Dino King & Queen*/ +('1802098', '7400', 'Pet Appearance'), /*Bunny Suit*/ +('1802099', '6300', 'Pet Appearance'), /*Monkey Sack*/ +/*Page 11*/ +('1802100', '4700', 'Pet Appearance'), /*Pet Collar*/ +('1802101', '4700', 'Pet Appearance'), /*Pet Label Ring*/ +('1802300', '4700', 'Pet Appearance'), /*Bare Bones*/ +('1802301', '3200', 'Pet Appearance'), /*Ghosty*/ +('1802302', '4700', 'Pet Appearance'), /*Pet-o-Lantern*/ +('1802303', '5600', 'Pet Appearance'), /*Clown Dress*/ +('1802304', '5600', 'Pet Appearance'), /*Penguin Earmuff Set*/ +('1802305', '4300', 'Pet Appearance'), /*White Tiger Suit*/ +('1802306', '3200', 'Pet Appearance'), /*Oinker Suit*/ +/*Page 12*/ +('1802307', '3200', 'Pet Appearance'), /*Pelvis Hair*/ +('1802308', '6800', 'Pet Appearance'), /*Prince Pepe*/ +('1802309', '6300', 'Pet Appearance'), /*Crimson Mask*/ +('1802310', '7400', 'Pet Appearance'), /*Cowboy Kargo*/ +('1802311', '7400', 'Pet Appearance'), /*White Angel*/ +('1802312', '5600', 'Pet Appearance'), /*Guitar */ +('1802313', '4700', 'Pet Appearance'), /*Cute Beggar Overall*/ +('1802314', '7400', 'Pet Appearance'), /*Baby Turkey Carriage*/ +('1802315', '3200', 'Pet Appearance'), /*Dragon Armor*/ +/*Page 13*/ +('1802316', '6800', 'Pet Appearance'), /*Porcupine Sunglasses*/ +('1802317', '3200', 'Pet Appearance'), /*Jr. Reaper Sign (I'm with stoopid)*/ +('1802318', '2700', 'Pet Appearance'), /*Jr. Reaper Sign (cc plz)*/ +('1802319', '4300', 'Pet Appearance'), /*Snowman Gear*/ +('1802320', '6300', 'Pet Appearance'), /*Jr. Reaper Sign (<--Noob)*/ +('1802321', '3200', 'Pet Appearance'), /*Jr. Reaper Sign (I love pie)*/ +('1802322', '4300', 'Pet Appearance'), /*Chestnut Cap*/ +('1802323', '4700', 'Pet Appearance'), /*Gas Mask*/ +('1802324', '5000', 'Pet Appearance'), /*Jail Bird Pet Costume*/ +/*Page 14*/ +('1802325', '5000', 'Pet Appearance'), /*Scuba Mask*/ +('1802326', '3200', 'Pet Appearance'), /*Kino's Green Mushroom Hat*/ +('1802327', '6800', 'Pet Appearance'), /*Starry Stereo Headset*/ +('1802328', '2700', 'Pet Appearance'), /*Baby Tiger Wings*/ +('1802329', '6300', 'Pet Appearance'), /*Alien's Pet*/ +('1802330', '6800', 'Pet Appearance'), /*Dragon Egg Shell*/ +('1802331', '2700', 'Pet Appearance'), /*Rabbit Ears*/ +('1802332', '5600', 'Pet Appearance'), /*Pink Oxygen Tank*/ +('1802333', '3200', 'Pet Appearance'), /*B-Day Candle*/ +/*Page 15*/ +('1802334', '4700', 'Pet Appearance'), /*Fish*/ +('1802335', '4300', 'Pet Appearance'), /*Blue Birdy*/ +('1802336', '5000', 'Pet Appearance'), /*Mini Celestial Wand*/ +('1802337', '5600', 'Pet Appearance'), /*Tube*/ +('1802338', '4300', 'Pet Appearance'), /*Pink Bean's Headset*/ +('1802339', '3700', 'Pet Appearance'), /*Blue Birdy*/ +('1802340', '5000', 'Pet Appearance'), /*Craw's Pirate Hat*/ +('1802341', '2700', 'Pet Appearance'), /*Adriano's Hat*/ +('1802342', '6800', 'Pet Appearance'), /*Bonkey's Ammunition Box*/ +/*Page 16*/ +('1802343', '6800', 'Pet Appearance'), /*Starry Muffler*/ +('1802344', '5600', 'Pet Appearance'), /*Parrot Admiral Hat*/ +('1802345', '4300', 'Pet Appearance'), /*Penguin Earmuff Set*/ +('1802346', '5600', 'Pet Appearance'), /*Ghost of Fear*/ +('1802347', '6800', 'Pet Appearance'), /*Ghost of Death*/ +('1802348', '6800', 'Pet Appearance'), /*Ghost of Jealousy*/ +('1802349', '5600', 'Pet Appearance'), /*Dragon Orb*/ +('1802350', '2700', 'Pet Appearance'), /*Caught Fish*/ +('1802351', '5000', 'Pet Appearance'), /*Bean's Headset*/ +/*Page 17*/ +('1802352', '4700', 'Pet Appearance'), /*Bandit Goggles*/ +('1802353', '6800', 'Pet Appearance'), /*Sanchito's Carrot*/ +('1802354', '2700', 'Pet Appearance'), /*Black-hearted Earrings*/ +('1802365', '5000', 'Pet Appearance'), /*Harp Seal Hat*/ +('1802366', '4700', 'Pet Appearance'), /*Puffram's Golden Horn*/ +('1802367', '2700', 'Pet Appearance'), /*Gingerbready Bow Tie*/ +('1802368', '5600', 'Pet Appearance'), /*Frost Mallet*/ +('1802369', '5600', 'Pet Appearance'), /*Tiny Fright*/ +('1802370', '5600', 'Pet Appearance'), /*Tiny Sadness*/ +/*Page 18*/ +('1802371', '6800', 'Pet Appearance'), /*Tiny Envy*/ +('1802372', '3200', 'Pet Appearance'), /*Sunglass*/ +('1802373', '6300', 'Pet Appearance'), /*Rose*/ +('1802375', '4300', 'Pet Appearance'), /*Starwing's Star Trail*/ +('1802378', '3200', 'Pet Appearance'), /*Shark's Mini Tube*/ +('1802380', '4700', 'Pet Appearance'), /*Blue Light Ring*/ +('1802381', '5600', 'Pet Appearance'), /*Golden Light Ring*/ +('1802382', '7400', 'Pet Appearance'), /*Purple Light Ring*/ +('1802384', '6300', 'Pet Appearance'), /*Fluffy Teddy's Bunny Ears*/ +/*Page 19*/ +('1802385', '3200', 'Pet Appearance'), /*Cutie Teddy's Baby Bonnet*/ +('1802386', '6300', 'Pet Appearance'), /*Puffy Teddy's Crown*/ +('1802387', '6300', 'Pet Appearance'), /*Red Elly's Dress Hat*/ +('1802388', '6800', 'Pet Appearance'), /*Blue Burro's Toy Carrot*/ +('1802389', '3700', 'Pet Appearance'), /*Pumpkin Jack's Magic Lantern*/ +('1802390', '2700', 'Pet Appearance'), /*Pumpkin Zack's Magic Lantern*/ +('1802391', '7400', 'Pet Appearance'), /*Pumpkin Mack's Magic Lantern*/ +('1802392', '3200', 'Pet Appearance'), /*Boxing Gloves*/ +('1802394', '5600', 'Pet Appearance'), /*Baby Frumpy Koala*/ +/*Page 20*/ +('1802395', '3700', 'Pet Appearance'), /*Baby Grumpy Koala*/ +('1802396', '2700', 'Pet Appearance'), /*Baby Nerdy Koala*/ +('1802418', '4700', 'Pet Appearance'), /*Chippermunk's Acorn */ +('1802419', '4700', 'Pet Appearance'), /*Chipmunch's Acorn*/ +('1802420', '2700', 'Pet Appearance'), /*Chubmunk's Acorn*/ +('1802424', '5000', 'Pet Appearance'), /*Honey Halo*/ +('1802425', '5600', 'Pet Appearance'), /*Lime Halo*/ +('1802426', '6300', 'Pet Appearance'), /*Peach Halo*/ +('1802427', '4700', 'Pet Appearance'), /*Roo-A Baby Bonnet*/ +/*Page 21*/ +('1802428', '7400', 'Pet Appearance'), /*Roo-B Baby Bonnet*/ +('1802429', '4700', 'Pet Appearance'), /*Roo-C Baby Bonnet*/ +('1802430', '5000', 'Pet Appearance'), /*Yellow Devil's Collar*/ +('1802431', '4700', 'Pet Appearance'), /*Red Devil's Collar*/ +('1802432', '4300', 'Pet Appearance'), /*Blue Devil's Collar*/ +('1802433', '4300', 'Pet Appearance'), /*Blazing Horns*/ +('1802434', '3200', 'Pet Appearance'), /*Chilling Horns*/ +('1802435', '4300', 'Pet Appearance'), /*Miasmic Horns*/ +('1802436', '2700', 'Pet Appearance'), /*Gingerbread Bow Tie*/ +/*Page 22*/ +('1802444', '7400', 'Pet Appearance'), /*Alluring Mirror*/ +('1802445', '4700', 'Pet Appearance'), /*Von Bon's Staff*/ +('1802446', '3200', 'Pet Appearance'), /*Pierre's Umbrella*/ +('1802447', '3700', 'Pet Appearance'), /*Snake's Pink Bow*/ +('1802448', '3700', 'Pet Appearance'), /*Ice Stick*/ +('1802449', '7400', 'Pet Appearance'), /*Yeti Robot Antenna*/ +('1802450', '6800', 'Pet Appearance'), /*Pinkadillo Star Ball*/ +('1802451', '5600', 'Pet Appearance'), /*Yellowdillow Circus Ball*/ +('1802452', '3200', 'Pet Appearance'), /*Greenadillo Soccer Ball*/ +/*Page 23*/ +('1802458', '2700', 'Pet Appearance'), /*Hot Pot Von Bon's Staff*/ +('1802459', '5600', 'Pet Appearance'), /*Ifia's Rose*/ +('1802460', '7400', 'Pet Appearance'), /*Orchid's Hat*/ +('1802461', '6800', 'Pet Appearance'), /*Hilla's Blackheart*/ +('1802462', '5000', 'Pet Appearance'), /*Gentleman Bow Tie*/ +('1802463', '5000', 'Pet Appearance'), /*Kangaroo Boxing Gloves*/ +('1802464', '5600', 'Pet Appearance'), /*Unripe Chestnut Leaf*/ +('1802465', '6800', 'Pet Appearance'), /*Chestnut Leaf*/ +('1802466', '5000', 'Pet Appearance'), /*Burnt Chestnut Leaf*/ +/*Page 24*/ +('1802467', '6800', 'Pet Appearance'), /*Gollux's Halo*/ +('1802471', '2700', 'Pet Appearance'), /*Purple Kid Pumpkin*/ +('1802472', '2700', 'Pet Appearance'), /*Green Kid Pumpkin*/ +('1802473', '4700', 'Pet Appearance'), /*Black Kid Pumpkin*/ +('1802474', '4300', 'Pet Appearance'), /*Little RED Admin*/ +('1802475', '6300', 'Pet Appearance'), /*Kiwi Puff Wings*/ +('1802476', '2700', 'Pet Appearance'), /*Berry Puff Wings*/ +('1802477', '4700', 'Pet Appearance'), /*Mango Puff Wings*/ +('1802478', '6800', 'Pet Appearance'), /*Happy Bean's Hat*/ +/*Page 25*/ +('1802479', '6800', 'Pet Appearance'), /*Li'l Lai's Necklace*/ +('1802480', '6800', 'Pet Appearance'), /*Li'l Fort's Scarf*/ +('1802481', '6800', 'Pet Appearance'), /*Li'l Arby's Bell*/ +('1802482', '6800', 'Pet Appearance'), /*Pink Pengy Hat*/ +('1802483', '5000', 'Pet Appearance'), /*Purple Pengy Hat*/ +('1802484', '4300', 'Pet Appearance'), /*Blue Pengy Hat*/ +('1802488', '4700', 'Pet Appearance'), /*Cloud Bag*/ +('1802489', '7400', 'Pet Appearance'), /*Frankie's Halo*/ +('1802490', '6800', 'Pet Appearance'), /*Devil Bat*/ +/*Page 26*/ +('1802491', '6800', 'Pet Appearance'), /*Lil Moonbeam's Hairband*/ +('1802492', '7400', 'Pet Appearance'), /*Helium Filled Dreams*/ +('1802493', '3700', 'Pet Appearance'), /*Cute Rabbit Hat*/ +('1802497', '4300', 'Pet Appearance'), /*Moon Miho*/ +('1802500', '6300', 'Pet Appearance'), /*Lyn's Tiara*/ +('1802501', '4300', 'Pet Appearance'), /*Hong's Heart*/ +('1802502', '4300', 'Pet Appearance'), /*Chun's Ambition*/ +('1802503', '7400', 'Pet Appearance'), /*Chameleon's Rainbow*/ +('1802504', '2700', 'Pet Appearance'), /*Orange Electronic Display*/ +/*Page 27*/ +('1802505', '5000', 'Pet Appearance'), /*Purple Electronic Display*/ +('1802509', '3700', 'Pet Appearance'), /*Lil' Bobble Hat*/ +('1802510', '4300', 'Pet Appearance'), /*Lotus's Aura*/ +('1802511', '6800', 'Pet Appearance'), /*Orchid's Tiny IV*/ +('1802512', '6300', 'Pet Appearance'), /*Gelimer's Teddy*/ +('1802519', '4700', 'Pet Appearance'), /*Fluffram Ribbon (Pet Equip)*/ +('1802520', '2700', 'Pet Appearance'), /*Matcha Man's Leaf*/ +('1802521', '5600', 'Pet Appearance'), /*Lady Hot Tea's Spoon*/ +('1802522', '4300', 'Pet Appearance'), /*Captain Cafe's Whipped Cream*/ +/*Page 28*/ +('1802524', '6300', 'Pet Appearance'), /*New Pink Harp Seal Hat*/ +('1802526', '4300', 'Pet Appearance'), /*Warrior Sheep Sword*/ +('1802527', '3200', 'Pet Appearance'), /*Mage Sheep Cane*/ +('1802528', '4300', 'Pet Appearance'), /*Cleric Sheep Staff*/ +('1802529', '2700', 'Pet Appearance'), /*Orange Leaf*/ +('1802530', '4300', 'Pet Appearance'), /*Furry Elwin's Necklace*/ +('1802531', '7400', 'Pet Appearance'), /*Fluffy Lily's Ribbon*/ +('1802532', '6300', 'Pet Appearance'), /*Baby Nero's Ball of Yarn*/ +('1802534', '6300', 'Pet Appearance'), /*Strawbear Fork*/ +/*Page 29*/ +('1802535', '7400', 'Pet Appearance'), /*Bananabear Fork*/ +('1802536', '6300', 'Pet Appearance'), /*Cookiebear Fork*/ +('1802537', '7400', 'Pet Appearance'), /*Fancy Fox Mask*/ + + + +/*Page 1*/ +('1802538', '5000', 'Pet Appearance 2'), /*Fox Mask*/ +('1802539', '6300', 'Pet Appearance 2'), /*Sailor Seal Star Glasses*/ +('1802540', '7400', 'Pet Appearance 2'), /*Admiral Seal Star Glasses*/ +('1802541', '5600', 'Pet Appearance 2'), /*Steward Seal Star Glass*/ +('1802542', '7400', 'Pet Appearance 2'), /*Ducky's Suave Ribbon*/ +('1802543', '6800', 'Pet Appearance 2'), /*Tiny Nero's Transformation Set*/ +('1802544', '3700', 'Pet Appearance 2'), /*Cheesy Cat's Purple Yarn*/ +('1802545', '3700', 'Pet Appearance 2'), /*Samson Cat's Emerald Yarn*/ +('1802546', '7400', 'Pet Appearance 2'), /*Meerkat Instrument*/ +/*Page 2*/ +('1802547', '5600', 'Pet Appearance 2'), /*Pudgycat Fancytie*/ +('1802548', '5600', 'Pet Appearance 2'), /*Cake Temptation*/ +('1802549', '4700', 'Pet Appearance 2'), /*Pie Temptation*/ +('1802550', '6300', 'Pet Appearance 2'), /*Candy Temptation*/ +('1802551', '6800', 'Pet Appearance 2'), /*Lil Zakum's Black Sunglasses*/ +('1802552', '3200', 'Pet Appearance 2'), /*Mousy Overalls*/ +('1802553', '7400', 'Pet Appearance 2'), /*Evan's Halo*/ +('1802554', '3200', 'Pet Appearance 2'), /*Aran's Halo*/ +('1802555', '6300', 'Pet Appearance 2'), /*Phantom's Halo*/ +/*Page 3*/ +('1802556', '4300', 'Pet Appearance 2'), /*Luminous's Halo*/ +('1802557', '4700', 'Pet Appearance 2'), /*Mercedes's Halo*/ +('1802558', '6300', 'Pet Appearance 2'), /*Shade's Halo*/ +('1802559', '6800', 'Pet Appearance 2'), /*Damien's Halo*/ +('1802560', '2700', 'Pet Appearance 2'), /*Alicia's Halo*/ +('1802561', '5000', 'Pet Appearance 2'), /*Lilin's Halo*/ +('1802562', '2700', 'Pet Appearance 2'), /*Ursie's Ribbon*/ +('1802563', '4300', 'Pet Appearance 2'), /*Gym Cat Dumbbell*/ +('1802564', '6300', 'Pet Appearance 2'), /*Iron Rabbit Engine*/ +/*Page 4*/ +('1802565', '4700', 'Pet Appearance 2'), /*Cloud's Lollipop Ribbon*/ +('1802566', '5600', 'Pet Appearance 2'), /*Moss's Lollipop Ribbon*/ +('1802567', '6300', 'Pet Appearance 2'), /*Pinkie's Lollipop Ribbon*/ +('1802568', '6300', 'Pet Appearance 2'), /*Mini Stjartmes*/ +('1802569', '5600', 'Pet Appearance 2'), /*Lingling's Bell*/ +('1802570', '4700', 'Pet Appearance 2'), /*Nene's Flower*/ +('1802571', '5600', 'Pet Appearance 2'), /*TuTu's Umbrella*/ +('1802572', '2700', 'Pet Appearance 2'), /*Blue Ribbon*/ +('1802573', '7400', 'Pet Appearance 2'), /*Pink Ribbon*/ +/*Page 5*/ +('1802574', '5600', 'Pet Appearance 2'), /*Purple Ribbon*/ +('1802575', '4700', 'Pet Appearance 2'), /*Baby Chickie*/ +('1802576', '5600', 'Pet Appearance 2'), /*Anguish Crow*/ +('1802577', '6800', 'Pet Appearance 2'), /*Fallen Angel Headband*/ +('1802578', '3700', 'Pet Appearance 2'), /*Fondue's Ribbon Collar*/ +('1802579', '6800', 'Pet Appearance 2'), /*Sasha's Ribbon Collar*/ +('1802580', '3700', 'Pet Appearance 2'), /*Coco's Ribbon Collar*/ +('1802581', '6800', 'Pet Appearance 2'), /*Witch's Red Ribbon*/ +('1802582', '6800', 'Pet Appearance 2'), /*Witch's Purple Ribbon*/ +/*Page 6*/ +('1802583', '3700', 'Pet Appearance 2'), /*Witch's Pink Ribbon*/ +('1802584', '7400', 'Pet Appearance 2'), /*Red Bow Tie*/ + + + +/*Page 1*/ +('5380000', '2700', 'Pet Use'), /*The Rock of Evolution*/ +('5170000', '2700', 'Pet Use'), /*Pet Name Tag*/ +('5180000', '3700', 'Pet Use'), /*Water of Life*/ +('5689000', '4100', 'Pet Use'), /*Premium Water of Life*/ +('5460000', '3300', 'Pet Use'), /*Pet Snack*/ +('5781000', '5700', 'Pet Use'), /*Bean Dye Coupon*/ +('5781001', '5700', 'Pet Use'), /*Pink Bean Dye Coupon*/ +('5781002', '5700', 'Pet Use'), /*Demon Pet Dye Coupon*/ +('5781004', '5700', 'Pet Use'), /*Roo-bot Paint Coupon*/ +/*Page 2*/ +('5781006', '5700', 'Pet Use'), /*Dillo Dye Coupon*/ +('5781007', '5700', 'Pet Use'), /*Chestnut Dye Coupon*/ +('5781008', '5700', 'Pet Use'), /*Candle Pet Dye Coupon*/ +('5781009', '5700', 'Pet Use'), /*Creampuff Pet Dye Coupon*/ +('5781010', '5700', 'Pet Use'), /*Pengy Pet Dye Coupon*/ +('5781011', '5700', 'Pet Use'), /*Chihuahua Dye Coupon*/ +('5781013', '5700', 'Pet Use'), /*Chameleon Pet Dye Coupon*/ +('5781014', '5700', 'Pet Use'), /*Chubmunk Pet Dye Coupon*/ + + + +/*Page 1*/ +('5249000', '1000', 'Pet Food'); /*Premium Pet Food*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`, `bundleQuantity`) values ('5249000', '5400', 'Pet Food', '6'); /*Premium Pet Food (6)*/ + + + +/*Page 1*/ +insert into `cs_items` (`itemID`, `newPrice`, `category`) values ('5190000', '6800', 'Pet Skills'), /*Item Pick-up Skill*/ +('5190001', '5000', 'Pet Skills'), /*Auto HP Potion Skill*/ +('5190002', '5600', 'Pet Skills'), /*Expanded Auto Move Skill*/ +('5190003', '7400', 'Pet Skills'), /*Auto Move Skill*/ +('5190004', '3200', 'Pet Skills'), /*Expired Pickup Skill*/ +('5190005', '4700', 'Pet Skills'), /*Ignore Item Skill */ +('5190006', '4300', 'Pet Skills'), /*Auto MP Potion Skill*/ +('5190009', '6800', 'Pet Skills'), /*Auto All Cure Skill*/ +('5190010', '3200', 'Pet Skills'), /*Auto Buff Skill*/ +/*Page 2*/ +('5190011', '7400', 'Pet Skills'), /*Auto Feed and Movement Skill*/ +('5190012', '7400', 'Pet Skills'), /*Fatten Up Skill*/ + + + + + +/* MESSENGER AND SOCIAL */ + +/*Page 1*/ +('5120000', '4300', 'Weather Effects'), /*Snowy Snow*/ +('5120001', '6800', 'Weather Effects'), /*Sprinkled Flowers*/ +('5120002', '4700', 'Weather Effects'), /*Soap Bubbles*/ +('5120003', '3700', 'Weather Effects'), /*Snowflakes*/ +('5120004', '7400', 'Weather Effects'), /*Sprinkled Presents*/ +('5120005', '3700', 'Weather Effects'), /*Sprinkled Chocolate*/ +('5120006', '3700', 'Weather Effects'), /*Sprinkled Flower Petals*/ +('5120007', '5000', 'Weather Effects'), /*Sprinkled Candy*/ +('5120008', '2700', 'Weather Effects'), /*Sprinkled Maple Leaves*/ +/*Page 2*/ +('5120009', '4700', 'Weather Effects'), /*Fireworks*/ +('5120010', '3700', 'Weather Effects'), /*Sprinkled Coke*/ +('5120011', '4700', 'Weather Effects'), /*Spirit Haunt*/ +('5120012', '4700', 'Weather Effects'), /*Holiday Sock*/ +('5120014', '3200', 'Weather Effects'), /*Christmas Socks*/ +('5120015', '6800', 'Weather Effects'); /*Chinese Lantern Firecrackers*/ + + diff --git a/sql/4 - drops.sql b/sql/4 - drops.sql new file mode 100755 index 0000000..8dc47e6 --- /dev/null +++ b/sql/4 - drops.sql @@ -0,0 +1,5 @@ +# Mob: Oda Scout (9421511) | Drop: Scout's Report (4033272) | Chance: 45% | Quest: Blind and Battered 1 (57408) +insert into `mob_drops` (`mobid`, `itemid`, `chance`, `minquant`, `maxquant`) values ('9421511', '4033272', '45000', '1', '1'); + +# Mob: Oda Warrior (9421514) | Drop: Mysterious Fox Tail (4033274) | Chance: 40% | Quest: Aura's Origin 2 (57415) +insert into `mob_drops` (`mobid`, `itemid`, `chance`, `minquant`, `maxquant`) values ('9421514', '4033274', '40000', '1', '1'); \ No newline at end of file diff --git a/sql/5 - InitTable_equip_drops.sql b/sql/5 - InitTable_equip_drops.sql new file mode 100755 index 0000000..6ba1e0a --- /dev/null +++ b/sql/5 - InitTable_equip_drops.sql @@ -0,0 +1,1052 @@ +drop table if exists equip_drops; + +create table equip_drops ( + id int, + job varchar(255), + level int, + primary key (id, job) +); + +insert into equip_drops (id, job, level) values + +# Bowman +# Bow +(1452002, "BOWMAN", 10), # War Bow - Lv 10 +(1452003, "BOWMAN", 10), # Composite Bow - Lv 15 +(1452001, "BOWMAN", 20), # Hunter's Bow - Lv 20 +(1452005, "BOWMAN", 30), # Ryden - Lv 30 +(1452007, "BOWMAN", 40), # Vaulter 2000 - Lv 40 +(1452008, "BOWMAN", 50), # Olympus - Lv 50 +(1452004, "BOWMAN", 60), # Asianic Bow - Lv 60 +(1452009, "BOWMAN", 70), # Red Hinkel - Lv 70 +(1452010, "BOWMAN", 70), # Blue Hinkel - Lv 70 +(1452011, "BOWMAN", 70), # Golden Hinkel - Lv 70 +(1452012, "BOWMAN", 80), # Marine Arund - Lv 80 +(1452013, "BOWMAN", 80), # Fire Arund - Lv 80 +(1452014, "BOWMAN", 80), # Golden Arund - Lv 80 +(1452017, "BOWMAN", 90), # Metus - Lv 90 +(1452025, "BOWMAN", 90), # Blue Metus - Lv 90 +(1452026, "BOWMAN", 90), # Black Metus - Lv 90 +(1452019, "BOWMAN", 100), # White Nisrock - Lv 100 +(1452020, "BOWMAN", 100), # Golden Nisrock - Lv 100 +(1452021, "BOWMAN", 100), # Dark Nisrock - Lv 100 +(1452044, "BOWMAN", 110), # Dragon Shiner Bow - Lv 110 +(1452236, "BOWMAN", 120), # Briser Longbow - Lv 120 +(1452237, "BOWMAN", 130), # Jaihin Bow - Lv 130 +(1452238, "BOWMAN", 140), # Utgard Bow - Lv 140 + +# Crossbow +(1462001, "BOWMAN", 10), # Crossbow - Lv 12 +(1462002, "BOWMAN", 10), # Battle Crossbow - Lv 18 +(1462003, "BOWMAN", 20), # Balanche - Lv 22 +(1462000, "BOWMAN", 20), # Mountain Crossbow - Lv 28 +(1462004, "BOWMAN", 30), # Eagle Crow - Lv 32 +(1462005, "BOWMAN", 30), # Heckler - Lv 38 +(1462006, "BOWMAN", 40), # Silver Crow - Lv 42 +(1462007, "BOWMAN", 50), # Rower - Lv 50 +(1462008, "BOWMAN", 60), # Golden Crow - Lv 60 +(1462009, "BOWMAN", 70), # Gross Jaeger - Lv 70 +(1462013, "BOWMAN", 80), # Dark Raven - Lv 80 +(1462011, "BOWMAN", 80), # Fire Raven - Lv 80 +(1462012, "BOWMAN", 80), # Golden Raven - Lv 80 +(1462010, "BOWMAN", 80), # Marine Raven - Lv 80 +(1462018, "BOWMAN", 90), # Casa Crow - Lv 90 +(1462021, "BOWMAN", 90), # Dark Crow - Lv 90 +(1462022, "BOWMAN", 90), # Yellow Crow - Lv 90 +(1462017, "BOWMAN", 100), # Dark Neschere - Lv 100 +(1462016, "BOWMAN", 100), # Golden Neschere - Lv 100 +(1462039, "BOWMAN", 110), # Dragon Shiner Cross - Lv 110 +(1462223, "BOWMAN", 120), # Briser Crossbow - Lv 120 +(1462224, "BOWMAN", 130), # Jaihin Crossbow - Lv 130 +(1462225, "BOWMAN", 140), # Utgard Crossbow - Lv 140 + +# Ancient Bow +(1592000, "BOWMAN", 20), # Marad Ancient Bow - Lv 10 +(1592001, "BOWMAN", 30), # Assur Ancient Bow - Lv 10 +(1592002, "BOWMAN", 50), # Uruk Ancient Bow - Lv 10 +(1592003, "BOWMAN", 60), # Avaris Ancient Bow - Lv 10 +(1592004, "BOWMAN", 70), # Magna Ancient Bow - Lv 10 +(1592005, "BOWMAN", 80), # Tanis Ancient Bow - Lv 10 +(1592006, "BOWMAN", 90), # Philos Ancient Bow - Lv 10 +(1592007, "BOWMAN", 100), # Ephesus Ancient Bow - Lv 10 +(1592009, "BOWMAN", 110), # Dragon Ancient Bow - Lv 10 +(1592012, "BOWMAN", 120), # Briser Ancient Bow - Lv 10 +(1592014, "BOWMAN", 130), # Jaihin Ancient Bow - Lv 10 +(1592016, "BOWMAN", 140), # Utgard Ancient Bow - Lv 10 + +# Dual Bowgun +(1522000, "BOWMAN", 10), # Trusty & Faithful - Lv 10 +(1522002, "BOWMAN", 20), # Elven Diplomacy - Lv 20 +(1522003, "BOWMAN", 20), # Songs of Nature - Lv 25 +(1522004, "BOWMAN", 30), # Twin Angels - Lv 30 +(1522005, "BOWMAN", 30), # Proud Blossoms - Lv 35 +(1522006, "BOWMAN", 40), # The Argents - Lv 40 +(1522007, "BOWMAN", 50), # Judge & Jury - Lv 50 +(1522008, "BOWMAN", 60), # Lunar Glory - Lv 60 +(1522009, "BOWMAN", 70), # Twin Zephyrs - Lv 70 +(1522086, "BOWMAN", 70), # Stellar Argents - Lv 75 +(1522010, "BOWMAN", 80), # Sylvan Hunters - Lv 80 +(1522011, "BOWMAN", 90), # Royal Decrees - Lv 90 +(1522012, "BOWMAN", 100), # Final Retorts - Lv 100 +(1522014, "BOWMAN", 110), # Dragon Majesty - Lv 110 +(1522122, "BOWMAN", 120), # Briser Dual Bowguns - Lv 120 +(1522123, "BOWMAN", 130), # Jaihin Dual Bowguns - Lv 130 +(1522124, "BOWMAN", 140), # Utgard Dual Bowguns - Lv 140 + +# Warrior +# Katana +(1542000, "WARRIOR", 10), # Simple Iron Sword - Lv 10 +(1542001, "WARRIOR", 20), # Tempered Steel Sword - Lv 20 +(1542002, "WARRIOR", 30), # Iron Guardian - Lv 30 +(1542003, "WARRIOR", 40), # Bare Blade - Lv 40 +(1542004, "WARRIOR", 50), # Iron Savior - Lv 50 +(1542006, "WARRIOR", 60), # Helix - Lv 60 +(1542007, "WARRIOR", 80), # Heat Wave - Lv 80 +(1542008, "WARRIOR", 90), # Battle Cry - Lv 90 +(1542009, "WARRIOR", 100), # Gilded Sword - Lv 100 +(1542011, "WARRIOR", 100), # Mist Cutter - Lv 100 +(1542010, "WARRIOR", 110), # Phoenix Rising - Lv 110 +(1542099, "WARRIOR", 120), # Briser Katana - Lv 120 +(1542100, "WARRIOR", 130), # Jaihin Katana - Lv 130 +(1542101, "WARRIOR", 140), # Utgard Katana - Lv 140 + +# Desperado +(1232000, "WARRIOR", 10), # Blue Ravager - Lv 10 +(1232002, "WARRIOR", 30), # Dim Memory - Lv 30 +(1232003, "WARRIOR", 50), # Eternal Wanderer - Lv 50 +(1232004, "WARRIOR", 60), # Plum Sadness - Lv 60 +(1232005, "WARRIOR", 70), # Cardinal Omen - Lv 70 +(1232006, "WARRIOR", 80), # Brand Edge - Lv 80 +(1232007, "WARRIOR", 90), # Nightmare - Lv 90 +(1232008, "WARRIOR", 100), # Cruel Vengeance - Lv 100 +(1232010, "WARRIOR", 110), # Dragon Rage - Lv 110 +(1232093, "WARRIOR", 120), # Briser Desperado - Lv 120 +(1232094, "WARRIOR", 130), # Jaihin Desperado - Lv 130 +(1232095, "WARRIOR", 140), # Utgard Desperado - Lv 140 + +# Polearm +(1442000, "WARRIOR", 10), # PoleArm - Lv 10 +(1442006, "WARRIOR", 10), # Iron Ball - Lv 15 +(1442007, "WARRIOR", 20), # Studded Polearm - Lv 20 +(1442001, "WARRIOR", 30), # Mithril Pole Arm - Lv 30 +(1442009, "WARRIOR", 40), # Crescent Polearm - Lv 40 +(1442005, "WARRIOR", 50), # The Nine Dragons - Lv 50 +(1442010, "WARRIOR", 60), # Skylar - Lv 60 +(1442008, "WARRIOR", 70), # The Gold Dragon - Lv 70 +(1442019, "WARRIOR", 80), # Eclipse - Lv 80 +(1442020, "WARRIOR", 90), # Hellslayer - Lv 90 +(1442044, "WARRIOR", 100), # Zedbug - Lv 100 +(1442045, "WARRIOR", 110), # Dragon Hellslayer - Lv 110 +(1442169, "WARRIOR", 120), # Eviscerator - Lv 120 +(1442252, "WARRIOR", 120), # Briser Hellslayer - Lv 120 +(1442253, "WARRIOR", 130), # Jaihin Hellslayer - Lv 130 +(1442254, "WARRIOR", 140), # Utgard Hellslayer - Lv 140 + +# Spear +(1432000, "WARRIOR", 10), # Spear - Lv 10 +(1432001, "WARRIOR", 10), # Fork on a Stick - Lv 15 +(1432002, "WARRIOR", 30), # Forked Spear - Lv 30 +(1432005, "WARRIOR", 40), # Zeco - Lv 40 +(1432004, "WARRIOR", 50), # Serpent's Tongue - Lv 50 +(1432006, "WARRIOR", 60), # Holy Spear - Lv 60 +(1432007, "WARRIOR", 70), # Redemption - Lv 70 +(1432010, "WARRIOR", 80), # Omega Spear - Lv 80 +(1432011, "WARRIOR", 90), # Fairfrozen - Lv 90 +(1432030, "WARRIOR", 100), # Pinaka - Lv 100 +(1432038, "WARRIOR", 110), # Dragon Faltizan - Lv 110 +(1432198, "WARRIOR", 120), # Briser Spear - Lv 120 +(1432199, "WARRIOR", 130), # Jaihin Spear - Lv 130 +(1432200, "WARRIOR", 140), # Utgard Spear - Lv 140 + +# 1h sword +(1302005, "WARRIOR", 10), # Sabre - Lv 10 +(1302006, "WARRIOR", 20), # Machete - Lv 20 +(1302002, "WARRIOR", 20), # Viking Sword - Lv 20 +(1302008, "WARRIOR", 30), # Gladius - Lv 30 +(1302004, "WARRIOR", 30), # Cutlass - Lv 35 +(1302009, "WARRIOR", 40), # Traus - Lv 40 +(1302010, "WARRIOR", 50), # Jeweled Katar - Lv 50 +(1302011, "WARRIOR", 60), # Neocora - Lv 60 +(1302012, "WARRIOR", 70), # Red Katana - Lv 70 +(1302018, "WARRIOR", 80), # Khan - Lv 80 +(1302023, "WARRIOR", 90), # Fraute - Lv 90 +(1302056, "WARRIOR", 100), # Sparta - Lv 100 +(1302059, "WARRIOR", 110), # Dragon Carabella - Lv 110 +(1302313, "WARRIOR", 120), # Briser Saber - Lv 120 +(1302314, "WARRIOR", 130), # Jaihin Saber - Lv 130 +(1302315, "WARRIOR", 140), # Utgard Saber - Lv 140 + +# 2h sword +(1402001, "WARRIOR", 10), # Wooden Sword - Lv 10 +(1402000, "WARRIOR", 20), # Two-Handed Sword - Lv 20 +(1402008, "WARRIOR", 20), # Broadsword - Lv 25 +(1402002, "WARRIOR", 30), # Scimitar - Lv 30 +(1402006, "WARRIOR", 30), # Lionheart - Lv 35 +(1402007, "WARRIOR", 40), # Zard - Lv 40 +(1402003, "WARRIOR", 50), # Lion's Fang - Lv 50 +(1402013, "WARRIOR", 50), # Japanese Map - Lv 50 +(1402011, "WARRIOR", 60), # Sparta - Lv 60 +(1402012, "WARRIOR", 70), # Doombringer - Lv 70 +(1402015, "WARRIOR", 80), # Heaven's Gate - Lv 80 +(1402004, "WARRIOR", 80), # Blue Screamer - Lv 80 +(1402005, "WARRIOR", 90), # Berzerker - Lv 90 +(1402016, "WARRIOR", 90), # Devil's Sunrise - Lv 90 +(1402035, "WARRIOR", 100), # The Beheader - Lv 100 +(1402037, "WARRIOR", 100), # Stonetooth Sword - Lv 100 +(1402036, "WARRIOR", 110), # Dragon Claymore - Lv 110 +(1402234, "WARRIOR", 120), # Briser Two-handed Sword - Lv 120 +(1402235, "WARRIOR", 130), # Jaihin Two-handed Sword - Lv 130 +(1402236, "WARRIOR", 140), # Utgard Two-handed Sword - Lv 140 + +# 1h mace +(1322000, "WARRIOR", 10), # Mace - Lv 10 +(1322002, "WARRIOR", 20), # Iron Mace - Lv 20 +(1322004, "WARRIOR", 20), # Fusion Mace - Lv 25 +(1322014, "WARRIOR", 30), # War Hammer - Lv 30 +(1322016, "WARRIOR", 40), # Jacker - Lv 40 +(1322017, "WARRIOR", 50), # Knuckle Mace - Lv 50 +(1322018, "WARRIOR", 60), # Tamus - Lv 60 +(1322019, "WARRIOR", 70), # The Judgement - Lv 70 +(1322020, "WARRIOR", 70), # Bent Judgement - Lv 75 +(1322028, "WARRIOR", 80), # Heaven's Justice - Lv 80 +(1322029, "WARRIOR", 90), # Ruin Hammer - Lv 90 +(1322045, "WARRIOR", 100), # Battle Hammer - Lv 100 +(1322052, "WARRIOR", 110), # Dragon Mace - Lv 110 +(1322234, "WARRIOR", 120), # Briser Hammer - Lv 120 +(1322235, "WARRIOR", 130), # Jaihin Hair - Lv 130 +(1322236, "WARRIOR", 140), # Utgard Hair - Lv 140 + +# 2h mace +(1422000, "WARRIOR", 10), # Wooden Mallet - Lv 10 +(1422003, "WARRIOR", 20), # Square Hammer - Lv 20 +(1422001, "WARRIOR", 30), # Mithril Maul - Lv 30 +(1422008, "WARRIOR", 30), # Sledgehammer - Lv 35 +(1422007, "WARRIOR", 40), # Titan - Lv 40 +(1422005, "WARRIOR", 50), # Golden Mole - Lv 50 +(1422009, "WARRIOR", 60), # The Blessing - Lv 60 +(1422010, "WARRIOR", 70), # Gigantic Sledge - Lv 70 +(1422018, "WARRIOR", 80), # The Morningstar - Lv 80 +(1422013, "WARRIOR", 90), # Leomite - Lv 90 +(1422027, "WARRIOR", 100), # Golden Smith Hammer - Lv 100 +(1422028, "WARRIOR", 110), # Dragon Flame - Lv 110 +(1422169, "WARRIOR", 120), # Briser Two-handed Hammer - Lv 120 +(1422170, "WARRIOR", 130), # Jaihin Two-handed Hammer - Lv 130 +(1422171, "WARRIOR", 140), # Utgard Two-handed Hammer - Lv 140 + +# 1h axe +(1312000, "WARRIOR", 10), # Double Axe - Lv 10 +(1312001, "WARRIOR", 10), # Battle Axe - Lv 15 +(1312003, "WARRIOR", 20), # Mithril Axe - Lv 25 +(1312005, "WARRIOR", 30), # Fireman's Axe - Lv 30 +(1312006, "WARRIOR", 30), # Dankke - Lv 35 +(1312007, "WARRIOR", 40), # Blue Counter - Lv 40 +(1312008, "WARRIOR", 50), # Buck - Lv 50 +(1312009, "WARRIOR", 60), # Hawkhead - Lv 60 +(1312010, "WARRIOR", 70), # Mikhail - Lv 70 +(1312011, "WARRIOR", 80), # Gaea - Lv 80 +(1312015, "WARRIOR", 90), # Vifennis - Lv 90 +(1312030, "WARRIOR", 100), # Tomahawk - Lv 100 +(1312031, "WARRIOR", 110), # Dragon Axe - Lv 110 +(1312183, "WARRIOR", 120), # Jaihin Axe - Lv 120 +(1312184, "WARRIOR", 130), # Jaihin Axe - Lv 130 +(1312185, "WARRIOR", 140), # Utgard Axe - Lv 140 + +# 2h axe +(1412001, "WARRIOR", 10), # Metal Axe - Lv 10 +(1412012, "WARRIOR", 10), # Iron Axe - Lv 15 +(1412000, "WARRIOR", 20), # Two-Handed Axe - Lv 25 +(1412006, "WARRIOR", 30), # Blue Axe - Lv 30 +(1412004, "WARRIOR", 30), # Niam - Lv 35 +(1412005, "WARRIOR", 40), # Sabretooth - Lv 40 +(1412003, "WARRIOR", 50), # The Rising - Lv 50 +(1412007, "WARRIOR", 60), # The Shining - Lv 60 +(1412008, "WARRIOR", 70), # Chrono - Lv 70 +(1412009, "WARRIOR", 80), # Helios - Lv 80 +(1412010, "WARRIOR", 90), # Colonian Axe - Lv 90 +(1412021, "WARRIOR", 100), # Tavar - Lv 100 +(1412026, "WARRIOR", 110), # Dragon Battle Axe - Lv 110 +(1412162, "WARRIOR", 120), # Briser Two-handed Axe - Lv 120 +(1412163, "WARRIOR", 130), # Jaihin Two-handed Axe - Lv 130 +(1412164, "WARRIOR", 140), # Utgard Two-handed Axe - Lv 140 + +# Hand cannon +(1582000, "WARRIOR", 10), # Hand Buster - Lv 10 +(1582001, "WARRIOR", 30), # Hand Crusher - Lv 30 +(1582002, "WARRIOR", 50), # Blow Bomb - Lv 50 +(1582003, "WARRIOR", 60), # Giant Hand - Lv 60 +(1582004, "WARRIOR", 70), # Taurus - Lv 70 +(1582005, "WARRIOR", 80), # Ogre Grip - Lv 80 +(1582006, "WARRIOR", 90), # Gigantic Arm Cannon - Lv 90 +(1582007, "WARRIOR", 100), # Titan Arms - Lv 100 +(1582008, "WARRIOR", 110), # Valore Punch - Lv 110 +(1582009, "WARRIOR", 140), # Briser Surtr - Lv 140 +(1582010, "WARRIOR", 140), # Jaihin Surtr - Lv 140 +(1582011, "WARRIOR", 140), # Utgard Surtr - Lv 140 + +# Magician +# Lucent Gauntlet +(1282000, "MAGICIAN", 10), # Luna Lucent Gauntlet - Lv 10 +(1282001, "MAGICIAN", 30), # Matis Lucent Gauntlet - Lv 30 +(1282002, "MAGICIAN", 50), # Mercury Lucent Gauntlet - Lv 50 +(1282003, "MAGICIAN", 60), # Robis Lucent Gauntlet - Lv 60 +(1282004, "MAGICIAN", 70), # Veneris Lucent Gauntlet - Lv 70 +(1282005, "MAGICIAN", 80), # Saturni Lucent Gauntlet - Lv 80 +(1282006, "MAGICIAN", 90), # Solis Lucent Gauntlet - Lv 90 +(1282007, "MAGICIAN", 100), # Perias Lucent Gauntlet - Lv 100 +(1282008, "MAGICIAN", 110), # Dragon Lucent Gauntlet - Lv 110 +(1282010, "MAGICIAN", 120), # Briser Lucent Gauntlet - Lv 120 +(1282011, "MAGICIAN", 130), # Jaihin Lucent Gauntlet - Lv 130 +(1282013, "MAGICIAN", 140), # Utgard Lucent Gauntlet - Lv 140 + +# Fan +(1552000, "MAGICIAN", 10), # Iron Fan - Lv 10 +(1552001, "MAGICIAN", 20), # Metallic Fan - Lv 20 +(1552002, "MAGICIAN", 30), # Triple Fan - Lv 30 +(1552003, "MAGICIAN", 40), # Crane Fan - Lv 40 +(1552004, "MAGICIAN", 50), # Fan of Enlightenment - Lv 50 +(1552005, "MAGICIAN", 60), # Melodic Fan - Lv 60 +(1552006, "MAGICIAN", 70), # Unique Fan - Lv 70 +(1552007, "MAGICIAN", 80), # Leaf-Patterned Fan - Lv 80 +(1552008, "MAGICIAN", 90), # Erupting Fan - Lv 90 +(1552009, "MAGICIAN", 100), # Clear Skies - Lv 100 +(1552011, "MAGICIAN", 100), # Florist's Fan - Lv 100 +(1552010, "MAGICIAN", 110), # Crossed Fan - Lv 110 +(1552100, "MAGICIAN", 120), # Briser Fan - Lv 120 +(1552101, "MAGICIAN", 130), # Jaihin Fan - Lv 130 +(1552102, "MAGICIAN", 140), # Utgard Fan - Lv 140 + +# Staff +(1382000, "MAGICIAN", 10), # Wooden Staff - Lv 10 +(1382003, "MAGICIAN", 10), # Sapphire Staff - Lv 15 +(1382005, "MAGICIAN", 10), # Emerald Staff - Lv 15 +(1382004, "MAGICIAN", 20), # Old Wooden Staff - Lv 20 +(1382002, "MAGICIAN", 20), # Wizard Staff - Lv 25 +(1382017, "MAGICIAN", 30), # Circle-Winded Staff - Lv 30 +(1382009, "MAGICIAN", 30), # Maple Staff - Lv 35 +(1382018, "MAGICIAN", 30), # Petal Staff - Lv 35 +(1382019, "MAGICIAN", 40), # Hall Staff - Lv 40 +(1382020, "MAGICIAN", 40), # Arc Staff - Lv 45 +(1382011, "MAGICIAN", 50), # Mystic Cane - Lv 51 +(1382026, "MAGICIAN", 50), # Thorns - Lv 55 +(1382027, "MAGICIAN", 60), # Evil Wings - Lv 65 +(1382023, "MAGICIAN", 70), # Dark Ritual - Lv 75 +(1382024, "MAGICIAN", 80), # Kage - Lv 85 +(1382035, "MAGICIAN", 90), # Blue Marine - Lv 95 +(1382037, "MAGICIAN", 100), # Doomsday Staff - Lv 102 +(1382036, "MAGICIAN", 110), # Dragon Staff - Lv 110 +(1382243, "MAGICIAN", 120), # Briser Staff - Lv 120 +(1382244, "MAGICIAN", 130), # Jaihin Staff - Lv 130 +(1382245, "MAGICIAN", 140), # Utgard Staff - Lv 140 + +# Wand +(1372005, "MAGICIAN", 0), # Wooden Wand - Lv 8 +(1372002, "MAGICIAN", 10), # Metal Wand - Lv 18 +(1372004, "MAGICIAN", 20), # Ice Wand - Lv 23 +(1372003, "MAGICIAN", 20), # Mithril Wand - Lv 28 +(1372001, "MAGICIAN", 30), # Wizard Wand - Lv 33 +(1372012, "MAGICIAN", 30), # Crystal Wand - Lv 38 +(1372000, "MAGICIAN", 30), # Fairy Wand - Lv 38 +(1372007, "MAGICIAN", 40), # Cromi - Lv 48 +(1372014, "MAGICIAN", 50), # Evil Tale - Lv 58 +(1372008, "MAGICIAN", 60), # Hinomaru Fan - Lv 60 +(1372015, "MAGICIAN", 60), # Angel Wings - Lv 68 +(1372016, "MAGICIAN", 70), # Phoenix Wand - Lv 78 +(1372009, "MAGICIAN", 80), # Magicodar - Lv 88 +(1372010, "MAGICIAN", 90), # Dimon Wand - Lv 98 +(1372032, "MAGICIAN", 100), # Dragon Wand - Lv 108 +(1372205, "MAGICIAN", 120), # Briser Wand - Lv 130 +(1372206, "MAGICIAN", 130), # Jaihin Wand - Lv 130 +(1372207, "MAGICIAN", 140), # Utgard Wand - Lv 140 + +# Shining Rod +(1212001, "MAGICIAN", 10), # Plain - Lv 10 +(1212002, "MAGICIAN", 30), # Golden Shine - Lv 30 +(1212003, "MAGICIAN", 50), # Decor - Lv 50 +(1212004, "MAGICIAN", 60), # Vallentier - Lv 60 +(1212005, "MAGICIAN", 70), # Sharp Slaver - Lv 70 +(1212006, "MAGICIAN", 80), # Light Sage Wing - Lv 80 +(1212007, "MAGICIAN", 90), # Shining Twin Star - Lv 90 +(1212010, "MAGICIAN", 110), # Shining Dragon Rod - Lv 110 +(1212099, "MAGICIAN", 120), # Briser Shining Rod - Lv 120 +(1212100, "MAGICIAN", 130), # Jaihin Shining Rod - Lv 130 +(1212101, "MAGICIAN", 140), # Utgard Shining Rod - Lv 140 + +# Psy-limiter +(1262000, "MAGICIAN", 10), # Prototype Psy-limiter - Lv 10 +(1262001, "MAGICIAN", 30), # Trial Psy-limiter - Lv 30 +(1262002, "MAGICIAN", 50), # First Psy-limiter - Lv 50 +(1262003, "MAGICIAN", 60), # Strategic Psy-limiter - Lv 60 +(1262004, "MAGICIAN", 70), # Engaging Psy-limiter - Lv 70 +(1262005, "MAGICIAN", 80), # Technical Psy-limiter - Lv 80 +(1262006, "MAGICIAN", 90), # Mad Psy-limiter - Lv 90 +(1262007, "MAGICIAN", 100), # Daemon Psy-limiter - Lv 100 +(1262008, "MAGICIAN", 110), # Dragon Psy-limiter - Lv 110 +(1262009, "MAGICIAN", 120), # Briser Psy-limiter - Lv 120 +(1262010, "MAGICIAN", 130), # Jaihin Psy-limiter - Lv 130 +(1262011, "MAGICIAN", 140), # Utgard Psy-limiter - Lv 140 + +# Scepter +(1252001, "MAGICIAN", 10), # Beast Tamer Scepter - Lv 10 +(1252048, "MAGICIAN", 10), # Hardwood Beast Tamer Scepter - Lv 15 +(1252049, "MAGICIAN", 20), # Metal Beast Tamer Scepter - Lv 20 +(1252050, "MAGICIAN", 30), # Assign Scepter - Lv 30 +(1252051, "MAGICIAN", 40), # High Assign Scepter - Lv 40 +(1252052, "MAGICIAN", 50), # Talon Scepter - Lv 50 +(1252053, "MAGICIAN", 60), # Panther Scepter - Lv 60 +(1252054, "MAGICIAN", 70), # Grizzly Scepter - Lv 70 +(1252006, "MAGICIAN", 80), # Tigress Scepter - Lv 80 +(1252007, "MAGICIAN", 90), # Eagle Scepter - Lv 90 +(1252008, "MAGICIAN", 100), # Falcon Scepter - Lv 100 +(1252009, "MAGICIAN", 100), # Lion Glass Scepter - Lv 105 +(1252010, "MAGICIAN", 110), # Dragon Kitty Soul Scepter - Lv 110 +(1252084, "MAGICIAN", 120), # Briser Shining Stick - Lv 120 +(1252085, "MAGICIAN", 130), # Jaihin Shining Stick - Lv 130 +(1252086, "MAGICIAN", 140), # Utgard Shining Stick - Lv 140 + +# Thief +# Chain +(1272000, "THIEF", 10), # De Mercurio - Lv 10 +(1272001, "THIEF", 30), # De Venus - Lv 30 +(1272002, "THIEF", 50), # De Tierra - Lv 50 +(1272003, "THIEF", 60), # De Marte - Lv 60 +(1272004, "THIEF", 70), # De Jupiter - Lv 70 +(1272005, "THIEF", 80), # De Saturno - Lv 80 +(1272006, "THIEF", 90), # De Urano - Lv 90 +(1272007, "THIEF", 100), # De Neptuno - Lv 100 +(1272008, "THIEF", 110), # Dragon Chain - Lv 110 +(1272009, "THIEF", 120), # Briser Chain - Lv 120 +(1272011, "THIEF", 130), # Jaihin Chain - Lv 130 +(1272013, "THIEF", 140), # Utgard Chain - Lv 140 + +# Cane +(1362002, "THIEF", 10), # Iron Cane - Lv 15 +(1362003, "THIEF", 20), # Noble Stick - Lv 20 +(1362004, "THIEF", 20), # Croix Canne - Lv 25 +(1362005, "THIEF", 30), # Rouge Way - Lv 30 +(1362006, "THIEF", 30), # Arc-en-ciel - Lv 35 +(1362007, "THIEF", 40), # Twisted - Lv 40 +(1362008, "THIEF", 50), # Oriental Royal Cane - Lv 50 +(1362009, "THIEF", 60), # Bijou Canne - Lv 60 +(1362010, "THIEF", 70), # Regne - Lv 70 +(1362011, "THIEF", 70), # Majesty Cane - Lv 70 +(1362012, "THIEF", 90), # Phantom Originality - Lv 90 +(1362013, "THIEF", 100), # Celestial Cane - Lv 100 +(1362015, "THIEF", 110), # Dragon Permanche - Lv 110 +(1362119, "THIEF", 120), # Briser Cane - Lv 120 +(1362120, "THIEF", 130), # Jaihin Cane - Lv 130 +(1362121, "THIEF", 140), # Utgard Cane - Lv 140 + +# Dagger +(1332007, "THIEF", 0), # Fruit Knife - Lv 8 +(1332000, "THIEF", 10), # Triangular Zamadar - Lv 12 +(1332006, "THIEF", 10), # Field Dagger - Lv 15 +(1332002, "THIEF", 10), # Triple-Tipped Zamadar - Lv 17 +(1332008, "THIEF", 20), # Coconut Knife - Lv 20 +(1332013, "THIEF", 20), # Stinger - Lv 22 +(1332010, "THIEF", 20), # Iron Dagger - Lv 25 +(1332004, "THIEF", 20), # Forked Dagger - Lv 27 +(1332009, "THIEF", 30), # Cass - Lv 30 +(1332012, "THIEF", 30), # Reef Claw - Lv 30 +(1332001, "THIEF", 30), # Halfmoon Zamadar - Lv 32 +(1332014, "THIEF", 30), # Gephart - Lv 35 +(1332011, "THIEF", 40), # Bazlud - Lv 40 +(1332031, "THIEF", 40), # Dragon Toenail - Lv 40 +(1332003, "THIEF", 50), # Shinkita - Lv 50 +(1332016, "THIEF", 50), # Sai - Lv 50 +(1332024, "THIEF", 50), # Bushido - Lv 55 +(1332015, "THIEF", 60), # Deadly Fin - Lv 60 +(1332017, "THIEF", 60), # Serpent's Coil - Lv 60 +(1332030, "THIEF", 60), # Fan - Lv 65 +(1332019, "THIEF", 70), # Golden River - Lv 70 +(1332018, "THIEF", 70), # Kandine - Lv 70 +(1332022, "THIEF", 80), # Angelic Betrayal - Lv 80 +(1332023, "THIEF", 80), # Dragon's Tail - Lv 80 +(1332026, "THIEF", 90), # Cursayer - Lv 90 +(1332027, "THIEF", 90), # Varkit - Lv 90 +(1332052, "THIEF", 100), # Blood Dagger - Lv 100 +(1332049, "THIEF", 110), # Dragon Kanzir - Lv 110 +(1332050, "THIEF", 110), # Dragon Kreda - Lv 110 +(1332258, "THIEF", 120), # Briser Dagger - Lv 120 +(1332259, "THIEF", 130), # Jaihin Dagger - Lv 130 +(1332260, "THIEF", 140), # Utgard Dagger - Lv 140 + +# Claw +(1472000, "THIEF", 10), # Garnier - Lv 10 +(1472001, "THIEF", 10), # Steel Titans - Lv 15 +(1472002, "THIEF", 10), # Mithril Titans - Lv 15 +(1472003, "THIEF", 10), # Gold Titans - Lv 15 +(1472004, "THIEF", 20), # Bronze Igor - Lv 20 +(1472005, "THIEF", 20), # Steel Igor - Lv 20 +(1472006, "THIEF", 20), # Adamantium Igor - Lv 20 +(1472007, "THIEF", 30), # Meba - Lv 35 +(1472008, "THIEF", 30), # Steel Guards - Lv 30 +(1472009, "THIEF", 30), # Mithril Guards - Lv 30 +(1472010, "THIEF", 30), # Adamantium Guards - Lv 30 +(1472011, "THIEF", 30), # Bronze Guardian - Lv 35 +(1472012, "THIEF", 30), # Silver Guardian - Lv 35 +(1472013, "THIEF", 30), # Dark Guardian - Lv 35 +(1472014, "THIEF", 40), # Steel Avarice - Lv 40 +(1472015, "THIEF", 40), # Blood Avarice - Lv 40 +(1472016, "THIEF", 40), # Adamantium Avarice - Lv 40 +(1472017, "THIEF", 40), # Dark Avarice - Lv 40 +(1472018, "THIEF", 50), # Steel Slain - Lv 50 +(1472019, "THIEF", 50), # Blood Slain - Lv 50 +(1472020, "THIEF", 50), # Sapphire Slain - Lv 50 +(1472021, "THIEF", 50), # Dark Slain - Lv 50 +(1472022, "THIEF", 60), # Bronze Gigantic - Lv 60 +(1472023, "THIEF", 60), # Blood Gigantic - Lv 60 +(1472024, "THIEF", 60), # Sapphire Gigantic - Lv 60 +(1472025, "THIEF", 60), # Dark Gigantic - Lv 60 +(1472055, "THIEF", 60), # Maple Skanda - Lv 64 +(1472026, "THIEF", 70), # Brown Scarab - Lv 70 +(1472027, "THIEF", 70), # Green Scarab - Lv 70 +(1472028, "THIEF", 70), # Blue Scarab - Lv 70 +(1472029, "THIEF", 70), # Black Scarab - Lv 70 +(1472031, "THIEF", 80), # Black Mamba - Lv 80 +(1472033, "THIEF", 90), # Casters - Lv 90 +(1472053, "THIEF", 100), # Red Craven - Lv 100 +(1472051, "THIEF", 110), # Dragon Green Sleeve - Lv 110 +(1472052, "THIEF", 110), # Dragon Purple Sleeve - Lv 110 +(1472245, "THIEF", 120), # Briser Guards - Lv 120 +(1472246, "THIEF", 130), # Jaihin Guards - Lv 130 +(1472247, "THIEF", 140), # Utgard Guards - Lv 140 + +# Katara +(1342000, "THIEF", 20), # Champion Katara - Lv 20 +(1342001, "THIEF", 30), # Guardian Katara - Lv 30 +(1342002, "THIEF", 40), # Justice Katara - Lv 40 +(1342003, "THIEF", 50), # Majestic Katara - Lv 50 +(1342004, "THIEF", 60), # Ascalon Katara - Lv 60 +(1342005, "THIEF", 70), # Heavenly Katara - Lv 70 +(1342006, "THIEF", 80), # Blazing Dragon Katara - Lv 80 +(1342007, "THIEF", 90), # Bloodsoaked Katara - Lv 90 +(1342008, "THIEF", 100), # Meteor Katara - Lv 100 +(1342010, "THIEF", 110), # Moonshadow Katara - Lv 110 +(1342098, "THIEF", 120), # Briser Katara - Lv 120 +(1342099, "THIEF", 130), # Jaihin Katara - Lv 130 +(1342100, "THIEF", 140), # Utgard Katara - Lv 140 + +# Pirate +# Pistol +(1492000, "PIRATE", 10), # Pistol - Lv 10 +(1492001, "PIRATE", 10), # Dellinger Special - Lv 15 +(1492002, "PIRATE", 20), # The Negotiator - Lv 20 +(1492003, "PIRATE", 20), # Golden Hook - Lv 25 +(1492004, "PIRATE", 30), # Cold Mind - Lv 30 +(1492005, "PIRATE", 30), # Shooting Star - Lv 35 +(1492006, "PIRATE", 40), # Lunar Shooter - Lv 40 +(1492007, "PIRATE", 50), # Mr. Rasfelt - Lv 50 +(1492008, "PIRATE", 60), # Burning Hell - Lv 60 +(1492009, "PIRATE", 70), # Abyss Shooter - Lv 70 +(1492010, "PIRATE", 80), # Infinity's Wrath - Lv 80 +(1492011, "PIRATE", 90), # The Peacemaker - Lv 90 +(1492012, "PIRATE", 100), # Concerto - Lv 100 +(1492013, "PIRATE", 110), # Dragon Revolver - Lv 110 +(1492210, "PIRATE", 120), # Briser Pistol - Lv 120 +(1492211, "PIRATE", 130), # Jaihin Pistol - Lv 130 +(1492212, "PIRATE", 140), # Utgard Pistol - Lv 140 + +# Knuckle +(1482000, "PIRATE", 10), # Steel Knuckler - Lv 10 +(1482001, "PIRATE", 10), # Leather Arms - Lv 15 +(1482002, "PIRATE", 20), # Double Tail Knuckler - Lv 20 +(1482003, "PIRATE", 20), # Norman Grip - Lv 25 +(1482004, "PIRATE", 30), # Prime Hands - Lv 30 +(1482005, "PIRATE", 30), # Silver Maiden - Lv 35 +(1482020, "PIRATE", 30), # Maple Knuckle - Lv 35 +(1482006, "PIRATE", 40), # Neozard - Lv 40 +(1482007, "PIRATE", 50), # Fury Claw - Lv 50 +(1482008, "PIRATE", 60), # Seraphims - Lv 60 +(1482022, "PIRATE", 60), # Maple Golden Claw - Lv 64 +(1482009, "PIRATE", 70), # Beia Crash - Lv 70 +(1482010, "PIRATE", 80), # Steel Renault - Lv 80 +(1482011, "PIRATE", 90), # White Fangz - Lv 90 +(1482012, "PIRATE", 100), # King Cent - Lv 100 +(1482013, "PIRATE", 110), # Dragon Slash Claw - Lv 110 +(1482200, "PIRATE", 120), # Briser Claw - Lv 120 +(1482201, "PIRATE", 130), # Jaihin Claw - Lv 130 +(1482202, "PIRATE", 140), # Utgard Claw - Lv 140 + +# Soul Shooter +(1222001, "PIRATE", 10), # Purple Haze - Lv 10 +(1222002, "PIRATE", 30), # Pink Haze - Lv 30 +(1222003, "PIRATE", 50), # Purple Hatchling - Lv 50 +(1222004, "PIRATE", 60), # Jade Hatchling - Lv 60 +(1222005, "PIRATE", 70), # Pink Wormhead - Lv 70 +(1222006, "PIRATE", 80), # Red Wormhead - Lv 80 +(1222007, "PIRATE", 90), # Jade Wormhead - Lv 90 +(1222008, "PIRATE", 100), # Green Dragon Soul - Lv 100 +(1222009, "PIRATE", 100), # Jade Worm - Lv 105 +(1222010, "PIRATE", 110), # Iron Dragon - Lv 110 +(1222093, "PIRATE", 120), # Briser Dragon Soul - Lv 120 +(1222094, "PIRATE", 130), # Jaihin Dragon Soul - Lv 130 +(1222095, "PIRATE", 140), # Utgard Dragon Soul - Lv 140 + +# Cannon +(1532001, "PIRATE", 10), # Solid Cannon - Lv 15 +(1532002, "PIRATE", 20), # Ironside - Lv 20 +(1532003, "PIRATE", 20), # Steel Beast - Lv 25 +(1532004, "PIRATE", 30), # Heavy Artillery - Lv 30 +(1532005, "PIRATE", 30), # Titan Cannon - Lv 35 +(1532006, "PIRATE", 40), # Grand Cannon - Lv 40 +(1532007, "PIRATE", 50), # Dreadnought - Lv 50 +(1532008, "PIRATE", 60), # The Bigshot - Lv 60 +(1532009, "PIRATE", 70), # Infernalizer - Lv 70 +(1532010, "PIRATE", 80), # Deck Sweeper - Lv 80 +(1532011, "PIRATE", 90), # Bilge Breaker - Lv 90 +(1532012, "PIRATE", 100), # Gilded Giant - Lv 100 +(1532014, "PIRATE", 110), # Dragon Breaker - Lv 110 +(1532128, "PIRATE", 120), # Briser Hand Cannon - Lv 120 +(1532129, "PIRATE", 130), # Jaihin Siege Gun - Lv 130 +(1532130, "PIRATE", 140), # Utgard Siege Gun - Lv 140 + +# Whip Blade +(1242001, "PIRATE", 10), # Horned Blade - Lv 10 +(1242002, "PIRATE", 30), # Ridge Cutter - Lv 30 +(1242003, "PIRATE", 50), # Rough Violet - Lv 50 +(1242004, "PIRATE", 60), # Macro Knife - Lv 60 +(1242005, "PIRATE", 70), # Scorpio Tail - Lv 70 +(1242006, "PIRATE", 80), # Diode - Lv 80 +(1242007, "PIRATE", 90), # Green Fairy - Lv 90 +(1242008, "PIRATE", 100), # Crimson Skull - Lv 100 +(1242009, "PIRATE", 100), # Fish Fin - Lv 105 +(1242010, "PIRATE", 110), # Dragon Energy Skull - Lv 110 +(1242100, "PIRATE", 120), # Briser Heavy Head - Lv 120 +(1242101, "PIRATE", 130), # Jaihin Heavy Head - Lv 130 +(1242102, "PIRATE", 140), # Utgard Heavy Head - Lv 140 + +# Armor ------------------------------------------------------- + +# Warrior +# Hat +(1002043, "WARRIOR", 10), # Bronze Coif - Lv 10 +(1002059, "WARRIOR", 20), # Bronze Viking Helmet - Lv 20 +(1002023, "WARRIOR", 30), # Jousting Helmet - Lv 30 +(1002025, "WARRIOR", 40), # Red Duke - Lv 40 +(1002028, "WARRIOR", 50), # Silver Crusader Helm - Lv 50 +(1002029, "WARRIOR", 60), # Red Oriental Helmet - Lv 60 +(1002030, "WARRIOR", 70), # Silver Planet - Lv 70 +(1002340, "WARRIOR", 80), # Dark Dragon Barbute - Lv 80 +(1002532, "WARRIOR", 90), # Dark Grace Helmet - Lv 90 +(1002379, "WARRIOR", 100), # Dark Valhalla Helmet - Lv 100 +(1002551, "WARRIOR", 110), # Blue Dragon Helmet - Lv 110 +(1004219, "WARRIOR", 120), # Eclectic Fennel - Lv 120 +(1004224, "WARRIOR", 130), # Muspell Warrior Hat - Lv 130 +(1004229, "WARRIOR", 140), # Pensalir Battle Helm - Lv 140 + +# Gloves +(1082004, "WARRIOR", 20), # Venon - Lv 20 +(1082025, "WARRIOR", 40), # Dark Knuckle - Lv 40 +(1082059, "WARRIOR", 60), # Bronze Clench - Lv 60 +(1082116, "WARRIOR", 80), # Blood Emperor - Lv 80 +(1082141, "WARRIOR", 100), # Dark Korben - Lv 100 +(1082168, "WARRIOR", 110), # Blue Dragon Gauntlet - Lv 110 +(1082598, "WARRIOR", 120), # Eclectic Bergamot - Lv 120 +(1082603, "WARRIOR", 130), # Muspell Warrior Gloves - Lv 130 +(1082608, "WARRIOR", 140), # Pensalir Battle Gloves - Lv 140 + +# Shoes +(1072007, "WARRIOR", 20), # Brown High Boots - Lv 20 +(1072000, "WARRIOR", 40), # Brown Jangoon Shoes - Lv 40 +(1072149, "WARRIOR", 60), # Blood Camel Boots - Lv 60 +(1072210, "WARRIOR", 80), # Red Rivers Boots - Lv 80 +(1072222, "WARRIOR", 100), # Dark Crescent Boots - Lv 100 +(1072273, "WARRIOR", 110), # Blue Dragon Boots - Lv 110 +(1072957, "WARRIOR", 120), # Eclectic Grabbe - Lv 120 +(1072962, "WARRIOR", 130), # Muspell Warrior Shoes - Lv 130 +(1072967, "WARRIOR", 140), # Pensalir Battle Boots - Lv 140 + +# Cape +(1102003, "WARRIOR", 50), # White Adventurer Cape - Lv 50 +(1102004, "WARRIOR", 50), # Black Adventurer Cape - Lv 50 +(1102017, "WARRIOR", 60), # White Magic Cape - Lv 60 +(1102018, "WARRIOR", 60), # Black Magic Cape - Lv 60 +(1102029, "WARRIOR", 70), # White Seraph Cape - Lv 75 +(1102030, "WARRIOR", 70), # Black Seraph Cape - Lv 75 +(1102033, "WARRIOR", 80), # Red Giles Cape - Lv 85 +(1102034, "WARRIOR", 80), # Blue Giles Cape - Lv 85 +(1102718, "WARRIOR", 140), # Pensalir Battle Cape - Lv 140 + +# Top +(1040015, "WARRIOR", 10), # Brown Lolico Armor - Lv 10 +(1041014, "WARRIOR", 10), # Orange Lolica Armor - Lv 10 +(1040012, "WARRIOR", 20), # Blue Sergeant - Lv 20 +(1041021, "WARRIOR", 20), # Brown Lamelle - Lv 20 +(1040021, "WARRIOR", 30), # Red Hwarang Shirt - Lv 30 +(1040085, "WARRIOR", 40), # Maroon Jangoon Armor - Lv 40 +(1041085, "WARRIOR", 40), # Brown Jangoon Armor - Lv 40 +(1040087, "WARRIOR", 50), # Blue Shouldermail - Lv 50 +(1040092, "WARRIOR", 60), # Blue Orientican - Lv 60 +(1041092, "WARRIOR", 60), # Red Ice Queen - Lv 60 +(1040103, "WARRIOR", 70), # Mithril Platine - Lv 70 +(1041097, "WARRIOR", 70), # Aqua Platina - Lv 70 +(1041120, "WARRIOR", 90), # Purple Valkyrie - Lv 90 +(1040112, "WARRIOR", 90), # Blue Commodore - Lv 90 +(1040121, "WARRIOR", 100), # Blue Neos - Lv 100 +(1041123, "WARRIOR", 100), # Purple Lucida - Lv 100 + +# Bottom +(1060008, "WARRIOR", 10), # Brown Lolico Pants - Lv 10 +(1060028, "WARRIOR", 10), # Blue Lolico Pants - Lv 10 +(1060155, "WARRIOR", 20), # Blue Sergeant Kilt - Lv 20 +(1060029, "WARRIOR", 20), # Red Sergeant Kilt - Lv 20 +(1060018, "WARRIOR", 30), # Red Martial Arts Pants - Lv 30 +(1060075, "WARRIOR", 40), # Brown Jangoon Pants - Lv 40 +(1060076, "WARRIOR", 50), # Blue Shouldermail Pants - Lv 50 +(1060080, "WARRIOR", 60), # Red Orientican Pants - Lv 60 +(1061091, "WARRIOR", 60), # Red Ice Queen Skirt - Lv 60 +(1060091, "WARRIOR", 70), # Mithril Platine Pants - Lv 70 +(1060101, "WARRIOR", 90), # Blue Commodore Pants - Lv 90 +(1061118, "WARRIOR", 90), # Green Valkyrie Skirt - Lv 90 +(1060111, "WARRIOR", 100), # Black Neos Pants - Lv 100 +(1061123, "WARRIOR", 100), # Dark Lucida Skirt - Lv 100 + +# Overall +(1050081, "WARRIOR", 80), # Red Battle Lord - Lv 80 +(1051078, "WARRIOR", 80), # Red Battle Empress - Lv 80 +(1052075, "WARRIOR", 110), # Blue Dragon Armor - Lv 110 +(1052789, "WARRIOR", 120), # Eclectic Taragon - Lv 120 +(1052794, "WARRIOR", 130), # Muspell Warrior Suit - Lv 130 +(1052799, "WARRIOR", 140), # Pensalir Battle Mail - Lv 140 + + +# Magician +# Hat +(1002017, "MAGICIAN", 10), # Brown Apprentice Hat - Lv 10 +(1002073, "MAGICIAN", 20), # Red Wizardry Hat - Lv 20 +(1002036, "MAGICIAN", 30), # Green Jester - Lv 30 +(1002155, "MAGICIAN", 40), # White Guiltian - Lv 40 +(1002217, "MAGICIAN", 50), # Orange Golden Circlet - Lv 50 +(1002246, "MAGICIAN", 60), # Dark Seraphis - Lv 60 +(1002254, "MAGICIAN", 70), # Dark Infinium Circlet - Lv 70 +(1002274, "MAGICIAN", 80), # Dark Galaxy - Lv 80 +(1002366, "MAGICIAN", 90), # Black Oriental Fury Hat - Lv 90 +(1002401, "MAGICIAN", 100), # Dark Varr Hat - Lv 100 +(1002773, "MAGICIAN", 110), # Gold Dragon Crown - Lv 110 +(1004220, "MAGICIAN", 120), # Eclectic Coral - Lv 120 +(1004225, "MAGICIAN", 130), # Muspell Magician Hat - Lv 130 +(1004230, "MAGICIAN", 140), # Pensalir Mage Sallet - Lv 140 + +# Gloves +(1082064, "WARRIOR", 40), # Dark Arten - Lv 40 +(1082086, "WARRIOR", 60), # Steel Manute - Lv 60 +(1082122, "WARRIOR", 80), # Blue Clarity - Lv 80 +(1082152, "WARRIOR", 100), # Blue Ciara - Lv 100 +(1082164, "WARRIOR", 110), # Blue Elemental Gloves - Lv 110 +(1082599, "WARRIOR", 120), # Eclectic Hermosa - Lv 120 +(1082604, "WARRIOR", 130), # Muspell Magician Gloves - Lv 130 +(1082609, "WARRIOR", 140), # Pensalir Mage Gloves - Lv 140 + +# Boots +(1072019, "MAGICIAN", 20), # Blue Jewelry Boots - Lv 20 +(1072115, "MAGICIAN", 40), # Blue Moon Shoes - Lv 40 +(1072139, "MAGICIAN", 60), # Blue Goldrunners - Lv 60 +(1072178, "MAGICIAN", 80), # Purple Enigma Shoes - Lv 80 +(1072224, "MAGICIAN", 100), # Blue Varr Shoes - Lv 100 +(1072268, "MAGICIAN", 110), # Blue Elemental Shoes - Lv 110 +(1072958, "MAGICIAN", 120), # Eclectic Cabatina - Lv 120 +(1072963, "MAGICIAN", 130), # Muspell Magician Shoes - Lv 130 +(1072968, "MAGICIAN", 140), # Pensalir Mage Boots - Lv 140 + +# Capes +(1102003, "MAGICIAN", 50), # White Adventurer Cape - Lv 50 +(1102004, "MAGICIAN", 50), # Black Adventurer Cape - Lv 50 +(1102017, "MAGICIAN", 60), # White Magic Cape - Lv 60 +(1102018, "MAGICIAN", 60), # Black Magic Cape - Lv 60 +(1102029, "MAGICIAN", 70), # White Seraph Cape - Lv 75 +(1102030, "MAGICIAN", 70), # Black Seraph Cape - Lv 75 +(1102033, "MAGICIAN", 80), # Red Giles Cape - Lv 85 +(1102034, "MAGICIAN", 80), # Blue Giles Cape - Lv 85 +(1102719, "MAGICIAN", 140), # Pensalir Mage Cape - Lv 140 + +# Top +(1040160, "MAGICIAN", 0), # Grey Training Shirt - Lv 8 +(1040020, "MAGICIAN", 10), # Blue Split Piece - Lv 18 +(1041015, "MAGICIAN", 0), # Black Armine - Lv 8 +(1041041, "MAGICIAN", 20), # Purple Fairy Top - Lv 28 +(1041052, "MAGICIAN", 30), # Blue Amoria Top - Lv 33 + +# Bottom +(1061010, "MAGICIAN", 0), # Black Armine Skirt - Lv 8 + +# Overall +(1050008, "MAGICIAN", 10), # Beige Plain Robe - Lv 13 +(1050194, "MAGICIAN", 10), # Beige Plain Robe - Lv 13 +(1050027, "MAGICIAN", 20), # Black Mage Robe - Lv 28 +(1050197, "MAGICIAN", 20), # Black Mage Robe - Lv 28 +(1050039, "MAGICIAN", 30), # Dark Starlight - Lv 38 +(1050200, "MAGICIAN", 30), # Dark Starlight - Lv 38 +(1051034, "MAGICIAN", 40), # Orange Calaf - Lv 48 +(1050053, "MAGICIAN", 50), # Blue Anakamoon - Lv 58 +(1051044, "MAGICIAN", 50), # Blue Anakarune - Lv 58 +(1050067, "MAGICIAN", 60), # Blue Requiem - Lv 68 +(1051052, "MAGICIAN", 60), # Blue Requierre - Lv 68 +(1050073, "MAGICIAN", 70), # Blue Enigmatic - Lv 78 +(1051057, "MAGICIAN", 70), # Purple Enigma - Lv 78 +(1050092, "MAGICIAN", 80), # Green Oriental Fury Coat - Lv 88 +(1051094, "MAGICIAN", 80), # Green Oriental Fury Coat - Lv 88 +(1050103, "MAGICIAN", 90), # Blue Varuna - Lv 98 +(1051102, "MAGICIAN", 90), # Blue Bazura - Lv 98 +(1050102, "MAGICIAN", 90), # Green Varuna - Lv 98 +(1051103, "MAGICIAN", 90), # Red Bazura - Lv 98 +(1052076, "MAGICIAN", 100), # Blue Czar - Lv 108 +(1052790, "MAGICIAN", 120), # Eclectic Myst Blue - Lv 120 +(1052795, "MAGICIAN", 130), # Muspell Magician Suit - Lv 130 +(1052800, "MAGICIAN", 140), # Pensalir Mage Robe - Lv 140 + +# Bowman + +(1002010, "BOWMAN", 10), # Brown Winter Hat - Lv 10 +(1002119, "BOWMAN", 20), # Green Robin Hat - Lv 20 +(1002163, "BOWMAN", 30), # Green Hawkeye - Lv 30 +(1002168, "BOWMAN", 40), # Green Distinction - Lv 40 +(1002214, "BOWMAN", 50), # Black Maro - Lv 50 +(1002270, "BOWMAN", 60), # Black Polyfeather Hat - Lv 60 +(1002289, "BOWMAN", 70), # Dark Patriot - Lv 70 +(1002278, "BOWMAN", 80), # Dark Falcon - Lv 80 +(1002405, "BOWMAN", 90), # Dark Arlic Helmet - Lv 90 +(1002407, "BOWMAN", 100), # Blue Arnah Cap - Lv 100 +(1002547, "BOWMAN", 110), # Red Hunter - Lv 110 +(1004221, "BOWMAN", 120), # Eclectic Rapid - Lv 120 +(1004226, "BOWMAN", 130), # Muspell Bowman Hat - Lv 130 +(1004231, "BOWMAN", 140), # Pensalir Sentinel Cap - Lv 140 + +# Gloves +(1082090, "BOWMAN", 60), # Sephia Garner - Lv 60 +(1082111, "BOWMAN", 80), # Green Cordon - Lv 80 +(1004383, "BOWMAN", 70), # Dark Focus Hat\r\n - Lv 75 +(1082127, "BOWMAN", 90), # Dark Focus - Lv 90 +(1082160, "BOWMAN", 100), # Green Arcina - Lv 100 +(1082163, "BOWMAN", 110), # Red Hunter Gloves - Lv 110 +(1082600, "BOWMAN", 120), # Eclectic Presto - Lv 120 +(1082605, "BOWMAN", 130), # Muspell Bowman Gloves - Lv 130 +(1082610, "BOWMAN", 140), # Pensalir Sentinel Gloves - Lv 140 + +# Shoes +(1072026, "BOWMAN", 20), # Rabbit Huntertop - Lv 20 +(1072120, "BOWMAN", 40), # Brown Pierre Shoes - Lv 40 +(1072144, "BOWMAN", 60), # Red Gore Boots - Lv 60 +(1072184, "BOWMAN", 80), # Green Wing Boots - Lv 80 +(1072204, "BOWMAN", 90), # Green Ades Shoes - Lv 90 +(1072228, "BOWMAN", 100), # Blue Arnah Shoes - Lv 100 +(1072269, "BOWMAN", 110), # Red Hunter Shoes - Lv 110 +(1072959, "BOWMAN", 120), # Eclectic Rontano - Lv 120 +(1072964, "BOWMAN", 130), # Muspell Bowman Shoes - Lv 130 +(1072969, "BOWMAN", 140), # Pensalir Sentinel Boots - Lv 140 + +# Capes +(1102003, "BOWMAN", 50), # White Adventurer Cape - Lv 50 +(1102004, "BOWMAN", 50), # Black Adventurer Cape - Lv 50 +(1102017, "BOWMAN", 60), # White Magic Cape - Lv 60 +(1102018, "BOWMAN", 60), # Black Magic Cape - Lv 60 +(1102029, "BOWMAN", 70), # White Seraph Cape - Lv 75 +(1102030, "BOWMAN", 70), # Black Seraph Cape - Lv 75 +(1102033, "BOWMAN", 80), # Red Giles Cape - Lv 85 +(1102034, "BOWMAN", 80), # Blue Giles Cape - Lv 85 +(1102720, "BOWMAN", 140), # Pensalir Sentinel Cape - Lv 140 + +# Top +(1040008, "BOWMAN", 10), # Brown Archer Top - Lv 10 +(1040003, "BOWMAN", 20), # Brown Hard Leather Top - Lv 20 +(1040024, "BOWMAN", 20), # Blue Bennis Chainmail - Lv 25 +(1041034, "BOWMAN", 20), # Blue Bennis Chainmail - Lv 25 +(1040067, "BOWMAN", 30), # Green Hunter's Armor - Lv 30 +(1040075, "BOWMAN", 30), # Dark Legolier - Lv 35 +(1040146, "BOWMAN", 30), # King Pepe Dark Legolier - Lv 35 +(1040079, "BOWMAN", 40), # Brown Piette - Lv 40 +(1040178, "BOWMAN", 40), # Brown Piette - Lv 40 +(1041008, "BOWMAN", 10), # Green Able Armor - Lv 15 +(1041027, "BOWMAN", 20), # Red Shivermail - Lv 20 +(1041035, "BOWMAN", 20), # Yellow Bennis Chainmail - Lv 25 +(1041054, "BOWMAN", 30), # Green Huntress Armor - Lv 30 +(1041176, "BOWMAN", 30), # Green Huntress Armor - Lv 30 +(1041067, "BOWMAN", 30), # Green Legolia - Lv 35 +(1041081, "BOWMAN", 40), # White Piettra - Lv 40 + +# Bottom + +(1061006, "BOWMAN", 10), # Green Able Armor Skirt - Lv 15 +(1061025, "BOWMAN", 20), # Red Shivermail Skirt - Lv 20 +(1061062, "BOWMAN", 30), # Green Legolia Pants - Lv 35 +(1060056, "BOWMAN", 30), # Green Hunter's Pants - Lv 30 +(1060065, "BOWMAN", 30), # Brown Legolier Pants - Lv 35 +(1060069, "BOWMAN", 40), # Brown Piette Pants - Lv 40 +(1061080, "BOWMAN", 40), # White Piettra Skirt - Lv 40 + +# Overall +(1050052, "BOWMAN", 50), # Blue-Lined Kismet - Lv 50 +(1050202, "BOWMAN", 50), # Blue-Lined Kismet - Lv 50 +(1051037, "BOWMAN", 50), # Blue Lumati - Lv 50 +(1050059, "BOWMAN", 60), # Blue Tai - Lv 60 +(1051041, "BOWMAN", 60), # Red Choro - Lv 60 +(1050061, "BOWMAN", 70), # Blue Linnex - Lv 70 +(1051062, "BOWMAN", 70), # Blue Lineros - Lv 70 +(1050075, "BOWMAN", 80), # Red Pris - Lv 80 +(1051066, "BOWMAN", 80), # Red Pria - Lv 80 +(1050088, "BOWMAN", 90), # Red Ades - Lv 90 +(1072203, "BOWMAN", 90), # Red Ades Shoes - Lv 90 +(1051082, "BOWMAN", 90), # Red Anes - Lv 90 +(1050107, "BOWMAN", 100), # Blue Arzuna - Lv 100 +(1051106, "BOWMAN", 100), # Blue Armis - Lv 100 +(1052071, "BOWMAN", 110), # Red Mantle - Lv 110 +(1052791, "BOWMAN", 120), # Eclectic Evernew - Lv 120 +(1052796, "BOWMAN", 130), # Muspell Bowman Suit - Lv 130 +(1052801, "BOWMAN", 140), # Pensalir Sentinel Suit - Lv 140 + +# Thief + +(1002125, "THIEF", 10), # Black Ghetto Beanie - Lv 10 +(1002130, "THIEF", 20), # Black Loosecap - Lv 20 +(1002175, "THIEF", 30), # Dark Guise - Lv 30 +(1002185, "THIEF", 40), # Dark Pilfer - Lv 40 +(1002207, "THIEF", 50), # Red Sonata - Lv 50 +(1002249, "THIEF", 60), # Dark Identity - Lv 60 +(1002284, "THIEF", 70), # White Nightfox - Lv 70 +(1002330, "THIEF", 80), # Dark Pireta Hat - Lv 80 +(1002326, "THIEF", 90), # Red Osfa Hat - Lv 90 +(1002383, "THIEF", 100), # Dark Canal Hood - Lv 100 +(1002550, "THIEF", 110), # Black Garina Hood - Lv 110 +(1004222, "THIEF", 120), # Eclectic Chive - Lv 120 +(1004227, "THIEF", 130), # Muspell Thief Hat - Lv 130 +(1004232, "THIEF", 140), # Pensalir Chaser Hat - Lv 140 + +# Gloves +(1082029, "THIEF", 10), # Brown Duo - Lv 15 +(1082093, "THIEF", 60), # Steal Pow - Lv 60 +(1082120, "THIEF", 80), # Blood Larceny - Lv 80 +(1082138, "THIEF", 100), # Dark Anelin - Lv 100 +(1082167, "THIEF", 110), # Black Garina Gloves - Lv 110 +(1082601, "THIEF", 120), # Eclectic Lubav - Lv 120 +(1082606, "THIEF", 130), # Muspell Thief Gloves - Lv 130 +(1082611, "THIEF", 140), # Pensalir Chaser Gloves - Lv 140 + +# Shoes +(1072065, "THIEF", 20), # Red Enamel Boots - Lv 20 +(1072107, "THIEF", 40), # Black Red-Lined Shoes - Lv 40 +(1072592, "THIEF", 40), # Black Red-Lined Shoes - Lv 40 +(1072151, "THIEF", 60), # Gold Moss Boots - Lv 60 +(1072174, "THIEF", 80), # Dark Pirate Boots - Lv 80 +(1072216, "THIEF", 100), # Dark Katina Boots - Lv 100 +(1072272, "THIEF", 110), # Black Garina Shoes - Lv 110 +(1072960, "THIEF", 120), # Eclectic Moonsteed - Lv 120 +(1072965, "THIEF", 130), # Muspell Thief Shoes - Lv 130 +(1072970, "THIEF", 140), # Pensalir Chaser Boots - Lv 140 + +# Capes +(1102003, "THIEF", 50), # White Adventurer Cape - Lv 50 +(1102004, "THIEF", 50), # Black Adventurer Cape - Lv 50 +(1102017, "THIEF", 60), # White Magic Cape - Lv 60 +(1102018, "THIEF", 60), # Black Magic Cape - Lv 60 +(1102029, "THIEF", 70), # White Seraph Cape - Lv 75 +(1102030, "THIEF", 70), # Black Seraph Cape - Lv 75 +(1102033, "THIEF", 80), # Red Giles Cape - Lv 85 +(1102034, "THIEF", 80), # Blue Giles Cape - Lv 85 +(1102721, "THIEF", 140), # Pensalir Chaser Cape - Lv 140 + +# Top/Bottom +(1040033, "THIEF", 10), # Black Cloth Vest - Lv 10 +(1040034, "THIEF", 10), # Dark Nightshift - Lv 15 +(1060024, "THIEF", 10), # Dark Nightshift Pants - Lv 15 +(1040044, "THIEF", 20), # Black Pao - Lv 20 +(1060033, "THIEF", 20), # Black Pao Bottom - Lv 20 +(1040048, "THIEF", 20), # Brown Sneak - Lv 25 +(1060037, "THIEF", 20), # Dark Brown Sneak Pants - Lv 25 +(1060038, "THIEF", 20), # Brown Sneak Pants - Lv 25 +(1060160, "THIEF", 20), # Dark Brown Sneak Pants - Lv 25 +(1040057, "THIEF", 30), # Dark Brown Stealer - Lv 30 +(1060043, "THIEF", 30), # Dark Brown Stealer Pants - Lv 30 +(1040061, "THIEF", 30), # Green Knucklevest - Lv 35 +(1040083, "THIEF", 40), # Marine Shadow - Lv 40 +(1040094, "THIEF", 50), # Red China - Lv 50 +(1060083, "THIEF", 50), # Red China Pants - Lv 50 +(1040099, "THIEF", 60), # Ocher Scorpio - Lv 60 +(1060088, "THIEF", 60), # Ocher Scorpio Pants - Lv 60 +(1040107, "THIEF", 70), # Dark Studded Top - Lv 70 +(1040109, "THIEF", 80), # Red Pirate Top - Lv 80 +(1040116, "THIEF", 90), # Brown Osfa Suit - Lv 90 +(1041116, "THIEF", 90), # Brown Osfa Suit - Lv 90 +(1041003, "THIEF", 20), # Red Qi Pao - Lv 20 +(1061003, "THIEF", 20), # Red Qi Pao Pants - Lv 20 +(1061040, "THIEF", 20), # Red Qi Pao Skirt - Lv 22 +(1041095, "THIEF", 60), # Bloody Mantis - Lv 60 +(1061094, "THIEF", 60), # Bloody Mantis Pants - Lv 60 +(1041101, "THIEF", 70), # Blue Mystique - Lv 70 +(1061100, "THIEF", 70), # Blue Mystique Pants - Lv 70 +(1072162, "THIEF", 70), # Blue Mystique Shoes - Lv 70 +(1041106, "THIEF", 80), # Red Pirate Blouse - Lv 80 + +# Overall +(1050097, "THIEF", 100), # Blue Katinas - Lv 100 +(1051091, "THIEF", 100), # Blue Katte - Lv 100 +(1052072, "THIEF", 110), # Black Garina - Lv 110 +(1052792, "THIEF", 120), # Eclectic Prinsid - Lv 120 +(1052797, "THIEF", 130), # Muspell Thief Suit - Lv 130 +(1052802, "THIEF", 140), # Pensalir Chaser Armor - Lv 140 + +# Pirate + +(1002610, "PIRATE", 10), # Brown Rocky Bandana - Lv 10 +(1002616, "PIRATE", 20), # Brown Double Marine - Lv 20 +(1002622, "PIRATE", 30), # White Oceania Cap - Lv 30 +(1002628, "PIRATE", 40), # Red Misty - Lv 40 +(1002631, "PIRATE", 50), # Brown Leather Ocean Hat - Lv 50 +(1002634, "PIRATE", 60), # Purple Cast Linen - Lv 60 +(1002637, "PIRATE", 70), # Black Pirate's Bandana - Lv 70 +(1002640, "PIRATE", 80), # Blue Sun Boat Hat - Lv 80 +(1002643, "PIRATE", 90), # Red Brave Hamal - Lv 90 +(1002646, "PIRATE", 100), # Black Polax Hat - Lv 100 +(1002649, "PIRATE", 110), # Canopus Hat - Lv 110 +(1004223, "PIRATE", 120), # Eclectic Conrad Henkel - Lv 120 +(1004228, "PIRATE", 130), # Muspell Pirate Hat - Lv 130 +(1004233, "PIRATE", 140), # Pensalir Skipper Hat - Lv 140 + +# Gloves +(1082355, "PIRATE", 20), # Brown Leather Bracers - Lv 20 +(1082195, "PIRATE", 40), # Brown Barbee - Lv 40 +(1082201, "PIRATE", 60), # Black Schult - Lv 60 +(1082207, "PIRATE", 80), # Blue Halfgloves - Lv 80 +(1082213, "PIRATE", 100), # Black Skellduke - Lv 100 +(1082216, "PIRATE", 110), # Canopus Gloves - Lv 110 +(1082602, "PIRATE", 120), # Eclectic Charlston - Lv 120 +(1082607, "PIRATE", 130), # Muspell Pirate Gloves - Lv 130 +(1082612, "PIRATE", 140), # Pensalir Skipper Gloves - Lv 140 + +# Shoes +(1072288, "PIRATE", 20), # Brown Skeedy Sandals - Lv 20 +(1072300, "PIRATE", 40), # Brown Leather Krag - Lv 40 +(1072306, "PIRATE", 60), # Black Basile Boots - Lv 60 +(1072312, "PIRATE", 80), # Blue Pageant - Lv 80 +(1072318, "PIRATE", 100), # Black Duke Barkin Shoes - Lv 100 +(1072321, "PIRATE", 110), # Canopus Boots - Lv 110 +(1072961, "PIRATE", 120), # Eclectic Faraon - Lv 120 +(1072966, "PIRATE", 130), # Muspell Pirate Shoes - Lv 130 +(1072971, "PIRATE", 140), # Pensalir Skipper Boots - Lv 140 + +# Capes +(1102003, "PIRATE", 50), # White Adventurer Cape - Lv 50 +(1102004, "PIRATE", 50), # Black Adventurer Cape - Lv 50 +(1102017, "PIRATE", 60), # White Magic Cape - Lv 60 +(1102018, "PIRATE", 60), # Black Magic Cape - Lv 60 +(1102029, "PIRATE", 70), # White Seraph Cape - Lv 75 +(1102030, "PIRATE", 70), # Black Seraph Cape - Lv 75 +(1102033, "PIRATE", 80), # Red Giles Cape - Lv 85 +(1102034, "PIRATE", 80), # Blue Giles Cape - Lv 85 +(1102722, "PIRATE", 140), # Pensalir Skipper Cape - Lv 140 + +# Overall + +(1052095, "PIRATE", 10), # Brown Rocky Suit - Lv 10 +(1052098, "PIRATE", 10), # Brown Cotton Lagger - Lv 15 +(1052101, "PIRATE", 20), # Beige Carribean - Lv 20 +(1052107, "PIRATE", 30), # Brown Pollard - Lv 30 +(1052113, "PIRATE", 40), # Red Barbay - Lv 40 +(1052116, "PIRATE", 50), # Green Plasteer - Lv 50 +(1050313, "PIRATE", 60), # Black Royal Barone - Lv 60 +(1052122, "PIRATE", 70), # Red Viska - Lv 70 +(1052125, "PIRATE", 80), # White Pioneer - Lv 80 +(1052128, "PIRATE", 90), # White Marquini - Lv 90 +(1052131, "PIRATE", 100), # Red Belly Duke - Lv 100 +(1052134, "PIRATE", 110), # Canopus Suit - Lv 110 +(1052793, "PIRATE", 120), # Eclectic Burgunt - Lv 120 +(1052798, "PIRATE", 130), # Muspell Pirate Suit - Lv 130 +(1052803, "PIRATE", 140); # Pensalir Skipper Coat - Lv 140 diff --git a/sql/6 - beautyalbum.sql b/sql/6 - beautyalbum.sql new file mode 100755 index 0000000..d9f9945 --- /dev/null +++ b/sql/6 - beautyalbum.sql @@ -0,0 +1,9 @@ +create table beautyalbuminventory ( + id bigint not null auto_increment, + styleid int, + slotid int, + charid int, + primary key (id), + foreign key (charid) references characters(id) + +); \ No newline at end of file diff --git a/sql/7 - charactercard.sql b/sql/7 - charactercard.sql new file mode 100755 index 0000000..c691021 --- /dev/null +++ b/sql/7 - charactercard.sql @@ -0,0 +1,8 @@ +CREATE TABLE `charactercard` ( + `id` int NOT NULL AUTO_INCREMENT, + `accountid` int DEFAULT NULL, + `characterid` int DEFAULT NULL, + `position` int DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `accountid` (`accountid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 \ No newline at end of file diff --git a/sql/8 - InitTable_npc.sql b/sql/8 - InitTable_npc.sql new file mode 100755 index 0000000..9aec131 --- /dev/null +++ b/sql/8 - InitTable_npc.sql @@ -0,0 +1,14 @@ +drop table if exists npc; + +CREATE TABLE `npc` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `npcid` int(11) DEFAULT NULL, + `mapid` int(11) DEFAULT NULL, + `x` int(11) DEFAULT NULL, + `y` int(11) DEFAULT NULL, + `cy` int(11) DEFAULT NULL, + `rx0` int(11) DEFAULT NULL, + `rx1` int(11) DEFAULT NULL, + `fh` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 \ No newline at end of file diff --git a/sql/9 - InitTables_MonsterCollection.sql b/sql/9 - InitTables_MonsterCollection.sql new file mode 100755 index 0000000..9892bd7 --- /dev/null +++ b/sql/9 - InitTables_MonsterCollection.sql @@ -0,0 +1,1266 @@ +drop table if exists monster_collection_session_rewards; +drop table if exists monster_collection_group_rewards; +drop table if exists monster_collection; + +create table monster_collection_session_rewards ( + region int, + session int, + rewardid int, + quantity int, + primary key (region, session) +); + +create table monster_collection_group_rewards ( + region int, + session int, + groupid int, + rewardid int, + quantity int, + primary key (region, session, groupid) +); + +create table monster_collection ( + id int not null auto_increment, + mobid int, + region int, + session int, + position int, + primary key (id) +); + +# (monsterID, region, session, position) +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (0, 0, 2028048, 1); +# /** +# * Victoria Island 1 - Reward: 2028048 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (100004, 0, 0, 0), # OrangeMushroom +(2600208, 0, 0, 1), # Mushmom +(2600204, 0, 0, 2), # BlueMushroom +(2600205, 0, 0, 3), # CryingBlueMushroom +(9305103, 0, 0, 4); # BlueMushmom +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600200, 0, 0, 5), # GreenMushroom +(2600203, 0, 0, 6), # HornyMushroom +(2600206, 0, 0, 7), # ZombieMushroom +(2600207, 0, 0, 8), # AnnoyedZombieMushroom +(9305104, 0, 0, 9); # ZombieMushmom +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (1210101, 0, 0, 10), # RibbonPig +(1210104, 0, 0, 11), # BlueRibbionPig +(1210111, 0, 0, 12), # StrangePig +(2230102, 0, 0, 13), # WildBoar +(0, 0, 0, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 0, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (4090000, 0, 0, 15), # IronHog +(4230400, 0, 0, 16), # IronBoar +(3210100, 0, 0, 17), # FireBoar +(9300655, 0, 0, 18), # PortlyPig +(9300680, 0, 0, 19); # MrChomps +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 0, 4, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3000001, 0, 0, 20), # Fiary +(3000007, 0, 0, 21), # RoyalFairy +(210100, 0, 0, 22), # Slime +(1210103, 0, 0, 23), # Bubbling +(0, 0, 0, 24); # Empty +# Reward ID: 2434929 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (0, 1, 2433928, 1); +# /** +# * Victoria Island 2 - Reward: 2433928 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 1, 0, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2230100, 0, 1, 0), # EvilEye +(3230100, 0, 1, 1), # CurseEye +(4230100, 0, 1, 2), # ColdEye +(2230113, 0, 1, 3), # SurgeonEye +(0, 0, 1, 4); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 1, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (130100, 0, 1, 5), # Stump +(1110101, 0, 1, 6), # DarkStump +(1130100, 0, 1, 7), # AxeStump +(2130100, 0, 1, 8), # DarkAxeStump +(0, 0, 1, 9); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (1140100, 0, 1, 10), # GhostStump +(1140130, 0, 1, 11), # SmirkingGhostStump +(3220000, 0, 1, 12), # Stumpy +(2230110, 0, 1, 13), # WoodenMask +(2230111, 0, 1, 14); # RockyMask +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 1, 3, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3501000, 0, 1, 15), # FireflySlime +(3501001, 0, 1, 16), # FairySlime +(3501009, 0, 1, 17), # MysticWisp +(3501002, 0, 1, 18), # WaterSprite +(3501003, 0, 1, 19); # ForestSprite +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 1, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600209, 0, 1, 20), # StoneGolem +(2600210, 0, 1, 21), # DarkStoneGolem +(2600212, 0, 1, 22), # IcyMixedGolem +(2600213, 0, 1, 23), # FlamingMixedGolem +(9500150, 0, 1, 24); # IceGolem +# Reward ID: 2434931 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (0, 2, 3017000, 1); +# /** +# * Victoria Island 3 - Reward: 3017000 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 2, 0, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3501004, 0, 2, 0), # GrumpyTome +(3501005, 0, 2, 1), # RagingTome +(3501006, 0, 2, 2), # Oniony +(3501007, 0, 2, 3), # Turnipy +(3501008, 0, 2, 4); # MoleKing +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 2, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2300100, 0, 2, 5), # Stirge +(3230101, 0, 2, 6), # JrWraith +(4230102, 0, 2, 7), # Wraith +(5090000, 0, 2, 8), # Shade +(0, 0, 2, 9); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 2, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3401000, 0, 2, 10), # PalmTreeSlime +(3401001, 0, 2, 11), # CoconutSlime +(3401002, 0, 2, 12), # EmeraldClamSlime +(3401003, 0, 2, 13), # VioletClamSlime +(0, 0, 2, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 2, 3, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3401004, 0, 2, 15), # SeagullSlime +(3401005, 0, 2, 16), # RedTubeSlime +(3401006, 0, 2, 17), # BlueTubeSlime +(3401007, 0, 2, 18), # ShrimpSlime +(3401008, 0, 2, 19); # FlyingFishSlime +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 2, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3401011, 0, 2, 20), # CaptainDarkgoo +(3401009, 0, 2, 21), # StarfishOctopusSlime +(3401010, 0, 2, 22), # SeashellOctopusSlime +(0, 0, 2, 23), # Empty +(0, 0, 2, 24); # Empty +# Reward ID: 2434931 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (0, 3, 2435509, 1); + +# /** +# * Victoria Island 4 - Reward: 2435509 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 3, 0, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2130103, 0, 3, 0), # JrNecki +(3110100, 0, 3, 1), # Ligator +(5130103, 0, 3, 2), # Croco +(2230115, 0, 3, 3), # MuddySproutMonster +(6220000, 0, 3, 4); # Dyle +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 3, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (4230125, 0, 3, 5), # Skeledog +(5150001, 0, 3, 6), # SkeletonSolider +(6230602, 0, 3, 7), # OfficerSkeleton +(7130103, 0, 3, 8), # CommanderSkeleton +(9300471, 0, 3, 9); # LordSkeleton +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 3, 2, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3300100, 0, 3, 10), # MushroomChandelier +(3300101, 0, 3, 11), # MushroomKnightArmor +(3300102, 0, 3, 12), # ExhaustedViking +(3300103, 0, 3, 13), # TiredViking +(0, 0, 3, 14); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 3, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (9300710, 0, 3, 15), # PrimeMinister +(3300104, 0, 3, 16), # WarmViking +(3300105, 0, 3, 17), # GenerousViking +(3300106, 0, 3, 18), # SolemnViking +(0, 0, 3, 19); # Empty +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 3, 4, 2434959, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3300110, 0, 3, 20), # BlackViking +(3300107, 0, 3, 21), # SeriousViking +(3300108, 0, 3, 22), # MasterSquid +(3300109, 0, 3, 23), # VikingSquad +(0, 0, 3, 24); # Empty +# Reward ID: 2434959 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (0, 4, 2350000, 1); +# /** +# * Victoria - 5 Sleepywood 1 - Reward: 2350000 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 4, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (4130100, 0, 4, 0), # CopperDrake +(5130100, 0, 4, 1), # Drake +(6130100, 0, 4, 2), # RedDrake +(6230600, 0, 4, 3), # IceDrake +(6230601, 0, 4, 4); # DarkDrake +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 4, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (6230100, 0, 4, 5), # WildKargo +(7130100, 0, 4, 6), # Tauromacis +(7130101, 0, 4, 7), # Taurospear +(8130100, 0, 4, 8), # JrBalrog +(8830000, 0, 4, 9); # Balrog +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 4, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (7120110, 0, 4, 10), # BlazingImp +(7120111, 0, 4, 11), # PointyImp +(7120112, 0, 4, 12), # EliteBlazingImp +(7120113, 0, 4, 13), # ElitePointyImp +(0, 0, 4, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 4, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8900100, 0, 4, 15), # Pierre +(8910100, 0, 4, 16), # VonBon +(8920100, 0, 4, 17), # CrimsonQueen +(8930100, 0, 4, 18), # Vellum +(0, 0, 4, 19); # Empty +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (0, 4, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8900000, 0, 4, 20), # ChaosPierre +(8910000, 0, 4, 21), # ChaosVonBon +(8920000, 0, 4, 22), # ChaosCrimsonQueen +(8930000, 0, 4, 23), # ChaosVellum +(0, 0, 4, 24); # Empty +# Reward ID: 2434932 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (1, 0, 3017001, 1); + +# /** +# * Near Victoria 1 - Reward: 3017001 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (1, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (100120, 1, 0, 0), # Tino +(100121, 1, 0, 1), # Tiv +(100122, 1, 0, 2), # Timu +(100123, 1, 0, 3), # Tiru +(100124, 1, 0, 4); # Tiguru +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (1, 0, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (100130, 1, 0, 5), # Muru +(100131, 1, 0, 6), # Murupa +(100132, 1, 0, 7), # Murupia +(100133, 1, 0, 8), # Murumuru +(100134, 1, 0, 9); # Murukun +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (1, 0, 2, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2220000, 1, 0, 10), # Mano +(100100, 1, 0, 11), # Snail +(100101, 1, 0, 12), # BlueSnail +(100002, 1, 0, 13), # RedSnail +(120100, 1, 0, 14); # Shroom +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (1, 0, 3, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3502000, 1, 0, 15), # AmmoniteGrumpil +(3502001, 1, 0, 16), # FishGrumpil +(3502002, 1, 0, 17), # CorrupterBarrels +(3502003, 1, 0, 18), # PolluterBarrel +(0, 1, 0, 19); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (1, 0, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3502004, 1, 0, 20), # PossiblyEvilSeal +(3502005, 1, 0, 21), # PossiblyEvilWalrus +(3502006, 1, 0, 22), # WarmerBot +(3502007, 1, 0, 23), # ShaverBot +(0, 1, 0, 24); # Empty +# Reward ID: 2434931 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (2, 0, 3017002, 0); + +# /** +# * Edelstein - Reward: 3017002 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (150000, 2, 0, 0), # PottedSprout +(150001, 2, 0, 1), # PottedMorningGlory +(150002, 2, 0, 2), # GrapeJuiceBottle +(1150000, 2, 0, 3), # PatrolRobot +(1150001, 2, 0, 4); # StrangeSign +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 0, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (1150002, 2, 0, 5), # Serpent +(2150000, 2, 0, 6), # WaterThiefMonster +(2150001, 2, 0, 7), # DustBox +(2150002, 3, 0, 8), # Streetlight +(2150003, 2, 0, 9); # PatrolRobotS +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600409, 2, 0, 10), # SafetyFirst +(2600410, 2, 0, 11), # BabyBoulderMucher +(2600411, 2, 0, 12), # BigBoulderMucher +(6150000, 2, 0, 13), # GuardRobot +(7150004, 2, 0, 14); # GuardRobotL +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 0, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600414, 2, 0, 15), # BigSpider +(2600415, 2, 0, 16), # CartBear +(2600413, 2, 0, 17), # Racoco +(2600416, 2, 0, 18), # Racaroni +(2600417, 2, 0, 19); # Raco +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 0, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600421, 2, 0, 20), # SecuritySystem +(2600422, 2, 0, 21), # EnhancedSecuritySystem +(2600423, 2, 0, 22), # AFAndroid +(2600424, 2, 0, 23), # BrokenDFAndroid +(2600418, 2, 0, 24); # OreMuncher +# Reward ID: 2434931 +# + + + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (2, 1, 2435779, 1); + +# /** +# * Scrapyard - Reward: 2435779 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8250000, 2, 1, 0), # ModdedScaredroid +(8250001, 2, 1, 1), # ModdedBrokenAndroid +(8250002, 2, 1, 2), # ModdedLaseroid +(8250003, 2, 1, 3), # ChaseroidRed +(8250004, 2, 1, 4); # ChaseroidBlue +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 1, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8250005, 2, 1, 5), # HunterizerRed +(8250006, 2, 1, 6), # HunterizerBlue +(8250008, 2, 1, 7), # ModdedBuffroid +(8250009, 2, 1, 8), # SalvoroidRed +(8250028, 2, 1, 9); # SalvoroidBlue +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8250007, 2, 1, 10), # ModdedDeliverbot +(8250010, 2, 1, 11), # OuterGuardEX +(8250011, 2, 1, 12), # InnerGuardEX +(8250012, 2, 1, 13), # Demolishizer +(8250013, 2, 1, 14); # Repairoid +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 1, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8250016, 2, 1, 15), # SteelXendroidDX +(8250018, 2, 1, 16), # ScrapXendroidDX +(8250022, 2, 1, 17), # SteelXenoroidEX +(8250023, 2, 1, 18), # SteelXendroidEX +(8250024, 2, 1, 19); # ScrapXendroidEX +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (2, 1, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8950001, 2, 1, 20), # Lotus +(8250014, 2, 1, 21), # AlloyXendroidDX +(8250021, 2, 1, 22), # AlloyXendroidEX +(8250026, 2, 1, 23), # ModdedMegaroid +(0, 2, 1, 24); # Empty +# Reward ID: 2434932 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (3, 0, 2434993, 1); +# /** +# * Orbis - Reward: 2434993 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (5200000, 3, 0, 0), # JrSentinel +(3000000, 3, 0, 1), # Sentinel +(5200001, 3, 0, 2), # IceSentinel +(5200002, 3, 0, 3), # FireSentinel +(6400006, 3, 0, 4); # CrimsonBalrog +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3210200, 3, 0, 5), # JrCellion +(3210201, 3, 0, 6), # JrLioner +(3210202, 3, 0, 7), # JrGrupin +(6230401, 3, 0, 8), # JrLucida +(0, 3, 0, 9); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (5120001, 3, 0, 10), # Cellion +(5120002, 3, 0, 11), # Lioner +(5120003, 3, 0, 12), # Grupin +(7130000, 3, 0, 13), # Lucida +(8220000, 3, 0, 14); # Eliza +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 0, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (4230106, 3, 0, 15), # LunarPixie +(5120000, 3, 0, 16), # LusterPixie +(3230200, 3, 0, 17), # StarPixie +(9300038, 3, 0, 18), # GhostPixie +(9300039, 3, 0, 19); # PapaPixie +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 0, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (4130102, 3, 0, 20), # DarkNependeath +(4230105, 3, 0, 21), # Nependeath +(5160003, 3, 0, 22), # GoldenScorpie +(6160002, 3, 0, 23), # GoldenMammoth +(6160003, 3, 0, 24); # Xerxes +# Reward ID: 2434932 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (3, 1, 2433943, 500); + + +# /** +# * El Nath 1 - Reward: 2433943 (x500) +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (5300000, 3, 1, 0), # Leatty +(5300001, 3, 1, 1), # DarkLeatty +(5400000, 3, 1, 2), # JrPepe +(9200018, 3, 1, 3), # JrYeti +(9800010, 3, 1, 4); # DarkJrYeti +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 1, 1, 2434958, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (6230200, 3, 1, 5), # DarkPepe +(5130104, 3, 1, 6), # Hector +(5140000, 3, 1, 7), # WhiteFang +(6090001, 3, 1, 8), # SnowWitch +(0, 3, 1, 9); # Empty +# Reward ID: 2434958 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (6300000, 3, 1, 10), # Yeti +(6400000, 3, 1, 11), # DarkYeti +(6130102, 3, 1, 12), # SeperatedPepe +(7130102, 3, 1, 13), # YetiAndPepe +(8140100, 3, 1, 14); # DarkYetiAndPepe +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 1, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8220001, 3, 1, 15), # Snowman +(7130200, 3, 1, 16), # Werewolf +(8140000, 3, 1, 17), # Lycanthrope +(6090000, 3, 1, 18), # Riche +(0, 3, 1, 19); # Empty +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 1, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (9300276, 3, 1, 20), # HoblinHector +(9300277, 3, 1, 21), # EliteHoblin +(9300279, 3, 1, 22), # CombatHoblin +(9300280, 3, 1, 23), # FerociousHoblin +(9300281, 3, 1, 24); # Rex +# Reward ID: 2434932 +# +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (3, 2, 3017003, 1); + +# /** +# * El Nath 2 - Reward: 3017003 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 2, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8210000, 3, 2, 0), # CrockyTheGatekeeper +(8210001, 3, 2, 1), # Reindeer +(8210002, 3, 2, 2), # BloodReindeer +(8210003, 3, 2, 3), # Bearwolf +(8210004, 3, 2, 4); # GreyVulture +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 2, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8211003, 3, 2, 5), # GoldenBee +(8211000, 3, 2, 6), # FrozenRose +(8211002, 3, 2, 7), # GardenGolem +(8210005, 3, 2, 8), # CastleGolem +(8211004, 3, 2, 9); # KingCastleGolem +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 2, 2, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8210006, 3, 2, 10), # PrisonGuardBoar +(8210007, 3, 2, 11), # PrisonGuardRhino +(8210013, 3, 2, 12), # PrisonGuardAni +(8211001, 3, 2, 13), # KeymasterRousseau +(8840000, 3, 2, 14); # VonLeon +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 2, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (4230107, 3, 2, 15), # Flyeye +(5130107, 3, 2, 16), # CoolieZombie +(5130108, 3, 2, 17), # MinerZombie +(7130001, 3, 2, 18), # Cerebes +(8140500, 3, 2, 19); # Bain +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (3, 2, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8800013, 3, 2, 20), # Punco +(6400004, 3, 2, 21), # Opachu +(8800114, 3, 2, 22), # ChaosKusko +(8800002, 3, 2, 23), # Zakum +(8800102, 3, 2, 24); # ChaosZakum +# Reward ID: 2434931 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (4, 0, 3017004, 1); + + +# /** +# * Ludas Lake (no Near Ludas Lake) - Reward: 3017004 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3230400, 4, 0, 0), # DrummingBunny +(3000005, 4, 0, 1), # BrownTeddy +(3110101, 4, 0, 2), # PinkTeddy +(3210203, 4, 0, 3), # PandaTeddy +(3210204, 4, 0, 4); # Roloduck +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3210206, 4, 0, 5), # Helly +(3230303, 4, 0, 6), # Propelly +(3230304, 4, 0, 7), # Planey +(3230307, 4, 0, 8), # Chirppy +(3230308, 4, 0, 9); # Tweeter +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3230302, 4, 0, 10), # Bloctopus +(3230103, 4, 0, 11), # KingBloctopus +(4130103, 4, 0, 12), # Rombot +(4230109, 4, 0, 13), # BlockGolem +(4230110, 4, 0, 14); # KingBlockGolem +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 0, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600604, 4, 0, 15), # ToyTrojan +(2600605, 4, 0, 16), # Robo +(2600606, 4, 0, 17), # MasterRobo +(2600613, 4, 0, 18), # Timer +(0, 4, 0, 19); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 0, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (3110102, 4, 0, 20), # Ratz +(3210205, 4, 0, 21), # BlackRatz +(2230103, 4, 0, 22), # Trixter +(9300014, 4, 0, 23), # DarkEyeFromDimension +(9300012, 4, 0, 24); # Alishar +# Reward ID: 2434931 +# +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (4, 1, 2450042, 3); + + +# /** +# * Ludas Lake 2 - Reward: 2450042 (x3) +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600608, 4, 1, 0), # Tick +(2600609, 4, 1, 1), # TickTock +(2600610, 4, 1, 2), # Chronos +(2600611, 4, 1, 3), # PlatoonChronos +(2600612, 4, 1, 4); # MasterChronos +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 1, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600620, 4, 1, 5), # Buffy +(2600621, 4, 1, 6), # LazyBuffy +(2600618, 4, 1, 7), # Buffoon +(2600619, 4, 1, 8), # DeepBuffoon +(0, 4, 1, 9); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600616, 4, 1, 10), # SoulTeddy +(2600617, 4, 1, 11), # MasterSoulTeddy +(2600614, 4, 1, 12), # DeathTeddy +(2600615, 4, 1, 13), # MasterDeathTeddy +(0, 4, 1, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 1, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600623, 4, 1, 15), # GhostPirate +(2600624, 4, 1, 16), # DualGhostPirate +(2600627, 4, 1, 17), # SpiritViking +(2600628, 4, 1, 18), # GiganticSpiritViking +(0, 4, 1, 19); # Empty +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 1, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600629, 4, 1, 20), # PhantomWatch +(2600630, 4, 1, 21), # GrimPhantomWatch +(8160000, 4, 1, 22), # Gatekepper +(8170000, 4, 1, 23), # Thantos +(2600631, 4, 1, 24); # Paplatus +# Reward ID: 2434931 +# +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (4, 2, 2432158, 3); + +# /** +# * Ellin Forest - Reward: 2432158 (x3) +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 2, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (4250000, 4, 2, 0), # MossySnail +(4250001, 4, 2, 1), # TreeRod +(5250000, 4, 2, 2), # MossyMushroom +(5250001, 4, 2, 3), # StoneBug +(0, 4, 2, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 2, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (5250002, 4, 2, 5), # PrimitiveBoar +(5250003, 4, 2, 6), # ViolentPrimitiveBoar +(5250004, 4, 2, 7), # ChaosCrimsonQueen +(0, 4, 2, 8), # Empty +(0, 4, 2, 9); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 2, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8230003, 4, 2, 10), # EvilPoacher +(8230004, 4, 2, 11), # PoachersHawk +(8230005, 4, 2, 12), # HiddenGraveRobber +(8230006, 4, 2, 13), # GraveRobbersHuntingDog +(0, 4, 2, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 2, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (9300172, 4, 2, 15), # PoisonedLordTree +(9300173, 4, 2, 16), # PoisonedStoneBug +(9300174, 4, 2, 17), # PoisonFlower +(9300175, 4, 2, 18), # PoisonedSpright +(9300176, 4, 2, 19); # PoisonGolem +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (4, 2, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8230007, 4, 2, 20), # NeonBat +(8230009, 4, 2, 21), # PeaceSpirit +(5250005, 4, 2, 22), # AncientFairy +(5250006, 4, 2, 23), # ShiningFairy +(5250007, 4, 2, 24); # Ephenia +# Reward ID: 2434932 +# +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (5, 0, 3017005, 1); + +# * Aqua Road - Reward: 3017005 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (5, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2230105, 5, 0, 0), # Seacle +(2230106, 5, 0, 1), # Cico +(3210450, 5, 0, 2), # ScubaPepe +(3230405, 5, 0, 3), # JrSeal +(2230108, 5, 0, 4); # Pinboom +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (5, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2230109, 5, 0, 5), # BubbleFish +(2230200, 5, 0, 6), # FlowerFish +(3230104, 5, 0, 7), # MaskFish +(4230200, 5, 0, 8), # Poopa +(4230201, 5, 0, 9); # PoisonPoopa +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (5, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2230107, 5, 0, 10), # Krappy +(3000006, 5, 0, 11), # Krip +(4220000, 5, 0, 12), # Seruf +(4230123, 5, 0, 13), # Sparker +(4230124, 5, 0, 14); # Freezer +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (5, 0, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8140555, 5, 0, 15), # BombingFishHouse +(7130020, 5, 0, 16), # Goby +(8140600, 5, 0, 17), # BoneFish +(8141300, 5, 0, 18), # Squid +(8142100, 5, 0, 19); # RisellSquid +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (5, 0, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8150100, 5, 0, 20), # Shark +(8150101, 5, 0, 21), # ColdShark +(8510000, 5, 0, 22), # Pianus +(8510100, 5, 0, 23), # BloodyBoom +(0, 5, 0, 24); # Empty +# Reward ID: 2434932 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (6, 0, 3017006, 1); +# /** +# /** +# * Nihal Desert - Reward: 3017006 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2100103, 6, 0, 0), # Cactus +(2100104, 6, 0, 1), # RoyalCactus +(2600105, 6, 0, 2), # Deo +(2600100, 6, 0, 3), # WhiteDesertRabbit +(2600101, 6, 0, 4); # BrownDesertRabbit +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600106, 6, 0, 5), # Bellamoa +(2600107, 6, 0, 6), # EarPlugPlead +(2600108, 6, 0, 7), # ScarfPlead +(2600109, 6, 0, 8), # Meerkat +(2600114, 6, 0, 9); # Kiyo +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600110, 6, 0, 10), # SandRat +(2600112, 6, 0, 11), # Scorpion +(2600113, 6, 0, 12), # SandDwarf +(2600115, 6, 0, 13), # DarkSandDwarf +(2600117, 6, 0, 14); # DesertGiant +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 0, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600122, 6, 0, 15), # Horus +(2600123, 6, 0, 16), # AdvisorMummy +(9305408, 6, 0, 17), # PharaohYeti +(9305413, 6, 0, 18), # PharaohSnake +(9305422, 6, 0, 19); # PharaohMummy +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 0, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2500500, 6, 0, 20), # DeadlyAlter +(2500100, 6, 0, 21), # SpearmanSkeleknight +(2500200, 6, 0, 22), # Bloodfang +(8870100, 6, 0, 23), # SilverHairedHilla +(9300627, 6, 0, 24); # GiantDarkheart +# Reward ID: 2434932 +# +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (6, 1, 2028048, 1); + +# /** +# * Magatia - Reward: 2028048 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600500, 6, 1, 0), # CubeSlime +(2600502, 6, 1, 1), # Rumo +(2600503, 6, 1, 2), # TripleRumo +(2600504, 6, 1, 3), # Rurumo +(0, 6, 1, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 1, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600505, 6, 1, 5), # IronMutae +(2600506, 6, 1, 6), # ReinforcedIronMutae +(2600507, 6, 1, 7), # MithrilMutae +(2600508, 6, 1, 8), # ReinforcedMithrilMutae +(0, 6, 1, 9); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600510, 6, 1, 10), # Homuns +(2600511, 6, 1, 11), # Homunculus +(2600512, 6, 1, 12), # Homunscullo +(0, 6, 1, 13), # Empty +(0, 6, 1, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 1, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600515, 6, 1, 15), # Roid +(2600516, 6, 1, 16), # NeoHuroid +(2600509, 6, 1, 17), # SecurityCamera +(2600518, 6, 1, 18), # DeetandRoi +(2600517, 6, 1, 19); # DRoy +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (6, 1, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600514, 6, 1, 20), # Chimera +(2600513, 6, 1, 21), # Saitie +(9300141, 6, 1, 22), # HomunofClosedLaboratory +(9300139, 6, 1, 23), # Frankenroid +(9300140, 6, 1, 24); # Angry +# Reward ID: 2434932 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (7, 0, 3017007, 1); + +# /** +# * Mu Lung Garden 1 - Reward: 3017007 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600306, 7, 0, 0), # Chipmunk +(2600307, 7, 0, 1), # RedPorky +(2600308, 7, 0, 2), # BlackPorky +(0, 7, 0, 3), # Empty +(0, 7, 0, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600313, 7, 0, 5), # Reindeer +(2600314, 7, 0, 6), # PeachMonkey +(2600302, 7, 0, 7), # TheBookGhost +(2600303, 7, 0, 8), # SageCat +(2600305, 7, 0, 9); # KingSageCat +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600309, 7, 0, 10), # BlueFlowerSerpent +(2600310, 7, 0, 11), # RedFlowerSerpent +(2600311, 7, 0, 12), # GiantCentipede +(0, 7, 0, 13), # Empty +(0, 7, 0, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 0, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600317, 7, 0, 15), # Jar +(2600318, 7, 0, 16), # GinsengJar +(2600319, 7, 0, 17), # BellflowerRoot +(2600320, 7, 0, 18), # SrBellflowerRoot +(2600321, 7, 0, 19); # GiganticBellflowerRoot +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 0, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600312, 7, 0, 20), # Grizzly +(2600315, 7, 0, 21), # Panda +(2600316, 7, 0, 22), # TaeRoon +(9300215, 7, 0, 23), # MuGong +(0, 7, 0, 24); # Empty +# Reward ID: 2434932 +# + + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (7, 1, 2050004, 100); + +# /** +# * Mu Lung Garden 2 - Reward: 2050004 (x100) +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8144000, 7, 1, 0), # WildMonkey +(8144001, 7, 1, 1), # MamaMonkey +(8144002, 7, 1, 2), # TeenyWhiteMonkey +(8144003, 7, 1, 3), # MeanMamaMonkey +(0, 7, 1, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 1, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8144004, 7, 1, 5), # BlueGoblin +(8144005, 7, 1, 6), # RedGoblin +(8144006, 7, 1, 7), # StoneGoblin +(0, 7, 1, 8), # Empty +(0, 7, 1, 9); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8800200, 7, 1, 10), # Ravana +(8144007, 7, 1, 11), # StrongStoneGoblin +(8144008, 7, 1, 12), # Ganapati +(0, 7, 1, 13), # Empty +(0, 7, 1, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 1, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600300, 7, 1, 15), # StrawTargetDummy +(2600301, 7, 1, 16), # WoodenTargetDummy +(2600304, 7, 1, 17), # MasterDummy +(6090002, 7, 1, 18), # BambooWarrior +(0, 7, 1, 19); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (7, 1, 4, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600326, 7, 1, 20), # LordPirate +(2600322, 7, 1, 21), # MrAlli +(2600323, 7, 1, 22), # Kru +(2600324, 7, 1, 23), # Captain +(0, 7, 1, 24); # Empty +# Reward ID: 2434931 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (8, 0, 2436272, 1); + +# /** +# * Minar Forest - Reward: 2436272 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600000, 8, 0, 0), # Beetle +(2600001, 8, 0, 1), # DualBeetle +(2600003, 8, 0, 2), # Rash +(2600004, 8, 0, 3), # DarkRash +(0, 8, 0, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600002, 8, 0, 5), # Hankie +(2600005, 8, 0, 6), # Hobi +(2600006, 8, 0, 7), # GreenHobi +(9300479, 8, 0, 8), # MasterHoblin +(0, 8, 0, 9); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600008, 8, 0, 10), # Harp +(2600009, 8, 0, 11), # BloodHarp +(9300480, 8, 0, 12), # MasterHarp +(2600007, 8, 0, 13), # Griffey +(0, 8, 0, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 0, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600010, 8, 0, 15), # BlackKentaurus +(2600011, 8, 0, 16), # RedKentaurus +(2600012, 8, 0, 17), # BlueKentaurus +(2600015, 8, 0, 18), # KentaurusKing +(0, 8, 0, 19); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 0, 4, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600013, 8, 0, 20), # Birk +(2600014, 8, 0, 21), # DualBirk +(9300481, 8, 0, 22), # MasterBirk +(2600022, 8, 0, 23), # Manon +(0, 8, 0, 24); # Empty +# Reward ID: 2434930 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (8, 1, 3017008, 1); + +# /** +# * Dragon Forest - Reward: 3017008 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600016, 8, 1, 0), # BlueDragonTurtle +(2600017, 8, 1, 1), # RedDragonTurtle +(2600018, 8, 1, 2), # Rexton +(2600019, 8, 1, 3), # Brexton +(0, 8, 1, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 1, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600020, 8, 1, 5), # JrNewtie +(2600021, 8, 1, 6), # NestGolem +(2600026, 8, 1, 7), # GreenCornian +(2600027, 8, 1, 8), # DarkCornian +(0, 8, 1, 9); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 1, 2, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600023, 8, 1, 10), # RedWyvern +(2600024, 8, 1, 11), # BlueWyvern +(2600025, 8, 1, 12), # DarkWyvern +(2600030, 8, 1, 13), # Leviathan +(0, 8, 1, 14); # Empty +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 1, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8300000, 8, 1, 15), # SoaringHawk +(8300001, 8, 1, 16), # SoaringEagle +(8300005, 8, 1, 17), # SoaringGriffey +(8300006, 8, 1, 18), # Dragonoir +(8300007, 8, 1, 19); # Dragon +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 1, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8810018, 8, 1, 20), # Horntail +(8810118, 8, 1, 21), # ChaosHorntail +(2600028, 8, 1, 22), # Skelegon +(2600029, 8, 1, 23), # Skelosaurus +(0, 8, 1, 24); # Empty +# Reward ID: 2434932 +# +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (8, 2, 2450042, 3); + +# /** +# * Kritias - Reward: 2450042 (x3) +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 2, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8630000, 8, 2, 0), # FrozenSolitude +(8630005, 8, 2, 1), # BurningSolitude +(8630010, 8, 2, 2), # PermeatingSolitude +(0, 8, 2, 3), # Empty +(0, 8, 2, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 2, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8630021, 8, 2, 5), # FrozenTerror +(8630026, 8, 2, 6), # BurningTerror +(8630031, 8, 2, 7), # PermeatingTerror +(0, 8, 2, 8), # Empty +(0, 8, 2, 9); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 2, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8630022, 8, 2, 10), # FrozenRage +(8630027, 8, 2, 11), # BurningRage +(8630032, 8, 2, 12), # PermeatingRage +(0, 8, 2, 13), # Empty +(0, 8, 2, 14); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 2, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8630023, 8, 2, 15), # FrozenAnxiety +(8630028, 8, 2, 16), # BurningAnxiety +(8630033, 8, 2, 17), # PermeatingAnxiety +(8630035, 8, 2, 18), # CorruptedBasicMagician +(0, 8, 2, 19); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (8, 2, 4, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8630024, 8, 2, 20), # FrozenVanity +(8630029, 8, 2, 21), # BurningVainity +(8630034, 8, 2, 22), # PermeatingVainity +(8630036, 8, 2, 23), # CorruptedIntermediateMagician +(8630037, 8, 2, 24); # CorruptedAdvancedMagician +# Reward ID: 2434930 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (9, 0, 2432300, 1); + +# /** +# * Gate of the Past (Temple of Time) - Reward: 2432300 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600701, 9, 0, 0), # MemoryMonk +(2600702, 9, 0, 1), # MemoryMonkTrainee +(2600703, 9, 0, 2), # MemoryGuardian +(2600704, 9, 0, 3), # ChiefMemoryGuardian +(2600700, 9, 0, 4); # EyeofTime +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 0, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600706, 9, 0, 5), # QualmMonk +(2600707, 9, 0, 6), # QualmMonkTrainee +(2600708, 9, 0, 7), # QualmGuardian +(2600709, 9, 0, 8), # ChiefQualmGuardian +(2600705, 9, 0, 9); # Dodo +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 0, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2600711, 9, 0, 10), # OblivionMonk +(2600712, 9, 0, 11), # OblivionMonkTrainee +(2600713, 9, 0, 12), # OblivionGuard +(2600714, 9, 0, 13), # ChiefOblivionGuardian +(2600710, 9, 0, 14); # Lilynouch +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 0, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8860000, 9, 0, 15), # Arkarium +(8220020, 9, 0, 16), # CorruptedChiefMemoryGuardian +(8220021, 9, 0, 17), # CorruptedTimeMonkTrainee +(8860002, 9, 0, 18), # NetherworldMonk +(0, 9, 0, 19); # Empty +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 0, 4, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8820000, 9, 0, 20), # PinkBean +(8820100, 9, 0, 21), # ChaosPinkBean +(2600715, 9, 0, 22), # Lyka +(8820003, 9, 0, 23), # SolomontheWise +(8820006, 9, 0, 24); # Munin +# Reward ID: 2434932 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (9, 1, 2432158, 1); + +# /** +# * Temple of Time: Gate to the Future - Reward: 2432158 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8600000, 9, 1, 0), # MutantSnail +(8600001, 9, 1, 1), # MutantOrangeMushroom +(8600002, 9, 1, 2), # MutantSlime +(8600003, 9, 1, 3), # MutantRibbonPig +(0, 9, 1, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 1, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8620000, 9, 1, 5), # SwollenStump +(8620001, 9, 1, 6), # SwollenDarkStump +(8620002, 9, 1, 7), # SwollenAxeStump +(8620012, 9, 1, 8), # GhostwoodStumpy +(0, 9, 1, 9); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8620003, 9, 1, 10), # PillagingWildBoar +(8620004, 9, 1, 11), # PillagingIronBoar +(8620005, 9, 1, 12), # PillagingFireBoars +(8620006, 9, 1, 13), # SinisterWoodenMask +(8620007, 9, 1, 14); # SinisterRockyMask +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 1, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8620008, 9, 1, 15), # SinisterSteelMask +(8620009, 9, 1, 16), # AncientGolem +(8620010, 9, 1, 17), # AncientDarkGolem +(8620011, 9, 1, 18), # AncientMixedGolem +(0, 9, 1, 19); # Empty +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 1, 4, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8600004, 9, 1, 20), # MutantTino +(8600005, 9, 1, 21), # MutantTiru +(8600006, 9, 1, 22), # MutantTiguru +(0, 9, 1, 23), # Empty +(0, 9, 1, 24); # Empty +# Reward ID: 2434929 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (9, 2, 3017009, 1); + +# /** +# * Temple of Time 1 - Reward: 3017009 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 2, 0, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8610000, 9, 2, 0), # Dawn +(8610001, 9, 2, 1), # Blaze +(8610002, 9, 2, 2), # Wind +(8610003, 9, 2, 3), # Night +(8610004, 9, 2, 4); # Thunder +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 2, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8610005, 9, 2, 5), # OfficialKnightA +(8610006, 9, 2, 6), # OfficialKnightB +(8610007, 9, 2, 7), # OfficialKnightC +(8610008, 9, 2, 8), # OfficialKnightD +(8610009, 9, 2, 9); # OfficialKnightE +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 2, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8610010, 9, 2, 10), # AdvancedKnightA +(8610011, 9, 2, 11), # AdvancedKnightB +(8610012, 9, 2, 12), # AdvancedKnightC +(8610013, 9, 2, 13), # AdvancedKnightD +(8610014, 9, 2, 14); # AdvancedKnightE +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 2, 3, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8850000, 9, 2, 15), # Mihile +(8850001, 9, 2, 16), # Oz +(8850002, 9, 2, 17), # Irena +(8850003, 9, 2, 18), # Eckhart +(8850004, 9, 2, 19); # Hawkeye +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (9, 2, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (8850011, 9, 2, 20), # Cygnus +(8850013, 9, 2, 21), # Shinsoo +(8610015, 9, 2, 22), # Ifrit +(0, 9, 2, 23), # Empty +(0, 9, 2, 24); # Empty +# Reward ID: 2434932 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (10, 0, 2434993, 1); + +# /** +# * Grandis 1 - Reward: 2434993 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 0, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400200, 10, 0, 0), # Caterpillar +(2400201, 10, 0, 1), # LadyBug +(2400202, 10, 0, 2), # Sparrow +(2400203, 10, 0, 3), # BalloonMouse +(2400204, 10, 0, 4); # RedPoisonFrog +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 0, 1, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400205, 10, 0, 5), # GreenPoisonFrog +(2400206, 10, 0, 6), # DelinquentChick +(2400207, 10, 0, 7), # PunkChick +(2400208, 10, 0, 8), # ManeFurHyena +(2400209, 10, 0, 9); # FangHyena +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 0, 2, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400000, 10, 0, 10), # SleepyGrobbler +(2400001, 10, 0, 11), # AlertGrobbler +(2400002, 10, 0, 12), # GrumpyGrobbler +(2400003, 10, 0, 13), # LimestoneTokka +(2400004, 10, 0, 14); # AmethystTokka +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 0, 3, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400005, 10, 0, 15), # Laloong +(2400006, 10, 0, 16), # Kaloong +(2400007, 10, 0, 17), # NefariousMonkInitiate +(2400008, 10, 0, 18), # NefariousMonkApprentice +(2400009, 10, 0, 19); # NefariousMonkMaster +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 0, 4, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400010, 10, 0, 20), # HereticMonkInitiate +(2400011, 10, 0, 21), # HereticMonkApprentice +(2400012, 10, 0, 22), # HereticLeader +(2400013, 10, 0, 23), # OnyxStonegar +(2400014, 10, 0, 24); # Gravi +# Reward ID: 2434930 +# + +insert into `monster_collection_session_rewards` (`region`, `session`, `rewardid`, `quantity`) values (10, 1, 3017010, 1); +# /** +# * Grandis 2 - Reward: 3017010 +# */ +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 1, 0, 2434929, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400100, 10, 1, 0), # BlueSpeeyor +(2400101, 10, 1, 1), # RedSpeeyor +(2400102, 10, 1, 2), # YellowSpeeyor +(0, 10, 1, 3), # Empty +(0, 10, 1, 4); # Empty +# Reward ID: 2434929 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 1, 1, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400103, 10, 1, 5), # Dinogoth +(2400104, 10, 1, 6), # Dinoram +(2400105, 10, 1, 7), # Dinodon +(2400106, 10, 1, 8), # SpecterBattleHound +(2400107, 10, 1, 9); # SpecterTamer +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 1, 2, 2434930, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400108, 10, 1, 10), # SpecterMiner +(2400109, 10, 1, 11), # SpecterShieldbearer +(2400110, 10, 1, 12), # GuerrillaSpecter +(2400111, 10, 1, 13), # PowerSpecter +(2400112, 10, 1, 14); # SpecterEngineer +# Reward ID: 2434930 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 1, 3, 2434931, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2400113, 10, 1, 15), # WarriorSpecter +(2400114, 10, 1, 16), # MagicianSpecter +(2400115, 10, 1, 17), # ReaperSpecter +(2400118, 10, 1, 18), # PurpleReagentRock +(2400116, 10, 1, 19); # RedTotemStaff +# Reward ID: 2434931 +# +insert into `monster_collection_group_rewards` (`region`, `session`, `groupid`, `rewardid`, `quantity`) values (10, 1, 4, 2434932, 1); +insert into `monster_collection` (`mobid`, `region`, `session`, `position`) values (2700029, 10, 1, 20), # Magnus +(8880004, 10, 1, 21), # Velderoth +(8880008, 10, 1, 22), # Treglow +(8880006, 10, 1, 23), # Victor +(2400116, 10, 1, 24); # RedTotemStaff +# Reward ID: 2434932 diff --git a/sql/character - initDrops - drops - equipDrops - the rest.txt b/sql/character - initDrops - drops - equipDrops - the rest.txt new file mode 100755 index 0000000..e69de29 diff --git a/sql/hairequips.sql b/sql/hairequips.sql new file mode 100755 index 0000000..43c1fbd --- /dev/null +++ b/sql/hairequips.sql @@ -0,0 +1,33 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost_3306 + Source Server Type : MySQL + Source Server Version : 50731 + Source Host : localhost:3306 + Source Schema : v210 + + Target Server Type : MySQL + Target Server Version : 50731 + File Encoding : 65001 + + Date: 22/09/2021 21:53:51 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for hairequips +-- ---------------------------- +DROP TABLE IF EXISTS `hairequips`; +CREATE TABLE `hairequips` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `alid` int(11) NULL DEFAULT NULL, + `bodypart` tinyint(2) NULL DEFAULT NULL, + `equipid` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + INDEX `alid`(`alid`) USING BTREE +) ENGINE = MyISAM AUTO_INCREMENT = 38 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = FIXED; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/sql/unseenequips.sql b/sql/unseenequips.sql new file mode 100755 index 0000000..ca99655 --- /dev/null +++ b/sql/unseenequips.sql @@ -0,0 +1,33 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost_3306 + Source Server Type : MySQL + Source Server Version : 50731 + Source Host : localhost:3306 + Source Schema : v210 + + Target Server Type : MySQL + Target Server Version : 50731 + File Encoding : 65001 + + Date: 22/09/2021 21:54:29 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for unseenequips +-- ---------------------------- +DROP TABLE IF EXISTS `unseenequips`; +CREATE TABLE `unseenequips` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `alid` int(11) NULL DEFAULT NULL, + `bodypart` tinyint(2) NULL DEFAULT NULL, + `equipid` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + INDEX `alid`(`alid`) USING BTREE +) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = FIXED; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/src/main/java/hibernate.cfg.xml b/src/main/java/hibernate.cfg.xml new file mode 100755 index 0000000..30f4e27 --- /dev/null +++ b/src/main/java/hibernate.cfg.xml @@ -0,0 +1,44 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + + com.mysql.jdbc.Driver + + + + jdbc:mysql://mapledb:3306/v206?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC + + + + root + + + + maplestory + + + + true + + + + false + + + + true + + + + true + + + + + diff --git a/src/main/java/log4j.properties b/src/main/java/log4j.properties new file mode 100755 index 0000000..25db09a --- /dev/null +++ b/src/main/java/log4j.properties @@ -0,0 +1,19 @@ +log4j.rootLogger=DEBUG,stdout +log4j.logger.com.endeca=INFO +# Logger for crawl metrics +log4j.logger.com.endeca.itl.web.metrics=INFO + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=[%p] %m%n + +# add a FileAppender to the logger fout +log4j.appender.fout=org.apache.log4j.FileAppender +# create a log file +log4j.appender.fout.File=root.log +log4j.appender.fout.layout=org.apache.log4j.PatternLayout +# use a more detailed message pattern +log4j.appender.fout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n +# library logging only for errors +log4j.logger.org.hibernate=error +log4j.logger.io.netty=error diff --git a/src/main/java/net/swordie/ms/Server.java b/src/main/java/net/swordie/ms/Server.java new file mode 100755 index 0000000..814bf24 --- /dev/null +++ b/src/main/java/net/swordie/ms/Server.java @@ -0,0 +1,335 @@ +package net.swordie.ms; + +import net.swordie.ms.client.Account; +import net.swordie.ms.client.Client; +import net.swordie.ms.client.character.BroadcastMsg; +import net.swordie.ms.connection.api.ApiAcceptor; +import net.swordie.ms.connection.netty.ChannelHandler; +import net.swordie.ms.connection.packet.UserLocal; +import net.swordie.ms.client.User; +import net.swordie.ms.connection.packet.WvsContext; +import net.swordie.ms.constants.GameConstants; +import net.swordie.ms.enums.ChatType; +import net.swordie.ms.enums.WorldId; +import net.swordie.ms.handlers.EventManager; +import net.swordie.ms.loaders.*; +import net.swordie.ms.connection.crypto.MapleCrypto; +import net.swordie.ms.connection.db.DatabaseManager; +import net.swordie.ms.connection.netty.ChannelAcceptor; +import net.swordie.ms.connection.netty.ChatAcceptor; +import net.swordie.ms.connection.netty.LoginAcceptor; +import net.swordie.ms.scripts.ScriptManagerImpl; +import net.swordie.ms.util.FileTime; +import net.swordie.ms.util.Util; +import net.swordie.ms.world.Channel; +import net.swordie.ms.world.World; +import net.swordie.ms.world.shop.cashshop.CashShop; +import net.swordie.ms.world.shop.cashshop.CashShopCategory; +import net.swordie.ms.world.shop.cashshop.CashShopItem; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.hibernate.Session; +import net.swordie.ms.util.Loader; +import net.swordie.ms.util.container.Tuple; +import org.hibernate.Transaction; +import org.hibernate.query.Query; +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; + +/** + * Created on 2/18/2017. + */ +public class Server extends Properties { + + final Logger log = LogManager.getRootLogger(); + + private static final Server server = new Server(); + + public long upTime; + public boolean MAINTENANCE_MODE = false; + public boolean MAINTENANCE_ACTIVE = false; + + private List worldList = new ArrayList<>(); + private Map> authTokens = new ConcurrentHashMap<>(); + private Set users = new HashSet<>(); // just save the ids, no need to save the references + private CashShop cashShop; + private Set shutdownFutures = new HashSet<>(); + private boolean opcodeEnc = true; + + private ScheduledFuture shutdownTimer; + private boolean shutdownFromCommand = false; + private boolean online = false; + + public static Server getInstance() { + return server; + } + + public List getWorlds() { + return worldList; + } + + public World getWorldById(int id) { + return Util.findWithPred(getWorlds(), w -> w.getWorldId().getVal() == id); + } + + private void init(String[] args) { + log.info("Starting server."); + long startNow = System.currentTimeMillis(); + DatabaseManager.init(); + log.info("Loaded Hibernate in " + (System.currentTimeMillis() - startNow) + "ms"); + + try { + checkAndCreateDat(); + loadWzData(); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + StringData.load(); + FieldData.loadWorldMap(); + ChannelHandler.initHandlers(false); + FieldData.loadNPCFromSQL(); + SkillData.loadAllSkills(); + DressingRoom.load(); + StyleRoom.load(); + + ShutDownTask shutDownTask = new ShutDownTask(); + shutDownTask.start(); + + + MapleCrypto.initialize(ServerConstants.VERSION); + new Thread(new ApiAcceptor()).start(); + new Thread(new LoginAcceptor()).start(); + new Thread(new ChatAcceptor()).start(); + worldList.add(new World(ServerConfig.WORLD_ID, ServerConfig.SERVER_NAME, GameConstants.CHANNELS_PER_WORLD, ServerConfig.EVENT_MSG)); + long start = System.currentTimeMillis(); + VCoreData.loadVCoreData(); + log.info("Loaded VCore in " + (System.currentTimeMillis() - start) + "ms"); + + long startCashShop = System.currentTimeMillis(); + initCashShop(); + log.info("Loaded CashShop in " + (System.currentTimeMillis() - startCashShop) + "ms"); + + MonsterCollectionData.loadFromSQL(); + + for (World world : getWorlds()) { + for (Channel channel : world.getChannels()) { + ChannelAcceptor ca = new ChannelAcceptor(); + ca.channel = channel; + new Thread(ca).start(); + } + } + log.info(String.format("Finished loading server in %dms", System.currentTimeMillis() - startNow)); + new Thread(() -> { + // inits the script engine + log.info(String.format("Starting %s script engine.", ScriptManagerImpl.SCRIPT_ENGINE_NAME)); + }).start(); + + this.online = true; + + } + + public ScheduledFuture getShutdownTimer() { + return shutdownTimer; + } + + public void setShutdownTimer(ScheduledFuture shutdownTimer) { + this.shutdownTimer = shutdownTimer; + } + + public boolean isShutdownFromCommand() { + return shutdownFromCommand; + } + + public void setShutdownFromCommand(boolean shutdownFromCommand) { + this.shutdownFromCommand = shutdownFromCommand; + } + + public void sendShutdownMessage(int time) { + String msg = "Server is shutting down in "; + String timeMsg = time + (!isShutdownFromCommand() ? " seconds." :" minutes. "); + String end = "Please log off safely before the server shuts down."; + getWorldById(1).broadcastPacket(UserLocal.chatMsg(ChatType.Notice2, "[Notice] " + msg + timeMsg + end)); + getWorldById(1).broadcastPacket(UserLocal.addPopupSay(9010063, 10000, + "#e#b[Notice]#k#n " + msg + "#e#r" + timeMsg + "#k#n" + end, "FarmSE.img/boxResult")); + ServerConfig.SERVER_MSG = msg + timeMsg + end; + getWorldById(1).broadcastPacket(WvsContext.broadcastMsg(BroadcastMsg.slideNotice(ServerConfig.SERVER_MSG, true))); + } + + + public class ShutDownTask { + + private static final int shutdownTime = 30000; // 30 secs + + public void start() { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + + log.info("Shutting down sever..."); + Server.getInstance().setOnline(false); + if (!isShutdownFromCommand()) { + // broadcast message if manually shutting down... + sendShutdownMessage(shutdownTime / 1000); + // wait for manual shut down time (shutdownTime)... + try { + Thread.sleep(shutdownTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + // proceed to shutdown + for (World world : getWorlds()) { + world.shutdown(); + } + + log.info("Shutdown complete!"); + })); + } + } + + public boolean isOnline() { + return online; + } + + public void setOnline(boolean online) { + this.online = online; + } + + private void checkAndCreateDat() { + File file = new File(ServerConstants.DAT_DIR + "/equips"); + boolean exists = file.exists(); + if (!exists) { + log.info("Dat files cannot be found (at least not the equip dats). All dats will now be generated. This may take a long while."); + Util.makeDirIfAbsent(ServerConstants.DAT_DIR); + for (Class c : DataClasses.datCreators) { + try { + Method m = c.getMethod("generateDatFiles"); + m.invoke(null); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + } + } + + public void loadWzData() throws IllegalAccessException, InvocationTargetException { + String datFolder = ServerConstants.DAT_DIR; + for (Class c : DataClasses.dataClasses) { + for (Method method : c.getMethods()) { + String name; + Loader annotation = method.getAnnotation(Loader.class); + if (annotation != null) { + name = annotation.varName(); + File file = new File(datFolder, name + ".dat"); + boolean exists = file.exists(); + long start = System.currentTimeMillis(); + method.invoke(c, file, exists); + long total = System.currentTimeMillis() - start; + if (exists) { + log.info(String.format("Took %dms to load from %s", total, file.getName())); + } else { + log.info(String.format("Took %dms to load using %s", total, method.getName())); + } + } + } + } + } + + + public Tuple getChannelFromTransfer(int charId, int worldId) { + for (Channel c : getWorldById(worldId).getChannels()) { + if (c.getTransfers().containsKey(charId)) { + return c.getTransfers().get(charId); + } + } + return null; + } + public void clearCache() { + ChannelHandler.initHandlers(true); + DropData.clear(); + FieldData.clear(); + ItemData.clear(); + MobData.clear(); + NpcData.clear(); + QuestData.clear(); + SkillData.clear(); + ReactorData.clear(); + EtcData.clear(); + for (World world : getWorlds()) { + world.clearCache(); + } + } + + public void initCashShop() { + cashShop = new CashShop(); + try(Session session = DatabaseManager.getSession()) { + Transaction transaction = session.beginTransaction(); + + Query query = session.createQuery("FROM CashShopCategory"); + List categories = query.list(); + categories.sort(Comparator.comparingInt(CashShopCategory::getIdx)); + cashShop.setCategories(new ArrayList<>(categories)); + + query = session.createQuery("FROM CashShopItem"); + List items = query.list(); + items.forEach(item -> cashShop.addItem(item)); + + transaction.commit(); + } + + } + + public CashShop getCashShop() { + return this.cashShop; + } + + public void addUser(User user) { + users.add(user.getId()); + } + + public void removeUser(User user) { + users.remove(user.getId()); + } + + public boolean isUserLoggedIn(User user) { + return users.contains(user.getId()); + } + + public boolean isOpcodeEnc() { + return opcodeEnc; + } + + public void setOpcodeEnc(boolean opcodeEnc) { + this.opcodeEnc = opcodeEnc; + } + + private Map> getAuthTokens() { + return authTokens; + } + + public void addAuthToken(byte[] token, int userID) { + String tokenStr = new String(token); + FileTime expiryDate = FileTime.fromDate(LocalDateTime.now().plusMinutes(ServerConstants.TOKEN_EXPIRY_TIME)); + Tuple entry = new Tuple<>(userID, expiryDate); + getAuthTokens().put(tokenStr, entry); + } + + public int getUserIdFromAuthToken(String token) { + Tuple value = getAuthTokens().getOrDefault(token, null); + if (value == null || value.getRight() == null || value.getRight().isExpired()) { + return 0; + } else { + return value.getLeft(); + } + } + + + public static void main(String[] args) { + getInstance().init(args); + } + +} diff --git a/src/main/java/net/swordie/ms/ServerConfig.java b/src/main/java/net/swordie/ms/ServerConfig.java new file mode 100755 index 0000000..7a70672 --- /dev/null +++ b/src/main/java/net/swordie/ms/ServerConfig.java @@ -0,0 +1,20 @@ +package net.swordie.ms; + +import net.swordie.ms.enums.WorldId; +import net.swordie.ms.world.Channel; +import net.swordie.ms.world.World; + +/** + * Created on 2/18/2017. + */ +public class ServerConfig { + + public static final int USER_LIMIT = 20; + public static final WorldId WORLD_ID = WorldId.Bera; + public static final String SERVER_NAME = "v206"; + public static String SERVER_MSG = "v206"; + public static final String EVENT_MSG = String.format("#bv206#k Buffed Channels 6-10\r\n Online Players: "); + public static final String RECOMMEND_MSG = ""; + public static final int MAX_CHARACTERS = 30; + public static final String HEAP_DUMP_DIR = "../heapdumps"; +} diff --git a/src/main/java/net/swordie/ms/ServerConstants.java b/src/main/java/net/swordie/ms/ServerConstants.java new file mode 100755 index 0000000..526c200 --- /dev/null +++ b/src/main/java/net/swordie/ms/ServerConstants.java @@ -0,0 +1,41 @@ +package net.swordie.ms; + +import net.swordie.ms.constants.JobConstants; + +import java.util.Calendar; +import java.util.concurrent.TimeUnit; + +/** + * Created on 2/18/2017. + */ +public class ServerConstants { + public static final String DIR = System.getProperty("user.dir"); + public static final byte LOCALE = 8; + public static final String WZ_DIR = DIR + "/wz"; + public static final String DAT_DIR = DIR + "/dat"; + public static final int MAX_CHARACTERS = JobConstants.LoginJob.values().length * 3; + public static final String SCRIPT_DIR = DIR + "/scripts"; + public static final String RESOURCES_DIR = DIR + "/resources"; + public static final String HANDLERS_DIR = DIR + "/src/main/java/net/swordie/ms/handlers"; + public static final short VERSION = 206; + public static final String MINOR_VERSION = "1"; + public static final int LOGIN_PORT = 8484; + public static final int API_PORT = 8483; + public static final short CHAT_PORT = 0; + public static final int BCRYPT_ITERATIONS = 10; + public static final long TOKEN_EXPIRY_TIME = 60 * 24; // minutes + public static boolean LOCAL_HOST_SERVER = false; + public static final int RESTART_MINUTES = (int) getTimeTillMidnight(); + public static final boolean DAILY_RESTART = false; + + public static long getTimeTillMidnight() { + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_MONTH, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + return TimeUnit.MILLISECONDS.toMinutes(c.getTimeInMillis() - System.currentTimeMillis()); + } + +} diff --git a/src/main/java/net/swordie/ms/ServerStatus.java b/src/main/java/net/swordie/ms/ServerStatus.java new file mode 100755 index 0000000..e64eb3e --- /dev/null +++ b/src/main/java/net/swordie/ms/ServerStatus.java @@ -0,0 +1,20 @@ +package net.swordie.ms; + +public enum ServerStatus { + NORMAL(0), + BUSY(1), + FULL(2); + + /** + * Created on 11/3/2017. + */ + private byte value; + + ServerStatus (int value) { + this.value = (byte) value; + } + + public byte getValue() { + return value; + } +} diff --git a/src/main/java/net/swordie/ms/client/Account.java b/src/main/java/net/swordie/ms/client/Account.java new file mode 100755 index 0000000..cc3a101 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/Account.java @@ -0,0 +1,381 @@ +package net.swordie.ms.client; + +import net.swordie.ms.client.character.Char; +import net.swordie.ms.client.character.EventCoolDown; +import net.swordie.ms.client.character.MonsterCollection; +import net.swordie.ms.client.character.damage.DamageSkinSaveData; +import net.swordie.ms.client.character.items.Item; +import net.swordie.ms.client.character.union.Union; +import net.swordie.ms.client.character.union.UnionBoard; +import net.swordie.ms.client.trunk.Trunk; +import net.swordie.ms.connection.db.DatabaseManager; +import net.swordie.ms.constants.GameConstants; +import net.swordie.ms.constants.ItemConstants; +import net.swordie.ms.constants.SkillConstants; +import net.swordie.ms.enums.EventType; +import net.swordie.ms.loaders.StringData; +import net.swordie.ms.util.FileTime; +import net.swordie.ms.util.Util; +import net.swordie.ms.world.auction.AuctionItem; +import org.apache.log4j.Logger; +import org.hibernate.Session; +import org.hibernate.Transaction; + +import javax.persistence.*; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Class representing an Account, which is a world-specific "User" class. + * + * Created by Tim on 4/30/2017. + */ +@Entity +@Table(name = "accounts") +public class Account { + + @Transient + private static final Logger log = Logger.getLogger(Account.class); + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private int worldId; + @JoinColumn(name = "trunkID") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Trunk trunk; + @JoinColumn(name = "monsterCollectionID") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private MonsterCollection monsterCollection; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @JoinColumn(name = "accID") + private Set damageSkins = new HashSet<>(); + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @JoinColumn(name = "accID") + private Set characters = new HashSet<>(); + // nxCredit is from mobs, so is account (world) specific. + private int nxCredit; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @JoinColumn(name = "accID") + private Set linkSkills = new HashSet<>(); + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "unionid") + private Union union; + + @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true) + @JoinColumn(name = "accid") + private List cooldowns = new ArrayList<>(); + + @Transient + private Set auctionItems; + @Transient + private User user; + @Transient + private Char currentChr; + + public Account(User user, int worldId) { + this.user = user; + this.worldId = worldId; + this.trunk = new Trunk(GameConstants.DEFAULT_TRUNK_SIZE); + this.monsterCollection = new MonsterCollection(); + this.damageSkins = new HashSet<>(); + this.characters = new HashSet<>(); + this.linkSkills = new HashSet<>(); + this.union = new Union(2, 101); + this.cooldowns = new ArrayList(); + union.setAccount(this); + damageSkins.add(new DamageSkinSaveData(0, 2433271, false, "The default damage skin.")); + } + + public Account(){ + } + + public static Account getFromDBById(int accountID) { + return (Account) DatabaseManager.getObjFromDB(Account.class, accountID); + } + + public static Account getFromDBByIp(String ip) { + Account acc = null; + try(Session session = DatabaseManager.getSession()) { + Transaction transaction = session.beginTransaction(); + // String.format for query, just to fill in the class + // Can't set the FROM clause with a parameter it seems + Query query = session.createQuery("FROM Account WHERE registerip = :ip"); + query.setParameter("ip", ip); + List l = ((org.hibernate.query.Query) query).list(); + if (l != null && l.size() > 0) { + acc = (Account) l.get(0); + } + transaction.commit(); + session.close(); + } + return acc; + } + + public int getId() { + return id; + } + + public Set getCharacters() { + return characters; + } + + public Union getUnion() { + return union; + } + + public void addCharacter(Char character) { + getCharacters().add(character); + } + + public void setId(int id) { + this.id = id; + } + + public Set getDamageSkins() { + return damageSkins; + } + + public void setDamageSkins(Set damageSkins) { + this.damageSkins = damageSkins; + } + + public void addDamageSkin(DamageSkinSaveData dssd) { + if(getDamageSkinByItemID(dssd.getItemID()) == null) { + getDamageSkins().add(dssd); + } + } + + public void removeDamageSkin(DamageSkinSaveData dssd) { + if(dssd != null) { + getDamageSkins().remove(dssd); + } + } + + public void removeDamageSkin(int itemID) { + removeDamageSkin(getDamageSkinByItemID(itemID)); + } + + public void addDamageSkinByItemID(int itemID) { + addDamageSkin(new DamageSkinSaveData(ItemConstants.getDamageSkinIDByItemID(itemID), itemID, false, + StringData.getItemStringById(itemID))); + } + + public DamageSkinSaveData getDamageSkinByItemID(int itemID) { + return getDamageSkins().stream().filter(d -> d.getItemID() == itemID).findAny().orElse(null); + } + + public DamageSkinSaveData getDamageSkinBySkinID(int skinID) { + return getDamageSkins().stream().filter(d -> d.getDamageSkinID() == skinID).findAny().orElse(null); + } + + public Trunk getTrunk() { + if(trunk == null) { + trunk = new Trunk(GameConstants.DEFAULT_TRUNK_SIZE); + } + return trunk; + } + + public void setTrunk(Trunk trunk) { + this.trunk = trunk; + } + + public int getNxCredit() { + return nxCredit; + } + + public void setNxCredit(int nxCredit) { + this.nxCredit = nxCredit; + } + + public void addLinkSkill(LinkSkill linkSkill) { + removeLinkSkillByOwnerID(linkSkill.getUsingID()); + getLinkSkills().add(linkSkill); + } + + public void addLinkSkill(Char originChar, int usingID, int linkedSkill) { + int level = SkillConstants.getLinkSkillLevelByCharLevel(originChar.getLevel()); + LinkSkill ls = new LinkSkill(originChar.getId(), usingID, linkedSkill, level); + addLinkSkill(ls); + } + + public void removeLinkSkillByOwnerID(int ownerID) { + getLinkSkills().stream().filter(l -> l.getUsingID() == ownerID).findFirst() + .ifPresent(ls -> getLinkSkills().remove(ls)); + } + + public Set getLinkSkills() { + return linkSkills; + } + + public void setLinkSkills(Set linkSkills) { + this.linkSkills = linkSkills; + } + + public void addNXCredit(int credit) { + int newCredit = getNxCredit() + credit; + if (newCredit >= 0) { + setNxCredit(newCredit); + } + } + + public void deductNXCredit(int credit) { + addNXCredit(-credit); + } + + public MonsterCollection getMonsterCollection() { + if (monsterCollection == null) { + monsterCollection = new MonsterCollection(); + } + return monsterCollection; + } + + public void setMonsterCollection(MonsterCollection monsterCollection) { + this.monsterCollection = monsterCollection; + } + + public boolean hasCharacter(int charID) { + // doing a .contains on getCharacters() does not work, even if the hashcode is just a hash of the id + return getCharById(charID) != null; + } + + public Char getCharById(int id) { + return Util.findWithPred(getCharacters(), chr -> chr.getId() == id); + } + + public Char getCharByName(String name) { + return Util.findWithPred(getCharacters(), chr -> chr.getName().equals(name)); + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public int getWorldId() { + return worldId; + } + + public void setWorldId(int worldId) { + this.worldId = worldId; + } + + public Char getCurrentChr() { + return currentChr; + } + + public void setCurrentChr(Char currentChr) { + this.currentChr = currentChr; + } + + public int getTotalLvOfAllChrs() { + return getCharacters().stream().mapToInt(Char::getLevel).sum(); + } + + public Set getAuctionItems() { + return auctionItems; + } + + public Set getCompletedAuctionItems() { + return getAuctionItems().stream() + .filter(it -> it.getEndDate().isExpired()) + .collect(Collectors.toSet()); + } + + public Set getSellingAuctionItems() { + return getAuctionItems().stream() + .filter(it -> !it.getEndDate().isExpired()) + .collect(Collectors.toSet()); + } + + public void setAuctionItems(Set auctionItems) { + this.auctionItems = auctionItems; + } + + public AuctionItem getAuctionById(int auctionId) { + return Util.findWithPred(getAuctionItems(), ai -> ai.getId() == auctionId); + } + + public void addAuction(AuctionItem item) { + getAuctionItems().add(item); + } + + public AuctionItem createAndAddAuctionByItem(Item item, Char sellingChar, long price) { + AuctionItem ai = new AuctionItem(); + ai.setItem(item); + ai.setRegDate(FileTime.currentTime()); + ai.setEndDate(FileTime.fromDate(FileTime.currentTime().toLocalDateTime().plusHours(GameConstants.AUCTION_LIST_TIME))); + ai.setAccountID(getId()); + ai.setCharID(sellingChar.getId()); + ai.setCharName(sellingChar.getName()); + ai.setDirectPrice(price); + ai.setItemType(item.getInvType().getVal()); + ai.setItemName(StringData.getItemStringById(item.getItemId())); + ai.setDeposit(GameConstants.AUCTION_DEPOSIT_AMOUNT); + addAuction(ai); + sellingChar.getClient().getWorld().addAuction(ai, true); + + return ai; + } + + public void initAuctions() { + // Not done via db to ensure the instances between world and acc are the same + setAuctionItems(getCurrentChr().getWorld().getAuctionsByAccountID(getId())); + } + + public LinkSkill getLinkSkillByLinkSkillId(int linkSkillID) { + return Util.findWithPred(getLinkSkills(), s -> s.getLinkSkillID() == linkSkillID); + } + + public void removeChar(Char chr) { + removeLinkSkillByOwnerID(chr.getId()); + for (UnionBoard ub : getUnion().getUnionBoards()) { + ub.removeMemberByCharId(chr.getId()); + } + getCharacters().remove(chr); + } + + public EventCoolDown getCoolDownByType(int type) { + return cooldowns.stream().filter(eventCoolDown -> eventCoolDown.getEventType() == type).collect(Collectors.toList()).get(0); + } + + public int getEventAmountDone(int type){ + EventCoolDown cd = cooldowns.stream().filter(eventCoolDown -> eventCoolDown.getEventType() == type).findFirst().orElse(null); + if (cd == null) { + return 0; + } + if (System.currentTimeMillis() > cd.getNextResetTime()) { + cd.setAmountDone(0); + } + return cd.getAmountDone(); + } + + public void addCoolDown(int type, int amountDone, long nextReset) { + EventCoolDown coolDown = this.cooldowns.stream().filter(eventCoolDown -> eventCoolDown.getEventType() == type).findFirst().orElse(null); + if (coolDown == null) { + coolDown = new EventCoolDown(type, amountDone, nextReset); + cooldowns.add(coolDown); + } else { + coolDown.setNextResetTime(nextReset); + coolDown.setAmountDone(getEventAmountDone(type) + amountDone); + } + DatabaseManager.saveToDB(coolDown); + DatabaseManager.modifyObjectFromDB(EventCoolDown.class, coolDown.getId(), "accid", this.getId()); + } + + public void clearCoolDowns() { + for (EventCoolDown cd : cooldowns) { + cd.setAmountDone(0); + cd.setNextResetTime(0); + DatabaseManager.modifyObjectFromDB(EventCoolDown.class, cd.getId(), "nextresettime", 0); + } + } + + public void addCooldownTime(EventType eventType, int cooldownTime) { + addCoolDown(eventType.getVal(), 1, System.currentTimeMillis() + cooldownTime); + } + +} diff --git a/src/main/java/net/swordie/ms/client/Client.java b/src/main/java/net/swordie/ms/client/Client.java new file mode 100755 index 0000000..434a275 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/Client.java @@ -0,0 +1,221 @@ +package net.swordie.ms.client; + +import net.swordie.ms.connection.InPacket; +import net.swordie.ms.connection.crypto.TripleDESCipher; +import net.swordie.ms.enums.AccountType; +import net.swordie.ms.handlers.ClientSocket; +import net.swordie.ms.handlers.header.InHeader; +import net.swordie.ms.util.FileoutputUtil; +import net.swordie.ms.util.Util; +import net.swordie.ms.world.Channel; +import net.swordie.ms.client.character.Char; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.netty.NettyClient; +import net.swordie.ms.connection.packet.Login; +import net.swordie.ms.Server; +import net.swordie.ms.world.World; + +import java.util.*; +import java.util.Arrays; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +/** + * Created by Tim on 2/18/2017. + */ +public class Client extends NettyClient { + private Char chr; + private final Lock lock; + private Account account; + private User user; + private byte channel; + private byte worldId; + private boolean authorized; + private Channel channelInstance; + private byte[] machineID; + private final Map encryptedHeaderToNormalHeaders = new HashMap<>(); + private byte oldChannel; + private long ping; + private long lastPingTime; + private boolean waitingForAliveAck; + + private int lastTick = 0; + private int tickCount = 0; + public int clientPacketSpamCount = 0; + + public Client(io.netty.channel.Channel channel, byte[] sendSeq, byte[] recvSeq) { + super(channel, sendSeq, recvSeq); + lock = new ReentrantLock(true); + } + + public void setAccount(Account account) { + this.account = account; + } + + public Lock getLock() { + return lock; + } + + public void write(byte[] data) { + write(new OutPacket(data)); + } + + public void sendPing() { + lastPingTime = System.currentTimeMillis(); + waitingForAliveAck = true; + write(Login.sendAliveReq()); + } + + public void setPing(long ping) { + this.ping = ping; + } + + public long getPing() { + return ping; + } + + public long getLastPingTime() { + return lastPingTime; + } + + public boolean isWaitingForAliveAck() { + return waitingForAliveAck; + } + + public Account getAccount() { + return account; + } + + public void setChannel(byte channel) { + this.channel = channel; + } + + public byte getChannel() { + return channel; + } + + public byte getWorldId() { + return worldId; + } + + public void setWorldId(byte worldId) { + this.worldId = worldId; + } + + public Char getChr() { + return chr; + } + + public void setChr(Char chr) { + this.chr = chr; + } + + public void setAuthorized(boolean authorized) { + this.authorized = authorized; + } + + public boolean isAuthorized() { + return authorized; + } + + public void setChannelInstance(Channel channelInstance) { + this.channelInstance = channelInstance; + } + + public Channel getChannelInstance() { + return channelInstance; + } + + public World getWorld() { + return Server.getInstance().getWorldById(getWorldId()); + } + + public boolean hasCorrectMachineID(byte[] machineID) { + return Arrays.equals(machineID, getMachineID()); + } + + public void setMachineID(byte[] machineID) { + this.machineID = machineID; + } + + public byte[] getMachineID() { + return machineID; + } + + public void sendOpcodeEncryption(int charID) { + byte[] key = new byte[24]; + // old key +// String charIDString = String.valueOf(charID); +// int len = charIDString.length(); +// for (int i = 0; i < len; i++) { +// key[i] = (byte) charIDString.charAt(i); +// } +// byte[] machineID = getMachineID(); +// for (int i = len; i < 16; i++) { +// key[i] = machineID[i - len]; +// } +// System.arraycopy(key, 0, key, 16, 8); + // start new + System.arraycopy("M@PleStoryMaPLe!".getBytes(), 0, key, 0, 16); + System.arraycopy(key, 0, key, 16, 8); + TripleDESCipher cipher = new TripleDESCipher(key); + StringBuilder content = new StringBuilder(); + List possibleNums = new ArrayList<>(); + for (int i = InHeader.B_E_G_I_N__U_S_E_R.getValue(); i < 9999; i++) { + possibleNums.add(i); + } + for (short header = InHeader.B_E_G_I_N__U_S_E_R.getValue(); header < InHeader.NO.getValue(); header++) { + int randNum = Util.getRandomFromCollection(possibleNums); + possibleNums.remove((Integer) randNum); + String num = String.format("%04d", randNum); + encryptedHeaderToNormalHeaders.put((short) randNum, header); + content.append(num); + } + byte[] buf = new byte[Short.MAX_VALUE + 1]; + byte[] encryptedBuf = cipher.encrypt(content.toString().getBytes()); + System.arraycopy(encryptedBuf, 0, buf, 0, encryptedBuf.length); + Random random = new Random(); + for (int i = encryptedBuf.length; i < buf.length; i++) { + buf[i] = (byte) random.nextInt(); + } + write(ClientSocket.opcodeEncryption(4, buf)); + } + + public Map getEncryptedHeaderToNormalHeaders() { + return encryptedHeaderToNormalHeaders; + } + + public void setOldChannel(byte oldChannel) { + this.oldChannel = oldChannel; + } + + public byte getOldChannel() { + return oldChannel; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public void verifyTick(InPacket inPacket) { + int tick = inPacket.decodeInt(); + InHeader inHeader; + if (tick <= lastTick) { + if (getChr() != null && getUser().getAccountType() != AccountType.Admin + && tickCount >= 5) { + // setWaitingToDisconnect(true); + inHeader = InHeader.getInHeaderByOp(inPacket.getPacketID()); + FileoutputUtil.spamLog("PacketTickLog.txt", this, inHeader, inPacket); + } else { + tickCount++; + } + } else { + tickCount = 0; + } + lastTick = tick; + } +} diff --git a/src/main/java/net/swordie/ms/client/LinkSkill.java b/src/main/java/net/swordie/ms/client/LinkSkill.java new file mode 100755 index 0000000..a88c6d9 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/LinkSkill.java @@ -0,0 +1,85 @@ +package net.swordie.ms.client; + +import javax.persistence.*; +import java.util.Objects; + +/** + * Created on 6/7/2018. + */ +@Entity +@Table(name = "linkskills") +public class LinkSkill { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + private int originID; + private int usingID; + private int linkSkillID; + private int level; + + public LinkSkill() { + } + + public LinkSkill(int originID, int usingID, int linkSkillID, int level) { + this.originID = originID; + this.usingID = usingID; + this.linkSkillID = linkSkillID; + this.level = level; + } + + public int getUsingID() { + return usingID; + } + + public void setUsingID(int usingID) { + this.usingID = usingID; + } + + public int getLinkSkillID() { + return linkSkillID; + } + + public void setLinkSkillID(int linkSkillID) { + this.linkSkillID = linkSkillID; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public int getOriginID() { + return originID; + } + + public void setOriginID(int originID) { + this.originID = originID; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LinkSkill linkSkill = (LinkSkill) o; + return originID == linkSkill.originID + && linkSkillID == linkSkill.linkSkillID; + } + + @Override + public int hashCode() { + + return Objects.hash(usingID, linkSkillID); + } +} diff --git a/src/main/java/net/swordie/ms/client/User.java b/src/main/java/net/swordie/ms/client/User.java new file mode 100755 index 0000000..dc67c6b --- /dev/null +++ b/src/main/java/net/swordie/ms/client/User.java @@ -0,0 +1,475 @@ +package net.swordie.ms.client; + +import net.swordie.ms.Server; +import net.swordie.ms.ServerConstants; +import net.swordie.ms.client.anticheat.OffenseManager; +import net.swordie.ms.client.character.Char; +import net.swordie.ms.client.friend.Friend; +import net.swordie.ms.connection.db.DatabaseManager; +import net.swordie.ms.connection.db.converters.FileTimeConverter; +import net.swordie.ms.connection.packet.UserPacket; +import net.swordie.ms.enums.AccountType; +import net.swordie.ms.enums.PicStatus; +import net.swordie.ms.enums.ProgressMessageColourType; +import net.swordie.ms.enums.ProgressMessageFontType; +import net.swordie.ms.util.FileTime; +import org.apache.log4j.Logger; +import org.mindrot.jbcrypt.BCrypt; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +/** + * A class that represents a User of this system. It is uniquely identified by its username. + * + * @author Sjonnie + * Created on 3/19/2019. + */ +@Entity +@Table(name = "users") +public class User { + @Transient + private static final Logger log = Logger.getLogger(Account.class); + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private String name; + private String password; + private String pic; + @Enumerated(EnumType.ORDINAL) + private AccountType accountType; + private int votePoints; + private int donationPoints; + private int age; + private int vipGrade; + private int nBlockReason; + private byte gender; + private byte msg2; + private byte purchaseExp; + private byte pBlockReason; + private byte gradeCode; + private long chatUnblockDate; + private boolean hasCensoredNxLoginID; + private String censoredNxLoginID; + private int characterSlots; + @Convert(converter = FileTimeConverter.class) + private FileTime creationDate; + private int maplePoints; + private int nxPrepaid; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @JoinColumn(name = "userid") + private Set accounts; + @Convert(converter = FileTimeConverter.class) + private FileTime banExpireDate = FileTime.currentTime(); + private String banReason; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "offensemanager") + private OffenseManager offenseManager; + + // no eager -> sometimes get a "resultset closed" when fetching friends/damage skins + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @JoinColumn(name = "owneraccid") + private Set friends; + + @Transient + private Char currentChr; + @Transient + private Account currentAcc; + private String email; + private String registerIp; + + + public User() { + } + + public User(String name) { + this.name = name; + this.accountType = AccountType.Player; + this.creationDate = FileTime.currentTime(); + this.accounts = new HashSet<>(); + this.offenseManager = new OffenseManager(); + } + + + + public static Logger getLog() { + return log; + } + + public static User getFromDBByName(String username) { + return (User) DatabaseManager.getObjFromDB(User.class, username); + } + + public static User getFromDBById(int userId) { + return (User) DatabaseManager.getObjFromDB(User.class, userId); + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setHashedPassword(String password) { + setPassword(BCrypt.hashpw(password, BCrypt.gensalt(ServerConstants.BCRYPT_ITERATIONS))); + } + + public AccountType getAccountType() { + return accountType; + } + + public void setAccountType(AccountType accountType) { + this.accountType = accountType; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public int getVipGrade() { + return vipGrade; + } + + public void setVipGrade(int vipGrade) { + this.vipGrade = vipGrade; + } + + public int getnBlockReason() { + return nBlockReason; + } + + public void setnBlockReason(int nBlockReason) { + this.nBlockReason = nBlockReason; + } + + public FileTime getCreationDate() { + return creationDate; + } + + public void setCreationDate(FileTime creationDate) { + this.creationDate = creationDate; + } + + public Char getCurrentChr() { + return currentChr; + } + + public void setCurrentChr(Char currentChr) { + this.currentChr = currentChr; + } + + public int getMaplePoints() { + return maplePoints; + } + + public void setMaplePoints(int maplePoints) { + this.maplePoints = maplePoints; + } + + public int getNxPrepaid() { + return nxPrepaid; + } + + public void setNxPrepaid(int nxPrepaid) { + this.nxPrepaid = nxPrepaid; + } + + public void addMaplePoints(int points) { + int newPoints = getMaplePoints() + points; + if (newPoints >= 0) { + setMaplePoints(newPoints); + } + } + + public void deductMaplePoints(int points) { + addMaplePoints(-points); + } + + public void addNXPrepaid(int prepaid) { + int newPrepaid = getNxPrepaid() + prepaid; + if (newPrepaid >= 0) { + setNxPrepaid(newPrepaid); + } + } + + public void deductNXPrepaid(int prepaid) { + addNXPrepaid(-prepaid); + } + + public Set getAccounts() { + return accounts; + } + + public void setAccounts(Set accounts) { + this.accounts = accounts; + } + + public void addAccount(Account account) { + getAccounts().add(account); + } + + public FileTime getBanExpireDate() { + return banExpireDate; + } + + public void setBanExpireDate(FileTime banExpireDate) { + this.banExpireDate = banExpireDate; + } + + public String getBanReason() { + return banReason; + } + + + public void setBanReason(String banReason) { + this.banReason = banReason; + } + + public OffenseManager getOffenseManager() { + if (offenseManager == null) { + offenseManager = new OffenseManager(); + } + return offenseManager; + } + + public void setOffenseManager(OffenseManager offenseManager) { + this.offenseManager = offenseManager; + } + + public Account getCurrentAcc() { + return currentAcc; + } + + public void setCurrentAcc(Account currentAcc) { + this.currentAcc = currentAcc; + } + + public void unstuck() { + Server.getInstance().removeUser(this); + DatabaseManager.saveToDB(this); + } + + public String getPic() { + return pic; + } + + public void setPic(String pic) { + this.pic = pic; + } + + public PicStatus getPicStatus() { + PicStatus picStatus; + String pic = getPic(); + if (pic == null || pic.length() == 0) { + picStatus = PicStatus.CREATE_PIC; + } else { + picStatus = PicStatus.ENTER_PIC; + } + return picStatus; + } + + public byte getGender() { + return gender; + } + + public void setGender(byte gender) { + this.gender = gender; + } + + public byte getMsg2() { + return msg2; + } + + public void setMsg2(byte msg2) { + this.msg2 = msg2; + } + + public byte getPurchaseExp() { + return purchaseExp; + } + + public void setPurchaseExp(byte purchaseExp) { + this.purchaseExp = purchaseExp; + } + + public byte getpBlockReason() { + return pBlockReason; + } + + public void setpBlockReason(byte pBlockReason) { + this.pBlockReason = pBlockReason; + } + + public byte getGradeCode() { + return gradeCode; + } + + public void setGradeCode(byte gradeCode) { + this.gradeCode = gradeCode; + } + + public long getChatUnblockDate() { + return chatUnblockDate; + } + + public void setChatUnblockDate(long chatUnblockDate) { + this.chatUnblockDate = chatUnblockDate; + } + + public boolean hasCensoredNxLoginID() { + return hasCensoredNxLoginID; + } + + public void setHasCensoredNxLoginID(boolean hasCensoredNxLoginID) { + this.hasCensoredNxLoginID = hasCensoredNxLoginID; + } + + public String getCensoredNxLoginID() { + return censoredNxLoginID; + } + + public void setCensoredNxLoginID(String censoredNxLoginID) { + this.censoredNxLoginID = censoredNxLoginID; + } + + public int getCharacterSlots() { + return characterSlots; + } + + public void setCharacterSlots(int characterSlots) { + this.characterSlots = characterSlots; + } + + /** + * Gets a Char from the any Account by id. + * + * @param characterId the Char's id + * @return the corresponding Char, or null if none exist + */ + public Char getCharById(int characterId) { + Char chr = null; + for (Account acc : getAccounts()) { + chr = acc.getCharById(characterId); + if (chr == null) { + break; + } + } + return chr; + } + + public Account getAccountByWorldId(int worldId) { + for (Account account : getAccounts()) { + if (account.getWorldId() == worldId) { + return account; + } + } + return null; + } + + public int getVotePoints() { + return votePoints; + } + + public void setVotePoints(int votePoints) { + this.votePoints = votePoints; + } + + public int getDonationPoints() { + return donationPoints; + } + + public void deductDonationPoints(int points) { + addDP(-points); + } + + public void deductVotePoints(int points) { + addVP(-points); + } + + public void addDP(int points) { + int newPoints = getDonationPoints() + points; + if (newPoints >= 0) { + setDonationPoints(newPoints); + } + } + + public void addVP(int points) { + int newPoints = getVotePoints() + points; + if (newPoints >= 0) { + setVotePoints(newPoints); + } + } + + public void setDonationPoints(int donationPoints) { + this.donationPoints = donationPoints; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getEmail() { + return email; + } + + public void setRegisterIp(String registerIp) { + this.registerIp = registerIp; + } + + public String getRegisterIp() { + return registerIp; + } + + public Set getFriends() { + return friends; + } + + public void setFriends(Set friends) { + this.friends = friends; + } + + public void addFriend(Friend friend) { + if(getFriendByUserID(friend.getFriendAccountID()) == null) { + getFriends().add(friend); + } + } + + public Friend getFriendByUserID(int accID) { + return getFriends().stream().filter(f -> f.getFriendAccountID() == accID).findAny().orElse(null); + } + + public void removeFriend(int accID) { + removeFriend(getFriendByUserID(accID)); + } + + public void removeFriend(Friend f) { + if(f != null) { + getFriends().remove(f); + } + } + +} diff --git a/src/main/java/net/swordie/ms/client/alliance/Alliance.java b/src/main/java/net/swordie/ms/client/alliance/Alliance.java new file mode 100755 index 0000000..721723a --- /dev/null +++ b/src/main/java/net/swordie/ms/client/alliance/Alliance.java @@ -0,0 +1,159 @@ +package net.swordie.ms.client.alliance; + +import net.swordie.ms.client.character.Char; +import net.swordie.ms.client.guild.Guild; +import net.swordie.ms.connection.Encodable; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.packet.WvsContext; + +import javax.persistence.*; +import java.util.*; + +/** + * @author Sjonnie + * Created on 9/1/2018. + */ +@Entity +@Table(name = "alliances") +public class Alliance implements Encodable { + private static final int MAX_GUILDS = 15; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private String name; + @OneToMany(cascade = CascadeType.ALL) + @JoinColumn(name = "fk_allianceid") + private Set guilds = new HashSet<>(); + @ElementCollection + @CollectionTable(name = "alliance_gradenames", joinColumns = @JoinColumn(name = "allianceID")) + @Column(name = "gradeName") + private List gradeNames; + private int maxMemberNum; + private String notice; + @Transient + private Set pendingGuilds = new HashSet<>(); + + public Alliance() { + gradeNames = Arrays.asList("Master", "Junior", "Veteran", "Regular", "New"); + } + + @Override + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getId()); + outPacket.encodeString(getName()); + for (String gradeName : getGradeNames()) { + outPacket.encodeString(gradeName); + } + outPacket.encodeByte(getGuilds().size()); + for (Guild guild : getGuilds()) { + outPacket.encodeInt(guild.getId()); + } + outPacket.encodeInt(getMaxMemberNum()); + outPacket.encodeString(getNotice()); + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Set getGuilds() { + return guilds; + } + + public void setGuilds(Set guilds) { + this.guilds = guilds; + } + + public List getGradeNames() { + return gradeNames; + } + + public void setGradeNames(List gradeNames) { + this.gradeNames = gradeNames; + } + + public int getMaxMemberNum() { + return maxMemberNum; + } + + public void setMaxMemberNum(int maxMemberNum) { + this.maxMemberNum = maxMemberNum; + } + + public String getNotice() { + return notice; + } + + public void setNotice(String notice) { + this.notice = notice; + } + + public Guild getGuildByID(int guildID) { + return getGuilds().stream().filter(g -> g.getId() == guildID).findAny().orElse(null); + } + + public void broadcast(OutPacket outPacket) { + for (Guild guild : getGuilds()) { + guild.broadcast(outPacket); + } + } + + public void broadcast(OutPacket outPacket, Char exceptChar) { + for (Guild guild : getGuilds()) { + guild.broadcast(outPacket, exceptChar); + } + } + + public void addGuild(Guild guild) { + getGuilds().add(guild); + removePendingGuild(guild); + broadcast(WvsContext.allianceResult(AllianceResult.inviteDone(this, guild))); + updateToMembers(); + } + + public void removeGuild(Guild guild) { + Guild g = getGuildByID(guild.getId()); // to ensure it's the same instance as the one in the set + getGuilds().remove(g); + g.setAlliance(null); + } + + public void disband() { + for (Guild guild : getGuilds()) { + guild.setAlliance(null); + guild.updateToMembers(); + } + } + + public void updateToMembers() { + broadcast(WvsContext.allianceResult(AllianceResult.loadDone(this))); + broadcast(WvsContext.allianceResult(AllianceResult.loadGuildDone(this))); + } + + public void addPendingGuild(Guild guild) { + pendingGuilds.add(guild.getId()); + } + + public void removePendingGuild(Guild guild) { + pendingGuilds.remove(guild.getId()); + } + + public boolean isFull() { + return getGuilds().size() >= MAX_GUILDS; + } + + public boolean hasPendingGuildInvite(int id) { + return pendingGuilds.contains(id); + } +} diff --git a/src/main/java/net/swordie/ms/client/alliance/AllianceResult.java b/src/main/java/net/swordie/ms/client/alliance/AllianceResult.java new file mode 100755 index 0000000..2ea7638 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/alliance/AllianceResult.java @@ -0,0 +1,260 @@ +package net.swordie.ms.client.alliance; + +import net.swordie.ms.client.guild.Guild; +import net.swordie.ms.client.guild.GuildMember; +import net.swordie.ms.connection.Encodable; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.enums.AllianceType; + +/** + * @author Sjonnie + * Created on 9/1/2018. + */ +public class AllianceResult implements Encodable { + private AllianceType type; + private Alliance alliance; + private Guild guild; + private GuildMember member; + private GuildMember member2; + private boolean bool; + private int arg; + + public AllianceResult(AllianceType type) { + this.type = type; + } + + @Override + public void encode(OutPacket outPacket) { + outPacket.encodeByte(type.getVal()); + switch (type) { + case Req_Invite: + outPacket.encodeInt(member.getId()); // dwMemberID + outPacket.encodeString(member.getName()); + outPacket.encodeString(alliance.getName()); + break; + case Res_LoadDone: + outPacket.encodeByte(alliance != null); + if (alliance != null) { + outPacket.encode(alliance); + } + break; + case Res_LoadGuildDone: + outPacket.encodeInt(alliance.getGuilds().size()); + for (Guild guild : alliance.getGuilds()) { + outPacket.encode(guild); + } + break; + case Res_NotifyLoginOrLogout: + outPacket.encodeInt(alliance.getId()); // ignored? + outPacket.encodeInt(guild.getId()); + outPacket.encodeInt(member.getCharID()); + outPacket.encodeByte(member.isOnline()); + outPacket.encodeByte(bool); // bCreateWindow + break; + case Res_CreateDone: + outPacket.encode(alliance); + for (Guild guild : alliance.getGuilds()) { + outPacket.encode(guild); + } + break; + case Res_Withdraw_Done: + outPacket.encode(alliance); + outPacket.encodeInt(guild.getId()); // nLeavingGuildID + outPacket.encode(guild); + outPacket.encodeByte(bool); // bKicked + break; + case Res_Invite_Done: + outPacket.encode(alliance); + outPacket.encodeInt(guild.getId()); + outPacket.encode(guild); + break; + case Res_Invite_Failed: + case Res_ChangeGrade_Fail: + outPacket.encodeInt(arg); // nType + break; + case Res_UpdateAllianceInfo: + outPacket.encode(alliance); + break; + case Res_ChangeLevelOrJob: + outPacket.encodeInt(alliance.getId()); + outPacket.encodeInt(guild.getId()); + outPacket.encodeInt(member.getCharID()); + outPacket.encodeInt(member.getLevel()); + outPacket.encodeInt(member.getJob()); + break; + case Res_ChangeMaster_Done: + outPacket.encodeInt(alliance.getId()); + outPacket.encodeInt(member.getId()); // nOldLeaderID + outPacket.encodeInt(member2.getId()); // nNewLeaderID + break; + case Res_SetGradeName_Done: + outPacket.encodeInt(alliance.getId()); + for (String gradeName : alliance.getGradeNames()) { + outPacket.encodeString(gradeName); + } + break; + case Res_ChangeGrade_Done: + outPacket.encodeInt(member.getId()); + outPacket.encodeByte(arg); // nAllianceGrade + break; + case Res_SetNotice_Done: + outPacket.encodeInt(alliance.getId()); + outPacket.encodeString(alliance.getNotice()); + break; + case Res_Destroy_Done: + outPacket.encodeInt(alliance.getId()); + break; + case Res_UpdateGuildInfo: + outPacket.encodeInt(alliance.getId()); + outPacket.encodeInt(guild.getId()); + outPacket.encode(guild); + break; + } + } + + + public static AllianceResult inviteGuild(Alliance alliance, GuildMember member) { + AllianceResult ar = new AllianceResult(AllianceType.Req_Invite); + + ar.member = member; + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult loadDone(Alliance alliance) { + AllianceResult ar = new AllianceResult(AllianceType.Res_LoadDone); + + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult loadGuildDone(Alliance alliance) { + AllianceResult ar = new AllianceResult(AllianceType.Res_LoadGuildDone); + + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult notifyLoginOrLogout(Alliance alliance, Guild guild, GuildMember guildMember, boolean showWindow) { + AllianceResult ar = new AllianceResult(AllianceType.Res_NotifyLoginOrLogout); + + ar.alliance = alliance; + ar.guild = guild; + ar.member = guildMember; + ar.bool = showWindow; + + return ar; + } + + public static AllianceResult createDone(Alliance alliance) { + AllianceResult ar = new AllianceResult(AllianceType.Res_CreateDone); + + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult withdraw(Alliance alliance, Guild guild, boolean kicked) { + AllianceResult ar = new AllianceResult(AllianceType.Res_Withdraw_Done); + + ar.alliance = alliance; + ar.guild = guild; + ar.bool = kicked; + + return ar; + } + + public static AllianceResult inviteDone(Alliance alliance, Guild guild) { + AllianceResult ar = new AllianceResult(AllianceType.Res_Invite_Done); + + ar.alliance = alliance; + ar.guild = guild; + + return ar; + } + + public static AllianceResult msg(AllianceType art) { + return msg(art, 0); + } + + public static AllianceResult msg(AllianceType art, int arg) { + AllianceResult ar = new AllianceResult(art); + + ar.arg = arg; + + return ar; + } + + public static AllianceResult updateAllianceInfo(Alliance alliance) { + AllianceResult ar = new AllianceResult(AllianceType.Res_UpdateAllianceInfo); + + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult changeLevelOrJob(Alliance alliance, Guild guild, GuildMember member) { + AllianceResult ar = new AllianceResult(AllianceType.Res_ChangeLevelOrJob); + + ar.alliance = alliance; + ar.guild = guild; + ar.member = member; + + return ar; + } + + public static AllianceResult changeMaster(Alliance alliance, GuildMember oldMaster, GuildMember newMaster) { + AllianceResult ar = new AllianceResult(AllianceType.Res_ChangeMaster_Done); + + ar.alliance = alliance; + ar.member = oldMaster; + ar.member2 = newMaster; + + return ar; + } + + public static AllianceResult setGradeName(Alliance alliance) { + AllianceResult ar = new AllianceResult(AllianceType.Res_SetGradeName_Done); + + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult changeGrade(GuildMember member) { + AllianceResult ar = new AllianceResult(AllianceType.Res_ChangeGrade_Done); + + ar.member = member; + ar.arg = member.getAllianceGrade(); + + return ar; + } + + public static AllianceResult setNotice(Alliance alliance) { + AllianceResult ar = new AllianceResult(AllianceType.Res_SetNotice_Done); + + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult destroy(Alliance alliance) { + AllianceResult ar = new AllianceResult(AllianceType.Res_Destroy_Done); + + ar.alliance = alliance; + + return ar; + } + + public static AllianceResult updateGuildInfo(Alliance alliance, Guild guild) { + AllianceResult ar = new AllianceResult(AllianceType.Res_UpdateGuildInfo); + + ar.alliance = alliance; + ar.guild = guild; + + return ar; + } +} diff --git a/src/main/java/net/swordie/ms/client/anticheat/Offense.java b/src/main/java/net/swordie/ms/client/anticheat/Offense.java new file mode 100755 index 0000000..1f9c894 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/anticheat/Offense.java @@ -0,0 +1,138 @@ +package net.swordie.ms.client.anticheat; + +import net.swordie.ms.connection.db.converters.FileTimeConverter; +import net.swordie.ms.util.FileTime; + +import javax.persistence.*; + +@Entity +@Table(name = "offenses") +public class Offense { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + private int charID; + private int accountID; + private String msg; + @Enumerated(EnumType.STRING) + private Type type; + @Convert(converter = FileTimeConverter.class) + private FileTime issueDate; + @Column(name = "issuer_char_id") + private int issuerCharID; + + public Offense() { + } + + public Offense(int charID, int accountID, String msg, Type type, FileTime issueDate, int issuerCharID) { + this.charID = charID; + this.accountID = accountID; + this.msg = msg; + this.type = type; + this.issueDate = issueDate; + this.issuerCharID = issuerCharID; + } + + public Offense withMsg(String msg) { + setMsg(msg); + return this; + } + + public Offense withType(Type type) { + setType(type); + return this; + } + + public Offense withIssuerID(int issuerCharID) { + setIssuerCharID(issuerCharID); + return this; + } + + public int getCharID() { + return charID; + } + + public void setCharID(int charID) { + this.charID = charID; + } + + public int getAccountID() { + return accountID; + } + + public void setAccountID(int accountID) { + this.accountID = accountID; + } + + public Type getType() { + return type; + } + + public void setType(Type type) { + this.type = type; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public FileTime getIssueDate() { + return issueDate; + } + + public void setIssueDate(FileTime issueDate) { + this.issueDate = issueDate; + } + + public int getIssuerCharID() { + return issuerCharID; + } + + public void setIssuerCharID(int issuerCharID) { + this.issuerCharID = issuerCharID; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public enum Type { + Warning(0), // Mostly for logging + Editing(5), // Any sort of client editing, like wz/packet + Gameplay(2), // Stuff like KSing + Behaviour(1), // Being annoying + Manual(5), // Manual offense (by doing !ban or something) + ; + + private int points; + + Type(int points) { + this.points = points; + } + + public int getPoints() { + return points; + } + } + + @Override + public String toString() { + return "Offense{" + + "charID=" + charID + + ", accountID=" + accountID + + ", msg='" + msg + '\'' + + ", type=" + type + + ", issueDate=" + issueDate + + ", issuerCharID=" + issuerCharID + + '}'; + } +} diff --git a/src/main/java/net/swordie/ms/client/anticheat/OffenseManager.java b/src/main/java/net/swordie/ms/client/anticheat/OffenseManager.java new file mode 100755 index 0000000..1cf4dad --- /dev/null +++ b/src/main/java/net/swordie/ms/client/anticheat/OffenseManager.java @@ -0,0 +1,156 @@ +package net.swordie.ms.client.anticheat; + +import net.swordie.ms.client.character.Char; +import net.swordie.ms.connection.db.DatabaseManager; +import net.swordie.ms.util.FileTime; +import org.apache.log4j.Logger; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "offense_managers") +public class OffenseManager { + @Transient + private static final Logger log = Logger.getLogger(DatabaseManager.class); + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "manager_id") + private Set offenses; + private int points; + @Transient + private Char chr; + + /** + * Creates a new offense that was detected by the system (i.e., not manual) + * @param type the type of offense + * @param msg the description of the offense + */ + public void addOffense(Offense.Type type, String msg) { + addOffense(getDefaultOffsense() + .withMsg(msg) + .withType(type) + ); + } + + /** + * Creates a new offense that was detected by the system (i.e., not manual) + * @param type the type of offense + * @param msg the description of the offense + * @param expected expected value + * @param actual actual value + */ + public void addOffense(Offense.Type type, String msg, int expected, int actual) { + msg += String.format(" (expected %d, got %d)", expected, actual); + addOffense(getDefaultOffsense() + .withMsg(msg) + .withType(type) + ); + } + + /** + * Adds an offense seen by a game master. + * @param type the type of offense + * @param msg the description of the offense + * @param issuerCharID the game master's char id + */ + public void addOffense(Offense.Type type, String msg, int issuerCharID) { + addOffense(getDefaultOffsense() + .withMsg(msg) + .withType(type) + .withIssuerID(issuerCharID) + ); + } + + /** + * Adds an offense seen by a game master, with type Manual. + * @param msg the description of the offense + * @param issuerCharID the game master's char id + */ + public void addOffense(String msg, int issuerCharID) { + addOffense(getDefaultOffsense() + .withMsg(msg) + .withIssuerID(issuerCharID) + ); + } + + /** + * Adds an offense found by the system with type Editing. + * @param msg the description of the offense + */ + public void addOffense(String msg) { + addOffense(getDefaultOffsense() + .withMsg(msg) + .withType(Offense.Type.Editing)); + } + + /** + * Adds an offense found by the system with type Editing. + * @param msg the description of the offense + */ + public void addOffense(String msg, int expected, int actual) { + msg += String.format(" (expected %d, got %d)", expected, actual); + addOffense(msg); + } + + private Offense getDefaultOffsense() { + int charId = 0; + int accId = 0; + if (chr != null) { + charId = chr.getId(); + accId = chr.getUserId(); + } + + return new Offense(charId, accId, "", Offense.Type.Manual, FileTime.currentTime(), 0); + } + + private void addOffense(Offense offense) { + log.info("Added offense: " + offense); + addPoints(offense.getType().getPoints()); + // TODO do something at certain point intervals (temp ban, mute, idk) + getOffenses().add(offense); + } + + public Set getOffenses() { + if (offenses == null) { + offenses = new HashSet<>(); + } + return offenses; + } + + public void setOffenses(Set offenses) { + this.offenses = offenses; + } + + public Char getChr() { + return chr; + } + + public void setChr(Char chr) { + this.chr = chr; + } + + public int getPoints() { + return points; + } + + public void setPoints(int points) { + this.points = points; + } + + public void addPoints(int points) { + setPoints(getPoints() + points); + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/BroadcastMsg.java b/src/main/java/net/swordie/ms/client/character/BroadcastMsg.java new file mode 100755 index 0000000..a77a518 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/BroadcastMsg.java @@ -0,0 +1,320 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.client.character.items.Item; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.enums.BroadcastMsgType; +import net.swordie.ms.util.FileTime; + +import java.util.List; + +/** + * Created by Asura on 17-6-2018. + */ +public class BroadcastMsg { + private BroadcastMsgType broadcastMsgType; + private Item item; + private String string; + private String string2; + private String string3; + private int arg1; + private int arg2; + private int arg3; + private Char chr; + + public void encode(OutPacket outPacket) { + outPacket.encodeByte(getBroadcastMsgType().getVal()); + + BroadcastMsgType bmt = getBroadcastMsgType(); + if (bmt == BroadcastMsgType.SlideNotice) { + if (getString() == null || getString().isEmpty()) { + outPacket.encodeByte(0); + } else { + outPacket.encodeByte(getArg1()); + } + } + if (bmt != BroadcastMsgType.TryRegisterAutoStartQuest && bmt != BroadcastMsgType.TryRegisterAutoStartQuest_NoAnnouncement) { + outPacket.encodeString(getString()); + } + if (bmt.isSmega()) { + // vm sub also used in other chat functions + chr.encodeChatInfo(outPacket, getString()); + } + + switch (getBroadcastMsgType()) { + case Notice: + case PopUpMessage: + case DarkBlueOnLightBlue: + case PartyChat: + case WhiteYellow: + case SwedishFlag: + break; + case Megaphone: + case MegaphoneNoMessage: + outPacket.encodeByte(getArg1()); // Channel + outPacket.encodeByte(getArg2()); // Mega Ear + break; + case ItemMegaphone: + outPacket.encodeByte(getArg1()); // Channel + outPacket.encodeByte(getArg2()); // Mega Ear + outPacket.encodeByte(getArg3()); // Boolean Item: Yes/No + if(getArg3() != 0) { + getItem().encode(outPacket); // Item encode + } + break; + case TripleMegaphone: + outPacket.encodeByte(getArg1()); // StringList size + if(getArg1() > 1) { + outPacket.encodeString(getString2()); // String 2 + chr.encodeChatInfo(outPacket, getString2()); + } + if(getArg1() > 2) { + outPacket.encodeString(getString3()); // String 3 + chr.encodeChatInfo(outPacket, getString3()); + } + outPacket.encodeByte(getArg2()); // Channel + outPacket.encodeByte(getArg3()); // Mega Ear + break; + case BlueChat_ItemInfo: + case BlueChat_ItemInfo_2: + outPacket.encodeInt(getArg1()); // item Id + if(getArg1() != 0) { + getItem().encode(outPacket); // item encode + } + break; + case GM_ErrorMessage: + outPacket.encodeInt(getArg1()); // npc Id + break; + case RedWithChannelInfo: + outPacket.encodeInt(getArg1()); // chr Id + // "#channel" will grab Chr's Channel + break; + case WhiteYellow_ItemInfo: + outPacket.encodeByte(getArg1()); // Boolean Item: Yes/No + if(getArg1() != 0) { + getItem().encode(outPacket); // Item encode + } + break; + case YellowChatFiled_ItemInfo: + outPacket.encodeInt(getArg1()); // item Id + outPacket.encodeByte(getArg2()); // boolean: show item + getItem().encode(outPacket); + break; + case PopUpNotice: + outPacket.encodeInt(getArg1()); // width + outPacket.encodeInt(getArg2()); // height + break; + case Yellow: + case Yellow_2: + getItem().encode(outPacket); // Item encode + break; + case TryRegisterAutoStartQuest: + outPacket.encodeInt(getArg1()); // Quest Id + outPacket.encodeInt(getArg2()); // Time Out + break; + case TryRegisterAutoStartQuest_NoAnnouncement: + outPacket.encodeInt(getArg1()); // Quest Id + break; + } + } + + public static BroadcastMsg itemMegaphone(String string, byte channel, boolean whisperEar, boolean containsItem, + Item item, Char chr) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.ItemMegaphone); + + broadcastMsg.setString(string); + broadcastMsg.setArg1((byte) (channel - 1)); + broadcastMsg.setArg2((byte) (whisperEar ? 1 : 0)); + broadcastMsg.setArg3((byte) (containsItem ? 1 : 0)); + broadcastMsg.setChr(chr); + broadcastMsg.setItem(item); + + return broadcastMsg; + } + + public static BroadcastMsg slideNotice(String string, boolean show) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.SlideNotice); + + broadcastMsg.setString(string); + broadcastMsg.setArg1(show ? 1 : 0); + + return broadcastMsg; + } + + public static BroadcastMsg tripleMegaphone(List stringList, byte channel, boolean whisperEar, Char chr) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.TripleMegaphone); + + broadcastMsg.setArg1((byte) stringList.size()); + broadcastMsg.setString(stringList.get(0)); + if(stringList.size() > 1) { + broadcastMsg.setString2(stringList.get(1)); + } + if(stringList.size() > 2) { + broadcastMsg.setString3(stringList.get(2)); + } + broadcastMsg.setArg2((byte) (channel - 1)); + broadcastMsg.setArg3((byte) (whisperEar ? 1 : 0)); + broadcastMsg.setChr(chr); + + return broadcastMsg; + } + + public static BroadcastMsg megaphone(String string, byte channel, boolean whisperEar, Char chr) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.Megaphone); + + broadcastMsg.setString(string); + broadcastMsg.setArg1((byte) (channel - 1)); + broadcastMsg.setArg2((byte) (whisperEar ? 1 : 0)); + broadcastMsg.setChr(chr); + + return broadcastMsg; + } + + public static BroadcastMsg notice(String string) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.Notice); + + broadcastMsg.setString(string); + + return broadcastMsg; + } + + public static BroadcastMsg popUpMessage(String string) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.PopUpMessage); + + broadcastMsg.setString(string); + + return broadcastMsg; + } + + public static BroadcastMsg popUpNotice(String string, int width, int height) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.PopUpNotice); + + broadcastMsg.setString(string); + broadcastMsg.setArg1(width); + broadcastMsg.setArg2(height); + + return broadcastMsg; + } + + public static BroadcastMsg blueChatWithItemInfo(String string, Item item) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.BlueChat_ItemInfo); + + broadcastMsg.setString(string); + broadcastMsg.setArg1(item.getItemId()); + broadcastMsg.setItem(item); + + return broadcastMsg; + } + + public static BroadcastMsg errorMessage(String string, int npcId) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.GM_ErrorMessage); + + broadcastMsg.setString(string); + broadcastMsg.setArg1(npcId); + + return broadcastMsg; + } + + public static BroadcastMsg yellowFilled(String string, Item item, boolean show) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.YellowChatFiled_ItemInfo); + + broadcastMsg.setString(string); + broadcastMsg.setItem(item); + broadcastMsg.setArg1(show ? 1 : 0); + + return broadcastMsg; + } + + /* + public static BroadcastMsg slideNotice(String string, boolean show) { + BroadcastMsg broadcastMsg = new BroadcastMsg(); + broadcastMsg.setBroadcastMsgType(BroadcastMsgType.SlideNotice); + + broadcastMsg.setString(string); + broadcastMsg.setArg1(show ? 1 : 0); + + return broadcastMsg; + } +*/ + + public BroadcastMsgType getBroadcastMsgType() { + return broadcastMsgType; + } + + public void setBroadcastMsgType(BroadcastMsgType broadcastMsgType) { + this.broadcastMsgType = broadcastMsgType; + } + + public String getString() { + return string; + } + + public void setString(String string) { + this.string = string; + } + + public String getString2() { + return string2; + } + + public void setString2(String string2) { + this.string2 = string2; + } + + public String getString3() { + return string3; + } + + public void setString3(String string3) { + this.string3 = string3; + } + + public int getArg1() { + return arg1; + } + + public void setArg1(int arg1) { + this.arg1 = arg1; + } + + public int getArg2() { + return arg2; + } + + public void setArg2(int arg2) { + this.arg2 = arg2; + } + + public int getArg3() { + return arg3; + } + + public void setArg3(int arg3) { + this.arg3 = arg3; + } + + public Item getItem() { + return item; + } + + public void setItem(Item item) { + this.item = item; + } + + public Char getChr() { + return chr; + } + + public void setChr(Char chr) { + this.chr = chr; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/Char.java b/src/main/java/net/swordie/ms/client/character/Char.java new file mode 100755 index 0000000..e88d2d0 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/Char.java @@ -0,0 +1,6752 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.Server; +import net.swordie.ms.client.Account; +import net.swordie.ms.client.Client; +import net.swordie.ms.client.LinkSkill; +import net.swordie.ms.client.User; +import net.swordie.ms.client.alliance.Alliance; +import net.swordie.ms.client.alliance.AllianceResult; +import net.swordie.ms.client.anticheat.OffenseManager; +import net.swordie.ms.client.character.avatar.AvatarData; +import net.swordie.ms.client.character.avatar.AvatarLook; +import net.swordie.ms.client.character.avatar.BeautyAlbum; +import net.swordie.ms.client.character.cards.MonsterBookInfo; +import net.swordie.ms.client.character.damage.DamageCalc; +import net.swordie.ms.client.character.damage.DamageSkinSaveData; +import net.swordie.ms.client.character.info.*; +import net.swordie.ms.client.character.items.*; +import net.swordie.ms.client.character.keys.FuncKeyMap; +import net.swordie.ms.client.character.monsterbattle.MonsterBattleLadder; +import net.swordie.ms.client.character.monsterbattle.MonsterBattleMobInfo; +import net.swordie.ms.client.character.monsterbattle.MonsterBattleRankInfo; +import net.swordie.ms.client.character.potential.CharacterPotential; +import net.swordie.ms.client.character.potential.CharacterPotentialMan; +import net.swordie.ms.client.character.quest.Quest; +import net.swordie.ms.client.character.quest.QuestEx; +import net.swordie.ms.client.character.quest.QuestManager; +import net.swordie.ms.client.character.runestones.RuneStone; +import net.swordie.ms.client.character.skills.*; +import net.swordie.ms.client.character.skills.info.ForceAtomInfo; +import net.swordie.ms.client.character.skills.info.SkillInfo; +import net.swordie.ms.client.character.skills.info.SkillUseInfo; +import net.swordie.ms.client.character.skills.temp.CharacterTemporaryStat; +import net.swordie.ms.client.character.skills.temp.TemporaryStatManager; +import net.swordie.ms.client.character.union.Union; +import net.swordie.ms.client.character.union.UnionMember; +import net.swordie.ms.client.friend.Friend; +import net.swordie.ms.client.friend.FriendFlag; +import net.swordie.ms.client.friend.FriendRecord; +import net.swordie.ms.client.friend.FriendshipRingRecord; +import net.swordie.ms.client.friend.result.FriendResult; +import net.swordie.ms.client.guild.Guild; +import net.swordie.ms.client.guild.GuildMember; +import net.swordie.ms.client.guild.result.GuildResult; +import net.swordie.ms.client.jobs.Job; +import net.swordie.ms.client.jobs.JobManager; +import net.swordie.ms.client.jobs.adventurer.pirate.Corsair; +import net.swordie.ms.client.jobs.cygnus.NightWalker; +import net.swordie.ms.client.jobs.legend.Evan; +import net.swordie.ms.client.jobs.legend.Luminous; +import net.swordie.ms.client.jobs.legend.Phantom; +import net.swordie.ms.client.jobs.resistance.WildHunterInfo; +import net.swordie.ms.client.jobs.resistance.demon.DemonAvenger; +import net.swordie.ms.client.jobs.sengoku.Hayato; +import net.swordie.ms.client.jobs.sengoku.Kanna; +import net.swordie.ms.client.party.Party; +import net.swordie.ms.client.party.PartyMember; +import net.swordie.ms.client.party.PartyResult; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.db.DatabaseManager; +import net.swordie.ms.connection.db.converters.InlinedIntArrayConverter; +import net.swordie.ms.connection.packet.*; +import net.swordie.ms.constants.*; +import net.swordie.ms.enums.*; +import net.swordie.ms.handlers.ClientSocket; +import net.swordie.ms.handlers.EventManager; +import net.swordie.ms.life.*; +import net.swordie.ms.life.drop.Drop; +import net.swordie.ms.life.mob.Mob; +import net.swordie.ms.life.pet.Pet; +import net.swordie.ms.loaders.*; +import net.swordie.ms.loaders.containerclasses.AndroidInfo; +import net.swordie.ms.loaders.containerclasses.ItemInfo; +import net.swordie.ms.loaders.containerclasses.ItemSet; +import net.swordie.ms.scripts.ScriptInfo; +import net.swordie.ms.scripts.ScriptManagerImpl; +import net.swordie.ms.scripts.ScriptType; +import net.swordie.ms.util.*; +import net.swordie.ms.util.container.Tuple; +import net.swordie.ms.world.Channel; +import net.swordie.ms.world.World; +import net.swordie.ms.world.field.*; +import net.swordie.ms.world.field.fieldeffect.FieldEffect; +import net.swordie.ms.world.gach.GachaponManager; +import net.swordie.ms.world.shop.NpcShopDlg; +import net.swordie.ms.world.shop.NpcShopItem; +import org.apache.log4j.Logger; +import org.hibernate.Session; +import org.hibernate.Transaction; + +import javax.persistence.*; +import java.awt.*; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.List; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import static net.swordie.ms.client.character.skills.temp.CharacterTemporaryStat.*; +import static net.swordie.ms.enums.ChatType.SpeakerChannel; +import static net.swordie.ms.enums.ChatType.SystemNotice; +import static net.swordie.ms.enums.InvType.EQUIP; +import static net.swordie.ms.enums.InvType.EQUIPPED; +import static net.swordie.ms.enums.InventoryOperation.*; + +/** + * Created on 11/17/2017. + */ +@Entity +@Table(name = "characters") +public class Char { + + @Transient + private static final Logger log = Logger.getLogger(Char.class); + + @Transient + private Client client; + private int rewardPoints; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private int id; + private int userId; + + @JoinColumn(name = "questManager") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private QuestManager questManager; + + @JoinColumn(name = "equippedInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory equippedInventory = new Inventory(EQUIPPED, GameConstants.MAX_INV_SLOTS); + + @JoinColumn(name = "equipInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory equipInventory = new Inventory(EQUIP, GameConstants.MAX_INV_SLOTS); + + @JoinColumn(name = "consumeInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory consumeInventory = new Inventory(InvType.CONSUME, GameConstants.MAX_INV_SLOTS); + + @JoinColumn(name = "etcInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory etcInventory = new Inventory(InvType.ETC, GameConstants.MAX_INV_SLOTS); + + @JoinColumn(name = "installInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory installInventory = new Inventory(InvType.INSTALL, GameConstants.MAX_INV_SLOTS); + + @JoinColumn(name = "cashInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory cashInventory = new Inventory(InvType.CASH, GameConstants.MAX_INV_SLOTS); + + @JoinColumn(name = "avatarData") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private AvatarData avatarData; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + private List funcKeyMaps; + + @JoinColumn(name = "hairInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory hairInventory = new Inventory(InvType.HAIR, 3); + + @JoinColumn(name = "faceInventory") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private Inventory faceInventory = new Inventory(InvType.FACE, 3); + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + private List beautyAlbum = new ArrayList<>(); + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + private Set skills; + + @JoinColumn(name = "ownerID") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + private Set friends; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + private Set potentials; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + private Set familiars; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + private List macros = new ArrayList<>(); + + @JoinColumn(name = "guild") + @OneToOne(cascade = CascadeType.ALL) + private Guild guild; + + @JoinColumn(name = "monsterBook") + @OneToOne(cascade = CascadeType.ALL) + private MonsterBookInfo monsterBookInfo; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL) + private Set stolenSkills; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL) + private Set chosenSkills; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + private Set matrixRecords = new HashSet<>(); + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "hyperrockfields", joinColumns = @JoinColumn(name = "charId")) + @Column(name = "fieldid") + @OrderColumn(name = "ord") + private int[] hyperrockfields = new int[13]; + + @Column(name = "monsterparkcount") + private byte monsterParkCount; + + private int partyID = 0; // Just for DB purposes + private int previousFieldID; + private int location; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "skillcooltimes", joinColumns = @JoinColumn(name = "charId")) + @MapKeyColumn(name = "skillid") + @Column(name = "nextusabletime") + private Map skillCoolTimes = new HashMap<>(); + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "towerchairs", joinColumns = @JoinColumn(name = "charId")) + @Column(name = "chairid") + @OrderColumn(name = "ord") + private int[] towerChairs; + + @ElementCollection + @CollectionTable(name = "quests_ex", joinColumns = @JoinColumn(name = "charId")) + @MapKeyColumn(name = "questID") + @Column(name = "qrValue") + private Map questsExStorage; + + @JoinColumn(name = "charId") + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + private List hotTimeRewards = new ArrayList<>(); + + @Transient + private CharacterPotentialMan potentialMan; + @Transient + private Map questRecordEx; + @Transient + private Ranking ranking; + @Transient + private int combatOrders; + @Transient + private List itemPots; + @Transient + private List pets; + @Transient + private List friendRecords; + @Transient + private List expConsumeItems; + @Transient + private List monsterBattleMobInfos; + @Transient + private MonsterBattleLadder monsterBattleLadder; + @Transient + private MonsterBattleRankInfo monsterBattleRankInfo; + @Transient + private Position position; + @Transient + private Position oldPosition; + @Transient + private Field field; + @Transient + private byte moveAction; + @Transient + private TemporaryStatManager temporaryStatManager; + @Transient + private GachaponManager gachaponManager; + @Transient + private Job jobHandler; + @Transient + private MarriageRecord marriageRecord; + @Transient + private WildHunterInfo wildHunterInfo; + @Transient + private ZeroInfo zeroInfo; + @Transient + private int nickItem; + @Transient + private DamageSkinSaveData damageSkin = new DamageSkinSaveData(); + @Transient + private DamageSkinSaveData premiumDamageSkin = new DamageSkinSaveData(); + @Transient + private boolean partyInvitable; + @Transient + private ScriptManagerImpl scriptManagerImpl = new ScriptManagerImpl(this); + @Transient + private int driverID; + @Transient + private int passengerID; + @Transient + private int chocoCount; + @Transient + private int activeEffectItemID; + @Transient + private int monkeyEffectItemID; + @Transient + private int completedSetItemID; + @Transient + private short fieldSeatID; + @Transient + private PortableChair chair; + @Transient + private short foothold; + @Transient + private int tamingMobLevel; + @Transient + private int tamingMobExp; + @Transient + private int tamingMobFatigue; + @Transient + private MiniRoom miniRoom; + @Transient + private String ADBoardRemoteMsg; + @Transient + private boolean inCouple; + @Transient + private CoupleRecord couple; + @Transient + private FriendshipRingRecord friendshipRingRecord; + @Transient + private int evanDragonGlide; + @Transient + private int kaiserMorphRotateHueExtern; + @Transient + private int kaiserMorphPrimiumBlack; + @Transient + private int kaiserMorphRotateHueInnner; + @Transient + private int makingMeisterSkillEff; + @Transient + private FarmUserInfo farmUserInfo; + @Transient + private int customizeEffect; + @Transient + private String customizeEffectMsg; + @Transient + private byte soulEffect; + @Transient + private FreezeHotEventInfo freezeHotEventInfo; + @Transient + private int eventBestFriendAID; + @Transient + private int mesoChairCount; + @Transient + private boolean beastFormWingOn; + @Transient + private int activeNickItemID; + @Transient + private int mechanicHue; + @Transient + private boolean online; + @Transient + private Party party; + @Transient + private Instance instance; + @Transient + private int bulletIDForAttack; + @Transient + private NpcShopDlg shop; + @Transient // yes + private User user; + @Transient // yes + private Account account; + @Transient + private Client chatClient; + @Transient + private DamageCalc damageCalc; + @Transient + private boolean buffProtector; + @Transient + private int comboCounter; + @Transient + private ScheduledFuture comboKillResetTimer; + @Transient + private ScheduledFuture timeLimitTimer; + @Transient + private int deathCount = -1; + @Transient + private long runeStoneCooldown; + @Transient + private MemorialCubeInfo memorialCubeInfo; + @Transient + private Familiar activeFamiliar; + @Transient + private boolean skillCDBypass = false; + // TODO Move this to CharacterStat? + @Transient + private Map baseStats = new HashMap<>(); + @Transient + private Map> nonAddBaseStats = new HashMap<>(); + @Transient + private boolean changingChannel; + @Transient + private TownPortal townPortal; + @Transient + private TradeRoom tradeRoom; + @Transient + private boolean battleRecordOn; + @Transient + private long nextRandomPortalTime; + @Transient + private Map currentDirectionNode; + @Transient + private String lieDetectorAnswer = ""; + @Transient + private long lastLieDetector = 0; + // TOOD: count and log lie detector passes and fails + @Transient + private boolean tutor = false; + @Transient + private int transferField = 0; + @Transient + private int transferFieldReq = 0; + @Transient + private String blessingOfFairy = null; + @Transient + private String blessingOfEmpress = null; + @Transient + private Map hyperPsdSkillsCooltimeR = new HashMap<>(); + @Transient + private boolean isInvincible; + @Transient + private boolean talkingToNpc; + @Convert(converter = InlinedIntArrayConverter.class) + private List quickslotKeys; + @Transient + private Android android; + @Transient + private boolean skillInfoMode = false; + @Transient + private boolean debugMode = true; + @Transient + private List buyBack = new ArrayList<>(); + @Transient + private Map psychicAreas = new HashMap<>(); + @Transient + private Map forceAtoms = new HashMap<>(); + @Transient + private int forceAtomKeyCounter = 1; + @Transient + private Char copy; + @Transient + private Map followAffectedAreas = new HashMap<>(); + @Transient + private boolean showDamageCalc; + @Transient + private Map psdWTBonus = new HashMap<>(); + @Transient + private boolean hide; + @Transient + private Map activeSetEffects = new HashMap<>(); + @Transient + private Map setBaseStats = new HashMap<>(); + @Transient + private Map> setNonAddBaseStats = new HashMap<>(); + + @Transient + private ScheduledFuture keyDownTimer; + + @Transient + private boolean petItemVac = false; + + public ScheduledFuture getKeyDownTimer() { + return keyDownTimer; + } + + public void setKeyDownTimer(ScheduledFuture keyDownTimer) { + this.keyDownTimer = keyDownTimer; + } + + public void cancelKeyDownTimer() { + if (getKeyDownTimer() != null && !getKeyDownTimer().isDone()) { + getKeyDownTimer().cancel(true); + } + } + + public Char() { + this("", 0, 0, 0, (short) 0, 0, (byte) -1, (byte) 0, 0, 0, new int[]{}); + } + + public Char(String name, int keySettingType, int eventNewCharSaleJob, int job, short curSelectedSubJob, int curSelectedRace, + byte gender, byte skin, int face, int hair, int[] items) { + avatarData = new AvatarData(); + avatarData.setAvatarLook(new AvatarLook()); + AvatarLook avatarLook = avatarData.getAvatarLook(); + avatarLook.setGender(gender); + avatarLook.setSkin(skin); + avatarLook.setFace(face); + avatarLook.setHair(hair); + Map hairEquips = new HashMap<>(); + for (int itemId : items) { + Equip equip = ItemData.getEquipDeepCopyFromID(itemId, false); + if (equip != null && ItemConstants.isEquip(itemId)) { + hairEquips.put((byte) ItemConstants.getBodyPartFromItem(itemId, 2), itemId); + if ("Wp".equals(equip.getiSlot())) { + if (!equip.isCash()) { + avatarLook.setWeaponId(itemId); + } else { + avatarLook.setWeaponStickerId(itemId); + } + } + } + } + avatarLook.setHairEquips(hairEquips); + avatarLook.setJob(job); + if (curSelectedRace == 15) { + getAvatarData().setZeroAvatarLook(new AvatarLook()); + AvatarLook BetaAvatarLook = getAvatarData().getZeroAvatarLook(); + BetaAvatarLook.setGender(1); + BetaAvatarLook.setSkin(avatarLook.getSkin()); + BetaAvatarLook.setFace(21290); + BetaAvatarLook.setHair(37623); + BetaAvatarLook.setZeroBetaLook(true); + avatarLook.setWeaponId(1572000); + BetaAvatarLook.setWeaponId(1562000); + BetaAvatarLook.getHairEquips().put((byte) BodyPart.Top.getVal(), 1052606); + BetaAvatarLook.getHairEquips().put((byte) BodyPart.Shoes.getVal(), 1072814); + BetaAvatarLook.getHairEquips().put((byte) BodyPart.Cape.getVal(), 1102552); + } + CharacterStat characterStat = new CharacterStat(name, job); + getAvatarData().setCharacterStat(characterStat); + characterStat.setGender(gender); + characterStat.setSkin(skin); + characterStat.setFace(items.length > 0 ? items[0] : 0); + characterStat.setHair(items.length > 1 ? items[1] : 0); + characterStat.setSubJob(curSelectedSubJob); + ranking = new Ranking(); + pets = new ArrayList<>(); + questManager = new QuestManager(this); + itemPots = new ArrayList<>(); + friendRecords = new ArrayList<>(); + expConsumeItems = new ArrayList<>(); + skills = new HashSet<>(); + temporaryStatManager = new TemporaryStatManager(this); + gachaponManager = new GachaponManager(); + friends = new HashSet<>(); + monsterBookInfo = new MonsterBookInfo(); + potentialMan = new CharacterPotentialMan(this); + familiars = new HashSet<>(); + hyperrockfields = new int[]{ + 999999999, + 999999999, + 999999999, + + 999999999, + 999999999, + 999999999, + + 999999999, + 999999999, + 999999999, + + 999999999, + 999999999, + 999999999, + + 999999999, + }; + towerChairs = new int[6]; + monsterParkCount = 0; + currentDirectionNode = new HashMap<>(); + potentials = new HashSet<>(); + questRecordEx = new HashMap<>(); + funcKeyMaps = new ArrayList<>(); +// monsterBattleMobInfos = new ArrayList<>(); +// monsterBattleLadder = new MonsterBattleLadder(); +// monsterBattleRankInfo = new MonsterBattleRankInfo(); + } + + public static Char getFromDBById(int userId) { + Char chr = (Char) DatabaseManager.getObjFromDB(Char.class, userId); + User user = null; + for (World world : Server.getInstance().getWorlds()) { + user = world.getUserById(chr.getUserId()); + if (user != null) { + // ensures the char is the same instance as the one the server has in its cache + chr = user.getCharById(userId); + break; + } + } + return chr; + } + + public static Char getFromDBByName(String name) { + log.info(String.format("%s: Trying to get Char by name (%s).", LocalDateTime.now(), name)); + // DAO? + Session session = DatabaseManager.getSession(); + Transaction transaction = session.beginTransaction(); + Query query = session.createQuery("FROM Char chr WHERE chr.avatarData.characterStat.name = :name"); + query.setParameter("name", name); + List l = ((org.hibernate.query.Query) query).list(); + Char chr = null; + if (l != null && l.size() > 0) { + chr = (Char) l.get(0); + } + transaction.commit(); + session.close(); + return chr; + } + + public static Char getFromDBByNameAndWorld(String name, int worldId) { + Session session = DatabaseManager.getSession(); + Transaction transaction = session.beginTransaction(); + Query query = session.createQuery("FROM Char chr " + + "WHERE chr.avatarData.characterStat.name = :name AND chr.avatarData.characterStat.worldIdForLog = :world"); + query.setParameter("name", name); + query.setParameter("world", worldId); + List l = ((org.hibernate.query.Query) query).list(); + Char chr = null; + if (l != null && l.size() > 0) { + chr = (Char) l.get(0); + } + transaction.commit(); + session.close(); + return chr; + } + + public AvatarData getAvatarData() { + return avatarData; + } + + public Ranking getRanking() { + return ranking; + } + + public Integer getId() { + return id; + } + + public void setAvatarData(AvatarData avatarData) { + this.avatarData = avatarData; + } + + public void setRanking(Ranking ranking) { + this.ranking = ranking; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getUserId() { + return userId; + } + + public Inventory getEquippedInventory() { + return equippedInventory; + } + + public void addItemToInventory(InvType type, Item item, boolean hasCorrectBagIndex) { + addItemToInventory(type, item, hasCorrectBagIndex, false); + } + + public void addItemToInventory(InvType type, Item item, boolean hasCorrectBagIndex, boolean byPet) { + if (item == null) { + return; + } + Inventory inventory = getInventoryByType(type); + if (inventory == null || inventory.isFull()) { + throw new IllegalStateException("Cannot add item to a full inventory."); + } + ItemInfo ii = ItemData.getItemInfoByID(item.getItemId()); + int quantity = item.getQuantity(); + Item existingItem = inventory.getItemByItemIDAndStackable(item.getItemId()); + boolean rec = false; + if (existingItem != null && existingItem.getInvType().isStackable() && existingItem.getQuantity() < ii.getSlotMax()) { + if (quantity + existingItem.getQuantity() > ii.getSlotMax()) { + quantity = ii.getSlotMax() - existingItem.getQuantity(); + item.setQuantity(item.getQuantity() - quantity); + rec = true; + } + existingItem.addQuantity(quantity); + write(WvsContext.inventoryOperation(!byPet, false, + UpdateQuantity, (short) existingItem.getBagIndex(), (byte) -1, 0, existingItem)); + Item copy = item.deepCopy(); + copy.setQuantity(quantity); + if (rec) { + addItemToInventory(item); + } + } else { + if (!hasCorrectBagIndex) { + item.setBagIndex(inventory.getFirstOpenSlot()); + } + Item itemCopy = null; + if (item.getInvType().isStackable() && ii != null && item.getQuantity() > ii.getSlotMax()) { + itemCopy = item.deepCopy(); + quantity = quantity - ii.getSlotMax(); + itemCopy.setQuantity(quantity); + item.setQuantity(ii.getSlotMax()); + rec = true; + } + inventory.addItem(item); + if (ItemConstants.isArcaneSymbol(item.getItemId())) { + ((Equip) item).initSymbolStats((short) 1, getJob()); + } + write(WvsContext.inventoryOperation(!byPet, false, + Add, (short) item.getBagIndex(), (byte) -1, 0, item)); + if (rec) { + addItemToInventory(itemCopy); + } + } + setBulletIDForAttack(calculateBulletIDForAttack()); + } + + public void addItemToInventory(Item item) { + addItemToInventory(item.getInvType(), item, false); + } + + public void setEquippedInventory(Inventory equippedInventory) { + this.equippedInventory = equippedInventory; + } + + public Inventory getEquipInventory() { + return equipInventory; + } + + public void setEquipInventory(Inventory equipInventory) { + this.equipInventory = equipInventory; + } + + public Inventory getConsumeInventory() { + return consumeInventory; + } + + public void setConsumeInventory(Inventory consumeInventory) { + this.consumeInventory = consumeInventory; + } + + public Inventory getEtcInventory() { + return etcInventory; + } + + public void setEtcInventory(Inventory etcInventory) { + this.etcInventory = etcInventory; + } + + public Inventory getInstallInventory() { + return installInventory; + } + + public void setInstallInventory(Inventory installInventory) { + this.installInventory = installInventory; + } + + public Inventory getCashInventory() { + return cashInventory; + } + + public void setCashInventory(Inventory cashInventory) { + this.cashInventory = cashInventory; + } + + /** + * Encodes this Char's info inside a given {@link OutPacket}, with given info. + * + * @param outPacket The OutPacket this method should encode to. + * @param mask Which info should be encoded. + */ + public void encode(OutPacket outPacket, DBChar mask) { + // CharacterData::Decode + outPacket.encodeLong(mask.get()); + + outPacket.encodeByte(getCombatOrders()); + for (int i = 0; i < GameConstants.MAX_PET_AMOUNT; i++) { + if (i < getPets().size()) { + outPacket.encodeInt(getPets().get(i).getActiveSkillCoolTime()); + } else { + outPacket.encodeInt(-1); + } + } + outPacket.encodeByte(0); // unk, not in kmst + byte sizeByte = 0; + outPacket.encodeByte(sizeByte); + for (int i = 0; i < sizeByte; i++) { + outPacket.encodeInt(0); + } + + int sizee = 0; + outPacket.encodeInt(sizee); + for (int i = 0; i < sizee; i++) { + outPacket.encodeInt(0); // nKey + outPacket.encodeLong(0); // pInfo + } + boolean boolan = false; + outPacket.encodeByte(boolan); // again unsure + if (boolan) { + outPacket.encodeByte(0); + sizee = 0; + outPacket.encodeInt(sizee); + for (int i = 0; i < sizee; i++) { + outPacket.encodeLong(0); + } + for (int i = 0; i < sizee; i++) { + outPacket.encodeLong(0); + } + } + + if (mask.isInMask(DBChar.Character)) { + getAvatarData().getCharacterStat().encode(outPacket); + outPacket.encodeByte(getFriendRecords().size()); + boolean hasBlessingOfFairy = getBlessingOfFairy() != null; + outPacket.encodeByte(hasBlessingOfFairy); + if (hasBlessingOfFairy) { + outPacket.encodeString(getBlessingOfFairy()); + } + boolean hasBlessingOfEmpress = getBlessingOfEmpress() != null; + outPacket.encodeByte(hasBlessingOfEmpress); + if (hasBlessingOfEmpress) { + outPacket.encodeString(getBlessingOfEmpress()); + } + outPacket.encodeByte(false); // ultimate explorer, deprecated + } + if (mask.isInMask(DBChar.Money)) { + outPacket.encodeLong(getMoney()); + } + + if (mask.isInMask(DBChar.ItemSlotConsume) || mask.isInMask(DBChar.ExpConsumeItem)) { + outPacket.encodeInt(getExpConsumeItems().size()); + for (ExpConsumeItem eci : getExpConsumeItems()) { + eci.encode(outPacket); + } + } + if (mask.isInMask(DBChar.ItemSlotConsume) || mask.isInMask(DBChar.ShopBuyLimit)) { + int size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeLong(0); + outPacket.encodeLong(0); + } + } + if (mask.isInMask(DBChar.InventorySize)) { + outPacket.encodeByte(getEquipInventory().getSlots()); + outPacket.encodeByte(getConsumeInventory().getSlots()); + outPacket.encodeByte(getEtcInventory().getSlots()); + outPacket.encodeByte(getInstallInventory().getSlots()); + outPacket.encodeByte(getCashInventory().getSlots()); + } + + if (mask.isInMask(DBChar.EquipExtension)) { + outPacket.encodeFT(FileTime.fromType(FileTime.Type.MAX_TIME)); // extra pendant + } + + if (mask.isInMask(DBChar.ItemSlotEquip)) { + outPacket.encodeByte(0); // ? + List equippedItems = new ArrayList<>(getEquippedInventory().getItems()); + equippedItems.sort(Comparator.comparingInt(Item::getBagIndex)); + // Normal equipped items + for (Item item : equippedItems) { + Equip equip = (Equip) item; + if (item.getBagIndex() > BodyPart.BPBase.getVal() && item.getBagIndex() < BodyPart.BPEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Cash equipped items + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.CBPBase.getVal() && item.getBagIndex() <= BodyPart.CBPEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex() - 100); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Equip inventory + for (Item item : getEquipInventory().getItems()) { + Equip equip = (Equip) item; + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + outPacket.encodeShort(0); + // NonBPEquip::Decode (10 inventory decodes) + // Evan + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.EvanBase.getVal() && item.getBagIndex() < BodyPart.EvanEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Mech + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.MechBase.getVal() && item.getBagIndex() <= BodyPart.MechEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Android + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.APBase.getVal() && item.getBagIndex() <= BodyPart.APEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Angelic Buster + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.DUBase.getVal() && item.getBagIndex() < BodyPart.DUEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Bits + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.BitsBase.getVal() && item.getBagIndex() < BodyPart.BitsEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Zero + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.ZeroBase.getVal() && item.getBagIndex() < BodyPart.ZeroEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Maybe zero beta cash? + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.MBPBase.getVal() && item.getBagIndex() < BodyPart.MBPEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Arcane + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.AFBase.getVal() && item.getBagIndex() < BodyPart.AFEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Totems + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.TotemBase.getVal() && item.getBagIndex() < BodyPart.TotemEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // Haku + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.HakuStart.getVal() && item.getBagIndex() < BodyPart.HakuEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + // VirtualEquipInventory::Decode (Android) + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (item.getBagIndex() >= BodyPart.MechBase.getVal() && item.getBagIndex() < BodyPart.MechEnd.getVal()) { + outPacket.encodeShort(equip.getBagIndex()); + equip.encode(outPacket); + } + } + outPacket.encodeShort(0); + sizee = 0; + outPacket.encodeShort(0); + outPacket.encodeShort(0); +// outPacket.encodeInt(sizee); +// for (int i = 0; i < sizee; i++) { +// outPacket.encodeLong(0); +// // sub_BE9F10 +// outPacket.encodeShort(0); +// outPacket.encodeShort(0); +// outPacket.encodeShort(0); +// outPacket.encodeString(""); +// outPacket.encodeInt(0); +// outPacket.encodeLong(0); +// } + outPacket.encodeShort(0); + outPacket.encodeShort(0); + } + if (mask.isInMask(DBChar.ItemSlotConsume)) { + for (Item item : getConsumeInventory().getItems()) { + outPacket.encodeByte(item.getBagIndex()); + item.encode(outPacket); + } + outPacket.encodeByte(0); + } + if (mask.isInMask(DBChar.ItemSlotInstall)) { + for (Item item : getInstallInventory().getItems()) { + outPacket.encodeByte(item.getBagIndex()); + item.encode(outPacket); + } + outPacket.encodeByte(0); + } + if (mask.isInMask(DBChar.ItemSlotEtc)) { + for (Item item : getEtcInventory().getItems()) { + outPacket.encodeByte(item.getBagIndex()); + item.encode(outPacket); + } + outPacket.encodeByte(0); + } + if (mask.isInMask(DBChar.ItemSlotCash)) { + for (Item item : getCashInventory().getItems()) { + outPacket.encodeByte(item.getBagIndex()); + item.encode(outPacket); + } + outPacket.encodeByte(0); + } + // BagDatas + if (mask.isInMask(DBChar.ItemSlotConsume)) { + // TODO + outPacket.encodeInt(0); + } + if (mask.isInMask(DBChar.ItemSlotInstall)) { + // TODO + outPacket.encodeInt(0); + } + if (mask.isInMask(DBChar.ItemSlotEtc)) { + // TODO + outPacket.encodeInt(0); + } + + // End bagdatas + if (mask.isInMask(DBChar.CoreAura)) { + int val = 0; + outPacket.encodeInt(val); + for (int i = 0; i < val; i++) { + outPacket.encodeInt(0); + outPacket.encodeLong(0); + } + } + // start new 188 + if (mask.isInMask(DBChar.Unk40000000)) { // Something to do with skills + int size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + outPacket.encodeLong(0); // 1st half is id, 2nd half level? + outPacket.encodeLong(0); // time + } + } + // end new 188 + if (mask.isInMask(DBChar.ItemPot)) { + boolean hasItemPot = getItemPots() != null; + outPacket.encodeByte(hasItemPot); + if (hasItemPot) { + for (int i = 0; i < getItemPots().size(); i++) { + getItemPots().get(i).encode(outPacket); + outPacket.encodeByte(i != getItemPots().size() - 1); + } + } + } + + if (mask.isInMask(DBChar.SkillRecord)) { + boolean encodeSkills = getSkills().size() > 0; + outPacket.encodeByte(encodeSkills); + if (encodeSkills) { + Set skills = getSkills(); + outPacket.encodeShort(skills.size()); + for (Skill skill : skills) { + outPacket.encodeInt(skill.getSkillId()); + outPacket.encodeInt(skill.getCurrentLevel()); + outPacket.encodeFT(FileTime.fromType(FileTime.Type.MAX_TIME)); + if (SkillConstants.isSkillNeedMasterLevel(skill.getSkillId())) { + outPacket.encodeInt(skill.getMasterLevel()); + } + } + } else { + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); // nTI + outPacket.encodeInt(0); // sValue + } + short size2 = 0; + outPacket.encodeShort(size2); + for (int i = 0; i < size2; i++) { + outPacket.encodeInt(0); // nTI + } + + short size3 = 0; + outPacket.encodeShort(size3); + for (int i = 0; i < size3; i++) { + outPacket.encodeInt(0); // nTI + outPacket.encodeFT(new FileTime(0)); // pInfo + } + short size4 = 0; + outPacket.encodeShort(size2); + for (int i = 0; i < size2; i++) { + outPacket.encodeInt(0); // nTI + } + + short size5 = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); // nTI + outPacket.encodeInt(0); // sValue + } + short size6 = 0; + outPacket.encodeShort(size2); + for (int i = 0; i < size2; i++) { + outPacket.encodeInt(0); // nTI + } + } + Set linkSkills = getLinkSkills(); + int size = linkSkills.size(); + outPacket.encodeShort(size); + for (LinkSkill linkSkill : linkSkills) { + outPacket.encodeInt(linkSkill.getLinkSkillID()); + outPacket.encodeShort(linkSkill.getLevel() - 1); + } + linkSkills = getAccount().getLinkSkills(); + outPacket.encodeInt(linkSkills.size()); + for (LinkSkill linkSkill : linkSkills) { // sub + outPacket.encodeInt(linkSkill.getOriginID()); + outPacket.encodeInt(linkSkill.getUsingID()); + outPacket.encodeInt(linkSkill.getLinkSkillID()); + outPacket.encodeShort(linkSkill.getLevel()); + outPacket.encodeFT(FileTime.fromType(FileTime.Type.ZERO_TIME)); // ftLastAssigned + } + } + + + if (mask.isInMask(DBChar.SkillCooltime)) { + long curTime = System.currentTimeMillis(); + Map cooltimes = getSkillCoolTimes(); + outPacket.encodeShort(cooltimes.size()); + cooltimes.forEach((key, value) -> { + outPacket.encodeInt(key); // nSkillId + outPacket.encodeInt((int) ((value - curTime) / 1000)); // nSkillCooltime + }); + } + + if (mask.isInMask(DBChar.QuestRecord)) { + // modified/deleted, not completed anyway + boolean removeAllOldEntries = true; + outPacket.encodeByte(removeAllOldEntries); + short size = (short) getQuestManager().getQuestsInProgress().size(); + outPacket.encodeShort(size); + for (Quest quest : getQuestManager().getQuestsInProgress()) { + outPacket.encodeInt(quest.getQRKey()); + outPacket.encodeString(quest.getQRValue()); + } + if (!removeAllOldEntries) { + // blacklisted quests + short size2 = 0; + outPacket.encodeShort(size2); + for (int i = 0; i < size2; i++) { + outPacket.encodeInt(0); // nQRKey + } + } + size = 0; + outPacket.encodeShort(size); + // Not sure what this is for + for (int i = 0; i < size; i++) { + outPacket.encodeString(""); + outPacket.encodeString(""); + } + } + if (mask.isInMask(DBChar.QuestComplete)) { + boolean removeAllOldEntries = true; + outPacket.encodeByte(removeAllOldEntries); + Set completedQuests = getQuestManager().getCompletedQuests(); + outPacket.encodeShort(completedQuests.size()); + for (Quest quest : completedQuests) { + outPacket.encodeInt(quest.getQRKey()); + outPacket.encodeFT(quest.getCompletedTime()); // Timestamp of completion + } + if (!removeAllOldEntries) { + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); // nQRKey? + } + } + } + if (mask.isInMask(DBChar.MinigameRecord)) { + int size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + new MiniGameRecord().encode(outPacket); + } + } + if (mask.isInMask(DBChar.CoupleRecord)) { + int coupleSize = 33; + outPacket.encodeShort(coupleSize); + for (int i = 0; i < coupleSize; i++) { + new CoupleRecord().encode(outPacket); + } + int friendSize = 0; + outPacket.encodeShort(friendSize); + for (int i = 0; i < friendSize; i++) { + new FriendRecord().encode(outPacket); + } + int marriageSize = 0; + outPacket.encodeShort(marriageSize); + for (int i = 0; i < marriageSize; i++) { + new MarriageRecord().encode(outPacket); + } + } + + if (mask.isInMask(DBChar.MapTransfer)) { + for (int i = 0; i < 5; i++) { + outPacket.encodeInt(0xDEADBEED); + } + for (int i = 0; i < 10; i++) { + outPacket.encodeInt(0xDEADBEED); + } + for (int i = 0; i < 13; i++) { + outPacket.encodeInt(0xDEADBEED); + } + for (int i = 0; i < 13; i++) { + outPacket.encodeInt(0xDEADBEED); + } + } + if (mask.isInMask(DBChar.MonsterBookCover)) { + outPacket.encodeInt(getMonsterBookInfo().getCoverID()); + } + if (mask.isInMask(DBChar.MonsterBookCard)) { + boolean isCompleted = false; + outPacket.encodeByte(isCompleted); + if (!isCompleted) { + short size = (short) getMonsterBookInfo().getCards().size(); + outPacket.encodeShort(size); + for (int card : getMonsterBookInfo().getCards()) { + outPacket.encodeShort(card); + outPacket.encodeByte(true); // bEnabled? + } + } else { + outPacket.encodeShort(0); // card list size + short encSize = 0; + outPacket.encodeShort(encSize); + outPacket.encodeArr(new byte[encSize]); + encSize = 0; + outPacket.encodeShort(encSize); + outPacket.encodeArr(new byte[encSize]); + } +// outPacket.encodeInt(getMonsterBookInfo().getSetID()); // removed 196 + } + if (mask.isInMask(DBChar.RedLeafInfo)) { // new 188 + outPacket.encodeInt(-1); + } + if (mask.isInMask(DBChar.QuestCompleteOld)) { // new 188 + // sub_C0D410 + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeShort(0); + } + } + if (mask.isInMask(DBChar.Familiar)) { + outPacket.encodeInt(getFamiliars().size()); + for (Familiar familiar : getFamiliars()) { + familiar.encode(outPacket); + } + } + if (mask.isInMask(DBChar.QuestRecordEx)) { + outPacket.encodeShort(getQuestManager().getEx().size()); + for (Quest quest : getQuestManager().getEx()) { + outPacket.encodeInt(quest.getQRKey()); + outPacket.encodeString(quest.getQRValue()); + } + } + if (mask.isInMask(DBChar.Avatar)) { + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); // sValue + new AvatarLook().encode(outPacket); + } + } + if (mask.isInMask(DBChar.NewYearCard)) { // new 196 + int size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); + outPacket.encodeShort(0); + } + } + boolean bool = false; + outPacket.encodeByte(bool); // new 196 + if (bool && mask.isInMask(DBChar.Unk10000000000)) { + int size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); + outPacket.encodeString(""); + } + } + // New 188 + if (mask.isInMask(DBChar.Unk100000000000)) { + int size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); + outPacket.encodeInt(0); + } + } + // End 188 + if (mask.isInMask(DBChar.WildHunterInfo)) { + if (JobConstants.isWildHunter(getAvatarData().getCharacterStat().getJob())) { + // could make WildHunterInfo an entity for this + QuestManager qm = getQuestManager(); + WildHunterInfo whi = getWildHunterInfo(); + Quest chosenQuest = qm.getQuestById(QuestConstants.WILD_HUNTER_JAGUAR_CHOSEN_ID); + int toID = -1; + if (chosenQuest == null) { + chosenQuest = new Quest(QuestConstants.WILD_HUNTER_JAGUAR_CHOSEN_ID, QuestStatus.Started); + qm.addQuest(chosenQuest); + } else if (Util.isNumber(chosenQuest.getQRValue())) { + toID = Integer.parseInt(chosenQuest.getQRValue()); + } + whi.setIdx((byte) toID); + whi.setRidingType((byte) toID); + chosenQuest.setQrValue("" + toID); + getWildHunterInfo().encode(outPacket); // GW_WildHunterInfo::Decode + } + } + if (mask.isInMask(DBChar.ZeroInfo)) { //v206 + if (JobConstants.isZero(getAvatarData().getCharacterStat().getJob())) { + if (getZeroInfo() == null) { + initZeroInfo(); + } + getZeroInfo().encode(outPacket, this); // ZeroInfo::Decode + } + } + if (mask.isInMask(DBChar.ShopBuyLimit)) { + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + // Encode shop buy limit + + } + } + // new 200 + if (mask.isInMask(DBChar.ActiveDamageSkin)) { + int size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + int size2 = 0; + outPacket.encodeShort(size2); + int val = 0; + outPacket.encodeInt(val); + if (val > 0) { + for (int j = 0; j < size2; j++) { + // sub + outPacket.encodeInt(0); + outPacket.encodeShort(0); + outPacket.encodeInt(0); + outPacket.encodeShort(0); + outPacket.encodeLong(0); + } + } + + } + } + if (mask.isInMask(DBChar.StolenSkills)) { + if (JobConstants.isPhantom(getAvatarData().getCharacterStat().getJob())) { + for (int i = 0; i < 15; i++) { + StolenSkill stolenSkill = getStolenSkillByPosition(i); + outPacket.encodeInt(stolenSkill == null ? 0 : stolenSkill.getSkillid()); + } + } else { + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + + outPacket.encodeInt(0); + outPacket.encodeInt(0); + + outPacket.encodeInt(0); + outPacket.encodeInt(0); + } + } + if (mask.isInMask(DBChar.ChosenSkills)) { + if (JobConstants.isPhantom(getAvatarData().getCharacterStat().getJob())) { + for (int i = 1; i <= 5; i++) { //Shifted by +1 to accomodate the Skill Management Tabs + ChosenSkill chosenSkill = getChosenSkillByPosition(i); + outPacket.encodeInt(chosenSkill == null + ? 0 + : isChosenSkillInStolenSkillList(chosenSkill.getSkillId()) + ? chosenSkill.getSkillId() + : 0 + ); + } + } else { + for (int i = 0; i < 5; i++) { + outPacket.encodeInt(0); + } + } + } + if (mask.isInMask(DBChar.CharacterPotential)) { // Character potential + outPacket.encodeShort(getPotentials().size()); + for (CharacterPotential cp : getPotentials()) { + cp.encode(outPacket); + } + } + if (mask.isInMask(DBChar.SoulCollection)) { + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); // + outPacket.encodeInt(0); // + } + } + sizee = 0; + outPacket.encodeInt(sizee); + for (int i = 0; i < sizee; i++) { + outPacket.encodeString(""); + // sub_73A1A0 + outPacket.encodeInt(0); + outPacket.encodeString(""); + int size = 0; + outPacket.encodeInt(size); + for (int j = 0; j < size; j++) { + outPacket.encodeByte(0); + } + } + outPacket.encodeByte(0); // idk + + if (mask.isInMask(DBChar.Character)) { + outPacket.encodeInt(0); // honor level, deprecated + outPacket.encodeInt(getHonorExp()); // honor exp + } + if (mask.isInMask(DBChar.Unk200000000)) { + boolean shouldIEncodeThis = false; + outPacket.encodeByte(shouldIEncodeThis); + if (shouldIEncodeThis) { + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + short category = 0; + outPacket.encodeShort(category); + short size2 = 0; + outPacket.encodeShort(size2); + for (int i2 = 0; i2 < size2; i2++) { + outPacket.encodeInt(0); // nItemId + outPacket.encodeInt(0); // nCount + } + } + } else { + short size2 = 0; + outPacket.encodeShort(size2); + for (int i2 = 0; i2 < size2; i2++) { + outPacket.encodeShort(1); // nCategory + outPacket.encodeInt(1302000); // nItemId + outPacket.encodeInt(3); // nCount + } + + } + } + if (mask.isInMask(DBChar.ReturnEffectInfo)) { +// getReturnEffectInfo().encode(outPacket); // ReturnEffectInfo::Decode + outPacket.encodeByte(0); + } + if (mask.isInMask(DBChar.DressUpInfo)) { + new DressUpInfo().encode(outPacket); // GW_DressUpInfo::Decode + } + if (mask.isInMask(DBChar.ActiveDamageSkin)) { + outPacket.encodeInt(getDamageSkin().getDamageSkinID()); + outPacket.encodeInt(getPremiumDamageSkin().getDamageSkinID()); + outPacket.encodeLong(0); // ftLastChanged? + outPacket.encodeString(getActiveDamageSkin().getDescription()); + outPacket.encodeInt(getActiveDamageSkin().getDamageSkinID()); + } + if (mask.isInMask(DBChar.CoreInfo)) { + // GW_Core + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeShort(-1); // nPos + // sub + outPacket.encodeInt(-1); // nCoreID + outPacket.encodeInt(-1); // nLeftCount + } + + size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeShort(-1); // nPos + outPacket.encodeInt(-1); // nCoreID + outPacket.encodeInt(-1); // nLeftCount + } + } + if (mask.isInMask(DBChar.FarmPotential)) { + new FarmPotential().encode(outPacket); // FARM_POTENTIAL::Decode + } + if (mask.isInMask(DBChar.FarmUserInfo)) { + new FarmUserInfo().encode(outPacket); // FarmUserInfo::Decode + outPacket.encodeInt(0); + outPacket.encodeInt(0); + } + if (mask.isInMask(DBChar.MemorialCubeInfo)) { + if (getMemorialCubeInfo() != null) { + getMemorialCubeInfo().encode(outPacket); + } else { + new MemorialCubeInfo().encode(outPacket); // MemorialCubeInfo::Decode + } + } + // new 200 + if (mask.isInMask(DBChar.MemorialFlameInfo)) { + outPacket.encodeLong(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + } + if (mask.isInMask(DBChar.LikePoint)) { + new LikePoint().encode(outPacket); + } + if (mask.isInMask(DBChar.RunnerGameRecord)) { + new RunnerGameRecord().encode(outPacket); // RunnerGameRecord::Decode + } + outPacket.encodeInt(0); // no idea where these came from (200) + outPacket.encodeInt(0); + if (mask.isInMask(DBChar.Unk8000000000000)) { // new 196 + int size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(-1); + outPacket.encodeByte(-1); + outPacket.encodeByte(-1); + outPacket.encodeByte(-1); + } + outPacket.encodeInt(-1); + outPacket.encodeLong(-1); + } + short sizeO = 0; // some thing that opens on login? + outPacket.encodeShort(sizeO); + for (int i = 0; i < sizeO; i++) { + outPacket.encodeInt(i); + outPacket.encodeString("Effect/Direction11.img/effect/meet/frame0/0"); + } + if (mask.isInMask(DBChar.MonsterCollection)) { + Set mces = getAccount().getMonsterCollection().getMonsterCollectionExplorations(); + outPacket.encodeShort(mces.size()); + for (MonsterCollectionExploration mce : mces) { + outPacket.encodeInt(mce.getPosition()); + outPacket.encodeString(mce.getValue(true)); + } + } + boolean farmOnline = false; + outPacket.encodeByte(farmOnline); + int sizeInt = 0; + // CharacterData::DecodeTextEquipInfo + outPacket.encodeInt(sizeInt); + for (int i = 0; i < sizeInt; i++) { + outPacket.encodeInt(0); + outPacket.encodeString(""); + } + if (mask.isInMask(DBChar.Unk10000000000000)) { // new 196 + int size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); + outPacket.encodeInt(0); + } + } + if (mask.isInMask(DBChar.VMatrix)) { // new 188 + List matrixRecords = getSortedMatrixRecords(); + outPacket.encodeInt(matrixRecords.size()); + for (MatrixRecord mr : matrixRecords) { + outPacket.encode(mr); + } + // next part is 196 + + List activeRecords = matrixRecords.stream().filter(MatrixRecord::isActive).collect(Collectors.toList()); + outPacket.encodeInt(activeRecords.size()); + for (MatrixRecord mr : activeRecords) { + outPacket.encodeInt(matrixRecords.indexOf(mr)); + outPacket.encodeInt(mr.getPosition()); // slotPos + outPacket.encodeInt(0); // nLevel + outPacket.encodeByte(0); // bHide + } + } + if (mask.isInMask(DBChar.Achievement)) { // new 188 + outPacket.encodeInt(20); + outPacket.encodeInt(21); + + // sub + outPacket.encodeInt(22); + outPacket.encodeInt(23); + outPacket.encodeInt(24); + outPacket.encodeLong(1379001); + + outPacket.encodeLong(1379001); + outPacket.encodeLong(27); + int size = 1; + outPacket.encodeInt(size + 1); + // achievements + // iter 1, just to open the UI + outPacket.encodeLong(1); // id? + outPacket.encodeInt(1); // achievement id + outPacket.encodeByte(-1); + outPacket.encodeByte(2); + outPacket.encodeFT(FileTime.currentTime()); + outPacket.encodeString(""); + // iter 2 + for (int i = 0; i < size; i++) { + outPacket.encodeLong(563003); // id 3 digit, sub-mission 3 digit + outPacket.encodeInt(563); // achievement id + outPacket.encodeByte(1); // sub-mission + outPacket.encodeByte(2); // achievement state + outPacket.encodeFT(FileTime.currentTime()); // ftCompleteTime + outPacket.encodeString("rune_stone_use_result_success=1"); + } + size = 1; + outPacket.encodeInt(size); + // medals + for (int i = 0; i < size; i++) { + outPacket.encodeInt(2); // id + outPacket.encodeInt(6); // num + outPacket.encodeByte(1); // state (0 = not unlocked, 1 = achieved, 2 = current selected for insignia) + outPacket.encodeFT(FileTime.currentTime()); // unlock time + } + } + if (mask.isInMask(DBChar.ItemSlotEtc)) { // new 196 + int size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + outPacket.encodeLong(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeLong(0); + + } + } + // new 203 + if (mask.isInMask(DBChar.Unk200000000000000)) { + outPacket.encodeByte(0); + outPacket.encodeByte(0); + // hardcoded 5 + for (int i = 0; i < 5; i++) { + bool = false; + outPacket.encodeByte(bool); + if (bool) { + outPacket.encodeByte(0); + outPacket.encodeByte(0); + + outPacket.encodeInt(0); + + outPacket.encodeByte(0); + outPacket.encodeByte(0); + outPacket.encodeByte(0); + + } + } + } + if (mask.isInMask(DBChar.Unk8000000000000000)) { + bool = false; + outPacket.encodeByte(false); + if (bool) { + // sub_905BD0 + outPacket.encodeByte(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeLong(0); + } + int size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + // sub_9059E0 + outPacket.encodeByte(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + } + size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + // sub_905D50 + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeLong(0); + } + } + if (mask.isInMask(DBChar.Unk800000000000)) { + outPacket.encodeByte(0); + } + + if (mask.isInMask(DBChar.Unk400000)) { + int size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + // sub + outPacket.encodeShort(0); + outPacket.encodeShort(0); + } + size = 0; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + // sub + outPacket.encodeShort(0); + outPacket.encodeInt(0); + } + } + if (mask.isInMask(DBChar.Unk1000000000000000)) { + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + + for (int i = 0; i < 6; i++) { + outPacket.encodeInt(0); + } + + for (int i = 0; i < 4; i++) { + outPacket.encodeInt(0); + } + + outPacket.encodeLong(0); + outPacket.encodeByte(0); + + outPacket.encodeByte(0); + } + + if (mask.isInMask(DBChar.MemorialFlameInfo)) { + short size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + outPacket.encodeShort(233); + outPacket.encodeShort(543); + } + } + + if (mask.isInMask(DBChar.RedLeafInfo)) { + // red leaf information + outPacket.encodeInt(getUserId()); + outPacket.encodeInt(getId()); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeArr(new byte[32]); // red leaf info structure probably + } + // new 188 all the way from here until the end of the function + if (mask.isInMask(DBChar.Unk20000000000)) { + bool = false; + outPacket.encodeByte(bool); + if (bool) { + new AvatarLook().encode(outPacket); + } + } + if (mask.isInMask(DBChar.ActiveDamageSkin)) { + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + int size = 0; + outPacket.encodeShort(size); + for (int i = 0; i < size; i++) { + // sub_8EE8D0 + outPacket.encodeInt(13713); + outPacket.encodeInt(12381); + outPacket.encodeString("aaaaa", 13); + outPacket.encodeInt(3333); + } + size = 0; + outPacket.encodeShort(0); + for (int i = 0; i < size; i++) { + // sub_8EE8D0 + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeString("", 13); + outPacket.encodeInt(0); + } + } + } + + + public void dropItem(int itemId, int x, int y) { + Field field = getField(); + Drop drop = new Drop(field.getNewObjectID()); + drop.setItem(ItemData.getItemDeepCopy(itemId)); + Position position = new Position(x, y); + drop.setPosition(position); + field.drop(drop, position, true); + } + + public void dropItemMany(int itemId, int count, int x, int y) { + Field field = getField(); + Drop drop = new Drop(field.getNewObjectID()); + Item item = ItemData.getItemDeepCopy(itemId); + item.setQuantity(count); + drop.setItem(item); + Position position = new Position(x, y); + drop.setPosition(position); + field.drop(drop, position, true); + } + + public List getSortedMatrixRecords() { + return getMatrixRecords().stream() + .sorted(Comparator.comparingLong(MatrixRecord::getId)) + .collect(Collectors.toList()); + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof Char)) { + return false; + } + Char chr = (Char) other; + return chr.getId() == getId() && chr.getName().equals(getName()); + } + + public BeautyAlbum getStyleBySlotId(int slotId) { + return getBeautyAlbum().stream().filter(style -> style.getSlotID() == slotId).findFirst().orElse(null); + } + + + public void addStyleToBeautyAlbum(BeautyAlbum beautyAlbum) { + getBeautyAlbum().add(beautyAlbum); + } + + public void removeStyleToBeautyAlbum(BeautyAlbum beautyAlbum) { + getBeautyAlbum().remove(beautyAlbum); + } + + public List getBeautyAlbum() { + return beautyAlbum; + } + + @Override + public int hashCode() { + return Objects.hash(id, getName()); + } + + private String getBlessingOfEmpress() { + return blessingOfEmpress; + } + + public void setBlessingOfEmpress(String blessingOfEmpress) { + this.blessingOfEmpress = blessingOfEmpress; + } + + private String getBlessingOfFairy() { + return blessingOfFairy; + } + + public void setBlessingOfFairy(String blessingOfFairy) { + this.blessingOfFairy = blessingOfFairy; + } + + public void setCombatOrders(int combatOrders) { + this.combatOrders = combatOrders; + } + + public int getCombatOrders() { + return combatOrders; + } + + public QuestManager getQuestManager() { + if (questManager.getChr() == null) { + questManager.setChr(this); + } + return questManager; + } + + public void setQuests(QuestManager questManager) { + this.questManager = questManager; + } + + public List getItemPots() { + return null; + } + + public void setItemPots(List itemPots) { + this.itemPots = itemPots; + } + + public List getPets() { + return pets; + } + + public void setPets(List pets) { + this.pets = pets; + } + + public List getFriendRecords() { + return friendRecords; + } + + public void setFriendRecords(List friendRecords) { + this.friendRecords = friendRecords; + } + + public long getMoney() { + return getAvatarData().getCharacterStat().getMoney(); + } + + public List getExpConsumeItems() { + return expConsumeItems; + } + + public void setExpConsumeItems(List expConsumeItems) { + this.expConsumeItems = expConsumeItems; + } + + public List getMonsterBattleMobInfos() { + return monsterBattleMobInfos; + } + + public void setMonsterBattleMobInfos(List monsterBattleMobInfos) { + this.monsterBattleMobInfos = monsterBattleMobInfos; + } + + public MonsterBattleLadder getMonsterBattleLadder() { + return monsterBattleLadder; + } + + public void setMonsterBattleLadder(MonsterBattleLadder monsterBattleLadder) { + this.monsterBattleLadder = monsterBattleLadder; + } + + public MonsterBattleRankInfo getMonsterBattleRankInfo() { + return monsterBattleRankInfo; + } + + public void setMonsterBattleRankInfo(MonsterBattleRankInfo monsterBattleRankInfo) { + this.monsterBattleRankInfo = monsterBattleRankInfo; + } + + public List getInventories() { + return new ArrayList<>(Arrays.asList(getEquippedInventory(), getEquipInventory(), + getConsumeInventory(), getEtcInventory(), getInstallInventory(), getCashInventory())); + } + + public Inventory getInventoryByType(InvType invType) { + switch (invType) { + case EQUIPPED: + return getEquippedInventory(); + case EQUIP: + return getEquipInventory(); + case CONSUME: + return getConsumeInventory(); + case ETC: + return getEtcInventory(); + case INSTALL: + return getInstallInventory(); + case CASH: + return getCashInventory(); + case HAIR: + return getHairInventory(); + case FACE: + return getFaceInventory(); + default: + return null; + } + } + + public Client getClient() { + return client; + } + + public void setClient(Client client) { + this.client = client; + } + + public int getFieldID() { + return (int) getAvatarData().getCharacterStat().getPosMap(); + } + + public void setFieldID(int fieldID) { + getAvatarData().getCharacterStat().setPosMap(fieldID); + } + + + + public Position getPosition() { + return position; + } + + public void setPosition(Position position) { + this.position = position; + } + + public void setField(Field field) { + this.field = field; + setFieldID(field.getId()); + } + + public Field getField() { + return field; + } + + /** + * Sets the job of this Char with a given id. Does nothing if the id is invalid. + * If it is valid, will set this Char's job, add all Skills that the job should have by default, + * and sends the info to the client. + * + * @param id + */ + public void setJob(int id) { + JobConstants.JobEnum job = JobConstants.JobEnum.getJobById((short) id); + if (job == null) { + return; + } + getAvatarData().getCharacterStat().setJob(id); + Job handler = JobManager.getJobById((short) id, this); + if (!handler.getClass().equals(getJobHandler().getClass())) { + // only change handlers if the job path changes + setJobHandler(handler); + } + List skills = SkillData.getSkillsByJob((short) id); + skills.forEach(s -> addSkill(s, true)); + getClient().write(WvsContext.changeSkillRecordResult(skills, true, false, false, false)); + notifyChanges(); + if (id == JobConstants.JobEnum.EVAN_1.getJobId() || id == JobConstants.JobEnum.EVAN_2.getJobId() || id == JobConstants.JobEnum.EVAN_3.getJobId() || id == JobConstants.JobEnum.EVAN_4.getJobId()) { + getField().broadcastPacket(DragonPool.createDragon(getDragon())); + } + } + + public short getJob() { + return getAvatarData().getCharacterStat().getJob(); + } + + /** + * Sets the SP to the current job level. + * + * @param num The new SP amount. + */ + public void setSpToCurrentJob(int num) { + if (JobConstants.isExtendSpJob(getJob())) { + byte jobLevel = (byte) JobConstants.getJobLevel(getJob()); + getAvatarData().getCharacterStat().getExtendSP().setSpToJobLevel(jobLevel, num); + } else { + getAvatarData().getCharacterStat().setSp(num); + } + } + + /** + * Sets the SP to the job level according to the current level. + * + * @param num The amount of SP to add + */ + public void addSpToJobByCurrentLevel(int num) { + CharacterStat cs = getAvatarData().getCharacterStat(); + if (JobConstants.isExtendSpJob(getJob())) { + byte jobLevel = (byte) JobConstants.getJobLevelByCharLevel(getJob(), getLevel()); + num += cs.getExtendSP().getSpByJobLevel(jobLevel); + getAvatarData().getCharacterStat().getExtendSP().setSpToJobLevel(jobLevel, num); + } else { + num += cs.getSp(); + getAvatarData().getCharacterStat().setSp(num); + } + } + + public void addSpToJobByCurrentJob(int num) { + byte jobLevel = (byte) JobConstants.getJobLevel(getJob()); + int currentSP = getAvatarData().getCharacterStat().getExtendSP().getSpByJobLevel(jobLevel); + setSpToCurrentJob(currentSP + num); + + Map stats = new HashMap<>(); + stats.put(Stat.sp, getAvatarData().getCharacterStat().getExtendSP()); + write(WvsContext.statChanged(stats)); + } + + public Set getSkills() { + return skills; + } + + public void setSkills(Set skills) { + this.skills = skills; + } + + /** + * Adds a {@link Skill} to this Char. Changes the old Skill if the Char already has a Skill + * with the same id. Removes the skill if the given skill's id is 0. + * + * @param skill The Skill this Char should get. + */ + public void addSkill(Skill skill) { + addSkill(skill, false); + } + + /** + * Adds a {@link Skill} to this Char. Changes the old Skill if the Char already has a Skill + * with the same id. Removes the skill if the given skill's id is 0. + * + * @param skill The Skill this Char should get. + * @param addRegardlessOfLevel if this is true, the skill will not be removed from the char, even if the cur level + * of the given skill is 0. + */ + public void addSkill(Skill skill, boolean addRegardlessOfLevel) { + if (getId() == 0) { + log.warn("Did not add skill " + skill + ", as the current Char does not exist in the DB."); + return; + } + if (!addRegardlessOfLevel && skill.getCurrentLevel() == 0) { + removeSkill(skill.getSkillId()); + return; + } + skill.setCharId(getId()); + boolean isPassive = SkillConstants.isPassiveSkill(skill.getSkillId()); + boolean isChanged; + if (getSkills().stream().noneMatch(s -> s.getSkillId() == skill.getSkillId())) { + getSkills().add(skill); + isChanged = true; + } else { + Skill oldSkill = getSkill(skill.getSkillId()); + isChanged = oldSkill.getCurrentLevel() != skill.getCurrentLevel(); + if (isPassive && isChanged) { + removeFromBaseStatCache(oldSkill); + } + oldSkill.setCurrentLevel(skill.getCurrentLevel()); + oldSkill.setMasterLevel(skill.getMasterLevel()); + } + // Change cache accordingly + if (isPassive && isChanged) { + addToBaseStatCache(skill); + } + } + + /** + * Removes a Skill from this Char. + * + * @param skillID the id of the skill that should be removed + */ + public void removeSkill(int skillID) { + Skill skill = Util.findWithPred(getSkills(), s -> s.getSkillId() == skillID); + if (skill != null) { + if (SkillConstants.isPassiveSkill(skillID)) { + removeFromBaseStatCache(skill); + } + getSkills().remove(skill); + } + checkPsdWTBonuses(); + } + + /** + * Removes a Skill from this Char. + * Sends change skill record to remove the skill from the client. + * + * @param skillID the id of the skill that should be removed + */ + public void removeSkillAndSendPacket(int skillID) { + Skill skill = getSkill(skillID); + if (skill != null) { + removeSkill(skillID); + skill.setCurrentLevel(-1); + skill.setMasterLevel(-1); + write(WvsContext.changeSkillRecordResult(Collections.singletonList(skill), true, false, false, false)); + } + } + + /** + * Initializes the BaseStat cache, by going through all the needed passive stat changers. + */ + public void initBaseStats() { + getBaseStats().clear(); + Map stats = getBaseStats(); + stats.put(BaseStat.cr, 5L); + stats.put(BaseStat.crDmg, 0L); + stats.put(BaseStat.pdd, 9L); + stats.put(BaseStat.mdd, 9L); + stats.put(BaseStat.acc, 11L); + stats.put(BaseStat.eva, 8L); + stats.put(BaseStat.buffTimeR, 100L); + stats.put(BaseStat.dropR, 100L); + stats.put(BaseStat.mesoR, 100L); + stats.put(BaseStat.costmpR, 100L); + getSkills().stream().filter(skill -> SkillConstants.isPassiveSkill_NoPsdSkillsCheck(skill.getSkillId())). + forEach(this::addToBaseStatCache); + checkPsdWTBonuses(); + } + + /** + * Adds a Skill's info to the current base stat cache. + * + * @param skill The skill to add + */ + public void addToBaseStatCache(Skill skill) { + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); +// chatMessage("[addToBaseStat] id: %s", Integer.toString(si.getSkillId())); + if (SkillConstants.isPassiveSkill(skill.getSkillId())) { + Map stats = si.getBaseStatValues(this, skill.getCurrentLevel()); + stats.forEach(this::addBaseStat); + } + if (si.isPsd() && si.getSkillStatInfo().containsKey(SkillStat.coolTimeR)) { + for (int psdSkill : si.getPsdSkills()) { + getHyperPsdSkillsCooltimeR().put(psdSkill, si.getValue(SkillStat.coolTimeR, 1)); + } + } + checkPsdWTBonuses(); + } + + /** + * Adds the bonus for the specified WeaponType of the psdWT Skill. + * + * @param skill The skill's bonuses to add + * @param wt The skill's weapon Type bonuses to check for. + */ + public void addPsdWTToBaseStatCache(Skill skill, WeaponType wt) { + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); + Map ssMap = si.getSkillStatsByWT(wt); + Map stats = new HashMap<>(); + ssMap.forEach((k, v) -> { + { + Tuple bs = si.getBaseStatValue(k, this, v.intValue()); + stats.put(bs.getLeft(), bs.getRight()); + } + }); + stats.forEach(this::addBaseStat); + } + + /** + * Removes a Skill's info from the current base stat cache. + * + * @param skill The skill to remove + */ + public void removeFromBaseStatCache(Skill skill) { + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); + Map stats = si.getBaseStatValues(this, skill.getCurrentLevel()); + stats.forEach(this::removeBaseStat); + } + + /** + * Removes all bonuses from every Weapon Type in psdWT skills + * + * @param skill + */ + public void removePsdWTFromBaseStatCache(Skill skill) { + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); + Map stats = new HashMap<>(); + + for (Map.Entry entry : si.getSkillStatsByWT(getPsdWTBonus().get(skill)).entrySet()) { + SkillStat ss = entry.getKey(); + int value = entry.getValue().intValue(); + Tuple bs = si.getBaseStatValue(ss, this, value); + stats.put(bs.getLeft(), bs.getRight()); + } + stats.forEach(this::removeBaseStat); + } + + /** + * Returns whether or not this Char has a {@link Skill} with a given id. + * + * @param id The id of the Skill. + * @return Whether or not this Char has a Skill with the given id. + */ + public boolean hasSkill(int id) { + return getSkills().stream().anyMatch(s -> s.getSkillId() == id) && getSkill(id, false).getCurrentLevel() > 0; + } + + public void checkPsdWTBonuses() { + Equip weapon = (Equip) getEquippedInventory().getItemBySlot(BodyPart.Weapon.getVal()); + // Not wearing a weapon + if (weapon == null) { + for (Skill psdWTSkill : getPsdWTSkills()) { + SkillInfo si = SkillData.getSkillInfoById(psdWTSkill.getSkillId()); + if (si == null) { + continue; + } + if (getPsdWTBonus().containsKey(psdWTSkill)) { + removePsdWTFromBaseStatCache(psdWTSkill); + getPsdWTBonus().remove(psdWTSkill); + } + } + return; + } + WeaponType wt = ItemConstants.getWeaponType(weapon.getItemId()); + for (Skill psdWTSkill : getPsdWTSkills()) { + SkillInfo si = SkillData.getSkillInfoById(psdWTSkill.getSkillId()); + if (si == null) { + continue; + } + + // if chr already has the bonus from skill&WT + if (getPsdWTBonus().containsKey(psdWTSkill) && getPsdWTBonus().get(psdWTSkill).equals(wt)) { + continue; + } + + if (getPsdWTBonus().containsKey(psdWTSkill)) { + // given chr already has the bonus + removePsdWTFromBaseStatCache(psdWTSkill); + getPsdWTBonus().remove(psdWTSkill); + } + if (!getPsdWTBonus().containsKey(psdWTSkill) || !getPsdWTBonus().get(psdWTSkill).equals(wt)) { + // given chr does not have the bonus from that skill, or does not have the bonus from that weaponType + addPsdWTToBaseStatCache(psdWTSkill, wt); + getPsdWTBonus().put(psdWTSkill, wt); + } + } + + // Check if user gains a bonus from a removed Skill, if so remove the bonus + getPsdWTBonus().keySet().stream().filter(s -> !hasSkill(s.getSkillId())).forEach(this::removePsdWTFromBaseStatCache); + getPsdWTBonus().keySet().removeIf(s -> !hasSkill(s.getSkillId())); + } + + public List getPsdWTSkills() { + return getSkills().stream().filter(s -> SkillData.getSkillInfoById(s.getSkillId()) != null && SkillData.getSkillInfoById(s.getSkillId()).isPsdWTSkill()).collect(Collectors.toList()); + } + + public Map getPsdWTBonus() { + return psdWTBonus; + } + + public void setPsdWTBonus(Map psdWTBonus) { + this.psdWTBonus = psdWTBonus; + } + + /** + * Gets a {@link Skill} of this Char with a given id. + * + * @param id The id of the requested Skill. + * @return The Skill corresponding to the given id of this Char, or null if there is none. + */ + public Skill getSkill(int id) { + // TODO: grab original if it's a "linked skill", like WH's 2 different Wild Arrow Blast + return getSkill(id, false); + } + + /** + * Gets a {@link Skill} with a given ID. If createIfNull is true, creates the Skill + * if it doesn't exist yet. + * If it is false, will return null if this Char does not have the given Skill. + * + * @param id The id of the requested Skill. + * @param createIfNull Whether or not this method should create the Skill if it doesn't exist. + * @return The Skill that the Char has, or null if there is no such skill and + * createIfNull is false. + */ + public Skill getSkill(int id, boolean createIfNull) { + for (Skill s : getSkills()) { + if (s.getSkillId() == id) { + return s; + } + } + return createIfNull ? createAndReturnSkill(id) : null; + } + + public void encodeChat(OutPacket outPacket, String msg) { + outPacket.encodeString(getName()); + outPacket.encodeString(msg); + outPacket.encodeInt(0); + outPacket.encodeShort(0); + outPacket.encodeByte(0); + outPacket.encodeByte(0); + outPacket.encodeByte(0); + outPacket.encodeInt(getId()); + } + + + public int getSkillLevel(int skillID) { + Skill skill = getSkill(skillID); + if (skill != null) { + return skill.getCurrentLevel(); + } + return 0; + } + + /** + * Gets the given SkillStat's Value. + * + * @param skillStat SkillStat to get the value from. + * @param skillId Specified skillId to grab the SkillInfo from. + * @return value of the given SkillStat of the given Skill Id + */ + public int getSkillStatValue(SkillStat skillStat, int skillId) { + if (hasSkill(skillId)) { + SkillInfo si = SkillData.getSkillInfoById(skillId); + return si.getValue(skillStat, getSkillLevel(skillId)); + } + return 0; + } + + public int getRemainRecipeUseCount(int recipeID) { + if (SkillConstants.isMakingSkillRecipe(recipeID)) { + return getSkillLevel(recipeID); + } + return 0; + } + + /** + * Creates a new {@link Skill} for this Char. + * + * @param id The skillID of the Skill to be created. + * @return The new Skill. + */ + private Skill createAndReturnSkill(int id) { + Skill skill = SkillData.getSkillDeepCopyById(id); + addSkill(skill); + return skill; + } + + public void setStat(Stat charStat, int amount) { + CharacterStat cs = getAvatarData().getCharacterStat(); + switch (charStat) { + case str: + cs.setStr(amount); + break; + case dex: + cs.setDex(amount); + break; + case inte: + cs.setInt(amount); + break; + case luk: + cs.setLuk(amount); + break; + case hp: + cs.setHp(amount); + break; + case mhp: + cs.setMaxHp(amount); + if (JobConstants.isDemonAvenger(getJob())) { + ((DemonAvenger) getJobHandler()).sendHpUpdate(); + } + break; + case mp: + cs.setMp(amount); + break; + case mmp: + cs.setMaxMp(amount); + break; + case ap: + cs.setAp(amount); + break; + case level: + cs.setLevel(amount); + notifyChanges(); + break; + case skin: + cs.setSkin(amount); + break; + case face: + cs.setFace(amount); + break; + case hair: + cs.setHair(amount); + break; + case pop: + cs.setPop(amount); + break; + case charismaEXP: + cs.setCharismaExp(amount); + break; + case charmEXP: + cs.setCharmExp(amount); + break; + case craftEXP: + cs.setCraftExp(amount); + break; + case insightEXP: + cs.setInsightExp(amount); + break; + case senseEXP: + cs.setSenseExp(amount); + break; + case willEXP: + cs.setWillExp(amount); + break; + case fatigue: + cs.setFatigue(amount); + break; + } + } + + public void updatePartyHP() { + Party party = getParty(); + if (party != null) { + for (PartyMember pm : party.getOnlineMembers()) { + if (pm != null) { + Char pmChr = pm.getChr(); + if (pmChr.getId() != getId() && pmChr.getClient().getChannel() == getClient().getChannel() && pm.getChr().getFieldID() == getFieldID()) { + pmChr.write(UserRemote.receiveHP(this)); + } + } + } + } + } + + public void receivePartyHP() { + Party party = getParty(); + if (party != null) { + for (PartyMember pm : party.getOnlineMembers()) { + Char pmChr = pm.getChr(); + if (pmChr.getId() != getId() && pmChr.getClient().getChannel() == getClient().getChannel() && pm.getChr().getFieldID() == getFieldID()) { + write(UserRemote.receiveHP(pmChr)); + } + } + } + } + + /** + * Notifies all groups (such as party, guild) about all your changes, such as level and job. + */ + private void notifyChanges() { + Party party = getParty(); + if (party != null) { + party.updatePartyMemberInfoByChr(this); + party.broadcast(WvsContext.partyResult(PartyResult.userMigration(party))); + updatePartyHP(); + receivePartyHP(); + } + Guild guild = getGuild(); + if (guild != null) { + GuildMember gm = guild.getMemberByCharID(getId()); + if (gm != null) { + gm.setLevel(getLevel()); + gm.setJob(getJob()); + guild.broadcast(WvsContext.guildResult(GuildResult.changeLevelOrJob(guild, gm))); + Alliance ally = guild.getAlliance(); + if (ally != null) { + ally.broadcast(WvsContext.allianceResult(AllianceResult.changeLevelOrJob(ally, guild, gm))); + } + } + } + } + + /** + * Gets a raw Stat from this Char, unaffected by things such as equips and skills. + * + * @param charStat The requested Stat + * @return the requested stat's value + */ + public int getStat(Stat charStat) { + CharacterStat cs = getAvatarData().getCharacterStat(); + switch (charStat) { + case str: + return cs.getStr(); + case dex: + return cs.getDex(); + case inte: + return cs.getInt(); + case luk: + return cs.getLuk(); + case hp: + return cs.getHp(); + case mhp: + return cs.getMaxHp(); + case mp: + return cs.getMp(); + case mmp: + return cs.getMaxMp(); + case ap: + return cs.getAp(); + case level: + return cs.getLevel(); + case skin: + return cs.getSkin(); + case face: + return cs.getFace(); + case hair: + return cs.getHair(); + case pop: + return cs.getPop(); + case charismaEXP: + return cs.getCharismaExp(); + case charmEXP: + return cs.getCharmExp(); + case craftEXP: + return cs.getCraftExp(); + case insightEXP: + return cs.getInsightExp(); + case senseEXP: + return cs.getSenseExp(); + case willEXP: + return cs.getWillExp(); + case fatigue: + return cs.getFatigue(); + case job: + return cs.getJob(); + } + return -1; + } + + /** + * Adds a Stat to this Char. + * + * @param charStat which Stat to add + * @param amount the amount of Stat to add + */ + public void addStat(Stat charStat, int amount) { + setStat(charStat, getStat(charStat) + amount); + } + + /** + * Adds a Stat to this Char, and immediately sends the packet to the client notifying the change. + * + * @param charStat which Stat to change + * @param amount the amount of Stat to add + */ + public void addStatAndSendPacket(Stat charStat, int amount) { + setStatAndSendPacket(charStat, getStat(charStat) + amount); + } + + /** + * Adds a Stat to this Char, and immediately sends the packet to the client notifying the change. + * + * @param charStat which Stat to change + * @param value the value of Stat to set + */ + public void setStatAndSendPacket(Stat charStat, int value) { + setStat(charStat, value); + Map stats = new HashMap<>(); + switch (charStat) { + case skin: + case fatigue: + stats.put(charStat, (byte) getStat(charStat)); + break; + case str: + case dex: + case inte: + case luk: + case ap: + case job: + stats.put(charStat, (short) getStat(charStat)); + break; + case hp: + case mhp: + case mp: + case mmp: + case face: + case hair: + case pop: + case charismaEXP: + case insightEXP: + case willEXP: + case craftEXP: + case senseEXP: + case charmEXP: + case eventPoints: + case level: + stats.put(charStat, getStat(charStat)); + break; + } + write(WvsContext.statChanged(stats, getSubJob())); + } + + /** + * Adds a certain amount of money to the current character. Also sends the + * packet to update the client's state. + * + * @param amount The amount of money to add. May be negative. + */ + public void addMoney(long amount) { + addMoney(amount, (byte) 0); + } + + public void addMoney(long amount, int exclRequest) { + CharacterStat cs = getAvatarData().getCharacterStat(); + long money = cs.getMoney(); + long newMoney = money + amount; + if (newMoney >= 0) { + newMoney = Math.min(GameConstants.MAX_MONEY, newMoney); + Map stats = new HashMap<>(); + cs.setMoney(newMoney); + stats.put(Stat.money, newMoney); + write(WvsContext.statChanged(stats, (byte) exclRequest)); + } + } + + + /** + * The same as addMoney, but negates the amount. + * + * @param amount The money to deduct. May be negative. + */ + public void deductMoney(long amount) { + addMoney(-amount); + } + + public Position getOldPosition() { + return oldPosition; + } + + public void setOldPosition(Position oldPosition) { + this.oldPosition = oldPosition; + } + + public void setMoveAction(byte moveAction) { + this.moveAction = moveAction; + } + + public byte getMoveAction() { + return moveAction; + } + + /** + * Sends a message to this Char through the ScriptProgress packet. + * + * @param msg The message to display. + */ + public void chatScriptMessage(String msg) { + write(UserPacket.scriptProgressMessage(msg)); + } + + /** + * Sends a message to this Char with a default colour {@link ChatType#SystemNotice}. + * + * @param msg The message to display. + */ + public void chatMessage(String msg) { + chatMessage(SystemNotice, msg); + } + + /** + * Sends a formatted message to this Char with a default color {@link ChatType#SystemNotice}. + * + * @param msg The message to display + * @param args The format arguments + */ + public void chatMessage(String msg, Object... args) { + chatMessage(SystemNotice, msg, args); + } + + /** + * Sends a message to this Char with a given {@link ChatType colour}. + * + * @param clr The Colour this message should be in. + * @param msg The message to display. + */ + public void chatMessage(ChatType clr, String msg) { + if (isDebugMode() || clr != ChatType.Mob) { + // As most debug info is printed in ChatType Mob, + // this is a hacky way to turn 'debug' mode on/off + write(UserLocal.chatMsg(clr, msg)); + } + } + + /** + * Sends a formatted message to this Char with a given {@link ChatType colour}. + * + * @param clr The Colour this message should be in. + * @param msg The message to display. + * @param args The format arguments + */ + public void chatMessage(ChatType clr, String msg, Object... args) { + if (isDebugMode() || clr != ChatType.Mob) { + // As most debug info is printed in ChatType Mob, + // this is a hacky way to turn 'debug' mode on/off + write(UserLocal.chatMsg(clr, String.format(msg, args))); + } + } + + + /** + * Unequips an {@link Item}. Ensures that the hairEquips and both inventories get updated. + * + * @param item The Item to equip. + */ + public void unequip(Item item) { + Equip equip = (Equip) item; + Inventory inv = getEquippedInventory(); + AvatarLook al = getAvatarData().getAvatarLook(); + int itemID = equip.getAnvilId() == 0 ? item.getItemId() : equip.getAnvilId(); + getInventoryByType(EQUIPPED).removeItem(item); + getInventoryByType(EQUIP).addItem(item); + int pos = item.getBagIndex(); + if (pos > BodyPart.BPBase.getVal() && pos < BodyPart.CBPEnd.getVal()) { + boolean isCash = item.isCash(); + Equip overrideItem; + // get corresponding cash item + if (isCash) { + overrideItem = (Equip) inv.getItemBySlot(pos - 100); + } else { + overrideItem = (Equip) inv.getItemBySlot(pos + 100); + } + int overrideItemId = overrideItem == null ? -1 : + overrideItem.getAnvilId() == 0 ? overrideItem.getItemId() : overrideItem.getAnvilId(); + al.removeItem((byte) pos, itemID, overrideItemId, isCash); + } else if (pos >= BodyPart.TotemBase.getVal() && pos < BodyPart.TotemEnd.getVal()) { + al.removeItem((byte) (pos - 5000), itemID, -1, false); + } + byte maskValue = AvatarModifiedMask.AvatarLook.getVal(); + getField().broadcastPacket(UserRemote.avatarModified(this, maskValue, (byte) 0), this); + if (getTemporaryStatManager().hasStat(CharacterTemporaryStat.SoulMP) && ItemConstants.isWeapon(item.getItemId())) { + getTemporaryStatManager().removeStat(CharacterTemporaryStat.SoulMP, false); + getTemporaryStatManager().removeStat(CharacterTemporaryStat.FullSoulMP, false); + getTemporaryStatManager().sendResetStatPacket(); + } + List skills = new ArrayList<>(); + for (ItemSkill itemSkill : ItemData.getEquipById(item.getItemId()).getItemSkills()) { + Skill skill = getSkill(itemSkill.getSkill()); + skill.setCurrentLevel(0); + removeSkill(itemSkill.getSkill()); + skill.setCurrentLevel(-1); // workaround to remove skill from window without a cc + skills.add(skill); + } + if (skills.size() > 0) { + getClient().write(WvsContext.changeSkillRecordResult(skills, true, false, false, false)); + } + int equippedSummonSkill = ItemConstants.getEquippedSummonSkillItem(item.getItemId(), getJob()); + if (equippedSummonSkill != 0) { + getField().removeSummon(equippedSummonSkill, getId()); + + getTemporaryStatManager().removeStatsBySkill(equippedSummonSkill); + getTemporaryStatManager().removeStatsBySkill(getTemporaryStatManager().getOption(CharacterTemporaryStat.RepeatEffect).rOption); + } + if (ItemConstants.isAndroid(itemID) || ItemConstants.isMechanicalHeart(itemID)) { + if (getAndroid() != null) { + getField().removeLife(getAndroid()); + } + setAndroid(null); + } + if (equip.getSetItemID() != 0) { + // update set effects + removeSetEffect(equip.getSetItemID()); + + recalcStats(EnumSet.of(BaseStat.mhp, BaseStat.mmp)); + } + } + + /** + * Equips an {@link Item}. Ensures that the hairEquips and both inventories get updated. + * + * @param item The Item to equip. + */ + public boolean equip(Item item, int oldPos, int newPos) { + Equip equip = (Equip) item; + Inventory inv = getEquippedInventory(); + if (equip.hasSpecialAttribute(EquipSpecialAttribute.Vestige)) { + return false; + } + boolean equipStatChanged = false; + if (equip.isEquipTradeBlock()) { + equip.setTradeBlock(true); + equip.setEquipTradeBlock(false); + equip.setEquippedDate(FileTime.currentTime()); + equip.addAttribute(EquipAttribute.Untradable); + equipStatChanged = true; + } + if (equip.hasAttribute(EquipAttribute.UntradableAfterTransaction)) { + equip.removeAttribute(EquipAttribute.UntradableAfterTransaction); + equip.addAttribute(EquipAttribute.Untradable); //For non CS items may or may not break stuff + equipStatChanged = true; + } + AvatarLook al = getAvatarData().getAvatarLook(); + Item swapItem = inv.getItemBySlot(newPos); + getInventoryByType(EQUIP).removeItem(item); + getInventoryByType(EQUIPPED).addItem(item); + if (swapItem != null) { + unequip(swapItem); + swapItem.setBagIndex(oldPos); + } + Integer itemID = equip.getAnvilId() == 0 ? item.getItemId() : equip.getAnvilId(); + int absPos = Math.abs(newPos); + if (absPos > BodyPart.BPBase.getVal() && absPos < BodyPart.CBPEnd.getVal()) { + boolean isCash = item.isCash(); + byte pos = (byte) (isCash ? absPos - 100 : absPos); + Equip overrideItem; + // get corresponding cash item + if (isCash) { + overrideItem = (Equip) inv.getItemBySlot(absPos - 100); + } else { + overrideItem = (Equip) inv.getItemBySlot(absPos + 100); + } + Integer overrideItemId = overrideItem == null ? -1 : + overrideItem.getAnvilId() == 0 ? overrideItem.getItemId() : overrideItem.getAnvilId(); + Map hairEquips = al.getHairEquips(); + Map unseenEquips = al.getUnseenEquips(); + // only add if not part of your own body + if (ItemConstants.isWeapon(itemID) && pos == BodyPart.Weapon.getVal()) { + if (isCash) { + al.setWeaponStickerId(itemID); + //unseenEquips.put(pos, itemID); + } else { + al.setWeaponId(itemID); + hairEquips.put(pos, itemID); + } + } else if (isCash) { + if (overrideItemId >= 0) { + hairEquips.remove(pos); + unseenEquips.put(pos, overrideItemId); + } + hairEquips.put(pos, itemID); + } else { + if (overrideItemId >= 0) { + unseenEquips.put(pos, itemID); + } else { + hairEquips.put(pos, itemID); + } + if (pos == BodyPart.Shield.getVal()) { + al.setSubWeaponId(itemID); + } + } + } else if (absPos >= BodyPart.TotemBase.getVal() && absPos < BodyPart.TotemEnd.getVal()) { + al.getTotems().add(itemID); + } + if (!equip.hasAttribute(EquipAttribute.NoNonCombatStatGain) && equip.getCharmEXP() != 0) { + addStatAndSendPacket(Stat.charmEXP, equip.getCharmEXP()); + equip.addAttribute(EquipAttribute.NoNonCombatStatGain); + equipStatChanged = true; + } + List skills = new ArrayList<>(); + for (ItemSkill itemSkill : ItemData.getEquipById(equip.getItemId()).getItemSkills()) { + Skill skill = SkillData.getSkillDeepCopyById(itemSkill.getSkill()); + int slv = itemSkill.getSlv(); + // support for Tower of Oz rings + if (equip.getLevel() > 0) { + slv = (byte) Math.min(equip.getLevel(), skill.getMaxLevel()); + } + skill.setCurrentLevel(slv); + skills.add(skill); + addSkill(skill); + } + if (skills.size() > 0) { + getClient().write(WvsContext.changeSkillRecordResult(skills, true, false, false, false)); + } + int equippedSummonSkill = ItemConstants.getEquippedSummonSkillItem(equip.getItemId(), getJob()); + if (equippedSummonSkill != 0) { + getJobHandler().handleSkill(this, getTemporaryStatManager(), equippedSummonSkill, (byte) 1, null, new SkillUseInfo()); + } + if (getField() != null) { + byte maskValue = AvatarModifiedMask.AvatarLook.getVal(); + getField().broadcastPacket(UserRemote.avatarModified(this, maskValue, (byte) 0), this); + } + //initSoulMP(equip.getSoulSocketId()); + // check android status + if (ItemConstants.isAndroid(itemID) || ItemConstants.isMechanicalHeart(itemID)) { + initAndroid(true); + if (getAndroid() != null) { + getField().spawnLife(getAndroid(), null); + } + } + if (equip.getSetItemID() != 0) { + // update set effects + addSetEffect(equip.getSetItemID()); + + // reset set base stats + recalcStats(EnumSet.of(BaseStat.mhp, BaseStat.mmp)); + } + + return equipStatChanged; + } + + public TemporaryStatManager getTemporaryStatManager() { + return temporaryStatManager; + } + + public void setTemporaryStatManager(TemporaryStatManager temporaryStatManager) { + this.temporaryStatManager = temporaryStatManager; + } + + public GachaponManager getGachaponManager() { + return gachaponManager; + } + + public void setId(int id) { + this.id = id; + } + + public void setJobHandler(Job jobHandler) { + this.jobHandler = jobHandler; + } + + public Job getJobHandler() { + return jobHandler; + } + + public FuncKeyMap getFuncKeyMap() { + return funcKeyMaps.get(0); + } + + public List getFuncKeyMaps() { + return funcKeyMaps; + } + + public void initFuncKeyMaps(int keySettingType, boolean beastTamer) { + int amount = beastTamer ? 5 : 1; + for (int i = 0; i < amount; i++) { + FuncKeyMap funcKeyMap = FuncKeyMap.getDefaultMapping(keySettingType); + funcKeyMaps.add(funcKeyMap); + } + } + + /** + * Creates a {@link Rect} with regard to this character. Adds all values to this Char's + * position. + * + * @param rect The rectangle to use. + * @return The new rectangle. + */ + public Rect getRectAround(Rect rect) { + int x = getPosition().getX(); + int y = getPosition().getY(); + return new Rect(x + rect.getLeft(), y + rect.getTop(), x + rect.getRight(), y + rect.getBottom()); + } + + /** + * Returns the Equip equipped at a certain {@link BodyPart}. + * + * @param bodyPart The requested bodyPart. + * @return The Equip corresponding to bodyPart. Null if there is none. + */ + public Item getEquippedItemByBodyPart(BodyPart bodyPart) { + List items = getEquippedInventory().getItemsByBodyPart(bodyPart); + return items.size() > 0 ? items.get(0) : null; + } + + public boolean isLeft() { + return moveAction > 0 && (moveAction % 2) == 1; + } + + public MarriageRecord getMarriageRecord() { + return marriageRecord; + } + + public void setMarriageRecord(MarriageRecord marriageRecord) { + this.marriageRecord = marriageRecord; + } + + public boolean isHide() { + return hide; + } + + public void setHide(boolean hide) { + if (this.hide == hide) { + return; + } + this.hide = hide; + chatMessage(String.format("Hide is %s.", (hide ? "enabled" : "disabled"))); + write(FieldPacket.setHideEffect(hide)); + if (getField() == null) { + return; + } + if (hide) { + OutPacket leavePacket = UserPool.userLeaveField(this); + for (Char other : getField().getChars()) { + if (other.getId() != getId() && other.getUser().getAccountType().ordinal() < getUser().getAccountType().ordinal()) { + other.write(leavePacket); + } + } + } else { + OutPacket enterPacket = UserPool.userEnterField(this); + for (Char other : getField().getChars()) { + if (other.getId() != getId() && other.getUser().getAccountType().ordinal() < getUser().getAccountType().ordinal()) { + other.write(enterPacket); + } + } + } + } + + + /** + * Returns a {@link Field} based on the current {@link FieldInstanceType} of this Char (channel, + * expedition, party or solo). + * + * @return The Field corresponding to the current FieldInstanceType. + */ + public Field getOrCreateFieldByCurrentInstanceType(int fieldID) { + Field res = null; + if (getInstance() == null) { + res = getClient().getChannelInstance().getField(fieldID); + } else { + res = getInstance().getField(fieldID); + res.setRuneStone(null); + } + return res; + } + + /** + * Warps this Char to a given field at the starting portal. + * + * @param fieldId the ID of the field to warp to + */ + public void warp(int fieldId) { + warp(getOrCreateFieldByCurrentInstanceType(fieldId)); + } + + /** + * Warps this Char to a given field at the given portal. If the portal doesn't exist, takes the starting portal. + * + * @param fieldId the ID of the field to warp to + * @param portalId the ID of the portal where the Char should spawn + */ + public void warp(int fieldId, int portalId) { + Field field = getOrCreateFieldByCurrentInstanceType(fieldId); + Portal portal = field.getPortalByID(portalId); + if (portal == null) { + portal = field.getDefaultPortal(); + } + warp(field, portal); + } + + public Inventory getHairInventory() { + return hairInventory; + } + + + public Inventory getFaceInventory() { + return faceInventory; + } + + /** + * Warps this character to a given field, at the starting position. + * See {@link #warp(Field, Portal) warp}. + * + * @param toField The field to warp to. + */ + public void warp(Field toField) { + warp(toField, toField.getPortalByName("sp"), false); + } + + /** + * Warps this Char to a given {@link Field}, with the Field's "sp" portal as spawn position. + * + * @param toField The Field to warp to. + * @param characterData Whether or not the character data should be encoded. + */ + public void warp(Field toField, boolean characterData) { + if (toField == null) { + toField = getOrCreateFieldByCurrentInstanceType(100000000); + } + warp(toField, toField.getPortalByName("sp"), characterData); + } + + /** + * Warps this Char to a given {@link Field} and {@link Portal}. Will not include character data. + * + * @param toField The Field to warp to. + * @param toPortal The Portal to spawn at. + */ + public void warp(Field toField, Portal toPortal) { + warp(toField, toPortal, false); + } + + /** + * Warps this character to a given field, at a given portal. + * Ensures that the previous map does not contain this Char anymore, and that the new field + * does. + * Ensures that all Lifes are immediately spawned for the new player. + * + * @param toField The {@link Field} to warp to. + * @param portal The {@link Portal} where to spawn at. + */ + public void warp(Field toField, Portal portal, boolean characterData) { + getAvatarData().getCharacterStat().setPortal(portal.getId()); + if (toField == null) { + return; + } + + checkAndRemoveExpiredItems(); + + TemporaryStatManager tsm = getTemporaryStatManager(); + for (AffectedArea aa : tsm.getAffectedAreas()) { + if (!(aa.isFollowOwner() && aa.getOwner() == this) && aa.getRemoveSkill()) { + tsm.removeStatsBySkill(aa.getSkillID()); + } + } + tsm.getAffectedAreas().clear(); + + Field currentField = getField(); + boolean toChannelField = false; + if (currentField != null) { + currentField.removeChar(this); + toChannelField = currentField.isChangeToChannelOnLeave(); + if (toChannelField) { + if (getInstance() != null) { + getInstance().clear(); + } + setInstance(null); + } + } + setField(toField); + + setChair(null); + getAvatarData().getCharacterStat().setPortal(portal.getId()); + setPosition(new Position(portal.getX(), portal.getY())); + initFriendStatus(); + getClient().getChannelInstance().broadcastPacket(WvsContext.broadcastMessage(4, getClient().getChannel(), "Welcome to v206 MapleStory Development", false)); + getClient().write(Stage.setField(this, toField, getClient().getChannel(), false, 0, characterData, hasBuffProtector(), + (byte) (portal != null ? portal.getId() : 0), false, 100, null, true, -1)); + toField.addChar(this); + showProperUI(currentField != null ? currentField.getId() : -1, toField.getId()); + + if (isHide()) { + write(FieldPacket.setHideEffect(true)); + } + + if (characterData) { + // initSoulMP(); + Party party = getParty(); + if (party != null) { + write(WvsContext.partyResult(PartyResult.loadParty(party))); + } + if (getGuild() != null) { + write(WvsContext.guildResult(GuildResult.loadGuild(getGuild()))); + if (getGuild().getAlliance() != null) { + write(WvsContext.allianceResult(AllianceResult.loadDone(getGuild().getAlliance()))); + write(WvsContext.allianceResult(AllianceResult.loadGuildDone(getGuild().getAlliance()))); + } + } + // Union union = getUnion(); + //Set eligibleChars = union.getEligibleUnionChars(); + //UnionBoard activeBoard = union.getBoardByPreset(getActiveUnionPreset()); + // QuestManager qm = getQuestManager(); + // if (qm.hasQuestCompleted(QuestConstants.UNION_START_QUEST)) { + // write(CUIHandler.unionAssignResult(getUnion().getUnionRank(), eligibleChars, activeBoard, + // null, null, null)); // todo: decide how u want to handle mobile/lab members + // Quest q = qm.getQuestById(QuestConstants.UNION_RANK); + // if (q == null) { + // q = QuestData.createQuestFromId(QuestConstants.UNION_RANK); + // qm.addQuest(q); + // } + // q.setProperty("rank", getUnion().getUnionRank()); + // write(WvsContext.questRecordExMessage(q)); + // } + write(WvsContext.setMaplePoints(getUser().getNxPrepaid())); + } + toField.spawnLifesForChar(this); + + if (JobConstants.isEvan(getJob()) && getJob() != JobConstants.JobEnum.EVAN_NOOB.getJobId()) { + ((Evan) getJobHandler()).spawnMir(); + } + if (JobConstants.isKanna(getJob())) { + if (Kanna.hasFoxMan(this)) { + write(FieldPacket.enterFieldFoxMan(this)); + } else { + ((Kanna) getJobHandler()).spawnHaku(); + } + } + if (JobConstants.isPhantom(getJob())) { + ((Phantom) getJobHandler()).setCardAmount(((Phantom) getJobHandler()).getCardAmount()); + } + if (JobConstants.isCorsair(getJob()) && hasSkill(Corsair.TARGET_LOCK) && !hasSkillOnCooldown(Corsair.TARGET_LOCK)) { + write(UserLocal.skillCooltimeSetM(Corsair.TARGET_LOCK, 0)); // needs to be sent, to reset the passive effect + } + ForceAtom fa = null; + if (getTemporaryStatManager().hasStatBySkillId(Job.GUIDED_ARROW)) { + fa = getForceAtomByKey(getTemporaryStatManager().getOptByCTSAndSkill(GuidedArrow, Job.GUIDED_ARROW).xOption); + } + clearForceAtomMap(); + if (fa != null) { + ForceAtomInfo fai = fa.getFaiList().get(0); + fai.setKey(getNewForceAtomKey()); + fa.setFaiList(Collections.singletonList(fai)); + Option o = new Option(); + o.xOption = fa.getFaiList().get(0).getKey(); + o.tOption = (int) getTemporaryStatManager().getRemainingTime(GuidedArrow, Job.GUIDED_ARROW); + o.setInMillis(true); + tsm.putCharacterStatValue(GuidedArrow, o, true); + tsm.sendSetStatPacket(); + createForceAtom(fa); + } + for (Summon summon : getSummons()) { + int skillId = summon.getSkillID(); + if (summon.getMoveAbility().changeFieldWithOwner() && skillId != Hayato.IAIJUTSU_PHANTOM_BLADE) { + summon.setObjectId(-1); + toField.spawnSummon(summon); + } else { + tsm.removeStatsBySkill(summon.getSkillID()); + } + } + if (JobConstants.isNightWalker(getJob())) { + for (Summon shadowBat : ((NightWalker) getJobHandler()).shadowBatList) { + shadowBat.setObjectId(-1); + toField.spawnAddSummon(shadowBat); + } + ((NightWalker) getJobHandler()).shadowBatList.clear(); + } + for (AffectedArea aura : getFollowAffectedAreas().values()) { + aura.setObjectId(-1); + aura.setRect(getRectAround(isLeft() ? aura.getSkillRect() : aura.getSkillRect().horizontalFlipAround(0))); + toField.spawnAffectedAreaAndRemoveOld(aura); + } + for (int skill : Job.REMOVE_ON_WARP) { + if (tsm.hasStatBySkillId(skill)) { + tsm.removeStatsBySkill(skill); + } + } + notifyChanges(); + if (getDeathCount() > 0) { + write(UserLocal.deathCountInfo(getDeathCount())); + } + if (field.getEliteState() == EliteState.EliteBoss) { + write(FieldPacket.eliteState(EliteState.EliteBoss, true, GameConstants.ELITE_BOSS_BGM, null, null)); + } + + if (getField() != null) { + if (getActiveFamiliar() != null) { + getField().broadcastPacket(CFamiliar.familiarEnterField(getId(), true, getActiveFamiliar(), true, false)); + } + for (Char c : toField.getChars()) { + if (c == null) { + continue; + } + if (c.getActiveFamiliar() != null) { + write(CFamiliar.familiarEnterField(c.getId(), true, c.getActiveFamiliar(), true, false)); + } + c.initPets(); + } + } + + Dragon dragon = getDragon(); + if (dragon != null) { + toField.spawnLife(dragon, null); + } + Android android = getAndroid(); + if (android != null) { + toField.spawnLife(android, null); + } + for (Mob mob : toField.getMobs()) { + mob.addObserver(getScriptManager()); + } + if (getInstance() == null) { + write(FieldPacket.setQuickMoveInfo(GameConstants.getQuickMoveInfos().stream().filter(qmi -> !qmi.isNoInstances() || getField().isChannelField()).collect(Collectors.toList()))); + } + if (JobConstants.isAngelicBuster(getJob())) { + write(UserLocal.setDressChanged(true, true)); + } + if (getInstance() != null && getInstance().getRemainingTime() > 0) { + write(FieldPacket.clock(ClockPacket.secondsClock(getInstance().getRemainingTime()))); + } + showSkillOnOffEffect(); + } + + public void initFriendStatus() { + for (Friend f : getFriends()) { + Char friendChr = getWorld().getCharByID(f.getFriendID()); + if (friendChr != null) { + f.setChr(friendChr); + friendChr.getFriendByCharID(getId()).setChr(this); + } + f.setFlag(friendChr != null + ? FriendFlag.FriendOnline + : FriendFlag.FriendOffline); + } + for (Friend f : getUser().getFriends()) { + User friendAcc = getWorld().getUserById(f.getFriendAccountID()); + if (friendAcc != null && friendAcc.getCurrentChr() != null) { + f.setChr(friendAcc.getCurrentChr()); + Friend me = friendAcc.getFriendByUserID(getAccount().getId()); + if (me != null) { + me.setChr(this); + } + } + f.setFlag(friendAcc != null + ? FriendFlag.AccountFriendOnline + : FriendFlag.AccountFriendOffline); + } + } + + public Set getSummons() { + Set summons = new HashSet<>(); + TemporaryStatManager tsm = getTemporaryStatManager(); + for (Option option : tsm.getOptions(IndieSummon)) { + summons.add(option.summon); + } + return summons; + } + + public Map getFollowAffectedAreas() { + return followAffectedAreas; + } + + public void setFollowAffectedAreas(Map followAffectedAreas) { + this.followAffectedAreas = followAffectedAreas; + } + + public void addFollowAffectedArea(AffectedArea affectedArea) { + getFollowAffectedAreas().put(affectedArea.getSkillID(), affectedArea); + } + + public AffectedArea getFollowAffectedAreaBySkillID(int skillID) { + return getFollowAffectedAreas().getOrDefault(skillID, null); + } + + public World getWorld() { + return getClient().getWorld(); + } + + /** + * Adds a given amount of exp to this Char. Immediately checks for level-up possibility, and + * sends the updated + * stats to the client. Allows multi-leveling. + * + * @param amount The amount of exp to add. + */ + public void addExp(long amount) { + ExpIncreaseInfo eii = new ExpIncreaseInfo(); + eii.setLastHit(true); + eii.setIncEXP(amount); + addExp(amount, eii); + } + + /** + * Adds exp to this Char. Will calculate the extra exp gained from buffs and the exp rate of the server. + * Also takes an argument to show this info to the client. Will not send anything if this argument (eii) is null. + * + * @param amount The amount of exp to add + * @param eii The info to send to the client + */ + public void addExp(long amount, ExpIncreaseInfo eii) { + if (amount <= 0) { + return; + } + + if (getGuild() != null) { + getGuild().addCommitmentToChar(this, (int) Math.min(amount, Integer.MAX_VALUE)); // independant of any xp buffs + } + + int level = getLevel(); + int expFromChrLvExpR = 0; + if (GameConstants.LEVEL_BASED_EXP_RATE) { + expFromChrLvExpR = (int) Math.ceil(amount * (GameConstants.expRates[level]-1.)); + amount = (long) Math.ceil(amount * GameConstants.expRates[level]); + } + + long incExp = eii == null ? amount : eii.getIncEXP(); + int expFromExpR = (int) (incExp * (getTotalStat(BaseStat.expR) / 100D)); + amount += expFromExpR; + CharacterStat cs = getAvatarData().getCharacterStat(); + long curExp = cs.getExp(); + if (level >= GameConstants.charExp.length - 1) { + return; + } + long newExp = curExp + amount; + Map stats = new HashMap<>(); + while (newExp >= GameConstants.charExp[level] && level < GameConstants.charExp.length) { + newExp -= GameConstants.charExp[level]; + addStat(Stat.level, 1); + stats.put(Stat.level, getStat(Stat.level)); + getJobHandler().handleLevelUp(); + level++; + getField().broadcastPacket(UserRemote.effect(getId(), Effect.levelUpEffect())); + heal(getMaxHP()); + healMP(getMaxMP()); + } + cs.setExp(newExp); + stats.put(Stat.exp, newExp); + if (eii != null) { + eii.setIndieBonusExp(expFromExpR); + eii.setLiveEventBonusExp(expFromChrLvExpR); + write(WvsContext.incExpMessage(eii)); + } + getClient().write(WvsContext.statChanged(stats)); + } + + /** + * Adds a given amount of exp to this Char, however it does not display the Exp Message. + * Immediately checks for level-up possibility, and sends the updated + * stats to the client. Allows multi-leveling. + * + * @param amount The amount of exp to add. + */ + public void addExpNoMsg(long amount) { + addExp(amount, null); + } + + /** + * Sets the {@link Char} to the given level non-recursively. + * + * @param level The level to set to. + */ + public void setLevel(int level) { + if (level >= 0) { + setStat(Stat.level, level); + Map stats = new HashMap<>(); + stats.put(Stat.level, level); + stats.put(Stat.exp, (long) 0); + getClient().write(WvsContext.statChanged(stats)); + getJobHandler().handleLevelUp(); + getField().broadcastPacket(UserRemote.effect(getId(), Effect.levelUpEffect())); + } + } + + /** + * Adds a single level to this Char. + */ + public void addLevel() { + addLevels(1); + } + + /** + * Adds a given amount of levels to this Char. + * + * @param levelsToAdd The amount of levels to add. + */ + public void addLevels(int levelsToAdd) { + int currentLevel = getLevel(); + int targetLevel = currentLevel + levelsToAdd; + if (targetLevel >= currentLevel) { + while (currentLevel < targetLevel) { + currentLevel++; + setStat(Stat.level, targetLevel); + Map stats = new HashMap<>(); + stats.put(Stat.level, currentLevel); + stats.put(Stat.exp, (long) 0); + getClient().write(WvsContext.statChanged(stats)); + getJobHandler().handleLevelUp(); + getField().broadcastPacket(UserRemote.effect(getId(), Effect.levelUpEffect())); + } + } + } + + /** + * Adds levels to {@link Char} until the given level recursively. + * + * @param targetLevel The level to level up to recursively. + */ + public void addLevelsTo(int targetLevel) { + for (int level = getLevel(); level <= targetLevel; level++) { + Map stats = new HashMap<>(); + stats.put(Stat.level, level); + stats.put(Stat.exp, (long) 0); + getClient().write(WvsContext.statChanged(stats)); + getJobHandler().handleLevelUp(); + getField().broadcastPacket(UserRemote.effect(getId(), Effect.levelUpEffect())); + } + } + + public void addTraitExp(Stat traitStat, int amount) { + if (amount <= 0) { + return; + } + Map stats = new HashMap<>(); + addStat(traitStat, amount); + stats.put(traitStat, getStat(traitStat)); + stats.put(Stat.dayLimit, getAvatarData().getCharacterStat().getNonCombatStatDayLimit()); + write(WvsContext.statChanged(stats)); + write(WvsContext.incNonCombatStatEXPMessage(traitStat, amount)); + } + + /** + * Writes a packet to this Char's client. + * + * @param outPacket The OutPacket to write. + */ + public void write(OutPacket outPacket) { + if (getClient() != null) { + getClient().write(outPacket); + } + } + + public ExpIncreaseInfo getExpIncreaseInfo() { + return new ExpIncreaseInfo(); + } + + public WildHunterInfo getWildHunterInfo() { + return wildHunterInfo; + } + + + public void setWildHunterInfo(WildHunterInfo wildHunterInfo) { + this.wildHunterInfo = wildHunterInfo; + } + + public ZeroInfo getZeroInfo() { + return zeroInfo; + } + + public void setZeroInfo(ZeroInfo zeroInfo) { + this.zeroInfo = zeroInfo; + } + + public int getNickItem() { + return nickItem; + } + + public void setNickItem(int nickItem) { + this.nickItem = nickItem; + } + + public void setDamageSkin(int itemID) { + setDamageSkin(new DamageSkinSaveData(ItemConstants.getDamageSkinIDByItemID(itemID), itemID, false, + StringData.getItemStringById(itemID))); + } + + public void setDamageSkin(DamageSkinSaveData damageSkin) { + this.damageSkin = damageSkin; + } + + public DamageSkinSaveData getDamageSkin() { + if (damageSkin == null) { + return DamageSkinSaveData.DEFAULT_SKIN; + } + return damageSkin; + } + + public DamageSkinSaveData getPremiumDamageSkin() { + if (premiumDamageSkin == null) { + return DamageSkinSaveData.DEFAULT_SKIN; + } + return premiumDamageSkin; + } + + public DamageSkinSaveData getActiveDamageSkin() { + DamageSkinSaveData ds = getDamageSkin(); + DamageSkinSaveData pds = getPremiumDamageSkin(); + if (pds != null && pds.getDamageSkinID() != 0) { + return pds; + } + if (ds != null && pds.getDamageSkinID() != 0) { + return ds; + } + return DamageSkinSaveData.DEFAULT_SKIN; + } + + public void setPremiumDamageSkin(DamageSkinSaveData premiumDamageSkin) { + this.premiumDamageSkin = premiumDamageSkin; + } + + public void setPremiumDamageSkin(int itemID) { + setPremiumDamageSkin(new DamageSkinSaveData(ItemConstants.getDamageSkinIDByItemID(itemID), itemID, false, + StringData.getItemStringById(itemID))); + } + + public void setPartyInvitable(boolean partyInvitable) { + this.partyInvitable = partyInvitable; + } + + /** + * Returns if this Char can be invited to a party. + * + * @return Whether or not this Char can be invited to a party. + */ + public boolean isPartyInvitable() { + return partyInvitable; + } + + + public int getRecordFromQuestEx(int questID, String property) { + Quest quest = getQuestManager().getQuestById(questID); + if (quest == null) { + quest = QuestData.createQuestFromId(questID); + quest.setProperty(property, 0); + getQuestManager().addQuest(quest); + } + if (quest.getProperty(property) == null) { + quest.setProperty(property, 0); + getQuestManager().addQuest(quest); + } + return Integer.parseInt(quest.getProperty(property)); + } + + + /** + * Returns if this character is currently in its beta state. + * + * @return true if this Char is in a beta state. + */ + public boolean isZeroBeta() { + return getZeroInfo() != null && getZeroInfo().isZeroBetaState(); + } + + + /** + * Zero only. + * Goes into Beta form if Alpha, and into Alpha if Beta. + */ + public void swapZeroState() { + if (!(JobConstants.isZero(getJob())) || getZeroInfo() == null) { + return; + } + ZeroInfo oldInfo = getZeroInfo().deepCopy(); + ZeroInfo currentInfo = getZeroInfo(); + CharacterStat cs = getAvatarData().getCharacterStat(); + currentInfo.setZeroBetaState(!oldInfo.isZeroBetaState()); + currentInfo.setSubHP(cs.getHp()); + currentInfo.setSubMHP(cs.getMaxHp()); + currentInfo.setSubMP(cs.getMp()); + currentInfo.setSubMMP(cs.getMaxMp()); + cs.setHp(oldInfo.getSubHP()); + cs.setMaxHp(oldInfo.getSubMHP()); + cs.setMp(oldInfo.getSubMP()); + cs.setMaxMp(oldInfo.getSubMMP()); + Map updatedStats = new HashMap<>(); + updatedStats.put(Stat.hp, cs.getHp()); + updatedStats.put(Stat.mhp, cs.getMaxHp()); + updatedStats.put(Stat.mp, cs.getMp()); + updatedStats.put(Stat.mmp, cs.getMaxMp()); + write(WvsContext.statChanged(updatedStats)); + if (getRecordFromQuestEx(9000001, "zeroState") == 0) { + setQuestRecordEx(9000001, "zeroState", 1); + } else { + setQuestRecordEx(9000001, "zeroState", 0); + } + write(WvsContext.zeroInfo(currentInfo, this)); + } + + /** + * Initializes zero info with HP values. + */ + public void initZeroInfo() { + ZeroInfo zeroInfo = new ZeroInfo(); + CharacterStat cs = getAvatarData().getCharacterStat(); + zeroInfo.setSubHP(cs.getHp()); + zeroInfo.setSubMHP(cs.getMaxHp()); + zeroInfo.setSubMP(cs.getMp()); + zeroInfo.setSubMMP(cs.getMaxMp()); + setZeroInfo(zeroInfo); + } + + public ScriptManagerImpl getScriptManager() { + return scriptManagerImpl; + } + + /** + * Adds a {@link Drop} to this Char. + * + * @param drop The Drop that has been picked up. + */ + public boolean addDrop(Drop drop, boolean byPet) { + if (drop.isMoney()) { + addMoney(drop.getMoney(), (byte) (byPet ? 0 : 1)); + getQuestManager().handleMoneyGain(drop.getMoney()); + write(WvsContext.dropPickupMessage(drop.getMoney(), (short) 0)); + return true; + } else { + Item item = drop.getItem(); + int itemID = item.getItemId(); + boolean isConsume = false; + boolean isRunOnPickUp = false; + if (itemID == GameConstants.BLUE_EXP_ORB_ID + || itemID == GameConstants.PURPLE_EXP_ORB_ID + || itemID == GameConstants.RED_EXP_ORB_ID + || itemID == GameConstants.GOLD_EXP_ORB_ID) { + long expGain = (long) (drop.getMobExp() * GameConstants.getExpOrbExpModifierById(itemID)); + + write(UserPacket.effect(Effect.fieldItemConsumed((int) (expGain > Integer.MAX_VALUE ? Integer.MAX_VALUE : expGain)))); + addExpNoMsg(expGain); + + // Exp Orb Buff On Pickup + TemporaryStatManager tsm = getTemporaryStatManager(); + ItemBuffs.giveItemBuffsFromItemID(this, tsm, itemID); + } + if (!ItemConstants.isEquip(itemID)) { + ItemInfo ii = ItemData.getItemInfoByID(itemID); + isConsume = ii.getSpecStats().getOrDefault(SpecStat.consumeOnPickup, 0) != 0; + isRunOnPickUp = ii.getSpecStats().getOrDefault(SpecStat.runOnPickup, 0) != 0; + } + if (isConsume) { + consumeItemOnPickup(item); + dispose(); + return true; + } else if (isRunOnPickUp) { + String script = String.valueOf(itemID); + ItemInfo ii = ItemData.getItemInfoByID(itemID); + if (ii.getScript() != null && !"".equals(ii.getScript())) { + script = ii.getScript(); + } + getScriptManager().startScript(itemID, script, ScriptType.Item); + return true; + } else if (getInventoryByType(item.getInvType()).canPickUp(item)) { + if (item instanceof Equip) { + Equip equip = (Equip) item; + if (equip.hasAttribute(EquipAttribute.UntradableAfterTransaction)) { + equip.removeAttribute(EquipAttribute.UntradableAfterTransaction); + equip.addAttribute(EquipAttribute.Untradable); + } + } + addItemToInventory(item.getInvType(), item, false, byPet); + write(WvsContext.dropPickupMessage(item, (short) item.getQuantity())); + return true; + } else { + write(WvsContext.dropPickupMessage(0, 0, (byte) -1, (short) 0, (short) 0)); + return false; + } + } + } + + private void consumeItemOnPickup(Item item) { + int itemID = item.getItemId(); + if (ItemConstants.isMobCard(itemID)) { + MonsterBookInfo mbi = getMonsterBookInfo(); + int id = 0; + if (!mbi.hasCard(itemID)) { + mbi.addCard(itemID); + id = itemID; + } + write(WvsContext.monsterBookSetCard(id)); + } + } + + /** + * Returns the Char's name. + * + * @return The Char's name. + */ + public String getName() { + return getAvatarData().getCharacterStat().getName(); + } + + /** + * Checks whether or not this Char has a given quest in progress. + * + * @param questReq The quest ID of the requested quest. + * @return Whether or not this char is in progress with the quest. + */ + public boolean hasQuestInProgress(int questReq) { + return getQuestManager().hasQuestInProgress(questReq); + } + + + public boolean isInValidState() { + return !isDead() || !isTalkingToNpc() || getTradeRoom() == null || getField() != null; + } + + /** + * Disposes this Char, allowing it to send packets to the server again. + */ + public void dispose() { + setTalkingToNpc(false); + write(WvsContext.exclRequest()); + } + + public void dispose(String msg) { + chatMessage(msg); + dispose(); + } + + /** + * Returns the current HP of this Char. + * + * @return the current HP of this Char. + */ + public int getHP() { + return getStat(Stat.hp); + } + + /** + * Returns the current MP of this Char. + * + * @return the current MP of this Char. + */ + public int getMP() { + return getStat(Stat.mp); + } + + /** + * Gets the max hp of this Char. + * + * @return The max hp of this Char + */ + public int getMaxHP() { + return Math.min(GameConstants.MAX_HP_MP, getTotalStat(BaseStat.mhp)); + } + + /** + * Gets the max mp of this Char. + * + * @return The max mp of this Char + */ + public int getMaxMP() { + return Math.min(GameConstants.MAX_HP_MP, getTotalStat(BaseStat.mmp)); + } + + /** + * Gets the current percentage of HP of this Char. + * + * @return + */ + public double getCurrentHPPerc() { + return 100 * (((double) getHP()) / getMaxHP()); + } + + /** + * Gets the current percentage of MP of this Char. + * + * @return + */ + public double getCurrentMPPerc() { + return 100 * (((double) getMP()) / getMaxMP()); + } + + /** + * Gets the amount that is 1% of this Char's Max HP + * + * @return + */ + + public int getHPPerc() { + return getHPPerc(1); + } + + /** + * Gets the amount that is 'amount'% of this Char's Max HP + * + * @param amount + * @return + */ + + public int getHPPerc(int amount) { + return (int) (amount * (getMaxHP() / 100D)); + } + + public int getMPPerc(int amount) { + return (int) (amount * (getMaxMP() / 100D)); + } + + /** + * Heals this Char's HP for a certain amount. Caps off at maximum HP. + * + * @param amount The amount to heal. + */ + public void heal(int amount) { + heal(amount, false); + } + + public void heal(int amount, boolean showEffect) { + if (amount >= 0 && getTemporaryStatManager().getOptByCTSAndSkill(BattlePvPHelenaMark, DemonAvenger.DEMONIC_FRENZY) != null) { // limits skill & item healing to 1% of the Char's MaxHP + amount = (int) (amount > getMaxHP() / 100D ? getMaxHP() / 100D : amount); + } + int curHP = getHP(); + int maxHP = getMaxHP(); + int newHP = curHP + amount > maxHP ? maxHP : curHP + amount < 0 ? 0 : curHP + amount; + + if (showEffect && newHP != curHP) { + write(UserPacket.effect(Effect.changeHPEffect(newHP - curHP))); + getField().broadcastPacket(UserRemote.effect(getId(), Effect.changeHPEffect(newHP - curHP))); + } + + Map stats = new HashMap<>(); + setStat(Stat.hp, newHP); + stats.put(Stat.hp, newHP); + write(WvsContext.statChanged(stats)); + if (getParty() != null) { + getParty().broadcast(UserRemote.receiveHP(this), this); + } + } + + /** + * "Heals" this Char's MP for a certain amount. Caps off at maximum MP. + * + * @param amount The amount to heal. + */ + public void healMP(int amount) { + int curMP = getMP(); + int maxMP = getMaxMP(); + int newMP = curMP + amount > maxMP ? maxMP : curMP + amount < 0 ? 0 : curMP + amount; + Map stats = new HashMap<>(); + setStat(Stat.mp, newMP); + stats.put(Stat.mp, newMP); + write(WvsContext.statChanged(stats)); + } + + + /** + * Consumes a single {@link Item} from this Char's {@link Inventory}. Will remove the Item if it + * has a quantity of 1. + * + * @param item The Item to consume, which is currently in the Char's inventory. + */ + public void consumeItem(Item item) { + consumeItem(item, false); + } + + /** + * Consumes a single {@link Item} from this Char's {@link Inventory}. Will remove the Item if it + * has a quantity of 1. + * + * @param item The Item to consume, which is currently in the Char's inventory. + * @param removable true: enables to remove throwing item from slot + */ + public void consumeItem(Item item, boolean removable) { + Inventory inventory = getInventoryByType(item.getInvType()); + // data race possible + boolean throwingItem = ItemConstants.isThrowingItem(item.getItemId()); + if (!throwingItem && item.getQuantity() <= 1 || throwingItem && removable) { + item.setQuantity(0); + short bagIndex = (short) item.getBagIndex(); + inventory.removeItem(item); + item.drop(); + if (item.getInvType() == EQUIPPED) { + if (bagIndex > BodyPart.BPBase.getVal() && bagIndex < BodyPart.CBPEnd.getVal() + || bagIndex >= BodyPart.TotemBase.getVal() && bagIndex < BodyPart.TotemEnd.getVal()) { + if (!ItemConstants.isTotem(item.getItemId())) { + boolean isCash = item.isCash(); + Equip overrideItem; + // get corresponding cash item + if (isCash) { + overrideItem = (Equip) inventory.getItemBySlot(bagIndex - 100); + } else { + overrideItem = (Equip) inventory.getItemBySlot(bagIndex + 100); + } + int overrideItemId = overrideItem == null ? -1 : + overrideItem.getAnvilId() == 0 ? overrideItem.getItemId() : overrideItem.getAnvilId(); + getAvatarData().getAvatarLook().removeItem((byte) bagIndex, item.getItemId(), overrideItemId, isCash); + } else { + getAvatarData().getAvatarLook().removeItem((byte) (bagIndex - 5000), item.getItemId(), -1, false); + } + } + bagIndex = (short) -bagIndex; + } + write(WvsContext.inventoryOperation(true, false, Remove, bagIndex, (byte) 0, 0, item)); + } else { + item.setQuantity(item.getQuantity() - 1); + write(WvsContext.inventoryOperation(true, false, UpdateQuantity, (short) item.getBagIndex(), (byte) -1, 0, item)); + } + setBulletIDForAttack(calculateBulletIDForAttack()); + } + + /** + * Removes a certain amount of an item from this Char. + * @param item the item to remove + * @param quantity the amount to remove + */ + public void consumeItem(Item item, int quantity) { + int consumed = quantity > item.getQuantity() ? 0 : item.getQuantity() - quantity; + item.setQuantity(consumed + 1); // +1 because 1 gets consumed by consumeItem(item) + consumeItem(item); + } + + + /** + * TODO: should replace this one with below one + * @param id + * @param quantity + */ + public void consumeItem(int id, int quantity) { + consumeItem(id, quantity, false); + } + + /** + * Consumes an item of this Char with the given id. Will do nothing if the Char doesn't have the + * Item. + * Only works for non-Equip (i.e., type is not EQUIPPED or EQUIP, CASH is fine) items. + * Calls {@link #consumeItem(Item)} if an Item is found. + * + * @param id The Item's id. + * @param quantity The amount to consume. + * @param removable true: enables to remove throwing item from slot + */ + public void consumeItem(int id, int quantity, boolean removable) { + Item checkItem = ItemData.getItemDeepCopy(id); + Item item = getInventoryByType(checkItem.getInvType()).getItemByItemID(id); + if (item != null) { + int consumed = quantity > item.getQuantity() ? 0 : item.getQuantity() - quantity; + item.setQuantity(consumed + 1); // +1 because 1 gets consumed by consumeItem(item) + consumeItem(item, removable); + } + } + + public void consumeItemBySlot(InvType invType, int slot, int quantity, boolean removable) { + Item item = getInventoryByType(invType).getItemBySlot(slot); + if (item != null) { + int consumed = quantity > item.getQuantity() ? 0 : item.getQuantity() - quantity; + item.setQuantity(consumed + 1); // +1 because 1 gets consumed by consumeItem(item) + consumeItem(item, removable); + } + } + + + public boolean hasItem(int itemID) { + return getInventories().stream().anyMatch(inv -> inv.containsItem(itemID)); + } + + public boolean hasItemCount(int itemID, int count) { + Inventory inv = getInventoryByType(ItemData.getItemDeepCopy(itemID).getInvType()); + return inv.getItems().stream() + .filter(i -> i.getItemId() == itemID) + .mapToInt(Item::getQuantity) + .sum() >= count; + } + + public short getLevel() { + return getAvatarData().getCharacterStat().getLevel(); + } + + public boolean isMarried() { + // TODO + return false; + } + + public Guild getGuild() { + return guild; + } + + public void setGuild(Guild guild) { + if (guild != null) { + if (getClient() != null) { + // to ensure that the same instance of a guild is retrieved for all characters + this.guild = getClient().getWorld().getGuildByID(guild.getId()); + } else { + // for offline character, it's just about the ID, so exact instance doesn't matter + this.guild = guild; + } + } else { + this.guild = null; + } + } + + public int getTotalChuc() { + int total = 0; + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + if (ItemConstants.isOverall(equip.getItemId())) { + total = 2 * equip.getChuc(); + } else { + total = equip.getChuc(); + } + } + return total; + } + + public int getDriverID() { + return driverID; + } + + public void setDriverID(int driverID) { + this.driverID = driverID; + } + + public int getPassengerID() { + return passengerID; + } + + public void setPassengerID(int passengerID) { + this.passengerID = passengerID; + } + + public int getChocoCount() { + return chocoCount; + } + + public void setChocoCount(int chocoCount) { + this.chocoCount = chocoCount; + } + + public int getActiveEffectItemID() { + return activeEffectItemID; + } + + public void setActiveEffectItemID(int activeEffectItemID) { + this.activeEffectItemID = activeEffectItemID; + } + + public int getMonkeyEffectItemID() { + return monkeyEffectItemID; + } + + public void setMonkeyEffectItemID(int monkeyEffectItemID) { + this.monkeyEffectItemID = monkeyEffectItemID; + } + + public int getCompletedSetItemID() { + return completedSetItemID; + } + + public void setCompletedSetItemID(int completedSetItemID) { + this.completedSetItemID = completedSetItemID; + } + + public short getFieldSeatID() { + return -1; + } + + public void setFieldSeatID(short fieldSeatID) { + this.fieldSeatID = fieldSeatID; + } + + public PortableChair getChair() { + return chair; + } + + public void setChair(PortableChair chair) { + this.chair = chair; + } + + public short getFoothold() { + return foothold; + } + + public void setFoothold(short foothold) { + this.foothold = foothold; + } + + public int getTamingMobLevel() { + return tamingMobLevel; + } + + public void setTamingMobLevel(int tamingMobLevel) { + this.tamingMobLevel = tamingMobLevel; + } + + public int getTamingMobExp() { + return tamingMobExp; + } + + public void setTamingMobExp(int tamingMobExp) { + this.tamingMobExp = tamingMobExp; + } + + public int getTamingMobFatigue() { + return tamingMobFatigue; + } + + public void setTamingMobFatigue(int tamingMobFatigue) { + this.tamingMobFatigue = tamingMobFatigue; + } + + public MiniRoom getMiniRoom() { + return miniRoom; + } + + public void setMiniRoom(MiniRoom miniRoom) { + this.miniRoom = miniRoom; + } + + public String getADBoardRemoteMsg() { + return ADBoardRemoteMsg; + } + + public void setADBoardRemoteMsg(String ADBoardRemoteMsg) { + this.ADBoardRemoteMsg = ADBoardRemoteMsg; + } + + public boolean isInCouple() { + return inCouple; + } + + public void setInCouple(boolean inCouple) { + this.inCouple = inCouple; + } + + public CoupleRecord getCouple() { + return couple; + } + + public void setCouple(CoupleRecord couple) { + this.couple = couple; + } + + public boolean hasFriendshipItem() { + return false; + } + + public FriendshipRingRecord getFriendshipRingRecord() { + return friendshipRingRecord; + } + + public void setFriendshipRingRecord(FriendshipRingRecord friendshipRingRecord) { + this.friendshipRingRecord = friendshipRingRecord; + } + + public int getComboCounter() { + return comboCounter; + } + + public void setComboCounter(int comboCounter) { + this.comboCounter = comboCounter; + } + + public int getEvanDragonGlide() { + return evanDragonGlide; + } + + public void setEvanDragonGlide(int evanDragonGlide) { + this.evanDragonGlide = evanDragonGlide; + } + + public int getKaiserMorphRotateHueExtern() { + return kaiserMorphRotateHueExtern; + } + + public void setKaiserMorphRotateHueExtern(int kaiserMorphRotateHueExtern) { + this.kaiserMorphRotateHueExtern = kaiserMorphRotateHueExtern; + } + + public int getKaiserMorphPrimiumBlack() { + return kaiserMorphPrimiumBlack; + } + + public void setKaiserMorphPrimiumBlack(int kaiserMorphPrimiumBlack) { + this.kaiserMorphPrimiumBlack = kaiserMorphPrimiumBlack; + } + + public int getKaiserMorphRotateHueInnner() { + return kaiserMorphRotateHueInnner; + } + + public void setKaiserMorphRotateHueInnner(int kaiserMorphRotateHueInnner) { + this.kaiserMorphRotateHueInnner = kaiserMorphRotateHueInnner; + } + + public int getMakingMeisterSkillEff() { + return makingMeisterSkillEff; + } + + public void setMakingMeisterSkillEff(int makingMeisterSkillEff) { + this.makingMeisterSkillEff = makingMeisterSkillEff; + } + + public FarmUserInfo getFarmUserInfo() { + if (farmUserInfo == null) { + return new FarmUserInfo(); + } + return farmUserInfo; + } + + public void setFarmUserInfo(FarmUserInfo farmUserInfo) { + this.farmUserInfo = farmUserInfo; + } + + public int getCustomizeEffect() { + return customizeEffect; + } + + public void setCustomizeEffect(int customizeEffect) { + this.customizeEffect = customizeEffect; + } + + public String getCustomizeEffectMsg() { + return customizeEffectMsg; + } + + public void setCustomizeEffectMsg(String customizeEffectMsg) { + this.customizeEffectMsg = customizeEffectMsg; + } + + public byte getSoulEffect() { + return soulEffect; + } + + public void setSoulEffect(byte soulEffect) { + this.soulEffect = soulEffect; + } + + public FreezeHotEventInfo getFreezeHotEventInfo() { + if (freezeHotEventInfo == null) { + return new FreezeHotEventInfo(); + } + return freezeHotEventInfo; + } + + public void setFreezeHotEventInfo(FreezeHotEventInfo freezeHotEventInfo) { + this.freezeHotEventInfo = freezeHotEventInfo; + } + + public int getEventBestFriendAID() { + return eventBestFriendAID; + } + + public void setEventBestFriendAID(int eventBestFriendAID) { + this.eventBestFriendAID = eventBestFriendAID; + } + + public int getMesoChairCount() { + return mesoChairCount; + } + + public void setMesoChairCount(int mesoChairCount) { + this.mesoChairCount = mesoChairCount; + } + + public boolean isBeastFormWingOn() { + return beastFormWingOn; + } + + public void setBeastFormWingOn(boolean beastFormWingOn) { + this.beastFormWingOn = beastFormWingOn; + } + + public int getActiveNickItemID() { + return activeNickItemID; + } + + public void setActiveNickItemID(int activeNickItemID) { + this.activeNickItemID = activeNickItemID; + } + + public int getMechanicHue() { + return mechanicHue; + } + + public void setMechanicHue(int mechanicHue) { + this.mechanicHue = mechanicHue; + } + + public boolean isOnline() { + return online; + } + + public void setOnline(boolean online) { + boolean changed = online != this.online; + + this.online = online; + if (getGuild() != null) { + setGuild(getGuild()); // Hack to ensure that all chars have the same instance of a guild + Guild g = getGuild(); + GuildMember gm = g.getMemberByCharID(getId()); + if (gm != null) { + gm.setOnline(online); + gm.setChr(online ? this : null); + Alliance ally = getGuild().getAlliance(); + if (ally != null) { + ally.broadcast(WvsContext.allianceResult( + AllianceResult.notifyLoginOrLogout(ally, g, gm, changed)), this); + } else { + getGuild().broadcast(WvsContext.guildResult( + GuildResult.notifyLoginOrLogout(g, gm, online, changed)), this); + } + } + } + if (getParty() != null) { + PartyMember pm = getParty().getPartyMemberByID(getId()); + if (pm != null) { + pm.setChr(online ? this : null); + getParty().broadcast(WvsContext.partyResult(PartyResult.userMigration(getParty()))); + getParty().updateFull(); + } + } + + + for (Friend f : getOnlineFriends()) { + boolean account = f.isAccount(); + Char chr = f.getChr(); + Friend me; + if (account) { + me = chr.getUser().getFriendByUserID(getAccount().getId()); + } else { + me = chr.getFriendByCharID(getId()); + } + if (me != null) { + me.setChr(online ? this : null); + me.setFlag(account ? + online ? FriendFlag.AccountFriendOnline : FriendFlag.AccountFriendOffline + : online ? FriendFlag.FriendOnline : FriendFlag.FriendOffline); + chr.write(WvsContext.friendResult(FriendResult.updateFriend(me))); + } + } + } + + + public void openURL(String url) { + write(FieldPacket.openURL(url)); + } + + + + public final void updateLoginStatus() { + notifyChanges(); + setOnline(false); + } + + + public String SQL(String txtsql,Integer[] columnas){ + + String resultado=""; + List stra = new LinkedList(); + resultado+="["; + + Session session = DatabaseManager.getSession(); + Transaction transaction = session.beginTransaction(); + + Query sql = session.createNativeQuery(txtsql); + List results =sql.getResultList(); + + for(Object[] r : results) { + resultado+="["; + for (Integer col: columnas) { + resultado+= "'"+r[col].toString()+"',"; + } + resultado+="],"; + } + resultado+="]"; + transaction.commit(); + session.close(); + return resultado; + } + + public void Update(String Metodo, String Key, String Value, String KeyID, int ID) { + Session session = DatabaseManager.getSession(); + Transaction transaction = session.beginTransaction(); + org.hibernate.query.Query sql = session.createNativeQuery( "UPDATE " + Metodo + " SET " + Key + " = :Value WHERE " + KeyID + " = :ID "); + sql.setParameter("Value",Value); + sql.setParameter("ID",ID); + sql.executeUpdate(); + transaction.commit(); + session.close(); + } + + + public void partyOnline(boolean online) { + this.online = online; + if (getParty() != null) { + PartyMember pm = getParty().getPartyMemberByID(getId()); + if (pm != null) { + pm.setChr(online ? this : null); + } + } + } + + public void setParty(Party party) { + if (party != null) { + setPartyID(party.getId()); + } else { + setPartyID(0); + } + this.party = party; + } + + public Party getParty() { + return party; + } + + /** + * Logs a User fully out (after crash/request to go to world select). + */ + public void logout() { + punishLieDetectorEvasion(); + log.info("Logging out " + getName()); + if (getField().getForcedReturn() != GameConstants.NO_MAP_ID) { + setFieldID(getField().getForcedReturn()); + } + if (getTradeRoom() != null) { + Char other = getTradeRoom().getOther(); + getTradeRoom().cancelTrade(); + other.chatMessage("Your trade partner disconnected."); + } + + + updateLoginStatus(); + getField().removeChar(this); + getUser().setCurrentChr(null); + getClient().getChannelInstance().removeChar(this); + Server.getInstance().removeUser(getUser()); // don't unstuck, as that would save the account (twice) + getJobHandler().cancelTimers(); + DatabaseManager.saveToDB(getUser()); + Server.getInstance().removeUser(user); + partyOnline(false); + scriptManagerImpl.getScripts().values().forEach(ScriptInfo::reset); + setChangingChannel(false); + } + + public int getSubJob() { + return getAvatarData().getCharacterStat().getSubJob(); + } + + public void setInstance(Instance instance) { + if (this.instance != null && instance == null) { + this.instance.stopEvents(); + } + this.instance = instance; + } + + public Instance getInstance() { + if (party != null && party.getInstance() != null && party.getInstance().getChars().contains(this)) { + return party.getInstance(); + } + return instance; + } + + private void showProperUI(int fromField, int toField) { + if (GameConstants.getMaplerunnerField(toField) > 0 && GameConstants.getMaplerunnerField(fromField) <= 0) { + write(FieldPacket.openUI(UIType.PLATFORM_STAGE_LEAVE)); + } else if (GameConstants.getMaplerunnerField(fromField) > 0 && GameConstants.getMaplerunnerField(toField) <= 0) { + write(FieldPacket.closeUI(UIType.PLATFORM_STAGE_LEAVE)); + } + } + + public int calculateBulletIDForAttack() { + Item weapon = getEquippedInventory().getFirstItemByBodyPart(BodyPart.Weapon); + if (weapon == null) { + return 0; + } + Predicate p; + int id = weapon.getItemId(); + + if (ItemConstants.isClaw(id)) { + p = i -> ItemConstants.isThrowingStar(i.getItemId()); + } else if (ItemConstants.isBow(id)) { + p = i -> ItemConstants.isBowArrow(i.getItemId()); + } else if (ItemConstants.isXBow(id)) { + p = i -> ItemConstants.isXBowArrow(i.getItemId()); + } else if (ItemConstants.isGun(id)) { + p = i -> ItemConstants.isBullet(i.getItemId()); + } else { + return 0; + } + Item i = getConsumeInventory().getItems().stream().sorted(Comparator.comparing(Item::getBagIndex)).filter(p).findFirst().orElse(null); + return i != null ? i.getItemId() : 0; + } + + public int getBulletIDForAttack() { + return bulletIDForAttack; + } + + public void setBulletIDForAttack(int bulletIDForAttack) { + this.bulletIDForAttack = bulletIDForAttack; + } + + public void setShop(NpcShopDlg shop) { + this.shop = shop; + } + + public NpcShopDlg getShop() { + return shop; + } + + /** + * Checks if this Char can hold an Item in their inventory, assuming that its quantity is 1. + * + * @param id the item's itemID + * @return whether or not this Char can hold an item in their inventory + */ + public boolean canHold(int id) { + boolean canHold; + if (ItemConstants.isEquip(id)) { //Equip + canHold = getEquipInventory().getSlots() > getEquipInventory().getItems().size(); + } else { //Item + ItemInfo ii = ItemData.getItemInfoByID(id); + Inventory inv = getInventoryByType(ii.getInvType()); + Item curItem = inv.getItemByItemID(id); + canHold = (curItem != null && curItem.getQuantity() + 1 < ii.getSlotMax()) || inv.getSlots() > inv.getItems().size(); + } + return canHold; + } + + public boolean canHold(int id, int quantity) { + Item item = ItemData.getItemDeepCopy(id); + item.setQuantity(quantity); + List items = new ArrayList<>(); + items.add(item); + return canHold(items); + } + + /** + * Recursive function that checks if this Char can hold a list of items in their inventory. + * + * @param items the list of items this char should be able to hold + * @return whether or not this Char can hold the list of items + */ + public boolean canHold(List items) { + return canHold(items, deepCopyForInvCheck()); + } + + private boolean canHold(List items, Char deepCopiedChar) { + // explicitly use a Char param to avoid accidentally adding items + if (items.size() == 0) { + return true; + } + Item item = items.get(0); + if (canHold(item.getItemId())) { + Inventory inv = deepCopiedChar.getInventoryByType(item.getInvType()); + inv.addItem(item); + items.remove(item); + return deepCopiedChar.canHold(items, deepCopiedChar); + } else { + return false; + } + + } + + private Char deepCopyForInvCheck() { + Char chr = new Char(); + chr.setEquippedInventory(getEquippedInventory().deepCopy()); + chr.setEquipInventory(getEquipInventory().deepCopy()); + chr.setConsumeInventory(getConsumeInventory().deepCopy()); + chr.setEtcInventory(getEtcInventory().deepCopy()); + chr.setInstallInventory(getInstallInventory().deepCopy()); + chr.setCashInventory(getCashInventory().deepCopy()); + return chr; + } + + /** + * Returns the set of personal (i.e., non-account) friends of this Char. + * + * @return The set of personal friends + */ + public Set getFriends() { + return friends; + } + + public void setFriends(Set friends) { + this.friends = friends; + } + + /** + * Returns the total list of friends of this Char + the owning Account's friends. + * + * @return The total list of friends + */ + public Set getAllFriends() { + Set res = new HashSet<>(getFriends()); + res.addAll(getUser().getFriends()); + return res; + } + + public Friend getFriendByCharID(int charID) { + return getFriends().stream().filter(f -> f.getFriendID() == charID).findAny().orElse(null); + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Account getAccount() { + return account; + } + + public void setAccount(Account account) { + this.account = account; + } + + public void removeFriend(Friend friend) { + if (friend != null) { + getFriends().remove(friend); + } + } + + public void removeFriendByID(int charID) { + removeFriend(getFriendByCharID(charID)); + } + + public void addFriend(Friend friend) { + if (getFriendByCharID(friend.getFriendID()) == null) { + getFriends().add(friend); + } + } + + public void setChatClient(Client chatClient) { + this.chatClient = chatClient; + } + + public Client getChatClient() { + return chatClient; + } + + public List getMacros() { + return macros; + } + + public void setMacros(List macros) { + this.macros = macros; + } + + public void encodeDamageSkins(OutPacket outPacket) { + DamageSkinSaveData defaultSkin = DamageSkinSaveData.DEFAULT_SKIN; + outPacket.encodeByte(true); // hasDamageSkins. Always true in this design. + // check ida for structure + if (getDamageSkin() != null) { + getDamageSkin().encode(outPacket); + } else { + defaultSkin.encode(outPacket); + } + if (getPremiumDamageSkin() != null) { + getPremiumDamageSkin().encode(outPacket); + } else { + defaultSkin.encode(outPacket); + } + outPacket.encodeShort(GameConstants.DAMAGE_SKIN_MAX_SIZE); // slotCount + outPacket.encodeShort(getAccount().getDamageSkins().size()); + for (DamageSkinSaveData dssd : getAccount().getDamageSkins()) { + dssd.encode(outPacket); + } + } + + public boolean canAddMoney(long reqMoney) { + return getMoney() + reqMoney > 0 && getMoney() + reqMoney < GameConstants.MAX_MONEY; + } + + public void addPet(Pet pet) { + getPets().add(pet); + } + + public void removePet(Pet pet) { + getPets().remove(pet); + } + + public void initPets() { + for (PetItem pi : getCashInventory().getItems() + .stream() + .filter(i -> i instanceof PetItem && ((PetItem) i).getActiveState() > 0) + .map(i -> (PetItem) i).collect(Collectors.toList())) { + Pet p = getPets().stream().filter(pet -> pet.getItem().equals(pi)).findAny().orElse(null); + if (p == null) { + // only create a new pet if the active state is > 0 (active), but isn't added to our own list yet + p = pi.createPet(this); + addPet(p); + } + getField().broadcastPacket(UserLocal.petActivateChange(p, true, (byte) 0)); + } + } + + public Pet getPetByIdx(int idx) { + return getPets().stream() + .filter(p -> p.getIdx() == idx) + .findAny() + .orElse(null); + } + + public Pet getPetById(int id) { + for (Pet pet : getPets()) { + if (pet.getItem().getId() == id) { + return pet; + } + } + return null; + } + + public int getFirstPetIdx() { + int chosenIdx = -1; + for (int i = 0; i < GameConstants.MAX_PET_AMOUNT; i++) { + Pet p = getPetByIdx(i); + if (p == null) { + chosenIdx = i; + break; + } + } + return chosenIdx; + } + + /** + * Initializes the equips' enchantment stats. + */ + public void initEquips() { + for (Equip e : getEquippedInventory().getItems().stream().map(e -> (Equip) e).collect(Collectors.toList())) { + e.recalcEnchantmentStats(); + } + for (Equip e : getEquipInventory().getItems().stream().map(e -> (Equip) e).collect(Collectors.toList())) { + e.recalcEnchantmentStats(); + } + } + + + + public MonsterBookInfo getMonsterBookInfo() { + return monsterBookInfo; + } + + public void setMonsterBookInfo(MonsterBookInfo monsterBookInfo) { + this.monsterBookInfo = monsterBookInfo; + } + + public void setDamageCalc(DamageCalc damageCalc) { + this.damageCalc = damageCalc; + } + + public DamageCalc getDamageCalc() { + return damageCalc; + } + + // TODO: Apply set effects. + + public void recalcStats(Set stats) { + if (stats.contains(BaseStat.mhp) || stats.contains(BaseStat.mhpR)) { + int newMHP = getTotalStat(BaseStat.mhp); +// int curMHP = this.maxHP.getAndSet(newMHP); + if (newMHP < getHP()) { + setStatAndSendPacket(Stat.hp, newMHP); + } + if (JobConstants.isDemonAvenger(getJob())) { + ((DemonAvenger) getJobHandler()).sendHpUpdate(); + } + } + if (stats.contains(BaseStat.mmp) || stats.contains(BaseStat.mmpR)) { + int newMMP = getTotalStat(BaseStat.mmp); +// int curMMP = this.maxMP.getAndSet(newMMP); + if (newMMP < getMP()) { + setStatAndSendPacket(Stat.mp, newMMP); + } + } + stats.clear(); + } + + /** + * Gets the current amount of a given stat the character has. Includes things such as skills, items, etc... + * + * @param baseStat the requested stat + * @return the amount of stat + */ + private double getTotalStatAsDouble(BaseStat baseStat) { + // TODO cache this completely + double stat = 0; + if (baseStat == null) { + return stat; + } + if (baseStat.isNonAdditiveStat()) { + // stats like ied, final damage + Set statSet = new HashSet<>(); + // Stat gained by passives + if (getNonAddBaseStats().get(baseStat) != null) { + statSet.addAll(getNonAddBaseStats().get(baseStat)); + } + // Stat gained by buffs + if (getTemporaryStatManager().getNonAddBaseStats().get(baseStat) != null) { + statSet.addAll(getTemporaryStatManager().getNonAddBaseStats().get(baseStat)); + } + // Stat gained by equips + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + // maybe add canEquip here + statSet.addAll(equip.getNonAddBaseStat(baseStat)); + } + // Stat gained by set effects + if (getSetNonAddBaseStats().get(baseStat) != null) { + statSet.addAll(getSetNonAddBaseStats().get(baseStat)); + } + // Character potential + for (CharacterPotential cp : getPotentials()) { + Skill skill = cp.getSkill(); + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); + Map stats = si.getBaseStatValues(this, skill.getCurrentLevel()); + statSet.add(stats.getOrDefault(baseStat, 0)); + } + switch (baseStat) { + case fd: + stat = 100; + for (int s : statSet) { + stat *= 1 + s / 100d; + } + stat -= 100; + break; + case ied: + stat = 100; + for (int s : statSet) { + stat *= 1 - s / 100d; + } + stat = 100 - stat; + break; + } + } else { + // Stat allocated by sp + stat += baseStat.toStat() == null ? 0 : getStat(baseStat.toStat()); + // Stat gained by passives + stat += getBaseStats().getOrDefault(baseStat, 0L); + // Stat gained by buffs + int ctsStat = getTemporaryStatManager().getBaseStats().getOrDefault(baseStat, 0); + stat += ctsStat; + // Stat gained by the stat's corresponding "per level" value + if (baseStat.getLevelVar() != null) { + stat += getTotalStatAsDouble(baseStat.getLevelVar()) * getLevel(); + } + // Stat gained by equips + for (Item item : getEquippedInventory().getItems()) { + Equip equip = (Equip) item; + stat += equip.getBaseStat(baseStat); + } + // Stat gained by set effects + stat += getSetBaseStats().getOrDefault(baseStat, 0); + // Stat gained by the stat's corresponding rate value + if (baseStat.getRateVar() != null) { + stat += stat * (getTotalStat(baseStat.getRateVar()) / 100D); + } + // --- Everything below this doesn't get affected by the rate var + // Character potential + for (CharacterPotential cp : getPotentials()) { + Skill skill = cp.getSkill(); + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); + Map stats = si.getBaseStatValues(this, skill.getCurrentLevel()); + stat += stats.getOrDefault(baseStat, 0); + } + } + return stat; + } + + public int getTotalStat(BaseStat stat) { + return (int) getTotalStatAsDouble(stat); + } + + /** + * Gets a total list of basic stats that a character has, including from skills, items, etc... + * + * @return the total list of basic stats + */ + public Map getTotalBasicStats() { + Map stats = new HashMap<>(); + for (BaseStat bs : BaseStat.values()) { + stats.put(bs, getTotalStat(bs)); + } + return stats; + } + + /** + * Sets whether or not this user has chosen to use up an item to protect their buffs upon next respawn. + * + * @param buffProtector buff protectability + */ + public void setBuffProtector(boolean buffProtector) { + this.buffProtector = buffProtector; + } + + /** + * Returns whether this user has chosen to activate a buff protector for their next respawn. + * + * @return buff protectability + */ + public boolean hasBuffProtector() { + return buffProtector; + } + + /** + * Returns the item the user has for protecting buffs. + * + * @return the Item the user has for prtoecting buffs, or null if there is none. + */ + public Item getBuffProtectorItem() { + int[] buffItems = {5133000, 5133001, 4143000}; + Item item = null; + for (int id : buffItems) { + item = getConsumeInventory().getItemByItemID(id); + if (item == null) { + item = getCashInventory().getItemByItemID(id); + } + if (item != null) { + // just break when an item was found. + break; + } + } + return item; + } + + /** + * Resets the combo kill's timer. Interrupts the previous timer if there was one. + */ + public void comboKillResetTimer() { + if (comboKillResetTimer != null && !comboKillResetTimer.isDone()) { + comboKillResetTimer.cancel(true); + } + comboKillResetTimer = EventManager.addEvent(() -> setComboCounter(0), GameConstants.COMBO_KILL_RESET_TIMER, TimeUnit.SECONDS); + } + + public Map getSkillCoolTimes() { + return skillCoolTimes; + } + + public void addSkillCoolTime(int skillId, long nextusabletime) { + getSkillCoolTimes().put(skillId, nextusabletime); + write(UserLocal.skillCooltimeSetM(skillId, (int) (nextusabletime - Util.getCurrentTimeLong()))); + } + + public void addSkillCoolTime(int skillId, int cooldownTimeMS) { + addSkillCoolTime(skillId, Util.getCurrentTimeLong() + cooldownTimeMS); + } + + public void removeSkillCoolTime(int skillId) { + getSkillCoolTimes().remove(skillId); + } + + public void resetSkillCoolTime(int skillId) { + if (hasSkillOnCooldown(skillId)) { + addSkillCoolTime(skillId, 0); + write(UserLocal.skillCooltimeSetM(skillId, 0)); + } + } + + public void reduceSkillCoolTime(int skillId, long amountInMS) { + if (hasSkillOnCooldown(skillId)) { + long nextUsableTime = getSkillCoolTimes().get(skillId); + addSkillCoolTime(skillId, nextUsableTime - amountInMS); + write(UserLocal.skillCooltimeSetM(skillId, (int) ((nextUsableTime - amountInMS) - System.currentTimeMillis() < 0 ? 0 : (nextUsableTime - amountInMS) - System.currentTimeMillis()))); + } + } + + public long getRemainingCoolTime(int skillId) { + if (hasSkillOnCooldown(skillId)) { + return getSkillCoolTimes().getOrDefault(skillId, System.currentTimeMillis()) - System.currentTimeMillis(); + } + return 0L; + } + + /** + * Checks whether or not a skill is currently on cooldown. + * + * @param skillID the skill's id to check + * @return whether or not a skill is currently on cooldown + */ + public boolean hasSkillOnCooldown(int skillID) { + return System.currentTimeMillis() < getSkillCoolTimes().getOrDefault(skillID, 0L); + } + + /** + * Checks if a skill is allowed to be cast, according to its cooltime. If it is allowed, it immediately sets + * the cooltime and stores the next moment where the skill is allowed. Skills without cooltime are always allowed. + * + * @param skillID the skill id of the skill to put on cooldown + * @return whether or not the skill was allowed + */ + public boolean checkAndSetSkillCooltime(int skillID) { + if (hasSkillOnCooldown(skillID)) { + return false; + } else { + Skill skill = getSkill(skillID); + if (skill != null && SkillData.getSkillInfoById(skillID).hasCooltime()) { + setSkillCooldown(skillID, (byte) skill.getCurrentLevel()); + } + return true; + } + } + + /** + * Sets a skill's cooltime according to their property in the WZ files, and stores the moment where the skill + * comes off of cooldown. + * + * @param skillID the skill's id to set + * @param slv the current skill level + */ + public void setSkillCooldown(int skillID, int slv) { + SkillInfo si = SkillData.getSkillInfoById(skillID); + if (si != null) { + int cdInSec = si.getValue(SkillStat.cooltime, slv); + int cdInMillis = cdInSec > 0 ? cdInSec * 1000 : si.getValue(SkillStat.cooltimeMS, slv); + int alteredcd = getJobHandler().alterCooldownSkill(skillID); + if (alteredcd >= 0) { + cdInMillis = alteredcd; + } + // RuneStone of Skill + if (getTemporaryStatManager().hasStatBySkillId(RuneStone.LIBERATE_THE_RUNE_OF_SKILL) && cdInMillis > 5000 && !si.isNotCooltimeReset()) { + cdInMillis = 5000; + } + if (!hasSkillCDBypass() && cdInMillis > 0) { + addSkillCoolTime(skillID, System.currentTimeMillis() + cdInMillis); + } + } + } + + public CharacterPotentialMan getPotentialMan() { + return potentialMan; + } + + public Set getPotentials() { + return potentials; + } + + public void setPotentials(Set potentials) { + this.potentials = potentials; + } + + public int getHonorExp() { + return getAvatarData().getCharacterStat().getHonorExp(); + } + + public void setHonorExp(int honorExp) { + getAvatarData().getCharacterStat().setHonorExp(honorExp); + } + + /** + * Adds honor exp to this Char, and sends a packet to the client with the new honor exp. + * Honor exp added may be negative, but the total honor exp will never go below 0. + * + * @param exp the exp to add (may be negative) + */ + public void addHonorExp(int exp) { + setHonorExp(Math.max(0, getHonorExp() + exp)); + write(WvsContext.characterHonorExp(getHonorExp())); + } + + public int getDeathCount() { + return deathCount; + } + + public void setDeathCount(int deathCount) { + this.deathCount = deathCount; + } + + public Set getLinkSkills() { + return getAccount().getLinkSkills().stream() + .filter(ls -> ls.getUsingID() == getId()) + .collect(Collectors.toSet()); + } + + /** + * Adds a skill to this Char. If the Char already has this skill, just changes the levels. + * + * @param skillID the skill's id to add + * @param currentLevel the current level of the skill + * @param masterLevel the master level of the skill + */ + public void addSkill(int skillID, int currentLevel, int masterLevel) { + Skill skill = SkillData.getSkillDeepCopyById(skillID); + if (skill == null && !SkillConstants.isMakingSkillRecipe(skillID)) { + log.error("No such skill found."); + return; + } + skill.setCurrentLevel(currentLevel); + skill.setMasterLevel(masterLevel); + addSkill(skill); + write(WvsContext.changeSkillRecordResult(skill)); + } + + public long getRuneCooldown() { + return runeStoneCooldown; + } + + public void setRuneCooldown(long runeCooldown) { + this.runeStoneCooldown = runeCooldown; + } + + public MemorialCubeInfo getMemorialCubeInfo() { + return memorialCubeInfo; + } + + public void setMemorialCubeInfo(MemorialCubeInfo memorialCubeInfo) { + this.memorialCubeInfo = memorialCubeInfo; + } + + public Set getFamiliars() { + return familiars; + } + + public void setFamiliars(Set familiars) { + this.familiars = familiars; + } + + public boolean hasFamiliar(int familiarID) { + return getFamiliars().stream().anyMatch(f -> f.getFamiliarID() == familiarID); + } + + public Familiar getFamiliarByID(int familiarID) { + return getFamiliars().stream().filter(f -> f.getFamiliarID() == familiarID).findAny().orElse(null); + } + + public void addFamiliar(Familiar familiar) { + getFamiliars().add(familiar); + } + + public void removeFamiliarByID(int familiarID) { + removeFamiliar(getFamiliarByID(familiarID)); + } + + public void removeFamiliar(Familiar familiar) { + if (familiar != null) { + getFamiliars().remove(familiar); + } + } + + public void setActiveFamiliar(Familiar activeFamiliar) { + this.activeFamiliar = activeFamiliar; + } + + public Familiar getActiveFamiliar() { + return activeFamiliar; + } + + public boolean hasSkillCDBypass() { + return skillCDBypass; + } + + public void setSkillCDBypass(boolean skillCDBypass) { + this.skillCDBypass = skillCDBypass; + } + + + public Set getStolenSkills() { + return stolenSkills; + } + + public void setStolenSkills(Set stolenSkills) { + this.stolenSkills = stolenSkills; + } + + public void addStolenSkill(StolenSkill stolenSkill) { + getStolenSkills().add(stolenSkill); + } + + public void removeStolenSkill(StolenSkill stolenSkill) { + if (stolenSkill != null) { + getStolenSkills().remove(stolenSkill); + } + } + + public StolenSkill getStolenSkillByPosition(int position) { + return getStolenSkills().stream().filter(ss -> ss.getPosition() == position).findAny().orElse(null); + } + + public StolenSkill getStolenSkillBySkillId(int skillId) { + return getStolenSkills().stream().filter(ss -> ss.getSkillid() == skillId).findAny().orElse(null); + } + + + public Set getChosenSkills() { + return chosenSkills; + } + + public void setChosenSkills(Set chosenSkills) { + this.chosenSkills = chosenSkills; + } + + public void addChosenSkill(ChosenSkill chosenSkill) { + getChosenSkills().add(chosenSkill); + } + + public void removeChosenSkill(ChosenSkill chosenSkill) { + if (chosenSkill != null) { + getChosenSkills().remove(chosenSkill); + } + } + + public ChosenSkill getChosenSkillByPosition(int position) { + return getChosenSkills().stream().filter(ss -> ss.getPosition() == position).findAny().orElse(null); + } + + public boolean isChosenSkillInStolenSkillList(int skillId) { + return getStolenSkills().stream().filter(ss -> ss.getSkillid() == skillId).findAny().orElse(null) != null; + } + + public Map getBaseStats() { + return baseStats; + } + + public Map> getNonAddBaseStats() { + return nonAddBaseStats; + } + + /** + * Adds a BaseStat's amount to this Char's BaseStat cache. + * + * @param bs The BaseStat + * @param amount the amount of BaseStat to add + */ + public void addBaseStat(BaseStat bs, int amount) { + if (bs != null) { + if (bs.isNonAdditiveStat()) { + if (!getNonAddBaseStats().containsKey(bs)) { + getNonAddBaseStats().put(bs, new HashSet<>()); + } + getNonAddBaseStats().get(bs).add(amount); +// chatMessage("[addBaseStat] key: %s value: %s", bs.toString(), Integer.toString(amount)); + } else { + getBaseStats().put(bs, getBaseStats().getOrDefault(bs, 0L) + amount); +// chatMessage("[addBaseStat else] key: %s value: %s", bs.toString(), Integer.toString(amount)); + } + } + } + + /** + * Removes a BaseStat's amount from this Char's BaseStat cache. + * + * @param bs The BaseStat + * @param amount the amount of BaseStat to remove + */ + public void removeBaseStat(BaseStat bs, int amount) { + addBaseStat(bs, -amount); + } + + public void addItemToInventory(int id, int quantity) { + if (ItemConstants.isEquip(id)) { //Equip + Equip equip = ItemData.getEquipDeepCopyFromID(id, false); + addItemToInventory(equip.getInvType(), equip, false); + getClient().write(WvsContext.inventoryOperation(true, false, + Add, (short) equip.getBagIndex(), (byte) -1, 0, equip)); + + } else { //Item + Item item = ItemData.getItemDeepCopy(id); + item.setQuantity(quantity); + addItemToInventory(item); + getClient().write(WvsContext.inventoryOperation(true, false, + Add, (short) item.getBagIndex(), (byte) -1, 0, item)); + + } + } + + public int getSpentHyperSp() { + int sp = 0; + for (int skillID = 80000400; skillID <= 80000418; skillID++) { + Skill skill = getSkill(skillID); + if (skill != null) { + sp += SkillConstants.getTotalNeededSpForHyperStatSkill(skill.getCurrentLevel()); + } + } + return sp; + } + + public int getSpentPassiveHyperSkillSp() { + int sp = 0; + for (Skill skill : getSkills()) { + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); + if (si.getHyper() == 1) { + sp += skill.getCurrentLevel(); + } + } + return sp; + } + + public int getSpentActiveHyperSkillSp() { + int sp = 0; + for (Skill skill : getSkills()) { + SkillInfo si = SkillData.getSkillInfoById(skill.getSkillId()); + if (si.getHyper() == 2) { + sp += skill.getCurrentLevel(); + } + } + return sp; + } + + public int getRewardPoints() { + return rewardPoints; + } + + public void setRewardPoints(int rewardPoints) { + this.rewardPoints = rewardPoints; + } + + public int[] getHyperRockFields() { + return hyperrockfields; + } + + public void setHyperRockFields(int[] hyperrockfields) { + this.hyperrockfields = hyperrockfields; + } + + public int[] getTowerChairs() { + return towerChairs; + } + + public void setTowerChairs(int[] towerChairs) { + this.towerChairs = towerChairs; + } + + public boolean isChangingChannel() { + return changingChannel; + } + + public void setChangingChannel(boolean changingChannel) { + this.changingChannel = changingChannel; + } + + public int getPartyID() { + return partyID; + } + + public void setPartyID(int partyID) { + this.partyID = partyID; + } + + public byte getMonsterParkCount() { + return monsterParkCount; + } + + public void setMonsterParkCount(byte monsterParkCount) { + this.monsterParkCount = monsterParkCount; + } + + public TownPortal getTownPortal() { + return townPortal; + } + + public void setTownPortal(TownPortal townPortal) { + this.townPortal = townPortal; + } + + public TradeRoom getTradeRoom() { + return tradeRoom; + } + + public void setTradeRoom(TradeRoom tradeRoom) { + this.tradeRoom = tradeRoom; + } + + public void damage(int damage) { + damage(damage, false); + } + + public void damage(int damage, boolean showHitAboveHead) { + HitInfo hi = new HitInfo(); + hi.hpDamage = damage; + if (showHitAboveHead) { + write(UserPacket.effect(Effect.changeHPEffect(-damage))); + } + getJobHandler().handleHit(getClient(), hi); + } + + public void die() { + setStatAndSendPacket(Stat.hp, 0); + write(UserLocal.openUIOnDead(true, getBuffProtectorItem() != null, false, false, false, ReviveType.NORMAL, 0)); + } + + public void changeChannel(byte channelId) { + changeChannelAndWarp(channelId, getFieldID()); + } + + public void changeChannelAndWarp(byte channelId, int fieldId) { + setChangingChannel(true); + Field field = getField(); + if (getFieldID() != fieldId) { + setField(getOrCreateFieldByCurrentInstanceType(fieldId)); + } + DatabaseManager.saveToDB(getAccount()); + int worldID = getClient().getChannelInstance().getWorldId().getVal(); + World world = Server.getInstance().getWorldById(worldID); + field.removeChar(this); + Channel channel = world.getChannelById(channelId); + channel.addClientInTransfer(channelId, getId(), getClient()); + short port = (short) channel.getPort(); + write(ClientSocket.migrateCommand(true, port)); + } + + public void changeChannelAndWarp(int channel, int fieldID) { + Client c = getClient(); + c.setOldChannel(c.getChannel()); + changeChannelAndWarp((byte) channel, fieldID); + } + + @Override + public String toString() { + return "Char{" + + "(" + super.toString() + + ")id=" + id + + ", name=" + getName() + + '}'; + } + + public void setBattleRecordOn(boolean battleRecordOn) { + this.battleRecordOn = battleRecordOn; + } + + public boolean isBattleRecordOn() { + return battleRecordOn; + } + + public void checkAndRemoveExpiredItems() { + Inventory[] inventories = new Inventory[]{getEquippedInventory(), getEquipInventory(), getConsumeInventory(), + getEtcInventory(), getInstallInventory(), getCashInventory()}; + Set expiredItems = new HashSet<>(); + for (Inventory inv : inventories) { + expiredItems.addAll( + inv.getItems().stream() + .filter(item -> item.getDateExpire().isExpired()) + .collect(Collectors.toSet()) + ); + } + List expiredItemIDs = expiredItems.stream().map(Item::getItemId).collect(Collectors.toList()); + write(WvsContext.message(MessageType.GENERAL_ITEM_EXPIRE_MESSAGE, expiredItemIDs)); + for (Item item : expiredItems) { + consumeItem(item); + if (item.getItemId() == ItemConstants.GAGAGUCCI) { + int qid = QuestConstants.PVAC_DATA; + if (getRecordFromQuestEx(qid, "vac") == 1) { + setQuestRecordEx(qid, "vac", 0); + chatMessage("Pvac has been disabled since your item has expired"); + } + } + } + } + + public boolean isGuildMaster() { + return getGuild() != null && getGuild().getLeaderID() == getId(); + } + + /** + * Checks if this Char has any of the given quests in progress. Also true if the size of the given set is 0. + * + * @param quests the set of quest ids to check + * @return whether or not this Char has any of the given quests + */ + public boolean hasAnyQuestsInProgress(Set quests) { + return quests.size() == 0 || quests.stream().anyMatch(this::hasQuestInProgress); + } + + public int getPreviousFieldID() { + return previousFieldID == 0 || previousFieldID == 999999999 ? 100000000 : previousFieldID; + } + + public void setPreviousFieldID(int previousFieldID) { + this.previousFieldID = previousFieldID; + } + + public long getNextRandomPortalTime() { + return nextRandomPortalTime; + } + + public void setNextRandomPortalTime(long nextRandomPortalTime) { + this.nextRandomPortalTime = nextRandomPortalTime; + } + + public Set getMatrixRecords() { + return matrixRecords; + } + + public void setMatrixRecords(Set matrixRecords) { + this.matrixRecords = matrixRecords; + } + + public int getNodeShards() { + Quest quest = getQuestManager().getQuestById(QuestConstants.NODESHARD_COUNT); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.NODESHARD_COUNT); + quest.setProperty("count", 0); + getQuestManager().addQuest(quest); + } + return Integer.parseInt(quest.getProperty("count")); + } + + public void setNodeShards(int nodeShards) { + Quest quest = getQuestManager().getQuestById(QuestConstants.NODESHARD_COUNT); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.NODESHARD_COUNT); + quest.setProperty("count", 0); + getQuestManager().addQuest(quest); + } + quest.setProperty("count", nodeShards); + write(WvsContext.questRecordExMessage(quest)); + } + + public int getDojoPoints() { + Quest quest = getQuestManager().getQuestById(QuestConstants.DOJO_COUNT); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.DOJO_COUNT); + quest.setProperty("point", 0); + getQuestManager().addQuest(quest); + } + return Integer.parseInt(quest.getProperty("point")); + } + + public void setDojoPoints(int dojoPoints) { + Quest quest = getQuestManager().getQuestById(QuestConstants.DOJO_COUNT); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.DOJO_COUNT); + quest.setProperty("point", 0); + getQuestManager().addQuest(quest); + } + quest.setProperty("point", dojoPoints); + write(WvsContext.questRecordExMessage(quest)); + } + + public int getPQPoints() { + Quest quest = getQuestManager().getQuestById(QuestConstants.PQPOINT_COUNT); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.PQPOINT_COUNT); + quest.setProperty("count", 0); + getQuestManager().addQuest(quest); + } + return Integer.parseInt(quest.getProperty("count")); + } + + public void setPQPoints(int PQPoints) { + Quest quest = getQuestManager().getQuestById(QuestConstants.PQPOINT_COUNT); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.PQPOINT_COUNT); + quest.setProperty("count", 0); + getQuestManager().addQuest(quest); + } + quest.setProperty("count", PQPoints); + write(WvsContext.questRecordExMessage(quest)); + } + + public void setMVPMileage(int mvp) { + Quest quest = getQuestManager().getQuestById(QuestConstants.MVP_MILEAGE); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.MVP_MILEAGE); + quest.setProperty("amount", 0); + quest.setProperty("todayAmount", 0); + getQuestManager().addQuest(quest); + } + quest.setProperty("todayAmount_20190910", mvp); + quest.setProperty("amount", mvp); + write(WvsContext.questWorldShareMessage(quest)); + } + + public int getMVPMileage() { + Quest quest = getQuestManager().getQuestById(QuestConstants.MVP_MILEAGE); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.MVP_MILEAGE); + quest.setProperty("amount", 0); + getQuestManager().addQuest(quest); + } + return Integer.parseInt(quest.getProperty("amount")); + } + + public void setQuestRecordEx(int questID, String property, int Amount) { + Quest quest = getQuestManager().getQuestById(questID); + if (quest == null) { + quest = QuestData.createQuestFromId(questID); + quest.setProperty(property, 0); + getQuestManager().addQuest(quest); + } + quest.setProperty(property, Amount); + write(WvsContext.questRecordExMessage(quest)); + } + + public int getZeroWeaponRank() { + Quest quest = getQuestManager().getQuestById(QuestConstants.ZERO_DATA); + if (quest == null) { + quest = QuestData.createQuestFromId(QuestConstants.ZERO_DATA); + quest.setProperty("wepRank", 0); + getQuestManager().addQuest(quest); + } + if (quest.getProperty("wepRank") == null) { + quest.setProperty("wepRank", 0); + } + return Integer.parseInt(quest.getProperty("wepRank")); + } + + + + public void addNodeShards(int shards) { + setNodeShards(getNodeShards() + shards); + } + + public void addDojoPoints(int dojoPoints) { + setDojoPoints(getDojoPoints() + dojoPoints); + } + + public void addPqPoints(int pqPoints) { + setPQPoints(getPQPoints() + pqPoints); + } + + public UnionMember createUnionMember() { + return new UnionMember(1, this, null); + } + + public Union getUnion() { + return getAccount().getUnion(); + } + + public void clearCurrentDirectionNode() { + this.currentDirectionNode.clear(); + } + + public int getCurrentDirectionNode(int node) { + Integer direction = currentDirectionNode.getOrDefault(node, null); + if (direction == null) { + currentDirectionNode.put(node, 0); + } + return currentDirectionNode.get(node); + } + + public void increaseCurrentDirectionNode(int node) { + Integer direction = currentDirectionNode.getOrDefault(node, null); + if (direction == null) { + currentDirectionNode.put(node, 1); + } else { + currentDirectionNode.put(node, direction + 1); + } + } + + public void punishLieDetectorEvasion() { + if (getLieDetectorAnswer().length() > 0) { + failedLieDetector(); + } + } + + public String getLieDetectorAnswer() { + return lieDetectorAnswer; + } + + public void setLieDetectorAnswer(String answer) { + lieDetectorAnswer = answer; + } + + public void failedLieDetector() { + setLieDetectorAnswer(""); + chatMessage(SpeakerChannel, "You have failed the Lie Detector test."); + + getClient().write(WvsContext.antiMacroResult(null, AntiMacro.AntiMacroResultType.AntiMacroRes_Fail.getVal(), AntiMacro.AntiMacroType.AntiMacroFieldRequest.getVal())); + + // TODO: handle fail + } + + public void passedLieDetector() { + setLieDetectorAnswer(""); + chatMessage(SpeakerChannel, "You have passed the Lie Detector test!"); + + getClient().write(WvsContext.antiMacroResult(null, AntiMacro.AntiMacroResultType.AntiMacroRes_Success.getVal(), AntiMacro.AntiMacroType.AntiMacroFieldRequest.getVal())); + + // TODO: handle pass + } + + public boolean sendLieDetector() { + return sendLieDetector(false); + } + + public boolean sendLieDetector(boolean force) { + // LD ran too recently (15 min) + if (!force && lastLieDetector != 0 && System.currentTimeMillis() - lastLieDetector < 900_000L) { + return false; + } + + // TODO: don't allow more than 3 refreshes + + lieDetectorAnswer = ""; + String font = AntiMacro.FONTS[Util.getRandom(AntiMacro.FONTS.length - 1)]; + + String options = "abcdefghijklmnopqrstuvwxyz0123456789"; + + for (int i = 1; i <= 6; i++) { + if (Util.getRandom(1) == 0) { + options = options.toUpperCase(); + } else { + options = options.toLowerCase(); + } + + lieDetectorAnswer += options.charAt(Util.getRandom(options.length() - 1)); + } + + try { + AntiMacro am = new AntiMacro(font, lieDetectorAnswer); + lastLieDetector = System.currentTimeMillis(); + + byte[] image = am.generateImage(196, 44, Color.BLACK, AntiMacro.getRandomColor()); + getClient().write(WvsContext.antiMacroResult(image, AntiMacro.AntiMacroResultType.AntiMacroRes.getVal(), AntiMacro.AntiMacroType.AntiMacroFieldRequest.getVal())); + } catch (IOException | FontFormatException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public OffenseManager getOffenseManager() { + return getUser().getOffenseManager(); + } + + /** + * Applies the mp consumption of a skill. + * + * @param skillID the skill's id + * @param slv the current skill level + * @return whether the consumption was successful (unsuccessful = not enough mp) + */ + public boolean applyMpCon(int skillID, int slv) { + int curMp = getStat(Stat.mp); + SkillInfo si = SkillData.getSkillInfoById(skillID); + if (si == null) { + return true; + } + int mpCon = (int) (si.getValue(SkillStat.mpCon, slv) * getBaseStats().getOrDefault(BaseStat.costmpR, (long) 100) / 100D); + boolean hasEnough = curMp >= mpCon; + if (hasEnough// Kinesis Doesn't use MP + && !JobConstants.isKinesis(getJob()) + + // Luminous' Dark Skills do not consume MP if in Equilibrium mode + && !(JobConstants.isLuminous(getJob()) + && getTemporaryStatManager().hasStat(Larkness) + && getTemporaryStatManager().getOption(Larkness).rOption == Luminous.EQUILIBRIUM2 + && SkillConstants.isLarknessDarkSkill(skillID)) + + && getTemporaryStatManager().getOptByCTSAndSkill(IndieBooster, Kanna.SPIRITS_DOMAIN) == null + ) { + + addStatAndSendPacket(Stat.mp, -mpCon); + } + return hasEnough; + } + + public boolean hasTutor() { + return tutor; + } + + public void hireTutor(boolean set) { + tutor = set; + write(UserLocal.hireTutor(set)); + } + + /** + * Shows tutor automated message (the client is taking the message information from wz). + * + * @param id the id of the message. + * @param duration message duration + */ + public void tutorAutomatedMsg(int id, int duration) { + if (!tutor) { + hireTutor(true); + } + write(UserLocal.tutorMsg(id, duration)); + } + + /** + * Shows tutor custom message (you decide which message the tutor will say). + * + * @param message your custom message + * @param width size of the message box + * @param duration message duration + */ + public void tutorCustomMsg(String message, int width, int duration) { + if (!tutor) { + hireTutor(true); + } + write(UserLocal.tutorMsg(message, width, duration)); + } + + public void setTransferField(int fieldID) { + this.transferField = fieldID; + this.transferFieldReq = fieldID == 0 ? 0 : getField().getId(); + } + + public int getTransferField() { + return transferField; + } + + public int getTransferFieldReq() { + return transferFieldReq; + } + + public void setMakingSkillLevel(int skillID, int level) { + Skill skill = getSkill(skillID); + if (skill != null) { + skill.setCurrentLevel((level << 24) + getMakingSkillProficiency(skillID)); + addSkill(skill); + write(WvsContext.changeSkillRecordResult(skill)); + } + } + + public int getMakingSkillLevel(int skillID) { + return (getSkillLevel(skillID) >> 24) <= 0 ? 0 : getSkillLevel(skillID) >> 24; + } + + public void setMakingSkillProficiency(int skillID, int proficiency) { + Skill skill = getSkill(skillID); + if (skill != null) { + skill.setCurrentLevel((getMakingSkillLevel(skillID) << 24) + proficiency); + addSkill(skill); + write(WvsContext.changeSkillRecordResult(skill)); + } + } + + public int getMakingSkillProficiency(int skillID) { + return (getSkillLevel(skillID) & 0xFFFFFF) <= 0 ? 0 : getSkillLevel(skillID) & 0xFFFFFF; + } + + public void addMakingSkillProficiency(int skillID, int amount) { + int makingSkillID = SkillConstants.recipeCodeToMakingSkillCode(skillID); + int level = getMakingSkillLevel(makingSkillID); + + int neededExp = SkillConstants.getNeededProficiency(level); + if (neededExp <= 0) { + return; + } + int exp = getMakingSkillProficiency(makingSkillID); + if (exp >= neededExp) { + write(UserLocal.chatMsg(ChatType.GameDesc, "You can't gain any more Herbalism mastery until you level your skill.")); + write(UserLocal.chatMsg(ChatType.GameDesc, "See the appropriate NPC in Ardentmill to level up.")); + setMakingSkillProficiency(makingSkillID, neededExp); + return; + } + int newExp = exp + amount; + write(UserLocal.chatMsg(ChatType.GameDesc, SkillConstants.getMakingSkillName(makingSkillID) + "'s mastery increased. (+" + amount + ")")); + if (newExp >= neededExp) { + write(UserLocal.noticeMsg("You've accumulated " + SkillConstants.getMakingSkillName(makingSkillID) + " mastery. See an NPC in town to level up.", true)); + setMakingSkillProficiency(makingSkillID, neededExp); + } else { + setMakingSkillProficiency(makingSkillID, newExp); + } + } + + public void makingSkillLevelUp(int skillID) { + int level = getMakingSkillLevel(skillID); + int neededExp = SkillConstants.getNeededProficiency(level); + if (neededExp <= 0) { + return; + } + int exp = getMakingSkillProficiency(skillID); + if (exp >= neededExp) { + setMakingSkillProficiency(skillID, 0); + setMakingSkillLevel(skillID, level + 1); + Stat trait = Stat.craftEXP; + switch (skillID) { + case 92000000: + trait = Stat.senseEXP; + break; + case 92010000: + trait = Stat.willEXP; + break; + } + addTraitExp(trait, (int) Math.pow(2, (level + 1) + 2)); + write(FieldPacket.fieldEffect(FieldEffect.playSound("profession/levelup", 100))); + } + } + + public int getTotalAf() { + return getEquippedInventory().getItems().stream().mapToInt(item -> ((Equip) item).getArc()).sum(); + } + + public void addNx(int nx) { + User user = getUser(); + user.addNXPrepaid(nx); + if (nx != 0) { + write(UserPacket.scriptProgressMessage(String.format("You have gained %,d NX.", nx))); + write(UserPacket.progressMessageFont(ProgressMessageFontType.Normal, 16, ProgressMessageColourType.White, 300, String.format("You have gained %,d NX.", nx))); + write(WvsContext.setMaplePoints(user.getNxPrepaid())); + } + } + + public void deductNX(int nx) { + User user = getUser(); + user.addNXPrepaid(nx); + if (nx != 0) { + write(UserPacket.scriptProgressMessage(String.format("You have lost %,d NX.", nx))); + write(UserPacket.progressMessageFont(ProgressMessageFontType.Normal, 16, ProgressMessageColourType.Red, 300, String.format("You have lost %,d NX.", nx))); + write(WvsContext.setMaplePoints(user.getNxPrepaid())); + } + } + + // No idea if this correct + public void addDP(int dp) { + User user = getUser(); + user.setDonationPoints(dp); + if (dp != 0) { + write(UserPacket.progressMessageFont(ProgressMessageFontType.Normal, 16, ProgressMessageColourType.White, 300, String.format("You have gained %,d DP.", dp))); + write(WvsContext.setMaplePoints(user.getDonationPoints())); + } + } + + public void initBlessingSkillNames() { + Account account = getAccount(); + Char fairyChar = null; + for (Char chr : account.getCharacters()) { + if (!chr.equals(this) + && chr.getLevel() >= 10 + && (fairyChar == null || chr.getLevel() > fairyChar.getLevel())) { + fairyChar = chr; + } + } + if (fairyChar != null) { + setBlessingOfFairy(fairyChar.getName()); + } + Char empressChar = null; + for (Char chr : account.getCharacters()) { + if (!chr.equals(this) + && (JobConstants.isCygnusKnight(chr.getJob()) || JobConstants.isMihile(chr.getJob()) + && chr.getLevel() >= 5 + && (empressChar == null || chr.getLevel() > empressChar.getLevel()))) { + empressChar = chr; + } + } + if (empressChar != null) { + setBlessingOfEmpress(empressChar.getName()); + } + } + + public void initBlessingSkills() { + Char fairyChar = getAccount().getCharByName(getBlessingOfFairy()); + if (fairyChar != null) { + addSkill(SkillConstants.getFairyBlessingByJob(getJob()), + Math.min(20, fairyChar.getLevel() / 10), 20); + } + Char empressChar = getAccount().getCharByName(getBlessingOfEmpress()); + if (empressChar != null) { + addSkill(SkillConstants.getEmpressBlessingByJob(getJob()), + Math.min(30, empressChar.getLevel() / 5), 30); + } + } + + public Map getHyperPsdSkillsCooltimeR() { + return hyperPsdSkillsCooltimeR; + } + + public void setHyperPsdSkillsCooltimeR(Map hyperPsdSkillsCooltimeR) { + this.hyperPsdSkillsCooltimeR = hyperPsdSkillsCooltimeR; + } + + public boolean isInvincible() { + return isInvincible; + } + + public void setInvincible(boolean invincible) { + isInvincible = invincible; + } + + public void setQuickslotKeys(List quickslotKeys) { + this.quickslotKeys = quickslotKeys; + } + + public List getQuickslotKeys() { + return quickslotKeys; + } + + public Dragon getDragon() { + Dragon dragon = null; + if (getJobHandler() instanceof Evan) { + dragon = ((Evan) getJobHandler()).getDragon(); + } + return dragon; + } + + public void renewDragon() { + Dragon dragon = null; + if (dragon != null) { + getField().broadcastPacket(DragonPool.removeDragon(dragon)); + dragon = null; + } + if (dragon != null) { + getField().broadcastPacket(DragonPool.createDragon(dragon)); + } + } + + public void rebuildQuestExValues(boolean save) { + if (save) { + for (Map.Entry questEx : questRecordEx.entrySet()) { + String qrValue = ""; + for (Map.Entry quest : questEx.getValue().getValues().entrySet()) { + qrValue += String.format("%s=%s;", quest.getKey(), quest.getValue()); + } + questsExStorage.put(questEx.getKey(), qrValue.substring(0, qrValue.length() - 1)); + } + } else { + for (Map.Entry questEx : questsExStorage.entrySet()) { + String[] qrValues = questEx.getValue().split(";"); + QuestEx quest = new QuestEx(questEx.getKey()); + for (String qrValue : qrValues) { + String[] val = qrValue.split("="); + quest.setValue(val[0], val[1]); + } + questRecordEx.put(quest.getQuestID(), quest); + } + } + } + + public boolean setQuestEx(int questID, String key, String value) { + return setQuestEx(questID, key, value, false); + } + + public boolean setQuestEx(int questID, String key, String value, boolean onMigrate) { + if (key == null || key.isEmpty() || key.equals("")) { + return false; + } + if (value.equals("DayN")) { + return false; + } + QuestEx str = getQuestRecordEx().getOrDefault(questID, null); + if (str == null) { + getQuestRecordEx().put(questID, new QuestEx(questID)); + str = getQuestRecordEx().getOrDefault(questID, null); + if (str == null) { + return false; + } + } + if (str.setValue(key, value)) { + if (!onMigrate) + rebuildQuestExValues(true); + return true; + } + return false; + } + + public String getQuestEx(int questID, String key) { + QuestEx str = getQuestRecordEx().getOrDefault(questID, null); + if (str != null) { + return str.getValue(key); + } + return null; + } + + public QuestEx getQuestEx(int questID) { + return getQuestRecordEx().getOrDefault(questID, null); + } + + public Map getQuestRecordEx() { + return questRecordEx; + } + + /** + * Checks if this Char has a skill with at least a given level. + * + * @param skillID the skill to get + * @param slv the minimum skill level + * @return whether or not this Char has the skill with the given skill level + */ + public boolean hasSkillWithSlv(int skillID, short slv) { + Skill skill = getSkill(skillID); + return skill != null && skill.getCurrentLevel() >= slv; + } + + public Set getOnlineFriends() { + Set friends = new HashSet<>(getFriends()); + friends.addAll(getUser().getFriends()); + friends = friends.stream().filter(Friend::isOnline).collect(Collectors.toSet()); + return friends; + } + + public boolean isTalkingToNpc() { + return talkingToNpc; + } + + public void setTalkingToNpc(boolean talkingToNpc) { + this.talkingToNpc = talkingToNpc; + } + + public void useStatChangeItem(Item item, boolean consume) { + TemporaryStatManager tsm = getTemporaryStatManager(); + int itemID = item.getItemId(); + Map specStats = ItemData.getItemInfoByID(itemID).getSpecStats(); + if (specStats.size() > 0) { + ItemBuffs.giveItemBuffsFromItemID(this, tsm, itemID); + } else { + switch (itemID) { + case 2050004: // All cure + tsm.removeAllDebuffs(); + break; + default: + chatMessage(ChatType.Mob, String.format("Unhandled stat change item %d", itemID)); + } + } + if (consume) { + consumeItem(item); + } + dispose(); + } + + public void incrementUnionRank() { + Union union = getUnion(); + int curUnionRank = union.getUnionRank(); + if (curUnionRank == 0) { + union.setUnionRank(101); + } else { + if (union.getUnionRank() % 100 == 5) { + union.setUnionRank(curUnionRank + 95); + } + union.setUnionRank(curUnionRank + 1); + } + Quest quest = getQuestManager().getQuests().get(QuestConstants.UNION_RANK); + quest.setProperty("rank", union.getUnionRank()); + write(WvsContext.questRecordExMessage(quest)); + } + + public int getActiveUnionPreset() { + QuestManager qm = getQuestManager(); + Quest quest = qm.getQuestById(QuestConstants.UNION_PRESET); + if (quest == null) { + qm.addQuest(QuestConstants.UNION_PRESET); + quest = qm.getQuestById(QuestConstants.UNION_PRESET); + quest.setProperty("presetNo", 0); + write(WvsContext.questRecordExMessage(quest)); + } + return quest.getIntProperty("presetNo"); + } + + public void setActiveUnionPreset(int preset) { + QuestManager qm = getQuestManager(); + Quest quest = qm.getQuestById(QuestConstants.UNION_PRESET); + if (quest == null) { + qm.addQuest(QuestConstants.UNION_PRESET); + quest = qm.getQuestById(QuestConstants.UNION_PRESET); + } + quest.setProperty("presetNo", preset); + write(WvsContext.questRecordExMessage(quest)); + } + + public void encodeSymbolData(OutPacket outPacket) { + Set equips = new HashSet<>(getEquippedInventory().getItems()); + equips.addAll(getEquipInventory().getItems()); + Set symbols = equips.stream() + .filter(i -> ItemConstants.isArcaneSymbol(i.getItemId())) + .map(i -> (Equip) i) + .collect(Collectors.toSet()); + for (Equip symbol : symbols) { + int bagIndex = symbol.getInvType() == EQUIPPED ? -symbol.getBagIndex() : symbol.getBagIndex(); + outPacket.encodeInt(bagIndex); + symbol.encodeSymbolData(outPacket); + } + outPacket.encodeInt(0); // indicate end of previous structure + } + + public Item getItemBySn(long itemSn) { + Inventory[] invs = new Inventory[]{getEquippedInventory(), getEquipInventory(), getConsumeInventory(), + getEtcInventory(), getInstallInventory(), getCashInventory()}; + Item item = null; + for (Inventory i : invs) { + item = i.getItemBySN(itemSn); + if (item != null) { + break; + } + } + return item; + } + + + public void addCharacterPotentials() { + CharacterPotentialMan cpm = getPotentialMan(); + Map potentialMap = new HashMap<>(); + for (CharacterPotential cp : getPotentials()) { + potentialMap.put(cp.getKey(), cp); + } + List potentials = CharacterPotentialMan.generateRandomPotential(3, cpm.getGrade(), true, potentialMap); + for (CharacterPotential cp : potentials) { + cpm.addPotential(cp); + } + } + + public void encodeChatInfo(OutPacket outPacket, String msg) { + // vm'd sub + outPacket.encodeString(getName()); + outPacket.encodeString(msg); + outPacket.encodeInt(getUserId()); + outPacket.encodeInt(getId()); + outPacket.encodeByte(0); // ? + outPacket.encodeInt(getId()); + } + + public boolean isSkillInfoMode() { + return skillInfoMode; + } + + public void setSkillInfoMode(boolean skillInfoMode) { + this.skillInfoMode = skillInfoMode; + } + + public boolean isDebugMode() { + return debugMode; + } + + public void setDebugMode(boolean debugMode) { + this.debugMode = debugMode; + } + + public void initDamageSkin() { + QuestManager qm = getQuestManager(); + Quest q = qm.getQuestById(QuestConstants.DAMAGE_SKIN); + if (q != null) { + DamageSkinSaveData dssd = getAccount().getDamageSkinBySkinID(Integer.parseInt(q.getQRValue())); + setDamageSkin(dssd); + } + } + + public List getBuyBack() { + return buyBack; + } + + public void addItemToBuyBack(Item item) { + NpcShopItem nsi = new NpcShopItem(); + nsi.setItemID(item.getItemId()); + nsi.setItem(item); + nsi.setBuyBack(true); + int cost; + if (ItemConstants.isEquip(item.getItemId())) { + cost = ((Equip) item).getPrice(); + } else { + cost = ItemData.getItemInfoByID(item.getItemId()).getPrice() * item.getQuantity(); + } + nsi.setPrice(cost); + nsi.setQuantity((short) item.getQuantity()); + getBuyBack().add(nsi); + } + + public NpcShopItem getBuyBackItemBySlot(int slot) { + NpcShopItem nsi = null; + if (slot >= 0 && slot < getBuyBack().size()) { + return getBuyBack().get(slot); + } + return nsi; + } + + public void removeBuyBackItem(NpcShopItem nsi) { + getBuyBack().remove(nsi); + } + + public int getLocation() { + return location; + } + + public Android getAndroid() { + return android; + } + + public void setAndroid(Android android) { + this.android = android; + } + + public void setLocation(int location) { + this.location = location; + } + + public Map getPsychicAreas() { + return psychicAreas; + } + + public void setPsychicAreas(Map psychicAreas) { + this.psychicAreas = psychicAreas; + } + + public void addPsychicArea(int localPsychicAreaKey, PsychicArea psychicArea) { + getPsychicAreas().put(localPsychicAreaKey, psychicArea); + } + + public void removePsychicArea(int localPsychicAreaKey) { + getPsychicAreas().remove(localPsychicAreaKey); + } + + public Map getForceAtoms() { + return forceAtoms; + } + + /** + * Initializes this Char's Android according to their heart + android equips. Will not do anything if an Android + * already exists. + * + * @param override Whether or not to override the old Android if one exists. + */ + public void initAndroid(boolean override) { + if (getAndroid() == null || override) { + Item heart = getEquippedItemByBodyPart(BodyPart.MechanicalHeart); + Item android = getEquippedItemByBodyPart(BodyPart.Android); + if (heart != null && android != null && ((Equip) heart).getAndroidGrade() + 3 >= ((Equip) android).getAndroidGrade()) { + int androidId = ((Equip) android).getAndroid(); + AndroidInfo androidInfo = EtcData.getAndroidInfoById(androidId); + if (getAndroid() != null) { + getField().removeLife(getAndroid()); + } + Android newAndroid = new Android(this, androidInfo); + if (getPosition() != null) { + newAndroid.setPosition(getPosition().deepCopy()); + } + setAndroid(newAndroid); + } + } + } + + public void setForceAtoms(Map forceAtoms) { + this.forceAtoms = forceAtoms; + } + + public void addForceAtom(ForceAtom forceAtom) { + forceAtom.getKeys().forEach(k -> getForceAtoms().put(k, forceAtom)); + } + + public void addForceAtomByKey(int faKey, ForceAtom forceAtom) { + getForceAtoms().put(faKey, forceAtom); + } + + public void removeForceAtomByKey(int key) { + getForceAtoms().remove(key); + } + + public ForceAtom getForceAtomByKey(int key) { + return getForceAtoms().getOrDefault(key, null); + } + + public void recreateforceAtom(int faKey, ForceAtom forceAtom) { + addForceAtomByKey(faKey, forceAtom); + ForceAtomInfo fai = forceAtom.getFaiByKey(faKey); + ForceAtom fa = new ForceAtom(forceAtom); + fa.setFaiList(Collections.singletonList(fai)); + getField().broadcastPacket(FieldPacket.createForceAtom(fa)); + } + + public void createForceAtom(ForceAtom forceAtom) { + createForceAtom(forceAtom, true); + } + + public void createForceAtom(ForceAtom forceAtom, boolean broadcastToField) { + if (broadcastToField) { + getField().broadcastPacket(FieldPacket.createForceAtom(forceAtom)); + } else { + write(FieldPacket.createForceAtom(forceAtom)); + } + addForceAtom(forceAtom); + } + + public void clearForceAtomMap() { + getForceAtoms().clear(); + setForceAtomKeyCounter(1); + } + + public int getForceAtomKeyCounter() { + return forceAtomKeyCounter; + } + + public void setForceAtomKeyCounter(int forceAtomKeyCounter) { + this.forceAtomKeyCounter = forceAtomKeyCounter; + } + + public int getNewForceAtomKey() { + return forceAtomKeyCounter++; + } + + public void setCopy(Char copy) { + this.copy = copy; + } + + public Char getCopy() { + return copy; + } + + public boolean isInAPartyWith(Char otherChr) { + if (otherChr == this) { + return true; + } + if (otherChr.getParty() == null || getParty() == null) { + return false; + } + return otherChr.getPartyID() == getPartyID(); + } + + public boolean isDead() { + return getHP() <= 0; + } + + public void showSkillOnOffEffect() { + + // Wind Archer + int questId = QuestConstants.SKILL_COMMAND_LOCK_ARK; // questId 1544 + Quest quest = getQuestManager().getQuestById(questId); + if (quest == null) { + return; + } + getField().broadcastPacket(UserPool.skillOnOffEffect(getId(), quest.getQRValue().equalsIgnoreCase(""))); + } + + public int getFirstOpenMatrixSlot() { + // TODO: check for max slot count + List activeRecords = getMatrixRecords().stream().filter(MatrixRecord::isActive).sorted(Comparator.comparingInt(MatrixRecord::getPosition)).collect(Collectors.toList()); + int pos = -1; + boolean found = false; + for (MatrixRecord mr : activeRecords) { + int newPos = mr.getPosition(); + if (newPos - pos > 1) { + // gap in positions + pos = newPos - 1; + found = true; + break; + } + pos = newPos; + } + return found ? pos : pos + 1; + } + + public WeaponType getWeaponType() { + return ItemConstants.getWeaponType(getEquippedItemByBodyPart(BodyPart.Weapon).getItemId()); + } + + public boolean isShowDamageCalc() { + return showDamageCalc; + } + + public void setShowDamageCalc(boolean showDamageCalc) { + this.showDamageCalc = showDamageCalc; + } + + public boolean canEquip(Item item) { + if (item instanceof Equip && !((Equip) item).isVestige()) { + Equip equip = (Equip) item; + int lv = getLevel(); + CharacterStat cs = getAvatarData().getCharacterStat(); + int str = cs.getStr(); + int inte = cs.getInt(); + int dex = cs.getDex(); + int luk = cs.getLuk(); + short job = getJob(); + short rJob = equip.getrJob(); + boolean matchingJob = rJob == 0; + if (!matchingJob) { + boolean warrior = (rJob & 1) != 0; + boolean magician = (rJob & 1 << 1) != 0; + boolean bowman = (rJob & 1 << 2) != 0; + boolean thief = (rJob & 1 << 3) != 0; + boolean pirate = (rJob & 1 << 4) != 0; + matchingJob = (warrior && JobConstants.isWarriorEquipJob(job)) || + (magician && JobConstants.isMageEquipJob(job)) || + (bowman && JobConstants.isArcherEquipJob(job)) || + (thief && JobConstants.isThiefEquipJob(job)) || + (pirate && JobConstants.isPirateEquipJob(job)); + } + return equip.getRequiredLevel() <= lv + && equip.getrDex() <= dex + && (equip.getrStr() <= str || JobConstants.isDemonAvenger(job)) + && equip.getrInt() <= inte + && equip.getrLuk() <= luk && matchingJob; + } + return false; + } + + public List getHotTimeRewards() { + return hotTimeRewards; + } + + public void setHotTimeRewards(List hotTimeRewards) { + this.hotTimeRewards = hotTimeRewards; + } + + public void giveStartingItems() { + addHotTimeReward(2436226, HotTimeRewardType.GAME_ITEM, 1, 0, 0,0,"A gift from the Admin of Elite."); + addHotTimeReward(2436226, HotTimeRewardType.MESO, 1, 10000000,0, 0,"A gift from the Admin of Elite."); + addHotTimeReward(2436226, HotTimeRewardType.EXPERIENCE, 1, 0, 1000,0,"A gift from the Admin of Elite."); + addHotTimeReward(2436226, HotTimeRewardType.MAPLE_POINT, 1, 0, 0,10000,"A gift from the Admin of Elite."); + } + + public void addHotTimeReward(int itemID, HotTimeRewardType type, int quantity, int meso, int exp, int maplepoint, String description) { + HotTimeReward reward = new HotTimeReward(); + reward.setCharId(getId()); + reward.setItemId(itemID); + reward.setStartTime(reward.getStartTime()); + reward.setEndTime(FileTime.fromDate(reward.getStartTime().toLocalDateTime().plusDays(30))); + reward.setRewardType(type); + reward.setQuantity(quantity); + reward.setMesoAmount(meso); + reward.setExpAmount(exp); + reward.setMaplePointAmount(maplepoint); + reward.setDescription(description); + DatabaseManager.saveToDB(reward); + checkHotTimeRewards(); + } + + public void removeHotTimeReward(HotTimeReward reward) { + Session session = DatabaseManager.getSession(); + Transaction transaction = session.beginTransaction(); + Query query = session.createQuery("DELETE HotTimeReward WHERE id = :id"); + query.setParameter("id", reward.getId()); + query.executeUpdate(); + transaction.commit(); + } + + + public void forceUpdateSecondary(Item oldSecondary, Item newSecondary) { + if (oldSecondary != null) { + consumeItem(oldSecondary); + } + int secondaryBagIndex = BodyPart.Shield.getVal(); + newSecondary.setBagIndex(secondaryBagIndex); + getEquippedInventory().addItem(newSecondary); + getAvatarData().getAvatarLook().getHairEquips().put((byte) secondaryBagIndex, newSecondary.getItemId()); + newSecondary.updateToChar(this); + } + + public void checkHotTimeRewards() { + // check if the character has gifts + Session session = DatabaseManager.getSession(); + Transaction transaction = session.beginTransaction(); + Query query = session.createQuery("FROM HotTimeReward WHERE charid = :charid"); + query.setParameter("charid", getId()); + List results = ((org.hibernate.query.Query) query).list(); + transaction.commit(); + setHotTimeRewards(results); + + if (getHotTimeRewards().size() > 0) { + Stack rewardsToSend = new Stack<>(); + for (HotTimeReward hotTimeReward : getHotTimeRewards()) { + rewardsToSend.push(hotTimeReward); + } + write(WvsContext.sendHotTimeReward(HotTimeRewardSendType.REWARD, rewardsToSend)); + } + } + + public void enterNewStageField() { + getTemporaryStatManager().removeAllStats(true); + getField().removeChar(this); + setOnline(false); + } + + public Map getActiveSetEffects() { + return activeSetEffects; + } + + public void initSetEffects() { + getActiveSetEffects().clear(); + getSetBaseStats().clear(); + getSetNonAddBaseStats().clear(); + for (Equip e : getEquippedInventory().getItems().stream().map(e -> (Equip) e).collect(Collectors.toList())) { + int setID = e.getSetItemID(); + if (setID != 0) { + addSetEffect(setID); + } + } + } + + public void updateSetEffect(int setId, int fromLevel, int toLevel) { + if (toLevel > fromLevel) { // increased set level + ItemSet is = ItemData.getItemSetById(setId); + // check if item set has stats at new level + if (is.getEffects().containsKey(toLevel)) { + for (Map.Entry stats : is.getEffects().get(toLevel).entrySet()) { + addSetBaseStat(stats.getKey(), stats.getValue().intValue()); + } + } + } else if (toLevel < fromLevel) { // decreased set level + ItemSet is = ItemData.getItemSetById(setId); + if (is.getEffects().containsKey(fromLevel)) { + for (Map.Entry stats : is.getEffects().get(fromLevel).entrySet()) { + removeSetBaseStat(stats.getKey(), stats.getValue().intValue()); + } + } + } + } + + /** + * Adds a set to the current active set effects. + * + * @param setID + */ + public void addSetEffect(int setID) { + if (getActiveSetEffects().containsKey(setID)) { + int oldCount = getActiveSetEffects().get(setID); + int newCount = oldCount + 1; + getActiveSetEffects().put(setID, newCount); + updateSetEffect(setID, oldCount, newCount); + } else { + getActiveSetEffects().put(setID, 1); + updateSetEffect(setID, 0, 1); + } + } + + /** + * Removes a set from the current active set effects. + * + * @param setID + */ + public void removeSetEffect(int setID) { + if (getActiveSetEffects().containsKey(setID)) { + int oldCount = getActiveSetEffects().get(setID); + int newCount = oldCount - 1; + if (newCount <= 0) { + getActiveSetEffects().remove(setID); + updateSetEffect(setID, oldCount, newCount); + } else { + getActiveSetEffects().put(setID, newCount); + updateSetEffect(setID, oldCount, newCount); + } + } + } + + public Map getSetBaseStats() { return setBaseStats; } + + public Map> getSetNonAddBaseStats() { return setNonAddBaseStats; } + + public void addSetBaseStat(BaseStat bs, int value) { + if (bs.isNonAdditiveStat()) { + if (!getSetNonAddBaseStats().containsKey(bs)) { + getSetNonAddBaseStats().put(bs, new HashSet<>()); + } + getSetNonAddBaseStats().get(bs).add(value); + } else { + getSetBaseStats().put(bs, getSetBaseStats().getOrDefault(bs, 0) + value); + } + } + + public void removeSetBaseStat(BaseStat bs, int value) { + addSetBaseStat(bs, -value); + } + + public boolean isPetItemVacOn() { + return petItemVac; + } + + public void setPetItemVac(boolean on) { + petItemVac = on; + } +} \ No newline at end of file diff --git a/src/main/java/net/swordie/ms/client/character/CharacterStat.java b/src/main/java/net/swordie/ms/client/character/CharacterStat.java new file mode 100755 index 0000000..d5fc728 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/CharacterStat.java @@ -0,0 +1,698 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.client.character.cards.CharacterCard; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.db.converters.FileTimeConverter; +import net.swordie.ms.constants.GameConstants; +import net.swordie.ms.constants.JobConstants; +import net.swordie.ms.util.SystemTime; + +import net.swordie.ms.util.FileTime; + +import javax.persistence.*; + +/** + * Created by Tim on 2/18/2017. + */ +@Entity +@Table(name = "characterstats") +public class CharacterStat { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private int id; + @Column(name = "characterId") + private int characterId; + private int characterIdForLog; + private int worldIdForLog; + private String name; + private int gender; + private int skin; + private int face; + private int hair; + private int mixBaseHairColor; + private int mixAddHairColor; + private int mixHairBaseProb; + private int level; + private int job; + private int str; + private int dex; + private int inte; + private int luk; + private int hp; + private int maxHp; + private int mp; + private int maxMp; + private int ap; + private int sp; + private long exp; + private int pop; // fame + private long money; + private int wp; + private double pierce; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "extendSP") + private ExtendSP extendSP; + private long posMap; + private int portal; + private int subJob; + private int defFaceAcc; + private int fatigue; + private int lastFatigueUpdateTime; + private int charismaExp; + private int insightExp; + private int willExp; + private int craftExp; + private int senseExp; + private int charmExp; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "nonCombatStatDayLimit") + private NonCombatStatDayLimit nonCombatStatDayLimit; + private int pvpExp; + private int pvpGrade; + private int pvpPoint; + private int pvpModeLevel; + private int pvpModeType; + private int eventPoint; + private int albaActivityID; + @Convert(converter = FileTimeConverter.class) + private FileTime albaStartTime; + private int albaDuration; + private int albaSpecialReward; + private boolean burning; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "characterCard") + private CharacterCard characterCard; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "accountLastLogout") + private SystemTime accountLastLogout; + @Convert(converter = FileTimeConverter.class) + private FileTime lastLogout; + private int gachExp; + private int honorExp; + @Transient + private int wingItem; + @Convert(converter = FileTimeConverter.class) + private FileTime nextAvailableFameTime; + + public CharacterStat() { + extendSP = new ExtendSP(7); + nonCombatStatDayLimit = new NonCombatStatDayLimit(); + albaStartTime = FileTime.fromType(FileTime.Type.PLAIN_ZERO); + lastLogout = FileTime.fromType(FileTime.Type.PLAIN_ZERO); + characterCard = new CharacterCard(0, 0, (byte) 0); + accountLastLogout = new SystemTime(1970, 1); + nextAvailableFameTime = FileTime.fromType(FileTime.Type.PLAIN_ZERO); + // TODO fill in default vals + } + + public CharacterStat(String name, int job) { + this(); + this.name = name; + this.job = job; + } + + public double getPierce() { + return pierce; + } + + public void gainPierce(double pierce) { + if (this.pierce + pierce >= 100.00) { + this.pierce = 100.00; + } else this.pierce += pierce; + } + + public void setPierce(double pierce) { + if (pierce >= 100.00) + this.pierce = 100.0; + else this.pierce = pierce; + } + + public String getName() { + return name; + } + + public short getAp() { + return (short) ap; + } + + public short getDex() { + return (short) dex; + } + + public int getHp() { + return hp; + } + + public short getInt() { + return (short) inte; + } + + public short getJob() { + return (short) job; + } + + public short getLevel() { + return (short) level; + } + + public short getCharismaExp() { + return (short) charismaExp; + } + + public short getLuk() { + return (short) luk; + } + + public int getMaxHp() { + return maxHp; + } + + public int getMaxMp() { + return maxMp; + } + + public int getMp() { + return mp; + } + + public short getPop() { //Fame + return (short) pop; + } + + public short getSp() { + return (short) sp; + } + + public short getStr() { + return (short) str; + } + + public short getWp() { + return (short) wp; + } + + public long getExp() { + return exp; + } + + public long getMoney() { + return money; + } + + public ExtendSP getExtendSP() { + return extendSP; + } + + public int getCharacterId() { + return characterId; + } + + public int getCharacterIdForLog() { + return characterId; + } + + public int getFace() { + return face; + } + + public int getGender() { + return gender; + } + + public int getHair() { + return hair; + } + + public int getMixAddHairColor() { + return mixAddHairColor; + } + + public int getMixBaseHairColor() { + return mixBaseHairColor; + } + + public int getMixHairBaseProb() { + return mixHairBaseProb; + } + + public int getSkin() { + return skin; + } + + public int getWorldIdForLog() { + return worldIdForLog; + } + + public short getCharmExp() { + return (short) charmExp; + } + + public short getCraftExp() { + return (short) craftExp; + } + + public int getAlbaActivityID() { + return albaActivityID; + } + + public int getEventPoint() { + return eventPoint; + } + + public int getPortal() { + return portal; + } + + public int getAlbaDuration() { + return albaDuration; + } + + public short getInsightExp() { + return (short) insightExp; + } + + public int getAlbaSpecialReward() { + return albaSpecialReward; + } + + public int getPvpExp() { + return pvpExp; + } + + public int getPvpGrade() { + return pvpGrade; + } + + public int getPvpModeLevel() { + return pvpModeLevel; + } + + public int getPvpModeType() { + return pvpModeType; + } + + public int getPvpPoint() { + return pvpPoint; + } + + public short getSenseExp() { + return (short) senseExp; + } + + public short getWillExp() { + return (short) willExp; + } + + public long getPosMap() { + return posMap == 0 ? 931000000 : posMap; + } + + public CharacterCard getCharacterCard() { + return characterCard; + } + + public NonCombatStatDayLimit getNonCombatStatDayLimit() { + return nonCombatStatDayLimit; + } + + public FileTime getAlbaStartTime() { + return albaStartTime; + } + + public int getDefFaceAcc() { + return defFaceAcc; + } + + public int getFatigue() { + return fatigue; + } + + public int getLastFatigueUpdateTime() { + return lastFatigueUpdateTime; + } + + public int getSubJob() { + return subJob; + } + + public SystemTime getAccountLastLogout() { + return accountLastLogout; + } + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getCharacterId()); + outPacket.encodeInt(getCharacterIdForLog()); + outPacket.encodeInt(getWorldIdForLog()); + outPacket.encodeString(getName(), 13); + + outPacket.encodeByte(getGender()); + outPacket.encodeByte(getSkin()); + outPacket.encodeInt(getFace()); + outPacket.encodeInt(getHair()); + outPacket.encodeByte(getMixBaseHairColor()); + outPacket.encodeByte(getMixAddHairColor()); + outPacket.encodeByte(getMixHairBaseProb()); + + outPacket.encodeInt(getLevel()); + outPacket.encodeShort(getJob()); + outPacket.encodeShort(getStr()); + outPacket.encodeShort(getDex()); + outPacket.encodeShort(getInt()); + outPacket.encodeShort(getLuk()); + outPacket.encodeInt(getHp()); + outPacket.encodeInt(getMaxHp()); + outPacket.encodeInt(getMp()); + outPacket.encodeInt(getMaxMp()); + outPacket.encodeShort(getAp()); + if (JobConstants.isExtendSpJob(getJob())) { + getExtendSP().encode(outPacket); + } else { + outPacket.encodeShort(getSp()); + } + outPacket.encodeLong(getExp()); + outPacket.encodeInt(getPop()); + outPacket.encodeInt(getWp()); // Waru + outPacket.encodeInt(getGachExp()); + outPacket.encodeInt((int) getPosMap()); + outPacket.encodeByte(getPortal()); + outPacket.encodeInt(0); // TODO figure out + outPacket.encodeShort(getSubJob()); + if (JobConstants.isDemon(getJob()) || JobConstants.isXenon(getJob()) || JobConstants.isBeastTamer(getJob()) + || JobConstants.isArk(getJob())) { + outPacket.encodeInt(getDefFaceAcc()); + } + outPacket.encodeShort(getFatigue()); // short in 188 + outPacket.encodeInt(getLastFatigueUpdateTime()); + outPacket.encodeInt(getCharismaExp()); + outPacket.encodeInt(getInsightExp()); + outPacket.encodeInt(getWillExp()); + outPacket.encodeInt(getCraftExp()); + outPacket.encodeInt(getSenseExp()); + outPacket.encodeInt(getCharmExp()); + getNonCombatStatDayLimit().encode(outPacket); + + outPacket.encodeInt(getPvpExp()); + outPacket.encodeByte(getPvpGrade()); + outPacket.encodeInt(getPvpPoint()); + outPacket.encodeByte(2); + /* Fuck that, setting the above byte lower than 2 will make all 3rd and 4th job that have the property + ((skillID % 10000) / 10000 == 0) be bugged (you see the level, but can't actually use it). ?????????????*/ + + outPacket.encodeByte(getPvpModeType()); + outPacket.encodeInt(getEventPoint()); + + // New - 188 - looks like char card + // Start sub_8D7900 + for (int i = 0; i < 9; i++) { + outPacket.encodeInt(1); + outPacket.encodeInt(2); // byte -> int v199 + outPacket.encodeInt(3); + } + // End sub_8D7900 + outPacket.encodeInt(3); + outPacket.encodeInt(5); + // Start burning info, names are guesses + outPacket.encodeLong(0); // ftStart + outPacket.encodeLong(0); // ftEnd + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeInt(0); + outPacket.encodeByte(isBurning()); // bBurning + outPacket.encodeInt(0); + outPacket.encodeInt(0); + // End burning info + // End new 188 + outPacket.encodeByte(false); // new 200 + } + + public FileTime getLastLogout() { + return lastLogout; + } + + public void setLastLogout(FileTime lastLogout) { + this.lastLogout = lastLogout; + } + + public boolean isBurning() { + return burning; + } + + public void setBurning(boolean burning) { + this.burning = burning; + } + + public void setJob(int job) { + this.job = job; + } + + public void setName(String name) { + this.name = name; + } + + public int getGachExp() { + return gachExp; + } + + public void setCharacterId(int characterId) { + this.characterId = characterId; + } + + public void setCharacterIdForLog(int characterIdForLog) { + this.characterIdForLog = characterIdForLog; + } + + public void setWorldIdForLog(int worldIdForLog) { + this.worldIdForLog = worldIdForLog; + } + + public void setGender(int gender) { + this.gender = gender; + } + + public void setSkin(int skin) { + this.skin = skin; + } + + public void setFace(int face) { + this.face = face; + } + + public void setHair(int hair) { + this.hair = hair; + } + + public void setMixAddHairColor(int mixAddHairColor) { + this.mixAddHairColor = mixAddHairColor; + } + + public void setMixHairBaseProb(int mixHairBaseProb) { + this.mixHairBaseProb = mixHairBaseProb; + } + + public void setMixBaseHairColor(int mixBaseHairColor) { + this.mixBaseHairColor = mixBaseHairColor; + } + + public void setLevel(int level) { + this.level = level; + } + + public void setStr(int str) { + this.str = str; + } + + public void setDex(int dex) { + this.dex = dex; + } + + public void setInt(int inte) { + this.inte = inte; + } + + public void setLuk(int luk) { + this.luk = luk; + } + + public void setHp(int hp) { + this.hp = Math.min(hp, GameConstants.MAX_HP_MP); + } + + public void setMaxHp(int maxHp) { + this.maxHp = Math.min(maxHp, GameConstants.MAX_HP_MP); + } + + public void setMp(int mp) { + this.mp = Math.min(mp, GameConstants.MAX_HP_MP); + } + + public void setMaxMp(int maxMp) { + this.maxMp = Math.min(maxMp, GameConstants.MAX_HP_MP); + } + + public void setAp(int ap) { + this.ap = ap; + } + + public void setSp(int sp) { + this.sp = sp; + } + + public void setExp(long exp) { + this.exp = exp; + } + + public void setPop(int pop) { + this.pop = pop; + } + + public void setMoney(long money) { + this.money = money; + } + + public void setWp(int wp) { + this.wp = wp; + } + + public void setPosMap(long posMap) { + this.posMap = posMap; + } + + public void setPortal(int portal) { + this.portal = portal; + } + + public void setSubJob(int subJob) { + this.subJob = subJob; + } + + public void setDefFaceAcc(int defFaceAcc) { + this.defFaceAcc = defFaceAcc; + } + + public void setFatigue(int fatigue) { + this.fatigue = fatigue; + } + + public void setLastFatigueUpdateTime(int lastFatigueUpdateTime) { + this.lastFatigueUpdateTime = lastFatigueUpdateTime; + } + + public void setCharismaExp(int charismaExp) { + this.charismaExp = charismaExp; + } + + public void setInsightExp(int insightExp) { + this.insightExp = insightExp; + } + + public void setWillExp(int willExp) { + this.willExp = willExp; + } + + public void setCraftExp(int craftExp) { + this.craftExp = craftExp; + } + + public void setSenseExp(int senseExp) { + this.senseExp = senseExp; + } + + public void setCharmExp(int charmExp) { + this.charmExp = charmExp; + } + + public void setPvpExp(int pvpExp) { + this.pvpExp = pvpExp; + } + + public void setPvpGrade(int pvpGrade) { + this.pvpGrade = pvpGrade; + } + + public void setPvpPoint(int pvpPoint) { + this.pvpPoint = pvpPoint; + } + + public void setPvpModeLevel(int pvpModeLevel) { + this.pvpModeLevel = pvpModeLevel; + } + + public void setPvpModeType(int pvpModeType) { + this.pvpModeType = pvpModeType; + } + + public void setEventPoint(int eventPoint) { + this.eventPoint = eventPoint; + } + + public void setAlbaActivityID(int albaActivityID) { + this.albaActivityID = albaActivityID; + } + + public void setAlbaDuration(int albaDuration) { + this.albaDuration = albaDuration; + } + + public void setAlbaSpecialReward(int albaSpecialReward) { + this.albaSpecialReward = albaSpecialReward; + } + + public void setGachExp(int gachExp) { + this.gachExp = gachExp; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public void setExtendSP(ExtendSP extendSP) { + this.extendSP = extendSP; + } + + public void setNonCombatStatDayLimit(NonCombatStatDayLimit nonCombatStatDayLimit) { + this.nonCombatStatDayLimit = nonCombatStatDayLimit; + } + + public void setAlbaStartTime(FileTime albaStartTime) { + this.albaStartTime = albaStartTime; + } + + public void setCharacterCard(CharacterCard characterCard) { + this.characterCard = characterCard; + } + + public void setAccountLastLogout(SystemTime accountLastLogout) { + this.accountLastLogout = accountLastLogout; + } + + public int getHonorExp() { + return honorExp; + } + + public void setHonorExp(int honorExp) { + this.honorExp = honorExp; + } + + public void setWingItem(int wingItem) { + this.wingItem = wingItem; + } + + public int getWingItem() { + return wingItem; + } + + public FileTime getNextAvailableFameTime() { + return nextAvailableFameTime; + } + + public void setNextAvailableFameTime(FileTime nextAvailableFameTime) { + this.nextAvailableFameTime = nextAvailableFameTime; + } +} + diff --git a/src/main/java/net/swordie/ms/client/character/CoupleRecord.java b/src/main/java/net/swordie/ms/client/character/CoupleRecord.java new file mode 100755 index 0000000..600af8e --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/CoupleRecord.java @@ -0,0 +1,72 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created on 12/19/2017. + */ +public class CoupleRecord { + private Map snToItemMap = new HashMap<>(); + private int pairCharacterId; + private String pairCharacterName; + private long sn; + private long pairSn; + private int itemID; + + public int getPairCharacterId() { + return pairCharacterId; + } + + public void setPairCharacterId(int pairCharacterId) { + this.pairCharacterId = pairCharacterId; + } + + public String getPairCharacterName() { + return pairCharacterName; + } + + public void setPairCharacterName(String pairCharacterName) { + this.pairCharacterName = pairCharacterName; + } + + public long getSn() { + return sn; + } + + public void setSn(long sn) { + this.sn = sn; + } + + public long getPairSn() { + return pairSn; + } + + public void setPairSn(long pairSn) { + this.pairSn = pairSn; + } + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(0xdeadbeef); + outPacket.encodeString(getPairCharacterName(), 13); + outPacket.encodeLong(0xdeadbeef); + outPacket.encodeLong(0xdeadbeef); + } + + public void encodeForRemote(OutPacket outPacket) { + outPacket.encodeInt(1); // there can be more of the following 3 things (combined) + outPacket.encodeLong(getSn()); + outPacket.encodeLong(getPairSn()); + outPacket.encodeInt(getItemID()); + } + + public int getItemID() { + return itemID; + } + + public void setItemID(int itemID) { + this.itemID = itemID; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/EventCoolDown.java b/src/main/java/net/swordie/ms/client/character/EventCoolDown.java new file mode 100755 index 0000000..d86c03d --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/EventCoolDown.java @@ -0,0 +1,54 @@ +package net.swordie.ms.client.character; + +import javax.persistence.*; + + +@Entity +@Table(name = "eventscooltimes") +public class EventCoolDown { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + @Column(name = "eventType") + private int eventType; + @Column(name = "amountDone") + private int amountDone; + @Column(name = "nextresettime") + private long nextResetTime; + + public int getId() { + return id; + } + + public int getEventType() { + return eventType; + } + + public void setEventType(int eventType) { + this.eventType = eventType; + } + + public int getAmountDone() { + return amountDone; + } + + public void setAmountDone(int amountDone) { + this.amountDone = amountDone; + } + + public long getNextResetTime() { + return nextResetTime; + } + + public void setNextResetTime(long nextResetTime) { + this.nextResetTime = nextResetTime; + } + + public EventCoolDown(int eventType, int amountDone, long nextResetTime) { + this.eventType = eventType; + this.amountDone = amountDone; + this.nextResetTime = nextResetTime; + } + + public EventCoolDown(){ } +} diff --git a/src/main/java/net/swordie/ms/client/character/ExtendSP.java b/src/main/java/net/swordie/ms/client/character/ExtendSP.java new file mode 100755 index 0000000..a92e861 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/ExtendSP.java @@ -0,0 +1,73 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.util.Util; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Tim on 2/18/2017. + */ +@Entity +@Table(name = "extendsp") +public class ExtendSP { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "extendSP_id") + private List spSet; + + public ExtendSP() { + this(0); + } + + public ExtendSP(int subJobs) { + spSet = new ArrayList<>(); + for(int i = 1; i <= subJobs; i++) { + spSet.add(new SPSet((byte) i, 0)); + } + } + + public List getSpSet() { + return spSet; + } + + public int getTotalSp() { + return spSet.stream().mapToInt(SPSet::getSp).sum(); + } + + public void setSpSet(List spSet) { + this.spSet = spSet; + } + + public void encode(OutPacket outPacket) { + outPacket.encodeByte(getSpSet().size()); + for(SPSet spSet : getSpSet()) { + outPacket.encodeByte(spSet.getJobLevel()); + outPacket.encodeInt(spSet.getSp()); + } + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public void setSpToJobLevel(int jobLevel, int sp) { + getSpSet().stream().filter(sps -> sps.getJobLevel() == jobLevel).findFirst().ifPresent(spSet -> spSet.setSp(sp)); + } + + public int getSpByJobLevel(byte jobLevel) { + SPSet spSet = Util.findWithPred(getSpSet(), sps -> sps.getJobLevel() == jobLevel); + if(spSet != null) { + return spSet.getSp(); + } + return -1; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/FarmPotential.java b/src/main/java/net/swordie/ms/client/character/FarmPotential.java new file mode 100755 index 0000000..34144f4 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/FarmPotential.java @@ -0,0 +1,18 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.util.FileTime; + +/** + * Created on 12/20/2017. + */ +public class FarmPotential { + public void encode(OutPacket outPacket) { + int size = 33; + outPacket.encodeInt(size); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(-1); // dwMonsterID + outPacket.encodeFT(FileTime.fromType(FileTime.Type.ZERO_TIME)); // potentialExpire + } + } +} diff --git a/src/main/java/net/swordie/ms/client/character/HyperTPRock.java b/src/main/java/net/swordie/ms/client/character/HyperTPRock.java new file mode 100755 index 0000000..351bed0 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/HyperTPRock.java @@ -0,0 +1,50 @@ +package net.swordie.ms.client.character; + +/** + * Created by on 21-7-2018. + */ +public class HyperTPRock { + + public static void removeFieldId(Char chr, int fieldId) { + for (int i = 0; i < chr.getHyperRockFields().length; i++) { + if (getFieldIdByPosition(chr, i) != fieldId) { + continue; + } + chr.getHyperRockFields()[i] = 999999999; // Removes the map + chr.setHyperRockFields(chr.getHyperRockFields()); + } + } + + public static void addFieldId(Char chr, int fieldId) { + chr.getHyperRockFields()[getFirstEmptyFieldPositon(chr)] = fieldId; + chr.setHyperRockFields(chr.getHyperRockFields()); + } + + public static int getFieldIdByPosition(Char chr, int position) { + return chr.getHyperRockFields()[position]; + } + + public static int getPositionByFieldID(Char chr, int fieldId) { + int position = -1; // Has to be initialised + for (int i = 0; i < chr.getHyperRockFields().length; i++) { + if (getFieldIdByPosition(chr, i) != fieldId) { + continue; + } + position = i; + break; // Ensures it returns the first match, not the last + } + return position; + } + + public static int getFirstEmptyFieldPositon(Char chr) { + int position = -1; // Has to be initalised + for (int i = 0; i < chr.getHyperRockFields().length; i++) { + if (getFieldIdByPosition(chr, i) != 999999999) { + continue; + } + position = i; + break; // Ensures it returns the first match, not the last + } + return position; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/ItemPot.java b/src/main/java/net/swordie/ms/client/character/ItemPot.java new file mode 100755 index 0000000..5af85be --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/ItemPot.java @@ -0,0 +1,10 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; /** + * Created on 12/20/2017. + */ +public class ItemPot { + public void encode(OutPacket outPacket) { + + } +} diff --git a/src/main/java/net/swordie/ms/client/character/LikePoint.java b/src/main/java/net/swordie/ms/client/character/LikePoint.java new file mode 100755 index 0000000..46521ce --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/LikePoint.java @@ -0,0 +1,43 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.util.FileTime; + +/** + * Created on 12/20/2017. + */ +public class LikePoint { + private int point; + private FileTime incTime = FileTime.fromType(FileTime.Type.ZERO_TIME); + private int season; + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getPoint() + 300); + outPacket.encodeFT(getIncTime()); + outPacket.encodeInt(getSeason()); + } + + public int getPoint() { + return point; + } + + public void setPoint(int point) { + this.point = point; + } + + public FileTime getIncTime() { + return incTime; + } + + public void setIncTime(FileTime incTime) { + this.incTime = incTime; + } + + public int getSeason() { + return season; + } + + public void setSeason(int season) { + this.season = season; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/Macro.java b/src/main/java/net/swordie/ms/client/character/Macro.java new file mode 100755 index 0000000..f9ef48a --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/Macro.java @@ -0,0 +1,71 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; + +import javax.persistence.*; + +/** + * Created on 4/2/2018. + */ +@Entity +@Table(name = "macros") +public class Macro { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private String name; + private boolean muted; + @ElementCollection + @CollectionTable(name = "macroskills", joinColumns = @JoinColumn(name = "macroID")) + @OrderColumn(name = "orderCol") + @Column(name = "skillID") + private int[] skills = new int[3]; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int[] getSkills() { + return skills; + } + + public void setSkills(int[] skills) { + this.skills = skills; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public boolean isMuted() { + return muted; + } + + public void setMuted(boolean muted) { + this.muted = muted; + } + + public void setSkillAtPos(int pos, int skillID) { + if(pos >= 0 && pos < 3) { + getSkills()[pos] = skillID; + } + } + + public void encode(OutPacket outPacket) { + outPacket.encodeString(getName()); + outPacket.encodeByte(isMuted()); + for(int i : getSkills()) { + outPacket.encodeInt(i); + } + } +} diff --git a/src/main/java/net/swordie/ms/client/character/MarriageRecord.java b/src/main/java/net/swordie/ms/client/character/MarriageRecord.java new file mode 100755 index 0000000..7cc3d19 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/MarriageRecord.java @@ -0,0 +1,99 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; + +/** + * Created on 12/19/2017. + */ +public class MarriageRecord { + private int marriageNo; + private int groomId; + private int brideId; + private short status; + private int groomItemId; + private int brideItemId; + private String groomName; + private String bridgeName; + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getMarriageNo()); + outPacket.encodeInt(getGroomId()); + outPacket.encodeInt(getBrideId()); + outPacket.encodeShort(getStatus()); + outPacket.encodeInt(getGroomItemId()); + outPacket.encodeInt(getBrideItemId()); + outPacket.encodeString(getGroomName(), 13); //max length 13 + outPacket.encodeString(getBridgeName(), 13); + } + + public int getMarriageNo() { + return marriageNo; + } + + public void setMarriageNo(int marriageNo) { + this.marriageNo = marriageNo; + } + + public int getGroomId() { + return groomId; + } + + public void setGroomId(int groomId) { + this.groomId = groomId; + } + + public int getBrideId() { + return brideId; + } + + public void setBrideId(int brideId) { + this.brideId = brideId; + } + + public short getStatus() { + return status; + } + + public void setStatus(short status) { + this.status = status; + } + + public int getGroomItemId() { + return groomItemId; + } + + public void setGroomItemId(int groomItemId) { + this.groomItemId = groomItemId; + } + + public int getBrideItemId() { + return brideItemId; + } + + public void setBrideItemId(int brideItemId) { + this.brideItemId = brideItemId; + } + + public String getGroomName() { + return groomName; + } + + public void setGroomName(String groomName) { + this.groomName = groomName; + } + + public String getBridgeName() { + return bridgeName; + } + + public void setBridgeName(String bridgeName) { + this.bridgeName = bridgeName; + } + + public void encodeForRemote(OutPacket outPacket) { + // TODO make it so this works for a single player (groom/bride should be turned around 50% of the time) + outPacket.encodeInt(getGroomId()); + outPacket.encodeInt(getBrideId()); + outPacket.encodeInt(getGroomItemId()); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/MiniGameRecord.java b/src/main/java/net/swordie/ms/client/character/MiniGameRecord.java new file mode 100755 index 0000000..647ccc5 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/MiniGameRecord.java @@ -0,0 +1,63 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.util.FileTime; + +/** + * Created on 12/19/2017. + */ +public class MiniGameRecord { + private FileTime fileTime = FileTime.fromType(FileTime.Type.ZERO_TIME); + private int sOwnerName; // string, yet 4 bytes? + private int rewardGradeQ; + private int rewardGradeQHead; + private int rewardGradeQSize; + + public FileTime getFileTime() { + return fileTime; + } + + public void setFileTime(FileTime fileTime) { + this.fileTime = fileTime; + } + + public int getsOwnerName() { + return sOwnerName; + } + + public void setsOwnerName(int sOwnerName) { + this.sOwnerName = sOwnerName; + } + + public int getRewardGradeQ() { + return rewardGradeQ; + } + + public void setRewardGradeQ(int rewardGradeQ) { + this.rewardGradeQ = rewardGradeQ; + } + + public int getRewardGradeQHead() { + return rewardGradeQHead; + } + + public void setRewardGradeQHead(int rewardGradeQHead) { + this.rewardGradeQHead = rewardGradeQHead; + } + + public int getRewardGradeQSize() { + return rewardGradeQSize; + } + + public void setRewardGradeQSize(int rewardGradeQSize) { + this.rewardGradeQSize = rewardGradeQSize; + } + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getFileTime().getHighDateTime()); + outPacket.encodeInt(getsOwnerName()); + outPacket.encodeInt(getRewardGradeQ()); + outPacket.encodeInt(getRewardGradeQHead()); + outPacket.encodeInt(getRewardGradeQSize()); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/MiniRoom.java b/src/main/java/net/swordie/ms/client/character/MiniRoom.java new file mode 100755 index 0000000..da0e1a7 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/MiniRoom.java @@ -0,0 +1,112 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; + +/** + * Created on 3/18/2018. + */ +public class MiniRoom { + + + private byte type; + private int ID; + private String miniRoomTitle; + private boolean aPrivate; + private int gameKind; + private int curUsers; + private int maxUsers; + private boolean gameOn; + private boolean ADBoardRemote; + private String msg; + + public byte getType() { + return type; + } + + public void setType(byte type) { + this.type = type; + } + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getID()); + outPacket.encodeString(getMiniRoomTitle()); + outPacket.encodeByte(isPrivate()); + outPacket.encodeByte(getGameKind()); + outPacket.encodeByte(getCurUsers()); + outPacket.encodeByte(getMaxUsers()); + outPacket.encodeByte(isGameOn()); +// outPacket.encodeByte(isADBoardRemote()); // removed 188? + } + + public int getID() { + return ID; + } + + public void setID(int ID) { + this.ID = ID; + } + + public String getMiniRoomTitle() { + return miniRoomTitle; + } + + public void setMiniRoomTitle(String miniRoomTitle) { + this.miniRoomTitle = miniRoomTitle; + } + + public boolean isPrivate() { + return aPrivate; + } + + public void setPrivate(boolean aPrivate) { + this.aPrivate = aPrivate; + } + + public int getGameKind() { + return gameKind; + } + + public void setGameKind(int gameKind) { + this.gameKind = gameKind; + } + + public int getCurUsers() { + return curUsers; + } + + public void setCurUsers(int curUsers) { + this.curUsers = curUsers; + } + + public int getMaxUsers() { + return maxUsers; + } + + public void setMaxUsers(int maxUsers) { + this.maxUsers = maxUsers; + } + + public boolean isGameOn() { + return gameOn; + } + + public void setGameOn(boolean gameOn) { + this.gameOn = gameOn; + } + + public boolean isADBoardRemote() { + return ADBoardRemote; + } + + public void setADBoardRemote(boolean ADBoardRemote) { + this.ADBoardRemote = ADBoardRemote; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/MonsterCollection.java b/src/main/java/net/swordie/ms/client/character/MonsterCollection.java new file mode 100755 index 0000000..e85ae95 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/MonsterCollection.java @@ -0,0 +1,220 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.packet.Effect; +import net.swordie.ms.connection.packet.UserPacket; +import net.swordie.ms.constants.MonsterCollectionGroup; +import net.swordie.ms.constants.MonsterCollectionRegion; +import net.swordie.ms.constants.MonsterCollectionSession; +import net.swordie.ms.loaders.MonsterCollectionData; +import net.swordie.ms.loaders.containerclasses.MonsterCollectionMobInfo; +import net.swordie.ms.util.FileTime; + +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Sjonnie + * Created on 7/23/2018. + */ +@Entity +@Table(name = "monster_collections") +public class MonsterCollection { + private static final int EXPLORATION_POSITION_START = 20; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + @Transient + private Map collection = new HashMap<>(); + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "monster_collection_mobs", joinColumns = @JoinColumn(name = "collectionid")) + @Column(name = "mobid") + private Set mobs = new HashSet<>(); + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @JoinColumn(name = "collectionid") + private Set monsterCollectionRewards = new HashSet<>(); + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @JoinColumn(name = "collectionid") + private Set monsterCollectionExplorations = new HashSet<>(); + + + public void init(Char chr) { + for (int mob : getMobs()) { + addMob(mob); + } + for (MonsterCollectionReward mcr : getMonsterCollectionRewards()) { + int region = mcr.getRegion(); + int session = mcr.getSession(); + int group = mcr.getGroup(); + if (session == -1) { + collection.get(region).setClaimedReward(true); + } else if (group == -1) { + collection.get(region).getMonsterCollectionSessions().get(session).setRewardClaimed(true); + } else { + collection.get(region).getMonsterCollectionSessions().get(session) + .getMonsterCollectionGroups().get(group).setRewardClaimed(true); + } + } + sendCompleteInfo(chr); + } + + public boolean hasMob(int templateID) { + MonsterCollectionMobInfo mcmi = MonsterCollectionData.getMobInfoByID(templateID); + return mcmi != null && collection.containsKey(mcmi.getRegion()) && + collection.get(mcmi.getRegion()).hasMob(templateID, mcmi); + } + + public void addMob(int templateID) { + MonsterCollectionMobInfo mcmi = MonsterCollectionData.getMobInfoByID(templateID); + if (mcmi == null) { + return; + } + if (!collection.containsKey(mcmi.getRegion())) { + collection.put(mcmi.getRegion(), new MonsterCollectionRegion()); + } + collection.get(mcmi.getRegion()).addMob(mcmi); + getMobs().add(templateID); + } + + public Set getMobs() { + return mobs; + } + + public void setMobs(Set mobs) { + this.mobs = mobs; + } + + public void sendCompleteInfo(Char chr) { + for (Map.Entry entry : collection.entrySet()) { + entry.getValue().sendCompleteInfo(chr, entry.getKey()); + } + } + + public void addMobAndUpdateClient(int templateID, Char chr) { + addMob(templateID); + MonsterCollectionMobInfo mcmi = MonsterCollectionData.getMobInfoByID(templateID); + if (mcmi == null) { + return; + } + collection.get(mcmi.getRegion()).getMonsterCollectionSessions().get(mcmi.getSession()).sendCompletionInfo(chr, + 100000 + mcmi.getRegion() * 100 + mcmi.getSession()); + chr.write(UserPacket.effect(Effect.effectFromWZ("Effect/BasicEff.img/monsterCollectionGet", false, 0, 4, 0))); + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Set getMonsterCollectionRewards() { + return monsterCollectionRewards; + } + + public void setMonsterCollectionRewards(Set monsterCollectionRewards) { + this.monsterCollectionRewards = monsterCollectionRewards; + } + + public MonsterCollectionRegion getRegion(int region) { + return collection.getOrDefault(region, null); + } + + public MonsterCollectionSession getSession(int region, int session) { + if (getRegion(region) != null) { + return getRegion(region).getMonsterCollectionSessions().getOrDefault(session, null); + } + return null; + } + + public MonsterCollectionGroup getGroup(int region, int session, int group) { + if (getSession(region, session) != null) { + return getSession(region, session).getMonsterCollectionGroups().getOrDefault(group, null); + } + return null; + } + + public boolean isComplete(int region, int session, int groupID) { + MonsterCollectionGroup group = getGroup(region, session, groupID); + if (groupID == -1) { + boolean complete = true; + for (Map.Entry entry : getSession(region, session).getMonsterCollectionGroups().entrySet()) { + complete &= isComplete(region, session, entry.getKey()); + } + return complete; + } + return group != null && group.getMobs().size() >= MonsterCollectionData.getRequiredMobs(region, session, groupID); + } + + public MonsterCollectionExploration getExploration(int region, int session, int group) { + int collectionKey = region * 10000 + session * 100 + group; + return getMonsterCollectionExplorations().stream().filter(mce -> mce.getCollectionKey() == collectionKey) + .findAny().orElse(null); + } + + public Set getMonsterCollectionExplorations() { + return monsterCollectionExplorations; + } + + public void setMonsterCollectionExplorations(Set monsterCollectionExplorations) { + this.monsterCollectionExplorations = monsterCollectionExplorations; + } + + public MonsterCollectionExploration createExploration(int region, int session, int group) { + int collectionKey = region * 10000 + session * 100 + group; + int minutes = MonsterCollectionData.getExplorationMinutes(region, session, group); + FileTime ft = FileTime.fromDate(LocalDateTime.now().plusMinutes(minutes)); + MonsterCollectionExploration mce = new MonsterCollectionExploration(collectionKey, ft); + mce.setMonsterKey(String.format("%d:%d:%d:0", region, session, group)); + mce.setPosition(getFirstOpenSlot()); + return mce; + } + + private int getFirstOpenSlot() { + List mces = getMonsterCollectionExplorations().stream() + .sorted(Comparator.comparingInt(MonsterCollectionExploration::getPosition)) + .collect(Collectors.toList()); + int i; + for (i = 0; i < mces.size(); i++) { + MonsterCollectionExploration mce = mces.get(i); + int pos = i + EXPLORATION_POSITION_START; + if (mce.getPosition() != pos) { + return pos; + } + } + return EXPLORATION_POSITION_START + i; + } + + public void addExploration(MonsterCollectionExploration mce) { + getMonsterCollectionExplorations().add(mce); + } + + public void removeExploration(MonsterCollectionExploration mce) { + getMonsterCollectionExplorations().remove(mce); + } + + private int getTotalAmountOfSlots() { + int num; + int mobs = getMobs().size(); + if (mobs >= 600) { + num = 5; + } else if (mobs >= 300) { + num = 4; + } else if (mobs >= 150) { + num = 3; + } else { + num = 2; + } + return num; + } + + public int getOpenExplorationSlots() { + return getTotalAmountOfSlots() - getMonsterCollectionExplorations().size(); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/MonsterCollectionExploration.java b/src/main/java/net/swordie/ms/client/character/MonsterCollectionExploration.java new file mode 100755 index 0000000..0bc58a3 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/MonsterCollectionExploration.java @@ -0,0 +1,100 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.db.converters.FileTimeConverter; +import net.swordie.ms.util.FileTime; +import net.swordie.ms.util.Util; + +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * @author Sjonnie + * Created on 9/30/2018. + */ +@Entity +@Table(name = "monster_collection_explorations") +public class MonsterCollectionExploration { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private int collectionKey; + private String monsterKey; + private int position; + + @Convert(converter = FileTimeConverter.class) + private FileTime endDate; + + public MonsterCollectionExploration() { + } + + public MonsterCollectionExploration(int sessionID, FileTime endDate) { + this.collectionKey = sessionID; + this.endDate = endDate; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public int getCollectionKey() { + return collectionKey; + } + + public void setCollectionKey(int collectionKey) { + this.collectionKey = collectionKey; + } + + public FileTime getEndDate() { + return endDate; + } + + public void setEndDate(FileTime endDate) { + this.endDate = endDate; + } + + public String getMonsterKey() { + return monsterKey; + } + + public void setMonsterKey(String monsterKey) { + this.monsterKey = monsterKey; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MonsterCollectionExploration that = (MonsterCollectionExploration) o; + return collectionKey == that.collectionKey; + } + + @Override + public int hashCode() { + return Objects.hash(collectionKey); + } + + public String getValue(boolean active) { + LocalDateTime ldt = getEndDate().toLocalDateTime().minusHours(2); // so it's the same for the client + return String.format("mobKey=%s;end=%s%s%s%s%s;state=%d", getMonsterKey(), + Util.leftPaddedString(4, '0', String.valueOf(ldt.getYear())), + Util.leftPaddedString(2, '0', String.valueOf(ldt.getMonthValue())), + Util.leftPaddedString(2, '0', String.valueOf(ldt.getDayOfMonth())), + Util.leftPaddedString(2, '0', String.valueOf(ldt.getHour())), + Util.leftPaddedString(2, '0', String.valueOf(ldt.getMinute())), + active ? 1 : 0); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/MonsterCollectionReward.java b/src/main/java/net/swordie/ms/client/character/MonsterCollectionReward.java new file mode 100755 index 0000000..ea72395 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/MonsterCollectionReward.java @@ -0,0 +1,47 @@ +package net.swordie.ms.client.character; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * @author Sjonnie + * Created on 7/23/2018. + */ +@Entity +@Table(name = "monster_collection_rewards") +public class MonsterCollectionReward implements Serializable { + @Id + private int region; + @Id + private int session; // -1 == region (medal) + @Id + @Column(name = "groupid") + private int group; // -1 == session + + public int getRegion() { + return region; + } + + public void setRegion(int region) { + this.region = region; + } + + public int getSession() { + return session; + } + + public void setSession(int session) { + this.session = session; + } + + public int getGroup() { + return group; + } + + public void setGroup(int group) { + this.group = group; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/MonsterPark.java b/src/main/java/net/swordie/ms/client/character/MonsterPark.java new file mode 100755 index 0000000..1be2fad --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/MonsterPark.java @@ -0,0 +1,155 @@ +package net.swordie.ms.client.character; + +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Asura on 27-7-2018. + */ +public class MonsterPark { + + private static final Map mobExpHash; + static { + mobExpHash = new HashMap<>(); + mobExpHash.put(9800046, 36625); // Roid + mobExpHash.put(9800047, 39700); // Neo Huroid + mobExpHash.put(9800045, 42875); // Rurumo + mobExpHash.put(9800049, 46170); // D. Roy + mobExpHash.put(9800048, 71730); // Security Camera + mobExpHash.put(9800050, 97240); // Deet and Roi + mobExpHash.put(9800051, 53010); // Mossy Snail + mobExpHash.put(9800052, 56575); // Tree Rod + mobExpHash.put(9800053, 60225); // Mossy Mushroom + mobExpHash.put(9800054, 63960); // Primitive Boar + mobExpHash.put(9800055, 67800); // Stone Bug + mobExpHash.put(9800056, 215355); // Poison Golem + mobExpHash.put(9800059, 62080); // Wooden Target Dummy + mobExpHash.put(9800060, 157185); // Bamboo Warrior + mobExpHash.put(9800061, 67800); // Grizzly + mobExpHash.put(9800062, 69730); // Panda + mobExpHash.put(9800063, 167105); // Tae Roon + mobExpHash.put(9800064, 76285); // Sage Cat + mobExpHash.put(9800065, 11580135); // King Sage Cat + mobExpHash.put(9800066, 241815); // Giant Centipede + mobExpHash.put(9800150, 71690); // Ginseng Jar + mobExpHash.put(9800151, 76285); // Bellflower Root + mobExpHash.put(9800152, 84055); // Mr. Alli + mobExpHash.put(9800154, 94835); // Kru + mobExpHash.put(9800153, 193250); // Calico Mack, the Pirate King + mobExpHash.put(9800155, 97610); // Captain + mobExpHash.put(9800156, 281085); // Lord Pirate + mobExpHash.put(9800157, 103125); // Dinogoth + mobExpHash.put(9800158, 108600); // Dinodon + mobExpHash.put(9800159, 113960); // Guerrilla Specter + mobExpHash.put(9800160, 266880); // Magician Specter + mobExpHash.put(9800161, 119250); // Specter Engineer + mobExpHash.put(9800162, 124500); // Power Specter + mobExpHash.put(9800163, 355845); // Reaper Specter + mobExpHash.put(9800164, 116625); // Harp + mobExpHash.put(9800165, 121875); // Blood Harp + mobExpHash.put(9800166, 266880); // Master Harp + mobExpHash.put(9800167, 127085); // Blue Kentaurus + mobExpHash.put(9800168, 132225); // Red Kentaurus + mobExpHash.put(9800170, 288300); // Kentaurus King + mobExpHash.put(9800169, 137285); // Black Kentaurus + mobExpHash.put(9800171, 391440); // Griffey + mobExpHash.put(9800067, 129675); // Dark Klock + mobExpHash.put(9800068, 134775); // Death Teddy + mobExpHash.put(9800069, 139800); // Phantom Watch + mobExpHash.put(9800070, 144785); // Grim Phantom Watch + mobExpHash.put(9800071, 155475); // Gatekeeper + mobExpHash.put(9800072, 450135); // Thanatos + mobExpHash.put(9800172, 142310); // Wild Monkey + mobExpHash.put(9800173, 150150); // Mama Monkey + mobExpHash.put(9800174, 160760); // Mean Mama Monkey + mobExpHash.put(9800175, 348625); // SnowFro the Fruitnificent + mobExpHash.put(9800176, 171260); // Stone Goblin + mobExpHash.put(9800177, 176435); // Strong Stone Goblin + mobExpHash.put(9800178, 508515); // Ganapati + mobExpHash.put(9800073, 191850); // Overlord A + mobExpHash.put(9800074, 201975); // Afterlord + mobExpHash.put(9800075, 445170); // Bergamot + mobExpHash.put(9800078, 211985); // Maverick Type A + mobExpHash.put(9800079, 216935); // Maverick Type S + mobExpHash.put(9800080, 221850); // Imperial Guard + mobExpHash.put(9800081, 226760); // Royal Guard + mobExpHash.put(9800082, 662130); // Nibelung + mobExpHash.put(9800085, 246110); // Werewolf + mobExpHash.put(9800086, 250875); // Lycanthrope + mobExpHash.put(9800087, 260360); // Coolie Zombie + mobExpHash.put(9800088, 269735); // Miner Zombie + mobExpHash.put(9800089, 279000); // Fire Poison + mobExpHash.put(9800090, 595585); // Riche + mobExpHash.put(9800091, 806925); // Ergoth + mobExpHash.put(9800092, 269735); // Crocky the Gatekeeper + mobExpHash.put(9800093, 279000); // Reindeer + mobExpHash.put(9800094, 283610); // Blood Reindeer + mobExpHash.put(9800095, 288185); // Bearwolf + mobExpHash.put(9800096, 298010); // Grey Vulture + mobExpHash.put(9800097, 307835); // Castle Golem + mobExpHash.put(9800098, 317585); // Prison Guard Boar + mobExpHash.put(9800099, 943425); // Prison Guard Ani + mobExpHash.put(9800100, 298010); // Red Dragon Turtle + mobExpHash.put(9800101, 307835); // Dark Cornian + mobExpHash.put(9800102, 327260); // Red Wyvern + mobExpHash.put(9800103, 346500); // Blue Wyvern + mobExpHash.put(9800104, 365550); // Dark Wyvern + mobExpHash.put(9800105, 1076355); // Leviathan + mobExpHash.put(9800106, 346500); // Qualm Monk + mobExpHash.put(9800107, 365550); // Qualm Guardian + mobExpHash.put(9800108, 829550); // Dodo + mobExpHash.put(9800109, 829550); // Lilynouch + mobExpHash.put(9800110, 375035); // Oblivion Monk Trainee + mobExpHash.put(9800111, 385910); // Oblivion Guardian + mobExpHash.put(9800112, 395855); // Chief Oblivion Guardian + mobExpHash.put(9800113, 1145830); // Lyka + mobExpHash.put(9800114, 385910); // Official Knight A + mobExpHash.put(9800115, 390990); // Official Knight B + mobExpHash.put(9800116, 396280); // Official Knight C + mobExpHash.put(9800117, 404715); // Official Knight D + mobExpHash.put(9800118, 412225); // Official Knight E + mobExpHash.put(9800119, 1186255); // Mihile + mobExpHash.put(9800120, 1186255); // Oz + mobExpHash.put(9800121, 588495); // Ifrit + mobExpHash.put(9800122, 1186255); // Irena + mobExpHash.put(9800123, 1186255); // Eckhart + mobExpHash.put(9800124, 1186255); // Hawkeye + mobExpHash.put(9800179, 417025); // Swollen Stump + mobExpHash.put(9800180, 419730); // Pillaging Wild Boar + mobExpHash.put(9800181, 422225); // Pillaging Fire Boar + mobExpHash.put(9800182, 426565); // Sinister Wooden Mask + mobExpHash.put(9800183, 428440); // Sinister Rocky Mask + mobExpHash.put(9800184, 929190); // Ancient Dark Golem + mobExpHash.put(9800185, 430080); // Swollen Axe Stump + mobExpHash.put(9800186, 1216460); // Ghostwood Stumpy + } + + public static int getExpByMobId(int templateId) { + return mobExpHash.get(templateId) != null ? mobExpHash.get(templateId) : 0; + } + + public static int getRewardByDay() { + int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); + switch (day) { + case Calendar.SUNDAY: // Growth Box + return 2434745; + case Calendar.MONDAY: // Crafting Box + return 2434746; + case Calendar.TUESDAY: // Enhancement Box + return 2434747; + case Calendar.WEDNESDAY: // Traits Box + return 2434748; + case Calendar.THURSDAY: // Honor Box + return 2434749; + case Calendar.FRIDAY: // Mesos Box + return 2434750; + case Calendar.SATURDAY: // Monster Park Box + return 2434751; + default: + return 2434745; // Sunday's Growth Box + } + } + + +} diff --git a/src/main/java/net/swordie/ms/client/character/NonCombatStatDayLimit.java b/src/main/java/net/swordie/ms/client/character/NonCombatStatDayLimit.java new file mode 100755 index 0000000..caf8d33 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/NonCombatStatDayLimit.java @@ -0,0 +1,127 @@ +package net.swordie.ms.client.character; + + +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.db.converters.FileTimeConverter; +import net.swordie.ms.util.FileTime; + +import javax.persistence.*; + +/** + * Created on 2/18/2017. + */ +@Entity +@Table(name = "noncombatstatdaylimit") +public class NonCombatStatDayLimit { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private short charisma; + private short charm; + private short insight; + private short will; + private short craft; + private short sense; + @Convert(converter = FileTimeConverter.class) + private FileTime lastUpdateCharmByCashPR; + private byte charmByCashPR; + + public NonCombatStatDayLimit(short charisma, short charm, byte charmByCashPR, short insight, short will, short craft, short sense, FileTime lastUpdateCharmByCashPR) { + this.charisma = charisma; + this.charm = charm; + this.charmByCashPR = charmByCashPR; + this.insight = insight; + this.will = will; + this.craft = craft; + this.sense = sense; + this.lastUpdateCharmByCashPR = lastUpdateCharmByCashPR; + } + + public NonCombatStatDayLimit() { + this((short) 0, (short) 0, (byte) 0,(short) 0,(short) 0,(short) 0,(short) 0, FileTime.fromType(FileTime.Type.ZERO_TIME)); + } + + public short getCharm() { + return charm; + } + + public void setCharm(short charm) { + this.charm = charm; + } + + public byte getCharmByCashPR() { + return charmByCashPR; + } + + public void setCharmByCashPR(byte charmByCashPR) { + this.charmByCashPR = charmByCashPR; + } + + public short getInsight() { + return insight; + } + + public void setInsight(short insight) { + this.insight = insight; + } + + public short getWill() { + return will; + } + + public void setWill(short will) { + this.will = will; + } + + public short getCraft() { + return craft; + } + + public void setCraft(short craft) { + this.craft = craft; + } + + public short getSense() { + return sense; + } + + public void setSense(short sense) { + this.sense = sense; + } + + public FileTime getLastUpdateCharmByCashPR() { + return lastUpdateCharmByCashPR; + } + + public void setLastUpdateCharmByCashPR(FileTime lastUpdateCharmByCashPR) { + this.lastUpdateCharmByCashPR = lastUpdateCharmByCashPR; + } + + public void encode(OutPacket outPacket) { + outPacket.encodeShort(getCharisma()); + outPacket.encodeShort(getInsight()); + outPacket.encodeShort(getWill()); + outPacket.encodeShort(getCraft()); + outPacket.encodeShort(getSense()); + outPacket.encodeShort(getCharm()); + outPacket.encodeByte(getCharmByCashPR()); + outPacket.encodeFT(getLastUpdateCharmByCashPR()); + } + + public short getCharisma() { + return charisma; + } + + public void setCharisma(short charisma) { + this.charisma = charisma; + } + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/PortableChair.java b/src/main/java/net/swordie/ms/client/character/PortableChair.java new file mode 100755 index 0000000..e949820 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/PortableChair.java @@ -0,0 +1,161 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.client.character.quest.Quest; +import net.swordie.ms.client.character.quest.QuestManager; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.packet.UserPool; +import net.swordie.ms.constants.ItemConstants; +import net.swordie.ms.constants.QuestConstants; +import net.swordie.ms.enums.QuestStatus; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created on 26-5-2019. + * + * @author Asura + */ +public class PortableChair { + private Char chr; + private int itemID; + private String msg = ""; + private List displayChrs = new ArrayList<>(); + private long meso; + private int displayedNumber; + + public PortableChair(Char chr, int itemID) { + this.chr = chr; + this.itemID = itemID; + } + + public Char getChr() { + return chr; + } + + public void setChr(Char chr) { + this.chr = chr; + } + + public int getItemID() { + return itemID; + } + + public boolean isTextChair() { + return ItemConstants.isTextChair(getItemID()); + } + + public boolean isTowerChair() { + return ItemConstants.isTowerChair(getItemID()); + } + + public boolean isMesoChair() { + return ItemConstants.isMesoChair(getItemID()); + } + + public void setItemID(int itemID) { + this.itemID = itemID; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public List getDisplayChrs() { + return displayChrs; + } + + public void setDisplayChrs(List displayChrs) { + this.displayChrs = displayChrs; + } + + public void addDisplayChrs(String name) { + getDisplayChrs().add(name); + } + + public long getMeso() { + return meso; + } + + public void setMeso(long meso) { + this.meso = meso; + } + + public int getDisplayedNumber() { + return displayedNumber; + } + + public void setDisplayedNumber(int displayedNumber) { + this.displayedNumber = displayedNumber; + } + + public void addMeso(long meso) { + if (meso > 0 && isMesoChair()) { + setMeso(getMeso() + meso); + chr.getField().broadcastPacket(UserPool.addMesoChairCount(chr.getId(), meso)); + } + } + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getItemID()); + outPacket.encodeInt(isTextChair() ? 1 : 0); + if (isTextChair()) { + outPacket.encodeString(getMsg()); + } + outPacket.encodeInt(0); // new 176 + outPacket.encodeInt(0); // randInt + outPacket.encodeByte(0); // randByte + + QuestManager qm = chr.getQuestManager(); + Quest q = qm.getQuests().getOrDefault(QuestConstants.TOWER_CHAIR, null); + if (q == null) { + q = new Quest(QuestConstants.TOWER_CHAIR, QuestStatus.Started); + qm.addQuest(q); + } + q.convertQRValueToProperties(); + outPacket.encodeInt(q.getProperties().size()); + for (Map.Entry entry : q.getProperties().entrySet()) { + int towerChairID = Integer.parseInt(entry.getValue()); + outPacket.encodeInt(towerChairID); + } + + boolean bool; + outPacket.encodeByte(getDisplayChrs().size() > 0); // legion shit + if (getDisplayChrs().size() > 0) { + // sub_B5ABB0 + outPacket.encodeInt(chr.getAccount().getTotalLvOfAllChrs()); + outPacket.encodeInt(getDisplayChrs().size()); + for (String name : getDisplayChrs()) { + Char displayChr = Char.getFromDBByName(name); + outPacket.encodeInt(displayChr.getLevel()); + outPacket.encodeString(name); + + bool = true; + outPacket.encodeByte(bool); + if (bool) { + displayChr.getAvatarData().getAvatarLook().encode(outPacket); + } + bool = false; + outPacket.encodeByte(bool); + if (bool) { + displayChr.getAvatarData().getAvatarLook().encode(outPacket); + } + } + outPacket.encodeInt(0); + } + + outPacket.encodeLong(getMeso()); // meso + + bool = false; + outPacket.encodeByte(bool); + if (bool) { + // virtual func + } + + } +} diff --git a/src/main/java/net/swordie/ms/client/character/Ranking.java b/src/main/java/net/swordie/ms/client/character/Ranking.java new file mode 100755 index 0000000..d87c862 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/Ranking.java @@ -0,0 +1,63 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; + +/** + * Created on 11/17/2017. + */ +public class Ranking { + private int totRank; + private int totRankGap; + private int worldRank; + private int worldRankGap; + + public Ranking(int totRank, int totRankGap, int worldRank, int worldRankGap) { + this.totRank = totRank; + this.totRankGap = totRankGap; + this.worldRank = worldRank; + this.worldRankGap = worldRankGap; + } + + public Ranking() { + this(1,3,3,7); + } + + public int getTotRank() { + return totRank; + } + + public void setTotRank(int totRank) { + this.totRank = totRank; + } + + public int getTotRankGap() { + return totRankGap; + } + + public void setTotRankGap(int totRankGap) { + this.totRankGap = totRankGap; + } + + public int getWorldRank() { + return worldRank; + } + + public void setWorldRank(int worldRank) { + this.worldRank = worldRank; + } + + public int getWorldRankGap() { + return worldRankGap; + } + + public void setWorldRankGap(int worldRankGap) { + this.worldRankGap = worldRankGap; + } + + public void encode(OutPacket outPacket) { + outPacket.encodeInt(getTotRank()); + outPacket.encodeInt(getTotRankGap()); + outPacket.encodeInt(getWorldRank()); + outPacket.encodeInt(getWorldRankGap()); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/RunnerGameRecord.java b/src/main/java/net/swordie/ms/client/character/RunnerGameRecord.java new file mode 100755 index 0000000..2ddbb1e --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/RunnerGameRecord.java @@ -0,0 +1,79 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.util.FileTime; + +/** + * Created on 12/20/2017. + */ +public class RunnerGameRecord { + private FileTime lastPlayed = FileTime.fromType(FileTime.Type.ZERO_TIME); + private int characterID; + private int lastScore; + private int highScore; + private int runnerPoint; + private int totalLeft; + + public void encode(OutPacket outPacket) { +// outPacket.encodeInt(getCharacterID() + 1); +// outPacket.encodeInt(getLastScore() + 98792381); +// outPacket.encodeInt(getHighScore() + 1987236191); +// outPacket.encodeInt(getRunnerPoint() + 198237199); +// outPacket.encodeFT(getLastPlayed()); +// outPacket.encodeInt(getTotalLeft() + 123); + outPacket.encodeInt(-1); + outPacket.encodeInt(-1); + outPacket.encodeInt(-1); + outPacket.encodeInt(-1); + outPacket.encodeLong(-1); + outPacket.encodeInt(-1); + } + + public FileTime getLastPlayed() { + return lastPlayed; + } + + public void setLastPlayed(FileTime lastPlayed) { + this.lastPlayed = lastPlayed; + } + + public int getCharacterID() { + return characterID; + } + + public void setCharacterID(int characterID) { + this.characterID = characterID; + } + + public int getLastScore() { + return lastScore; + } + + public void setLastScore(int lastScore) { + this.lastScore = lastScore; + } + + public int getHighScore() { + return highScore; + } + + public void setHighScore(int highScore) { + this.highScore = highScore; + } + + public int getRunnerPoint() { + return runnerPoint; + } + + public void setRunnerPoint(int runnerPoint) { + this.runnerPoint = runnerPoint; + } + + public int getTotalLeft() { + return totalLeft; + } + + public void setTotalLeft(int totalLeft) { + this.totalLeft = totalLeft; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/SPSet.java b/src/main/java/net/swordie/ms/client/character/SPSet.java new file mode 100755 index 0000000..7d4db78 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/SPSet.java @@ -0,0 +1,54 @@ +package net.swordie.ms.client.character; + +import org.hibernate.Session; +import org.hibernate.Transaction; + +import javax.persistence.*; + +/** + * Created on 2/18/2017. + */ +@Entity +@Table(name = "spset") +public class SPSet { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private byte jobLevel; + private int sp; + + public SPSet() { + } + + public SPSet(byte jobLevel, int sp) { + this.jobLevel = jobLevel; + this.sp = sp; + } + + public void setJobLevel(byte jobLevel) { + this.jobLevel = jobLevel; + } + + public void setSp(int sp) { + this.sp = sp; + } + + public byte getJobLevel() { + return jobLevel; + } + + public int getSp() { + return sp; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public void addSp(int sp) { + setSp(getSp() + sp); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/TradeRoom.java b/src/main/java/net/swordie/ms/client/character/TradeRoom.java new file mode 100755 index 0000000..049d5da --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/TradeRoom.java @@ -0,0 +1,128 @@ +package net.swordie.ms.client.character; + +import net.swordie.ms.client.character.items.Item; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.packet.MiniroomPacket; +import net.swordie.ms.constants.GameConstants; +import net.swordie.ms.util.container.Tuple; + +import java.util.*; + +/** + * @author Sjonnie + * Created on 8/10/2018. + */ +public class TradeRoom { + private Map>> offeredItems = new HashMap<>(); // wow + private Map money = new HashMap<>(); + private Set confirmedPlayers = new HashSet<>(); + private Char other; + private Char chr; + + public TradeRoom(Char chr, Char other) { + this.chr = chr; + offeredItems.put(chr, new ArrayList<>()); + this.other = other; + offeredItems.put(other, new ArrayList<>()); + } + + public Char getOther() { + return other; + } + + public boolean canAddItem(Char chr) { + return getOfferedItems().get(chr).size() < GameConstants.MAX_TRADE_ITEMS; + } + + public void addItem(Char chr, int pos, Item item) { + List> items = getOfferedItems().get(chr); + Tuple entry = new Tuple<>(pos, item); + items.add(entry); + } + + public Char getChr() { + return chr; + } + + private Map getMoney() { + return money; + } + + public long getMoney(Char chr) { + return getMoney().getOrDefault(chr, 0L); + } + + public void putMoney(Char chr, long money) { + getMoney().put(chr, money); + } + + public Map>> getOfferedItems() { + return offeredItems; + } + + public void restoreItems() { + Char[] chars = new Char[]{getChr(), getOther()}; + for (Char chr : chars) { + for (Tuple entry : getOfferedItems().get(chr)) { + chr.addItemToInventory(entry.getRight()); + } + chr.addMoney(getMoney(chr)); + } + } + + public Set getConfirmedPlayers() { + return confirmedPlayers; + } + + public void addConfirmedPlayer(Char chr) { + getConfirmedPlayers().add(chr); + } + + public boolean hasConfirmed(Char other) { + return getConfirmedPlayers().contains(other); + } + + public boolean completeTrade() { + Char chr = getChr(); + Char other = getOther(); + // Ugly, but eh + // Check if the characters have enough space for all the items + List items = new ArrayList<>(); + for (Tuple entry : getOfferedItems().get(other)) { + items.add(entry.getRight()); + } + if (!chr.canHold(items)) { + chr.chatMessage("You do not have enough inventory space."); + other.chatMessage(chr.getName() + " does not have enough inventory space."); + return false; + } + for (Tuple entry : getOfferedItems().get(chr)) { + items.add(entry.getRight()); + } + if (!other.canHold(items)) { + other.chatMessage("You do not have enough inventory space."); + chr.chatMessage(chr.getName() + " does not have enough inventory space."); + return false; + } + // Add all the items + money + for (Tuple entry : getOfferedItems().get(chr)) { + other.addItemToInventory(entry.getRight()); + } + other.addMoney(GameConstants.applyTax(getMoney(chr))); + for (Tuple entry : getOfferedItems().get(other)) { + chr.addItemToInventory(entry.getRight()); + } + chr.addMoney(GameConstants.applyTax(getMoney(other))); + return true; + } + + public void cancelTrade() { + chr.setTradeRoom(null); + other.setTradeRoom(null); + restoreItems(); + } + + public Char getOtherChar(Char chr) { + return chr == getChr() ? getOther() : getChr(); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/avatar/AvatarData.java b/src/main/java/net/swordie/ms/client/character/avatar/AvatarData.java new file mode 100755 index 0000000..3e98c7a --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/avatar/AvatarData.java @@ -0,0 +1,76 @@ +package net.swordie.ms.client.character.avatar; + +import net.swordie.ms.client.character.CharacterStat; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.constants.JobConstants; + +import javax.persistence.*; + +/** + * Created on 2/18/2017. + */ +@Entity +@Table(name = "avatardata") +public class AvatarData { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + @JoinColumn(name = "characterStat") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private CharacterStat characterStat; + @JoinColumn(name = "avatarLook") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private AvatarLook avatarLook; + @JoinColumn(name = "zeroAvatarLook") + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) + private AvatarLook zeroAvatarLook; + + public AvatarLook getAvatarLook() { + return avatarLook; + } + + public CharacterStat getCharacterStat() { + return characterStat; + } + + public AvatarLook getZeroAvatarLook() { + return zeroAvatarLook; + } + + public void setZeroAvatarLook(AvatarLook zeroAvatarLook) { + this.zeroAvatarLook = zeroAvatarLook; + } + + public void encode(OutPacket outPacket) { + characterStat.encode(outPacket); + // sub_92A050 + outPacket.encodeInt(0); // new 196 + outPacket.encodeLong(0); // new 199 + // ~sub_92A050 + avatarLook.encode(outPacket); + if (JobConstants.isZero(getCharacterStat().getJob())) { + zeroAvatarLook.encode(outPacket); + } + } + + public void setCharacterStat(CharacterStat characterStat) { + this.characterStat = characterStat; + } + + public void setAvatarLook(AvatarLook avatarLook) { + this.avatarLook = avatarLook; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public AvatarLook getAvatarLook(boolean zeroBetaState) { + return zeroBetaState ? getZeroAvatarLook() : getAvatarLook(); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/avatar/AvatarLook.java b/src/main/java/net/swordie/ms/client/character/avatar/AvatarLook.java new file mode 100755 index 0000000..9ee9edd --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/avatar/AvatarLook.java @@ -0,0 +1,545 @@ +package net.swordie.ms.client.character.avatar; + +import net.swordie.ms.client.character.Char; +import net.swordie.ms.client.character.items.BodyPart; +import net.swordie.ms.client.character.items.Item; +import net.swordie.ms.connection.InPacket; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.constants.ItemConstants; +import net.swordie.ms.constants.JobConstants; +import net.swordie.ms.enums.WeaponType; + +import javax.persistence.*; +import java.util.*; + +/** + * Created on 2/18/2017. + */ +@Entity +@Table(name = "avatarlook") +public class AvatarLook { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private int gender; + private int skin; + private int face; + private int hair; + private int weaponStickerId; + + private int weaponId; + private int subWeaponId; + @ElementCollection + @CollectionTable(name = "hairequips", joinColumns = @JoinColumn(name = "alId")) + @MapKeyColumn(name = "bodypart") + @Column(name = "equipid") + private Map hairEquips; + + @ElementCollection + @CollectionTable(name = "unseenequips", joinColumns = @JoinColumn(name = "alId")) + @MapKeyColumn(name = "bodypart") + @Column(name = "equipid") + private Map unseenEquips; + @ElementCollection + @CollectionTable(name = "petids", joinColumns = @JoinColumn(name = "alId")) + @Column(name = "petId") + private List petIDs; + private int job; + private boolean drawElfEar; + private int demonSlayerDefFaceAcc; + private int xenonDefFaceAcc; + private int beastTamerDefFaceAcc; + private boolean isZeroBetaLook; + private int mixedHairColor; + private int mixHairPercent; + @ElementCollection + @CollectionTable(name = "totems", joinColumns = @JoinColumn(name = "alId")) + @Column(name = "totemId") + private List totems; + private int ears; + private int tail; + @Transient + private int demonWingID; + @Transient + private int kaiserWingID; + @Transient + private int kaiserTailID; + + public AvatarLook() { + hairEquips = new HashMap<>(); + unseenEquips = new HashMap<>(); + petIDs = Arrays.asList(0, 0, 0); + totems = new ArrayList<>(); + } + + public AvatarLook deepCopy() { + AvatarLook res = new AvatarLook(); + res.setGender(getGender()); + res.setSkin(getSkin()); + res.setFace(getFace()); + res.setHair(getHair()); + res.setWeaponStickerId(getWeaponStickerId()); + res.setWeaponId(getWeaponId()); + res.setSubWeaponId(getSubWeaponId()); + Map resHairEquips = new HashMap<>(getHairEquips()); + res.setHairEquips(resHairEquips); + Map resUnseenEquips = new HashMap<>(getUnseenEquips()); + res.setUnseenEquips(resUnseenEquips); + List resPetIDs = new ArrayList<>(getPetIDs()); + res.setPetIDs(resPetIDs); + res.setJob(getJob()); + res.setDrawElfEar(isDrawElfEar()); + res.setDemonSlayerDefFaceAcc(getDemonSlayerDefFaceAcc()); + res.setXenonDefFaceAcc(getXenonDefFaceAcc()); + res.setBeastTamerDefFaceAcc(getBeastTamerDefFaceAcc()); + res.setZeroBetaLook(isZeroBetaLook()); + res.setMixedHairColor(getMixedHairColor()); + res.setMixHairPercent(getMixHairPercent()); + List resTotems = new ArrayList<>(getTotems()); + res.setTotems(resTotems); + res.setEars(getEars()); + res.setTail(getTail()); + return res; + } + + public int getGender() { + return gender; + } + + public void setGender(int gender) { + this.gender = gender; + } + public int getSkin() { + return skin; + } + + public void setSkin(int skin) { + this.skin = skin; + } + + public int getFace() { + return face; + } + + public void setFace(int face) { + this.face = face; + } + + public int getWeaponStickerId() { + return weaponStickerId; + } + + public void setWeaponStickerId(int weaponStickerId) { + this.weaponStickerId = weaponStickerId; + } + + public int getWeaponId() { + return weaponId; + } + + public void setWeaponId(int weaponId) { + this.weaponId = weaponId; + } + + public int getSubWeaponId() { + return subWeaponId; + } + + public void setSubWeaponId(int subWeaponId) { + this.subWeaponId = subWeaponId; + } + + public Map getHairEquips() { + return hairEquips; + } + + public void setHairEquips(Map hairEquips) { + this.hairEquips = hairEquips; + } + + public Map getUnseenEquips() { + return unseenEquips; + } + + public void setUnseenEquips(Map unseenEquips) { + this.unseenEquips = unseenEquips; + } + + public List getPetIDs() { + return petIDs; + } + + public void setPetIDs(List petIDs) { + this.petIDs = petIDs; + } + + public int getJob() { + return job; + } + + public void setJob(int job) { + this.job = job; + } + + public boolean isDrawElfEar() { + return drawElfEar; + } + + public void setDrawElfEar(boolean drawElfEar) { + this.drawElfEar = drawElfEar; + } + + public int getDemonSlayerDefFaceAcc() { + return demonSlayerDefFaceAcc; + } + + public void setDemonSlayerDefFaceAcc(int demonSlayerDefFaceAcc) { + this.demonSlayerDefFaceAcc = demonSlayerDefFaceAcc; + } + + public int getXenonDefFaceAcc() { + return xenonDefFaceAcc; + } + + public void setXenonDefFaceAcc(int xenonDefFaceAcc) { + this.xenonDefFaceAcc = xenonDefFaceAcc; + } + + public int getBeastTamerDefFaceAcc() { + return beastTamerDefFaceAcc; + } + + public void setBeastTamerDefFaceAcc(int beastTamerDefFaceAcc) { + this.beastTamerDefFaceAcc = beastTamerDefFaceAcc; + } + + public boolean isZeroBetaLook() { + return isZeroBetaLook; + } + + public void setZeroBetaLook(boolean zeroBetaLook) { + isZeroBetaLook = zeroBetaLook; + } + + public int getMixedHairColor() { + return mixedHairColor; + } + + public void setMixedHairColor(int mixedHairColor) { + this.mixedHairColor = mixedHairColor; + } + + public int getMixHairPercent() { + return mixHairPercent; + } + + public void setMixHairPercent(int mixHairPercent) { + this.mixHairPercent = mixHairPercent; + } + + + public void encode(OutPacket outPacket) { + outPacket.encodeByte(getGender()); + outPacket.encodeByte(getSkin()); + outPacket.encodeInt(getFace()); + outPacket.encodeInt(getJob()); + outPacket.encodeByte(0); // ignored + outPacket.encodeInt(getHair()); + + for (Map.Entry entry : getHairEquips().entrySet()) { + outPacket.encodeByte(entry.getKey()); + outPacket.encodeInt(entry.getValue()); + } + + + outPacket.encodeByte(-1); + for (Map.Entry entry : getUnseenEquips().entrySet()) { + outPacket.encodeByte(entry.getKey()); + outPacket.encodeInt(entry.getValue()); + } + outPacket.encodeByte(-1); + // v199 - new item loop, ignores bodypart restrictions + for (int itemId : new int[]{}) { + outPacket.encodeByte(ItemConstants.getBodyPartFromItem(itemId, getGender())); + outPacket.encodeInt(itemId); + } + outPacket.encodeByte(-1); + for (int itemId : getTotems()) { + outPacket.encodeByte(ItemConstants.getBodyPartFromItem(itemId, getGender())); + outPacket.encodeInt(itemId); + } + outPacket.encodeByte(-1); + + outPacket.encodeInt(getWeaponStickerId()); + outPacket.encodeInt(getWeaponId()); + outPacket.encodeInt(getSubWeaponId()); + outPacket.encodeInt(0); // new 199 + outPacket.encodeByte(isDrawElfEar()); + + for (int i = 0; i < 3; i++) { + if (getPetIDs().size() > i) { + outPacket.encodeInt(getPetIDs().get(i)); // always 3 + } else { + outPacket.encodeInt(0); + } + } + if (JobConstants.isDemon((short) getJob())) { + outPacket.encodeInt(getDemonSlayerDefFaceAcc()); + } + if (JobConstants.isArk((short) getJob())) { + outPacket.encodeInt(0); // face acc? + } + if (JobConstants.isXenon((short) getJob())) { + outPacket.encodeInt(getXenonDefFaceAcc()); + } + if (JobConstants.isZero((short) getJob())) { + outPacket.encodeByte(isZeroBetaLook()); + } + if (JobConstants.isBeastTamer((short) getJob())) { + boolean hasEars = getEars() > 0; + boolean hasTail = getTail() > 0; + outPacket.encodeInt(getBeastTamerDefFaceAcc()); + outPacket.encodeByte(hasEars); + outPacket.encodeInt(getEars()); + outPacket.encodeByte(hasTail); + outPacket.encodeInt(getTail()); + } + outPacket.encodeByte(getMixedHairColor()); + outPacket.encodeByte(getMixHairPercent()); + } + + public void encodePackedCharacterLook(OutPacket outPacket, Char chr) { + // flawlessy typed over + // and let's call it loop unrolling + int[] hairEquips = new int[11]; + for (int i = 0; i < hairEquips.length; i++) { + Item item = chr.getEquippedInventory().getItemBySlot(i); + if (item != null) { + hairEquips[i] = item.getItemId(); + } else { + hairEquips[i] = -1; + } + } + byte[] data = new byte[24]; + int weaponID = getWeaponStickerId() != 0 ? getWeaponStickerId() : getWeaponId(); + WeaponType weaponType = ItemConstants.getWeaponType(weaponID); + int wt = weaponType == null ? 0 : weaponType.getVal(); + int faceAcc = 0; + if (getDemonSlayerDefFaceAcc() != 0) { + faceAcc = getDemonSlayerDefFaceAcc(); + } else if (getXenonDefFaceAcc() != 0) { + faceAcc = getXenonDefFaceAcc(); + } else if (getBeastTamerDefFaceAcc() != 0) { + faceAcc = getBeastTamerDefFaceAcc(); + } + data[0] |= getGender() & 1; + data[0] |= (getSkin() & 0xF) << 1; + data[0] |= ((getFace() % 1000) & 0x3FF) << 5; + data[1] |= (getFace() / 1000 % 10 & 7) << 7; + data[2] |= (getFace() / 10000 == 4 ? 1 : 0) << 2; + data[2] |= ((getFace() % 1000) & 0x3FF) << 3; + data[3] |= (getFace() / 1000 % 10 & 0xF) << 5; + data[4] |= ((hairEquips[1] % 1000) & 0x3FF) << 1; + data[5] |= (hairEquips[1] / 1000 % 10 & 7) << 3; + data[5] |= ((hairEquips[2] % 1000) & 0x3FF) << 6; + data[7] |= faceAcc / 1000 % 10 & 3; + data[7] |= (hairEquips[3] % 1000) & 0x3FF; + data[8] |= (hairEquips[3] / 1000 % 10 & 3) << 4; + data[8] |= ((hairEquips[4] % 1000) & 0x3FF) << 6; + data[10] |= hairEquips[4] / 1000 % 10 & 3; + data[10] |= (hairEquips[5] / 10000 == 105 ? 1 : 0) << 2; + data[10] |= ((hairEquips[5] % 1000) & 0x3FF) << 3; + data[11] |= ((hairEquips[5] / 1000 % 10) & 0xF) << 5; + data[12] |= ((hairEquips[6] % 1000) & 0x3FF) << 1; + data[13] |= (hairEquips[6] / 1000 % 10 & 3) << 3; + data[13] |= ((hairEquips[7] % 1000) & 0x3FF) << 5; + data[14] |= (hairEquips[7] / 1000 % 10 & 3) << 7; + data[15] |= ((hairEquips[8] % 1000) & 0x3FF) << 1; + data[16] |= (hairEquips[8] / 1000 % 10 & 3) << 3; + data[16] |= ((hairEquips[9] % 1000) & 0x3FF) << 5; + data[17] |= (hairEquips[9] / 1000 % 10 & 3) << 7; + int val = hairEquips[10]; + if (val / 10000 == 109) { + val = 1; + } else { + val = (val / 10000 != 134 ? 1 : 0) + 2; + } + data[18] |= (val & 3) << 1; + data[19] |= ((hairEquips[10] % 1000) & 0x3FF) << 3; + data[19] |= (hairEquips[10] / 1000 % 10 & 0xF) << 5; + data[20] |= getWeaponStickerId() / 100000 == 17 ? 2 : 0; + data[20] |= ((weaponID % 1000) & 0x3FF) << 2; + data[21] |= (weaponID / 1000 % 10 & 3) << 4; + data[21] |= (wt & 0x1F) << 6; + data[22] |= (isDrawElfEar() ? 1 : 0) << 3; + for (int i = 0; i < 3; i++) { + for (int j = 7; j >= 0; j--) { + // basically encoding 3 sequential longs in little endian + outPacket.encodeByte(data[j + i * 8]); + } + } + } + + public void decode(InPacket inPacket) { + setGender(inPacket.decodeByte()); + setSkin(inPacket.decodeByte()); + setFace(inPacket.decodeInt()); + setJob(inPacket.decodeInt()); + inPacket.decodeByte(); // ignored + setHair(inPacket.decodeInt()); + + while (inPacket.decodeByte() != -1) { // Body Part + int itemId = inPacket.decodeInt(); + + } + while (inPacket.decodeByte() != -1) { // Body Part + int itemId = inPacket.decodeInt(); + + } + while (inPacket.decodeByte() != -1) { // Body Part + int itemId = inPacket.decodeInt(); + // add + } + while (inPacket.decodeByte() != -1) { // Body Part + int itemId = inPacket.decodeInt(); + getTotems().add(itemId); + } + + setWeaponStickerId(inPacket.decodeInt()); + setWeaponId(inPacket.decodeInt()); + setSubWeaponId(inPacket.decodeInt()); + inPacket.decodeInt(); // new 199 + setDrawElfEar(inPacket.decodeByte() != 0); + + for (int i = 0; i < 3; i++) { + int petId = inPacket.decodeInt(); + //getPetIDs().add(petId); + } + if (JobConstants.isDemon((short) getJob())) { + setDemonSlayerDefFaceAcc(inPacket.decodeInt()); + } + if (JobConstants.isArk((short) getJob())) { + inPacket.decodeInt(); // face acc? + } + if (JobConstants.isXenon((short) getJob())) { + setXenonDefFaceAcc(inPacket.decodeInt()); + } + if (JobConstants.isZero((short) getJob())) { + setZeroBetaLook(inPacket.decodeByte() != 0); + } + if (JobConstants.isBeastTamer((short) getJob())) { + setBeastTamerDefFaceAcc(inPacket.decodeInt()); + inPacket.decodeByte(); // has Ears + setEars(inPacket.decodeInt()); + inPacket.decodeByte(); // has Tail + setTail(inPacket.decodeInt()); + } + setMixedHairColor(inPacket.decodeByte()); + setMixHairPercent(inPacket.decodeByte()); + } + + public int getHair() { + return hair; + } + + public void setHair(int hair) { + this.hair = hair; + } + + public List getTotems() { + return totems; + } + + public int getEars() { + return ears; + } + + public void setEars(int ears) { + this.ears = ears; + } + + public int getTail() { + return tail; + } + + public void setTail(short tail) { + this.tail = tail; + } + + public void setTotems(List totems) { + this.totems = totems; + } + + public void setTail(int tail) { + this.tail = tail; + } + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getDemonWingID() { + return demonWingID; + } + + public void setDemonWingID(int demonWingID) { + this.demonWingID = demonWingID; + } + + public int getKaiserWingID() { + return kaiserWingID; + } + + public void setKaiserWingID(int kaiserWingID) { + this.kaiserWingID = kaiserWingID; + } + + public int getKaiserTailID() { + return kaiserTailID; + } + + public void setKaiserTailID(int kaiserTailID) { + this.kaiserTailID = kaiserTailID; + } + + public void removeItem(byte bodyPart, int itemID, int overrideId, boolean cash) { + if (!ItemConstants.isTotem(itemID)) { + Map hairEquips = getHairEquips(); + Map unseenEquips = getUnseenEquips(); + if (ItemConstants.isWeapon(itemID) && bodyPart % 100 == BodyPart.Weapon.getVal()) { + if (cash) { + setWeaponStickerId(0); + //unseenEquips.remove((byte) (bodyPart - 100)); + } else { + setWeaponId(0); + hairEquips.remove(bodyPart); + } + } else if (cash) { + hairEquips.remove((byte) (bodyPart - 100)); + if (overrideId >= 0) { + unseenEquips.remove((byte) (bodyPart - 100)); + hairEquips.put((byte) (bodyPart - 100), overrideId); + } + } else { + if (overrideId >= 0) { + unseenEquips.remove(bodyPart); + } else { + hairEquips.remove(bodyPart); + } + if (bodyPart == BodyPart.Shield.getVal()) { + setSubWeaponId(0); + } + } + } else { + if (ItemConstants.isTotem(itemID)) { + unseenEquips.remove(bodyPart); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/net/swordie/ms/client/character/avatar/BeautyAlbum.java b/src/main/java/net/swordie/ms/client/character/avatar/BeautyAlbum.java new file mode 100755 index 0000000..520163b --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/avatar/BeautyAlbum.java @@ -0,0 +1,63 @@ +package net.swordie.ms.client.character.avatar; + + +import net.swordie.ms.connection.OutPacket; + +import javax.persistence.*; + + +/** + * Created on 26/9/2020. + */ + +@Entity +@Table(name = "beautyalbuminventory") +public class BeautyAlbum { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private int styleid; + private int slotid; + + public BeautyAlbum() { + this.styleid = 0; + } + + public BeautyAlbum(int slotid) { + this.styleid = 0; + this.slotid = slotid; + } + + public BeautyAlbum(int styleid, int slotid) { + this.styleid = styleid; + this.slotid = slotid; + } + + public void encode(OutPacket outPacket) { + + int styleid = getSlotID(); + outPacket.encodeInt(styleid); + if (styleid / 10000 < 40000) { + outPacket.encodeByte(-1); + outPacket.encodeByte(0); + outPacket.encodeByte(0); + } + + } + + public long getID() { return id; } + + public void setID(long id) { this.id = id; } + + public int getStyleID() { return styleid; } + + public void setStyleID(int styleid) { this.styleid = styleid; } + + public int getSlotID() { return slotid; } + + public void setSlotID( int slotid) { this.slotid = slotid; } + + +} \ No newline at end of file diff --git a/src/main/java/net/swordie/ms/client/character/b2body/B2Body.java b/src/main/java/net/swordie/ms/client/character/b2body/B2Body.java new file mode 100755 index 0000000..d288d37 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/b2body/B2Body.java @@ -0,0 +1,143 @@ +package net.swordie.ms.client.character.b2body; + +import net.swordie.ms.client.character.Char; +import net.swordie.ms.util.Position; + +/** + * Created on 11-1-2019. + * + * @author Asura + */ +public class B2Body { + + private Char chr; + private int bodyId; + private byte type; + private Position position; + private short nRadius, fRadius, scale; + private int skillId; + private int slv; + private int duration; + private int maxSpeedX; + private int maxSpeedY; + private byte unk1; + private short unk2, unk3; + + public B2Body(Char chr, int bodyId, int skillId, int slv, int maxSpeedX, int maxSpeedY) { + this.chr = chr; + this.bodyId = bodyId; + this.skillId = skillId; + this.slv = slv; + this.maxSpeedX = maxSpeedX; + this.maxSpeedY = maxSpeedY; + } + + public B2Body(Char chr, int bodyId, byte type, Position position, short nRadius, short fRadius, short scale, int skillId, int slv, int duration) { + this.chr = chr; + this.bodyId = bodyId; + this.type = type; + this.position = position; + this.nRadius = nRadius; + this.fRadius = fRadius; + this.scale = scale; + this.skillId = skillId; + this.slv = slv; + this.duration = duration; + } + + public Char getChr() { + return chr; + } + + public void setChr(Char chr) { + this.chr = chr; + } + + public int getBodyId() { + return bodyId; + } + + public void setBodyId(int bodyId) { + this.bodyId = bodyId; + } + + public byte getType() { + return type; + } + + public void setType(byte type) { + this.type = type; + } + + public Position getPosition() { + return position; + } + + public void setPosition(Position position) { + this.position = position; + } + + public short getnRadius() { + return nRadius; + } + + public void setnRadius(short nRadius) { + this.nRadius = nRadius; + } + + public short getfRadius() { + return fRadius; + } + + public void setfRadius(short fRadius) { + this.fRadius = fRadius; + } + + public short getScale() { + return scale; + } + + public void setScale(short scale) { + this.scale = scale; + } + + public int getSkillId() { + return skillId; + } + + public void setSkillId(int skillId) { + this.skillId = skillId; + } + + public int getSlv() { + return slv; + } + + public void setSlv(int slv) { + this.slv = slv; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public int getMaxSpeedX() { + return maxSpeedX; + } + + public void setMaxSpeedX(int maxSpeedX) { + this.maxSpeedX = maxSpeedX; + } + + public int getMaxSpeedY() { + return maxSpeedY; + } + + public void setMaxSpeedY(int maxSpeedY) { + this.maxSpeedY = maxSpeedY; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/cards/CharacterCard.java b/src/main/java/net/swordie/ms/client/character/cards/CharacterCard.java new file mode 100755 index 0000000..cce1a39 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/cards/CharacterCard.java @@ -0,0 +1,67 @@ +package net.swordie.ms.client.character.cards; + +import net.swordie.ms.connection.OutPacket; + +import javax.persistence.*; + +/** + * Created on 2/18/2017. + */ +@Entity +@Table(name = "charactercards") +public class CharacterCard { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private int characterId; + private int job; + private byte level; + + public CharacterCard(){} + + public CharacterCard(int characterId, int job, byte level) { + this.characterId = characterId; + this.job = job; + this.level = level; + } + + public int getCharacterId() { + return getId(); + } + + public void setCharacterId(int characterId) { + this.characterId = characterId; + } + + public int getJob() { + return job; + } + + public void setJob(int job) { + this.job = job; + } + + public byte getLevel() { + return level; + } + + public void setLevel(byte level) { + this.level = level; + } + + public void encode(OutPacket outPacket) { + //CHARACTERCARD::Decode + for(int i = 0; i < 9; i++) { + outPacket.encodeInt(getCharacterId()); + outPacket.encodeByte(getLevel()); + outPacket.encodeInt(getJob()); + } + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/cards/MonsterBookInfo.java b/src/main/java/net/swordie/ms/client/character/cards/MonsterBookInfo.java new file mode 100755 index 0000000..34bac15 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/cards/MonsterBookInfo.java @@ -0,0 +1,70 @@ +package net.swordie.ms.client.character.cards; + +import net.swordie.ms.constants.ItemConstants; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +/** + * Created on 5/3/2018. + */ +@Entity +@Table(name = "monsterbookinfos") +public class MonsterBookInfo { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + @ElementCollection + @CollectionTable(name = "monsterbookcards", joinColumns = @JoinColumn(name = "bookID")) + @Column(name = "cardID") + private Set cards = new HashSet<>(); + private int setID; + private int coverID; + + public MonsterBookInfo() { + setID = -1; + coverID = -1; + } + + public Set getCards() { + return cards; + } + + public void setCards(Set cards) { + this.cards = cards; + } + + public int getSetID() { + return setID; + } + + public void setSetID(int setID) { + this.setID = setID; + } + + public int getCoverID() { + return coverID; + } + + public void setCoverID(int coverID) { + this.coverID = coverID; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public boolean hasCard(int cardID) { + return getCards().contains(cardID % ItemConstants.MOB_CARD_BASE_ID); + } + + public void addCard(int itemID) { + getCards().add(itemID % ItemConstants.MOB_CARD_BASE_ID); + } +} diff --git a/src/main/java/net/swordie/ms/client/character/commands/AdminCommand.java b/src/main/java/net/swordie/ms/client/character/commands/AdminCommand.java new file mode 100755 index 0000000..b5ba4b5 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/commands/AdminCommand.java @@ -0,0 +1,16 @@ +package net.swordie.ms.client.character.commands; + +/** + * Created on 12/22/2017. + */ +public abstract class AdminCommand implements ICommand { + + public AdminCommand() { + } + + private static char prefix = '!'; + + public static char getPrefix() { + return prefix; + } +} diff --git a/src/main/java/net/swordie/ms/client/character/commands/AdminCommands.java b/src/main/java/net/swordie/ms/client/character/commands/AdminCommands.java new file mode 100755 index 0000000..7170bf1 --- /dev/null +++ b/src/main/java/net/swordie/ms/client/character/commands/AdminCommands.java @@ -0,0 +1,3452 @@ +package net.swordie.ms.client.character.commands; + +import net.swordie.ms.Server; +import net.swordie.ms.client.User; +import net.swordie.ms.client.character.BroadcastMsg; +import net.swordie.ms.client.character.Char; +import net.swordie.ms.client.character.CharacterStat; +import net.swordie.ms.client.character.avatar.AvatarData; +import net.swordie.ms.client.character.items.*; +import net.swordie.ms.client.character.quest.Quest; +import net.swordie.ms.client.character.quest.QuestManager; +import net.swordie.ms.client.character.skills.ForceAtom; +import net.swordie.ms.client.character.skills.Option; +import net.swordie.ms.client.character.skills.Skill; +import net.swordie.ms.client.character.skills.StolenSkill; +import net.swordie.ms.client.character.skills.info.ForceAtomInfo; +import net.swordie.ms.client.character.skills.info.SkillInfo; +import net.swordie.ms.client.character.skills.temp.CharacterTemporaryStat; +import net.swordie.ms.client.character.skills.temp.TemporaryStatBase; +import net.swordie.ms.client.character.skills.temp.TemporaryStatManager; +import net.swordie.ms.client.guild.Guild; +import net.swordie.ms.client.guild.GuildMember; +import net.swordie.ms.client.jobs.nova.Kaiser; +import net.swordie.ms.client.party.Party; +import net.swordie.ms.client.party.PartyResult; +import net.swordie.ms.connection.OutPacket; +import net.swordie.ms.connection.db.DatabaseManager; +import net.swordie.ms.connection.packet.*; +import net.swordie.ms.constants.*; +import net.swordie.ms.constants.JobConstants.JobEnum; +import net.swordie.ms.enums.*; +import net.swordie.ms.handlers.header.OutHeader; +import net.swordie.ms.life.AffectedArea; +import net.swordie.ms.life.Life; +import net.swordie.ms.life.drop.Drop; +import net.swordie.ms.life.mob.ForcedMobStat; +import net.swordie.ms.life.mob.Mob; +import net.swordie.ms.life.mob.MobStat; +import net.swordie.ms.life.mob.MobTemporaryStat; +import net.swordie.ms.life.npc.Npc; +import net.swordie.ms.loaders.*; +import net.swordie.ms.loaders.containerclasses.ItemSet; +import net.swordie.ms.loaders.containerclasses.SkillStringInfo; +import net.swordie.ms.scripts.ScriptManagerImpl; +import net.swordie.ms.scripts.ScriptType; +import net.swordie.ms.util.*; +import net.swordie.ms.world.Channel; +import net.swordie.ms.world.World; +import net.swordie.ms.world.field.Field; +import net.swordie.ms.world.field.Foothold; +import net.swordie.ms.world.field.Portal; +import org.apache.log4j.LogManager; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.query.Query; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static net.swordie.ms.client.character.skills.temp.CharacterTemporaryStat.NotDamaged; +import static net.swordie.ms.client.character.skills.temp.CharacterTemporaryStat.RideVehicle; + +import static net.swordie.ms.enums.AccountType.*; +import static net.swordie.ms.enums.ChatType.*; +import static net.swordie.ms.enums.InventoryOperation.Add; + +/** + * Created on 12/22/2017. + */ +public class AdminCommands { + static final org.apache.log4j.Logger log = LogManager.getRootLogger(); + + @Command(names = {"help"}, description = "Displays all commands available to you.", requiredType = Player) + public static class Help extends AdminCommand { + public static void execute(Char chr, String[] args) { + for (Class clazz : AdminCommands.class.getClasses()) { + Command cmd = (Command) clazz.getAnnotation(Command.class); + if (chr.getUser().getAccountType().ordinal() >= cmd.requiredType().ordinal()) { + StringBuilder str = new StringBuilder(String.format("[%s] ", cmd.requiredType())); + String[] names = cmd.names(); + for (int i = 0; i < names.length; i++) { + String cmdName = names[i]; + str.append(cmdName); + if (i != names.length - 1) { + str.append(", "); + } + } + if (!cmd.description().isEmpty()) { + String description = cmd.description(); + str.append(": " + description); + } + + chr.chatMessage(Expedition, str.toString()); + } + } + } + } + + @Command(names = {"warphere"}, requiredType = Tester) + public static class WarpHere extends AdminCommand { + public static void execute(Char chr, String[] args) { + Char victim = chr.getWorld().getCharByName((args[1])); + if (victim != null) { + victim.changeChannelAndWarp(chr.getClient().getChannelInstance().getChannelId(), chr.getFieldID()); + } else { + chr.chatMessage(Notice2, "Player not found, make sure you typed the correct name (Case Sensitive)."); + } + } + } + + @Command(names = {"rotatecamera"}, description = "Rotates your camera to given angle.", requiredType = Tester) + public static class RotateCamera extends AdminCommand { + public static void execute(Char chr, String[] args) { + + int degree = Integer.parseInt(args[1]); + chr.getField().broadcastPacket(UserLocal.rotateCamera(degree, 1800)); + // chr.getField().broadcastPacket(UserLocal.rotateCamera(40 , 800)); + // chr.getField().broadcastPacket(UserLocal.rotateCamera(40 , 400)); + // chr.getField().broadcastPacket(UserLocal.rotateCamera(20 , 800)); + } + } + + + @Command(names = {"packet"}, requiredType = Admin) + public static class TestPacket extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length < 4) { + chr.chatMessage("Usage: !packet "); + return; + } + OutPacket outPacket = new OutPacket(Short.parseShort(args[1])); + outPacket.encodeByte(Integer.parseInt(args[2])); + outPacket.encodeInt(Integer.parseInt(args[3])); + outPacket.encodeByte(Integer.parseInt(args[4])); + + chr.write(outPacket); + + /* + if (args.length < 3) { + chr.chatMessage("Usage: !packet "); + return; + } + OutPacket outPacket = new OutPacket(Short.parseShort(args[1])); + StringBuilder data = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + data.append(" ").append(args[i]); + } + outPacket.encodeArr(data.toString()); + chr.write(outPacket); + */ + } + } + + + @Command(names = {"usects", "cts"}, requiredType = Tester) + public static class CtsCom extends AdminCommand { + + public static void execute(Char chr, String[] args) { + Option o = new Option(); + o.nOption = Integer.parseInt(args[2]); + o.rOption = 2111011; + o.tOption = 5; + + CharacterTemporaryStat cts = CharacterTemporaryStat.getByBitPos(Integer.parseInt(args[1])); +// CharacterTemporaryStat cts = CharacterTemporaryStat.MagnetArea; + if (cts == null) { + chr.chatMessage("Could not find cts with bitpos " + args[1]); + return; + } + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + tsm.putCharacterStatValue(cts, o); + tsm.sendSetStatPacket(); + System.out.println(String.format("CTS %s = %s", args[1], cts)); + } + } + + @Command(names = {"fifthjob", "V"}, requiredType = Tester) + public static class V extends AdminCommand { + public static void execute(Char chr, String[] args) { + chr.getQuestManager().completeQuest(QuestConstants.FIFTH_JOB_QUEST); + } + } + + @Command(names = {"showinvinfo", "invinfo"}, requiredType = Tester) + public static class ShowInvInfo extends AdminCommand { + + public static void execute(Char chr, String[] args) { + + chr.chatMessage(WorldName, "------------------------------------------------------------"); + for (InvType invType : InvType.values()) { + chr.chatMessage(WorldName, invType.toString()); + for (Item item : chr.getInventoryByType(invType).getItems()) { + item.setInvType(invType); + String name = StringData.getItemStringById(item.getItemId()); + chr.chatMessage(WorldName, String.format("%s, %d, %d, %d, %s", name, item.getItemId(), item.getId(), + item.getBagIndex(), item.getInvType().toString())); + } + } + } + } + + @Command(names = {"equipinfo"}, requiredType = Tester) + public static class EquipInfo extends AdminCommand { + + public static void execute(Char chr, String[] args) { + Map activeSetEffects = chr.getActiveSetEffects(); + + for (Map.Entry sets : activeSetEffects.entrySet()) { + ItemSet set = ItemData.getItemSetById(sets.getKey()); + + chr.chatMessage("%d - %s: - equippedCount: %d\n", set.getId(), set.getName(), sets.getValue()); + + for (Integer i = 1; i <= sets.getValue(); i++) { + if (!set.getEffects().containsKey(i)) continue; + Map effects = set.getEffects().get(i); + + for (Map.Entry stat : effects.entrySet()) { + boolean additive = !stat.getKey().isNonAdditiveStat(); + chr.chatMessage("stat: %s, value: %f additive: %b\n", stat.getKey(), stat.getValue(), additive); + } + } + } + } + } + + @Command(names = {"testcts"}, requiredType = Admin) + public static class TestCTS extends AdminCommand { + + public static void execute(Char chr, String[] args) { + +// WildHunterInfo wi = new WildHunterInfo(); +// wi.setIdx((byte) 1); +// wi.setRidingType((byte) 1); +// chr.write(WvsContext.wildHunterInfo(wi)); +// new TemporaryStatManager(null).encodeForLocal(null); + CharacterTemporaryStat cts = Arrays.stream(CharacterTemporaryStat.values()).filter(ctsa -> ctsa.getVal() == Integer.parseInt(args[1])) + .findFirst().orElse(null); + if (cts == null) { + chr.chatMessage("Could not find a cts with value " + args[1]); + } +// CharacterTemporaryStat cts2 = CharacterTemporaryStat.Speed; +// + OutPacket outPacket = new OutPacket(OutHeader.TEMPORARY_STAT_SET); + +// tsm.encodeForLocal(outPacket); + // Start encodeForLocal + int[] mask = new int[CharacterTemporaryStat.length]; + mask[cts.getPos()] |= cts.getVal(); + for (int i = 0; i < mask.length; i++) { + outPacket.encodeInt(mask[i]); + } + log.debug("[Out]\t| " + outPacket); + + outPacket.encodeShort(1); // n //Short / Int + outPacket.encodeInt(Kaiser.FINAL_TRANCE); // r + outPacket.encodeInt(30000); // t + + //outPacket.encodeInt(0); + + short size = 0; + outPacket.encodeShort(0); + for (int i = 0; i < size; i++) { + outPacket.encodeInt(0); // nKey + outPacket.encodeByte(0); // bEnable + } + outPacket.encodeByte(0); // defenseAtt + outPacket.encodeByte(0); // defenseState + outPacket.encodeByte(0); // pvpDamage + outPacket.encodeInt(0); // viperCharge + // Start TSTS encode +// outPacket.encodeArr(new byte[Integer.parseInt(args[2])]); +// outPacket.encodeInt(1); +// outPacket.encodeInt(80001001); +// outPacket.encodeByte(1); +// outPacket.encodeByte(0); +// outPacket.encodeArr(new byte[Integer.parseInt(args[1])]); +// outPacket.encodeShort(1); + // End TSTS encode + // End encodeForLocal + outPacket.encodeInt(0); // indie? + outPacket.encodeShort(0); // invalid value => "Failed to use the skill for an unknown reason" + outPacket.encodeByte(0); + outPacket.encodeByte(0); + outPacket.encodeByte(0); + outPacket.encodeByte(0); // movement enhancing +// outPacket.encodeArr(new byte[Integer.parseInt(args[1])]); + chr.write(outPacket); + + + } + } + + @Command(names = {"checkid", "getid", "charid"}, requiredType = Tester) + public static class CheckId extends AdminCommand { + public static void execute(Char chr, String[] args) { + chr.chatMessage(SpeakerChannel, "your charID = " + chr.getId() + " \r\nYour userID = " + chr.getUserId()); + } + } + + @Command(names = {"testaa", "aa"}, requiredType = Tester) + public static class TestAffectedArea extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 4) { + chr.chatMessage("Usage: !aa "); + return; + } + int skillId = Integer.parseInt(args[1]); + int slv = Integer.parseInt(args[2]); + int delay = Integer.parseInt(args[3]); + AffectedArea aa = new AffectedArea(0); + aa.setSkillID(skillId); + aa.setSlv(slv); + aa.setRect(chr.getPosition().getRectAround(new Rect(-70, -170, 70, 10))); + aa.setDuration(10); + aa.setFh(chr.getFoothold()); + aa.setDelay((short) delay); + chr.getField().spawnLife(aa, null); + } + } + + @Command(names = {"getphantomstolenskills"}, requiredType = Tester) + public static class GetPhantomStolenSkills extends AdminCommand { + + public static void execute(Char chr, String[] args) { + chr.getStolenSkills().stream().sorted(Comparator.comparing(StolenSkill::getPosition)) + .forEach(ss -> + chr.chatMessage(GroupFriend, "[StolenSkills] Skill ID: " + ss.getSkillid() + " on Position: " + ss.getPosition() + " with Current level: " + ss.getCurrentlv())); + } + } + + @Command(names = {"stealskilllist"}, requiredType = Tester) + public static class StealSkillList extends AdminCommand { + + public static void execute(Char chr, String[] args) { + Set skillSet = new HashSet<>(); + + //Warriors + int[] skillIds = new int[]{ + //Hero + 1101006, //Rage + 1101011, //Brandish + 1101012, //Combo Fury + 1101013, //Combo Attack + + 1111014, //Shout + 1111012, //Rush + 1111010, //Intrepid Slash + 1111008, //Shout + + 1121008, //Raging Blow + 1121016, //Magic Crash(Hero) + + 1121054, //Cry Valhalla + + //Paladin + 1201011, //Flame Charge + 1201012, //Blizzard Charge + 1201013, //Close Combat + + 1211013, //Threaten + 1211014, //Parashock Guard + 1211012, //Rush + 1211011, //Combat order + 1211010, //HP Recovery + 1211008, //Lightning Charge + + 1221016, //Guardian + 1221014, //Magic Crash(Paladin) + 1221011, //Heaven's Hammer + 1221009, //Blast + + 1221054, //Sacrosanctity + + //Dark Knight + 1301007, //Hyper body + 1301006, //Iron will + 1301012, //Spear Sweep + 1301013, //Evil Eye + + 1311015, //Cross Surge + 1311011, //La Mancha Spear, + 1311012, //Rush + + 1321012, //Dark Impale + 1321013, //Gungnir's Descent + 1321014, //Magic Crash(Dark Knight) + + 1321054, //Dark Thirst + + + 2001002, //Magic Guard + //Mage FP + 2101010, //Ignite + 2101005, //Poison breath + 2101004, //Flame Orb + 2101001, //Meditation(FP) + + 2111002, //Explosion + 2111003, //Poison mist + + 2121011, //Flame Haze + 2121007, //Meteor Shower + 2121006, //Paralyze + + 2121054, //Inferno Aura + + //MageIL + 2201008, //Cold Beam + 2201005, //Thunder Bolt + 2201001, //Meditation(IL) + + 2211010, //Glacier Chain + + 2221007, //Blizzard + 2221012, //Frozen Orb + 2221006, //Chain Lightning + + 2221054, //Absolute Zero Aura + + //Bishop + 2301004, //Bless + 2301005, //Holy Arrow + 2301002, //Heal + + 2311001, //Dispel + 2311003, //Holy Symbol + 2311004, //Shining Ray + 2311011, //Holy Fountain + 2311009, //Holy Magic Shell + + 2321008, //Genesis + 2321007, //Angel Ray + 2321006, //Resurrection + 2321005, //Adv Blessing + + 2321054, //Righteously Indignant + + + //Bowmaster + 3101008, //Covering Fire + 3101005, //Arrowbomb + + 3111011, //Reckless Hunt: Bow + 3111010, //Hookshot + 3111003, //Flame Surge + 3111013, //Arrow Blaster + + 3121004, //Hurricane + 3121015, //Arrow Stream + 3121002, //Sharp Eyes + 3121014, //Blinding Shot + + 3121054, //Concentration + + //Marksman + 3201008, //Net Toss + + 3211008, //Dragon Breath + 3211009, //Explosive Bolt + 3211010, //Hookshot + 3211011, //Pain Killer + 3211012, //Reckless Hunt: XBow + + 3221007, //Snipe + 3221006, //Illusion Step + 3221002, //Sharp Eyes + 3221001, //Piercing Arrow + + 3221054, //BullsEye Shot + + + 4001003, //Dark Sight + 4001005, //Haste + //Night Lord + 4101011, //Sin Mark + 4101010, //Gust Charm + 4101008, //Shuriken Burst + + 4111013, //Shade Splitter + 4111015, //Shade Splitter + 4111010, //Triple Throw + 4111003, //Shadow Web + + 4121017, //Showdown + 4121016, //Sudden Raid (NL) + 4121015, //Frailty Curse + 4121013, //Quad Star + + 4121054, //Bleed Dart + + //Shadower + 4201012, //Svg Blow + 4201011, //Meso Guard + 4201004, //Steal + + 4211011, //Midnight Carnival + 4211006, //Meso Explosion + 4211002, //Phase Dash + + 4221014, //Assassinate + 4221010, //Sudden Raid(Shad) + 4221007, //Bstep + 4221006, //Smoke screen + + 4221054, //Flip of the Coin + + //Dual Blade + 4301003, //Self Haste + + 4311003, //Slash Storm + 4311002, //Fatal Blow + + 4321006, //Flying Assaulter + 4321004, //Upper Stab + 4321002, //FlashBang + + 4331011, //Blade Ascension + 4331006, //Chains of Hell + + 4341011, //Sudden Raid (DB) + 4341009, //Phantom Blow + 4341004, //Blade Fury + 4341002, //Final Cut + + 4341054, //Blade Clone + + + 5001005, //Dash + //Bucc + 5101004, //Corkscrew Blow + + 5111007, //Roll of the Dice + 5111006, //Shock wave + 5111009, //Spiral Assault + 5111015, //Static Thumper + 5111012, //Static Thumper + + 5121013, //Nautilus Strike + 5121010, //Time Leap + 5121009, //Speed Infusion + 5121020, //octopunch + 5121015, //Crossbones + + 5121054, //Stimulating Conversation + + //Corsair + 5201012, //Scurvy Summons + 5201011, //Wings + 5201006, //Recoil Shot + 5201001, //Rapid blast + + 5211007, //Roll of the Dice + 5211011, //All Aboard + 5211009, //Cross cut Blast + 5211010, //Blackboot bill + 5211014, //Octo Cannon + + 5221018, //Jolly Roger + 5221015, //Parrotargetting + 5221016, //Brain scrambler + 5221013, //Nautilus Strike + 5221017, //Eigh-legs Easton + 5221022, //Broadside + + 5221054, //Whaler's potion + + //Cannon Master + 5011001, //Cannon Strike + + 5301003, //Monkey Magic + 5301001, //Barrel Bomb + 5301000, //Scatter Shot + + 5311004, //Barrel Roulette + 5311003, //Cannon Jump + 5311005, //Luck of the Die + 5311010, //Monkey Fury + 5311002, //Monkey Wave + 5311000, //Cannon Spike + + 5321012, //Cannon Barrage + 5321010, //Pirate Spirit + 5321004, //Monkey Militia + 5321003, //Anchor Aweigh + 5321001, //Nautilus Strike + 5321000, //Cannon Bazooka + + 5321054, //BuckShot + }; + + for (int skillId : skillIds) { + Skill skill = SkillData.getSkillDeepCopyById(skillId); + if (skill == null) { + continue; + } + skillSet.add(skill); + } + + chr.write(UserLocal.resultStealSkillList(skillSet, 4, 1, 2412)); + } + } + + @Command(names = {"np", "nearestportal"}, requiredType = Tester) + public static class NearestPortal extends AdminCommand { + public static void execute(Char chr, String[] args) { + Rect rect = new Rect( + new Position( + chr.getPosition().deepCopy().getX() - 30, + chr.getPosition().deepCopy().getY() - 30), + new Position( + chr.getPosition().deepCopy().getX() + 30, + chr.getPosition().deepCopy().getY() + 30) + ); + chr.chatMessage(Normal, "~~~~~~~~~~"); + chr.chatMessage(SpeakerChannel, "Current Map: " + NumberFormat.getNumberInstance(Locale.US).format(chr.getFieldID())); + chr.chatMessage(SpeakerChannel, "Current ReturnMap: " + NumberFormat.getNumberInstance(Locale.US).format(chr.getField().getReturnMap())); + chr.chatMessage(SpeakerChannel, ""); + for (Portal portal : chr.getField().getClosestPortal(rect)) { + chr.chatMessage(SpeakerChannel, "Portal Name: " + portal.getName()); + chr.chatMessage(SpeakerChannel, "Portal ID: " + NumberFormat.getNumberInstance(Locale.US).format(portal.getId())); + chr.chatMessage(SpeakerChannel, "Portal target map: " + NumberFormat.getNumberInstance(Locale.US).format(portal.getTargetMapId())); + chr.chatMessage(SpeakerChannel, "Portal script: " + portal.getScript()); + chr.chatMessage(SpeakerChannel, "."); + } + chr.chatMessage(Normal, "~~~~~~~~~~"); + } + } + + @Command(names = {"stats"}, requiredType = Tester) + public static class Stats extends AdminCommand { + public static void execute(Char chr, String[] args) { + int strength = chr.getStat(Stat.str); + int dexterity = chr.getStat(Stat.dex); + int intellect = chr.getStat(Stat.inte); + int luck = chr.getStat(Stat.luk); + int hp = chr.getStat(Stat.hp); + int mhp = chr.getStat(Stat.mhp); + int mp = chr.getStat(Stat.mp); + int mmp = chr.getStat(Stat.mmp); + double hpratio = (((double) hp) / mhp) * 100; + double mpratio = (((double) mp) / mmp) * 100; + DecimalFormat formatNumbers = new DecimalFormat("##.00"); + NumberFormat addDeci = NumberFormat.getNumberInstance(Locale.US); + chr.chatMessage(Notice2, "STR: " + addDeci.format(strength) + " DEX: " + addDeci.format(dexterity) + " INT: " + addDeci.format(intellect) + " LUK: " + addDeci.format(luck)); + chr.chatMessage(Notice2, "HP: " + addDeci.format(hp) + " / " + addDeci.format(mhp) + " (" + formatNumbers.format(hpratio) + "%) MP: " + addDeci.format(mp) + " / " + addDeci.format(mmp) + " (" + formatNumbers.format(mpratio) + "%)"); + } + } + + @Command(names = {"spawn"}, requiredType = Tester) + public static class Spawn extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 2) { + chr.chatMessage("Usage: !spawn ( )."); + return; + } + int id = Integer.parseInt(args[1]); + int count = 1; + if (args.length > 2) { + count = Integer.parseInt(args[2]); + if (count > 100) { + count = 100; + chr.chatMessage("You put the amount of mobs to spawn above 100, capping it to 100."); + } + } + long hp = 0; + if (args.length > 3) { + hp = Long.parseLong(args[3]); + } + for (int i = 0; i < count; i++) { + Mob mob = MobData.getMobDeepCopyById(id); + if (mob == null) { + chr.chatMessage("Could not find a mob with that ID."); + return; + } + Field field = chr.getField(); + Position pos = chr.getPosition(); + Foothold fh = field.getFootholdById(chr.getFoothold()); + mob.setCurFoodhold(fh); + mob.setHomeFoothold(fh); + mob.setPosition(pos.deepCopy()); + mob.setPrevPos(pos.deepCopy()); + mob.setPosition(pos.deepCopy()); + if (hp > 0) { + mob.setMaxHp(hp); + mob.setHp(hp); + } + mob.setNotRespawnable(true); + if (mob.getField() == null) { + mob.setField(field); + } + field.spawnLife(mob, null); + } + } + } + + @Command(names = {"npc", "spawnnpc"}, requiredType = GameMaster) + public static class NPC extends AdminCommand { + public static void execute(Char chr, String[] args) { + int id = Integer.parseInt(args[1]); + Npc npc = NpcData.getNpcDeepCopyById(id); + if (npc == null) { + chr.chatMessage("Could not find an npc with that ID."); + return; + } + Field field = chr.getField(); + Position pos = chr.getPosition(); + npc.setPosition(pos.deepCopy()); + npc.setCy(chr.getPosition().getY()); + npc.setRx0(chr.getPosition().getX() + 50); + npc.setRx1(chr.getPosition().getX() - 50); + npc.setFh(chr.getFoothold()); + npc.setNotRespawnable(true); + if (npc.getField() == null) { + npc.setField(field); + } + field.spawnLife(npc, null); + log.debug("npc has id " + npc.getObjectId()); + } + } + + @Command(names = {"drop"}, requiredType = Tester) + public static class DropItem extends AdminCommand { + public static void execute(Char chr, String[] args) { + final int itemId = Integer.parseInt(args[1]); + chr.dropItem(itemId, chr.getPosition().getX(), chr.getPosition().getY()); + } + } + + + @Command(names = {"dropmany"}, requiredType = Tester) + public static class DropItemMany extends AdminCommand { + public static void execute(Char chr, String[] args) { + final int itemId = Integer.parseInt(args[1]); + final int count = Integer.parseInt(args[2]); + chr.dropItemMany(itemId, count, chr.getPosition().getX(), chr.getPosition().getY()); + } + } + + @Command(names = {"testdrop", "droptest"}, requiredType = Tester) + public static class TestDrop extends AdminCommand { + public static void execute(Char chr, String[] args) { + int id = Integer.parseInt(args[1]); + int count = 1; + if (args.length > 2) { + count = Integer.parseInt(args[2]); + } + for (int i = 0; i < count; i++) { + Mob mob = MobData.getMobDeepCopyById(id); + if (mob == null) { + chr.chatMessage("Could not find a mob with that ID."); + return; + } + Field field = chr.getField(); + Position pos = chr.getPosition(); + mob.setPosition(pos.deepCopy()); + mob.setPrevPos(pos.deepCopy()); + mob.setPosition(pos.deepCopy()); + mob.getForcedMobStat().setMaxMP(3); + mob.setMaxHp(3); + mob.setHp(3); + mob.setNotRespawnable(true); + if (mob.getField() == null) { + mob.setField(field); + } + mob.addDamage(chr, 1); // for drop/meso% + mob.dropDrops(); + } + } + } + + @Command(names = {"proitem"}, requiredType = Tester) + public static class ProItem extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 5) { + chr.chatMessage(Notice2, "Needs more args! "); + return; + } + int id = Integer.parseInt(args[1]); + int stat = Integer.parseInt(args[2]); + int atk = Integer.parseInt(args[3]); + int flames = Integer.parseInt(args[4]); + Equip equip = ItemData.getEquipDeepCopyFromID(id, false, chr.getJob()); + equip.setBaseStat(EquipBaseStat.iStr, stat); + equip.setBaseStat(EquipBaseStat.iDex, stat); + equip.setBaseStat(EquipBaseStat.iInt, stat); + equip.setBaseStat(EquipBaseStat.iLuk, stat); + equip.setBaseStat(EquipBaseStat.iMaxHP, stat); + equip.setBaseStat(EquipBaseStat.iMaxMP, stat); + equip.setBaseStat(EquipBaseStat.iDEF, stat); + equip.setBaseStat(EquipBaseStat.iPAD, atk); + equip.setBaseStat(EquipBaseStat.iMAD, atk); + equip.setBaseStat(EquipBaseStat.bdr, flames); + equip.setBaseStat(EquipBaseStat.imdr, flames); + equip.setBaseStat(EquipBaseStat.damR, flames); + equip.setBaseStat(EquipBaseStat.statR, flames); + + chr.addItemToInventory(InvType.EQUIP, equip, false); + chr.getClient().write(WvsContext.inventoryOperation(true, false, + Add, (short) equip.getBagIndex(), (byte) 1, + 0, equip)); + + } + } + + @Command(names = {"hide"}, requiredType = Tester) + public static class Hide extends AdminCommand { + + public static void execute(Char chr, String[] args) { + chr.setHide(args.length < 2 ? !chr.isHide() + : Util.isNumber(args[1]) ? Integer.parseInt(args[1]) != 0 : Boolean.parseBoolean(args[1])); + } + } + + @Command(names = {"setpotential", "setpot"}, requiredType = Tester) + public static class SetPotential extends AdminCommand { + + public static void execute(Char chr, String[] args) { + + if (args.length < 5) { + chr.chatMessage("Usage: !setpot "); + return; + } + int invPosition = Integer.parseInt(args[1]); + Equip equip = (Equip) chr.getInventoryByType(InvType.EQUIP).getItemBySlot(invPosition); + if (equip == null) { + chr.chatMessage("There is no equip on this position."); + return; + } + equip.setOptionBase(0, Integer.parseInt(args[2])); + equip.setOptionBase(1, Integer.parseInt(args[3])); + equip.setOptionBase(2, Integer.parseInt(args[4])); + equip.updateToChar(chr); + } + } + + @Command(names = {"setbonuspotential", "setbpotential", "setbpot"}, requiredType = Tester) + public static class SetBonusPotential extends AdminCommand { + + public static void execute(Char chr, String[] args) { + + if (args.length < 5) { + chr.chatMessage("Usage: !setbpot "); + return; + } + int invPosition = Integer.parseInt(args[1]); + Equip equip = (Equip) chr.getInventoryByType(InvType.EQUIP).getItemBySlot(invPosition); + if (equip == null) { + chr.chatMessage("There is no equip on this position."); + return; + } + equip.setOptionBonus(0, Integer.parseInt(args[2])); + equip.setOptionBonus(1, Integer.parseInt(args[3])); + equip.setOptionBonus(2, Integer.parseInt(args[4])); + equip.updateToChar(chr); + } + } + + @Command(names = {"setflames", "flames"}, requiredType = Tester) + public static class SetFlames extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length < 7) { + chr.chatMessage("Usage: !flames "); + return; + } + int invPosition = Integer.parseInt(args[1]); + Equip equip = (Equip) chr.getInventoryByType(InvType.EQUIP).getItemBySlot(invPosition); + if (equip == null) { + chr.chatMessage("There is no equip on this position."); + return; + } + int stat = Integer.parseInt(args[2]); + int att = Integer.parseInt(args[3]); + int as = Integer.parseInt(args[4]); + int td = Integer.parseInt(args[5]); + int bd = Integer.parseInt(args[6]); + + equip.setfSTR(stat); + equip.setfDEX(stat); + equip.setfINT(stat); + equip.setfLUK(stat); + equip.setfHP(stat); + equip.setfMP(stat); + equip.setfDEF(stat); + equip.setfSpeed(stat); + equip.setfJump(stat); + + equip.setfATT(att); + equip.setfMATT(att); + + equip.setfAllStat(as); + equip.setfDamage(td); + equip.setfBoss(bd); + equip.updateToChar(chr); + } + } + + @Command(names = {"setflame", "flame"}, requiredType = Tester) + public static class SetFlame extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length < 4) { + chr.chatMessage("Usage: !flame "); + chr.chatMessage("Example: !flame 1 str 40"); + return; + } + int invPosition = Integer.parseInt(args[1]); + Equip equip = (Equip) chr.getInventoryByType(InvType.EQUIP).getItemBySlot(invPosition); + if (equip == null) { + chr.chatMessage("There is no equip on this position."); + return; + } + String flame = args[2].toLowerCase(); + short value = Short.parseShort(args[3]); + switch (flame) { + case "str": + equip.setfSTR(value); + break; + case "dex": + equip.setfDEX(value); + break; + case "int": + equip.setfINT(value); + break; + case "luk": + equip.setfLUK(value); + break; + case "att": + case "atk": + equip.setfATT(value); + break; + case "matt": + case "matk": + equip.setfMATT(value); + break; + case "def": + equip.setfDEF(value); + break; + case "hp": + equip.setfHP(value); + break; + case "mp": + equip.setfMP(value); + break; + case "speed": + equip.setfSpeed(value); + break; + case "jump": + equip.setfJump(value); + break; + case "allstat": + case "as": + equip.setfAllStat(value); + break; + case "boss": + case "bdmg": + case "bdr": + equip.setfBoss(value); + break; + case "dmg": + case "damage": + equip.setfDamage(value); + break; + case "level": + case "lvl": + case "lv": + equip.setfLevel(value); + break; + case "reset": + equip.resetFlameStats(); + break; + default: + chr.chatMessage("Unknown Flame Type"); + return; + } + equip.updateToChar(chr); + } + } + + @Command(names = {"setbaseflame", "bflame"}, requiredType = Tester) + public static class SetBaseFlame extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length < 4) { + chr.chatMessage("Usage: !flame "); + chr.chatMessage("Example: !flame 1 str 7"); + return; + } + int invPosition = Integer.parseInt(args[1]); + Equip equip = (Equip) chr.getInventoryByType(InvType.EQUIP).getItemBySlot(invPosition); + if (equip == null) { + chr.chatMessage("There is no equip on this position."); + return; + } + + equip.resetFlameStats(); + + int statCount = Math.min((args.length - 2) / 2, 4); + for (int pos=0; pos < statCount; pos++) { + String flame = args[2 + pos * 2].toLowerCase(); + for (int other=0; other < pos; other++) { + if (flame.equals(args[2 + other * 2].toLowerCase())) { + chr.chatMessage("Cannot have duplicate flame types"); + return; + } + } + short tier = Short.parseShort(args[3 + pos * 2]); + switch (flame) { + case "str": + equip.setFlameStat(pos, FlameStat.STR, tier); + break; + case "dex": + equip.setFlameStat(pos, FlameStat.DEX, tier); + break; + case "int": + equip.setFlameStat(pos, FlameStat.INT, tier); + break; + case "luk": + equip.setFlameStat(pos, FlameStat.LUK, tier); + break; + case "strdex": + equip.setFlameStat(pos, FlameStat.STRDEX, tier); + break; + case "strint": + equip.setFlameStat(pos, FlameStat.STRINT, tier); + break; + case "strluk": + equip.setFlameStat(pos, FlameStat.STRLUK, tier); + break; + case "dexint": + equip.setFlameStat(pos, FlameStat.DEXINT, tier); + break; + case "dexluk": + equip.setFlameStat(pos, FlameStat.DEXLUK, tier); + break; + case "intluk": + equip.setFlameStat(pos, FlameStat.INTLUK, tier); + break; + case "att": + case "atk": + equip.setFlameStat(pos, FlameStat.Attack, tier); + break; + case "matt": + case "matk": + equip.setFlameStat(pos, FlameStat.MagicAttack, tier); + break; + case "def": + equip.setFlameStat(pos, FlameStat.Defense, tier); + break; + case "hp": + equip.setFlameStat(pos, FlameStat.MaxHP, tier); + break; + case "mp": + equip.setFlameStat(pos, FlameStat.MaxMP, tier); + break; + case "speed": + equip.setFlameStat(pos, FlameStat.Speed, tier); + break; + case "jump": + equip.setFlameStat(pos, FlameStat.Jump, tier); + break; + case "allstat": + case "as": + equip.setFlameStat(pos, FlameStat.AllStats, tier); + break; + case "boss": + case "bdmg": + case "bdr": + equip.setFlameStat(pos, FlameStat.BossDamage, tier); + break; + case "dmg": + case "damage": + equip.setFlameStat(pos, FlameStat.Damage, tier); + break; + case "level": + case "lvl": + case "lv": + equip.setFlameStat(pos, FlameStat.LevelReduction, tier); + break; + default: + chr.chatMessage("Unknown Flame Type"); + return; + } + } + equip.updateToChar(chr); + } + } + + @Command(names = {"item"}, requiredType = Tester) + public static class GetItem extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (Util.isNumber(args[1])) { + + int id = Integer.parseInt(args[1]); + Equip equip = ItemData.getEquipDeepCopyFromID(id, true); + if (equip == null) { + Item item = ItemData.getItemDeepCopy(id, true); + if (item == null) { + chr.chatMessage(WorldName, String.format("Could not find an item with id %d", id)); + return; + } + short quant = 1; + if (args.length > 2) { + quant = Short.parseShort(args[2]); + } + item.setQuantity(quant); + chr.addItemToInventory(item); + } else { + chr.addItemToInventory(InvType.EQUIP, equip, false); + } + } else { + StringBuilder query = new StringBuilder(); + int size = args.length; + short quant = 1; + if (Util.isNumber(args[size - 1])) { + size--; + quant = Short.parseShort(args[size]); + } + for (int i = 1; i < size; i++) { + query.append(args[i].toLowerCase()).append(" "); + } + query = new StringBuilder(query.substring(0, query.length() - 1)); + Map map = StringData.getItemStringByName(query.toString()); + if (map.size() == 0) { + chr.chatMessage(WorldName, "No items found for query " + query); + } + for (Map.Entry entry : map.entrySet()) { + int id = entry.getKey(); + Item item = ItemData.getEquipDeepCopyFromID(id, true); + if (item != null) { + Equip equip = (Equip) item; + if (equip.getItemId() < 1000000) { + continue; + } + chr.addItemToInventory(equip); + chr.getClient().write(WvsContext.inventoryOperation(true, false, + Add, (short) equip.getBagIndex(), (byte) -1, 0, equip)); + return; + } + item = ItemData.getItemDeepCopy(id); + if (item == null) { + continue; + } + item.setQuantity(quant); + chr.addItemToInventory(item); + chr.getClient().write(WvsContext.inventoryOperation(true, false, + Add, (short) item.getBagIndex(), (byte) -1, 0, item)); + return; + } + } + } + } + + @Command(names = {"done"}, requiredType = Tester) + public static class Done extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = 1000; + int hp = 250000; + int lv = 235; + chr.setStatAndSendPacket(Stat.hp, hp); + chr.setStatAndSendPacket(Stat.mhp, hp); + chr.setStatAndSendPacket(Stat.mp, hp); + chr.setStatAndSendPacket(Stat.mmp, hp); + chr.setStatAndSendPacket(Stat.str, (short) num); + chr.setStatAndSendPacket(Stat.dex, (short) num); + chr.setStatAndSendPacket(Stat.inte, (short) num); + chr.setStatAndSendPacket(Stat.luk, (short) num); + chr.setStatAndSendPacket(Stat.level, lv); + } + } + + @Command(names = {"hypertp"}, requiredType = Tester) + public static class HyperTP extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int hyperTP = 5040004; + Item hyperTP2 = ItemData.getItemDeepCopy(hyperTP); + chr.addItemToInventory(hyperTP2.getInvType(), hyperTP2, false); + chr.getClient().write(WvsContext.inventoryOperation(true, false, + Add, (short) hyperTP2.getBagIndex(), (byte) -1, 0, hyperTP2)); + } + } + + @Command(names = {"job", "setjob"}, requiredType = Tester) + public static class Job extends AdminCommand { + + public static void execute(Char chr, String[] args) { + short id = Short.parseShort(args[1]); + JobEnum job = JobEnum.getJobById(id); + if (job != null) { + chr.setJob(id); + Map stats = new HashMap<>(); + stats.put(Stat.job, id); + chr.getClient().write(WvsContext.statChanged(stats)); + } else { + chr.chatMessage("Unknown job id " + id); + } + } + } + + @Command(names = {"sp", "setsp"}, requiredType = Tester) + public static class Sp extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + if (num >= 0) { + chr.setSpToCurrentJob(num); + Map stats = new HashMap<>(); + stats.put(Stat.sp, chr.getAvatarData().getCharacterStat().getExtendSP()); + chr.getClient().write(WvsContext.statChanged(stats)); + } + } + } + + @Command(names = {"ap", "setap"}, requiredType = Tester) + public static class Ap extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + if (num >= 0) { + chr.setStatAndSendPacket(Stat.ap, (short) num); + } + } + } + + /** + * Sets the max HP and heals. + */ + @Command(names = {"maxhp", "setmaxhp"}, requiredType = Tester) + public static class Hp extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + if (num >= 0) { + chr.setStatAndSendPacket(Stat.hp, num); + chr.setStatAndSendPacket(Stat.mhp, num); + } + } + } + + /** + * Sets the max MP and heals. + */ + @Command(names = {"maxmp", "setmaxmp"}, requiredType = Tester) + public static class Mp extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + if (num >= 0) { + chr.setStatAndSendPacket(Stat.mp, num); + chr.setStatAndSendPacket(Stat.mmp, num); + } + } + } + + /** + * Sets the max HP and heals. + */ + @Command(names = {"currenthp", "setcurrenthp"}, requiredType = Tester) + public static class SetCurrentHp extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + if (num >= 0) { + chr.setStatAndSendPacket(Stat.hp, num); + } + } + } + + /** + * Sets the max MP and heals. + */ + @Command(names = {"currentmp", "setcurrentmp"}, requiredType = Tester) + public static class SetCurrentMp extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + if (num >= 0) { + chr.setStatAndSendPacket(Stat.mp, num); + } + } + } + + @Command(names = {"setstat"}, requiredType = Tester) + public static class SetStat extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length == 3) { + String statName = args[1].toLowerCase(); + int amount = Integer.parseInt(args[2]); + if (statName.equalsIgnoreCase("str") + || statName.equalsIgnoreCase("dex") + || statName.equalsIgnoreCase("inte") + || statName.equalsIgnoreCase("luk")) { + Stat stat = Stat.valueOf(statName); + chr.setStatAndSendPacket(stat, (short) amount); + return; + } + } + chr.chatMessage("setstat "); + } + } + + @Command(names = {"level", "setlevel", "lvl", "lv"}, requiredType = Tester) + public static class Level extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + if (num >= 0) { + chr.setStatAndSendPacket(Stat.level, num); + chr.setStatAndSendPacket(Stat.exp, 0); + chr.getJobHandler().handleLevelUp(); + chr.getField().broadcastPacket(UserRemote.effect(chr.getId(), Effect.levelUpEffect())); + } + } + } + + @Command(names = {"leveluntil", "levelupuntil", "leveltill", "leveluptill"}, requiredType = Tester) + public static class LevelUntil extends AdminCommand { + public static void execute(Char chr, String[] args) { + int num = Integer.parseInt(args[1]); + int level = chr.getLevel(); + if (num > 275) { + chr.chatMessage("You can't be above lvl 275"); + chr.dispose(); + return; + } + while (level < num) { + level++; + chr.setStat(Stat.level, level); + Map stats = new HashMap<>(); + stats.put(Stat.level, level); + stats.put(Stat.exp, (long) 0); + chr.getClient().write(WvsContext.statChanged(stats)); + chr.getJobHandler().handleLevelUp(); + chr.getField().broadcastPacket(UserRemote.effect(chr.getId(), Effect.levelUpEffect())); + } + } + } + + + @Command(names = {"heal"}, requiredType = Tester) + public static class Heal extends AdminCommand { + + public static void execute(Char chr, String[] args) { + int hp = chr.getMaxHP(); + if (args.length > 1) { + hp = Integer.parseInt(args[1]); + } + chr.heal(hp); + chr.healMP(chr.getMaxMP()); + } + } + + @Command(names = {"gethp"}, requiredType = Tester) + public static class CurrentHp extends AdminCommand { + + public static void execute(Char chr, String[] args) { + String result = String.format("CurrentHP: %d, MaxHP: %d", chr.getHP(), chr.getMaxHP()); + chr.chatMessage(result); + } + } + + @Command(names = {"getmp"}, requiredType = Tester) + public static class CurrentMp extends AdminCommand { + + public static void execute(Char chr, String[] args) { + String result = String.format("CurrentMP: %d, MaxMP: %d", chr.getMP(), chr.getMaxMP()); + chr.chatMessage(result); + } + } + + @Command(names = {"invincible", "god", "godmode"}, description = "Toggles invincibility.", requiredType = Tester) + public static class Godmode extends AdminCommand { + + public static void execute(Char chr, String[] args) { + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + chr.setInvincible(!chr.isInvincible()); + chr.chatMessage("Invincibility: " + chr.isInvincible()); + if (chr.isInvincible()) { + Option o = new Option(); + o.nOption = 3; + tsm.putCharacterStatValue(NotDamaged, o); + } else { + tsm.removeStat(NotDamaged, true); + } + tsm.sendSetStatPacket(); + } + } + + @Command(names = {"morph"}, requiredType = Tester) + public static class Morph extends AdminCommand { + public static void execute(Char chr, String[] args) { + int morphID = Integer.parseInt(args[1]); + if (args.length < 2) { + chr.chatMessage(Notice2, "Needs more args! "); + } + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + Option o1 = new Option(); + o1.nOption = morphID; + o1.rOption = Kaiser.FINAL_TRANCE; + tsm.putCharacterStatValue(CharacterTemporaryStat.Morph, o1); + tsm.sendSetStatPacket(); + } + } + + @Command(names = {"mount"}, requiredType = Tester) + public static class Mount extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 2) { + chr.chatMessage(Notice2, "Needs more args! "); + } + int mountID = Integer.parseInt(args[1]); + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + TemporaryStatBase tsb = tsm.getTSBByTSIndex(TSIndex.RideVehicle); + tsb.setNOption(mountID); + tsb.setROption(Kaiser.FINAL_TRANCE); + tsm.putCharacterStatValue(RideVehicle, tsb.getOption()); + tsm.sendSetStatPacket(); + } + } + + @Command(names = {"testtempstat"}, requiredType = Admin) + public static class TestTempStat extends AdminCommand { + public static void execute(Char chr, String[] args) { + List lifes = new ArrayList<>(chr.getField().getLifes().values()); + Life l = lifes.get(lifes.size() - 1); + if (!(l instanceof Mob)) { + return; + } + Mob mob = (Mob) l; + chr.getClient().write(MobPool.statSet(mob, (short) 0)); + } + } + + @Command(names = {"map", "warp"}, requiredType = Tester) + public static class SetMap extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length > 1 && Util.isNumber(args[1])) { + Field toField = chr.getOrCreateFieldByCurrentInstanceType(Integer.parseInt(args[1])); + if (toField != null) { + chr.warp(toField); + } else { + chr.chatMessage(Notice2, "Could not find a field with id " + args[1]); + } + } else { + chr.chatMessage("Please input a number as first argument."); + } + } + } + + @Command(names = {"setportal"}, requiredType = Tester) + public static class SetPortal extends AdminCommand { + public static void execute(Char chr, String[] args) { + int portalID = Integer.parseInt(args[1]); + Portal portal = chr.getField().getPortalByID(portalID); + if (portal == null) { + chr.chatMessage(Notice2, "Portal does not exist."); + return; + } + Position position = new Position(portal.getX(), portal.getY()); + chr.write(FieldPacket.teleport(position, chr)); + } + } + + @Command(names = {"atom"}, requiredType = Admin) + public static class Atom extends AdminCommand { + public static void execute(Char chr, String[] args) { + int charID = chr.getId(); + ForceAtomInfo forceAtomInfo1 = new ForceAtomInfo(142110011, ForceAtomEnum.KINESIS_ORB_REAL.getInc(), 3, 3, 0, 0, Util.getCurrentTime(), 1, + 142110011, new Position()); + ForceAtomInfo forceAtomInfo2 = new ForceAtomInfo(142110011, ForceAtomEnum.KINESIS_ORB_REAL.getInc(), 3, 3, 0, 0, Util.getCurrentTime(), 1, + 142110011, new Position()); + List fais = new ArrayList<>(); + fais.add(forceAtomInfo1); + fais.add(forceAtomInfo2); + + Mob mob = (Mob) chr.getField().getLifes().get(chr.getField().getLifes().size() - 1); + List mobs = new ArrayList<>(); + int mobID = mob.getObjectId(); + mobs.add(mobID); + chr.createForceAtom(new ForceAtom(false, -1, chr.getId(), ForceAtomEnum.KINESIS_ORB_REAL, + true, mobs, 142110011, fais, null, 0, 0, null, 142110011, mob.getPosition(), 0)); + + } + } + + @Command(names = {"getskill"}, requiredType = Tester) + public static class GetSkill extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 4) { + chr.chatMessage(Notice2, "Needs more args! "); + return; + } + int id = Integer.parseInt(args[1]); + int cur = Integer.parseInt(args[2]); + int max = Integer.parseInt(args[3]); + chr.addSkill(id, cur, max); + } + } + + @Command(names = {"maxskills"}, requiredType = Tester) + public static class MaxSkills extends AdminCommand { + public static void execute(Char chr, String[] args) { + List list = new ArrayList<>(); + Set jobs = new HashSet<>(); + short job = chr.getJob(); + // giant hack, but it's for a command, so it's k + if (JobConstants.isEvan(job)) { + jobs.add((short) 2000); + jobs.add((short) 2200); + while (job >= 2210) { + jobs.add(job--); + } + } else { + if (job % 100 == 12) { + jobs.add(job); + jobs.add((short) (job - 1)); + jobs.add((short) (job - 2)); + jobs.add((short) (job - 3)); + jobs.add((short) (job - 4)); + jobs.add((short) (job - 5)); + jobs.add((short) (job - 6)); + jobs.add((short) (job - 7)); + jobs.add((short) (job - 8)); + jobs.add((short) (job - 9)); + jobs.add((short) (job - 10)); + jobs.add((short) (job - 11)); + jobs.add((short) (job - 12)); + } else if (job % 100 == 11) { + jobs.add(job); + jobs.add((short) (job - 1)); + jobs.add((short) (job - 2)); + jobs.add((short) (job - 3)); + jobs.add((short) (job - 4)); + jobs.add((short) (job - 5)); + jobs.add((short) (job - 6)); + jobs.add((short) (job - 7)); + jobs.add((short) (job - 8)); + jobs.add((short) (job - 9)); + jobs.add((short) (job - 10)); + jobs.add((short) (job - 11)); + jobs.add((short) (job - 12)); + } else if (job % 100 == 10) { + jobs.add(job); + jobs.add((short) (job - 1)); + jobs.add((short) (job - 2)); + jobs.add((short) (job - 3)); + jobs.add((short) (job - 4)); + jobs.add((short) (job - 5)); + jobs.add((short) (job - 6)); + jobs.add((short) (job - 7)); + jobs.add((short) (job - 8)); + jobs.add((short) (job - 9)); + jobs.add((short) (job - 10)); + jobs.add((short) (job - 11)); + jobs.add((short) (job - 12)); + } else { + jobs.add(job); + } + } + for (short j : jobs) { + for (Skill skill : SkillData.getSkillsByJob(j)) { + byte maxLevel = (byte) skill.getMaxLevel(); + skill.setCurrentLevel(maxLevel); + skill.setMasterLevel(maxLevel); + list.add(skill); + chr.addSkill(skill); + } + if (list.size() > 0) { + chr.getClient().write(WvsContext.changeSkillRecordResult(list, true, false, false, false)); + } + } + } + } + + @Command(names = {"max"}, requiredType = Tester) + public static class maxskills2 extends AdminCommand { + public static void execute(Char chr, String[] args) { + List list = new ArrayList<>(); + for (Skill skill : SkillData.getSkillsByJob(chr.getJob())) { + byte maxLevel = (byte) skill.getMaxLevel(); + skill.setCurrentLevel(maxLevel); + skill.setMasterLevel(maxLevel); + list.add(skill); + chr.addSkill(skill); + chr.getClient().write(WvsContext.changeSkillRecordResult(list, true, false, false, false)); + } + } + } + + @Command(names = {"lookup", "find", "search"}, requiredType = Tester) + public static class Lookup extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 3) { + chr.chatMessage(Notice2, "Needs more args! "); + chr.chatMessage(Notice2, "Possible lookup types are: item, skill, mob, npc, map, quest"); + return; + } + StringBuilder query = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + query.append(args[i].toLowerCase()).append(" "); + } + query = new StringBuilder(query.substring(0, query.length() - 1)); + chr.chatMessage("Query: " + query); + boolean isNumber = Util.isNumber(query.toString()); + if ("skill".equalsIgnoreCase(args[1])) { + SkillStringInfo ssi; + int id; + if (isNumber) { + id = Integer.parseInt(query.toString()); + ssi = StringData.getSkillStringById(id); + if (ssi == null) { + chr.chatMessage(WorldName, "Cannot find skill " + id); + return; + } + SkillInfo skillInfo = SkillData.getSkillInfoById(id); + chr.chatMessage(WorldName, "Name: " + ssi.getName()); + chr.chatMessage(WorldName, "Desc: " + ssi.getDesc()); + chr.chatMessage(WorldName, "h: " + ssi.getH()); + chr.chatMessage(WorldName, "type: " + skillInfo.getType()); + } else { + Map map = StringData.getSkillStringByName(query.toString()); + if (map.size() == 0) { + chr.chatMessage(WorldName, "No skills found for query " + query); + } + for (Map.Entry entry : map.entrySet()) { + id = entry.getKey(); + ssi = entry.getValue(); + SkillInfo si = SkillData.getSkillInfoById(id); + if (si != null) { + chr.chatMessage(WorldName, "Id: " + id); + chr.chatMessage(WorldName, "Name: " + ssi.getName()); + chr.chatMessage(WorldName, "Desc: " + ssi.getDesc()); + chr.chatMessage(WorldName, "h: " + ssi.getH()); + chr.chatMessage(WorldName, "type: " + si.getType()); + } + } + } + } else if ("option".equalsIgnoreCase(args[1])) { + List ioList = ItemData.getItemOptionsByName(query.toString()); + for (ItemOption io : ioList) { + int id = io.getId(); + int tier = id / 10000; // 1 = Rare, 2 = Epic, 3 = Unique, 4 = Legendary + ChatType chatType; + String ioString = ""; + if (tier > 0 && tier <= 4) { + boolean bonus = (id % (tier * 10000)) >= 2000; + if (bonus) { + ioString += "[Bonus] "; + } + } + switch (tier) { + case 1: + chatType = Notice2; // Rare + ioString += "(Rare) "; + break; + case 2: + chatType = GroupParty; // Epic + ioString += "(Epic) "; + break; + case 3: + chatType = Notice; // Unique + ioString += "(Unique) "; + break; + case 4: + chatType = Whisper; // Legendary + ioString += "(Legendary) "; + break; + default: + chatType = WorldName; // Other + ioString += "(Other) "; + break; + } + ioString += io.getString(); + chr.chatMessage(chatType, "Id: " + id); + chr.chatMessage(chatType, "Name: " + ioString); + } + } else if ("loption".equalsIgnoreCase(args[1])) { + List ioList = ItemData.getItemOptionsByName(query.toString()); + for (ItemOption io : ioList) { + int id = io.getId(); + int tier = id / 10000; // 1 = Rare, 2 = Epic, 3 = Unique, 4 = Legendary + ChatType chatType; + String ioString = ""; + if (tier > 0 && tier <= 4) { + boolean bonus = (id % (tier * 10000)) >= 2000; + if (bonus) { + ioString += "[Bonus] "; + } + } + if (tier == 4) { + chatType = Whisper; + ioString += io.getString(); + chr.chatMessage(chatType, "Id: " + id); + chr.chatMessage(chatType, "Name: " + ioString); + } + } + } else { + String queryType = args[1].toLowerCase(); + int id; + String name; + if (isNumber) { + id = Integer.parseInt(query.toString()); + switch (queryType) { + case "item": + name = StringData.getItemStringById(id); + break; + case "quest": + name = StringData.getQuestStringById(id); + break; + case "mob": + name = StringData.getMobStringById(id); + break; + case "npc": + name = StringData.getNpcStringById(id); + break; + case "map": + name = StringData.getMapStringById(id); + break; + default: + chr.chatMessage("Unknown query type " + queryType); + return; + } + if (name == null) { + chr.chatMessage(WorldName, "Cannot find " + queryType + " " + id); + return; + } + chr.chatMessage(WorldName, "Name: " + name); + } else { + Map map; + switch (queryType) { + case "equip": + map = StringData.getItemStringByName(query.toString()); + Set nonEquips = new HashSet<>(); + for (int itemId : map.keySet()) { + if (!ItemConstants.isEquip(itemId)) { + nonEquips.add(itemId); + } + } + for (int itemId : nonEquips) { + map.remove(itemId); + } + break; + case "item": + map = StringData.getItemStringByName(query.toString()); + break; + case "quest": + map = StringData.getQuestStringByName(query.toString()); + break; + case "mob": + map = StringData.getMobStringByName(query.toString()); + break; + case "npc": + map = StringData.getNpcStringByName(query.toString()); + break; + case "map": + map = StringData.getMapStringByName(query.toString()); + break; + default: + chr.chatMessage("Unknown query type " + queryType); + return; + } + if (map.size() == 0) { + chr.chatMessage(WorldName, "No " + queryType + "s found for query " + query); + return; + } + TreeMap sortedMap = new TreeMap<>(map); + for (Map.Entry entry : sortedMap.entrySet()) { + id = entry.getKey(); + name = entry.getValue(); + if (queryType.equalsIgnoreCase("item")) { + Item item = ItemData.getEquipDeepCopyFromID(id, false); + if (item == null) { + item = ItemData.getItemDeepCopy(id); + } + if (item == null) { + continue; + } + } + chr.chatMessage(WorldName, "Id: " + id); + chr.chatMessage(WorldName, "Name: " + name); + } + } + } + } + } + + @Command(names = {"getprojectiles", "projectiles"}, requiredType = Tester) + public static class GetProjectiles extends AdminCommand { + public static void execute(Char chr, String[] args) { + int[] projectiles = new int[]{ + 2070000, + 2060000, + 2061000, + 2330000 + }; + for (int projectile : projectiles) { + Item item = ItemData.getItemDeepCopy(projectile); + chr.addItemToInventory(item.getInvType(), item, false); + item.setQuantity(1000); + chr.getClient().write(WvsContext.inventoryOperation(true, false, + Add, (short) item.getBagIndex(), (byte) -1, 0, item)); + } + } + } + + @Command(names = {"mesos", "money"}, requiredType = Tester) + public static class Mesos extends AdminCommand { + public static void execute(Char chr, String[] args) { + long mesos = Long.parseLong(args[1]); + chr.addMoney(mesos); + } + } + + @Command(names = {"nx", "setnx"}, requiredType = Tester) + public static class NxCommand extends AdminCommand { + public static void execute(Char chr, String[] args) { + int nx = Integer.parseInt(args[1]); + chr.addNx(nx); + } + } + + @Command(names = {"maplepoints", "setmaplepoints"}, requiredType = Tester) + public static class maplepoints extends AdminCommand { + public static void execute(Char chr, String[] args) { + int nx = Integer.parseInt(args[1]); + chr.getUser().addMaplePoints(nx); + } + } + + @Command(names = {"dp", "setdp"}, requiredType = Tester) + public static class DpCommand extends AdminCommand { + public static void execute(Char chr, String[] args) { + int dp = Integer.parseInt(args[1]); + User user = chr.getUser(); + user.setDonationPoints(dp); + chr.chatMessage(WhiteOnGreen, "You now have " + dp + " Donation Points :)"); + } + } + + @Command(names = {"vp", "setvp"}, requiredType = Tester) + public static class VpCommand extends AdminCommand { + public static void execute(Char chr, String[] args) { + int vp = Integer.parseInt(args[1]); + User user = chr.getUser(); + user.setVotePoints(vp); + } + } + + @Command(names = {"pop", "setpop"}, requiredType = Tester) + public static class PopCommand extends AdminCommand { + public static void execute(Char chr, String[] args) { + int pop = Integer.parseInt(args[1]); + chr.setStat(Stat.pop, pop); + } + } + + @Command(names = {"goto"}, requiredType = Tester) + public static class GoTo extends AdminCommand { + public static void execute(Char chr, String[] args) { + + HashMap gotomaps = new HashMap<>(); + gotomaps.put("ardent", 910001000); + gotomaps.put("ariant", 260000100); + gotomaps.put("amherst", 1010000); + gotomaps.put("amoria", 680000000); + gotomaps.put("aqua", 860000000); + gotomaps.put("aquaroad", 230000000); + gotomaps.put("boatquay", 541000000); + gotomaps.put("cwk", 610030000); + gotomaps.put("edelstein", 310000000); + gotomaps.put("ellin", 300000000); + gotomaps.put("ellinia", 101000000); + gotomaps.put("ellinel", 101071300); + gotomaps.put("elluel", 101050000); + gotomaps.put("elnath", 211000000); + gotomaps.put("ereve", 130000000); + gotomaps.put("florina", 120000300); + gotomaps.put("fm", 910000000); + gotomaps.put("future", 271000000); + gotomaps.put("gmmap", 180000000); + gotomaps.put("happy", 209000000); + gotomaps.put("harbor", 104000000); + gotomaps.put("henesys", 100000000); + gotomaps.put("herbtown", 251000000); + gotomaps.put("kampung", 551000000); + gotomaps.put("kerning", 103000000); + gotomaps.put("korean", 222000000); + gotomaps.put("leafre", 240000000); + gotomaps.put("ludi", 220000000); + gotomaps.put("malaysia", 550000000); + gotomaps.put("mulung", 250000000); + gotomaps.put("nautilus", 120000000); + gotomaps.put("nlc", 600000000); + gotomaps.put("omega", 221000000); + gotomaps.put("orbis", 200000000); + gotomaps.put("pantheon", 400000000); + gotomaps.put("pinkbean", 270050100); + gotomaps.put("phantom", 610010000); + gotomaps.put("perion", 102000000); + gotomaps.put("rien", 140000000); + gotomaps.put("showatown", 801000000); + gotomaps.put("singapore", 540000000); + gotomaps.put("sixpath", 104020000); + gotomaps.put("sleepywood", 105000000); + gotomaps.put("southperry", 2000000); + gotomaps.put("tot", 270000000); + gotomaps.put("twilight", 273000000); + gotomaps.put("tynerum", 301000000); + gotomaps.put("zipangu", 800000000); + gotomaps.put("pianus", 230040420); + gotomaps.put("horntail", 240060200); + gotomaps.put("chorntail", 240060201); + gotomaps.put("griffey", 240020101); + gotomaps.put("manon", 240020401); + gotomaps.put("zakum", 280030000); + gotomaps.put("czakum", 280030001); + gotomaps.put("pap", 220080001); + gotomaps.put("oxquiz", 109020001); + gotomaps.put("ola", 109030101); + gotomaps.put("fitness", 109040000); + gotomaps.put("snowball", 109060000); + gotomaps.put("boss", 682020000); + gotomaps.put("dojo", 925020001); + gotomaps.put("pq", 910002000); + gotomaps.put("h", 100000000); + gotomaps.put("gollux", 863010000); + gotomaps.put("lotus", 350060300); + gotomaps.put("damien", 105300303); + gotomaps.put("ursus", 970072200); + gotomaps.put("pno", 811000008); + gotomaps.put("cygnus", 271040000); + gotomaps.put("ra", 105200000); + gotomaps.put("goldenbeach", 914200000); + gotomaps.put("ardentmill", 910001000); + gotomaps.put("oz", 992000000); + gotomaps.put("vj", 450001000); + gotomaps.put("chu", 450002000); + gotomaps.put("chuchu", 450002000); + gotomaps.put("lach", 450003000); + gotomaps.put("lachelein", 450003000); + gotomaps.put("arcana", 450005000); + gotomaps.put("morass", 450006130); + gotomaps.put("esfera", 450007000); + gotomaps.put("outpost", 450009000); + gotomaps.put("moonbridge", 450009100); + gotomaps.put("lab", 450011120); + gotomaps.put("labyrinth", 450011120); + gotomaps.put("limina", 450012000); + gotomaps.put("runner", 993001000); + + if (args.length == 1) { + chr.chatMessage(Notice2, "List of locations: " + gotomaps.keySet()); + } else if (gotomaps.containsKey(args[1])) { + Field toField = chr.getClient().getChannelInstance().getField(gotomaps.get(args[1])); + Portal portal = chr.getField().getDefaultPortal(); + chr.warp(toField, portal); + } else if (args[1].equals("locations")) { + chr.chatMessage(Notice2, "Use !goto "); + StringBuilder sb = new StringBuilder(); + for (String s : gotomaps.keySet()) { + sb.append(s).append(", "); + } + chr.chatMessage(Notice2, sb.substring(0, sb.length() - 2)); + } else { + chr.chatMessage(Notice2, "Map does not exist."); + } + } + } + + @Command(names = {"pos"}, requiredType = Tester) + public static class ChrPosition extends AdminCommand { + public static void execute(Char chr, String[] args) { + chr.chatMessage("You are currently @ " + chr.getPosition()); + } + } + + @Command(names = {"savemap"}, requiredType = Tester) + public static class SaveMap extends AdminCommand { + private static final HashMap quickmaps = new HashMap<>(); + + public static void execute(Char chr, String[] args) { + int mapid = chr.getFieldID(); + if (args.length < 1 && !args[1].equalsIgnoreCase("list")) { + chr.chatMessage(BlackOnWhite, "Incorrect Syntax: !SaveMap "); + chr.chatMessage(BlackOnWhite, "To see the list of saved maps, use: !SaveMap list"); + } + if (args[1].equalsIgnoreCase("save")) { + String key = args[2]; + quickmaps.put(key, mapid); + chr.chatMessage(BlackOnWhite, "[SaveMap] Map: " + mapid + " has been saved as key '" + key + "'."); + } else if (args[1].equalsIgnoreCase("go")) { + String key = args[2]; + if (quickmaps.get(key) == null) { + chr.chatMessage(BlackOnWhite, "[SaveMap] There is no map saved as key '" + args[2] + "'."); + return; + } + Field toField = chr.getOrCreateFieldByCurrentInstanceType((quickmaps.get(key))); + Portal portal = chr.getField().getDefaultPortal(); + chr.warp(toField, portal); + } else if (args[1].equalsIgnoreCase("list")) { + Set keys = quickmaps.keySet(); + chr.chatMessage(BlackOnWhite, "[SaveMap] " + quickmaps.size() + " saved maps."); + for (Object maps : keys) { + chr.chatMessage(BlackOnWhite, "[SaveMap] Stored map: " + quickmaps.get(maps) + " as '" + maps + "'."); + } + } else { + chr.chatMessage(BlackOnWhite, "Incorrect Syntax: !SaveMap "); + chr.chatMessage(BlackOnWhite, "To see the list of saved maps, use: !SaveMap list"); + } + } + } + + @Command(names = {"warriorequips"}, requiredType = Tester) + public static class WarriorEquips extends AdminCommand { + public static void execute(Char chr, String[] args) { + int[] warEquips = new int[]{ + 1302000, + 1312000, + 1322000, + 1402000, + 1412000, + 1422000, + 1432000, + 1442000, + 1542000, + 1232000, + 1582000, + 1353400, + 1352500, + }; + for (int warEquip : warEquips) { + Item item = ItemData.getItemDeepCopy(warEquip); + chr.addItemToInventory(item); + } + } + } + + @Command(names = {"mageequips"}, requiredType = Tester) + public static class MageEquips extends AdminCommand { + public static void execute(Char chr, String[] args) { + int[] mageEquips = new int[]{ + 1382000, + 1372000, + 1552000, + 1252000, + 1262000, + 1353200, + }; + for (int mageEquip : mageEquips) { + Item item = ItemData.getItemDeepCopy(mageEquip); + chr.addItemToInventory(item); + } + } + } + + @Command(names = {"archerequips"}, requiredType = Tester) + public static class ArcherEquips extends AdminCommand { + public static void execute(Char chr, String[] args) { + int[] archerEquips = new int[]{ + 1452000, + 1462000, + 1522000, + 1352004, + 1592000, + 1353700, + }; + for (int archerEquip : archerEquips) { + Item item = ItemData.getItemDeepCopy(archerEquip); + chr.addItemToInventory(item); + } + } + } + + @Command(names = {"thiefequips"}, requiredType = Tester) + public static class ThiefEquips extends AdminCommand { + public static void execute(Char chr, String[] args) { + int[] thiefEquips = new int[]{ + 1472000, + 1332000, + 1342000, + 1242000, + 1362000, + 1352100 + }; + for (int thiefEquip : thiefEquips) { + Item item = ItemData.getItemDeepCopy(thiefEquip); + chr.addItemToInventory(item); + } + } + } + + @Command(names = {"pirateequips"}, requiredType = Tester) + public static class PirateEquips extends AdminCommand { + public static void execute(Char chr, String[] args) { + int[] pirateEquips = new int[]{ + 1482000, + 1353100, + 1492000, + 1222000, + 1352600, + 1532000, + 1242000, + }; + for (int pirateEquip : pirateEquips) { + Item item = ItemData.getItemDeepCopy(pirateEquip); + chr.addItemToInventory(item); + } + } + } + + @Command(names = {"clearinv"}, requiredType = Tester) + public static class ClearInv extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 2) { + chr.chatMessage(Notice2, "Syntax Error: !ClearInv "); + return; + } + InvType invType = InvType.getInvTypeByString(args[1]); + if (invType == null) { + chr.chatMessage("Please fill in a correct inventory type: equip / use / etc / setup / cash"); + return; + } + short startIndex = Short.parseShort(args[2]); + short endIndex = Short.parseShort(args[3]); + for (int i = startIndex; i < endIndex; i++) { + Item removeItem = chr.getInventoryByType(invType).getItemBySlot(i); + if (removeItem != null) { + chr.consumeItem(removeItem); + } + } + chr.dispose(); + } + } + + @Command(names = {"mobinfo"}, requiredType = Player) + public static class MobInfo extends AdminCommand { + + public static void execute(Char chr, String[] args) { + Rect rect = new Rect( + chr.getPosition().deepCopy().getX() - 200, + chr.getPosition().deepCopy().getY() - 200, + chr.getPosition().deepCopy().getX() + 200, + chr.getPosition().deepCopy().getY() + 200 + ); + Mob mob = chr.getField().getMobs().stream().filter(m -> rect.hasPositionInside(m.getPosition())).findFirst().orElse(null); + Char controller = chr.getField().getLifeToControllers().getOrDefault(mob, null); + if (mob != null) { + chr.chatMessage(SpeakerChannel, String.format("Mob ID: %s | Template ID: %s | Level: %d | HP: %s/%s " + + "| MP: %s/%s | Left: %s | PDR: %s | MDR: %s " + + "| Controller: %s | Exp : %s | NX: %s", + NumberFormat.getNumberInstance(Locale.US).format(mob.getObjectId()), + NumberFormat.getNumberInstance(Locale.US).format(mob.getTemplateId()), + mob.getLevel(), + NumberFormat.getNumberInstance(Locale.US).format(mob.getHp()), + NumberFormat.getNumberInstance(Locale.US).format(mob.getMaxHp()), + NumberFormat.getNumberInstance(Locale.US).format(mob.getMp()), + NumberFormat.getNumberInstance(Locale.US).format(mob.getMaxMp()), + mob.isLeft(), + mob.getPdr(), + mob.getMdr(), + controller == null ? "null" : chr.getName(), + mob.getForcedMobStat().getExp(), + mob.getNxDropAmount() + ) + ); + } else { + chr.chatMessage(SpeakerChannel, "Could not find mob."); + } + } + } + + @Command(names = {"npcinfo"}, requiredType = Player) + public static class NpcInfo extends AdminCommand { + + public static void execute(Char chr, String[] args) { + Rect rect = new Rect( + chr.getPosition().deepCopy().getX() - 200, + chr.getPosition().deepCopy().getY() - 200, + chr.getPosition().deepCopy().getX() + 200, + chr.getPosition().deepCopy().getY() + 200 + ); + Npc npc = chr.getField().getNpcs().stream().filter(m -> rect.hasPositionInside(m.getPosition())).findFirst().orElse(null); + Char controller = chr.getField().getLifeToControllers().getOrDefault(npc, null); + if (npc != null) { + chr.chatMessage(SpeakerChannel, String.format("Npc ID: %s | Template ID: %s | Left: %s | Pos: (%d, %d) " + + "| Controller: %s", + NumberFormat.getNumberInstance(Locale.US).format(npc.getObjectId()), + NumberFormat.getNumberInstance(Locale.US).format(npc.getTemplateId()), + npc.isLeft(), + npc.getPosition().getX(), + npc.getPosition().getY(), + controller == null ? "null" : chr.getName() + ) + ); + } else { + chr.chatMessage(SpeakerChannel, "Could not find mob."); + } + } + } + + @Command(names = {"check", "dispose", "fix"}, requiredType = AccountType.Player) + public static class Dispose extends AdminCommand { + public static void execute(Char chr, String[] args) { + chr.dispose(); + Map basicStats = chr.getTotalBasicStats(); + StringBuilder sb = new StringBuilder(); + List sortedList = Arrays.stream(BaseStat.values()).sorted(Comparator.comparing(Enum::toString)).collect(Collectors.toList()); + chr.chatMessage(Mob, String.format("X=%d, Y=%d, Stats: ", chr.getPosition().getX(), chr.getPosition().getY())); + for (BaseStat bs : sortedList) { + chr.chatMessage(Mob, (String.format("%s = %d, ", bs, basicStats.getOrDefault(bs, 0)))); + } + ScriptManagerImpl smi = chr.getScriptManager(); + // all but field + smi.stop(ScriptType.Portal); + smi.stop(ScriptType.Npc); + smi.stop(ScriptType.Reactor); + smi.stop(ScriptType.Quest); + smi.stop(ScriptType.Item); + } + } + + @Command(names = {"getnpcsinrect", "getnpcs"}, requiredType = Tester) + public static class GetNPCs extends AdminCommand { + + public static void execute(Char chr, String[] args) { + Rect rect = GameConstants.MOB_CHECK_RECT; + + List lifeList = chr.getField().getLifesInRect(chr.getRectAround(rect)); + chr.chatMessage("NPCs around you:"); + for (Life life : lifeList) { + if (life instanceof Npc) { + chr.chatMessage(life.toString()); + } + } + } + } + + @Command(names = {"completequest"}, requiredType = Tester) + public static class CompleteQuest extends AdminCommand { + + public static void execute(Char chr, String[] args) { + chr.getQuestManager().completeQuest(Integer.parseInt(args[1])); + } + } + + @Command(names = {"removequest"}, requiredType = Tester) + public static class RemoveQuest extends AdminCommand { + + public static void execute(Char chr, String[] args) { + chr.getQuestManager().removeQuest(Integer.parseInt(args[1])); + } + } + + @Command(names = {"sethonor", "honor"}, requiredType = Tester) + public static class SetHonor extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length < 2) { + chr.chatMessage(SpeakerChannel, "Format: !sethonor "); + return; + } + int honor = Integer.parseInt(args[1]); + chr.setHonorExp(honor); + chr.write(WvsContext.characterHonorExp(honor)); + } + } + + @Command(names = {"startquest"}, requiredType = Tester) + public static class StartQuest extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length < 2) { + chr.chatMessage(SpeakerChannel, "Format: !startquest "); + return; + } + Quest q = QuestData.createQuestFromId(Integer.parseInt(args[1])); + if (q != null) { + chr.getQuestManager().addQuest(q); + } else { + chr.chatMessage("Could not find quest with id " + args[1] + ", but still adding it."); + chr.getScriptManager().startQuestNoCheck(Integer.parseInt(args[1])); + } + } + } + + @Command(names = {"bypassskillcd", "ignoreskillcd", "bypasskillcd", "cd"}, requiredType = Tester) + public static class BypassSkillCD extends AdminCommand { + + public static void execute(Char chr, String[] args) { + chr.setSkillCDBypass(!chr.hasSkillCDBypass()); + if (chr.hasSkillCDBypass()) { + chr.getSkillCoolTimes().keySet().forEach(chr::resetSkillCoolTime); + } + chr.chatMessage(Notice2, "Skill Cooldown bypass: " + chr.hasSkillCDBypass()); + chr.dispose(); + } + } + + @Command(names = {"toggledamagecap"}, requiredType = Tester) + public static class ToggleDamageCap extends AdminCommand { + + public static void execute(Char chr, String[] args) { + chr.chatMessage("Damage cap can't be removed by CTS anymore :("); + } + } + + @Command(names = {"shop"}, requiredType = Tester) + public static class Shop extends AdminCommand { + + public static void execute(Char chr, String[] args) { + chr.getScriptManager().openShop(1011100); + } + } + + @Command(names = {"reloadcs"}, requiredType = Admin) + public static class ReloadCS extends AdminCommand { + + public static void execute(Char chr, String[] args) { + Server.getInstance().initCashShop(); + } + } + + // lie detector + @Command(names = {"ld", "liedetector"}, requiredType = GameMaster) + public static class LD extends AdminCommand { + public static void execute(Char chr, String[] args) { + if (args.length < 1) { + chr.chatMessage(SpeakerChannel, "Not enough args! Use !ld or !ld @me to test."); + return; + } + + String name = args[1]; + Char chrToLD = chr; + + if (!name.equals("@me")) { + chrToLD = Server.getInstance().getWorldById(chr.getClient().getWorldId()).getCharByName(name); + + if (chrToLD == null) { + chr.chatMessage(SpeakerChannel, String.format("Character '%s' is not online.", name)); + return; + } + } + + if (chrToLD.sendLieDetector()) { + chr.chatMessage(SpeakerChannel, String.format("Sent lie detector to '%s'.", chrToLD.getName())); + } else { + chr.chatMessage(SpeakerChannel, "Lie detector failed."); + } + } + } + + @Command(names = {"dc"}, requiredType = GameMaster) + public static class dc extends AdminCommand { + public static void execute(Char chr, String[] args) { + Char victim = chr.getWorld().getCharByName((args[1])); + if (victim != null) { + victim.write(WvsContext.returnToTitle()); + } else { + chr.chatMessage(WhiteOnGreen, "Player is offline"); + } + } + } + + + @Command(names = {"ban"}, requiredType = GameMaster) + public static class Ban extends AdminCommand { + + public static void execute(Char chr, String[] args) { + if (args.length < 5) { + chr.chatMessage(SpeakerChannel, "Not enough args! Use !ban "); + return; + } + String name = args[1]; + int amount = Integer.parseInt(args[2]); + String amountType = args[3].toLowerCase(); + StringBuilder builder = new StringBuilder(); + for (int i = 4; i < args.length; i++) { + builder.append(args[i] + " "); + } + String reason = builder.toString(); + reason = reason.substring(0, reason.length() - 1); // gets rid of the last space + if (reason.length() > 255) { + chr.chatMessage(SpeakerChannel, "That ban reason is too long."); + return; + } + Char banChr = Server.getInstance().getWorldById(chr.getClient().getWorldId()).getCharByName(name); + boolean online = true; + if (banChr == null) { + online = false; + banChr = Char.getFromDBByName(name); + if (banChr == null) { + chr.chatMessage(SpeakerChannel, "Could not find that character."); + return; + } + } + User banUser = banChr.getUser(); + LocalDateTime banDate = LocalDateTime.now(); + switch (amountType) { + case "m": + case "min": + case "mins": + banDate = banDate.plusMinutes(amount); + break; + case "h": + case "hour": + case "hours": + banDate = banDate.plusHours(amount); + break; + case "d": + case "day": + case "days": + banDate = banDate.plusDays(amount); + break; + case "y": + case "year": + case "years": + banDate = banDate.plusYears(amount); + break; + default: + chr.chatMessage(SpeakerChannel, String.format("Unknown date type %s", amountType)); + break; + } + banUser.setBanExpireDate(FileTime.fromDate(banDate)); + banUser.setBanReason(reason); + banUser.getOffenseManager().addOffense(reason, chr.getId()); + chr.chatMessage(SpeakerChannel, String.format("Character %s has been banned. Expire date: %s", name, banDate)); + if (online) { + banChr.write(WvsContext.returnToTitle()); + } + } + } + + @Command(names = {"killall"}, requiredType = Tester) + public static class KillMobs extends AdminCommand { + + public static void execute(Char chr, String[] args) { + List mobs = new ArrayList<>(chr.getField().getMobs()); + for (Mob mob : mobs) { + mob.die(false); + } + } + } + + @Command(names = {"findplayer"}, requiredType = Tester) + public static class FindPlayer extends AdminCommand { + public static void execute(Char chr, String[] args) { + Char victim = chr.getWorld().getCharByName((args[1])); + if (victim != null) { + chr.chatMessage(GameDesc, victim.getName() + " is in " + StringData.getMapStringById(victim.getFieldID()) + " (Channel " + victim.getClient().getChannelInstance().getChannelId() + ")"); + } else { + chr.chatMessage(WhiteOnGreen, "Player is offline"); + } + } + } + + @Command(names = {"bannernotice"}, requiredType = Tester) + public static class BannerNotice extends AdminCommand { + public static void execute(Char chr, String[] args) { + chr.getWorld().broadcastPacket(WvsContext.broadcastMessage(4, chr.getClient().getChannel(), StringUtil.joinStringFrom(args, 1), false)); + } + } + + @Command(names = {"mobstat"}, requiredType = Tester) + public static class MobStatTest extends AdminCommand { + + public static void execute(Char chr, String[] args) { + List mobs = new ArrayList<>(chr.getField().getMobs()); + if (mobs.size() > 0) { + Mob mob = mobs.get(0); + MobTemporaryStat mts = mob.getTemporaryStat(); + Option o = new Option(); + o.nOption = 1000; + o.rOption = 145; + o.slv = 1; + o.tOption = 5; + + o.wOption = 1000; + + o.mOption = 1000; + o.bOption = 1000; + o.nReason = 1000; + mts.addMobSkillOptionsAndBroadCast(MobStat.PCounter, o); + } else { + chr.chatMessage("Could not find a mob."); + } + } + } + + @Command(names = {"fp", "findportal"}, requiredType = Tester) + public static class FindPortal extends AdminCommand { // FindPortal + public static void execute(Char chr, String[] args) { + if (args.length < 1) { + chr.chatMessage(SpeakerChannel, "Invalid args. Use !findportal "); + return; + } + Field field = chr.getField(); + Portal portal; + String query = args[1]; + if (Util.isNumber(query)) { + portal = field.getPortalByID(Integer.parseInt(query)); + } else { + portal = field.getPortalByName(query); + } + if (portal == null) { + chr.chatMessage(SpeakerChannel, "Was not able to find portal " + query); + return; + } + chr.chatMessage(SpeakerChannel, "Portal Name: " + portal.getName()); + chr.chatMessage(SpeakerChannel, "Portal ID: " + NumberFormat.getNumberInstance(Locale.US).format(portal.getId())); + chr.chatMessage(SpeakerChannel, "Portal target map: " + NumberFormat.getNumberInstance(Locale.US).format(portal.getTargetMapId())); + chr.chatMessage(SpeakerChannel, "Portal position: " + portal.getX() + ", " + portal.getY()); + chr.chatMessage(SpeakerChannel, "Portal script: " + portal.getScript()); + chr.chatMessage(SpeakerChannel, "."); + log.info(portal.getScript()); + } + } + + @Command(names = {"showbuffs"}, requiredType = Tester) + public static class ShowBuffs extends AdminCommand { + + public static void execute(Char chr, String[] args) { + TemporaryStatManager tsm = chr.getTemporaryStatManager(); + Set buffs = new HashSet<>(); + for (List