From 99e8d4674dac53133beedad1cf9c123616f02e9a Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sun, 2 Aug 2015 00:46:45 -0400 Subject: [PATCH] RenX.Core: * Mutators are now tracked. * Proxy mine placements/disarms are now tracked. * Added Server::isPure(). RenX.Logging: * Cleaner default Kick format. Updated Jupiter --- Jupiter | 2 +- Release/Bot.lib | Bin 25566 -> 25566 bytes Release/Plugins/RenX.Core.lib | Bin 130002 -> 130270 bytes RenX.Core/RenX.h | 4 ++++ RenX.Core/RenX_PlayerInfo.h | 2 ++ RenX.Core/RenX_Server.cpp | 44 ++++++++++++++++++++++++++-------- RenX.Core/RenX_Server.h | 9 +++++++ RenX.Core/RenX_Tags.cpp | 2 +- RenX.Logging/RenX_Logging.cpp | 2 +- 9 files changed, 52 insertions(+), 13 deletions(-) diff --git a/Jupiter b/Jupiter index 6400a15..5a45d44 160000 --- a/Jupiter +++ b/Jupiter @@ -1 +1 @@ -Subproject commit 6400a1542e1d005e47cd5c9989a58a1731e00e27 +Subproject commit 5a45d44a5000587917a5d9ae53fac712e8247e98 diff --git a/Release/Bot.lib b/Release/Bot.lib index a164183470e8ac12a5f1e2fb84a77fba5ff19a52..f5d846109476e20a0a9712556b827cd3e256c068 100644 GIT binary patch delta 2417 zcmZuyT}+#06n+aGg8`$`(hB{6LfHlmXj%9z{agQl{?S4UrGrv_GBsQLNwym^FP$bD zWjQySUcfHYxUn$O#CW4q<3hZ07u$4Z4r27e7&CPjW-(FE_r5KDr=v-e=E?J%_c`Y| z@7o7kss~%D732QF-XUvW{}B8>p}#QLT(Qj9#9hXMw=ZPhtqomgEaYP>w$51Q3S$u| zSEc$y1xHGC@LkC`d{v^$4VONOThkmO$>E${mfeI=m%G70W@! z?oKdv8#blM+Up_4eE40DF?J=xm=wwB8_%eWYF5T1W@IMTz?zwr^|5|-ly$Kl)(G!6 zSyWBAJ58DfWpQoqz<^17vIoMdQug)gr%*R^P4y?#I3(B}vf-}=+s{f3NW+>^nP(Y( zZI@RCKMa?1t`SsrE8$1&g1=xFb=&g1aYrZNU3BPp-3^D2;2NjEk2swKFYqrp_vSz4 zqWse?T_yTXni*qiriRZCO7N{iA~kpNoF?S#;~X7?y_L}9))HRSEozyNSBAW(rXJ3_ z$y&f?ZsGfmJ4LkNq`()BCkTFSR^Y!JpCEY3Bk&hJ=Lp^%5O}jUOz=0n0$=rd2>y>( zcy2+@)#!QCWPn~@GvO3w{ko6Nu7E!-!f{?avr~Q>sq>{@;P?E41TT2@2dHQC#_QY+ z&~r^A0v{L|C3O(5k+VFCz0_fvE>|za_i5oqOEqkd&`b+^Vi~1-vN9^>(S|h)I1i1c z5w+#;c5&7j;lVgYb6gqIRmdJ}sIP~Xu}-j;RX}QtZb3s(sC$9|(gAJ|@Azuaz9()B zQT$9u@ZSv4iSFd_zd}J$r+}XgQ~Z8d)Oi$E);B;TqOFp<8O3f|aQETz0XM8iXfr=W zg!u0W9p!9P$Hg8Ln=uZ!Y_Y+|Q7XnA;`gr=No_dqY^@R6$0;W}E(&!c=a5`TWjzcZ z6p=7|ewrNqVL_?`r}-c(6(ygJ3A-=HqGUGr^Z278JQElEv+)?=|Cq-g$EOsy0bD69 z?+9OKd}!5h%j|`<6UvUB;TbnhE)(7Aq?mO8bzO1;-_$vYP%|xrp~Q0vp&o7}#L9J| z&;s#<88k_Hf$?$SOF4iHD`!NXu7UTG$}1si|C&^q(!=Q~5zq6eJciAzX&2$QssD8a zPmbv)Jn<&)O)IY`9}agS52p{dr_JzhRV%Eel;hDu;etO*Db;#N%!nvX&AhNXft?xQ zygGey7sLNwSV;@+hv}F0#6u_c#vc~p_yF_0>O;qNIhKXK4!AjMB1KE)#9{SwuPAT> zY|e>HBPe$Ar8N36({fl%=oCafL^I+PI}%-j*a|C|E<*Y~|K|LWp_{mStLKYu^}Go0 zBo_5xc(1n4LprM*wE-Zjxb1qy>wD4Ciq{v`9p%u9a~ zjbS-AQ!ii_YTQ^DX=1!E&c9`s?qZwH%t4IC7-OcHH;ajSzV~hMI~~3H^5i+^ea`co z_wD@~()}CKs_DRhqi^t7e?R;&VK_h7Qgw^5i93viSI%eOt&ho!MS_fFE-{wa!0)U1 z8tD@W4wviUyRvckx=f!RDu4O_gfvmu?A3!&a}<85w!>GwxSCjK+bq&Zv+H!?w8+vt@ zR|7u`RdTKgB$u7=<1WEpa*4j}1>U&3oA55U^}O$y}B+odU;<`*Ao*2Px}S_y#E}*dq)J`5{MG~jex+{0)B%36A+qP zQFAS7-m(~>KiEPzMXz5EQtyiRqY@nb;+dTuc9K3{4h#J5@F2m9nukZIX4J;}Tpyw5 zT1Ex#7#$;h5U*3RJc6?{V47ZUKP30*;96@fY>(1Ri+f@lqkFPCCj4l}9!B&-t8K>G zN_e|8>x|G~3eg-_L;5O3gA?l;p*7SEuKiVz4$&=W3XAH#@CcazH;7MsIqcdKH$^CZ zHX`_MMyR7Z5q*uKq6bx&acALTbq91rsRc;lhrJXHlf&*s1^zIqKFkQQn2z&vu@%Dq zDJJ-T$EcO_aUsHwBCHq(T(mji<2ZE!cZlD=HYBy9-`RQ-bdFO_c3d>-MNWs(NU|S- z4@yWFJ|9^L|BxUxfX8|eawW;nC4}4;6LB)ey#oHQ1kWT3HYF2;|6>7vl$=)KM)0O} zd?I|E@u97No7MoVpHxru6t}T?Qf;FV)+Tj)fDx?gQ3m*?!9xnQGomn(dPa4i0dA(m z%5`I*4U#Da&(r2`pu&WJx*2k%X(_d)djZAvZ50B5E}JkMg~Q55UEPz9+9vuDq4v(L=;;i<>@FF(zn zS|)$P`fmliS-*iyZAE@@^#k6l+n@sf7hOn*JW+z)IVLDb2x{6;P`A>8x)u|(I#ST` z8-gO{;O}{Y!qPOsMFcTlg=u!=5yYI1(5yNqh{;IO{OKo%$(o_L9Cty`W$@lyO(-U2 zKAouPG(Zs3ypTg8u3&GfX4ykQOoua?cT)s0onS1}d94koT86f@z; zn)iHQ2xx^#n2;AW?XoZcguoN#udxokxPm`dYJRUOi1{o~v#p^Z=ENz@0qAB9rz+y; zr)Z(MjVm~^NOQOV1i%ppGt0YcZX!}lTZE7~J6yBv2qpsIc{LgEj){a}yRU0@RT0GO z?xb0LD-OB6CFtwFG&cqbVs>O`&S6sK(MZi7m_UKL_ycUIui5^sAm(c*W=_=B98VU+ z9P6h!4u_a1jEw;I;!q6tz@|rl z52Km)t7wMc%Dj&>FoTg=CN2TiFdr1tOz9(tN!XxSQbZ7w4kMUPLNrUZ;XddwK-05} zAST+^VKc5^#yQQ>!h)DoM2z`pmm-cvloX1Qg9I@X^J;p-E2d|bW*`(XefDV<_7cRT z#cD?FK?J~9)DJVRrDnt-=m&F~Yd(U0=EL6^X&UHb|0zXa4FGvCK zBx(9x7Q}pjG0dPu%?uPPBd=%{AtFp)7|P74s#*N8pv7_cvFL(kR*E2IDU4wzI`m&A zh?$D~G5w&N89H7wEJP499Eug!a0QbQEhcWMMplGDU`&7mjE@_GA2A3Q6C0r!@)e2& zd>E`5kI9*F2pKbTie`SeAZEZ|&GZg}n9=Z(nb1cwFGCQMh`*W1r8Uzwi#Wm$nlxF{ z2L-~+o~TK^g<=8!YN<(v5ek7T_;<#n^&^k>M z`VjdKeJJQ43WV92s5yj|epAh+vFNyCk^iT89FlPb8!$0*{g^{*T*1mhnicS# z*$8FKhEtkLRbVLiAxZPa1wo4HxPtxRns3tuG2h$+ar`4%vw5;0=I0xlUxHCA;LbA5 zt(qt%@I8!VE@o-YK?n1_(ERWs3;^dJX)eH1=HhtG1&m|P!}vJ<5w%a#y*WA{_#M_U zU3?wp;tJYea>a67K?fMlgjLjZj1Z)_hARl3rfF7K5YrX~%QQ>T{I*V%pqm2kb8t0K zbE*O=wu0yQy*D@BDfnS;&&NajJogI~^2{3YiX7OLif{a4$l9uT+l`9t>xq%&vw!jP z?7mi6&Iq7_8&lF`f#>#k4c>D0cyEvp$KJt@AQBCmk|^DcM6s?UB3F~Rv7E%52om$~ zcUl;UBEclWz9Nxl2Z@N&B+jiOk(5Eg?@tmlvPfLGOk(bP&=pEz;-@4AbRtoxIf+D& zx|hVmWhBmYpg588E|lZp=*}db;Ng@O7}O5JElDJYlkkC(#8xC;3?Y$)`$@Qt{fmSz zSc%E1{!SwBGZ?&$#HkaIKY$4ilZgI_#BH$X2#Est+XvU~aANLF7}%D?@UtY2Y>Ok2 z7n2BBzA}=;_1z?@>>|+#*IV%VudhiAxw24GKI|L_^;Z)NUL@ zlpFyEM#9O7n5;J<2-$O(YhND{y%v&)i%lc32L>z}OQPjC5{EFL`CJUZ;NL&QBn$Ao zJG_{R=*)q!`1==lkmMn8xgVavxWqvSFDAYsVaOs9v3=nXWItYvI>6s4v!Dk?ZG#cZ z`olr!^1;~gLy`ZGVGtfp;u<(NnZ#10q#_grjKKt8Q49(!mc&z2H4oQBgde&#Pa`pT5+VX`C(cGn5tWwzf{tXQ9K`<{leI%7 zj%*KsP*~gz)X9|@g+F+8Hoyyp(}1Ha=itXe2Eb6K_vDeZ>JDe zTql1AYf)gaxPSd9svK-M0Iznz*k9rKAsCDTn+qM6@1qD|DW#1_9==Egl&N3 z*GaSng&;S01>`ou0o<^-(QfZ4#M{%GT)N8_YDdUOx}!$B09l{$}&W&CZd%5 zJ@TJ*5klvXkMFU@q2SSZOnL#K!~HB=N8|5(QSb^ynEpEotP4B_HQSI_4x&4tUc!)$ zj;J9pEg1Q3hS0V};o-UtPKld{-c^Jgk&VhDL^<)2s6zo%mpqd*%GRq!)u|>G60g(S zqM`^FRmBdmThySkq88Pr65>@+UNjc}6qSXqc#W#kKdG`OGvmA`;?rqu-k>X@h}bW( z#8c5o>=7+QS*k?ksRC6be=0-QL^&!=uTl|unVyKpqPQUXOB@jm=%DypoEH~F0m@JH zM19dr)c4fNs6kacT{Ft(Q|5UlWt407f3+^3C@4CL0wS;2DRzk_qJx0F8#6O{)Bn4% z)$-M&TB6Fv?aL>=?S0$KlodCI|2V%*_MOI_^7Hb0rp*fUtgDuPOSjkQQDN6RNDh66 zd|nurzC$LwLmTO#Y!XCOWmFTYkKcy}Q5m_q37vBfNe?8Sd>GPsySy7j<>i?`8l*=C z=s}@w`3phL6nBEu6ib>Si;niprc^guI_*4Fe~I-52>vgxhgOvKL>DV4hrdhy*+Q~H zm?KpkGFbhPDktxTQ4tv*M#YWTx^7fLmiv^7E9aU7Q#i7 z%#(1xlDr>G72R@mnmKYc*d#4iT6Pbi%0|v7gsQ7qb~mHu<}QDVlh%QJ)ssfeDbPGo zrZviROk3NW!p)=jO^&L!T2QC#yBrs-zXi2^?q*O+?@bjPE!xs;igsAr(u%^eweV+6 zTKA4tmKx(x)whqN+6}@AJ2z`}rikpDUSqa*w$!?33<`HY(y7`X?p?uVL4>~NEn0K)uys=! zi$lBE7H7xgU>9qy6Du8)+jg~92==Plf|Fe-*f?SqYO4r$=p5MyueFk8RjYXu1sovq z2~XUkYI0&%w5(wvEO8A+qf6XVK+ zD9e=-QO*Q^M_I+KR%O5}N6onI6l>I^k8}oZ5eaIg8}IesF>-h zM_QpacaPe4)eNgvIB^&^iY6L0y1?Lova8x?w_Uo6bcb7Ac_Xqrq8&%syEQVSRduoZ z5&TN(*3&JjFo_13yGj=?DiySolW3ZGgr%ql%$!W~ z%w09$&}?TwSA5oM9qX1b&Pt(jHvL&yC8eqM%-L48!!TWt3+K2?OW$qmvBGd7yIcP4vAPoOTFST2 zwUn#6Hm~wAA6W~*)K|5%ob?r--TW@5S<{#ltMw)&%`s6hx}xT}b!i`7o^Sb(KHu^8 z=zOcRRC*#8IJu8mKqHNE<%3zwr50K~D3eT^I=s+oQ|i(9MUKK*i!5u^qrk;Zt;Qm8 zsa!G%VSS$KFFLo}?PnvmyN^8&4_vF#w@Wqg0jWbd{DX-C}XCI zH+^C)b%aDmcJC+FqE-WV4XOb#OD&h(7QFdy%K}q>`IlMsr;Ys)%m zwcBd2+1hQXJ?+`ej;=eK?SoMEN}s;PGKo+7D&S2Jr>_w3-Q(-ZADde%%PdmW3-*6$ z1w^%4^X?Db>Wzw2rPV0QG35SME4W-hDm67RBN1Yc`qmZ!As$?wyoH0^46~`lTFT|c31&&zfNBI+IpR+$e2%EHhyiHV_IRO zopvkS=``C*JFU)R&aFdsS?Mw#!@RWHD{C6s!rfLwb7!d99xFrfdz=|p@1cICN2n?p zal%PXi@nsx{pjFc=TYWfdsO!MdfYy*oyMXP-&hu@UdJz5mFHf_#%a#;u&UI_-4xxW z{NA@#DVvV|@_uhemnt1*550fC6bm2;^PGe^QfYYyHSE1&SM=frnhVKMQId9-`qr`{%Nz3e>XtqSv*R*S>l54!Y9 zG0lJfVXFz7VpUUi#FUqL%6p}n$$k@ZPRZR#t>jLS%fw2Kzudy@mkJPnQm!mpc+_gX zre4b(v%EEpdgn1q*0jN(U+cBrCx^*v)qNlCp!S4|jGk%ZUM$DQF_m^Lvwi*$KKuOev#2rY~ zNva?louMjb#h7=o665#QFG{SwY_{8KqX@pA^f~K%@b}tT>w{qPndIWL)@PFI&@7b7 zK&ZSAl|w7klkLt~wweB;#2P~ESBR}mt06NlBH;EHD5mskowrKQ8zFpb!owa*Z zdU(AT=S9t5Cp?9oCId$}|7yc87j+n;*KZw&XYsT%rGGARrqWbs+d}wHgtp17rrf@A ztaW~GC|7uM{}=20H6_PKIsA=*(!}3#{S8eIrk0b#*W}D4`>A%iZ$a!o<*Z9q)c7r- zX5kIyGoGdGD}nB2%G-;VITrXQxA-y*vGB~kn`0Mh;;D4;JOn{GyDrtpWp`x4pseCB z^~hfi zdt%9$uCJ`-qxp*voHI7q9RQw8N$_O(m4v@1eXOsn^O>d0wWJHcq?jB2uDzpf$-KQ* zUh$GHC||j5HD(n>KGP_Hw;@nSesbN)7T1}2#&z}*KPxXIKc&}9*HDq2^^>z-ZVsu! zu;jswx7;3?ZIn_L46&DG&<*QNtMqKW;pk}rfg;e;ko|M?i|J{`Q;#Fzk7jH4naQqwej@waAiuxA1 zt_-?Ol{|qX3j9wq`(oyp*xXj6u~KPlD--VEpBb#XSt%C-)lP*^Wy+x*FwhTbqdqF{ zsqs<0T;yHFQv#x?KbQO87+X?_=4R~kUAz=zPySp(26wa~&u?9oH-5dBmYH|GdoT%q z^&;b4Ng0d|x~;;Sqfx1_@Zmt|X#?4^viyDP)vE+JTS|blRZi}>Z+$hupHiqy@@LJj zB9oqHquS&arR)=mifTUymxoo)Mt7Cb4=kV5tDe8@QDXdUPX&mj--*aYrR!Dg53#!+ zswUxn&#C|0Lbm?R`Re*LsH`X-JfwHb!o$k+Qv%8l7O2D(dG&27C7=CfwF&+{SH+Zhxy=Uc5q*OV+C)fW$B|S6z8_KSKSo87cf66BQ z{O>i6Z7u&W7IAyX=S^i+Z-`ZuJs;&ftMJBE>ESk6jrClamZMLql5-u_t0SN%@8)(` z=Od^}4}aZR17b1B)!oh6_4!OqdH9L74dAn$vX;+!wPgFJ*0$&QCR$q_eQGt)=bK+0 z7AWgUDN;_RW?6-#l6ox5$$BZw6(H|qQGh$^4gVzHqWpgJg~01nK=c?qtY;q?6J}*W kX<7uqiY({{!MZFsYAB0}4tK%@)Er9FrkF;YSv%tV?&K|ny7 zAe~U8mwNru*vV(#ax5vL< z5!5NGpwQPe4aN&%Hf_~x9wvx6wqLWXG5Ugqk2KG+3u2y5(46-`@p;f8lcqTaW)|Gi zv^gz^X*Am5A)a8T&@AW$IS|oM6Y@e3(-y`muHp$A_j9<9CkVqBjHd|{Gwq&f+QTxY zDF$JhjnuS`7Q{4zC(Pdi91xAa!Lxaq2gL<3->=kcSS*N13DN91a(8bY`Zm*2KIfi0M^AGdD#LGdxDqFHsQVfzeEK zf@T1o%!f#W;vt^EGXd5x6DMjuIW9<122U_=yyhDi!6a?ed{Y7c29c*VJ@yJ>x=+&d zcnkjqQyOdLj}^pBN5q(~0u&w^hFmfqoz;vPE{N#`ub7_En*LD4^scFybxaWR)n(0y z>VlY2s2|08Ji$kGG~RWBn3>SceBPTu{%64pCK8>Q&!RN(Z3Qu3$7rT?6~x3p(nN&{ zVm?J5rvF3Dmnc?7w${u>M3~+%l$nvJnVSo#^We{%rkZIlFaY=##xP?Y`sNqJOhW#c zK2XjKyrCI{lrV##m>CkG8INc&p1hibctOm_B+bV#-ot-}B4mpFc!GhIG%-J+*uZEE z&in@c(^gXAUyh9K(0$wtsk82VOLJoY2e>3A^HIv^G9>O0Qdq?vD3WSNf z<ydxv=MV=(;b*WTO0zQ&`vW)@pxISj z5Od~^W+TR6Jll~c=1^PB!IfBk!QL{OWTc1rbBJaia?RXEAu$^eA?D68&E9$F2bR{> z{IE_Cvto(^99sca&QW-1WeNNT_;I|$D|mwQA)0f01u@5w4(8W`n#Tw!a}mmzOR<{! zFqZkDg60wWG8dvXciw@a;HT>h^8fge<_Qd7R&CW>*&#>~geO=sTC*75GpnyUz|hs; zTv5$$kYj#os#!Bj5VL!?gCCyYmq_5jpIs@Mwa5)~{jBCDLde`m)LbitVghI233C#C znX^cZ;u)UcRFnfeJOxhQa6q5a+z*B`-D)EL{HGi8!#tR&=`ab05zrBNWm+OvOsm40 za2U+ALjIYE{hBrrIIMsMPc#k33SvShXd1r2zrpGE5C=q8%TttKzC?(iZKldqC^ z4hK??lX!olhs1CUG6a?v?TSv@NhE9|u`8KG$K@DkD~ZVek|?+Zoln5PzeprMB#{d& zSV!U=L|_-%<{g2the@0~gu(EPg|1jcD*J5`QEN%uWryIzGdQ(+Dk2y|qC_teDW16` zVuq7Q?1uqhOhPmm08c)I*I?8Hq+lY6TZaRs8ui))45@$bxlVdO#28`|rnf@ed_9k&`775Q~2vr|}FpVOy9@K&G zIxjlRB+>hG3<9C*7$oX5L?<4`eodn5G^7Fl9U6tUPhlt&PWX~UYY9VUlei4!i8Bx- zIM;Lzi5HNs@GTfiB7a{vI0^E7NZc5R{BIlt;lU&#hQPA%B=RB(@d+f7Mq+@EVc1X< z7^pOm#7_uY{?Rb(Kd2LUx;v4?IVjvQ8H2)!<7g|0cgJB=>^MXO@9$vHu^*rasMHpS%076x6$br^s(uRZQ(@Fn zc(jVd%!?$R{DA@mb*^K8YY6i#64!5%7<3N~+(imf@E*_Xmq{!Gfs0_oBSgWo9=ZM* zmVl@oh{R6h4b!RmE?9mBoi@U=?Fc;zYvn=Iz+QNj4D0`d=P)WB1(s<8a(M?uh_>1= zYTXYcrmVnVV9rVu8W{g0rY{INk9s)=M~-8P!WmEWV+g{7*h^4+A0DCeURV}=0o4tq z*MEYykQx63^BvyqxI!Wbj9vl*7Gv73hEh-zN=N^Od_#WL8l+}72|p0|3kr{&S&Jwj zI<*m%#2X|^ag@#=|B)x*%~@16h&qJ6hG@Cs=u+zN`3 zrg%K}N1%S%APo(W>xKwxD2fix1#svgrf*H8EAA+XF0TmTFLH<~RF$exVNpbQCoL#k zqa2l|ij-XhP#sZ5v=`;X7O`DapyHwuRi;9sgeWQMiL&BNkzc$;Z_^u8cFmCm-Kj+_ zN)@@p9`Q^(6?Mf9(L@xZGE{;}QfVqhMd`9APX3gOa?%s=SmYB#&&5GellF;!#3^xF zWTh-rL(~+FL=Erx#pPeEEZ+1k`o3glWuMoxz`xP|*0jtbn`k4licBI|Y!mfGgn+T$ zBMVM>GcBI-e{FB(>I93|3l%u}D%P$_vNn99l9^{FP6N(iB1vR)9KboU4dCcn(+(QcC*7eXav?_i479RpOK z7H;u=Aq6#@!ZGhnaW%7nEDe8^On=PRsl{P{vLmiK2jPe<=psrL%E?-FblxIg8Qft$MuOo%zinEkYja3b5UWJ-!bBlRX z3uKd?MpVWvx~-8TT9J)Xq9u4lpIB0Js-VURZ%mEt&IM&$1m#yv2O3k5X$nYnI@E7M z?af=ibmF3*Dhrb4$7L=TP(X zYFxp{jbNnaE`j{ylK(cR{I=SHa#;(?uR{DL;^wDB3&_+K^rjI@=|P2Mj}*$Q412F7 z4KYnCTRMiFZ%Mt(Ta`LCAsd$o=OdpS97+Ye|IW%G|7n;}O8#u+cEL(X|4=I>CUoaR z-5m-^m(PXZ$h|q~3IKL#y|1%fZ@{j?s1$E%u>$f|>-53lgeo~M^CB!4oWD#4C2TC( z)7rAgLVo~A3IoujI9JL;PDQpTmd-O`Rar@b|{ zv}kXsc8_{AU6Zcx4jrsDz)Y&&I#_jY-gfC|y>;9DTSv?8w7_)gWEsstBs;LHC9BHeY*(io?scX2&5(EdW6s4* zaOPakZZy&~8N+i#`V5ynA|1=8Mp9EFtEO)9bVp6L?ljCa1&nYytmsao%v*HOPIc)) zgI<37kNq~_iX;0?PfIp#jq^6R7fmo4ls~Dx97F!hT zJ0!|6tV0ydGEGTdH2L+VylNR6fnh`By}p!R*6(XYOer`CDK&9#_NAFdfwFsEKgz2n z?uSs&kSFeu=iM?e8WGZwAKc$E+Pw9Tw%(d79f-Cf&w*4%4E)fxk1L5Iue|69Bbv#h z1E_{f`j8qKQ+*l-SQ^dpK5(G5yu&TMG7f~Ymh92tZrwBTh(o(AT zu(Qa_7)(EyrljxF;xL3_UVdACsQp%DXp~bJgJ4cL3gbeTo?Jiajv8#Wiq8CD6l?Ul z>$3YtR$V5Yb2{W1P6JE_Gi_E4w}Ncmb{k>6Rm$K0!3jXNku=t*(X|E3l}Q^$x=qrC ze*CeOa??SjkzMU9$9+rz@hxg_=zS+It^!qWJe|65cE$&_${;(&=ZHrJMpv7)3Zf8{#Iy%u9>qUoRwno=e^rni9Uyk`$wmjJqqfrDLy6|C>d-mf8T1c)^)*c@NxagkpmoN`Q5>}JN-f=S zHF9dquurTNSv8f~?P!1ciB&{s(&j9kXeCp1Fon_SQ!C15QO!2VnuscBxcTdHSvrZP z8T*4ib4D2WnKi*oTI$7EX)z1q`54QZ$;ujRa15U0+x zRv-6FY4Me%Tt$m_5@jRrB%i^?)Y@$`SY1p_ZAeI8Q+{cyUVmwg>rU(2iB?*TuG@)j zUD~O+Ut3NE%yL}qHY3X6`PTZOvU}l3A&`%&}G~)s%g%qp;*$ z%Uacxf+iKEVTe*3qEsTZ&r8dR&UGXtW;$Br8tFN;QjS%(rGYBBD1Cwk(0m`_j9u-KMGDW)9MKmiumV_IziVV~SHQ zu!>V%3bs6R=EHjnt(&&_I-vHv8Zc+JtiO;7$O{XpR$2xVaJpCRwa`9Cwa5Dxkb@Sc z-!#m@;?Vcj5yD(wK3`;AU()V01r}R39doo_xY&2J=iyZhD=)Dw7kt)KxeJ9+-y(O_ zrua*I)G6zZqbfeL4}||=kA$SmZM5>!QYTatbyQudo$O4T2&_0!x(&iv>bQ^q}U z;!+oymmw}gf31?i%4s~jv?3!9m2JV$@FQ2}(NAk+pu$`SRT`>5cm;+FpX4u}|7d;N z;PfkrdXQMDBmy$f=3caEwY6xYNOb{xwc5JcnRTeh8fzUgJHnPV){cNEY7IkwvNle$ zgO^-u?cmC-C2O55Z(HlT<@#=^_15{yQ>yjcoWy=vXPv~bjTe%+?>f51{A}Nf(o8C{ z-e(fu|J6*Zk63M%CD&7cjC+GJ$&Z>?mo+nK_5QrU3W|Hf|80X6nSj5Y7#OP+T}D2-evbnvp(A| zK0DPHA~VO1VUCsd2FQ!QST&>85wi)`+HGyZ?)ts9+p1r)pwHc7E$HUp)?u#|S5+qb zg-})H)4jemDdC1wV=a-W(_CXo69eVejaI6R$~^lmm9E>$S#*^5D&V$)p6Ncbntdbe zfK`X)E7qw4)>kaE{_5Ft&|3CQb*dTB2G(BSLAO<;M)J{^^n>yOq=McSf)^3=lnYJV zUa64q2X-}7#lzN0Yie`(Vas8&Du*4hWX(!<^oTWIjIm1jh!netmmO1DMUGmfrIJ18 zs53WL9kr8<+qm*44E|hWf98c`5NlPprZ}_wY89t@4$S}6ngc2n{LNF1z?;Plj1YOL zw8T$+zN<9{Kn1@#ByMu442>x%OID@KGR2lNTd~=wZfW5f^2Bzl>@jRXnRLSW{`d0< z-#1_L9kTLC>pNr+rk7F~gz^96z%d|>aL4z zc9W^u;4_vQ^LD%a)*bHPv+2X_`f2Ae!d-P-Svla$OLd&;2Bx76?HzOV52ezgnoFI&%L z=?m7c6a0gb>inMczd$9uaWQ`K-#(Pb{j-bfaQFh2_~j0Ep9^{K&&j`0w8j|!BGL7| z^Czd1;jxrI92h|e%;%LdIJvmoCWze|nvvV)KA>FVTgxkQ>Lu&)XHGy$paBG4m0_2y zEe2)dOG73MRO)IOIp(RAC|*XD#S!S884|%)8@c^9gQy@jklnA~H_nur_~g26k)_Br z53>;F;i@l7xzBYkPrcUeBAGL| zYp7*t_Ekq?V`$6)`N(VUx&7r+j~cTfBwmL^+}wBF5=zl8*PNfynm{b4ymZYv+baQH zP1VBC6au;6sO#( zW!O#?l)<+%cBth&giqC~b1MiGlNIm!HaU)`YU1-oak=lV)z|gy)}QlOybfjb@z$J*l%^-VXS^A0ftdefenceKills = 0; player->beaconPlacements = 0; player->beaconDisarms = 0; + player->proxy_placements = 0; + player->proxy_disarms = 0; player->captures = 0; player->steals = 0; player->stolen = 0; @@ -1046,6 +1053,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) if (r->name.isEmpty()) { r->name = name; + r->name.processEscapeSequences(); recalcUUID = true; } if (recalcUUID) @@ -1420,6 +1428,23 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) buff.shiftLeft(1); } } + else if (this->lastCommand.equalsi("mutatorlist"_jrs)) + { + // "The following mutators are loaded:" [ | Mutator [ | Mutator [ ... ] ] ] + buff.shiftRight(1); + size_t token_count = buff.tokenCount(RenX::DelimC); + if (token_count == 1) + RenX::Server::pure = true; + else if (token_count == 0) + RenX::Server::disconnect(RenX::DisconnectReason::ProtocolError); + else + { + RenX::Server::mutators.emptyAndDelete(); + while (--token_count != 0) + RenX::Server::mutators.add(new Jupiter::StringS(Jupiter::ReferenceString::getToken(buff, token_count, RenX::DelimC))); + } + buff.shiftLeft(1); + } else if (this->lastCommand.equalsi("changename")) { buff.shiftRight(1); @@ -1445,7 +1470,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) RenX::PlayerInfo *player = parseGetPlayerOrAdd(buff.getToken(4, RenX::DelimC)); Jupiter::ReferenceString objectType = buff.getToken(2, RenX::DelimC); if (objectType.match("*Beacon")) - player->beaconPlacements++; + ++player->beaconPlacements; + else if (objectType.equals("Rx_Weapon_DeployedProxyC4"_jrs)) + ++player->proxy_placements; for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnDeploy(this, player, objectType); onAction(); @@ -1457,7 +1484,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) RenX::PlayerInfo *player = parseGetPlayerOrAdd(buff.getToken(4, RenX::DelimC)); Jupiter::ReferenceString objectType = buff.getToken(2, RenX::DelimC); if (objectType.match("*Beacon")) - player->beaconDisarms++; + ++player->beaconDisarms; + else if (objectType.equals("Rx_Weapon_DeployedProxyC4"_jrs)) + ++player->proxy_disarms; if (buff.getToken(5, RenX::DelimC).equals("owned by")) { @@ -2413,20 +2442,15 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) if (this->rconVersion >= 3) { - RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("s\n")); - RenX::Server::send(STRING_LITERAL_AS_REFERENCE("serverinfo")); + RenX::Server::sock.send("s\n"_jrs); + RenX::Server::send("serverinfo"_jrs); + RenX::Server::send("mutatorlist"_jrs); RenX::Server::fetchClientList(); RenX::Server::updateBuildingList(); this->firstGame = true; this->seamless = true; - /*else if (this->firstGame == false) - { - this->firstAction = false; - this->silenceJoins = true; - }*/ - for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnVersion(this, buff); buff.shiftLeft(1); diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index 1ff9ed1..18e1faf 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -84,6 +84,7 @@ namespace RenX public: // RenX::Server Jupiter::DLList players; /** A list of players in the server */ Jupiter::ArrayList buildings; /** A list of buildings in the server */ + Jupiter::ArrayList mutators; /** A list of buildings the server is running */ Jupiter::INIFile varData; /** This may be replaced later with a more dedicated type. */ /** @@ -159,6 +160,13 @@ namespace RenX */ bool isLogChanType(int type) const; + /** + * @brief Checks if a server is "pure" (i.e: not running any mutators). + * + * @return True if the server is pure, false otherwise. + */ + bool isPure() const; + /** * @brief Sends a command to the server. * @@ -814,6 +822,7 @@ namespace RenX void init(); /** Tracking variables */ + bool pure = false; bool connected = false; bool seamless = false; bool passworded = false; diff --git a/RenX.Core/RenX_Tags.cpp b/RenX.Core/RenX_Tags.cpp index 84ad5dd..17dcab3 100644 --- a/RenX.Core/RenX_Tags.cpp +++ b/RenX.Core/RenX_Tags.cpp @@ -285,7 +285,7 @@ Jupiter::StringS TagsImp::get_building_health_bar(const RenX::BuildingInfo *buil return Jupiter::StringS::empty; size_t index = 0; - size_t greenBars = (building->health / building->max_health) * TagsImp::bar_width; + size_t greenBars = static_cast((building->health / building->max_health) * TagsImp::bar_width); Jupiter::String r(TagsImp::bar_width); if (greenBars != 0) { diff --git a/RenX.Logging/RenX_Logging.cpp b/RenX.Logging/RenX_Logging.cpp index 0c1e706..62929d5 100644 --- a/RenX.Logging/RenX_Logging.cpp +++ b/RenX.Logging/RenX_Logging.cpp @@ -115,7 +115,7 @@ void RenX_LoggingPlugin::init() Jupiter::StringS::Format(IRCCOLOR "12[Part] " IRCBOLD "%.*s" IRCBOLD " left the %.*s.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr())); RenX_LoggingPlugin::kickFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("KickFormat"), - Jupiter::StringS::Format(IRCCOLOR "04[Kick] " IRCBOLD "%.*s" IRCCOLOR IRCBOLD " was " IRCBOLD IRCCOLOR "04kicked" IRCCOLOR IRCBOLD " from the server for \"" IRCCOLOR "04%.*s" IRCCOLOR "\".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "04[Kick] " IRCBOLD "%.*s" IRCCOLOR IRCBOLD " was " IRCBOLD IRCCOLOR "04kicked" IRCCOLOR IRCBOLD " (" IRCCOLOR "04%.*s" IRCCOLOR ")", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::playerExecuteFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("PlayerExecuteFormat"), Jupiter::StringS::Format("%.*s" IRCCOLOR "07 executed: %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr()));