From fbf3ea0f714928a686d0fb0273fa5075558cb8b0 Mon Sep 17 00:00:00 2001 From: dginovker Date: Sat, 8 Jun 2019 16:57:47 -0400 Subject: [PATCH 1/7] Added json simple lib and fixed Verenia's crap --- .idea/09HDscape.iml | 9 +++++++++ 09HDscape-server/data/libs/json-simple-1.1.jar | Bin 0 -> 16046 bytes .../crandor/game/node/entity/player/Player.java | 15 --------------- 3 files changed, 9 insertions(+), 15 deletions(-) create mode 100644 09HDscape-server/data/libs/json-simple-1.1.jar diff --git a/.idea/09HDscape.iml b/.idea/09HDscape.iml index ff22e2cfd..1b7dd94b9 100644 --- a/.idea/09HDscape.iml +++ b/.idea/09HDscape.iml @@ -175,5 +175,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/09HDscape-server/data/libs/json-simple-1.1.jar b/09HDscape-server/data/libs/json-simple-1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..f395f41471a796876278a6c5667ded4632546893 GIT binary patch literal 16046 zcmb7r1yo$g)-~?#!QI^n?(XjHE%|K0o!&~M+eqAG%Pl5%1U3crg%0SW#T+YIB? zetT^8cA@=MOjb}%QcP4?g zp$ZfMOg4TK<=&bZse~%6r0kMK?SBM+1Lu+u6@|_kAbpMI#gY(t6-g5*t>heu&T}3A zoz!u-9=U~h%7cQXG^asMvy^R0eLSUKC<{SPsuzlu3q+B(>n{zn?>|EfyI zPCi!jEx*k-M*M$}mUJ<-m9cbop*OZMbau{C-Bd6xqByVuNr+?HLxZU-SllwH3}V|$-@zoTON810d1{2LDY zX5B*!@SO^pN+s0SwK{?Q6SFNrB6G}4BfH)T4LL_4LPL*l$uv{QoXxzW6XROd;?=us zqn|q@{oOy_$M`WTYq5aexHx0G>W68>iWTd_wvJ6D=O6BY24o#>nMIuBl&iq-GuCXi z$HBLmu3mvvcc{$|pzuY0enlUNgI>JBu$xA}SXco2IP-9TCmHWK(gY4MTVEu_)O?tn znQ3jCWXm#m8v3w3$IzTk5M!n4SVbV~tK+ePU4zC6);1e=ajlpTwf04Il~(0Ilc|gV z9`h3hk|w;lqg?KBuDvgsj9Q;IXU!JzhVgZEgetr>p`C6V%MrH(a^*VxItQLr@t1x$ z_+v_|rJh2F$Z=B}s}@A4I3um=7ra9l!(F--&UD;1!~HE$v5ei4ZBk<0)P zpb%@~1(-^^rglvb%GnFZn?VxKzVnQ6H$xnmK|q;|^Ew)2;v>1_Y8x@W;lT-?#7Z-7 zxPTkRo(nV(hR`nraH4V%r*=o%D7&kL#1aZZ`{j{*c^>M;);h`~xtXMd;uVy)W9j`w zF_YEDJ;O`5j(4&lTG0brcu*5l7)TSx5iS^?oiIS4Q12_`QBD(UaFS;`Jai_2BY#6? z#d!<$2-V%N=-`Ek$3&}k_gY3QN-C~*7;Oih=BD~h7w&pMJn7y-NL>t7OikU2ld1eb z>I9Rtf|JAO09x-DZuVHJDWuvH*zDCFVr~kr?HHUPIPm1A2)On1!>ehO)T?DW+GP1E zMc>m*&iC0vN8DT%qW41!wsX^B%BM^^aR)x(d}pA~bmv@Pl_k7n^9%S?m7f(fD2i%V z()U;}MoQF2#3L0(RHH)4jO$37J0cU9W`yi@pu%-L)1Rm^)9+U|m61x#(zd+7^+>47m-Z3JQ@^5m9ra_ehq0 zjAVzTWq_QEEd42UcdA?#zLBV%jGajULs+|Pq>!|k)5J3G=Gnu9sqc@6EBGGS4m6~I z-M(5ssC-!q@hD9a**OXpN9i6)J6Nb~gxGcvFbSD8W22~tfwT`f!1#123D!j&n+^zjr`^F&lLbGg7ME=^? zdgOq3F*!1eb!Im0EbWoP6dUE)MX1NZ2l%}LVoX~)hDqyWJhz2(BJ+0(QT01tPHrQ# zYAsD72aN+h%|Vf^47{q}E$Z@~*zBTv%epE!2Dp}OHBGYPYKw4G&%oUn@l6^_ePxX& zHe(#Eq~OVpa1TigO%;PE|mar~glCR!M0xE&nkLmPqhg|HqX6^j%K z=UaM*;kz~)%Z%U->iWWB8RZ8N)YlY6)6gQ(DJS;H$m%5}nU%n7F}@LbRrZQ7g{r2q zG0SypK{*;ZKpAU7u5ft`fputXFWPGE)PzVLEb(rFDX(w@0Z>x zJim7WBf@q`+S=G5CkX{W%}n>SGxLyyUZ9*9Gi4>;U=IqcA7>BO7%4h*MVG4TNsH z&NfXD$CHItDRVSau~C!QhmJ@^*+jyxSo0A(iPp|hjfjI?IDNV_w1KcmetEz5!4g!nSMKz#mKhl>~lGQ4a~<<~lq=ghAiF5Y3KY$SmuK8kHV zYK}hHK8|K~f^y}260yb}MvBxVfj~l?zDjCVPS8^-Vi4pINCqZ`CI)5(z)ZmZT}sJy zaEBF8ARr7VARxkj>A~_wR;I?kPa>jKY~4^*k$mi~>xRu>Ew!kFiJ<~4*~!!dYxAIj zh^cG?)KGdCi#lbS3)>ytMkDdNJ$PQgeFXWnx)RlR@%gs6UP!vbSTf*k)02cJhO<0# z(z2e$*3urHHaB0u9I&e+6fM!e8D95jKPv<5AH<4R64tRB;YAZ68VMO)Wxc} z18jUgmD}$}yfPIXghjEkytw z4YH=Q9kvwPu2buyBe8%yldU@O_FY+tIm-^bgwwuW4ff_pyz4g5Dt1#OjK`~h7LmTq zM_YRBVdCXt(XSfwjIm?`i!nD>k9ra_9B0W0<|@^wM0z6=l(!f;U(QghK5V9)9W8yMFPgTYEG zWTgReiE|>gwmO@<&w~;Mu0*4q>>?%G_o1l5@EtsOaR~a_>;>P1g#~k6IT37R3X}iV zg@|SC^bBK+8=FjSPy1|?_h1Yz-^NZ6p~H|Xb};&46HImMiq!~6w+pvC2q?Ep4bB;} zV)2&~7(oNlvEDt%5aBW&>|&Da84Y+^2<|<#>MmMQfA4isiFa3{+5my2RfS-3Qga7A z=6$*K2Q+AESI1jhl#}@jn=76*Q#}NSNAh&K`hA%iB>_$LwFs|+2U+*f$R2)|6fXrE z6;1fV^-nilhn;J~v)*>+M>E-Vo~n7|Ls|T2FBEtFXC`6YwclcJs*)Qpz!A))JMX}~ zDL(mDRl8gAy&Q?1*d1YSH6XD6V`-Gl|;0YwgZGO6!sp$rdSbS`CA-At6_op5?b8=IeqN1u#(;#Kwim zRFRaGT-)*xz0E>~OSAdp{PJewmN6Hi2nF;3bJGk;|F5r4c@h8qj{8eirXz_kc1 z_C4?tJ>r5#Z5LpHS{#z!>_Pq8MfNXtLD|L0)X-M&pKKVt z>rXR=AO`Vrl|L4*@>erv2>+WE8}oX0_@oopXof`snqn>LWF;tR=A*~N4N5^0==G~z zn+u!!sxx@?HUG_;0oPJ-g?k)6zDR184U-8J7(#eH_C*^Tn;4iF7y$u`VTeJPL0}N( zpbvpg+rYv7XQ}qvl*RR_gGBsox^nln;`}$WtY&EQ;diqft*WhzrjGP7;gn{GMc?j6 zT<51V_N6qVVgOc5FuDRtj3kVR2^6l@WO@B$f|{HO+xYC85k2{VaQ^3r@?BGJ!6?;M zo+9c83J;k*%~@V^3=AyU;-j0x*^;M>vzp1Yhn)?1e$b^LYwRY%e1IPW0WmEC^?{;; zgfP=bHk$!K_S-Vf$}KKjMTf-weUJUr03UdCECa_(e+cxFD1KBk+?!vvA{@Zxd?sFSd3P@Jxn3N}SQCc9Pk}OHZt!#5F zmf6gG(<1j_rZHM&r>8SWEIT_}U0agYUpMG$`4Y`}txEDQ9qkAG0=bbIDQ@LrH6*#y z!(c67KWg=6z)V1^WXg%!9`{Ul>4lR|VQ7Une_93dRJK#`v!l4`Tks5OtdU7}ubm+= zn|VCf!XRe<$XQ+MVmdI8Ip)F>T?KNCQg(S^@*Wwnq(FH%72Op|GMH<>FQ(j>+Z9TM zj(AT|HLF4+e>9u%#slHF@TH&Sb80}di%yS+|H$4$?XxZ3)5S^rIB)ov!`O@?^7(;# zO24Oj&PwgUXNF|PQ!=K`v@$~)GJrno2Qn0<(Lx@al$68UugoQ`Iqb?e#q?f;wF9H$ zAC~%{6SEYe(9FLGm>RDee;;`HdaZB$sM- zoW1gPq`k-hI96s%UyV}xu_8Gm(O@$~HG0wU^mlOdOt759236(e>yv$0l0PTcl1~~` zch3z==PJayo zZTA4YgMIG#6E@TimTJxs`z*%7^tl1-J(WLz0b$s-;cAxFg8rxl-f{Fp?s-)Ey4Wit zLHl~J{RKPB$EX-CG&4_;g>Y(Nu86fyavX&S;BpcVx@d?fW;l3xi?cF`sa2vM<4WMma8Eg3{e1)(EXSdCNA-WmkBKe{&(tSCw z(=O$ORIMej8;PMGn2v_avMZ8&`-84un1v=`alht79ve-W`1D=(-IypV|G2_m!PO<3EO>1AY)>%oLA9A0VDMuB3tMfz^M_YzHv(gqI*mtOB5i~fBcyG#B)KS^ z+ZF>bl|@6;m{icphWQVJi-Vz) zv#HZBn_aowETcb1q%Ut5-M=dd+uOMqTH2X9i5VKZ*gO5c@>GqHh55pW7DUn5)OHOy znQP|-=|C1x5n=A0te|A2q?bQc(Ru-dFJ(g$HeqIP&zHJ?`~p}R9HJC>O58A zTy|aS#$Nkb3$3`~gW6T}A-0UDcy%+(b@qC=!?p0l%h1^URK7F?c+!UE)i)*ebSsRS z;I0k-Ye1o5>Wy80Q|@HAh#-+r3Z)trA;bzk@nJE?AGPw^$i%BFM+O261cdUopr-lX zFKBA#B4KD}Vq@y``@;H@pcE(*TF9$KmP_%9n)P=uq4iYI78EKKWO2$C2h3GQlT>nH zawXhyUth7pu30fpFtdgog;wzsRVU2?M|Lqy-Ak{boo$8cbd~E ztLDn{v6M2A74p6vOAHRqF6xX`V(P6yEj|-H>py?4`<7+E`ElqWzCNHLO13JFy1ly5 zuD~`R+|52}tJCbF7woitbD<-rx4Ms^iiNOYB97&8PYBV&7Sq^Lr zL5{DhO|R-XM-|K9y*(95_3aIL$iTh$N2twfd{a)}{VRyYNfZWGfH6px4YPo_zfL0@ zLpXH;9YZcL$-OWGaQ?e06ZUqDU*9%G1F?XBDE_@Fe{N4G{9jx9ts09oY+Z0w-}#uC zxtZ6$TWOFDfGyHbtXn4q1I{Z%lbl5Zu~m-uLDGVkW)88PS#RMklYLN#3?Sa-kPr=q zp#?Egw=j~ljMVQZj(~FF5%+bExsso}JV2cMEbg7d?N;ADOfDolxn_Qrb+^-c-g%d{ zoc(wgIS8Z^)J$w4x)5S+ObUYPS?&POH(#7xpj4*gg7-;zTP=D+SAsHJm8~O^7E68SB!t%$(nvJgje<@K41xR>6w_oD||eK z>lS@Oa<>Mh+ia)Ts!Hq`Wi>(WhKSfY-WM*jFwS}x6#)+4d6S#LTx((`Y)Vv|S1Coup-!eOd2R)&X0yi* z>fhwjO_La^>sG6sA!3}AR+VT4$zr$gy|8D6Jk9RR3H8~|jIBTwv1Q|%3;QA2ELD;} zeng}{`ie1S9Ja;TE%WeP&ruSYa8~n~(-Y^j#M1_!TPjhIv^jW9ni&mFuQaK$otbz3 zq_nvhO{hL!mIqmV^z7J6cY`XGTTOGneob3fRK|tQ>vCbcfAW&&cwVxFv5^MK+@qj2 zOWIcp$+3BJ3}yTNiVfq3^+dOS6=U03_@r#pc7o9Smd0-h4QIp00x-hub-~h z{Yen?z6J#rxDWRdhTxureB~U#o|9QeMBt0kQ@pG@Jppjap&fCz65w@25pdlz`4F#g zwr|G`$iru{%pX0TO~}4{CaKQ}Ur?=6Fdyob?D(<`Uq8Hb-x{c#xmQ7Y3ES}vkYeN0 z|9SD!8q&V@35VT&n@v(L(`r#-MEcBC8iv35zLqyZa#T?FeP5J>1f6(s<;NFVk)HZt z@BC^*#f|U7GHPO0#^~UbnR7J~ptlF5$(L5BRND!jPf@Rw zq0Jvq`KYPGF@N4ZpP1TI(lK@bcT9&|{!PbS?J!jNC*cko}SfwKv0tpre0ts3(Lf^#osv>b1p=Gye zz>m@jdo1C5pnz}nPRbuZ;-aICOMNh22EWlIcwj_uT+g8eUQGDRH}Uf?qkL2TN4`bY1x*G{75t;5a%8^R%QlwjX;$Vd*P`{dz|#$ zuc-@6@PQ&YwdY56h$HP1ntgoP9KIE_Om5d8oEYd1=TpnQieWX{XFILJRkIOo?J=Bq ziVrJ%hpXDYDIKZ-_JgKP=NSSG=D7PdGfOC+g1OYcS@4gapL5^OSJr*OM$;i$Y|-gX zm~YiBJ`XoN0H-ay^tt!dDZbuq6N@F=u4{3f1taE-;*Pl;uEW-`m2WjurNL!ZS=7OKVuaRq9UZY`yqd`S|^Dr?%j2@(QNjB|R>uxr1$C(j0J z4D8&sv#P1nHxOHWT_ssSPP)3pGd6hktno9p2ixw27*ms3F~UGZvH~j_yw!xbLtb$F zoV$q_gX%0s#)P8wlPayx+&7bHHtRw%Izx1-N)lC_eG3gym?u+45L440f)98t=p9&NMz@yGH)%RWgJ`CQ4w-F#tq@hRHw z4Q%NUY(z`Ll*y@)YRt&>r^AoKg%$jTx>P2XcP6PTA;1=GPe{&bs>^#1K+^e3a&46FrG8$p)Z`>vv@AOWRm!9Q-$fCNR@`evn$#_p@#jz+eI{%ulTM|jO|=idvqnq< zkQ;{3kcal8x~92}vvI_N#Dw^H%nSG0b_j`M`mpev@iSbcxA}_rnsKE(ct1Tt4lf7bQIA zP<>9Yv$=Y=f-N+(czSda-f}KWbJdMJU8F2ONLvVj5^0v4Z&3)^d${MHd0)s}@Z>YFhNG(O90 zmHP-)*#_KWr(ksrZFIYOo?w!NESU4UZ1snsogfQT52WEh3H*Qv$T*&`U7}L=|NAL& zMHnBNyDdnHNc`LLF>(A7hsNLjfTG6#+wG=Q6A4T1bO&we;?d|?J=Q@@{RYZD`tC6OH8kMCy3J6%m zD2<3v63MGn5|H{tOitd?6A;|CdO{z;?*+Xn@S2Jx%NiGNu?>2_{cit8s2Q_vIgRDo zo5g%0lgszz`3JlKTp7@NM{YlQ8P@3|1WdQq)Eg3fKSWfJ;+C$#{szA%9eyN65(6~> zp`J`2(H`M5pWVR@0?80|X%-eMS6!B>sJxN{XE+=GJTk+Bq1M-YzWOTQ43@ByOHr^wM3q3BYwN&K@jD{|nZ z)1uRq^0Jwc#9cy+&tLnELl$ZaSCm>8QSRtx$77iqxC3l=1ZK&w^Qf8o`~nN`Y^_@Z zy3=>kNvAUw5TiKSRIq~5@$9!T`aT(+_21G7$7-gjw^m||mXSw0+62=SWu~WVaaHt5 zV@lH9l(l9SpEE`ceSfa7xBM)9iT&|GYN9yQ0%lT(Ng%d4vUnqw&!r#~f70UxVoF*c z>bc|=ypG}hiL{9{f~TKP+t!zK`qtb~7*{{ez7{DZ@(NUZAt0h{n9r!S=ahWQhCz66 zZsANy{b7k%D5e(Bo=v^)YRk9l|N|;&j(v@ z70m79Aw5;=s`Oo0=i*??q72ZN=P=g?Hf)09>86gvus1X&~R zCe(Fxb+mLeGrRp@!(c(sllJ>;DHme!K` z8jgSY@#R6Z9-WLq15Xcg!V*ec{hP|yjH3dY5}KXz)X-Fh(*wQNyRI#5>0*P9iDh}>4~zMd zjipQ;s;ba09eBR1&abo)*5!4vuNh!E^aUiN(-ayCSzAlCSjraK8CIr2+S$_CSXxDh z>^PuKi7M+n?moY9MJ%LscB%icQ2~Cei_pYroz)aJgJN ziS~8X8?YoDrkblZFzK|DceCpe?8Ibh?(DT>1%G~zZ>6!|c319hd3nFhM>lGGEd3=q zBK~80gfrj@L-WIzkuchdjhoY<_>i-XM+eTaBeK zH&F^BZthgA0yN$zFaxF;RaICe`>f5+5#x1M$SC^26E#WxW#M7P1IR=cai51_G)-?5Q zba}M3%hD7j33K5|wI*tNB&t6o>XViFVFQlrj1x*BsHMruOxPsg)pXFnGNXvBDBbcx zzz>A1V5fX7oc&&;IjGyJ+GStlkL^ZJ?YQgPtMb}yU-uktH~SB#&zdOg13braDBRqd zc|X9{$**s&-`<$XxjB3+Y(GuId9*fo;i)fZKV7ciS~s6@#&m8=QdW0cz1H^3&-Sft zKMkhg#L0~;lU0=XcD57j?DXVL;?-eLBd=Bhq?dn7L@AIm1hP2&1xQzF5rUGuRqQ>7 z0FDKTe&Gv$EKrs_CRnNe0=3lPzFfLAjjkSj3$4KTjD04?$AbhQZ>b#cQc0hkvhL(JPaUsX`!VG(mH)lgn7G2C-XOpeQ22ugTUMs;yLTcyMh-w6d=$6GAgDB~3}W^c@Hi3h3=fTtUofvx2ODRO zoV%5(xVdF0cagEBT8CWivySzqnI!dK(n^BwW?+-jK}t9h`zrqU(E72foQQzmRgy!$ zf#yK!p_qMGcD<0YfVz#mi7#D~U{6$}4?b=D2Z{)ZY#Q=4cHvHHvFXBq7WNTy!Dshx zD-Ip5=!4g)%B&;RXC6$#^Y{8C-Rz|a3VWJ&9p=ETHVBRSQg|c2AsORL2 zl0#)uSX&x0HT0WyPq;!iL*L#lj27V9*+hx7UIx8@#MF46wMhtzWIx={;sfp-Ej5E* z3tT1C_#+c7$?&M?!uqj^4dW~_wU=Q;ce>20T~R&Gc9@iX=b*=88fonTt+CJ9J~C@A z(*;6l^9p*_uh-w%nrZEuAYshD*AvagYAG{q?j|`o>FF@KKB*gD3vWqW2Bg9I0@}C^I{^3I&(* zdMDRpP_A>mGB~ek#(HSr*(!qXjL&^^u5*?Y z181#?tzc6-HNBlf%FT(g4_-0ip^d6*W_0{>FTMz-Q%)v zIcTomRXlw(^XRWaaq$w7q|!y7bnwuixVS9@EEvet+@^aF>V%f@5*zB9Lq|{Xm4?Fc zNm*Opw?{&Jm?)9z)k9il9cDNAVPKhS9S^1gR+K!MZ z&9da@EHp0hYDvw3#Y`TwQuDLpoqh~!5lDA>PibQE`a#Ewx?O6~; zLk*@p*~XqLbgXLm+*ICTZ5v|r`>w2spUC9GB{#M9mh5uY5xKZLCYvsXb%hsKtjE99 z3ntQs#v{j5xf!e#n%^%?JzQjMTD}%+7-x?!Y9Sn|;O28_LVk3jJ!JGIN}~xo5 zFVk3RSPxs7H!pI4FNS_?w_uv|HQrI$es=nnG^FSf^8Fe9Rfvx6kINxmsRU^gweo`! zmkO@;gLpp_5e+;Wbw24VSNE{q(PQ(E*GCG?cC=G^rrTr6riMUYtM}+W1jvnLo`=X! zLInrNagoYVu?V+Y5tBJxKe+Mh{_nQ;PTa^6pmp&NQ_(;ji5UHI)~q+CU>%lub|Emdt3gQL+llD?}|E*!QXOb;+NdnjD{@jGAew}xy@wfWUU|VYK1^%Rds_@w-+`jKO z?_PjIRftQNGK(GF2hJMFDaxrkw#CizX5NF%?_}!j-e8p6wQS~P-jg4oa*gk(^jo%$ zrKQ+iigJEVD5kaJXO-6RAg`2rUzSizkI?%5aQ9YNQ^~}Gn<^!6=5~f^o_=1mr<>KBvftUKVQXPX|eO?s)J& zihJvo_8M_`W_)sKqU~*_e3X=$E{zE%i&v1Ht_D|p0OU%KB%y;_B|=aAF4u!?!B_Xn zoza^*UPlWK9mpnRp0^JbcrkTW6cj1-l`E&TtFovGk+)Ns>#RPAE=a4me1ptRj4s9?a6fmOiCV5CyL0;7Wsq#2|V7;q?X z7+`e#&S6PCxK`k)eU-ptXf$zYR`4dpniwp2V?d#S6n<#{Cg!S{((NQdAKz8Za903b5}1^8suD5WQN0Do6>ItXhGo`;cdLNdQ&AJOHtm z4#1|j)j0GD^@FJey#t{GzXSLOv^$AAsymB2?7i}Z+6DWC>ji=Xjyr`rraOl_qC0~- z!4kp?TnB*{&=0N_JTD|Ks2|`hpli@)AZ~$(+Ja1Y4)1&E9T4xOFOVG=S`fX^yx_cW zPatxD?gHflR(U+Y z9o0MfX#_F25Rod(mUI$X~3regb`5ROY9KCrZlEwotWxDNdqy-$acL& z3nbm6R12pAl?|O7h;Bfp0ZtEs8EEc54?uCCa%Xo(aHrP*r3dW;IMrfQf|3AW9LQQ= zDk0Sat$QFG=&-q;z(-~ctse})yyXjIV83hmL?jF|{K0(59|LV~}+oE~b! zB-TN2fF9*fD5a43?qi&b1rw3?PoM{)&#upoCfrHQj}nhYDlEwSFVJcHKERC9BIIvS zdM6+e5@1q#H(mlit}q1${x`@8$nnn!)c4a5(D&C5-1M7*0k2Yk>=gzW=8-G-W4rjt zO@X%wA|8Ny=Mu;OfdYV#W^#$(vHuEzEfpW3GV=h8jNmfhvpp`1ptuM^D6FJ{!v798 zU`P?Uc~I{MM^Hc|r#^wf|9=B7WG3uH{XnEY@d1kfR6q!!#ec&A3=JtnL~cdY8-HXp zsO;1f82s2jn{f?^qKB zg@1z^2-JpYEQ`Ppc8i~IAY1%MY@CaLeUzK`D?CbB2Ve~acCBzuL3Z}P0lfFr@8F#U z-L`>685AO9@e>X*WWUo52#~O{3JL!etiRg9v=S5{&&TX;M_8F(y+fa`-hDuCx17V* zs?8u@dWCxVWqa!-)>XjuZEINOE%u7^e{FBM*jt720TjE|W=8Fq-3P18f}D>;0tq1u*Mn3OPtPIiDY5kq--~A*f@9{cR?T zxvTl4*YorKAOjFdYD^v^N!65LxFKtVHB%7N7bfzv#eRpt9r8iCm{nXi&NHVdXA>^+ zue+U;{_uq5#X|BRO?`2X_S+6HZYit z58|DQ?k^Mt5b=&?_+H(a)Z^L)rtmHZWP=dh;ut2!c7tY|3KK`_g~Ayf%9i#5Zd2$( zYP*%)-f1=U^S!&738_ET$cSmSOVYP#VR)t$HpxFyeU=RIDR6hERO`fh`mWd#R%AWFcd(QSd7N$m5!2lBv;yazHo2mZqOD=M&0wmWlAXqZ0KMdVio z@Owt0_e#s#F6BzbE;E+cvPOMhMepDX?|Nre=!GnsVCi@%6+)&sN?#$1d}?=5>7b{d zcjSXo?xvNbe8mqU8@2*1bf(8t&dbEgU{st{6#khC{eODb{73CCp_l(Fv@5-Rm8*{{(gf07NoMQ;2f*`I#dzmokL^zkQ|-CIrn z6WL!wKz?QW)m8jYwh;J#X8W7t_^*_|I%)q&sgLl_lz(yA{*&zQ4e6)1;cw|@i`YT^ zJK2AH5C6Mi{OW!92Th?r)?4)PuT}Ot$v^ud{#m|%_WS#j`r&_5|LO(!EAg*haDNhu zVEk*DfAxv`mGswR(LYJU2>+GzpAJcXCI0oy=uhIWB>zhMmlLF4`F Date: Sat, 8 Jun 2019 16:57:47 -0400 Subject: [PATCH 2/7] Added json simple lib and fixed Verenia's crap --- .idea/09HDscape.iml | 9 +++++++++ 09HDscape-server/data/libs/json-simple-1.1.jar | Bin 0 -> 16046 bytes 2 files changed, 9 insertions(+) create mode 100644 09HDscape-server/data/libs/json-simple-1.1.jar diff --git a/.idea/09HDscape.iml b/.idea/09HDscape.iml index ff22e2cfd..1b7dd94b9 100644 --- a/.idea/09HDscape.iml +++ b/.idea/09HDscape.iml @@ -175,5 +175,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/09HDscape-server/data/libs/json-simple-1.1.jar b/09HDscape-server/data/libs/json-simple-1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..f395f41471a796876278a6c5667ded4632546893 GIT binary patch literal 16046 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 Date: Sat, 8 Jun 2019 17:09:20 -0400 Subject: [PATCH 3/7] Fixed CSConfigPacket --- .../src/org/crandor/net/packet/out/CSConfigPacket.java | 1 - 1 file changed, 1 deletion(-) diff --git a/09HDscape-server/src/org/crandor/net/packet/out/CSConfigPacket.java b/09HDscape-server/src/org/crandor/net/packet/out/CSConfigPacket.java index d26f223ed..5de848e44 100644 --- a/09HDscape-server/src/org/crandor/net/packet/out/CSConfigPacket.java +++ b/09HDscape-server/src/org/crandor/net/packet/out/CSConfigPacket.java @@ -1,6 +1,5 @@ package org.crandor.net.packet.out; -import com.oracle.jrockit.jfr.DataType; import org.crandor.net.packet.IoBuffer; import org.crandor.net.packet.OutgoingPacket; import org.crandor.net.packet.context.CSConfigContext; From a9d78f6669ead653863d08813bf7b128024f841f Mon Sep 17 00:00:00 2001 From: dginovker Date: Sat, 8 Jun 2019 17:28:49 -0400 Subject: [PATCH 4/7] Remove Production from git path --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..4487f0b07 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +production/* From 2a22cfa8279dae198da1d7dc6bba15b4a4a8d2dd Mon Sep 17 00:00:00 2001 From: dginovker Date: Sat, 8 Jun 2019 17:37:48 -0400 Subject: [PATCH 5/7] Make the players/ folder stay --- 09HDscape-server/data/players/.keepDirAlive | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 09HDscape-server/data/players/.keepDirAlive diff --git a/09HDscape-server/data/players/.keepDirAlive b/09HDscape-server/data/players/.keepDirAlive new file mode 100644 index 000000000..e69de29bb From d284da0de371fc2e81834157855559b5d4329fd5 Mon Sep 17 00:00:00 2001 From: dginovker Date: Sat, 8 Jun 2019 21:10:56 -0400 Subject: [PATCH 6/7] Created bot infrastructure --- .../crandor/cache/def/impl/CS2Mapping.java | 2 +- .../global/tutorial/CharacterDesign.java | 26 +++++----- .../game/node/entity/player/ai/AIPlayer.java | 33 ++++++++++++- .../player/ai/general/GeneralBotCreator.java | 35 +++++++++++++ .../entity/player/ai/general/ScriptAPI.java | 49 +++++++++++++++++++ .../general/scriptrepository/ManThiever.java | 12 +++++ .../ai/general/scriptrepository/Script.java | 16 ++++++ .../game/system/script/ScriptCompiler.java | 2 +- .../game/system/script/ScriptContext.java | 2 +- .../script/context/InvItemCondition.java | 2 +- .../script/context/WGuildTokenCondition.java | 2 +- .../src/plugin/command/AIPCommandPlugin.java | 11 +++++ 12 files changed, 172 insertions(+), 20 deletions(-) create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java diff --git a/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java b/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java index f2667e9a5..a0c8ead56 100644 --- a/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java +++ b/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java @@ -80,7 +80,7 @@ public final class CS2Mapping { if (mapping.map == null) { continue; } - bw.append("Script - " + i + " ["); + bw.append("ScriptAPI - " + i + " ["); for (int index : mapping.map.keySet()) { bw.append(mapping.map.get(index) + ": " + index + " "); } diff --git a/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java b/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java index 4c6cf000c..a9ea94d03 100644 --- a/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java +++ b/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java @@ -336,19 +336,19 @@ public final class CharacterDesign { return val; } - //Male head ids : Script - 701 [0: 1 1: 2 2: 3 3: 4 4: 5 5: 6 6: 7 7: 8 8: 9 91: 10 92: 11 93: 12 94: 13 95: 14 96: 15 97: 16 261: 17 262: 18 263: 19 264: 20 265: 21 266: 22 267: 23 268: 24 ] - //Female head ids: Script - 689 [45: 1 46: 2 47: 3 48: 4 49: 5 50: 6 51: 7 52: 8 53: 9 54: 10 135: 11 136: 12 137: 13 138: 14 139: 15 140: 16 141: 17 142: 318 143: 19 144: 20 145: 21 146: 22 269: 23 270: 24 271: 25 272: 26 273: 27 274: 28 275: 29 276: 30 277: 31 278: 32 279: 33 280: 34 ] - //Male jaw ids: Script - 703 [10: 1 11: 2 12: 3 13: 4 14: 5 15: 6 16: 7 17: 8 98: 9 99: 10 100: 11 101: 12 102: 13 103: 14 104: 15 305: 16 306: 17 307: 18 308: 19 ] - //Male torso ids: Script - 1128 [19: 1 20: 2 21: 3 22: 4 23: 5 24: 6 25: 7 111: 8 112: 9 113: 10 114: 11 115: 12 116: 13 ] - //Female torso ids: Script - 1129 [57: 1 58: 2 59: 3 60: 4 153: 5 154: 6 155: 7 156: 8 157: 9 158: 10 ] - //Male arm ids: Script - 1130 [27: 1 28: 2 29: 3 30: 4 31: 5 105: 6 106: 7 107: 8 108: 9 109: 10 110: 11 ] - //Female arm ids: Script - 1131 [62: 1 63: 2 64: 3 65: 4 147: 5 148: 6 149: 7 150: 8 151: 9 152: 10 ] - //Male hand ids: Script - 1132 [34: 1 84: 2 117: 3 118: 4 119: 5 120: 6 121: 7 122: 8 123: 9 124: 10 125: 11 126: 12 ] - //Female hand ids: Script - 1133 [68: 1 127: 2 159: 3 160: 4 161: 5 162: 6 163: 7 164: 8 165: 9 166: 10 167: 11 168: 12 ] - //Male leg ids: Script - 1134 [37: 1 38: 2 39: 3 40: 4 85: 5 86: 6 87: 7 88: 8 89: 9 90: 10 ] - //Female leg ids: Script - 1135 [71: 1 72: 2 73: 3 74: 4 75: 5 76: 6 77: 7 128: 8 129: 9 130: 10 131: 11 132: 12 133: 13 134: 14 ] - //Male feet ids: Script - 1136 [43: 1 ] - //Female feet ids: Script - 1137 [80: 1 ] + //Male head ids : ScriptAPI - 701 [0: 1 1: 2 2: 3 3: 4 4: 5 5: 6 6: 7 7: 8 8: 9 91: 10 92: 11 93: 12 94: 13 95: 14 96: 15 97: 16 261: 17 262: 18 263: 19 264: 20 265: 21 266: 22 267: 23 268: 24 ] + //Female head ids: ScriptAPI - 689 [45: 1 46: 2 47: 3 48: 4 49: 5 50: 6 51: 7 52: 8 53: 9 54: 10 135: 11 136: 12 137: 13 138: 14 139: 15 140: 16 141: 17 142: 318 143: 19 144: 20 145: 21 146: 22 269: 23 270: 24 271: 25 272: 26 273: 27 274: 28 275: 29 276: 30 277: 31 278: 32 279: 33 280: 34 ] + //Male jaw ids: ScriptAPI - 703 [10: 1 11: 2 12: 3 13: 4 14: 5 15: 6 16: 7 17: 8 98: 9 99: 10 100: 11 101: 12 102: 13 103: 14 104: 15 305: 16 306: 17 307: 18 308: 19 ] + //Male torso ids: ScriptAPI - 1128 [19: 1 20: 2 21: 3 22: 4 23: 5 24: 6 25: 7 111: 8 112: 9 113: 10 114: 11 115: 12 116: 13 ] + //Female torso ids: ScriptAPI - 1129 [57: 1 58: 2 59: 3 60: 4 153: 5 154: 6 155: 7 156: 8 157: 9 158: 10 ] + //Male arm ids: ScriptAPI - 1130 [27: 1 28: 2 29: 3 30: 4 31: 5 105: 6 106: 7 107: 8 108: 9 109: 10 110: 11 ] + //Female arm ids: ScriptAPI - 1131 [62: 1 63: 2 64: 3 65: 4 147: 5 148: 6 149: 7 150: 8 151: 9 152: 10 ] + //Male hand ids: ScriptAPI - 1132 [34: 1 84: 2 117: 3 118: 4 119: 5 120: 6 121: 7 122: 8 123: 9 124: 10 125: 11 126: 12 ] + //Female hand ids: ScriptAPI - 1133 [68: 1 127: 2 159: 3 160: 4 161: 5 162: 6 163: 7 164: 8 165: 9 166: 10 167: 11 168: 12 ] + //Male leg ids: ScriptAPI - 1134 [37: 1 38: 2 39: 3 40: 4 85: 5 86: 6 87: 7 88: 8 89: 9 90: 10 ] + //Female leg ids: ScriptAPI - 1135 [71: 1 72: 2 73: 3 74: 4 75: 5 76: 6 77: 7 128: 8 129: 9 130: 10 131: 11 132: 12 133: 13 134: 14 ] + //Male feet ids: ScriptAPI - 1136 [43: 1 ] + //Female feet ids: ScriptAPI - 1137 [80: 1 ] } diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java index bca2e58d2..23385fcb0 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java @@ -5,9 +5,13 @@ import org.crandor.game.interaction.DestinationFlag; import org.crandor.game.interaction.MovementPulse; import org.crandor.game.node.entity.Entity; import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.ai.general.ScriptAPI; +import org.crandor.game.node.entity.player.ai.general.scriptrepository.Script; import org.crandor.game.node.entity.player.info.PlayerDetails; +import org.crandor.game.system.task.Pulse; import org.crandor.game.world.map.Location; import org.crandor.tools.StringUtils; +import plugin.skill.thieving.ThievingOptionPlugin; import java.util.HashMap; import java.util.Map; @@ -52,7 +56,12 @@ public class AIPlayer extends Player { * The player controlling this AIP. */ private Player controler; - + + /** + * The scriptAPI the bot will perform + */ + private ScriptAPI scriptAPI; + /** * Constructs a new {@code AIPlayer} {@code Object}. * @param name The name of the AIP. @@ -66,6 +75,7 @@ public class AIPlayer extends Player { super.getDetails().setSession(ArtificialSession.getSingleton()); this.username = StringUtils.formatDisplayName(name); this.uid = currentUID++; + this.scriptAPI = new ScriptAPI(); } @Override @@ -133,6 +143,26 @@ public class AIPlayer extends Player { this.setAttribute("dead", true); } + public void runScript(Script script) + { + if (!this.getPulseManager().hasPulseRunning()) + { + getPulseManager().run(new Pulse() { + @Override + public boolean pulse() { + return false; + } + + @Override + public boolean update() { + super.update(); + script.runLoop(); + return true; + } + }); + } + } + /** * Gets the UID. * @return the UID. @@ -192,5 +222,4 @@ public class AIPlayer extends Player { public void setControler(Player controler) { this.controler = controler; } - } \ No newline at end of file diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java new file mode 100644 index 000000000..8311a6ecc --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java @@ -0,0 +1,35 @@ +package org.crandor.game.node.entity.player.ai.general; + +import org.crandor.game.node.entity.player.ai.AIPBuilder; +import org.crandor.game.node.entity.player.ai.AIPlayer; +import org.crandor.game.node.entity.player.ai.general.scriptrepository.Script; +import org.crandor.game.system.task.Pulse; +import org.crandor.game.world.GameWorld; +import org.crandor.game.world.map.Location; +import org.crandor.game.world.repository.Repository; + +public class GeneralBotCreator { + + public GeneralBotCreator(String botName, Location loc, Script botScript) + { + AIPlayer bot = AIPBuilder.create(botName, loc); + Repository.getPlayers().add(bot); + bot.init(); + botScript.setPlayer(bot); + + GameWorld.submit(new Pulse(1, bot) { + int ticks = 0; + @Override + public boolean pulse() { + if (ticks ++ == 5000) + { + AIPlayer.deregister(bot.getUid()); + return true; + } + + bot.runScript(botScript); + return false; + } + }); + } +} diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java new file mode 100644 index 000000000..f4e54af64 --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java @@ -0,0 +1,49 @@ +package org.crandor.game.node.entity.player.ai.general; + +import org.crandor.game.node.entity.npc.NPC; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.object.GameObject; +import org.crandor.game.world.map.Location; +import org.crandor.game.world.map.RegionManager; +import org.crandor.game.world.map.RegionPlane; +import org.crandor.game.world.map.path.Pathfinder; + +public class ScriptAPI { + + public double distance(Location l1, Location l2) { + return Pathfinder.find(l1, l2).getPoints().size(); + } + + public NPC getNearestNPC(Location loc, String npcName) { + NPC npc = null; + double minDistance = Double.MAX_VALUE; + for (RegionPlane p : RegionManager.forId(loc.getRegionId()).getPlanes()) { + for (NPC n : p.getNpcs()) { + if (n != null) { + if (n.getName().equals(npcName) && distance(loc, n.getLocation()) < minDistance) { + npc = n; + } + } + } + } + + System.out.println("Returning " + npc.getName()); + return npc; + } + + public GameObject getNearestGameObject(Location loc, int objectId) { + GameObject nearestObject = null; + double minDistance = Double.MAX_VALUE; + for (GameObject[] o : RegionManager.forId(loc.getRegionId()).getPlanes()[0].getObjects()) { + for (GameObject obj : o) { + if (obj != null) { + if (distance(loc, obj.getLocation()) < minDistance) { + nearestObject = obj; + } + } + } + } + + return nearestObject; + } +} diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java new file mode 100644 index 000000000..2f3cdd986 --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java @@ -0,0 +1,12 @@ +package org.crandor.game.node.entity.player.ai.general.scriptrepository; + +import org.crandor.game.node.entity.player.Player; +import plugin.skill.thieving.ThievingOptionPlugin; + +public class ManThiever extends Script { + + @Override + public void runLoop() { + new ThievingOptionPlugin().handle(me, scriptAPI.getNearestNPC(me.getLocation(), "Man"), "pickpocket"); + } +} diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java new file mode 100644 index 000000000..534575d34 --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java @@ -0,0 +1,16 @@ +package org.crandor.game.node.entity.player.ai.general.scriptrepository; + +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.ai.general.ScriptAPI; + +public abstract class Script { + public Player me; + public ScriptAPI scriptAPI = new ScriptAPI(); + + public void setPlayer(Player me) + { + this.me = me; + } + + public abstract void runLoop(); +} diff --git a/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java b/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java index bbf05eb0e..0c597b219 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java +++ b/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java @@ -137,7 +137,7 @@ public final class ScriptCompiler { line = rawScript.poll(); if (line == null) { br.close(); - throw new ScriptException("Script " + file.getName() + " is empty!", -1); + throw new ScriptException("ScriptAPI " + file.getName() + " is empty!", -1); } br.close(); ScriptContext context = parseScript(line, rawScript, new ScriptEntry(null, null, null, false), null); diff --git a/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java b/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java index 13d613994..9fa2e7dd7 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java +++ b/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java @@ -1,7 +1,7 @@ package org.crandor.game.system.script; /** - * Script context, this can be a condition or an instruction. + * ScriptAPI context, this can be a condition or an instruction. * @author Emperor */ public abstract class ScriptContext { diff --git a/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java b/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java index 2bccc833a..36b9b1f94 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java +++ b/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java @@ -7,7 +7,7 @@ import org.crandor.game.system.script.ScriptContext; import java.util.Arrays; /** - * Script condition for checking if a player has an item in the inventory. + * ScriptAPI condition for checking if a player has an item in the inventory. * @author Emperor */ public final class InvItemCondition extends ScriptContext { diff --git a/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java b/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java index a4e1facd9..e6b0e2e59 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java +++ b/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java @@ -4,7 +4,7 @@ import org.crandor.game.node.entity.player.Player; import org.crandor.game.system.script.ScriptContext; /** - * Script condition for checking if a player has warrior guild tokens. + * ScriptAPI condition for checking if a player has warrior guild tokens. * @author 'Vexia */ public final class WGuildTokenCondition extends ScriptContext { diff --git a/09HDscape-server/src/plugin/command/AIPCommandPlugin.java b/09HDscape-server/src/plugin/command/AIPCommandPlugin.java index 2534a5663..bbec35221 100644 --- a/09HDscape-server/src/plugin/command/AIPCommandPlugin.java +++ b/09HDscape-server/src/plugin/command/AIPCommandPlugin.java @@ -4,6 +4,8 @@ import org.crandor.game.interaction.Interaction; 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.AIPlayer; +import org.crandor.game.node.entity.player.ai.general.GeneralBotCreator; +import org.crandor.game.node.entity.player.ai.general.scriptrepository.ManThiever; import org.crandor.game.node.entity.player.ai.pvp.PVPAIPActions; import org.crandor.game.node.entity.player.ai.pvp.PVPAIPBuilderUtils; import org.crandor.game.node.entity.player.ai.resource.ResourceAIPActions; @@ -25,6 +27,7 @@ import java.util.List; /** * Handles the AIPlayer commands. + * These commands are for bots * @author Emperor */ @InitializablePlugin @@ -176,6 +179,14 @@ public final class AIPCommandPlugin extends CommandPlugin { case "pvpfight": PVPAIPActions.syncBotThread(player); return true; + + /* + Start regular bots + */ + case "manthiev": + new GeneralBotCreator("Bot", player.getLocation(), new ManThiever()); + break; + } return false; } From 05896914fb06243c30d73277963a861945de52c8 Mon Sep 17 00:00:00 2001 From: dginovker Date: Sat, 8 Jun 2019 21:14:05 -0400 Subject: [PATCH 7/7] Tabs to spaces --- .../data/eco/grand_exchange_db.emp | Bin 138082 -> 138082 bytes .../crandor/cache/def/impl/CS2Mapping.java | 2 +- .../global/tutorial/CharacterDesign.java | 26 +- .../game/node/entity/player/ai/AIPlayer.java | 33 +- .../player/ai/general/GeneralBotCreator.java | 35 ++ .../entity/player/ai/general/ScriptAPI.java | 49 +++ .../general/scriptrepository/ManThiever.java | 12 + .../ai/general/scriptrepository/Script.java | 16 + .../game/system/script/ScriptCompiler.java | 2 +- .../game/system/script/ScriptContext.java | 2 +- .../script/context/InvItemCondition.java | 2 +- .../script/context/WGuildTokenCondition.java | 2 +- .../src/plugin/command/AIPCommandPlugin.java | 335 +++++++++--------- 13 files changed, 334 insertions(+), 182 deletions(-) create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java create mode 100644 09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java diff --git a/09HDscape-server/data/eco/grand_exchange_db.emp b/09HDscape-server/data/eco/grand_exchange_db.emp index 6c5e146ee5faefcd29d2a45660f27b469e049b5c..dfacbcb3f1c4e0a3a452e46de27fe47e7d991642 100644 GIT binary patch delta 25 gcmaE~jpNZa4h{we#%wD`UG7GXRu0Ck986Kt0BIfuvj6}9 delta 25 gcmaE~jpNZa4h{we#%yETa{-MUtsIP7IhdlP0dornjsO4v diff --git a/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java b/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java index f2667e9a5..a0c8ead56 100644 --- a/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java +++ b/09HDscape-server/src/org/crandor/cache/def/impl/CS2Mapping.java @@ -80,7 +80,7 @@ public final class CS2Mapping { if (mapping.map == null) { continue; } - bw.append("Script - " + i + " ["); + bw.append("ScriptAPI - " + i + " ["); for (int index : mapping.map.keySet()) { bw.append(mapping.map.get(index) + ": " + index + " "); } diff --git a/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java b/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java index 4c6cf000c..a9ea94d03 100644 --- a/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java +++ b/09HDscape-server/src/org/crandor/game/content/global/tutorial/CharacterDesign.java @@ -336,19 +336,19 @@ public final class CharacterDesign { return val; } - //Male head ids : Script - 701 [0: 1 1: 2 2: 3 3: 4 4: 5 5: 6 6: 7 7: 8 8: 9 91: 10 92: 11 93: 12 94: 13 95: 14 96: 15 97: 16 261: 17 262: 18 263: 19 264: 20 265: 21 266: 22 267: 23 268: 24 ] - //Female head ids: Script - 689 [45: 1 46: 2 47: 3 48: 4 49: 5 50: 6 51: 7 52: 8 53: 9 54: 10 135: 11 136: 12 137: 13 138: 14 139: 15 140: 16 141: 17 142: 318 143: 19 144: 20 145: 21 146: 22 269: 23 270: 24 271: 25 272: 26 273: 27 274: 28 275: 29 276: 30 277: 31 278: 32 279: 33 280: 34 ] - //Male jaw ids: Script - 703 [10: 1 11: 2 12: 3 13: 4 14: 5 15: 6 16: 7 17: 8 98: 9 99: 10 100: 11 101: 12 102: 13 103: 14 104: 15 305: 16 306: 17 307: 18 308: 19 ] - //Male torso ids: Script - 1128 [19: 1 20: 2 21: 3 22: 4 23: 5 24: 6 25: 7 111: 8 112: 9 113: 10 114: 11 115: 12 116: 13 ] - //Female torso ids: Script - 1129 [57: 1 58: 2 59: 3 60: 4 153: 5 154: 6 155: 7 156: 8 157: 9 158: 10 ] - //Male arm ids: Script - 1130 [27: 1 28: 2 29: 3 30: 4 31: 5 105: 6 106: 7 107: 8 108: 9 109: 10 110: 11 ] - //Female arm ids: Script - 1131 [62: 1 63: 2 64: 3 65: 4 147: 5 148: 6 149: 7 150: 8 151: 9 152: 10 ] - //Male hand ids: Script - 1132 [34: 1 84: 2 117: 3 118: 4 119: 5 120: 6 121: 7 122: 8 123: 9 124: 10 125: 11 126: 12 ] - //Female hand ids: Script - 1133 [68: 1 127: 2 159: 3 160: 4 161: 5 162: 6 163: 7 164: 8 165: 9 166: 10 167: 11 168: 12 ] - //Male leg ids: Script - 1134 [37: 1 38: 2 39: 3 40: 4 85: 5 86: 6 87: 7 88: 8 89: 9 90: 10 ] - //Female leg ids: Script - 1135 [71: 1 72: 2 73: 3 74: 4 75: 5 76: 6 77: 7 128: 8 129: 9 130: 10 131: 11 132: 12 133: 13 134: 14 ] - //Male feet ids: Script - 1136 [43: 1 ] - //Female feet ids: Script - 1137 [80: 1 ] + //Male head ids : ScriptAPI - 701 [0: 1 1: 2 2: 3 3: 4 4: 5 5: 6 6: 7 7: 8 8: 9 91: 10 92: 11 93: 12 94: 13 95: 14 96: 15 97: 16 261: 17 262: 18 263: 19 264: 20 265: 21 266: 22 267: 23 268: 24 ] + //Female head ids: ScriptAPI - 689 [45: 1 46: 2 47: 3 48: 4 49: 5 50: 6 51: 7 52: 8 53: 9 54: 10 135: 11 136: 12 137: 13 138: 14 139: 15 140: 16 141: 17 142: 318 143: 19 144: 20 145: 21 146: 22 269: 23 270: 24 271: 25 272: 26 273: 27 274: 28 275: 29 276: 30 277: 31 278: 32 279: 33 280: 34 ] + //Male jaw ids: ScriptAPI - 703 [10: 1 11: 2 12: 3 13: 4 14: 5 15: 6 16: 7 17: 8 98: 9 99: 10 100: 11 101: 12 102: 13 103: 14 104: 15 305: 16 306: 17 307: 18 308: 19 ] + //Male torso ids: ScriptAPI - 1128 [19: 1 20: 2 21: 3 22: 4 23: 5 24: 6 25: 7 111: 8 112: 9 113: 10 114: 11 115: 12 116: 13 ] + //Female torso ids: ScriptAPI - 1129 [57: 1 58: 2 59: 3 60: 4 153: 5 154: 6 155: 7 156: 8 157: 9 158: 10 ] + //Male arm ids: ScriptAPI - 1130 [27: 1 28: 2 29: 3 30: 4 31: 5 105: 6 106: 7 107: 8 108: 9 109: 10 110: 11 ] + //Female arm ids: ScriptAPI - 1131 [62: 1 63: 2 64: 3 65: 4 147: 5 148: 6 149: 7 150: 8 151: 9 152: 10 ] + //Male hand ids: ScriptAPI - 1132 [34: 1 84: 2 117: 3 118: 4 119: 5 120: 6 121: 7 122: 8 123: 9 124: 10 125: 11 126: 12 ] + //Female hand ids: ScriptAPI - 1133 [68: 1 127: 2 159: 3 160: 4 161: 5 162: 6 163: 7 164: 8 165: 9 166: 10 167: 11 168: 12 ] + //Male leg ids: ScriptAPI - 1134 [37: 1 38: 2 39: 3 40: 4 85: 5 86: 6 87: 7 88: 8 89: 9 90: 10 ] + //Female leg ids: ScriptAPI - 1135 [71: 1 72: 2 73: 3 74: 4 75: 5 76: 6 77: 7 128: 8 129: 9 130: 10 131: 11 132: 12 133: 13 134: 14 ] + //Male feet ids: ScriptAPI - 1136 [43: 1 ] + //Female feet ids: ScriptAPI - 1137 [80: 1 ] } diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java index bca2e58d2..23385fcb0 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/AIPlayer.java @@ -5,9 +5,13 @@ import org.crandor.game.interaction.DestinationFlag; import org.crandor.game.interaction.MovementPulse; import org.crandor.game.node.entity.Entity; import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.ai.general.ScriptAPI; +import org.crandor.game.node.entity.player.ai.general.scriptrepository.Script; import org.crandor.game.node.entity.player.info.PlayerDetails; +import org.crandor.game.system.task.Pulse; import org.crandor.game.world.map.Location; import org.crandor.tools.StringUtils; +import plugin.skill.thieving.ThievingOptionPlugin; import java.util.HashMap; import java.util.Map; @@ -52,7 +56,12 @@ public class AIPlayer extends Player { * The player controlling this AIP. */ private Player controler; - + + /** + * The scriptAPI the bot will perform + */ + private ScriptAPI scriptAPI; + /** * Constructs a new {@code AIPlayer} {@code Object}. * @param name The name of the AIP. @@ -66,6 +75,7 @@ public class AIPlayer extends Player { super.getDetails().setSession(ArtificialSession.getSingleton()); this.username = StringUtils.formatDisplayName(name); this.uid = currentUID++; + this.scriptAPI = new ScriptAPI(); } @Override @@ -133,6 +143,26 @@ public class AIPlayer extends Player { this.setAttribute("dead", true); } + public void runScript(Script script) + { + if (!this.getPulseManager().hasPulseRunning()) + { + getPulseManager().run(new Pulse() { + @Override + public boolean pulse() { + return false; + } + + @Override + public boolean update() { + super.update(); + script.runLoop(); + return true; + } + }); + } + } + /** * Gets the UID. * @return the UID. @@ -192,5 +222,4 @@ public class AIPlayer extends Player { public void setControler(Player controler) { this.controler = controler; } - } \ No newline at end of file diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java new file mode 100644 index 000000000..8311a6ecc --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/GeneralBotCreator.java @@ -0,0 +1,35 @@ +package org.crandor.game.node.entity.player.ai.general; + +import org.crandor.game.node.entity.player.ai.AIPBuilder; +import org.crandor.game.node.entity.player.ai.AIPlayer; +import org.crandor.game.node.entity.player.ai.general.scriptrepository.Script; +import org.crandor.game.system.task.Pulse; +import org.crandor.game.world.GameWorld; +import org.crandor.game.world.map.Location; +import org.crandor.game.world.repository.Repository; + +public class GeneralBotCreator { + + public GeneralBotCreator(String botName, Location loc, Script botScript) + { + AIPlayer bot = AIPBuilder.create(botName, loc); + Repository.getPlayers().add(bot); + bot.init(); + botScript.setPlayer(bot); + + GameWorld.submit(new Pulse(1, bot) { + int ticks = 0; + @Override + public boolean pulse() { + if (ticks ++ == 5000) + { + AIPlayer.deregister(bot.getUid()); + return true; + } + + bot.runScript(botScript); + return false; + } + }); + } +} diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java new file mode 100644 index 000000000..f4e54af64 --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/ScriptAPI.java @@ -0,0 +1,49 @@ +package org.crandor.game.node.entity.player.ai.general; + +import org.crandor.game.node.entity.npc.NPC; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.object.GameObject; +import org.crandor.game.world.map.Location; +import org.crandor.game.world.map.RegionManager; +import org.crandor.game.world.map.RegionPlane; +import org.crandor.game.world.map.path.Pathfinder; + +public class ScriptAPI { + + public double distance(Location l1, Location l2) { + return Pathfinder.find(l1, l2).getPoints().size(); + } + + public NPC getNearestNPC(Location loc, String npcName) { + NPC npc = null; + double minDistance = Double.MAX_VALUE; + for (RegionPlane p : RegionManager.forId(loc.getRegionId()).getPlanes()) { + for (NPC n : p.getNpcs()) { + if (n != null) { + if (n.getName().equals(npcName) && distance(loc, n.getLocation()) < minDistance) { + npc = n; + } + } + } + } + + System.out.println("Returning " + npc.getName()); + return npc; + } + + public GameObject getNearestGameObject(Location loc, int objectId) { + GameObject nearestObject = null; + double minDistance = Double.MAX_VALUE; + for (GameObject[] o : RegionManager.forId(loc.getRegionId()).getPlanes()[0].getObjects()) { + for (GameObject obj : o) { + if (obj != null) { + if (distance(loc, obj.getLocation()) < minDistance) { + nearestObject = obj; + } + } + } + } + + return nearestObject; + } +} diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java new file mode 100644 index 000000000..2f3cdd986 --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/ManThiever.java @@ -0,0 +1,12 @@ +package org.crandor.game.node.entity.player.ai.general.scriptrepository; + +import org.crandor.game.node.entity.player.Player; +import plugin.skill.thieving.ThievingOptionPlugin; + +public class ManThiever extends Script { + + @Override + public void runLoop() { + new ThievingOptionPlugin().handle(me, scriptAPI.getNearestNPC(me.getLocation(), "Man"), "pickpocket"); + } +} diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java new file mode 100644 index 000000000..534575d34 --- /dev/null +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/general/scriptrepository/Script.java @@ -0,0 +1,16 @@ +package org.crandor.game.node.entity.player.ai.general.scriptrepository; + +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.ai.general.ScriptAPI; + +public abstract class Script { + public Player me; + public ScriptAPI scriptAPI = new ScriptAPI(); + + public void setPlayer(Player me) + { + this.me = me; + } + + public abstract void runLoop(); +} diff --git a/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java b/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java index bbf05eb0e..0c597b219 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java +++ b/09HDscape-server/src/org/crandor/game/system/script/ScriptCompiler.java @@ -137,7 +137,7 @@ public final class ScriptCompiler { line = rawScript.poll(); if (line == null) { br.close(); - throw new ScriptException("Script " + file.getName() + " is empty!", -1); + throw new ScriptException("ScriptAPI " + file.getName() + " is empty!", -1); } br.close(); ScriptContext context = parseScript(line, rawScript, new ScriptEntry(null, null, null, false), null); diff --git a/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java b/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java index 13d613994..9fa2e7dd7 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java +++ b/09HDscape-server/src/org/crandor/game/system/script/ScriptContext.java @@ -1,7 +1,7 @@ package org.crandor.game.system.script; /** - * Script context, this can be a condition or an instruction. + * ScriptAPI context, this can be a condition or an instruction. * @author Emperor */ public abstract class ScriptContext { diff --git a/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java b/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java index 2bccc833a..36b9b1f94 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java +++ b/09HDscape-server/src/org/crandor/game/system/script/context/InvItemCondition.java @@ -7,7 +7,7 @@ import org.crandor.game.system.script.ScriptContext; import java.util.Arrays; /** - * Script condition for checking if a player has an item in the inventory. + * ScriptAPI condition for checking if a player has an item in the inventory. * @author Emperor */ public final class InvItemCondition extends ScriptContext { diff --git a/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java b/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java index a4e1facd9..e6b0e2e59 100644 --- a/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java +++ b/09HDscape-server/src/org/crandor/game/system/script/context/WGuildTokenCondition.java @@ -4,7 +4,7 @@ import org.crandor.game.node.entity.player.Player; import org.crandor.game.system.script.ScriptContext; /** - * Script condition for checking if a player has warrior guild tokens. + * ScriptAPI condition for checking if a player has warrior guild tokens. * @author 'Vexia */ public final class WGuildTokenCondition extends ScriptContext { diff --git a/09HDscape-server/src/plugin/command/AIPCommandPlugin.java b/09HDscape-server/src/plugin/command/AIPCommandPlugin.java index 2534a5663..9a5813d0a 100644 --- a/09HDscape-server/src/plugin/command/AIPCommandPlugin.java +++ b/09HDscape-server/src/plugin/command/AIPCommandPlugin.java @@ -4,6 +4,8 @@ import org.crandor.game.interaction.Interaction; 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.AIPlayer; +import org.crandor.game.node.entity.player.ai.general.GeneralBotCreator; +import org.crandor.game.node.entity.player.ai.general.scriptrepository.ManThiever; import org.crandor.game.node.entity.player.ai.pvp.PVPAIPActions; import org.crandor.game.node.entity.player.ai.pvp.PVPAIPBuilderUtils; import org.crandor.game.node.entity.player.ai.resource.ResourceAIPActions; @@ -25,173 +27,182 @@ import java.util.List; /** * Handles the AIPlayer commands. + * These commands are for bots * @author Emperor */ @InitializablePlugin public final class AIPCommandPlugin extends CommandPlugin { - @Override - public Plugin newInstance(Object arg) throws Throwable { - link(CommandSet.ADMINISTRATOR); - return this; - } + @Override + public Plugin newInstance(Object arg) throws Throwable { + link(CommandSet.ADMINISTRATOR); + return this; + } - @Override - public boolean parse(final Player player, String name, String[] args) { - List legion = player.getAttribute("aip_legion"); - switch (name) { - case "desaip": - player.removeAttribute("aip_select"); - return true; - case "sellegion": - if (legion != null && !legion.isEmpty()) { - player.setAttribute("aip_select", legion.get(0)); - } - return true; - case "regroup": - Player last = player; - if (legion != null && !legion.isEmpty()) { - for (AIPlayer p : legion) { - p.follow(last); - last = p; - } - } - player.removeAttribute("aip_select"); - return true; - case "clearlegion": - if (legion != null && !legion.isEmpty()) { - for (AIPlayer p : legion) { - AIPlayer.deregister(p.getUid()); - } - legion.clear(); - } - player.removeAttribute("aip_select"); - player.removeAttribute("aip_legion"); - return true; - case "clearaips": - for (Player p : Repository.getPlayers()) { - if (p.isArtificial()) { - p.clear(); - } - } - return true; - case "aip": - name = args.length < 2 ? player.getName() : args[1]; - AIPlayer p = AIPBuilder.copy(player, name, player.getLocation().transform(0, 1, 0)); - Repository.getPlayers().add(p); - p.init(); - - Interaction.sendOption(player, 7, "Control"); - return true; - case "legion": - int size = args.length < 2 ? 10 : Integer.parseInt(args[1]); - last = player; - if (legion == null) { - player.setAttribute("aip_legion", legion = new ArrayList<>()); - } - Interaction.sendOption(player, 7, "Control"); - boolean joinClan = player.getCommunication().getClan() != null && !player.getCommunication().getClan().isDefault(); - String message = player.getName().equals("ethan") ? "The Dark Army marches again!" : null; // Add - // your - // own - // 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); - } - legion.add(aip); - final Player l = last; - if (joinClan) { - if (player.getCommunication().getClan().enter(aip)) { - aip.getCommunication().setClan(player.getCommunication().getClan()); - } - if (player.getCommunication().getClan().getClanWar() != null) { - player.getCommunication().getClan().getClanWar().fireEvent("join", aip); - } - } - GameWorld.submit(new Pulse(1) { - @Override - public boolean pulse() { - aip.follow(l); - return true; - } - }); - if (message != null) { - aip.sendChat("The Dark Army marches again!"); - } - last = aip; - } - return true; - case "pvplegion": - size = args.length < 2 ? 10 : Integer.parseInt(args[1]); - last = player; - if (PVPAIPActions.pvp_players == null) { - player.setAttribute("aip_legion", PVPAIPActions.pvp_players = new ArrayList<>()); - } - for (int i = 0; i < size; i++) { - String aipName = PVPAIPBuilderUtils.names[i]; - final AIPlayer aip = AIPBuilder.create(aipName, 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); - - if (PVPAIPActions.pvp_players.isEmpty()) { - aip.setAttribute("aip_legion", PVPAIPActions.pvp_players); - } - PVPAIPActions.pvp_players.add(aip); - last = aip; - } - return true; - - case "resourcelegion": - size = args.length < 2 ? 10 : Integer.parseInt(args[1]); - last = player; - if (ResourceAIPActions.resource_players == null) { - player.setAttribute("aip_legion", ResourceAIPActions.resource_players = new ArrayList<>()); - } - for (int i = 0; i < size; i++) { - String aipName = PVPAIPBuilderUtils.names[i]; - final AIPlayer aip = AIPBuilder.create(aipName, 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); - - if (ResourceAIPActions.resource_players .isEmpty()) { - aip.setAttribute("aip_legion", ResourceAIPActions.resource_players ); - } - ResourceAIPActions.resource_players.add(aip); - last = aip; - } - return true; - case "syncresource": - ResourceAIPActions.syncBotThread(player); - break; - case "pvpfight": - PVPAIPActions.syncBotThread(player); - return true; - } - return false; - } - - private Location generateLocation(Player player) { - Location random_location = player.getLocation().transform(RandomFunction.random(-15, 15), RandomFunction.random(-15, 15), 0); - if (!RegionManager.isTeleportPermitted(random_location)) { - return generateLocation(player); - } - if (!Pathfinder.find(player, random_location, false, Pathfinder.DUMB).isSuccessful()) { - return generateLocation(player); - } - if (RegionManager.getObject(random_location) != null) { - return generateLocation(player); - } - return random_location; - } + @Override + public boolean parse(final Player player, String name, String[] args) { + List legion = player.getAttribute("aip_legion"); + switch (name) { + case "desaip": + player.removeAttribute("aip_select"); + return true; + case "sellegion": + if (legion != null && !legion.isEmpty()) { + player.setAttribute("aip_select", legion.get(0)); + } + return true; + case "regroup": + Player last = player; + if (legion != null && !legion.isEmpty()) { + for (AIPlayer p : legion) { + p.follow(last); + last = p; + } + } + player.removeAttribute("aip_select"); + return true; + case "clearlegion": + if (legion != null && !legion.isEmpty()) { + for (AIPlayer p : legion) { + AIPlayer.deregister(p.getUid()); + } + legion.clear(); + } + player.removeAttribute("aip_select"); + player.removeAttribute("aip_legion"); + return true; + case "clearaips": + for (Player p : Repository.getPlayers()) { + if (p.isArtificial()) { + p.clear(); + } + } + return true; + case "aip": + name = args.length < 2 ? player.getName() : args[1]; + AIPlayer p = AIPBuilder.copy(player, name, player.getLocation().transform(0, 1, 0)); + Repository.getPlayers().add(p); + p.init(); + + Interaction.sendOption(player, 7, "Control"); + return true; + case "legion": + int size = args.length < 2 ? 10 : Integer.parseInt(args[1]); + last = player; + if (legion == null) { + player.setAttribute("aip_legion", legion = new ArrayList<>()); + } + Interaction.sendOption(player, 7, "Control"); + boolean joinClan = player.getCommunication().getClan() != null && !player.getCommunication().getClan().isDefault(); + String message = player.getName().equals("ethan") ? "The Dark Army marches again!" : null; // Add + // your + // own + // 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); + } + legion.add(aip); + final Player l = last; + if (joinClan) { + if (player.getCommunication().getClan().enter(aip)) { + aip.getCommunication().setClan(player.getCommunication().getClan()); + } + if (player.getCommunication().getClan().getClanWar() != null) { + player.getCommunication().getClan().getClanWar().fireEvent("join", aip); + } + } + GameWorld.submit(new Pulse(1) { + @Override + public boolean pulse() { + aip.follow(l); + return true; + } + }); + if (message != null) { + aip.sendChat("The Dark Army marches again!"); + } + last = aip; + } + return true; + case "pvplegion": + size = args.length < 2 ? 10 : Integer.parseInt(args[1]); + last = player; + if (PVPAIPActions.pvp_players == null) { + player.setAttribute("aip_legion", PVPAIPActions.pvp_players = new ArrayList<>()); + } + for (int i = 0; i < size; i++) { + String aipName = PVPAIPBuilderUtils.names[i]; + final AIPlayer aip = AIPBuilder.create(aipName, 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); + + if (PVPAIPActions.pvp_players.isEmpty()) { + aip.setAttribute("aip_legion", PVPAIPActions.pvp_players); + } + PVPAIPActions.pvp_players.add(aip); + last = aip; + } + return true; + + case "resourcelegion": + size = args.length < 2 ? 10 : Integer.parseInt(args[1]); + last = player; + if (ResourceAIPActions.resource_players == null) { + player.setAttribute("aip_legion", ResourceAIPActions.resource_players = new ArrayList<>()); + } + for (int i = 0; i < size; i++) { + String aipName = PVPAIPBuilderUtils.names[i]; + final AIPlayer aip = AIPBuilder.create(aipName, 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); + + if (ResourceAIPActions.resource_players .isEmpty()) { + aip.setAttribute("aip_legion", ResourceAIPActions.resource_players ); + } + ResourceAIPActions.resource_players.add(aip); + last = aip; + } + return true; + case "syncresource": + ResourceAIPActions.syncBotThread(player); + break; + case "pvpfight": + PVPAIPActions.syncBotThread(player); + return true; + + /* + Start regular bots + */ + case "manthiev": + new GeneralBotCreator("Bot", player.getLocation(), new ManThiever()); + break; + + } + return false; + } + + private Location generateLocation(Player player) { + Location random_location = player.getLocation().transform(RandomFunction.random(-15, 15), RandomFunction.random(-15, 15), 0); + if (!RegionManager.isTeleportPermitted(random_location)) { + return generateLocation(player); + } + if (!Pathfinder.find(player, random_location, false, Pathfinder.DUMB).isSuccessful()) { + return generateLocation(player); + } + if (RegionManager.getObject(random_location) != null) { + return generateLocation(player); + } + return random_location; + } }