Compare commits
692 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a8807f1ef0 | ||
|
|
10945927c1 | ||
|
|
ab25f698da | ||
|
|
b30e03ffb3 | ||
|
|
82157c7bd1 | ||
|
|
eb10f02ac3 | ||
|
|
b1ef94ef60 | ||
|
|
f89392b476 | ||
|
|
32c4f2239d | ||
|
|
404c00c2bf | ||
|
|
9def444442 | ||
|
|
771b69d151 | ||
|
|
cae6aa2305 | ||
|
|
14d80dc2f3 | ||
|
|
cb38bcd270 | ||
|
|
37a9a4121f | ||
|
|
4731c0c60d | ||
|
|
65111ae209 | ||
|
|
2a460de911 | ||
|
|
cee82a08ba | ||
|
|
387437cada | ||
|
|
af14da987e | ||
|
|
389b3ad2a4 | ||
|
|
5f1f5b7dcd | ||
|
|
7e3be4c45d | ||
|
|
c82881e6f2 | ||
|
|
6be1fabc55 | ||
|
|
4d480660b5 | ||
|
|
1f4ce98998 | ||
|
|
605f2e212e | ||
|
|
188eb74a70 | ||
|
|
2d7d113458 | ||
|
|
176ce6a3bd | ||
|
|
f267b1fc0b | ||
|
|
ea0bdb55af | ||
|
|
4004b36bfa | ||
|
|
d0a4c416e4 | ||
|
|
584fccec92 | ||
|
|
41cf8b4485 | ||
|
|
e12d853499 | ||
|
|
5c7fcdae06 | ||
|
|
70b82e0b66 | ||
|
|
32f6194a75 | ||
|
|
dd260e7b2a | ||
|
|
c1fbf2c18c | ||
|
|
42d03a29e7 | ||
|
|
675addf25c | ||
|
|
f0fd3ce850 | ||
|
|
991873dcbe | ||
|
|
fd54c764e7 | ||
|
|
18fe7b9906 | ||
|
|
a350d58065 | ||
|
|
f34e271b6d | ||
|
|
a9715a694c | ||
|
|
c0d6917721 | ||
|
|
08edd8595f | ||
|
|
e999840f8e | ||
|
|
a03bdbf695 | ||
|
|
79f19331f4 | ||
|
|
04e658710e | ||
|
|
769e21115b | ||
|
|
8d3be314d6 | ||
|
|
1a28fc98ac | ||
|
|
125d0aa03d | ||
|
|
388ee5c805 | ||
|
|
ba558c350f | ||
|
|
650b1ff89b | ||
|
|
6c65b8918a | ||
|
|
d31f4806fc | ||
|
|
0c6548a36d | ||
|
|
df5159e34c | ||
|
|
319d65a0c3 | ||
|
|
fd793d6b04 | ||
|
|
15c4188d48 | ||
|
|
9e0479fe9f | ||
|
|
a6ec6adbb5 | ||
|
|
7cdaabf6f8 | ||
|
|
c47ca4d6a4 | ||
|
|
930d365752 | ||
|
|
7a784a7938 | ||
|
|
fba49e7eec | ||
|
|
66b04969fd | ||
|
|
aeaad4194a | ||
|
|
455d4b2195 | ||
|
|
6e62a6a45d | ||
|
|
3c9be7d70b | ||
|
|
91c58eee04 | ||
|
|
958286e078 | ||
|
|
ea76880b7f | ||
|
|
298457a007 | ||
|
|
7d28e00e4f | ||
|
|
0118844c2e | ||
|
|
8c418f197a | ||
|
|
7fa677d766 | ||
|
|
17ae269cc9 | ||
|
|
535b6c3e8e | ||
|
|
f1d0cb6b4d | ||
|
|
7fffd0bb64 | ||
|
|
84890ac308 | ||
|
|
a67666af62 | ||
|
|
2ed69407de | ||
|
|
6e578a71a1 | ||
|
|
bdc0756655 | ||
|
|
4baf06e4f9 | ||
|
|
f4c283890f | ||
|
|
521aaf7294 | ||
|
|
d1da1d67e0 | ||
|
|
5b0715d5d0 | ||
|
|
cf27c6301f | ||
|
|
3354345cef | ||
|
|
6ae2235083 | ||
|
|
c5d2e90e5b | ||
|
|
0eed00dd64 | ||
|
|
2d4f3eac49 | ||
|
|
a55871c059 | ||
|
|
b831173ecf | ||
|
|
13ffce3ab3 | ||
|
|
6d969106c0 | ||
|
|
456ab667e9 | ||
|
|
48ae8c0e93 | ||
|
|
c96e4a0e67 | ||
|
|
2a1570e03a | ||
|
|
435ca37a71 | ||
|
|
e4bba96d1f | ||
|
|
a1382dfbd0 | ||
|
|
fe7ea6fcef | ||
|
|
edd38a686b | ||
|
|
8d4842d2ea | ||
|
|
3a16a724f5 | ||
|
|
677a956b25 | ||
|
|
92b3666f64 | ||
|
|
4d73416952 | ||
|
|
871c8a4477 | ||
|
|
9592b8323f | ||
|
|
9cdd46c0cd | ||
|
|
97f358f047 | ||
|
|
d8e47287b0 | ||
|
|
b9487dd95c | ||
|
|
2e55deebc9 | ||
|
|
b29a08bc93 | ||
|
|
098a52b485 | ||
|
|
cd706c544b | ||
|
|
a456b27011 | ||
|
|
b0b197a7a5 | ||
|
|
897679afc4 | ||
|
|
6ea4e3cfc1 | ||
|
|
ae7b832e00 | ||
|
|
79ab28a52e | ||
|
|
78314855eb | ||
|
|
d691dc1e18 | ||
|
|
297d5b25f0 | ||
|
|
5ebbab6da3 | ||
|
|
229252cd63 | ||
|
|
618f312b84 | ||
|
|
4fb632ecdb | ||
|
|
54878ebe8c | ||
|
|
8657b765b1 | ||
|
|
8ab2058ecc | ||
|
|
42043c3d6c | ||
|
|
28e8862254 | ||
|
|
7e848618e8 | ||
|
|
b6c17e944a | ||
|
|
c7af125afc | ||
|
|
381851e95e | ||
|
|
7f7b28874f | ||
|
|
72a87cae43 | ||
|
|
53914bbd32 | ||
|
|
68663146c8 | ||
|
|
8e395b0770 | ||
|
|
1c0aebf6aa | ||
|
|
65f8a6e335 | ||
|
|
58277574b5 | ||
|
|
7aba5f4578 | ||
|
|
28bc5ee925 | ||
|
|
62ce462c0f | ||
|
|
d9fa632204 | ||
|
|
85e5356a9c | ||
|
|
81e15f205b | ||
|
|
0ef3e69638 | ||
|
|
93e4f14b7b | ||
|
|
5bec5d79e9 | ||
|
|
a7ba214af3 | ||
|
|
f983b4dccf | ||
|
|
bbdf236a10 | ||
|
|
61c3e75a52 | ||
|
|
76f4b681fe | ||
|
|
e2b8236b59 | ||
|
|
bfb2c1cb3d | ||
|
|
fcdf3d6e1e | ||
|
|
838519b350 | ||
|
|
571d804f50 | ||
|
|
6901b5133b | ||
|
|
67a6273f6f | ||
|
|
df440b09e9 | ||
|
|
3f1a6ecc8c | ||
|
|
2b680c02c8 | ||
|
|
c2b28b5148 | ||
|
|
905a0260a6 | ||
|
|
8ce3be5efb | ||
|
|
e5e9b50215 | ||
|
|
e57dc96fd1 | ||
|
|
f097213466 | ||
|
|
d9a86d6d75 | ||
|
|
5afb09d798 | ||
|
|
4fd1daada4 | ||
|
|
8d213e4d6e | ||
|
|
8238134781 | ||
|
|
4496e0854f | ||
|
|
5ed068eb05 | ||
|
|
a44744c05b | ||
|
|
d42a57ef79 | ||
|
|
3a30642969 | ||
|
|
563d3033b9 | ||
|
|
89ababc5c0 | ||
|
|
45c9e6fc7e | ||
|
|
570499f6ab | ||
|
|
513c9b615d | ||
|
|
406708d0ba | ||
|
|
084e7b22fa | ||
|
|
1daddbf302 | ||
|
|
0e32f439fb | ||
|
|
e991c5a96f | ||
|
|
ef70dac1a0 | ||
|
|
b8e8caeb31 | ||
|
|
aceb410331 | ||
|
|
2bbfd46105 | ||
|
|
c879e36a9c | ||
|
|
8b630f7357 | ||
|
|
0c60606b4e | ||
|
|
53465bba25 | ||
|
|
6db3aa3459 | ||
|
|
ecca446505 | ||
|
|
d6192385dd | ||
|
|
fa29dbf5cb | ||
|
|
34aeb589d6 | ||
|
|
f3d8429327 | ||
|
|
0b66766e8a | ||
|
|
66ac678f1b | ||
|
|
78f6ae7e6a | ||
|
|
1e53bc7d1f | ||
|
|
6041d56bcd | ||
|
|
7e7c2cb153 | ||
|
|
189d8096db | ||
|
|
acde0696b1 | ||
|
|
75a9a9718d | ||
|
|
6c1a9465c0 | ||
|
|
507ab06721 | ||
|
|
a511157fa5 | ||
|
|
2e827542cf | ||
|
|
451d86b5b4 | ||
|
|
b24945eaba | ||
|
|
4cf3135d48 | ||
|
|
a26a2e7079 | ||
|
|
503740542d | ||
|
|
1b359aa674 | ||
|
|
b15a7e61d4 | ||
|
|
c022c3595f | ||
|
|
8d10e3d1b0 | ||
|
|
4efd356cbf | ||
|
|
a4c079c2e8 | ||
|
|
7cfee6db53 | ||
|
|
ce22f52b2b | ||
|
|
2e78742d8c | ||
|
|
5cae3fc336 | ||
|
|
3a9305d0d9 | ||
|
|
cc23d7734a | ||
|
|
edc457d5f5 | ||
|
|
37899c2508 | ||
|
|
8b60684103 | ||
|
|
cdc17ef3dd | ||
|
|
d52aedac4f | ||
|
|
d9590078f5 | ||
|
|
3f43fe82d0 | ||
|
|
a78ca88a02 | ||
|
|
d893309b4f | ||
|
|
0c1545f81d | ||
|
|
f76b9954a7 | ||
|
|
a12feaf3e4 | ||
|
|
7be1d119de | ||
|
|
e8ef3a492c | ||
|
|
d389665bd7 | ||
|
|
9b1dc76854 | ||
|
|
6be6ea9927 | ||
|
|
69f4580637 | ||
|
|
250d49e85d | ||
|
|
9bf1b68924 | ||
|
|
07f55fa53c | ||
|
|
c4318bef7b | ||
|
|
0777e5529f | ||
|
|
62d2e87d25 | ||
|
|
8f0bdb3c6d | ||
|
|
8162d0aacd | ||
|
|
09caabba73 | ||
|
|
820de42257 | ||
|
|
2afec0bcda | ||
|
|
5883626020 | ||
|
|
701d735202 | ||
|
|
e9c8a82b47 | ||
|
|
18e1f6c50b | ||
|
|
ca4bcd80d1 | ||
|
|
a4d3f17efb | ||
|
|
43a80f0491 | ||
|
|
104444e83b | ||
|
|
e31894caae | ||
|
|
9c8abf6f62 | ||
|
|
8f54b3e5de | ||
|
|
473ab19034 | ||
|
|
fef273ecc9 | ||
|
|
75d631bebb | ||
|
|
8a95459a17 | ||
|
|
03dc665605 | ||
|
|
036854a8be | ||
|
|
dc4d710d12 | ||
|
|
d7851ef40e | ||
|
|
7f4760ba1a | ||
|
|
667bc69eb1 | ||
|
|
f1ca5991c6 | ||
|
|
4cb15ab99d | ||
|
|
2a8fd5219a | ||
|
|
b62ee8c8e2 | ||
|
|
867624f980 | ||
|
|
efb1cb0632 | ||
|
|
fa8222d9a0 | ||
|
|
a979577e5d | ||
|
|
e917980a39 | ||
|
|
46842f9890 | ||
|
|
0d13686f07 | ||
|
|
f8f524bfe7 | ||
|
|
3fce4eb7ce | ||
|
|
a61dfab64f | ||
|
|
d35969dea5 | ||
|
|
897f2a857f | ||
|
|
0ddf49c7b6 | ||
|
|
032f111b53 | ||
|
|
c0fedc8589 | ||
|
|
4032558ef5 | ||
|
|
584e626ed5 | ||
|
|
ca4162cb82 | ||
|
|
add1fdf32c | ||
|
|
8814a18d0c | ||
|
|
af2707120a | ||
|
|
7246647ab6 | ||
|
|
a20267aee9 | ||
|
|
f8e7a525bd | ||
|
|
2ee4cd79f6 | ||
|
|
e48c25a200 | ||
|
|
3aa455a757 | ||
|
|
2acf2ed83d | ||
|
|
02786eab63 | ||
|
|
38c700ca48 | ||
|
|
1f349d1dae | ||
|
|
0ca463f70a | ||
|
|
8b6a2e58f8 | ||
|
|
14344568f2 | ||
|
|
5a6ed83545 | ||
|
|
1e00505671 | ||
|
|
fbffb7ef71 | ||
|
|
6a4b1b2a8a | ||
|
|
d2881942d8 | ||
|
|
fb6123e4cc | ||
|
|
324fe48df2 | ||
|
|
bfc37a345d | ||
|
|
7f9c8d997b | ||
|
|
219a2cdb3f | ||
|
|
2332458ed9 | ||
|
|
5089f23f79 | ||
|
|
1592d3efc8 | ||
|
|
ae59916e98 | ||
|
|
eb935b4143 | ||
|
|
3f0d0bbffe | ||
|
|
f3cae06288 | ||
|
|
2281aec440 | ||
|
|
48f2647742 | ||
|
|
63a2aeee10 | ||
|
|
714df342d9 | ||
|
|
5aa0368090 | ||
|
|
49b5730e5f | ||
|
|
82c2d14430 | ||
|
|
f8b5f713f3 | ||
|
|
803911c10f | ||
|
|
559d3a42b3 | ||
|
|
5e5f7b12ca | ||
|
|
e75139e5e6 | ||
|
|
4c803b62a8 | ||
|
|
aea3a7921d | ||
|
|
fbb0a08663 | ||
|
|
c02efc5ca1 | ||
|
|
024cf0cac8 | ||
|
|
d35ead558f | ||
|
|
8f91d8e7ac | ||
|
|
448c02033d | ||
|
|
8af0999510 | ||
|
|
f4f5e12a50 | ||
|
|
3e1b5b93d5 | ||
|
|
ee503eedce | ||
|
|
0c8bef6842 | ||
|
|
3370152d58 | ||
|
|
56c9e0f664 | ||
|
|
0c721b85dd | ||
|
|
b07e6799dc | ||
|
|
da8837710a | ||
|
|
7dc3a2159a | ||
|
|
46bd0570d7 | ||
|
|
6ea9a57e9f | ||
|
|
280e28163c | ||
|
|
065ef632ac | ||
|
|
b2cbb65c6a | ||
|
|
7c61df6887 | ||
|
|
a5541c121c | ||
|
|
6ca5abd896 | ||
|
|
5ed7cf73d1 | ||
|
|
ba647db6cf | ||
|
|
dd916a96eb | ||
|
|
eb2f464826 | ||
|
|
9df2758ae6 | ||
|
|
0196d69780 | ||
|
|
1b945bca10 | ||
|
|
8e0ab2f9f9 | ||
|
|
05cae9022f | ||
|
|
52551b2451 | ||
|
|
c841e9952b | ||
|
|
1803699086 | ||
|
|
41cb6749c8 | ||
|
|
abb0a55ac9 | ||
|
|
82f2c84034 | ||
|
|
2cfdd1da4f | ||
|
|
2b52ab90c3 | ||
|
|
958fa657cd | ||
|
|
18dda5aa06 | ||
|
|
1532f66bdf | ||
|
|
b99dc7c27d | ||
|
|
faf993cae6 | ||
|
|
a907b7717d | ||
|
|
4fd7adf547 | ||
|
|
da2d8abc56 | ||
|
|
2232022cf1 | ||
|
|
ffc0f3bc97 | ||
|
|
b3d422a6c5 | ||
|
|
8f6860d7d7 | ||
|
|
b5cd6887ae | ||
|
|
d8b0929975 | ||
|
|
e93428f457 | ||
|
|
e184f25184 | ||
|
|
579e3c639f | ||
|
|
ce726efc4f | ||
|
|
8c4d3092a7 | ||
|
|
a8c6ef8934 | ||
|
|
b1aeedb815 | ||
|
|
435cafd381 | ||
|
|
850d44d549 | ||
|
|
5f149f0a27 | ||
|
|
9e3f3cc036 | ||
|
|
11e83522d6 | ||
|
|
ab03dd3109 | ||
|
|
6e6fbf3be7 | ||
|
|
12a415e3d5 | ||
|
|
cce85ea663 | ||
|
|
a1ed7ed821 | ||
|
|
551a23b625 | ||
|
|
c37278c650 | ||
|
|
81393392ab | ||
|
|
94e1125eca | ||
|
|
fc694f1b0f | ||
|
|
3de827553e | ||
|
|
5a7d8e6b1f | ||
|
|
86224f5152 | ||
|
|
0d887dc5dc | ||
|
|
b8781ee209 | ||
|
|
849d5c63cb | ||
|
|
e3b22363d7 | ||
|
|
04c4fac58d | ||
|
|
c437a08084 | ||
|
|
93f067379c | ||
|
|
91b2901f05 | ||
|
|
9563755f26 | ||
|
|
3e1b0dc4e3 | ||
|
|
d09b237157 | ||
|
|
798ccecb2f | ||
|
|
56f3511395 | ||
|
|
f8ef9afdd9 | ||
|
|
c6e915448e | ||
|
|
cbb0f7f09b | ||
|
|
6d49ab45c3 | ||
|
|
932ed9f784 | ||
|
|
e2f1981dc4 | ||
|
|
a0215cd3f4 | ||
|
|
26e98d012f | ||
|
|
1f94a3b545 | ||
|
|
fc7e97a355 | ||
|
|
fdef9e37bb | ||
|
|
a088fd29b7 | ||
|
|
b5ff5f19fc | ||
|
|
7af3d6924e | ||
|
|
e6fef246cb | ||
|
|
08d2b40cc4 | ||
|
|
45f3cfdfa6 | ||
|
|
e93db8b48f | ||
|
|
5b4815f173 | ||
|
|
0af167d174 | ||
|
|
da66e7614d | ||
|
|
fdd2ef7b3a | ||
|
|
a7cf7b90ce | ||
|
|
bc6593fd81 | ||
|
|
14a405adb2 | ||
|
|
fcb43af8e3 | ||
|
|
0e98abff41 | ||
|
|
828c3c5345 | ||
|
|
d34798649b | ||
|
|
671313ab57 | ||
|
|
50e2b909f1 | ||
|
|
5bc2f47883 | ||
|
|
69a4dd8c6d | ||
|
|
b35c4d3de8 | ||
|
|
2c18f7a4a8 | ||
|
|
8041ccd6bd | ||
|
|
b19f65f7ee | ||
|
|
f6aca2018e | ||
|
|
80cacd609a | ||
|
|
5651bee2b5 | ||
|
|
9638d5c417 | ||
|
|
0fa6ad0e24 | ||
|
|
5431150362 | ||
|
|
171215e653 | ||
|
|
442684d852 | ||
|
|
7ea26bd052 | ||
|
|
72ff8d563b | ||
|
|
c4c5700d32 | ||
|
|
4fd64884f2 | ||
|
|
6d02a95273 | ||
|
|
926371c9a7 | ||
|
|
aaf4b558f3 | ||
|
|
f3faee2e16 | ||
|
|
00abbb4acd | ||
|
|
23bad12f8c | ||
|
|
4dc0935391 | ||
|
|
eb7ee9dabe | ||
|
|
136ea68ab3 | ||
|
|
ae744aa870 | ||
|
|
e967294eb9 | ||
|
|
2193057fce | ||
|
|
ef12275f35 | ||
|
|
c514c303c7 | ||
|
|
75078a5fa1 | ||
|
|
0b17725e8e | ||
|
|
3d5db5d79c | ||
|
|
d330376706 | ||
|
|
f01452dd87 | ||
|
|
d9d63a1b44 | ||
|
|
095008a20f | ||
|
|
bcefd42093 | ||
|
|
f9aec05779 | ||
|
|
406c43b0ec | ||
|
|
cdfb7074ec | ||
|
|
2ce6041ef8 | ||
|
|
2aa09f89db | ||
|
|
9128329d37 | ||
|
|
3cda07db52 | ||
|
|
aa0d98af8b | ||
|
|
f4a4acf742 | ||
|
|
458de52dbc | ||
|
|
654d461da5 | ||
|
|
0345ce844e | ||
|
|
cff3d3df56 | ||
|
|
f47b38f65d | ||
|
|
45ca7009c8 | ||
|
|
8429d78e01 | ||
|
|
d98ab8cf1e | ||
|
|
ed8e6775df | ||
|
|
ade50bad5e | ||
|
|
f6452b2320 | ||
|
|
215abb3198 | ||
|
|
24cfbcce40 | ||
|
|
5d4a2506e8 | ||
|
|
4b03b3c4ac | ||
|
|
cd6415b061 | ||
|
|
46c2d92082 | ||
|
|
58e69654a2 | ||
|
|
fcd879f97c | ||
|
|
d2c7023e7b | ||
|
|
256e5688e0 | ||
|
|
542a7b7fd2 | ||
|
|
984adc7885 | ||
|
|
938f7c9390 | ||
|
|
3458d1c7b3 | ||
|
|
a18a1cb8ce | ||
|
|
e42fb27459 | ||
|
|
28b6dd577a | ||
|
|
5a5110d905 | ||
|
|
8335e77f2e | ||
|
|
dd7c2a697a | ||
|
|
055ee01ae9 | ||
|
|
a59b55db57 | ||
|
|
415376ce08 | ||
|
|
ab56d18bd3 | ||
|
|
68239bc0b5 | ||
|
|
858fcd2a3a | ||
|
|
ed100613f3 | ||
|
|
d4e4150a6e | ||
|
|
306f403f18 | ||
|
|
7a3d5d2b94 | ||
|
|
fa992da2eb | ||
|
|
a5b42b8a43 | ||
|
|
202f2d8bc5 | ||
|
|
3434c7334b | ||
|
|
ebb3aa7ba3 | ||
|
|
5730b3b42d | ||
|
|
8aa44711e3 | ||
|
|
7ff8190977 | ||
|
|
5c6f515d18 | ||
|
|
0ff8a80ef2 | ||
|
|
f37d4063fb | ||
|
|
dde52653e5 | ||
|
|
5e3b346053 | ||
|
|
ed5a444753 | ||
|
|
6253169e35 | ||
|
|
2d143d0afd | ||
|
|
1b36852c8d | ||
|
|
739b13a1ce | ||
|
|
b3c1259580 | ||
|
|
045bcf6dc5 | ||
|
|
6977db708f | ||
|
|
e8d2256683 | ||
|
|
28707fa0f3 | ||
|
|
32d4208761 | ||
|
|
2f34b3ed8b | ||
|
|
02256e04ed | ||
|
|
a964f793d8 | ||
|
|
b80d98f36e | ||
|
|
3b59f95f20 | ||
|
|
f25539f389 | ||
|
|
f9fcc79565 | ||
|
|
a9b23552b0 | ||
|
|
3cd23a07e2 | ||
|
|
70d895fef5 | ||
|
|
5656dcb7ff | ||
|
|
ca78bce534 | ||
|
|
4bce7fadb4 | ||
|
|
681b341a51 | ||
|
|
69635f5e6c | ||
|
|
4ec4600406 | ||
|
|
e13c313839 | ||
|
|
429f82e4fe | ||
|
|
0334391e33 | ||
|
|
80e193398c | ||
|
|
8b686b60f1 | ||
|
|
f1ff0cb55f | ||
|
|
cb518863b0 | ||
|
|
6b6558af01 | ||
|
|
59014b86bf | ||
|
|
9d70f4de04 | ||
|
|
8ceba9fbee | ||
|
|
5cb69910bd | ||
|
|
0b91b02f80 | ||
|
|
50b76bf2ec | ||
|
|
de14c5782d | ||
|
|
fc34d54cdd | ||
|
|
8c41f713a6 | ||
|
|
2b0d918401 | ||
|
|
b56e1d501f | ||
|
|
7e206d4589 | ||
|
|
0c267f8eee | ||
|
|
817a518e82 | ||
|
|
e322b05707 | ||
|
|
3ca9311cb0 | ||
|
|
5899cce9d8 | ||
|
|
b350fedc66 | ||
|
|
8ddfe05dd6 | ||
|
|
6639188c5a | ||
|
|
0ccea05129 | ||
|
|
a36c7c5057 | ||
|
|
86b70728c7 | ||
|
|
d2b3372dd4 | ||
|
|
34e3cd1cbd | ||
|
|
90687007f5 | ||
|
|
8b7e989fed | ||
|
|
08a0407417 | ||
|
|
754ab67de7 | ||
|
|
7169a74e94 | ||
|
|
45331d17b0 | ||
|
|
05bd668cc2 | ||
|
|
2873d0d031 | ||
|
|
5d75f4a53a | ||
|
|
7b61dc3d58 | ||
|
|
8a3db29b02 | ||
|
|
e8fd11c08c | ||
|
|
6583337f48 | ||
|
|
4fae148e35 | ||
|
|
813643036b | ||
|
|
4acc5675d6 | ||
|
|
c2d80578fe | ||
|
|
d5d775f184 | ||
|
|
af5206cbfc |
13
.dockerignore
Normal file
13
.dockerignore
Normal file
@@ -0,0 +1,13 @@
|
||||
# Project administration files
|
||||
.idea
|
||||
.git
|
||||
.github
|
||||
|
||||
# Not used by the build.
|
||||
docs
|
||||
handbook
|
||||
sql
|
||||
tools
|
||||
|
||||
# Created by the db when using docker-compose, large and causes rebuild issues if sent to the context.
|
||||
docker-db-data
|
||||
24
.github/workflows/bump-version.yml
vendored
Normal file
24
.github/workflows/bump-version.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
# This workflow will tag the merge commit when merging a PR into the master branch.
|
||||
# Add "#patch", "#minor", or "#major" at end of the merge commit subject to dictate the type of bump.
|
||||
|
||||
name: Bump version
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: '0'
|
||||
|
||||
- name: Bump version and push tag
|
||||
uses: anothrNick/github-tag-action@1.55.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
WITH_V: true
|
||||
BRANCH_HISTORY: last
|
||||
20
.github/workflows/run-build.yml
vendored
Normal file
20
.github/workflows/run-build.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# This workflow will build a Java project with Maven
|
||||
|
||||
name: Run build
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'temurin'
|
||||
- name: Build with Maven (compile -> test -> package)
|
||||
run: mvn -B package --file pom.xml
|
||||
145
.gitignore
vendored
145
.gitignore
vendored
@@ -1,143 +1,18 @@
|
||||
/logs/**
|
||||
/logs/**
|
||||
.idea/
|
||||
*.iml
|
||||
/target
|
||||
|
||||
# build files
|
||||
|
||||
/build/
|
||||
/dist/
|
||||
/nbproject/
|
||||
|
||||
/tools/MapleArrowFetcher/build/
|
||||
/tools/MapleArrowFetcher/dist/
|
||||
/tools/MapleArrowFetcher/nbproject/
|
||||
|
||||
/tools/MapleBossHpBarFetcher/build/
|
||||
/tools/MapleBossHpBarFetcher/dist/
|
||||
/tools/MapleBossHpBarFetcher/nbproject/
|
||||
|
||||
/tools/MapleCashCosmeticsChecker/build/
|
||||
/tools/MapleCashCosmeticsChecker/dist/
|
||||
/tools/MapleCashCosmeticsChecker/nbproject/
|
||||
|
||||
/tools/MapleCashCosmeticsFetcher/build/
|
||||
/tools/MapleCashCosmeticsFetcher/dist/
|
||||
/tools/MapleCashCosmeticsFetcher/nbproject/
|
||||
|
||||
/tools/MapleCashDropFetcher/build/
|
||||
/tools/MapleCashDropFetcher/dist/
|
||||
/tools/MapleCashDropFetcher/nbproject/
|
||||
|
||||
/tools/MapleCashVegaChecker/build/
|
||||
/tools/MapleCashVegaChecker/dist/
|
||||
/tools/MapleCashVegaChecker/nbproject/
|
||||
|
||||
/tools/MapleCodeCouponGenerator/build/
|
||||
/tools/MapleCodeCouponGenerator/dist/
|
||||
/tools/MapleCodeCouponGenerator/nbproject/
|
||||
|
||||
/tools/MapleCouponInstaller/build/
|
||||
/tools/MapleCouponInstaller/dist/
|
||||
/tools/MapleCouponInstaller/nbproject/
|
||||
|
||||
/tools/MapleDojoUpdater/build/
|
||||
/tools/MapleDojoUpdater/dist/
|
||||
/tools/MapleDojoUpdater/nbproject/
|
||||
|
||||
/tools/MapleEmptyItemWzChecker/build/
|
||||
/tools/MapleEmptyItemWzChecker/dist/
|
||||
/tools/MapleEmptyItemWzChecker/nbproject/
|
||||
|
||||
/tools/MapleEquipmentOmnileveler/build/
|
||||
/tools/MapleEquipmentOmnileveler/dist/
|
||||
/tools/MapleEquipmentOmnileveler/nbproject/
|
||||
|
||||
/tools/MapleEventMethodFiller/build/
|
||||
/tools/MapleEventMethodFiller/dist/
|
||||
/tools/MapleEventMethodFiller/nbproject/
|
||||
|
||||
/tools/MapleGachaponItemidRetriever/build/
|
||||
/tools/MapleGachaponItemidRetriever/dist/
|
||||
/tools/MapleGachaponItemidRetriever/nbproject/
|
||||
|
||||
/tools/MapleIdRetriever/build/
|
||||
/tools/MapleIdRetriever/dist/
|
||||
/tools/MapleIdRetriever/nbproject/
|
||||
|
||||
/tools/MapleInvalidItemIdFetcher/build/
|
||||
/tools/MapleInvalidItemIdFetcher/dist/
|
||||
/tools/MapleInvalidItemIdFetcher/nbproject/
|
||||
|
||||
/tools/MapleInvalidItemWithNoNameFetcher/build/
|
||||
/tools/MapleInvalidItemWithNoNameFetcher/dist/
|
||||
/tools/MapleInvalidItemWithNoNameFetcher/nbproject/
|
||||
|
||||
/tools/MapleMapFieldLimitChecker/build/
|
||||
/tools/MapleMapFieldLimitChecker/dist/
|
||||
/tools/MapleMapFieldLimitChecker/nbproject/
|
||||
|
||||
/tools/MapleMapInfoRetriever/build/
|
||||
/tools/MapleMapInfoRetriever/dist/
|
||||
/tools/MapleMapInfoRetriever/nbproject/
|
||||
|
||||
/tools/MapleMapLootLimitChecker/build/
|
||||
/tools/MapleMapLootLimitChecker/dist/
|
||||
/tools/MapleMapLootLimitChecker/nbproject/
|
||||
|
||||
/tools/MapleMesoFetcher/build/
|
||||
/tools/MapleMesoFetcher/dist/
|
||||
/tools/MapleMesoFetcher/nbproject/
|
||||
|
||||
/tools/MapleMobBookIndexer/build/
|
||||
/tools/MapleMobBookIndexer/dist/
|
||||
/tools/MapleMobBookIndexer/nbproject/
|
||||
|
||||
/tools/MapleMobBookUpdate/build/
|
||||
/tools/MapleMobBookUpdate/dist/
|
||||
/tools/MapleMobBookUpdate/nbproject/
|
||||
|
||||
/tools/MapleQuestItemCountFetcher/build/
|
||||
/tools/MapleQuestItemCountFetcher/dist/
|
||||
/tools/MapleQuestItemCountFetcher/nbproject/
|
||||
|
||||
/tools/MapleQuestItemFetcher/build/
|
||||
/tools/MapleQuestItemFetcher/dist/
|
||||
/tools/MapleQuestItemFetcher/nbproject/
|
||||
|
||||
/tools/MapleQuestlineFetcher/build/
|
||||
/tools/MapleQuestlineFetcher/dist/
|
||||
/tools/MapleQuestlineFetcher/nbproject/
|
||||
|
||||
/tools/MapleQuestMesoFetcher/build/
|
||||
/tools/MapleQuestMesoFetcher/dist/
|
||||
/tools/MapleQuestMesoFetcher/nbproject/
|
||||
|
||||
/tools/MapleReactorDropFetcher/build/
|
||||
/tools/MapleReactorDropFetcher/dist/
|
||||
/tools/MapleReactorDropFetcher/nbproject/
|
||||
|
||||
/tools/MapleSkillbookChanceFetcher/build/
|
||||
/tools/MapleSkillbookChanceFetcher/dist/
|
||||
/tools/MapleSkillbookChanceFetcher/nbproject/
|
||||
|
||||
/tools/MapleSkillbookStackUpdate/build/
|
||||
/tools/MapleSkillbookStackUpdate/dist/
|
||||
/tools/MapleSkillbookStackUpdate/nbproject/
|
||||
|
||||
/tools/MapleSkillMakerFetcher/build/
|
||||
/tools/MapleSkillMakerFetcher/dist/
|
||||
/tools/MapleSkillMakerFetcher/nbproject/
|
||||
|
||||
/tools/MapleSkillMakerReagentIndexer/build/
|
||||
/tools/MapleSkillMakerReagentIndexer/dist/
|
||||
/tools/MapleSkillMakerReagentIndexer/nbproject/
|
||||
|
||||
/tools/MapleWorldmapChecker/build/
|
||||
/tools/MapleWorldmapChecker/dist/
|
||||
/tools/MapleWorldmapChecker/nbproject/
|
||||
|
||||
/tools/SpiderDropFetcher/build/
|
||||
/tools/SpiderDropFetcher/dist/
|
||||
/tools/SpiderDropFetcher/nbproject/
|
||||
|
||||
/.settings
|
||||
/out
|
||||
*.onetoc2
|
||||
|
||||
# Eclipse m2e generated files
|
||||
# Eclipse Core
|
||||
.project
|
||||
# JDT-specific (Eclipse Java Development Tools)
|
||||
.classpath
|
||||
|
||||
49
Dockerfile
49
Dockerfile
@@ -1,13 +1,42 @@
|
||||
# Docker support, thanks to xinyifly
|
||||
# Initial Docker support thanks to xinyifly
|
||||
# Optimisation performed by wejrox
|
||||
|
||||
FROM openjdk:8u171-jdk-alpine
|
||||
RUN apk -U add tini
|
||||
WORKDIR /mnt
|
||||
COPY ./ ./
|
||||
RUN sh ./posix-compile.sh
|
||||
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.6.0/wait /wait
|
||||
RUN chmod +x /wait
|
||||
#
|
||||
# Cosmic JAR creation stage
|
||||
#
|
||||
FROM maven:3.8.4-openjdk-17 AS jar
|
||||
|
||||
# Build in a separated location which won't have permissions issues.
|
||||
WORKDIR /opt/cosmic
|
||||
# Any changes to the pom will affect the entire build, so it should be copied first.
|
||||
COPY pom.xml ./pom.xml
|
||||
# Grab all the dependencies listed in the pom early, since it prevents changes to source code from requiring a complete re-download.
|
||||
# Skip compiling tests since we don't want all the dependecies to be downloaded.
|
||||
RUN mvn -f ./pom.xml clean dependency:go-offline -Dmaven.test.skip -T 1C
|
||||
# Source code changes may not change dependencies, so it can go last.
|
||||
# Skip compiling tests since we don't want all the dependecies to be downloaded for plugins.
|
||||
COPY src ./src
|
||||
RUN mvn -f ./pom.xml clean package -Dmaven.test.skip -T 1C
|
||||
|
||||
#
|
||||
# Server creation stage
|
||||
#
|
||||
FROM openjdk:17.0.2
|
||||
|
||||
# Host the server in a location that won't have permissions issues.
|
||||
WORKDIR /opt/server
|
||||
# Copy the wizet files first since they're so big and won't change often.
|
||||
COPY wz ./wz
|
||||
# Copy the JAR we build earlier.
|
||||
COPY --from=jar /opt/cosmic/target/Cosmic.jar ./Server.jar
|
||||
# Scripts are sourced on server startup, so you can mount over them for quicker redeploy.
|
||||
COPY scripts ./scripts/
|
||||
# Config is read on server startup, so you can mount over it for quicker redeploy.
|
||||
COPY config.yaml ./
|
||||
# Default exposure, although not required if using docker compose.
|
||||
# This exposes the login server, and channels.
|
||||
# Format for channels: WWCC, where WW is 75 plus the world number and CC is 75 plus the channel number (both zero indexed).
|
||||
EXPOSE 8484 7575 7576 7577
|
||||
ENTRYPOINT ["tini", "--"]
|
||||
CMD /wait && sh ./posix-launch.sh
|
||||
ENTRYPOINT ["java", "-jar", "./Server.jar"]
|
||||
|
||||
|
||||
|
||||
410
README.md
410
README.md
@@ -1,219 +1,130 @@
|
||||
<img src="https://heavenmssurveyhome.files.wordpress.com/2018/12/heavenmslogo.png" width="370" height="auto">
|
||||
# Cosmic - MapleStory v83 server
|
||||
|
||||
## Head developer: Ronan C. P. Lana
|
||||
## Introduction
|
||||
Cosmic launched as a successor to HeavenMS on March 21st 2021.
|
||||
|
||||
Besides myself for maintaining this repository, credits are to be given to Wizet/Nexon (owners of MapleStory & it's IP contents), the original MapleSolaxia staff and other colaborators, as just some changes/patches on the game were applied by myself, in which some of them diverged from the original v83 patch contents (alright, not just "some patches" by now since a whole lot of major server core changes have been applied on this development).
|
||||
HeavenMS is archived, ie. it receives no further updates. This project aims to continue its development; mainly by improving code quality and make getting into PS development as easy as possible.
|
||||
|
||||
Regarding distributability and usage of the code presented here: like it was before, this MapleStory server is open-source. By that, it is meant that anyone is **free to install, use, modify and redistribute the contents**, as long as there is **no kind of commercial trading involved** and the **credits to the original creators are maintained** within the codes.
|
||||
This is an open source project. Anyone may contribute by opening a pull request.
|
||||
|
||||
This is a NetBeans 8.2 Project, that should be built and run on Java 8 in order to run properly. -- Used to be ran in Java 7, thanks kolakcc (Familiar) for the Java 8 support!
|
||||
Only the server side is maintained. The client is directly copied from HeavenMS.
|
||||
|
||||
Being a NetBeans 8.2 Project, this means that it's easier to install the project via opening the server project folder inside NetBeans' IDE. Once installed, build this project on your machine and run the server using the "launch.bat" application.
|
||||
|
||||
In this project, many gameplay-wise issues generated from either the original WZ files and the server source have been partially or completely solved. Considering the use of the provided edited WZ's and server-side wz.xml files should be of the greatest importance when dealing with this instance of server source, in order to perceive it at it's full potential. My opinion, though!
|
||||
Beware - ***This server emulator is not production ready.***
|
||||
It can be useful for testing things locally or for trying out ideas, but launching a new private server based on this and opening it up to the public
|
||||
without knowing what you're doing is not recommended.
|
||||
|
||||
- In other case, as fallback from the provided ones, consider using **whole clean set**. Selecting part of the provided ones to play pretty much *may eventually* lead to unexpected issues.
|
||||
|
||||
The main objective of this project is to try as best as possible to recreate what once was the original MapleStory v83, while adding up some flavors that spices up the gameplay. In other words, aim to get the best of the MapleStory of that era.
|
||||
## Development information
|
||||
|
||||
---
|
||||
### Download items
|
||||
### Status (updated 2022-10-16)
|
||||
|
||||
Server files: https://github.com/ronancpl/HeavenMS
|
||||
Development is currently <span style="color:Yellow">**sporadic**</span>.
|
||||
|
||||
Client files & general tools: https://drive.google.com/drive/folders/0BzDsHSr-0V4MYVJ0TWIxd05hYUk
|
||||
My time is very limited nowadays, but I try to keep up with the submitted pull requests. I may submit some stuff of my own, once in a while.
|
||||
|
||||
Java 8 SDK & NetBeans bundle: https://www.oracle.com/technetwork/pt/java/javase/downloads/jdk-netbeans-jsp-3413153-ptb.html
|
||||
### Ways to contribute
|
||||
|
||||
**Important note about localhosts**: these executables are red-flagged by antivirus tools as __potentially malicious softwares__, this happens due to the reverse engineering methods that were applied onto these software artifacts. Those depicted here have been put to use for years already and posed no harm so far, so they are soundly assumed to be safe.
|
||||
* Submit a Pull Request (fork -> commit -> PR). If you don't know where to start, have a look at the issues on GitHub.
|
||||
* Report a bug (preferably as an Issue on GitHub, as reports on Discord may be forgotten or lost)
|
||||
* Spread the word about Cosmic
|
||||
|
||||
Latest localhost: https://hostr.co/amuX5SLeeVZx
|
||||
### Working with GitHub
|
||||
|
||||
The following list, in bottom-up chronological order, holds information regarding all changes that were applied from the starting localhost used in this development. Some lines have a link attached, that will lead you to a snapshot of the localhost at that version of the artifact. Naturally, later versions holds all previous changes along with the proposed changes.
|
||||
Anyone with a GitHub account can contribute by making some changes in a branch and opening up a PR.
|
||||
|
||||
**Change log:**
|
||||
All activity on the GitHub repo (opening PR, commenting, creating issue, etc.) is automatically pushed (via webhook) to a public Discord channel for visibility.
|
||||
|
||||
* Fixed Monster Magnet crashing the caster when trying to pull fixed mobs, credits to Shavit. https://gofile.io/?c=BW7dVM
|
||||
Issues is the main place where bugs, issues or general improvements are tracked. Feel free to submit a new issue, but please keep it in English. By providing a good description, you increase the chance of a bug being fixed.
|
||||
|
||||
* Cleared need for administrator privileges (OS) to play the game, credits to Ubaware.
|
||||
Tasks (past, present and future) are kept in the Cosmic project, which you get to via the "Projects" tab. This gives you an idea of where the project is moving.
|
||||
|
||||
* Set a higher cap for AP assigning with AP Reset, credits to Ubaware.
|
||||
### Versioning
|
||||
|
||||
* Fixed Monster Magnet crashing the caster when trying to pull bosses. Drawback: Dojo HPBar becomes unavailable. https://hostr.co/SvnSKrGzXhG0
|
||||
The project follows the [SemVer](https://semver.org/) versioning scheme using git tags.
|
||||
As a pull request gets merged, a new version is automatically created.
|
||||
|
||||
* Fixed some 'rn' problems with quest icons & removed "tab" from party leader changed message. https://hostr.co/tsYsQzzV6xT0
|
||||
Bug fixes result in bumped patch version: 1.2.__3__ -> 1.2.__4__
|
||||
|
||||
* Removed block on applying attack-based strengthening gems on non-weapon equipments. https://hostr.co/m2bVtnizCtmD
|
||||
General improvements result in bumped minor version: 1.__2__.3 -> 1.__3__.3
|
||||
|
||||
* Set a higher cap for SPEED.
|
||||
Major changes result in bumped major version: __1__.2.3 -> __2__.2.3
|
||||
|
||||
* Removed the AP assigning block for beginners below level 10. https://hostr.co/AHAHzneCti9B
|
||||
### Cosmic
|
||||
|
||||
* Removed block on party for beginners level 10 or below. https://hostr.co/JZq53mMtToCz
|
||||
- GitHub: https://github.com/P0nk/Cosmic
|
||||
- Discord: https://discord.gg/JU5aQapVZK
|
||||
|
||||
* Removed block on MTS entering in some maps, rendering the buyback option available.
|
||||
### HeavenMS
|
||||
- GitHub: https://github.com/ronancpl/HeavenMS
|
||||
- Discord: https://discord.gg/Q7wKxHX
|
||||
|
||||
* Removed "AP excess" popup and limited actions on Admin/MWLB, credits to kevintjuh93.
|
||||
## Tools / downloads
|
||||
* **Java 17 SDK** - Needed to compile and run Java code. Install manually or through IntelliJ depending on how you prefer to launch the server. Not required for launching with Docker.
|
||||
* Link: https://jdk.java.net/17/
|
||||
|
||||
|
||||
* Removed "You've gained a level!" popup, credits to PrinceReborn.
|
||||
* **IntelliJ IDEA** - Java IDE and your main tool for working with the source code. Community edition is good enough.
|
||||
* Link: https://www.jetbrains.com/idea/
|
||||
|
||||
|
||||
* Removed caps for WATK, WDEF, MDEF, ACC, AVOID.
|
||||
* **MySQL Community Server 8** - Database for game data.
|
||||
* Link: https://dev.mysql.com/downloads/mysql/
|
||||
|
||||
|
||||
* 'n' problem fixed.
|
||||
* **MySQL Workbench 8** - Client for interacting with the database. Other clients do exist.
|
||||
* Link: https://dev.mysql.com/downloads/workbench/
|
||||
|
||||
|
||||
* Fraysa's https://hostr.co/gJbLZITRVHmv
|
||||
* **Docker Desktop** (optional) - For launching the game locally with less hassle.
|
||||
* Link: https://www.docker.com/products/docker-desktop
|
||||
|
||||
|
||||
* Eric's MapleSilver starting on window-mode.
|
||||
* **Client files and general tools**
|
||||
* Link: https://drive.google.com/drive/folders/1hgnb92MGL6xqEp9szEMBh0K9pSJcJ6IT?usp=sharing
|
||||
* This is Ponk's own Google Drive, similar to how Ronan provides files for HeavenMS.
|
||||
|
||||
|
||||
---
|
||||
### Open-source client development - HeavenClient
|
||||
### MapleStory client
|
||||
|
||||
Continuing from where **SYJourney**'s JourneyClient has finished contributions (as of 5 Jul 2016), an open-source development of a software artifact designed to handle both gaming operations and interactions with the server is being conducted.
|
||||
- Latest localhost client: https://hostr.co/amuX5SLeeVZx
|
||||
|
||||
Newer implementations are being maintained by **頼晏 (ryantpayton)** and aims to offer higher display resolution, bring recent UI contents for the pre-BB gameplay and incremental support on overall gaming perspective.
|
||||
**Important note about localhost clients**: these executables are red-flagged by antivirus tools as __potentially malicious software__,
|
||||
this happens due to the reverse engineering methods that were applied onto these software artifacts.
|
||||
Those depicted here have been put to use for years already and posed no harm so far, so they are soundly assumed to be safe.
|
||||
|
||||
HeavenClient Github: https://github.com/ryantpayton/HeavenClient
|
||||
|
||||
---
|
||||
### Development information
|
||||
## Getting started
|
||||
The localhost MapleStory client needs to be installed, as well as the server that will host the game.
|
||||
|
||||
Status: <span style="color:SkyBlue">__Released (4 rounds)__</span>.
|
||||
### Installing the client
|
||||
|
||||
#### Mission
|
||||
|
||||
With non-profitting means intended, provide nostalgic pre-BB maplers world-wide a quality local server for freestyle entertainment.
|
||||
|
||||
#### Vision
|
||||
|
||||
By taking the v83 MapleStory as the angular stone, incrementally look forward to improve the gaming experience whilst still retaining the "clean v83" conservative ideal. Also, through reviewing distinguished aspects of the server's behavior that could be classified as a potential server threat, in the long run look for ways to improve or even stabilize some of it's uncertain aspects.
|
||||
|
||||
#### Values
|
||||
|
||||
* Autonomy, seek self-improvement for tackling issues head-on;
|
||||
* Adventurous, take no fear of failures on the path of progress;
|
||||
* Light-hearted support, general people out there didn't experience what you've already had;
|
||||
* Humility, no matter how good you are, there's no good in boasting yourself over experiences only a few have had;
|
||||
|
||||
#### Announcements
|
||||
|
||||
HeavenMS development as we can see right now achieved an acceptable state-of-the-art. A heartfelt thanks for everyone that contributed in some way for the progress of this server!
|
||||
|
||||
A case study has been conducted with the objective of overview results achieved during HeavenMS development. Those can be checked out on: https://heavenms-survey.home.blog/2019/12/24/project-visualizations/
|
||||
|
||||
#### Support HeavenMS
|
||||
|
||||
If you liked this project, please don't forget to __star__ the repo ;) .
|
||||
|
||||
It's never enough to tell this, thanks to everyone that have been contributing something for the continuous improvement of the server! Be it through bug reports, donation, code snippets and/or pull requests.
|
||||
|
||||
Our Discord channel is still available on: https://discord.gg/Q7wKxHX
|
||||
|
||||
<hr id="donate" />
|
||||
|
||||
[//]: <> (If you REALLY liked what you have seen on the project, please feel free to donate a little something as a helping hand for my contributions towards Maple development. Also remember to **support Nexon**!)
|
||||
|
||||
### Disclaimer
|
||||
|
||||
[//]: <> (* HeavenMS development is decisively __ONLY accepting donations__ from the Paypal link aforementioned, in the __ronancpl/HeavenMS__ repository readme (no patreons or other revenue resources).)
|
||||
|
||||
* HeavenMS staff has __no current intention__ to publicly open a server with this source, if that ever comes to happen this note will be lifted. __Don't be scammed!__
|
||||
|
||||
* This server source is __NOT intended to be stable__ as is. Proper deadlock review and other maintenance contributions are needed in order to make it steps ahead on viability.
|
||||
|
||||
---
|
||||
### Preparing the ambient
|
||||
|
||||
The following link teaches on how to install a MapleStory v83 private server, however IT DIFFERS on what is used here: http://forum.ragezone.com/f428/maplestory-private-server-v83-741739/
|
||||
|
||||
Use that link ONLY AS AN ORIENTATION on where here things start to become ambiguous.
|
||||
|
||||
Firstly, install all the general tools required to run the server:
|
||||
|
||||
* WampServer2.0i.exe -> recipient of the MySQL server.
|
||||
* mysql-query-browser.msi -> MySQL client component, visually shows the DB data and hubs queries.
|
||||
* hamachi.msi -> used for establishing a tunnelling route for the server/client communication.
|
||||
|
||||
Now install the Java 8 SDK & NetBeans bundle:
|
||||
* jdk-8u111-nb-8_2-windows-x64.exe -> It's a NetBeans project, use other IDE at your own risk.
|
||||
|
||||
Now that the tools have been installed, test if they are working.
|
||||
|
||||
For WampServer:
|
||||
|
||||
* Once you're done installing it, run it and you will see the Wamp icon on the bottom right corner. Left click it and click 'Put Online'.
|
||||
* In case of ORANGE ICON, change port 80 at "httpd.conf" to another, as it clashes with a Windows default port. Then Left click it again and click 'Start All Services'.
|
||||
* The Wamp icon must look completely green (if its orange or red, you have a problem).
|
||||
|
||||
For Hamachi:
|
||||
|
||||
* Try opening it. It's that simple.
|
||||
|
||||
Hamachi is optional, though. You don't have to install Hamachi if you want to make the server just for use on your own machine. However, if you want to let other players access your server, consider alternatively using port-forwarding methods.
|
||||
|
||||
---
|
||||
### Installing the SERVER
|
||||
|
||||
By downloading through the Github download button, you may have obtained a ZIP file with a single "HeavenMS-master" folder on it. EXTRACT that folder.
|
||||
|
||||
For expediency, "HeavenMS-master" folder on this guide will be referred just as "HeavenMS". Rename it for convenience. Then, set "HeavenMS" the folder on a place of your preference. It is recommended to use "C:\Nexon\HeavenMS".
|
||||
|
||||
Setting up the SQL: open MySQL Query Browser, then create a new session with the parameters below, then click OK.
|
||||
|
||||
* Server Host: localhost
|
||||
* Port: 3306
|
||||
* Username: root
|
||||
|
||||
Now it must be done CAREFULLY:
|
||||
|
||||
1. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_database.sql, and execute it.
|
||||
|
||||
2. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_drops.sql, and execute it.
|
||||
|
||||
Now it is OPTIONAL, you don't need to run it if you don't want, as it will simply change some NPC shops to set some new goods, not present in the original MapleStory, to sell:
|
||||
|
||||
3. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_shopupdate.sql, and execute it.
|
||||
|
||||
At the end of the execution of these SQLs, you should have installed a database schema named "heavenms". REGISTER YOUR FIRST ACCOUNT to be used in-game by **creating manually** an entry on the table "accounts" at that database with a login and a password.
|
||||
|
||||
Configure the IP you want to use for your MapleStory server in "configuration.ini" file, or set it as "localhost" if you want to run it only on your machine. Alternatively, you can use the IP given by Hamachi to use on a Hamachi network, or you can use a non-Hamachi method of port-forwarding. Neither will be approached here.
|
||||
|
||||
#### Open the NetBeans project
|
||||
|
||||
Now open NetBeans, and click "Open a project..." . Select then the "HeavenMS" folder, that should already be a project recognizable by NetBeans. If it isn't, you have a problem.
|
||||
|
||||
Inside the project, you may encounter some code errors.
|
||||
|
||||
If that's the case, you have yet to set the core JARs of the project. From the project hierarchy, right-click the project and select "Resolve Project Problems".
|
||||
|
||||
Locate the folder "cores" inside the root directory of this project and manually configure the missing files on NetBeans (mina-core, slf4j-api, ...).
|
||||
|
||||
Finally, select "Clean and Build project" to build the JAR file for the MapleStory server. Once done, make sure both WampServer and Hamachi are on and functional, then execute "launch.bat" on the root of the project. If no errors were raised from this action, your MapleStory server is now online.
|
||||
|
||||
---
|
||||
### Installing the CLIENT
|
||||
|
||||
#### Setting up client-side ambient
|
||||
|
||||
The client's set-up is quite straightforward:
|
||||
|
||||
1. From "ManagerMsv83.exe", install MapleStory on your folder of preference (e.g. "C:\Nexon\MapleStory") and follow their instructions.
|
||||
1. Install MapleStory with "MapleGlobal-v83-setup.exe" in your folder of choice (e.g. "C:\Nexon\MapleStory") and follow their instructions.
|
||||
2. Once done, erase these files: "HShield" (folder), "ASPLnchr.exe", "MapleStory.exe" and "Patcher.exe".
|
||||
3. Extract into the client folder the "localhost.exe" from the provided link.
|
||||
4. Overwrite the original WZ files with the ones provided from either one of those folders on the Google Drive:
|
||||
- "commit397_wz" (last published RELEASE, referring to commit of same number).
|
||||
- "current_wz" (latest source update).
|
||||
3. Extract into the client folder the "HeavenMS-localhost-WINDOW.exe" (from now on referred to as "localhost.exe") from the provided link.
|
||||
4. Overwrite the original WZ files with the ones provided on the Google Drive: "CosmicWZ-v1-2021.05.10.zip"
|
||||
- This is currently identical to the latest HeavenMS WZ files (except for the file name): "commit397_wz-20210321T173600Z-001.zip"
|
||||
|
||||
#### Editing localhost IP target
|
||||
|
||||
If you are not using "localhost" as the target IP on the server's config file, you will need to HEX-EDIT "localhost.exe" to fetch your IP. Track down all IP locations by searching for "Type: String" "127.0.0.1", and applying the changes wherever it fits.
|
||||
If you are not using "localhost" as the target IP on the server's config file, you will need to HEX-EDIT localhost.exe to fetch your IP. Track down all IP locations by searching for "Type: String" "127.0.0.1", and applying the changes wherever it fits.
|
||||
|
||||
To hex-edit, install the Neo Hex Editor from "free-hex-editor-neo.exe" and follow their instructions. Once done, open "localhost.exe" for editing and overwrite the IP values under the 3 addresses. Save the changes and exit the editor.
|
||||
To hex-edit, install the Neo Hex Editor from "free-hex-editor-neo.exe" and follow their instructions. Once done, open localhost.exe for editing and overwrite the IP values under the 3 addresses. Save the changes and exit the editor.
|
||||
|
||||
(TODO: find suitable alternative to Neo Hex Editor)
|
||||
|
||||
#### Testing the localhost
|
||||
|
||||
Open the "localhost.exe" client. If by any means the program did not open, and checking the server log your ping has been listened by the server and you are using Windows 8 or 10, it probably might be some compatibility issue.
|
||||
Open the "localhost.exe" client.
|
||||
If by any means the program did not open, and checking the server log your ping has been listened by the server
|
||||
and you are using Windows 8, 10 or 11, it is probably some compatibility issue.
|
||||
|
||||
In that case, extract "lolwut.exe" from "lolwut-v0.01.rar" and place it on the MapleStory client folder ("C:\Nexon\MapleStory"). Your "localhost.exe" property settings must follow these:
|
||||
In some cases it helps to spam click the exe a few times (2-3 times usually works for me on W10).
|
||||
|
||||
In that case, extract "lolwut.exe" from "lolwut-v0.01.rar" and place it on the MapleStory client folder ("C:\Nexon\MapleStory").
|
||||
Your "localhost.exe" property settings must follow these:
|
||||
|
||||
Note: "lolwut.exe" is currently not available in the Google Drive.
|
||||
|
||||
* Run in compatibility mode: Windows 7;
|
||||
* Unchecked reduced color mode;
|
||||
@@ -223,62 +134,128 @@ In that case, extract "lolwut.exe" from "lolwut-v0.01.rar" and place it on the M
|
||||
* Opening "lolwut.exe", use Fraysa's method.
|
||||
|
||||
Important: should the client be refused a connection to the game server, it may be because of firewall issues. Head to the end of this file to proceed in allowing this connection through the computer's firewall. Alternatively, one can deactivate the firewall and try opening the client again.
|
||||
You can also search the server logs (/logs/cosmic-log.log) if any connection attempts have been made to ease debugging.
|
||||
|
||||
---
|
||||
### Creating an account and logging in the game
|
||||
### Installing the server
|
||||
1. Configure the project
|
||||
2. Set up the database
|
||||
3. Launch the server
|
||||
|
||||
If you are using Docker (quick start):
|
||||
1. Configure the project
|
||||
2. Launch the server
|
||||
|
||||
#### Configuring the project
|
||||
|
||||
The easiest way to set up your project is to clone the repository directly into a new IntelliJ project.
|
||||
|
||||
1. Install IntelliJ
|
||||
2. Create a new "Project from Version Control..."
|
||||
3. Enter the URL to this GitHub repository: "https://github.com/P0nk/Cosmic.git"
|
||||
4. Click on "Clone". A new project will now be created with all the files from the repository.
|
||||
|
||||
#### Setting up the database
|
||||
|
||||
1. Install MySQL Server 8 and MySQL Workbench 8.
|
||||
2. Using Workbench, create a new user with username "cosmic_server" and password "snailshell".
|
||||
This the default configuration in Cosmic.
|
||||
* (Optional) Restrict the Schema Privileges for this new user for improved security.
|
||||
Add a new entry with "Schemas matching pattern: cosmic" and only select "SELECT", "INSERT", "UPDATE", "DELETE" under "Object Rights"
|
||||
3. Run the sql scripts in the "database/sql" directory of the project in the order indicated by their names.
|
||||
* Make sure you are connected to the database with the "root" user to be able to run the scripts.
|
||||
* Run scripts one by one through the menu: "File" -> "Run SQL Script" -> select the script file to run -> "Run"
|
||||
* The 3rd script "3-db_shopupdate" is optional. It adds custom shop items for certain NPCs.
|
||||
* The 4th script "4-db_admin" is also optional, but recommended if you are new. It adds an admin account to simplify the setup.
|
||||
|
||||
Use this info when you connect to MySQL Server for the first time:
|
||||
* Server Host: localhost
|
||||
* Port: 3306
|
||||
* Username: root
|
||||
* Password: <whatever password you set during MySQL Server installation>
|
||||
|
||||
At the end of the execution of these sql scripts, you should have installed a database schema named "cosmic".
|
||||
REGISTER YOUR FIRST ACCOUNT to be used in-game by **manually creating** an entry in the table "accounts" in the database with a username and password.
|
||||
|
||||
|
||||
### Running the server
|
||||
|
||||
Configure the IP you want to use for your MapleStory server in "config.yaml" file, or set it as "localhost" if you want to run it only on your machine.
|
||||
Alternatively, you can use the IP given by Hamachi to use on a Hamachi network, or you can use a non-Hamachi method of port-forwarding. Neither will be approached here.
|
||||
|
||||
|
||||
To launch the server, you may either:
|
||||
* Launch inside IntelliJ
|
||||
* Launch a built jar file
|
||||
* Launch with Docker
|
||||
|
||||
#### Run inside IntelliJ
|
||||
1. Open the file src/main/java/net/server/Server.java.
|
||||
2. Click the green arrow to the left of the class definition "public class Server", and then "Run Cosmic".
|
||||
* Alternatively (recommended), create a new Configuration that points to "net.server.Server".
|
||||
3. The server launches in a terminal window inside IntelliJ.
|
||||
|
||||
#### Run from a jar file
|
||||
1. Create the jar file
|
||||
* The jar file is created by the Maven assembly plugin in the package lifecycle.
|
||||
* If you already have Maven installed, simply run the command "mvn clean install" to create the jar file.
|
||||
* IntelliJ also comes with built-in Maven support. Open a new terminal window inside IntelliJ, type "mvn clean install" (your command should now be marked green), then Ctrl+Enter to build the jar file.
|
||||
2. Launch the jar file
|
||||
* Double click on "launch.bat" (need to have Java 17 installed)
|
||||
|
||||
#### Run as containers with Docker
|
||||
1. Start Docker
|
||||
2. Run the command "docker compose up" at the root of the project.
|
||||
* If you make any changes to the code, make sure you append the "--build" option at the end of the command to force rebuild the server image.
|
||||
|
||||
---
|
||||
### Getting into the game
|
||||
|
||||
If you ran the admin sql script, there already exists an account in the database with an admin character on it (GM level 6).
|
||||
|
||||
Log in using these credentials:
|
||||
* Username: "admin"
|
||||
* Password: "admin"
|
||||
* Pin: "0000"
|
||||
* Pic: "000000"
|
||||
|
||||
Admin characters have "hide" mode enabled by default. This means your character will be translucent on your screen, and completely invisible to others.
|
||||
It will also prevent you from controlling mobs (making them stand still). To toggle this mode on and off, type "@hide" in the in-game chat.
|
||||
|
||||
By default, the server source is set to allow AUTO-REGISTERING. This means that, by simply typing in a "Login ID" and a "Password", you're able to create a new account.
|
||||
|
||||
After creating a character, experiment typing in all-chat "@commands". This will display all available commands for the current GM level your character has.
|
||||
After creating a character, experiment typing in all-chat "@commands".
|
||||
This will display all available commands for the current GM level your character has.
|
||||
|
||||
To change a character's GM level, make sure that character is not logged in, then:
|
||||
|
||||
* Open MySQL Query Browser;
|
||||
* Double-click "heavenms" schema;
|
||||
* Double click "characters" table;
|
||||
* Execute the selected query;
|
||||
* Mark "Edit" flag on the MySQL Query Browser UI screen;
|
||||
* Locate your character's row on the displayed ResultSet;
|
||||
* Edit your character's GM level;
|
||||
* Hit APPLY CHANGES.
|
||||
1. Open MySQL Workbench;
|
||||
2. Expand "cosmic" schema;
|
||||
3. Expand "Tables";
|
||||
4. Right-click "characters" and click "Select Rows"
|
||||
5. Find your character in Result Grid. Scroll to the right and find the "gm" column.
|
||||
6. Edit your character's gm value and click "Apply", and then "Apply" again in the window that appeared, then "Finish".
|
||||
* 0 is what ordinary players start with, and 6 is the highest gm value. Higher level gms have access to more commands in game.
|
||||
|
||||
---
|
||||
### Some notes about WZ/WZ.XML EDITING
|
||||
Brief introduction to WZ files: they are the asset/data files required by the client and server. The client can read the .wz files directly, but the server requires them in XML format.
|
||||
The server also does not make use of any of the sprites, which is where different kinds of exporting comes into the picture. HaRepacker allows you to export to Private server XML, which is the .img files packaged in the .wz stripped of sprites and converted to XML.
|
||||
|
||||
Link to HaRepacker-resurrected, the standard tool for handling WZ files: https://github.com/lastbattle/Harepacker-resurrected
|
||||
|
||||
NOTE: Be extremely wary when using server-side's XMLs data being reimported into the client's WZ, as some means of synchronization between the server and client modules, this action COULD generate some kind of bugs afterwards. Client-to-server data reimporting seems to be fine, though.
|
||||
|
||||
#### Editing the v83 WZ's:
|
||||
|
||||
* Use the HaRepacker 4.2.4 editor, encryption "GMS (old)".
|
||||
|
||||
* Use the HaRepacker-resurrected 4.2.4 editor, encryption "GMS (old)".
|
||||
* Open the desired WZ for editing and use the node hierarchy to make the desired changes (copy/pasting nodes may be unreliable in rare scenarios).
|
||||
* Save the changed WZ, **overwriting the original content** at the client folder.
|
||||
* Finally, **RE-EXPORT (using the "Private Server..." exporting option) the changed XMLs into the server's WZ.XML files**, overwriting the old contents.
|
||||
|
||||
**These steps are IMPORTANT, to maintain synchronization** between the server and client modules.
|
||||
|
||||
#### The MobBookUpdate example
|
||||
|
||||
As an example of client WZ editing, consider the MapleMobBookUpdate tool project I developed, it updates all reported drop data on the Monster Book with what is currently being hold on the database:
|
||||
|
||||
To make it happen:
|
||||
|
||||
* Open the MobBookUpdate project on NetBeans, located at "tools\MapleMobBookUpdate", and build it.
|
||||
* At the subfolder "lib", copy the file "MonsterBook.img.xml". This is from the original WZ v83.
|
||||
* Paste it on the "dist" subfolder.
|
||||
* Inside "dist", open the command prompt by alt+right clicking there.
|
||||
* Execute "java -jar MobBookUpdate.jar". It will generate a "MonsterBook_updated.img.xml" file.
|
||||
* At last, overwrite the "MonsterBook.img.xml" on "C:\Nexon\HeavenMS\wz\String.wz" with this file, renaming it back to "MonsterBook.img.xml".
|
||||
|
||||
At this point, **just the server-side** Monster Book has been updated with the current state of the database's drop data.
|
||||
|
||||
To **update the client as well**, open HaRepacker 4.2.2 and load "String.wz" from "C:\Nexon\MapleStory". Drop the "MonsterBook.img" node by removing it from the hierarchy tree, then import the server's "MonsterBook.img.xml".
|
||||
|
||||
**Note:** On this case, a server-to-client data transfer has been instanced. This kind of action **could cause** problems on the client-side if done unwary, however the nodes being updated on client-side and server-side provides no conflicts whatsoever, so this is fine. Remember, server-to-client data reimport may be problematic, whereas client-to-server data reimport is fine.
|
||||
|
||||
The client's WZ now has the proper item drops described by the DB updated into the MobBook drop list.
|
||||
|
||||
**Save the changes and overwrite the older WZ** on the MapleStory client folder.
|
||||
|
||||
---
|
||||
### Portforwarding the SERVER
|
||||
|
||||
@@ -288,7 +265,7 @@ The default login/password also varies, so use the link http://www.routerpasswor
|
||||
|
||||
Now you have logged in the router system, search for anything related to portforwarding. Should the system prompt you between portforwarding and portriggering, pick the first, it is what we will be using.
|
||||
|
||||
Now, it is needed to enable the right ports for the Internet. For MapleSolaxia, it is basically needed to open ports 7575 to 7575 + (number of channels) and port 8484. Create a new custom service which enables that range of ports for the server's channel and opt to use TCP/UDP protocols. Finally, create a custom service now for using port 8484.
|
||||
Now, it is needed to enable the right ports for the Internet. For Cosmic, it is basically needed to open ports 7575 to 7575 + (number of channels) and port 8484. Create a new custom service which enables that range of ports for the server's channel and opt to use TCP/UDP protocols. Finally, create a custom service now for using port 8484.
|
||||
|
||||
Optionally, if you want to host a webpage, portforward the port 80 (the HTTP port) as well.
|
||||
|
||||
@@ -297,3 +274,30 @@ It is not done yet, sometimes the firewalls will block connections between the L
|
||||
These rules must target "one application", "enable connections" and must target your MapleStory client (aka localhost).
|
||||
|
||||
After all these steps, the portforwarding process should now be complete.
|
||||
|
||||
---
|
||||
|
||||
### Client changelog
|
||||
The following list, in bottom-up chronological order,
|
||||
holds information regarding all changes that were applied from the starting localhost used in this development.
|
||||
Some lines have a link attached, that will lead you to a snapshot of the localhost at that version of the artifact.
|
||||
Naturally, later versions holds all previous changes along with the proposed changes.
|
||||
|
||||
**Change log:**
|
||||
|
||||
* Fixed Monster Magnet crashing the caster when trying to pull fixed mobs, credits to Shavit. https://gofile.io/?c=BW7dVM (dead link)
|
||||
* Cleared need for administrator privileges (OS) to play the game, credits to Ubaware.
|
||||
* Set a higher cap for AP assigning with AP Reset, credits to Ubaware.
|
||||
* Fixed Monster Magnet crashing the caster when trying to pull bosses. Drawback: Dojo HPBar becomes unavailable. https://hostr.co/SvnSKrGzXhG0
|
||||
* Fixed some 'rn' problems with quest icons & removed "tab" from party leader changed message. https://hostr.co/tsYsQzzV6xT0
|
||||
* Removed block on applying attack-based strengthening gems on non-weapon equipments. https://hostr.co/m2bVtnizCtmD
|
||||
* Set a higher cap for SPEED.
|
||||
* Removed the AP assigning block for beginners below level 10. https://hostr.co/AHAHzneCti9B
|
||||
* Removed block on party for beginners level 10 or below. https://hostr.co/JZq53mMtToCz
|
||||
* Removed block on MTS entering in some maps, rendering the buyback option available.
|
||||
* Removed "AP excess" popup and limited actions on Admin/MWLB, credits to kevintjuh93.
|
||||
* Removed "You've gained a level!" popup, credits to PrinceReborn.
|
||||
* Removed caps for WATK, WDEF, MDEF, ACC, AVOID.
|
||||
* 'n' problem fixed.
|
||||
* Fraysa's https://hostr.co/gJbLZITRVHmv
|
||||
* Eric's MapleSilver starting on window-mode.
|
||||
73
build.xml
73
build.xml
@@ -1,73 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<!-- By default, only the Clean and Build commands use this build script. -->
|
||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
|
||||
<!-- the Compile on Save feature is turned off for the project. -->
|
||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
||||
<!-- in the project's Project Properties dialog box.-->
|
||||
<project name="HeavenMS" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project HeavenMS.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
used for execution of your tasks. These targets are usually executed
|
||||
before and after some main targets. They are:
|
||||
|
||||
-pre-init: called before initialization of project properties
|
||||
-post-init: called after initialization of project properties
|
||||
-pre-compile: called before javac compilation
|
||||
-post-compile: called after javac compilation
|
||||
-pre-compile-single: called before javac compilation of single file
|
||||
-post-compile-single: called after javac compilation of single file
|
||||
-pre-compile-test: called before javac compilation of JUnit tests
|
||||
-post-compile-test: called after javac compilation of JUnit tests
|
||||
-pre-compile-test-single: called before javac compilation of single JUnit test
|
||||
-post-compile-test-single: called after javac compilation of single JUunit test
|
||||
-pre-jar: called before JAR building
|
||||
-post-jar: called after JAR building
|
||||
-post-clean: called after cleaning build products
|
||||
|
||||
(Targets beginning with '-' are not intended to be called on their own.)
|
||||
|
||||
Example of inserting an obfuscator after compilation could look like this:
|
||||
|
||||
<target name="-post-compile">
|
||||
<obfuscate>
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
</obfuscate>
|
||||
</target>
|
||||
|
||||
For list of available properties check the imported
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
|
||||
Another way to customize the build is by overriding existing main targets.
|
||||
The targets of interest are:
|
||||
|
||||
-init-macrodef-javac: defines macro for javac compilation
|
||||
-init-macrodef-junit: defines macro for junit execution
|
||||
-init-macrodef-debug: defines macro for class debugging
|
||||
-init-macrodef-java: defines macro for class execution
|
||||
-do-jar: JAR building
|
||||
run: execution of project
|
||||
-javadoc-build: Javadoc generation
|
||||
test-report: JUnit report generation
|
||||
|
||||
An example of overriding the target for project execution could look like this:
|
||||
|
||||
<target name="run" depends="HeavenMS-impl.jar">
|
||||
<exec dir="bin" executable="launcher.exe">
|
||||
<arg file="${dist.jar}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
Notice that the overridden target depends on the jar target and not only on
|
||||
the compile target as the regular run target does. Again, for a list of available
|
||||
properties which you can use, check the target you are overriding in the
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
-->
|
||||
</project>
|
||||
81
config.yaml
81
config.yaml
@@ -86,18 +86,18 @@ worlds:
|
||||
why_am_i_recommended: Welcome to Galicia!
|
||||
channels: 3
|
||||
|
||||
#Properties for El Nido 11
|
||||
#Properties for Kastia 11
|
||||
- flag: 0
|
||||
server_message: Welcome to El Nido!
|
||||
event_message: El Nido!
|
||||
why_am_i_recommended: Welcome to El Nido!
|
||||
server_message: Welcome to Kastia!
|
||||
event_message: Kastia!
|
||||
why_am_i_recommended: Welcome to Kastia!
|
||||
channels: 3
|
||||
|
||||
#Properties for Zenith 12
|
||||
#Properties for Judis 12
|
||||
- flag: 0
|
||||
server_message: Welcome to Zenith!
|
||||
event_message: Zenith!
|
||||
why_am_i_recommended: Welcome to Zenith!
|
||||
server_message: Welcome to Judis!
|
||||
event_message: Judis!
|
||||
why_am_i_recommended: Welcome to Judis!
|
||||
channels: 3
|
||||
|
||||
#Properties for Arcenia 13
|
||||
@@ -107,48 +107,48 @@ worlds:
|
||||
why_am_i_recommended: Welcome to Arcenia!
|
||||
channels: 3
|
||||
|
||||
#Properties for Kastia 14
|
||||
- flag: 0
|
||||
server_message: Welcome to Kastia!
|
||||
event_message: Kastia!
|
||||
why_am_i_recommended: Welcome to Kastia!
|
||||
channels: 3
|
||||
|
||||
#Properties for Judis 15
|
||||
- flag: 0
|
||||
server_message: Welcome to Judis!
|
||||
event_message: Judis!
|
||||
why_am_i_recommended: Welcome to Judis!
|
||||
channels: 3
|
||||
|
||||
#Properties for Plana 16
|
||||
#Properties for Plana 14
|
||||
- flag: 0
|
||||
server_message: Welcome to Plana!
|
||||
event_message: Plana!
|
||||
why_am_i_recommended: Welcome to Plana!
|
||||
channels: 3
|
||||
|
||||
#Properties for Kalluna 17
|
||||
#Properties for El Nido 15
|
||||
- flag: 0
|
||||
server_message: Welcome to El Nido!
|
||||
event_message: El Nido!
|
||||
why_am_i_recommended: Welcome to El Nido!
|
||||
channels: 3
|
||||
|
||||
#Properties for Kalluna 16
|
||||
- flag: 0
|
||||
server_message: Welcome to Kalluna!
|
||||
event_message: Kalluna!
|
||||
why_am_i_recommended: Welcome to Kalluna!
|
||||
channels: 3
|
||||
|
||||
#Properties for Stius 18
|
||||
#Properties for Stius 17
|
||||
- flag: 0
|
||||
server_message: Welcome to Stius!
|
||||
event_message: Stius!
|
||||
why_am_i_recommended: Welcome to Stius!
|
||||
channels: 3
|
||||
|
||||
#Properties for Croa 19
|
||||
#Properties for Croa 18
|
||||
- flag: 0
|
||||
server_message: Welcome to Croa!
|
||||
event_message: Croa!
|
||||
why_am_i_recommended: Welcome to Croa!
|
||||
channels: 3
|
||||
|
||||
#Properties for Zenith 19
|
||||
- flag: 0
|
||||
server_message: Welcome to Zenith!
|
||||
event_message: Zenith!
|
||||
why_am_i_recommended: Welcome to Zenith!
|
||||
channels: 3
|
||||
|
||||
#Properties for Medere 20
|
||||
- flag: 0
|
||||
server_message: Welcome to Medere!
|
||||
@@ -158,14 +158,12 @@ worlds:
|
||||
|
||||
|
||||
server:
|
||||
#Thread Tracker Configuration
|
||||
USE_THREAD_TRACKER: false #[SEVERE] This deadlock auditing thing will bloat the memory as fast as the time frame one takes to lose track of a raindrop on a tempesting day. Only for debugging purposes.
|
||||
|
||||
#Database Configuration
|
||||
DB_URL: "jdbc:mysql://localhost:3306/heavenms"
|
||||
DB_USER: "root"
|
||||
DB_PASS: ""
|
||||
DB_CONNECTION_POOL: true #Installs a connection pool to hub DB connections. Set false to default.
|
||||
DB_URL_FORMAT: "jdbc:mysql://%s:3306/cosmic"
|
||||
DB_HOST: "localhost"
|
||||
DB_USER: "cosmic_server"
|
||||
DB_PASS: "snailshell"
|
||||
INIT_CONNECTION_POOL_TIMEOUT: 90 # Seconds
|
||||
|
||||
#Login Configuration
|
||||
WORLDS: 1 #Initial number of worlds on the server.
|
||||
@@ -198,8 +196,9 @@ server:
|
||||
LOGIN_ATTEMPT_DURATION: 120 #Period in seconds the login attempt remains registered on the system.
|
||||
|
||||
#Ip Configuration
|
||||
HOST: 127.0.0.1
|
||||
LOCALSERVER: true
|
||||
HOST: 127.0.0.1 #WAN IPv4 address
|
||||
LANHOST: 127.0.0.1 #LAN IPv4 address
|
||||
LOCALHOST: 127.0.0.1 #Loopback IPv4 address
|
||||
GMSERVER: false
|
||||
|
||||
#Other configuration
|
||||
@@ -275,6 +274,7 @@ server:
|
||||
#Announcement Configuration
|
||||
USE_ANNOUNCE_SHOPITEMSOLD: false #Automatic message sent to owner when an item from the Player Shop or Hired Merchant is sold.
|
||||
USE_ANNOUNCE_CHANGEJOB: false #Automatic message sent to acquantainces when changing jobs.
|
||||
USE_ANNOUNCE_NX_COUPON_LOOT: false #Enables or disables the floating text when a player loots a NX card
|
||||
|
||||
#Cash Shop Configuration
|
||||
USE_JOINT_CASHSHOP_INVENTORY: false #Enables usage of a same cash shop inventory for explorers, cygnus and legends. Items from exclusive cash shop inventories won't show up on the shared inventory, though.
|
||||
@@ -304,7 +304,8 @@ server:
|
||||
PARTY_BONUS_EXP_RATE: 1.0 #Rate for the party exp bonus reward.
|
||||
|
||||
#Miscellaneous Configuration
|
||||
TIMEZONE: GMT-3
|
||||
TIMEZONE: GMT
|
||||
CHARSET: US-ASCII # Is loaded first, so applies to the rest of this config. Defaults to US-ASCII if invalid or not set.
|
||||
USE_DISPLAY_NUMBERS_WITH_COMMA: true #Enforce comma on displayed strings (use this when USE_UNITPRICE_WITH_COMMA is active and you still want to display comma-separated values).
|
||||
USE_UNITPRICE_WITH_COMMA: true #Set this accordingly with the layout of the unitPrices on Item.wz XML's, whether it's using commas or dots to represent fractions.
|
||||
MAX_MONITORED_BUFFSTATS: 5 #Limits accounting for "dormant" buff effects, that should take place when stronger stat buffs expires.
|
||||
@@ -317,6 +318,7 @@ server:
|
||||
NAME_CHANGE_COOLDOWN: 2592000000 # (30*24*60*60*1000) Cooldown for name changes, default (GMS) is 30 days.
|
||||
WORLD_TRANSFER_COOLDOWN: 2592000000 # (30*24*60*60*1000) Cooldown for world tranfers, default is same as name change (30 days).
|
||||
INSTANT_NAME_CHANGE: false #Whether or not to wait for server restart to apply name changes. Does on reconnect otherwise (requires queries on every login).
|
||||
REBIRTH_NPC_ID: 9010021 #ID of the NPC that should be replaced with the rebirth mechanic, if enabled.
|
||||
|
||||
#Dangling Items/Locks Configuration
|
||||
ITEM_EXPIRE_TIME: 180000 # (3 * 60 * 1000) Time before items start disappearing. Recommended to be set up to 3 minutes.
|
||||
@@ -328,7 +330,8 @@ server:
|
||||
ITEM_EXPIRE_CHECK: 10000 # (10 * 10000) Interval between item expiring tasks on maps, which checks and makes disappear expired items.
|
||||
ITEM_LIMIT_ON_MAP: 200 #Max number of items allowed on a map.
|
||||
MAP_VISITED_SIZE: 5 #Max length for last mapids visited by a player. This is used to recover and update drops on these maps accordingly with player actions.
|
||||
MAP_DAMAGE_OVERTIME_INTERVAL: 5000 #Interval in milliseconds between map environment damage (e.g. El Nath and Aqua Road surrondings).
|
||||
MAP_DAMAGE_OVERTIME_INTERVAL: 2500 #Interval in milliseconds between map environment damage (e.g. El Nath and Aqua Road surrondings).
|
||||
MAP_DAMAGE_OVERTIME_COUNT: 2
|
||||
|
||||
#Channel Mob Disease Monitor Configuration
|
||||
MOB_STATUS_MONITOR_PROC: 200 #Frequency in milliseconds between each proc on the mob disease monitor schedule.
|
||||
@@ -458,3 +461,7 @@ server:
|
||||
#Event End Timestamp
|
||||
EVENT_END_TIMESTAMP: 1428897600000
|
||||
|
||||
#Any NPC ids that should search for a js override script (useful if they already have wz entries since otherwise they're ignored).
|
||||
NPCS_SCRIPTABLE:
|
||||
#9200000: Talk to Cody # Cody
|
||||
9001105: Rescue Gaga! # Grandpa moon bunny
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3
database/docker-db-data/.gitignore
vendored
Normal file
3
database/docker-db-data/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*
|
||||
*/
|
||||
!.gitignore
|
||||
21502
database/sql/1-db_database.sql
Normal file
21502
database/sql/1-db_database.sql
Normal file
File diff suppressed because it is too large
Load Diff
24539
database/sql/2-db_drops.sql
Normal file
24539
database/sql/2-db_drops.sql
Normal file
File diff suppressed because it is too large
Load Diff
351
database/sql/3-db_shopupdate.sql
Normal file
351
database/sql/3-db_shopupdate.sql
Normal file
@@ -0,0 +1,351 @@
|
||||
#THIS SQL IS OPTIONAL, TO BE USED AFTER 'db_drops.sql'
|
||||
#THIS REQUIRES PROVIDED WZ FILES
|
||||
|
||||
USE `cosmic`;
|
||||
|
||||
# Scroll shop at Asia, chair shop at Kino Konoko, potion shop at T-1337
|
||||
INSERT INTO `shops` (`shopid`,`npcid`) VALUES
|
||||
(2082014,2082014),
|
||||
(9110002,9110002),
|
||||
(9201101,9201101);
|
||||
|
||||
INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`) VALUES
|
||||
(2082014, 2040004, 480000, 0, 1),
|
||||
(2082014, 2040025, 500000, 0, 2),
|
||||
(2082014, 2040029, 500000, 0, 3),
|
||||
(2082014, 2040017, 500000, 0, 4),
|
||||
(2082014, 2040301, 400000, 0, 5),
|
||||
(2082014, 2040317, 400000, 0, 6),
|
||||
(2082014, 2040321, 400000, 0, 7),
|
||||
(2082014, 2040413, 400000, 0, 8),
|
||||
(2082014, 2040418, 400000, 0, 9),
|
||||
(2082014, 2040501, 250000, 0, 10),
|
||||
(2082014, 2040513, 250000, 0, 11),
|
||||
(2082014, 2040516, 250000, 0, 12),
|
||||
(2082014, 2040532, 250000, 0, 13),
|
||||
(2082014, 2040613, 400000, 0, 14),
|
||||
(2082014, 2040701, 450000, 0, 15),
|
||||
(2082014, 2040704, 450000, 0, 16),
|
||||
(2082014, 2040707, 450000, 0, 17),
|
||||
(2082014, 2040804, 550000, 0, 18),
|
||||
(2082014, 2040817, 550000, 0, 19),
|
||||
(2082014, 2040914, 480000, 0, 20),
|
||||
(2082014, 2040919, 480000, 0, 21),
|
||||
(2082014, 2041007, 470000, 0, 22),
|
||||
(2082014, 2041010, 470000, 0, 23),
|
||||
(2082014, 2041013, 500000, 0, 24),
|
||||
(2082014, 2041016, 500000, 0, 25),
|
||||
(2082014, 2041019, 500000, 0, 26),
|
||||
(2082014, 2041022, 500000, 0, 27),
|
||||
(2082014, 2044901, 520000, 0, 28),
|
||||
(2082014, 2044701, 520000, 0, 29),
|
||||
(2082014, 2043001, 520000, 0, 30),
|
||||
(2082014, 2043801, 520000, 0, 31),
|
||||
(2082014, 2044601, 520000, 0, 32),
|
||||
(2082014, 2040727, 50000, 0, 33),
|
||||
(2082014, 2041058, 50000, 0, 34),
|
||||
(2082014, 2040807, 1000000, 0, 35),
|
||||
(2082014, 2040005, 22000, 0, 36),
|
||||
(2082014, 2040026, 23000, 0, 37),
|
||||
(2082014, 2040031, 23000, 0, 38),
|
||||
(2082014, 2040016, 23000, 0, 39),
|
||||
(2082014, 2040302, 25000, 0, 40),
|
||||
(2082014, 2040318, 25000, 0, 41),
|
||||
(2082014, 2040323, 25000, 0, 42),
|
||||
(2082014, 2040412, 20000, 0, 43),
|
||||
(2082014, 2040419, 20000, 0, 44),
|
||||
(2082014, 2040502, 25000, 0, 45),
|
||||
(2082014, 2040514, 25000, 0, 46),
|
||||
(2082014, 2040517, 25000, 0, 47),
|
||||
(2082014, 2040534, 25000, 0, 48),
|
||||
(2082014, 2040612, 20000, 0, 49),
|
||||
(2082014, 2040702, 20000, 0, 50),
|
||||
(2082014, 2040705, 25000, 0, 51),
|
||||
(2082014, 2040708, 20000, 0, 52),
|
||||
(2082014, 2040805, 100000, 0, 53),
|
||||
(2082014, 2040816, 100000, 0, 54),
|
||||
(2082014, 2040915, 55000, 0, 55),
|
||||
(2082014, 2040920, 55000, 0, 56),
|
||||
(2082014, 2041008, 38000, 0, 57),
|
||||
(2082014, 2041011, 38000, 0, 58),
|
||||
(2082014, 2041014, 40000, 0, 59),
|
||||
(2082014, 2041017, 40000, 0, 60),
|
||||
(2082014, 2041020, 40000, 0, 61),
|
||||
(2082014, 2041023, 40000, 0, 62),
|
||||
(2082014, 2044902, 50000, 0, 63),
|
||||
(2082014, 2044702, 50000, 0, 64),
|
||||
(2082014, 2043002, 50000, 0, 65),
|
||||
(2082014, 2043802, 50000, 0, 66),
|
||||
(2082014, 2044602, 50000, 0, 67),
|
||||
(2082014, 2049200, 170000, 0, 68),
|
||||
(2082014, 2049201, 220000, 0, 69),
|
||||
(2082014, 2049202, 170000, 0, 70),
|
||||
(2082014, 2049203, 220000, 0, 71),
|
||||
(2082014, 2049204, 170000, 0, 72),
|
||||
(2082014, 2049205, 220000, 0, 73),
|
||||
(2082014, 2049206, 170000, 0, 74),
|
||||
(2082014, 2049207, 220000, 0, 75),
|
||||
(2082014, 2049208, 140000, 0, 76),
|
||||
(2082014, 2049209, 170000, 0, 77),
|
||||
(2082014, 2049210, 140000, 0, 78),
|
||||
(2082014, 2049211, 170000, 0, 79),
|
||||
(2082014, 2040101, 540000, 0, 80),
|
||||
(2082014, 2040100, 700000, 0, 81),
|
||||
(2082014, 2040106, 540000, 0, 82),
|
||||
(2082014, 2040105, 700000, 0, 83),
|
||||
(2082014, 2040201, 540000, 0, 84),
|
||||
(2082014, 2040200, 700000, 0, 85),
|
||||
(2082014, 2040206, 540000, 0, 86),
|
||||
(2082014, 2040205, 700000, 0, 87),
|
||||
(2082014, 2070016, 120000000, 0, 88),
|
||||
(2082014, 2070018, 190000000, 0, 89),
|
||||
(2082014, 2030007, 1800000, 0, 90),
|
||||
(2082014, 4001017, 60000000, 0, 91);
|
||||
|
||||
UPDATE shopitems SET price = 11*price WHERE (`position` >= 33 and `position` <= 79 and `shopid` = 2082014);
|
||||
|
||||
INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`) VALUES
|
||||
(1031100, 3010015, 20000, 0, 100),
|
||||
(9110002, 3010019, 7700000, 0, 92),
|
||||
(9110002, 3010008, 10000000, 0, 96),
|
||||
(9110002, 3010007, 10000000, 0, 100),
|
||||
(9201020, 3010009, 4200000, 0, 96),
|
||||
(9201020, 3010014, 7000000, 0, 100),
|
||||
(1081000, 3010013, 4000000, 0, 100),
|
||||
(9201101, 2022338, 2100000, 0, 100),
|
||||
(9201101, 2022339, 2800000, 0, 104),
|
||||
(9201101, 2022340, 4000000, 0, 108),
|
||||
(9201101, 2022341, 2800000, 0, 112),
|
||||
(9201101, 2022342, 2000000, 0, 116),
|
||||
(9201101, 2022343, 4700000, 0, 120),
|
||||
(9201101, 2022344, 5000000, 0, 124),
|
||||
(9201101, 2022345, 4000000, 0, 128),
|
||||
(9201101, 2002028, 5000000, 0, 132),
|
||||
(9201101, 2022544, 100000, 0, 136),
|
||||
(9201101, 2022545, 4400000, 0, 140),
|
||||
(9201101, 2020027, 2100000, 0, 144),
|
||||
(9201101, 2022113, 1800000, 0, 148),
|
||||
(9201101, 2022121, 12000000, 0, 152),
|
||||
(9201101, 2022123, 12000000, 0, 156),
|
||||
(9201101, 2022277, 5300000, 0, 160),
|
||||
(9201101, 2012008, 4200000, 0, 164),
|
||||
(9201101, 2022251, 3800000, 0, 168);
|
||||
|
||||
# adding antibanish scrolls
|
||||
INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`) VALUES
|
||||
(1001100, 2030100, 450, 0, 130),
|
||||
(1011100, 2030100, 450, 0, 142),
|
||||
(1021100, 2030100, 450, 0, 142),
|
||||
(1031100, 2030100, 450, 0, 146),
|
||||
(1051002, 2030100, 450, 0, 142),
|
||||
(1052116, 2030100, 450, 0, 118),
|
||||
(1061001, 2030100, 450, 0, 126),
|
||||
(1061002, 2030100, 450, 0, 130),
|
||||
(1091002, 2030100, 450, 0, 130),
|
||||
(1100002, 2030100, 450, 0, 138),
|
||||
(2012005, 2030100, 450, 0, 126),
|
||||
(2022001, 2030100, 450, 0, 126),
|
||||
(2030009, 2030100, 450, 0, 126),
|
||||
(2040051, 2030100, 450, 0, 102),
|
||||
(2041006, 2030100, 450, 0, 134),
|
||||
(2051000, 2030100, 450, 0, 134),
|
||||
(2060004, 2030100, 450, 0, 134),
|
||||
(2070001, 2030100, 450, 0, 134),
|
||||
(2080001, 2030100, 450, 0, 134),
|
||||
(2090003, 2030100, 450, 0, 126),
|
||||
(2093002, 2030100, 450, 0, 126),
|
||||
(2100004, 2030100, 450, 0, 130),
|
||||
(2110001, 2030100, 450, 0, 130),
|
||||
(2130000, 2030100, 450, 0, 126),
|
||||
(9201060, 2030100, 450, 0, 114),
|
||||
(9270021, 2030100, 450, 0, 118),
|
||||
(9270022, 2030100, 450, 0, 114), -- Thanks Rednor for finding duplicate item on NPC
|
||||
(1338, 2030100, 450, 0, 114),
|
||||
(9270057, 2030100, 450, 0, 4),
|
||||
(9270065, 2030100, 450, 0, 3);
|
||||
|
||||
-- Thanks to Vcoc
|
||||
-- GMShop: Sacks, GmEquip, Cheese & Onyx, Utils,
|
||||
-- Arrows, Bullets, Throwings and Capsules,
|
||||
-- Others, Equips, Mounts, Scrolls.
|
||||
|
||||
DELETE FROM `shopitems` WHERE `shopid`=1337;
|
||||
INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `position`) VALUES
|
||||
(1337, 2100036, 1, 1),
|
||||
(1337, 2100035, 1, 2),
|
||||
(1337, 2100034, 1, 3),
|
||||
(1337, 2100033, 1, 4),
|
||||
(1337, 2100007, 1, 5),
|
||||
(1337, 2100006, 1, 6),
|
||||
(1337, 2100005, 1, 7),
|
||||
(1337, 2100004, 1, 8),
|
||||
(1337, 2100003, 1, 9),
|
||||
(1337, 2100002, 1, 10),
|
||||
(1337, 2100001, 1, 11),
|
||||
(1337, 1002959, 1, 12),
|
||||
(1337, 1002140, 1, 13),
|
||||
(1337, 1042003, 1, 14),
|
||||
(1337, 1062007, 1, 15),
|
||||
(1337, 1322013, 1, 16),
|
||||
(1337, 1072010, 1, 17),
|
||||
(1337, 2022179, 1, 18),
|
||||
(1337, 2022273, 1, 19),
|
||||
(1337, 2041200, 1, 20),
|
||||
(1337, 4006001, 1, 21),
|
||||
(1337, 4001017, 1, 22),
|
||||
(1337, 4031179, 1, 23),
|
||||
(1337, 2070018, 1, 24),
|
||||
(1337, 2060004, 1, 25),
|
||||
(1337, 2061004, 1, 26),
|
||||
(1337, 2330005, 1, 27),
|
||||
(1337, 2332000, 1, 28),
|
||||
(1337, 2331000, 1, 29),
|
||||
(1337, 5072000, 1, 30),
|
||||
(1337, 5390000, 1, 31),
|
||||
(1337, 5390001, 1, 32),
|
||||
(1337, 5390002, 1, 33),
|
||||
(1337, 5390005, 1, 34),
|
||||
(1337, 5390006, 1, 35),
|
||||
(1337, 1492013, 1, 36),
|
||||
(1337, 1482013, 1, 37),
|
||||
(1337, 1452044, 1, 38),
|
||||
(1337, 1472052, 1, 39),
|
||||
(1337, 1462039, 1, 40),
|
||||
(1337, 1332050, 1, 41),
|
||||
(1337, 1312031, 1, 42),
|
||||
(1337, 1322052, 1, 43),
|
||||
(1337, 1302059, 1, 44),
|
||||
(1337, 1442045, 1, 45),
|
||||
(1337, 1432038, 1, 46),
|
||||
(1337, 1382036, 1, 47),
|
||||
(1337, 1412026, 1, 48),
|
||||
(1337, 1422028, 1, 49),
|
||||
(1337, 1402036, 1, 50),
|
||||
(1337, 1372032, 1, 51),
|
||||
(1337, 1122000, 1, 52),
|
||||
(1337, 1082149, 1, 53),
|
||||
(1337, 1912000, 1, 54),
|
||||
(1337, 1902000, 1, 55),
|
||||
(1337, 1902001, 1, 56),
|
||||
(1337, 1902002, 1, 57),
|
||||
(1337, 1912005, 1, 58),
|
||||
(1337, 1902005, 1, 59),
|
||||
(1337, 1902006, 1, 60),
|
||||
(1337, 1902007, 1, 61),
|
||||
(1337, 1912011, 1, 62),
|
||||
(1337, 1902015, 1, 63),
|
||||
(1337, 1902016, 1, 64),
|
||||
(1337, 1902017, 1, 65),
|
||||
(1337, 1902018, 1, 66),
|
||||
(1337, 2044908, 1, 67),
|
||||
(1337, 2044815, 1, 68),
|
||||
(1337, 2044512, 1, 69),
|
||||
(1337, 2044712, 1, 70),
|
||||
(1337, 2044612, 1, 71),
|
||||
(1337, 2043312, 1, 72),
|
||||
(1337, 2043117, 1, 73),
|
||||
(1337, 2043217, 1, 74),
|
||||
(1337, 2043023, 1, 75),
|
||||
(1337, 2044417, 1, 76),
|
||||
(1337, 2044317, 1, 77),
|
||||
(1337, 2043812, 1, 78),
|
||||
(1337, 2044117, 1, 79),
|
||||
(1337, 2044217, 1, 80),
|
||||
(1337, 2044025, 1, 81),
|
||||
(1337, 2043712, 1, 82),
|
||||
(1337, 2340000, 1, 83),
|
||||
(1337, 2040807, 1, 84),
|
||||
(1337, 2210032, 1, 85),
|
||||
(1337, 2050004, 1, 86);
|
||||
|
||||
-- Thanks to DietStory v1.02 dev team
|
||||
INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `pitch`, `position`) VALUES
|
||||
(1200001, 3010001, 1000, 0, 1),
|
||||
(1200001, 1092003, 2000, 0, 2),
|
||||
(1200001, 1072063, 10000, 0, 3),
|
||||
(1200001, 1072062, 10000, 0, 4),
|
||||
(1200001, 1072017, 10000, 0, 5),
|
||||
(1200001, 1072049, 5000, 0, 6),
|
||||
(1200001, 1072048, 5000, 0, 7),
|
||||
(1200001, 1072008, 5000, 0, 8),
|
||||
(1200001, 1072005, 50, 0, 9),
|
||||
(1200001, 1072038, 50, 0, 10),
|
||||
(1200001, 1072037, 50, 0, 11),
|
||||
(1200001, 1072001, 50, 0, 12),
|
||||
(1200001, 1062001, 4800, 0, 13),
|
||||
(1200001, 1062000, 4800, 0, 14),
|
||||
(1200001, 1060004, 2800, 0, 15),
|
||||
(1200001, 1060007, 1000, 0, 16),
|
||||
(1200001, 1041012, 3000, 0, 17),
|
||||
(1200001, 1041004, 3000, 0, 18),
|
||||
(1200001, 1040014, 3000, 0, 19),
|
||||
(1200001, 1040013, 3000, 0, 20),
|
||||
(1200001, 1002001, 3000, 0, 21),
|
||||
(1200001, 1002019, 2000, 0, 22),
|
||||
(1200001, 1002134, 800, 0, 23),
|
||||
(1200001, 1002133, 800, 0, 24),
|
||||
(1200001, 1002132, 800, 0, 25),
|
||||
(1200001, 1002069, 450, 0, 26),
|
||||
(1200001, 1002068, 450, 0, 27),
|
||||
(1200001, 1002067, 450, 0, 28),
|
||||
(1200001, 1002066, 450, 0, 29),
|
||||
(1200001, 1002014, 1000, 0, 30),
|
||||
(1200001, 1002008, 500, 0, 31),
|
||||
(1200001, 1332007, 1000, 0, 32),
|
||||
(1200001, 1312000, 3000, 0, 33),
|
||||
(1200001, 1302007, 3000, 0, 34),
|
||||
(1200001, 1322005, 50, 0, 35),
|
||||
(1200001, 1312004, 50, 0, 36),
|
||||
(1200001, 1302000, 50, 0, 37),
|
||||
(1200002, 2330000, 600, 0, 104),
|
||||
(1200002, 2070000, 500, 0, 108),
|
||||
(1200002, 2061000, 1, 0, 120),
|
||||
(1200002, 2060000, 1, 0, 124),
|
||||
(1200002, 2030100, 400, 0, 128),
|
||||
(1200002, 2030000, 400, 0, 132),
|
||||
(1200002, 2020028, 3000, 0, 136),
|
||||
(1200002, 2010004, 310, 0, 140),
|
||||
(1200002, 2010003, 100, 0, 144),
|
||||
(1200002, 2010001, 106, 0, 148),
|
||||
(1200002, 2010002, 50, 0, 152),
|
||||
(1200002, 2010000, 30, 0, 156),
|
||||
(1200002, 2002005, 500, 0, 160),
|
||||
(1200002, 2002004, 500, 0, 164),
|
||||
(1200002, 2002002, 500, 0, 168),
|
||||
(1200002, 2002001, 400, 0, 172),
|
||||
(1200002, 2002000, 500, 0, 176),
|
||||
(1200002, 2000006, 620, 0, 180),
|
||||
(1200002, 2000003, 200, 0, 184),
|
||||
(1200002, 2000002, 320, 0, 188),
|
||||
(1200002, 2000001, 160, 0, 192),
|
||||
(1200002, 2000000, 50, 0, 196),
|
||||
(1301000, 2330000, 600, 0, 104),
|
||||
(1301000, 2070000, 500, 0, 108),
|
||||
(1301000, 2061000, 1, 0, 112),
|
||||
(1301000, 2060000, 1, 0, 116),
|
||||
(1301000, 2030100, 400, 0, 120),
|
||||
(1301000, 2030000, 400, 0, 124),
|
||||
(1301000, 2022000, 1650, 0, 128),
|
||||
(1301000, 2022003, 1100, 0, 132),
|
||||
(1301000, 2002005, 500, 0, 136),
|
||||
(1301000, 2002004, 500, 0, 140),
|
||||
(1301000, 2002002, 500, 0, 144),
|
||||
(1301000, 2002001, 400, 0, 148),
|
||||
(1301000, 2002000, 500, 0, 152),
|
||||
(1301000, 2000006, 620, 0, 156),
|
||||
(1301000, 2000003, 200, 0, 160),
|
||||
(1301000, 2000002, 320, 0, 164),
|
||||
(1301000, 2000015, 160, 0, 168),
|
||||
(1301000, 2000000, 50, 0, 172);
|
||||
|
||||
# adding missing pirate items at Singapore npc's
|
||||
INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `pitch`, `position`) VALUES
|
||||
(9270019, 1492006, 160000, 0, 80),
|
||||
(9270019, 1492005, 100000, 0, 84),
|
||||
(9270019, 1492004, 75000, 0, 88),
|
||||
(9270019, 1482006, 150000, 0, 92),
|
||||
(9270019, 1482005, 100000, 0, 96),
|
||||
(9270019, 1482004, 75000, 0, 100),
|
||||
(9270020, 1052113, 120000, 0, 92),
|
||||
(9270020, 1052110, 100000, 0, 96),
|
||||
(9270020, 1002625, 75000, 0, 100);
|
||||
87
database/sql/4-db-admin.sql
Normal file
87
database/sql/4-db-admin.sql
Normal file
@@ -0,0 +1,87 @@
|
||||
-- MySQL dump 10.13 Distrib 8.0.22, for Win64 (x86_64)
|
||||
--
|
||||
-- Host: 127.0.0.1 Database: cosmic
|
||||
-- ------------------------------------------------------
|
||||
-- Server version 8.0.19
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!50503 SET NAMES utf8 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
USE `cosmic`;
|
||||
|
||||
--
|
||||
-- Dumping data for table `accounts`
|
||||
--
|
||||
|
||||
LOCK TABLES `accounts` WRITE;
|
||||
/*!40000 ALTER TABLE `accounts` DISABLE KEYS */;
|
||||
INSERT INTO `accounts` VALUES (1,'admin','$2y$12$aFD9BDeUocDMY1X4tDYDyeJw/HhkQwCQWs3KAY7gCaRG0cpqJcaL.','0000','000000',0,'2021-05-24 00:00:01','2021-05-24 00:00:02','2005-05-11',0,NULL,NULL,1000000,1000000,1000000,3,0,'2005-05-11 03:00:00',0,1,NULL,0,NULL,0,NULL,NULL,0,0,'1234-5678',2);
|
||||
/*!40000 ALTER TABLE `accounts` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Dumping data for table `characters`
|
||||
--
|
||||
|
||||
LOCK TABLES `characters` WRITE;
|
||||
/*!40000 ALTER TABLE `characters` DISABLE KEYS */;
|
||||
INSERT INTO `characters` VALUES (1,1,0,'Admin',1,0,0,12,5,4,4,50,5,50,5,0,0,0,0,0,0,0,30030,20000,0,'0,0,0,0,0,0,0,0,0,0',10000,2,6,-1,25,'2021-05-24 00:00:03',1,0,1,0,0,5,0,4,1,0,0,0,0,0,0,0,0,0,0,24,24,24,24,-1,0,5,0,0,0,0,0,0,0,0,0,0,0,'','2021-05-24 00:00:04','2015-01-01 05:00:00',1,0);
|
||||
/*!40000 ALTER TABLE `characters` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Dumping data for table `inventoryequipment`
|
||||
--
|
||||
|
||||
LOCK TABLES `inventoryequipment` WRITE;
|
||||
/*!40000 ALTER TABLE `inventoryequipment` DISABLE KEYS */;
|
||||
INSERT INTO `inventoryequipment` VALUES (17,22,7,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,1,0,-1),(18,23,7,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,-1),(19,24,5,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,-1),(20,25,7,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,1,0,-1);
|
||||
/*!40000 ALTER TABLE `inventoryequipment` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Dumping data for table `inventoryitems`
|
||||
--
|
||||
|
||||
LOCK TABLES `inventoryitems` WRITE;
|
||||
/*!40000 ALTER TABLE `inventoryitems` DISABLE KEYS */;
|
||||
INSERT INTO `inventoryitems` VALUES (21,1,1,NULL,4161001,4,1,1,'',-1,0,-1,''),(22,1,1,NULL,1040002,-1,-5,1,'',-1,0,-1,''),(23,1,1,NULL,1060002,-1,-6,1,'',-1,0,-1,''),(24,1,1,NULL,1072001,-1,-7,1,'',-1,0,-1,''),(25,1,1,NULL,1302000,-1,-11,1,'',-1,0,-1,'');
|
||||
/*!40000 ALTER TABLE `inventoryitems` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Dumping data for table `keymap`
|
||||
--
|
||||
|
||||
LOCK TABLES `keymap` WRITE;
|
||||
/*!40000 ALTER TABLE `keymap` DISABLE KEYS */;
|
||||
INSERT INTO `keymap` VALUES (161,1,18,4,0),(162,1,65,6,106),(163,1,2,4,10),(164,1,23,4,1),(165,1,3,4,12),(166,1,4,4,13),(167,1,5,4,18),(168,1,6,4,24),(169,1,16,4,8),(170,1,17,4,5),(171,1,19,4,4),(172,1,25,4,19),(173,1,26,4,14),(174,1,27,4,15),(175,1,31,4,2),(176,1,34,4,17),(177,1,35,4,11),(178,1,37,4,3),(179,1,38,4,20),(180,1,40,4,16),(181,1,43,4,9),(182,1,44,5,50),(183,1,45,5,51),(184,1,46,4,6),(185,1,50,4,7),(186,1,56,5,53),(187,1,59,6,100),(188,1,60,6,101),(189,1,61,6,102),(190,1,62,6,103),(191,1,63,6,104),(192,1,64,6,105),(193,1,57,5,54),(194,1,48,4,22),(195,1,29,5,52),(196,1,7,4,21),(197,1,24,4,25),(198,1,33,4,26),(199,1,41,4,23),(200,1,39,4,27);
|
||||
/*!40000 ALTER TABLE `keymap` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Dumping data for table `storages`
|
||||
--
|
||||
|
||||
LOCK TABLES `storages` WRITE;
|
||||
/*!40000 ALTER TABLE `storages` DISABLE KEYS */;
|
||||
INSERT INTO `storages` VALUES (1,1,0,4,0);
|
||||
/*!40000 ALTER TABLE `storages` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
6
database/sql/migration/monsterbook.sql
Normal file
6
database/sql/migration/monsterbook.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
/* Manually run this script in MySQL Workbench or some other database client
|
||||
to migrate your old (pre Jan 19th 2022) monsterbook table to the new version */
|
||||
ALTER TABLE cosmic.`monsterbook`
|
||||
CHANGE COLUMN `charid` `charid` INT(11) NOT NULL,
|
||||
ADD PRIMARY KEY (`charid`, `cardid`),
|
||||
ADD CONSTRAINT `FK_monsterbook_1` FOREIGN KEY (`charid`) REFERENCES `characters` (`id`) ON UPDATE CASCADE ON DELETE CASCADE;
|
||||
7
database/sql/readme.txt
Normal file
7
database/sql/readme.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
---- Cosmic MySQL Database ----
|
||||
|
||||
These SQL files must be executed IN ORDER to set up the database:
|
||||
- 1-db_database.sql (Tables and some data)
|
||||
- 2-db_drops.sql (Remaining data: monster drops, reactor drops)
|
||||
- 3-db_shopupdate.sql (Custom shops - optional, requires provided WZs)
|
||||
- 4-db_admin (Basic admin account - optional)
|
||||
@@ -1,20 +1,32 @@
|
||||
version: '3'
|
||||
services:
|
||||
maplestory:
|
||||
network_mode: "host"
|
||||
build: .
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
# Login server
|
||||
- "8484:8484"
|
||||
# Channels.
|
||||
# Format: WWCC, where WW is 75 plus the world number and CC is 75 plus the channel number (both zero indexed).
|
||||
# In this case, world 1 channels 1-3.
|
||||
- "7575-7577:7575-7577"
|
||||
volumes:
|
||||
# Config changes can be reloaded without rebuilding the image.
|
||||
# Still requires a redeployment as they're sourced on startup.
|
||||
- ./config.yaml:/opt/server/config.yaml
|
||||
- ./scripts:/opt/server/scripts
|
||||
- ./wz:/opt/server/wz
|
||||
environment:
|
||||
WAIT_HOSTS: localhost:3306
|
||||
DB_HOST: "db"
|
||||
|
||||
db:
|
||||
network_mode: "host"
|
||||
image: mysql:5.6
|
||||
image: mysql:8.0.23
|
||||
environment:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||
MYSQL_DATABASE: "heavenms"
|
||||
MYSQL_USER: "root"
|
||||
MYSQL_PASSWORD: ""
|
||||
MYSQL_RANDOM_ROOT_PASSWORD: "true"
|
||||
MYSQL_DATABASE: "cosmic"
|
||||
MYSQL_USER: "cosmic_server"
|
||||
MYSQL_PASSWORD: "snailshell"
|
||||
volumes:
|
||||
- ./sql:/docker-entrypoint-initdb.d
|
||||
- ./database/docker-db-data:/var/lib/mysql
|
||||
- ./database/sql:/docker-entrypoint-initdb.d
|
||||
|
||||
@@ -23,7 +23,7 @@ P.S.:
|
||||
|
||||
Yeah, these explanations are pretty simplistic, I know. If one really wants to
|
||||
compare the original v83 WZ with the ones I provided, I recommend do the following:
|
||||
- Open HaRepacker and, for each HeavenMS's WZ file, extract all the XMLs
|
||||
- Open HaRepacker and, for each Cosmic's WZ file, extract all the XMLs
|
||||
for "Private Server".
|
||||
- Now, install MapleStory from "ManagerMsv83.exe" on an other folder and do the
|
||||
same procediment said above.
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
5160006 - Sparkling Eyes - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character display sparkling eyes.
|
||||
5160007 - Flaming - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character display the look of rage.
|
||||
5160008 - Ray - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character display beaming eyes.
|
||||
5160009 - Goo Goo - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character display the look of “awesome!!!”
|
||||
5160009 - Goo Goo - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character display the look of <EFBFBD>awesome!!!<EFBFBD>
|
||||
5160010 - Whoa Whoa - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character display the look of being flustered.
|
||||
5160011 - Constant Sigh - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character display the thinking look.
|
||||
5160012 - Drool - On the KeyConfig, configure this expression on a button of your choice. Press the button and watch your character act like falling asleep.
|
||||
@@ -479,9 +479,9 @@
|
||||
5610001 - Vega's Spell(60%) - This winning spell from Vega enables a 90% success rate on a 60% scroll. Please check the scroll description to confirm that Vega's Spell is available for the scroll you choose.
|
||||
5590000 - High-Five Stamp - Can equip items that are 5 levels above your current level.
|
||||
5021026 - Gift Box Throwing Stars - A gift box that can be freely thrown around. Using the #cThrowing Star# will create an orbital effect.\n\nThis item cannot be deleted.
|
||||
5010073 - Miss Popular - Well, lookie here. Someone’s certainly become popular with the guys. Turn this effect on and off by assigning it to a shortcut key from the keyboard settings menu.
|
||||
5010073 - Miss Popular - Well, lookie here. Someone<EFBFBD>s certainly become popular with the guys. Turn this effect on and off by assigning it to a shortcut key from the keyboard settings menu.
|
||||
|
||||
5010074 - Mr. Popular - Well, lookie here. Someone’s certainly become popular with the girls. Turn this effect on and off by assigning it to a shortcut key from the keyboard settings menu.
|
||||
5010074 - Mr. Popular - Well, lookie here. Someone<EFBFBD>s certainly become popular with the girls. Turn this effect on and off by assigning it to a shortcut key from the keyboard settings menu.
|
||||
|
||||
5240027 - Golden Drumstick - A drumstick that can be consumed only by #cBaby Tiger#. It recovers hunger and #cincreases Closeness by 100.#
|
||||
5390005 - Cute Tiger Messenger - Shout to everyone in the world your character is on with this megaphone. Now available with your avatar on the top of everyone's screen! Comes with a tiger background for your avatar.
|
||||
|
||||
@@ -1779,8 +1779,8 @@
|
||||
4032103 - The Lost Treasure - The lost treasure that was stolen by the Master of Disguise who brazenly entered Ereve. Let's take it back to Irena.
|
||||
4032104 - The Lost Treasure - The lost treasure that was stolen by the Master of Disguise who brazenly entered Ereve. Let's take it back to Eckhart.
|
||||
4032105 - The Lost Treasure - The lost treasure that was stolen by the Master of Disguise who brazenly entered Ereve. Let's take it back to Hawkeye.
|
||||
4000209 - Co-ke Slime’s Bell - The bell of Co-ke Slime that has been taken off.
|
||||
4000210 - Co-ke Pig’s Ribbon - A piece of Co-ke Pig’s ribbon.
|
||||
4000209 - Co-ke Slime<EFBFBD>s Bell - The bell of Co-ke Slime that has been taken off.
|
||||
4000210 - Co-ke Pig<EFBFBD>s Ribbon - A piece of Co-ke Pig<EFBFBD>s ribbon.
|
||||
4000211 - Coca-Cola Cube - A cube with a drawing of a Coca-Cola bottle on it.
|
||||
4000212 - CokePLAY Cube - A cube with the CokePLAY symbol.
|
||||
4000213 - Coca-Cola Card - A card with a drawing of Coca-Cola.
|
||||
@@ -1802,10 +1802,10 @@
|
||||
4001151 - Happy Valley - Happy Valley
|
||||
4001152 - Ariant - Ariant
|
||||
4001153 - Magatia - Magatia
|
||||
4031832 - Sophelia’s Portrait - A portrait of Sophelia.
|
||||
4031832 - Sophelia<EFBFBD>s Portrait - A portrait of Sophelia.
|
||||
4031833 - Pumpkin Juice - A juice made with pumpkin. It is very fragrant.
|
||||
4031834 - Perfect Tool - The most perfect tool for making dolls.
|
||||
4031835 - Lyudmilla’s Earring - The earrings that Lyudmilla lost. They shine with brilliance.
|
||||
4031835 - Lyudmilla<EFBFBD>s Earring - The earrings that Lyudmilla lost. They shine with brilliance.
|
||||
4031836 - Score - The score that Lyudmilla asked for. No one knows what kind of music is in it.
|
||||
4031837 - Dumped Doll - A doll that Sophelia used to cherish a long time ago. She threw it away when she got a new doll.
|
||||
4031838 - Piece of Cloth - A small piece of cloth. If you drag and drop it onto the rag doll, the doll will be completed bit by bit.
|
||||
@@ -1893,26 +1893,26 @@
|
||||
4032127 - Proof of Ability - The Proof of Ability that is required to learn a new skill. This proof signifies that you are ready to learn a new skill.
|
||||
4032128 - Proof of Ability - The Proof of Ability that is required to learn a new skill. This proof signifies that you are ready to learn a new skill.
|
||||
4032129 - Proof of Ability - The Proof of Ability that is required to learn a new skill. This proof signifies that you are ready to learn a new skill.
|
||||
4032130 - Pig Doll - An adorable doll that resembles a pig. However, something doesn't seem right…
|
||||
4032131 - Pig Doll - An adorable doll that resembles a pig. However, something doesn't seem right…
|
||||
4032130 - Pig Doll - An adorable doll that resembles a pig. However, something doesn't seem right<EFBFBD>
|
||||
4032131 - Pig Doll - An adorable doll that resembles a pig. However, something doesn't seem right<EFBFBD>
|
||||
4032132 - Roca's Mission Report - A mission report written by Roca, the Agent for Henesys. This compiles a list of events that have taken place recently.
|
||||
4032136 - Bubbling Doll - An adorable doll that was designed based on Bubbling, but something doesn't seem right. The way it smiles just seems a bit off, as if it has hidden agenda.
|
||||
4032137 - Bubbling Doll - An adorable doll that was designed based on Bubbling, but something doesn't seem right. The way it smiles just seems a bit off, as if it has hidden agenda.
|
||||
4032138 - Bubbling Doll - An adorable doll that was designed based on Bubbling, but something doesn't seem right. It's in…tears.
|
||||
4032138 - Bubbling Doll - An adorable doll that was designed based on Bubbling, but something doesn't seem right. It's in<EFBFBD>tears.
|
||||
4032139 - Old Key - An old, rusty key that Mr. Pickall has been looking for.
|
||||
4032140 - Bubbling Doll - An adorable doll that was designed based on Bubbling, but something doesn't seem right. It's in…tears.
|
||||
4032140 - Bubbling Doll - An adorable doll that was designed based on Bubbling, but something doesn't seem right. It's in<EFBFBD>tears.
|
||||
4032141 - Mattias' Mission Report - A mission report written by Roca, the Agent for Kerning City. This compiles a list of events that have taken place recently.
|
||||
4032142 - Clear Tree Sap - A clear tree sap that can only be found at the very top of the skyscraping trees. Accompanied by the freshest green scent.
|
||||
4032143 - Fruit - A fruit picked from plants near Henesys.
|
||||
4032144 - Hersha's Mission Report - A mission report written by Hersha, the Agent for Ellinia. This compiles a list of events that have taken place recently.
|
||||
4032145 - Detector - A detector made to detect any forces of darkness. Take this to the 10 Boogies.
|
||||
4032146 - Wooden Mask Doll - An adorable doll modeled after the Wooden Mask, but something doesn't seem right…
|
||||
4032147 - Rocky Mask Doll - An adorable doll modeled after the Stone Mask, but something doesn't seem right…
|
||||
4032146 - Wooden Mask Doll - An adorable doll modeled after the Wooden Mask, but something doesn't seem right<EFBFBD>
|
||||
4032147 - Rocky Mask Doll - An adorable doll modeled after the Stone Mask, but something doesn't seem right<EFBFBD>
|
||||
4032148 - Detector - A detector created with the sole purpose of detecting the Puppeteer's movements. We put it to good use, so let's return it to Neinheart.
|
||||
4032149 - 10 Boogies' Mission Report - A mission report written by 10 Boogies, the Agents for Perion. This compiles a list of events that have taken place recently.
|
||||
4032178 - Hack Attempt - A record that shows that Chief Grays tried to hack into the system.
|
||||
4032179 - Ereve Investigation Permit - A permitt that allows one to investigate every part of Ereve. When the Red Alert is on, this permit is the only way you can roam freely around Ereve.
|
||||
4032190 - Orange Mushroom Doll - An adorable doll modeled after the Orange Mushroom, but something doesn't seem right…
|
||||
4032190 - Orange Mushroom Doll - An adorable doll modeled after the Orange Mushroom, but something doesn't seem right<EFBFBD>
|
||||
4032196 - Concentrated Formula: Step 1 - A formula concentrated with effective and potent ingredients. The first formula used to raise Mimiana and Mimio
|
||||
4032197 - Concentrated Formula: Step 2 - A formula concentrated with effective and potent ingredients. The second formula used to raise Mimiana and Mimio.
|
||||
4032198 - Concentrated Formula: Step 3 - A formula concentrated with effective and potent ingredients. The third formula used to raise Mimiana and Mimio.
|
||||
@@ -2048,16 +2048,16 @@
|
||||
4032270 - Glistening Sunlight - Glistening sunlight filled with the feeling of spring.
|
||||
4032271 - Pure Small Sprout - A fragrant new sprout filled with the energies of spring. Used as an ingredient for Pure Perfume.
|
||||
4032272 - Stationery of Longing - Pink stationary that's rumored to return a favorable response if used to send a letter to a secret crush.
|
||||
4032273 - Pencil of Courage X 10 - A pencil that's used to write things you don’t have the courage to say.
|
||||
4032273 - Pencil of Courage X 10 - A pencil that's used to write things you don<EFBFBD>t have the courage to say.
|
||||
4032275 - Pure Normal Sprout - A fragrant new sprout filled with the energies of spring. Used as an ingredient for Pure Perfume.
|
||||
4032276 - Pure Sprout - A fragrant new sprout filled with the energies of spring. Used as an ingredient for Pure Perfume.
|
||||
4032277 - Pure Large Sprout - A fragrant new sprout filled with the energies of spring. Used as an ingredient for Pure Perfume.
|
||||
4032278 - Stationery of Deep Longing - Pink stationary that's rumored to return a favorable response if used to send a letter to a secret crush.
|
||||
4032279 - Stationary of Hope and Longing - Pink stationary that's rumored to return a favorable response if used to send a letter to a secret crush.
|
||||
4032280 - Letter of Love and Longing - Pink stationary that's rumored to return a favorable response if used to send a letter to a secret crush.
|
||||
4032281 - Pencil of Courage X 100 - A pencil that's used to write things you don’t have the courage to say.
|
||||
4032282 - Pencil of Courage X 1000 - AA pencil that's used to write things you don’t have the courage to say.
|
||||
4032283 - Pencil of Courage X 10000 - A pencil that's used to write things you don’t have the courage to say.
|
||||
4032281 - Pencil of Courage X 100 - A pencil that's used to write things you don<EFBFBD>t have the courage to say.
|
||||
4032282 - Pencil of Courage X 1000 - AA pencil that's used to write things you don<EFBFBD>t have the courage to say.
|
||||
4032283 - Pencil of Courage X 10000 - A pencil that's used to write things you don<EFBFBD>t have the courage to say.
|
||||
4032284 - Child's Broken Toy - A toy stolen from a child by a monster. It's broken and cannot be used.
|
||||
4032285 - Child's Broken Toy - A toy stolen from a child by a monster. It's broken and cannot be used.
|
||||
4032286 - Child's Broken Toy - A toy stolen from a child by a monster. It's broken and cannot be used.
|
||||
|
||||
@@ -1565,9 +1565,9 @@ ossyria
|
||||
200090057 - Empress' Road - To Ellinia
|
||||
200090058 - Empress' Road - To Ereve
|
||||
200090059 - Empress' Road - To Ellinia
|
||||
200010303 - Hidden Street - Eliza’s Garden
|
||||
211040102 - Hidden Street - Snow Soul’s Resting Place
|
||||
209000100 - Happy Village - Cliff’s Hut
|
||||
200010303 - Hidden Street - Eliza<EFBFBD>s Garden
|
||||
211040102 - Hidden Street - Snow Soul<EFBFBD>s Resting Place
|
||||
209000100 - Happy Village - Cliff<EFBFBD>s Hut
|
||||
219000000 - Hidden Street - Coke Town
|
||||
219000001 - Hidden Street - Coke Town Sundry Goods Shop
|
||||
219000002 - Hidden Street - House of Pouch
|
||||
@@ -2863,7 +2863,7 @@ etc
|
||||
980027000 - Goldrich's Maze - Maze of Erosion
|
||||
980027100 - Goldrich's Maze - Maze of Erosion
|
||||
980027200 - Goldrich's Maze - Maze of Erosion
|
||||
980027300 - Goldrich's Maze - Beginning of the Maze…
|
||||
980027300 - Goldrich's Maze - Beginning of the Maze<EFBFBD>
|
||||
980027400 - Goldrich's Maze - Monster's Maze
|
||||
980027500 - Goldrich's Maze - Monster's Maze
|
||||
980027600 - Goldrich's Maze - Monster's Maze
|
||||
@@ -2944,7 +2944,7 @@ etc
|
||||
980027001 - Goldrich's Maze - Maze of Erosion
|
||||
980027101 - Goldrich's Maze - Maze of Erosion
|
||||
980027201 - Goldrich's Maze - Maze of Erosion
|
||||
980027301 - Goldrich's Maze - Beginning of the Maze…
|
||||
980027301 - Goldrich's Maze - Beginning of the Maze<EFBFBD>
|
||||
980027401 - Goldrich's Maze - Monster's Maze
|
||||
980027501 - Goldrich's Maze - Monster's Maze
|
||||
980027601 - Goldrich's Maze - Monster's Maze
|
||||
@@ -3025,7 +3025,7 @@ etc
|
||||
980027002 - Goldrich's Maze - Maze of Erosion
|
||||
980027102 - Goldrich's Maze - Maze of Erosion
|
||||
980027202 - Goldrich's Maze - Maze of Erosion
|
||||
980027302 - Goldrich's Maze - Beginning of the Maze…
|
||||
980027302 - Goldrich's Maze - Beginning of the Maze<EFBFBD>
|
||||
980027402 - Goldrich's Maze - Monster's Maze
|
||||
980027502 - Goldrich's Maze - Monster's Maze
|
||||
980027602 - Goldrich's Maze - Monster's Maze
|
||||
@@ -3349,7 +3349,7 @@ etc
|
||||
913040007 - Opening - Cygnus Knights
|
||||
913040008 - Opening - Cygnus Knights
|
||||
913040009 - Opening - Cygnus Knights
|
||||
920020000 - Hidden Street - Eliza’s Garden
|
||||
920020000 - Hidden Street - Eliza<EFBFBD>s Garden
|
||||
922020300 - Hidden Street - Origin of the Clock Tower
|
||||
922220000 - Hidden Street - Gloomy Forest
|
||||
922230000 - Hidden Street - Lunar World
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
3010058 - WorldEnd - You will recover 50 HP every 10 seconds. Perhaps, as you recline, you will find the answer to many of life's questions.
|
||||
3010057 - BloodyRose - You will recover 50 HP every 10 seconds. You will experience the might of a conqueror after recovery.
|
||||
3010060 - Noblesse Chair - A chair makes you feel like you're sitting in the lap of luxury. Also recovers 50 HP every 10 seconds.
|
||||
3010061 - Underneath the Maple Tree… - A white chair created to celebrate Maple Story's 6th Anniversary. Sit on it to restore 35 HP and 10 MP every 10 seconds.
|
||||
3010061 - Underneath the Maple Tree<EFBFBD> - A white chair created to celebrate Maple Story's 6th Anniversary. Sit on it to restore 35 HP and 10 MP every 10 seconds.
|
||||
3010062 - Bamboo Chair - A chair that restores HP every 10 seconds when used. It's very strong since it was made from bamboo grown on Rien.
|
||||
3010063 - Moon and Star Cushion - A pretty cushion shaped like a moon. Recovers 60 HP every 10 seconds.
|
||||
3010064 - Male Desert Rabbit Cushion - 60 HP is restored every 10 seconds if you lean back on this cute Male Desert Rabbit Cushion.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
2000000 - Red Potion - A potion made out of red herbs.\nRecovers 50 HP.
|
||||
2000000 - Red Potion - A potion made out of red herbs.\nRecovers 50 HP.
|
||||
2000001 - Orange Potion - A concentrated potion made out of red herbs.\nRecovers 150 HP.
|
||||
2000002 - White Potion - A highly-concentrated potion made out of red herbs.\nRecovers 300 HP.
|
||||
2000003 - Blue Potion - A potion made out of blue herbs.\nRecovers 100 MP.
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
@echo off
|
||||
@title HeavenMS
|
||||
set PATH=C:\Program Files\Java\jdk1.8.0_211\bin;%PATH%
|
||||
set CLASSPATH=.;dist\*
|
||||
java -Xmx2048m -Dwzpath=wz\ net.server.Server
|
||||
@title Cosmic
|
||||
java -Xmx2048m -Dwz-path=wz -jar target\Cosmic.jar
|
||||
pause
|
||||
@@ -1,61 +0,0 @@
|
||||
REM // 'launchtest.bat' Author: Tochi
|
||||
@echo off
|
||||
set a=0
|
||||
title HeavenMS: Offline
|
||||
color 1b
|
||||
:clear
|
||||
cls
|
||||
echo HeavenMS Server Launcher
|
||||
echo.
|
||||
echo Commands:
|
||||
echo -------------------------------------------------------------
|
||||
echo start - Start HeavenMS server
|
||||
echo shutdown - Shut down HeavenMS server and close Launcher File
|
||||
echo reset - Resets HeavenMS Launcher File
|
||||
echo clear - Clear this window
|
||||
echo -------------------------------------------------------------
|
||||
echo.
|
||||
|
||||
:command
|
||||
set /p s="Enter command: "
|
||||
if "%s%"=="start" goto :start
|
||||
if "%s%"=="shutdown" goto :shutdown
|
||||
if "%s%"=="reset" goto :reset
|
||||
if "%s%"=="clear" goto :clear
|
||||
echo Wrong Command.
|
||||
echo.
|
||||
goto :command
|
||||
|
||||
:start
|
||||
if "%a%"=="1" (
|
||||
echo HeavenMS is already active!
|
||||
echo.
|
||||
goto :command
|
||||
)
|
||||
color 4c
|
||||
echo This might take a while....
|
||||
echo.
|
||||
title HeavenMS: activating
|
||||
echo Server Launching...
|
||||
start /b launch.bat
|
||||
color 2a
|
||||
title HeavenMS: Online
|
||||
set a=1
|
||||
ping localhost -w 10000 >nul
|
||||
echo.
|
||||
goto :command
|
||||
|
||||
:shutdown
|
||||
color 4c
|
||||
title HeavenMS: Shutting Down...
|
||||
echo The Server Launcher will be close in a few seconds.
|
||||
ping localhost -w 100000 >nul
|
||||
taskkill /im cmd.exe
|
||||
|
||||
:reset
|
||||
color 4c
|
||||
title HeavenMS: Resetting...
|
||||
echo Please type 'start' in command box after bat file have been resetted.
|
||||
ping localhost -w 100000 >nul
|
||||
start launchtest.bat REM // thanks Paxum for noting that 'launchtest.bat' is to be used here
|
||||
taskkill /im cmd.exe
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/bash
|
||||
# thanks to lkxyyjx
|
||||
sudo ant -Dplatforms.JDK_1.7.home=/opt/jdk1.7.0_80 compile
|
||||
sudo ant -Dplatforms.JDK_1.7.home=/opt/jdk1.7.0_80 jar
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
# cores in classpath, thanks to lkxyyjx
|
||||
export CLASSPATH=".:dist/*:cores/*"
|
||||
java -Xmx2048m -Dwzpath=wz/ net.server.Server
|
||||
@@ -1,3 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
X-COMMENT: Main-Class will be added automatically by build
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
||||
build.xml.data.CRC32=92efccf9
|
||||
build.xml.script.CRC32=ff13faf5
|
||||
build.xml.stylesheet.CRC32=8064a381@1.80.1.48
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=92efccf9
|
||||
nbproject/build-impl.xml.script.CRC32=8cda444e
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
|
||||
@@ -1,22 +0,0 @@
|
||||
<#if licenseFirst??>
|
||||
${licenseFirst}
|
||||
</#if>
|
||||
${licensePrefix}This file is part of the HeavenMS Maple Story Server
|
||||
${licensePrefix?replace(" +$", "", "r")}
|
||||
${licensePrefix}Copyright (C) ${date?date?string("yyyy")} ${project.organization!user}
|
||||
${licensePrefix?replace(" +$", "", "r")}
|
||||
${licensePrefix}This program is free software: you can redistribute it and/or modify
|
||||
${licensePrefix}it under the terms of the GNU General Public License as published by
|
||||
${licensePrefix}the Free Software Foundation, either version 3 of the License, or
|
||||
${licensePrefix}(at your option) any later version.
|
||||
${licensePrefix?replace(" +$", "", "r")}
|
||||
${licensePrefix}This program is distributed in the hope that it will be useful,
|
||||
${licensePrefix}but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
${licensePrefix}MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
${licensePrefix}GNU General Public License for more details.
|
||||
${licensePrefix?replace(" +$", "", "r")}
|
||||
${licensePrefix}You should have received a copy of the GNU General Public License
|
||||
${licensePrefix}along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<#if licenseLast??>
|
||||
${licenseLast}
|
||||
</#if>
|
||||
@@ -1,6 +0,0 @@
|
||||
compile.on.save=true
|
||||
do.depend=false
|
||||
do.jar=true
|
||||
javac.debug=true
|
||||
javadoc.preview=true
|
||||
user.properties.file=C:\\Users\\RonanLana\\AppData\\Roaming\\NetBeans\\8.2\\build.properties
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="2"/>
|
||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||
<group/>
|
||||
</open-files>
|
||||
</project-private>
|
||||
@@ -1,104 +0,0 @@
|
||||
annotation.processing.enabled=true
|
||||
annotation.processing.enabled.in.editor=false
|
||||
annotation.processing.processors.list=
|
||||
annotation.processing.run.all.processors=true
|
||||
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
|
||||
application.title=HeavenMS
|
||||
application.vendor=Ronan
|
||||
auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
|
||||
build.classes.dir=${build.dir}/classes
|
||||
build.classes.excludes=**/*.java,**/*.form
|
||||
# This directory is removed when the project is cleaned:
|
||||
build.dir=build
|
||||
build.generated.dir=${build.dir}/generated
|
||||
build.generated.sources.dir=${build.dir}/generated-sources
|
||||
# Only compile against the classpath explicitly listed here:
|
||||
build.sysclasspath=ignore
|
||||
build.test.classes.dir=${build.dir}/test/classes
|
||||
build.test.results.dir=${build.dir}/test/results
|
||||
# Uncomment to specify the preferred debugger connection transport:
|
||||
#debug.transport=dt_socket
|
||||
debug.classpath=\
|
||||
${run.classpath}
|
||||
debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
# This directory is removed when the project is cleaned:
|
||||
dist.dir=dist
|
||||
dist.jar=${dist.dir}/HeavenMS.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
endorsed.classpath=
|
||||
excludes=
|
||||
file.reference.HikariCP-java7-2.4.13.jar=cores/HikariCP-java7-2.4.13.jar
|
||||
file.reference.MapleSolaxia-src=src
|
||||
file.reference.mina-core-2.0.19.jar=cores/mina-core-2.0.19.jar
|
||||
file.reference.mysql-connector-java-bin.jar=cores/mysql-connector-java-bin.jar
|
||||
file.reference.slf4j-api-1.7.21.jar=cores/slf4j-api-1.7.21.jar
|
||||
file.reference.slf4j-jdk14-1.7.5.jar=cores/slf4j-jdk14-1.7.5.jar
|
||||
file.reference.yamlbeans-1.13.jar=cores/yamlbeans-1.13.jar
|
||||
includes=**
|
||||
jar.archive.disabled=${jnlp.enabled}
|
||||
jar.compress=true
|
||||
jar.index=${jnlp.enabled}
|
||||
javac.classpath=\
|
||||
${file.reference.mina-core-2.0.19.jar}:\
|
||||
${file.reference.slf4j-api-1.7.21.jar}:\
|
||||
${file.reference.HikariCP-java7-2.4.13.jar}:\
|
||||
${file.reference.mysql-connector-java-bin.jar}:\
|
||||
${file.reference.slf4j-jdk14-1.7.5.jar}:\
|
||||
${file.reference.yamlbeans-1.13.jar}
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.external.vm=false
|
||||
javac.processorpath=\
|
||||
${javac.classpath}
|
||||
javac.source=1.8
|
||||
javac.target=1.8
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
javac.test.processorpath=\
|
||||
${javac.test.classpath}
|
||||
javadoc.additionalparam=
|
||||
javadoc.author=false
|
||||
javadoc.encoding=${source.encoding}
|
||||
javadoc.noindex=false
|
||||
javadoc.nonavbar=false
|
||||
javadoc.notree=false
|
||||
javadoc.private=false
|
||||
javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
jnlp.codebase.type=no.codebase
|
||||
jnlp.descriptor=application
|
||||
jnlp.enabled=false
|
||||
jnlp.mixed.code=default
|
||||
jnlp.offline-allowed=false
|
||||
jnlp.signed=false
|
||||
jnlp.signing=
|
||||
jnlp.signing.alias=
|
||||
jnlp.signing.keystore=
|
||||
main.class=net.server.Server
|
||||
# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed
|
||||
manifest.custom.codebase=
|
||||
# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)
|
||||
manifest.custom.permissions=
|
||||
manifest.file=manifest.mf
|
||||
meta.inf.dir=${src.dir}/META-INF
|
||||
mkdist.disabled=false
|
||||
platform.active=default_platform
|
||||
project.license=gpl30_msv2
|
||||
project.licensePath=./nbproject/licenseheader.txt
|
||||
run.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
# Space-separated list of JVM arguments used when running the project.
|
||||
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
|
||||
# To set system properties for unit tests define test-sys-prop.name=value:
|
||||
run.jvmargs=-Xmx2048m -Dwzpath=wz/
|
||||
run.test.classpath=\
|
||||
${javac.test.classpath}:\
|
||||
${build.test.classes.dir}
|
||||
source.encoding=UTF-8
|
||||
src.dir=${file.reference.MapleSolaxia-src}
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>org.netbeans.modules.java.j2seproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>HeavenMS</name>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
</source-roots>
|
||||
<test-roots/>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
||||
207
pom.xml
Normal file
207
pom.xml
Normal file
@@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>cosmic-maplestory</groupId>
|
||||
<artifactId>Cosmic</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<!-- Project -->
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>17</java.version>
|
||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||
<mainClass>net.server.Server</mainClass>
|
||||
|
||||
<!-- Maven plugins -->
|
||||
<maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version> <!-- For running unit tests -->
|
||||
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> <!-- Disabled. (for building thin jar) -->
|
||||
<maven-assembly-plugin.version>3.4.2</maven-assembly-plugin.version> <!-- For packaging the executable fat jar -->
|
||||
|
||||
<!-- Dependencies -->
|
||||
<slf4j-api.version>1.7.36</slf4j-api.version> <!-- Logging facade -->
|
||||
<log4j.version>2.18.0</log4j.version> <!-- Slf4j implementation -->
|
||||
<graalvm.version>22.2.0</graalvm.version> <!-- ScriptEngine implementation -->
|
||||
<netty.version>4.1.79.Final</netty.version> <!-- Networking -->
|
||||
<yamlbeans.version>1.15</yamlbeans.version> <!-- Config file -->
|
||||
<jcip-annotations.version>1.0</jcip-annotations.version> <!-- Annotations for concurrency documentation -->
|
||||
<HikariCP.version>5.0.1</HikariCP.version> <!-- Database connection pool -->
|
||||
<mysql-connector-java.version>8.0.30</mysql-connector-java.version> <!-- MySQL JDBC driver -->
|
||||
<jdbi-version>3.35.0</jdbi-version> <!-- Convenience wrapper around JDBC -->
|
||||
<junit.version>5.9.0</junit.version> <!-- Unit test -->
|
||||
<mockito.version>4.7.0</mockito.version> <!-- Unit test -->
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.esotericsoftware.yamlbeans</groupId>
|
||||
<artifactId>yamlbeans</artifactId>
|
||||
<version>${yamlbeans.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.jcip</groupId>
|
||||
<artifactId>jcip-annotations</artifactId>
|
||||
<version>${jcip-annotations.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Database -->
|
||||
<dependency>
|
||||
<groupId>com.zaxxer</groupId>
|
||||
<artifactId>HikariCP</artifactId>
|
||||
<version>${HikariCP.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>${mysql-connector-java.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jdbi</groupId>
|
||||
<artifactId>jdbi3-core</artifactId>
|
||||
<version>${jdbi-version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- Networking -->
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-transport</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-codec</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-buffer</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-handler</artifactId>
|
||||
<version>${netty.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Logging -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>${slf4j-api.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-core</artifactId>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-slf4j-impl</artifactId>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Scripting -->
|
||||
<dependency>
|
||||
<groupId>org.graalvm.js</groupId>
|
||||
<artifactId>js</artifactId>
|
||||
<version>${graalvm.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.graalvm.js</groupId>
|
||||
<artifactId>js-scriptengine</artifactId>
|
||||
<version>${graalvm.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Testing -->
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-engine</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-params</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>${mockito.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Explicitly disable default jar which includes no dependencies -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>${maven-jar-plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>default-jar</id>
|
||||
<phase>none</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven-surefire-plugin.version}</version>
|
||||
</plugin>
|
||||
|
||||
<!-- Enable assembling jar that includes all dependencies -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>${maven-assembly-plugin.version}</version>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>${mainClass}</mainClass>
|
||||
</manifest>
|
||||
<manifestEntries>
|
||||
<Multi-Release>true</Multi-Release>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/bash
|
||||
# compilation script for posix-compliant systems
|
||||
|
||||
src=src
|
||||
dist=dist
|
||||
|
||||
cores=$(echo cores/*)
|
||||
cores=${cores// /:}
|
||||
|
||||
mkdir -p $dist
|
||||
javac -d $dist -cp $cores $(find $src -name "*.java")
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
# launch script
|
||||
cores=$(echo cores/*)
|
||||
cores=${cores// /:}
|
||||
cp=.:dist:$cores
|
||||
|
||||
java -Xmx2048m -Dwzpath=wz -cp $cp net.server.Server
|
||||
@@ -23,36 +23,37 @@
|
||||
*/
|
||||
|
||||
var status;
|
||||
|
||||
|
||||
function start() {
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection) {
|
||||
if (mode == -1) {
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0 && type > 0) {
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
if (mode == 1)
|
||||
status++;
|
||||
else
|
||||
status--;
|
||||
|
||||
if(status == 0) {
|
||||
cm.sendOk("Sample text.");
|
||||
cm.dispose();
|
||||
}
|
||||
if (mode == -1) {
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0 && type > 0) {
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
if (mode == 1) {
|
||||
status++;
|
||||
} else {
|
||||
status--;
|
||||
}
|
||||
|
||||
if (status == 0) {
|
||||
cm.sendOk("Sample text.");
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function generateSelectionMenu(array) { // nice tool for generating a string for the sendSimple functionality
|
||||
var menu = "";
|
||||
for (var i = 0; i < array.length; i++) {
|
||||
menu += "#L" + i + "#" + array[i] + "#l\r\n";
|
||||
}
|
||||
return menu;
|
||||
var menu = "";
|
||||
for (var i = 0; i < array.length; i++) {
|
||||
menu += "#L" + i + "#" + array[i] + "#l\r\n";
|
||||
}
|
||||
return menu;
|
||||
}
|
||||
@@ -28,16 +28,17 @@ function start(mode, type, selection) {
|
||||
if (mode == -1) {
|
||||
qm.dispose();
|
||||
} else {
|
||||
if(mode == 0 && type > 0) {
|
||||
if (mode == 0 && type > 0) {
|
||||
qm.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == 1)
|
||||
|
||||
if (mode == 1) {
|
||||
status++;
|
||||
else
|
||||
} else {
|
||||
status--;
|
||||
|
||||
}
|
||||
|
||||
if (status == 0) {
|
||||
qm.sendNext("Sample Text.");
|
||||
} else if (status == 1) {
|
||||
@@ -51,16 +52,17 @@ function end(mode, type, selection) {
|
||||
if (mode == -1) {
|
||||
qm.dispose();
|
||||
} else {
|
||||
if(mode == 0 && type > 0) {
|
||||
if (mode == 0 && type > 0) {
|
||||
qm.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == 1)
|
||||
|
||||
if (mode == 1) {
|
||||
status++;
|
||||
else
|
||||
} else {
|
||||
status--;
|
||||
|
||||
}
|
||||
|
||||
if (status == 0) {
|
||||
qm.sendNext("Sample Text.");
|
||||
} else if (status == 1) {
|
||||
|
||||
@@ -24,5 +24,5 @@
|
||||
*/
|
||||
|
||||
function act() {
|
||||
|
||||
|
||||
}
|
||||
@@ -12,14 +12,14 @@ var maxMapId;
|
||||
|
||||
var eventTime; // Max time allotted for the event, in minutes.
|
||||
|
||||
var lobbyRange = [0, 0]; // Range of concurrent lobbies (min range is 0, max range is 7).
|
||||
const maxLobbies = 7; // Max amount of concurrent active lobbies.
|
||||
|
||||
function init() {
|
||||
// After loading, ChannelServer
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
@@ -81,7 +81,7 @@ function scheduledTimeout(eim) {
|
||||
function timeOut(eim) {
|
||||
if (eim.getPlayerCount() > 0) {
|
||||
var pIter = eim.getPlayers().iterator();
|
||||
while (pIter.hasNext()){
|
||||
while (pIter.hasNext()) {
|
||||
var player = pIter.next();
|
||||
player.dropMessage(6, "You have run out of time to complete this event!");
|
||||
playerExit(eim, player);
|
||||
@@ -104,7 +104,7 @@ function friendlyKilled(mob, eim) {
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {
|
||||
// When invoking unregisterMonster(MapleMonster mob) OR killed
|
||||
// When invoking unregisterMonster(Monster mob) OR killed
|
||||
// Happens only when size = 0
|
||||
}
|
||||
|
||||
|
||||
@@ -20,53 +20,59 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
2x EXP Event Script
|
||||
-- Author --------------------------------------------------------------------------------------
|
||||
Twdtwd
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
2x EXP Event Script
|
||||
-- Author --------------------------------------------------------------------------------------
|
||||
Twdtwd
|
||||
**/
|
||||
|
||||
var timer1;
|
||||
var timer2;
|
||||
var timer3;
|
||||
var timer4;
|
||||
|
||||
importPackage(Packages.client);
|
||||
|
||||
function init() {
|
||||
/*
|
||||
/*
|
||||
if(em.getChannelServer().getId() == 1) { // Only run on channel 1.
|
||||
// AEST
|
||||
timer1 = em.scheduleAtTimestamp("start", 1428220800000);
|
||||
timer2 = em.scheduleAtTimestamp("stop", 1428228000000);
|
||||
// EDT
|
||||
timer1 = em.scheduleAtTimestamp("start", 1428271200000);
|
||||
timer2 = em.scheduleAtTimestamp("stop", 1428278400000);
|
||||
}
|
||||
// AEST
|
||||
timer1 = em.scheduleAtTimestamp("start", 1428220800000);
|
||||
timer2 = em.scheduleAtTimestamp("stop", 1428228000000);
|
||||
// EDT
|
||||
timer1 = em.scheduleAtTimestamp("start", 1428271200000);
|
||||
timer2 = em.scheduleAtTimestamp("stop", 1428278400000);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (timer1 != null)
|
||||
if (timer1 != null) {
|
||||
timer1.cancel(true);
|
||||
if (timer2 != null)
|
||||
}
|
||||
if (timer2 != null) {
|
||||
timer2.cancel(true);
|
||||
if (timer3 != null)
|
||||
}
|
||||
if (timer3 != null) {
|
||||
timer3.cancel(true);
|
||||
if (timer4 != null)
|
||||
}
|
||||
if (timer4 != null) {
|
||||
timer4.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var world = Packages.net.server.Server.getInstance().getWorld(em.getChannelServer().getWorld());
|
||||
world.setExpRate(8);
|
||||
world.broadcastPacket(Packages.tools.MaplePacketCreator.serverNotice(6, "The Bunny Onslaught Survival Scanner (BOSS) has detected an Easter Bunny onslaught soon! The GM team has activated the Emergency XP Pool (EXP) that doubles experience gained for the next two hours!"));
|
||||
const Server = Java.type('net.server.Server');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
var world = Server.getInstance().getWorld(em.getChannelServer().getWorld());
|
||||
world.setExpRate(8);
|
||||
world.broadcastPacket(PacketCreator.serverNotice(6, "The Bunny Onslaught Survival Scanner (BOSS) has detected an Easter Bunny onslaught soon! The GM team has activated the Emergency XP Pool (EXP) that doubles experience gained for the next two hours!"));
|
||||
}
|
||||
|
||||
function stop() {
|
||||
var world = Packages.net.server.Server.getInstance().getWorld(em.getChannelServer().getWorld());
|
||||
world.setExpRate(4);
|
||||
world.broadcastPacket(Packages.tools.MaplePacketCreator.serverNotice(6, "Unfortunately the Emergency XP Pool (EXP) has run out of juice for now and needs to recharge causing the EXP rate to go back to normal."));
|
||||
const Server = Java.type('net.server.Server');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
var world = Server.getInstance().getWorld(em.getChannelServer().getWorld());
|
||||
world.setExpRate(4);
|
||||
world.broadcastPacket(PacketCreator.serverNotice(6, "Unfortunately the Emergency XP Pool (EXP) has run out of juice for now and needs to recharge causing the EXP rate to go back to normal."));
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* 3rd Job Event - Bowman
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 108010100;
|
||||
var exitMap = 105040305;
|
||||
@@ -31,31 +30,32 @@ var maxMapId = 108010101;
|
||||
|
||||
var eventTime = 20; //20 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("3rdJob_bowman_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
eim.getInstanceMap(maxMapId).resetPQ(1);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 0);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -81,19 +81,21 @@ function clear(eim) {
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* 3rd Job Event - Magician
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 108010200;
|
||||
var exitMap = 100040106;
|
||||
@@ -31,31 +30,32 @@ var maxMapId = 108010201;
|
||||
|
||||
var eventTime = 20; //20 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("3rdJob_magician_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
eim.getInstanceMap(maxMapId).resetPQ(1);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 0);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -81,19 +81,21 @@ function clear(eim) {
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* 3rd Job Event - Kenta's Mount Quest
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 923010000;
|
||||
var exitMap = 923010100;
|
||||
@@ -33,14 +32,14 @@ var eventMaps = [923010000];
|
||||
|
||||
var eventTime = 5; //5 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function checkHogHealth(eim) {
|
||||
@@ -48,7 +47,7 @@ function checkHogHealth(eim) {
|
||||
if (watchHog != null) {
|
||||
var hp = watchHog.getHp();
|
||||
var oldHp = eim.getIntProperty("whog_hp");
|
||||
|
||||
|
||||
if (oldHp - hp > 1000) { // or 800, if using mobHP / eventTime
|
||||
eim.dropMessage(6, "Please protect the pig from the aliens!"); // thanks Vcoc
|
||||
}
|
||||
@@ -62,7 +61,7 @@ function respawnStages(eim) {
|
||||
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
|
||||
}
|
||||
checkHogHealth(eim);
|
||||
|
||||
|
||||
eim.schedule("respawnStages", 10 * 1000);
|
||||
}
|
||||
|
||||
@@ -71,21 +70,22 @@ function setup(level, lobbyid) {
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
eim.setProperty("whog_hp", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
|
||||
mapObj.resetPQ(1);
|
||||
mapObj.instanceMapForceRespawn();
|
||||
respawnStages(eim);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 0);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -95,10 +95,10 @@ function playerExit(eim, player) {
|
||||
var api = player.getAbstractPlayerInteraction();
|
||||
api.removeAll(4031507);
|
||||
api.removeAll(4031508);
|
||||
|
||||
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -112,29 +112,31 @@ function playerDisconnected(eim, player) {
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
|
||||
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function friendlyKilled(mob, eim) {
|
||||
if(em.getProperty("noEntry") != "false") {
|
||||
if (em.getProperty("noEntry") != "false") {
|
||||
var player = eim.getPlayers().get(0);
|
||||
playerExit(eim, player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* 3rd Job Event - Pirate
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 108010500;
|
||||
var exitMap = 105070200;
|
||||
@@ -31,23 +30,24 @@ var maxMapId = 108010501;
|
||||
|
||||
var eventTime = 20; //20 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
eim.getInstanceMap(maxMapId).resetPQ(1);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 0);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("3rdJob_pirate_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -81,19 +81,21 @@ function clear(eim) {
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* 3rd Job Event - Thief
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 108010400;
|
||||
var exitMap = 107000402;
|
||||
@@ -31,31 +30,32 @@ var maxMapId = 108010401;
|
||||
|
||||
var eventTime = 20; //20 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("3rdJob_thief_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
eim.getInstanceMap(maxMapId).resetPQ(1);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 0);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -81,19 +81,21 @@ function clear(eim) {
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* 3rd Job Event - Warrior
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 108010300;
|
||||
var exitMap = 105070001;
|
||||
@@ -31,31 +30,32 @@ var maxMapId = 108010301;
|
||||
|
||||
var eventTime = 20; //20 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("3rdJob_warrior_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
eim.getInstanceMap(maxMapId).resetPQ(1);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 0);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -81,19 +81,21 @@ function clear(eim) {
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* Event - Jonathan's Test Quest
|
||||
**/
|
||||
**/
|
||||
|
||||
var entryMap = 912020000;
|
||||
var exitMap = 120000102;
|
||||
@@ -30,14 +30,14 @@ var maxMapId = 912020000;
|
||||
|
||||
var eventTime = 2; //2 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
@@ -68,7 +68,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {}
|
||||
@@ -84,7 +84,9 @@ function playerDisconnected(eim, player) {
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* Event - Kyrin's Test Quest
|
||||
**/
|
||||
**/
|
||||
|
||||
var entryMap = 912010000;
|
||||
var exitMap = 120000101;
|
||||
@@ -30,14 +30,14 @@ var maxMapId = 912010200;
|
||||
|
||||
var eventTime = 4; //4 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
@@ -82,7 +82,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {}
|
||||
@@ -98,19 +98,21 @@ function playerDisconnected(eim, player) {
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
|
||||
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
@@ -124,7 +126,7 @@ function monsterValue(eim, mobId) {
|
||||
}
|
||||
|
||||
function friendlyKilled(mob, eim) {
|
||||
if(em.getProperty("noEntry") != "false") {
|
||||
if (em.getProperty("noEntry") != "false") {
|
||||
var player = eim.getPlayers().get(0);
|
||||
playerExit(eim, player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* Event - Kyrin's Test Quest
|
||||
**/
|
||||
**/
|
||||
|
||||
var entryMap = 912010100;
|
||||
var exitMap = 120000101;
|
||||
@@ -30,14 +30,14 @@ var maxMapId = 912010200;
|
||||
|
||||
var eventTime = 4; //4 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
@@ -82,7 +82,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {}
|
||||
@@ -98,7 +98,9 @@ function playerDisconnected(eim, player) {
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {}
|
||||
@@ -106,13 +108,13 @@ function changedLeader(eim, leader) {}
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
|
||||
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
@@ -126,7 +128,7 @@ function monsterValue(eim, mobId) {
|
||||
}
|
||||
|
||||
function friendlyKilled(mob, eim) {
|
||||
if(em.getProperty("noEntry") != "false") {
|
||||
if (em.getProperty("noEntry") != "false") {
|
||||
var player = eim.getPlayers().get(0);
|
||||
playerExit(eim, player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
importPackage(Packages.tools);
|
||||
|
||||
var KC_bfd;
|
||||
var Plane_to_CBD;
|
||||
var CBD_docked;
|
||||
@@ -10,13 +8,13 @@ var KC_docked;
|
||||
//Time Setting is in millisecond
|
||||
var closeTime = 4 * 60 * 1000; //The time to close the gate
|
||||
var beginTime = 5 * 60 * 1000; //The time to begin the ride
|
||||
var rideTime = 1 * 60 * 1000; //The time that require move to destination
|
||||
var rideTime = 1 * 60 * 1000; //The time that require move to destination
|
||||
|
||||
function init() {
|
||||
closeTime = em.getTransportationTime(closeTime);
|
||||
beginTime = em.getTransportationTime(beginTime);
|
||||
rideTime = em.getTransportationTime(rideTime);
|
||||
|
||||
|
||||
KC_bfd = em.getChannelServer().getMapFactory().getMap(540010100);
|
||||
CBD_bfd = em.getChannelServer().getMapFactory().getMap(540010001);
|
||||
Plane_to_CBD = em.getChannelServer().getMapFactory().getMap(540010101);
|
||||
@@ -34,11 +32,11 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function stopEntry() {
|
||||
em.setProperty("entry","false");
|
||||
em.setProperty("entry", "false");
|
||||
}
|
||||
|
||||
function takeoff() {
|
||||
em.setProperty("docked","false");
|
||||
em.setProperty("docked", "false");
|
||||
KC_bfd.warpEveryone(Plane_to_CBD.getId());
|
||||
CBD_bfd.warpEveryone(Plane_to_KC.getId());
|
||||
em.schedule("arrived", rideTime); //The time that require move to destination
|
||||
@@ -47,7 +45,7 @@ function takeoff() {
|
||||
function arrived() {
|
||||
Plane_to_CBD.warpEveryone(CBD_docked.getId(), 0);
|
||||
Plane_to_KC.warpEveryone(KC_docked.getId(), 7);
|
||||
|
||||
|
||||
scheduleNew();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Amoria PQ
|
||||
*/
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var onlyMarriedPlayers = true;
|
||||
@@ -37,249 +37,267 @@ var maxMapId = 670010800;
|
||||
|
||||
var eventTime = 75; // 75 minutes
|
||||
|
||||
var lobbyRange = [0, 0];
|
||||
const maxLobbies = 1;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n At least 1 of both genders";
|
||||
if(onlyMarriedPlayers) reqStr += "\r\n All married";
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n At least 1 of both genders";
|
||||
if (onlyMarriedPlayers) {
|
||||
reqStr += "\r\n All married";
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {
|
||||
var itemSet = [4031594, 4031595, 4031596, 4031597];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
var itemSet = [4031594, 4031595, 4031596, 4031597];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [2000, 4000, 6000, 8000, 9000, 11000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [2000, 4000, 6000, 8000, 9000, 11000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
}
|
||||
|
||||
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
|
||||
var eligible = [];
|
||||
var hasLeader = false, hasNotMarried = false;
|
||||
var mask = 0;
|
||||
|
||||
if(party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
var eligible = [];
|
||||
var hasLeader = false, hasNotMarried = false;
|
||||
var mask = 0;
|
||||
|
||||
for(var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
if (party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
|
||||
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if(ch.isLeader()) hasLeader = true;
|
||||
if(!ch.getPlayer().isMarried()) hasNotMarried = true;
|
||||
eligible.push(ch);
|
||||
|
||||
mask |= (1 << ch.getPlayer().getGender());
|
||||
}
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
|
||||
if (ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if (ch.isLeader()) {
|
||||
hasLeader = true;
|
||||
}
|
||||
if (!ch.getPlayer().isMarried()) {
|
||||
hasNotMarried = true;
|
||||
}
|
||||
eligible.push(ch);
|
||||
|
||||
mask |= (1 << ch.getPlayer().getGender());
|
||||
}
|
||||
}
|
||||
|
||||
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers && mask == 3)) eligible = [];
|
||||
if(onlyMarriedPlayers && hasNotMarried) eligible = [];
|
||||
return eligible;
|
||||
}
|
||||
|
||||
if (!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers && mask == 3)) {
|
||||
eligible = [];
|
||||
}
|
||||
if (onlyMarriedPlayers && hasNotMarried) {
|
||||
eligible = [];
|
||||
}
|
||||
return Java.to(eligible, Java.type('net.server.world.PartyCharacter[]'));
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Amoria" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
|
||||
eim.setProperty("marriedGroup", 0);
|
||||
eim.setProperty("missCount", 0);
|
||||
eim.setProperty("statusStg1", -1);
|
||||
eim.setProperty("statusStg2", -1);
|
||||
eim.setProperty("statusStg3", -1);
|
||||
eim.setProperty("statusStg4", -1);
|
||||
eim.setProperty("statusStg5", -1);
|
||||
eim.setProperty("statusStg6", -1);
|
||||
eim.setProperty("statusStgBonus", 0);
|
||||
|
||||
eim.getInstanceMap(670010200).resetPQ(level);
|
||||
eim.getInstanceMap(670010300).resetPQ(level);
|
||||
eim.getInstanceMap(670010301).resetPQ(level);
|
||||
eim.getInstanceMap(670010302).resetPQ(level);
|
||||
eim.getInstanceMap(670010400).resetPQ(level);
|
||||
eim.getInstanceMap(670010500).resetPQ(level);
|
||||
eim.getInstanceMap(670010600).resetPQ(level);
|
||||
eim.getInstanceMap(670010700).resetPQ(level);
|
||||
eim.getInstanceMap(670010750).resetPQ(level);
|
||||
eim.getInstanceMap(670010800).resetPQ(level);
|
||||
|
||||
eim.getInstanceMap(670010200).toggleDrops();
|
||||
eim.getInstanceMap(670010300).toggleDrops();
|
||||
eim.getInstanceMap(670010301).toggleDrops();
|
||||
eim.getInstanceMap(670010302).toggleDrops();
|
||||
|
||||
eim.getInstanceMap(670010200).instanceMapForceRespawn();
|
||||
eim.getInstanceMap(670010500).instanceMapForceRespawn();
|
||||
|
||||
eim.getInstanceMap(670010750).shuffleReactors();
|
||||
eim.getInstanceMap(670010800).shuffleReactors();
|
||||
|
||||
var mapObj = eim.getInstanceMap(670010700);
|
||||
var mobObj = Packages.server.life.MapleLifeFactory.getMonster(9400536);
|
||||
mapObj.spawnMonsterOnGroundBelow(mobObj, new Packages.java.awt.Point(942, 478));
|
||||
|
||||
respawnStages(eim);
|
||||
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
|
||||
return eim;
|
||||
var eim = em.newInstance("Amoria" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
|
||||
eim.setProperty("marriedGroup", 0);
|
||||
eim.setProperty("missCount", 0);
|
||||
eim.setProperty("statusStg1", -1);
|
||||
eim.setProperty("statusStg2", -1);
|
||||
eim.setProperty("statusStg3", -1);
|
||||
eim.setProperty("statusStg4", -1);
|
||||
eim.setProperty("statusStg5", -1);
|
||||
eim.setProperty("statusStg6", -1);
|
||||
eim.setProperty("statusStgBonus", 0);
|
||||
|
||||
eim.getInstanceMap(670010200).resetPQ(level);
|
||||
eim.getInstanceMap(670010300).resetPQ(level);
|
||||
eim.getInstanceMap(670010301).resetPQ(level);
|
||||
eim.getInstanceMap(670010302).resetPQ(level);
|
||||
eim.getInstanceMap(670010400).resetPQ(level);
|
||||
eim.getInstanceMap(670010500).resetPQ(level);
|
||||
eim.getInstanceMap(670010600).resetPQ(level);
|
||||
eim.getInstanceMap(670010700).resetPQ(level);
|
||||
eim.getInstanceMap(670010750).resetPQ(level);
|
||||
eim.getInstanceMap(670010800).resetPQ(level);
|
||||
|
||||
eim.getInstanceMap(670010200).toggleDrops();
|
||||
eim.getInstanceMap(670010300).toggleDrops();
|
||||
eim.getInstanceMap(670010301).toggleDrops();
|
||||
eim.getInstanceMap(670010302).toggleDrops();
|
||||
|
||||
eim.getInstanceMap(670010200).instanceMapForceRespawn();
|
||||
eim.getInstanceMap(670010500).instanceMapForceRespawn();
|
||||
|
||||
eim.getInstanceMap(670010750).shuffleReactors();
|
||||
eim.getInstanceMap(670010800).shuffleReactors();
|
||||
|
||||
var mapObj = eim.getInstanceMap(670010700);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
var mobObj = LifeFactory.getMonster(9400536);
|
||||
mapObj.spawnMonsterOnGroundBelow(mobObj, new Point(942, 478));
|
||||
|
||||
respawnStages(eim);
|
||||
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
function isTeamAllCouple(eim) { // everyone partner of someone on the team
|
||||
var eventPlayers = eim.getPlayers();
|
||||
|
||||
for (var iterator = eventPlayers.iterator(); iterator.hasNext();) {
|
||||
var chr = iterator.next();
|
||||
|
||||
var pid = chr.getPartnerId();
|
||||
if(pid <= 0 || eim.getPlayerById(pid) == null) {
|
||||
return false;
|
||||
}
|
||||
var eventPlayers = eim.getPlayers();
|
||||
|
||||
for (var iterator = eventPlayers.iterator(); iterator.hasNext();) {
|
||||
var chr = iterator.next();
|
||||
|
||||
var pid = chr.getPartnerId();
|
||||
if (pid <= 0 || eim.getPlayerById(pid) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function afterSetup(eim) {
|
||||
if(isTeamAllCouple(eim)) {
|
||||
eim.setIntProperty("marriedGroup", 1);
|
||||
}
|
||||
if (isTeamAllCouple(eim)) {
|
||||
eim.setIntProperty("marriedGroup", 1);
|
||||
}
|
||||
}
|
||||
|
||||
function respawnStages(eim) {}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
if(eim.getIntProperty("statusStg6") == 1) {
|
||||
eim.warpEventTeam(exitMap);
|
||||
}
|
||||
else {
|
||||
end(eim);
|
||||
}
|
||||
if (eim.getIntProperty("statusStg6") == 1) {
|
||||
eim.warpEventTeam(exitMap);
|
||||
} else {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function playerUnregistered(eim, player) {}
|
||||
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {
|
||||
if(!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDead(eim, player) {}
|
||||
|
||||
function playerRevive(eim, player) { // player presses ok on the death pop up.
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDisconnected(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
playerLeft(eim, player);
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
} else {
|
||||
playerLeft(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function disbandParty(eim) {
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function giveRandomEventReward(eim, player) {
|
||||
eim.giveEventReward(player);
|
||||
eim.giveEventReward(player);
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* Event - Scadur's Mount Quest
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 921110000;
|
||||
var exitMap = 211050000;
|
||||
@@ -31,21 +30,21 @@ var maxMapId = 921110000;
|
||||
|
||||
var eventTime = 3; //3 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Aran_2ndmount_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
@@ -53,15 +52,16 @@ function respawnStages(eim) {}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
|
||||
mapObj.resetPQ(1);
|
||||
mapObj.instanceMapForceRespawn();
|
||||
respawnStages(eim);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 2);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -84,29 +84,31 @@ function playerDisconnected(eim, player) {
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
|
||||
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function friendlyKilled(mob, eim) {
|
||||
if(em.getProperty("noEntry") != "false") {
|
||||
if (em.getProperty("noEntry") != "false") {
|
||||
var player = eim.getPlayers().get(0);
|
||||
playerExit(eim, player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* Event - Wolves' Mount Quest
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 914030000;
|
||||
var exitMap = 140010210;
|
||||
@@ -31,21 +30,21 @@ var maxMapId = 914030000;
|
||||
|
||||
var eventTime = 3; //3 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Aran_3rdmount_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
@@ -53,16 +52,17 @@ function respawnStages(eim) {}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
|
||||
mapObj.resetPQ(1);
|
||||
mapObj.instanceMapForceRespawn();
|
||||
mapObj.closeMapSpawnPoints();
|
||||
respawnStages(eim);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 1);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -85,33 +85,35 @@ function playerDisconnected(eim, player) {
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
|
||||
|
||||
var player = eim.getPlayers().get(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(eim.getInstanceMap(entryMap).countMonsters() == 0) {
|
||||
if (eim.getInstanceMap(entryMap).countMonsters() == 0) {
|
||||
eim.showClearEffect();
|
||||
}
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function friendlyKilled(mob, eim) {
|
||||
if(em.getProperty("noEntry") != "false") {
|
||||
if (em.getProperty("noEntry") != "false") {
|
||||
var player = eim.getPlayers().get(0);
|
||||
playerExit(eim, player);
|
||||
player.changeMap(exitMap);
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Bamboo Warrior Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
Ronan - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Bamboo Warrior Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
Ronan - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
**/
|
||||
function init() {
|
||||
scheduleNew();
|
||||
}
|
||||
@@ -35,22 +35,26 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var mapObj = em.getChannelServer().getMapFactory().getMap(800020120); // original mapid was 251010101
|
||||
var mobObj = Packages.server.life.MapleLifeFactory.getMonster(6090002);
|
||||
|
||||
if(mapObj.getMonsterById(6090002) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
mapObj.spawnMonsterOnGroundBelow(mobObj, new Packages.java.awt.Point(560, 50));
|
||||
mapObj.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "From amongst the ruins shrouded by the mists, Bamboo Warrior appears."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
var mobObj = LifeFactory.getMonster(6090002);
|
||||
|
||||
if (mapObj.getMonsterById(6090002) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
mapObj.spawnMonsterOnGroundBelow(mobObj, new Point(560, 50));
|
||||
mapObj.broadcastMessage(PacketCreator.serverNotice(6, "From amongst the ruins shrouded by the mists, Bamboo Warrior appears."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Centipede Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
Ronan - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Centipede Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
Ronan - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
**/
|
||||
function init() {
|
||||
scheduleNew();
|
||||
}
|
||||
@@ -35,22 +35,27 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var herbGarden = em.getChannelServer().getMapFactory().getMap(251010102);
|
||||
var gcent = Packages.server.life.MapleLifeFactory.getMonster(5220004);
|
||||
|
||||
if(herbGarden.getMonsterById(5220004) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
herbGarden.spawnMonsterOnGroundBelow(gcent, new Packages.java.awt.Point(560, 50));
|
||||
herbGarden.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "From the mists surrounding the herb garden, the gargantuous Giant Centipede appears."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
|
||||
if (herbGarden.getMonsterById(5220004) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var gcent = LifeFactory.getMonster(5220004);
|
||||
herbGarden.spawnMonsterOnGroundBelow(gcent, new Point(560, 50));
|
||||
herbGarden.broadcastMessage(PacketCreator.serverNotice(6, "From the mists surrounding the herb garden, the gargantuous Giant Centipede appears."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Deo Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Deo Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
**/
|
||||
function init() {
|
||||
scheduleNew();
|
||||
}
|
||||
@@ -35,22 +35,27 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var royalCatthusDesert = em.getChannelServer().getMapFactory().getMap(260010201);
|
||||
var deo = Packages.server.life.MapleLifeFactory.getMonster(3220001);
|
||||
|
||||
if(royalCatthusDesert.getMonsterById(3220001) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
royalCatthusDesert.spawnMonsterOnGroundBelow(deo, new Packages.java.awt.Point(645, 275));
|
||||
royalCatthusDesert.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Deo slowly appeared out of the sand dust."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
|
||||
if (royalCatthusDesert.getMonsterById(3220001) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var deo = LifeFactory.getMonster(3220001);
|
||||
royalCatthusDesert.spawnMonsterOnGroundBelow(deo, new Point(645, 275));
|
||||
royalCatthusDesert.broadcastMessage(PacketCreator.serverNotice(6, "Deo slowly appeared out of the sand dust."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -33,26 +33,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var bossMobid = 9400610;
|
||||
var bossMapid = 677000003;
|
||||
var bossMsg = "Amdusias has appeared!";
|
||||
var bossPos = new Packages.java.awt.Point(467, 0);
|
||||
|
||||
|
||||
var map = em.getChannelServer().getMapFactory().getMap(bossMapid);
|
||||
if (map.getMonsterById(bossMobid) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var boss = Packages.server.life.MapleLifeFactory.getMonster(bossMobid);
|
||||
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
|
||||
var boss = LifeFactory.getMonster(bossMobid);
|
||||
var bossPos = new Point(467, 0);
|
||||
map.spawnMonsterOnGroundBelow(boss, bossPos);
|
||||
map.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -33,26 +33,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var bossMobid = 9400609;
|
||||
var bossMapid = 677000005;
|
||||
var bossMsg = "Andras has appeared!";
|
||||
var bossPos = new Packages.java.awt.Point(201, 80);
|
||||
|
||||
|
||||
var map = em.getChannelServer().getMapFactory().getMap(bossMapid);
|
||||
if (map.getMonsterById(bossMobid) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var boss = Packages.server.life.MapleLifeFactory.getMonster(bossMobid);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var boss = LifeFactory.getMonster(bossMobid);
|
||||
var bossPos = new Point(201, 80);
|
||||
map.spawnMonsterOnGroundBelow(boss, bossPos);
|
||||
map.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -33,26 +33,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var bossMobid = 9400613;
|
||||
var bossMapid = 677000009;
|
||||
var bossMsg = "Valefor has appeared!";
|
||||
var bossPos = new Packages.java.awt.Point(251, -841);
|
||||
|
||||
|
||||
var map = em.getChannelServer().getMapFactory().getMap(bossMapid);
|
||||
if (map.getMonsterById(bossMobid) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var boss = Packages.server.life.MapleLifeFactory.getMonster(bossMobid);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var boss = LifeFactory.getMonster(bossMobid);
|
||||
var bossPos = new Point(251, -841);
|
||||
map.spawnMonsterOnGroundBelow(boss, bossPos);
|
||||
map.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -33,26 +33,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var bossMobid = 9400633;
|
||||
var bossMapid = 677000012;
|
||||
var bossMsg = "Astaroth has appeared!";
|
||||
var bossPos = new Packages.java.awt.Point(842, 0);
|
||||
|
||||
|
||||
var map = em.getChannelServer().getMapFactory().getMap(bossMapid);
|
||||
if (map.getMonsterById(bossMobid) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var boss = Packages.server.life.MapleLifeFactory.getMonster(bossMobid);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var boss = LifeFactory.getMonster(bossMobid);
|
||||
var bossPos = new Point(842, 0);
|
||||
map.spawnMonsterOnGroundBelow(boss, bossPos);
|
||||
map.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -33,26 +33,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var bossMobid = 9400612;
|
||||
var bossMapid = 677000001;
|
||||
var bossMsg = "Marbas has appeared!";
|
||||
var bossPos = new Packages.java.awt.Point(461, 61);
|
||||
|
||||
|
||||
var map = em.getChannelServer().getMapFactory().getMap(bossMapid);
|
||||
if (map.getMonsterById(bossMobid) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var boss = Packages.server.life.MapleLifeFactory.getMonster(bossMobid);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var boss = LifeFactory.getMonster(bossMobid);
|
||||
var bossPos = new Point(461, 61);
|
||||
map.spawnMonsterOnGroundBelow(boss, bossPos);
|
||||
map.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Door boss Spawner (based on xQuasar's King Clang spawner)
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -33,26 +33,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var bossMobid = 9400611;
|
||||
var bossMapid = 677000007;
|
||||
var bossMsg = "Crocell has appeared!";
|
||||
var bossPos = new Packages.java.awt.Point(171, 50);
|
||||
|
||||
|
||||
var map = em.getChannelServer().getMapFactory().getMap(bossMapid);
|
||||
if (map.getMonsterById(bossMobid) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var boss = Packages.server.life.MapleLifeFactory.getMonster(bossMobid);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var boss = LifeFactory.getMonster(bossMobid);
|
||||
var bossPos = new Point(171, 50);
|
||||
map.spawnMonsterOnGroundBelow(boss, bossPos);
|
||||
map.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
map.broadcastMessage(PacketCreator.serverNotice(6, bossMsg));
|
||||
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Dyle Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Dyle Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
importPackage(Packages.server.life);
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,19 +36,25 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var dangeroudCroko1 = em.getChannelServer().getMapFactory().getMap(107000300);
|
||||
if(dangeroudCroko1.getMonsterById(6220000) != null) {
|
||||
setupTask = em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
dangeroudCroko1.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(6220000), new Packages.java.awt.Point(90, 119));
|
||||
dangeroudCroko1.broadcastMessage(MaplePacketCreator.serverNotice(6, "The huge crocodile Dyle has come out from the swamp."));
|
||||
setupTask = em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
if (dangeroudCroko1.getMonsterById(6220000) != null) {
|
||||
setupTask = em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(90, 119);
|
||||
dangeroudCroko1.spawnMonsterOnGroundBelow(LifeFactory.getMonster(6220000), spawnpoint);
|
||||
dangeroudCroko1.broadcastMessage(PacketCreator.serverNotice(6, "The huge crocodile Dyle has come out from the swamp."));
|
||||
setupTask = em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Eliza1 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Eliza1 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
var setupTask;
|
||||
|
||||
@@ -40,22 +38,27 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var eliza = LifeFactory.getMonster(8220000);
|
||||
var stairwayToTheSky2 = em.getChannelServer().getMapFactory().getMap(200010300);
|
||||
var eliza = Packages.server.life.MapleLifeFactory.getMonster(8220000);
|
||||
|
||||
if(stairwayToTheSky2.getMonsterById(8220000) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
stairwayToTheSky2.spawnMonsterOnGroundBelow(eliza, new Packages.java.awt.Point(208, 83));
|
||||
stairwayToTheSky2.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Eliza has appeared with a black whirlwind."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
|
||||
if (stairwayToTheSky2.getMonsterById(8220000) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(208, 83);
|
||||
stairwayToTheSky2.spawnMonsterOnGroundBelow(eliza, spawnpoint);
|
||||
stairwayToTheSky2.broadcastMessage(PacketCreator.serverNotice(6, "Eliza has appeared with a black whirlwind."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Faust1 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Faust1 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,22 +36,27 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var theForestOfEvil1 = em.getChannelServer().getMapFactory().getMap(100040105);
|
||||
var faust1 = Packages.server.life.MapleLifeFactory.getMonster(5220002);
|
||||
|
||||
if(theForestOfEvil1.getMonsterById(5220002) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
theForestOfEvil1.spawnMonsterOnGroundBelow(faust1, new Packages.java.awt.Point(456, 278));
|
||||
theForestOfEvil1.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Faust appeared amidst the blue fog."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
if (theForestOfEvil1.getMonsterById(5220002) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
|
||||
var faust1 = LifeFactory.getMonster(5220002);
|
||||
const spawnpoint = new Point(456, 278);
|
||||
theForestOfEvil1.spawnMonsterOnGroundBelow(faust1, spawnpoint);
|
||||
theForestOfEvil1.broadcastMessage(PacketCreator.serverNotice(6, "Faust appeared amidst the blue fog."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Faust2 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Faust2 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,22 +36,28 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var theForestOfEvil2 = em.getChannelServer().getMapFactory().getMap(100040106);
|
||||
var faust2 = Packages.server.life.MapleLifeFactory.getMonster(5220002);
|
||||
|
||||
if(theForestOfEvil2.getMonsterById(5220002) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
theForestOfEvil2.spawnMonsterOnGroundBelow(faust2, new Packages.java.awt.Point(474, 278));
|
||||
theForestOfEvil2.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Faust appeared amidst the blue fog."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
var faust2 = LifeFactory.getMonster(5220002);
|
||||
|
||||
if (theForestOfEvil2.getMonsterById(5220002) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(474, 278);
|
||||
theForestOfEvil2.spawnMonsterOnGroundBelow(faust2, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
theForestOfEvil2.broadcastMessage(PacketCreator.serverNotice(6, "Faust appeared amidst the blue fog."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Chimera/Kimera Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Chimera/Kimera Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,25 +36,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var labSecretBasementPath = em.getChannelServer().getMapFactory().getMap(261030000);
|
||||
var chimera = Packages.server.life.MapleLifeFactory.getMonster(8220002);
|
||||
|
||||
if(labSecretBasementPath.getMonsterById(8220002) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var chimera = LifeFactory.getMonster(8220002);
|
||||
|
||||
if (labSecretBasementPath.getMonsterById(8220002) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
var posY = 180;
|
||||
posX = (Math.floor(Math.random() * 900) - 900);
|
||||
labSecretBasementPath.spawnMonsterOnGroundBelow(chimera, new Packages.java.awt.Point(posX, posY));
|
||||
labSecretBasementPath.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Kimera has appeared out of the darkness of the underground with a glitter in her eyes."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
posX = (Math.floor(Math.random() * 900) - 900);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
labSecretBasementPath.spawnMonsterOnGroundBelow(chimera, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
labSecretBasementPath.broadcastMessage(PacketCreator.serverNotice(6, "Kimera has appeared out of the darkness of the underground with a glitter in her eyes."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,19 +20,17 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
King Clang Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
King Clang Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
var hotSand;
|
||||
|
||||
function init() {
|
||||
hotSand = em.getChannelServer().getMapFactory().getMap(110040000);
|
||||
hotSand = em.getChannelServer().getMapFactory().getMap(110040000);
|
||||
scheduleNew();
|
||||
}
|
||||
|
||||
@@ -41,22 +39,29 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
if(hotSand.getMonsterById(5220001) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
var kingClang = Packages.server.life.MapleLifeFactory.getMonster(5220001);
|
||||
if (hotSand.getMonsterById(5220001) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var kingClang = LifeFactory.getMonster(5220001);
|
||||
var posX;
|
||||
var posY = 140;
|
||||
posX = Math.floor((Math.random() * 2400) - 1600);
|
||||
hotSand.spawnMonsterOnGroundBelow(kingClang, new Packages.java.awt.Point(posX, posY));
|
||||
hotSand.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "A strange turban shell has appeared on the beach."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
posX = Math.floor((Math.random() * 2400) - 1600);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
hotSand.spawnMonsterOnGroundBelow(kingClang, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
hotSand.broadcastMessage(PacketCreator.serverNotice(6, "A strange turban shell has appeared on the beach."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
King Sage Cat Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
King Sage Cat Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,24 +36,30 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var goblinForest2 = em.getChannelServer().getMapFactory().getMap(250010504);
|
||||
var kingSageCat = Packages.server.life.MapleLifeFactory.getMonster(7220002);
|
||||
|
||||
if(goblinForest2.getMonsterById(7220002) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var kingSageCat = LifeFactory.getMonster(7220002);
|
||||
|
||||
if (goblinForest2.getMonsterById(7220002) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
var posX;
|
||||
var posY = 540;
|
||||
posX = Math.floor((Math.random() * 1300) - 500);
|
||||
goblinForest2.spawnMonsterOnGroundBelow(kingSageCat, new Packages.java.awt.Point(posX, posY));
|
||||
goblinForest2.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "The ghostly air around here has become stronger. The unpleasant sound of a cat crying can be heard."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
posX = Math.floor((Math.random() * 1300) - 500);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
goblinForest2.spawnMonsterOnGroundBelow(kingSageCat, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
goblinForest2.broadcastMessage(PacketCreator.serverNotice(6, "The ghostly air around here has become stronger. The unpleasant sound of a cat crying can be heard."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Leviathan Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Leviathan Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,24 +36,30 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var leviathansCanyon = em.getChannelServer().getMapFactory().getMap(240040401);
|
||||
var leviathan = Packages.server.life.MapleLifeFactory.getMonster(8220003);
|
||||
if(leviathansCanyon.getMonsterById(8220003) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var leviathan = LifeFactory.getMonster(8220003);
|
||||
if (leviathansCanyon.getMonsterById(8220003) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
var posY = 1125;
|
||||
posX = Math.floor((Math.random() * 600) - 300);
|
||||
leviathansCanyon.spawnMonsterOnGroundBelow(leviathan, new Packages.java.awt.Point(posX, posY));
|
||||
leviathansCanyon.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Leviathan emerges from the canyon and the cold icy wind blows."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
posX = Math.floor((Math.random() * 600) - 300);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
leviathansCanyon.spawnMonsterOnGroundBelow(leviathan, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
leviathansCanyon.broadcastMessage(PacketCreator.serverNotice(6, "Leviathan emerges from the canyon and the cold icy wind blows."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,13 +20,11 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Mano Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Mano Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -37,21 +35,27 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var thicketAroundTheBeach3 = em.getChannelServer().getMapFactory().getMap(104000400);
|
||||
var mano = Packages.server.life.MapleLifeFactory.getMonster(2220000);
|
||||
if(thicketAroundTheBeach3.getMonsterById(2220000) != null) {
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var mano = LifeFactory.getMonster(2220000);
|
||||
if (thicketAroundTheBeach3.getMonsterById(2220000) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
thicketAroundTheBeach3.spawnMonsterOnGroundBelow(mano, new Packages.java.awt.Point(279, -496));
|
||||
thicketAroundTheBeach3.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "A cool breeze was felt when Mano appeared."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(279, -496);
|
||||
thicketAroundTheBeach3.spawnMonsterOnGroundBelow(mano, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
thicketAroundTheBeach3.broadcastMessage(PacketCreator.serverNotice(6, "A cool breeze was felt when Mano appeared."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Nine Tailed Fox (Old Fox) Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Nine Tailed Fox (Old Fox) Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,23 +36,29 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var moonRidge = em.getChannelServer().getMapFactory().getMap(222010310);
|
||||
var nineTailedFox = Packages.server.life.MapleLifeFactory.getMonster(7220001);
|
||||
if(moonRidge.getMonsterById(7220001) != null) {
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
return;
|
||||
}
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var nineTailedFox = LifeFactory.getMonster(7220001);
|
||||
if (moonRidge.getMonsterById(7220001) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
var posX;
|
||||
var posY = 33;
|
||||
posX = Math.floor((Math.random() * 1300) - 800);
|
||||
moonRidge.spawnMonsterOnGroundBelow(nineTailedFox, new Packages.java.awt.Point(posX, posY));
|
||||
moonRidge.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "As the moon light dims, a long fox cry can be heard and the presence of the old fox can be felt"));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
posX = Math.floor((Math.random() * 1300) - 800);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
moonRidge.spawnMonsterOnGroundBelow(nineTailedFox, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
moonRidge.broadcastMessage(PacketCreator.serverNotice(6, "As the moon light dims, a long fox cry can be heard and the presence of the old fox can be felt"));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -21,14 +21,12 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Seruf Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Seruf Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -39,25 +37,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var theSeaweedTower = em.getChannelServer().getMapFactory().getMap(230020100);
|
||||
var seruf = Packages.server.life.MapleLifeFactory.getMonster(4220001);
|
||||
|
||||
if(theSeaweedTower.getMonsterById(4220001) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var seruf = LifeFactory.getMonster(4220001);
|
||||
|
||||
if (theSeaweedTower.getMonsterById(4220001) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
var posY = 520;
|
||||
posX = Math.floor((Math.random() * 2300) - 1500);
|
||||
theSeaweedTower.spawnMonsterOnGroundBelow(seruf, new Packages.java.awt.Point(posX, posY));
|
||||
theSeaweedTower.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "A strange shell has appeared from a grove of seaweed"));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
posX = Math.floor((Math.random() * 2300) - 1500);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
theSeaweedTower.spawnMonsterOnGroundBelow(seruf, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
theSeaweedTower.broadcastMessage(PacketCreator.serverNotice(6, "A strange shell has appeared from a grove of seaweed"));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Snack Bar Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
Ronan - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Snack Bar Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
Ronan - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
**/
|
||||
function init() {
|
||||
scheduleNew();
|
||||
}
|
||||
@@ -35,25 +35,30 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var snackBarMap = em.getChannelServer().getMapFactory().getMap(105090310);
|
||||
var snackBar = Packages.server.life.MapleLifeFactory.getMonster(8220008);
|
||||
|
||||
if(snackBarMap.getMonsterById(8220008) != null || snackBarMap.getMonsterById(8220009) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var setPos = [[-626, -604], [735, -600]];
|
||||
var rndPos = setPos[Math.floor(Math.random() * setPos.length)];
|
||||
|
||||
snackBarMap.spawnMonsterOnGroundBelow(snackBar, new Packages.java.awt.Point(rndPos[0], rndPos[1]));
|
||||
snackBarMap.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Slowly, a suspicious food stand opens up on a strangely remote place."));
|
||||
em.schedule("start", 3 * 60 *60 * 1000);
|
||||
|
||||
if (snackBarMap.getMonsterById(8220008) != null || snackBarMap.getMonsterById(8220009) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var setPos = [[-626, -604], [735, -600]];
|
||||
var rndPos = setPos[Math.floor(Math.random() * setPos.length)];
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var snackBar = LifeFactory.getMonster(8220008);
|
||||
snackBarMap.spawnMonsterOnGroundBelow(snackBar, new Point(rndPos[0], rndPos[1]));
|
||||
snackBarMap.broadcastMessage(PacketCreator.serverNotice(6, "Slowly, a suspicious food stand opens up on a strangely remote place."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Stumpy Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Stumpy Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,24 +36,30 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var eastRockyMountain5 = em.getChannelServer().getMapFactory().getMap(101030404);
|
||||
var stumpy = Packages.server.life.MapleLifeFactory.getMonster(3220000);
|
||||
|
||||
if(eastRockyMountain5.getMonsterById(3220000) != null) {
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var stumpy = LifeFactory.getMonster(3220000);
|
||||
|
||||
if (eastRockyMountain5.getMonsterById(3220000) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var posX;
|
||||
var posY = 1280;
|
||||
posX = Math.floor((Math.random() * 800) + 400);
|
||||
eastRockyMountain5.spawnMonsterOnGroundBelow(stumpy, new Packages.java.awt.Point(posX, posY));
|
||||
eastRockyMountain5.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Stumpy has appeared with a stumping sound that rings the Stone Mountain."));
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
eastRockyMountain5.spawnMonsterOnGroundBelow(stumpy, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
eastRockyMountain5.broadcastMessage(PacketCreator.serverNotice(6, "Stumpy has appeared with a stumping sound that rings the Stone Mountain."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Tae Roon Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Tae Roon Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,25 +36,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var territoryOfWanderingBear = em.getChannelServer().getMapFactory().getMap(250010304);
|
||||
var taeRoon = Packages.server.life.MapleLifeFactory.getMonster(7220000);
|
||||
|
||||
if(territoryOfWanderingBear.getMonsterById(7220000) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var taeRoon = LifeFactory.getMonster(7220000);
|
||||
|
||||
if (territoryOfWanderingBear.getMonsterById(7220000) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
var posY = 390;
|
||||
posX = Math.floor((Math.random() * 700) - 800);
|
||||
territoryOfWanderingBear.spawnMonsterOnGroundBelow(taeRoon, new Packages.java.awt.Point(posX, posY));
|
||||
territoryOfWanderingBear.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Tae Roon has appeared with a soft whistling sound."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
posX = Math.floor((Math.random() * 700) - 800);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
territoryOfWanderingBear.spawnMonsterOnGroundBelow(taeRoon, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
territoryOfWanderingBear.broadcastMessage(PacketCreator.serverNotice(6, "Tae Roon has appeared with a soft whistling sound."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,13 +20,11 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Timer1 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Timer1 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -37,25 +35,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var whirlpoolOfTime = em.getChannelServer().getMapFactory().getMap(220050100);
|
||||
var timer1 = Packages.server.life.MapleLifeFactory.getMonster(5220003);
|
||||
|
||||
if(whirlpoolOfTime.getMonsterById(5220003) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var timer1 = LifeFactory.getMonster(5220003);
|
||||
|
||||
if (whirlpoolOfTime.getMonsterById(5220003) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
var posY = 1030;
|
||||
posX = Math.floor((Math.random() * 770) - 770);
|
||||
whirlpoolOfTime.spawnMonsterOnGroundBelow(timer1, new Packages.java.awt.Point(posX, posY));
|
||||
whirlpoolOfTime.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
posX = Math.floor((Math.random() * 770) - 770);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
whirlpoolOfTime.spawnMonsterOnGroundBelow(timer1, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
whirlpoolOfTime.broadcastMessage(PacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Timer2 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Timer2 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -38,25 +36,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var lostTime1 = em.getChannelServer().getMapFactory().getMap(220050000);
|
||||
var timer2 = Packages.server.life.MapleLifeFactory.getMonster(5220003);
|
||||
|
||||
if(lostTime1.getMonsterById(5220003) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var timer2 = LifeFactory.getMonster(5220003);
|
||||
|
||||
if (lostTime1.getMonsterById(5220003) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
var posY = 1030;
|
||||
posX = Math.floor((Math.random() * 1400) - 1000);
|
||||
lostTime1.spawnMonsterOnGroundBelow(timer2, new Packages.java.awt.Point(posX, posY));
|
||||
lostTime1.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
posX = Math.floor((Math.random() * 1400) - 1000);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
lostTime1.spawnMonsterOnGroundBelow(timer2, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
lostTime1.broadcastMessage(PacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -21,14 +21,12 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Timer3 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Timer3 Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
|
||||
**/
|
||||
|
||||
importPackage(Packages.client);
|
||||
**/
|
||||
|
||||
function init() {
|
||||
scheduleNew();
|
||||
@@ -39,25 +37,31 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var lostTime2 = em.getChannelServer().getMapFactory().getMap(220050200);
|
||||
var timer3 = Packages.server.life.MapleLifeFactory.getMonster(5220003);
|
||||
|
||||
if(lostTime2.getMonsterById(5220003) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
var timer3 = LifeFactory.getMonster(5220003);
|
||||
|
||||
if (lostTime2.getMonsterById(5220003) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var posX;
|
||||
var posY = 1030;
|
||||
posX = Math.floor((Math.random() * 1400) - 700);
|
||||
lostTime2.spawnMonsterOnGroundBelow(timer3, new Packages.java.awt.Point(posX, posY));
|
||||
lostTime2.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
posX = Math.floor((Math.random() * 1400) - 700);
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const spawnpoint = new Point(posX, posY);
|
||||
lostTime2.spawnMonsterOnGroundBelow(timer3, spawnpoint);
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
lostTime2.broadcastMessage(PacketCreator.serverNotice(6, "Tick-Tock Tick-Tock! Timer makes it's presence known."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Zeno Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
**/
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Zeno Spawner
|
||||
-- Edited by --------------------------------------------------------------------------------------
|
||||
ThreeStep - based on xQuasar's King Clang spawner
|
||||
**/
|
||||
function init() {
|
||||
scheduleNew();
|
||||
}
|
||||
@@ -35,22 +35,27 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function cancelSchedule() {
|
||||
if (setupTask != null)
|
||||
if (setupTask != null) {
|
||||
setupTask.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
function start() {
|
||||
var graysPrairie = em.getChannelServer().getMapFactory().getMap(221040301);
|
||||
var zeno = Packages.server.life.MapleLifeFactory.getMonster(6220001);
|
||||
|
||||
if(graysPrairie.getMonsterById(6220001) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
graysPrairie.spawnMonsterOnGroundBelow(zeno, new Packages.java.awt.Point(-4224, 776));
|
||||
graysPrairie.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Zeno has appeared with a heavy sound of machinery."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
|
||||
if (graysPrairie.getMonsterById(6220001) != null) {
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
|
||||
var zeno = LifeFactory.getMonster(6220001);
|
||||
graysPrairie.spawnMonsterOnGroundBelow(zeno, new Point(-4224, 776));
|
||||
graysPrairie.broadcastMessage(PacketCreator.serverNotice(6, "Zeno has appeared with a heavy sound of machinery."));
|
||||
em.schedule("start", 3 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
// ---------- FILLER FUNCTIONS ----------
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Vs Balrog
|
||||
*/
|
||||
|
||||
importPackage(Packages.server.life);
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 6, maxPlayers = 30;
|
||||
@@ -43,140 +41,153 @@ var bossMobId = 8830003;
|
||||
var eventTime = 60; // 60 minutes
|
||||
var releaseClawTime = 1;
|
||||
|
||||
var lobbyRange = [0, 0];
|
||||
const maxLobbies = 1;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {
|
||||
var itemSet = [];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
var itemSet = [];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = []; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = []; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
}
|
||||
|
||||
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
if(party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
for(var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
if (party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
|
||||
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if(ch.isLeader()) hasLeader = true;
|
||||
eligible.push(ch);
|
||||
}
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
|
||||
if (ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if (ch.isLeader()) {
|
||||
hasLeader = true;
|
||||
}
|
||||
eligible.push(ch);
|
||||
}
|
||||
}
|
||||
|
||||
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
|
||||
return eligible;
|
||||
}
|
||||
|
||||
if (!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) {
|
||||
eligible = [];
|
||||
}
|
||||
return Java.to(eligible, Java.type('net.server.world.PartyCharacter[]'));
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Balrog" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(105100300).resetPQ(level);
|
||||
eim.getInstanceMap(105100301).resetPQ(level);
|
||||
eim.schedule("releaseLeftClaw", releaseClawTime * 60000);
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
var eim = em.newInstance("Balrog" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(105100300).resetPQ(level);
|
||||
eim.getInstanceMap(105100301).resetPQ(level);
|
||||
eim.schedule("releaseLeftClaw", releaseClawTime * 60000);
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim) {
|
||||
spawnBalrog(eim);
|
||||
spawnBalrog(eim);
|
||||
}
|
||||
|
||||
function respawnStages(eim) {}
|
||||
|
||||
function releaseLeftClaw(eim) {
|
||||
eim.getInstanceMap(entryMap).killMonster(8830006);
|
||||
eim.getInstanceMap(entryMap).killMonster(8830006);
|
||||
}
|
||||
|
||||
function spawnBalrog(eim) {
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
mapObj.spawnFakeMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830000), new Packages.java.awt.Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830002), new Packages.java.awt.Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830006), new Packages.java.awt.Point(412, 258));
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
mapObj.spawnFakeMonsterOnGroundBelow(LifeFactory.getMonster(8830000), new Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8830002), new Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8830006), new Point(412, 258));
|
||||
}
|
||||
|
||||
function spawnSealedBalrog(eim) {
|
||||
eim.getInstanceMap(entryMap).spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(bossMobId), new Packages.java.awt.Point(412, 258));
|
||||
const Point = Java.type('java.awt.Point');
|
||||
eim.getInstanceMap(entryMap).spawnMonsterOnGroundBelow(LifeFactory.getMonster(bossMobId), new Point(412, 258));
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
end(eim);
|
||||
end(eim);
|
||||
}
|
||||
|
||||
function playerUnregistered(eim, player) {}
|
||||
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {
|
||||
if(!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {}
|
||||
@@ -184,21 +195,21 @@ function changedLeader(eim, leader) {}
|
||||
function playerDead(eim, player) {}
|
||||
|
||||
function playerRevive(eim, player) { // player presses ok on the death pop up.
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDisconnected(eim, player) {
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty(eim, player) {}
|
||||
@@ -206,60 +217,60 @@ function leftParty(eim, player) {}
|
||||
function disbandParty(eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
var party = eim.getPlayers();
|
||||
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
var party = eim.getPlayers();
|
||||
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function giveRandomEventReward(eim, player) {
|
||||
eim.giveEventReward(player);
|
||||
eim.giveEventReward(player);
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
}
|
||||
|
||||
function isUnsealedBalrog(mob) {
|
||||
var balrogid = mob.getId() - 8830000;
|
||||
return balrogid >= 0 && balrogid <= 2;
|
||||
var balrogid = mob.getId() - 8830000;
|
||||
return balrogid >= 0 && balrogid <= 2;
|
||||
}
|
||||
|
||||
function isBalrogBody(mob) {
|
||||
return mob.getId() == minMobId;
|
||||
return mob.getId() == minMobId;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isUnsealedBalrog(mob)) {
|
||||
var count = eim.getIntProperty("boss");
|
||||
|
||||
if(count == 2) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
if (isUnsealedBalrog(mob)) {
|
||||
var count = eim.getIntProperty("boss");
|
||||
|
||||
eim.dispatchRaiseQuestMobCount(bossMobId, entryMap);
|
||||
eim.dispatchRaiseQuestMobCount(9101003, entryMap); // thanks Atoot for noticing quest not getting updated after boss kill
|
||||
mob.getMap().broadcastBalrogVictory(eim.getLeader().getName());
|
||||
} else {
|
||||
if(count == 1) {
|
||||
var mapobj = eim.getInstanceMap(entryMap);
|
||||
mapobj.makeMonsterReal(mapobj.getMonsterById(8830000));
|
||||
}
|
||||
|
||||
eim.setIntProperty("boss", count + 1);
|
||||
}
|
||||
|
||||
if(isBalrogBody(mob)) {
|
||||
eim.schedule("spawnSealedBalrog", 10 * 1000);
|
||||
}
|
||||
if (count == 2) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
|
||||
eim.dispatchRaiseQuestMobCount(bossMobId, entryMap);
|
||||
eim.dispatchRaiseQuestMobCount(9101003, entryMap); // thanks Atoot for noticing quest not getting updated after boss kill
|
||||
mob.getMap().broadcastBalrogVictory(eim.getLeader().getName());
|
||||
} else {
|
||||
if (count == 1) {
|
||||
var mapobj = eim.getInstanceMap(entryMap);
|
||||
mapobj.makeMonsterReal(mapobj.getMonsterById(8830000));
|
||||
}
|
||||
|
||||
eim.setIntProperty("boss", count + 1);
|
||||
}
|
||||
|
||||
if (isBalrogBody(mob)) {
|
||||
eim.schedule("spawnSealedBalrog", 10 * 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Vs Balrog
|
||||
*/
|
||||
|
||||
importPackage(Packages.server.life);
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 3, maxPlayers = 30;
|
||||
@@ -43,140 +41,153 @@ var bossMobId = 8830010;
|
||||
var eventTime = 60; // 60 minutes
|
||||
var releaseClawTime = 1;
|
||||
|
||||
var lobbyRange = [0, 0];
|
||||
const maxLobbies = 1;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {
|
||||
var itemSet = [];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
var itemSet = [];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = []; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = []; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
}
|
||||
|
||||
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
if(party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
for(var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
if (party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
|
||||
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if(ch.isLeader()) hasLeader = true;
|
||||
eligible.push(ch);
|
||||
}
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
|
||||
if (ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if (ch.isLeader()) {
|
||||
hasLeader = true;
|
||||
}
|
||||
eligible.push(ch);
|
||||
}
|
||||
}
|
||||
|
||||
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
|
||||
return eligible;
|
||||
}
|
||||
|
||||
if (!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) {
|
||||
eligible = [];
|
||||
}
|
||||
return Java.to(eligible, Java.type('net.server.world.PartyCharacter[]'));
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Balrog" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(105100400).resetPQ(level);
|
||||
eim.getInstanceMap(105100401).resetPQ(level);
|
||||
eim.schedule("releaseLeftClaw", releaseClawTime * 60000);
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
var eim = em.newInstance("Balrog" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(105100400).resetPQ(level);
|
||||
eim.getInstanceMap(105100401).resetPQ(level);
|
||||
eim.schedule("releaseLeftClaw", releaseClawTime * 60000);
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim) {
|
||||
spawnBalrog(eim);
|
||||
spawnBalrog(eim);
|
||||
}
|
||||
|
||||
function respawnStages(eim) {}
|
||||
|
||||
function releaseLeftClaw(eim) {
|
||||
eim.getInstanceMap(entryMap).killMonster(8830013);
|
||||
eim.getInstanceMap(entryMap).killMonster(8830013);
|
||||
}
|
||||
|
||||
function spawnBalrog(eim) {
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
mapObj.spawnFakeMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830007), new Packages.java.awt.Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830009), new Packages.java.awt.Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8830013), new Packages.java.awt.Point(412, 258));
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
const Point = Java.type('java.awt.Point');
|
||||
mapObj.spawnFakeMonsterOnGroundBelow(LifeFactory.getMonster(8830007), new Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8830009), new Point(412, 258));
|
||||
mapObj.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8830013), new Point(412, 258));
|
||||
}
|
||||
|
||||
function spawnSealedBalrog(eim) {
|
||||
eim.getInstanceMap(entryMap).spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(bossMobId), new Packages.java.awt.Point(412, 258));
|
||||
const Point = Java.type('java.awt.Point');
|
||||
eim.getInstanceMap(entryMap).spawnMonsterOnGroundBelow(LifeFactory.getMonster(bossMobId), new Point(412, 258));
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
end(eim);
|
||||
end(eim);
|
||||
}
|
||||
|
||||
function playerUnregistered(eim, player) {}
|
||||
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {
|
||||
if(!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {}
|
||||
@@ -184,21 +195,21 @@ function changedLeader(eim, leader) {}
|
||||
function playerDead(eim, player) {}
|
||||
|
||||
function playerRevive(eim, player) { // player presses ok on the death pop up.
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDisconnected(eim, player) {
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isExpeditionTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty(eim, player) {}
|
||||
@@ -206,58 +217,58 @@ function leftParty(eim, player) {}
|
||||
function disbandParty(eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
var party = eim.getPlayers();
|
||||
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
var party = eim.getPlayers();
|
||||
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function giveRandomEventReward(eim, player) {
|
||||
eim.giveEventReward(player);
|
||||
eim.giveEventReward(player);
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
}
|
||||
|
||||
function isUnsealedBalrog(mob) {
|
||||
var balrogid = mob.getId() - 8830007;
|
||||
return balrogid >= 0 && balrogid <= 2;
|
||||
var balrogid = mob.getId() - 8830007;
|
||||
return balrogid >= 0 && balrogid <= 2;
|
||||
}
|
||||
|
||||
function isBalrogBody(mob) {
|
||||
return mob.getId() == minMobId;
|
||||
return mob.getId() == minMobId;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isUnsealedBalrog(mob)) {
|
||||
var count = eim.getIntProperty("boss");
|
||||
|
||||
if(count == 2) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
if (isUnsealedBalrog(mob)) {
|
||||
var count = eim.getIntProperty("boss");
|
||||
|
||||
eim.dispatchRaiseQuestMobCount(bossMobId, entryMap);
|
||||
mob.getMap().broadcastBalrogVictory(eim.getLeader().getName());
|
||||
} else {
|
||||
if(count == 1) {
|
||||
var mapobj = eim.getInstanceMap(entryMap);
|
||||
mapobj.makeMonsterReal(mapobj.getMonsterById(8830007));
|
||||
}
|
||||
eim.setIntProperty("boss", count + 1);
|
||||
}
|
||||
|
||||
if(isBalrogBody(mob)) {
|
||||
eim.schedule("spawnSealedBalrog", 10 * 1000);
|
||||
}
|
||||
if (count == 2) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
|
||||
eim.dispatchRaiseQuestMobCount(bossMobId, entryMap);
|
||||
mob.getMap().broadcastBalrogVictory(eim.getLeader().getName());
|
||||
} else {
|
||||
if (count == 1) {
|
||||
var mapobj = eim.getInstanceMap(entryMap);
|
||||
mapobj.makeMonsterReal(mapobj.getMonsterById(8830007));
|
||||
}
|
||||
eim.setIntProperty("boss", count + 1);
|
||||
}
|
||||
|
||||
if (isBalrogBody(mob)) {
|
||||
eim.schedule("spawnSealedBalrog", 10 * 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/**
|
||||
* @Author Ronan
|
||||
* Event - Balrog Quest
|
||||
**/
|
||||
importPackage(Packages.tools);
|
||||
**/
|
||||
|
||||
var entryMap = 910520000;
|
||||
var exitMap = 105100100;
|
||||
@@ -31,21 +30,21 @@ var maxMapId = 910520000;
|
||||
|
||||
var eventTime = 10; //10 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function init() {
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("BalrogQuest_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
|
||||
return eim;
|
||||
}
|
||||
|
||||
@@ -55,16 +54,17 @@ function afterSetup(eim) {}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var mapObj = eim.getInstanceMap(entryMap);
|
||||
|
||||
|
||||
mapObj.resetPQ(1);
|
||||
mapObj.instanceMapForceRespawn();
|
||||
mapObj.closeMapSpawnPoints();
|
||||
respawnStages(eim);
|
||||
|
||||
|
||||
player.changeMap(entryMap, 1);
|
||||
em.setProperty("noEntry","true");
|
||||
|
||||
player.getClient().announce(MaplePacketCreator.getClock(eventTime * 60));
|
||||
em.setProperty("noEntry", "true");
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
player.sendPacket(PacketCreator.getClock(eventTime * 60));
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ function playerUnregistered(eim, player) {}
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dispose();
|
||||
em.setProperty("noEntry","false");
|
||||
em.setProperty("noEntry", "false");
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
@@ -87,20 +87,24 @@ function playerDisconnected(eim, player) {
|
||||
}
|
||||
|
||||
function changedMap(eim, chr, mapid) {
|
||||
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
playerExit(eim, chr);
|
||||
}
|
||||
}
|
||||
|
||||
function isBalrog(mob) {
|
||||
return mob.getId() == 9300326;
|
||||
return mob.getId() == 9300326;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isBalrog(mob)) {
|
||||
eim.spawnNpc(1061015, new java.awt.Point(0, 115), mob.getMap());
|
||||
if (isBalrog(mob)) {
|
||||
const Point = Java.type('java.awt.Point');
|
||||
eim.spawnNpc(1061015, new Point(0, 115), mob.getMap());
|
||||
}
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
importPackage(Packages.client);
|
||||
importPackage(Packages.tools);
|
||||
importPackage(Packages.server.life);
|
||||
|
||||
var Orbis_btf;
|
||||
var Boat_to_Orbis;
|
||||
var Orbis_Boat_Cabin;
|
||||
@@ -21,10 +17,10 @@ var invasionDelay = 5 * 1000; //The time that spawn balrog
|
||||
function init() {
|
||||
closeTime = em.getTransportationTime(closeTime);
|
||||
beginTime = em.getTransportationTime(beginTime);
|
||||
rideTime = em.getTransportationTime(rideTime);
|
||||
rideTime = em.getTransportationTime(rideTime);
|
||||
invasionStartTime = em.getTransportationTime(invasionStartTime);
|
||||
invasionDelayTime = em.getTransportationTime(invasionDelayTime);
|
||||
|
||||
|
||||
Orbis_btf = em.getChannelServer().getMapFactory().getMap(200000112);
|
||||
Ellinia_btf = em.getChannelServer().getMapFactory().getMap(101000301);
|
||||
Boat_to_Orbis = em.getChannelServer().getMapFactory().getMap(200090010);
|
||||
@@ -34,16 +30,16 @@ function init() {
|
||||
Ellinia_docked = em.getChannelServer().getMapFactory().getMap(101000300);
|
||||
Orbis_Station = em.getChannelServer().getMapFactory().getMap(200000100);
|
||||
Orbis_docked = em.getChannelServer().getMapFactory().getMap(200000111);
|
||||
|
||||
|
||||
Ellinia_docked.setDocked(true);
|
||||
Orbis_docked.setDocked(true);
|
||||
|
||||
|
||||
scheduleNew();
|
||||
}
|
||||
|
||||
function scheduleNew() {
|
||||
em.setProperty("docked", "true");
|
||||
|
||||
|
||||
em.setProperty("entry", "true");
|
||||
em.setProperty("haveBalrog", "false");
|
||||
em.schedule("stopentry", closeTime);
|
||||
@@ -51,7 +47,7 @@ function scheduleNew() {
|
||||
}
|
||||
|
||||
function stopentry() {
|
||||
em.setProperty("entry","false");
|
||||
em.setProperty("entry", "false");
|
||||
Orbis_Boat_Cabin.clearMapObjects(); //boxes
|
||||
Ellinia_Boat_Cabin.clearMapObjects();
|
||||
}
|
||||
@@ -61,10 +57,12 @@ function takeoff() {
|
||||
Ellinia_btf.warpEveryone(Boat_to_Orbis.getId());
|
||||
Ellinia_docked.broadcastShip(false);
|
||||
Orbis_docked.broadcastShip(false);
|
||||
|
||||
em.setProperty("docked","false");
|
||||
|
||||
if(Math.random() < 0.42) em.schedule("approach", (invasionStartTime + (Math.random() * invasionDelayTime)));
|
||||
|
||||
em.setProperty("docked", "false");
|
||||
|
||||
if (Math.random() < 0.42) {
|
||||
em.schedule("approach", (invasionStartTime + Math.trunc((Math.random() * invasionDelayTime))));
|
||||
}
|
||||
em.schedule("arrived", rideTime);
|
||||
}
|
||||
|
||||
@@ -85,26 +83,29 @@ function arrived() {
|
||||
|
||||
function approach() {
|
||||
if (Math.floor(Math.random() * 10) < 10) {
|
||||
em.setProperty("haveBalrog","true");
|
||||
em.setProperty("haveBalrog", "true");
|
||||
Boat_to_Orbis.broadcastEnemyShip(true);
|
||||
Boat_to_Ellinia.broadcastEnemyShip(true);
|
||||
Boat_to_Orbis.broadcastMessage(MaplePacketCreator.musicChange("Bgm04/ArabPirate"));
|
||||
Boat_to_Ellinia.broadcastMessage(MaplePacketCreator.musicChange("Bgm04/ArabPirate"));
|
||||
|
||||
const PacketCreator = Java.type('tools.PacketCreator');
|
||||
Boat_to_Orbis.broadcastMessage(PacketCreator.musicChange("Bgm04/ArabPirate"));
|
||||
Boat_to_Ellinia.broadcastMessage(PacketCreator.musicChange("Bgm04/ArabPirate"));
|
||||
|
||||
em.schedule("invasion", invasionDelay);
|
||||
}
|
||||
}
|
||||
|
||||
function invasion() {
|
||||
const LifeFactory = Java.type('server.life.LifeFactory');
|
||||
|
||||
var map1 = Boat_to_Ellinia;
|
||||
var pos1 = new java.awt.Point(-538, 143);
|
||||
map1.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8150000), pos1);
|
||||
map1.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8150000), pos1);
|
||||
map1.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8150000), pos1);
|
||||
map1.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8150000), pos1);
|
||||
|
||||
var map2 = Boat_to_Orbis;
|
||||
var pos2 = new java.awt.Point(339, 148);
|
||||
map2.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8150000), pos2);
|
||||
map2.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8150000), pos2);
|
||||
map2.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8150000), pos2);
|
||||
map2.spawnMonsterOnGroundBelow(LifeFactory.getMonster(8150000), pos2);
|
||||
}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Boss Rush PQ
|
||||
*/
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 1, maxPlayers = 6;
|
||||
@@ -36,195 +36,206 @@ var maxMapId = 970042711;
|
||||
|
||||
var eventTime = 5; //5 minutes
|
||||
|
||||
var lobbyRange = [0, 7];
|
||||
const maxLobbies = 7;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel;
|
||||
var itemSet, itemQty, evLevel;
|
||||
|
||||
evLevel = 6; //Rewards at event completion
|
||||
itemSet = [3010061, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 4, 4, 12, 12, 12, 12, 12, 25];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
evLevel = 6; //Rewards at event completion
|
||||
itemSet = [3010061, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 4, 4, 12, 12, 12, 12, 12, 25];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 5; //Rewards at Rest Spot V
|
||||
itemSet = [3010063, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 8, 8, 8, 8, 8, 12];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 4; //Rewards at Rest Spot IV
|
||||
itemSet = [1122001, 1122006, 1022103, 1442065, 1032042, 1032021, 1102168, 2070005, 2040025, 2040029, 2040301, 2040413, 2040701, 2040817, 2002028, 2020009, 2020010, 2020011, 2022004, 2022005, 2022025, 2022027, 2022048, 2022049, 4020000, 4020001, 4020002, 4020003, 4020004, 4020005, 4020006, 4020007, 4020008, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 3; //Rewards at Rest Spot III
|
||||
itemSet = [1122002, 1022088, 1012076, 1402029, 1032041, 1032044, 1102167, 2070011, 2040026, 2040030, 2040302, 2040412, 2040702, 2040818, 2002028, 2020009, 2020010, 2020011, 2022004, 2022005, 2022025, 2022027, 2022048, 2022049, 4010000, 4010001, 4010002, 4010003, 4010004, 4010005, 4010006, 4010007, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 2; //Rewards at Rest Spot II
|
||||
itemSet = [1122003, 1012077, 1012079, 1432014, 1032059, 1032002, 1102191, 2330002, 2040001, 2040311, 2040401, 2040601, 2040824, 2040901, 2010000, 2010001, 2010002, 2010003, 2010004, 2020001, 2020002, 2020003, 2022020, 2022022, 4020000, 4020001, 4020002, 4020003, 4020004, 4020005, 4020006, 4020007, 4020008, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 1; //Rewards at Rest Spot I
|
||||
itemSet = [1122004, 1012078, 1432008, 1432009, 1032040, 1032009, 1102166, 2070001, 2040002, 2040310, 2040400, 2040600, 2040825, 2040902, 2010000, 2010001, 2010002, 2010003, 2010004, 2020001, 2020002, 2020003, 2022020, 2022022, 4010000, 4010001, 4010002, 4010003, 4010004, 4010005, 4010006, 4010007, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 2, 2, 2, 2, 2, 2, 2, 2, 2];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
evLevel = 5; //Rewards at Rest Spot V
|
||||
itemSet = [3010063, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 8, 8, 8, 8, 8, 12];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 4; //Rewards at Rest Spot IV
|
||||
itemSet = [1122001, 1122006, 1022103, 1442065, 1032042, 1032021, 1102168, 2070005, 2040025, 2040029, 2040301, 2040413, 2040701, 2040817, 2002028, 2020009, 2020010, 2020011, 2022004, 2022005, 2022025, 2022027, 2022048, 2022049, 4020000, 4020001, 4020002, 4020003, 4020004, 4020005, 4020006, 4020007, 4020008, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 3; //Rewards at Rest Spot III
|
||||
itemSet = [1122002, 1022088, 1012076, 1402029, 1032041, 1032044, 1102167, 2070011, 2040026, 2040030, 2040302, 2040412, 2040702, 2040818, 2002028, 2020009, 2020010, 2020011, 2022004, 2022005, 2022025, 2022027, 2022048, 2022049, 4010000, 4010001, 4010002, 4010003, 4010004, 4010005, 4010006, 4010007, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 2; //Rewards at Rest Spot II
|
||||
itemSet = [1122003, 1012077, 1012079, 1432014, 1032059, 1032002, 1102191, 2330002, 2040001, 2040311, 2040401, 2040601, 2040824, 2040901, 2010000, 2010001, 2010002, 2010003, 2010004, 2020001, 2020002, 2020003, 2022020, 2022022, 4020000, 4020001, 4020002, 4020003, 4020004, 4020005, 4020006, 4020007, 4020008, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
evLevel = 1; //Rewards at Rest Spot I
|
||||
itemSet = [1122004, 1012078, 1432008, 1432009, 1032040, 1032009, 1102166, 2070001, 2040002, 2040310, 2040400, 2040600, 2040825, 2040902, 2010000, 2010001, 2010002, 2010003, 2010004, 2020001, 2020002, 2020003, 2022020, 2022022, 4010000, 4010001, 4010002, 4010003, 4010004, 4010005, 4010006, 4010007, 4003000];
|
||||
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 2, 2, 2, 2, 2, 2, 2, 2, 2];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
}
|
||||
|
||||
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
if(party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
for(var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
if (party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
|
||||
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if(ch.isLeader()) hasLeader = true;
|
||||
eligible.push(ch);
|
||||
}
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
|
||||
if (ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if (ch.isLeader()) {
|
||||
hasLeader = true;
|
||||
}
|
||||
eligible.push(ch);
|
||||
}
|
||||
}
|
||||
|
||||
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
|
||||
return eligible;
|
||||
}
|
||||
|
||||
if (!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) {
|
||||
eligible = [];
|
||||
}
|
||||
return Java.to(eligible, Java.type('net.server.world.PartyCharacter[]'));
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("BossRush" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("lobby", lobbyid);
|
||||
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
var eim = em.newInstance("BossRush" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("lobby", lobbyid);
|
||||
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim) {}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var map = eim.getMapInstance(entryMap + eim.getIntProperty("lobby"));
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
var map = eim.getMapInstance(entryMap + eim.getIntProperty("lobby"));
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
end(eim);
|
||||
end(eim);
|
||||
}
|
||||
|
||||
function playerUnregistered(eim, player) {}
|
||||
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {
|
||||
if(!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDead(eim, player) {}
|
||||
|
||||
function playerRevive(eim, player) { // player presses ok on the death pop up.
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function playerDisconnected(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player))
|
||||
end(eim);
|
||||
else
|
||||
playerExit(eim, player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
end(eim);
|
||||
} else {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
playerLeft(eim, player);
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
} else {
|
||||
playerLeft(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function disbandParty(eim) {
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared(); // from now on event just finishes when ALL players gets out of the range defined inside changedMap function.
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared(); // from now on event just finishes when ALL players gets out of the range defined inside changedMap function.
|
||||
}
|
||||
|
||||
function giveRandomEventReward(eim, player) {
|
||||
eim.giveEventReward(player);
|
||||
eim.giveEventReward(player);
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Crimsonwood Keep PQ
|
||||
*/
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 6, maxPlayers = 30;
|
||||
@@ -36,51 +36,57 @@ var maxMapId = 610030800;
|
||||
|
||||
var eventTime = 2; // 2 minutes for first stg
|
||||
|
||||
var lobbyRange = [0, 0];
|
||||
const maxLobbies = 1;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {
|
||||
var itemSet = [4001256, 4001257, 4001258, 4001259, 4001260];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
var itemSet = [4001256, 4001257, 4001258, 4001259, 4001260];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel, expStages, mesoStages;
|
||||
var itemSet, itemQty, evLevel, expStages, mesoStages;
|
||||
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [2500, 8000, 18000, 25000, 30000, 40000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
|
||||
mesoStages = [500, 1000, 2000, 5000, 8000, 20000]; //bonus meso given on CLEAR stage signal
|
||||
eim.setEventClearStageMeso(mesoStages);
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [];
|
||||
itemQty = [];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [2500, 8000, 18000, 25000, 30000, 40000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
|
||||
mesoStages = [500, 1000, 2000, 5000, 8000, 20000]; //bonus meso given on CLEAR stage signal
|
||||
eim.setEventClearStageMeso(mesoStages);
|
||||
}
|
||||
|
||||
function afterSetup(eim) {}
|
||||
@@ -90,36 +96,38 @@ function getNameFromList(index, array) {
|
||||
}
|
||||
|
||||
function generateMapReactors(map) {
|
||||
|
||||
var jobReactors = [ [0, 0, -1, -1, 0],
|
||||
[-1, 4, 3, 3, 3],
|
||||
[1, 3, 4, 2, 2],
|
||||
[2, -1, 0, 1, -1],
|
||||
[3, 2, 1, 0, -1],
|
||||
[4, 1, -1, 4, 1],
|
||||
[-1, 2, 4],
|
||||
[-1, -1]
|
||||
];
|
||||
|
||||
|
||||
var jobReactors = [[0, 0, -1, -1, 0],
|
||||
[-1, 4, 3, 3, 3],
|
||||
[1, 3, 4, 2, 2],
|
||||
[2, -1, 0, 1, -1],
|
||||
[3, 2, 1, 0, -1],
|
||||
[4, 1, -1, 4, 1],
|
||||
[-1, 2, 4],
|
||||
[-1, -1]
|
||||
];
|
||||
|
||||
var rndIndex;
|
||||
var jobFound;
|
||||
while(true) {
|
||||
while (true) {
|
||||
jobFound = {};
|
||||
rndIndex = [];
|
||||
|
||||
for(var i = 0; i < jobReactors.length; i++) {
|
||||
|
||||
for (var i = 0; i < jobReactors.length; i++) {
|
||||
var jobReactorSlot = jobReactors[i];
|
||||
|
||||
|
||||
var idx = Math.floor(Math.random() * jobReactorSlot.length);
|
||||
jobFound["" + jobReactorSlot[idx]] = 1;
|
||||
rndIndex.push(idx);
|
||||
}
|
||||
|
||||
if(Object.keys(jobFound).length == 6) break;
|
||||
|
||||
if (Object.keys(jobFound).length == 6) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var toDeploy = [];
|
||||
|
||||
|
||||
toDeploy.push(getNameFromList(rndIndex[0], ["4skill0a", "4skill0b", "4fake1c", "4fake1d", "4skill0e"]));
|
||||
toDeploy.push(getNameFromList(rndIndex[1], ["4fake0a", "4skill4b", "4skill3c", "4skill3d", "4skill3e"]));
|
||||
toDeploy.push(getNameFromList(rndIndex[2], ["4skill1a", "4skill3b", "4skill4c", "4skill2d", "4skill2e"]));
|
||||
@@ -128,22 +136,22 @@ function generateMapReactors(map) {
|
||||
toDeploy.push(getNameFromList(rndIndex[5], ["4skill4a", "4skill1b", "4fake0c", "4skill4d", "4skill1e"]));
|
||||
toDeploy.push(getNameFromList(rndIndex[6], ["4fake1a", "4skill2c", "4skill4e"]));
|
||||
toDeploy.push(getNameFromList(rndIndex[7], ["4fake0b", "4fake0d"]));
|
||||
|
||||
var toRandomize = new Array();
|
||||
|
||||
for(var i = 0; i < toDeploy.length; i++) {
|
||||
|
||||
var toRandomize = [];
|
||||
|
||||
for (var i = 0; i < toDeploy.length; i++) {
|
||||
var react = map.getReactorByName(toDeploy[i]);
|
||||
|
||||
|
||||
react.setState(1);
|
||||
toRandomize.push(react);
|
||||
}
|
||||
|
||||
|
||||
map.shuffleReactors(toRandomize);
|
||||
}
|
||||
|
||||
function setup(channel) {
|
||||
var eim = em.newInstance("CWKPQ" + channel);
|
||||
|
||||
|
||||
eim.setProperty("current_instance", "0");
|
||||
eim.setProperty("glpq1", "0");
|
||||
eim.setProperty("glpq2", "0");
|
||||
@@ -153,7 +161,7 @@ function setup(channel) {
|
||||
eim.setProperty("glpq5", "0");
|
||||
eim.setProperty("glpq5_room", "0");
|
||||
eim.setProperty("glpq6", "0");
|
||||
|
||||
|
||||
eim.setProperty("glpq_f0", "0");
|
||||
eim.setProperty("glpq_f1", "0");
|
||||
eim.setProperty("glpq_f2", "0");
|
||||
@@ -180,10 +188,10 @@ function setup(channel) {
|
||||
eim.getInstanceMap(610030600).resetPQ(level);
|
||||
eim.getInstanceMap(610030700).resetPQ(level);
|
||||
eim.getInstanceMap(610030800).resetPQ(level);
|
||||
|
||||
|
||||
generateMapReactors(eim.getInstanceMap(610030400));
|
||||
eim.getInstanceMap(610030550).shuffleReactors();
|
||||
|
||||
|
||||
//add environments
|
||||
var a = Array("a", "b", "c", "d", "e", "f", "g", "h", "i");
|
||||
var map = eim.getInstanceMap(610030400);
|
||||
@@ -198,20 +206,20 @@ function setup(channel) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var pos_x = Array(944,401,28,-332,-855);
|
||||
var pos_y = Array(-204,-384,-504,-384,-204);
|
||||
|
||||
var pos_x = Array(944, 401, 28, -332, -855);
|
||||
var pos_y = Array(-204, -384, -504, -384, -204);
|
||||
var map = eim.getInstanceMap(610030540);
|
||||
for (var z = 0; z < pos_x.length; z++) {
|
||||
var mob = em.getMonster(9400594);
|
||||
eim.registerMonster(mob);
|
||||
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(pos_x[z], pos_y[z]));
|
||||
}
|
||||
|
||||
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
|
||||
|
||||
eim.schedule("spawnGuardians", 60000);
|
||||
return eim;
|
||||
}
|
||||
@@ -225,13 +233,13 @@ function playerEntry(eim, player) {
|
||||
function spawnGuardians(eim) {
|
||||
var map = eim.getMapInstance(610030100);
|
||||
if (map.countPlayers() <= 0) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
map.broadcastStringMessage(5, "The Master Guardians have detected you.");
|
||||
for (var i = 0; i < 20; i++) { //spawn 20 guardians
|
||||
var mob = eim.getMonster(9400594);
|
||||
eim.registerMonster(mob);
|
||||
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(1000, 336));
|
||||
var mob = eim.getMonster(9400594);
|
||||
eim.registerMonster(mob);
|
||||
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(1000, 336));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,53 +249,52 @@ function scheduledTimeout(eim) {
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dropMessage(5, "[Expedition] Either the leader has quit the expedition or there is no longer the minimum number of members required to continue it.");
|
||||
end(eim);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the instance.");
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
} else {
|
||||
switch(mapid) {
|
||||
case 610030200:
|
||||
if (eim.getIntProperty("current_instance") == 0) {
|
||||
eim.restartEventTimer(600000); //10 mins
|
||||
eim.setIntProperty("current_instance", 1);
|
||||
}
|
||||
break;
|
||||
case 610030300:
|
||||
if (eim.getIntProperty("current_instance") == 1) {
|
||||
eim.restartEventTimer(600000); //10 mins
|
||||
eim.setIntProperty("current_instance", 2);
|
||||
}
|
||||
break;
|
||||
case 610030400:
|
||||
if (eim.getIntProperty("current_instance") == 2) {
|
||||
eim.restartEventTimer(600000); //10 mins
|
||||
eim.setIntProperty("current_instance", 3);
|
||||
}
|
||||
break;
|
||||
case 610030500:
|
||||
if (eim.getIntProperty("current_instance") == 3) {
|
||||
eim.restartEventTimer(1200000); //20 mins
|
||||
eim.setIntProperty("current_instance", 4);
|
||||
}
|
||||
break;
|
||||
case 610030600:
|
||||
if (eim.getIntProperty("current_instance") == 4) {
|
||||
eim.restartEventTimer(3600000); //1 hr
|
||||
eim.setIntProperty("current_instance", 5);
|
||||
}
|
||||
break;
|
||||
case 610030800:
|
||||
if (eim.getIntProperty("current_instance") == 5) {
|
||||
eim.restartEventTimer(60000); //1 min
|
||||
eim.setIntProperty("current_instance", 6);
|
||||
}
|
||||
break;
|
||||
switch (mapid) {
|
||||
case 610030200:
|
||||
if (eim.getIntProperty("current_instance") == 0) {
|
||||
eim.restartEventTimer(600000); //10 mins
|
||||
eim.setIntProperty("current_instance", 1);
|
||||
}
|
||||
break;
|
||||
case 610030300:
|
||||
if (eim.getIntProperty("current_instance") == 1) {
|
||||
eim.restartEventTimer(600000); //10 mins
|
||||
eim.setIntProperty("current_instance", 2);
|
||||
}
|
||||
break;
|
||||
case 610030400:
|
||||
if (eim.getIntProperty("current_instance") == 2) {
|
||||
eim.restartEventTimer(600000); //10 mins
|
||||
eim.setIntProperty("current_instance", 3);
|
||||
}
|
||||
break;
|
||||
case 610030500:
|
||||
if (eim.getIntProperty("current_instance") == 3) {
|
||||
eim.restartEventTimer(1200000); //20 mins
|
||||
eim.setIntProperty("current_instance", 4);
|
||||
}
|
||||
break;
|
||||
case 610030600:
|
||||
if (eim.getIntProperty("current_instance") == 4) {
|
||||
eim.restartEventTimer(3600000); //1 hr
|
||||
eim.setIntProperty("current_instance", 5);
|
||||
}
|
||||
break;
|
||||
case 610030800:
|
||||
if (eim.getIntProperty("current_instance") == 5) {
|
||||
eim.restartEventTimer(60000); //1 min
|
||||
eim.setIntProperty("current_instance", 6);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -301,8 +308,7 @@ function playerRevive(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dropMessage(5, "[Expedition] Either the leader has quit the expedition or there is no longer the minimum number of members required to continue it.");
|
||||
end(eim);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the instance.");
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
@@ -313,16 +319,15 @@ function playerDisconnected(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
eim.dropMessage(5, "[Expedition] Either the leader has quit the expedition or there is no longer the minimum number of members required to continue it.");
|
||||
end(eim);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the instance.");
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty (eim, player) {}
|
||||
function leftParty(eim, player) {}
|
||||
|
||||
function disbandParty (eim) {}
|
||||
function disbandParty(eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
|
||||
@@ -21,25 +21,23 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Cabin between Orbis and Leafre
|
||||
-- By ---------------------------------------------------------------------------------------------
|
||||
Information
|
||||
-- Version Info -----------------------------------------------------------------------------------
|
||||
1.5 - Fix for infinity looping [Information]
|
||||
1.4 - Ship/boat is now showed
|
||||
- Removed temp message[Information]
|
||||
- Credits to Snow, superraz777 for old source
|
||||
- Credits to Titan, Kool for the ship/boat packet
|
||||
1.3 - Removing some function since is not needed [Information]
|
||||
- Remove register player menthod [Information]
|
||||
1.2 - It should be 2 ships not 1 [Information]
|
||||
1.1 - Add timer variable for easy edit [Information]
|
||||
1.0 - First Version by Information
|
||||
---------------------------------------------------------------------------------------------------
|
||||
**/
|
||||
|
||||
importPackage(Packages.tools);
|
||||
-- Odin JavaScript --------------------------------------------------------------------------------
|
||||
Cabin between Orbis and Leafre
|
||||
-- By ---------------------------------------------------------------------------------------------
|
||||
Information
|
||||
-- Version Info -----------------------------------------------------------------------------------
|
||||
1.5 - Fix for infinity looping [Information]
|
||||
1.4 - Ship/boat is now showed
|
||||
- Removed temp message[Information]
|
||||
- Credits to Snow, superraz777 for old source
|
||||
- Credits to Titan, Kool for the ship/boat packet
|
||||
1.3 - Removing some function since is not needed [Information]
|
||||
- Remove register player menthod [Information]
|
||||
1.2 - It should be 2 ships not 1 [Information]
|
||||
1.1 - Add timer variable for easy edit [Information]
|
||||
1.0 - First Version by Information
|
||||
---------------------------------------------------------------------------------------------------
|
||||
**/
|
||||
|
||||
var Orbis_btf;
|
||||
var Leafre_btf;
|
||||
@@ -51,13 +49,13 @@ var Leafre_docked;
|
||||
//Time Setting is in millisecond
|
||||
var closeTime = 4 * 60 * 1000; //The time to close the gate
|
||||
var beginTime = 5 * 60 * 1000; //The time to begin the ride
|
||||
var rideTime = 5 * 60 * 1000; //The time that require move to destination
|
||||
var rideTime = 5 * 60 * 1000; //The time that require move to destination
|
||||
|
||||
function init() {
|
||||
closeTime = em.getTransportationTime(closeTime);
|
||||
beginTime = em.getTransportationTime(beginTime);
|
||||
rideTime = em.getTransportationTime(rideTime);
|
||||
|
||||
rideTime = em.getTransportationTime(rideTime);
|
||||
|
||||
Orbis_btf = em.getChannelServer().getMapFactory().getMap(200000132);
|
||||
Leafre_btf = em.getChannelServer().getMapFactory().getMap(240000111);
|
||||
Cabin_to_Orbis = em.getChannelServer().getMapFactory().getMap(200090210);
|
||||
@@ -66,7 +64,7 @@ function init() {
|
||||
Leafre_docked = em.getChannelServer().getMapFactory().getMap(240000110);
|
||||
Orbis_Station = em.getChannelServer().getMapFactory().getMap(200000100);
|
||||
Leafre_Station = em.getChannelServer().getMapFactory().getMap(240000100);
|
||||
|
||||
|
||||
scheduleNew();
|
||||
}
|
||||
|
||||
@@ -74,37 +72,37 @@ function scheduleNew() {
|
||||
em.setProperty("docked", "true");
|
||||
Orbis_docked.setDocked(true);
|
||||
Leafre_docked.setDocked(true);
|
||||
|
||||
|
||||
em.setProperty("entry", "true");
|
||||
em.schedule("stopEntry", closeTime); //The time to close the gate
|
||||
em.schedule("takeoff", beginTime); //The time to begin the ride
|
||||
}
|
||||
|
||||
function stopEntry() {
|
||||
em.setProperty("entry","false");
|
||||
em.setProperty("entry", "false");
|
||||
}
|
||||
|
||||
function takeoff() {
|
||||
Orbis_btf.warpEveryone(Cabin_to_Leafre.getId());
|
||||
Leafre_btf.warpEveryone(Cabin_to_Orbis.getId());
|
||||
|
||||
|
||||
Orbis_docked.broadcastShip(false);
|
||||
Leafre_docked.broadcastShip(false);
|
||||
|
||||
em.setProperty("docked","false");
|
||||
|
||||
em.setProperty("docked", "false");
|
||||
Orbis_docked.setDocked(false);
|
||||
Leafre_docked.setDocked(false);
|
||||
|
||||
|
||||
em.schedule("arrived", rideTime); //The time that require move to destination
|
||||
}
|
||||
|
||||
function arrived() {
|
||||
Cabin_to_Orbis.warpEveryone(Orbis_Station.getId(), 0);
|
||||
Cabin_to_Leafre.warpEveryone(Leafre_Station.getId(), 0);
|
||||
|
||||
|
||||
Orbis_docked.broadcastShip(true);
|
||||
Leafre_docked.broadcastShip(true);
|
||||
|
||||
|
||||
scheduleNew();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Cafe PQ 1
|
||||
*/
|
||||
|
||||
importPackage(Packages.client.inventory);
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 3, maxPlayers = 6;
|
||||
@@ -40,210 +38,220 @@ var eventMaps = [190000000, 190000001, 190000002];
|
||||
var eventTime = 45; // 45 minutes
|
||||
var couponsNeeded = 400; // total of coupons to complete the event
|
||||
|
||||
var lobbyRange = [0, 0];
|
||||
const maxLobbies = 1;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {
|
||||
var itemSet = [4001007];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
var itemSet = [4001007];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [4001014];
|
||||
itemQty = [1];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [20000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [4001014];
|
||||
itemQty = [1];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [20000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
}
|
||||
|
||||
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
if(party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
for(var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
if (party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
|
||||
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if(ch.isLeader()) hasLeader = true;
|
||||
eligible.push(ch);
|
||||
}
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
|
||||
if (ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if (ch.isLeader()) {
|
||||
hasLeader = true;
|
||||
}
|
||||
eligible.push(ch);
|
||||
}
|
||||
}
|
||||
|
||||
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
|
||||
return eligible;
|
||||
}
|
||||
|
||||
if (!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) {
|
||||
eligible = [];
|
||||
}
|
||||
return Java.to(eligible, Java.type('net.server.world.PartyCharacter[]'));
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Lan1_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("stage", "0");
|
||||
|
||||
eim.setIntProperty("couponsNeeded", couponsNeeded);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
var mapObj = eim.getInstanceMap(eventMaps[i]);
|
||||
mapObj.resetPQ(level);
|
||||
mapObj.toggleDrops();
|
||||
mapObj.instanceMapForceRespawn();
|
||||
}
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
var eim = em.newInstance("Lan1_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("stage", "0");
|
||||
|
||||
eim.setIntProperty("couponsNeeded", couponsNeeded);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
var mapObj = eim.getInstanceMap(eventMaps[i]);
|
||||
mapObj.resetPQ(level);
|
||||
mapObj.toggleDrops();
|
||||
mapObj.instanceMapForceRespawn();
|
||||
}
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim) {}
|
||||
|
||||
function respawnStages(eim) {
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
|
||||
}
|
||||
|
||||
eim.schedule("respawnStages", 15 * 1000);
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
|
||||
}
|
||||
|
||||
eim.schedule("respawnStages", 15 * 1000);
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
end(eim);
|
||||
end(eim);
|
||||
}
|
||||
|
||||
function playerUnregistered(eim, player) {}
|
||||
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {
|
||||
if(!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDead(eim, player) {}
|
||||
|
||||
function playerRevive(eim, player) { // player presses ok on the death pop up.
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDisconnected(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
playerLeft(eim, player);
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
} else {
|
||||
playerLeft(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function disbandParty(eim) {
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function giveRandomEventReward(eim, player) {
|
||||
eim.giveEventReward(player);
|
||||
eim.giveEventReward(player);
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.giveEventPlayersStageReward(1);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
|
||||
eim.showClearEffect(eventMaps[i]);
|
||||
}
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.giveEventPlayersStageReward(1);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
|
||||
eim.showClearEffect(eventMaps[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function getDroppedQuantity(mob) {
|
||||
if(mob.getLevel() > 65) {
|
||||
if (mob.getLevel() > 65) {
|
||||
return 5;
|
||||
} else if(mob.getLevel() > 40) {
|
||||
} else if (mob.getLevel() > 40) {
|
||||
return 2;
|
||||
} else {
|
||||
return 1;
|
||||
@@ -252,15 +260,19 @@ function getDroppedQuantity(mob) {
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
try {
|
||||
if(eim.isEventCleared()) return;
|
||||
|
||||
if (eim.isEventCleared()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var mapObj = mob.getMap();
|
||||
const Item = Java.type('client.inventory.Item');
|
||||
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
|
||||
var dropper = eim.getPlayers().get(0);
|
||||
|
||||
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
|
||||
|
||||
} catch(err) {} // PQ not started yet
|
||||
|
||||
} catch (err) {
|
||||
} // PQ not started yet
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Cafe PQ 2
|
||||
*/
|
||||
|
||||
importPackage(Packages.client.inventory);
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 3, maxPlayers = 6;
|
||||
@@ -40,210 +38,220 @@ var eventMaps = [191000000, 191000001];
|
||||
var eventTime = 45; // 45 minutes
|
||||
var couponsNeeded = 350; // total of coupons to complete the event
|
||||
|
||||
var lobbyRange = [0, 0];
|
||||
const maxLobbies = 1;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {
|
||||
var itemSet = [4001007];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
var itemSet = [4001007];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [4001009];
|
||||
itemQty = [1];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [15000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [4001009];
|
||||
itemQty = [1];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [15000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
}
|
||||
|
||||
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
if(party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
for(var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
if (party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
|
||||
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if(ch.isLeader()) hasLeader = true;
|
||||
eligible.push(ch);
|
||||
}
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
|
||||
if (ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if (ch.isLeader()) {
|
||||
hasLeader = true;
|
||||
}
|
||||
eligible.push(ch);
|
||||
}
|
||||
}
|
||||
|
||||
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
|
||||
return eligible;
|
||||
}
|
||||
|
||||
if (!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) {
|
||||
eligible = [];
|
||||
}
|
||||
return Java.to(eligible, Java.type('net.server.world.PartyCharacter[]'));
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Lan2_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("stage", "0");
|
||||
|
||||
eim.setIntProperty("couponsNeeded", couponsNeeded);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
var mapObj = eim.getInstanceMap(eventMaps[i]);
|
||||
mapObj.resetPQ(level);
|
||||
mapObj.toggleDrops();
|
||||
mapObj.instanceMapForceRespawn();
|
||||
}
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
var eim = em.newInstance("Lan2_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("stage", "0");
|
||||
|
||||
eim.setIntProperty("couponsNeeded", couponsNeeded);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
var mapObj = eim.getInstanceMap(eventMaps[i]);
|
||||
mapObj.resetPQ(level);
|
||||
mapObj.toggleDrops();
|
||||
mapObj.instanceMapForceRespawn();
|
||||
}
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim) {}
|
||||
|
||||
function respawnStages(eim) {
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
|
||||
}
|
||||
|
||||
eim.schedule("respawnStages", 15 * 1000);
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
|
||||
}
|
||||
|
||||
eim.schedule("respawnStages", 15 * 1000);
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
end(eim);
|
||||
end(eim);
|
||||
}
|
||||
|
||||
function playerUnregistered(eim, player) {}
|
||||
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {
|
||||
if(!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDead(eim, player) {}
|
||||
|
||||
function playerRevive(eim, player) { // player presses ok on the death pop up.
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDisconnected(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
playerLeft(eim, player);
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
} else {
|
||||
playerLeft(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function disbandParty(eim) {
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function giveRandomEventReward(eim, player) {
|
||||
eim.giveEventReward(player);
|
||||
eim.giveEventReward(player);
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.giveEventPlayersStageReward(1);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
|
||||
eim.showClearEffect(eventMaps[i]);
|
||||
}
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.giveEventPlayersStageReward(1);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
|
||||
eim.showClearEffect(eventMaps[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function getDroppedQuantity(mob) {
|
||||
if(mob.getLevel() > 65) {
|
||||
if (mob.getLevel() > 65) {
|
||||
return 5;
|
||||
} else if(mob.getLevel() > 40) {
|
||||
} else if (mob.getLevel() > 40) {
|
||||
return 2;
|
||||
} else {
|
||||
return 1;
|
||||
@@ -252,15 +260,19 @@ function getDroppedQuantity(mob) {
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
try {
|
||||
if(eim.isEventCleared()) return;
|
||||
|
||||
if (eim.isEventCleared()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var mapObj = mob.getMap();
|
||||
const Item = Java.type('client.inventory.Item');
|
||||
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
|
||||
var dropper = eim.getPlayers().get(0);
|
||||
|
||||
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
|
||||
|
||||
} catch(err) {} // PQ not started yet
|
||||
|
||||
} catch (err) {
|
||||
} // PQ not started yet
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Cafe PQ 3
|
||||
*/
|
||||
|
||||
importPackage(Packages.client.inventory);
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 3, maxPlayers = 6;
|
||||
@@ -40,210 +38,220 @@ var eventMaps = [192000000, 192000001];
|
||||
var eventTime = 45; // 45 minutes
|
||||
var couponsNeeded = 350; // total of coupons to complete the event
|
||||
|
||||
var lobbyRange = [0, 0];
|
||||
const maxLobbies = 1;
|
||||
|
||||
function init() {
|
||||
setEventRequirements();
|
||||
setEventRequirements();
|
||||
}
|
||||
|
||||
function setLobbyRange() {
|
||||
return lobbyRange;
|
||||
function getMaxLobbies() {
|
||||
return maxLobbies;
|
||||
}
|
||||
|
||||
function setEventRequirements() {
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
else reqStr += minPlayers;
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
|
||||
else reqStr += minLevel;
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
var reqStr = "";
|
||||
|
||||
reqStr += "\r\n Number of players: ";
|
||||
if (maxPlayers - minPlayers >= 1) {
|
||||
reqStr += minPlayers + " ~ " + maxPlayers;
|
||||
} else {
|
||||
reqStr += minPlayers;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Level range: ";
|
||||
if (maxLevel - minLevel >= 1) {
|
||||
reqStr += minLevel + " ~ " + maxLevel;
|
||||
} else {
|
||||
reqStr += minLevel;
|
||||
}
|
||||
|
||||
reqStr += "\r\n Time limit: ";
|
||||
reqStr += eventTime + " minutes";
|
||||
|
||||
em.setProperty("party", reqStr);
|
||||
}
|
||||
|
||||
function setEventExclusives(eim) {
|
||||
var itemSet = [4001007];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
var itemSet = [4001007];
|
||||
eim.setExclusiveItems(itemSet);
|
||||
}
|
||||
|
||||
function setEventRewards(eim) {
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
var itemSet, itemQty, evLevel, expStages;
|
||||
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [4001013];
|
||||
itemQty = [1];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [12000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
evLevel = 1; //Rewards at clear PQ
|
||||
itemSet = [4001013];
|
||||
itemQty = [1];
|
||||
eim.setEventRewards(evLevel, itemSet, itemQty);
|
||||
|
||||
expStages = [12000]; //bonus exp given on CLEAR stage signal
|
||||
eim.setEventClearStageExp(expStages);
|
||||
}
|
||||
|
||||
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
if(party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
var eligible = [];
|
||||
var hasLeader = false;
|
||||
|
||||
for(var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
if (party.size() > 0) {
|
||||
var partyList = party.toArray();
|
||||
|
||||
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if(ch.isLeader()) hasLeader = true;
|
||||
eligible.push(ch);
|
||||
}
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
var ch = partyList[i];
|
||||
|
||||
if (ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
|
||||
if (ch.isLeader()) {
|
||||
hasLeader = true;
|
||||
}
|
||||
eligible.push(ch);
|
||||
}
|
||||
}
|
||||
|
||||
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
|
||||
return eligible;
|
||||
}
|
||||
|
||||
if (!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) {
|
||||
eligible = [];
|
||||
}
|
||||
return Java.to(eligible, Java.type('net.server.world.PartyCharacter[]'));
|
||||
}
|
||||
|
||||
function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Lan3_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("stage", "0");
|
||||
|
||||
eim.setIntProperty("couponsNeeded", couponsNeeded);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
var mapObj = eim.getInstanceMap(eventMaps[i]);
|
||||
mapObj.resetPQ(level);
|
||||
mapObj.toggleDrops();
|
||||
mapObj.instanceMapForceRespawn();
|
||||
}
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
var eim = em.newInstance("Lan3_" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("stage", "0");
|
||||
|
||||
eim.setIntProperty("couponsNeeded", couponsNeeded);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
var mapObj = eim.getInstanceMap(eventMaps[i]);
|
||||
mapObj.resetPQ(level);
|
||||
mapObj.toggleDrops();
|
||||
mapObj.instanceMapForceRespawn();
|
||||
}
|
||||
|
||||
respawnStages(eim);
|
||||
eim.startEventTimer(eventTime * 60000);
|
||||
setEventRewards(eim);
|
||||
setEventExclusives(eim);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim) {}
|
||||
|
||||
function respawnStages(eim) {
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
|
||||
}
|
||||
|
||||
eim.schedule("respawnStages", 15 * 1000);
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
|
||||
}
|
||||
|
||||
eim.schedule("respawnStages", 15 * 1000);
|
||||
}
|
||||
|
||||
function playerEntry(eim, player) {
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
player.changeMap(map, map.getPortal(0));
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim) {
|
||||
end(eim);
|
||||
end(eim);
|
||||
}
|
||||
|
||||
function playerUnregistered(eim, player) {}
|
||||
|
||||
function playerExit(eim, player) {
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap, 0);
|
||||
}
|
||||
|
||||
function playerLeft(eim, player) {
|
||||
if(!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapid) {
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (mapid < minMapId || mapid > maxMapId) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changedLeader(eim, leader) {
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
var mapid = leader.getMapId();
|
||||
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDead(eim, player) {}
|
||||
|
||||
function playerRevive(eim, player) { // player presses ok on the death pop up.
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function playerDisconnected(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
eim.unregisterPlayer(player);
|
||||
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
|
||||
eim.unregisterPlayer(player);
|
||||
end(eim);
|
||||
} else {
|
||||
eim.unregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
function leftParty(eim, player) {
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
}
|
||||
else
|
||||
playerLeft(eim, player);
|
||||
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
|
||||
end(eim);
|
||||
} else {
|
||||
playerLeft(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function disbandParty(eim) {
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
if (!eim.isEventCleared()) {
|
||||
end(eim);
|
||||
}
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
var party = eim.getPlayers();
|
||||
for (var i = 0; i < party.size(); i++) {
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function giveRandomEventReward(eim, player) {
|
||||
eim.giveEventReward(player);
|
||||
eim.giveEventReward(player);
|
||||
}
|
||||
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.giveEventPlayersStageReward(1);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
|
||||
eim.showClearEffect(eventMaps[i]);
|
||||
}
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.giveEventPlayersStageReward(1);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < eventMaps.length; i++) {
|
||||
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
|
||||
eim.showClearEffect(eventMaps[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function getDroppedQuantity(mob) {
|
||||
if(mob.getLevel() > 65) {
|
||||
if (mob.getLevel() > 65) {
|
||||
return 3;
|
||||
} else if(mob.getLevel() > 40) {
|
||||
} else if (mob.getLevel() > 40) {
|
||||
return 2;
|
||||
} else {
|
||||
return 1;
|
||||
@@ -252,15 +260,19 @@ function getDroppedQuantity(mob) {
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
try {
|
||||
if(eim.isEventCleared()) return;
|
||||
|
||||
if (eim.isEventCleared()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var mapObj = mob.getMap();
|
||||
const Item = Java.type('client.inventory.Item');
|
||||
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
|
||||
var dropper = eim.getPlayers().get(0);
|
||||
|
||||
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
|
||||
|
||||
} catch(err) {} // PQ not started yet
|
||||
|
||||
} catch (err) {
|
||||
} // PQ not started yet
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user