mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-19 21:10:17 -07:00
commit
f0935785cc
32 changed files with 5925 additions and 77 deletions
File diff suppressed because it is too large
Load diff
337
Server/data/botdata/namesandarmor.txt
Normal file
337
Server/data/botdata/namesandarmor.txt
Normal file
|
|
@ -0,0 +1,337 @@
|
|||
XMR BTC ETH:7:0:0:0:841:0:0:0:0:0:0:1061:0:
|
||||
SpinnerYOU:8:0:0:0:1277:0:1171:0:0:0:0:0:0:
|
||||
im-rahha:58:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
newvicn:20:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
KnocktdafOut:101:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Powndrake196:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
muppemxx:3:1038:0:0:0:0:0:0:0:0:0:0:0:
|
||||
GGraft:32:1949:4335:1725:1329:546:20166:0:548:0:2922:1061:0:
|
||||
OdymX:3:0:0:0:1293:1101:1175:0:1067:0:1063:0:0:
|
||||
jesusj17:48:0:4391:0:843:0:0:0:0:0:2932:1061:0:
|
||||
Raningblast3:3:0:0:0:1351:0:0:0:0:0:0:0:0:
|
||||
65fatknife:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
NeobilkDark:23:0:0:0:1203:0:1173:0:0:0:0:0:0:
|
||||
TROXZ144POXZ:56:1161:0:1009:1301:1123:1197:0:1073:0:0:0:0:
|
||||
xXMakiaXx:80:0:0:0:1381:0:0:0:1033:0:0:0:0:
|
||||
Molebats1209:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
64 Wise 1978:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Clue Mimic:3:0:3781:0:0:0:0:0:0:0:2922:2914:0:
|
||||
claymus14:30:1157:0:0:1329:1115:1193:0:1069:0:0:0:0:
|
||||
xAlexGGotYaX:10:1949:0:0:1277:0:1171:0:0:0:0:0:0:
|
||||
Morerule1367:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
77shiny1198:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
YaelColins:40:0:0:552:9703:0:9704:0:0:0:0:0:0:
|
||||
casacoima10:12:0:0:0:1277:0:1171:0:0:0:0:0:0:
|
||||
MenMaster:20:0:0:0:1205:0:0:0:0:0:0:0:0:
|
||||
M0L1NTR0N3:44:1949:0:1725:1357:1005:9704:0:1095:0:0:1061:0:
|
||||
fdsfwrfW2E:40:0:0:0:1277:0:1171:0:0:0:0:0:0:
|
||||
Lewt Bags:58:1155:4351:21149:1387:1117:1189:0:1075:0:1065:4119:0:
|
||||
bierfietsss:72:1163:1019:1731:1333:1127:1201:0:1079:0:1059:9005:0:
|
||||
TaDeDeBeShPa:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Soonride2043:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
KolSinRa6944:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
BoCaRefVaCyI:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Gerloc55:43:0:0:0:1387:0:13660:0:0:0:0:9006:0:
|
||||
ChMaIvCrJanL:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Happier Dog:44:7136:20214:10366:1387:1844:0:0:1845:0:11858:1846:0:
|
||||
emachorrr:3:0:0:0:1277:0:0:0:0:0:0:0:0:
|
||||
MIDNIGHTHOUR:63:1042:0:1710:10156:6322:4156:0:1099:0:11120:0:0:
|
||||
LilOmni:6:0:0:0:0:0:0:0:0:0:0:1061:0:
|
||||
wef6qwe4r561:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Sister 13:3:12600:9793:0:20590:6186:24325:0:13288:0:0:23285:0:
|
||||
IsidraJr:58:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
BeDeMaSa0891:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Jazzy Otto:101:22689:0:22692:1419:22695:0:0:22698:0:0:22701:0:
|
||||
JustSkillezZ:50:1017:0:0:1387:426:0:0:428:0:0:0:0:
|
||||
Elcangri11:39:1017:1007:1727:1381:1035:1199:0:1033:0:1059:1061:0:
|
||||
haroldas 99r:13:1017:1019:1731:843:0:0:0:1015:0:1059:1061:0:
|
||||
Day Dreamer2:47:1145:0:1727:1355:1123:7352:0:1091:0:0:0:0:
|
||||
venepower:67:1017:0:1731:1381:577:0:0:1033:0:1059:0:0:
|
||||
GOOL19207:59:1163:0:0:1333:1123:1201:0:1079:0:0:0:0:
|
||||
T A L 3 N T:67:10452:12197:6585:11785:544:12610:0:2497:0:11133:12598:0:
|
||||
xz Team:30:579:4371:0:1387:577:0:0:1033:0:21816:626:0:
|
||||
lWontEverDie:96:0:0:0:853:7370:0:0:1099:0:0:0:0:
|
||||
WooJ:122:2986:9808:1704:3053:13106:0:0:0:0:11140:13131:0:
|
||||
Zaliukas19:7:1153:1031:1478:1323:1115:1175:0:1067:0:0:0:0:
|
||||
Marian Nasir:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
laitukas29:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
AFRODITA-23:38:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Monrojas:50:0:1029:1725:1381:0:0:0:1099:0:1065:1061:0:
|
||||
stejler:114:21266:6570:19553:4151:21301:12954:0:21304:0:7462:11840:0:
|
||||
r0cK4eV3r:103:11850:11852:0:0:11854:0:0:11856:0:11858:11860:0:
|
||||
Loamjytuner:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
u smoke mid:92:12293:10499:10364:1387:1121:1197:0:1071:0:1065:11840:0:
|
||||
MIMIYEEET:64:0:10499:0:861:0:0:0:0:0:0:0:0:
|
||||
hamnndoza:3:1153:0:0:11709:1115:1191:0:1067:0:1063:1061:0:
|
||||
4virgin:112:0:0:0:1275:0:0:0:0:0:0:0:0:
|
||||
LSASORI-666:60:579:0:1731:1387:577:0:0:1011:0:0:1061:0:
|
||||
12evil2175:4:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Rushkaril208:71:1153:0:1478:1331:1119:1191:0:1067:0:7595:0:0:
|
||||
sneksk13:49:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
M i m e s:53:0:0:0:1387:3058:0:0:3059:0:0:3061:0:
|
||||
llego crispy:54:9925:0:22692:853:1123:0:0:1073:0:9922:24313:0:
|
||||
dami420:71:3486:20214:1731:12389:3481:3488:0:3483:0:23261:1061:0:
|
||||
Vjx:59:12455:1019:10366:1387:12451:13660:0:12447:0:2912:1061:0:
|
||||
jonko_08:39:1161:0:1731:1387:1123:1197:0:1073:0:1063:1061:0:
|
||||
Oliverg1995:36:6188:4351:0:837:6654:0:0:0:0:2922:0:0:
|
||||
TErko SKs:20:1017:0:0:1383:0:1173:0:0:0:0:0:0:
|
||||
e t h x n:67:0:0:0:1387:6654:0:0:6181:0:7595:9005:0:
|
||||
Beretsand522:85:5554:0:1710:21646:5553:0:0:5555:0:5556:5557:0:
|
||||
ApS Squirrel:55:1163:4325:1731:1333:1113:1201:0:1079:0:2942:1061:0:
|
||||
Acazandra:60:579:4407:1727:1387:577:0:0:1011:0:24311:1061:0:
|
||||
BybisTasei:112:1169:1027:1731:1387:1135:24325:0:1099:0:1065:1061:0:
|
||||
WelshPro2:47:1053:0:1725:1333:544:0:0:542:0:0:1061:0:
|
||||
ElwinLeong:46:1044:0:1654:851:7364:0:0:1099:0:1065:7596:0:
|
||||
Squaawk:99:0:6568:0:0:0:0:0:0:0:11126:0:0:
|
||||
Bread1991:4:1155:0:0:1293:1117:1171:0:1075:0:0:0:0:
|
||||
Tzaska:112:1949:9781:0:6562:11854:22322:0:11856:0:11858:11860:0:
|
||||
honkah0nka:120:0:0:0:1359:0:0:0:0:0:0:0:0:
|
||||
VitsEco:64:7394:23300:1731:1387:7390:13660:0:7378:0:1065:23291:0:
|
||||
Emer Jhon 19:62:0:0:0:1381:1035:0:0:1033:0:0:0:0:
|
||||
Roberthx:55:1163:0:1725:1333:1113:1201:0:1079:0:0:0:0:
|
||||
Nikitakitz:33:12283:4371:1478:1285:12277:12281:0:12285:0:11079:3061:0:
|
||||
DNoancy76:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
black chinin:34:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
NO0MEERCYY:106:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Kekava:89:11862:1019:7803:1327:1125:1195:0:1077:0:0:3061:0:
|
||||
Finis34:76:24305:23410:10364:1387:24307:24325:0:24309:0:24311:24313:0:
|
||||
SSSniperWolf:53:23101:23099:0:11709:23369:2589:0:23095:0:23091:23093:0:
|
||||
HazeyJ:49:0:0:21314:11707:0:0:0:0:0:0:4121:0:
|
||||
dontbrkrules:45:0:0:0:1387:0:0:0:0:0:0:0:0:
|
||||
s46gs4g6s5dg:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
PuRe_ReVs97:39:1169:0:1704:8880:1129:0:0:1099:0:2487:0:0:
|
||||
DrakenHamer:108:0:0:0:1381:1035:0:0:1033:0:0:0:0:
|
||||
VoHoTi816863:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
H 2 P:63:1053:13679:21314:1387:22695:24325:0:13288:0:0:13286:0:
|
||||
Leviathan Sr:3:0:1007:0:13328:6654:0:0:6655:0:0:0:0:
|
||||
Chuka Ryori:102:0:0:0:1387:0:0:0:0:0:0:0:0:
|
||||
5g4sg4sg4sg:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Elroyfct19:8:1949:0:0:0:0:1173:0:0:0:0:0:0:
|
||||
Cattles:57:21720:0:22692:20779:13284:24325:0:13285:0:13287:13286:0:
|
||||
PureEffectQ:37:1161:1019:1725:1331:1123:1540:0:1073:0:1059:1061:0:
|
||||
rowcharger2:58:2613:0:0:1387:2607:2611:0:3475:0:1065:0:0:
|
||||
Redrani1:33:1038:0:0:0:0:0:0:0:0:0:0:0:
|
||||
ottn ook eem:76:12639:9757:0:4934:13104:0:0:6185:0:0:6666:0:
|
||||
UzairScape:52:0:0:0:1387:0:0:0:0:0:0:0:0:
|
||||
Ultiwarriors:65:1169:4379:1731:853:1135:0:0:1099:0:1065:9006:0:
|
||||
kilaSTR:21:579:4345:1725:1329:577:0:0:1081:0:0:1061:0:
|
||||
homeboijones:22:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Jcc1992:9:1157:0:0:1353:1119:1193:0:1069:0:2922:0:0:
|
||||
Rsk venom:69:24288:0:12002:12000:24291:6889:0:24294:0:6922:6920:0:
|
||||
Paptor986:68:1949:1027:1731:1333:1113:0:0:1079:0:2902:1061:0:
|
||||
BigDuncan69:42:1161:1031:1478:1333:1123:1199:0:1073:0:2922:9006:0:
|
||||
Gril:34:579:0:1727:1381:581:0:0:542:0:0:0:0:
|
||||
54 27:69:1163:4351:1725:1385:1113:1201:0:1079:0:1065:1061:0:
|
||||
treghar:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
TreeWise Ben:59:1017:0:1727:1387:546:0:0:548:0:0:0:0:
|
||||
ladiabla6666:59:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Joekeltje05:42:1055:4399:1727:1381:1035:0:0:1033:0:0:1061:0:
|
||||
Cykelpump94:68:0:0:0:1381:1035:0:0:1033:0:0:0:0:
|
||||
ToP WinG:61:0:0:11113:9185:0:0:0:0:0:0:0:0:
|
||||
Smigol89:75:12504:10499:1704:9185:2503:1540:0:2497:0:2491:6328:0:
|
||||
6d54fd4d5:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
JaDeLashKriT:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Devskii:64:1169:9783:1731:853:1129:0:0:1099:0:1065:1061:0:
|
||||
AliArcher22:107:1163:4371:1725:1333:1127:1201:0:1079:0:1065:1061:0:
|
||||
Y0URN0TREADY:21:11847:0:10364:667:23097:13660:0:9923:0:23091:9921:0:
|
||||
Kepler16b:15:1153:0:552:1267:1115:1191:0:6181:0:1059:0:0:
|
||||
JamitusDeath:63:1163:1019:0:1333:1127:1201:0:1079:0:2902:1061:0:
|
||||
blib vbob:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
FighterMan3D:3:0:0:0:1265:0:1173:0:0:0:0:0:0:
|
||||
dustyturnip:54:1163:0:1478:1333:2599:1201:0:1079:0:0:9006:0:
|
||||
Cucilo:63:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
BrrrrCold:53:2657:1007:1731:1333:2653:2659:0:3478:0:2912:9006:0:
|
||||
Nv-BlackMind:88:24315:24207:0:1271:24317:0:0:24319:0:24321:24323:0:
|
||||
kjuse:71:1038:0:1731:0:9924:0:0:9923:0:9922:1837:0:
|
||||
Archie b:73:12453:6568:10364:1381:7390:2621:0:7386:0:2912:11840:0:
|
||||
lamarcelazaz:112:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Soni Evil:3:0:0:0:1351:0:0:0:0:0:0:0:0:
|
||||
Ubertas:91:0:4323:1727:1387:0:0:0:0:0:0:3061:0:
|
||||
bholehairz:24:579:4365:1727:1381:577:0:0:1011:0:2932:1061:0:
|
||||
I P0p ZanZ:41:579:0:1727:1387:0:0:0:0:0:0:0:0:
|
||||
mr 7ranks:94:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
weedmam44:89:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Bort Goth:54:1042:4387:1478:23330:23215:7348:0:2617:0:1059:9005:0:
|
||||
godkin94:43:12231:4407:1662:1387:12225:12233:0:12227:0:2922:1061:0:
|
||||
zznjujkuiy:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Snakenaldo:30:1155:0:1731:1359:1117:1173:0:1075:0:1059:1061:0:
|
||||
Osmar-Rvn:75:12455:23297:10364:1387:12451:24325:0:12447:0:0:9921:0:
|
||||
J U Q:3:11850:11852:1708:10010:11854:0:0:11856:0:10075:11860:0:
|
||||
batrinhos:45:6182:4349:1478:1387:6654:0:0:7380:0:1065:9005:0:
|
||||
d5fd45fdfd43:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
mhxomklo:64:12013:0:0:1275:12014:0:0:12015:0:21345:12016:0:
|
||||
Jaxaloth:42:1153:0:10364:1331:1115:1191:0:1081:0:0:0:0:
|
||||
DuctileMarro:5:0:0:552:1277:0:1171:0:0:0:0:0:0:
|
||||
FirmGrandma:124:22326:6570:19553:22978:22327:22322:0:22328:0:22981:7159:0:
|
||||
Andr3ws:51:0:0:0:0:0:0:0:0:0:2902:7596:0:
|
||||
Motel IlIIlI:54:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Its yeboii:98:12434:19697:19720:1387:19958:3842:0:19964:0:4105:23285:0:
|
||||
TheOverdraft:118:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
jbl092191:85:2665:4357:0:0:2661:2667:0:2663:0:6720:6328:0:
|
||||
NewSummerVI:79:12600:23300:10366:23279:20199:13660:0:2593:0:23091:12891:0:
|
||||
hambargaman:80:1040:0:0:1387:9924:0:0:9923:0:0:9921:0:
|
||||
Ivyone42:35:0:13679:0:0:0:13660:0:0:0:0:0:0:
|
||||
grumpy troll:116:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
xRektify:93:0:0:11107:6739:0:0:0:0:0:0:0:0:
|
||||
bramboom:5:0:4407:0:1351:0:0:0:0:0:0:0:0:
|
||||
wrap a joint:94:2627:9795:1725:1333:1113:0:0:1079:0:2491:11840:0:
|
||||
leegon1:85:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
koekeroekoe1:94:21298:6568:11128:0:21301:12954:0:21304:0:11122:11840:0:
|
||||
maryamgee123:10:1153:1019:0:1381:0:1191:0:0:0:0:0:0:
|
||||
zazuke2019:53:22689:13679:22692:853:22695:0:0:1099:0:0:22701:0:
|
||||
Mrmeanbow:97:1163:23297:1725:1333:1127:1201:0:1079:0:0:0:0:
|
||||
MagicBunny01:47:1949:0:0:0:1757:0:0:0:0:0:0:0:
|
||||
el frinchy:49:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Ninja1901:50:6188:13679:0:1387:0:0:0:0:0:0:0:0:
|
||||
Dilk Mud:81:12241:6570:1725:1333:12235:1191:0:1067:0:0:0:0:
|
||||
zELGLw:5:0:0:0:1277:0:1171:0:0:0:0:0:0:
|
||||
DeMeLo139067:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Sun Rocks:49:2613:0:0:1381:1035:1201:0:1033:0:0:0:0:
|
||||
Black Arkan:42:2605:0:0:1331:2599:2603:0:12279:0:1063:1061:0:
|
||||
xxrreexxrex:3:0:4365:0:0:0:0:0:0:0:0:0:0:
|
||||
Kingdavid370:16:0:0:0:1349:0:0:0:0:0:0:0:0:
|
||||
OTEguQ:5:0:0:0:1205:0:1171:0:0:0:0:1061:0:
|
||||
OnlYMrSmItH:3:12845:0:22692:1419:6184:0:0:6185:0:13287:13286:0:
|
||||
DinkelBrot:14:1048:13679:0:0:20184:13660:0:20187:0:3060:1837:0:
|
||||
Voidsux:98:0:0:0:1359:544:0:0:542:0:0:0:0:
|
||||
worchafts:3:0:0:1654:0:0:0:0:0:0:0:0:0:
|
||||
1k sand crab:79:1038:23297:0:10010:1035:12335:0:1033:0:0:11840:0:
|
||||
Gopherslane:101:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Firehit2:28:1165:1019:0:1329:1125:1195:0:0:0:0:1061:0:
|
||||
BeanSw3de:71:2595:4335:0:1387:2591:2597:0:2593:0:24311:3061:0:
|
||||
rarebreed28:42:579:0:0:1387:577:0:0:1033:0:0:0:0:
|
||||
Mullac255:50:0:1019:1731:1381:6184:1540:0:6185:0:1059:1061:0:
|
||||
680m:110:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Niffou:7:1153:0:0:1323:1115:1191:0:1067:0:0:0:0:
|
||||
AlessandlawD:4:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
chandelaaaa:52:0:0:0:1275:0:0:0:0:0:1580:0:0:
|
||||
kevkeassel:8:1153:1007:1478:1323:1115:1191:0:1067:0:1059:1061:0:
|
||||
RockMauler:57:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Apothus14:43:0:0:0:1387:0:0:0:0:0:0:0:0:
|
||||
lilibthx3:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Choc Luvr:48:1949:0:0:1333:0:0:0:13288:0:1059:1061:0:
|
||||
ALXNDR B:60:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
crisalida1:29:0:0:0:1351:0:0:0:0:0:0:0:0:
|
||||
doynana:25:1157:0:1718:2402:1129:1177:0:1095:0:1063:1061:0:
|
||||
homer_1993:64:1163:4365:1731:853:1113:0:0:1099:0:1065:1061:0:
|
||||
Kos Emak lol:80:1163:4367:1725:853:1135:0:0:1079:0:1065:24313:0:
|
||||
chinowaggon:42:1153:0:1725:853:1101:0:0:1099:0:1065:0:0:
|
||||
Raised Wood:40:1159:0:0:1333:1121:1197:0:1071:0:0:0:0:
|
||||
PalavaMaa:3:21859:13679:22692:22684:0:13660:0:0:0:13287:13286:0:
|
||||
adroit4559:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
SensaiKush:85:10828:6568:6585:0:0:0:0:0:0:0:11840:0:
|
||||
Neba Brat:70:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Zartharias:55:1165:0:0:1333:1125:1195:0:1077:0:0:0:0:
|
||||
lioooooooooo:38:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Julle2900:54:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
ItsSpectrum:92:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Pinkjoe_369:68:6182:0:0:1275:6180:0:0:6181:0:0:0:0:
|
||||
iD3CAP1TATE:86:1050:0:1731:0:0:0:0:0:0:1065:23285:0:
|
||||
0wnbyme0:80:2665:4355:0:1387:2661:2667:0:2663:0:1065:9005:0:
|
||||
whodis1:11:1153:4351:1725:1325:1115:1191:0:1067:0:0:1061:0:
|
||||
V-Caracas:75:0:0:0:1211:0:0:0:0:0:0:0:0:
|
||||
Jackawoo:24:1153:1019:1009:1323:1101:1191:0:1081:0:1059:0:0:
|
||||
yorwys:76:0:0:0:1357:0:0:0:2617:0:0:0:0:
|
||||
ashwoog:8:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Belly111:57:1169:0:1725:1373:1129:0:0:1099:0:1065:1061:0:
|
||||
rolexeshh:54:0:0:0:1381:0:0:0:0:0:0:0:0:
|
||||
Flamingasz:39:1040:23297:1660:1273:0:0:0:0:0:0:0:0:
|
||||
TooFreeBoy:38:1159:0:1725:1329:1121:1197:0:1071:0:7595:1061:0:
|
||||
el capibara:64:0:1019:0:0:0:0:0:0:0:0:0:0:
|
||||
maName1999:43:1169:0:1725:853:1115:0:0:1099:0:1065:0:0:
|
||||
noobmager69:13:579:4397:1727:1381:577:0:0:1011:0:1063:1061:0:
|
||||
Greg lad:53:1153:4315:1725:1373:1115:1191:0:1081:0:0:1061:0:
|
||||
420 McWaffle:42:1169:4339:0:853:1129:0:0:1099:0:1065:0:0:
|
||||
SwappingSpit:56:1053:4351:1725:853:1101:0:0:1099:0:1065:1061:0:
|
||||
og Swervinn:74:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
yurmari:41:0:0:0:1351:0:13660:0:0:0:0:0:0:
|
||||
mrintensely8:120:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
65s4gs6g:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Yippi kaye:32:5533:0:0:0:0:13660:0:0:0:0:0:0:
|
||||
E D U A R DO:58:5533:0:552:1381:23404:0:0:1099:0:0:0:0:
|
||||
RichBichLily:57:0:0:1710:20590:0:0:0:0:0:0:0:0:
|
||||
ee PILLERI:94:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
el tor001:84:0:0:1712:1381:0:0:0:0:0:0:0:0:
|
||||
Ill have tht:49:6188:4325:1725:20155:1129:0:0:1099:0:1065:1061:0:
|
||||
Li-Fan Wei:61:2665:1023:1731:853:2661:0:0:3479:0:1065:0:0:
|
||||
CrsipDaddy69:62:1163:0:1731:1333:1127:1201:0:1079:0:1065:0:0:
|
||||
50 Crow 2195:4:0:0:0:1351:0:0:0:0:0:0:0:0:
|
||||
Nonce No:42:24315:13679:1725:853:24317:0:0:1099:0:1065:24323:0:
|
||||
c6z0urhtkxou:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
capulina 12:71:0:0:0:1359:0:0:0:0:0:0:0:0:
|
||||
atti zuen:27:579:1019:1727:1387:577:0:0:0:0:0:0:0:
|
||||
Wildmake:25:1153:1019:1725:1331:1101:1191:0:1067:0:0:1061:0:
|
||||
iGod Butcher:69:2627:1027:1731:1333:1127:2629:0:2625:0:0:22701:0:
|
||||
imma warlock:25:1153:0:0:1381:1115:1191:0:1067:0:1063:1061:0:
|
||||
Kingviking11:50:1169:1021:1725:853:1115:0:0:1099:0:1065:1061:0:
|
||||
Hookhda1995:51:1153:4365:1725:1333:1115:0:0:1067:0:0:1061:0:
|
||||
OptusWIFI:27:0:4409:1727:1381:1035:0:0:1033:0:0:1061:0:
|
||||
No Chance G:58:0:0:1725:853:1101:0:0:1099:0:1065:1061:0:
|
||||
19F10V7XUA3L:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Karamjanda23:50:1169:4393:1731:853:1109:0:0:1099:0:1065:1061:0:
|
||||
Duskthrow39:34:1017:4405:1478:853:1035:0:0:1099:0:0:1061:0:
|
||||
skitzatics:36:0:0:1725:1331:0:0:0:1099:0:1065:0:0:
|
||||
Vi Vinner:59:1153:1027:1725:853:1115:0:0:1099:0:1065:1061:0:
|
||||
666 sauce:56:0:3789:10364:1333:0:0:0:0:0:1065:6666:0:
|
||||
Purple Sclm:54:1169:24207:1725:853:1101:0:0:1099:0:1065:1061:0:
|
||||
69leo:55:1163:1027:1478:1303:23392:1201:0:1079:0:0:0:0:
|
||||
125i:77:1163:4345:1725:1333:1127:1201:0:1079:0:1065:1061:0:
|
||||
Shady_4720:29:1017:4345:1727:1381:544:0:0:542:0:0:1061:0:
|
||||
gotitondeck:30:1169:1019:1725:853:1129:0:0:1097:0:2912:1061:0:
|
||||
Crispy chips:78:1163:1027:1731:853:1113:0:0:1099:0:1065:24313:0:
|
||||
PlzRisk More:45:12518:4389:1725:853:1101:0:0:7378:0:1065:1837:0:
|
||||
P K Bash Man:56:1169:0:1725:853:1129:0:0:1099:0:1065:1061:0:
|
||||
Kieran2809:18:0:0:0:1355:0:0:0:0:0:0:1061:0:
|
||||
Yes I m New:79:2665:1019:1731:1333:2661:2667:0:2663:0:1065:9006:0:
|
||||
HMAY4QQ37YGB:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Soul Dig 934:50:1153:0:0:1323:1115:1191:0:1067:0:1059:1061:0:
|
||||
Mr Medicated:63:1157:1027:1725:853:1119:0:0:1099:0:1065:1061:0:
|
||||
Troll2k:4:1153:0:0:1277:1129:1171:0:0:0:0:1061:0:
|
||||
Protect Hope:62:2665:1027:10364:853:2669:0:0:2655:0:2489:11840:0:
|
||||
ITS ME KDP:14:0:0:1731:0:0:0:0:0:0:1063:1061:0:
|
||||
anastasiaemp:28:1153:0:0:1277:1103:1173:0:1087:0:0:0:0:
|
||||
Aka Flying:45:5527:4367:1725:853:0:0:0:0:0:1065:6666:0:
|
||||
llSlayerlI:47:1169:4385:1725:853:1129:0:0:1099:0:1065:1061:0:
|
||||
jO9hurley:61:1163:1021:1725:1333:1113:1201:0:1079:0:2912:1061:0:
|
||||
lilaf:43:1169:0:1725:1319:1129:0:0:1099:0:1065:0:0:
|
||||
Logamconner:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
dunnbros1:64:1169:4383:1725:853:1129:0:0:1099:0:1065:1061:0:
|
||||
345458472110:101:1169:4407:1725:853:1133:0:0:1099:0:1065:1061:0:
|
||||
Blonkalex23:61:1163:0:1725:1333:1127:1201:0:1079:0:0:1061:0:
|
||||
0hide0cry:67:0:0:1731:853:1129:0:0:1097:0:1063:0:0:
|
||||
Magemac99:27:579:4365:0:1387:577:1177:0:1011:0:0:0:0:
|
||||
Alcap0ny:54:1153:0:0:0:1105:0:0:1067:0:2932:1061:0:
|
||||
WISDJGJJ5CK4:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
Confiteor:81:0:0:0:853:0:0:0:0:0:0:0:0:
|
||||
x Obey the:68:579:0:1727:1333:577:0:0:542:0:0:0:0:
|
||||
sicriona:103:1163:1023:1725:1333:1127:1201:0:1079:0:2922:1061:0:
|
||||
Deleo Hostem:74:2619:9753:1731:23334:2661:2659:0:2663:0:1065:2914:0:
|
||||
K E N N O:89:10294:0:1731:1333:7372:0:0:1093:0:1065:1061:0:
|
||||
T3CHe:47:579:0:1731:1333:577:0:0:1099:0:1063:0:0:
|
||||
Kaiju_X:72:1169:0:1731:853:544:0:0:1099:0:1065:0:0:
|
||||
Junior_steez:68:0:0:1725:1333:544:0:0:542:0:2912:1061:0:
|
||||
BllI1C:52:1169:0:1725:853:1129:0:0:1099:0:1065:1061:0:
|
||||
Husky Fellow:53:6335:20217:1725:853:1129:0:0:7380:0:1065:23288:0:
|
||||
w33d pk u:73:1169:4373:1725:853:1135:0:0:1099:0:1065:1061:0:
|
||||
Gl Im Ninat:55:1169:4333:1725:853:0:0:0:1099:0:1065:1061:0:
|
||||
12iownu:56:579:0:1725:1333:577:0:0:1099:0:1065:0:0:
|
||||
TernoWildust:87:0:0:1731:1381:577:0:0:542:0:1065:0:0:
|
||||
xongbax:57:1169:4347:1725:853:1129:0:0:1099:0:1065:1061:0:
|
||||
G0DS Of Edge:76:2673:1027:1731:1333:2669:2675:0:2671:0:1065:1061:0:
|
||||
Slashz:46:1169:4351:0:853:1129:0:0:1099:0:1065:0:0:
|
||||
MicKy242:66:579:1021:0:1333:1121:1197:0:1085:0:1059:1061:0:
|
||||
God trust:70:0:0:1725:1333:544:0:0:1099:0:1065:0:0:
|
||||
Nodak Josh:69:12283:13679:1731:853:7362:0:0:7378:0:1065:1061:0:
|
||||
ryuga attak:66:1163:0:1725:1333:1113:1201:0:1079:0:0:1061:0:
|
||||
OldeEnglish:74:1163:0:1731:1333:1127:0:0:1079:0:0:0:0:
|
||||
Vettige Sam:28:6656:0:1654:0:6654:0:0:6655:0:2902:0:0:
|
||||
sitdown:61:1169:0:1704:868:1129:0:0:2497:0:2491:1837:0:
|
||||
Zamppaliin:57:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
kuchar23:94:1163:1019:1725:853:1135:0:0:1079:0:1065:1061:0:
|
||||
Tyuio594:69:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
oZeZo:90:0:0:0:1359:0:0:0:0:0:0:0:0:
|
||||
Mrmagicmatt:50:1153:4377:1725:1333:1115:0:0:1067:0:1059:1061:0:
|
||||
iism0ke:51:1169:4325:1725:853:1129:0:0:1099:0:1065:626:0:
|
||||
Dzestiz:3:5533:0:21314:20779:0:24325:0:3059:0:3060:3061:0:
|
||||
Justiniksass:3:0:0:0:0:0:0:0:0:0:0:0:0:
|
||||
rag 1:66:2619:23410:1731:853:2661:0:0:2663:0:1065:23285:0:
|
||||
78
Server/data/botdata/namesandarmorscript
Normal file
78
Server/data/botdata/namesandarmorscript
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
|
||||
This script is run with OSBot. Created by Red Bracket.
|
||||
|
||||
namesandarmor.txt has the following format:
|
||||
name:cblevel:helmet:cape:neck:weapon:chest:shield:unknown:legs:gloves:boots:
|
||||
|
||||
*/
|
||||
|
||||
|
||||
import org.osbot.rs07.api.def.ItemDefinition;
|
||||
import org.osbot.rs07.api.model.Player;
|
||||
import org.osbot.rs07.script.Script;
|
||||
import org.osbot.rs07.script.ScriptManifest;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ScriptManifest(name = "Fetch data10", author = "b4", version = 2, logo = "", info = "info")
|
||||
public class Reader extends Script {
|
||||
|
||||
private ArrayList<String> names = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public int onLoop() {
|
||||
Player p = getPlayers().closest(o -> !names.contains(o.getName()));
|
||||
if (p != null)
|
||||
{
|
||||
names.add(p.getName());
|
||||
String equipment = getOthersEquipment(p);
|
||||
//Format:
|
||||
//name:cblevel:helmet:cape:neck:weapon:chest:shield:unknown:legs:gloves:boots:
|
||||
log2(p.getName()
|
||||
+ ":" + p.getCombatLevel()
|
||||
+ ":" + equipment);
|
||||
}
|
||||
return 50;
|
||||
}
|
||||
|
||||
private void log2(String msg)
|
||||
{
|
||||
try {
|
||||
log(msg);
|
||||
FileReader fr = new FileReader(getDirectoryData() + "Data.txt");
|
||||
BufferedReader br = new BufferedReader(fr);
|
||||
for (String line; (line = br.readLine()) != null; ) {
|
||||
if (line.split(":")[0].equals(msg.split(":")[0]))
|
||||
{
|
||||
log("Not adding that one, since we already have it");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FileWriter fw = new FileWriter(getDirectoryData() + "Data.txt", true);
|
||||
BufferedWriter bw = new BufferedWriter(fw);
|
||||
PrintWriter out = new PrintWriter(bw);
|
||||
out.println(msg);
|
||||
out.close();
|
||||
} catch (Exception e) {
|
||||
log(e);
|
||||
}
|
||||
}
|
||||
|
||||
private String getOthersEquipment(Player p) {
|
||||
String equipmentList = "";
|
||||
if(p != null) {
|
||||
int[] equipment = p.getDefinition().getAppearance();
|
||||
for (int value : equipment) {
|
||||
if (value - 512 > 0)
|
||||
equipmentList += ItemDefinition.forId(value - 512).getId() + ":";
|
||||
else
|
||||
equipmentList += 0 + ":";
|
||||
}
|
||||
}
|
||||
return equipmentList;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
name=Crandor
|
||||
name=2009scape
|
||||
beta=false
|
||||
sql=true
|
||||
devMode=true
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
name=Crandor
|
||||
name=2009scape
|
||||
beta=false
|
||||
sql=true
|
||||
devMode=true
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
name=Crandor
|
||||
name=2009scape
|
||||
beta=false
|
||||
sql=true
|
||||
devMode=true
|
||||
|
|
|
|||
|
|
@ -302,7 +302,6 @@ public class RenderAnimationDefinition {
|
|||
for (int i = 0; i < length; i++) {
|
||||
System.out.print(Array.get(object, i) + (i < (length - 1) ? ", " : "]"));
|
||||
}
|
||||
System.out.println();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
@ -319,7 +318,6 @@ public class RenderAnimationDefinition {
|
|||
for (int i = 0; i < length; i++) {
|
||||
System.out.print(Array.get(object, i) + (i < (length - 1) ? ", " : "]"));
|
||||
}
|
||||
System.out.println();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,6 +44,11 @@ public final class Skills {
|
|||
*/
|
||||
public static final int ATTACK = 0, DEFENCE = 1, STRENGTH = 2, HITPOINTS = 3, RANGE = 4, PRAYER = 5, MAGIC = 6, COOKING = 7, WOODCUTTING = 8, FLETCHING = 9, FISHING = 10, FIREMAKING = 11, CRAFTING = 12, SMITHING = 13, MINING = 14, HERBLORE = 15, AGILITY = 16, THIEVING = 17, SLAYER = 18, FARMING = 19, RUNECRAFTING = 20, HUNTER = 21, CONSTRUCTION = 22, SUMMONING = 23;
|
||||
|
||||
/**
|
||||
* Number of skills in game
|
||||
*/
|
||||
public static final int NUM_SKILLS = 24;
|
||||
|
||||
/**
|
||||
* Represents the entity instance.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public final class RareDropTable {
|
|||
int id = Integer.parseInt(arg[1]);
|
||||
int amount = 1;
|
||||
int amount2 = amount;
|
||||
System.out.println(id);
|
||||
System.out.println("Rare drop table: " + id);
|
||||
if (arg[2].contains("-")) {
|
||||
String[] amt = arg[2].split("-");
|
||||
amount = Integer.parseInt(amt[0]);
|
||||
|
|
|
|||
|
|
@ -59,8 +59,8 @@ public final class AIPBuilder {
|
|||
{
|
||||
final AIPlayer bot = new AIPlayer(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
|
||||
bot.getSkills().setStaticLevel(Skills.MAGIC, RandomFunction.getRandom(99));
|
||||
bot.getSkills().setStaticLevel(Skills.DEFENCE, RandomFunction.getRandom(99));
|
||||
|
|
|
|||
|
|
@ -4,8 +4,10 @@ import java.io.File;
|
|||
import java.io.FileNotFoundException;
|
||||
import java.util.*;
|
||||
|
||||
import org.crandor.game.container.impl.EquipmentContainer;
|
||||
import org.crandor.game.content.dialogue.DialoguePlugin;
|
||||
import org.crandor.game.content.global.tutorial.CharacterDesign;
|
||||
import org.crandor.game.content.skill.Skills;
|
||||
import org.crandor.game.interaction.DestinationFlag;
|
||||
import org.crandor.game.interaction.MovementPulse;
|
||||
import org.crandor.game.interaction.Option;
|
||||
|
|
@ -15,11 +17,13 @@ import org.crandor.game.node.entity.Entity;
|
|||
import org.crandor.game.node.entity.npc.NPC;
|
||||
import org.crandor.game.node.entity.player.Player;
|
||||
import org.crandor.game.node.entity.player.info.PlayerDetails;
|
||||
import org.crandor.game.node.entity.player.link.appearance.Gender;
|
||||
import org.crandor.game.node.item.Item;
|
||||
import org.crandor.game.world.map.Direction;
|
||||
import org.crandor.game.world.map.Location;
|
||||
import org.crandor.game.world.map.RegionManager;
|
||||
import org.crandor.game.world.map.path.Pathfinder;
|
||||
import org.crandor.game.world.repository.Repository;
|
||||
import org.crandor.net.packet.in.InteractionPacket;
|
||||
import org.crandor.plugin.Plugin;
|
||||
import org.crandor.tools.RandomFunction;
|
||||
|
|
@ -46,6 +50,13 @@ public class AIPlayer extends Player {
|
|||
*/
|
||||
private static final AIPControlDialogue CONTROL_DIAL = new AIPControlDialogue();
|
||||
|
||||
/**
|
||||
* A line of data from namesandarmor.txt that will be used to generate the appearance
|
||||
* Data in format:
|
||||
* //name:cblevel:helmet:cape:neck:weapon:chest:shield:unknown:legs:unknown:gloves:boots:
|
||||
*/
|
||||
private static String OSRScopyLine;
|
||||
|
||||
/**
|
||||
* The AIP's UID.
|
||||
*/
|
||||
|
|
@ -82,29 +93,85 @@ public class AIPlayer extends Player {
|
|||
super.setLocation(startLocation = l);
|
||||
super.artificial = true;
|
||||
super.getDetails().setSession(ArtificialSession.getSingleton());
|
||||
Repository.getPlayers().add(this);
|
||||
this.username = StringUtils.formatDisplayName(name + (currentUID + 1));
|
||||
this.uid = currentUID++;
|
||||
this.updateRandomValues();
|
||||
this.init();
|
||||
}
|
||||
|
||||
public static String retrieveRandomName() //Reads a random line from the file O_O
|
||||
/**
|
||||
* Generates bot stats/equipment/etc based on OSRScopyLine
|
||||
*/
|
||||
public void updateRandomValues() {
|
||||
this.getAppearance().setGender(RandomFunction.random(5) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
|
||||
//Create realistic player stats
|
||||
int maxLevel = RandomFunction.random((int) (Integer.parseInt(OSRScopyLine.split(":")[1])*0.78));
|
||||
for (int i = 0; i < Skills.NUM_SKILLS; i++) {
|
||||
this.getSkills().setLevel(i, RandomFunction.linearDecreaseRand(maxLevel));
|
||||
this.getSkills().setStaticLevel(i, RandomFunction.linearDecreaseRand(maxLevel));
|
||||
}
|
||||
this.getSkills().setLevel(Skills.HITPOINTS, 10);
|
||||
this.getSkills().setStaticLevel(Skills.HITPOINTS, 10);
|
||||
|
||||
//Create armor as fetched from OSRS
|
||||
giveArmor();
|
||||
|
||||
this.setDirection(Direction.values()[new Random().nextInt(Direction.values().length)]); //Random facing dir
|
||||
this.getSkills().updateCombatLevel();
|
||||
this.getAppearance().sync();
|
||||
}
|
||||
|
||||
private void giveArmor() {
|
||||
//name:cblevel:helmet2:cape3:neck4:weapon5:chest6:shield7:unknown8:legs9:unknown10:gloves11:boots12:
|
||||
//sicriona:103:1163: 1023: 1725 :1333: 1127 :1201 :0: 1079 :0: 2922: 1061:0:
|
||||
equipIfExists(new Item(parseOSRS(2)), EquipmentContainer.SLOT_HAT);
|
||||
equipIfExists(new Item(parseOSRS(3)), EquipmentContainer.SLOT_CAPE);
|
||||
equipIfExists(new Item(parseOSRS(4)), EquipmentContainer.SLOT_AMULET);
|
||||
equipIfExists(new Item(parseOSRS(5)), EquipmentContainer.SLOT_WEAPON);
|
||||
equipIfExists(new Item(parseOSRS(6)), EquipmentContainer.SLOT_CHEST);
|
||||
equipIfExists(new Item(parseOSRS(7)), EquipmentContainer.SLOT_SHIELD);
|
||||
equipIfExists(new Item(parseOSRS(9)), EquipmentContainer.SLOT_LEGS);
|
||||
equipIfExists(new Item(parseOSRS(11)), EquipmentContainer.SLOT_HANDS);
|
||||
equipIfExists(new Item(parseOSRS(12)), EquipmentContainer.SLOT_FEET);
|
||||
}
|
||||
|
||||
private int parseOSRS(int index)
|
||||
{
|
||||
String result = null;
|
||||
return Integer.parseInt(OSRScopyLine.split(":")[index]);
|
||||
}
|
||||
private void equipIfExists(Item e, int slot)
|
||||
{
|
||||
if (e.getId() != 0)
|
||||
getEquipment().replace(e, slot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a bot name and read other stats while you're at it
|
||||
*/
|
||||
public static String retrieveRandomName()
|
||||
{
|
||||
String name = null;
|
||||
Random rand = new Random();
|
||||
int n = 0;
|
||||
try {
|
||||
for(Scanner sc = new Scanner(new File("./data/botdata/botnames.txt")); sc.hasNext(); )
|
||||
for(Scanner sc = new Scanner(new File("./data/botdata/namesandarmor.txt")); sc.hasNext(); )
|
||||
{
|
||||
++n;
|
||||
String line = sc.nextLine();
|
||||
if(rand.nextInt(n) == 0)
|
||||
result = line;
|
||||
{
|
||||
name = line.split(":")[0];
|
||||
OSRScopyLine = line;
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
System.out.println("Missing botname.txt!");
|
||||
System.out.println("Missing namesandarmor.txt!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return result;
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -396,7 +463,7 @@ public class AIPlayer extends Player {
|
|||
@Override
|
||||
public void clear() {
|
||||
botMapping.remove(uid);
|
||||
super.clear();
|
||||
super.clear(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -423,6 +490,7 @@ public class AIPlayer extends Player {
|
|||
AIPlayer player = botMapping.get(uid);
|
||||
if (player != null) {
|
||||
player.clear();
|
||||
Repository.getPlayers().remove(player);
|
||||
return;
|
||||
}
|
||||
System.err.println("Could not deregister AIP#" + uid + ": UID not added to the mapping!");
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ public class GeneralBotCreator {
|
|||
public GeneralBotCreator(Location loc, Script botScript)
|
||||
{
|
||||
botScript.bot = AIPBuilder.create(loc);
|
||||
Repository.getPlayers().add(botScript.bot);
|
||||
|
||||
botScript.init();
|
||||
|
||||
GameWorld.submit(new Pulse(1, botScript.bot) {
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ public class LobsterCatcher extends Script {
|
|||
Pathfinder.find(bot, Location.create(2837, 3435, 0)).walk(bot);
|
||||
|
||||
if (spot != null) {
|
||||
System.out.println(spot.getLocation().toString());
|
||||
System.out.println("LobsterCatcher: " + spot.getLocation().toString());
|
||||
spot.getInteraction().handle(bot, spot.getInteraction().get(0));
|
||||
}
|
||||
|
||||
|
|
@ -61,6 +61,6 @@ public class LobsterCatcher extends Script {
|
|||
bank.getInteraction().handle(bot, bank.getInteraction().get(2));
|
||||
}
|
||||
|
||||
System.out.println(tick);
|
||||
System.out.println("LobsterCatcher: " + tick);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
package org.crandor.game.node.entity.player.ai.lumbridge;
|
||||
|
||||
import org.crandor.game.node.entity.player.ai.AIPlayer;
|
||||
import org.crandor.game.world.map.Location;
|
||||
import org.crandor.game.world.map.zone.ZoneBorders;
|
||||
import org.crandor.tools.RandomFunction;
|
||||
|
||||
public class DeadIdler extends AIPlayer {
|
||||
//Recreation of players I saw in w417 who seemed to have quit their computer after dying.
|
||||
|
||||
private int tick = RandomFunction.random(500);
|
||||
|
||||
public DeadIdler()
|
||||
{
|
||||
super(getRandomRespawnLoc());
|
||||
this.setCustomState("Lumbridge Bot");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick()
|
||||
{
|
||||
super.tick();
|
||||
if (this.tick > 0)
|
||||
{
|
||||
tick --;
|
||||
} else {
|
||||
AIPlayer.deregister(this.getUid());
|
||||
}
|
||||
}
|
||||
|
||||
private static Location getRandomRespawnLoc() {
|
||||
return new ZoneBorders(3219, 3218, 3223, 3219).getRandomLoc();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package org.crandor.game.node.entity.player.ai.lumbridge;
|
||||
|
||||
import org.crandor.tools.RandomFunction;
|
||||
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Creates a few random bots around Lumbridge area.
|
||||
* Code by Red Bracket
|
||||
*/
|
||||
public class LumbridgeBotHandler {
|
||||
public static void immersiveLumbridge()
|
||||
{
|
||||
//Generate a few random bots here and there
|
||||
|
||||
generateDeadIdlers();
|
||||
}
|
||||
|
||||
private static void generateDeadIdlers() {
|
||||
Executors.newSingleThreadExecutor().execute(() -> {
|
||||
while (true) //Would probably be better if this could be "while game is running"
|
||||
{
|
||||
new DeadIdler();
|
||||
try {
|
||||
Thread.sleep(RandomFunction.random(300_000));
|
||||
} catch (InterruptedException e) {
|
||||
System.out.println("LumbridgeBotHandler can't sleep!!?");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,6 @@ public class LowestBot extends PvMBots{
|
|||
|
||||
public LowestBot(Location l) {
|
||||
super(l);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
private int tick = 0;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ public class PvMBots extends AIPlayer {
|
|||
|
||||
public PvMBots(Location l) {
|
||||
super(l);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -95,10 +94,13 @@ public class PvMBots extends AIPlayer {
|
|||
this.tick++;
|
||||
|
||||
//Despawn
|
||||
if (this.getSkills().getLifepoints() == 0)
|
||||
if (this.getSkills().getLifepoints() == 0){
|
||||
//TODO: Just respawn a new bot (not sure how you'd do that :L)
|
||||
// Maybe make all PvMBots know what to do if they aren't in right area? I.e. pest control bots teleport to PC
|
||||
//this.teleport(new Location(500, 500));
|
||||
//Despawning not being delayed causes 3 errors in the console
|
||||
AIPlayer.deregister(this.getUid());
|
||||
}
|
||||
|
||||
//Npc Combat
|
||||
if (this.tick % 10 == 0) {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import org.crandor.game.node.entity.player.link.SpellBookManager;
|
|||
import org.crandor.game.node.entity.player.link.appearance.Gender;
|
||||
import org.crandor.game.node.item.Item;
|
||||
import org.crandor.game.world.map.Location;
|
||||
import org.crandor.game.world.repository.Repository;
|
||||
import org.crandor.tools.RandomFunction;
|
||||
|
||||
public final class PvMBotsBuilder{
|
||||
|
|
@ -64,11 +63,11 @@ public final class PvMBotsBuilder{
|
|||
p.getSkills().updateCombatLevel();
|
||||
p.getAppearance().sync();
|
||||
|
||||
p.getEquipment().replace(new Item(4720) ,EquipmentContainer.SLOT_CHEST);
|
||||
p.getEquipment().replace(new Item(4722) ,EquipmentContainer.SLOT_LEGS);
|
||||
p.getEquipment().replace(new Item(4716) ,EquipmentContainer.SLOT_HAT);
|
||||
p.getEquipment().replace(new Item(4718) ,EquipmentContainer.SLOT_WEAPON);
|
||||
p.getEquipment().replace(new Item(-1) ,EquipmentContainer.SLOT_SHIELD);
|
||||
p.getEquipment().replace(new Item(4720), EquipmentContainer.SLOT_CHEST);
|
||||
p.getEquipment().replace(new Item(4722), EquipmentContainer.SLOT_LEGS);
|
||||
p.getEquipment().replace(new Item(4716), EquipmentContainer.SLOT_HAT);
|
||||
p.getEquipment().replace(new Item(4718), EquipmentContainer.SLOT_WEAPON);
|
||||
p.getEquipment().replace(new Item(-1), EquipmentContainer.SLOT_SHIELD);
|
||||
|
||||
p.getInventory().add(new Item(952));
|
||||
p.getInventory().add(new Item(33));
|
||||
|
|
@ -77,7 +76,7 @@ public final class PvMBotsBuilder{
|
|||
|
||||
public static void generateMinLevels(PvMBots p)
|
||||
{
|
||||
//Slayer so they can attack alls monsters
|
||||
//Slayer so they can attack all monsters
|
||||
p.getSkills().setLevel(Skills.SLAYER, 99);
|
||||
p.getSkills().setStaticLevel(Skills.SLAYER, 99);
|
||||
int combatType = RandomFunction.getRandom(2);
|
||||
|
|
@ -145,7 +144,7 @@ public final class PvMBotsBuilder{
|
|||
}
|
||||
}
|
||||
|
||||
public static void createPestControlBot(PestControlTestBot p)
|
||||
public static void customizePestControlBot(PestControlTestBot p)
|
||||
{
|
||||
p.getSkills().setLevel(Skills.SLAYER, 99);
|
||||
p.getSkills().setStaticLevel(Skills.SLAYER, 99);
|
||||
|
|
@ -469,37 +468,29 @@ public final class PvMBotsBuilder{
|
|||
{
|
||||
final PvMBots bot = PvMBotsBuilder.create(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void spawnPestControlTestBot(Location loc)
|
||||
{
|
||||
final PestControlTestBot bot = PvMBotsBuilder.createPestControlTestBot(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
createPestControlBot(bot);
|
||||
|
||||
customizePestControlBot(bot);
|
||||
}
|
||||
|
||||
public static void spawnLowest(Location loc)
|
||||
{
|
||||
final LowestBot bot = PvMBotsBuilder.createLowest(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
generateMinLevels(bot);
|
||||
}
|
||||
|
||||
public static void spawnNoob(Location loc)
|
||||
{
|
||||
final NoobBot bot = PvMBotsBuilder.createNoob(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
createNoob(bot);
|
||||
}
|
||||
|
||||
|
|
@ -507,8 +498,8 @@ public final class PvMBotsBuilder{
|
|||
{
|
||||
final DragonKiller bot = PvMBotsBuilder.createDragonKiller(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
|
||||
createDragonKiller(bot);
|
||||
}
|
||||
|
|
@ -518,8 +509,8 @@ public final class PvMBotsBuilder{
|
|||
final GiantMoleBot bot = PvMBotsBuilder.createGiantMoleBot(new Location(0, 0));
|
||||
bot.teleport(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
|
||||
generateGiantMoleBot(bot);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public class ResourceAIPActions {
|
|||
ov = 0;
|
||||
}
|
||||
// ov = 0;
|
||||
System.out.println(ov);
|
||||
System.out.println("ResourceAIPActions" + ov);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package org.crandor.game.node.entity.player.ai.resource;
|
|||
|
||||
import org.crandor.game.node.entity.player.Player;
|
||||
import org.crandor.game.node.entity.player.ai.AIPBuilder;
|
||||
import org.crandor.game.node.entity.player.ai.lumbridge.LumbridgeBotHandler;
|
||||
import org.crandor.game.node.entity.player.ai.pvmbots.PvMBotsBuilder;
|
||||
import org.crandor.game.node.entity.player.ai.resource.task.ResourceTask;
|
||||
import org.crandor.game.node.entity.player.ai.resource.task.ResourceTasks;
|
||||
|
|
@ -37,8 +38,9 @@ public class ResourceAIPManager {
|
|||
|
||||
public void immerseWorld() { //There's probably a better place for this (it adds bot at bootup)
|
||||
PvMBotsBuilder.immersiveSpawns();
|
||||
AIPBuilder.immersiveSpawns();
|
||||
SkillingBotsBuilder.immersiveSpawnsSkillingBots();
|
||||
LumbridgeBotHandler.immersiveLumbridge();
|
||||
//AIPBuilder.immersiveSpawns();
|
||||
//SkillingBotsBuilder.immersiveSpawnsSkillingBots();
|
||||
System.out.println("Loaded immerseWorld");
|
||||
}
|
||||
|
||||
|
|
@ -96,7 +98,7 @@ public class ResourceAIPManager {
|
|||
continue;
|
||||
StringBuilder query = new StringBuilder();
|
||||
query.append("UPDATE `members` SET `taskName`='" + entry.getKey().getTaskName() + "',`taskTime`='" + entry.getValue() + "' WHERE `username`='" + player.getUsername() + "'");
|
||||
System.out.println(query.toString());
|
||||
System.out.println("ResourceAIPManager: " + query.toString());
|
||||
GameWorld.getDatabaseManager().update("global", query.toString());
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import org.crandor.game.node.entity.player.ai.AIPlayer;
|
|||
import org.crandor.game.node.item.Item;
|
||||
import org.crandor.net.packet.in.InteractionPacket;
|
||||
|
||||
public class SkillingBot extends AIPlayer{
|
||||
public class SkillingBot extends AIPlayer {
|
||||
|
||||
private int tick = 5;
|
||||
private ArrayList<Integer> interactNodeIds;
|
||||
|
|
@ -24,7 +24,6 @@ public class SkillingBot extends AIPlayer{
|
|||
super(l);
|
||||
this.fromWhereDoIdrop = 0;
|
||||
this.interactionRange = 15;
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public SkillingBot(Location l, int skill, ArrayList<Integer> entrys)
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ public final class SkillingBotsBuilder extends AIPlayer {
|
|||
{
|
||||
SkillingBot bot = new SkillingBot(loc, Skills.MINING, entrys);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
bot.getEquipment().replace(new Item(1265), EquipmentContainer.SLOT_WEAPON);
|
||||
return bot;
|
||||
}
|
||||
|
|
@ -33,8 +33,8 @@ public final class SkillingBotsBuilder extends AIPlayer {
|
|||
{
|
||||
SkillingBot bot = new SkillingBot(loc, Skills.WOODCUTTING, entrys);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
bot.getEquipment().replace(new Item(1351), EquipmentContainer.SLOT_WEAPON);
|
||||
return bot;
|
||||
}
|
||||
|
|
@ -44,8 +44,8 @@ public final class SkillingBotsBuilder extends AIPlayer {
|
|||
SkillingBot bot = new SkillingBot(loc, Skills.FISHING, entrys);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
CharacterDesign.randomize(bot, false);
|
||||
Repository.getPlayers().add(bot);
|
||||
bot.init();
|
||||
|
||||
|
||||
return bot;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -518,9 +518,9 @@ public final class PvPBotsBuilder{
|
|||
final WildernessBot bot = PvPBotsBuilder.create(new Location(0, 0));
|
||||
bot.teleport(loc);
|
||||
bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(bot);
|
||||
|
||||
generateClass(bot);
|
||||
bot.init();
|
||||
|
||||
}
|
||||
|
||||
private static void correctHitpointsStat(AIPlayer player) {
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ public class WildernessBot extends AIPlayer {
|
|||
|
||||
private void checkBarrowsSwitch()
|
||||
{
|
||||
System.out.println(this.getSkills().getLifepoints());
|
||||
System.out.println("WildernessBot: " + this.getSkills().getLifepoints());
|
||||
Entity target = getTarget();
|
||||
if (target == null)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public class SpawnData implements SavingModule {
|
|||
case 7:
|
||||
for (int i = 0; i < PKPackage.values().length; i++) {
|
||||
purchased = PKPackage.values()[i].ordinal();
|
||||
System.out.println(PKPackage.values()[i].ordinal());
|
||||
System.out.println("SpawnData: " + PKPackage.values()[i].ordinal());
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public final class CheckRandomCondition extends ScriptContext {
|
|||
|
||||
@Override
|
||||
public boolean execute(Object... args) {
|
||||
System.out.println( (String) ((Entity) args[0]).getAttribute("asc_random") );
|
||||
System.out.println("CheckRandomCondition:" + (String) ((Entity) args[0]).getAttribute("asc_random") );
|
||||
return ((Entity) args[0]).getAttribute("asc_random", 0) == value;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ public final class OptionDialInstruction extends ScriptContext {
|
|||
|
||||
@Override
|
||||
public ScriptContext create(String args) {
|
||||
System.out.println(args);
|
||||
System.out.println("OptionDialInstruction: " + args);
|
||||
ScriptContext context = super.create(args);
|
||||
|
||||
if (context != null) {
|
||||
|
|
|
|||
|
|
@ -221,9 +221,8 @@ public final class ZoneBorders {
|
|||
}
|
||||
|
||||
public Location getRandomLoc() {
|
||||
int x = northEastX - southWestX == 0 ? southWestX : new Random().nextInt(northEastX - southWestX) + southWestX;
|
||||
int y = northEastY - southWestY == 0 ? southWestY : new Random().nextInt(northEastY - southWestY) + southWestY;
|
||||
//System.out.println("Generated x,y " + x + ", " + y);
|
||||
int x = northEastX - southWestX == 0 ? southWestX : new Random().nextInt(northEastX - southWestX + 1) + southWestX;
|
||||
int y = northEastY - southWestY == 0 ? southWestY : new Random().nextInt(northEastY - southWestY + 1) + southWestY;
|
||||
return new Location(x, y);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -93,18 +93,53 @@ public class RandomFunction {
|
|||
return RANDOM.nextInt(val);
|
||||
}
|
||||
|
||||
public static int normalRandDist(int i, int intensity) {
|
||||
/**
|
||||
* Generates a random number with a distrobution like:
|
||||
* Where intensity is how intense the peak is (higher = more steep)
|
||||
* *
|
||||
* * *
|
||||
* * *
|
||||
* * * * *
|
||||
* * * * * *
|
||||
*/
|
||||
public static int normalRandDist(int max, int intensity) {
|
||||
int sum = 0;
|
||||
for (int j = 0; j < intensity; j++) {
|
||||
sum += RANDOM.nextInt(i);
|
||||
sum += RANDOM.nextInt(max);
|
||||
}
|
||||
return sum/intensity;
|
||||
}
|
||||
|
||||
public static int normalRandDist(int i) {
|
||||
return (RANDOM.nextInt(i) + RANDOM.nextInt(i))/2;
|
||||
/**
|
||||
* Generates a random number with a distribution like:
|
||||
* *
|
||||
* * *
|
||||
* * *
|
||||
* * * * *
|
||||
* * * * * *
|
||||
*/
|
||||
public static int normalRandDist(int max) {
|
||||
return (RANDOM.nextInt(max) + RANDOM.nextInt(max))/2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random number with a distribution like:
|
||||
*
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* See some results: https://www.desmos.com/calculator/clzv66l7hk
|
||||
*/
|
||||
public static int linearDecreaseRand(int max) {
|
||||
double seed = RANDOM.nextDouble();
|
||||
double modifier = RANDOM.nextDouble();
|
||||
return (int) (seed*modifier*max);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generates a random number likely in the area above val (I think)
|
||||
*/
|
||||
public static int normalPlusWeightRandDist(int val, int weight)
|
||||
{
|
||||
int normalDistRand = (RANDOM.nextInt(val) + RANDOM.nextInt(val))/2;
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ public final class AIPCommandPlugin extends CommandPlugin {
|
|||
case "aip":
|
||||
name = args.length < 2 ? player.getName() : args[1];
|
||||
AIPlayer p = AIPBuilder.copy(player, player.getLocation().transform(0, 1, 0));
|
||||
Repository.getPlayers().add(p);
|
||||
|
||||
p.init();
|
||||
|
||||
Interaction.sendOption(player, 7, "Control");
|
||||
|
|
@ -110,7 +110,7 @@ public final class AIPCommandPlugin extends CommandPlugin {
|
|||
// message
|
||||
for (int i = 0; i < size; i++) {
|
||||
final AIPlayer aip = AIPBuilder.copy(player, last.getLocation().transform(0, 1, 0));
|
||||
Repository.getPlayers().add(aip);
|
||||
|
||||
aip.init();
|
||||
if (legion.isEmpty()) {
|
||||
aip.setAttribute("aip_legion", legion);
|
||||
|
|
@ -148,7 +148,7 @@ public final class AIPCommandPlugin extends CommandPlugin {
|
|||
final AIPlayer aip = AIPBuilder.create( generateLocation(player));
|
||||
aip.setControler(player);
|
||||
aip.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(aip);
|
||||
|
||||
aip.init();
|
||||
PVPAIPBuilderUtils.generateClass(aip);
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ public final class AIPCommandPlugin extends CommandPlugin {
|
|||
final AIPlayer aip = AIPBuilder.create(generateLocation(player));
|
||||
aip.setControler(player);
|
||||
aip.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
|
||||
Repository.getPlayers().add(aip);
|
||||
|
||||
aip.init();
|
||||
PVPAIPBuilderUtils.generateClass(aip);
|
||||
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ public final class BetaCommandPlugin extends CommandPlugin {
|
|||
|
||||
case "pos":
|
||||
case "position":
|
||||
case "coords":
|
||||
case "loc":
|
||||
final Location l = player.getLocation();
|
||||
final Region r = player.getViewport().getRegion();
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ public class BasicStarter implements Plugin<Player> {
|
|||
|
||||
@Override
|
||||
public Plugin<Player> newInstance(Player player) throws Throwable {
|
||||
System.out.println(player.getDetails().getLastLogin());
|
||||
if (player.getDetails().getLastLogin() == 0) {
|
||||
for (int[] item : STARTER_ITEMS) {
|
||||
player.getInventory().add(new Item(item[0], item[1]));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue