mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2026-08-04 02:01:01 -06:00
Compare commits
1090 commits
Dec-27-202
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91bb6be123 | ||
|
|
2419bdb65e | ||
|
|
a6699243db | ||
|
|
a643299b0c | ||
|
|
e611b1780b | ||
|
|
d5527c268f | ||
|
|
5a37f2f8da | ||
|
|
592138d904 | ||
|
|
37b30d7561 | ||
|
|
efc324883b | ||
|
|
be744e73b3 | ||
|
|
ba372ef31f | ||
|
|
6cccaa79de | ||
|
|
9a4566cb0e | ||
|
|
5822b8df99 | ||
|
|
afeffc1b98 | ||
|
|
76523c0130 | ||
|
|
5d82897215 | ||
|
|
9a872f763d | ||
|
|
fd0976e5d5 | ||
|
|
392b13697b | ||
|
|
1d383f0ff3 | ||
|
|
09d9d1ec55 | ||
|
|
97f78b9058 | ||
|
|
5e6c5bdee1 | ||
|
|
e84798c82c | ||
|
|
166ecbacbf | ||
|
|
db960154e6 | ||
|
|
0d1dda90d8 | ||
|
|
559bdb5a68 | ||
|
|
7b55acaddc | ||
|
|
18d5fb62cd | ||
|
|
0fdbf323d6 | ||
|
|
5670ac5e9d | ||
|
|
fd8f672728 | ||
|
|
16187ad211 | ||
|
|
200dfc64f9 | ||
|
|
0443230b85 | ||
|
|
aa8c26f50c | ||
|
|
a5d98df06d | ||
|
|
eb5af4a5a8 | ||
|
|
9bfeea1d18 | ||
|
|
08e2e0b45e | ||
|
|
fecb243650 | ||
|
|
6546016d1a | ||
|
|
fcec1a765b | ||
|
|
34e386dbbf | ||
|
|
2c8885fa60 | ||
|
|
af9aaad94c | ||
|
|
39b6add4e9 | ||
|
|
a3fbce0e6f | ||
|
|
1727cde92f | ||
|
|
66a3410844 | ||
|
|
50e95c1101 | ||
|
|
353266d748 | ||
|
|
6508383fe8 | ||
|
|
dcaf28755d | ||
|
|
73840f7c28 | ||
|
|
c84539003f | ||
|
|
acc02e00d3 | ||
|
|
dc12d2d6ab | ||
|
|
dfcff908fe | ||
|
|
aae03d85fd | ||
|
|
13c4358d77 | ||
|
|
80c8b219ea | ||
|
|
acd0a9e22f | ||
|
|
da41694dd4 | ||
|
|
fc031be6ff | ||
|
|
bc6fd94f46 | ||
|
|
130cc79a17 | ||
|
|
cf6cc08b26 | ||
|
|
f98495d1ae | ||
|
|
50eb7582dd | ||
|
|
501b75aa22 | ||
|
|
0b41c5a146 | ||
|
|
8d7f78ac5b | ||
|
|
5633fbf115 | ||
|
|
7583f6bff2 | ||
|
|
39ac26f5d9 | ||
|
|
bd5ce18fc1 | ||
|
|
4795f25c09 | ||
|
|
4853262c25 | ||
|
|
e66be1b9d1 | ||
|
|
dec9c04fdd | ||
|
|
0c4cfcb1eb | ||
|
|
dd1cfbba51 | ||
|
|
626a3d0f80 | ||
|
|
40a495fcdc | ||
|
|
5d37bb20b0 | ||
|
|
15197bae85 | ||
|
|
0b4ac61c33 | ||
|
|
095f53114e | ||
|
|
5a76a71d21 | ||
|
|
d67fb26749 | ||
|
|
2806c08f7b | ||
|
|
8397452071 | ||
|
|
3793d2477e | ||
|
|
2537c36ad0 | ||
|
|
5d34fac117 | ||
|
|
8fd363a43c | ||
|
|
6479afde2d | ||
|
|
c1a5f74fa6 | ||
|
|
37d3ec002d | ||
|
|
d642c23a2c | ||
|
|
2269baac8a | ||
|
|
5356aa8b37 | ||
|
|
fa2f2af00f | ||
|
|
7d80b80ed8 | ||
|
|
082017b260 | ||
|
|
d1af9c212e | ||
|
|
c83ade9d79 | ||
|
|
12aef9467d | ||
|
|
643cd6c359 | ||
|
|
4eebfd0c7e | ||
|
|
6ffe0aa78c | ||
|
|
595758dbfd | ||
|
|
f837e4ffcc | ||
|
|
23bc594469 | ||
|
|
2bad80f141 | ||
|
|
187c513044 | ||
|
|
6dee708263 | ||
|
|
9ac738d1ea | ||
|
|
2845571082 | ||
|
|
42d871edb0 | ||
|
|
45c3c2488f | ||
|
|
df80d077ce | ||
|
|
496285dfdd | ||
|
|
a10909d54f | ||
|
|
9e690c1877 | ||
|
|
a7b29d7615 | ||
|
|
2e1ecd845b | ||
|
|
97b5892eac | ||
|
|
3692be6fd1 | ||
|
|
b39b75e959 | ||
|
|
f2e8e64cf6 | ||
|
|
a7a7985c84 | ||
|
|
50ef07052e | ||
|
|
18dadc54c8 | ||
|
|
8283ae6ba8 | ||
|
|
1b9dc0572d | ||
|
|
364f6460c8 | ||
|
|
685157543b | ||
|
|
4c2188aab5 | ||
|
|
48f949a452 | ||
|
|
b6b27190be | ||
|
|
3199974f59 | ||
|
|
02607f7121 | ||
|
|
6e9cd98e38 | ||
|
|
6f6ea174ed | ||
|
|
ee694b36b7 | ||
|
|
d8998b6d7d | ||
|
|
ba4cd277f4 | ||
|
|
1a1b238fca | ||
|
|
879f856c38 | ||
|
|
946227b44a | ||
|
|
0c21db9b47 | ||
|
|
0534799e39 | ||
|
|
9903e86ee1 | ||
|
|
014ea60f51 | ||
|
|
8ac850090a | ||
|
|
03e90f7678 | ||
|
|
7276590373 | ||
|
|
0f29ae93ff | ||
|
|
c4a0273c3b | ||
|
|
683af41399 | ||
|
|
8bdfc43fba | ||
|
|
12f217f8f3 | ||
|
|
07e48d91a8 | ||
|
|
0bf2f7d0ec | ||
|
|
a38d3734bd | ||
|
|
96c42c18d9 | ||
|
|
1765f3a3b6 | ||
|
|
5533a2f78a | ||
|
|
846d55365a | ||
|
|
da7c62d10c | ||
|
|
2239168074 | ||
|
|
8ba45e0ee1 | ||
|
|
82e5965220 | ||
|
|
3d5cbd90ed | ||
|
|
feb2b10247 | ||
|
|
56986ad6bc | ||
|
|
6241ff9ce5 | ||
|
|
dfb53cfa03 | ||
|
|
66030f36d6 | ||
|
|
8dd82dd356 | ||
|
|
1fa2d3460f | ||
|
|
78f1c58b4e | ||
|
|
9a7a885818 | ||
|
|
8d182f2505 | ||
|
|
f25f439bdf | ||
|
|
4b3cfae309 | ||
|
|
e6b1203be4 | ||
|
|
8694d36ee8 | ||
|
|
618baf0662 | ||
|
|
f1f5a97859 | ||
|
|
991d4aa364 | ||
|
|
789466e4ab | ||
|
|
f9a193c8d7 | ||
|
|
d1cfe299c6 | ||
|
|
7a23f6f0a3 | ||
|
|
c135877680 | ||
|
|
18f274be8e | ||
|
|
5719d03e4d | ||
|
|
d6f32c56fc | ||
|
|
9eac712626 | ||
|
|
b644a72bfc | ||
|
|
efe936500b | ||
|
|
6d8ef4247c | ||
|
|
676397f3fd | ||
|
|
74cbec067c | ||
|
|
d03df027e0 | ||
|
|
d09bdacf94 | ||
|
|
a6eb6f5af6 | ||
|
|
2ba1174678 | ||
|
|
3dd189d0f3 | ||
|
|
a5b5fdf4d6 | ||
|
|
f39e432432 | ||
|
|
36267b7a67 | ||
|
|
79b3f431c1 | ||
|
|
75fd1dc475 | ||
|
|
12049d8ffb | ||
|
|
1106cbac25 | ||
|
|
891cdf7de1 | ||
|
|
80b1b4b01e | ||
|
|
a0bf0d1d50 | ||
|
|
2471584c42 | ||
|
|
1ff19880ef | ||
|
|
89edf78e54 | ||
|
|
faf2222f4c | ||
|
|
b68f914440 | ||
|
|
c7afeab2ab | ||
|
|
ee9a704ad0 | ||
|
|
93d2c8f4aa | ||
|
|
dc0a0b1cff | ||
|
|
d99e6b2541 | ||
|
|
1ebbed5453 | ||
|
|
af6d260a1e | ||
|
|
9cff5cc314 | ||
|
|
ef0c208bfb | ||
|
|
db05c190fe | ||
|
|
3634616475 | ||
|
|
bef103e259 | ||
|
|
98f662d0c6 | ||
|
|
cb17786a86 | ||
|
|
5c13610776 | ||
|
|
2a438ce349 | ||
|
|
264c2aa550 | ||
|
|
7cf5049687 | ||
|
|
c1d932a6f1 | ||
|
|
0c425033f3 | ||
|
|
e8c3f31786 | ||
|
|
91f3a70f75 | ||
|
|
eebbebe772 | ||
|
|
5a1c7cb141 | ||
|
|
4fb3ae45d8 | ||
|
|
eafa5f42ab | ||
|
|
fc00509b9d | ||
|
|
711ef542fa | ||
|
|
c296e34b50 | ||
|
|
1bdf1ae204 | ||
|
|
53c90ad6d6 | ||
|
|
3a7dfab628 | ||
|
|
02c1835016 | ||
|
|
7c74bfcb71 | ||
|
|
300b714048 | ||
|
|
3d7f1689f3 | ||
|
|
bcc3bc069e | ||
|
|
48bc0ffb28 | ||
|
|
7b1ebd4608 | ||
|
|
1b0a7d5fca | ||
|
|
fc2247f457 | ||
|
|
47ac5e93d6 | ||
|
|
63f8ec3cbf | ||
|
|
0622aed00c | ||
|
|
dda80d535b | ||
|
|
448f970c10 | ||
|
|
83b8689b86 | ||
|
|
6362eee753 | ||
|
|
f0ee476e42 | ||
|
|
0e65f20223 | ||
|
|
af58fae1fc | ||
|
|
74ed5e1bee | ||
|
|
cf08e700fb | ||
|
|
d65a53b275 | ||
|
|
fb9d6307b3 | ||
|
|
45fb89ec73 | ||
|
|
50ba3682b5 | ||
|
|
df73f4a171 | ||
|
|
9eedfc2336 | ||
|
|
e25780a4c5 | ||
|
|
b6560c0e3f | ||
|
|
2d1a626df0 | ||
|
|
4f97dbef8c | ||
|
|
be76ca143b | ||
|
|
053254b504 | ||
|
|
486ca4bb19 | ||
|
|
104533c11d | ||
|
|
9886049429 | ||
|
|
f1131b7d00 | ||
|
|
be47c1d5c9 | ||
|
|
bb860b60e0 | ||
|
|
fed309a70b | ||
|
|
1afd4d5328 | ||
|
|
a6eb706358 | ||
|
|
957477b9b0 | ||
|
|
4387b346dc | ||
|
|
618d39d73c | ||
|
|
62a7dd4324 | ||
|
|
212ce57580 | ||
|
|
8a4ea5d1f3 | ||
|
|
0f14639e9b | ||
|
|
e63c6f523a | ||
|
|
612ccc6776 | ||
|
|
b5784c5782 | ||
|
|
867c332466 | ||
|
|
8b1763c3ba | ||
|
|
d0fdf08d13 | ||
|
|
d91f77c294 | ||
|
|
c03947e0b0 | ||
|
|
acc6c182a5 | ||
|
|
1b85808885 | ||
|
|
2cf8392691 | ||
|
|
4a016d45e5 | ||
|
|
cd43f8d269 | ||
|
|
0a26d5039a | ||
|
|
c3929cf06c | ||
|
|
fcbea5acdc | ||
|
|
3d7e93b6c2 | ||
|
|
6e9f3cb8b9 | ||
|
|
0c8efbac7a | ||
|
|
ccc60b1240 | ||
|
|
818ffc01e7 | ||
|
|
f37b30749e | ||
|
|
edc6f9cf07 | ||
|
|
064edfbbe4 | ||
|
|
b62f4e9525 | ||
|
|
57f5617fe8 | ||
|
|
6c386e6ed2 | ||
|
|
93890769e1 | ||
|
|
4039c0123b | ||
|
|
27f2d457ea | ||
|
|
c6b508b3ed | ||
|
|
67b6855370 | ||
|
|
4480618748 | ||
|
|
9fff4dbb5d | ||
|
|
6a68cf9d7c | ||
|
|
e34a81ec6c | ||
|
|
00b5a44c31 | ||
|
|
f75577d41d | ||
|
|
3838f01adf | ||
|
|
a932c309b3 | ||
|
|
9af776e3c6 | ||
|
|
39634b6caf | ||
|
|
eb3884180e | ||
|
|
d5c7d74767 | ||
|
|
d08656021c | ||
|
|
9beb7219ea | ||
|
|
deecf136bc | ||
|
|
b849de2dab | ||
|
|
b4950343ec | ||
|
|
7749e8263f | ||
|
|
79c69e3d43 | ||
|
|
7d79c9a82a | ||
|
|
e216a6366f | ||
|
|
9054e36288 | ||
|
|
1a67932351 | ||
|
|
7a6adda997 | ||
|
|
1da53c448d | ||
|
|
53dc169774 | ||
|
|
b0be48501b | ||
|
|
98c99e7550 | ||
|
|
ed41f3a228 | ||
|
|
a2eafa8bc0 | ||
|
|
2be5f9eac0 | ||
|
|
876b87b72a | ||
|
|
32cd17bfa2 | ||
|
|
393752d77b | ||
|
|
2b460b64f2 | ||
|
|
59075798ea | ||
|
|
034c05f512 | ||
|
|
01b5e59250 | ||
|
|
7d32e77860 | ||
|
|
f11149ebe2 | ||
|
|
ba1e190cdb | ||
|
|
1c9fbc79aa | ||
|
|
218a040f8b | ||
|
|
cc8dd4edb4 | ||
|
|
3982258500 | ||
|
|
2be422e7da | ||
|
|
5abe50430d | ||
|
|
97b8ed19a6 | ||
|
|
9d38357c4e | ||
|
|
64fa1d89c3 | ||
|
|
e31397b42f | ||
|
|
9f61ffb153 | ||
|
|
b2f7f86d6a | ||
|
|
4799176c14 | ||
|
|
0a89439c80 | ||
|
|
9c202aa47a | ||
|
|
6b0f942598 | ||
|
|
8db9060a40 | ||
|
|
f94221918f | ||
|
|
cc47f4b488 | ||
|
|
5c027e2649 | ||
|
|
4156f28b93 | ||
|
|
c271d4e74b | ||
|
|
97464ef1d2 | ||
|
|
518b5d91dd | ||
|
|
e25c7d7824 | ||
|
|
29fa9a5a21 | ||
|
|
083df1aae2 | ||
|
|
3a73c98e19 | ||
|
|
80cb2d9ba4 | ||
|
|
317b4e9b5c | ||
|
|
24143f5d20 | ||
|
|
209e1ae8cf | ||
|
|
37836ae992 | ||
|
|
d15b47fc65 | ||
|
|
58d9101ef6 | ||
|
|
ca8bfeab64 | ||
|
|
957b1c2944 | ||
|
|
92fcd0ec32 | ||
|
|
db3079271e | ||
|
|
9d6ad223cb | ||
|
|
3837bd3c26 | ||
|
|
18d5d80fba | ||
|
|
9d2e173f71 | ||
|
|
68c1e572b9 | ||
|
|
806680517b | ||
|
|
53357d20f3 | ||
|
|
a44472e559 | ||
|
|
6b152bcc8c | ||
|
|
30f1cbf710 | ||
|
|
0165d373bd | ||
|
|
6f9a975f7a | ||
|
|
21a07841f6 | ||
|
|
81495ab8a8 | ||
|
|
5ed3cafc4a | ||
|
|
0b95cfdb8f | ||
|
|
e8527ff506 | ||
|
|
ef90d24bdc | ||
|
|
a2b0548c62 | ||
|
|
611660cbc3 | ||
|
|
370d9ef423 | ||
|
|
8d2b454b1c | ||
|
|
28b168e742 | ||
|
|
98c0698097 | ||
|
|
80a5c3a85e | ||
|
|
ca3bc9cd70 | ||
|
|
2c3b5cb5a4 | ||
|
|
5f62047aff | ||
|
|
d0f24afc2e | ||
|
|
1f6b0e900f | ||
|
|
ddb9b6f0b0 | ||
|
|
45c21767d5 | ||
|
|
f01a5cfe40 | ||
|
|
36d8186458 | ||
|
|
52cf984540 | ||
|
|
082d3a561b | ||
|
|
dd9f2a34c8 | ||
|
|
49a10d192a | ||
|
|
2776270c7f | ||
|
|
a184b4ce2f | ||
|
|
76d31a68ad | ||
|
|
51929277ac | ||
|
|
07c6eab4af | ||
|
|
dc3daebb59 | ||
|
|
da6f05f8ce | ||
|
|
66b1efdaa3 | ||
|
|
aed73183d1 | ||
|
|
66978b23ee | ||
|
|
f501468ead | ||
|
|
a63867627e | ||
|
|
5d54ef56b3 | ||
|
|
acf27dada5 | ||
|
|
73102d8f79 | ||
|
|
158cf41fd3 | ||
|
|
cdead88473 | ||
|
|
5d21ab74c0 | ||
|
|
782a70a582 | ||
|
|
38a580a431 | ||
|
|
4c736e5aef | ||
|
|
0dcdc84f79 | ||
|
|
6deadc6f90 | ||
|
|
50eb295fda | ||
|
|
24b314426e | ||
|
|
a342f91156 | ||
|
|
64b40fbcf4 | ||
|
|
0ade8bdf02 | ||
|
|
68cf133955 | ||
|
|
7190c3eda7 | ||
|
|
ee9d386bc9 | ||
|
|
2da47d8353 | ||
|
|
5c977c0522 | ||
|
|
2948d58934 | ||
|
|
cde2dcc93f | ||
|
|
4ae1448800 | ||
|
|
b1e6c9fe8c | ||
|
|
a7516f2d6e | ||
|
|
1d4d380e93 | ||
|
|
3b967791a4 | ||
|
|
c96fa24999 | ||
|
|
bbfa1bb1e7 | ||
|
|
675f0c1e37 | ||
|
|
b8a887b319 | ||
|
|
a1fc0ba7cc | ||
|
|
a11b783c39 | ||
|
|
b22c6057a3 | ||
|
|
6e9183ea8f | ||
|
|
ed47883bea | ||
|
|
60e6049971 | ||
|
|
06038dbbdc | ||
|
|
ca53059131 | ||
|
|
6cb4f118ea | ||
|
|
6856d75d88 | ||
|
|
8729f93d01 | ||
|
|
dbbcf5601e | ||
|
|
d9355ec85f | ||
|
|
43c8f43c49 | ||
|
|
28b7a75538 | ||
|
|
0158d753f0 | ||
|
|
3df5097442 | ||
|
|
866372ad54 | ||
|
|
9ca9f01ca3 | ||
|
|
2714448c61 | ||
|
|
98ee184652 | ||
|
|
6b9a06d175 | ||
|
|
9068874556 | ||
|
|
4f5d753104 | ||
|
|
ae53116fee | ||
|
|
9e5a7aefc8 | ||
|
|
6e2f8c6f30 | ||
|
|
affb2e58e9 | ||
|
|
fff1476714 | ||
|
|
08241eb1db | ||
|
|
1d12dd741f | ||
|
|
38c50c465d | ||
|
|
7804dfe791 | ||
|
|
37a874f471 | ||
|
|
b33517632e | ||
|
|
ed199e1478 | ||
|
|
435ec3b1b6 | ||
|
|
451fa73e3e | ||
|
|
2255238554 | ||
|
|
9a5f1e85e2 | ||
|
|
020d5a9c05 | ||
|
|
a7b5e77318 | ||
|
|
66445f61a5 | ||
|
|
13e5bf1666 | ||
|
|
dff56510da | ||
|
|
2449bfe241 | ||
|
|
4ec0f4aa27 | ||
|
|
0f9e264788 | ||
|
|
86973b6d36 | ||
|
|
6763758196 | ||
|
|
4fc5e088ad | ||
|
|
12daa614bb | ||
|
|
9b484d337c | ||
|
|
a13b38d6c1 | ||
|
|
1218ee000f | ||
|
|
0a6b607700 | ||
|
|
279cfb8b42 | ||
|
|
ee88bfe3f0 | ||
|
|
04ce0879c8 | ||
|
|
85ee81a42a | ||
|
|
81fd565b4f | ||
|
|
ece16af7ab | ||
|
|
9d19ce2355 | ||
|
|
cecb937145 | ||
|
|
0cad82029d | ||
|
|
25e9104375 | ||
|
|
6c28a82ebb | ||
|
|
7a4c2159a4 | ||
|
|
ae22b99888 | ||
|
|
7fb90f5afe | ||
|
|
d3f1914117 | ||
|
|
c70c292943 | ||
|
|
8f7683aee4 | ||
|
|
26245dfb10 | ||
|
|
b2eb9cfdc9 | ||
|
|
2dce4fe98c | ||
|
|
6d0ca0d6fc | ||
|
|
cd4d0ec20b | ||
|
|
8ef5d8bce4 | ||
|
|
098d947d87 | ||
|
|
5a6a148cfc | ||
|
|
18fa8357a8 | ||
|
|
e1b7eeaf22 | ||
|
|
b834ff7404 | ||
|
|
a04c36f5cd | ||
|
|
04882136f8 | ||
|
|
d08882cf58 | ||
|
|
f28076f3a4 | ||
|
|
978d70ad0c | ||
|
|
af4a316fa1 | ||
|
|
dbb8b5a133 | ||
|
|
0eecab4057 | ||
|
|
8316a492c9 | ||
|
|
2ab3c34402 | ||
|
|
70a47aeb5d | ||
|
|
7d1a16f7f7 | ||
|
|
eb18fef53d | ||
|
|
b7851e7671 | ||
|
|
fee56ae528 | ||
|
|
a74583b13b | ||
|
|
4942ae0079 | ||
|
|
9445a2bae5 | ||
|
|
3c9dea2830 | ||
|
|
1f2bd0f9fc | ||
|
|
ae0b384e44 | ||
|
|
b640ab7373 | ||
|
|
48e09a3f8a | ||
|
|
5f4450c7d2 | ||
|
|
3b150660b1 | ||
|
|
2bcb05ee6c | ||
|
|
e2a13465b6 | ||
|
|
0779a550a3 | ||
|
|
c03fa76ea1 | ||
|
|
874c3883e6 | ||
|
|
a190544519 | ||
|
|
102cc65fd2 | ||
|
|
0e6b4ad816 | ||
|
|
5237051e71 | ||
|
|
0eaa6000e0 | ||
|
|
4e1ddaeec5 | ||
|
|
b308e488f9 | ||
|
|
264f78eb11 | ||
|
|
9989ee9905 | ||
|
|
1913d0c83f | ||
|
|
0f083bcaaa | ||
|
|
150e0619c1 | ||
|
|
663558cc8c | ||
|
|
44f7c7bd78 | ||
|
|
3638cf60f7 | ||
|
|
d429d3023b | ||
|
|
ba1807c76f | ||
|
|
aaebd7478d | ||
|
|
6325ffefbb | ||
|
|
25e944f37c | ||
|
|
7f9617554a | ||
|
|
7ced5ae031 | ||
|
|
0e87138789 | ||
|
|
ee42a4b82d | ||
|
|
4d3d6e59e1 | ||
|
|
5b1e6de903 | ||
|
|
94a55190ee | ||
|
|
708d5bb507 | ||
|
|
e9fd74b379 | ||
|
|
b87a3821dd | ||
|
|
7c38339e16 | ||
|
|
e5afeed6db | ||
|
|
cc989d5844 | ||
|
|
3a72aadbab | ||
|
|
db396893f2 | ||
|
|
d9c0c58bbb | ||
|
|
dd16588c13 | ||
|
|
96039978aa | ||
|
|
0f1f4dec96 | ||
|
|
dfdc9dc6a5 | ||
|
|
f6e83eb28f | ||
|
|
3c57be80e1 | ||
|
|
b477a62a7d | ||
|
|
73ed09b6ba | ||
|
|
e3dd47431e | ||
|
|
25082c2bb2 | ||
|
|
470105ae36 | ||
|
|
e12658ade9 | ||
|
|
7320bcfd0b | ||
|
|
5e6f750cee | ||
|
|
0b6be66cfd | ||
|
|
4e9f932cfb | ||
|
|
56b195bd9e | ||
|
|
608ffcfd90 | ||
|
|
bff955d629 | ||
|
|
e264ae8eee | ||
|
|
9ea32d07eb | ||
|
|
e67ca4948b | ||
|
|
f4163e733a | ||
|
|
5baa876a55 | ||
|
|
bb46e3f37f | ||
|
|
8a87fa488d | ||
|
|
8148a453d0 | ||
|
|
aa37cd4688 | ||
|
|
ff21a3948d | ||
|
|
c99dfe7031 | ||
|
|
e60eecc6bf | ||
|
|
0028be9cda | ||
|
|
4520a05636 | ||
|
|
b80c98acd6 | ||
|
|
c269949986 | ||
|
|
cbeb422411 | ||
|
|
ac5c31747f | ||
|
|
99e83a57e3 | ||
|
|
7383454728 | ||
|
|
42f0b7c3b2 | ||
|
|
6cd35dc482 | ||
|
|
a26c886586 | ||
|
|
ee94ba03c2 | ||
|
|
049920b3fc | ||
|
|
895c41756a | ||
|
|
d4e62c0e96 | ||
|
|
544487218a | ||
|
|
fa45bcfe70 | ||
|
|
1ab6773910 | ||
|
|
72853d225d | ||
|
|
12eaa1e05a | ||
|
|
3b0360eb01 | ||
|
|
abe55aa7f3 | ||
|
|
0c6b6540f4 | ||
|
|
9e4f94867e | ||
|
|
081f14b5e8 | ||
|
|
2747eb61ec | ||
|
|
8116cae7df | ||
|
|
a0435fb890 | ||
|
|
4276ed731d | ||
|
|
93082bc94a | ||
|
|
1d775bd2d3 | ||
|
|
032cb2e900 | ||
|
|
ad8f77c33e | ||
|
|
50dce880c1 | ||
|
|
e9fa9d0d41 | ||
|
|
e84192d985 | ||
|
|
10a6a19e9e | ||
|
|
0200ff058e | ||
|
|
c52e02936d | ||
|
|
00af62e449 | ||
|
|
9290d67000 | ||
|
|
9cee4dd38a | ||
|
|
3d9a3615f8 | ||
|
|
a105821427 | ||
|
|
7a585796be | ||
|
|
f8cdb5cff5 | ||
|
|
e424478a1c | ||
|
|
5cb9ef8511 | ||
|
|
1b4e0aafaa | ||
|
|
0eca9521bc | ||
|
|
d666317a68 | ||
|
|
162cfe3d6b | ||
|
|
11ebc0c0c4 | ||
|
|
dd017c85d2 | ||
|
|
3d2c0f2baa | ||
|
|
232cae454a | ||
|
|
86a25dd76f | ||
|
|
678d25dacd | ||
|
|
a3e6df109d | ||
|
|
bb21ad533b | ||
|
|
6112abf673 | ||
|
|
95012b9ca5 | ||
|
|
35f9a92aef | ||
|
|
2e70a9714a | ||
|
|
418f239261 | ||
|
|
98a5b95407 | ||
|
|
6a3e91f13c | ||
|
|
1be9335815 | ||
|
|
0f908a1544 | ||
|
|
8b6678d4ee | ||
|
|
d14b2c7d09 | ||
|
|
dd6909908c | ||
|
|
ab17ef11a1 | ||
|
|
c6cd12703f | ||
|
|
1b996b9b82 | ||
|
|
c23051db93 | ||
|
|
604925f513 | ||
|
|
31e865759e | ||
|
|
16a7640e56 | ||
|
|
6cf0e03177 | ||
|
|
b34e99d156 | ||
|
|
cf8b56c0f4 | ||
|
|
0ca2b8d99c | ||
|
|
4098f2bf0b | ||
|
|
255fc9eca6 | ||
|
|
9f7e633c2b | ||
|
|
e7fa5b576d | ||
|
|
fd5998453d | ||
|
|
6d23ec5234 | ||
|
|
105f7d5b86 | ||
|
|
ee79b0750c | ||
|
|
ac0da92a58 | ||
|
|
6147293431 | ||
|
|
bf26faf2a2 | ||
|
|
aa038882e8 | ||
|
|
d76b99c77a | ||
|
|
3cf73ba09a | ||
|
|
9b08f2175b | ||
|
|
32e1111fc7 | ||
|
|
686a2c9141 | ||
|
|
421c419f69 | ||
|
|
661390e66f | ||
|
|
bda000f220 | ||
|
|
af3ee7fe09 | ||
|
|
cf07fc3787 | ||
|
|
cb34966f38 | ||
|
|
defe780c39 | ||
|
|
36dc23ae38 | ||
|
|
58fff59f1b | ||
|
|
2e6eed69e6 | ||
|
|
942fd2876e | ||
|
|
6de25bd7e1 | ||
|
|
845d8b383b | ||
|
|
0372937353 | ||
|
|
ab552ce387 | ||
|
|
fa1f7296f2 | ||
|
|
ca242c056c | ||
|
|
c9e3ad4335 | ||
|
|
d58d4857b0 | ||
|
|
6d96611d69 | ||
|
|
caad0ceaf9 | ||
|
|
417db14d5c | ||
|
|
a6d5961226 | ||
|
|
45bedcf1cb | ||
|
|
2f74cdaff8 | ||
|
|
788a9ca405 | ||
|
|
1ab2b9db01 | ||
|
|
cb16fe4305 | ||
|
|
9b822d1dff | ||
|
|
e7eec2ebf7 | ||
|
|
64aae6ca6b | ||
|
|
06e8279f2a | ||
|
|
da33c89a70 | ||
|
|
e965b8bb41 | ||
|
|
2f4781e4ce | ||
|
|
c7e8c54068 | ||
|
|
a09a35ed5c | ||
|
|
89cbbe2765 | ||
|
|
e9a373e328 | ||
|
|
02e06a9591 | ||
|
|
e0f99de75b | ||
|
|
cef956722a | ||
|
|
1672646e87 | ||
|
|
30c9a752bf | ||
|
|
2a3ac5ffab | ||
|
|
eb65c4c78b | ||
|
|
3d8857e01c | ||
|
|
f26a4660ea | ||
|
|
2f234cc589 | ||
|
|
aab37414c3 | ||
|
|
d04302c99f | ||
|
|
22776e7bb3 | ||
|
|
51ab17e3aa | ||
|
|
7997fbb0b0 | ||
|
|
4bd97d002f | ||
|
|
330d66918a | ||
|
|
c58309e685 | ||
|
|
7ca0493190 | ||
|
|
74380b039b | ||
|
|
33064660cf | ||
|
|
bd12800cca | ||
|
|
f613fb13cd | ||
|
|
c20770fcb3 | ||
|
|
f6cd646205 | ||
|
|
f5711fcf8f | ||
|
|
3d20bb97d0 | ||
|
|
c1b2fdf597 | ||
|
|
b6d02cce17 | ||
|
|
810528dfb4 | ||
|
|
37fe071041 | ||
|
|
df5b260f5f | ||
|
|
c3d48ff36e | ||
|
|
3d8a6c6e5a | ||
|
|
048a745371 | ||
|
|
c1007683a5 | ||
|
|
047a2b818a | ||
|
|
bf91e47ddc | ||
|
|
8bbe8cf57d | ||
|
|
d492500812 | ||
|
|
fc9f23385f | ||
|
|
d5222bad1e | ||
|
|
0a41704490 | ||
|
|
48cc5048af | ||
|
|
aec9476438 | ||
|
|
c266e9ecaa | ||
|
|
a313c227d5 | ||
|
|
9a25c2a87d | ||
|
|
817d2f0ec2 | ||
|
|
0c54348f69 | ||
|
|
cb4c94f3ab | ||
|
|
9150137c47 | ||
|
|
7b0c1b0b9b | ||
|
|
47576b63f0 | ||
|
|
cb630e7043 | ||
|
|
5404ef849d | ||
|
|
c3c836de4d | ||
|
|
6dcec3c42f | ||
|
|
f7941f80ab | ||
|
|
f9657b75f6 | ||
|
|
2cb8d82648 | ||
|
|
9329d9d008 | ||
|
|
47d9c6c4b1 | ||
|
|
6eed461162 | ||
|
|
b995436ea4 | ||
|
|
f7b707c3da | ||
|
|
c04ee0f821 | ||
|
|
767117f54e | ||
|
|
a04191b11e | ||
|
|
9f6e7b49be | ||
|
|
2ee8e19668 | ||
|
|
e7ccab2ad9 | ||
|
|
52633544ff | ||
|
|
69f4f11bc7 | ||
|
|
c885ebb7e8 | ||
|
|
6bebd1d53a | ||
|
|
d0ae674155 | ||
|
|
ce7f249880 | ||
|
|
2fc98ad0df | ||
|
|
bb41f61263 | ||
|
|
130d2c5af0 | ||
|
|
1f270ae8f0 | ||
|
|
9854e207ae | ||
|
|
572ebeef84 | ||
|
|
a9a6c07c1a | ||
|
|
b43d84295c | ||
|
|
1f38c8fc8c | ||
|
|
05da44aa52 | ||
|
|
0af42c77c8 | ||
|
|
068b252db6 | ||
|
|
35d3b371d2 | ||
|
|
f9fb929b45 | ||
|
|
0fe5de8206 | ||
|
|
323c653275 | ||
|
|
4b20cdd001 | ||
|
|
5aded2b349 | ||
|
|
24ff23b148 | ||
|
|
99425f0991 | ||
|
|
9619f5b3a7 | ||
|
|
f92fde2800 | ||
|
|
f6096e3020 | ||
|
|
41c970efd4 | ||
|
|
1323684153 | ||
|
|
642d946c17 | ||
|
|
d4565fd728 | ||
|
|
75d99e17f0 | ||
|
|
cb92ad0577 | ||
|
|
4ded3b90de | ||
|
|
957540c362 | ||
|
|
2025949265 | ||
|
|
7a4fdfb410 | ||
|
|
fed72384ba | ||
|
|
034cc75a61 | ||
|
|
dd3c957f8b | ||
|
|
fc28c97400 | ||
|
|
dcdeefe85e | ||
|
|
c0ffe59d47 | ||
|
|
af99895168 | ||
|
|
2273550fea | ||
|
|
d4af3421ba | ||
|
|
d431fec1ed | ||
|
|
ebebb05af3 | ||
|
|
8d0493bf9d | ||
|
|
b1ed4461af | ||
|
|
757b13544a | ||
|
|
91ec97220b | ||
|
|
9f85619334 | ||
|
|
374ad2f2e5 | ||
|
|
a52af89cad | ||
|
|
b9050c0e3c | ||
|
|
ffb7486a01 | ||
|
|
3c2b852473 | ||
|
|
a9214486cf | ||
|
|
76f128343e | ||
|
|
c342baa138 | ||
|
|
353bbbd61a | ||
|
|
27661f711f | ||
|
|
0cb814d26e | ||
|
|
7ec901297b | ||
|
|
48805eea66 | ||
|
|
ed708b5fb8 | ||
|
|
d9245b8aee | ||
|
|
459b360897 | ||
|
|
ab2842af14 | ||
|
|
8b62e42323 | ||
|
|
c3cfecb5fa | ||
|
|
55c619bf87 | ||
|
|
ff18f69dd0 | ||
|
|
c2cb359bf7 | ||
|
|
e03187920b | ||
|
|
eeedafe637 | ||
|
|
f1e2083506 | ||
|
|
b6fa73d94c | ||
|
|
0546d7e8b9 | ||
|
|
d91f569aff | ||
|
|
17d1a9619c | ||
|
|
72204740df | ||
|
|
745f8b63b0 | ||
|
|
97f4fa91ca | ||
|
|
35e1477c24 | ||
|
|
c42daa5dba | ||
|
|
214ba50ecc | ||
|
|
64a12fe5c8 | ||
|
|
276cb0f7c6 | ||
|
|
9020d1e474 | ||
|
|
bcb2a9386d | ||
|
|
adcdf9bd6a | ||
|
|
88a2f354b4 | ||
|
|
e1faa64af7 | ||
|
|
6d182a5984 | ||
|
|
8202d44051 | ||
|
|
9a4b933976 | ||
|
|
f0d7b82bf9 | ||
|
|
a5f94d736a | ||
|
|
81321e44e1 | ||
|
|
716fcb7209 | ||
|
|
09f553d998 | ||
|
|
f00fd246b9 | ||
|
|
35a97946ac | ||
|
|
3445b792c8 | ||
|
|
124eeab893 | ||
|
|
5206c99151 | ||
|
|
dcaa980822 | ||
|
|
50a9580505 | ||
|
|
06632a6918 | ||
|
|
f9dbfe9a77 | ||
|
|
4d652e7f02 | ||
|
|
cc2e5f8775 | ||
|
|
aa0632d274 | ||
|
|
e8522b1e62 | ||
|
|
7ade40ace2 | ||
|
|
73cbc9f11e | ||
|
|
6c9458cdac | ||
|
|
0fa8a1c87e | ||
|
|
a88fde30ed | ||
|
|
675d576c58 | ||
|
|
86405d89f4 | ||
|
|
4ee6f3f752 | ||
|
|
7600ac8b49 | ||
|
|
8bad573568 | ||
|
|
c4ef6401a4 | ||
|
|
7a42de63dc | ||
|
|
4f600b2a59 | ||
|
|
097615cc7d | ||
|
|
cecd6f1947 | ||
|
|
d75e40b98c | ||
|
|
17db0f27ef | ||
|
|
52b8100c09 | ||
|
|
e016d55630 | ||
|
|
254089d34e | ||
|
|
7f6752ba8a | ||
|
|
6b90e17f1c | ||
|
|
34f8db2557 | ||
|
|
f243293e8c | ||
|
|
79696dfdde | ||
|
|
0d127b109a | ||
|
|
d608f9aeb6 | ||
|
|
5962459ca1 | ||
|
|
0ee77026ba | ||
|
|
39251fc75f | ||
|
|
69f950eb57 | ||
|
|
0236874a2e | ||
|
|
c85400b3e2 | ||
|
|
e091a45931 | ||
|
|
e5336f4438 | ||
|
|
4971985d44 | ||
|
|
8dadaa5089 | ||
|
|
97c7e7e3d4 | ||
|
|
7646bbaccd | ||
|
|
e1fa33b4dd | ||
|
|
9fc92f52f4 | ||
|
|
c112794ede | ||
|
|
710671eb99 | ||
|
|
df345d782f | ||
|
|
406552fae4 | ||
|
|
c54f03d8cc | ||
|
|
798c357291 | ||
|
|
05b414fdf6 | ||
|
|
3940f3bd47 | ||
|
|
cc1eca5237 | ||
|
|
e8c22249a2 | ||
|
|
4008f78433 | ||
|
|
1a1da2b71b | ||
|
|
b2f90d3dcc | ||
|
|
a100affda2 | ||
|
|
e4b799c44a | ||
|
|
4fe916990e | ||
|
|
2eb7a19546 | ||
|
|
6cfcefb13a | ||
|
|
c39b1c18ff | ||
|
|
5635e9235e | ||
|
|
ce2a95fa51 | ||
|
|
b4a17f6710 | ||
|
|
4e6e2e678d | ||
|
|
dd5e63a409 | ||
|
|
86efa69213 | ||
|
|
2306efbbe4 | ||
|
|
463a0900d7 | ||
|
|
cb753f2a12 | ||
|
|
f124e27f33 | ||
|
|
5adaf1a422 | ||
|
|
a88c98bc9a | ||
|
|
bdb014711c | ||
|
|
9060a5bb2a | ||
|
|
c479960b7a |
4428 changed files with 435226 additions and 442359 deletions
30
.dockerignore
Normal file
30
.dockerignore
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Local volumes
|
||||
/config
|
||||
/data
|
||||
/db
|
||||
|
||||
# Updated through volumes
|
||||
Server/data
|
||||
Server/worldprops
|
||||
|
||||
# Env files containing secrets
|
||||
/.env
|
||||
/*.env
|
||||
|
||||
# Log files
|
||||
logs
|
||||
*.log
|
||||
|
||||
# Git files
|
||||
.git
|
||||
.gitattributes
|
||||
.gitignore
|
||||
|
||||
# Basic stuff
|
||||
*.md
|
||||
LICENSE
|
||||
.gitlab-ci.yml
|
||||
|
||||
# Docker files
|
||||
docker-compose.yml
|
||||
Dockerfile
|
||||
13
.gitignore
vendored
13
.gitignore
vendored
|
|
@ -18,7 +18,8 @@ Server/data/global_kill_stats.json
|
|||
Server/ge_test.db
|
||||
Server/latestdump.txt
|
||||
Management-Server/managementprops/
|
||||
Server/worldprops/
|
||||
Server/worldprops/*
|
||||
!Server/worldprops/default.conf
|
||||
|
||||
**/.idea/workspace.xml
|
||||
**/.idea/tasks.xml
|
||||
|
|
@ -31,3 +32,13 @@ gradle
|
|||
**/*.swo
|
||||
build/kotlin/sessions/
|
||||
**/*.iml
|
||||
Server/hasRan.txt
|
||||
|
||||
# Local volumes
|
||||
/config
|
||||
/data
|
||||
/db
|
||||
|
||||
# Env files containing secrets
|
||||
/.env
|
||||
/*.env
|
||||
|
|
|
|||
|
|
@ -1,16 +1,20 @@
|
|||
variables:
|
||||
# This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
|
||||
# `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
|
||||
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true -Xmx1024m"
|
||||
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true -Xmx3g"
|
||||
# As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
|
||||
# when running from the command line.
|
||||
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-fast --show-version"
|
||||
|
||||
# This template uses jdk8 for verifying and deploying images
|
||||
image: maven:3-openjdk-11
|
||||
image: maven:3-openjdk-11-slim
|
||||
|
||||
workflow:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||
|
||||
before_script:
|
||||
- apt-get update -qq && apt-get install -qq -y --no-install-recommends jq
|
||||
- 'free -mh'
|
||||
- 'apt-get update -q'
|
||||
|
||||
# Cache downloaded dependencies and plugins between builds.
|
||||
# To keep cache across branches add 'key: "$CI_JOB_NAME"'
|
||||
|
|
@ -22,7 +26,7 @@ verify:jdk11:
|
|||
stage: build
|
||||
script:
|
||||
- 'cd Server'
|
||||
- 'mvn $MAVEN_CLI_OPTS verify -DskipTests'
|
||||
- 'mvn $MAVEN_CLI_OPTS verify'
|
||||
except:
|
||||
variables:
|
||||
- $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
|
|
@ -30,6 +34,7 @@ verify:jdk11:
|
|||
test:json:
|
||||
stage: test
|
||||
script:
|
||||
- 'apt-get install -q -y --no-install-recommends jq'
|
||||
- 'find . -name \*.json -type f -print0 | xargs -0 -n1 -P8 jq empty'
|
||||
except:
|
||||
variables:
|
||||
|
|
|
|||
17
.gitlab/issue_templates/Default.md
Normal file
17
.gitlab/issue_templates/Default.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
What I did:
|
||||
|
||||
What I expected to happen:
|
||||
|
||||
What actually happened:
|
||||
|
||||
IDs of related NPCs/items:
|
||||
|
||||
2009-era source (if relevant):
|
||||
|
||||
Screenshots or video:
|
||||
|
||||
LIVE SERVER username affected by this issue:
|
||||
|
||||
**Bug reports are not accepted by SP users. SP is often out of date and results in invalid bug reports.**
|
||||
|
||||
**If the bug is exploitable make sure you tick the confidential checkbox below**
|
||||
14
Dockerfile
Normal file
14
Dockerfile
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Starting out with the openjdk-11-slim image
|
||||
FROM maven:3-openjdk-11-slim
|
||||
|
||||
# Set working directory to /app
|
||||
WORKDIR /app
|
||||
|
||||
# Copy all sources etc
|
||||
COPY . .
|
||||
|
||||
# Make sure ./run has permissions
|
||||
RUN chmod +x run
|
||||
|
||||
# Run it
|
||||
CMD ["./run"]
|
||||
129
README.md
129
README.md
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<br />
|
||||
<p align="center">
|
||||
<a href="https://gitlab.com/200scape/2009scape">
|
||||
<a href="https://gitlab.com/2009scape/2009scape">
|
||||
<img src="https://i.imgur.com/RsfVfkB.png" alt="Logo" width="300" height="67">
|
||||
</a>
|
||||
<h3 align="center">An open source MMORPG emulation server</h3>
|
||||
|
|
@ -29,6 +29,7 @@
|
|||
* [Prerequisites](#prerequisites)
|
||||
* [Project Setup](#project-setup)
|
||||
* [Running the project](#running-the-project)
|
||||
* [Browser WebSocket Transport](#browser-websocket-transport)
|
||||
* [License](#license)
|
||||
* [Contact](#contact)
|
||||
|
||||
|
|
@ -72,7 +73,7 @@ There are many ways everyone can contribute! From the most seasoned programmers
|
|||
* **Wiki Editors**: Did you know we have a wiki? Well it's always in need of people to fill it out and stay on top of it. Editing the wiki is one of the easiest ways you can contribute to 2009Scape! If you're an active player and have the will, there's so much you could be helping out with over at the wiki. [Click here to go to the wiki](https://cdn.2009scape.org/wiki/doku.php?id=start).
|
||||
|
||||
|
||||
* **JSON editors**: We could always use more JSON editors! Please note that JSON editing **must** be done using the [Thanos Tool](https://gitlab.com/2009scape/rs09-thanos-tool/-/jobs/artifacts/master/raw/build/libs/thanostool.jar?job=build).
|
||||
* **JSON editors**: We could always use more JSON editors! Please note that JSON editing **must** be done using the [Thanos Tool](https://gitlab.com/2009scape/tools/rs09-thanos-tool/-/jobs/5153567519/artifacts/file/build/libs/zaros.jar). **This does not run on modern Java** and requires **Java 11** to run (using the usual 'java -jar zaros.jar').
|
||||
|
||||
|
||||
* **Authenticity Auditors**: As a remake, authenticity is central to our core values! We could always use someone to go through the game and create large lists of simple tasks that can be done to bring us closer to the authentic 2009 game! The preferred way to do this is one-area-at-a-time. If you want to see an example of some audits we've done in the past, take a look [here](https://gitlab.com/2009scape/2009scape/-/issues/46).
|
||||
|
|
@ -80,6 +81,20 @@ There are many ways everyone can contribute! From the most seasoned programmers
|
|||
|
||||
* **Code Contributors**: As a remake, we have massive amounts of content that need to be implemented or corrected. If you know how to program or are willing to learn, this is where you could be extremely helpful! We need everything from quests, to dialogue, to mini-games, to skills that still need to be corrected or implemented. This is perhaps one of the most valuable ways someone could help out the project! If you are interested in developing content, reach out in the development channel of the Discord.
|
||||
|
||||
|
||||
### Policy on Use of AI Tools
|
||||
|
||||
You, the contributor, agree to submit quality code to the best of your ability which you have tested yourself and confirmed that it works as intended, and if it doesn’t work, you agree to take constructive feedback and fix it.
|
||||
|
||||
You should be able to explain or defend how any part of your code works, without the use of AI or any other assistive tools.
|
||||
|
||||
2009scape reserves the right to reject your MR on grounds of poor quality, poor functionality, poor code style, poor attitudes or unethical over-reliance on assistive tools.
|
||||
|
||||
2009scape reserves the right to bar an individual from contributing due to patterns of aforementioned behavior, and close or delete all future MRs or issues or suggestions from said person without given explanation.
|
||||
|
||||
AI may not be used to generate your MR description, your issue description, or any responses to any discourse present on the Gitlab at any time or in any fashion. If you use AI in any of these places, it will be assumed that your entire contribution is AI and that you have no clue how it functions, and the remainder of the policy outlined above will be applied to you immediately.
|
||||
|
||||
|
||||
## Content Developers: Setting Up the Project.
|
||||
### GitLab Setup
|
||||
**Note: This allows you to commit changes to the main repo (with approval)! Also, always stay up to date with the most recent updates by pulling into your copy when 2009Scape updates!**
|
||||
|
|
@ -125,13 +140,119 @@ Start the game server with the included run script. Use `./run -h` for more info
|
|||
|
||||
Start the game server with `run-server.bat`
|
||||
|
||||
#### Browser WebSocket Transport
|
||||
|
||||
Enable the listener in `Server/worldprops/default.conf`:
|
||||
|
||||
```properties
|
||||
websocket_enabled = true
|
||||
websocket_port = 0
|
||||
```
|
||||
|
||||
When `websocket_port = 0`, the listener uses `53594 + world_id`. For world `1`, that is `53595`.
|
||||
|
||||
Both plain WebSocket (`ws://`) and secure WebSocket (`wss://`) are supported. Use `ws://` for local HTTP testing. PWA requires HTTPS/WSS.
|
||||
|
||||
Enable WSS with a Java keystore:
|
||||
|
||||
```properties
|
||||
websocket_tls_enabled = true
|
||||
websocket_tls_keystore_path = "certs/dev-wss.p12"
|
||||
websocket_tls_keystore_password = "<keystore-password>"
|
||||
```
|
||||
|
||||
The keystore password is optional. Leave `websocket_tls_keystore_password` blank when using a PKCS12 file exported with an empty password:
|
||||
|
||||
```bash
|
||||
openssl pkcs12 -export \
|
||||
-in fullchain.pem \
|
||||
-inkey privkey.pem \
|
||||
-out certs/dev-wss.p12 \
|
||||
-name websocket \
|
||||
-passout pass:
|
||||
```
|
||||
|
||||
For local WSS development, create a certificate for your hostname or LAN IP that the browser will use, then point the server at a PKCS12 keystore. For production, use a normal certificate from certbot. Plain WS does not require a certificate.
|
||||
|
||||
#### Docker
|
||||
|
||||
Make sure [Docker Engine](https://docs.docker.com/engine/install/) & [Docker Compose](https://docs.docker.com/compose/install/) plugin are installed first:
|
||||
|
||||
Go to the project root where the git repository is cloned into:
|
||||
|
||||
```bash
|
||||
cd /path/to/project-dir
|
||||
```
|
||||
|
||||
To configure the database, copy the mysql env file template to a env file in the project root:
|
||||
|
||||
```bash
|
||||
cp mysql.env.example mysql.env
|
||||
```
|
||||
|
||||
Customize the env file however necessary.
|
||||
|
||||
Create a new directory called 'config' into the project root.
|
||||
|
||||
```bash
|
||||
mkdir config
|
||||
```
|
||||
|
||||
Copy the server config file template in the config directory:
|
||||
|
||||
```bash
|
||||
cp Server/worldprops/default.conf config/default.conf
|
||||
```
|
||||
|
||||
Edit the server configuration file as per needed.
|
||||
|
||||
Go to the project root directory and execute:
|
||||
|
||||
```bash
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
Which will build the docker image using the local Dockerfile and starts the server and database containers.
|
||||
|
||||
The previous up command should be run every time the server sources are modified to propagate the changes to the container.
|
||||
|
||||
For the first time, the server compilation process takes a long time. Grab some coffee in the meanwhile.
|
||||
|
||||
You can check (and follow) the containers logs by running the following in the project root directory (-f for follow and Ctrl+C to stop):
|
||||
|
||||
```bash
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
Any compilation or runtime errors will be logged here.
|
||||
|
||||
If you have already compiled the server and made no changes to the sources, you can simply run without the build option (however it will be cached anyways):
|
||||
|
||||
```bash
|
||||
docker compose up
|
||||
```
|
||||
|
||||
To later restart the server to apply simple configuration changes, in the project root directory run:
|
||||
|
||||
```bash
|
||||
docker compose restart server
|
||||
```
|
||||
|
||||
To shut down / take down the server, in the project root directory run:
|
||||
|
||||
```bash
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
The database files, build cache and config files will be persisted on the host filesystem for easy backup management.
|
||||
|
||||
### License
|
||||
|
||||
We use the AGPL 3.0 license, which can be found [here](https://www.gnu.org/licenses/agpl-3.0.en.html). Please be sure to read and understand the license. Failure to follow the guidelines outlined in the license will result in legal action. If you know or hear of anyone breaking this license, please send a report, with proof, to Red Bracket#8151, ceikry#2724, or woahscam#8535 on discord or email woahscam@hotmail.com. **We WILL NOT change the license to fit your needs.**
|
||||
|
||||
### Contact
|
||||
|
||||
**Reminder: There is no official support for setting up your own server. Do not ping/dm developers, or ask in support channels about setting up your server. Support for the live server and 2009Scape single-player is available in the Discord.**
|
||||
**Reminder: There is no official support for setting up your own server. Do not ping/dm developers, or ask in support channels about setting up your server. Support for the live server and 2009Scape single-player is available on the [2009Scape forums](https://forum.2009scape.org/).**
|
||||
|
||||
|
||||
[license-shield]: https://img.shields.io/badge/license-AGPL--3.0-informational
|
||||
|
|
@ -149,4 +270,4 @@ These credits can be spent in the 2009Scape Reward Shop. It's important to be cl
|
|||
|
||||
Testers are not the only people who can gain credits - other ways of earning credits can be found on [the 2009Scape website](https://2009scape.org/site/game_guide/credits.html).
|
||||
|
||||
Please be patient! The Credit system is not fully complete yet, so it will take a long time for credits to be awarded.
|
||||
Please be patient! The Credit system is not fully complete yet, so it will take a long time for credits to be awarded.
|
||||
1
Server/.gitignore
vendored
1
Server/.gitignore
vendored
|
|
@ -2,6 +2,7 @@ bin/**
|
|||
out/**
|
||||
data/logs/**
|
||||
data/profile/**
|
||||
data/playerstats/**
|
||||
.idea/**
|
||||
/bin
|
||||
.DS_Store**
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
<ObjectAction mode="remove" id="356" x="2804" y="3428" z="0"/>
|
||||
<ObjectAction mode="add" id="356" x="2804" y="3428" z="0"/>
|
||||
<ObjectAction mode="add" id="2783" x="3229" y="3254" z="0"/>
|
||||
|
||||
<ObjectAction mode="remove" id="20228" x="2537" y="3573" z="0"/>
|
||||
<ObjectAction mode="add" id="27663" x="2537" y="3573" z="0" direction="w"/>
|
||||
|
|
@ -22,7 +21,6 @@
|
|||
<ObjectAction mode="add" id="39242" x="2955" y="3273" z="0" direction="w"/>
|
||||
<ObjectAction mode="add" id="39241" x="2955" y="3274" z="0" />
|
||||
<ObjectAction mode="add" id="20987" x="2821" y="2996" z="0" direction="s"/>
|
||||
<ObjectAction mode="add" id="9472" x="3353" y="3951" z="0" direction="s"/>
|
||||
<ObjectAction mode="add" id="21301" x="2662" y="3162" z="0" direction="e"/>
|
||||
<ObjectAction mode="add" id="4176" x="2629" y="3661" z="2" type="4" direction="e"/>
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
"This is my own dialogue",
|
||||
"@name run.",
|
||||
"@name you cant hide from me.",
|
||||
"jajajajajaja",
|
||||
"Jajajajajaja",
|
||||
"How do i get to Varrock @name?",
|
||||
"How do i get to Camelot @name?",
|
||||
"How do i get to Taverly @name?",
|
||||
|
|
@ -21,17 +21,17 @@
|
|||
"How do i get to Yanille @name?",
|
||||
"How do i get to Catherby @name?",
|
||||
"Gotta go srry.",
|
||||
"wiggle wiggle wiggle yeah",
|
||||
"Wiggle wiggle wiggle yeah",
|
||||
"@name lookin goofy",
|
||||
"@name lookin stoopid",
|
||||
"@name lookin like a red bracket",
|
||||
"@name get yo weasel lookin ass outta here",
|
||||
"@name lookin like some sort of twocan sam",
|
||||
" /hop world 1 got a noob here!",
|
||||
"woot",
|
||||
"Woot",
|
||||
"Hows your day been @name?",
|
||||
"heyy @name :)",
|
||||
"gtg srry",
|
||||
"Heyy @name :)",
|
||||
"Gtg srry",
|
||||
"I wont answer your questions @name",
|
||||
"Stop asking questions @name",
|
||||
"Roflmao",
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
"Nice Armor @name!",
|
||||
"Nice Weapon @name!",
|
||||
"Venezuela #1",
|
||||
"2009Scape and chill @name?",
|
||||
"2009scape and chill @name?",
|
||||
"@name is my girlfriend",
|
||||
"Buying gf",
|
||||
"Bank sale pm me for info",
|
||||
|
|
@ -61,14 +61,14 @@
|
|||
"Fuckin sit @name.",
|
||||
"Error: Botting client broken tell Evilwaffles.",
|
||||
"@name bots all the time",
|
||||
"report @name",
|
||||
"apparently @name bots",
|
||||
"Report @name",
|
||||
"Apparently @name bots",
|
||||
"@name hates kermit",
|
||||
"There are no mods on to help you",
|
||||
"Report me, you wont",
|
||||
"Yes, Im botting. And?",
|
||||
"ERROR: BOTSCRIPT 404. REPORT TO BOT OWNER (Evilwaffles)",
|
||||
"flash2:wave: FUCK",
|
||||
"Flash2:wave: FUCK",
|
||||
"I love 2009Scape!",
|
||||
"Ja Ja Ja Ja",
|
||||
"This is fun!",
|
||||
|
|
@ -105,9 +105,9 @@
|
|||
"Trade me @name",
|
||||
"LOL",
|
||||
"How do I get to lumbrich",
|
||||
"bruh",
|
||||
"poggers",
|
||||
"shitpost",
|
||||
"Bruh",
|
||||
"Poggers",
|
||||
"Shitpost",
|
||||
"I wish i could find an RS Gf",
|
||||
"Where do you find runite ore @name?",
|
||||
"Where is the best coal location @name?",
|
||||
|
|
@ -135,41 +135,39 @@
|
|||
"Im not a bot",
|
||||
"Nah Im a real person",
|
||||
"Bruh are you even a real person lol?",
|
||||
"e",
|
||||
"E",
|
||||
"Hellooooo @name",
|
||||
"wc lvl @name?",
|
||||
"fletching level @name?",
|
||||
"firemaking level @name?",
|
||||
"Wc lvl @name?",
|
||||
"Fletching level @name?",
|
||||
"Firemaking level @name?",
|
||||
"Have you seen the dude in the ge?",
|
||||
"Wonderful weather today @name",
|
||||
"Lowkey drunk af rn",
|
||||
"I am so tired",
|
||||
"Wassup @name",
|
||||
"follow me @name!",
|
||||
"Follow me @name!",
|
||||
"Server goes brrrr",
|
||||
"bruh i am not a bot",
|
||||
"Bruh i am not a bot",
|
||||
"I think @name is a bot",
|
||||
"Are you a bot @name?",
|
||||
"insert spiderman meme here",
|
||||
"pot calling the kettle black etc",
|
||||
"ooh, a piece of candy",
|
||||
"Insert spiderman meme here",
|
||||
"Pot calling the kettle black etc",
|
||||
"Ooh, a piece of candy",
|
||||
"I love woodcutting",
|
||||
"Im going to go level up later",
|
||||
"I love mining shooting stars",
|
||||
" /this @name looks dumb",
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAHHHHHH!!!",
|
||||
"como estas @name",
|
||||
"Summer = always the best community manaer",
|
||||
"so how about that ceikry guy",
|
||||
"so how about that kermit dude",
|
||||
"woah is an abusive mod",
|
||||
"Como estas @name",
|
||||
"So how about that ceikry guy",
|
||||
"So how about that kermit dude",
|
||||
"Woah is an abusive mod",
|
||||
"I heard Woah and Ceikry are dating now",
|
||||
"House party in Yanille!",
|
||||
"Can i have some gp @name?",
|
||||
"Where do i find partyhats?",
|
||||
"Why do mobs drop boxes?",
|
||||
"What exp rate do you play on @name?",
|
||||
"Have you met Summer?",
|
||||
"Hey @name",
|
||||
"Hey @name",
|
||||
"Hey @name",
|
||||
|
|
@ -190,33 +188,33 @@
|
|||
"NobodyCLP has big feet",
|
||||
"Chicken tendies for dindin",
|
||||
"Spicey Chicken tendies is litty as a mf titty",
|
||||
"red bracket stinky",
|
||||
"ra ra rasputin",
|
||||
"lover of the russian queen",
|
||||
"Red bracket stinky",
|
||||
"Ra ra rasputin",
|
||||
"Lover of the russian queen",
|
||||
"Whens the next update coming out?",
|
||||
"How many players are maxed?",
|
||||
"I dont use discord @name",
|
||||
"I dont use the CC @name",
|
||||
"Why should i use discord?",
|
||||
"2009Scape is life",
|
||||
"brb gotta make dinner",
|
||||
"Brb gotta make dinner",
|
||||
"I need to go to the GE",
|
||||
"@name can i have a ge tele?",
|
||||
"lol @name shut up",
|
||||
"Lol @name shut up",
|
||||
"Where are teak trees?",
|
||||
"How do i make planks @name?",
|
||||
"Idk about that scraggley ass alex guy.",
|
||||
"Rusty? More like Crusty af lmfao.",
|
||||
"I need to sell some stuff on the ge",
|
||||
"I have so many logs to sell lol",
|
||||
"nah",
|
||||
"yes",
|
||||
"Nah",
|
||||
"Yes",
|
||||
"Where can i mine iron?",
|
||||
"Where can i mine tin?",
|
||||
"Where can i mine copper?",
|
||||
"Where can i mine clay?",
|
||||
"Where can i mine coal?",
|
||||
"no",
|
||||
"No",
|
||||
"We are no strangers to love",
|
||||
"You know the rules and so do I",
|
||||
"A full commitment's what I'm thinking of",
|
||||
|
|
@ -230,10 +228,10 @@
|
|||
"Never gonna make you cry",
|
||||
"Never gonna say goodbye",
|
||||
"Never gonna tell a lie and hurt you",
|
||||
"why",
|
||||
"why",
|
||||
"why",
|
||||
"why",
|
||||
"Why",
|
||||
"Why",
|
||||
"Why",
|
||||
"Why",
|
||||
"Why does it not show your messages in the chatbox?",
|
||||
"Why do you not show up in chat?",
|
||||
"Why do you not show up in chat @name?",
|
||||
|
|
@ -241,7 +239,7 @@
|
|||
"When did you start playing @name?",
|
||||
"When did you start on this server @name?",
|
||||
"When did you first get here @name?",
|
||||
"russias greatest love machine",
|
||||
"Russias greatest love machine",
|
||||
"Never gonna run around and desert you",
|
||||
"Two things are infinite, the universe & @names stupidity",
|
||||
"If you tell the truth, you dont have to remember anything.",
|
||||
|
|
@ -259,7 +257,7 @@
|
|||
"What do you think @name?",
|
||||
"How does that sound @name?",
|
||||
"That sounds great @name.",
|
||||
"I’m learning English.",
|
||||
"I'm learning English.",
|
||||
"I don't understand.",
|
||||
"Could you repeat that please @name?",
|
||||
"Could you please talk slower @name?",
|
||||
|
|
@ -283,26 +281,26 @@
|
|||
"@name?",
|
||||
"@name how long have you played",
|
||||
"@name world 1 or world 2?",
|
||||
"what is your main world @name?",
|
||||
"What is your main world @name?",
|
||||
"I prefer world 1 tbh",
|
||||
"I prefer world 2 tbh",
|
||||
"@name world 1 for life",
|
||||
"@name fog bots when?",
|
||||
"damn somalian pirates",
|
||||
"bracket more like brrrrrr acket",
|
||||
"why the racket bracket",
|
||||
"Damn somalian pirates",
|
||||
"Bracket more like brrrrrr acket",
|
||||
"Why the racket bracket",
|
||||
"Hi @name I am dad",
|
||||
"@name likes dad jokes",
|
||||
"ur nuts @name",
|
||||
"lootshare go brr",
|
||||
"partay with froggay",
|
||||
"Ur nuts @name",
|
||||
"Lootshare go brr",
|
||||
"Partay with froggay",
|
||||
"Know what else is lame? Not being able to play 2009scape right now",
|
||||
"Can you even grind on osrs",
|
||||
"i botted to 88 fishing",
|
||||
"I botted to 88 fishing",
|
||||
"Do not forget to vote in running polls!",
|
||||
"Always check announcments",
|
||||
"we thrivin",
|
||||
"ship @name",
|
||||
"We thrivin",
|
||||
"Ship @name",
|
||||
"Dont forget to vote 2009scape!",
|
||||
"Kermit is too legit 2 quit",
|
||||
"Out here on the range we are having fun",
|
||||
|
|
@ -312,11 +310,11 @@
|
|||
"I dont like him @name",
|
||||
"I dont like it @name",
|
||||
"Im an American.",
|
||||
"ima go pickup my lady ting",
|
||||
"that portuguese dude is something else",
|
||||
"Ima go pickup my lady ting",
|
||||
"That portuguese dude is something else",
|
||||
"@name!! @name!!",
|
||||
"bowdi boy",
|
||||
"i love bowdi... sometimes",
|
||||
"Bowdi boy",
|
||||
"I love bowdi... sometimes",
|
||||
"@name = @name",
|
||||
"I'm bacon.. go on dad... say it",
|
||||
"I'm going to leave.",
|
||||
|
|
@ -340,7 +338,7 @@
|
|||
"I couldn't agree more @name",
|
||||
"It cost me a fortune @name",
|
||||
"I am dog tired",
|
||||
"Don’t take it personally",
|
||||
"Don't take it personally",
|
||||
"We will be having a good time",
|
||||
"Same as always @name",
|
||||
"No problem",
|
||||
|
|
@ -362,40 +360,23 @@
|
|||
"530 gang for life",
|
||||
"@name, have you read the rules?",
|
||||
"@name, have you checked out the forums?",
|
||||
"why are the leprechauns moving?",
|
||||
"Why are the leprechauns moving?",
|
||||
"I am beyond the point of no return!",
|
||||
"Nothin' personnel, kid.",
|
||||
"All your base are belong to us",
|
||||
"May Guthix bring you balance.",
|
||||
"May Guthix bring you balance.",
|
||||
"May Guthix bring you balance.",
|
||||
"Thy death was not in vain, for it brought some balance to the world. May Guthix bring you rest.",
|
||||
"May you walk the path, and never fall, for Guthix walks beside thee on thy journey. May Guthix bring you peace.",
|
||||
"All things must end, as all begin; Only Guthix knows the role thou must play. May Guthix bring you balance.",
|
||||
"In life, in death, in joy, in sorrow: May thine experience show thee balance. May Guthix bring you balance.",
|
||||
"Thou must do as thou must, no matter what. Thine actions bring balance to this world. May Guthix bring you balance.",
|
||||
"The river flows, the sun ignites, May you stand with Guthix in thy fights. May Guthix bring you balance.",
|
||||
"A journey of a single step, May take thee over a thousand miles. May Guthix bring you balance.",
|
||||
"Zamorak give me strength!",
|
||||
"Zamorak give me strength!",
|
||||
"Zamorak give me strength!",
|
||||
"May your bloodthirst never be sated, and may all your battles be glorious. Zamorak bring you strength.",
|
||||
"There is no opinion that cannot be proven true...by crushing those who choose to disagree with it. Zamorak give me strength!",
|
||||
"Battles are not lost and won; They simply remove the weak from the equation. Zamorak give me strength!",
|
||||
"Those who fight, then run away, shame Zamorak with their cowardice. Zamorak give me strength!",
|
||||
"Battle is by those who choose to disagree with it. Zamorak give me strength!",
|
||||
"Strike fast, strike hard, strike true: The strength of Zamorak will be with you. Zamorak give me strength!",
|
||||
"The weak deserve to die, so the strong may flourish. This is the creed of Zamorak.",
|
||||
"This is Saradomin's wisdom.",
|
||||
"This is Saradomin's wisdom.",
|
||||
"This is Saradomin's wisdom.",
|
||||
"Go in peace in the name of Saradomin; may his glory shine upon you like the sun.",
|
||||
"Thy cause was false, thy skills did lack; See you in Lumbridge when you get back.",
|
||||
"Protect your self, protect your friends. Mine is the glory that never ends. This is Saradomin's wisdom.",
|
||||
"The darkness in life may be avoided, by the light of wisdom shining. This is Saradomin's wisdom.",
|
||||
"Show love to your friends, and mercy to your enemies, and know that the wisdom of Saradomin will follow. This is Saradomin's wisdom.",
|
||||
"A fight begun, when the cause is just, will prevail over all others. This is Saradomin's wisdom.",
|
||||
"The currency of goodness is honour; It retains its value through scarcity. This is Saradomin's wisdom.",
|
||||
"For Camelot!",
|
||||
"Firmly grasp it!",
|
||||
"My legs!",
|
||||
|
|
@ -412,7 +393,7 @@
|
|||
"Fluff",
|
||||
"Bwuh",
|
||||
"I'm literally just mothin' bro",
|
||||
"Certified 2009scape classic.",
|
||||
"Certified 2009Scape Classic.",
|
||||
"Make sure to like, comment and subscribe @name it really helps",
|
||||
"Real 2009scape hours!!! Murder that like if you up!!!!",
|
||||
"W00t!",
|
||||
|
|
@ -426,32 +407,32 @@
|
|||
"Drip check",
|
||||
"Uhuhuhuhuhuhuhuhu",
|
||||
"Ahhhhhhhhhhhhhhhh",
|
||||
"yall got any deez?",
|
||||
"Yall got any deez?",
|
||||
"Deez nuts",
|
||||
"When she give you that yoinky sploinky",
|
||||
"Sir, this is a 2009scape.",
|
||||
"Sir, this is a 2009Scape.",
|
||||
"Oh dear! You are dead!",
|
||||
"Cor blimey, mate! What are ye doing in me pockets?",
|
||||
"yeah i got funnies",
|
||||
"read muv luv",
|
||||
"Yeah i got funnies",
|
||||
"Read muv luv",
|
||||
"Why doesn't she love me bros?",
|
||||
"@name is off the goop don't listen to the clown",
|
||||
"do yall got laptops",
|
||||
"cfunny play the alien warp sound effect",
|
||||
"Do yall got laptops",
|
||||
"Cfunny play the alien warp sound effect",
|
||||
"Ware to all whom doom hither, where cope is all yet constant.",
|
||||
"Who wants to come G W D?",
|
||||
"How do I make money?",
|
||||
"Ironmen stand alone together!",
|
||||
"based",
|
||||
"where is she",
|
||||
"Based",
|
||||
"Where is she",
|
||||
"*S N I I I I I I I I I F F F F F F F F F F F*",
|
||||
"Hey @name, who was in Paris?",
|
||||
"Huh whuh?",
|
||||
"who's lone?",
|
||||
"who *is* he?",
|
||||
"Who's lone?",
|
||||
"Who *is* he?",
|
||||
"Hi @name, I'm Dad!",
|
||||
"anyone wanna play melty blood after I high alch these bows?",
|
||||
"buru nyaaaa",
|
||||
"Anyone wanna play melty blood after I high alch these bows?",
|
||||
"Buru nyaaaa",
|
||||
"Number 15, Taverley Dungeon Black Dragons.",
|
||||
"House party at Rimmington! Host: @name!",
|
||||
"Spending 200m! Trade me, no junk!",
|
||||
|
|
@ -461,19 +442,19 @@
|
|||
"Nice outfit @name, does it come in children's size 12?",
|
||||
":)",
|
||||
":D",
|
||||
"die screaming",
|
||||
"Die screaming",
|
||||
"Only on Tuesdays",
|
||||
"we stan 2009scape",
|
||||
"We stan 2009scape",
|
||||
"There is no spoon",
|
||||
"Where's the cow level?",
|
||||
"Join 2009scape Clan Chat!",
|
||||
"Join 2009scape Cc!",
|
||||
"Chop chop!",
|
||||
"Runescape rox my sox!!!!!!1",
|
||||
"2009Scape rox my sox!!!!!!1",
|
||||
"Type ::scripts for all 99s",
|
||||
"Help I just died to Evil Chicken and I lost my stuff!",
|
||||
"Can you fight Bandos in this game?",
|
||||
"one bad gloop",
|
||||
"One bad gloop",
|
||||
"@name is not cute or funny",
|
||||
"You have committed crimes against Gielinor and her people. What say you?",
|
||||
"Barrows trauma",
|
||||
|
|
@ -488,7 +469,7 @@
|
|||
"Praise Andrew Gower",
|
||||
"Please help me I can't stop playing 2009scape",
|
||||
"Are you ignoring me, @name?!",
|
||||
"i agree with this rfc can we put it in the game please",
|
||||
"I agree with this rfc can we put it in the game please",
|
||||
"@name, we've been trying to reach you about your car's extended warranty",
|
||||
"Trimming armour, 25k gp",
|
||||
"Hey why does my furniture disappear?",
|
||||
|
|
@ -498,21 +479,525 @@
|
|||
"Shlisshalpshlaap",
|
||||
"Somebody call for an exterminator?",
|
||||
"Decisive action. Should work.",
|
||||
"R E A D Y T O R A I S E S O M E H E L L",
|
||||
"Darkness overpowering.",
|
||||
"Got any questions about propane? Or propane accessories?",
|
||||
"When someone asks me if I am a god, I say Y E S!!!",
|
||||
"You run out of Marines?",
|
||||
"Goliath Online",
|
||||
"I'm escaping to the one place that hasn't been corrupted by Capitalism. Lunar Isle!",
|
||||
"Selling wildy protection, 100k gp",
|
||||
"Can’t we get you on Mastermind, @name? Next contestant – @name from Lumbridge. Special subject – the bleedin’ obvious.",
|
||||
"Oh, you’re German! I’m sorry, I thought there was something wrong with you.",
|
||||
"Listen, don’t mention the war! I mentioned it once, but I think I got away with it all right.",
|
||||
"Can't we get you on Mastermind, @name?",
|
||||
"Listen, don't mention the war! I mentioned it once, but I think I got away with it all right.",
|
||||
"Cunnilingus and psychiatry brought us to this.",
|
||||
"Oh, poor baby. What do you want, a Brimstail's Sampler?",
|
||||
"There's an old TzHarrian saying, you fuck up once, you lose two teeth.",
|
||||
"The lineup consisted simply of six hydrocoptic marzelvanes so fitted to the ambifacient lunar waneshaft that sidefumbling was prevented."
|
||||
"Ah, the Wilderness... where dreams of riches meet a swift demise.",
|
||||
"Who needs a quest guide? I've got the whole wiki memorized.",
|
||||
"Buying GF 10k coins. Must have at least 70 Agility.",
|
||||
"I swear, the goblins in Goblin Village have it out for me.",
|
||||
"Why do wizards always hang out in towers? Is it a zoning thing?",
|
||||
"I'm training my Construction skill. My house is gonna be lit!",
|
||||
"The GE is like the stock market, but with dragon bones.",
|
||||
"Why do we need a cabbage patch in Draynor? Seriously.",
|
||||
"I've been mining rune essence for hours. My pickaxe hates me.",
|
||||
"@name hit 99 Cooking. Time to open a gourmet restaurant in Varrock.",
|
||||
"I'm convinced the @name is actually a time-traveling wizard.",
|
||||
"Anyone up for a Castle Wars match? I need that decorative armor.",
|
||||
"Accidentally clicked Attack on a guard. Now I'm a wanted criminal.",
|
||||
"Why do we even have a Duel Arena? It's just a fancy boxing ring.",
|
||||
"I've got a stack of burnt lobsters. Anyone want to buy them?",
|
||||
"Greetings, @name! Looking for a quest?",
|
||||
"Just got a rare drop! The RNG gods are smiling upon me!",
|
||||
"Anyone need help with a boss fight? I've got my dragon dagger ready.",
|
||||
"Buying feathers! Will pay top price!",
|
||||
"The Lumbridge cows are my favorite training spot.",
|
||||
"Who needs a teleport? I've got my magic runes stocked.",
|
||||
"@name hit 99 Woodcutting. Time to chop some yews!",
|
||||
"Anyone seen the Wise Old Man lately? I owe him a visit.",
|
||||
"Selling lobsters! Freshly caught from Catherby.",
|
||||
"Swear, the Wilderness is scarier than my nightmares.",
|
||||
"Looking for a clan to join. Any takers?",
|
||||
"I'm an ironman, so no trading for me!",
|
||||
"Anyone up for a Castle Wars match?",
|
||||
"The Grand Exchange prices are crashing. Panic sell!",
|
||||
"Who else remembers the Falador Massacre?",
|
||||
"I'm saving up for a party hat. Wish me luck!",
|
||||
"Barrows runs are my addiction. Those crypts are spooky.",
|
||||
"I'm convinced the Wise Old Man is secretly Zamorak.",
|
||||
"I'm a completionist, so I'm grinding out all the achievements.",
|
||||
"The music in this game is surprisingly epic.",
|
||||
"Tried to trade with a tree... It didn't go well.",
|
||||
"My bank is like a black hole. Items disappear forever.",
|
||||
"I'm convinced the Wise Old Man is just a confused tourist.",
|
||||
"My character's fashion sense? Let's just say it's 'unique.'",
|
||||
"Challenged a cow to a dance-off. It won.",
|
||||
"Why does the Lumbridge Guide always look so lost?",
|
||||
"I'm training Agility, but my real-life agility is zero.",
|
||||
"Tried to fish in the desert. Sandfish are elusive.",
|
||||
"The Grand Exchange is like a chaotic stock market.",
|
||||
"I'm a master at clicking 'Continue' during quests.",
|
||||
"I'm convinced the chickens are plotting world domination.",
|
||||
"I'm a woodcutter, but I've never seen a talking tree.",
|
||||
"I'm a vegetarian, except when it comes to killing dragons.",
|
||||
"Why do wizards wear pointy hats? Is it a fashion statement?",
|
||||
"Challenged a guard to a staring contest. He won.",
|
||||
"I'm collecting cabbage. It's a noble pursuit.",
|
||||
"Accidentally set my cat on fire. It's now a firecat.",
|
||||
"I'm convinced the Wise Old Man is secretly a time traveler.",
|
||||
"I'm a quest completionist, but I still can't find my keys.",
|
||||
"I'm convinced the ducks are spying on us.",
|
||||
"I'm a pro at avoiding the Lumbridge swamp. Too many frogs.",
|
||||
"Hey, can someone lend me 10k? I promise I'll pay it back... eventually.",
|
||||
"Why do I always find the one square where the random event spawns?",
|
||||
"I'm training Prayer by burying bones. It's like a spiritual workout.",
|
||||
"The Wise Old Man's fashion sense is questionable.",
|
||||
"I'm convinced the ducks are secretly plotting world domination.",
|
||||
"Why do wizards wear pointy hats? Is it a dress code?",
|
||||
"I'm collecting cabbage. It's a noble pursuit, really.",
|
||||
"I'm a vegetarian, except when it comes to killing dragons.",
|
||||
"Why does the Lumbridge Guide always look so lost?",
|
||||
"Training Agility, but my real-life agility is zero.",
|
||||
"I'm convinced the Wise Old Man is secretly a time traveler.",
|
||||
"Tried to mine air. It's an untapped resource.",
|
||||
"I'm a quest completionist, but I still can't find my keys.",
|
||||
"Challenged a guard to a staring contest. He won.",
|
||||
"I'm saving up for a party hat. Priorities, you know?",
|
||||
"Why do goblins drop coins? Do they moonlight as accountants?",
|
||||
"I'm convinced the chickens are plotting something.",
|
||||
"Clicked 'Attack' on a chicken. Now I'm a poultry murderer.",
|
||||
"My character's fashion sense? Let's just say it's 'unique.'",
|
||||
"Do you know where I can find the entrance to the Taverley Dungeon?",
|
||||
"Hey, anyone here familiar with the Barrows? I need some tips.",
|
||||
"Is there a bank nearby? My inventory is overflowing with loot",
|
||||
"I'm clueless about clue scrolls",
|
||||
"Where's the best spot to catch sharks? I'm aiming for 99 Fishing.",
|
||||
"Is there a shortcut to the Karamja Volcano?",
|
||||
"Can someone explain the mechanics of the Jad fight in the Fight Caves?",
|
||||
"I'm stuck on the Elemental Workshop quest. Any hints?",
|
||||
"Where can I find a loom to spin flax into bowstrings?",
|
||||
"What's the best gear setup for killing dragons? I want that visage drop!",
|
||||
"I'm trying to unlock the fairy rings",
|
||||
"How do I recharge my amulet of glory?",
|
||||
"Why do goblins drop coins?",
|
||||
"The Grand Exchange is like the stock market",
|
||||
"My real-life agility is more like a lumbering tortoise.",
|
||||
"The Wise Old Man's fashion sense is like Woahs",
|
||||
"I challenged a cow to a dance off, surprisingly smooth mooves.",
|
||||
"Why does the Lumbridge Guide always look lost?",
|
||||
"I'm convinced the ducks in Lumbridge are plotting world domination!",
|
||||
"I accidentally ate my prayer potion I'm blessed with heartburn",
|
||||
"I'm a vegetarian, except when it comes to slaying dragons.",
|
||||
"Why do wizards wear pointy hats? Is it a magical dress code?",
|
||||
"I'm a quest completionist, but I still can't find my keys in real life.",
|
||||
"I challenged a guard to a staring contest. He won.",
|
||||
"I'm saving up for a party hat. Priorities, ya know?",
|
||||
"What's the deal with the Wilderness?",
|
||||
"I'm convinced the chickens are secretly plotting world domination!",
|
||||
"Accidentally clicked 'Attack' on a guard. Now I'm on a watchlist.",
|
||||
"My character's fashion sense? Let's just say it's 'unique'",
|
||||
"Lobsters heal my soul",
|
||||
"Trimmed armor or bust!",
|
||||
"Wilderness: Where friendships go to die",
|
||||
"Buying gf 10k",
|
||||
"Dancing for coins at Lumbridge",
|
||||
"Wearing full rune like a boss",
|
||||
"Teleporting to Camelot for quests",
|
||||
"Fishing for hours at Catherby",
|
||||
"PKing with a rune 2h",
|
||||
"World 1 Falador Park parties",
|
||||
"Staking my bank at the Duel Arena",
|
||||
"Dying to Elvarg's fiery breath sums up my life",
|
||||
"Got the Quest cape finally on my main!",
|
||||
"Wearing a party hat with pride",
|
||||
"Castle Wars: Red vs Blue",
|
||||
"Trading in Varrock Square",
|
||||
"Barrows runs for that sweet loot",
|
||||
"Spending hours in Pest Control is life",
|
||||
"Killing cows for leather armor is a good start",
|
||||
"Farming herbs in Ardougne can be good money",
|
||||
"Clan chat drama LOL",
|
||||
"Mining rune essence endlessly",
|
||||
"Agility courses: A love-hate relationship",
|
||||
"Dueling for honor.... and GP",
|
||||
"Buying runes from Aubury is decent money",
|
||||
"Chasing the Easter Bunny like a scam",
|
||||
"Wearing a skillcape with pride",
|
||||
"Fletching yew longbows for profit",
|
||||
"Going to implings in Puro-Puro",
|
||||
"Castle Wars barricade wars",
|
||||
"Dropping party hats at drop parties like pennies",
|
||||
"Killing lesser demons in Karamja is part of my holy conquest",
|
||||
"@name lures noobs into the Wilderness",
|
||||
"Farming ranarrs for cash",
|
||||
"Getting lost in the Underground Pass",
|
||||
"Selling coal at the Grand Exchange",
|
||||
"Fighting the Kalphite Queen",
|
||||
"Picking flax in Seers' Village",
|
||||
"Begging for free stuff in Lumbridge",
|
||||
"Smithing rune platebodies for profit",
|
||||
"Logging out in Lumbridge Castle",
|
||||
"Hey @name, how do I get to the Grand Exchange?",
|
||||
"Veteran here! @name, what's your favorite quest?",
|
||||
"@name, how do I make money fast?",
|
||||
"Hey @name, what's the best combat style for bossing?",
|
||||
"@name, always carry an emergency teleport!",
|
||||
"New player here! @name, what's the Wilderness like?",
|
||||
"Hey @name, how do I join a clan?",
|
||||
"@name, prioritize Prayer levels!",
|
||||
"@name, what's the best way to train Agility?",
|
||||
"Hey @name, what's your favorite minigame?",
|
||||
"@name, never trust a PKer in Lumbridge!",
|
||||
"@name, how do I get a fire cape?",
|
||||
"Hey @name, what's the fastest way to level up Magic?",
|
||||
"@name, try the Barrows tunnels!",
|
||||
"@name, what's the deal with Pest Control?",
|
||||
"Hey @name, how do I unlock the Fairy Rings?",
|
||||
"@name, remember the old random events?",
|
||||
"@name, should I train Strength or Attack first?",
|
||||
"Hey @name, what's your favorite skillcape?",
|
||||
"@name, can't do the Fight Caves!",
|
||||
"@name, how do I get a pet?",
|
||||
"Hey @name, what's the best food for boss fights?",
|
||||
"@name, Castle Wars or Clan Wars?",
|
||||
"@name, what's a clue scroll?",
|
||||
"Hey @name, how do I defeat Jad?",
|
||||
"@name, use Protect from Melee at KBD!",
|
||||
"@name, should I train Ranged or Magic?",
|
||||
"Hey @name, what's the best way to level up Crafting?",
|
||||
"@name, don't forget your anti-dragon shield!",
|
||||
"@name, what's the Stronghold of Security?",
|
||||
"Hey @name, how do I access the Legends' Guild?",
|
||||
"@name, remember the old PvP worlds?",
|
||||
"@name, how do I get a dragon defender?",
|
||||
"Hey @name, what's the best way to level up Herblore?",
|
||||
"@name, always carry a charged amulet of glory!",
|
||||
"@name, should I train Fishing or Cooking?",
|
||||
"Hey @name, how do I defeat the Chaos Elemental?",
|
||||
"@name, try the TzHaar Fight Pit!",
|
||||
"@name, what's the best way to level up Smithing?",
|
||||
"Hey @name, what's your favorite Slayer master?",
|
||||
"@name, use the Ardougne cloak teleports!",
|
||||
"@name, what's the Legends' Quest about?",
|
||||
"Hey @name, how do I unlock the Ancient Magicks?",
|
||||
"@name, remember the old Pest Control boats?",
|
||||
"@name, what's the best way to level up Construction?",
|
||||
"Hey @name, what's the fastest way to level up Prayer?",
|
||||
"@name, the old Duel Arena stakes!",
|
||||
"@name, what's the Warriors' Guild?",
|
||||
"Hey @name, how do I defeat the Kalphite Queen?",
|
||||
"@name, use the fairy ring code BIP!",
|
||||
"@name, should I train Attack or Defense first?",
|
||||
"Hey @name, what's the best way to level up Thieving?",
|
||||
"@name, don't forget your charged glory amulet!",
|
||||
"@name, what's the Legends' Cape?",
|
||||
"Hey @name, how do I access the Heroes' Guild?",
|
||||
"@name, remember the old Pest Control void gear?",
|
||||
"@name, how do I get a firemaking skillcape?",
|
||||
"Buying gf 10k",
|
||||
"Trimming armor for free!",
|
||||
"Wanna join my clan? We're called The Mighty Cabbages'!",
|
||||
"I'll meet you at the Falador Party Room!",
|
||||
"Dancing for coins in Varrock Square!",
|
||||
"Remember when the Wilderness was dangerous?",
|
||||
"I got a rune scimitar drop from Lesser Demons!",
|
||||
"Lumbridge Swamp is haunted!",
|
||||
"Anyone up for Castle Wars?",
|
||||
"I miss the old random events!",
|
||||
"World 2 is the trading hub!",
|
||||
"I'm going to train my Agility at the Gnome Stronghold!",
|
||||
"I just got 99 Cooking!",
|
||||
"Fishing lobsters at Catherby is life!",
|
||||
"The Legends' Guild is so exclusive!",
|
||||
"Who needs a quest guide? I'll figure it out!",
|
||||
"I'm mining rune essence for hours!",
|
||||
"Barrows armor looks sick!",
|
||||
"I'm stuck in the Underground Pass!",
|
||||
"The Stronghold of Security taught me about account security!",
|
||||
"I'm going to farm herbs in Ardougne!",
|
||||
"I'm getting my fire cape!",
|
||||
"I love the music in RuneScape!",
|
||||
"I'm alching my maple longbows!",
|
||||
"I'm doing the Recipe for Disaster subquests!",
|
||||
"I'm going to train my combat stats at the Rock Crabs!",
|
||||
"I'm going for the Quest Cape!",
|
||||
"I'm going to mine pure essence!",
|
||||
"I'm hunting chinchompas in the Feldip Hills!",
|
||||
"I'm going to train my Woodcutting at Seers' Village!",
|
||||
"I'm going to fish sharks at the Fishing Guild!",
|
||||
"I'm going to train my Thieving at Ardougne Knights!",
|
||||
"I'm going to hunt implings in Puro-Puro!",
|
||||
"I'm going to train my Hunter at the Falconry!",
|
||||
"I'm smithing rune platebodies!",
|
||||
"I'm going to train my Farming at the Tree Gnome Stronghold!",
|
||||
"I'm going to hunt red chinchompas in the Wilderness!",
|
||||
"I'm doing the Underground Pass quest!",
|
||||
"I'm going to fish monkfish in Piscatoris!",
|
||||
"Meet me in Varrock, @name, for an epic trade",
|
||||
"@name, join my clan; we'll conquer the Wilderness together!",
|
||||
"Beware the dragons, @name, they're fiercer than you think",
|
||||
"Crafting runes with @name, the best mage in Gielinor",
|
||||
"Fishing lobsters with @name, the sea's no match for us",
|
||||
"@name, your swordsmanship at Duel Arena is unmatched!",
|
||||
"Questing through dark caves, @name always leads the way",
|
||||
"Share your wisdom, @name, how'd you master those spells?",
|
||||
"Legends speak of @name bravery at the God Wars",
|
||||
"Need more arrows, @name? I've got plenty to spare",
|
||||
"Cooking's a breeze when @name around, no burnt lobsters!",
|
||||
"Mining together, @name and I strike gold every time",
|
||||
"@name, let's barter; your herbs for my potions?",
|
||||
"Training agility with @name, leaping like graceful gazelles",
|
||||
"Heard @name got the best magic beans in town",
|
||||
"Fletching bows with @name, aiming for perfection",
|
||||
"Smithing with @name, our anvils never cool down",
|
||||
"Adventuring with @name, every quest is a thrill",
|
||||
"Battling demons, @name courage inspires us all",
|
||||
"Slaying dragons, @name the hero we need",
|
||||
"Gathering at Falador, @name party room is legendary",
|
||||
"Hunting chinchompas, @name traps are always full",
|
||||
"Farming's fun with @name, our crops never fail",
|
||||
"Brewing potions, @name mixtures are magical",
|
||||
"Casting spells with @name, we're invincible",
|
||||
"Building fires, @name flames warm the coldest nights",
|
||||
"Sailing to Pest Control, @name our fearless captain",
|
||||
"Trading runes, @name deals are the fairest",
|
||||
"Exploring dungeons, @name the light in the darkness",
|
||||
"Charging orbs with @name, our energy knows no bounds",
|
||||
"Dancing in Draynor, @name moves are enchanting",
|
||||
"Playing Gnomeball, @name the star player",
|
||||
"Harvesting willows, @name axe swings true",
|
||||
"Enchanting jewelry, @name touch turns copper to gold",
|
||||
"Summoning familiars, @name spirit wolf leads the pack",
|
||||
"Thieving from stalls, @name hands are lightning-fast",
|
||||
"Crafting runes, @name essence never runs dry",
|
||||
"Fishing at Catherby, @name catch feeds us all",
|
||||
"Cooking feasts, @name dishes delight the gods",
|
||||
"Mining runite, @name pickaxe strikes rich veins",
|
||||
"Bartering at Grand Exchange, @name a trading master",
|
||||
"Training prayer, @name piety moves mountains",
|
||||
"Fighting revenants, @name valor shines bright",
|
||||
"Building homes, @name construction is flawless",
|
||||
"Hunting imps, @name net is always full",
|
||||
"Brewing ale, @name tavern is the town's favorite",
|
||||
"Casting high alchemy, @name turns junk into treasure",
|
||||
"Sailing to Karamja, @name adventures are legendary",
|
||||
"Forging alliances, @name charisma unites clans",
|
||||
"Defeating bosses, @name name echoes in legends",
|
||||
"Are you mewing @name???",
|
||||
"Check out that gyatt @name",
|
||||
"Bruhhhhh @name got that rizz",
|
||||
"@name rizzing up the bots",
|
||||
"Ironman? More like copperboy LOL",
|
||||
"What that gyatt do @name",
|
||||
"He's got the zoomies!",
|
||||
"@name likes pickles and dipped in mayo",
|
||||
"Lmaaooooooo",
|
||||
"Bruh she said she loved me...",
|
||||
"I caught @name rizzing a mewing teacher",
|
||||
"What that mouth do bb",
|
||||
"Ayo tf he say",
|
||||
"Ayo",
|
||||
"Ayo @name a freak lowkey",
|
||||
"Ayo tf",
|
||||
"@name catch me outside howbout that",
|
||||
"Wasssssuuuuppppppp",
|
||||
"Knock knock @name",
|
||||
"Oh boy howdy do i have a surprise for you",
|
||||
"Noooooo",
|
||||
"What do you mean I haven't done anything wtf",
|
||||
"Redrocket redrocket!!!",
|
||||
"I made 20,000 crochet sock puppets for ceikry",
|
||||
"Come on @name",
|
||||
"Are we rading tonight @name?",
|
||||
"Why would he say that",
|
||||
"Penguins are technically reptiles",
|
||||
"Brb smell something burning",
|
||||
"Need pest control partner, you handle the portals, i will afk",
|
||||
"Bruhhhh the skibiddi rizz in my gyatt makes my mewing sesh rough",
|
||||
"@name jajajajaja",
|
||||
"Wait, I can't raid tonight @name",
|
||||
"Brb, pizza's here. Hope they ask why I'm a grown man dressed like an elf",
|
||||
"Sorry, gotta go AFK. My dog just ate my gaming headset.",
|
||||
"Brb, my grandma just fell down the stairs",
|
||||
"Hold on, the baby's crying, aka @name",
|
||||
"Oops, spilled my drink",
|
||||
"Guys, I need to log off, my plants are staging a revolt for not watering them",
|
||||
"AFK a sec, my neighbor's llama is in my backyard again",
|
||||
"My pizza rolls are ready",
|
||||
"Lost track of time, i'm late for my own wedding",
|
||||
"Sorry, can't hear you over the sound of my laundry",
|
||||
"Turn HDR off in windows @name",
|
||||
"Www. no one cares .com",
|
||||
"Hey @name www dot stfu dot com",
|
||||
"Like pitching a tent in a pair of britches",
|
||||
"Mad as a bag of ferrets",
|
||||
"I dont think beavers built the hoover dam",
|
||||
"How do beavers get the concrete for dams?",
|
||||
"@name show me the way",
|
||||
"@name onwards brutha",
|
||||
"@name eats fried rat tails",
|
||||
"@name is a rat",
|
||||
"Why are there so many people farming right now",
|
||||
"@name fuck the police",
|
||||
"@name says the like pickles on their hotdogs",
|
||||
"Fuck the guards, free woah in varrock prison",
|
||||
"Ayo fuck u mean",
|
||||
"Woop woop thats da sound of the beast",
|
||||
"How are you the way that you are",
|
||||
"She sells seashells by the sea shore",
|
||||
"@name certified rat",
|
||||
"@name buys skimmed milk",
|
||||
"Got milk?",
|
||||
"Are you JSON because i want you to get array from me",
|
||||
"@name likes string manipulation",
|
||||
"@name sells legos",
|
||||
"JUST DO IT",
|
||||
"Why are there so many motherfucking options",
|
||||
"Just hit the fucking auto hide thing",
|
||||
"Just play",
|
||||
"Hell no this shit is fuzzy as balls",
|
||||
"@name is fuzzy as balls",
|
||||
"Turn your brightness up @name",
|
||||
"On my pc it runs perfectly",
|
||||
"I know why mine seems a little jumpy",
|
||||
"Stream the window not the monitor",
|
||||
"Discords a bitch",
|
||||
"Why are there so many handsome people at the ge like @name",
|
||||
"I'll make you squeel of fortune",
|
||||
"You will get it in due time @name",
|
||||
"I was one turn away",
|
||||
"It do be pipe time @name",
|
||||
"Sometimes i like to cover myself in vaseline and pretend i'm a slug",
|
||||
"Woah is a greased pig",
|
||||
"Sometimes i dig holes in my backyard and pretend i'm a carrot",
|
||||
"It's pipe time @name",
|
||||
"If i am not pipe timing i am programming",
|
||||
"Yes i have thigh high socks, no you cannot have them",
|
||||
"I scream when i wear my programming socks",
|
||||
"Anyone wanna buy @name's bathwater?",
|
||||
"Anyone wanna buy my used socks?",
|
||||
"@name be getting bags",
|
||||
"What the fuck is this",
|
||||
"Hi i noticed you haven't taken a break in hours @name",
|
||||
"I really am seething rn",
|
||||
"I am so fucking tilted",
|
||||
"Go back to your fucking frogs",
|
||||
"Life is simple as frog farmer",
|
||||
"A q p",
|
||||
"Oooooh that's a first",
|
||||
"Been a minute @name",
|
||||
"Hey @name",
|
||||
"Oh shit it's @name",
|
||||
"Hey @name wyd today?",
|
||||
"Ayo @name",
|
||||
"Wyd @name",
|
||||
"Wbu @name?",
|
||||
"Good fuck em, that's what they get",
|
||||
"Deathknight lookin rat ass mf @name",
|
||||
"@name sucks slugs",
|
||||
"Brb gotta take a shit",
|
||||
"@name will brb went to take a shit",
|
||||
"Tell me when he is coming",
|
||||
"This guy is being incredibly based",
|
||||
"@name is based af",
|
||||
"Taking l's all day today @name",
|
||||
"That sucks massive dongus",
|
||||
"Ah i was about to type that",
|
||||
"Where is stormwind?",
|
||||
"How do i buy gold",
|
||||
"@name sells gold",
|
||||
"@name is a gold digger",
|
||||
"Ayo @name wanna buy some frog legs?",
|
||||
"Brb fucking burnt my pizza rolls",
|
||||
"I swear @name if you need roll again",
|
||||
"@name you are a hunter you don't need plate armor",
|
||||
"Dragonriding is satisfying",
|
||||
"There's an old TzHarrian saying, you fuck up once, you lose two teeth",
|
||||
"FUCK",
|
||||
"@name i am ready when you are",
|
||||
"Anyone selling logs?",
|
||||
"That is hilarious @name",
|
||||
"Alright @name",
|
||||
"I need to go get my quest cape",
|
||||
"500 barrows runs dry",
|
||||
"Back to back to back barrows items, easy game",
|
||||
"@name did you know them?",
|
||||
"@name sucks eggs",
|
||||
"@name eats snails",
|
||||
"Who is that?",
|
||||
"I've gotta go in 20 minutes",
|
||||
"Bonk",
|
||||
"Gtg in 30 minutes",
|
||||
"They left 50 minutes ago",
|
||||
"I think it's just gonna be us",
|
||||
"Who is that?",
|
||||
"Stop following me",
|
||||
"@name stop following me",
|
||||
"I think @name is watching me",
|
||||
"@name wouldn't let me get a hit in at clan wars",
|
||||
"Clan wars and chill?",
|
||||
"Quick mewing sesh",
|
||||
"Don't you stickbug me",
|
||||
"Get stick bugged",
|
||||
"Wtf why are you a dragon",
|
||||
"Fun fact, woah eats eggs whole like a snake",
|
||||
"Ceikys there's a rare over there",
|
||||
"Where is goldshire?",
|
||||
"How long have you played @name?",
|
||||
"Wanna quest?",
|
||||
"TROGDORRRRRR",
|
||||
"Fuck this shit i'm out",
|
||||
"Wait till you get your first 99",
|
||||
"How is that even possible",
|
||||
"That's the max",
|
||||
"@name is trying to max",
|
||||
"Complesionist cape?",
|
||||
"How can you increase your run speed?",
|
||||
"@name where is barrows?",
|
||||
"@name where are rune rocks?",
|
||||
"@name where is yanille?",
|
||||
"@name how long have you played for?",
|
||||
"Yes these quotes were hand typed",
|
||||
"Kermit was here",
|
||||
"World of Warcraft died after Wrath",
|
||||
"Ceikry needs to add talent trees",
|
||||
"How do you get to the wilderness?",
|
||||
"Anyone tryna lure @name?",
|
||||
"@name tried to lure me",
|
||||
"@name bots all the time",
|
||||
"Anyone want chicken tendies",
|
||||
"Brb foods ready",
|
||||
"Brb",
|
||||
"Gotta go get food",
|
||||
"Anyone else from northern alaska?",
|
||||
"Fishing 4 gp",
|
||||
"Looking for gf",
|
||||
"Anyone wanna be my discord kitten?",
|
||||
"Selling discord kittens",
|
||||
"@name is a discord kitten",
|
||||
"Add me on discord",
|
||||
"Are you in the 09discord",
|
||||
"Where are you going @name?",
|
||||
"Idk what i am going to cook today",
|
||||
"What should i eat tonight",
|
||||
"He is in the cave",
|
||||
"Don't forget to save game before logging out",
|
||||
"American horror story died after season 1",
|
||||
"Prequels are better than the sequels",
|
||||
"Disney star wars is the best star wars",
|
||||
"Halo 5 sucked",
|
||||
"Selling xbox live gold and 1600 microsoft points for 50k gp",
|
||||
"Buying gf 25gp and a bucket",
|
||||
"@name i heard evilwaffles bots",
|
||||
"@name hopefully ceikry doesn't find out about evilwaffles",
|
||||
"Honk honk",
|
||||
"Where is the road to mordor?",
|
||||
"Golem lookin ass bitch",
|
||||
"@name rat looking mf",
|
||||
"@name uses sand paper to wipe",
|
||||
"@name said Woah is cute",
|
||||
"You need 25 of 40 to do that",
|
||||
"Over 1000 unique lines of dialogue",
|
||||
"What should i get to eat",
|
||||
"Ge be poppin today",
|
||||
"Where all the woahs at",
|
||||
"Ayo woahscam got that gyatt",
|
||||
"That is one i haven't seen before"
|
||||
],
|
||||
"halloween": [
|
||||
"Trick or treat!!!",
|
||||
|
|
@ -523,9 +1008,9 @@
|
|||
"Costume party at my P O H!! Follow me!",
|
||||
"Trick, then!",
|
||||
"Brrrainssssssss...",
|
||||
"'Cause this is thriller, thriller night, and no one's gonna save you from the beast about to strike!",
|
||||
"This is Hallowe'en, this is Hallowe'en, pumpkins scream in the dead of night!",
|
||||
"This is Hallowe'en, everybody make a scene, Trick or treat till the neighbors gonna die of fright!",
|
||||
"'Cause this is thriller, thriller night!",
|
||||
"This is Hallowe'en, this is Hallowe'en!",
|
||||
"This is Hallowe'en, everybody make a scene!",
|
||||
"In this town we call home, everyone hail to the pumpkin song!",
|
||||
"Watch out for Skeleton Jack!",
|
||||
"The headless-what-man? Horse? Never heard of those.",
|
||||
|
|
@ -596,7 +1081,7 @@
|
|||
"Rusty = the grinch, @name = santa",
|
||||
"@name the red nose reindeer",
|
||||
"Put one foot in front of the other",
|
||||
"and soon you will be walking out the doooor",
|
||||
"And soon you will be walking out the doooor",
|
||||
"Elf on the shelf time",
|
||||
"@name loves pinecones",
|
||||
"I love the smell of pinecones",
|
||||
|
|
@ -695,21 +1180,21 @@
|
|||
"Woah got those roofies strapped",
|
||||
"Why is my drink cloudy?",
|
||||
"@name and woah be wrestlin",
|
||||
"bekky want sum fuk?",
|
||||
"Bekky want sum fuk?",
|
||||
"Damn @name you got an ass",
|
||||
"Is that a footlong in your pants or are you happy to see me?",
|
||||
"@name so hot i gotta change my pants",
|
||||
"@name is a sex god",
|
||||
"bruh we hype today",
|
||||
"dont be silly wrap the willy @name!",
|
||||
"wrap it before you smack it @name",
|
||||
"can i get a reeeeee @name?",
|
||||
"valentines day is the best day",
|
||||
"Bruh we hype today",
|
||||
"Dont be silly wrap the willy @name!",
|
||||
"Wrap it before you smack it @name",
|
||||
"Can i get a reeeeee @name?",
|
||||
"Valentines day is the best day",
|
||||
"@name shut up before i smack you with my crusty sock",
|
||||
"Valentines day, more like me and my hand day smh",
|
||||
"If you think these quotes are wild just wait @name",
|
||||
"All im saying is we have never seen @name and biden in the same room",
|
||||
"red rocket, red rocket!",
|
||||
"Red rocket, red rocket!",
|
||||
"Woahs favourite game is red rocket",
|
||||
"@name sexy af today",
|
||||
"Happy Valentines day @name!!!",
|
||||
|
|
@ -754,4 +1239,4 @@
|
|||
"@name and i are going to look for the easter bunny!!",
|
||||
"Hint for anyone who sees this you must dig above eagles peak"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
BIN
Server/data/cache/main_file_cache.dat2
(Stored with Git LFS)
vendored
BIN
Server/data/cache/main_file_cache.dat2
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Server/data/cache/main_file_cache.idx19
(Stored with Git LFS)
vendored
BIN
Server/data/cache/main_file_cache.idx19
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Server/data/cache/main_file_cache.idx255
(Stored with Git LFS)
vendored
BIN
Server/data/cache/main_file_cache.idx255
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
Server/data/cache/main_file_cache.idx5
(Stored with Git LFS)
vendored
BIN
Server/data/cache/main_file_cache.idx5
(Stored with Git LFS)
vendored
Binary file not shown.
2
Server/data/configs/account_limit_exceptions.conf
Normal file
2
Server/data/configs/account_limit_exceptions.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
[exceptions]
|
||||
"127.0.0.1" = 5
|
||||
|
|
@ -125,7 +125,7 @@
|
|||
"start_graphic": "232,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "226,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "813",
|
||||
|
|
@ -133,7 +133,7 @@
|
|||
"start_graphic": "233,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "227,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "814",
|
||||
|
|
@ -141,7 +141,7 @@
|
|||
"start_graphic": "234,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "228,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "815",
|
||||
|
|
@ -149,7 +149,7 @@
|
|||
"start_graphic": "235,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "229,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "816",
|
||||
|
|
@ -157,7 +157,7 @@
|
|||
"start_graphic": "236,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "230,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "817",
|
||||
|
|
@ -165,7 +165,7 @@
|
|||
"start_graphic": "237,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "231,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "825",
|
||||
|
|
@ -221,7 +221,7 @@
|
|||
"start_graphic": "206,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "200,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "832",
|
||||
|
|
@ -229,7 +229,7 @@
|
|||
"start_graphic": "207,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "201,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "833",
|
||||
|
|
@ -237,7 +237,7 @@
|
|||
"start_graphic": "208,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "202,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "834",
|
||||
|
|
@ -245,7 +245,7 @@
|
|||
"start_graphic": "209,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "203,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "835",
|
||||
|
|
@ -253,7 +253,7 @@
|
|||
"start_graphic": "210,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "204,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "836",
|
||||
|
|
@ -261,7 +261,7 @@
|
|||
"start_graphic": "211,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "205,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "863",
|
||||
|
|
@ -325,7 +325,7 @@
|
|||
"start_graphic": "219,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "212,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "871",
|
||||
|
|
@ -333,7 +333,7 @@
|
|||
"start_graphic": "220,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "213,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "872",
|
||||
|
|
@ -341,7 +341,7 @@
|
|||
"start_graphic": "221,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "214,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "873",
|
||||
|
|
@ -349,7 +349,7 @@
|
|||
"start_graphic": "223,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "216,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "874",
|
||||
|
|
@ -357,7 +357,7 @@
|
|||
"start_graphic": "222,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "215,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "875",
|
||||
|
|
@ -365,7 +365,7 @@
|
|||
"start_graphic": "224,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "217,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "876",
|
||||
|
|
@ -373,7 +373,7 @@
|
|||
"start_graphic": "225,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "218,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "877",
|
||||
|
|
@ -389,7 +389,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "879",
|
||||
|
|
@ -421,7 +421,7 @@
|
|||
"start_graphic": "19,96",
|
||||
"darkbow_graphic": "1104,96",
|
||||
"projectile": "10,40,36,41,46,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "884",
|
||||
|
|
@ -437,7 +437,7 @@
|
|||
"start_graphic": "18,96",
|
||||
"darkbow_graphic": "1105,96",
|
||||
"projectile": "9,40,36,41,46,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "886",
|
||||
|
|
@ -453,7 +453,7 @@
|
|||
"start_graphic": "20,96",
|
||||
"darkbow_graphic": "1106,96",
|
||||
"projectile": "11,40,36,41,46,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "888",
|
||||
|
|
@ -469,7 +469,7 @@
|
|||
"start_graphic": "21,96",
|
||||
"darkbow_graphic": "1107,96",
|
||||
"projectile": "12,40,36,41,46,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "890",
|
||||
|
|
@ -485,7 +485,7 @@
|
|||
"start_graphic": "22,96",
|
||||
"darkbow_graphic": "1108,96",
|
||||
"projectile": "13,40,36,41,46,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "892",
|
||||
|
|
@ -501,7 +501,7 @@
|
|||
"start_graphic": "24,96",
|
||||
"darkbow_graphic": "1109,96",
|
||||
"projectile": "15,40,36,41,46,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "2532",
|
||||
|
|
@ -565,7 +565,7 @@
|
|||
"start_graphic": "273,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "227,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "4160",
|
||||
|
|
@ -725,7 +725,7 @@
|
|||
"start_graphic": "19,96",
|
||||
"darkbow_graphic": "1104,96",
|
||||
"projectile": "10,40,36,41,46,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5617",
|
||||
|
|
@ -733,7 +733,7 @@
|
|||
"start_graphic": "18,96",
|
||||
"darkbow_graphic": "1105,96",
|
||||
"projectile": "9,40,36,41,46,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5618",
|
||||
|
|
@ -741,7 +741,7 @@
|
|||
"start_graphic": "20,96",
|
||||
"darkbow_graphic": "1106,96",
|
||||
"projectile": "11,40,36,41,46,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5619",
|
||||
|
|
@ -749,7 +749,7 @@
|
|||
"start_graphic": "21,96",
|
||||
"darkbow_graphic": "1107,96",
|
||||
"projectile": "12,40,36,41,46,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5620",
|
||||
|
|
@ -757,7 +757,7 @@
|
|||
"start_graphic": "22,96",
|
||||
"darkbow_graphic": "1108,96",
|
||||
"projectile": "13,40,36,41,46,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5621",
|
||||
|
|
@ -773,7 +773,7 @@
|
|||
"start_graphic": "19,96",
|
||||
"darkbow_graphic": "1104,96",
|
||||
"projectile": "10,40,36,41,46,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5623",
|
||||
|
|
@ -781,7 +781,7 @@
|
|||
"start_graphic": "18,96",
|
||||
"darkbow_graphic": "1105,96",
|
||||
"projectile": "9,40,36,41,46,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5624",
|
||||
|
|
@ -789,7 +789,7 @@
|
|||
"start_graphic": "20,96",
|
||||
"darkbow_graphic": "1106,96",
|
||||
"projectile": "11,40,36,41,46,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5625",
|
||||
|
|
@ -797,7 +797,7 @@
|
|||
"start_graphic": "21,96",
|
||||
"darkbow_graphic": "1107,96",
|
||||
"projectile": "12,40,36,41,46,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5626",
|
||||
|
|
@ -805,7 +805,7 @@
|
|||
"start_graphic": "22,96",
|
||||
"darkbow_graphic": "1108,96",
|
||||
"projectile": "13,40,36,41,46,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5627",
|
||||
|
|
@ -813,7 +813,7 @@
|
|||
"start_graphic": "24,96",
|
||||
"darkbow_graphic": "1109,96",
|
||||
"projectile": "15,40,36,41,46,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5628",
|
||||
|
|
@ -821,7 +821,7 @@
|
|||
"start_graphic": "232,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "226,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5629",
|
||||
|
|
@ -829,7 +829,7 @@
|
|||
"start_graphic": "233,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "227,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5630",
|
||||
|
|
@ -837,7 +837,7 @@
|
|||
"start_graphic": "235,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "229,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5631",
|
||||
|
|
@ -845,7 +845,7 @@
|
|||
"start_graphic": "273,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "227,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5633",
|
||||
|
|
@ -853,7 +853,7 @@
|
|||
"start_graphic": "236,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "230,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5634",
|
||||
|
|
@ -861,7 +861,7 @@
|
|||
"start_graphic": "237,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "231,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5635",
|
||||
|
|
@ -869,7 +869,7 @@
|
|||
"start_graphic": "232,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "226,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5636",
|
||||
|
|
@ -877,7 +877,7 @@
|
|||
"start_graphic": "233,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "227,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5637",
|
||||
|
|
@ -885,7 +885,7 @@
|
|||
"start_graphic": "234,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "228,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5638",
|
||||
|
|
@ -893,7 +893,7 @@
|
|||
"start_graphic": "273,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "227,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5639",
|
||||
|
|
@ -901,7 +901,7 @@
|
|||
"start_graphic": "235,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "229,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5640",
|
||||
|
|
@ -909,7 +909,7 @@
|
|||
"start_graphic": "236,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "230,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5641",
|
||||
|
|
@ -917,7 +917,7 @@
|
|||
"start_graphic": "237,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "231,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5642",
|
||||
|
|
@ -925,7 +925,7 @@
|
|||
"start_graphic": "206,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "200,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5643",
|
||||
|
|
@ -933,7 +933,7 @@
|
|||
"start_graphic": "207,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "201,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5644",
|
||||
|
|
@ -941,7 +941,7 @@
|
|||
"start_graphic": "208,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "202,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5645",
|
||||
|
|
@ -949,7 +949,7 @@
|
|||
"start_graphic": "209,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "203,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5646",
|
||||
|
|
@ -957,7 +957,7 @@
|
|||
"start_graphic": "210,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "204,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5647",
|
||||
|
|
@ -965,7 +965,7 @@
|
|||
"start_graphic": "211,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "205,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5648",
|
||||
|
|
@ -973,7 +973,7 @@
|
|||
"start_graphic": "206,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "200,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5649",
|
||||
|
|
@ -981,7 +981,7 @@
|
|||
"start_graphic": "207,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "201,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5650",
|
||||
|
|
@ -989,7 +989,7 @@
|
|||
"start_graphic": "208,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "202,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5651",
|
||||
|
|
@ -997,7 +997,7 @@
|
|||
"start_graphic": "209,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "203,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5652",
|
||||
|
|
@ -1005,7 +1005,7 @@
|
|||
"start_graphic": "210,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "204,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5653",
|
||||
|
|
@ -1013,7 +1013,7 @@
|
|||
"start_graphic": "211,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "205,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5654",
|
||||
|
|
@ -1021,7 +1021,7 @@
|
|||
"start_graphic": "219,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "212,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5655",
|
||||
|
|
@ -1029,7 +1029,7 @@
|
|||
"start_graphic": "220,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "213,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5656",
|
||||
|
|
@ -1037,7 +1037,7 @@
|
|||
"start_graphic": "221,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "214,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5657",
|
||||
|
|
@ -1045,7 +1045,7 @@
|
|||
"start_graphic": "223,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "216,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5658",
|
||||
|
|
@ -1053,7 +1053,7 @@
|
|||
"start_graphic": "222,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "215,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5659",
|
||||
|
|
@ -1061,7 +1061,7 @@
|
|||
"start_graphic": "224,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "217,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5660",
|
||||
|
|
@ -1069,7 +1069,7 @@
|
|||
"start_graphic": "225,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "218,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "5661",
|
||||
|
|
@ -1077,7 +1077,7 @@
|
|||
"start_graphic": "219,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "212,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5662",
|
||||
|
|
@ -1085,7 +1085,7 @@
|
|||
"start_graphic": "220,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "213,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5663",
|
||||
|
|
@ -1093,7 +1093,7 @@
|
|||
"start_graphic": "221,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "214,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5664",
|
||||
|
|
@ -1101,7 +1101,7 @@
|
|||
"start_graphic": "223,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "216,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5665",
|
||||
|
|
@ -1109,7 +1109,7 @@
|
|||
"start_graphic": "222,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "215,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5666",
|
||||
|
|
@ -1117,7 +1117,7 @@
|
|||
"start_graphic": "224,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "217,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "5667",
|
||||
|
|
@ -1125,7 +1125,7 @@
|
|||
"start_graphic": "225,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "218,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "6061",
|
||||
|
|
@ -1133,7 +1133,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "6062",
|
||||
|
|
@ -1141,7 +1141,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "6522",
|
||||
|
|
@ -1293,7 +1293,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "9287",
|
||||
|
|
@ -1301,7 +1301,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "9288",
|
||||
|
|
@ -1309,7 +1309,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "9289",
|
||||
|
|
@ -1317,7 +1317,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "9290",
|
||||
|
|
@ -1325,7 +1325,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "9291",
|
||||
|
|
@ -1333,7 +1333,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "9293",
|
||||
|
|
@ -1341,7 +1341,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "9294",
|
||||
|
|
@ -1349,7 +1349,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "9295",
|
||||
|
|
@ -1357,7 +1357,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "9296",
|
||||
|
|
@ -1365,7 +1365,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "9297",
|
||||
|
|
@ -1373,7 +1373,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "9298",
|
||||
|
|
@ -1381,7 +1381,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "9300",
|
||||
|
|
@ -1389,7 +1389,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "9301",
|
||||
|
|
@ -1397,7 +1397,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "9302",
|
||||
|
|
@ -1405,7 +1405,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "9303",
|
||||
|
|
@ -1413,7 +1413,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "9304",
|
||||
|
|
@ -1421,7 +1421,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "9305",
|
||||
|
|
@ -1429,7 +1429,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "9335",
|
||||
|
|
@ -1557,7 +1557,7 @@
|
|||
"start_graphic": "1116,96",
|
||||
"darkbow_graphic": "1114,96",
|
||||
"projectile": "1120,40,36,41,46,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "11228",
|
||||
|
|
@ -1565,7 +1565,7 @@
|
|||
"start_graphic": "1116,96",
|
||||
"darkbow_graphic": "1114,96",
|
||||
"projectile": "1120,40,36,41,46,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "11229",
|
||||
|
|
@ -1573,7 +1573,7 @@
|
|||
"start_graphic": "1116,96",
|
||||
"darkbow_graphic": "1114,96",
|
||||
"projectile": "1120,40,36,41,46,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "11230",
|
||||
|
|
@ -1589,7 +1589,7 @@
|
|||
"start_graphic": "1123,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1122,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "11233",
|
||||
|
|
@ -1597,7 +1597,7 @@
|
|||
"start_graphic": "1123,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1122,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "11234",
|
||||
|
|
@ -1605,7 +1605,7 @@
|
|||
"start_graphic": "1123,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1122,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "13083",
|
||||
|
|
@ -1621,7 +1621,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "13085",
|
||||
|
|
@ -1629,7 +1629,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "13086",
|
||||
|
|
@ -1637,7 +1637,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "27,38,36,41,32,5,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "13280",
|
||||
|
|
@ -1661,7 +1661,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1837,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "13881",
|
||||
|
|
@ -1669,7 +1669,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1837,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "13882",
|
||||
|
|
@ -1677,7 +1677,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1837,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "13883",
|
||||
|
|
@ -1701,7 +1701,7 @@
|
|||
"start_graphic": "-1,0",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1837,40,36,32,32,15,0",
|
||||
"poison_damage": "28"
|
||||
"poison_damage": "10"
|
||||
},
|
||||
{
|
||||
"itemId": "13955",
|
||||
|
|
@ -1709,7 +1709,7 @@
|
|||
"start_graphic": "1837,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1840,40,36,32,32,15,0",
|
||||
"poison_damage": "38"
|
||||
"poison_damage": "15"
|
||||
},
|
||||
{
|
||||
"itemId": "13956",
|
||||
|
|
@ -1717,7 +1717,7 @@
|
|||
"start_graphic": "1837,96",
|
||||
"darkbow_graphic": "",
|
||||
"projectile": "1840,40,36,32,32,15,0",
|
||||
"poison_damage": "48"
|
||||
"poison_damage": "20"
|
||||
},
|
||||
{
|
||||
"itemId": "13957",
|
||||
|
|
|
|||
|
|
@ -389,31 +389,31 @@
|
|||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10666,
|
||||
"id": 7334,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10669,
|
||||
"id": 7340,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10672,
|
||||
"id": 7346,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10675,
|
||||
"id": 7352,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10678,
|
||||
"id": 7358,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
|
|
@ -949,7 +949,7 @@
|
|||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10667,
|
||||
"id": 7336,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
|
|
@ -961,7 +961,7 @@
|
|||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10670,
|
||||
"id": 7342,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
|
|
@ -973,7 +973,7 @@
|
|||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10673,
|
||||
"id": 7348,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
|
|
@ -985,7 +985,7 @@
|
|||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10676,
|
||||
"id": 7354,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
|
|
@ -997,7 +997,7 @@
|
|||
{
|
||||
"minAmount": 1,
|
||||
"weight": "5",
|
||||
"id": 10679,
|
||||
"id": 7360,
|
||||
"maxAmount": 1
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@
|
|||
},
|
||||
{
|
||||
"id": "92",
|
||||
"replaceId": "17317",
|
||||
"replaceId": "91",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -193,7 +193,7 @@
|
|||
},
|
||||
{
|
||||
"id": "1553",
|
||||
"replaceId": "1552",
|
||||
"replaceId": "1556",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -301,7 +301,7 @@
|
|||
},
|
||||
{
|
||||
"id": "2025",
|
||||
"replaceId": "1534",
|
||||
"replaceId": "2026",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -312,14 +312,14 @@
|
|||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "2036",
|
||||
"id": "1530",
|
||||
"replaceId": "1531",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "2039",
|
||||
"replaceId": "1561",
|
||||
"replaceId": "1560",
|
||||
"fence": "false",
|
||||
"metal": "true"
|
||||
},
|
||||
|
|
@ -332,18 +332,18 @@
|
|||
{
|
||||
"id": "2050",
|
||||
"replaceId": "15511",
|
||||
"fence": "false",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "2051",
|
||||
"replaceId": "15513",
|
||||
"fence": "false",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "2054",
|
||||
"replaceId": "24375",
|
||||
"replaceId": "2055",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -419,18 +419,6 @@
|
|||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "2391",
|
||||
"replaceId": "1561",
|
||||
"fence": "false",
|
||||
"metal": "true"
|
||||
},
|
||||
{
|
||||
"id": "2392",
|
||||
"replaceId": "1561",
|
||||
"fence": "false",
|
||||
"metal": "true"
|
||||
},
|
||||
{
|
||||
"id": "2397",
|
||||
"replaceId": "24383",
|
||||
|
|
@ -896,12 +884,12 @@
|
|||
{
|
||||
"id": "3725",
|
||||
"replaceId": "3727",
|
||||
"fence": "false",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "3726",
|
||||
"replaceId": "3727",
|
||||
"replaceId": "3728",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -925,7 +913,7 @@
|
|||
},
|
||||
{
|
||||
"id": "3747",
|
||||
"replaceId": "1534",
|
||||
"replaceId": "3748",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -943,7 +931,7 @@
|
|||
},
|
||||
{
|
||||
"id": "4148",
|
||||
"replaceId": "4248",
|
||||
"replaceId": "4246",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -979,19 +967,19 @@
|
|||
},
|
||||
{
|
||||
"id": "4423",
|
||||
"replaceId": "4429",
|
||||
"replaceId": "4425",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "4424",
|
||||
"replaceId": "11382",
|
||||
"replaceId": "4426",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "4427",
|
||||
"replaceId": "11380",
|
||||
"replaceId": "4429",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -1238,12 +1226,12 @@
|
|||
{
|
||||
"id": "7049",
|
||||
"replaceId": "7051",
|
||||
"fence": "false",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "7050",
|
||||
"replaceId": "23919",
|
||||
"replaceId": "7052",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -1340,7 +1328,7 @@
|
|||
{
|
||||
"id": "8810",
|
||||
"replaceId": "8812",
|
||||
"fence": "false",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
|
|
@ -1439,6 +1427,12 @@
|
|||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "11470",
|
||||
"replaceId": "11471",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "11483",
|
||||
"replaceId": "11708",
|
||||
|
|
@ -1759,7 +1753,7 @@
|
|||
},
|
||||
{
|
||||
"id": "14245",
|
||||
"replaceId": "14248",
|
||||
"replaceId": "14246",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -1983,7 +1977,15 @@
|
|||
"id": "20391",
|
||||
"replaceId": "28518",
|
||||
"fence": "false",
|
||||
"metal": "true"
|
||||
"metal": "true",
|
||||
"autowalk": "true"
|
||||
},
|
||||
{
|
||||
"id": "28514",
|
||||
"replaceId": "28518",
|
||||
"fence": "false",
|
||||
"metal": "true",
|
||||
"autowalk": "true"
|
||||
},
|
||||
{
|
||||
"id": "21065",
|
||||
|
|
@ -2144,18 +2146,18 @@
|
|||
{
|
||||
"id": "24369",
|
||||
"replaceId": "24373",
|
||||
"fence": "true",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "24370",
|
||||
"replaceId": "24374",
|
||||
"fence": "true",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "24376",
|
||||
"replaceId": "24377",
|
||||
"replaceId": "24375",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -2177,18 +2179,6 @@
|
|||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "24560",
|
||||
"replaceId": "15515",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "24561",
|
||||
"replaceId": "15517",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "24565",
|
||||
"replaceId": "36316",
|
||||
|
|
@ -2357,11 +2347,25 @@
|
|||
"fence": "false",
|
||||
"metal": "true"
|
||||
},
|
||||
{
|
||||
"id": "26081",
|
||||
"replaceId": "26083",
|
||||
"fence": "false",
|
||||
"metal": "true",
|
||||
"autowalk": "true"
|
||||
},
|
||||
{
|
||||
"id": "26082",
|
||||
"replaceId": "26084",
|
||||
"fence": "false",
|
||||
"metal": "true",
|
||||
"autowalk": "true"
|
||||
},
|
||||
{
|
||||
"id": "26130",
|
||||
"replaceId": "26132",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
"metal": "true"
|
||||
},
|
||||
{
|
||||
"id": "26131",
|
||||
|
|
@ -2507,12 +2511,6 @@
|
|||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
"id": "28514",
|
||||
"replaceId": "28518",
|
||||
"fence": "true",
|
||||
"metal": "true"
|
||||
},
|
||||
{
|
||||
"id": "28589",
|
||||
"replaceId": "28588",
|
||||
|
|
@ -2671,7 +2669,7 @@
|
|||
},
|
||||
{
|
||||
"id": "31815",
|
||||
"replaceId": "31816",
|
||||
"replaceId": "31817",
|
||||
"fence": "false",
|
||||
"metal": "false"
|
||||
},
|
||||
|
|
@ -2798,7 +2796,7 @@
|
|||
{
|
||||
"id": "34780",
|
||||
"replaceId": "34778",
|
||||
"fence": "false",
|
||||
"fence": "true",
|
||||
"metal": "false"
|
||||
},
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"id": "5",
|
||||
"interfaceType": "1",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
|
|
@ -25,7 +25,49 @@
|
|||
},
|
||||
{
|
||||
"id": "24",
|
||||
"interfaceType": "1",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "34",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "38",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "42",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "46",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "57",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "58",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "59",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
|
|
@ -53,6 +95,30 @@
|
|||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "68",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "69",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "70",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "71",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "74",
|
||||
"interfaceType": "4",
|
||||
|
|
@ -125,6 +191,12 @@
|
|||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "139",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "140",
|
||||
"interfaceType": "4",
|
||||
|
|
@ -137,6 +209,12 @@
|
|||
"walkable": "true",
|
||||
"tabIndex": "3"
|
||||
},
|
||||
{
|
||||
"id": "169",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "172",
|
||||
"interfaceType": "4",
|
||||
|
|
@ -197,9 +275,33 @@
|
|||
"walkable": "true",
|
||||
"tabIndex": "6"
|
||||
},
|
||||
{
|
||||
"id": "194",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "195",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "196",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "198",
|
||||
"interfaceType": "1",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "209",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
|
|
@ -257,6 +359,12 @@
|
|||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "240",
|
||||
"interfaceType": "3",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "241",
|
||||
"interfaceType": "4",
|
||||
|
|
@ -281,6 +389,36 @@
|
|||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "245",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "246",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "247",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "248",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "256",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "259",
|
||||
"interfaceType": "2",
|
||||
|
|
@ -371,6 +509,12 @@
|
|||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "328",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "336",
|
||||
"interfaceType": "3",
|
||||
|
|
@ -395,6 +539,18 @@
|
|||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "375",
|
||||
"interfaceType": "3",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "377",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "380",
|
||||
"interfaceType": "1",
|
||||
|
|
@ -449,12 +605,24 @@
|
|||
"walkable": "true",
|
||||
"tabIndex": "4"
|
||||
},
|
||||
{
|
||||
"id": "418",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "421",
|
||||
"interfaceType": "4",
|
||||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "428",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "430",
|
||||
"interfaceType": "2",
|
||||
|
|
@ -473,6 +641,30 @@
|
|||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "485",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "486",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "487",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "488",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "498",
|
||||
"interfaceType": "0",
|
||||
|
|
@ -493,7 +685,7 @@
|
|||
},
|
||||
{
|
||||
"id": "532",
|
||||
"interfaceType": "1",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
|
|
@ -605,9 +797,15 @@
|
|||
"walkable": "false",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "653",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
{
|
||||
"id": "656",
|
||||
"interfaceType": "1",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
},
|
||||
|
|
@ -721,7 +919,7 @@
|
|||
},
|
||||
{
|
||||
"id": "809",
|
||||
"interfaceType": "1",
|
||||
"interfaceType": "8",
|
||||
"walkable": "true",
|
||||
"tabIndex": "-1"
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
2574
Server/data/configs/music_regions.json
Normal file
2574
Server/data/configs/music_regions.json
Normal file
File diff suppressed because it is too large
Load diff
62
Server/data/configs/music_tiles.json
Normal file
62
Server/data/configs/music_tiles.json
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
[
|
||||
{
|
||||
"id": "98",
|
||||
"borders": "{3072,3456,3135,3519,[3076,3456,3085,3458]~,[3082,3459,3085,3460]}"
|
||||
},
|
||||
{
|
||||
"id": "141",
|
||||
"borders": "{3072,3392,3135,3455,[3076,3452,3085,3455]}"
|
||||
},
|
||||
{
|
||||
"id": "228",
|
||||
"borders": "{2896,5446,2919,5462}"
|
||||
},
|
||||
{
|
||||
"id": "229",
|
||||
"borders": "{2921,5456,2937,5479}"
|
||||
},
|
||||
{
|
||||
"id": "230",
|
||||
"borders": "{2904,5481,2927,5497}"
|
||||
},
|
||||
{
|
||||
"id": "231",
|
||||
"borders": "{2886,5464,2902,5487}"
|
||||
},
|
||||
{
|
||||
"id": "386",
|
||||
"borders": "{2820,5312,2849,5369}-{2849,5349,2880,5374}"
|
||||
},
|
||||
{
|
||||
"id": "391",
|
||||
"borders": "{2879,5340,2944,5366}-{2909,5316,2944,5340}"
|
||||
},
|
||||
{
|
||||
"id": "399",
|
||||
"borders": "{2816,5248,2943,5375,[2823,5250,2844,5310]~,[2844,5250,2878,5280]~,[2879,5340,2944,5366]~,[2909,5316,2944,5340]~,[2820,5312,2849,5369]~,[2849,5349,2880,5374]~,[2885,5253,2934,5278]~,[2913,5278,2937,5306]}"
|
||||
},
|
||||
{
|
||||
"id": "404",
|
||||
"borders": "{2823,5250,2844,5310}-{2844,5250,2878,5276}"
|
||||
},
|
||||
{
|
||||
"id": "408",
|
||||
"borders": "{2885,5253,2934,5278}-{2913,5278,2937,5306}"
|
||||
},
|
||||
{
|
||||
"id": "459",
|
||||
"borders": "{3137,5442,3192,5564}-{3193,5442,3198,5472}-{3193,5507,3198,5564}"
|
||||
},
|
||||
{
|
||||
"id": "467",
|
||||
"borders": "{3199,5441,3262,5564}-{3193,5482,3198,5497}"
|
||||
},
|
||||
{
|
||||
"id": "488",
|
||||
"borders": "{3263,5441,3327,5566}"
|
||||
},
|
||||
{
|
||||
"id": "492",
|
||||
"borders": "{3076,3452,3085,3460,[3076,3459,3081,3460]}"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -15,7 +15,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9236"
|
||||
},
|
||||
{
|
||||
"itemId": "800",
|
||||
|
|
@ -294,7 +294,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9236"
|
||||
},
|
||||
{
|
||||
"itemId": "839",
|
||||
|
|
@ -1095,7 +1095,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "8882,877,878,6061,6062,879,9236"
|
||||
"ammunition": "8882,877,878,6061,6062,879,9236,9139,9286,9293,9300,9140,9287,9294,9237,9145,9301,9292,9299,9306,9335,880,9238"
|
||||
},
|
||||
{
|
||||
"itemId": "9174",
|
||||
|
|
@ -1104,7 +1104,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9236"
|
||||
},
|
||||
{
|
||||
"itemId": "9176",
|
||||
|
|
@ -1113,7 +1113,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,9140,879,9139,9236,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9139,9236,9286,9293,9300,9335,9237"
|
||||
},
|
||||
{
|
||||
"itemId": "9177",
|
||||
|
|
@ -1122,7 +1122,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,9139,9140,9287,9294,9301,880,9238,9145,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9236,9139,9140,9287,9294,9301,880,9238,9145,9286,9293,9300,9292,9299,9306,9335,9237"
|
||||
},
|
||||
{
|
||||
"itemId": "9179",
|
||||
|
|
@ -1131,7 +1131,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9139,9140,9236,9141,9288,9295,9302,9336,9239,9145,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9139,9140,9236,9141,9288,9295,9302,9336,9239,9145,9286,9293,9300,9287,9294,9301,9292,9299,9306,9335,9237,880,9238"
|
||||
},
|
||||
{
|
||||
"itemId": "9181",
|
||||
|
|
@ -1140,7 +1140,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,9141,9288,9295,9302,9336,9239,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9145,9139,9140,9241,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9236,9141,9288,9295,9302,9336,9239,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9145,9139,9140,9241,9286,9293,9300,9140,9287,9294,9301,9292,9299,9306,9335,9237,880,9238,13083,13084,13085,13086"
|
||||
},
|
||||
{
|
||||
"itemId": "9183",
|
||||
|
|
@ -1149,7 +1149,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,9139,9141,9288,9295,9302,9336,9239,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9241,9145,9143,9290,9297,9304,9339,9242,9340,9243,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9236,9139,9141,9288,9295,9302,9336,9239,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9241,9145,9143,9290,9297,9304,9339,9242,9340,9243,9286,9293,9300,9140,9287,9294,9301,9292,9299,9306,9335,9237,880,9238,13083,13084,13085,13086"
|
||||
},
|
||||
{
|
||||
"itemId": "9185",
|
||||
|
|
@ -1158,7 +1158,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,9139,9141,9288,9295,9302,9336,9239,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9145,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9241,9143,9290,9297,9304,9339,9242,9340,9243,9144,9291,9298,9305,9341,9244,9342,9245,9140,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9236,9139,9141,9288,9295,9302,9336,9239,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9145,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9241,9143,9290,9297,9304,9339,9242,9340,9243,9144,9291,9298,9305,9341,9244,9342,9245,9140,13280,9139,9286,9293,9300,9287,9294,9301,9292,9299,9306,9335,9237,880,13083,13084,13085,13086"
|
||||
},
|
||||
{
|
||||
"itemId": "9705",
|
||||
|
|
@ -1293,7 +1293,7 @@
|
|||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,9141,9288,9295,9302,9140,9336,9239,13083,13084,13085,13086,13280"
|
||||
"ammunition": "877,878,6061,6062,879,9139,9140,9236,9141,9288,9295,9302,9336,9239,9145,9286,9293,9300,9287,9294,9301,9292,9299,9306,9335,9237,880,9238,13083,13084,13085,13086"
|
||||
},
|
||||
{
|
||||
"itemId": "13405",
|
||||
|
|
@ -1502,69 +1502,6 @@
|
|||
"drop_ammo": "true",
|
||||
"ammunition": "882,883,5616,5622,598,884,885,5617,5623,2532,886,887,5618,5624,2534,888,889,5619,5625,2536,890,891,5620,5626,2538,892,893,5621,5627,2540,78,4160"
|
||||
},
|
||||
{
|
||||
"itemId": "14671",
|
||||
"name": "Armadyl crossbow",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236,9141,9288,9295,9302,9336,9239,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9241,9143,9290,9297,9304,9339,9242,9340,9243,9144,9291,9298,9305,9341,9244,9342,9245,9140,13280"
|
||||
},
|
||||
{
|
||||
"itemId": "14684",
|
||||
"name": "Odium ward",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "8882,877,878,6061,6062,879,9236,9141,9288,9295,9302,9336,9239,13083,13084,13085,13086,9142,9289,9296,9303,9337,9240,9338,9241,9143,9290,9297,9304,9339,9242,9340,9243"
|
||||
},
|
||||
{
|
||||
"itemId": "14685",
|
||||
"name": "Odium shard 1",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "1",
|
||||
"animation": "4230",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "877,878,6061,6062,879,9236"
|
||||
},
|
||||
{
|
||||
"itemId": "14803",
|
||||
"name": "Dark bow",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "2",
|
||||
"animation": "426",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "882,883,5616,5622,598,884,885,5617,5623,2532,886,887,5618,5624,2534,888,889,5619,5625,2536,890,891,5620,5626,2538,892,893,5621,5627,2540,11212,11227,11228,11229,11217,78,4160"
|
||||
},
|
||||
{
|
||||
"itemId": "14804",
|
||||
"name": "Dark bow",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "2",
|
||||
"animation": "426",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "882,883,5616,5622,598,884,885,5617,5623,2532,886,887,5618,5624,2534,888,889,5619,5625,2536,890,891,5620,5626,2538,892,893,5621,5627,2540,11212,11227,11228,11229,11217,78,4160"
|
||||
},
|
||||
{
|
||||
"itemId": "14805",
|
||||
"name": "Dark bow",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "2",
|
||||
"animation": "426",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "882,883,5616,5622,598,884,885,5617,5623,2532,886,887,5618,5624,2534,888,889,5619,5625,2536,890,891,5620,5626,2538,892,893,5621,5627,2540,11212,11227,11228,11229,11217,78,4160"
|
||||
},
|
||||
{
|
||||
"itemId": "14806",
|
||||
"name": "Dark bow",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "2",
|
||||
"animation": "426",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "882,883,5616,5622,598,884,885,5617,5623,2532,886,887,5618,5624,2534,888,889,5619,5625,2536,890,891,5620,5626,2538,892,893,5621,5627,2540,11212,11227,11228,11229,11217,78,4160"
|
||||
},
|
||||
{
|
||||
"itemId": "14192",
|
||||
"name": "Bow (class 1)",
|
||||
|
|
@ -1609,5 +1546,41 @@
|
|||
"animation": "426",
|
||||
"drop_ammo": "true",
|
||||
"ammunition": "14202,14203,14204,14205,14206"
|
||||
},
|
||||
{
|
||||
"itemId": "10149",
|
||||
"name": "Swamp lizard",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "0",
|
||||
"animation": "5247",
|
||||
"drop_ammo": "false",
|
||||
"ammunition": "10142"
|
||||
},
|
||||
{
|
||||
"itemId": "10146",
|
||||
"name": "Orange salamander",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "0",
|
||||
"animation": "5247",
|
||||
"drop_ammo": "false",
|
||||
"ammunition": "10143"
|
||||
},
|
||||
{
|
||||
"itemId": "10147",
|
||||
"name": "Red salamander",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "0",
|
||||
"animation": "5247",
|
||||
"drop_ammo": "false",
|
||||
"ammunition": "10144"
|
||||
},
|
||||
{
|
||||
"itemId": "10148",
|
||||
"name": "Black salamander",
|
||||
"ammo_slot": "13",
|
||||
"weapon_type": "0",
|
||||
"animation": "5247",
|
||||
"drop_ammo": "false",
|
||||
"ammunition": "10145"
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -26,4 +26,5 @@
|
|||
<item id="1247" minAmt="1" maxAmt="1" weight="1"/>
|
||||
<item id="2366" minAmt="1" maxAmt="1" weight="1"/>
|
||||
<item id="1249" minAmt="1" maxAmt="1" weight="1"/>
|
||||
<item id="0" minAmt="1" maxAmt="1" weight="171"/>
|
||||
</RDT>
|
||||
|
|
@ -45,22 +45,13 @@
|
|||
"stock": "{1931,30,100}-{1935,30,100}-{1735,10,100}-{1925,10,100}-{1923,10,100}-{1887,10,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{550,10,100}-{9003,10,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "590",
|
||||
"npcs": "590,591",
|
||||
"high_alch": "0",
|
||||
"currency": "995",
|
||||
"general_store": "true",
|
||||
"id": "6",
|
||||
"title": "Aemad's Adventuring Supplies Store",
|
||||
"stock": "{227,300,100}-{1265,10,100}-{1349,10,100}-{2142,10,100}-{590,10,100}-{1759,100,100}-{882,1000,100}-{954,10,100}-{970,10,100}-{946,10,100}-{1935,10,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "591",
|
||||
"high_alch": "0",
|
||||
"currency": "995",
|
||||
"general_store": "true",
|
||||
"id": "7",
|
||||
"title": "Kortan General Store",
|
||||
"stock": "{1931,30,100}-{1935,30,100}-{1735,10,100}-{1925,10,100}-{1923,10,100}-{1887,10,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{550,10,100}-{9003,10,100}"
|
||||
"title": "Aemad's Adventuring Supplies",
|
||||
"stock": "{227,10,100}-{1265,10,100}-{1349,10,100}-{2142,10,100}-{590,10,100}-{1759,100,100}-{882,1000,100}-{954,10,100}-{970,10,100}-{946,10,100}-{1935,10,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "971",
|
||||
|
|
@ -186,7 +177,7 @@
|
|||
"general_store": "true",
|
||||
"id": "21",
|
||||
"title": "Gunslik's Assorted Items",
|
||||
"stock": "{1931,30,100}-{1935,30,100}-{1735,10,100}-{1925,10,100}-{1923,10,100}-{1887,10,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{550,10,100}-{9003,10,100}"
|
||||
"stock": "{1935,10,100}-{1925,30,100}-{590,10,100}-{1755,10,100}-{2347,10,100}-{36,10,100}-{596,10,100}-{973,10,100}-{1059,10,100}-{229,300,100}-{233,10,100}-{954,10,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "1334",
|
||||
|
|
@ -519,7 +510,7 @@
|
|||
"general_store": "false",
|
||||
"id": "59",
|
||||
"title": "Fancy Clothes Store",
|
||||
"stock": "{1949,10,100}-{958,10,100}-{948,10,100}-{1733,10,100}-{1734,1000,100}-{1059,30,100}-{1061,10,100}-{1757,10,100}-{1013,10,100}-{1025,10,100}-{10088,0,100}-{10090,0,100}-{10091,0,100}-{10089,0,100}-{10087,0,100}-{11525,0,100}"
|
||||
"stock": "{1949,0,100}-{579,10,100}-{1023,10,100}-{958,10,100}-{948,10,100}-{1733,10,100}-{1734,1000,100}-{1059,30,100}-{1061,10,100}-{428,10,100}-{426,10,100}-{1757,10,100}-{1013,10,100}-{1015,10,100}-{1011,10,100}-{1007,10,100}-{1025,10,100}-{10088,0,100}-{10090,0,100}-{10091,0,100}-{10089,0,100}-{10087,0,100}-{11525,0,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "548",
|
||||
|
|
@ -573,7 +564,7 @@
|
|||
"general_store": "false",
|
||||
"id": "65",
|
||||
"title": "Dodgy Mikes Second-hand Clothing",
|
||||
"stock": "{7114,10,100}"
|
||||
"stock": "{7114,10,100}-{7122,10,100}-{7128,10,100}-{7134,10,100}-{7110,10,100}-{7126,10,100}-{7132,10,100}-{7138,10,100}-{7116,10,100}-{7124,10,100}-{7130,10,100}-{7112,10,100}-{7136,10,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "2161",
|
||||
|
|
@ -1112,7 +1103,7 @@
|
|||
"currency": "995",
|
||||
"general_store": "false",
|
||||
"id": "126",
|
||||
"title": "Pickaxe-is-mine",
|
||||
"title": "Pickaxe-Is-Mine",
|
||||
"stock": "{1265,10,100}-{1269,10,100}-{1273,10,100}-{1271,10,100}-{1275,10,100}"
|
||||
},
|
||||
{
|
||||
|
|
@ -1251,13 +1242,13 @@
|
|||
"stock": "{12204,10,100}-{12207,10,100}-{12210,10,100}-{12213,10,100}-{12216,10,100}-{12219,10,100}-{12222,10,100}-{12183,125000,100}-{12155,5000,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "6996",
|
||||
"npcs": "4472",
|
||||
"high_alch": "0",
|
||||
"currency": "995",
|
||||
"general_store": "false",
|
||||
"id": "142",
|
||||
"title": "Bogrog's Summoning Shop",
|
||||
"stock": "{12204,10,100}-{12207,10,100}-{12210,10,100}-{12213,10,100}-{12216,10,100}-{12219,10,100}-{12222,10,100}-{12183,125000,100}-{12155,5000,100}"
|
||||
"stock": "{12204,10,100}-{12207,10,100}-{12210,0,100}-{12213,0,100}-{12216,0,100}-{12219,0,100}-{12222,0,100}-{12183,65000,100}-{12155,5000,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "3671",
|
||||
|
|
@ -1266,7 +1257,7 @@
|
|||
"general_store": "false",
|
||||
"id": "143",
|
||||
"title": "Fortunato's Fine Wine",
|
||||
"stock": "{1993,10,100}-{1937,10,100}-{7919,10,100}-{1935,10,100}"
|
||||
"stock": "{1993,10,100}-{7810,10,100}-{7919,10,100}-{1935,10,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "558",
|
||||
|
|
@ -1476,7 +1467,7 @@
|
|||
"stock": "{8794,10,100}-{8790,300,100}-{4819,300,100}-{4820,300,100}-{1539,300,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "1079",
|
||||
"npcs": "1079,1357,1358",
|
||||
"high_alch": "0",
|
||||
"currency": "995",
|
||||
"general_store": "false",
|
||||
|
|
@ -1662,7 +1653,7 @@
|
|||
"general_store": "false",
|
||||
"id": "187",
|
||||
"title": "William's Wilderness Cape Shop",
|
||||
"stock": "{4315,100,100}-{4335,100,100}-{4375,100,100}-{4395,100,100}"
|
||||
"stock": "{4315,100,100}-{4335,100,100}-{4355,100,100}-{4375,100,100}-{4395,100,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "1779",
|
||||
|
|
@ -1842,7 +1833,7 @@
|
|||
"general_store": "false",
|
||||
"id": "216",
|
||||
"title": "Ore Store",
|
||||
"stock": "{436,20,100}-{438,10,100}-{440,10,100}-{442,5,100}-{453,10,100}-{444,5,100}-{447,0,100}-{449,0,100}"
|
||||
"stock": "{436,10,100}-{438,10,100}-{440,0,100}-{442,0,100}-{453,0,100}-{444,0,100}-{447,0,100}-{449,0,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "596",
|
||||
|
|
@ -1891,12 +1882,13 @@
|
|||
},
|
||||
{
|
||||
"npcs": "2564",
|
||||
"force_shared": "true",
|
||||
"high_alch": "0",
|
||||
"currency": "995",
|
||||
"general_store": "false",
|
||||
"id": "222",
|
||||
"title": "Ore Shop\b",
|
||||
"stock": "{436,1500,100}-{438,1500,100}-{440,1500,100}-{442,1500,100}-{444,1500,100}-{447,1500,100}-{453,1500,100}"
|
||||
"stock": "{436,0,0}-{438,0,0}-{440,0,0}-{442,0,0}-{444,0,0}-{447,0,0}-{453,0,0}"
|
||||
},
|
||||
{
|
||||
"npcs": "603",
|
||||
|
|
@ -2176,5 +2168,32 @@
|
|||
"id": "254",
|
||||
"title": "Gabooty's Tai Bwo Wannai Drinky Store",
|
||||
"stock": "{2084,0,100}-{2092,0,100}-{2048,0,100}-{2054,0,100}-{2064,0,100}-{2074,0,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "1526",
|
||||
"high_alch": "0",
|
||||
"currency": "4067",
|
||||
"general_store": "false",
|
||||
"id": "255",
|
||||
"title": "Castle Wars Ticket Exchange",
|
||||
"stock": "{4068,1,100}-{4069,1,100}-{4070,1,100}-{4071,1,100}-{4072,1,100}-{4503,1,100}-{4504,1,100}-{4505,1,100}-{4506,1,100}-{4507,1,100}-{4508,1,100}-{4509,1,100}-{4510,1,100}-{4511,1,100}-{4512,1,100}-{4513,1,100}-{4514,1,100}-{4515,1,100}-{4516,1,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "5111",
|
||||
"high_alch": "0",
|
||||
"currency": "995",
|
||||
"general_store": "false",
|
||||
"id": "256",
|
||||
"title": "Leon's Prototype Crossbow",
|
||||
"stock": "{10156,2,100}"
|
||||
},
|
||||
{
|
||||
"npcs": "2039",
|
||||
"high_alch": "0",
|
||||
"currency": "995",
|
||||
"general_store": "false",
|
||||
"id": "256",
|
||||
"title": "Uglug's Stuffsies",
|
||||
"stock": "{4844,100,10}-{10927,0,100}-{2862,100,100}-{1777,10,200}-{2876,0,500}-{2878,10,100}-{4850,0,100}-{946,5,100}-{4773,0,1000}-{4778,0,1000}-{4783,0,1000}-{4788,0,1500}-{4793,0,2000}-{4798,0,3000}-{4803,0,4000}-{4827,0,2000}"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load diff
4
Server/data/eco/.gitignore
vendored
Normal file
4
Server/data/eco/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# Ignore everything in this directory
|
||||
*
|
||||
# Except this file
|
||||
!.gitignore
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
{
|
||||
"offers": [
|
||||
{
|
||||
"__comment" : "coal",
|
||||
"item" : "453",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "vial",
|
||||
"item" : "227",
|
||||
"qty" : "10000"
|
||||
},
|
||||
{
|
||||
"__comment" : "water vial",
|
||||
"item" : "229",
|
||||
"qty" : "10000"
|
||||
},
|
||||
{
|
||||
"__comment" : "cooked lobster",
|
||||
"item" : "379",
|
||||
"qty" : "10000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Ashes",
|
||||
"item" : "592",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Mort myre fungi",
|
||||
"item" : "2970",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Poison ivy berries",
|
||||
"item" : "6018",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Potato cactus",
|
||||
"item" : "3138",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Unicorn horn",
|
||||
"item" : "237",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Red spider eggs",
|
||||
"item" : "223",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Bird nest",
|
||||
"item" : "6693",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Chocolate dust",
|
||||
"item" : "1975",
|
||||
"qty" : "1000"
|
||||
},
|
||||
{
|
||||
"__comment" : "Limpwurt root",
|
||||
"item" : "225",
|
||||
"qty" : "10000"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
<EFBFBD><EFBFBD>
|
||||
102497
Server/data/eco/gedb.xml
102497
Server/data/eco/gedb.xml
File diff suppressed because it is too large
Load diff
|
|
@ -1,3 +1,7 @@
|
|||
CREATE DATABASE global;
|
||||
|
||||
USE global;
|
||||
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.0.2
|
||||
-- https://www.phpmyadmin.net/
|
||||
|
|
|
|||
539
Server/db_exports/grafana-dashboard.json
Normal file
539
Server/db_exports/grafana-dashboard.json
Normal file
|
|
@ -0,0 +1,539 @@
|
|||
{
|
||||
"__inputs": [
|
||||
{
|
||||
"name": "DS_SQLITE",
|
||||
"label": "SQLite",
|
||||
"description": "",
|
||||
"type": "datasource",
|
||||
"pluginId": "frser-sqlite-datasource",
|
||||
"pluginName": "SQLite"
|
||||
}
|
||||
],
|
||||
"__elements": {},
|
||||
"__requires": [
|
||||
{
|
||||
"type": "datasource",
|
||||
"id": "frser-sqlite-datasource",
|
||||
"name": "SQLite",
|
||||
"version": "3.3.0"
|
||||
},
|
||||
{
|
||||
"type": "grafana",
|
||||
"id": "grafana",
|
||||
"name": "Grafana",
|
||||
"version": "10.0.1"
|
||||
},
|
||||
{
|
||||
"type": "panel",
|
||||
"id": "timeseries",
|
||||
"name": "Time series",
|
||||
"version": ""
|
||||
}
|
||||
],
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": {
|
||||
"type": "grafana",
|
||||
"uid": "-- Grafana --"
|
||||
},
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": null,
|
||||
"links": [],
|
||||
"liveNow": false,
|
||||
"panels": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"description": "",
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisCenteredZero": false,
|
||||
"axisColorMode": "text",
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "misc_pulses"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "color",
|
||||
"value": {
|
||||
"fixedColor": "purple",
|
||||
"mode": "fixed"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "other"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "color",
|
||||
"value": {
|
||||
"fixedColor": "dark-red",
|
||||
"mode": "fixed"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "packet_incoming"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "color",
|
||||
"value": {
|
||||
"fixedColor": "super-light-red",
|
||||
"mode": "fixed"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 9,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 1,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom",
|
||||
"showLegend": true
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
},
|
||||
"pluginVersion": "10.0.1",
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"queryText": "SELECT * FROM tick_lengths",
|
||||
"queryType": "table",
|
||||
"rawQueryText": "SELECT * FROM tick_lengths",
|
||||
"refId": "A",
|
||||
"timeColumns": [
|
||||
"ts"
|
||||
]
|
||||
}
|
||||
],
|
||||
"title": "Tick Time",
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisCenteredZero": false,
|
||||
"axisColorMode": "text",
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 13,
|
||||
"w": 13,
|
||||
"x": 0,
|
||||
"y": 9
|
||||
},
|
||||
"id": 2,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom",
|
||||
"showLegend": true
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
},
|
||||
"pluginVersion": "10.0.1",
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"queryText": "select * from top_pulses;",
|
||||
"queryType": "table",
|
||||
"rawQueryText": "select * from top_pulses;",
|
||||
"refId": "A",
|
||||
"timeColumns": [
|
||||
"time",
|
||||
"ts"
|
||||
]
|
||||
}
|
||||
],
|
||||
"title": "Tick Time By Pulse (Total)",
|
||||
"transformations": [
|
||||
{
|
||||
"id": "extractFields",
|
||||
"options": {
|
||||
"format": "json",
|
||||
"jsonPaths": [
|
||||
{
|
||||
"path": "pulses"
|
||||
}
|
||||
],
|
||||
"keepTime": false,
|
||||
"replace": false,
|
||||
"source": "pulse_info"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "extractFields",
|
||||
"options": {
|
||||
"source": "pulses"
|
||||
}
|
||||
}
|
||||
],
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisCenteredZero": false,
|
||||
"axisColorMode": "text",
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 9,
|
||||
"w": 11,
|
||||
"x": 13,
|
||||
"y": 9
|
||||
},
|
||||
"id": 4,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom",
|
||||
"showLegend": true
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"queryText": "SELECT * FROM high_volume_pulses;",
|
||||
"queryType": "table",
|
||||
"rawQueryText": "SELECT * FROM high_volume_pulses;",
|
||||
"refId": "A",
|
||||
"timeColumns": [
|
||||
"time",
|
||||
"ts"
|
||||
]
|
||||
}
|
||||
],
|
||||
"title": "High Volume Pulses",
|
||||
"transformations": [
|
||||
{
|
||||
"id": "extractFields",
|
||||
"options": {
|
||||
"format": "json",
|
||||
"source": "pulse_info"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "extractFields",
|
||||
"options": {
|
||||
"source": "pulses"
|
||||
}
|
||||
}
|
||||
],
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisCenteredZero": false,
|
||||
"axisColorMode": "text",
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "stepBefore",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 4,
|
||||
"w": 11,
|
||||
"x": 13,
|
||||
"y": 18
|
||||
},
|
||||
"id": 3,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom",
|
||||
"showLegend": true
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "frser-sqlite-datasource",
|
||||
"uid": "${DS_SQLITE}"
|
||||
},
|
||||
"queryText": "SELECT * FROM bot_counts;",
|
||||
"queryType": "table",
|
||||
"rawQueryText": "SELECT * FROM bot_counts;",
|
||||
"refId": "A",
|
||||
"timeColumns": [
|
||||
"time",
|
||||
"ts"
|
||||
]
|
||||
}
|
||||
],
|
||||
"title": "Bot Population",
|
||||
"type": "timeseries"
|
||||
}
|
||||
],
|
||||
"refresh": "1h",
|
||||
"schemaVersion": 38,
|
||||
"style": "dark",
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-5m",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "",
|
||||
"title": "Main",
|
||||
"uid": "ffccf845-00a2-46f2-b0c0-a8b88032c701",
|
||||
"version": 10,
|
||||
"weekStart": ""
|
||||
}
|
||||
2
Server/db_exports/testuser.sql
Normal file
2
Server/db_exports/testuser.sql
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
CREATE USER IF NOT EXISTS 2009scapetest@localhost IDENTIFIED BY '2009scapetest';
|
||||
GRANT ALL PRIVILEGES ON global.* TO 2009scapetest@localhost;
|
||||
|
|
@ -285,7 +285,7 @@ exceptions:
|
|||
- 'Throwable'
|
||||
allowedExceptionNameRegex: '_|(ignore|expected).*'
|
||||
TooGenericExceptionThrown:
|
||||
active: true
|
||||
active: false
|
||||
exceptionNames:
|
||||
- 'Error'
|
||||
- 'Exception'
|
||||
|
|
@ -437,7 +437,7 @@ potential-bugs:
|
|||
- '*.CanIgnoreReturnValue'
|
||||
ignoreFunctionCall: []
|
||||
ImplicitDefaultLocale:
|
||||
active: true
|
||||
active: false
|
||||
ImplicitUnitReturnType:
|
||||
active: false
|
||||
allowExplicitReturnType: true
|
||||
|
|
@ -609,7 +609,7 @@ style:
|
|||
ObjectLiteralToLambda:
|
||||
active: true
|
||||
OptionalAbstractKeyword:
|
||||
active: true
|
||||
active: false
|
||||
OptionalUnit:
|
||||
active: false
|
||||
OptionalWhenBraces:
|
||||
|
|
@ -696,9 +696,9 @@ style:
|
|||
UseOrEmpty:
|
||||
active: true
|
||||
UseRequire:
|
||||
active: true
|
||||
active: false
|
||||
UseRequireNotNull:
|
||||
active: true
|
||||
active: false
|
||||
UselessCallOnNotNull:
|
||||
active: true
|
||||
UtilityClassWithPublicConstructor:
|
||||
|
|
|
|||
|
|
@ -5,10 +5,11 @@
|
|||
<artifactId>server</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<properties>
|
||||
<project.mainClassName>rs09.Server</project.mainClassName>
|
||||
<project.mainClassName>core.Server</project.mainClassName>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
|
||||
<kotlin.version>1.6.21</kotlin.version>
|
||||
<kotlin.comipler.jvmTarget>1.6</kotlin.comipler.jvmTarget>
|
||||
<kotlin.version>1.8.20</kotlin.version>
|
||||
<kotlin.compiler.jvmTarget>11</kotlin.compiler.jvmTarget>
|
||||
<junit.version>5.7.0</junit.version>
|
||||
<maven.compiler.source>11</maven.compiler.source>
|
||||
<maven.compiler.target>11</maven.compiler.target>
|
||||
|
|
@ -16,7 +17,7 @@
|
|||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||
<artifactId>kotlin-stdlib</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
|
@ -90,9 +91,16 @@
|
|||
<version>2.9.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.java-websocket</groupId>
|
||||
<artifactId>Java-WebSocket</artifactId>
|
||||
<version>1.5.7</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src/main</sourceDirectory>
|
||||
<testSourceDirectory>src/test</testSourceDirectory>
|
||||
<plugins>
|
||||
|
||||
<!-- Installs our local dependencies (const/extension libraries) to a local maven repo) -->
|
||||
|
|
@ -173,8 +181,7 @@
|
|||
</goals>
|
||||
<configuration>
|
||||
<sourceDirs>
|
||||
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
|
||||
<sourceDir>${project.basedir}/src/main/java</sourceDir>
|
||||
<sourceDir>${project.basedir}/src/main</sourceDir>
|
||||
</sourceDirs>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
|
@ -194,7 +201,7 @@
|
|||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.10.1</version>
|
||||
<configuration>
|
||||
<maxmem>1024m</maxmem>
|
||||
<maxmem>2048m</maxmem>
|
||||
<useIncrementalCompilation>false</useIncrementalCompilation>
|
||||
<compilerArgs>
|
||||
<arg>-XDcompilePolicy=simple</arg>
|
||||
|
|
@ -258,7 +265,7 @@
|
|||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>1.2.1</version>
|
||||
<configuration>
|
||||
<mainClass>rs09.Server</mainClass>
|
||||
<mainClass>core.Server</mainClass>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
|
@ -278,7 +285,7 @@
|
|||
classname="io.gitlab.arturbosch.detekt.cli.Main"
|
||||
classpathref="maven.plugin.classpath">
|
||||
<arg value="--input"/>
|
||||
<arg value="${basedir}/src/main/kotlin"/>
|
||||
<arg value="${basedir}/src/main"/>
|
||||
<arg value="--excludes"/>
|
||||
<arg value="**/special/package/internal/**"/>
|
||||
<arg value="--report"/>
|
||||
|
|
|
|||
72
Server/src/main/content/data/BossKillCounter.kt
Normal file
72
Server/src/main/content/data/BossKillCounter.kt
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package content.data
|
||||
|
||||
import core.api.sendMessage
|
||||
import core.game.node.entity.player.Player
|
||||
import org.rs09.consts.NPCs
|
||||
|
||||
/**
|
||||
* Enumerates the bosses that have their kill counts tracked in a player's statistics (::stats).
|
||||
* addToBossKillCount(player, npcId) should be added in the finalizeDeath() method of the combat handler for the boss.
|
||||
* ORDINAL BOUND
|
||||
* @author Bishop
|
||||
*/
|
||||
|
||||
enum class BossKillCounter(val bossId: IntArray, val bossName: String) {
|
||||
|
||||
KING_BLACK_DRAGON(intArrayOf(NPCs.KING_BLACK_DRAGON_50), "King Black Dragon"),
|
||||
BORK(intArrayOf(NPCs.BORK_7133, NPCs.BORK_7134), "Bork"),
|
||||
DAGANNOTH_SUPREME(intArrayOf(NPCs.DAGANNOTH_SUPREME_2881), "Dagannoth Supreme"),
|
||||
DAGANNOTH_PRIME(intArrayOf(NPCs.DAGANNOTH_PRIME_2882), "Dagannoth Prime"),
|
||||
DAGANNOTH_REX(intArrayOf(NPCs.DAGANNOTH_REX_2883), "Dagannoth Rex"),
|
||||
CHAOS_ELEMENTAL(intArrayOf(NPCs.CHAOS_ELEMENTAL_3200), "Chaos Elemental"),
|
||||
GIANT_MOLE(intArrayOf(NPCs.GIANT_MOLE_3340), "Giant Mole"),
|
||||
SARADOMIN(intArrayOf(NPCs.COMMANDER_ZILYANA_6247), "Commander Zilyana"),
|
||||
ZAMORAK(intArrayOf(NPCs.KRIL_TSUTSAROTH_6203), "K'ril Tsutsaroth"),
|
||||
BANDOS(intArrayOf(NPCs.GENERAL_GRAARDOR_6260), "General Graardor"),
|
||||
ARMADYL(intArrayOf(NPCs.KREEARRA_6222), "Kree'arra"),
|
||||
JAD(intArrayOf(NPCs.TZTOK_JAD_2745), "Tz-Tok Jad"),
|
||||
KALPHITE_QUEEN(intArrayOf(NPCs.KALPHITE_QUEEN_1160), "Kalphite Queen"),
|
||||
CORPOREAL_BEAST(intArrayOf(NPCs.CORPOREAL_BEAST_8133), "Corporeal Beast"),
|
||||
TORMENTED_DEMONS(
|
||||
intArrayOf(
|
||||
NPCs.TORMENTED_DEMON_8349, NPCs.TORMENTED_DEMON_8350, NPCs.TORMENTED_DEMON_8351,
|
||||
NPCs.TORMENTED_DEMON_8352, NPCs.TORMENTED_DEMON_8353, NPCs.TORMENTED_DEMON_8354,
|
||||
NPCs.TORMENTED_DEMON_8355, NPCs.TORMENTED_DEMON_8356, NPCs.TORMENTED_DEMON_8357,
|
||||
NPCs.TORMENTED_DEMON_8358, NPCs.TORMENTED_DEMON_8359, NPCs.TORMENTED_DEMON_8360,
|
||||
NPCs.TORMENTED_DEMON_8361, NPCs.TORMENTED_DEMON_8362, NPCs.TORMENTED_DEMON_8363,
|
||||
NPCs.TORMENTED_DEMON_8364, NPCs.TORMENTED_DEMON_8365, NPCs.TORMENTED_DEMON_8366),
|
||||
"Tormented demon"
|
||||
),
|
||||
PENANCE_QUEEN(intArrayOf(NPCs.PENANCE_QUEEN_5247), "Penance Queen");
|
||||
|
||||
companion object {
|
||||
private fun forBossId(npc: Int): BossKillCounter? {
|
||||
for (kc in values()) {
|
||||
for (i in kc.bossId) {
|
||||
if (npc == i) {
|
||||
return kc
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun addToBossKillCount(killer: Player?, bossId: Int) {
|
||||
if (killer == null) {
|
||||
return
|
||||
}
|
||||
val boss: BossKillCounter = forBossId(bossId) ?: return
|
||||
killer.getSavedData().globalData.bossCounters[boss.ordinal]++
|
||||
sendMessage(killer, "Your ${boss.bossName} killcount is now: <col=ff0000>${killer.getSavedData().globalData.bossCounters[boss.ordinal]}</col>.")
|
||||
}
|
||||
|
||||
fun addToBarrowsChestCount(player: Player?) {
|
||||
if (player == null) {
|
||||
return
|
||||
}
|
||||
player.getSavedData().globalData.barrowsLoots++
|
||||
sendMessage(player, "Your Barrows chest count is: <col=ff0000>${player.getSavedData().globalData.barrowsLoots}</col>.")
|
||||
}
|
||||
}
|
||||
}
|
||||
80
Server/src/main/content/data/ChargedItem.kt
Normal file
80
Server/src/main/content/data/ChargedItem.kt
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
package content.data
|
||||
|
||||
import core.api.toIntArray
|
||||
import core.cache.def.impl.ItemDefinition
|
||||
import org.rs09.consts.Items
|
||||
|
||||
/**
|
||||
* Represents a distinct charged item, i.e. items with (#).
|
||||
* Not to be confused with items with internal charge, like degradation.
|
||||
* @author RiL
|
||||
*/
|
||||
enum class ChargedItem(val ids: IntArray) {
|
||||
AMULET_OF_GLORY((Items.AMULET_OF_GLORY4_1712 downTo Items.AMULET_OF_GLORY_1704 step 2).toIntArray()),
|
||||
RING_OF_DUELLING((Items.RING_OF_DUELLING8_2552..Items.RING_OF_DUELLING1_2566 step 2).toIntArray()),
|
||||
GAMES_NECKLACE((Items.GAMES_NECKLACE8_3853..Items.GAMES_NECKLACE1_3867 step 2).toIntArray()),
|
||||
BROODOO_SHIELDA((Items.BROODOO_SHIELD_10_6215..Items.BROODOO_SHIELD_6235 step 2).toIntArray()),
|
||||
BROODOO_SHIELDB((Items.BROODOO_SHIELD_10_6237..Items.BROODOO_SHIELD_6257 step 2).toIntArray()),
|
||||
BROODOO_SHIELDC((Items.BROODOO_SHIELD_10_6259..Items.BROODOO_SHIELD_6279 step 2).toIntArray()),
|
||||
ROD_OF_IVANDIS((Items.ROD_OF_IVANDIS10_7639..Items.ROD_OF_IVANDIS1_7648).toIntArray()),
|
||||
BLACK_MASK((Items.BLACK_MASK_10_8901..Items.BLACK_MASK_8921 step 2).toIntArray()),
|
||||
AMULET_OF_GLORYT((Items.AMULET_OF_GLORYT4_10354..Items.AMULET_OF_GLORYT_10362 step 2).toIntArray()),
|
||||
CASTLEWAR_BRACE((Items.CASTLEWAR_BRACE3_11079..Items.CASTLEWAR_BRACE1_11083 step 2).toIntArray()),
|
||||
FORINTHRY_BRACE((Items.FORINTHRY_BRACE5_11095..Items.FORINTHRY_BRACE1_11103 step 2).toIntArray()),
|
||||
SKILLS_NECKLACE((Items.SKILLS_NECKLACE4_11105..Items.SKILLS_NECKLACE_11113 step 2).toIntArray()),
|
||||
COMBAT_BRACELET((Items.COMBAT_BRACELET4_11118..Items.COMBAT_BRACELET_11126 step 2).toIntArray()),
|
||||
DIGSITE_PENDANT((Items.DIGSITE_PENDANT_5_11194 downTo Items.DIGSITE_PENDANT_1_11190).toIntArray()),
|
||||
VOID_SEAL((Items.VOID_SEAL8_11666..Items.VOID_SEAL1_11673).toIntArray()),
|
||||
AMULET_OF_FARMING((Items.AMULET_OF_FARMING8_12622 downTo Items.AMULET_OF_FARMING1_12608 step 2).toIntArray()),
|
||||
IVANDIS_FLAIL((Items.IVANDIS_FLAIL_30_13117..Items.IVANDIS_FLAIL_1_13146).toIntArray()),
|
||||
RING_OF_SLAYING((Items.RING_OF_SLAYING8_13281..Items.RING_OF_SLAYING1_13288).toIntArray()),
|
||||
RING_OF_WEALTH((Items.RING_OF_WEALTH4_14646 downTo Items.RING_OF_WEALTH_14638 step 2).toIntArray());
|
||||
|
||||
/**
|
||||
* Get the item id for a specific [charge].
|
||||
* If [charge] is outside the valid range, return the item id with the closest charge.
|
||||
*/
|
||||
fun forCharge(charge: Int): Int {
|
||||
return ids[maxCharge() - if (charge < 1) 1 + maxCharge() - ids.size else if (charge > maxCharge()) maxCharge() else charge]
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the max charge of this ChargedItem.
|
||||
*/
|
||||
fun maxCharge(): Int = maxCharges[ordinal]
|
||||
|
||||
companion object {
|
||||
private val CHARGE_REGEX = Regex("""\(\D?(\d+)\)""")
|
||||
private val idMap = HashMap<Int, ChargedItem>()
|
||||
private val maxCharges = IntArray(values().size)
|
||||
|
||||
init {
|
||||
values().forEach { chargedItem ->
|
||||
maxCharges[chargedItem.ordinal] = getMaxCharge(chargedItem)
|
||||
chargedItem.ids.forEach { idMap[it] = chargedItem }
|
||||
}
|
||||
}
|
||||
|
||||
private fun getMaxCharge(chargedItem: ChargedItem): Int {
|
||||
return CHARGE_REGEX.find(ItemDefinition.forId(chargedItem.ids.first()).name)!!.groups[1]!!.value.toInt()
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the item id is a charged item.
|
||||
*/
|
||||
fun contains(id: Int): Boolean = idMap.containsKey(id)
|
||||
|
||||
/**
|
||||
* Get the ChargedItem enum for an item id, or null if it's not a charged item.
|
||||
*/
|
||||
fun forId(id: Int): ChargedItem? = idMap[id]
|
||||
|
||||
/**
|
||||
* Get the charge value of an item id, or null if it's not a charged item.
|
||||
*/
|
||||
fun getCharge(id: Int): Int? {
|
||||
val chargedItem = forId(id) ?: return null
|
||||
return chargedItem.maxCharge() - chargedItem.ids.indexOf(id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package core.game.content.global;
|
||||
package content.data;
|
||||
|
||||
import core.game.node.item.Item;
|
||||
|
||||
392
Server/src/main/content/data/EnchantedJewellery.kt
Normal file
392
Server/src/main/content/data/EnchantedJewellery.kt
Normal file
|
|
@ -0,0 +1,392 @@
|
|||
package content.data
|
||||
|
||||
import content.global.skill.magic.TeleportMethod
|
||||
import content.global.skill.slayer.SlayerManager.Companion.getInstance
|
||||
import content.global.skill.slayer.SlayerUtils
|
||||
import core.ServerConstants
|
||||
import core.api.*
|
||||
import core.game.event.TeleportEvent
|
||||
import core.game.interaction.QueueStrength
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.player.link.TeleportManager
|
||||
import core.game.node.entity.player.link.diary.DiaryType
|
||||
import core.game.node.item.Item
|
||||
import core.game.world.GameWorld
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.update.flag.context.Animation
|
||||
import core.game.world.update.flag.context.Graphics
|
||||
import core.tools.Log
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.Sounds
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Represents a piece of enchanted jewellery.
|
||||
* @author Vexia, downthecrop, Player Name
|
||||
*/
|
||||
enum class EnchantedJewellery(
|
||||
|
||||
val options: Array<String>,
|
||||
val locations: Array<Location>, crumble: Boolean, vararg val ids: Int) {
|
||||
RING_OF_SLAYING(
|
||||
arrayOf(
|
||||
"Sumona in Pollnivneach.",
|
||||
"Morytania Slayer Tower.",
|
||||
"Rellekka Slayer Caves.",
|
||||
"Nowhere. Give me a slayer update."
|
||||
),
|
||||
arrayOf(
|
||||
Location.create(3361, 2994, 0),
|
||||
Location.create(3428, 3535, 0),
|
||||
Location.create(2792, 3615, 0),
|
||||
),
|
||||
true,
|
||||
Items.RING_OF_SLAYING8_13281,
|
||||
Items.RING_OF_SLAYING7_13282,
|
||||
Items.RING_OF_SLAYING6_13283,
|
||||
Items.RING_OF_SLAYING5_13284,
|
||||
Items.RING_OF_SLAYING4_13285,
|
||||
Items.RING_OF_SLAYING3_13286,
|
||||
Items.RING_OF_SLAYING2_13287,
|
||||
Items.RING_OF_SLAYING1_13288
|
||||
),
|
||||
|
||||
RING_OF_DUELING(
|
||||
arrayOf(
|
||||
"Al Kharid Duel Arena.",
|
||||
"Castle Wars Arena.",
|
||||
"Fist of Guthix", "Nowhere."
|
||||
),
|
||||
arrayOf(
|
||||
Location.create(3314, 3235, 0),
|
||||
Location.create(2442, 3089, 0),
|
||||
Location.create(1693, 5600, 0)
|
||||
),
|
||||
true,
|
||||
Items.RING_OF_DUELLING8_2552,
|
||||
Items.RING_OF_DUELLING7_2554,
|
||||
Items.RING_OF_DUELLING6_2556,
|
||||
Items.RING_OF_DUELLING5_2558,
|
||||
Items.RING_OF_DUELLING4_2560,
|
||||
Items.RING_OF_DUELLING3_2562,
|
||||
Items.RING_OF_DUELLING2_2564,
|
||||
Items.RING_OF_DUELLING1_2566
|
||||
),
|
||||
AMULET_OF_GLORY(
|
||||
arrayOf(
|
||||
"Edgeville",
|
||||
"Karamja",
|
||||
"Draynor Village",
|
||||
"Al Kharid",
|
||||
"Nowhere"
|
||||
),
|
||||
arrayOf(
|
||||
Location.create(3087, 3495, 0),
|
||||
Location.create(2919, 3175, 0),
|
||||
Location.create(3104, 3249, 0),
|
||||
Location.create(3292, 3175, 0)
|
||||
),
|
||||
Items.AMULET_OF_GLORY4_1712,
|
||||
Items.AMULET_OF_GLORY3_1710,
|
||||
Items.AMULET_OF_GLORY2_1708,
|
||||
Items.AMULET_OF_GLORY1_1706,
|
||||
Items.AMULET_OF_GLORY_1704
|
||||
),
|
||||
AMULET_OF_GLORY_T(
|
||||
AMULET_OF_GLORY.options,
|
||||
AMULET_OF_GLORY.locations,
|
||||
Items.AMULET_OF_GLORYT4_10354,
|
||||
Items.AMULET_OF_GLORYT3_10356,
|
||||
Items.AMULET_OF_GLORYT2_10358,
|
||||
Items.AMULET_OF_GLORYT1_10360,
|
||||
Items.AMULET_OF_GLORYT_10362
|
||||
),
|
||||
GAMES_NECKLACE(
|
||||
arrayOf(
|
||||
"Burthorpe Games Room.",
|
||||
"Barbarian Outpost.",
|
||||
"Clan Wars.",
|
||||
"Wilderness Volcano.",
|
||||
"Corporeal Beast."
|
||||
),
|
||||
arrayOf(
|
||||
Location.create(2899, 3563, 0),
|
||||
Location.create(2520, 3571, 0),
|
||||
Location.create(3266, 3686, 0),
|
||||
Location.create(3179, 3685, 0),
|
||||
Location.create(2885, 4372, 2)
|
||||
),
|
||||
true,
|
||||
Items.GAMES_NECKLACE8_3853,
|
||||
Items.GAMES_NECKLACE7_3855,
|
||||
Items.GAMES_NECKLACE6_3857,
|
||||
Items.GAMES_NECKLACE5_3859,
|
||||
Items.GAMES_NECKLACE4_3861,
|
||||
Items.GAMES_NECKLACE3_3863,
|
||||
Items.GAMES_NECKLACE2_3865,
|
||||
Items.GAMES_NECKLACE1_3867
|
||||
),
|
||||
DIGSITE_PENDANT(arrayOf<String>(),
|
||||
arrayOf(
|
||||
Location.create(3342, 3445, 0)
|
||||
),
|
||||
true,
|
||||
Items.DIGSITE_PENDANT_5_11194,
|
||||
Items.DIGSITE_PENDANT_4_11193,
|
||||
Items.DIGSITE_PENDANT_3_11192,
|
||||
Items.DIGSITE_PENDANT_2_11191,
|
||||
Items.DIGSITE_PENDANT_1_11190
|
||||
),
|
||||
COMBAT_BRACELET(
|
||||
arrayOf(
|
||||
"Champions' Guild.",
|
||||
"Monastery.",
|
||||
"Ranging Guild.",
|
||||
"Warriors' Guild.",
|
||||
"Nowhere."
|
||||
),
|
||||
arrayOf(
|
||||
Location.create(3191, 3365, 0),
|
||||
Location.create(3052, 3472, 0),
|
||||
Location.create(2657, 3439, 0),
|
||||
Location.create(2878, 3546, 0)
|
||||
),
|
||||
Items.COMBAT_BRACELET4_11118,
|
||||
Items.COMBAT_BRACELET3_11120,
|
||||
Items.COMBAT_BRACELET2_11122,
|
||||
Items.COMBAT_BRACELET1_11124,
|
||||
Items.COMBAT_BRACELET_11126
|
||||
),
|
||||
SKILLS_NECKLACE(
|
||||
arrayOf(
|
||||
"Fishing Guild.",
|
||||
"Mining Guild.",
|
||||
"Crafting Guild.",
|
||||
"Cooking Guild.",
|
||||
"Nowhere."
|
||||
),
|
||||
arrayOf(
|
||||
Location.create(2611, 3392, 0),
|
||||
Location.create(3016, 3338, 0),
|
||||
Location.create(2933, 3290, 0),
|
||||
Location.create(3143, 3442, 0)
|
||||
),
|
||||
Items.SKILLS_NECKLACE4_11105,
|
||||
Items.SKILLS_NECKLACE3_11107,
|
||||
Items.SKILLS_NECKLACE2_11109,
|
||||
Items.SKILLS_NECKLACE1_11111,
|
||||
Items.SKILLS_NECKLACE_11113
|
||||
),
|
||||
RING_OF_WEALTH(
|
||||
arrayOf(
|
||||
"Grand Exchange.",
|
||||
"Nowhere."
|
||||
),
|
||||
arrayOf(
|
||||
Location.create(3163, 3464, 0)
|
||||
),
|
||||
Items.RING_OF_WEALTH4_14646,
|
||||
Items.RING_OF_WEALTH3_14644,
|
||||
Items.RING_OF_WEALTH2_14642,
|
||||
Items.RING_OF_WEALTH1_14640,
|
||||
Items.RING_OF_WEALTH_14638
|
||||
),
|
||||
RING_OF_LIFE(arrayOf<String>(),
|
||||
arrayOf(
|
||||
Location.create(ServerConstants.HOME_LOCATION!!)
|
||||
),
|
||||
true,
|
||||
Items.RING_OF_LIFE_2570
|
||||
);
|
||||
|
||||
val isCrumble: Boolean = crumble
|
||||
|
||||
/**
|
||||
* Constructs a new `EnchantedJewelleryPlugin` `Object`.
|
||||
* @param options the dialogue options.
|
||||
* @param locations the teleport locations.
|
||||
* @param ids the ordered item ids.
|
||||
*/
|
||||
constructor(options: Array<String>, locations: Array<Location>, vararg ids: Int) : this(options, locations, false, *ids)
|
||||
|
||||
/**
|
||||
* Method used when the player clicks one of the options in the jewellery piece's options dialog.
|
||||
* @param player the player.
|
||||
* @param item the used jewellery item.
|
||||
* @param buttonID the button id.
|
||||
* @param isEquipped If the player is operating.
|
||||
*/
|
||||
fun use(player: Player, item: Item, buttonID: Int, isEquipped: Boolean) {
|
||||
if (buttonID > locations.size - 1) {
|
||||
if (isSlayerRing(item)) {
|
||||
slayerProgressDialogue(player)
|
||||
}
|
||||
return
|
||||
}
|
||||
attemptTeleport(player, item, buttonID, true, isEquipped)
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to actually teleport the player to the desired location.
|
||||
* @param player the player.
|
||||
* @param item the used jewellery item.
|
||||
* @param buttonID the button id.
|
||||
* @param replace Whether to attempt replacing the item with its lower-charge version. Always true unless you generated a fake item in code.
|
||||
* @param isEquipped If the player is operating.
|
||||
*/
|
||||
fun attemptTeleport(player: Player, item: Item, buttonID: Int, replace: Boolean, isEquipped: Boolean): Boolean {
|
||||
val itemIndex = getItemIndex(item)
|
||||
val nextJewellery = Item(getNext(itemIndex))
|
||||
if (!canTeleport(player, nextJewellery)) {
|
||||
return false
|
||||
}
|
||||
val location = getLocation(buttonID)
|
||||
player.scripts.delay = GameWorld.ticks + 4
|
||||
queueScript(player, 0, QueueStrength.SOFT) { stage ->
|
||||
when (stage) {
|
||||
0 -> {
|
||||
lock(player, 4)
|
||||
// This is an intentional teleport animation & graphics difference as these two jewellery
|
||||
// animations are authentic to 2009 while others are currently unknown.
|
||||
if (this == RING_OF_DUELING || this == GAMES_NECKLACE) {
|
||||
visualize(player, JEWELLERY_ANIMATION, JEWELLERY_GRAPHICS)
|
||||
} else {
|
||||
visualize(player, ANIMATION, GRAPHICS)
|
||||
}
|
||||
playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200)
|
||||
player.impactHandler.disabledTicks = 4
|
||||
closeInterface(player)
|
||||
return@queueScript delayScript(player, 3)
|
||||
}
|
||||
1 -> {
|
||||
teleport(player, location)
|
||||
resetAnimator(player)
|
||||
if (this == RING_OF_DUELING || this == GAMES_NECKLACE) {
|
||||
player.graphics(JEWELLERY_GRAPHICS)
|
||||
}
|
||||
unlock(player)
|
||||
player.dispatch(TeleportEvent(TeleportManager.TeleportType.NORMAL, TeleportMethod.JEWELRY, item, location))
|
||||
|
||||
if (DIGSITE_PENDANT.ids.contains(item.id)) {
|
||||
player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 1, 10)
|
||||
}
|
||||
|
||||
if (!replace) {
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
if (isLastItemIndex(itemIndex)) {
|
||||
if (isSlayerRing(item)) {
|
||||
if (isEquipped) {
|
||||
// Remove it now, but only addItemOrDrop the gem after the teleport has procced
|
||||
if (removeItem(player, item, Container.EQUIPMENT)) {
|
||||
return@queueScript delayScript(player, 1)
|
||||
}
|
||||
log(this.javaClass, Log.ERR, "Error replacing slayer ring with enchanted gem (removeItem from equipment)")
|
||||
}
|
||||
// Not equipped -> can replace fluently
|
||||
if (replaceSlot(player, item.slot, Item(Items.ENCHANTED_GEM_4155), item) == item) {
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
log(this.javaClass, Log.ERR, "Error replacing slayer ring with enchanted gem (replaceSlot)")
|
||||
}
|
||||
// Not slayer ring
|
||||
if (isCrumble) {
|
||||
val removeFrom = if (isEquipped) Container.EQUIPMENT else Container.INVENTORY
|
||||
if (removeItem(player, item, removeFrom)) {
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
log(this.javaClass, Log.ERR, "Error crumbling jewelry")
|
||||
}
|
||||
} else {
|
||||
replaceJewellery(player, item, nextJewellery, isEquipped)
|
||||
}
|
||||
}
|
||||
2 -> {
|
||||
addItemOrDrop(player, Items.ENCHANTED_GEM_4155)
|
||||
sendMessage(player, "Your Ring of Slaying reverts back into a regular enchanted gem.")
|
||||
}
|
||||
}
|
||||
return@queueScript stopExecuting(player)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun replaceJewellery(player: Player, item: Item, nextJewellery: Item, isEquipped: Boolean) {
|
||||
if (isEquipped) {
|
||||
replaceSlot(player, item.slot, nextJewellery, item, Container.EQUIPMENT)
|
||||
} else {
|
||||
replaceSlot(player, item.slot, nextJewellery)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isSlayerRing(item: Item): Boolean {
|
||||
return (item.id in RING_OF_SLAYING.ids)
|
||||
}
|
||||
|
||||
private fun slayerProgressDialogue(player: Player) {
|
||||
val slayerManager = getInstance(player)
|
||||
if (!slayerManager.hasTask()) {
|
||||
sendNPCDialogue(player, slayerManager.master!!.npc, "You need something new to hunt. Come and " +
|
||||
"see me when you can and I'll give you a new task.", core.game.dialogue.FacialExpression.HALF_GUILTY)
|
||||
return
|
||||
}
|
||||
sendNPCDialogue(player, slayerManager.master!!.npc, "You're currently " +
|
||||
"assigned to kill ${SlayerUtils.pluralise(getSlayerTaskName(player))} " +
|
||||
"only ${getSlayerTaskKillsRemaining(player)} more to go.", core.game.dialogue.FacialExpression.FRIENDLY)
|
||||
// Slayer tracker UI
|
||||
setVarp(player, 2502, slayerManager.flags.taskFlags shr 4)
|
||||
}
|
||||
|
||||
private fun canTeleport(player: Player, item: Item): Boolean {
|
||||
return player.zoneMonitor.teleport(1, item)
|
||||
}
|
||||
|
||||
private fun getNext(index: Int): Int {
|
||||
val i = index + 1
|
||||
if (i > ids.size - 1) {
|
||||
return ids[ids.size - 1]
|
||||
}
|
||||
return ids[i]
|
||||
}
|
||||
|
||||
private fun getLocation(index: Int): Location {
|
||||
if (index > locations.size - 1) {
|
||||
return locations[locations.size - 1]
|
||||
}
|
||||
return locations[index]
|
||||
}
|
||||
|
||||
fun getJewelleryName(item: Item): String {
|
||||
return item.name.replace(""" ?\(t?[0-9]?\)""".toRegex(), "")
|
||||
}
|
||||
|
||||
fun getJewelleryType(item: Item): String {
|
||||
return when {
|
||||
this == GAMES_NECKLACE -> "games necklace"
|
||||
this == DIGSITE_PENDANT -> "necklace"
|
||||
this == COMBAT_BRACELET -> "bracelet"
|
||||
this == SKILLS_NECKLACE -> "necklace"
|
||||
else -> item.name.split(" ")[0].lowercase(Locale.getDefault())
|
||||
}
|
||||
}
|
||||
|
||||
fun isLastItemIndex(index: Int): Boolean = index == ids.size - 1
|
||||
|
||||
fun getItemIndex(item: Item): Int {
|
||||
return ids.indexOf(item.id)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val ANIMATION = Animation(714)
|
||||
private val GRAPHICS = Graphics(308, 100, 50)
|
||||
private val JEWELLERY_ANIMATION = Animation(9603)
|
||||
private val JEWELLERY_GRAPHICS = Graphics(1684)
|
||||
val idMap = HashMap<Int, EnchantedJewellery>()
|
||||
|
||||
init {
|
||||
values().forEach { entry ->
|
||||
entry.ids.forEach { idMap[it] = entry }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
package core.game.content.global;
|
||||
package content.data;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.item.Item;
|
||||
|
||||
import static core.api.ContentAPIKt.hasRequirement;
|
||||
|
||||
/**
|
||||
* A god book.
|
||||
* @author Vexia
|
||||
|
|
@ -98,6 +100,8 @@ public enum GodBook {
|
|||
* @param page the page.
|
||||
*/
|
||||
public void insertPage(Player player, Item book, Item page) {
|
||||
if (!hasRequirement(player, Quests.HORROR_FROM_THE_DEEP))
|
||||
return;
|
||||
if (hasPage(player, book, page)) {
|
||||
player.sendMessage("The book already has that page.");
|
||||
return;
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
package core.game.content.global;
|
||||
package content.data;
|
||||
|
||||
import core.game.content.dialogue.DialogueAction;
|
||||
import core.game.dialogue.DialogueAction;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.item.GroundItem;
|
||||
import core.game.node.item.GroundItemManager;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.scenery.Scenery;
|
||||
import core.game.system.task.Pulse;
|
||||
import rs09.game.world.GameWorld;
|
||||
import core.game.world.GameWorld;
|
||||
import core.game.world.map.Location;
|
||||
import core.game.world.update.flag.context.Animation;
|
||||
import core.tools.StringUtils;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package core.game.content.global;
|
||||
package content.data;
|
||||
|
||||
import core.game.node.item.Item;
|
||||
|
||||
|
|
@ -22,6 +22,8 @@ public enum Lamps {
|
|||
L_ACHIEVEMENT_2(new Item(11186), 1000, 30),
|
||||
L_ACHIEVEMENT_3(new Item(11187), 1500, 35),
|
||||
|
||||
MYSTERIOUS_LAMP(new Item(13227), 10000, 30),
|
||||
|
||||
FALLY_ACHIEVEMENT_1(new Item(14580), 1000, 30),
|
||||
FALLY_ACHIEVEMENT_2(new Item(14581), 5000, 40),
|
||||
FALLY_ACHIEVEMENT_3(new Item(14582), 10000, 50),
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package core.game.content.global;
|
||||
package content.data;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.item.Item;
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
package core.game.content.global
|
||||
|
||||
import java.util.ArrayList
|
||||
package content.data
|
||||
|
||||
enum class MeatState {
|
||||
INEDIBLE_RAW,
|
||||
158
Server/src/main/content/data/Quests.kt
Normal file
158
Server/src/main/content/data/Quests.kt
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
package content.data
|
||||
|
||||
enum class Quests(val questName: String) {
|
||||
MYTHS_OF_THE_WHITE_LANDS("Myths of the White Lands"),
|
||||
BLACK_KNIGHTS_FORTRESS("Black Knights' Fortress"),
|
||||
COOKS_ASSISTANT("Cook's Assistant"),
|
||||
DEMON_SLAYER("Demon Slayer"),
|
||||
DORICS_QUEST("Doric's Quest"),
|
||||
DRAGON_SLAYER("Dragon Slayer"),
|
||||
ERNEST_THE_CHICKEN("Ernest the Chicken"),
|
||||
GOBLIN_DIPLOMACY("Goblin Diplomacy"),
|
||||
IMP_CATCHER("Imp Catcher"),
|
||||
THE_KNIGHTS_SWORD("The Knight's Sword"),
|
||||
PIRATES_TREASURE("Pirate's Treasure"),
|
||||
PRINCE_ALI_RESCUE("Prince Ali Rescue"),
|
||||
THE_RESTLESS_GHOST("The Restless Ghost"),
|
||||
ROMEO_JULIET("Romeo & Juliet"),
|
||||
RUNE_MYSTERIES("Rune Mysteries"),
|
||||
SHEEP_SHEARER("Sheep Shearer"),
|
||||
SHIELD_OF_ARRAV("Shield of Arrav"),
|
||||
VAMPIRE_SLAYER("Vampire Slayer"),
|
||||
WITCHS_POTION("Witch's Potion"),
|
||||
ANIMAL_MAGNETISM("Animal Magnetism"),
|
||||
BETWEEN_A_ROCK("Between a Rock..."),
|
||||
BIG_CHOMPY_BIRD_HUNTING("Big Chompy Bird Hunting"),
|
||||
BIOHAZARD("Biohazard"),
|
||||
CABIN_FEVER("Cabin Fever"),
|
||||
CLOCK_TOWER("Clock Tower"),
|
||||
CONTACT("Contact!"),
|
||||
ZOGRE_FLESH_EATERS("Zogre Flesh Eaters"),
|
||||
CREATURE_OF_FENKENSTRAIN("Creature of Fenkenstrain"),
|
||||
DARKNESS_OF_HALLOWVALE("Darkness of Hallowvale"),
|
||||
DEATH_TO_THE_DORGESHUUN("Death to the Dorgeshuun"),
|
||||
DEATH_PLATEAU("Death Plateau"),
|
||||
DESERT_TREASURE("Desert Treasure"),
|
||||
DEVIOUS_MINDS("Devious Minds"),
|
||||
THE_DIG_SITE("The Dig Site"),
|
||||
DRUIDIC_RITUAL("Druidic Ritual"),
|
||||
DWARF_CANNON("Dwarf Cannon"),
|
||||
EADGARS_RUSE("Eadgar's Ruse"),
|
||||
EAGLES_PEAK("Eagles' Peak"),
|
||||
ELEMENTAL_WORKSHOP_I("Elemental Workshop I"),
|
||||
ELEMENTAL_WORKSHOP_II("Elemental Workshop II"),
|
||||
ENAKHRAS_LAMENT("Enakhra's Lament"),
|
||||
ENLIGHTENED_JOURNEY("Enlightened Journey"),
|
||||
THE_EYES_OF_GLOUPHRIE("The Eyes of Glouphrie"),
|
||||
FAIRYTALE_I_GROWING_PAINS("Fairytale I - Growing Pains"),
|
||||
FAIRYTALE_II_CURE_A_QUEEN("Fairytale II - Cure a Queen"),
|
||||
FAMILY_CREST("Family Crest"),
|
||||
THE_FEUD("The Feud"),
|
||||
FIGHT_ARENA("Fight Arena"),
|
||||
FISHING_CONTEST("Fishing Contest"),
|
||||
FORGETTABLE_TALE("Forgettable Tale..."),
|
||||
THE_FREMENNIK_TRIALS("The Fremennik Trials"),
|
||||
WATERFALL_QUEST("Waterfall Quest"),
|
||||
GARDEN_OF_TRANQUILITY("Garden of Tranquility"),
|
||||
GERTRUDES_CAT("Gertrude's Cat"),
|
||||
GHOSTS_AHOY("Ghosts Ahoy"),
|
||||
THE_GIANT_DWARF("The Giant Dwarf"),
|
||||
THE_GOLEM("The Golem"),
|
||||
THE_GRAND_TREE("The Grand Tree"),
|
||||
THE_HAND_IN_THE_SAND("The Hand in the Sand"),
|
||||
HAUNTED_MINE("Haunted Mine"),
|
||||
HAZEEL_CULT("Hazeel Cult"),
|
||||
HEROES_QUEST("Heroes' Quest"),
|
||||
HOLY_GRAIL("Holy Grail"),
|
||||
HORROR_FROM_THE_DEEP("Horror from the Deep"),
|
||||
ICTHLARINS_LITTLE_HELPER("Icthlarin's Little Helper"),
|
||||
IN_AID_OF_THE_MYREQUE("In Aid of the Myreque"),
|
||||
IN_SEARCH_OF_THE_MYREQUE("In Search of the Myreque"),
|
||||
JUNGLE_POTION("Jungle Potion"),
|
||||
LEGENDS_QUEST("Legend's Quest"),
|
||||
LOST_CITY("Lost City"),
|
||||
THE_LOST_TRIBE("The Lost Tribe"),
|
||||
LUNAR_DIPLOMACY("Lunar Diplomacy"),
|
||||
MAKING_HISTORY("Making History"),
|
||||
MERLINS_CRYSTAL("Merlin's Crystal"),
|
||||
MONKEY_MADNESS("Monkey Madness"),
|
||||
MONKS_FRIEND("Monk's Friend"),
|
||||
MOUNTAIN_DAUGHTER("Mountain Daughter"),
|
||||
MOURNINGS_END_PART_I("Mourning's End Part I"),
|
||||
MOURNINGS_END_PART_II("Mourning's End Part II"),
|
||||
MURDER_MYSTERY("Murder Mystery"),
|
||||
MY_ARMS_BIG_ADVENTURE("My Arm's Big Adventure"),
|
||||
NATURE_SPIRIT("Nature Spirit"),
|
||||
OBSERVATORY_QUEST("Observatory Quest"),
|
||||
ONE_SMALL_FAVOUR("One Small Favour"),
|
||||
PLAGUE_CITY("Plague City"),
|
||||
PRIEST_IN_PERIL("Priest in Peril"),
|
||||
RAG_AND_BONE_MAN("Rag and Bone Man"),
|
||||
RATCATCHERS("Ratcatchers"),
|
||||
RECIPE_FOR_DISASTER("Recipe for Disaster"),
|
||||
RECRUITMENT_DRIVE("Recruitment Drive"),
|
||||
REGICIDE("Regicide"),
|
||||
ROVING_ELVES("Roving Elves"),
|
||||
ROYAL_TROUBLE("Royal Trouble"),
|
||||
RUM_DEAL("Rum Deal"),
|
||||
SCORPION_CATCHER("Scorpion Catcher"),
|
||||
SEA_SLUG("Sea Slug"),
|
||||
THE_SLUG_MENACE("The Slug Menace"),
|
||||
SHADES_OF_MORTTON("Shades of Mort'ton"),
|
||||
SHADOW_OF_THE_STORM("Shadow of the Storm"),
|
||||
SHEEP_HERDER("Sheep Herder"),
|
||||
SHILO_VILLAGE("Shilo Village"),
|
||||
A_SOULS_BANE("A Soul's Bane"),
|
||||
SPIRITS_OF_THE_ELID("Spirits of the Elid"),
|
||||
SWAN_SONG("Swan Song"),
|
||||
TAI_BWO_WANNAI_TRIO("Tai Bwo Wannai Trio"),
|
||||
A_TAIL_OF_TWO_CATS("A Tail of Two Cats"),
|
||||
TEARS_OF_GUTHIX("Tears of Guthix"),
|
||||
TEMPLE_OF_IKOV("Temple of Ikov"),
|
||||
THRONE_OF_MISCELLANIA("Throne of Miscellania"),
|
||||
THE_TOURIST_TRAP("The Tourist Trap"),
|
||||
WITCHS_HOUSE("Witch's House"),
|
||||
TREE_GNOME_VILLAGE("Tree Gnome Village"),
|
||||
TRIBAL_TOTEM("Tribal Totem"),
|
||||
TROLL_ROMANCE("Troll Romance"),
|
||||
TROLL_STRONGHOLD("Troll Stronghold"),
|
||||
UNDERGROUND_PASS("Underground Pass"),
|
||||
WANTED("Wanted!"),
|
||||
WATCHTOWER("Watchtower"),
|
||||
COLD_WAR("Cold War"),
|
||||
THE_FREMENNIK_ISLES("The Fremennik Isles"),
|
||||
TOWER_OF_LIFE("Tower of Life"),
|
||||
THE_GREAT_BRAIN_ROBBERY("The Great Brain Robbery"),
|
||||
WHAT_LIES_BELOW("What Lies Below"),
|
||||
OLAFS_QUEST("Olaf's Quest"),
|
||||
ANOTHER_SLICE_OF_HAM("Another Slice of H.A.M"),
|
||||
DREAM_MENTOR("Dream Mentor"),
|
||||
GRIM_TALES("Grim Tales"),
|
||||
KINGS_RANSOM("King's Ransom"),
|
||||
THE_PATH_OF_GLOUPHRIE("The Path of Glouphrie"),
|
||||
BACK_TO_MY_ROOTS("Back to my Roots"),
|
||||
LAND_OF_THE_GOBLINS("Land of the Goblins"),
|
||||
DEALING_WITH_SCABARAS("Dealing with Scabaras"),
|
||||
WOLF_WHISTLE("Wolf Whistle"),
|
||||
AS_A_FIRST_RESORT("As a First Resort..."),
|
||||
CATAPULT_CONSTRUCTION("Catapult Construction"),
|
||||
KENNITHS_CONCERNS("Kennith's Concerns"),
|
||||
LEGACY_OF_SEERGAZE("Legacy of Seergaze"),
|
||||
PERILS_OF_ICE_MOUNTAIN("Perils of Ice Mountain"),
|
||||
TOKTZ_KET_DILL("TokTz-Ket-Dill"),
|
||||
SMOKING_KILLS("Smoking Kills"),
|
||||
ROCKING_OUT("Rocking Out"),
|
||||
SPIRIT_OF_SUMMER("Spirit of Summer"),
|
||||
MEETING_HISTORY("Meeting History"),
|
||||
ALL_FIRED_UP("All Fired Up"),
|
||||
SUMMERS_END("Summer's End"),
|
||||
DEFENDER_OF_VARROCK("Defender of Varrock"),
|
||||
SWEPT_AWAY("Swept Away"),
|
||||
WHILE_GUTHIX_SLEEPS("While Guthix Sleeps"),
|
||||
IN_PYRE_NEED("In Pyre Need"),
|
||||
TEST_QUEST("Test Quest");
|
||||
|
||||
override fun toString(): String {
|
||||
return questName
|
||||
}
|
||||
}
|
||||
43
Server/src/main/content/data/RepairItem.kt
Normal file
43
Server/src/main/content/data/RepairItem.kt
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
package content.data
|
||||
|
||||
import core.game.node.item.Item
|
||||
|
||||
/**
|
||||
* Represents the repair item type.
|
||||
* @author Vexia
|
||||
* @author Damighty - Kotlin conversion
|
||||
*/
|
||||
enum class RepairItem(
|
||||
val item: Item,
|
||||
val product: Item,
|
||||
val cost: Int
|
||||
) {
|
||||
BRONZE_HATCHET(Item(494, 1), Item(1351, 1), 0),
|
||||
BRONZE_PICKAXE(Item(468, 1), Item(1265, 1), 0),
|
||||
IRON_HATCHET(Item(496, 1), Item(1349, 1), 0),
|
||||
IRON_PICKAXE(Item(470, 1), Item(1267, 1), 0),
|
||||
STEEL_HATCHET(Item(498, 1), Item(1353, 1), 0),
|
||||
STEEL_PICKAXE(Item(472, 1), Item(1269, 1), 14),
|
||||
BLACK_HATCHET(Item(500, 1), Item(1361, 1), 10),
|
||||
MITHRIL_HATCHET(Item(502, 1), Item(1355, 1), 18),
|
||||
MITHRIL_PICKAXE(Item(474, 1), Item(1273, 1), 43),
|
||||
ADAMANT_HATCHET(Item(504, 1), Item(1357, 1), 43),
|
||||
ADAMANT_PICKAXE(Item(476, 1), Item(1271, 1), 107),
|
||||
RUNE_HATCHET(Item(506, 1), Item(1359, 1), 427),
|
||||
RUNE_PICKAXE(Item(478, 1), Item(1275, 1), 1100),
|
||||
DRAGON_HATCHET(Item(6741, 1), Item(6739, 1), 1800);
|
||||
|
||||
companion object {
|
||||
/**
|
||||
* List of all repairable item IDs.
|
||||
*/
|
||||
@JvmStatic
|
||||
val repairableItemIds: List<Int> = values().map { it.item.id }
|
||||
|
||||
/**
|
||||
* Gets the repair item by the broken items ID.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun forId(id: Int): RepairItem? = values().firstOrNull { it.item.id == id }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,396 +1,439 @@
|
|||
package core.game.content.consumable;
|
||||
|
||||
import org.rs09.consts.Items;
|
||||
import core.game.node.entity.player.link.diary.DiaryType;
|
||||
import core.game.node.entity.state.EntityState;
|
||||
import core.game.world.update.flag.context.Animation;
|
||||
import core.game.content.consumable.effects.*;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
import rs09.game.content.consumable.effects.KegOfBeerEffect;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Represents a repository of active consumables in the framework.
|
||||
*/
|
||||
public enum Consumables {
|
||||
|
||||
/** Meats */
|
||||
COOKED_MEAT(new Food(new int[] {2142}, new HealingEffect(3))),
|
||||
SHRIMPS(new Food(new int[] {315}, new HealingEffect(3))),
|
||||
COOKED_CHICKEN(new Food(new int[] {2140}, new HealingEffect(3))),
|
||||
COOKED_RABBIT(new Food(new int[] {3228}, new HealingEffect(5))),
|
||||
ANCHOVIES(new Food(new int[] {319}, new HealingEffect(1))),
|
||||
SARDINE(new Food(new int[] {325}, new HealingEffect(4))),
|
||||
POISON_KARAMBWAN(new Food(new int[] {3146}, new PoisonKarambwanEffect())),
|
||||
UGTHANKI_MEAT(new Food(new int[] {1861}, new HealingEffect(3))),
|
||||
HERRING(new Food(new int[] {347}, new HealingEffect(5))),
|
||||
MACKEREL(new Food(new int[] {355}, new HealingEffect(6))),
|
||||
ROAST_BIRD_MEAT(new Food(new int[] {9980}, new HealingEffect(6))),
|
||||
THIN_SNAIL(new Food(new int[] {3369}, new HealingEffect(5))),
|
||||
TROUT(new Food(new int[] {333}, new HealingEffect(7))),
|
||||
SPIDER_ON_STICK(new Food(new int[] {6297, 6305}, new HealingEffect(7))),
|
||||
SPIDER_ON_SHAFT(new Food(new int[] {6299}, new HealingEffect(7))),
|
||||
ROAST_RABBIT(new Food(new int[] {7223}, new HealingEffect(7))),
|
||||
LEAN_SNAIL(new Food(new int[] {3371}, new HealingEffect(8))),
|
||||
COD(new Food(new int[] {339}, new HealingEffect(7))),
|
||||
PIKE(new Food(new int[] {351}, new HealingEffect(8))),
|
||||
ROAST_BEAST_MEAT(new Food(new int[] {9988}, new HealingEffect(8))),
|
||||
COOKED_CRAB_MEAT(new Food(new int[] {7521, 7523, 7524, 7525, 7526}, new HealingEffect(2))),
|
||||
FAT_SNAIL(new Food(new int[] {3373}, new HealingEffect(9))),
|
||||
SALMON(new Food(new int[] {329}, new HealingEffect(9))),
|
||||
SLIMY_EEL(new Food(new int[] {3381}, new HealingEffect(6))),
|
||||
TUNA(new Food(new int[] {361}, new HealingEffect(10))),
|
||||
COOKED_KARAMBWAN(new Food(new int[] {3144}, new HealingEffect(18))),
|
||||
COOKED_CHOMPY(new Food(new int[] {2878}, new HealingEffect(10))),
|
||||
RAINBOW_FISH(new Food(new int[] {10136}, new HealingEffect(11))),
|
||||
CAVE_EEL(new Food(new int[] {5003}, new HealingEffect(7))),
|
||||
LOBSTER(new Food(new int[] {379}, new HealingEffect(12))),
|
||||
COOKED_JUBBLY(new Food(new int[] {7568}, new HealingEffect(15))),
|
||||
BASS(new Food(new int[] {365}, new HealingEffect(13))),
|
||||
SWORDFISH(new Food(new int[] {373}, new HealingEffect(14))),
|
||||
LAVA_EEL(new Food(new int[] {2149}, new HealingEffect(14))),
|
||||
MONKFISH(new Food(new int[] {7946}, new HealingEffect(16))),
|
||||
SHARK(new Food(new int[] {385}, new HealingEffect(20))),
|
||||
SEA_TURTLE(new Food(new int[] {397}, new HealingEffect(21))),
|
||||
MANTA_RAY(new Food(new int[] {391}, new HealingEffect(22))),
|
||||
KARAMBWANJI(new Food(new int[] {3151}, new HealingEffect(3))),
|
||||
STUFFED_SNAKE(new Food(new int[] {7579}, new HealingEffect(20), "You eat the stuffed snake-it's quite a meal! It tastes like chicken.")),
|
||||
CRAYFISH(new Food(new int[] {13433}, new HealingEffect(2))),
|
||||
GIANT_FROG_LEGS(new Food(new int [] {4517}, new HealingEffect(6))),
|
||||
|
||||
/** Breads */
|
||||
BREAD(new Food(new int[] {2309}, new HealingEffect(5))),
|
||||
BAGUETTE(new Food(new int[] {6961}, new HealingEffect(6))),
|
||||
|
||||
/** Sandwiches */
|
||||
TRIANGLE_SANDWICH(new Food(new int[] {6962}, new HealingEffect(6))),
|
||||
SQUARE_SANDWICH(new Food(new int[] {6965}, new HealingEffect(6))),
|
||||
SEAWEED_SANDWICH(new FakeConsumable(3168, new String[] {"You really, really do not want to eat that."})),
|
||||
FROGBURGER(new Food(new int[] {10962}, new HealingEffect(2))),
|
||||
|
||||
/** Kebabs */
|
||||
UGTHANKI_KEBAB(new Food(new int[] {1883}, new UgthankiKebabEffect())),
|
||||
UGTHANKI_KEBAB_SMELLING(new Food(new int[] {1885}, new SmellingUgthankiKebabEffect())),
|
||||
KEBAB(new Food(new int[] {1971}, new KebabEffect())),
|
||||
SUPER_KEBAB(new Food(new int[] {4608}, new SuperKebabEffect())),
|
||||
|
||||
/** Pies */
|
||||
REDBERRY_PIE(new HalfableFood(new int[] {2325, 2333, 2313}, new HealingEffect(5))),
|
||||
MEAT_PIE(new HalfableFood(new int[] {2327, 2331, 2313}, new HealingEffect(6))),
|
||||
APPLE_PIE(new HalfableFood(new int[] {2323, 2335, 2313}, new HealingEffect(7))),
|
||||
GARDEN_PIE(new HalfableFood(new int[] {7178, 7180, 2313}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.FARMING, 3, 0)))),
|
||||
FISH_PIE(new HalfableFood(new int[] {7188, 7190, 2313}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.FISHING, 3, 0)))),
|
||||
ADMIRAL_PIE(new HalfableFood(new int[] {7198, 7200, 2313}, new MultiEffect(new HealingEffect(8), new SkillEffect(Skills.FISHING, 5, 0)))),
|
||||
WILD_PIE(new HalfableFood(new int[] {7208, 7210, 2313}, new MultiEffect(new SkillEffect(Skills.SLAYER, 5, 0), new SkillEffect(Skills.RANGE, 4, 0), new HealingEffect(11)))),
|
||||
SUMMER_PIE(new HalfableFood(new int[] {7218, 7220, 2313}, new MultiEffect(new HealingEffect(11), new SkillEffect(Skills.AGILITY, 5, 0), new EnergyEffect(10)))),
|
||||
|
||||
/** Stews */
|
||||
STEW(new Food(new int[] {2003, 1923}, new HealingEffect(11))),
|
||||
SPICY_STEW(new Food(new int[] {7479, 1923}, new HealingEffect(11))),
|
||||
CURRY(new Food(new int[] {2011, 1923}, new HealingEffect(19))),
|
||||
BANANA_STEW(new Food(new int[] {4016, 1923}, new HealingEffect(11))),
|
||||
|
||||
/** Pizzas */
|
||||
PLAIN_PIZZA(new HalfableFood(new int[] {2289, 2291}, new HealingEffect(7))),
|
||||
MEAT_PIZZA(new HalfableFood(new int[] {2293, 2295}, new HealingEffect(8))),
|
||||
ANCHOVY_PIZZA(new HalfableFood(new int[] {2297, 2299}, new HealingEffect(9))),
|
||||
PINEAPPLE_PIZZA(new HalfableFood(new int[] {2301, 2303}, new HealingEffect(11))),
|
||||
|
||||
/** Cakes */
|
||||
CAKE(new Cake(new int[] {1891, 1893, 1895}, new HealingEffect(4), "You eat part of the cake.", "You eat some more cake.", "You eat the slice of cake.")),
|
||||
CHOCOLATE_CAKE(new Cake(new int[] {1897, 1899, 1901}, new HealingEffect(5), "You eat part of the chocolate cake.", "You eat some more of the chocolate cake.", "You eat the slice of cake.")),
|
||||
ROCK_CAKE(new Food(new int[] {2379}, new RockCakeEffect(), "The rock cake resists all attempts to eat it.")),
|
||||
DWARVEN_ROCK_CAKE(new Food(new int[] {7510, 7510}, new DwarvenRockCakeEffect(), "Ow! You nearly broke a tooth!", "The rock cake resists all attempts to eat it.")),
|
||||
HOT_DWARVEN_ROCK_CAKE(new Food(new int[] {7509, 7509}, new DwarvenRockCakeEffect(), "Ow! You nearly broke a tooth!", "The rock cake resists all attempts to eat it.")),
|
||||
COOKED_FISHCAKE(new Food(new int[] {7530}, new HealingEffect(11))),
|
||||
MINT_CAKE(new Food(new int[] {9475}, new EnergyEffect(50))),
|
||||
|
||||
/** Vegetables */
|
||||
POTATO(new Food(new int[] {1942}, new HealingEffect(1))),
|
||||
BAKED_POTATO(new Food(new int[] {6701}, new HealingEffect(2))),
|
||||
SPICY_SAUCE(new Food(new int[] {7072, 1923}, new HealingEffect(2))),
|
||||
CHILLI_CON_CARNE(new Food(new int[] {7062, 1923}, new HealingEffect(5))),
|
||||
SCRAMBLED_EGG(new Food(new int[] {7078, 1923}, new HealingEffect(5))),
|
||||
EGG_AND_TOMATO(new Food(new int[] {7064, 1923}, new HealingEffect(8))),
|
||||
SWEET_CORN(new Food(new int[] {5988}, new MultiEffect(new HealingEffect(1), new PercentageHealthEffect(10)))),
|
||||
SWEETCORN_BOWL(new Food(new int[] {7088, 1923}, new MultiEffect(new HealingEffect(1), new PercentageHealthEffect(10)))),
|
||||
POTATO_WITH_BUTTER(new Food(new int[] {6703}, new HealingEffect(7))),
|
||||
CHILLI_POTATO(new Food(new int[] {7054}, new HealingEffect(14))),
|
||||
FRIED_ONIONS(new Food(new int[] {7084, 1923}, new HealingEffect(5))),
|
||||
FRIED_MUSHROOMS(new Food(new int[] {7082, 1923}, new HealingEffect(5))),
|
||||
POTATO_WITH_CHEESE(new Food(new int[] {6705}, new HealingEffect(16))),
|
||||
EGG_POTATO(new Food(new int[] {7056}, new HealingEffect(11))),
|
||||
MUSHROOMS_AND_ONIONS(new Food(new int[] {7066, 1923}, new HealingEffect(11))),
|
||||
MUSHROOM_POTATO(new Food(new int[] {7058}, new HealingEffect(20))),
|
||||
TUNA_AND_CORN(new Food(new int[] {7068, 1923}, new HealingEffect(13))),
|
||||
TUNA_POTATO(new Food(new int[] {7060}, new HealingEffect(22))),
|
||||
ONION(new Food(new int[] {1957}, new HealingEffect(2), "It's always sad to see a grown man/woman cry.")),
|
||||
CABBAGE(new Food(new int[] {1965}, new HealingEffect(2), "You eat the cabbage. Yuck!")),
|
||||
DRAYNOR_CABBAGE(new Food(new int[] {1967}, new DraynorCabbageEffect(), "You eat the cabbage.", "It seems to taste nicer than normal.")),
|
||||
EVIL_TURNIP(new Food(new int[] {12134, 12136, 12138}, new HealingEffect(6))),
|
||||
SPINACH_ROLL(new Food(new int[] {1969}, new HealingEffect(2))),
|
||||
|
||||
/** Dairies */
|
||||
POT_OF_CREAM(new Food(new int[] {2130}, new HealingEffect(1))),
|
||||
CHEESE(new Food(new int[] {1985}, new HealingEffect(2))),
|
||||
CHOCOLATEY_MILK(new Drink(new int[] {1977, 1925}, new HealingEffect(4))),
|
||||
|
||||
/** Fruits */
|
||||
BANANA(new Food(new int[] {1963}, new HealingEffect(2))),
|
||||
SLICED_BANANA(new Food(new int[] {3162}, new HealingEffect(2))),
|
||||
RED_BANANA(new Food(new int[] {7572}, new HealingEffect(5), "You eat the red banana. It's tastier than your average banana.")),
|
||||
SLICED_RED_BANANA(new Food(new int[] {7574}, new HealingEffect(5), "You eat the sliced red banana. Yum.")),
|
||||
ORANGE(new Food(new int[] {2108}, new HealingEffect(2))),
|
||||
ORANGE_CHUNKS(new Food(new int[] {2110}, new HealingEffect(2))),
|
||||
ORANGE_SLICES(new Food(new int[] {2112}, new HealingEffect(2))),
|
||||
PAPAYA_FRUIT(new Food(new int[] {5972}, new HealingEffect(2))),
|
||||
TENTI_PINEAPPLE(new FakeConsumable(1851, new String[] {"Try using a knife to slice it into pieces."})),
|
||||
PINEAPPLE(new FakeConsumable(2114, new String[] {"Try using a knife to slice it into pieces."})),
|
||||
PINEAPPLE_CHUNKS(new Food(new int[] {2116}, new HealingEffect(2))),
|
||||
PINEAPPLE_RING(new Food(new int[] {2118}, new HealingEffect(2))),
|
||||
DWELLBERRIES(new Food(new int[] {2126}, new HealingEffect(2))),
|
||||
JANGERBERRIES(new Food(new int[] {247}, new MultiEffect(new SkillEffect(Skills.ATTACK, 2, 0), new SkillEffect(Skills.STRENGTH, 1, 0), new PrayerEffect(1, 0), new SkillEffect(Skills.DEFENCE, -1, 0)))),
|
||||
STRAWBERRY(new Food(new int[] {5504}, new MultiEffect(new HealingEffect(1), new PercentageHealthEffect(6)))),
|
||||
TOMATO(new Food(new int[] {1982}, new HealingEffect(2))),
|
||||
WATERMELON(new FakeConsumable(5982, new String[] {"Try using a knife to slice it into pieces."})),
|
||||
WATERMELON_SLICE(new Food(new int[] {5984}, new PercentageHealthEffect(5))),
|
||||
LEMON(new Food(new int[] {2102}, new HealingEffect(2))),
|
||||
LEMON_CHUNKS(new Food(new int[] {2104}, new HealingEffect(2))),
|
||||
LEMON_SLICES(new Food(new int[] {2106}, new HealingEffect(2))),
|
||||
LIME(new Food(new int[] {2120}, new HealingEffect(2))),
|
||||
LIME_CHUNKS(new Food(new int[] {2122}, new HealingEffect(2))),
|
||||
LIME_SLICES(new Food(new int[] {2124}, new HealingEffect(2))),
|
||||
PEACH(new Food(new int[] {6883}, new HealingEffect(8))),
|
||||
WHITE_TREE_FRUIT(new Food(new int[] {6469}, new MultiEffect(new RandomEnergyEffect(5, 10), new HealingEffect(3)))),
|
||||
STRANGE_FRUIT(new Food(new int[] {464}, new MultiEffect(new RemoveStateEffect(EntityState.POISONED.ordinal()), new EnergyEffect(30)))),
|
||||
|
||||
/** Gnome Cooking */
|
||||
TOAD_CRUNCHIES(new Food(new int[] {2217}, new HealingEffect(12))),
|
||||
PREMADE_TD_CRUNCH(new Food(new int[] {2243}, new HealingEffect(12))),
|
||||
SPICY_CRUNCHIES(new Food(new int[] {2213}, new HealingEffect(7))),
|
||||
PREMADE_SY_CRUNCH(new Food(new int[] {2241}, new HealingEffect(7))),
|
||||
WORM_CRUNCHIES(new Food(new int[] {2205}, new HealingEffect(8))),
|
||||
PREMADE_WM_CRUNC(new Food(new int[] {2237}, new HealingEffect(8))),
|
||||
CHOCCHIP_CRUNCHIES(new Food(new int[] {2209}, new HealingEffect(7))),
|
||||
PREMADE_CH_CRUNCH(new Food(new int[] {2239}, new HealingEffect(7))),
|
||||
FRUIT_BATTA(new Food(new int[] {2277}, new HealingEffect(11))),
|
||||
PREMADE_FRT_BATTA(new Food(new int[] {2225}, new HealingEffect(11))),
|
||||
TOAD_BATTA(new Food(new int[] {2255}, new HealingEffect(11))),
|
||||
PREMADE_TD_BATTA(new Food(new int[] {2221}, new HealingEffect(11))),
|
||||
WORM_BATTA(new Food(new int[] {2253}, new HealingEffect(11))),
|
||||
PREMADE_WM_BATTA(new Food(new int[] {2219}, new HealingEffect(11))),
|
||||
VEGETABLE_BATTA(new Food(new int[] {2281}, new HealingEffect(11))),
|
||||
PREMADE_VEG_BATTA(new Food(new int[] {2227}, new HealingEffect(11))),
|
||||
CHEESE_AND_TOMATOES_BATTA(new Food(new int[] {2259}, new HealingEffect(11))),
|
||||
PREMADE_CT_BATTA(new Food(new int[] {2223}, new HealingEffect(11))),
|
||||
WORM_HOLE(new Food(new int[] {2191}, new HealingEffect(12))),
|
||||
PREMADE_WORM_HOLE(new Food(new int[] {2233}, new HealingEffect(12))),
|
||||
VEG_BALL(new Food(new int[] {2195}, new HealingEffect(12))),
|
||||
PREMADE_VEG_BALL(new Food(new int[] {2235}, new HealingEffect(12))),
|
||||
TANGLED_TOADS_LEGS(new Food(new int[] {2187}, new HealingEffect(15))),
|
||||
PREMADE_TTL(new Food(new int[] {2231}, new HealingEffect(15))),
|
||||
CHOCOLATE_BOMB(new Food(new int[] {2195}, new HealingEffect(15))),
|
||||
PREMADE_CHOC_BOMB(new Food(new int[] {2229}, new HealingEffect(15))),
|
||||
TOAD_LEGS(new Food(new int[] {2152}, new HealingEffect(3))),
|
||||
KING_WORM(new Food(new int[] {2162}, new HealingEffect(2))),
|
||||
|
||||
/** Ales */
|
||||
ASGOLDIAN_ALE(new FakeConsumable(7508, new String[] {"I don't think I'd like gold in beer thanks. Leave it for the dwarves."})),
|
||||
ASGARNIAN_ALE(new Drink(new int[] {1905, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
ASGARNIAN_ALE_KEG(new Drink(new int[] {5785, 5783, 5781, 5779, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
ASGARNIAN_ALE_M(new Drink(new int[] {5739, 1919}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))),
|
||||
ASGARNIAN_ALE_M_KEG(new Drink(new int[] {5865, 5863, 5861, 5859, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289))),
|
||||
AXEMANS_FOLLY(new Drink(new int[] {5751, 1919}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 1, 0), new HealingEffect(1), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
AXEMANS_FOLLY_KEG(new Drink(new int[] {5825, 5823, 5821, 5819, 5769}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 1, 0), new HealingEffect(1), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.ATTACK, -3, 0)), new Animation(2289))),
|
||||
AXEMANS_FOLLY_M(new Drink(new int[] {5753, 1919}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 2, 0), new HealingEffect(2), new SkillEffect(Skills.STRENGTH, -4, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
AXEMANS_FOLLY_M_KEG(new Drink(new int[] {5905, 5903, 5901, 5899, 5769}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 2, 0), new HealingEffect(2), new SkillEffect(Skills.STRENGTH, -4, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))),
|
||||
BANDITS_BREW(new Drink(new int[] {4627, 1919}, new MultiEffect(new SkillEffect(Skills.THIEVING, 1, 0), new SkillEffect(Skills.ATTACK, 1, 0), new SkillEffect(Skills.STRENGTH, -1, 0), new SkillEffect(Skills.DEFENCE, -6, 0), new HealingEffect(1)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
BEER(new Drink(new int[] {1917, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 0, 0.04), new SkillEffect(Skills.ATTACK, 0, -0.07)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
BEER_TANKARD(new Drink(new int[] {3803, 3805}, new MultiEffect(new SkillEffect(Skills.ATTACK, -9, 0), new SkillEffect(Skills.STRENGTH, 4, 0)), "You quaff the beer. You feel slightly reinvigorated...", "...but very dizzy too.")),
|
||||
KEG_OF_BEER(new Drink(new int[] {3801}, new KegOfBeerEffect(), new Animation(1330), "You chug the keg. You feel reinvigorated...", "...but extremely drunk too.")),
|
||||
CHEFS_DELIGHT(new Drink(new int[] {5755, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
CHEFS_DELIGHT_KEG(new Drink(new int[] {5833, 5831, 5829, 5827, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
CHEFS_DELIGHT_M(new Drink(new int[] {5757, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)))),
|
||||
CHEFS_DELIGHT_M_KEG(new Drink(new int[] {5913, 5911, 5909, 5907, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)), new Animation(2289))),
|
||||
CIDER(new Drink(new int[] {5763, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))))),
|
||||
CIDER_KEG(new Drink(new int[] {5849, 5847, 5845, 5843, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))), new Animation(2289))),
|
||||
MATURE_CIDER(new Drink(new int[] {5765, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))))),
|
||||
CIDER_M_KEG(new Drink(new int[] {5929, 5927, 5925, 5923, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))), new Animation(2289))),
|
||||
DRAGON_BITTER(new Drink(new int[] {1911, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
DRAGON_BITTER_KEG(new Drink(new int[] {5809, 5807, 5805, 5803, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))),
|
||||
DRAGON_BITTER_M(new Drink(new int[] {5745, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))),
|
||||
DRAGON_BITTER_M_KEG(new Drink(new int[] {5889, 5887, 5885, 5883, 5769}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289))),
|
||||
DWARVEN_STOUT(new Drink(new int[] {1913, 1919}, new MultiEffect(new SkillEffect(Skills.MINING, 1, 0), new SkillEffect(Skills.SMITHING, 1 ,0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0), new SkillEffect(Skills.DEFENCE, -2, 0), new HealingEffect(1)), "You drink the Dwarven Stout. It tastes foul.", "It tastes pretty strong too.")),
|
||||
DWARVEN_STOUT_KEG(new Drink(new int[] {5777, 5775, 5773, 5771, 5769}, new MultiEffect(new SkillEffect(Skills.MINING, 1, 0), new SkillEffect(Skills.SMITHING, 1 ,0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0), new SkillEffect(Skills.DEFENCE, -2, 0), new HealingEffect(1)), new Animation(2289), "You drink the Dwarven Stout. It tastes foul.", "It tastes pretty strong too.")),
|
||||
DWARVEN_STOUT_M(new Drink(new int[] {5747, 1919}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)))),
|
||||
DWARVEN_STOUT_M_KEG(new Drink(new int[] {5857, 5855, 5853, 5851, 5769}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)), new Animation(2289))),
|
||||
GREENMANS_ALE(new Drink(new int[] {1909, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)))),
|
||||
GREENMANS_ALE_KEG(new Drink(new int[] {5793, 5791, 5789, 5787, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)), new Animation(2289))),
|
||||
GREENMANS_ALE_M(new Drink(new int[] {5743, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
GREENMANS_ALE_M_KEG(new Drink(new int[] {5873, 5871, 5869, 5867, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
GROG(new Drink(new int[] {1915, 1919}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))),
|
||||
MOONLIGHT_MEAD(new Drink(new int[] {2955, 1919}, new HealingEffect(4), "It tastes like something just died in your mouth.")),
|
||||
MOONLIGHT_MEAD_KEG(new Drink(new int[] {5817, 5815, 5813, 5811, 5769}, new HealingEffect(4), new Animation(2289), "It tastes like something just died in your mouth.")),
|
||||
MOONLIGHT_MEAD_M(new Drink(new int[] {5749, 1919}, new HealingEffect(6))),
|
||||
MOONLIGHT_MEAD_M_KEG(new Drink(new int[] {5897, 5895, 5893, 5891, 5769}, new HealingEffect(6), new Animation(2289))),
|
||||
SLAYERS_RESPITE(new Drink(new int[] {5759, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
SLAYERS_RESPITE_KEG(new Drink(new int[] {5841, 5839, 5837, 5835, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
SLAYERS_RESPITE_M(new Drink(new int[] {5761, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 4, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
SLAYERS_RESPITE_M_KEG(new Drink(new int[] {5841, 5839, 5837, 5835, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 4, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
WIZARDS_MIND_BOMB(new Drink(new int[] {1907, 1919}, new WizardsMindBombEffect(), "You drink the Wizard's Mind Bomb.", "You feel very strange.")),
|
||||
MATURE_WMB(new Drink(new int[] {5741, 1919}, new MatureWmbEffect())),
|
||||
|
||||
/** Cocktails */
|
||||
FRUIT_BLAST(new Drink(new int[] {2084, 2026}, new HealingEffect(9))),
|
||||
PREMADE_FR_BLAST(new Food(new int[] {2034, 2026}, new HealingEffect(9))),
|
||||
PINEAPPLE_PUNCH(new Drink(new int[] {2048, 2026}, new HealingEffect(9), "You drink the cocktail. It tastes great.")),
|
||||
PREMADE_P_PUNCH(new Drink(new int[] {2036, 2026}, new HealingEffect(9), "You drink the cocktail. It tastes great.")),
|
||||
WIZARD_BLIZZARD(new Drink(new int[] {2054, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_WIZ_BLZD(new Drink(new int[] {2040, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
SHORT_GREEN_GUY(new Drink(new int[] {2080, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 4, 0), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
PREMADE_SGG(new Drink(new int[] {2038, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 4, 0), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
DRUNK_DRAGON(new Drink(new int[] {2092, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_DR_DRAGON(new Drink(new int[] {2032, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
CHOC_SATURDAY(new Drink(new int[] {2074, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_CHOC_SDY(new Drink(new int[] {2030, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
BLURBERRY_SPECIAL(new Drink(new int[] {2064, 2026}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_BLURB_SP(new Drink(new int[] {2028, 2026}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
|
||||
/** Bottled Drinks */
|
||||
KARAMJAN_RUM(new Drink(new int[] {431}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 5, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
BRAINDEATH_RUM(new Drink(new int[] {7157}, new MultiEffect(new SkillEffect(Skills.DEFENCE, 0, -0.1), new SkillEffect(Skills.ATTACK, 0, -0.05), new SkillEffect(Skills.PRAYER, 0, -0.05), new SkillEffect(Skills.RANGE, 0, -0.05), new SkillEffect(Skills.MAGIC, 0, -0.05), new SkillEffect(Skills.HERBLORE, 0, -0.05), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.MINING, 1, 0)), "With a sense of impending doom you drink the 'rum'. You try very hard not to die.")),
|
||||
RUM_TROUBLE_BREWING_RED(new Drink(new int[] {8940, 8940}, new TroubleBrewingRumEffect("Oh gods! It tastes like burning!"), new Animation(9605))),
|
||||
RUM_TROUBLE_BREWING_BLUE(new Drink(new int[] {8941, 8941}, new TroubleBrewingRumEffect("My Liver! My Liver is melting!"), new Animation(9604))),
|
||||
VODKA(new Drink(new int[] {2015}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
GIN(new Drink(new int[] {2019}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 1, 0), new SkillEffect(Skills.ATTACK, 4, 0), new RandomHealthEffect(3, 4)))),
|
||||
BRANDY(new Drink(new int[] {2021}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.ATTACK, 4, 0)))),
|
||||
WHISKY(new Drink(new int[] {2017}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
BOTTLE_OF_WINE(new Drink(new int[] {2015, 7921}, new MultiEffect(new HealingEffect(14), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
|
||||
/** Wine */
|
||||
JUG_OF_WINE(new Drink(new int[] {1993, 1935}, new MultiEffect(new HealingEffect(11), new SkillEffect(Skills.ATTACK, -2, 0)))),
|
||||
HALF_FULL_WINE_JUG(new Drink(new int[] {1989, 1935}, new HealingEffect(7))),
|
||||
|
||||
/** Tea */
|
||||
CUP_OF_TEA(new Drink(new int[] {712, 1980}, new MultiEffect(new HealingEffect(3), new SkillEffect(Skills.ATTACK, 3, 0)), "Aaah, nothing like a nice cuppa tea!")),
|
||||
CUP_OF_TEA_NETTLE(new Drink(new int[] {4242, 1980}, new EnergyEffect(10))),
|
||||
CUP_OF_TEA_MILKY_NETTLE(new Drink(new int[] {4243, 1980}, new EnergyEffect(10))),
|
||||
NETTLE_TEA(new Drink(new int[] {4239, 1980}, new NettleTeaEffect())),
|
||||
NETTLE_TEA_MILKY(new Drink(new int[] {4240, 1980}, new NettleTeaEffect())),
|
||||
CUP_OF_TEA_CLAY(new Drink(new int[] {7730, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_CLAY_MILKY(new Drink(new int[] {7731, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0))),
|
||||
CUP_OF_TEA_WHITE(new Drink(new int[] {7733, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_WHITE_MILKY(new Drink(new int[] {7734, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0))),
|
||||
CUP_OF_TEA_GOLD(new Drink(new int[] {7736, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_GOLD_MILKY(new Drink(new int[] {7737, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0))),
|
||||
|
||||
/** Miscellaneous */
|
||||
CHOCOLATE_BAR(new Food(new int[] {1973}, new HealingEffect(3))),
|
||||
PURPLE_SWEETS(new Food(new int[] {4561}, new HealingEffect(0))),
|
||||
PURPLE_SWEETS_STACKABLE(new Food(new int[] {10476}, new MultiEffect(new EnergyEffect(10), new RandomHealthEffect(1, 3)), "The sugary goodness heals some energy.", "The sugary goodness is yummy.")),
|
||||
FIELD_RATION(new Food(new int[] {7934}, new HealingEffect(10))),
|
||||
ROLL(new Food(new int[] {6963}, new HealingEffect(6))),
|
||||
TCHIKI_MONKEY_NUTS(new Food(new int[] {7573}, new HealingEffect(5), "You eat the Tchiki monkey nuts. They taste nutty.")),
|
||||
TCHIKI_MONKEY_PASTE(new Food(new int[] {7575}, new HealingEffect(5), "You eat the Tchiki monkey nut paste. It sticks to the roof of your mouth.")),
|
||||
OOMLIE_WRAP(new Food(new int[] {Items.COOKED_OOMLIE_WRAP_2343}, new MultiEffect(new HealingEffect(14), new AchievementEffect(DiaryType.KARAMJA, 2, 2)))),
|
||||
ROE(new Food(new int[]{11324}, new HealingEffect(3))),
|
||||
EQUA_LEAVES(new Food(new int[]{2128}, new HealingEffect(1))),
|
||||
CHOC_ICE(new Food(new int[]{6794}, new HealingEffect(6))),
|
||||
EDIBLE_SEAWEED(new Food(new int[] {403}, new HealingEffect(4))),
|
||||
|
||||
/** Special Events */
|
||||
PUMPKIN(new Food(new int[] {1959}, new HealingEffect(14))),
|
||||
EASTER_EGG(new Food(new int[] {1961}, new HealingEffect(14))),
|
||||
|
||||
/** Potions */
|
||||
STRENGTH(new Potion(new int[] {113, 115, 117, 119}, new SkillEffect(Skills.STRENGTH, 3, 0.1))),
|
||||
ATTACK(new Potion(new int[] {2428, 121, 123, 125}, new SkillEffect(Skills.ATTACK, 3, 0.1))),
|
||||
DEFENCE(new Potion(new int[] {2432, 133, 135, 137}, new SkillEffect(Skills.DEFENCE, 3, 0.1))),
|
||||
RANGING(new Potion(new int[] {2444, 169, 171, 173}, new SkillEffect(Skills.RANGE, 3, 0.1))),
|
||||
MAGIC(new Potion(new int[] {3040, 3042, 3044, 3046}, new SkillEffect(Skills.MAGIC, 3, 0.1))),
|
||||
SUPER_STRENGTH(new Potion(new int[] {2440, 157, 159, 161}, new SkillEffect(Skills.STRENGTH, 3, 0.2))),
|
||||
SUPER_ATTACK(new Potion(new int[] {2436, 145, 147, 149}, new SkillEffect(Skills.ATTACK, 3, 0.2))),
|
||||
SUPER_DEFENCE(new Potion(new int[] {2442, 163, 165, 167}, new SkillEffect(Skills.DEFENCE, 3, 0.2))),
|
||||
ANTIPOISON(new Potion(new int[] {2446, 175, 177, 179}, new MultiEffect(new SetAttributeEffect("poison:immunity", 143), new RemoveStateEffect(EntityState.POISONED.ordinal())))),
|
||||
ANTIPOISON_(new Potion(new int[] {5943, 5945, 5947, 5949}, new MultiEffect(new SetAttributeEffect("poison:immunity", 863), new RemoveStateEffect(EntityState.POISONED.ordinal())))),
|
||||
ANTIPOISON__(new Potion(new int[] {5952, 5954, 5956, 5958}, new MultiEffect(new SetAttributeEffect("poison:immunity", 2000), new RemoveStateEffect(EntityState.POISONED.ordinal())))),
|
||||
SUPER_ANTIP(new Potion(new int[] {2448, 181, 183, 185}, new MultiEffect(new SetAttributeEffect("poison:immunity", 1000), new RemoveStateEffect(EntityState.POISONED.ordinal())))),
|
||||
RELICYM(new Potion(new int[] {4842, 4844, 4846, 4848}, new MultiEffect(new SetAttributeEffect("disease:immunity", 300), new RemoveStateEffect("disease")))),
|
||||
AGILITY(new Potion(new int[] {3032, 3034, 3036, 3038}, new SkillEffect(Skills.AGILITY, 3, 0))),
|
||||
HUNTER(new Potion(new int[] {9998, 10000, 10002, 10004}, new SkillEffect(Skills.HUNTER, 3, 0))),
|
||||
RESTORE(new Potion(new int[] {2430, 127, 129, 131}, new RestoreEffect(10, 0.3))),
|
||||
SARA_BREW(new Potion(new int[] {6685, 6687, 6689, 6691}, new MultiEffect(new PercentHeal(2, .15), new SkillEffect(Skills.ATTACK, 0, -0.10), new SkillEffect(Skills.STRENGTH, 0, -0.10), new SkillEffect(Skills.MAGIC, 0, -0.10), new SkillEffect(Skills.RANGE, 0, -0.10), new SkillEffect(Skills.DEFENCE, 2, 0.2)))),
|
||||
SUMMONING(new Potion(new int[] {12140, 12142, 12144, 12146}, new SummoningEffect(7, 0.25))),
|
||||
COMBAT(new Potion(new int[] {9739, 9741, 9743, 9745}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, .1), new SkillEffect(Skills.ATTACK, 3, .1)))),
|
||||
ENERGY(new Potion(new int[] {3008, 3010, 3012, 3014}, new MultiEffect(new EnergyEffect(10), new HealingEffect(3)))),
|
||||
FISHING(new Potion(new int[] {2438, 151, 153, 155}, new SkillEffect(Skills.FISHING, 3, 0))),
|
||||
PRAYER(new Potion(new int[] {2434, 139, 141, 143}, new PrayerEffect(7, 0.25))),
|
||||
SUPER_RESTO(new Potion(new int[] {3024, 3026, 3028, 3030}, new MultiEffect(new RestoreEffect(8, 0.25), new PrayerEffect(8, 0.25), new SummoningEffect(8, 0.25)))),
|
||||
ZAMMY_BREW(new Potion(new int[] {2450, 189, 191, 193}, new MultiEffect(new DamageEffect(10, true), new SkillEffect(Skills.ATTACK, 0, 0.15), new SkillEffect(Skills.STRENGTH, 0, 0.25), new SkillEffect(Skills.DEFENCE, 0, -0.1), new RandomPrayerEffect(0, 10)))),
|
||||
ANTIFIRE(new Potion(new int[] {2452, 2454, 2456, 2458}, new SetAttributeEffect("fire:immune", 600, true))),
|
||||
GUTH_REST(new Potion(new int[] {4417, 4419, 4421, 4423}, new MultiEffect(new RemoveStateEffect(EntityState.POISONED.ordinal()), new EnergyEffect(5), new HealingEffect(5)))),
|
||||
MAGIC_ESS(new Potion(new int[] {11491, 11489}, new SkillEffect(Skills.MAGIC,3,0))),
|
||||
SANFEW(new Potion(new int[] {10925, 10927, 10929, 10931}, new MultiEffect(new RestoreEffect(8,0.25), new PrayerEffect(8,0.25), new RemoveStateEffect(EntityState.POISONED.ordinal()), new RemoveStateEffect("disease")))),
|
||||
SUPER_ENERGY(new Potion(new int[] {3016, 3018, 3020, 3022}, new EnergyEffect(20))),
|
||||
BLAMISH_OIL(new FakeConsumable(1582, new String[] {"You know... I'd really rather not."})),
|
||||
|
||||
/** Barbarian Mixes */
|
||||
PRAYERMIX(new BarbarianMix(new int[] {11465, 11467}, new MultiEffect(new PrayerEffect(7, 0.25), new HealingEffect(6)))),
|
||||
ZAMMY_MIX(new BarbarianMix(new int[] {11521, 11523}, new MultiEffect(new DamageEffect(10, true), new SkillEffect(Skills.ATTACK, 0, 0.15), new SkillEffect(Skills.STRENGTH, 0, 0.25), new SkillEffect(Skills.DEFENCE, 0, -0.1), new RandomPrayerEffect(0, 10)))),
|
||||
ATT_MIX(new BarbarianMix(new int[] {11429, 11431}, new MultiEffect(new SkillEffect(Skills.ATTACK, 3, 0.1), new HealingEffect(3)))),
|
||||
ANTIP_MIX(new BarbarianMix(new int[] {11433, 11435}, new MultiEffect(new RemoveStateEffect(EntityState.POISONED.ordinal()), new SetAttributeEffect("poison:immunity", 143), new HealingEffect(3)))),
|
||||
RELIC_MIX(new BarbarianMix(new int[] {11437, 11439}, new MultiEffect(new RemoveStateEffect("disease"), new SetAttributeEffect("disease:immunity", 300), new HealingEffect(3)))),
|
||||
STR_MIX(new BarbarianMix(new int[] {11443, 11441}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0.1), new HealingEffect(3)))),
|
||||
RESTO_MIX(new BarbarianMix(new int[] {11449, 11451}, new MultiEffect(new RestoreEffect(10, 0.3), new HealingEffect(3)))),
|
||||
ENERGY_MIX(new BarbarianMix(new int[] {11453, 11455}, new MultiEffect(new EnergyEffect(10), new HealingEffect(6)))),
|
||||
DEF_MIX(new BarbarianMix(new int[] {11457, 11459}, new MultiEffect(new SkillEffect(Skills.DEFENCE, 3, 0.1), new HealingEffect(6)))),
|
||||
AGIL_MIX(new BarbarianMix(new int[] {11461, 11463}, new MultiEffect(new SkillEffect(Skills.AGILITY, 3, 0), new HealingEffect(6)))),
|
||||
COMBAT_MIX(new BarbarianMix(new int[] {11445, 11447}, new MultiEffect(new SkillEffect(Skills.ATTACK, 3, 0.1), new SkillEffect(Skills.STRENGTH, 3, 0.1), new HealingEffect(6)))),
|
||||
SUPER_ATT_MIX(new BarbarianMix(new int[] {11469, 11471}, new MultiEffect(new SkillEffect(Skills.ATTACK, 5, 0.15), new HealingEffect(6)))),
|
||||
FISH_MIX(new BarbarianMix(new int[] {11477, 11479}, new MultiEffect(new SkillEffect(Skills.FISHING, 3, 0), new HealingEffect(6)))),
|
||||
SUPER_ENERGY_MIX(new BarbarianMix(new int[] {11481, 11483}, new MultiEffect(new EnergyEffect(20), new HealingEffect(6)))),
|
||||
HUNTING_MIX(new BarbarianMix(new int[] {11517, 11519}, new MultiEffect(new SkillEffect(Skills.HUNTER, 3, 0), new HealingEffect(6)))),
|
||||
SUPER_STR_MIX(new BarbarianMix(new int[] {11485, 11487}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 5, 0.15), new HealingEffect(6)))),
|
||||
|
||||
/** Stealing creation potions */
|
||||
SC_PRAYER(new Potion(new int[] {14207, 14209, 14211, 14213, 14215}, new PrayerEffect(7, 0.25))),
|
||||
SC_ENERGY(new Potion(new int[] {14217, 14219, 14221, 14223, 14225}, new EnergyEffect(20))),
|
||||
SC_ATTACK(new Potion(new int[] {14227, 14229, 14231, 14233, 14235}, new SkillEffect(Skills.ATTACK, 3, 0.2))),
|
||||
SC_STRENGTH(new Potion(new int[] {14237, 14239, 14241, 14243, 14245}, new SkillEffect(Skills.STRENGTH, 3, 0.2))),
|
||||
SC_RANGE(new Potion(new int[] {14247, 14249, 14251, 14253, 14255}, new SkillEffect(Skills.RANGE, 3, 0.1))),
|
||||
SC_DEFENCE(new Potion(new int[] {14257, 14259, 14261, 14263, 14265}, new SkillEffect(Skills.DEFENCE, 3, 0.1))),
|
||||
SC_MAGIC(new Potion(new int[] {14267, 14269, 14271, 14273, 14275}, new SkillEffect(Skills.MAGIC, 3, 0.1))),
|
||||
SC_SUMMONING(new Potion(new int[] {14277, 14279, 14281, 14283, 14285}, new SummoningEffect(7, 0.25)));
|
||||
|
||||
public static HashMap<Integer,Consumable> consumables = new HashMap<>();
|
||||
|
||||
private final Consumable consumable;
|
||||
|
||||
Consumables(Consumable consumable) {
|
||||
this.consumable = consumable;
|
||||
}
|
||||
|
||||
public Consumable getConsumable() {
|
||||
return consumable;
|
||||
}
|
||||
|
||||
public static Consumable getConsumableById(final int itemId) {
|
||||
return consumables.get(itemId);
|
||||
}
|
||||
|
||||
public static void add(final Consumable consumable) {
|
||||
for (int id : consumable.getIds()) {
|
||||
consumables.putIfAbsent(id, consumable);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Static modifier used to populate search engine lists.
|
||||
*/
|
||||
static {
|
||||
for (Consumables consumable : Consumables.values()) {
|
||||
add(consumable.consumable);
|
||||
}
|
||||
}
|
||||
}
|
||||
package content.data.consumables;
|
||||
|
||||
import content.data.consumables.effects.*;
|
||||
import core.game.consumable.*;
|
||||
import core.game.node.entity.player.link.diary.DiaryType;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
import core.game.world.update.flag.context.Animation;
|
||||
import org.rs09.consts.Items;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import static core.tools.TickUtilsKt.minutesToTicks;
|
||||
import static core.tools.TickUtilsKt.secondsToTicks;
|
||||
|
||||
/**
|
||||
* Represents a repository of active consumables in the framework.
|
||||
*/
|
||||
public enum Consumables {
|
||||
|
||||
/** Meats */
|
||||
COOKED_MEAT(new Food(new int[] {2142}, new HealingEffect(3))),
|
||||
SHRIMPS(new Food(new int[] {315}, new HealingEffect(3))),
|
||||
COOKED_CHICKEN(new Food(new int[] {2140}, new HealingEffect(3))),
|
||||
COOKED_RABBIT(new Food(new int[] {3228}, new HealingEffect(5))),
|
||||
ANCHOVIES(new Food(new int[] {319}, new HealingEffect(1))),
|
||||
SARDINE(new Food(new int[] {325}, new HealingEffect(4))),
|
||||
POISON_KARAMBWAN(new Food(new int[] {3146}, new PoisonKarambwanEffect())),
|
||||
UGTHANKI_MEAT(new Food(new int[] {1861}, new HealingEffect(3))),
|
||||
HERRING(new Food(new int[] {347}, new HealingEffect(5))),
|
||||
MACKEREL(new Food(new int[] {355}, new HealingEffect(6))),
|
||||
ROAST_BIRD_MEAT(new Food(new int[] {9980}, new HealingEffect(6))),
|
||||
THIN_SNAIL(new Food(new int[] {3369}, new RandomHealthEffect(5, 7))),
|
||||
TROUT(new Food(new int[] {333}, new HealingEffect(7))),
|
||||
SPIDER_ON_STICK(new Food(new int[] {6297, 6305}, new RandomHealthEffect(7, 11))),
|
||||
SPIDER_ON_SHAFT(new Food(new int[] {6299}, new HealingEffect(7))),
|
||||
ROAST_RABBIT(new Food(new int[] {7223}, new HealingEffect(7))),
|
||||
LEAN_SNAIL(new Food(new int[] {3371}, new RandomHealthEffect(6, 8))),
|
||||
COD(new Food(new int[] {339}, new HealingEffect(7))),
|
||||
PIKE(new Food(new int[] {351}, new HealingEffect(8))),
|
||||
ROAST_BEAST_MEAT(new Food(new int[] {9988}, new HealingEffect(8))),
|
||||
COOKED_CRAB_MEAT(new Food(new int[] {7521, 7523, 7524, 7525, 7526}, new HealingEffect(2))),
|
||||
FAT_SNAIL(new Food(new int[] {3373}, new RandomHealthEffect(7, 9))),
|
||||
SALMON(new Food(new int[] {329}, new HealingEffect(9))),
|
||||
SLIMY_EEL(new Food(new int[] {3381}, new RandomHealthEffect(6, 10))),
|
||||
TUNA(new Food(new int[] {361}, new HealingEffect(10))),
|
||||
COOKED_KARAMBWAN(new Food(new int[] {3144}, new HealingEffect(18)), true),
|
||||
COOKED_CHOMPY(new Food(new int[] {2878}, new HealingEffect(10))),
|
||||
RAINBOW_FISH(new Food(new int[] {10136}, new HealingEffect(11))),
|
||||
CAVE_EEL(new Food(new int[] {5003}, new RandomHealthEffect(8, 12))),
|
||||
LOBSTER(new Food(new int[] {379}, new HealingEffect(12))),
|
||||
COOKED_JUBBLY(new Food(new int[] {7568}, new HealingEffect(15))),
|
||||
BASS(new Food(new int[] {365}, new HealingEffect(13))),
|
||||
SWORDFISH(new Food(new int[] {373}, new HealingEffect(14))),
|
||||
LAVA_EEL(new Food(new int[] {2149}, new HealingEffect(11))),
|
||||
MONKFISH(new Food(new int[] {7946}, new HealingEffect(16))),
|
||||
SHARK(new Food(new int[] {385}, new HealingEffect(20))),
|
||||
SEA_TURTLE(new Food(new int[] {397}, new HealingEffect(21))),
|
||||
MANTA_RAY(new Food(new int[] {391}, new HealingEffect(22))),
|
||||
KARAMBWANJI(new Food(new int[] {3151}, new HealingEffect(3))),
|
||||
STUFFED_SNAKE(new Food(new int[] {7579}, new HealingEffect(20), "You eat the stuffed snake-it's quite a meal! It tastes like chicken.")),
|
||||
CRAYFISH(new Food(new int[] {13433}, new HealingEffect(1))),
|
||||
GIANT_FROG_LEGS(new Food(new int [] {4517}, new HealingEffect(6))),
|
||||
|
||||
/** Breads */
|
||||
BREAD(new Food(new int[] {2309}, new HealingEffect(5))),
|
||||
BAGUETTE(new Food(new int[] {6961}, new HealingEffect(6))),
|
||||
|
||||
/** Sandwiches */
|
||||
TRIANGLE_SANDWICH(new Food(new int[] {6962}, new HealingEffect(6))),
|
||||
SQUARE_SANDWICH(new Food(new int[] {6965}, new HealingEffect(6))),
|
||||
SEAWEED_SANDWICH(new FakeConsumable(3168, new String[] {"You really, really do not want to eat that."})),
|
||||
FROGBURGER(new Food(new int[] {10962}, new HealingEffect(2))),
|
||||
|
||||
/** Kebabs */
|
||||
UGTHANKI_KEBAB(new Food(new int[] {1883}, new UgthankiKebabEffect())),
|
||||
UGTHANKI_KEBAB_SMELLING(new Food(new int[] {1885}, new SmellingUgthankiKebabEffect())),
|
||||
KEBAB(new Food(new int[] {1971}, new KebabEffect())),
|
||||
SUPER_KEBAB(new Food(new int[] {4608}, new SuperKebabEffect())),
|
||||
|
||||
/** Pies */
|
||||
REDBERRY_PIE(new HalfableFood(new int[] {2325, 2333, 2313}, new HealingEffect(5))),
|
||||
MEAT_PIE(new HalfableFood(new int[] {2327, 2331, 2313}, new HealingEffect(6))),
|
||||
APPLE_PIE(new HalfableFood(new int[] {2323, 2335, 2313}, new HealingEffect(7))),
|
||||
GARDEN_PIE(new HalfableFood(new int[] {7178, 7180, 2313}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.FARMING, 3, 0)))),
|
||||
FISH_PIE(new HalfableFood(new int[] {7188, 7190, 2313}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.FISHING, 3, 0)))),
|
||||
ADMIRAL_PIE(new HalfableFood(new int[] {7198, 7200, 2313}, new MultiEffect(new HealingEffect(8), new SkillEffect(Skills.FISHING, 5, 0)))),
|
||||
WILD_PIE(new HalfableFood(new int[] {7208, 7210, 2313}, new MultiEffect(new SkillEffect(Skills.SLAYER, 5, 0), new SkillEffect(Skills.RANGE, 4, 0), new HealingEffect(11)))),
|
||||
SUMMER_PIE(new HalfableFood(new int[] {7218, 7220, 2313}, new MultiEffect(new HealingEffect(11), new SkillEffect(Skills.AGILITY, 5, 0), new EnergyEffect(10)))),
|
||||
|
||||
/** Stews */
|
||||
STEW(new Food(new int[] {2003, 1923}, new HealingEffect(11))),
|
||||
SPICY_STEW(new Food(new int[] {7479, 1923}, new HealingEffect(11))),
|
||||
CURRY(new Food(new int[] {2011, 1923}, new HealingEffect(19))),
|
||||
BANANA_STEW(new Food(new int[] {4016, 1923}, new HealingEffect(11))),
|
||||
|
||||
/** Pizzas */
|
||||
PLAIN_PIZZA(new HalfableFood(new int[] {2289, 2291}, new HealingEffect(7))),
|
||||
MEAT_PIZZA(new HalfableFood(new int[] {2293, 2295}, new HealingEffect(8))),
|
||||
ANCHOVY_PIZZA(new HalfableFood(new int[] {2297, 2299}, new HealingEffect(9))),
|
||||
PINEAPPLE_PIZZA(new HalfableFood(new int[] {2301, 2303}, new HealingEffect(11))),
|
||||
|
||||
/** Cakes */
|
||||
CAKE(new Cake(new int[] {1891, 1893, 1895}, new HealingEffect(4), "You eat part of the cake.", "You eat some more cake.", "You eat the slice of cake.")),
|
||||
CHOCOLATE_CAKE(new Cake(new int[] {1897, 1899, 1901}, new HealingEffect(5), "You eat part of the chocolate cake.", "You eat some more of the chocolate cake.", "You eat the slice of cake.")),
|
||||
ROCK_CAKE(new Food(new int[] {2379}, new RockCakeEffect(), "The rock cake resists all attempts to eat it.")),
|
||||
DWARVEN_ROCK_CAKE(new Food(new int[] {7510, 7510}, new DwarvenRockCakeEffect(), "Ow! You nearly broke a tooth!", "The rock cake resists all attempts to eat it.")),
|
||||
HOT_DWARVEN_ROCK_CAKE(new Food(new int[] {7509, 7509}, new DwarvenRockCakeEffect(), "Ow! You nearly broke a tooth!", "The rock cake resists all attempts to eat it.")),
|
||||
COOKED_FISHCAKE(new Food(new int[] {7530}, new HealingEffect(11))),
|
||||
MINT_CAKE(new Food(new int[] {9475}, new EnergyEffect(50))),
|
||||
|
||||
/** Vegetables */
|
||||
POTATO(new Food(new int[] {1942}, new HealingEffect(1), "You eat the potato. Yuck!")),
|
||||
BAKED_POTATO(new Food(new int[] {6701}, new HealingEffect(4))),
|
||||
SPICY_SAUCE(new Food(new int[] {7072, 1923}, new HealingEffect(2))),
|
||||
CHILLI_CON_CARNE(new Food(new int[] {7062, 1923}, new HealingEffect(5))),
|
||||
SCRAMBLED_EGG(new Food(new int[] {7078, 1923}, new HealingEffect(5))),
|
||||
EGG_AND_TOMATO(new Food(new int[] {7064, 1923}, new HealingEffect(8))),
|
||||
SWEET_CORN(new Food(new int[] {5988}, new MultiEffect(new HealingEffect(1), new PercentageHealthEffect(10)))),
|
||||
SWEETCORN_BOWL(new Food(new int[] {7088, 1923}, new MultiEffect(new HealingEffect(1), new PercentageHealthEffect(10)))),
|
||||
CHOPPED_TUNA(new Food(new int[] {7086, 1923}, new HealingEffect(10))),
|
||||
CHOPPED_ONION(new Food(new int[] {1871, 1923}, new HealingEffect(1))),
|
||||
POTATO_WITH_BUTTER(new Food(new int[] {6703}, new HealingEffect(7))),
|
||||
CHILLI_POTATO(new Food(new int[] {7054}, new HealingEffect(14))),
|
||||
FRIED_ONIONS(new Food(new int[] {7084, 1923}, new HealingEffect(5))),
|
||||
FRIED_MUSHROOMS(new Food(new int[] {7082, 1923}, new HealingEffect(5))),
|
||||
POTATO_WITH_CHEESE(new Food(new int[] {6705}, new HealingEffect(16))),
|
||||
EGG_POTATO(new Food(new int[] {7056}, new HealingEffect(11))),
|
||||
MUSHROOMS_AND_ONIONS(new Food(new int[] {7066, 1923}, new HealingEffect(11))),
|
||||
MUSHROOM_POTATO(new Food(new int[] {7058}, new HealingEffect(20))),
|
||||
TUNA_AND_CORN(new Food(new int[] {7068, 1923}, new HealingEffect(13))),
|
||||
TUNA_POTATO(new Food(new int[] {7060}, new HealingEffect(22))),
|
||||
ONION(new Food(new int[] {1957}, new HealingEffect(1), "It's always sad to see a grown man/woman cry.")),
|
||||
CABBAGE(new Food(new int[] {1965}, new HealingEffect(1), "You eat the cabbage. Yuck!")),
|
||||
DRAYNOR_CABBAGE(new Food(new int[] {1967}, new DraynorCabbageEffect(), "You eat the cabbage.", "It seems to taste nicer than normal.")),
|
||||
EVIL_TURNIP(new Food(new int[] {12134, 12136, 12138}, new HealingEffect(6))),
|
||||
SPINACH_ROLL(new Food(new int[] {1969}, new HealingEffect(2))),
|
||||
|
||||
/** Dairies */
|
||||
POT_OF_CREAM(new Food(new int[] {2130}, new HealingEffect(1))),
|
||||
CHEESE(new Food(new int[] {1985}, new HealingEffect(2))),
|
||||
CHOCOLATEY_MILK(new Drink(new int[] {1977, 1925}, new HealingEffect(4))),
|
||||
|
||||
/** Fruits */
|
||||
BANANA(new Food(new int[] {1963}, new HealingEffect(2))),
|
||||
SLICED_BANANA(new Food(new int[] {3162}, new HealingEffect(2))),
|
||||
RED_BANANA(new Food(new int[] {7572}, new HealingEffect(5), "You eat the red banana. It's tastier than your average banana.")),
|
||||
SLICED_RED_BANANA(new Food(new int[] {7574}, new HealingEffect(5), "You eat the sliced red banana. Yum.")),
|
||||
ORANGE(new Food(new int[] {2108}, new HealingEffect(2))),
|
||||
ORANGE_CHUNKS(new Food(new int[] {2110}, new HealingEffect(2))),
|
||||
ORANGE_SLICES(new Food(new int[] {2112}, new HealingEffect(2))),
|
||||
PAPAYA_FRUIT(new Food(new int[] {5972}, new MultiEffect(new EnergyEffect(5), new HealingEffect(8)))),
|
||||
TENTI_PINEAPPLE(new FakeConsumable(1851, new String[] {"Try using a knife to slice it into pieces."})),
|
||||
PINEAPPLE(new FakeConsumable(2114, new String[] {"Try using a knife to slice it into pieces."})),
|
||||
PINEAPPLE_CHUNKS(new Food(new int[] {2116}, new HealingEffect(2))),
|
||||
PINEAPPLE_RING(new Food(new int[] {2118}, new HealingEffect(2))),
|
||||
DWELLBERRIES(new Food(new int[] {2126}, new HealingEffect(2))),
|
||||
JANGERBERRIES(new Food(new int[] {247}, new MultiEffect(new SkillEffect(Skills.ATTACK, 2, 0), new SkillEffect(Skills.STRENGTH, 1, 0), new PrayerEffect(1, 0), new SkillEffect(Skills.DEFENCE, -1, 0)), "You eat the jangerberries.", "They taste very bitter.")),
|
||||
STRAWBERRY(new Food(new int[] {5504}, new MultiEffect(new HealingEffect(1), new PercentageHealthEffect(6)))),
|
||||
TOMATO(new Food(new int[] {1982}, new HealingEffect(2))),
|
||||
WATERMELON(new FakeConsumable(5982, new String[] {"You can't eat it whole; maybe you should cut it up."})),
|
||||
WATERMELON_SLICE(new Food(new int[] {5984}, new PercentageHealthEffect(5))),
|
||||
LEMON(new Food(new int[] {2102}, new HealingEffect(2))),
|
||||
LEMON_CHUNKS(new Food(new int[] {2104}, new HealingEffect(2))),
|
||||
LEMON_SLICES(new Food(new int[] {2106}, new HealingEffect(2))),
|
||||
LIME(new Food(new int[] {2120}, new HealingEffect(2))),
|
||||
LIME_CHUNKS(new Food(new int[] {2122}, new HealingEffect(2))),
|
||||
LIME_SLICES(new Food(new int[] {2124}, new HealingEffect(2))),
|
||||
PEACH(new Food(new int[] {6883}, new HealingEffect(8))),
|
||||
WHITE_TREE_FRUIT(new Food(new int[] {6469}, new MultiEffect(new RandomEnergyEffect(5, 10), new HealingEffect(3)))),
|
||||
STRANGE_FRUIT(new Food(new int[] {464}, new MultiEffect(new RemoveTimerEffect("poison"), new EnergyEffect(30)))),
|
||||
|
||||
/** Gnome Cooking */
|
||||
TOAD_CRUNCHIES(new Food(new int[] {2217}, new HealingEffect(8))),
|
||||
PREMADE_TD_CRUNCH(new Food(new int[] {2243}, new HealingEffect(8))),
|
||||
SPICY_CRUNCHIES(new Food(new int[] {2213}, new HealingEffect(7))),
|
||||
PREMADE_SY_CRUNCH(new Food(new int[] {2241}, new HealingEffect(7))),
|
||||
WORM_CRUNCHIES(new Food(new int[] {2205}, new HealingEffect(8))),
|
||||
PREMADE_WM_CRUNC(new Food(new int[] {2237}, new HealingEffect(8))),
|
||||
CHOCCHIP_CRUNCHIES(new Food(new int[] {2209}, new HealingEffect(7))),
|
||||
PREMADE_CH_CRUNCH(new Food(new int[] {2239}, new HealingEffect(7))),
|
||||
FRUIT_BATTA(new Food(new int[] {2277}, new HealingEffect(11))),
|
||||
PREMADE_FRT_BATTA(new Food(new int[] {2225}, new HealingEffect(11))),
|
||||
TOAD_BATTA(new Food(new int[] {2255}, new HealingEffect(11))),
|
||||
PREMADE_TD_BATTA(new Food(new int[] {2221}, new HealingEffect(11))),
|
||||
WORM_BATTA(new Food(new int[] {2253}, new HealingEffect(11))),
|
||||
PREMADE_WM_BATTA(new Food(new int[] {2219}, new HealingEffect(11))),
|
||||
VEGETABLE_BATTA(new Food(new int[] {2281}, new HealingEffect(11))),
|
||||
PREMADE_VEG_BATTA(new Food(new int[] {2227}, new HealingEffect(11))),
|
||||
CHEESE_AND_TOMATOES_BATTA(new Food(new int[] {2259}, new HealingEffect(11))),
|
||||
PREMADE_CT_BATTA(new Food(new int[] {2223}, new HealingEffect(11))),
|
||||
WORM_HOLE(new Food(new int[] {2191}, new HealingEffect(12))),
|
||||
PREMADE_WORM_HOLE(new Food(new int[] {2233}, new HealingEffect(12))),
|
||||
VEG_BALL(new Food(new int[] {2195}, new HealingEffect(12))),
|
||||
PREMADE_VEG_BALL(new Food(new int[] {2235}, new HealingEffect(12))),
|
||||
TANGLED_TOADS_LEGS(new Food(new int[] {2187}, new HealingEffect(15))),
|
||||
PREMADE_TTL(new Food(new int[] {2231}, new HealingEffect(15))),
|
||||
CHOCOLATE_BOMB(new Food(new int[] {2195}, new HealingEffect(15))),
|
||||
PREMADE_CHOC_BOMB(new Food(new int[] {2229}, new HealingEffect(15))),
|
||||
TOAD_LEGS(new Food(new int[] {2152}, new HealingEffect(3))),
|
||||
KING_WORM(new Food(new int[] {2162}, new HealingEffect(2))),
|
||||
|
||||
/** Ales */
|
||||
ASGOLDIAN_ALE(new FakeConsumable(7508, new String[] {"I don't think I'd like gold in beer thanks. Leave it for the dwarves."})),
|
||||
ASGARNIAN_ALE(new Drink(new int[] {1905, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
ASGARNIAN_ALE_POH(new Drink(new int[] {7744, 7742}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
ASGARNIAN_ALE_KEG(new Drink(new int[] {5785, 5783, 5781, 5779, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
ASGARNIAN_ALE_M(new Drink(new int[] {5739, 1919}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
ASGARNIAN_ALE_M_KEG(new Drink(new int[] {5865, 5863, 5861, 5859, 5769}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289), "You drink the ale. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
AXEMANS_FOLLY(new Drink(new int[] {5751, 1919}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 1, 0), new HealingEffect(1), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
AXEMANS_FOLLY_KEG(new Drink(new int[] {5825, 5823, 5821, 5819, 5769}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 1, 0), new HealingEffect(1), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.ATTACK, -3, 0)), new Animation(2289))),
|
||||
AXEMANS_FOLLY_M(new Drink(new int[] {5753, 1919}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 2, 0), new HealingEffect(2), new SkillEffect(Skills.STRENGTH, -4, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
AXEMANS_FOLLY_M_KEG(new Drink(new int[] {5905, 5903, 5901, 5899, 5769}, new MultiEffect(new SkillEffect(Skills.WOODCUTTING, 2, 0), new HealingEffect(2), new SkillEffect(Skills.STRENGTH, -4, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))),
|
||||
BANDITS_BREW(new Drink(new int[] {4627, 1919}, new MultiEffect(new SkillEffect(Skills.THIEVING, 1, 0), new SkillEffect(Skills.ATTACK, 1, 0), new SkillEffect(Skills.STRENGTH, -1, 0), new SkillEffect(Skills.DEFENCE, -6, 0), new HealingEffect(1)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
BEER(new Drink(new int[] {1917, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 0, 0.04), new SkillEffect(Skills.ATTACK, 0, -0.07)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
BEER_POH(new Drink(new int[] {7740, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 0, 0.04), new SkillEffect(Skills.ATTACK, 0, -0.07)), "You drink the beer. You feel slightly reinvigorated...", "...and slightly dizzy too.")),
|
||||
BEER_TANKARD(new Drink(new int[] {3803, 3805}, new MultiEffect(new SkillEffect(Skills.ATTACK, -9, 0), new SkillEffect(Skills.STRENGTH, 4, 0)), "You quaff the beer. You feel slightly reinvigorated...", "...but very dizzy too.")),
|
||||
KEG_OF_BEER(new Drink(new int[] {3801}, new KegOfBeerEffect(), new Animation(1330), "You chug the keg. You feel reinvigorated...", "...but extremely drunk too.")),
|
||||
CHEFS_DELIGHT(new Drink(new int[] {5755, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
CHEFS_DELIGHT_POH(new Drink(new int[] {7754, 7742}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
CHEFS_DELIGHT_KEG(new Drink(new int[] {5833, 5831, 5829, 5827, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 1, 0.05), new HealingEffect(1), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
CHEFS_DELIGHT_M(new Drink(new int[] {5757, 1919}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)))),
|
||||
CHEFS_DELIGHT_M_KEG(new Drink(new int[] {5913, 5911, 5909, 5907, 5769}, new MultiEffect(new SkillEffect(Skills.COOKING, 2, 0.05), new HealingEffect(2), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0)), new Animation(2289))),
|
||||
CIDER(new Drink(new int[] {5763, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))))),
|
||||
CIDER_POH(new Drink(new int[] {7752, 7742}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))))),
|
||||
CIDER_KEG(new Drink(new int[] {5849, 5847, 5845, 5843, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 1, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0))), new Animation(2289))),
|
||||
MATURE_CIDER(new Drink(new int[] {5765, 1919}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))))),
|
||||
CIDER_M_KEG(new Drink(new int[] {5929, 5927, 5925, 5923, 5769}, new MultiEffect(new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.FARMING, 2, 0), new SkillEffect(Skills.ATTACK, -5, 0), new SkillEffect(Skills.STRENGTH, -5, 0))), new Animation(2289))),
|
||||
DRAGON_BITTER(new Drink(new int[] {1911, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
DRAGON_BITTER_POH(new Drink(new int[] {7748, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
DRAGON_BITTER_KEG(new Drink(new int[] {5809, 5807, 5805, 5803, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.STRENGTH, 2, 0), new SkillEffect(Skills.ATTACK, -4, 0)), new Animation(2289))),
|
||||
DRAGON_BITTER_M(new Drink(new int[] {5745, 1919}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))),
|
||||
DRAGON_BITTER_M_KEG(new Drink(new int[] {5889, 5887, 5885, 5883, 5769}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)), new Animation(2289))),
|
||||
DWARVEN_STOUT(new Drink(new int[] {1913, 1919}, new MultiEffect(new SkillEffect(Skills.MINING, 1, 0), new SkillEffect(Skills.SMITHING, 1 ,0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0), new SkillEffect(Skills.DEFENCE, -2, 0), new HealingEffect(1)), "You drink the Dwarven Stout. It tastes foul.", "It tastes pretty strong too.")),
|
||||
DWARVEN_STOUT_KEG(new Drink(new int[] {5777, 5775, 5773, 5771, 5769}, new MultiEffect(new SkillEffect(Skills.MINING, 1, 0), new SkillEffect(Skills.SMITHING, 1 ,0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0), new SkillEffect(Skills.DEFENCE, -2, 0), new HealingEffect(1)), new Animation(2289), "You drink the Dwarven Stout. It tastes foul.", "It tastes pretty strong too.")),
|
||||
DWARVEN_STOUT_M(new Drink(new int[] {5747, 1919}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)), "You drink the Dwarven Stout. It tastes foul.", "It tastes pretty strong too.")),
|
||||
DWARVEN_STOUT_M_KEG(new Drink(new int[] {5857, 5855, 5853, 5851, 5769}, new MultiEffect(new SkillEffect(Skills.MINING, 2, 0), new SkillEffect(Skills.SMITHING, 2 ,0), new SkillEffect(Skills.ATTACK, -7, 0), new SkillEffect(Skills.STRENGTH, -7, 0), new SkillEffect(Skills.DEFENCE, -7, 0), new HealingEffect(1)), new Animation(2289), "You drink the Dwarven Stout. It tastes foul.", "It tastes pretty strong too.")),
|
||||
GREENMANS_ALE(new Drink(new int[] {1909, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)))),
|
||||
GREENMANS_ALE_POH(new Drink(new int[] {7746, 7742}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)))),
|
||||
GREENMANS_ALE_KEG(new Drink(new int[] {5793, 5791, 5789, 5787, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 1, 0), new SkillEffect(Skills.ATTACK, -3, 0), new SkillEffect(Skills.STRENGTH, -3, 0), new SkillEffect(Skills.DEFENCE, -3, 0)), new Animation(2289))),
|
||||
GREENMANS_ALE_M(new Drink(new int[] {5743, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
GREENMANS_ALE_M_KEG(new Drink(new int[] {5873, 5871, 5869, 5867, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.HERBLORE, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
GROG(new Drink(new int[] {1915, 1919}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -6, 0)))),
|
||||
MOONLIGHT_MEAD(new Drink(new int[] {2955, 1919}, new HealingEffect(5), "It tastes like something just died in your mouth.")),
|
||||
MOONLIGHT_MEAD_KEG(new Drink(new int[] {5817, 5815, 5813, 5811, 5769}, new HealingEffect(5), new Animation(2289), "It tastes like something just died in your mouth.")),
|
||||
MOONLIGHT_MEAD_M(new Drink(new int[] {5749, 1919}, new HealingEffect(4), "It tastes like something just died in your mouth.")),
|
||||
MOONLIGHT_MEAD_M_KEG(new Drink(new int[] {5897, 5895, 5893, 5891, 5769}, new HealingEffect(4), new Animation(2289), "It tastes like something just died in your mouth.")),
|
||||
SLAYERS_RESPITE(new Drink(new int[] {5759, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
SLAYERS_RESPITE_KEG(new Drink(new int[] {5841, 5839, 5837, 5835, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 2, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
SLAYERS_RESPITE_M(new Drink(new int[] {5761, 1919}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 4, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)))),
|
||||
SLAYERS_RESPITE_M_KEG(new Drink(new int[] {5841, 5839, 5837, 5835, 5769}, new MultiEffect(new HealingEffect(1), new SkillEffect(Skills.SLAYER, 4, 0), new SkillEffect(Skills.ATTACK, -2, 0), new SkillEffect(Skills.STRENGTH, -2, 0)), new Animation(2289))),
|
||||
WIZARDS_MIND_BOMB(new Drink(new int[] {1907, 1919}, new WizardsMindBombEffect(), "You drink the Wizard's Mind Bomb.", "You feel very strange.")),
|
||||
WIZARDS_MIND_BOMB_KEG(new Drink(new int[] {5801, 5799, 5797, 5795, 5769}, new WizardsMindBombEffect(), new Animation(2289), "You drink the Wizard's Mind Bomb.", "You feel very strange.")),
|
||||
MATURE_WMB(new Drink(new int[] {5741, 1919}, new MatureWmbEffect(), "You drink the mature Wizard's Mind Bomb.", "You feel very strange.")),
|
||||
MATURE_WMB_KEG(new Drink(new int[] {5881, 5879, 5877, 5875, 5769}, new MatureWmbEffect(), new Animation(2289), "You drink the mature Wizard's Mind Bomb.", "You feel very strange.")),
|
||||
|
||||
/** Cocktails */
|
||||
FRUIT_BLAST(new Drink(new int[] {2084, 2026}, new HealingEffect(9))),
|
||||
PREMADE_FR_BLAST(new Drink(new int[] {2034, 2026}, new HealingEffect(9))),
|
||||
CRAFTED_FR_BLAST(new Drink(new int[] {9514, 2026}, new HealingEffect(9))),
|
||||
PINEAPPLE_PUNCH(new Drink(new int[] {2048, 2026}, new HealingEffect(9), "You drink the cocktail. It tastes great.")),
|
||||
PREMADE_P_PUNCH(new Drink(new int[] {2036, 2026}, new HealingEffect(9), "You drink the cocktail. It tastes great.")),
|
||||
CRAFTED_P_PUNCH(new Drink(new int[] {9512, 2026}, new HealingEffect(9))),
|
||||
WIZARD_BLIZZARD(new Drink(new int[] {2054, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_WIZ_BLZD(new Drink(new int[] {2040, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
CRAFTED_WIZ_BLZD(new Drink(new int[]{9508, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 6, 0),new SkillEffect(Skills.ATTACK, -4, 0 )))),
|
||||
SHORT_GREEN_GUY(new Drink(new int[] {2080, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 4, 0), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
PREMADE_SGG(new Drink(new int[] {2038, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 4, 0), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
CRAFTED_SGG(new Drink(new int[]{9510, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 4, 0), new SkillEffect(Skills.ATTACK, -3,0)))),
|
||||
DRUNK_DRAGON(new Drink(new int[] {2092, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_DR_DRAGON(new Drink(new int[] {2032, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
CRAFTED_DR_DRAGON(new Drink(new int[] {9516, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4,0)))),
|
||||
CHOC_SATURDAY(new Drink(new int[] {2074, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_CHOC_SDY(new Drink(new int[] {2030, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
CRAFTED_CHOC_SDY(new Drink(new int[] {9518, 2026}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 7,0), new SkillEffect(Skills.ATTACK, -4,0)))),
|
||||
BLURBERRY_SPECIAL(new Drink(new int[] {2064, 2026}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
PREMADE_BLURB_SP(new Drink(new int[] {2028, 2026}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.STRENGTH, 6, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
CRAFTED_BLURB_SP(new Drink(new int[] {9520, 2026}, new MultiEffect(new HealingEffect(6), new SkillEffect(Skills.STRENGTH,6,0), new SkillEffect(Skills.ATTACK, -4,0)))),
|
||||
|
||||
/** Bottled Drinks */
|
||||
KARAMJAN_RUM(new Drink(new int[] {431}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 5, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
BRAINDEATH_RUM(new Drink(new int[] {7157}, new MultiEffect(new SkillEffect(Skills.DEFENCE, 0, -0.1), new SkillEffect(Skills.ATTACK, 0, -0.05), new SkillEffect(Skills.PRAYER, 0, -0.05), new SkillEffect(Skills.RANGE, 0, -0.05), new SkillEffect(Skills.MAGIC, 0, -0.05), new SkillEffect(Skills.HERBLORE, 0, -0.05), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.MINING, 1, 0)), "With a sense of impending doom you drink the 'rum'. You try very hard not to die.")),
|
||||
RUM_TROUBLE_BREWING_RED(new Drink(new int[] {8940, 8940}, new TroubleBrewingRumEffect("Oh gods! It tastes like burning!"), new Animation(9605))),
|
||||
RUM_TROUBLE_BREWING_BLUE(new Drink(new int[] {8941, 8941}, new TroubleBrewingRumEffect("My Liver! My Liver is melting!"), new Animation(9604))),
|
||||
VODKA(new Drink(new int[] {2015}, new MultiEffect(new HealingEffect(2), new SkillEffect(Skills.ATTACK, -4, 0), new SkillEffect(Skills.STRENGTH, 4, 0)))),
|
||||
GIN(new Drink(new int[] {2019}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 1, 0), new SkillEffect(Skills.ATTACK, 4, 0), new RandomHealthEffect(3, 4)))),
|
||||
BRANDY(new Drink(new int[] {2021}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.ATTACK, 4, 0)))),
|
||||
WHISKY(new Drink(new int[] {2017}, new MultiEffect(new HealingEffect(5), new SkillEffect(Skills.STRENGTH, 3, 0), new SkillEffect(Skills.ATTACK, -4, 0)))),
|
||||
BOTTLE_OF_WINE(new Drink(new int[] {7919, 7921}, new MultiEffect(new HealingEffect(14), new SkillEffect(Skills.ATTACK, -3, 0)))),
|
||||
|
||||
/** Wine */
|
||||
JUG_OF_WINE(new Drink(new int[] {1993, 1935}, new MultiEffect(new HealingEffect(11), new SkillEffect(Skills.ATTACK, -2, 0)))),
|
||||
HALF_FULL_WINE_JUG(new Drink(new int[] {1989, 1935}, new HealingEffect(7))),
|
||||
JUG_OF_BAD_WINE(new Drink(new int[] {1991,1935}, new SkillEffect(Skills.ATTACK, -3, 0))),
|
||||
|
||||
/** Tea */
|
||||
CUP_OF_TEA(new Drink(new int[] {712, 1980}, new MultiEffect(new HealingEffect(3), new SkillEffect(Skills.ATTACK, 3, 0)), "Aaah, nothing like a nice cuppa tea!")),
|
||||
NETTLE_WATER(new Drink(new int[] {Items.NETTLE_WATER_4237, Items.BOWL_1923}, new HealingEffect((1)))),
|
||||
CUP_OF_TEA_NETTLE(new Drink(new int[] {4242, 1980}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
|
||||
CUP_OF_TEA_MILKY_NETTLE(new Drink(new int[] {4243, 1980}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
|
||||
CUP_OF_TEA_NETTLE_PORCELAIN(new Drink(new int[] {4245, 4244}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
|
||||
CUP_OF_TEA_MILKY_NETTLE_PORCELAIN(new Drink(new int[] {4246, 4244}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
|
||||
NETTLE_TEA(new Drink(new int[] {4239, 1923}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
|
||||
NETTLE_TEA_MILKY(new Drink(new int[] {4240, 1923}, new MultiEffect(new HealingEffect(3), new EnergyEffect(10)))),
|
||||
CUP_OF_TEA_CLAY(new Drink(new int[] {7730, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_CLAY_MILKY(new Drink(new int[] {7731, 7728}, new SkillEffect(Skills.CONSTRUCTION, 1, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_WHITE(new Drink(new int[] {7733, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_WHITE_MILKY(new Drink(new int[] {7734, 7732}, new SkillEffect(Skills.CONSTRUCTION, 2, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_GOLD(new Drink(new int[] {7736, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0), "You feel refreshed and ready for more building.")),
|
||||
CUP_OF_TEA_GOLD_MILKY(new Drink(new int[] {7737, 7735}, new SkillEffect(Skills.CONSTRUCTION, 3, 0), "You feel refreshed and ready for more building.")),
|
||||
|
||||
/** Miscellaneous */
|
||||
CHOCOLATE_BAR(new Food(new int[] {1973}, new HealingEffect(3))),
|
||||
PURPLE_SWEETS(new Food(new int[] {4561}, new HealingEffect(0))),
|
||||
PURPLE_SWEETS_STACKABLE(new Food(new int[] {10476}, new MultiEffect(new EnergyEffect(10), new RandomHealthEffect(1, 3)), "The sugary goodness heals some energy.", "The sugary goodness is yummy.")),
|
||||
FIELD_RATION(new Food(new int[] {7934}, new HealingEffect(10))),
|
||||
ROLL(new Food(new int[] {6963}, new HealingEffect(6))),
|
||||
TCHIKI_MONKEY_NUTS(new Food(new int[] {7573}, new HealingEffect(5), "You eat the Tchiki monkey nuts. They taste nutty.")),
|
||||
TCHIKI_MONKEY_PASTE(new Food(new int[] {7575}, new HealingEffect(5), "You eat the Tchiki monkey nut paste. It sticks to the roof of your mouth.")),
|
||||
OOMLIE_WRAP(new Food(new int[] {Items.COOKED_OOMLIE_WRAP_2343}, new MultiEffect(new HealingEffect(14), new AchievementEffect(DiaryType.KARAMJA, 2, 2)))),
|
||||
ROE(new Food(new int[]{11324}, new HealingEffect(3))),
|
||||
CAVIAR(new Food(new int[]{11326}, new HealingEffect(5))),
|
||||
EQUA_LEAVES(new Food(new int[]{2128}, new HealingEffect(1))),
|
||||
CHOC_ICE(new Food(new int[]{6794}, new HealingEffect(7))),
|
||||
EDIBLE_SEAWEED(new Food(new int[] {403}, new HealingEffect(4))),
|
||||
FROG_SPAWN(new Food(new int[] {5004}, new RandomHealthEffect(3, 7), "You eat the frogspawn. Yuck.")),
|
||||
|
||||
/** Special Events */
|
||||
PUMPKIN(new Food(new int[] {1959}, new HealingEffect(14))),
|
||||
EASTER_EGG(new Food(new int[] {1961}, new HealingEffect(14))),
|
||||
|
||||
/** Potions */
|
||||
STRENGTH(new Potion(new int[] {113, 115, 117, 119}, new SkillEffect(Skills.STRENGTH, 3, 0.1))),
|
||||
ATTACK(new Potion(new int[] {2428, 121, 123, 125}, new SkillEffect(Skills.ATTACK, 3, 0.1))),
|
||||
DEFENCE(new Potion(new int[] {2432, 133, 135, 137}, new SkillEffect(Skills.DEFENCE, 3, 0.1))),
|
||||
RANGING(new Potion(new int[] {2444, 169, 171, 173}, new SkillEffect(Skills.RANGE, 4, 0.1))),
|
||||
MAGIC(new Potion(new int[] {3040, 3042, 3044, 3046}, new SkillEffect(Skills.MAGIC, 4, 0))),
|
||||
SUPER_STRENGTH(new Potion(new int[] {2440, 157, 159, 161}, new SkillEffect(Skills.STRENGTH, 5, 0.15))),
|
||||
SUPER_ATTACK(new Potion(new int[] {2436, 145, 147, 149}, new SkillEffect(Skills.ATTACK, 5, 0.15))),
|
||||
SUPER_DEFENCE(new Potion(new int[] {2442, 163, 165, 167}, new SkillEffect(Skills.DEFENCE, 5, 0.15))),
|
||||
ANTIPOISON(new Potion(new int[] {2446, 175, 177, 179}, new AddTimerEffect("poison:immunity", secondsToTicks(90)))),
|
||||
ANTIPOISON_(new Potion(new int[] {5943, 5945, 5947, 5949}, new AddTimerEffect("poison:immunity", minutesToTicks(9)))),
|
||||
ANTIPOISON__(new Potion(new int[] {5952, 5954, 5956, 5958}, new AddTimerEffect("poison:immunity", minutesToTicks(12)))),
|
||||
SUPER_ANTIP(new Potion(new int[] {2448, 181, 183, 185}, new AddTimerEffect("poison:immunity", minutesToTicks(6)))),
|
||||
RELICYM(new Potion(new int[] {4842, 4844, 4846, 4848}, new CureDiseaseEffect())),
|
||||
AGILITY(new Potion(new int[] {3032, 3034, 3036, 3038}, new SkillEffect(Skills.AGILITY, 3, 0))),
|
||||
HUNTER(new Potion(new int[] {9998, 10000, 10002, 10004}, new SkillEffect(Skills.HUNTER, 3, 0))),
|
||||
RESTORE(new Potion(new int[] {2430, 127, 129, 131}, new RestoreEffect(10, 0.3))),
|
||||
SARA_BREW(new Potion(new int[] {6685, 6687, 6689, 6691}, new MultiEffect(new PercentHeal(2, .15), new SkillEffect(Skills.ATTACK, 0, -0.10), new SkillEffect(Skills.STRENGTH, 0, -0.10), new SkillEffect(Skills.MAGIC, 0, -0.10), new SkillEffect(Skills.RANGE, 0, -0.10), new SkillEffect(Skills.DEFENCE, 2, 0.2)))),
|
||||
SUMMONING(new Potion(new int[] {12140, 12142, 12144, 12146}, new MultiEffect(new RestoreSummoningSpecial(), new SummoningEffect(7, 0.25)))),
|
||||
COMBAT(new Potion(new int[] {9739, 9741, 9743, 9745}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, .1), new SkillEffect(Skills.ATTACK, 3, .1)))),
|
||||
ENERGY(new Potion(new int[] {3008, 3010, 3012, 3014}, new EnergyEffect(10))),
|
||||
FISHING(new Potion(new int[] {2438, 151, 153, 155}, new SkillEffect(Skills.FISHING, 3, 0))),
|
||||
PRAYER(new Potion(new int[] {2434, 139, 141, 143}, new PrayerEffect(7, 0.25))),
|
||||
SUPER_RESTO(new Potion(new int[] {3024, 3026, 3028, 3030}, new RestoreEffect(8, 0.25, true))),
|
||||
ZAMMY_BREW(new Potion(new int[] {2450, 189, 191, 193}, new MultiEffect(new DamageEffect(10, true, 2), new SkillEffect(Skills.ATTACK, 2, 0.20), new SkillEffect(Skills.STRENGTH, 2, 0.12), new SkillEffect(Skills.DEFENCE, -2, -0.10), new PrayerEffect(0.0, 0.10, true)))),
|
||||
ANTIFIRE(new Potion(new int[] {2452, 2454, 2456, 2458}, new AddTimerEffect("dragonfire:immunity", 600, true))),
|
||||
GUTH_REST(new Potion(new int[] {4417, 4419, 4421, 4423}, new MultiEffect(new RemoveTimerEffect("poison"), new EnergyEffect(5), new HealingEffect(5)))),
|
||||
MAGIC_ESS(new Potion(new int[] {9021, 9022, 9023, 9024}, new SkillEffect(Skills.MAGIC,3,0))),
|
||||
SANFEW(new Potion(new int[] {10925, 10927, 10929, 10931}, new MultiEffect(new RestoreEffect(8,0.25, true), new AddTimerEffect("poison:immunity", secondsToTicks(90)), new RemoveTimerEffect("disease")))),
|
||||
SUPER_ENERGY(new Potion(new int[] {3016, 3018, 3020, 3022}, new EnergyEffect(20))),
|
||||
BLAMISH_OIL(new FakeConsumable(1582, new String[] {"You know... I'd really rather not."})),
|
||||
|
||||
/** Barbarian Mixes */
|
||||
PRAYERMIX(new BarbarianMix(new int[] {11465, 11467}, new MultiEffect(new PrayerEffect(7, 0.25), new HealingEffect(6)))),
|
||||
ZAMMY_MIX(new BarbarianMix(new int[]{11521, 11523}, new MultiEffect(new ZamorakMixEffect(), new SkillEffect(Skills.ATTACK, 2, 0.20), new SkillEffect(Skills.STRENGTH, 2, 0.12), new SkillEffect(Skills.DEFENCE, -2, -0.10)))),
|
||||
ATT_MIX(new BarbarianMix(new int[] {11429, 11431}, new MultiEffect(new SkillEffect(Skills.ATTACK, 3, 0.1), new HealingEffect(3)))),
|
||||
ANTIP_MIX(new BarbarianMix(new int[] {11433, 11435}, new MultiEffect(new AddTimerEffect("poison:immunity", secondsToTicks(90)), new HealingEffect(3)))),
|
||||
RELIC_MIX(new BarbarianMix(new int[] {11437, 11439}, new MultiEffect(new CureDiseaseEffect(), new HealingEffect(3)))),
|
||||
STR_MIX(new BarbarianMix(new int[] {11443, 11441}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 3, 0.1), new HealingEffect(3)))),
|
||||
RESTO_MIX(new BarbarianMix(new int[] {11449, 11451}, new MultiEffect(new RestoreEffect(10, 0.3), new HealingEffect(3)))),
|
||||
SUPER_RESTO_MIX(new BarbarianMix(new int [] {11493, 11495}, new MultiEffect(new RestoreEffect(8,0.25), new PrayerEffect(8, 0.25), new SummoningEffect(8, 0.25), new HealingEffect(6)))),
|
||||
ENERGY_MIX(new BarbarianMix(new int[] {11453, 11455}, new MultiEffect(new EnergyEffect(10), new HealingEffect(3)))),
|
||||
DEF_MIX(new BarbarianMix(new int[] {11457, 11459}, new MultiEffect(new SkillEffect(Skills.DEFENCE, 3, 0.1), new HealingEffect(6)))),
|
||||
AGIL_MIX(new BarbarianMix(new int[] {11461, 11463}, new MultiEffect(new SkillEffect(Skills.AGILITY, 3, 0), new HealingEffect(6)))),
|
||||
COMBAT_MIX(new BarbarianMix(new int[] {11445, 11447}, new MultiEffect(new SkillEffect(Skills.ATTACK, 3, 0.1), new SkillEffect(Skills.STRENGTH, 3, 0.1), new HealingEffect(6)))),
|
||||
SUPER_ATT_MIX(new BarbarianMix(new int[] {11469, 11471}, new MultiEffect(new SkillEffect(Skills.ATTACK, 5, 0.15), new HealingEffect(6)))),
|
||||
FISH_MIX(new BarbarianMix(new int[] {11477, 11479}, new MultiEffect(new SkillEffect(Skills.FISHING, 3, 0), new HealingEffect(6)))),
|
||||
SUPER_ENERGY_MIX(new BarbarianMix(new int[] {11481, 11483}, new MultiEffect(new EnergyEffect(20), new HealingEffect(6)))),
|
||||
HUNTING_MIX(new BarbarianMix(new int[] {11517, 11519}, new MultiEffect(new SkillEffect(Skills.HUNTER, 3, 0), new HealingEffect(6)))),
|
||||
SUPER_STR_MIX(new BarbarianMix(new int[] {11485, 11487}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 5, 0.15), new HealingEffect(6)))),
|
||||
ANTIDOTE_PLUS_MIX(new BarbarianMix(new int[] {11501, 11503}, new MultiEffect(new AddTimerEffect("poison:immunity", minutesToTicks(9)), new HealingEffect(6)))),
|
||||
ANTIP_SUPERMIX(new BarbarianMix(new int[] {11473, 11475}, new MultiEffect(new AddTimerEffect("poison:immunity", minutesToTicks(6)), new HealingEffect(6)))),
|
||||
ANTIFIRE_MIX(new BarbarianMix(new int[] {11505, 11507}, new MultiEffect(new AddTimerEffect("dragonfire:immunity", 600, true), new HealingEffect(6)))),
|
||||
MAGIC_ESS_MIX(new BarbarianMix(new int[] {11489, 11491}, new MultiEffect(new SkillEffect(Skills.MAGIC, 3, 0), new HealingEffect(6)))),
|
||||
SUPER_DEF_MIX(new BarbarianMix(new int[] {11497, 11499}, new MultiEffect(new SkillEffect(Skills.DEFENCE, 5, 0.15), new HealingEffect(6)))),
|
||||
RANGING_MIX(new BarbarianMix(new int[] {11509, 11511}, new MultiEffect(new SkillEffect(Skills.RANGE, 4, 0.1), new HealingEffect(6)))),
|
||||
MAGIC_MIX(new BarbarianMix(new int[] {11513, 11515}, new MultiEffect(new SkillEffect(Skills.MAGIC, 4, 0), new HealingEffect(6)))),
|
||||
|
||||
/** Stealing creation potions */
|
||||
SC_PRAYER(new Potion(new int[] {14207, 14209, 14211, 14213, 14215}, new PrayerEffect(7, 0.25))),
|
||||
SC_ENERGY(new Potion(new int[] {14217, 14219, 14221, 14223, 14225}, new EnergyEffect(20))),
|
||||
SC_ATTACK(new Potion(new int[] {14227, 14229, 14231, 14233, 14235}, new SkillEffect(Skills.ATTACK, 3, 0.2))),
|
||||
SC_STRENGTH(new Potion(new int[] {14237, 14239, 14241, 14243, 14245}, new SkillEffect(Skills.STRENGTH, 3, 0.2))),
|
||||
SC_RANGE(new Potion(new int[] {14247, 14249, 14251, 14253, 14255}, new SkillEffect(Skills.RANGE, 3, 0.1))),
|
||||
SC_DEFENCE(new Potion(new int[] {14257, 14259, 14261, 14263, 14265}, new SkillEffect(Skills.DEFENCE, 3, 0.1))),
|
||||
SC_MAGIC(new Potion(new int[] {14267, 14269, 14271, 14273, 14275}, new SkillEffect(Skills.MAGIC, 3, 0.1))),
|
||||
SC_SUMMONING(new Potion(new int[] {14277, 14279, 14281, 14283, 14285}, new SummoningEffect(7, 0.25)));
|
||||
|
||||
public static HashMap<Integer,Consumables> consumables = new HashMap<>();
|
||||
|
||||
public static ArrayList<Integer> potions = new ArrayList<>();
|
||||
|
||||
private final Consumable consumable;
|
||||
public boolean isIgnoreMainClock = false;
|
||||
|
||||
Consumables(Consumable consumable) {
|
||||
this.consumable = consumable;
|
||||
}
|
||||
Consumables(Consumable consumable, boolean isIgnoreMainClock) {this.consumable = consumable; this.isIgnoreMainClock = isIgnoreMainClock;}
|
||||
|
||||
public Consumable getConsumable() {
|
||||
return consumable;
|
||||
}
|
||||
|
||||
public static Consumables getConsumableById(final int itemId) {
|
||||
return consumables.get(itemId);
|
||||
}
|
||||
|
||||
public static void add(final Consumables consumable) {
|
||||
for (int id : consumable.consumable.getIds()) {
|
||||
consumables.putIfAbsent(id, consumable);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Static modifier used to populate search engine lists.
|
||||
*/
|
||||
static {
|
||||
for (Consumables consumable : Consumables.values()) {
|
||||
add(consumable);
|
||||
if (consumable.consumable instanceof Potion) {
|
||||
for (int pot : consumable.consumable.getIds()) {
|
||||
potions.add(pot);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.entity.player.link.diary.DiaryType;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
|
||||
public class AchievementEffect extends ConsumableEffect {
|
||||
private final DiaryType diary;
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package content.data.consumables.effects
|
||||
|
||||
import core.api.registerTimer
|
||||
import core.api.removeTimer
|
||||
import core.api.spawnTimer
|
||||
import core.game.consumable.ConsumableEffect
|
||||
import core.game.node.entity.player.Player
|
||||
|
||||
class AddTimerEffect (val identifier: String, vararg val args: Any) : ConsumableEffect() {
|
||||
override fun activate (p: Player) {
|
||||
removeTimer (p, identifier)
|
||||
val timer = spawnTimer (identifier, *args) ?: return
|
||||
registerTimer (p, timer)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package content.data.consumables.effects
|
||||
|
||||
import core.api.*
|
||||
import core.game.consumable.ConsumableEffect
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.system.timer.impl.Disease
|
||||
|
||||
class CureDiseaseEffect () : ConsumableEffect() {
|
||||
override fun activate (p: Player) {
|
||||
val existingTimer = getTimer<Disease>(p)
|
||||
if (existingTimer != null) {
|
||||
existingTimer.hitsLeft -= 9
|
||||
if (existingTimer.hitsLeft <= 0) {
|
||||
sendMessage(p, "The disease has been cured.")
|
||||
removeTimer<Disease>(p)
|
||||
}else{
|
||||
sendMessage(p,"You feel slightly better.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.combat.ImpactHandler;
|
||||
import core.game.node.entity.player.Player;
|
||||
|
||||
public class DamageEffect extends ConsumableEffect {
|
||||
final double amt;
|
||||
final boolean isPercent;
|
||||
final int baseAmount;
|
||||
|
||||
public DamageEffect(double amt, boolean isPercent) {
|
||||
this(amt, isPercent, 0);
|
||||
}
|
||||
|
||||
public DamageEffect(double amt, boolean isPercent, int baseAmount) {
|
||||
this.amt = amt;
|
||||
this.isPercent = isPercent;
|
||||
this.baseAmount = baseAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player p) {
|
||||
p.getImpactHandler().manualHit(p, -getHealthEffectValue(p), ImpactHandler.HitsplatType.NORMAL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHealthEffectValue(Player player) {
|
||||
double amount = amt;
|
||||
if (isPercent) {
|
||||
amount /= 100;
|
||||
return (int) -(amount * player.getSkills().getLifepoints() + baseAmount);
|
||||
}
|
||||
return (int) -(amt + baseAmount);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
public class DraynorCabbageEffect extends ConsumableEffect {
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class DwarvenRockCakeEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
|
||||
public class EnergyEffect extends ConsumableEffect {
|
||||
double amt;
|
||||
public EnergyEffect(int amt){
|
||||
this.amt = amt;
|
||||
}
|
||||
@Override
|
||||
public void activate(Player p) {
|
||||
p.getSettings().updateRunEnergy(-amt);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
|
||||
public class HealingEffect extends ConsumableEffect {
|
||||
int amt;
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.tools.RandomFunction;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
/**
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package content.data.consumables.effects
|
||||
|
||||
import core.game.consumable.ConsumableEffect
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.skill.Skills
|
||||
|
||||
|
||||
class KegOfBeerEffect : ConsumableEffect() {
|
||||
|
||||
override fun activate(p: Player?) {
|
||||
val effect = MultiEffect(HealingEffect(15), SkillEffect(Skills.STRENGTH, 10.0, 0.0), SkillEffect(Skills.ATTACK, -40.0, 0.0))
|
||||
effect.activate(p)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
public class MatureWmbEffect extends ConsumableEffect {
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class MultiEffect extends ConsumableEffect {
|
||||
private ConsumableEffect[] effects;
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class PercentHeal extends ConsumableEffect {
|
||||
int base = 0;
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
|
||||
public class PercentageHealthEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.combat.ImpactHandler;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class PoisonEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class PoisonKarambwanEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package content.data.consumables.effects
|
||||
|
||||
import core.api.*
|
||||
import core.game.consumable.ConsumableEffect
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.entity.skill.Skills
|
||||
import org.rs09.consts.Items
|
||||
import kotlin.math.ceil
|
||||
import kotlin.math.floor
|
||||
|
||||
class PrayerEffect @JvmOverloads constructor(var base: Double, var bonus: Double, private val roundUp: Boolean = false) : ConsumableEffect() {
|
||||
override fun activate(player: Player?) {
|
||||
if(player == null) return
|
||||
val level = getStatLevel(player, Skills.PRAYER)
|
||||
var b = bonus
|
||||
if(inInventory(player, Items.HOLY_WRENCH_6714))
|
||||
b += 0.02 // Leaving this in for futureproofing. Current update is for properly rounding down.
|
||||
val rawAmount = base + (level * b)
|
||||
val amount = if (roundUp) ceil(rawAmount) else floor(rawAmount)
|
||||
modPrayerPoints(player, amount)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.tools.RandomFunction;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class RandomEnergyEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.tools.RandomFunction;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class RandomHealthEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.tools.RandomFunction;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
|
||||
public class RandomPrayerEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.tools.RandomFunction;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class RandomSkillEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package content.data.consumables.effects
|
||||
|
||||
import core.api.*
|
||||
import core.game.consumable.ConsumableEffect
|
||||
import core.game.node.entity.player.Player
|
||||
|
||||
class RemoveTimerEffect (val identifier: String) : ConsumableEffect() {
|
||||
override fun activate (p: Player) {
|
||||
removeTimer (p, identifier)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
public class RestoreEffect extends ConsumableEffect {
|
||||
double base,bonus;
|
||||
boolean all_skills; // Except for hitpoints
|
||||
public RestoreEffect(double base, double bonus){
|
||||
this.base = base;
|
||||
this.bonus = bonus;
|
||||
this.all_skills = false;
|
||||
}
|
||||
|
||||
public RestoreEffect(double base, double bonus, boolean all_skills){
|
||||
this.base = base;
|
||||
this.bonus = bonus;
|
||||
this.all_skills = all_skills;
|
||||
}
|
||||
final int[] SKILLS = new int[] { Skills.DEFENCE, Skills.ATTACK, Skills.STRENGTH, Skills.MAGIC, Skills.RANGE };
|
||||
final int[] ALL_SKILLS = new int[]{
|
||||
Skills.ATTACK,Skills.DEFENCE, Skills.STRENGTH,Skills.RANGE,Skills.PRAYER,Skills.MAGIC, Skills.COOKING,
|
||||
Skills.WOODCUTTING,Skills.FLETCHING,Skills.FISHING,Skills.FIREMAKING,Skills.CRAFTING,Skills.SMITHING,
|
||||
Skills.MINING,Skills.HERBLORE,Skills.AGILITY,Skills.THIEVING,Skills.SLAYER,Skills.FARMING,
|
||||
Skills.RUNECRAFTING,Skills.HUNTER,Skills.CONSTRUCTION,Skills.SUMMONING };
|
||||
@Override
|
||||
public void activate(Player p) {
|
||||
Skills sk = p.getSkills();
|
||||
int[] skills = this.all_skills ? ALL_SKILLS : SKILLS;
|
||||
for(int skill : skills){
|
||||
int statL = sk.getStaticLevel(skill);
|
||||
int boost = (int) (base + (statL * bonus));
|
||||
int curL = sk.getLevel(skill);
|
||||
if(curL < statL){
|
||||
p.getSkills().updateLevel(skill, boost, statL);
|
||||
}
|
||||
if (skill == Skills.PRAYER)
|
||||
p.getSkills().incrementPrayerPoints(boost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package content.data.consumables.effects
|
||||
|
||||
import core.game.consumable.ConsumableEffect
|
||||
import core.game.node.entity.player.Player
|
||||
|
||||
class RestoreSummoningSpecial : ConsumableEffect(){
|
||||
override fun activate(p: Player) {
|
||||
val f = p.familiarManager.familiar
|
||||
f?.updateSpecialPoints(-15)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class RockCakeEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import rs09.game.world.GameWorld;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.world.GameWorld;
|
||||
|
||||
public class SetAttributeEffect extends ConsumableEffect {
|
||||
String attrString;
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
public class SkillEffect extends ConsumableEffect {
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.tools.RandomFunction;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
/**
|
||||
* According to the OSRS wiki, the smelling ugthanki kebab will usually heal nothing when eaten, but sometimes heals for 9.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
public class SummoningEffect extends ConsumableEffect {
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.tools.RandomFunction;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.system.task.Pulse;
|
||||
import core.game.world.map.Location;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class TroubleBrewingRumEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
|
||||
public class UgthankiKebabEffect extends ConsumableEffect {
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package core.game.content.consumable.effects;
|
||||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.content.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
||||
public class WizardsMindBombEffect extends ConsumableEffect {
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package content.data.consumables.effects;
|
||||
|
||||
import core.game.consumable.ConsumableEffect;
|
||||
import core.game.node.entity.combat.ImpactHandler;
|
||||
import core.game.node.entity.player.Player;
|
||||
|
||||
/**
|
||||
* The Zamorak mix shows the regular Zamorak brew hitsplat (10% of pre-drink lifepoints + 2, rounded down)
|
||||
* but also heals 6 lifepoints. The heal must be applied before the hit so the net change can never kill
|
||||
* the player, while the hitsplat still reflects the pre-heal lifepoints.
|
||||
*/
|
||||
public class ZamorakMixEffect extends ConsumableEffect {
|
||||
|
||||
@Override
|
||||
public void activate(Player p) {
|
||||
int damage = (int) (p.getSkills().getLifepoints() * 0.10 + 2);
|
||||
p.getSkills().heal(6);
|
||||
p.getImpactHandler().manualHit(p, damage, ImpactHandler.HitsplatType.NORMAL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHealthEffectValue(Player player) {
|
||||
return 6 - (int) (player.getSkills().getLifepoints() * 0.10 + 2);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package core.game.content.global;
|
||||
package content.data.skill;
|
||||
|
||||
/**
|
||||
* Handles the skillcape perks.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package core.game.node.entity.skill.gather;
|
||||
package content.data.skill;
|
||||
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.game.node.entity.skill.Skills;
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package core.game.node.entity.npc.drop;
|
||||
package content.data.tables;
|
||||
|
||||
import api.StartupListener;
|
||||
import core.api.StartupListener;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.item.WeightedChanceItem;
|
||||
import core.tools.Log;
|
||||
import core.tools.RandomFunction;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import rs09.ServerConstants;
|
||||
import rs09.game.system.SystemLogger;
|
||||
import core.ServerConstants;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
|
@ -18,7 +18,7 @@ import java.io.File;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static rs09.game.system.SystemLogger.logInfo;
|
||||
import static core.api.ContentAPIKt.log;
|
||||
|
||||
/**
|
||||
* Handles the allotment seed drop table.
|
||||
|
|
@ -57,11 +57,11 @@ public final class AllotmentSeedDropTable implements StartupListener {
|
|||
@Override
|
||||
public void startup() {
|
||||
if(ServerConstants.ASDT_DATA_PATH != null && !new File(ServerConstants.ASDT_DATA_PATH).exists()){
|
||||
SystemLogger.logErr(this.getClass(), "Can't locate ASDT file at " + ServerConstants.ASDT_DATA_PATH);
|
||||
log(this.getClass(), Log.ERR, "Can't locate ASDT file at " + ServerConstants.ASDT_DATA_PATH);
|
||||
return;
|
||||
}
|
||||
parse(ServerConstants.ASDT_DATA_PATH);
|
||||
logInfo(this.getClass(), "Initialized Allotment Seed Drop Table from " + ServerConstants.ASDT_DATA_PATH);
|
||||
log(this.getClass(), Log.FINE, "Initialized Allotment Seed Drop Table from " + ServerConstants.ASDT_DATA_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package core.game.content.global;
|
||||
package content.data.tables;
|
||||
|
||||
import org.rs09.consts.Items;
|
||||
import core.game.node.entity.npc.drop.NPCDropTables;
|
||||
|
|
@ -8,6 +8,9 @@ import core.game.node.item.GroundItemManager;
|
|||
import core.game.node.item.Item;
|
||||
import core.tools.RandomFunction;
|
||||
import core.tools.StringUtils;
|
||||
import org.rs09.consts.Sounds;
|
||||
|
||||
import static core.api.ContentAPIKt.playAudio;
|
||||
|
||||
/**
|
||||
* Represents a birds nest.
|
||||
|
|
@ -93,7 +96,7 @@ public enum BirdNest {
|
|||
*/
|
||||
public static void drop(final Player player) {
|
||||
final BirdNest nest = getRandomNest(false);
|
||||
player.getAudioManager().send(1997);
|
||||
playAudio(player, Sounds.CUCKOO_1_1997);
|
||||
GroundItemManager.create(nest.getNest(), player);
|
||||
player.getPacketDispatch().sendMessage("<col=FF0000>A bird's nest falls out of the tree.");
|
||||
}
|
||||
|
|
@ -1,96 +1,96 @@
|
|||
package core.game.node.entity.npc.drop;
|
||||
|
||||
import api.StartupListener;
|
||||
import rs09.ServerConstants;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.item.WeightedChanceItem;
|
||||
import rs09.game.system.SystemLogger;
|
||||
import core.tools.RandomFunction;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static rs09.game.system.SystemLogger.logInfo;
|
||||
|
||||
/**
|
||||
* Handles the Chaos Elemental's minor drop table. It is supposed to roll this table alongside its standard major drops on the main table.
|
||||
* @author Crash
|
||||
*/
|
||||
public final class CELEMinorTable implements StartupListener {
|
||||
|
||||
/**
|
||||
* The item id of the item representing the C. Ele minor drop table slot in a drop
|
||||
* table.
|
||||
*/
|
||||
public static final int SLOT_ITEM_ID = 799; // Crash: Item ID 799 is currently a null, blank paper note object. Unsure if used for cutscene/cutscene items, but hijacking this as C.Ele's item container as it'll never be dropped or obtained in normal gameplay.
|
||||
|
||||
/**
|
||||
* The rare drop table.
|
||||
*/
|
||||
private static final List<WeightedChanceItem> TABLE = new ArrayList<>(20);
|
||||
|
||||
|
||||
/**
|
||||
* Initialize needed objects for xml reading/writing
|
||||
*/
|
||||
static DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
static DocumentBuilder builder;
|
||||
|
||||
static {
|
||||
try {
|
||||
builder = factory.newDocumentBuilder();
|
||||
} catch (ParserConfigurationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public CELEMinorTable() throws ParserConfigurationException {}
|
||||
|
||||
@Override
|
||||
public void startup() {
|
||||
if(ServerConstants.CELEDT_DATA_PATH != null && !new File(ServerConstants.CELEDT_DATA_PATH).exists()){
|
||||
SystemLogger.logErr(this.getClass(), "Can't locate CELEDT file at " + ServerConstants.CELEDT_DATA_PATH);
|
||||
return;
|
||||
}
|
||||
parse(ServerConstants.CELEDT_DATA_PATH);
|
||||
logInfo(this.getClass(), "Loaded up Chaos Elemental drop table from " + ServerConstants.CELEDT_DATA_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the xml file for the CELEDT.
|
||||
* @param file the .xml file containing the CELEDT.
|
||||
*/
|
||||
public static void parse(String file){
|
||||
try {
|
||||
Document doc = builder.parse(file);
|
||||
|
||||
NodeList itemNodes = doc.getElementsByTagName("item");
|
||||
for(int i = 0; i < itemNodes.getLength(); i++){
|
||||
Node itemNode = itemNodes.item(i);
|
||||
if(itemNode.getNodeType() == Node.ELEMENT_NODE){
|
||||
Element item = (Element) itemNode;
|
||||
int itemId = Integer.parseInt(item.getAttribute("id"));
|
||||
int minAmt = Integer.parseInt(item.getAttribute("minAmt"));
|
||||
int maxAmt = Integer.parseInt(item.getAttribute("maxAmt"));
|
||||
int weight = Integer.parseInt(item.getAttribute("weight"));
|
||||
|
||||
TABLE.add(new WeightedChanceItem(itemId,minAmt,maxAmt,weight));
|
||||
}
|
||||
}
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static Item retrieve(){
|
||||
return RandomFunction.rollWeightedChanceTable(TABLE);
|
||||
}
|
||||
package content.data.tables;
|
||||
|
||||
import core.api.StartupListener;
|
||||
import core.ServerConstants;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.item.WeightedChanceItem;
|
||||
import core.tools.Log;
|
||||
import core.tools.RandomFunction;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static core.api.ContentAPIKt.log;
|
||||
|
||||
/**
|
||||
* Handles the Chaos Elemental's minor drop table. It is supposed to roll this table alongside its standard major drops on the main table.
|
||||
* @author Crash
|
||||
*/
|
||||
public final class CELEMinorTable implements StartupListener {
|
||||
|
||||
/**
|
||||
* The item id of the item representing the C. Ele minor drop table slot in a drop
|
||||
* table.
|
||||
*/
|
||||
public static final int SLOT_ITEM_ID = 799; // Crash: Item ID 799 is currently a null, blank paper note object. Unsure if used for cutscene/cutscene items, but hijacking this as C.Ele's item container as it'll never be dropped or obtained in normal gameplay.
|
||||
|
||||
/**
|
||||
* The rare drop table.
|
||||
*/
|
||||
private static final List<WeightedChanceItem> TABLE = new ArrayList<>(20);
|
||||
|
||||
|
||||
/**
|
||||
* Initialize needed objects for xml reading/writing
|
||||
*/
|
||||
static DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
static DocumentBuilder builder;
|
||||
|
||||
static {
|
||||
try {
|
||||
builder = factory.newDocumentBuilder();
|
||||
} catch (ParserConfigurationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public CELEMinorTable() throws ParserConfigurationException {}
|
||||
|
||||
@Override
|
||||
public void startup() {
|
||||
if(ServerConstants.CELEDT_DATA_PATH != null && !new File(ServerConstants.CELEDT_DATA_PATH).exists()){
|
||||
log(this.getClass(), Log.ERR, "Can't locate CELEDT file at " + ServerConstants.CELEDT_DATA_PATH);
|
||||
return;
|
||||
}
|
||||
parse(ServerConstants.CELEDT_DATA_PATH);
|
||||
log(this.getClass(), Log.FINE, "Loaded up Chaos Elemental drop table from " + ServerConstants.CELEDT_DATA_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the xml file for the CELEDT.
|
||||
* @param file the .xml file containing the CELEDT.
|
||||
*/
|
||||
public static void parse(String file){
|
||||
try {
|
||||
Document doc = builder.parse(file);
|
||||
|
||||
NodeList itemNodes = doc.getElementsByTagName("item");
|
||||
for(int i = 0; i < itemNodes.getLength(); i++){
|
||||
Node itemNode = itemNodes.item(i);
|
||||
if(itemNode.getNodeType() == Node.ELEMENT_NODE){
|
||||
Element item = (Element) itemNode;
|
||||
int itemId = Integer.parseInt(item.getAttribute("id"));
|
||||
int minAmt = Integer.parseInt(item.getAttribute("minAmt"));
|
||||
int maxAmt = Integer.parseInt(item.getAttribute("maxAmt"));
|
||||
int weight = Integer.parseInt(item.getAttribute("weight"));
|
||||
|
||||
TABLE.add(new WeightedChanceItem(itemId,minAmt,maxAmt,weight));
|
||||
}
|
||||
}
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static Item retrieve(){
|
||||
return RandomFunction.rollWeightedChanceTable(TABLE);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package core.game.node.entity.npc.drop;
|
||||
package content.data.tables;
|
||||
|
||||
import api.StartupListener;
|
||||
import core.api.StartupListener;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.item.WeightedChanceItem;
|
||||
import core.tools.Log;
|
||||
import core.tools.RandomFunction;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import rs09.ServerConstants;
|
||||
import rs09.game.system.SystemLogger;
|
||||
import core.ServerConstants;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
|
@ -18,7 +18,7 @@ import java.io.File;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static rs09.game.system.SystemLogger.logInfo;
|
||||
import static core.api.ContentAPIKt.log;
|
||||
|
||||
/**
|
||||
* Handles the gem drop table.
|
||||
|
|
@ -57,11 +57,11 @@ public final class GemDropTable implements StartupListener {
|
|||
@Override
|
||||
public void startup() {
|
||||
if(ServerConstants.GDT_DATA_PATH != null && !new File(ServerConstants.GDT_DATA_PATH).exists()){
|
||||
SystemLogger.logErr(this.getClass(), "Can't locate GDT file at " + ServerConstants.GDT_DATA_PATH);
|
||||
log(this.getClass(), Log.ERR, "Can't locate GDT file at " + ServerConstants.GDT_DATA_PATH);
|
||||
return;
|
||||
}
|
||||
parse(ServerConstants.GDT_DATA_PATH);
|
||||
logInfo(this.getClass(), "Initialized Gem Drop Table from " + ServerConstants.GDT_DATA_PATH);
|
||||
log(this.getClass(), Log.FINE, "Initialized Gem Drop Table from " + ServerConstants.GDT_DATA_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package core.game.node.entity.npc.drop;
|
||||
package content.data.tables;
|
||||
|
||||
import api.StartupListener;
|
||||
import core.api.StartupListener;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.item.WeightedChanceItem;
|
||||
import core.tools.Log;
|
||||
import core.tools.RandomFunction;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import rs09.ServerConstants;
|
||||
import rs09.game.system.SystemLogger;
|
||||
import core.ServerConstants;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
|
@ -18,7 +18,7 @@ import java.io.File;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static rs09.game.system.SystemLogger.logInfo;
|
||||
import static core.api.ContentAPIKt.log;
|
||||
|
||||
/**
|
||||
* Handles the herb drop table.
|
||||
|
|
@ -57,11 +57,11 @@ public final class HerbDropTable implements StartupListener {
|
|||
@Override
|
||||
public void startup() {
|
||||
if(ServerConstants.HDT_DATA_PATH != null && !new File(ServerConstants.HDT_DATA_PATH).exists()){
|
||||
SystemLogger.logErr(this.getClass(), "Can't locate HDT file at " + ServerConstants.HDT_DATA_PATH);
|
||||
log(this.getClass(), Log.ERR, "Can't locate HDT file at " + ServerConstants.HDT_DATA_PATH);
|
||||
return;
|
||||
}
|
||||
parse(ServerConstants.HDT_DATA_PATH);
|
||||
logInfo(this.getClass(), "Initialized Herb Drop Table from " + ServerConstants.HDT_DATA_PATH);
|
||||
log(this.getClass(), Log.FINE, "Initialized Herb Drop Table from " + ServerConstants.HDT_DATA_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
114
Server/src/main/content/data/tables/RareDropTable.kt
Normal file
114
Server/src/main/content/data/tables/RareDropTable.kt
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
package content.data.tables
|
||||
|
||||
import core.ServerConstants
|
||||
import core.api.StartupListener
|
||||
import core.api.log
|
||||
import core.api.shouldRemoveNothings
|
||||
import core.api.utils.WeightBasedTable
|
||||
import core.api.utils.WeightedItem
|
||||
import core.game.node.entity.Entity
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.item.Item
|
||||
import core.tools.Log
|
||||
import core.tools.RandomFunction
|
||||
import org.rs09.consts.Items
|
||||
import org.w3c.dom.Element
|
||||
import org.w3c.dom.Node
|
||||
import java.io.File
|
||||
import javax.xml.parsers.DocumentBuilder
|
||||
import javax.xml.parsers.DocumentBuilderFactory
|
||||
import javax.xml.parsers.ParserConfigurationException
|
||||
|
||||
/**
|
||||
* Handles the rare drop table.
|
||||
* @author Ceikry
|
||||
*/
|
||||
class RareDropTable : StartupListener {
|
||||
override fun startup() {
|
||||
if (ServerConstants.RDT_DATA_PATH != null && !File(ServerConstants.RDT_DATA_PATH).exists()) {
|
||||
log(this::class.java, Log.ERR, "Can't locate RDT file at " + ServerConstants.RDT_DATA_PATH)
|
||||
return
|
||||
}
|
||||
parse(ServerConstants.RDT_DATA_PATH)
|
||||
log(this::class.java, Log.FINE, "Initialized Rare Drop Table from " + ServerConstants.RDT_DATA_PATH)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TABLE: WeightBasedTable = object : WeightBasedTable() {
|
||||
override fun roll(receiver: Entity?): ArrayList<Item> {
|
||||
val items = ArrayList(guaranteedItems)
|
||||
var effectiveWeight = totalWeight
|
||||
val p = if (receiver is Player) receiver else null
|
||||
if (p != null && shouldRemoveNothings(p))
|
||||
effectiveWeight -= nothingWeight
|
||||
|
||||
if (this.size == 1) {
|
||||
items.add(get(0))
|
||||
} else if (!this.isEmpty()) {
|
||||
var rngWeight = RandomFunction.randomDouble(effectiveWeight)
|
||||
for (item in this.shuffled()) {
|
||||
if (item.id == Items.DWARF_REMAINS_0) continue
|
||||
rngWeight -= item.weight
|
||||
if (rngWeight <= 0) {
|
||||
items.add(item)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return convertWeightedItems(items, receiver)
|
||||
}
|
||||
|
||||
private val nothingWeight: Double
|
||||
get() {
|
||||
var sum = 0.0
|
||||
for (i in this) {
|
||||
if (i.id == Items.DWARF_REMAINS_0)
|
||||
sum += i.weight
|
||||
}
|
||||
return sum
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize needed objects for xml reading/writing
|
||||
*/
|
||||
var factory = DocumentBuilderFactory.newInstance()
|
||||
var builder: DocumentBuilder? = null
|
||||
|
||||
init {
|
||||
try {
|
||||
builder = factory.newDocumentBuilder()
|
||||
} catch (e: ParserConfigurationException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the xml file for the RDT.
|
||||
* @param file the .xml file containing the RDT.
|
||||
*/
|
||||
fun parse(file: String?) {
|
||||
try {
|
||||
val doc = builder!!.parse(file)
|
||||
val itemNodes = doc.getElementsByTagName("item")
|
||||
for (i in 0 until itemNodes.length) {
|
||||
val itemNode = itemNodes.item(i)
|
||||
if (itemNode.nodeType == Node.ELEMENT_NODE) {
|
||||
val item = itemNode as Element
|
||||
val itemId = item.getAttribute("id").toInt()
|
||||
val minAmt = item.getAttribute("minAmt").toInt()
|
||||
val maxAmt = item.getAttribute("maxAmt").toInt()
|
||||
val weight = item.getAttribute("weight").toInt()
|
||||
TABLE.add(WeightedItem(itemId, minAmt, maxAmt, weight.toDouble(), false))
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
fun retrieve(receiver: Entity?): Item? {
|
||||
return TABLE.roll(receiver).getOrNull(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package core.game.node.entity.npc.drop;
|
||||
package content.data.tables;
|
||||
|
||||
import api.StartupListener;
|
||||
import core.api.StartupListener;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.item.WeightedChanceItem;
|
||||
import core.tools.Log;
|
||||
import core.tools.RandomFunction;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import rs09.ServerConstants;
|
||||
import rs09.game.system.SystemLogger;
|
||||
import core.ServerConstants;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
|
@ -18,7 +18,7 @@ import java.io.File;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static rs09.game.system.SystemLogger.logInfo;
|
||||
import static core.api.ContentAPIKt.log;
|
||||
|
||||
/**
|
||||
* Handles the rare seed drop table.
|
||||
|
|
@ -57,11 +57,11 @@ public final class RareSeedDropTable implements StartupListener {
|
|||
@Override
|
||||
public void startup() {
|
||||
if(ServerConstants.RSDT_DATA_PATH != null && !new File(ServerConstants.RSDT_DATA_PATH).exists()){
|
||||
SystemLogger.logErr(this.getClass(), "Can't locate RSDT file at " + ServerConstants.RSDT_DATA_PATH);
|
||||
log(this.getClass(), Log.ERR, "Can't locate RSDT file at " + ServerConstants.RSDT_DATA_PATH);
|
||||
return;
|
||||
}
|
||||
parse(ServerConstants.RSDT_DATA_PATH);
|
||||
logInfo(this.getClass(), "Initialized Rare Seed Drop Table from " + ServerConstants.RSDT_DATA_PATH);
|
||||
log(this.getClass(), Log.FINE, "Initialized Rare Seed Drop Table from " + ServerConstants.RSDT_DATA_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package core.game.node.entity.npc.drop;
|
||||
package content.data.tables;
|
||||
|
||||
import api.StartupListener;
|
||||
import core.api.StartupListener;
|
||||
import core.game.node.item.Item;
|
||||
import core.game.node.item.WeightedChanceItem;
|
||||
import core.tools.Log;
|
||||
import core.tools.RandomFunction;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import rs09.ServerConstants;
|
||||
import rs09.game.system.SystemLogger;
|
||||
import core.ServerConstants;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
|
@ -18,7 +18,7 @@ import java.io.File;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static rs09.game.system.SystemLogger.logInfo;
|
||||
import static core.api.ContentAPIKt.log;
|
||||
|
||||
/**
|
||||
* Handles the uncommon seed drop table.
|
||||
|
|
@ -57,11 +57,11 @@ public final class UncommonSeedDropTable implements StartupListener {
|
|||
@Override
|
||||
public void startup() {
|
||||
if(ServerConstants.USDT_DATA_PATH != null && !new File(ServerConstants.USDT_DATA_PATH).exists()){
|
||||
SystemLogger.logErr(this.getClass(), "Can't locate USDT file at " + ServerConstants.USDT_DATA_PATH);
|
||||
log(this.getClass(), Log.ERR, "Can't locate USDT file at " + ServerConstants.USDT_DATA_PATH);
|
||||
return;
|
||||
}
|
||||
parse(ServerConstants.USDT_DATA_PATH);
|
||||
logInfo(this.getClass(), "Initialized Uncommon Seed Drop Table from " + ServerConstants.USDT_DATA_PATH);
|
||||
log(this.getClass(), Log.FINE, "Initialized Uncommon Seed Drop Table from " + ServerConstants.USDT_DATA_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -0,0 +1,230 @@
|
|||
package content.global.activity.cchallange
|
||||
|
||||
import content.global.activity.cchallange.npc.EarthWarriorChampionNPC.Companion.spawnEarthWarriorChampion
|
||||
import content.global.activity.cchallange.npc.GhoulChampionNPC.Companion.spawnGhoulChampion
|
||||
import content.global.activity.cchallange.npc.GiantChampionNPC.Companion.spawnGiantChampion
|
||||
import content.global.activity.cchallange.npc.GoblinChampionNPC.Companion.spawnGoblinChampion
|
||||
import content.global.activity.cchallange.npc.HobgoblinChampionNPC.Companion.spawnHobgoblinChampion
|
||||
import content.global.activity.cchallange.npc.ImpChampionNPC.Companion.spawnImpChampion
|
||||
import content.global.activity.cchallange.npc.JogreChampionNPC.Companion.spawnJogreChampion
|
||||
import content.global.activity.cchallange.npc.LesserDemonChampionNPC.Companion.spawnLesserDemonChampion
|
||||
import content.global.activity.cchallange.npc.SkeletonChampionNPC.Companion.spawnSkeletonChampion
|
||||
import content.global.activity.cchallange.npc.ZombieChampionNPC.Companion.spawnZombieChampion
|
||||
import core.api.*
|
||||
import core.game.global.action.DoorActionHandler
|
||||
import core.game.interaction.IntType
|
||||
import core.game.interaction.InteractionListener
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.item.Item
|
||||
import core.game.system.task.Pulse
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.map.zone.ZoneBorders
|
||||
import core.game.world.map.zone.ZoneRestriction
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.NPCs
|
||||
import org.rs09.consts.Scenery
|
||||
|
||||
/**
|
||||
* Represents the Champion challenge.
|
||||
*/
|
||||
|
||||
class ChampionChallengeListener : InteractionListener, MapArea {
|
||||
|
||||
val EARTH_WARRIOR_SCROLL = Items.CHAMPION_SCROLL_6798
|
||||
val GHOUL_SCROLL = Items.CHAMPION_SCROLL_6799
|
||||
val GIANT_SCROLL = Items.CHAMPION_SCROLL_6800
|
||||
val GOBLIN_SCROLL = Items.CHAMPION_SCROLL_6801
|
||||
val HOBGOBLIN_SCROLL = Items.CHAMPION_SCROLL_6802
|
||||
val IMP_SCROLL = Items.CHAMPION_SCROLL_6803
|
||||
val JOGRE_SCROLL = Items.CHAMPION_SCROLL_6804
|
||||
val LESSER_DEMON_SCROLL = Items.CHAMPION_SCROLL_6805
|
||||
val SKELETON_SCROLL = Items.CHAMPION_SCROLL_6806
|
||||
val ZOMBIE_SCROLL = Items.CHAMPION_SCROLL_6807
|
||||
|
||||
val MESSAGE_SCROLL = 222
|
||||
|
||||
private val IMP_SCROLL_TEXT = arrayOf(
|
||||
"How about picking on someone your own size? I'll",
|
||||
"see you at the Champions' Guild.",
|
||||
"",
|
||||
"Champion of Imps"
|
||||
)
|
||||
|
||||
private val GOBLIN_SCROLL_TEXT = arrayOf(
|
||||
"Fight me if you think you can human, I'll wait",
|
||||
"for you in the Champions' Guild.",
|
||||
"",
|
||||
"Champion of Goblins"
|
||||
)
|
||||
|
||||
private val SKELETON_SCROLL_TEXT = arrayOf(
|
||||
"I'll be waiting at the Champions' Guild to collect",
|
||||
"your bones.",
|
||||
"",
|
||||
"Champion of Skeletons"
|
||||
)
|
||||
|
||||
private val ZOMBIE_SCROLL_TEXT = arrayOf(
|
||||
"You come to Champions' Guild, you fight me, I",
|
||||
"squish you, I get brains!",
|
||||
"",
|
||||
"Champion of Zombies"
|
||||
)
|
||||
|
||||
private val GIANT_SCROLL_TEXT = arrayOf(
|
||||
"Get yourself to the Champions' Guild, if you dare",
|
||||
"to face me puny human.",
|
||||
"",
|
||||
"Champion of Giants"
|
||||
)
|
||||
|
||||
private val HOBGOBLIN_SCROLL_TEXT = arrayOf(
|
||||
"You won't defeat me, though you're welcome to",
|
||||
"try at the Champions' Guild.",
|
||||
"",
|
||||
"Champion of Hobgoblins"
|
||||
)
|
||||
|
||||
private val GHOUL_SCROLL_TEXT = arrayOf(
|
||||
"Come and duel me at the Champions' Guild, I'll",
|
||||
"make sure nothing goes to waste.",
|
||||
"",
|
||||
"Champion of Ghouls"
|
||||
)
|
||||
|
||||
private val EARTH_WARRIOR_TEXT = arrayOf(
|
||||
"I challenge you to a duel, come to the arena",
|
||||
"beneath the Champions' Guild and fight me if you",
|
||||
"dare.",
|
||||
"",
|
||||
"Champion of Earth Warriors"
|
||||
)
|
||||
|
||||
private val JOGRE_SCROLL_TEXT = arrayOf(
|
||||
"You think you can defeat me? Come to the",
|
||||
"Champions' Guild and prove it!",
|
||||
"",
|
||||
"Champion of Jogres"
|
||||
)
|
||||
|
||||
private val LESSER_DEMON_SCROLL_TEXT = arrayOf(
|
||||
"Come to the Champions' Guild so I can banish",
|
||||
"you mortal!",
|
||||
"",
|
||||
"Champion of Lesser Demons"
|
||||
)
|
||||
|
||||
private val PORTCULLIS = Scenery.PORTCULLIS_10553
|
||||
private val CHAMPION_STATUE_CLOSED = Scenery.CHAMPION_STATUE_10556
|
||||
private val CHAMPION_STATUE_OPEN = Scenery.CHAMPION_STATUE_10557
|
||||
private val TRAPDOOR_CLOSED = Scenery.TRAPDOOR_10558
|
||||
private val TRAPDOOR_OPEN = Scenery.TRAPDOOR_10559
|
||||
private val LARXUS = NPCs.LARXUS_3050
|
||||
|
||||
private val ARENA_ZONE = 12696
|
||||
|
||||
override fun defineListeners() {
|
||||
// Champion's Guild Basement Ladder to Main Floor
|
||||
addClimbDest(Location(3190, 9758, 0), Location(3190, 3356, 0))
|
||||
// Champion Statue Ladder to Arena
|
||||
addClimbDest(Location(3184, 9758, 0), Location(3182, 9758, 0))
|
||||
// Arena Ladder to Champion's Guild Basement
|
||||
addClimbDest(Location(3183, 9758, 0), Location(3185, 9758, 0))
|
||||
|
||||
on(LARXUS, IntType.NPC, "talk-to") { player, _ ->
|
||||
openDialogue(player, LarxusDialogue(false))
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(ChampionScrollsDropHandler.SCROLLS, IntType.ITEM, "read") { player, node ->
|
||||
updateAndReadScroll(player, node.asItem())
|
||||
return@on true
|
||||
}
|
||||
|
||||
onUseWith(IntType.NPC, ChampionScrollsDropHandler.SCROLLS, NPCs.LARXUS_3050) { player, _, _ ->
|
||||
openDialogue(player, LarxusDialogue(true))
|
||||
return@onUseWith true
|
||||
}
|
||||
|
||||
on(TRAPDOOR_CLOSED, IntType.SCENERY, "open") { _, node ->
|
||||
replaceScenery(node.asScenery(), TRAPDOOR_OPEN, 100, node.location)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(TRAPDOOR_OPEN, IntType.SCENERY, "close") { _, node ->
|
||||
replaceScenery(node.asScenery(), TRAPDOOR_CLOSED, -1, node.location)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(CHAMPION_STATUE_CLOSED, IntType.SCENERY, "open") { _, node ->
|
||||
replaceScenery(node.asScenery(), CHAMPION_STATUE_OPEN, 100, node.location)
|
||||
return@on true
|
||||
}
|
||||
|
||||
on(PORTCULLIS, IntType.SCENERY, "open") { player, node ->
|
||||
if (player.getAttribute("championsarena:start", false) == false) {
|
||||
sendNPCDialogue(player, NPCs.LARXUS_3050, "You need to arrange a challenge with me before you enter the arena.")
|
||||
} else {
|
||||
lock(player, 3)
|
||||
submitWorldPulse(object : Pulse() {
|
||||
var counter = 0
|
||||
override fun pulse(): Boolean {
|
||||
when (counter++) {
|
||||
1 -> {
|
||||
player.familiarManager.dismiss()
|
||||
}
|
||||
2 -> DoorActionHandler.handleDoor(player, node.asScenery())
|
||||
3 -> when{
|
||||
removeItem(player, IMP_SCROLL) -> spawnImpChampion(player)
|
||||
removeItem(player, GOBLIN_SCROLL) -> spawnGoblinChampion(player)
|
||||
removeItem(player, SKELETON_SCROLL) -> spawnSkeletonChampion(player)
|
||||
removeItem(player, ZOMBIE_SCROLL) -> spawnZombieChampion(player)
|
||||
removeItem(player, GIANT_SCROLL) -> spawnGiantChampion(player)
|
||||
removeItem(player, HOBGOBLIN_SCROLL) -> spawnHobgoblinChampion(player)
|
||||
removeItem(player, GHOUL_SCROLL) -> spawnGhoulChampion(player)
|
||||
removeItem(player, EARTH_WARRIOR_SCROLL) -> {
|
||||
spawnEarthWarriorChampion(player)
|
||||
player.prayer.reset()
|
||||
}
|
||||
removeItem(player, JOGRE_SCROLL) -> spawnJogreChampion(player)
|
||||
removeItem(player, LESSER_DEMON_SCROLL) -> spawnLesserDemonChampion(player)
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
return@on true
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateAndReadScroll(player: Player, item: Item) {
|
||||
val id = item.id
|
||||
openInterface(player, MESSAGE_SCROLL).also {
|
||||
when (id) {
|
||||
IMP_SCROLL -> setInterfaceText(player, IMP_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
GOBLIN_SCROLL -> setInterfaceText(player, GOBLIN_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
SKELETON_SCROLL -> setInterfaceText(player, SKELETON_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
ZOMBIE_SCROLL -> setInterfaceText(player, ZOMBIE_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
GIANT_SCROLL -> setInterfaceText(player, GIANT_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
HOBGOBLIN_SCROLL -> setInterfaceText(player, HOBGOBLIN_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
GHOUL_SCROLL -> setInterfaceText(player, GHOUL_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
EARTH_WARRIOR_SCROLL -> setInterfaceText(player, EARTH_WARRIOR_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
JOGRE_SCROLL -> setInterfaceText(player, JOGRE_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
LESSER_DEMON_SCROLL -> setInterfaceText(player, LESSER_DEMON_SCROLL_TEXT.joinToString("<br>"), MESSAGE_SCROLL, 4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun defineAreaBorders(): Array<ZoneBorders> {
|
||||
return arrayOf(getRegionBorders(ARENA_ZONE))
|
||||
}
|
||||
|
||||
override fun getRestrictions(): Array<ZoneRestriction> {
|
||||
return arrayOf(
|
||||
ZoneRestriction.CANNON,
|
||||
ZoneRestriction.FIRES,
|
||||
ZoneRestriction.RANDOM_EVENTS
|
||||
)
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue