From e14e550368a12895f2d34252c14449b22ff9594c Mon Sep 17 00:00:00 2001 From: lechuga Date: Wed, 18 Mar 2026 17:33:44 -0300 Subject: [PATCH 1/2] Validate clients Add client validation to the ratemonitor. --- .../plugins/optional/ratemonitor.smx | Bin 14930 -> 14971 bytes addons/sourcemod/scripting/ratemonitor.sp | 8 ++++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/sourcemod/plugins/optional/ratemonitor.smx b/addons/sourcemod/plugins/optional/ratemonitor.smx index 139dee24be57c1c81ce808ff44d0290805e6018b..8ce15b3c73720273f1787eb1c0c6fd9260e6f36f 100644 GIT binary patch literal 14971 zcmYkB1yozj_P2vufkKf&kz&QAMT-}AcXx`rTWFEu#ft`acZZ_I-7R?0;0gZaeeb>N z|7ESce$UL=v(G-0Ir~g2&IUOEKn0xD;EbLJ0Ib2)5N^A0CWEUT+yMFiVIMe>!Px|^Kj7vM=UBKV z!40zj0C)@6Lby@GSq82haI=Lo16+sTmH=lHe0WZ9zHEYD3tay>A7V2+AGjXE?F`NW z$N<1CoEhN(h|uBrn>$%p0@y4}-Aw^(&K_p=Hs)^sf~Tn~92`yEZ9Fai1qZmey1U!_ z$M;`yuyp_GWbxnb|GEBq#M05j;lKUvKF*dFmRA2?%gxgLzb$inQ#ZH&J7{HNY5%`) z|3+|k^)UaR@Beie|JRSr!pxe@%Etbm{Qg0E8^`~ljiZ&*e>(q{K&BgG1mva5+lVx_%!%7;GBxaA{hAtM(NveL7NX_ zsRuElb+UQ14OB6_^1RpDP4fEpQB8%6t5ac)!zoP-REAA-`gQX99^(3i3r!93`YQ=6 zt24eY2iXrB?U3=Y#N9Zq_HG=qEWgR8F6f%uq!6?V`t5;>wPvb#x|*~Goullc8sVIz z2T_zj1q;^j>Wa}cpTd-0uy?{c#PAxueH+hnoyLBK=A=n_Nhprvk^rmx5*^DoBvi1s z$v5Q2H-!8Webgs}9EvV*i03&-bCM~&BpFx3Okuhx)cZlG*U>Lz9g2(}TRm+0-scty!XxcWzUTF3vUaDvw~OH;8)bMjMK2Y&uv(n}a|HR=?m)-=pCZ??^KjmoKF=B_UZ}tdcr5~ z`k%?mx%Y&^YsT00?Cd{ld#XtADr9zIdeH5O z0_sO)x-j^+^~TnRUIzWR()&Ad>|bdJ0-jV)5|r4Lj(H&+evrIuJBm;JEKKP<|8y-r zaW3Z3otLCtn8d4DAV@lkHu7tux^d`|&Qihp-Q+s4C1!Q{&KbqaLu1ne1nV4ePo3@9 z;j|pH->ta2x}aKRCbi|hNF`l!W)s=FKD}?e0s1<81^t?5Jn^O=ilwQK5tp02_H2PD z+wF>WJhT1glVHK;tE=>OTf^$bC7(>_PmIw0sEkb}ifo^%5DK=j&3*>AEasue-A4C; z6YpkANz-ftx>1#fnRTK_%JK<_TVpKOgy#I+)>ZQPg7jq{amx(W!vLpJ_B*5n%NO=U z|JpBu>>97oAK?|rng>}vL$oDGV5jY9@LMFoD` z=lptaD4Q(1B06E|-qa=M66L!Qn2V&6H~wWZn;J}lQUU&3B#fh}OOFM^o**N~g9G-O zB8*OjtN@9bM?xCl`JW+MT!*@j~ojRAu7kxK~mdMjy)gvFXi>H*w zas@})_iG&q+FM zwHb%143D_wu!^Q#|J6PRf{}b;}8lg-UrL_)Wkzw+lg8Z<`xVe>`Ve44g_z zMv^1tHuexH*-uVztQVnRal0Kt9QHd4e0^JpxI=TY#e8{lx{7t$8C+vrQFHUIUNNfB zG3WO5shID?v{g!D#ItSdtIM$+_Y4^LZQQ)_`jlYLr?NXgicw$pD@OO^Hs zU;F+jIg-toc08Z0lcA)bG|MvGmrn6(ij7_}SBABWxPOvvc6Ye@P>{kjWz;h7+Qk|V zDffmN9mO4Gs$l+Q{UXI=g)-@(>VbnRfKl$t<5{?eN(@i8^refXFOPhN&9hh&7b`t&^;xf`^%a7e8bQIhoiRk^NWZh zT|F7^iywz0{lOHp`1quA?J#+wWyg0du4HlwSJj&QDx24W{01HW-xNby)^%xTk4 zLyxA1@zrvyRS@Oa%(H?0<}V$g`fP_Yl#)s>EuuIm!gwn$OIRqGo@Kie)7h{l52X;J zhc^>+W~4RMMSD1PH~R3blG$J|#!E#?V;HJ95KtyVlDheY#5&pkp8?dC20mz(3e0y} zBE=`xAh_o|+_N$P!Z;AnCPT8A)Mz~0~^+X@t+cPbzP2fsd9R$Ub$hnxnH!r`pds=-AX81^?sq@ODMs+xz_on zb#=F_`S!`NG5#`ZE3^edN?d4GgrA&9xrhIP$HLcaS(OaG$P?8KMW4nxLH72i-&O}c zUIVZA6U(gEL0_Q17-QSJn3Duhjqam$?6ir6XLU-a7}&2K`C5cU;z~&_OXe{rBQ)8J z)Q7}7XT_kJDOK!&LFV6Id5yk-cK$$-%jyn%x{tCF_Na2nkTt$8d-+a%12TZHzQGJF zKg}=@saH^e=n%F$X`gJop1(Ljh4_iH6aLt7l+JZ-Bqw-ILxkq6oigxPI}&d-9vFCu z>{HJkEp!N^dA8m>#oL^94WGDNuB=mcc$RT@2bCGv6;+FpHVa}iU1}6A66P*4U5Cm& z^&6&h4-8c*Y-zKTyj%GdM5L29w%WRpobP#%4N5y$cUcoOW-#c~=Xv&j_Bm15+3{NE zZq<8_3%ygZSKPXy^6Gd~AMNFsa#1z@Y2%c8V6u9y35{^0O&|PfZr!Uqx%Da-(PrJv zK{41vcD#Cnj(yETZ80hGzSl$VczgCva^iqA>84CY_sDSW$V+7*Ag<2eHBM5n%{@we zzjb|JA?vWyUrG3|jYf@SLy?Z6Ft?7LrykVXzdp?BndX&rySQ+*6!Yh9+Xt<#i$jF4 zJ;UJS*~u>6|BQGze0QTEAVMm+XgH*3r=%dX=Vi*}6A!@JN&)tS;P~cPr_i{3Ep}%g z?}B+Ts}%}LnaF!;OFDRBALgz!I(nW7s@X7lC`$U6#@LOK_WW}U(s3OJ@oH^uWs2LTuaL~FG5su>pov*Y^^h~Z-+j*5K3$u5mc{iE zcM;xU(r#27Q@@=TLYXlBpw0iVm}MlWtrhZe)&f&L_3|>hBFOS`EmUXcSyfR;@rn6v z!_2q9xJq*{?Q+;%I2T}>;##SpYm7BaTm6yeSiM#8jLI^gtnejPExf%xNx2YZ;bHl* zNf*Rf_xMmJ{AT7wv=m8kcll4+3?whpWiqDS)lmcDTvcy-XDd=_-cp0E+zQQ3l)U}d zjtnCs8$&^z>FldsE-uexr5?$gbO$hVl>NkZrDnnHwpH%a$Op$=`$|{#dkgKZte$c4 zL`+<6rlw0sXduIf2h4RL#yRD)E)2#~bsw$MV(5411i@D4r%>qFXOBSC)qG!LB}2Ec zLP7YVv$1)Ecz%YCS+yT_oV+R6IdM4yF+3HfUY&m6#^hP8)%e{gnT^ZsP*^t31<~yb z>kUw^x*qpg&OS5TTyG=K5MReRVf44wS%Y!A4XRpbdxL&Y#Y$RP54bQC+N0G zygjcx!nIrUT;`p&=kvl=1p1qHH@5D83vy($#|53bL9}lt9@ie0J2_XEC<$t7%YDjt zZkM|r@~4Ex>;0}kc5WbTUm@*4N9AXdsnx23Va#>KM+F33%Z-o7_b}4o^8MCvwB&%5 zfv(nK-UpK`*IS>uYFMXA^#d8y&|IgYvc7dy^W?cl0ooZ^m~j}WUF*)de#eyJSmb9i zFf;DXtDs0MT8w6NQ0r*>)z%T6+uq*Ms5o?io2QY7Cp`V*FU5Df+#=nK5`8ol;f&u? zZST5c-BT2z^dz>GW~`IX$$cH$DJEhpZo0^Rerf2ux1+hJU^`4-Ad2xUNE~)%S|R6k z^_81c%e1)vkuANj5^gj;=;rIkpH;JF{(0TqtG`!wcAZ$>+ATe6f8L$Pw#`o}fhfR_ znp|t=X0PsIuI6+zWn{q3ys4X&J98=-Ms72*bPHLeQK)+oI<)_kIc4DUwzpdwS6b3d zftOplP13C(Bcso8n&6N~G2YQJGTMnp{JzpkMub;9h2~h^vHZTtSj$+}+FAImA%QYC zPuopy=6V;ZU(y=av><&<#$mzmwA)n6vJxrprfee3(O6u2-T72t%md& zi>&Fr5GKVvAM0$MOMTNb9TEpNfDx7tMeXE zlu*>})2%`(W1W_;$;5{pcNM zk(_jPllJj=k=x<#_*_)KUzcCs=^1d8P_r`+IXft)A;V1fBM%1#ng)3OMzqi`d{Buw5>Dt z$QnBMS6Tk%?9DF^Cmg{D%oPvb676*QYk4G<{v4>TcGDI~XIfyT@#T{~Lk-Y4hmfBL zooUx>NYr>_7o8$sBjNyX5X^wDOb9q|_z*bg42(Yo{7QOrZJBVc*Dr64FBn>ric z#~;Fsacv4Sjya(IxMCct9xk~qRVTeIts|8s-bIX{4Om1-1O}AWnD&RO`zBpVScmE6 zq#c&18kSNa{}to$YIf(rW=J#oz8(061G@zaU3A$9vjoW=3B+RfR3UBKany4nFs~|0~7_sGnQTA z7!9N&Kn6l5kl{VTAB0#|GyTyF_&`n|MqMI8?9rA2Kle|$V)xms;6aAB`u8!rHG31$ zw472bS??%hbsNrQ*iMTqcf>oMWrJSzMf$``OK%`a3Fa14{|!tW^ud-e(>)K_A9H(O z_KrWrmD7P7m(^?8^a=Fgw>bu&O5)4MNpL7F_Xaz zJ_5Kp|u8wc2Iz zG|3NI4uDdiq+Zd=js*3Ohy)&n{uIt^Dv9){!R@j5TN<&3&pUK|@o!Pp73dUSy&Yat z5UUU(VQI#@)KuMysiVIr`xSCi+!!} zY9=5eFZ!9|&hq}-dJ!z8Q>eXc+XI``i?K|l{S89d?MN0CJ$JoLAzj@wVF)P7B z)GD88kosu)Q%Nxn&P%GWEr-5#j=v7VE`B2(-~U5r5+|JMtT$cin^ZV#VsQ2|jT9;E z%1K{@8JOq4O*A ze%V+1ZhJeBy8zB%o>!GMEgE3P#BBWb~$VM(4o!1z1ByrU*Yn`-^G;C2G(wEUkOBwk9$5C23sYnzFqQs*v{v5mD z6`Jrx_2z9A)$#qb|0wldv~wgO%40SR{?NHpK;a;CvW-t8EcaTXF;KM^+Nr%C*1S5Q zFE-;>55ka~XBK(l{u`spP(|U9&)2c$TtMw2(@l5N^fikC$0|?7tCBz7)9#hO1+7O* zJmIEFiL7T5>4#*Kki_-RQ8KZ77M&Bcxp=%Q>9r)1mxUE!Qwgdh>Ti7;Rx3G}mkI4a zmArn?V)4{$Q-9Rj2Ao%Py@RH4f)0fO-H?#W)A*F63$Yzj##t3m_4qSE5Zj3`!= z!=3C$Giyln8MjCXDn}w&u$pla8X;X!Q7dj?xA)V$B2YV^hE8R9-|!{xXZ=U`my8T% z0`m;-T2A@F3->E9Ef^8Z55~! z8E~x`6<{q+7S<4qOEY~M=wn4GcK%#6qh3*2fljEzoSdI$xhki=buAYE$!CUea71&< zJ*9WR=J0Wa7cHAP-ugJu2j{WrlJnHfsso5`>^8s}Z#pm%_#kvYkljxPAVVTU>%ibc zffo!wCfaqsF8yZ4;7?j_+=X}?tasoh32MjlY^ms3wAnVk{MBsiVruk5rMP|{h%0iQ zaG4@?H)9WZPbd9dP79(6b_v3qu%utzu8A0N)A?VS5U7@wPrHXgj)tIEL$ z51~ey?7jN*77k0XO@+{5Et{0p7=JhT(~B9n3M|`8U%=!;|M_N(Lop%6&g7RJ4N0wc zM|1_NGz$g07%N_UI{^zH6R$2bnKJCMl0AXOe(SC$IW?i?wC$!L%1K zKpVgdPzSb;-r>s==8)EK{SkaeL91vVU9`_ZGNRbsD$VtTu|cXA_-U==@XfEfGEj`z z#NBknC$E3D2#EObEdrS{zB8t?-U2hDU4sb4@Ic~+7_TxV(u^nty#y|;KiJ%{cjYSY z-$M?P7@>InBjlNppT+iOe=!4J!|(5xhV?M**h?X#`e%n$vLuvjajU1S1{uDLMp>(j zIldz&L`y?}0lYZ>w=@IJgvN1iv=Pe?oJ9Sw;%Hqd=l_sTP)r=DZiV%h6bqMi#{a+_ za-9)(=k(|JnAdk9#g9-a-7k;X{bMqI<4?2&Cq~vRRn$j3%5T=cY&sdbDV+h%ubt6f zqx1tXL{WbtMI*)vna4#irYfooRY~|bwcTGap0jtqKm&z|v&Ws9>?*9PgMQ0U$C7Jv zWJez5|0Yze{Qkt8_qzp8p^%aG2ca}nZb#qrE9@oq(!g|VjqQXY_Gec%1|{L`+>ehe z_Re265t;PHg5eu=K9XGV`8fWybY^?d7pvU0Y4@K$zI@>>5j#wxP`IQj)*W}Iju$SI zZtObO=@w46OMzD3<_cf(H3YGI*UE80y7@|(zF#tDTB6^(7bVI!&WWdRZuNb0KyltVn zLCHI_d~ae*7POL{5FQesyvX_6fasIpFA7XG?(2$Lre8B|Vc9hD0xKJ9HMzlO^MkIf z(Y2+uE_~ThUv%RN5@Y@psf)}ktJ5$#vmagwF-!rn-^9)3 ziY@N~EkY4SOhl~!0US6@MJZ?k7TKTAH5G7gV_$vPj!*sOAww#QrS7SQD{eXcUGcXw z6R82QASMd;*WJI6oV52#i4y}f_imSgrYS@sdAJ40S(Bt{7rQbuyW?Oy{vF^|Ff}|)F%6jx&+WbN$dY|?!RhkmrAcJpG8$VIpkqMK=dvThGkfgLPUi4_Q zTlNjVkA^gSO&I)jD095^!rdf#`x=nKG$7q;i1 zh&hTSUEp@eOH-z%5$4j`?1*49Q@M$brYJRTKICX(UQ0C~rWc=j`o<@x{i&ep{hO9d zx|9~K1T(VGq}M0>CMM09iH<^&SD@KfKi`6KTMgt z#j^Ocf_@afcTW!(zkjWWMiRCZlN7RTpK|9I?;To8EoZYY2Rep`=e3JeRBByL?>+_2 zLYTqL?kD4F`X4+$vK*!4)V;6%Tl=^C)etRsm>3(!a#mIva~SmtGgXn^Z)dhl{pXE2 zj98PcnT@MY3O2OJ6}7|h3ttId=83wl>MXyQYlW95%MRw#`dYCB#_p|}dvQgJy=Tua z>LEz2jebvCIgcV2YE|(=$FP2zjV#l=0jDx%Fjw|HjQ! zx%*pK53|vS0^9XYO$x0y6-B1MDSX=__Z-g*venjoOdLLv-af?Zv!E?BJ`r|d^M!oL z$fs#zGPvA3ZFhK5VnJPeoEpmI4SEM#;#U+1#$G`_=LJHLg3$OHD2^pXXW8s~o*8=} zu7Y@AsI;K|2!wr2djx{`Kz1G@toVTMEZJS8nfhf2?F>M1dI0%j40!edul59~4sMS4 zH)VFO&udS3k-vC+-h6YP==!|D9-y4rr4JQD2~vkPVg}Mb9WcWN5R8$!!hHkZ!AOrf zohiCsE~b6#-Ac2DHm?c1B$#2Ew5{MBaR*;1c_U@+aO?wgBxi@m_WLAzEE2v2|K026& zJo)0PUI%o2#c5sq_{g&KSwuwM^Y`TBeqbmJ{h`$uZR6YhErPo!A_poT4(w5|>-d4L zhaI5{vjqW01cm_Q_rFsDVt~X5AA773iUA@xFlw*}Vjz+;(z#*}2=N&~rBie^8?^$B z3_yzjLdit&CppgmZX$J{z<6>x@C6aSBHF``y+Wu1E+T-C9+AOOz*qCnGOHAh`HqZ-*_E=j_lP~2XppQQZ%2qDs0?- zFO%v*>xbF>EN6_?S-#Y3B=tf)AJ6 zyi6eWZH#M|C!>FW9ryetz72{ewse{eAu-r`nc}y()lD%{?i{8aqLSNn_%8K`F1p^X zEZL-TcG!x!3;QXkzsHf<`_hDKIazn-w|}g4T-;%Qx-?qpESn}2i|Z7=F$GZ$%j$27 zQnIQU7TLIn&dIb1>@LXrLYLdwIltNCL$n*cjUPS8HT4$fNY%<4Xe!@*BgCA}JJhHW zib^BEFkitiH;&d1k511ZCvoT-T-%c@@W@RG(^lh(XcbQH>-(VLHWc&sT{;h6p4XAZ z@M!TL(+vy{>R|o|lBjFeT$Pewi4YYMu2sSVrCf$%-VoB;qrUCf*x@Wa3WWNQb`58= z2JVk8Q-@6=j?$vfWO)O3?8=1V=_Xu#WHRE&%(`|~*(G{*%w-D#36bw=jVQRnt!tQ3 zA_$azdCZfhi&wH%UVp`Jt_m1qDFQGS({rAjN%Vdo?O@9frzpgx=UNSwJ7BOrDh@;c zfCu$;&*`y9qiUhaTA`e!-}#!mvt$Pp#^#t?J;{vJM^dZ zU=opp_>r*v>x=Eg+(+NgsgF4IRN3xPR+W{_e(XyIlQUb745sel-*mV?Tm6lo`oVfY z$`DTO&O%5_X)Nm!*nzne1qG;GUqgcE#K};Imf(BPLF55gGYOH4h{gWYTOpZl- z1QZ^5WorJ!JR?sz+58~}l!G5^7J0*RI#{9{GZaxyu3YeK)OC-u;*K9_;gu#D=i1Jpzh~ zwn>7k+!7RPl&^X8Sey=~K{3ZTbxVpI^NK(0`CDkRS3iI9=73nZR(mU0c|M8h3#nFb zAyDZ(Bm~r6tLpK_P3a@+5ZS647KKW1LRn~*Lz*18q|4v?i}B4m+#{b})II9`WSD^v zGn0!kW=S!ngsqbvRnz0kT0B*)d};GY!2M1d9bJ@cvBI5i6F<3mW(U>Ya?(v>SJz5m zM4G-g-lwUa3>W!f+}n>&X>Kgr4%$vaF%lPRDU&lAhw=YUYEyK$r(6j1kNB!+xCMjmI0l?<=3msjE}5{L}phJvlEg_wL%7;z?H_NH2p( zbA;D!I>YPv&t%G%y0U4E>0bP%*9jg!AB`DIp&{2VX$^0U5})r7n#dC7e?ICXo_sha zTleRuW{t3rq-9>ywNa(Dqwc)0GiPicE|YOWQk2J{(Iq~tR2HFPjj^yS;QjDa)xej~ z7+>KXV|lW{^hB9L^hfnjgpM_yxZvg847HE`{XuHIKug@y_?~?(?eQ+w`A}hDLPe4V zYvxZP`8utc)u3l1J+@)n);Nm&QWIWX_QQ~Kq?rU+ErqtodkmXtTD$$%k0PwB8C&+6YsO{Gq**USV3G?vNm@GEG5{ocRVzgiSzL+?)jwp zhku{3b&rIrY8%f&28r4y?d%&LRAX4Z<}YQRC})?xL1#(zFG?znlP?@)6o@*pNcC@? zqXtttUy5oy;zp>jC~pvS@1AAM<+bw=O0K5Iv~ zTYC;)LPopmW)4N_rjm^=sko0V3mg#5u@NA;+piv^&nMVtPWfMpKz2B;6u(`U8}7QK z*Z*)bA@c7vSAAAgs5iQ@1exDX-wl~NO%oVcv~}q^w(;mSq_U)DnKetUw*MHyTeE6q zIHd}Vor_GZH!z>kEbUN#F2!#T`=D|xwq17!`cacA$ESVNX*i=;`IzIbK8ionDLUA$ zF+3Bzq5mbJQdh3o*zixn0UD8uZZ~b~1@qZy z7epnC+*57mPjUH9gN^iBlT-*?eyzZEzWC$#YtwY|2jB~*EC6hGjiX8_|MR$~TM`nA z^z6{)B!58Q-h}w*(H4a8Xlyfx@Pczw0vZ*@c*JgVJF~`+I52w2ny>;ojf67=rt)FI zpno4Y=={TGaRp_)Jb*92E+K?R5gA0p%{=HX!V6VrYC{O!5)xRXsGdr1USNY2H;fM0%i&aYuq;PESO%N(yo7Sss@ zkyrlsFg);8!#6zT@ttIIQkW{Ga&%!2_tl+!6(J0R-w(+MH8Y-hG^0lu5rh;N=}qkY z`Fzg5Z6~q|A#h~~@++6H1O=uG-ar{UzOG6m?4bv0BPz3i36C&46T>C|!Jz#5P85G0 zotTJbR6b+_+%>~tX5Clt-vE5hG?h9%RFvJ}MHt@rEz3i0zU0n?`>s)Oo3iy3-UnjB zZUtVm_Q(`yf!X&M-f!mZsJg2!$vD>K3!!sUurGPvV_%AJz&Jn~ga_KX6V zK_Qt4!n7^~Fh+2_@@1Nk5Sp}|(QEyt;^2p15P~qmBTLrd?3Hs5G+29z92cBSKq(NV z+0chng*3r(Q2+9#=cdORs9!<`zUg_>^RA?`=Uu5`&m>YaGD$O{)8&<$8asdz_mb3~ z0w!sTdoCZ?#aWv?5~Me~QsNKBkwfcq1|X^uh)j-(IW&&AAph5d8K$@aV-_SDFvwk?JTY!U>VG;2tsP z*O7j?&8GAX3Pp}DVtBAJ0(42vtU=MCIMBzMprXSo8GP+p=z-EPm4Ws9~8 zTfV_T6O)^ti`(f{Bb4R*F<}RclwfxCpvo;TZf!twLLlm+;Gwu349D>+_U3P)R;j>z z$C$?|44XlpT5r-A^yj!gH#U1AA;R;$DbcbKPL1b&xrcs> zPHL{;$@nf@|AZB!M{$j={?y=?n88h(XH!zhO-Hj&O}5wHop*03(Vo3XgV54gXo!P@ zzFi_b%Q6weu##|Ko3mZkG~J19O51@Exb_xNBP3u@ZoqG;z~aXltwHX}$8lhJk1=%@ z;2GtJ7|cEkYrM>k>N1q~zV_J=nr*gaR}G-;dK850{C%kJ7Tck_$U5+O(dvwVI%V)) zJhQgJ!O3wuV0HJyMzv;F&qMt^vA1!GcQDkl*ckk@w2Re2iDke4w5S$g$8#lIp|w3_ zwGmFfH1<$)G2Zc#{u8zaZyT<{+hxQ)l%4=shQ>xz2W~r*8q)W-z1V5kNfE!RI~1xf zZ@m4qFel%!$={p|)lcKuur_qs2_Op4Pq@`2Jng8)lwF&dcqpIt+|Xt{H8Gf_f@+g@ zfFk9{j==%*hd3MB>!;u+4MX~!d!-F+!=v4R`3Z-P>h!h2htibO4p1JXX}aq$r$4;u z>N%ooT=Jo?Qb31Y`NX92@fxR9dFA&#G>g0U}hq#LwV%XLg?{CX`!$BboXic zdsaobw#Ub+GqZq41>)l!;x=z%_u43^IJ8X%w-`eIlfvlk6C}u%wkja)#^s&}?{G)k zXg}a}fOYV#5SnMLQJ_6B#7jxe-F!2elk&Y{u2@|B zqT{9Z1Z-CS?5EQ`d1~4j=#G1QV-55x4WjE}yND60fNUniD9(*$HmR;3Y(zd>xPSw= z*m@`nE|8x&V(8BSg-F5@zN|zM9ESrv-{<1+foM(7(x96OCFlIJ`)f?gf zO0z9Db}M#VXFaH=en2<(R00_Kg`&u+m06Fu2G03AxJj30^-$)!0*6XBfg-YdfS|~u z^~sdE_8w4?YfVYkc`bSQD#(evg7G}F;XbqRE@u61hUoUE|Hi#3$!*Elfvyc&d8*61 zf+uF$Q9XKA_&`#|>z#6?w{lov0;)F64mG2u^^A!PJP`_j}-i1iZkAs}RdtzC{ z<+E?B{*>AVe+ZH1SgvhF4Je43!xhbvALYKc$W`DU>eViNFOz7)VkPoTmLU!aZL-0~ z9cGvMVb{wPUxgXf4wo}LtUX1#8B6nAQ@H0aOVy{0elW7JI#FALr2Uq_*fxH>Tmja^ zc38a}?YN$Or3STO1d&&sCiQwMQO1X4nbfj@O50=^-qA{BIy}{fUMiPUgEax(2+d2S zHWNPPeeLr8Q1@I*z5YM>3#^{fu5Ed2-tvk{(8bWpulPZij9qJNT*`F&`V9haY=6l< zW)#CnTWjck^{cev6$za6g6;5EQ?5|FU673EW-8rWPSI{m@Au*1*z=D%+A7u{B&&77Tx34ZC9%eG~-#jCg5ZJlxj0$=pL>nV z0L=JT$k$X#o8G|28}-VnY}{b)^7;9z#t*8eJ}YFuK04uF93WMYXgh2jO{FphXd_kd z2>eK*KPV18EQnK28jdt=QhZaWT53YrN3O^LKyI3(=96S(h{z$pRZ<8nkiQiPp zEkCsO=D(d~jEQcxrmvJcU((C#%F^b|Q;DdLq_5uy$1+|%E~{xh{P?PQNGYcqj&;qf ziJ9~{g8EJ@RK_kbIa8x^{A`zLTFw!ld{~xdtTnM*g883mrXRTI5NMTaNXU?ocAa4_ zULV%XOJ1YpPe>%ytDj6Zpwk;x%u9X@brmL0Gb)kEU<>_92XVn0cpaB~MK!`#DH}(& zEhwToLC>-iMSv&KQGhR*4bn1G%QhPfXwAeGRbtm_Ib+`Qw-u8(#TqS^IMg1!lNq4J z%zp9x4B9l%8LLy$IDCgWeN^bgBvCG>p`85n;t_>qD$O?Zpwyk87rrEm6^!U> aQm@Y5Vasuro@Qh$c}w@dVDYvrU;jU_V{HTg literal 14930 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 diff --git a/addons/sourcemod/scripting/ratemonitor.sp b/addons/sourcemod/scripting/ratemonitor.sp index e87f2ed4e..e9fdd5682 100644 --- a/addons/sourcemod/scripting/ratemonitor.sp +++ b/addons/sourcemod/scripting/ratemonitor.sp @@ -143,7 +143,7 @@ void OnTeamChange(Event hEvent, const char[] name, bool dontBroadcast) Action OnTeamChangeDelay(Handle hTimer, any userid) { int client = GetClientOfUserId(userid); - if (client > 0) { + if (client > 0 && IsClientInGame(client) && !IsFakeClient(client)) { RegisterSettings(client); } @@ -152,7 +152,7 @@ Action OnTeamChangeDelay(Handle hTimer, any userid) public void OnClientSettingsChanged(int client) { - if (IsValidEntity(client) && !IsFakeClient(client)) { + if (client > 0 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client)) { RegisterSettings(client); } } @@ -178,6 +178,10 @@ Action ListRates(int client, int args) void RegisterSettings(int client) { + if (client <= 0 || client > MaxClients || !IsClientInGame(client) || IsFakeClient(client)) { + return; + } + if (GetClientTeam(client) < L4D2Team_Survivor) { return; } From 0b6f351e48a5a74427e304aee0cb720830e3ca10 Mon Sep 17 00:00:00 2001 From: lechuga Date: Thu, 26 Mar 2026 10:32:56 -0300 Subject: [PATCH 2/2] Optimize viewer rate management when using RequestFrame in OnTeamChange --- .../sourcemod/plugins/optional/specrates.smx | Bin 6000 -> 5984 bytes addons/sourcemod/scripting/specrates.sp | 10 ++++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/sourcemod/plugins/optional/specrates.smx b/addons/sourcemod/plugins/optional/specrates.smx index 577ae82b7baf21a616a10e036a04f4a64b8ad526..a6fee3a2b55a694017edfdc8cfe76d6d69e77ce4 100644 GIT binary patch delta 5782 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 diff --git a/addons/sourcemod/scripting/specrates.sp b/addons/sourcemod/scripting/specrates.sp index 50b2e0e97..df8c35804 100644 --- a/addons/sourcemod/scripting/specrates.sp +++ b/addons/sourcemod/scripting/specrates.sp @@ -132,14 +132,16 @@ public void OnClientPutInServer(int client) void OnTeamChange(Event event, const char[] name, bool dontBroadcast) { - int client = GetClientOfUserId(event.GetInt("userid")); - CreateTimer(10.0, TimerAdjustRates, client, TIMER_FLAG_NO_MAPCHANGE); + RequestFrame(OnNextFrame_AdjustRates, event.GetInt("userid")); } -Action TimerAdjustRates(Handle timer, any client) +void OnNextFrame_AdjustRates(any userid) { + int client = GetClientOfUserId(userid); + if (!IsValidClient(client)) + return; + AdjustRates(client); - return Plugin_Handled; } public void OnClientSettingsChanged(int client)