From 509c6a1b21067ae8095405fe0f34dc6b9958bb1c Mon Sep 17 00:00:00 2001 From: Jackz Date: Fri, 7 Jan 2022 07:52:36 -0600 Subject: [PATCH] update plugins --- plugins/globalbans.smx | Bin 6484 -> 6509 bytes plugins/l4d2_TKStopper.smx | Bin 10185 -> 12456 bytes plugins/l4d2_ai_minigun.smx | Bin 9725 -> 9769 bytes plugins/l4d2_autorestart.smx | Bin 3935 -> 3925 bytes plugins/l4d2_detections.smx | Bin 0 -> 8300 bytes plugins/l4d2_extraplayeritems.smx | Bin 22189 -> 23621 bytes plugins/l4d2_population_control.smx | Bin 6376 -> 6405 bytes plugins/l4d2_sb_fix.smx | Bin 25027 -> 26852 bytes plugins/l4d2_vocalize_control.smx | Bin 4888 -> 4889 bytes scripting/globalbans.sp | 3 +- scripting/include/jutils.inc | 21 +- scripting/l4d2_TKStopper.sp | 102 ++++-- scripting/l4d2_autorestart.sp | 8 +- scripting/l4d2_detections.sp | 218 ++++++++++++ scripting/l4d2_extraplayeritems.sp | 93 +++-- scripting/l4d2_sb_fix.sp | 516 ++++++++++++++-------------- scripting/l4d2_tank_priority.sp | 107 ++++++ scripting/sm_player_notes.sp | 291 ++++++++++++++++ 18 files changed, 1043 insertions(+), 316 deletions(-) create mode 100644 plugins/l4d2_detections.smx create mode 100644 scripting/l4d2_detections.sp create mode 100644 scripting/l4d2_tank_priority.sp create mode 100644 scripting/sm_player_notes.sp diff --git a/plugins/globalbans.smx b/plugins/globalbans.smx index 7adbc75384c0a3a35d3a19662c92d46b21530a3e..f63fb4212ed86a26ab8442065db9403c1524ce97 100644 GIT binary patch delta 6348 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 delta 6323 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 diff --git a/plugins/l4d2_TKStopper.smx b/plugins/l4d2_TKStopper.smx index 1eea25542eb3536fabcd2ee22ff5d82575ce07eb..1648067a32e2456995770509f78bcddcce45dcd6 100644 GIT binary patch literal 12456 zcmYki1yEaI*RD+q1q!sdTPej|ic1T@tw1ToU4lb!mr|s-J1y=`a423hxCOVM0fPIV z_dVbDpOcw8_qCq2vYs`2cJ@rNx2)_J&6h7;lyIY<4CSMs5MjPRLD@v=Kd=8dkt_-d zI+CyCP*7&rQBZJ@JnV{sGJ$krq%z!4P~?$LgVZLH|010UsXTWSlnrDtCz3-#P*5yi zqM!&Nc|Q~dr2^Sk2Fb}`C@4`#)<7~{1PV$!(hZPWK{652ZIL=dG8NLjka`n|g5rzx zaHJxTT!Hi?q(1&aK|#)sl8clDlI4;6mLa(^6$J$k=?zGAAbAw&-AF~GA>U9@P{#km znJ6fqFp+bbIhtFbaGIOAnxJqxxtZDl%|QPJcM}&RIGDHs-7WqL_DFMabp`&P+W(Th zg{!rr`Ts2cZ|Q$C77lLq|FiDu%Ka2mn_kSy_>>N!^?Ebgh(d<9$xpeFo;7dI31`|`jd;xi9 zXZIue*b47m6rP&Y19$g#c_~@&U)}_s#dXN^Z^0=a%T?U2bd2{(x>M^EOs>*|84PcL z3Q8JH4EKLnpmlA&6mGrngbHY(PBDX?qY`08osLzn!y`+k_UH@1m|LR zBXjf8r)+dLmv|4~Fby?{r;O-4+0l@lsOfHuF>|oGaeuB4N}W#A-Q40mAd74;{rS+U z%Q<7YaJskXZszcOnbAC?PkZTZ&hQ>wG5sabx`={}UU#oybw_6)ZrbtMSo)>EZU1*J~Q>29L&mean`IAV5FN}qaScJiRDQ3NBmm8NT^ z4yMKFj{UKY98;6-CLQm=7t@~yt&1wy=uP+9+wS~Ex<}&Rrm%HA>C+WDPYEyZ%3zNO*=!tBh6a8{`q3nDc`wQT+%tyEL&2vRpghuRkLw4eH$=}?#w(Mj2{0jGM1*hY#BK()ZeVf zVmL^&Rm8kHL9|6v)aD`6eMq*_DM`UY<@P&3V##@t9F{^+NyMTBP;RhG@@ zH=x_#Z7fSW`&OQ6z4 z?fsO%#Pj2GsaJn;@(4F(P#TiY2A z^E??Z5TjG>V<~Q59zP(`wsJA1t8<4g)9LSvb*>gM*!CD^EH?B9)~idpVh{Bcu8iV= z(ShvRBU>dEv^Q>c4lEJ|y>6>ixrgVw%lc#P5~KDR<%>TdWQCFzOi!R?vhm|^9pr%6S_e}qDQtr=Ve8m27!UZ*TJnue4 zvlT?7nyQeSD|HwBq3@7|pEDzEHCyVDOQY2p%WAlQHWQiP_grFO*B9e?>}DyDRNRmG zQZrH@DHeLs#JutbD;3FK6P_jrcWzSO7seG#tO)Tu#)m0g(rrI~7JkM%#7*C&5l#tq zPPKMk%lZIE)m^4+!f&!v*lEVKb*6NncbK;Cv(Nnicj0ijw(mRcif(RWintFaneU8l zHcRX?DC!sIRakzdyPRmT>96?uMk7O%!z4S(_1b2CeAxATTc0(p%D*(%p_7wIiK*z9 z{QV2+)iv(PE82_`=#!qy+gD|F&xC1-0yp62IZ;CU00Zg$Msnh+(iUyqC23;0Cecas zHMr})Ix7XrRkF0h65o^A-7L888V#H7kh{Nr9oP%FPX(7qFV4^$o!_PZd>`5Rmh%+W zA3onXV+3VSbk>VEN`lUP*vfA&LYJ&Y1qdop*Ze#6;xhs}Iz{eFFi*GJC`&ZW+}2z& zZTG_Om2M{_U(;@0uaVQbuRX6KO!k}S!DBK~8RXvGjNjlo2&_Z7! zq1Ut`B&+1e;Dm!V2JL2o`;`QHA~01+d7rbP2`JEXeH!xQW*{ePp+7oy&(>Eux4Gx- zdivR6ZHd={J??C#5qFqhu2HNnW3L6%}0a(B;k z_2!`drG1>UyLvC};KL1Fm)aKg@HKFYdd8xkdiZaIXk1W@K-aw6;F9yIU!lLaI(JJDhi81Lr9eE_*G5L*Iz5HwwH~GZ@y^3Ng4f!uRVHw{FM)NmgT@L7%PH7vHZ zY8S&QC21U&lY^yE+KobO_;xut>n}#9^M0R8@8;}~r=rB1g8po|4-nYF?SWf9&n{fV zxb+4hTtB0xsmWN)ZBTU4e~EQDVIezo{4Eku;eLYU=gs$yt;tq2ZZJ9!F5PwYF*znZ zO~BHLJ6`~dV^Yk5N)qsCR3Ao zbR9%emQHR%y)xFp=GvfY=$=!3Y(79`wJF@@iVQ^5)@yX_%D&b5Ld{*f3i7h@(ad5g z)_p5SS+4$M%Xy?v$#(0{nYyHdFlB?r71Vbzmdo~dh-<4ES3&1{>3%hI47XjVWz^_g z29~tTl(X`B;UbJdO6OtwZ3#iz4{=UiI#n#+W zYeZCjToVphF7il~gt48<<)S8Mavk^wTH4zkh*+g$#i|vZhum3}^xU+~9YN7YOWAg) zv&vN%qNfz1m)h-QKFtsC88N{jbL}ZU>7xc7$tFyTWPbs>!jlyp;!Q(z?$Qd6(7WTQU@}ZobZ#Crss# zC@gS2kFjV|Rfc!xj`@+hCt>{cdGJHYhX9jy7N%5uuP&~%=dUn)rY%jFqgg28+p?^V z;;LG|pH~-om-y4SvanU{=4ZY9A*;f>mdYk=j2*|&DtmqSq3)>6g%#<=tx3DRjkhAq zgB4(Oa6CD9eyQW1`Na@$XZ!WGRaN6s-EV4j_j;(Xv8h{`Y|?N#h%+7GYzvVo>Lu{`)GBj zcfNXlcBd8*s}lS3Tz%|Cta=s?R;e6QE-JcL6$G`o2lNqlW~)z&ScHCy&P*Q_shx9!Nw`Ct%dMYW?xm1uI~Rrt3e zL`PIL+hxb{cMl)r<%t%^RmIgP-80zSITMyw+z-M(=KbVBxuh>6A+V(G&`CfgX)-83 z{o#=<`5~~|o2BiQp@A2BdsP!(Zo1vuqJuWE(`7fU@bNU8%tP~*lEZ)U_OB&p`BoCo z0MuO~5k}9dzIv@38lVsZO2&Yyot}YVNTdED-jlx4X$G9D|D#_HVi$cZx7~SDci(=D zs|ZfMg4H4@GJB~$VO6q5iMhK{GIZG1!ijZ9?Pz_i&!~6JFE4RChnTqBujIW}5BLn; zkPW>mYrgZVahW$tY4(KM_4mP`hx`GYcg>E{`(obT)`d4*5dK={Y=+7H{b^5C;T3~g zI&FMZ;?cMRg9POr74cO>uZQy!q8<1B{l0~|^lR6-;dGdB@VoXwS3JZLIx3K)(zN-x-*xyzpuKnyN4cODCm~a^ghGXzL~{WY{_C^t9P#tws!NbdG`9)iCXLjT7fadH+MO{9DT z4xIdIkJ*{mb&jh?Iqi;|_NB{$)OtPl=<^qy`>UJRV>cHnZ-pVlf^rv+2n zdhd5PKlp(n0?l%FM8M#N0liHQ+xdn@%CkAGv&QnJO?&$vO^()jZ6=pyh>yN!zlJa6 zPUn-^zW?q`a5q!^Z4fZ!;=?}8K~nJ|H5}D0>{5frpyq=rm@)lm*n-zmU@_HQpUsvS zk0}vqr4krD9uLC?&L52K*qz)2+LmrrCFy(_L@m|t{`kNTfnh1QwRfbQozjR}9h{*r zONodcY-ke>gh{RirI<&aGgihP<@#A$+g}uCY+@fMyS6;r>{>MBl0K3P>T_h(VVz)q6hV~ zMJKqRELZQ(?PeLOkjlbALkW%){ePQfo2e%`KAX#JNvm5kD*za zP)#b}SsU;r7%U!G3f@n%$&V=oAEepTBkeG4vl|fQ_2(2}05?iCpcRr!ROJ3x%-bkVauAQuM*&J!8i9mPXP`SfSgMOa)rz7b~M}#hTa1pavPhG~#FOnUwjJ z?zxq(7$a>I(kbkGt&O4BwG36Y;-n*KaHmKLQcCbN$(?}#B|mmSkZF3}*1*+wo@v#S z`iq93Lxr->r@BiK79c=ftva6>5STlX;bX_PyK7n%uG69#<54*>`d(U<2$~3LbcI@X z5`#1?1yV+Ic^P2luOG!G9xvXxRn|Wz#BC%CYdSp~_sfMfz+x*ya7~4T!7+I*w zo8217as;Pi+xj+YzT81F3cCFAv+ldYG878#={^B4X4>OoFvgBnyDv@+e`SQ9I~;T+ z(N|fF)>ftf+gLU%v{$>fF{e2`3r1Yz8-C|8 zUxYqy;DnwNamsi~w%QUo$a<;?AJI0|L|%vX(l|X5B@iKq-l_{JZhQ!>*J{6Ba>H`e zK6?VbAwLe(X3UGE1)tgUu}-cl*mf8ZRe_dsD16_u~cb|Q|%1nCXgjFaNVXy;CdqWqe8 z*KTJ*OOf=2O!r0+bNQ9#7C(PVmXW?3eal!9CdVS@ZW1ZZTJ>pifqLC6DNaXAj(>4s zI|FZ{rmXSfv~w)pdw5ff77YYc-(1CqIe60+Zz=(vW&1_AEeZ)Y=$11GVYvDF6FWvQFEqM z(KMyea(wAf?*(Lt@MkLj;$-nyp%{S*%N=wOwB(-&XY6=^8R^p>G6JcD@@?lD$X^I^ zU&Er`?c%^99e_)tOU)^g-b_4pnfIs&MIia*eMC||8UvU~?g6V0#M{zASmV3oh6*$q zjn5PQLcwJwC9Y@6OrF>Ko9P@}Q|Of;fkQZGm&Yx5o5yjq?-YskLHA#+-L@u1))2km4V9env3Rwe<8sXfkEFlPNfPN?3M8P|4z zz4Bc@QiIaOfx_|9QaWncKiNI+LZv^psH)n#jq z;^!$YTs4>{xPPa@G(77C;ujvdedGNzpKPjZzLfnw!nCliz!+Th5!y4NIn0^qV4s>E zIt#6EGSJ*4-l{FzDbw24EG5W^GLmA^9)@^FxSA&Z-Rw7YKVkibIP)wwPx4n`^=*Bds~+?|xi1LDl1q2oHQe-)H8M#_=Zy(| z3GXn$S8I<6A?wA^Mo1HW@~w`kAme_nxOqJxJ$V19GOpOsm=U2$mVpH{@f^Mkvl5cO zjOq7t|2Z?=BrWx(=jv+`spS3CUh+VgMT{!1#6n=`@NdfrM#_8h^`66O%67#|y7S^+ zV{Lc!mH18KEJc@h&c71L`Ks2GKpQ@fkG`wV9nU_`*H0&pYxiB(0VmI^&yUj&=(#a( znp=En1Y3*>Sm0rNy)PZ@@g4BD_IiIhM-VhL=0cS~*B z>ejz@>aJdhg_$%lK?&fiXa-b;EUt4dSwAu@12hgPwoUqLJjaOmc=$qm=xUecad_6N zi)8)~+U6Zm+X|(sh>V!s1O3eUm09P+jEPg!Z(rFOiDn1El1VaQbyHH3|Vx3Vg0^h1btn{)Iap8 zXeddOW&^Owe#>j9AO-DLm|9YX!VpO^Sg+C-Q3-VcU*?vo8%J2+UXv8=E#^7|!_Fn= zfQuZOE-}!83aswo0b}Vs$gT8V-j%t@H~w2Y3)^kqsOQny!j*oMW?zO=SdimScE^~; zsm9{zUY|@ed)FB@>|_4=vD#TQ*U0=g7=I-4|{*x-edu8kJO{w5lx(}T( z0toTaepYeI%oxfoFj3#52*uA(ee}3d{_mFF{7St{CX6ifauSYW?{vgbI!xwSWHwn_^7dzKDB5sPqJs5G!nst2NQCkywG1IOWp&G?-x*@RmK?G}4u+kT&r2`JF{0VExw5Scsb8HddONW8_bVQFhk5N0)W(O}6N<1%n<--c zq*CQr9<2GGX!bf;g;$s$E}rJ#CIuY7F!!`0Yb~i~v8A?MGT$kxOq;aB-O_w~w`_7J zO0Jjq?=|svUP(+Y34zk~Wm!Yb)GP)l9YcY%w#JoDBt3mW(%YB7o@F!IizQ5!*9_W3 z3ZsmGBz%*fX1msJVG3%$jrzpjrznt}vg@h*L34J%-YOn~=P~&GD*2I|;`#LBBF@6{ zO5?tiwUF@ze)oA!cQ>i&`{$&6WtN?U<1(t<;R57wOyf^xes`(~`CSs|_xtqSyQ>Oc zX?V-2@sG9H-VV*9pi@5l)n^h&$oeCb7q6`4T^uSF}`he z0)GnOkCeg4i-8r!lSKVO2f@qNC#T7b*_b{>e=Jb%V z_=ffz5>{)~yAB2EC>Pd{#&Disn2n6A?dG9yez(3h=i#=U5`+!& zr}^|1S)+KTO>|Hk{SK7z2~5FJzIA-4H)j_~iCL(vTe|(Csb;4z4@kM%U9Kfy1hOa{qc%T{wjLdGf)45#=soHcw$_T__6U-{|(Lkk@O(}Gf=?V+YugcLP{e? zFDp@vD{A3z&*Eo|?eACNbVge87g*5)38r?tuj+k|xa^x30ZR(zb`f#wn;V*5ruR~b z|2AJsiP-his(F4T4^g|8a#~C{!b>*B{urpGN6WGFZ$bkI9Pd-=vY>rbaoyGTZ;xSR zE?yeapF3v%;!}!kAWh_Oe6HzwR?vkF^8Yy_=AZCG+|&)6NNOe8x5O^4lTo?Jlk0CN zqg=s8Q2!XJ&y+mL0cTwrIa9HC`;h zEdrLrxV6NmL*qbLURZTOy0Ur{sP%5;z-Y;Gw`t<;DxDp-+gi?EmAk#X5U=;* zKHD~a|KcNm))1Q?eHcEGsJ3BAjA58sYjaS8jkdhwx0#xG6Glf82>Qv9iQDJ&iHe%P zFX^=0mAH0|f!CjCYat}n0?f%-yd7pk9K*kp=sa7Om7$(S!@R9np2O(}4b$vo3F{^+ z9R6yXGm=Xw`RX;j6vSHl!yn=?0TSEgd+z`Vteho%ts=sdX;NZp@H1FCK7XyYlXBl4 zv3GOWK-||}R};LgP}>Em`TpMJy!{57J&ijh{eC{!(@y7diT8KPLuzuZi>+OAjY52w z|9j`wO6&9PPtLLPYkqrpTOcSw;z4WXBAc^gekcUAX+`reNsTK70s zMU8nKpkB>~#ASUvE*4|rUa*n`k7V5Nv0Tf2$syGD%6@fAOjBNy6m>IfqiuHP&&*d! zR7!WrS0~SK__7l|ghjXw!$n4e*$Wil-jt}&z^J?Ry1lk3^J}t!vThrXx$fS!>Qp2T zs5pXpa!*u6d^E)AgMA{{qbOm-i7tB(b;OW_i)5u?OhKo+W>`^|m({IH$5peyW;Uw& zd(CVG*X(qC%ib>fdY(llht;dQR~bQYJXKxlqcg`sI}-otgmSC|)p&`GvTs%z%$gx; z<@v?(M}7Yk-gq~0Xz-hoO-B--=$D9#>tkz@;b%r`8I}diH|W^#yzq>i`<0n2%DAF* zPWmTEMip4S-f*rjpn#?PonC~n6}yI?r6)o<#30Q@1BU0S?8`0wod# zNu=7onm)6;oFBn|C=?=xMULL10l}tk$riD%i34*pLdm=(v}+P4%)#jIX;gtCj0I9z zj^rSot?jDucp)Yx9Zc(ASoUXl;Lg3KKglv}@1)K96qtUc2X#d`6)}T*wBWZwx>;hC z67-E{2iCJnx8JPX{j?ecbcrM8zRB%HJ;{|J8XJl7!9{#iI>f+i1HD-t13kSJofVzX z5up-%46hWFRIXkWA)vc|8nTKti9d9#gm6$hyZp^D^ zx~$Qvw)ELV9dmy|-Czx^s^mKQ;j(#J_J+huU#ZK~0Zo&_9V%bJB*g|lmA^wLWG}6M zO%OZ3%WL?Peo#ZiJOfslUYhw<6=csh9GDb?C}GeYOmbq1oDiT#nbDZFRqy%)Z}is{ zsi5nekp*os;KgafF;2fjqp+s|mtJS>g3!sS2K;vAJ!RuTKjh(&3?mYq|TQ>CFj zq{r`huYRX_PB5P@@qI_0!;Mg+K-E>jwo-@%VADMEV{d!%^q?g5!&92Hr?1G9?9Mmr z>ycxcbP_=O+%$z>ATCMAPO&MR~RCT`!Idq!-YY-ylB*DBQz`R8svLfKLh9d3V z?D&NQ(f8)oU@ALAEbeJ*sxpM%bNso%^#rB&R=Y40gUq2>KLJiNBh0oU?&hLbTCowJ zOUJn)=;`*7lge)TmEhaeus}9gFM1ouf515Pt;7qQrg0`5_ha8BgdRy>Qc{lv`3E2_Bo#l@eskN9I zTg;ta@r!KCw(u{U%Ye1mn)1Cce0S1~kL=A+W#tR@KU~&Dq{P=Hq(nEQ%F0az3C1ZI zLPcL6hbiq>vAVPU$y!P1=|H;;`2_?Lx230O*Omjdh}$v+v}#96n<7_KAzy0`_X+E` z4hpg1*@4)IowBL({GjsyTA^oUxBc5>U?B`toSGwuF`kQ^l^Jv{XqlWN*J#h_%?zhq z-7za!df(F-X>Ye)mUu=w%)xM~$HVuap3F6lXbQ!A`i*@cRprNiU{5aer;6{*rPqpp zNQKd(pr>oE=m8=o2NC1$Dd!(qJ*pwsC24Ew|1_IY(t0o`Jubbux1~;eGQB$a+Up1S z(VjYXUW>1};|gcatLtNk+e$Qf#k9XP`1;xc`V{SJfLK$Uhj%4HB@MYfvz}jEly^V6 zVCe-J|H8ux25w1cZ2A$_0PfDqUFt_mw;!$!LcKOiq_e}V0pY#WA3{pohbf*_$WYijQMflidEjjrdh6K^lwKJOot-R+zWPrb< zCURkq{HSE!V`KZ+Se5P^$E_}WnjSz8P@6S%kw0eARk?8C=pt~>-fO@-k=CL#F%ZkP z&a$SStOQu$QNI^S+#{RR0mR}*ZxZw7dEiqsiBMMe5@btX47mCygJaBnI1R<=y#*&P z0VmzIjQ|+F3VsKv2u&+-_555dP7XsW3a{LSf1dWn6_fX`J*oC0(GbTWetbX7>H`8l zGEgY_Lxx_?9zAk=8KnBHB?ris)La#Q80i^On1t5i95XHbxZ2{|L?-1X{qxu+p3)y| zPI>a!CjFO1KHo=FN!?o^7Fs?x5FZyiul&3sG>E<;w3kCB{*#nJO8VaFENh=i-IwxK zY;p{+_WtfAf+6EmTfW^|X1>^*hurNspEN+l?zJotL^&%GF=tv$*e@E?6yAx};Y|v8 zad)zLtb|MOh`F7adc_(Z~3B%7;X~^EAYTpzKGxC#AaOIrL z1e^?%PZX5EyUQWSLqg586nJ>qPP|;{oiiu{LmU?swNy-Jz!2aFKadw?Z6e4^iOYA6 z3Y4A+x>f&u)pn~ceC^<$biBOc>vOofB9?3071s0)bg}{2$fA$*3wIz`2|PT<*+OlW zh;8x^`55cAe+Up&m&`L*pYQlt`|6=pTiGHy&!z^8{d% zDBU7>^xA8?_lgPF@CP%b?l9@srqY5FdYQh|UQ$Q^?-Wi$_qe2T#s5NKhQ5I?2kmg0 zFo^<%ZZ7hNp@{(CDbuF_@&~%R@`-uu#cv&*aj=9zTJuPVu0Q^RXE-e7W^~&&TnUYBPMi^9tnL`TPC#C5j^;id8GE^u59xdhZA}!5s~d!?H6E}J{Z^gE*LNwr{jf&k zwHT#Hh+tA%<1UJIwqH}Li3q>W`@>l0-kAH?wO$bIl6+6mu|4YwhI*JgD!1K3+44= zcGagWqzk1n$y1z_=54P24AA^t60jVp?gGu2UjG$lE-dh|r7rRqV(Sc+yaDw27T8+c zho}|&?Xj9tCTB@FZ{1zO#^)MOuzjJbok78q%-EbQJu zQz>m1It%9N{JK-%HEdS%bq3uqd}B$@N;6Ss3u@?VyV*CQ>e9n@;z!8^3oexITOTIh zl#ov10z7>j+7W)Cdt25REL|!!+Of5M-NiQ|@m!M}C0vs<3oIHjYCSOy>%!~Ea~D}N zQXJm-`2yH3pnAC1iRt*E}U z;pu_4!R7n`l2KRqkC+FO-LbAw_>VeC(ieD>(*Q}u3za;{u-iV%so1}Q=WG|+;hoA2 znNj@^v!~A-uuP@jp^V28^A3y9;XN!3thbEnr;N{Gf63NSzeI^u-@r`&QxC_~{ zdgr)Oz(mIdkW`ytyki5z5V}vz!%Li8fLy&#O@P2`fPZ6gGFP&<37Iqipb@cq!E25 z)Vlq5Q0<3+)BXigl-hDI@_FEJH8@!pIm+3J;Fc6hA4W%%Bibk5mF^pNl)i6I10JaF zI>$^O-l1&vVh>cJgjXAq$Lkcn15XRU=RTR8$h6@w!4T z5F|t16TPJcuE#Am^1p=oRsCuzh@L&YD!?a$4{&~Smv+IO!mPNaOmY=$|2M0mEtB(| zl~s^$nfbliLhchsdvaMSQxwEgkWGRMl0ET&wz`zJa~r%{CYzHd^J>gUoYPI|G7bH$ zLa3JC*K>2+(zM*Ezs{wtWe^()xOegcu4|kk=};F5ip*$chSDAt0 zSy0RF=j(*(w}HXA(rByi*X=q6AowpeL7sH5GeW~G^q1B1whyDgDzC4GzFv>h83F$C zJli0O@6QH05U#!7Ww2C!?zw+$zvMbq*ExBqR;aU>z!9(<4Zw@b(WO*{!^cogloQb&egn??Nh}7 zR+Px?UNoBICdqcVr+ORH<`69HE$i(=IC`EaAcyI7!wv@#7sO~DUhe7j6!W%BEI*%R0?P$nTegcm>tbl-tj&Mog4isV#W%UMi&@RxTzj;OQM!KFx&4jq z?PUtf??t%BrNS^8d;o?y9U>)&<*J~6gtTSRQ3Re95viZPl-(@pn{x$`enW^@=nqXn zW=^k1cuHwC>MnRZnNxX71j1r{BmYuHOE9xO>%4^68YhzdTzbP{;amnm|I{v{?)Mor ztl+-u&i2I@<{-(rPik!bYLifj7&*6c`!ai8 ygPxc3@}b>*dSYwJ>v()4?%-OIfm;Do^MoGlwnopbishz_s+Ra9*<8s@_x}L{{P?v1 delta 10047 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 diff --git a/plugins/l4d2_ai_minigun.smx b/plugins/l4d2_ai_minigun.smx index 647876034a5696bd96eab6222a363575e80fa768..0b84af1428358982c554b5f68b1020497726230a 100644 GIT binary patch delta 9630 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 IDJu{E162DJ{r~^~ literal 9725 zcmYk31z6NwxAuotQb}n9Y3Xhd5u_CX>F(}s=@@D025CV$B?pEWx*19sx?zAJzImSW zzTY`>UH5hW*4pd8*4}GAd{EawML~IB1OQ6B0RZA>C;-4FQvdw^aVil2029fNq5!}y z2>^hL?@Z03Wdd08S(?>jMD!$X@@{`56KL z`bd^T^1KlMP>f_`DZtMJ0Psh;0a9=z6C>RYDI8Pe9gyyW6f=^IksgIqB$5-5o`MvK z834eI^gN{Gko*h}0H{E+iZcN40_hD%86deB={-oHxBvi9q>m%DhU7uy13Ar{%q;+% z<|ghY08VEQQ+pdTw|~LY#1#pSChj(#7XN|+(p=r$ZT_eBUvjW;w{|lBPx`;5|DISl zdN}+i@9yJlVQyjheGVIz|IYrm!ph#s)WrV3`(Jz6MfMBt*pK%-PiLS!Zh_x*?$_9;*c3NjfC40QS9dgn+V?d(E3|9( zHN8^7c|?WoiLXz!8Fz)i{DAo^|Jh!Wumik6OO~6Tm{MguTsEid6#lwlYZL3u0yh$P zkLqDtDz8_{dLAgmfA)CUojT${YkS-%?yE4n^Z%)Sju$8wre=3aNpatV*J?Kd%8-|p&dqGb2?3NABsskzpgECgNGL=A0{=kzMb29LxD##vz|lIVH5`A zztO>yEbRda+-Twj8icLQt-}RcSUBReZB9k;x|G6@qhI3%>V^SrPDd#GKZhC3uFnhH zaQxeBV%=26#6KLfc5+?j-&)&K!+)+xL~-Bn&!a&6Hx_u3r*}of8{Ww+u#Li zgssi41NmE;_4$tN{(leT`fN{G@dAGX9x)@&yl|J71k~1IE~pcWkCpVW@&@a+uoMao?jWZkCqDrkyF{gVPH*bH0 zL%zI}+``VQ*SXQ>n7hW#3&*&jd+eW8)6Cj3fz}ozaB2@a4Z%B1;hK6;S3&a8eoizl z0kJzYLj1s%fQu+UPZ}3y*h}~h)fSD$<*Pci^RKR!B8{y<{ zMoo>SuL65J;kHv_cC*D~@CqwhqnX>@)YMx+?p+SvIjOCoWv%y6B~IvroHv}kBXVaL z@$Mybo)}678%F59gtBX~NIr`Dta0^4OSycx^)$uz&9Y@{QrGvI77!xx z5A0PlN`#Sx;jtAw#p?5ktbgaY%dEgRw($#j##(K`yUvZZSdf!gvat4 zvE>f2d+~qays+9GRvs@X+v5YLtWOAU3Je}D;kMxgJWxA_?(949CUkY*EO#3{Y;%ks zyoO^ncCTpOjTmSL)!kck|Au~plpMEs7^Q7bALc1@7PxA&UrdN88hZTzO@l=f{T(}j zUz2E0$Qijtw|K;Z)?B(M_7 z9RD)xhVW%5xL%FKT216y*Ue}L!3U;zW7wJMUVHxC4(O_%Xwh$Vz`v#F6(XVlf7``) zt_!iy+1GW_e0X1#932l9Z3TiiwD+w5o;YouC_IDdsD-T0Jh6}*6~_(9oy8aU{+4qq$|1o`0QmXDPQHl_TPCKOQnpN!i``m+PrcHU894Bay1R1bnKZi#+s~XRFAD(zs>;< zpXe>g5r=TWi$dP(z_M?b=k&l5SI7Kuy_1U$k`cY}?FWnowC{uJ=kPlJuk-s4yQH9m zk9rcrc06SVDIU<0+XvGu`n7`?e|Y-NawIBL$ZrH^M5>6~1pk5y56 ztX#2NF&wb}%(#eyY(fm&_h5Q)@$7E&ni1!kZ~FGEQk~4xNYV;|5_qXN==umby*50; z_-I)K;hKn-X?sR4Sqh7`I_c`A0y3LVmh1APT`YJG1nC%lg|v4^*0&(Gwsr3IzlL+)W=$(E{s_qbwfDZXUiETk2i2iI(iMT$f={8J){#IC4OY z#9R)_8_4SuRt3?n8ucdU9n<4m>KTF(7)DxBx7v>07dX9V@;TZXcLk{(c;4EutZ^{b zMvh!vZ}Wn<@Yn)6_Wgcy?cXUI&5mA?H#?PG?dP8b zCI&7MJsP+StoEGj%r++B#MDU4RV9jZuBRKBc5go)xg!s3Qm=D~R^M{vF7qlc1>ErExMJRsajatxd5TJu(KRJ6q;lQU~VuKGs~UdyKl==yi>C)Cy) z{Jf{BlhDtvGFrder0l>n)HOcZ6Ne#wNz*2t(9@89HA}rKo68vo(c+99Z*3te`KtL4 zCHoggj&q1J#;U%@oyC9va`}B91Glc+6UXuS)&xs=*atnUz-Eum0UfCfZ*X1g@l`T} zP1IS}1_G+N_Nu*&L0vn%Y!ZHiGSn!&Js>ADEbPG}gMwOOsNJfcD%PGEXR9ezh3{5d zvOPUmPK`{F*1Os1Vgtj0-r23{`JAM!bBmcNZS%7iih)e?h8F$;Yl~ChE@`1+AFIa0kg%bNH?P6b7tsD~nq-m3@9L=FesYK7|%2 ze2DOi_?(gLJk^m6?l-?V9r_i2qE<|A+mWl!luPA)3}*DX?YlUl&Hu*xCq-v_n8nz_NK8=HND^9j_y4xdFAgE+XH`t z3G3S)_+{V^%Z;rq9wDT)HW;E&%0A-7a!v3@DN9}X!DuM?!F0!L#n>D0ECrC7{MRa&U=Dke$EBHP=2Z6O4n-z`7Nzwnx`Ny?Ea7^FaWvCrf71s&Us zL)T=^hJ94-S8s|$cflSmPQ z`a&Q2F5-`IKk7O0GZyX5CmIeu41RH0-&=_}R%S~VmE?WloN0qON9bzuS&$@|x8g^N z=0Nc%8U< zZjlQGK5b~>Rjy*z?M7|_nQuW`RUH?lSYn^^AF9SX>0j@n3`qEm`q{~WxzggvG58tL z=#WJE$=CVLwDL@#t>=};Qfa)^EdsqhxLV;(xX;p^1=W;nD>V)`kKawdL1%MYnUDMO3rRa}a9G zgJ?PxOZlZ4`_+rsMNw> zu8zfu+EWEzZldUnBNwX5_w>Yem-3suB{$Y@d^gSdK8@@MqK7t=)qRedcHUkWMVnt# zJPXS^_d5^EyE>qbv3l6+A2Jr-i=2>V+d9Ga;J?!t?q}7n9LA4iaFHw920E9AoJ*Ri zNcW0>el=Qo~NC@7E8XQsN3Z7>>#?_ zxLbz6;Sr~8!hDaM4&l}Uh4F-lm)EjuSe~uK611biHZeLX^kyWZ%(=0_iK&xB<<@V= z)EE<0=6JbnN$H7b6@F|CMXOh4u8l^~_GUm;rT8nal$*ZZ2>U9%F zl}+c+?vx@0m2#`;q}sYX1V1rknTZL40^g6$u#5DXRK6#2;mf#iTB0H{g~%L#63fuV zSb#7X2L@>%Hk`eUgXnp!Z*gxoG9384s<_pzB2O*|F4|{VJDiGsZ#vgvThPxiJX?Sg^$YR6}voe56Z zEr0VS*!8Av&@6ue6ncI}IuV#pB;78EeMVVwX)vIzxYwD!eu6`KaVJnS3qSW;tijfe ztlbD`fEhbF2Se0!e*rdo8%b+8oCSIsiE21o=$-NU1W@O*oFDl0)7O3dP;#DMGPXRD z)&zaCbIEvdu#Www5vzv5S#BNt#{<76FZ>{V{m!GM3oxI)(S|oKwC;bQEwF^(?Xnf~yyMNSyM>ypqe$r^Efs^oH1z;ia{;y{+~0zh2+(#dar5J|8=a zTdu~NkKsnB=wgi?Jn>&gC9faHCa;#i{X0Qyi;H=ktvq0spw;I1+fucEqx)GeeI&kn z{_B|;LhQ@I$k%-CmEnXdL~@l(q71{YMhnZ`=_4U>`Dd*#3bZi@CWc{oLxxSmqr;1k zQe!^x#Vc{~-k|e50e*f=U)PL)+PL?Gz4-4Lbbf=BEw@^Q&9la2P;Wpn1mOofZVjZi z?GJn}#f%dMe@|Fr8Gl%PIV{(2{G~q_Uw+DzJ2kd63GGaVCp)>3!Wz3#a1%AfJ}QhS zF(_Tt;it?M>yN@iU(kbNP)18kog4$u*6ZGv7IcpiQjIj2Sk4VC6wu=M6oi zU$(<9lSBQ&m`qYznjAT4vq^uZRL-qZe%*J^gJ}yeD`1_99%AJS^9kLzf-`;AA!;W> zOk7SAazmW3Eb-U<_YQ zZj@1=rWFpaC1T7&v1^^uZ4l>A0t6!34OgZqkC({si>~DgLd+pJ3kDN1qboQ&th%2Y zC_*`KN|j60T$+zDn_NPC|*lCHz3E80-CT92F)Lsgr2%+A&xw!f)(bhN^{dIrZ=q z<76tuO8Rgx<`D=kI1d5k*5mi2=^G2VqxpR&11OxUxz;nvZYtEur9Eqh!y^~L zMTRrRbL#SFxx0&ta2b89y#oa~`H0C6*H^_Kc>lb#Z6nxO!`p~3ezi6NA4s0;R~S9~ zJy*7|^HAI6a<_GPtZQ&EE)p8~je<@h18E@3Md*k!;HRTNDt0p)~*6 zlwNl2ZU4$Nm&I}E=%o8}%Q5;jUaY`Q{BMlu%)cztEv<8SHC3z!6e0E$mPZycYICvL zvQ1MgAJfShj|x{$Q@uMa7$cfT%>d)TB_&00sN^%hxcUf1?{7jcSa`ten6FT1ouXfp zo4!?E-~@x?+%ps?ZCc1I{*biDzOS9v7+i_>B>4WB!S2(#P4O}w!47J(#rG@J{I2?X z!UL!&E=KPm1rPkgQ01uhoFmL&&T#Iv{~uB?Ufojs6u-pg(`(UUEY2?qV(T0#%Os)c zCMl^Mp##^cUA-k|GQGT$hD+AZwIT@M*p~0M`NUOyA?#X$l4|5kM#dJX<)kTz3hFNL zTH(!WR!h%C%Cv$E=Y5z+f~ov>^n z_mxw#>VU)k0<=g<0Ts`kiNrpY%9rf#b85VtTal6JatO!c*BD9eH0Aywh1H*oy5 zq%7{qnyJ;x>2>f0x>$VF2Kd40*Tn(^Ze+qtc<>iJDE|wmR6?ZHjpj4as21U1Rr;E+ zf}$we&7$8oE;9IA%;+NV-oL~|6K;4&M1fMwLm~YHn3K`>j4}ytM5lL^AN^$Tx1F$E z*^IXPEE5aeZskL%Mr)tD@;>Q)FN!{!T)d|ZrBeMHsS0C|Nq|W`ca_8oqf!?K(d0~& zV2Tv(b``DPP{!f!7O7Fm&7+8eQp`L80QSo3vV*JqPcvI)Cci%>Sb#eUo#It77Fre^Y6lQ zEh4!cx=HS8s81xsF2Bis#aS~@=(O<@(MbZPC1Yf;Fpr#hZO@>wlYQEILTlb3^FbU3 z{k6zm`^(`xf2!fs5~!zsaz_oV;fa@!Q+HVVb|Cd!H}lRwlIWWHe&)q)5b32A<^->2 zp(oCr8_GO}&Fl$|==Bo;IyLMmvWoGBnfUZ3;4p+B_>s)s!g^DR)LmS1XA$$Vdy^SW z`sw{d-E~lmF8U>@BRTq=)z5J0?$A78vrOLe zO;$n*?~?0NU_%;<)I|5@*3u;X3i_Q#3hl1JC$Pib66*GU%8zwva>41r#xk5&a zHvC=3{DTmhYC5GDP?aP1?yISIOzQdQG;&~b6><-bg1aok9GDs3bW>=pslf#9?BMRG zw*gWU4#-9MBA@Pw%p=#(hPG|=J^+R?ftf;k=TRgBLK7^wkG1LF#axOzM{_`SYAU>! z&O`GJ&oi>PN0|Vk1w6Y11<(2I@i~ZBaE^h%1<=8c;#zNas(rg&C12k`r8|)g#)pnA z#)r2C?|fTLpYJiysN56yyPr#K&P6lwW3t-+h~Q>CK>&C{Pgj6 z((_X921kOxOb9V>cz|)|g@*X?wQLJV2rG>qf-p!oVHx1WH^5*u*;IY@a$w8sY7~AWyqLztB5x!8wkEfr)~B5AQC~;ypS^x*qPl#G^_di zjI}|#qw#rjX3o|Y!P?&~0;w?&?V}Pj*Dbf1w_^ZA8yEqUy8kHo;S80w`bJ0c+!gl# zZgZ#nC^(U~&49;c+9@f^$1NUlYQ(T+wW}Z~F8ZQ5cr_@(($afnjjJ#K{m$toN|MTK zFeESmIE(1Wf53Z61NKsae2qTxiHdg}Yu{M6J(mnU)2>_9N}}#=O**`JNHqtYd5bh` zK{d_011g6C=WFQ^t93Dl@I}oTf|}aGK=sDVI~i+%#iOFia;bG5y9L_u>e5H<*384p ztJxXa;~J)Re1mI)xVVRBZsdgg zCxa)t?u3#82FxNSYCN5ab@Wd@oF}H#7A)2u7*UR7#D!;McbcE==E6oYgtG1+j8fXBXRO<%83sQ+$}O2%A0BVL20IWYjM zEh*!fy{Tj}fel0FXDBU=KE9NTonB3etL^RahctqyOPy`L^?o^5=5W>dmm@Y*v+eoaps#wi`;R<{{?5^;b@RP6bDh6*5FSEe z!brXy<6p(%gFCx)?RZT?Ar%I4xtak2UL7YANh)`3Sj zllN^L?=SYDFUBgTUuUYp-tp(mvdXfCk2kg2+dF2DDUovW zu3Q!JQG!Z9OW_>Q!YI${PdH;jqI$#Qxps_xzU8Thd(~R?WsicH^K%V}4~Mo}xAv4{ zR!+@{5B+;bu(%Av9oKlQ#llFJBNF^0hjnO3|4o@~?DcU$j{8rP= zW$&{#R7@kzM#IHeqe{B6#6N7lkf7>NaYY=e;*9hgSBz*jGtB0-M(4P!>kWTzWh^!(6Bet3r|Z*_z)8hw zOj6aM>K^ZNOkN=E3;Q%aJ-YFa}lXx?cuK~ax$3eO*3N?vlG0!%k~6)XvpTE{^p!JcDWp~t?_^GZi|`Z}9$3zq~=w52y}Zb}*b((5~HnWajD zyK3Fef3cUQBGgcBerTH^ECK=zbqX7Ox~hW(AzUnUq{A_{FmO!Gs!m)nhuqTYxRn;%EJTuF@wk4P|!BnBw!$Per+O7$7#4J1E)T z^I@FBk8a@2rfQ{hO?BJzZ^$W&8iVNos_GKi+0xrT{96P7d$SjApy}y2JpjH#fsbyt zIQWnqaP3fVvG4C65ql;8nCFffK06iLq67>IPDlHH^{y1?##n!~dsiYV=g?L37P1UJ zg>$|ju;fYW5x#m+%5`!~_d?B|M+@zT@e96Q28*~WK4<1_p)n{p?!s?bE zMkl8YZ?I9mBE6p>H7*BW2%E>8&?rBpW$}PAE`*;rhiD}h0#y5`E-nR2L%Gsj&e><5vo=BSyC87yo`v-#Dk@tR2&4lBfpE}KK_EZD z{QiE^h7AIt1zm|90wF^o5Ju2t1R;=HAUVOffUW`(1SAXmDS#9QGYGmKHCPKei!cP@ z1M+uWJlfCPhL1;$YX0?`2J3?>_N4v^kps{i$H&^tkY05TqokSGL_3^D^u z4d|>Oi@KFx8<@Gq3R*o?b>TILzu$;8Xs%vx&HBo*cm?h387 z{x>19LT5w?RPl2T@9z#(#WhAKFUu;uq(r04Dhc>bG$C^5OFmkqEj@p=V6`xEG#r0` zKLSb0^EdJF`_H&PfFu&kx;T>imRf1_x%ymGuho-L&`xtAi_|Gwj8^$>ALn^#cabIe z0BW8)Lw?;Y&IzyCb%u885&JkgKJ2DQog!kiDtF^J&*Qs=tjUW|z=}8~aY_@DqL;a6 zMK0~G;OsCa#&IHyh@mjB7H}YfX98oi%63;dJF0+(&k^;%Yh3@oAJxA##{X?4g-#e5 zm9-$3K|Ae;EfS|0-8*(9P4=4lgGu1<9npQX~$#(m) z_3Qlg)wnnj6_y~U&qE3cXJ|kT|L$DbQAzD-Q{eG!-$n!H?9HP9zN5%r8gTpftB>Sc z^uk^}-4S*)$Q^rUZa{d8-T5B$?F=#enRu}XSnhR>6o-uExgW57sFPl^#?22MRUtm2 zy$uf@O_;1vq`!BTO7AMF9j*U48$VOO+PQ|X*xD$&rW`jktYqdg%Xa}pV=IcM%ey{L zcm}We@!~FLf3Y34ELt%VC_VFWBs&@ZP(3Nsz;Vr|Q#VZUwbYspQ7V>Pjy85{BQb3i z8YafMKYXb?`q;_cl#Of(X)3gH* zuLA{=`D?}Ska0@G(^Ft6dfqJZgC@$T!meg(O@SmZq^_17TB^SAkwo&g`{>f}tjXl@ z51~v~H}~@h<0o+ePM=b?{7{4i8=QKsSIriqEfwcaT9iPO(+nFvXWOT_#YVy{aR%vB zw!wkAohg|i_}qQG+~bj>s(na=Q5m`jZySOR-mxj)DvK*OS_VGQ*Us2Ud3-%Acj#Kh zts3*R&s#JVz|3eVAw6ETZLt2(YvKpVwjC|HoL49{qbk#y4!?1xva%bQjT2^QOrp|2Yxz+3r;$8N(BhI!}@QqAfg`hoc zL4wzNS;4RYJEg3tEcKChL`$9}-^yq$IQNyXmn)Sja+=J3S zG6NT?mES$d*iox8>?5sa#l;iue?0cg!gxNHFuQU-0#NW)9X44Cp{U6J?Twg+!u|3K}SYWS2T%*s*6EVCWsSznybRrGukOQSq866A1mwY)4GW@;*uQn}iK zY$VWP5qt(GzO9y4vv+3wsXaTHw4{9lIG7CQ^9FGIV_ZjSnMUr|J>SL5#_%Z~w~?%8 zRSpqArBW(1)|0m7LqqaG<4i%t#EM3Z(yC{(s(JfJxKhqQy|f16pBpTrL*uw*L#y}$ zznl5&hBrnJtp1Dk8K2RE`P>4S7=}D=41HZq z=NemlTTw{BEsjG=@yFtlj+k}f$DBa>j2Wl-pT`&P93MEd84jnlj-{9I-KObdeEedl z&5;s1ASyq$#jmiuO|GI<*&5$LKYILW(s|F&CO3atZ%4#sneLa3 z+{0GeL_)4pA>M$0{$cu$nY*>qj{SEzbaL+|%}H+aLQPjgnX+{oc_d5|EtC@b{6FsA zDK0FIOri|;7Q=!cKZ$m4|CYhyAir-36&Hyv+jBtn0&bNyuoU%4AXh(8BpymCA+1|R zXz~qk_8l~Rl)wA8!Hvh$rR4^h?x?{qRppV`I$JqYg+lYG!SFHJ`IA@rW2S97+sqEW zvx<{#sIY-&b$R^{Ar|b95MrCL{OH;zo0?U716C zul2aZ_4iRT$rC25K#p~$CzLQDI63{aTtu^6oHy66Zdm?pYHx7k#G!7nxO*zGR@`ig*!a z`O*XzHL3;cioL`r&5D-Pj#EjL;|N~k|1M|$(mXxGGwqsxH(*CE(F zF=wJwT{*J}0D9OF8$p)MNpeL;*1@Ele6`K&NSygs@hUNj!i#%NUyzYU1@|e{jV7-b zz4u!wZN!O)!e(SZln&gUA||aqBrdKW7?qSo3`AcqN{Mp(`=@JZ8Sg^q(n0bLc9EW} zxtEc>*1)}Rv>cR_y)2(7)W6Esx7-kC|CEQBti!7btdUcrvhMiS(w^s(U&9pjuU@Xh zUX|QcoHc`-XP~*s^0R(4=T6O(b@m(v49-x?XO98P67}kk8ZbOYb_$;{MfGh_7Yd(Y zT!)k>{svmREu}(X4$UnDaEXwLxc*iLc;l-;d#bs9xI?DxYPX^h0_g&jv}>Q%d+yLs}GyXgF@=2?lp z*?fjt0rcxv@VduHWqop1XUrjWb{b-#1{@3@xNLTe90KRWjAb!NMF0!Wuv*zWsGuO# z4JBd+>G~Olvs7proGlFO!U>jx8cLM{xt7-198d};bWirv1iF}wT&m0Rt?>4Yqz%)g z=ohqT%k+k~eW}c>$g6e?Z+~<-tik8(W+o|juAkr#e)7`*W^Qf{$+m8OuEMcqE&kKC*T zFu#Ib8}}N?te=X4sg%iXB6tOt)%!mW|^HQ~cK_v?sm0_!ejfuu`QsGfwS VOOjv4^PnrD6T}P18-Bgr{{yb@FuVW& delta 3745 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 diff --git a/plugins/l4d2_detections.smx b/plugins/l4d2_detections.smx new file mode 100644 index 0000000000000000000000000000000000000000..d8f3d746e184c8cc52939a0fcc20ab4904b69469 GIT binary patch literal 8300 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 literal 0 HcmV?d00001 diff --git a/plugins/l4d2_extraplayeritems.smx b/plugins/l4d2_extraplayeritems.smx index c0b3940280ba1312107f30394986616d7236a53a..cf77a5c5f8b24812cf5757456dd7583ee9e33b72 100644 GIT binary patch literal 23621 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 CtDn>W literal 22189 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�%0*yo7`=rY@y*xCB$j7lMniSHLq@Sk znUKJgoAr5^hP_pYwG|=+4!s|;*5S=8#3%7rX%+bOfg=yN6dvH|QKwPoQ!YB&uV!Gq zKO3^LQ@eB1HSx~->s#-q-tUq9EI8bLCUf=Eh1~~WGFteAB4lGS=BwVJmwIDC;OOfy zO@6TrPn9lq=VmX;Ode%@>b;JW*T5TT%O`aehGAC4gxiADS8pu>sn)ug#Kq-jvB$__NF}obYeN+tpk3$nC~j2a@pb`i~#;vQG7@rsl@z zYVnstvehM!W*OZqBli{c_@0BQ8*iX#zY-K3Z23w0H+^|6>tCC030%ChYS48uNmq>2 zrb23cv7<~)M;SknNJzpsJ6k0iD@EhiH>Zfx51zrUe|mg{RG)~fuaC2&iEXx z<>2BX3jclLhZcZa7=(a4wNrIK2@m}vI8qbEt#*ui$~bNJ^5?9=z2{qxLqcCSFL$Fa$o))Qn9zB^u0Z-UyR)>@VFh`Jkpqn`77tZ zYR{i3^Is!1s!9)~;PY5E{URfPSoZ$%{wJd@ zElGgYQF~1J-2SMjG;zd!V=H4!refTP$tkAZy)%J7r)SXn6~mm&@1yeHrkum|e&M%7 z-vu!a>fIWCpoP;5-HBY;(OP5QHc0NFEvT2k2%D(^Z=58U!XJqG=DwG#n^$Y#Eu>(! zOdFox6%lXwd<>OJZA#PKbfKv|ZL2wNGcjHGkd*ORMZ~Gm5%yewkI%U!w>H(=C?}(3 zxaR#cU53y{W-Skc?926NpYu^<=%wrGrbkcNJ`pO5Qf%MBFW}P4Pqx%wgxd&e+k3P&2K5GoM zeN!d-Lo=?In)kiF_)~$R2^aAss@fkE_Il(-qpSJ{ZK-S0-)fc|l{!%gFZgDi#FB+t zO-5uC>A!ys%p!lX>Eh)`;XrfmNSkNG3;O4&WyG)msFMK~+r;3FP!D6OHRVR0t(@R+Ug{__?AQDq9t;F=OFtusw zcT8$qt_*cTuGG$UTI#jN>I+b5HNHlhYKvbw1aj_lb_#wG`Y)1S)p!Zm1IEa$=OH=Pas^?8}b4H_>6D?zQ*Tvg;7CS^XX=oau@bA@;*8 z?5e|;w!~zDts_hYa+iGy4Rp+U1g6;IX@_SHi=v`8Jol@7AC({{?sr_Z_ ?eK$;z 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⁢Xe&C?V07*hoS|GT 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 literal 25027 zcmbTccUTj__wb7q6#*5b7XhUg1?jybz4szrT0-vx6#?lWARVMj@4ZBdbcoc@Lk|!j zKnMg9;O6@)&wZcg{&n9xd-iPMUR^xf|Gq=8jMo-;kuAg9 z@!AD126*Pi>j1ob!ShGF{*IS*Jjdg83SNNacL-GQIu9=`cz%WtT8`(zc|7BFBVM3* zKEvxCyo@f~A?PI}Aeg{&-1;4YS9m90TcDji0k564w>1H;yN`{lldac(fv>eE9st(f zPQLd41#Wod>Fw?G-@gAvZuZ`vfOh|5{$JPsI${s-ar+;;cYwRSoxQ{Vk@B+l{-2bs ztF@Qc|9jBE$=(%T9Iu^?Bd>##>wn_@2VI>2|BFrl2jG7j|2Ou3c{sWPZLD4Y*Bxm4 zANF57>>>@OGibXFJuPKQA>g?G-Bi#f@iP;vlc^l>zY?b`xlguai?4cKj{`D`vsT`8 zaBwJnfALD@Gr^q-r6`(C#flc^aCSu&g}4`u&R<^XR47y}A`ZLGozaHaYYDI11xayn z0r9Md)ip36eD*MC2X~9ghG&bS#)>c(az%N$%)3K9eD}ZrrUYi((E##2&K$G7=|_nz zW(TbZfv$x>eL|ohH{5_5uEZ5r;)Wwxz|c3H6cTZPU1`A*v|t-r@Jk_3lMrZJ2*gAS zmZAmA(t@pN!507DYz-%BT1|U?|3@~o5a>_{Bq;<669N?qfoz39dO{#VH(dN8#=gV^ z%hP)k#StkY z=xOO+J|(4^<-lPJ2aw%Pi;|XKFrQEN(f5g_BIgTKZnjl(9qjYpL)I{UTs|Vn2(zK< z%4W2aDs>#X-Wetk;F{j#GFw(}(dEd6z}{bMG98va6Ki&<((Sg4@vZXxSFLZwc4!*% z~u8M`(nl;eA(}Th})0kDJ*?zZ_8#4vhTsZaV z=}B8PZG1L;742E@Z@PRhX27=UqWwrfou}pRY)W?cx%kH

Ji=w#{r}CkkpjMp? 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

t-}Xx`3vwLDs(e6$7(2-T4#bu1tA)mIiz~AuXWQ z9@(f&5l(^dJfj)w9&lLG!tH#ISo3o}hYze3M$_*#&$HE|eJjqbeWL5Ct8so_b9(AJ zchjQ^WUgkTv`|oBXb@)L(7bMxYq}pLg|Du>vi{ zWqaRiSlrIR4w2M?b7&Ww3IlhKiPde$jA)Nps|Ejr>pL{_+*OB8lU<$&>Orlrf_hDc z?17eaj3qN6Xiq?fqF_d2F~F zS%de}T)Eb2`MgWgN4)wvgWU2wK*)5|dOF0Ph9KCiwN6P3;* zr|))eV8)fwW`)I!zuIsukH+VDBR$rR_v+Q_JfF(;+a6lz%y`qXe&yu_*Y1tVBsT<$?+g5Q z0ynAR9RFQ<>|VOM^Jsmkp{)MuoN@NK_)n&`YyEn*Yu}|A_d!JF1jE686`TdK<6EzE$F{xiWJPBQ)%)Bc_@ aW_s(}_b(=u(G%|Zi^oh4(Lf!4-~R)NhNMIQ diff --git a/plugins/l4d2_vocalize_control.smx b/plugins/l4d2_vocalize_control.smx index f6bf586fb62b74efed64669f4cc5af80eec38afe..a5717caa31b39a776fcdf5407411fb15363eda3e 100644 GIT binary patch delta 4453 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 delta 4452 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 diff --git a/scripting/globalbans.sp b/scripting/globalbans.sp index 9c7c38a..edf46bb 100644 --- a/scripting/globalbans.sp +++ b/scripting/globalbans.sp @@ -62,7 +62,7 @@ public void OnClientAuthorized(int client, const char[] auth) { if(!StrEqual(auth, "BOT", true)) { static char query[256], ip[32]; GetClientIP(client, ip, sizeof(ip)); - Format(query, sizeof(query), "SELECT `reason`, `steamid`, `expired` FROM `bans` WHERE `steamid` = '%s' OR ip = '?'", auth, ip); + Format(query, sizeof(query), "SELECT `reason`, `steamid`, `expired` FROM `bans` WHERE `steamid` = 'STEAM_%:%:%s' OR ip = '?'", auth[10], ip); g_db.Query(DB_OnConnectCheck, query, GetClientUserId(client), DBPrio_High); } } @@ -174,6 +174,7 @@ public void DB_OnConnectCheck(Database db, DBResultSet results, const char[] err KickClient(client, "You have been banned from this server."); } else { PrintChatToAdmins("%N was banned from this server for: \"%s\"", client, reason); + return; } static char query[128]; g_db.Format(query, sizeof(query), "UPDATE bans SET times_tried=times_tried+1 WHERE steamid = '%s'", steamid); diff --git a/scripting/include/jutils.inc b/scripting/include/jutils.inc index 8b96e86..dead838 100644 --- a/scripting/include/jutils.inc +++ b/scripting/include/jutils.inc @@ -274,8 +274,15 @@ stock bool SpawnMinigun(const float vPos[3], const float vAng[3]) { } } +stock int GiveClientWeaponLasers(int client, const char[] wpnName) { + int entity = GiveClientWeapon(client, wpnName); + if(entity != -1) { + SetEntProp(entity, Prop_Send, "m_upgradeBitVec", 4); + } + return entity; +} -stock bool GiveClientWeapon(int client, const char[] wpnName, bool lasers) { +stock int GiveClientWeapon(int client, const char[] wpnName) { static char sTemp[64]; float pos[3]; GetClientAbsOrigin(client, pos); @@ -286,12 +293,10 @@ stock bool GiveClientWeapon(int client, const char[] wpnName, bool lasers) { DispatchSpawn(entity); TeleportEntity(entity, pos, NULL_VECTOR, NULL_VECTOR); - if(lasers) SetEntProp(entity, Prop_Send, "m_upgradeBitVec", 4); - EquipPlayerWeapon(client, entity); - return true; + return entity; }else{ - return false; + return -1; } } stock int GetNearestEntity(int client, char[] classname) @@ -589,6 +594,12 @@ stock void StringToLower(char[] str) { str[i] = CharToLower(str[i]); } } +stock void StringToUpper(char[] str) { + int len = strlen(str); + for(int i = 0; i < len; i++) { + str[i] = CharToUpper(str[i]); + } +} stock int GetRealClient(int client) { if(IsFakeClient(client)) { diff --git a/scripting/l4d2_TKStopper.sp b/scripting/l4d2_TKStopper.sp index 88ab759..877b85b 100644 --- a/scripting/l4d2_TKStopper.sp +++ b/scripting/l4d2_TKStopper.sp @@ -19,7 +19,9 @@ int iJoinTime[MAXPLAYERS+1], iIdleStartTime[MAXPLAYERS+1], iJumpAttempts[MAXPLAY float playerTotalDamageFF[MAXPLAYERS+1]; int lastFF[MAXPLAYERS+1]; -ConVar hForgivenessTime, hBanTime, hThreshold, hJoinTime, hTKAction, hSuicideAction, hSuicideLimit; +float autoFFScaleFactor[MAXPLAYERS+1]; + +ConVar hForgivenessTime, hBanTime, hThreshold, hJoinTime, hTKAction, hSuicideAction, hSuicideLimit, hFFAutoScaleAmount, hFFAutoScaleForgivenessAmount, hFFAutoScaleMaxRatio, hFFAutoScaleIgnoreAdmins; public Plugin myinfo = { @@ -51,7 +53,11 @@ public void OnPluginStart() hTKAction = CreateConVar("l4d2_tk_action", "3", "How should the TK be punished?\n0 = No action (No message), 1 = Kick, 2 = Instant Ban, 3 = Ban on disconnect", FCVAR_NONE, true, 0.0, true, 3.0); hSuicideAction = CreateConVar("l4d2_suicide_action", "3", "How should a suicider be punished?\n0 = No action (No message), 1 = Kick, 2 = Instant Ban, 3 = Ban on disconnect", FCVAR_NONE, true, 0.0, true, 3.0); hSuicideLimit = CreateConVar("l4d2_suicide_limit", "1", "How many attempts does a new joined player have until action is taken for suiciding?", FCVAR_NONE, true, 0.0); - + + hFFAutoScaleAmount = CreateConVar("l4d2_tk_auto_ff_rate", "0.04", "The rate at which auto reverse-ff is scaled by.", FCVAR_NONE, true, 0.0); + hFFAutoScaleMaxRatio = CreateConVar("l4d2_tk_auto_ff_max_ratio", "5.0", "The maximum amount that the reverse ff can go. 0.0 for unlimited", FCVAR_NONE, true, 0.0); + hFFAutoScaleForgivenessAmount = CreateConVar("l4d2_tk_auto_ff_forgive_rate", "0.008", "This amount times amount of minutes since last ff is removed from ff rate", FCVAR_NONE, true, 0.0); + hFFAutoScaleIgnoreAdmins = CreateConVar("l4d2_tk_auto_ff_ignore_admins", "1", "Should automatic reverse ff ignore admins? 0 = Admins are subjected\n1 = Admins are excempt", FCVAR_NONE, true, 0.0, true, 1.0); //AutoExecConfig(true, "l4d2_tkstopper"); @@ -78,6 +84,8 @@ public void OnPluginStart() RegAdminCmd("sm_ignore", Command_IgnorePlayer, ADMFLAG_KICK, "Makes a player immune for any anti trolling detection for a session"); + RegAdminCmd("sm_tkinfo", Command_TKInfo, ADMFLAG_KICK, "Debug info for TKSTopper"); + if(lateLoaded) { for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { @@ -85,8 +93,18 @@ public void OnPluginStart() } } } + // CreateTimer(60.0, Timer_Forgive, _, TIMER_REPEAT); } +/*public Action Timer_Forgive(Handle h) { + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && ) { + + } + } + return Plugin_Continue; +}*/ + /////////////////////////////////////////////////////////////////////////////// // Special Infected Events /////////////////////////////////////////////////////////////////////////////// @@ -173,6 +191,7 @@ public void OnMapEnd() { public void OnClientPutInServer(int client) { iJoinTime[client] = GetTime(); + lastFF[client] = GetTime(); SDKHook(client, SDKHook_OnTakeDamage, Event_OnTakeDamage); } @@ -191,21 +210,32 @@ public void Event_PlayerDisconnect(Event event, const char[] name, bool dontBroa BanClient(client, hBanTime.IntValue, BANFLAG_AUTO | BANFLAG_AUTHID, "Excessive FF", "Excessive Friendly Fire", "TKStopper"); } isPlayerTroll[client] = false; + autoFFScaleFactor[client] = 0.0; } public Action Event_OnTakeDamage(int victim, int& attacker, int& inflictor, float& damage, int& damagetype, int& weapon, float damageForce[3], float damagePosition[3]) { if(damage > 0.0 && victim <= MaxClients && attacker <= MaxClients && attacker > 0 && victim > 0) { - if(GetUserAdmin(attacker) != INVALID_ADMIN_ID || isImmune[attacker] || IsFakeClient(attacker)) return Plugin_Continue; + if(damagetype & DMG_BURN && IsFakeClient(attacker)) { + damage = 0.0; + return Plugin_Changed; + } + bool isAdmin = GetUserAdmin(attacker) != INVALID_ADMIN_ID; + bool ignore = hFFAutoScaleIgnoreAdmins.BoolValue && isAdmin; + if(isImmune[attacker] || IsFakeClient(attacker)) return Plugin_Continue; if(GetClientTeam(victim) != 2 || GetClientTeam(attacker) != 2 || attacker == victim) return Plugin_Continue; //Allow friendly firing BOTS that aren't idle players: //if(IsFakeClient(victim) && !HasEntProp(attacker, Prop_Send, "m_humanSpectatorUserID") || GetEntProp(attacker, Prop_Send, "m_humanSpectatorUserID") == 0) return Plugin_Continue; + + // Stop all damage early if already marked as troll if(isPlayerTroll[attacker]) return Plugin_Stop; + // Allow vanilla-damage if being attacked by special (example, charger carry) if(isUnderAttack[victim]) return Plugin_Continue; + // Is damage not caused by fire or pipebombs? bool isDamageDirect = damagetype & (DMG_BLAST|DMG_BURN|DMG_BLAST_SURFACE) == 0; int time = GetTime(); // If is a fall within first 2 minutes, do appropiate action - if(damagetype & DMG_FALL && attacker == victim && damage > 0.0 && time- iJoinTime[victim] <= hJoinTime.IntValue * 60000) { + if(!isAdmin && damagetype & DMG_FALL && attacker == victim && damage > 0.0 && time - iJoinTime[victim] <= hJoinTime.IntValue * 60) { iJumpAttempts[victim]++; float pos[3]; GetNearestPlayerPosition(victim, pos); @@ -232,10 +262,28 @@ public Action Event_OnTakeDamage(int victim, int& attacker, int& inflictor, flo playerTotalDamageFF[attacker] = 0.0; } playerTotalDamageFF[attacker] += damage; + + // Auto reverse ff logic lastFF[attacker] = time; + if(isDamageDirect && !ignore) { + // Decrement any recovered FF + float minutesSinceLastFF = (time - lastFF[attacker]) / 60.0; + autoFFScaleFactor[attacker] -= minutesSinceLastFF * hFFAutoScaleForgivenessAmount.FloatValue; + if(autoFFScaleFactor[attacker] < 0.0) { + autoFFScaleFactor[attacker] = 0.0; + } + // Then increment + autoFFScaleFactor[attacker] += hFFAutoScaleAmount.FloatValue * damage; + if(hFFAutoScaleMaxRatio.FloatValue > 0.0 && autoFFScaleFactor[attacker] > hFFAutoScaleMaxRatio.FloatValue) { + autoFFScaleFactor[attacker] = hFFAutoScaleMaxRatio.FloatValue; + } + if(minutesSinceLastFF > 3.0) { + PrintToConsoleAdmins("%N new reverse ratio: %f", attacker, autoFFScaleFactor[attacker]); + } + } - // Check for friendly fire damage - if(playerTotalDamageFF[attacker] > hThreshold.IntValue && !IsFinaleEnding && isDamageDirect) { + // Check for excessive friendly fire damage in short timespan + if(!isAdmin && playerTotalDamageFF[attacker] > hThreshold.IntValue && !IsFinaleEnding && isDamageDirect) { LogAction(-1, attacker, "Excessive FF (%.2f HP)", playerTotalDamageFF[attacker]); if(hTKAction.IntValue == 1) { LogMessage("[NOTICE] Kicking %N for excessive FF (%.2f HP) for %d minutes.", attacker, playerTotalDamageFF[attacker], hBanTime.IntValue); @@ -255,19 +303,19 @@ public Action Event_OnTakeDamage(int victim, int& attacker, int& inflictor, flo } // Modify damages based on criteria - if(iJumpAttempts[victim] > 0 || L4D_IsInFirstCheckpoint(victim) || L4D_IsInLastCheckpoint(victim) || time - iJoinTime[attacker] <= hJoinTime.IntValue * 60000) { + if(iJumpAttempts[victim] > 0 || L4D_IsInFirstCheckpoint(victim) || L4D_IsInLastCheckpoint(victim) || time - iJoinTime[attacker] <= hJoinTime.IntValue * 60) { // If the amount of MS is <= join time threshold * 60000 ms then cancel // Or if the player is in a saferoom // Or if the player tried to suicide jump damage = 0.0; return Plugin_Handled; }else if(IsFinaleEnding) { + if(isAdmin) return Plugin_Continue; SDKHooks_TakeDamage(attacker, attacker, attacker, damage * 2.0); damage = 0.0; return Plugin_Changed; }else if(!isDamageDirect) { // Ignore fire and propane damage, mistakes can happen - // Make the victim take slightly less, attacker more, to in event of 1-1 victim wins - SDKHooks_TakeDamage(attacker, attacker, attacker, damage / 1.9); + SDKHooks_TakeDamage(attacker, attacker, attacker, float(RoundToCeil(autoFFScaleFactor[attacker] * damage))); damage /= 2.1; return Plugin_Changed; } @@ -275,6 +323,20 @@ public Action Event_OnTakeDamage(int victim, int& attacker, int& inflictor, flo return Plugin_Continue; } +public Action Command_TKInfo(int client, int args) { + int time = GetTime(); + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i)) { + float minutesSinceLastFF = (time - lastFF[i]) / 60.0; + float activeRate = autoFFScaleFactor[i] - (minutesSinceLastFF * hFFAutoScaleForgivenessAmount.FloatValue); + if(activeRate < 0.0) { + activeRate = 0.0; + } + ReplyToCommand(client, "%N: %f TK-FF buffer | %f (active: %f), reverse FF rate | %f ff min ago | %d suicide jumps", i, playerTotalDamageFF[i], autoFFScaleFactor[i], activeRate, minutesSinceLastFF, iJumpAttempts[i]); + } + } + return Plugin_Handled; +} public Action Command_IgnorePlayer(int client, int args) { char arg1[32]; GetCmdArg(1, arg1, sizeof(arg1)); @@ -284,15 +346,15 @@ public Action Command_IgnorePlayer(int client, int args) { bool tn_is_ml; if ((target_count = ProcessTargetString( - arg1, - client, - target_list, - MaxClients, - COMMAND_FILTER_ALIVE, - target_name, - sizeof(target_name), - tn_is_ml)) <= 0) - { + arg1, + client, + target_list, + MaxClients, + COMMAND_FILTER_ALIVE, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0 + ) { ReplyToTargetError(client, target_count); return Plugin_Handled; } @@ -338,7 +400,7 @@ stock bool GetNearestPlayerPosition(int client, float pos[3]) { stock void PrintChatToAdmins(const char[] format, any ...) { char buffer[254]; VFormat(buffer, sizeof(buffer), format, 2); - for(int i = 1; i < MaxClients; i++) { + for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i)) { AdminId admin = GetUserAdmin(i); if(admin != INVALID_ADMIN_ID) { @@ -352,7 +414,7 @@ stock void PrintChatToAdmins(const char[] format, any ...) { stock void PrintToConsoleAdmins(const char[] format, any ...) { char buffer[254]; VFormat(buffer, sizeof(buffer), format, 2); - for(int i = 1; i < MaxClients; i++) { + for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i)) { AdminId admin = GetUserAdmin(i); if(admin != INVALID_ADMIN_ID) { diff --git a/scripting/l4d2_autorestart.sp b/scripting/l4d2_autorestart.sp index 5f8ee8e..a080544 100644 --- a/scripting/l4d2_autorestart.sp +++ b/scripting/l4d2_autorestart.sp @@ -54,7 +54,7 @@ public Action Timer_Check(Handle h) { } else if(GetTime() - startupTime > MAX_TIME_ONLINE_MS) { LogAction(0, -1, "Server has passed max online time threshold, will restart if remains empty"); if(IsServerEmpty()) { - if(++triesEmpty > 3) { + if(++triesEmpty > 4) { LogAction(0, -1, "Server has passed max online time threshold and is empty after %d tries, restarting now", triesEmpty); ServerCommand("quit"); } @@ -86,10 +86,8 @@ bool IsServerEmptyWithOnlyBots() { //Returns true if there is a bot connected and there is no real players bool IsServerEmpty() { for(int i = 1; i <= MaxClients; i++) { - if(IsClientConnected(i) && IsClientInGame(i)) { - if(!IsFakeClient(i)) - return false; - + if(IsClientConnected(i) && !IsFakeClient(i)) { + return false; } } return true; diff --git a/scripting/l4d2_detections.sp b/scripting/l4d2_detections.sp new file mode 100644 index 0000000..0943847 --- /dev/null +++ b/scripting/l4d2_detections.sp @@ -0,0 +1,218 @@ +#pragma semicolon 1 +#pragma newdecls required + +//#define DEBUG + +#define PLUGIN_VERSION "1.0" +#define BILE_NO_HORDE_THRESHOLD 20 +#define DOOR_CLOSE_THRESHOLD 5000.0 + +#include +#include +#include +#include +//#include + +enum struct PlayerDetections { + int kitPickupsSaferoom; + int saferoomLastOpen; + int saferoomOpenCount; + + void Reset() { + this.kitPickupsSaferoom = 0; + this.saferoomLastOpen = 0; + this.saferoomOpenCount = 0; + } + +} + +/* +Bile Detections: +1. No commons around entowner or bile +2. Bile already exists +3. Player is currently vomitted on (check time?) +4. Bile on tank (common count near tank) +*/ + +stock bool IsPlayerBoomed(int client) { + return GetEntPropFloat(%0, Prop_Send, "m_vomitStart") + 20.1 > GetGameTime(); +} +stock bool IsAnyPlayerBoomed() { + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerBoomed(i)) { + return true; + } + } + return false; +} + +stock bool AnyRecentBileInPlay(int ignore) { + return false; +} + +stock int GetEntityCountNear(const float[3] srcPos, float radius = 50000.0) { + float pos[3]; + int count; + int entity = -1; + while( (entity = FindEntityByClassname(entity, "infected")) != INVALID_ENT_REFERENCE ) { + GetEntPropVector(entity, Prop_Send, "m_vecOrigin", pos); + if(GetEntProp(entity, Prop_Send, "m_clientLookatTarget") != -1 && GetVectorDistance(pos, srcPos) <= radius) { + count++; + } + } + return count; +} +stock int L4D_SpawnCommonInfected2(const float vPos[3], const float vAng[3] = { 0.0, 0.0, 0.0 }) +{ + int entity = CreateEntityByName("infected"); + if( entity != -1 ) + { + DispatchSpawn(entity); + TeleportEntity(entity, vPos, vAng, NULL_VECTOR); + } + + return entity; +} + +PlayerDetections[MAXPLAYERS+1] detections; + +GlobalForward fwd_PlayerDoubleKit, fwd_NoHordeBileWaste, fwd_DoorFaceCloser, fwd_CheckpointDoorFaceCloser; + +public Plugin myinfo = +{ + name = "L4D2 Detections", + author = "jackzmc", + description = "", + version = PLUGIN_VERSION, + url = "" +}; + +public void OnPluginStart() { + EngineVersion g_Game = GetEngineVersion(); + if(g_Game != Engine_Left4Dead && g_Game != Engine_Left4Dead2) { + SetFailState("This plugin is for L4D/L4D2 only."); + } + + fwd_PlayerDoubleKit = new GlobalForward("OnDoubleKit", ET_Hook, Param_Cell); + fwd_NoHordeBileWaste = new GlobalForward("OnNoHordeBileWaste", ET_Event, Param_Cell, Param_Cell); + fwd_DoorFaceCloser = new GlobalForward("OnDoorCloseInFace", ET_Hook, Param_Cell); + fwd_CheckpointDoorFaceCloser = new GlobalForward("OnDoorCloseInFaceSaferoom", ET_Hook, Param_Cell, Param_Cell); + + HookEvent("item_pickup", Event_ItemPickup); + HookEvent("door_close", Event_DoorClose); +} + +// Called on map changes too, we want this: +public void OnClientDisconnect(int client) { + detections[client].Reset(); +} + +public Action Event_ItemPickup(Event event, const char[] name, bool dontBroadcast) { + int client = GetClientOfUserId(event.GetInt("userid")); + if(client && L4D_IsInLastCheckpoint(client)) { + static char itmName[32]; + event.GetString("item", itmName, sizeof(itmName)); + if(StrEqual(itmName, "first_aid_kit")) { + if(++detections[client].kitPickupsSaferoom == 2) { + InternalDebugLog("DOUBLE_KIT", client); + Call_StartForward(fwd_PlayerDoubleKit); + Call_PushCell(client); + Call_Finish(); + } + } + } +} + +public Action Event_DoorClose(Event event, const char[] name, bool dontBroadcast) { + int client = GetClientOfUserId(event.GetInt("userid")); + if(fwd_DoorFaceCloser.FunctionCount > 0 && client) { + bool isCheckpoint = event.GetBool("checkpoint"); + DataPack pack = GetNearestClient(client); + pack.Reset(); + int victim = pack.ReadCell(); + float dist = pack.ReadFloat(); + if(victim) { + if(dist < DOOR_CLOSE_THRESHOLD) { + if(isCheckpoint) { + if(detections[client].saferoomLastOpen > 0 && GetTime() - detections[client].saferoomLastOpen > 30000) { + detections[client].saferoomLastOpen = 0; + detections[client].saferoomOpenCount = 0; + } + Call_StartForward(fwd_CheckpointDoorFaceCloser); + Call_PushCell(client); + Call_PushCell(victim); + Call_PushCell(++detections[client].saferoomOpenCount); + Call_Finish(); + detections[client].saferoomLastOpen = GetTime(); + PrintToServer("[Detections] DOOR_SAFEROOM: %N victim -> %N %d times", client, victim, detections[client].saferoomOpenCount); + //TODO: Find way to reset, timer? + } else { + Call_StartForward(fwd_DoorFaceCloser); + Call_PushCell(client); + Call_PushCell(victim); + Call_Finish(); + PrintToServer("[Detections] DOOR=: %N victim -> %N", client, victim); + } + } + } + } +} + +public void OnEntityDestroyed(int entity) { + static char classname[16]; + if(IsValidEntity(entity) && entity <= 4096) { + GetEntityClassname(entity, classname, sizeof(classname)); + if(StrEqual(classname, "vomitjar_projec")) { + int thrower = GetEntPropEnt(entity, Prop_Send, "m_hThrower"); + if(thrower > 0 && thrower <= MaxClients && IsClientConnected(thrower) && IsClientInGame(thrower)) { + static float src[3]; + float tmp[3]; + GetClientAbsOrigin(thrower, tmp); + // TODO: Get source when lands + GetEntPropVector(entity, Prop_Send, "m_vecOrigin", src); + + int commons = GetEntityCountNear(src, 50000.0); + PrintToConsoleAll("[Debug] Bile Thrown By %N, Commons: %d", thrower, commons); + if(commons < BILE_NO_HORDE_THRESHOLD) { + InternalDebugLog("BILE_NO_HORDE", thrower); + Action result; + Call_StartForward(fwd_NoHordeBileWaste); + Call_PushCell(thrower); + Call_PushCell(commons); + Call_Finish(result); + + if(result == Plugin_Stop) { + AcceptEntityInput(entity, "kill"); + GiveClientWeapon(thrower, "vomitjar"); + } + } + } + } + } +} + +// TODO: Door close + +void InternalDebugLog(const char[] name, int client) { + PrintToConsoleAll("[Detection] %s: Client %N", name, client); +} + +stock DataPack GetNearestClient(int client) { + int victim; + float pos[3], pos2[3], distance; + GetClientAbsOrigin(client, pos); + for(int i = 1; i <= MaxClients; i++) { + if(i != client && IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { + GetClientAbsOrigin(i, pos2); + float dist = GetVectorDistance(pos, pos2, false); + if(victim == 0 || dist < distance) { + distance = dist; + victim = i; + } + } + } + DataPack pack = new DataPack(); + pack.WriteCell(victim); + pack.WriteFloat(distance); + return pack; +} \ No newline at end of file diff --git a/scripting/l4d2_extraplayeritems.sp b/scripting/l4d2_extraplayeritems.sp index 11c38e9..30f4183 100644 --- a/scripting/l4d2_extraplayeritems.sp +++ b/scripting/l4d2_extraplayeritems.sp @@ -27,7 +27,7 @@ #define DEBUG_LEVEL DEBUG_GENERIC #define EXTRA_PLAYER_HUD_UPDATE_INTERVAL 0.8 //Sets abmExtraCount to this value if set -//#define DEBUG_FORCE_PLAYERS 5 +// #define DEBUG_FORCE_PLAYERS 5 #define PLUGIN_VERSION "1.0" @@ -269,19 +269,25 @@ public Action Command_RunExtraItems(int client, int args) { /// EVENTS //////////////////////////////////// -// 0 = inactive | 1 = started | 2 = first tank round started | 3 = waiting for tank spawn | # > 3: Health for next tank +#define FINALE_TANK 8 +#define FINALE_STARTED 1 +#define FINALE_RESCUE_READY 6 +#define FINALE_HORDE 7 +#define FINALE_WAIT 10 public Action L4D2_OnChangeFinaleStage(int &finaleType, const char[] arg) { - if(finaleType == 1 && abmExtraCount > 4 && hExtraFinaleTank.BoolValue) { + if(finaleType == FINALE_STARTED && abmExtraCount > 4 && hExtraFinaleTank.BoolValue) { finaleStage = 1; PrintToConsoleAll("[EPI] Finale started and over threshold"); - } else if(finaleType == 8) { + } else if(finaleType == FINALE_TANK) { if(finaleStage == 1) { finaleStage = 2; - PrintToConsoleAll("[EPI] First tank has spawned"); - } else { + PrintToConsoleAll("[EPI] First tank stage has started"); + } else if(finaleStage == 2) { finaleStage = 3; - PrintToConsoleAll("[EPI] Waiting for second tank to spawn"); + PrintToConsoleAll("[EPI] Second stage started, waiting for tank"); + } else { + PrintToConsoleAll("invalid"); } } return Plugin_Continue; @@ -291,23 +297,25 @@ public void Event_TankSpawn(Event event, const char[] name, bool dontBroadcast) int user = GetEventInt(event, "userid"); int tank = GetClientOfUserId(user); if(finaleStage == 3) { - PrintToConsoleAll("[EPI] Third tank spawned, setting health."); + PrintToConsoleAll("[EPI] Second tank spawned, setting health."); if(tank > 0 && IsFakeClient(tank)) { - RequestFrame(Frame_ExtraTankWait, user); + // Sets health in half, sets finaleStage to health + CreateTimer(5.0, Timer_SplitTank, user); } - finaleStage = 0; //Only set for a frame } else if(finaleStage > 3) { + PrintToConsoleAll("[EPI] Third & final tank spawned, setting health."); RequestFrame(Frame_SetExtraTankHealth, user); } } - -public void Frame_ExtraTankWait(int user) { +public Action Timer_SplitTank(Handle t, int user) { int tank = GetClientOfUserId(user); if(tank > 0) { // Half their HP, assign half to self and for next tank int hp = GetEntProp(tank, Prop_Send, "m_iHealth") / 2; SetEntProp(tank, Prop_Send, "m_iHealth", hp); finaleStage = hp; + // Then, summon the next tank + ServerCommand("sm_forcespecial tank"); } } @@ -362,7 +370,13 @@ public Action Event_PlayerFirstSpawn(Event event, const char[] name, bool dontBr } else { // New client has connected, not on first map. // TODO: Check if Timer_UpdateMinPlayers is needed, or if this works: - if(++abmExtraCount > 4) { + // Never decrease abmExtraCount + int newCount = GetRealSurvivorsCount(); + if(newCount > abmExtraCount) { + abmExtraCount = newCount; + } + // If 5 survivors, then set them up, TP them. + if(abmExtraCount > 4) { RequestFrame(Frame_SetupNewClient, client); } } @@ -427,8 +441,9 @@ public void Frame_SetupNewClient(int client) { EquipPlayerWeapon(client, item); } static float spawnPos[3]; - GetCenterPositionInSurvivorFlow(client, spawnPos); - TeleportEntity(client, spawnPos, NULL_VECTOR, NULL_VECTOR); + // TODO: Fix null + if(GetCenterPositionInSurvivorFlow(client, spawnPos)) + TeleportEntity(client, spawnPos, NULL_VECTOR, NULL_VECTOR); } public Action Timer_GiveClientKit(Handle hdl, int user) { int client = GetClientOfUserId(user); @@ -479,6 +494,7 @@ public void OnMapStart() { extraKitsStarted = extraKitsAmount; } } + if(!isLateLoaded) { isLateLoaded = false; } @@ -505,6 +521,7 @@ public void OnMapStart() { HookEntityOutput("trigger_changelevel", "OnStartTouch", EntityOutput_OnStartTouchSaferoom); playersLoadedIn = 0; + finaleStage = 0; } @@ -521,7 +538,6 @@ public void OnMapEnd() { } ammoPacks.Clear(); playersLoadedIn = 0; - L4D2_RunScript("ExtraPlayerHUD <- { Fields = { } }; HUDSetLayout(ExtraPlayerHud); HUDPlace( g_ModeScript.HUD_RIGHT_BOT, 0.72, 0.79, 0.25, 0.2 ); g_ModeScript"); } public void Event_RoundFreezeEnd(Event event, const char[] name, bool dontBroadcast) { @@ -577,7 +593,7 @@ public Action Event_MapTransition(Event event, const char[] name, bool dontBroad } //TODO: Possibly hacky logic of on third different ent id picked up, in short timespan, detect as set of 4 (pills, kits) & give extra public Action Event_Pickup(int client, int weapon) { - char name[32]; + static char name[32]; GetEntityClassname(weapon, name, sizeof(name)); if(StrEqual(name, "weapon_first_aid_kit", true)) { if(isBeingGivenKit[client]) return Plugin_Continue; @@ -1108,25 +1124,45 @@ stock void RunVScriptLong(const char[] sCode, any ...) { } // Gets a position (from a nav area) -stock void GetCenterPositionInSurvivorFlow(int target, float pos[3]) { +stock bool GetCenterPositionInSurvivorFlow(int target, float pos[3]) { + static float ang[3]; int client = GetHighestFlowSurvivor(target); - GetClientAbsOrigin(client, pos); - int nav = L4D_GetNearestNavArea(pos); - L4D_FindRandomSpot(nav, pos); + if(client > 0) { + GetClientAbsOrigin(client, pos); + GetClientAbsAngles(client, ang); + pos[2] = -pos[2]; + TR_TraceRayFilter(pos, ang, MASK_SHOT, RayType_Infinite, Filter_GroundOnly); + if(TR_DidHit()) { + TR_GetEndPosition(pos); + return true; + } else { + return false; + } + } + return false; +} + +bool Filter_GroundOnly(int entity, int mask) { + return entity == 0; } stock int GetLowestFlowSurvivor(int ignoreTarget = 0) { int client = L4D_GetHighestFlowSurvivor(); - float lowestFlow = L4D2Direct_GetFlowDistance(client); - for(int i = 1; i <= MaxClients; i++) { - if(ignoreTarget != i && IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { - if(L4D2Direct_GetFlowDistance(i) < lowestFlow) { - client = i; - lowestFlow = L4D2Direct_GetFlowDistance(i); + if(client != ignoreTarget) { + return client; + } else { + client = -1; + float lowestFlow = L4D2Direct_GetFlowDistance(client); + for(int i = 1; i <= MaxClients; i++) { + if(ignoreTarget != i && IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { + if(L4D2Direct_GetFlowDistance(i) < lowestFlow) { + client = i; + lowestFlow = L4D2Direct_GetFlowDistance(i); + } } } + return client; } - return client; } stock int GetHighestFlowSurvivor(int ignoreTarget = 0) { @@ -1134,6 +1170,7 @@ stock int GetHighestFlowSurvivor(int ignoreTarget = 0) { if(client != ignoreTarget) { return client; } else { + client = -1; float highestFlow = L4D2Direct_GetFlowDistance(client); for(int i = 1; i <= MaxClients; i++) { if(ignoreTarget != i && IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { diff --git a/scripting/l4d2_sb_fix.sp b/scripting/l4d2_sb_fix.sp index 672a7f9..ed8f5b1 100644 --- a/scripting/l4d2_sb_fix.sp +++ b/scripting/l4d2_sb_fix.sp @@ -1,8 +1,10 @@ +#pragma newdecls required + #include #include #include -public Plugin:myinfo = +public Plugin myinfo = { name = "L4D2 Survivor Bot Fix", author = "DingbatFlat", @@ -232,13 +234,13 @@ bool TimerAlreadyWorking = false; bool bLateLoad = false; -public APLRes:AskPluginLoad2(Handle plugin, bool late, char[] error, errMax) +public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int errMax) { bLateLoad = late; return APLRes_Success; } -public OnPluginStart() +public void OnPluginStart() { // Notes: // If "~_enabled" of the group is not set to 1, other Cvars in that group will not work. @@ -346,7 +348,7 @@ public OnPluginStart() HookConVarChange(sb_fix_select_character_name, SBSelectChangeConvar); if (bLateLoad) { - for (new x = 1; x <= MaxClients; x++) { + for (int x = 1; x <= MaxClients; x++) { if (x > 0 && x <= MaxClients && IsClientInGame(x)) { SDKHook(x, SDKHook_WeaponSwitch, WeaponSwitch); } @@ -374,7 +376,7 @@ public OnPluginStart() InitTimers(); // Safe Room Check } -public OnMapStart() +public void OnMapStart() { input_Help(); input_CI(); @@ -385,7 +387,7 @@ public OnMapStart() inputConfig(); } -public OnAllPluginsLoaded() +public void OnAllPluginsLoaded() { input_Help(); input_CI(); @@ -396,46 +398,46 @@ public OnAllPluginsLoaded() inputConfig(); } -public SBHelp_ChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { input_Help(); } -public SBCI_ChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { input_CI(); } -public SBSI_ChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { input_SI(); } -public SBTank_ChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { input_Tank(); } -public SBBash_ChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { input_Bash(); } -public SBEnt_ChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { input_Entity(); } +public void SBHelp_ChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { input_Help(); } +public void SBCI_ChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { input_CI(); } +public void SBSI_ChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { input_SI(); } +public void SBTank_ChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { input_Tank(); } +public void SBBash_ChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { input_Bash(); } +public void SBEnt_ChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { input_Entity(); } -public SBConfigChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { inputConfig(); } +public void SBConfigChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { inputConfig(); } -public SBSelectChangeConvar(Handle:convar, const char[] oldValue, const char[] newValue) { SelectImprovedTarget(); } +public void SBSelectChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { SelectImprovedTarget(); } -input_Help() +void input_Help() { c_bHelp_Enabled = GetConVarBool(sb_fix_help_enabled); c_fHelp_Range = GetConVarInt(sb_fix_help_range) * 1.0; c_iHelp_ShoveType = GetConVarInt(sb_fix_help_shove_type); c_bHelp_ShoveOnlyReloading = GetConVarBool(sb_fix_help_shove_reloading); } -input_CI() +void input_CI() { c_bCI_Enabled = GetConVarBool(sb_fix_ci_enabled); c_fCI_Range = GetConVarInt(sb_fix_ci_range) * 1.0; c_bCI_MeleeEnabled = GetConVarBool(sb_fix_ci_melee_allow); c_fCI_MeleeRange = GetConVarInt(sb_fix_ci_melee_range) * 1.0; } -input_SI() +void input_SI() { c_bSI_Enabled = GetConVarBool(sb_fix_si_enabled); c_fSI_Range = GetConVarInt(sb_fix_si_range) * 1.0; c_bSI_IgnoreBoomer = GetConVarBool(sb_fix_si_ignore_boomer); c_fSI_IgnoreBoomerRange = GetConVarInt(sb_fix_si_ignore_boomer_range) * 1.0; } -input_Tank() +void input_Tank() { c_bTank_Enabled = GetConVarBool(sb_fix_tank_enabled); c_fTank_Range = GetConVarInt(sb_fix_tank_range) * 1.0; c_iSITank_PriorityType = GetConVarInt(sb_fix_si_tank_priority_type); } -input_Bash() +void input_Bash() { c_bBash_Enabled = GetConVarBool(sb_fix_bash_enabled); c_iBash_HunterChance = GetConVarInt(sb_fix_bash_hunter_chance); @@ -443,7 +445,7 @@ input_Bash() c_iBash_JockeyChance = GetConVarInt(sb_fix_bash_jockey_chance); c_fBash_JockeyRange = GetConVarInt(sb_fix_bash_jockey_range) * 1.0; } -input_Entity() +void input_Entity() { c_bRock_Enabled = GetConVarBool(sb_fix_rock_enabled); c_fRock_Range = GetConVarInt(sb_fix_rock_range) * 1.0; @@ -457,7 +459,7 @@ input_Entity() c_fWitch_Shotgun_Range_Min = GetConVarInt(sb_fix_witch_shotgun_range_min) * 1.0; } -inputConfig() +void inputConfig() { g_hEnabled = GetConVarBool(sb_fix_enabled); c_iSelectType = GetConVarInt(sb_fix_select_type); @@ -481,7 +483,7 @@ inputConfig() *= Round / Start Ready / Select Improved Targets *= ================================================================================================ */ -public Action:Event_RoundStart(Event event, const char[] name, bool dontBroadcast) +public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast) { for (int x = 1; x <= MAXPLAYERS; x++) g_bFixTarget[x] = false; // RESET @@ -496,17 +498,17 @@ public Action:Event_RoundStart(Event event, const char[] name, bool dontBroadcas InitTimers(); } -public Action:Event_BotAndPlayerReplace(Handle:event, const char[] name, bool:dontBroadcast) +public Action Event_BotAndPlayerReplace(Handle event, const char[] name, bool dontBroadcast) { if (!LeftSafeRoom) return; - new bot = GetClientOfUserId(GetEventInt(event, "bot")); + int bot = GetClientOfUserId(GetEventInt(event, "bot")); if (g_bFixTarget[bot]) { SelectImprovedTarget(); } } -InitTimers() +void InitTimers() { if (LeftSafeRoom) SelectImprovedTarget(); @@ -517,7 +519,7 @@ InitTimers() } } -public Action:Timer_PlayerLeftCheck(Handle:Timer) +public Action Timer_PlayerLeftCheck(Handle Timer) { if (LeftStartArea()) { @@ -536,10 +538,10 @@ public Action:Timer_PlayerLeftCheck(Handle:Timer) return Plugin_Continue; } -bool:LeftStartArea() +bool LeftStartArea() { - new ent = -1, maxents = GetMaxEntities(); - for (new i = MaxClients+1; i <= maxents; i++) + int ent = -1, maxents = GetMaxEntities(); + for (int i = MaxClients+1; i <= maxents; i++) { if (IsValidEntity(i)) { @@ -556,7 +558,7 @@ bool:LeftStartArea() if (ent > -1) { - new offset = FindSendPropInfo("CTerrorPlayerResource", "m_hasAnySurvivorLeftSafeArea"); + int offset = FindSendPropInfo("CTerrorPlayerResource", "m_hasAnySurvivorLeftSafeArea"); if (offset > 0) { if (GetEntData(ent, offset)) @@ -568,12 +570,12 @@ bool:LeftStartArea() return false; } -SelectImprovedTarget() +void SelectImprovedTarget() { if (!g_hEnabled || !LeftSafeRoom) return; // Select targets when left the safe area. else if (c_iSelectType == 1) { - new count; - for (new x = 1; x <= MaxClients; x++) { + int count; + for (int x = 1; x <= MaxClients; x++) { if (isSurvivorBot(x)) { g_bFixTarget[x] = true; count++ @@ -587,8 +589,8 @@ SelectImprovedTarget() static char sSelectName[256]; GetConVarString(sb_fix_select_character_name, sSelectName, sizeof(sSelectName)); - new count; - for (new x = 1; x <= MaxClients; x++) { + int count; + for (int x = 1; x <= MaxClients; x++) { if (isSurvivorBot(x)) { static char sName[128]; GetClientName(x, sName, sizeof(sName)); @@ -606,15 +608,15 @@ SelectImprovedTarget() } } -public Action:Timer_ShoveChance(Handle:Timer) +public Action Timer_ShoveChance(Handle Timer) { // ----------------------- Bash Chance ----------------------- if (c_iBash_HunterChance < 100 || c_iBash_JockeyChance < 100) { - for (new sb = 1; sb <= MaxClients; sb++) { + for (int sb = 1; sb <= MaxClients; sb++) { if (isSurvivorBot(sb) && IsPlayerAlive(sb)) { - for (new x = 1; x <= MaxClients; x++) { + for (int x = 1; x <= MaxClients; x++) { if (isInfected(x) && IsPlayerAlive(x)) { - new zombieClass = getZombieClass(x); + int zombieClass = getZombieClass(x); if (zombieClass == ZC_HUNTER) { if (GetRandomInt(0, 100) <= c_iBash_HunterChance) g_bShove[sb][x] = true; else g_bShove[sb][x] = false; @@ -650,14 +652,14 @@ public Action:Timer_ShoveChance(Handle:Timer) /* * OnPlayerRunCmd is Runs 30 times per second. (every 0.03333... seconds) */ -public Action:OnPlayerRunCmd(client, &buttons, &impulse, - Float:vel[3], Float:angles[3], &weapon) +public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, + float vel[3], float angles[3], int &weapon) { if(GetTickInterval() < 0.03333) return Plugin_Continue; //Stop running on lag if (g_hEnabled) { if (isSurvivorBot(client) && IsPlayerAlive(client)) { if ((c_iSelectType == 0) || (c_iSelectType >= 1 && g_bFixTarget[client])) { - new Action:ret = Plugin_Continue; + Action ret = Plugin_Continue; ret = onSBRunCmd(client, buttons, vel, angles); if (c_bIncapacitated_Enabled) ret = onSBRunCmd_Incapacitated(client, buttons, vel, angles); ret = onSBSlotActionCmd(client, buttons, vel, angles); @@ -678,15 +680,15 @@ public Action:OnPlayerRunCmd(client, &buttons, &impulse, *= Weapon Switch *= ================================================================================================ */ -public OnClientPutInServer(client) +public void OnClientPutInServer(int client) { SDKHook(client, SDKHook_WeaponSwitch, WeaponSwitch); } -public OnClientDisconnect(client) +public void OnClientDisconnect(int client) { SDKUnhook(client, SDKHook_WeaponSwitch, WeaponSwitch); } -public Action:WeaponSwitch(client, weapon) +public Action WeaponSwitch(int client, int weapon) { if (!g_hEnabled) return Plugin_Continue; if (!isSurvivor(client) || !IsFakeClient(client) || !IsValidEntity(weapon)) return Plugin_Continue; @@ -700,8 +702,8 @@ public Action:WeaponSwitch(client, weapon) || isHaveItem(classname, "weapon_dual_pistol")) { if (c_bDontSwitchSecondary) { - new slot0 = GetPlayerWeaponSlot(client, 0); - new clip, extra_ammo; + int slot0 = GetPlayerWeaponSlot(client, 0); + int clip, extra_ammo; clip = GetEntProp(slot0, Prop_Send, "m_iClip1"); extra_ammo = PrimaryExtraAmmoCheck(client, slot0); // check @@ -722,7 +724,7 @@ public Action:WeaponSwitch(client, weapon) return Plugin_Continue; } -stock Action:onSBSlotActionCmd(client, &buttons, Float:vel[3], Float:angles[3]) +stock Action onSBSlotActionCmd(int client, int &buttons, float vel[3], float angles[3]) { if (!isIncapacitated(client) && GetPlayerWeaponSlot(client, 0) > -1) { int weapon = GetEntDataEnt2(client, g_ActiveWeapon); @@ -764,30 +766,30 @@ stock Action:onSBSlotActionCmd(client, &buttons, Float:vel[3], Float:angles[3]) *= SB Run Cmd *= ================================================================================================ */ -stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) +stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3]) { if (!isIncapacitated(client) && GetEntityMoveType(client) != MOVETYPE_LADDER) { // Find a nearest visible Special Infected - new new_target = -1; - new Float:min_dist = 100000.0; - new Float:self_pos[3], Float:target_pos[3]; + int int_target = -1; + float min_dist = 100000.0; + float self_pos[3], target_pos[3]; if ((c_bSI_Enabled || c_bTank_Enabled) && !NeedsTeammateHelp_ExceptSmoker(client)) { GetClientAbsOrigin(client, self_pos); - for (new x = 1; x <= MaxClients; ++x) { + for (int x = 1; x <= MaxClients; ++x) { if (isInfected(x) && IsPlayerAlive(x) && !isIncapacitated(x) && isVisibleTo(client, x)) { - new Float:dist; + float dist; GetClientAbsOrigin(x, target_pos); dist = GetVectorDistance(self_pos, target_pos); - new zombieClass = getZombieClass(x); + int zombieClass = getZombieClass(x); if ((c_bSI_Enabled && zombieClass != ZC_TANK && dist <= c_fSI_Range) || (c_bTank_Enabled && zombieClass == ZC_TANK && dist <= c_fTank_Range)) { @@ -795,14 +797,14 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) || (c_iSITank_PriorityType == 2 && zombieClass == ZC_TANK)) { if (dist < min_dist) { min_dist = dist; - new_target = x; + int_target = x; continue; } } if (dist < min_dist) { min_dist = dist; - new_target = x; + int_target = x; } } @@ -810,23 +812,23 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } } - new aCap_Survivor = -1; - new Float:min_dist_CapSur = 100000.0; - new Float:target_pos_CapSur[3]; + int aCap_Survivor = -1; + float min_dist_CapSur = 100000.0; + float target_pos_CapSur[3]; - new aCap_Infected = -1; - new Float:min_dist_CapInf = 100000.0; - new Float:target_pos_CapInf[3]; + int aCap_Infected = -1; + float min_dist_CapInf = 100000.0; + float target_pos_CapInf[3]; if (c_bHelp_Enabled && !NeedsTeammateHelp_ExceptSmoker(client)) { // Find a Survivor who are pinned - for (new x = 1; x <= MaxClients; ++x) { + for (int x = 1; x <= MaxClients; ++x) { if (isSurvivor(x) && NeedsTeammateHelp(x) && (x != client) && (isVisibleTo(client, x) || isVisibleTo(x, client))) { - new Float:dist; + float dist; GetClientAbsOrigin(x, target_pos_CapSur); dist = GetVectorDistance(self_pos, target_pos_CapSur); @@ -840,12 +842,12 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } // Find a Special Infected who are pinning - for (new x = 1; x <= MaxClients; ++x) { + for (int x = 1; x <= MaxClients; ++x) { if (isInfected(x) && CappingSuvivor(x) && (isVisibleTo(client, x) || isVisibleTo(x, client))) { - new Float:dist; + float dist; GetClientAbsOrigin(x, target_pos_CapInf); dist = GetVectorDistance(self_pos, target_pos_CapInf); @@ -861,17 +863,17 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) /* // Find aCapSmoker - new aCapSmoker = -1; - new Float:min_dist_CapSmo = 100000.0; - new Float:target_pos_CapSmo[3]; + int aCapSmoker = -1; + float min_dist_CapSmo = 100000.0; + float target_pos_CapSmo[3]; - for (new x = 1; x <= MaxClients; ++x) { + for (int x = 1; x <= MaxClients; ++x) { if (isSpecialInfectedBot(x) && IsPlayerAlive(x) && HasValidEnt(x, "m_tongueVictim") - && isVisibleTo(client, x)) + && isVisibleTo(int client, x)) { - new Float:dist; + float dist; GetClientAbsOrigin(x, target_pos_CapSmo); dist = GetVectorDistance(self_pos, target_pos_CapSmo); @@ -886,19 +888,19 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) */ // Find a Smoker who is tongued self - new aCapSmoker = -1; + int aCapSmoker = -1; if (c_bPrioritize_OwnerSmoker) { - new Float:min_dist_CapSmo = 100000.0; - new Float:target_pos_CapSmo[3]; + float min_dist_CapSmo = 100000.0; + float target_pos_CapSmo[3]; - for (new x = 1; x <= MaxClients; ++x) { + for (int x = 1; x <= MaxClients; ++x) { if (isInfected(x) && IsPlayerAlive(x) && HasValidEnt(x, "m_tongueVictim")) { if (GetEntPropEnt(x, Prop_Send, "m_tongueVictim") == client) { - new Float:dist; + float dist; GetClientAbsOrigin(x, target_pos_CapSmo); dist = GetVectorDistance(self_pos, target_pos_CapSmo); @@ -914,12 +916,12 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } // Find a flying Hunter and Jockey - new aHunterJockey = -1; - new Float:hunjoc_pos[3]; - new Float:min_dist_HunJoc = 100000.0; + int aHunterJockey = -1; + float hunjoc_pos[3]; + float min_dist_HunJoc = 100000.0; if (c_bBash_Enabled && !NeedsTeammateHelp_ExceptSmoker(client)) { - for (new x = 1; x <= MaxClients; ++x) { + for (int x = 1; x <= MaxClients; ++x) { if (isInfected(x) && IsPlayerAlive(x) && !isStagger(x) @@ -927,12 +929,12 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) { if (getZombieClass(x) == ZC_HUNTER) { if (c_iBash_HunterChance == 100 || (c_iBash_HunterChance < 100 && g_bShove[client][x])) { - new Float:hunterVelocity[3]; + float hunterVelocity[3]; GetEntDataVector(x, g_Velo, hunterVelocity); if ((GetClientButtons(x) & IN_DUCK) && hunterVelocity[2] != 0.0) { GetClientAbsOrigin(x, hunjoc_pos); - new Float:hundist; + float hundist; hundist = GetVectorDistance(self_pos, hunjoc_pos); if (hundist < c_fBash_HunterRange) { // 145.0 best @@ -946,12 +948,12 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } else if (getZombieClass(x) == ZC_JOCKEY) { if (c_iBash_JockeyChance == 100 || (c_iBash_JockeyChance < 100 && g_bShove[client][x])) { - new Float:jockeyVelocity[3]; + float jockeyVelocity[3]; GetEntDataVector(x, g_Velo, jockeyVelocity); if (jockeyVelocity[2] != 0.0) { GetClientAbsOrigin(x, hunjoc_pos); - new Float:jocdist; + float jocdist; jocdist = GetVectorDistance(self_pos, hunjoc_pos); if (jocdist < c_fBash_JockeyRange) { // 125.0 best @@ -968,24 +970,24 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } // Find a Common Infected - //new iMaxEntities = GetMaxEntities(); - new aCommonInfected = -1; - new iCI_MeleeCount = 0; - new Float:min_dist_CI = 100000.0; - new Float:ci_pos[3]; + //int iMaxEntities = GetMaxEntities(); + int aCommonInfected = -1; + int iCI_MeleeCount = 0; + float min_dist_CI = 100000.0; + float ci_pos[3]; if (c_bCI_Enabled && !NeedsTeammateHelp(client)) { - for (new iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) { + for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) { if (IsCommonInfected(iEntity) && GetEntProp(iEntity, Prop_Data, "m_iHealth") > 0 && isVisibleToEntity(iEntity, client)) { - new Float:dist; + float dist; GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", ci_pos); dist = GetVectorDistance(self_pos, ci_pos); if (dist < c_fCI_Range) { - new iSeq = GetEntProp(iEntity, Prop_Send, "m_nSequence", 2); + int iSeq = GetEntProp(iEntity, Prop_Send, "m_nSequence", 2); // Stagger 122, 123, 126, 127, 128, 133, 134 // Down Stagger 128, 129, 130, 131 // Object Climb (Very Low) 182, 183, 184, 185 @@ -1009,18 +1011,18 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } // Fina a rage Witch - new aWitch = -1; - new Float:min_dist_Witch = 100000.0; - new Float:witch_pos[3]; + int aWitch = -1; + float min_dist_Witch = 100000.0; + float witch_pos[3]; if (g_bWitchActive && c_bWitch_Enabled && !NeedsTeammateHelp(client)) { - for (new iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) + for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) { if (IsWitch(iEntity) && GetEntProp(iEntity, Prop_Data, "m_iHealth") > 0 && IsWitchRage(iEntity) && isVisibleToEntity(iEntity, client)) { - new Float:witch_dist; + float witch_dist; GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", witch_pos); witch_dist = GetVectorDistance(self_pos, witch_pos); @@ -1037,16 +1039,16 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } // Find a tank rock - new aTankRock = -1; - new Float:rock_min_dist = 100000.0; - new Float:rock_pos[3]; + int aTankRock = -1; + float rock_min_dist = 100000.0; + float rock_pos[3]; if (c_bRock_Enabled && !NeedsTeammateHelp(client)) { - for (new iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) + for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) { if (IsTankRock(iEntity) && isVisibleToEntity(iEntity, client)) { - new Float:rock_dist; + float rock_dist; GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", rock_pos); rock_dist = GetVectorDistance(self_pos, rock_pos); @@ -1068,13 +1070,13 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) ***************************** --------------------------------------------------------------------------------------------------------------------------------------------------------------- */ - new weapon = GetEntDataEnt2(client, g_ActiveWeapon); + int weapon = GetEntDataEnt2(client, g_ActiveWeapon); static char AW_Classname[32]; if (weapon > MAXPLAYERS) GetEntityClassname(weapon, AW_Classname, sizeof(AW_Classname)); // Exception reported: Entity -1 (-1) is invalid static char main_weapon[32]; - new slot0 = GetPlayerWeaponSlot(client, 0); + int slot0 = GetPlayerWeaponSlot(client, 0); if (slot0 > -1) { GetEntityClassname(slot0, main_weapon, sizeof(main_weapon)); } @@ -1109,12 +1111,12 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) if (g_bCommonWithinMelee[client]) { if (aCommonInfected < 1) g_bCommonWithinMelee[client] = false; if (aCommonInfected > 0) { - new Float:c_pos[3], Float:common_e_pos[3]; + float c_pos[3], common_e_pos[3]; GetClientAbsOrigin(client, c_pos); GetEntPropVector(aCommonInfected, Prop_Data, "m_vecOrigin", common_e_pos); - new Float:aimdist = GetVectorDistance(c_pos, common_e_pos); + float aimdist = GetVectorDistance(c_pos, common_e_pos); if (aimdist > c_fCI_MeleeRange) g_bCommonWithinMelee[client] = false; } @@ -1130,8 +1132,8 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) if (aHunterJockey > 0) { if (!g_bDanger[client]) g_bDanger[client] = true; - new Float:c_pos[3], Float:e_pos[3]; - new Float:lookat[3]; + float c_pos[3], e_pos[3]; + float lookat[3]; GetClientAbsOrigin(client, c_pos); GetClientAbsOrigin(aHunterJockey, e_pos); @@ -1158,8 +1160,8 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) if (aCapSmoker > 0) { // Shoot even if client invisible the smoker if (!g_bDanger[client]) g_bDanger[client] = true; - new Float:c_pos[3], Float:e_pos[3]; - new Float:lookat[3]; + float c_pos[3], e_pos[3]; + float lookat[3]; GetClientAbsOrigin(client, c_pos); GetEntPropVector(aCapSmoker, Prop_Data, "m_vecOrigin", e_pos); @@ -1179,7 +1181,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); - new Float:aimdist = GetVectorDistance(c_pos, e_pos); + float aimdist = GetVectorDistance(c_pos, e_pos); if (aimdist < 100.0) buttons |= IN_ATTACK2; else { @@ -1202,8 +1204,8 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) if (aCap_Survivor > 0) { // Pass if the client and target are "visible" to each other. so aCap Smoker doesn't pass if (!g_bDanger[client]) g_bDanger[client] = true; - new Float:c_pos[3], Float:e_pos[3]; - new Float:lookat[3]; + float c_pos[3], e_pos[3]; + float lookat[3]; GetClientEyePosition(client, c_pos); GetClientEyePosition(aCap_Survivor, e_pos); @@ -1214,7 +1216,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) e_pos[2] += -10.0; } - new Float:aimdist = GetVectorDistance(c_pos, e_pos); + float aimdist = GetVectorDistance(c_pos, e_pos); MakeVectorFromPoints(c_pos, e_pos, lookat); GetVectorAngles(lookat, angles); @@ -1258,10 +1260,10 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) else if (aCap_Infected > 0 && aCap_Survivor < 1) { if (!g_bDanger[client]) g_bDanger[client] = true; - new zombieClass = getZombieClass(aCap_Infected); + int zombieClass = getZombieClass(aCap_Infected); - new Float:c_pos[3], Float:e_pos[3]; - new Float:lookat[3]; + float c_pos[3], e_pos[3]; + float lookat[3]; GetClientEyePosition(client, c_pos); @@ -1275,7 +1277,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) else if (zombieClass == ZC_HUNTER) e_pos[2] += -14.0; } - new Float:aimdist = GetVectorDistance(c_pos, e_pos); + float aimdist = GetVectorDistance(c_pos, e_pos); if (zombieClass == ZC_CHARGER && aimdist < 300.0) e_pos[2] += 10.0; @@ -1330,8 +1332,8 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) * ==================================================================================================== */ if (aTankRock > 1 && !HasValidEnt(client, "m_reviveTarget")) { - new Float:c_pos[3], Float:rock_e_pos[3]; - new Float:lookat[3]; + float c_pos[3], rock_e_pos[3]; + float lookat[3]; GetClientAbsOrigin(client, c_pos); GetEntPropVector(aTankRock, Prop_Data, "m_vecAbsOrigin", rock_e_pos); @@ -1346,7 +1348,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) // PrintToChatAll("---"); } - new Float:aimdist = GetVectorDistance(c_pos, rock_e_pos); + float aimdist = GetVectorDistance(c_pos, rock_e_pos); if (aimdist > 40.0 && !isHaveItem(AW_Classname, "weapon_melee")) { //�ߐڂ������Ă��Ȃ��ꍇ TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); @@ -1359,8 +1361,8 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } if (aWitch > 1) { - new Float:c_pos[3], Float:witch_e_pos[3]; - new Float:lookat[3]; + float c_pos[3], witch_e_pos[3]; + float lookat[3]; GetClientEyePosition(client, c_pos); GetEntPropVector(aWitch, Prop_Data, "m_vecAbsOrigin", witch_e_pos); @@ -1373,7 +1375,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); - new Float:aimdist = GetVectorDistance(c_pos, witch_e_pos); + float aimdist = GetVectorDistance(c_pos, witch_e_pos); if (c_bWitch_Shotgun_Control && isHaveItem(AW_Classname, "shotgun")) { if (aimdist < 150.0) buttons |= IN_DUCK; @@ -1407,21 +1409,21 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) // Even if aCommonInfected dies and disappears, the Entity may not disappear for a while.(Bot keeps shooting the place)�B Even with InValidEntity(), true appears... // When the entity disappears, m_nNextThinkTick will not advance, so skip that if NextThinkTick has the same value as before. - new iNextThinkTick = GetEntProp(aCommonInfected, Prop_Data, "m_nNextThinkTick"); + int iNextThinkTick = GetEntProp(aCommonInfected, Prop_Data, "m_nNextThinkTick"); if (g_Stock_NextThinkTick[client] != iNextThinkTick) // If visible aCommonInfected { - new Float:c_pos[3], Float:common_e_pos[3]; - new Float:lookat[3]; + float c_pos[3], common_e_pos[3]; + float lookat[3]; GetClientEyePosition(client, c_pos); GetEntPropVector(aCommonInfected, Prop_Data, "m_vecOrigin", common_e_pos); - //new Float:height_difference = (c_pos[2] - common_e_pos[2]) - 60.0; + //float height_difference = (c_pos[2] - common_e_pos[2]) - 60.0; common_e_pos[2] += 40.0; - new Float:aimdist = GetVectorDistance(c_pos, common_e_pos); + float aimdist = GetVectorDistance(c_pos, common_e_pos); //common_e_pos[2] += (25.0 + (aimdist * 0.05) - (height_difference * 0.1)); @@ -1429,7 +1431,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) // GetEntPropVector(aCommonInfected, Prop_Data, "m_vecOrigin", common_e_pos); // common_e_pos[2] += -30.0; - new iSeq = GetEntProp(aCommonInfected, Prop_Send, "m_nSequence", 2); + int iSeq = GetEntProp(aCommonInfected, Prop_Send, "m_nSequence", 2); // Stagger 122, 123, 126, 127, 128, 133, 134 // Down Stagger 128, 129, 130, 131 // Object Climb (Very Low) 182, 183, 184, 185 @@ -1453,7 +1455,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) g_bCommonWithinMelee[client] = true; static char sub_weapon[16]; - new slot1 = GetPlayerWeaponSlot(client, 1); + int slot1 = GetPlayerWeaponSlot(client, 1); if (slot1 > -1) { GetEntityClassname(slot1, sub_weapon, sizeof(sub_weapon)); // SubWeapon } @@ -1465,7 +1467,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } } - if (new_target > 0) { + if (int_target > 0) { if (aimdist <= 90.0) TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); } else { if (isHaveItem(AW_Classname, "weapon_melee")) { @@ -1475,7 +1477,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) } } - if (new_target < 1 || (new_target > 0 && aimdist <= 90.0)) { // If new_target and common at the same time, prioritize to new_target. Attack only when within 90.0 dist. + if (int_target < 1 || (int_target > 0 && aimdist <= 90.0)) { // If int_target and common at the same time, prioritize to int_target. Attack only when within 90.0 dist. if (isHaveItem(AW_Classname, "weapon_melee")) { if (GetRandomInt(0, 6) == 0) { if (aimdist <= 50.0) buttons |= IN_ATTACK2; @@ -1523,24 +1525,24 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) /* ==================================================================================================== * - * �D��xF : Special Infected and Tank (new_target) + * �D��xF : Special Infected and Tank (int_target) * ==================================================================================================== */ - if (new_target > 0) { - new Float:c_pos[3], Float:e_pos[3]; - new Float:lookat[3]; + if (int_target > 0) { + float c_pos[3], e_pos[3]; + float lookat[3]; GetClientAbsOrigin(client, c_pos); - new zombieClass = getZombieClass(new_target); + int zombieClass = getZombieClass(int_target); if (aCapSmoker > 0) { // Prioritize aCapSmoker GetClientAbsOrigin(aCapSmoker, e_pos); e_pos[2] += -10.0; } else { - GetClientAbsOrigin(new_target, e_pos); + GetClientAbsOrigin(int_target, e_pos); if (zombieClass == ZC_HUNTER - && (GetClientButtons(new_target) & IN_DUCK)) { + && (GetClientButtons(int_target) & IN_DUCK)) { if (GetVectorDistance(c_pos, e_pos) > 250.0) e_pos[2] += -30.0; else e_pos[2] += -35.0; } else if (zombieClass == ZC_JOCKEY) { @@ -1552,7 +1554,7 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) if (zombieClass == ZC_TANK && aTankRock > 0) return Plugin_Continue; // If the Tank and tank rock are visible at the same time, prioritize the tank rock - new Float:aimdist = GetVectorDistance(c_pos, e_pos); + float aimdist = GetVectorDistance(c_pos, e_pos); if (aimdist < 200.0) {if (!g_bDanger[client]) g_bDanger[client] = true;} @@ -1581,20 +1583,20 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) /****************************************************************************************************/ - new bool:isTargetBoomer = false; // Is new_target Boomer - new bool:isBoomer_Shoot_OK = false; + bool isTargetBoomer = false; + bool isBoomer_Shoot_OK = false; if (c_bSI_IgnoreBoomer && zombieClass == ZC_BOOMER) { - new Float:voS_pos[3]; - for (new s = 1; s <= MaxClients; ++s) { + float voS_pos[3]; + for (int s = 1; s <= MaxClients; ++s) { if (isSurvivor(s) && IsPlayerAlive(s)) { - new Float:fVomit = GetEntPropFloat(s, Prop_Send, "m_vomitStart"); + float fVomit = GetEntPropFloat(s, Prop_Send, "m_vomitStart"); if (GetGameTime() - fVomit > 10.0) { // Survivors without vomit GetClientAbsOrigin(s, voS_pos); - new Float:dist = GetVectorDistance(voS_pos, e_pos); // Distance between the Survivor without vomit and the Boomer + float dist = GetVectorDistance(voS_pos, e_pos); // Distance between the Survivor without vomit and the Boomer if (dist >= c_fSI_IgnoreBoomerRange) { isBoomer_Shoot_OK = true; } // If the survivor without vomit is farther than dist "c_fSI_IgnoreBoomerRange (def: 200)" else { isBoomer_Shoot_OK = false; break; } // If False appears even once, break } @@ -1603,15 +1605,15 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) isTargetBoomer = true; } - if ((zombieClass == ZC_JOCKEY && g_bShove[client][new_target]) + if ((zombieClass == ZC_JOCKEY && g_bShove[client][int_target]) || zombieClass == ZC_SMOKER || (isTargetBoomer && !isBoomer_Shoot_OK)) { - if (aimdist < 90.0 && !isStagger(new_target)) { + if (aimdist < 90.0 && !isStagger(int_target)) { TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); buttons |= IN_ATTACK2; if (c_bDebug_Enabled) { - PrintToChatAll("\x01[%.2f] \x05%N\x01 new_target shoved: \x04%N (%d)", GetGameTime(), client, new_target, new_target); + PrintToChatAll("\x01[%.2f] \x05%N\x01 int_target shoved: \x04%N (%d)", GetGameTime(), client, int_target, int_target); EmitSoundToAll(SOUND_SWING, client); } return Plugin_Changed; @@ -1622,8 +1624,8 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) || (aimdist < 100.0 && isHaveItem(AW_Classname, "weapon_melee"))) { if (c_bDebug_Enabled) { - if (!isTargetBoomer) PrintToChatAll("\x01[%.2f] \x05%N\x01 new_target: \x04%N (%d)", GetGameTime(), client, new_target, new_target); - else PrintToChatAll("\x01[%.2f] \x05%N\x01 new_target: \x04%N (%d) (Shoot: %s)", GetGameTime(), client, new_target, new_target, (isBoomer_Shoot_OK) ? "OK" : "NO"); + if (!isTargetBoomer) PrintToChatAll("\x01[%.2f] \x05%N\x01 int_target: \x04%N (%d)", GetGameTime(), client, int_target, int_target); + else PrintToChatAll("\x01[%.2f] \x05%N\x01 int_target: \x04%N (%d) (Shoot: %s)", GetGameTime(), client, int_target, int_target, (isBoomer_Shoot_OK) ? "OK" : "NO"); } if (!isTargetBoomer || (isTargetBoomer && isBoomer_Shoot_OK)) { @@ -1651,16 +1653,16 @@ stock Action:onSBRunCmd(client, &buttons, Float:vel[3], Float:angles[3]) *= Incapacitated Run Cmd *= ================================================================================================ */ -stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angles[3]) +stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], float angles[3]) { if (isIncapacitated(client)) { - new aCapper = -1; - new Float:min_dist_Cap = 100000.0; - new Float:self_pos[3], Float:target_pos[3]; + int aCapper = -1; + float min_dist_Cap = 100000.0; + float self_pos[3], target_pos[3]; GetClientEyePosition(client, self_pos); if (!NeedsTeammateHelp(client)) { - for (new x = 1; x <= MaxClients; ++x) { + for (int x = 1; x <= MaxClients; ++x) { // �S������Ă��鐶���҂�T�� if (isSurvivor(x) && NeedsTeammateHelp(x) @@ -1668,7 +1670,7 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl && (isVisibleTo(client, x) || isVisibleTo(x, client))) { GetClientAbsOrigin(x, target_pos); - new Float:dist = GetVectorDistance(self_pos, target_pos); + float dist = GetVectorDistance(self_pos, target_pos); if (dist < min_dist_Cap) { min_dist_Cap = dist; aCapper = x; @@ -1681,7 +1683,7 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl && (isVisibleTo(client, x) || isVisibleTo(x, client))) { GetClientAbsOrigin(x, target_pos); - new Float:dist = GetVectorDistance(self_pos, target_pos); + float dist = GetVectorDistance(self_pos, target_pos); if (dist < min_dist_Cap) { min_dist_Cap = dist; aCapper = x; @@ -1691,8 +1693,8 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl } if (aCapper > 0) { - new Float:c_pos[3], Float:e_pos[3]; - new Float:lookat[3]; + float c_pos[3], e_pos[3]; + float lookat[3]; GetClientEyePosition(client, c_pos); GetClientEyePosition(aCapper, e_pos); @@ -1723,40 +1725,40 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl } - new new_target = -1; - new aCommonInfected = -1; + int int_target = -1; + int aCommonInfected = -1; if (aCapper < 1 && !NeedsTeammateHelp(client)) { - new Float:min_dist = 100000.0; - new Float:ci_pos[3]; + float min_dist = 100000.0; + float ci_pos[3]; - for (new x = 1; x <= MaxClients; ++x){ + for (int x = 1; x <= MaxClients; ++x){ if (isInfected(x) && IsPlayerAlive(x) && (isVisibleTo(client, x) || isVisibleTo(x, client))) { GetClientAbsOrigin(x, target_pos); - new Float:dist = GetVectorDistance(self_pos, target_pos); + float dist = GetVectorDistance(self_pos, target_pos); if (dist < min_dist) { min_dist = dist; - new_target = x; + int_target = x; aCommonInfected = -1; } } } if (c_bCI_Enabled) { - for (new iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) { + for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) { if (IsCommonInfected(iEntity) && GetEntProp(iEntity, Prop_Data, "m_iHealth") > 0 && isVisibleToEntity(iEntity, client)) { GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", ci_pos); - new Float:dist = GetVectorDistance(self_pos, ci_pos); + float dist = GetVectorDistance(self_pos, ci_pos); if (dist < min_dist) { min_dist = dist; aCommonInfected = iEntity; - new_target = -1; + int_target = -1; } } } @@ -1764,8 +1766,8 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl } if (aCommonInfected > 0) { - new Float:c_pos[3], Float:common_e_pos[3]; - new Float:lookat[3]; + float c_pos[3], common_e_pos[3]; + float lookat[3]; GetClientEyePosition(client, c_pos); GetEntPropVector(aCommonInfected, Prop_Data, "m_vecOrigin", common_e_pos); @@ -1774,7 +1776,7 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl MakeVectorFromPoints(c_pos, common_e_pos, lookat); GetVectorAngles(lookat, angles); - new Float:aimdist = GetVectorDistance(c_pos, common_e_pos); + float aimdist = GetVectorDistance(c_pos, common_e_pos); /****************************************************************************************************/ @@ -1788,26 +1790,26 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl return Plugin_Changed; } - if (new_target > 0) { - new Float:c_pos[3], Float:e_pos[3]; - new Float:lookat[3]; + if (int_target > 0) { + float c_pos[3], e_pos[3]; + float lookat[3]; GetClientEyePosition(client, c_pos); - GetClientEyePosition(new_target, e_pos); + GetClientEyePosition(int_target, e_pos); e_pos[2] += -15.0 - new zombieClass = getZombieClass(new_target); + int zombieClass = getZombieClass(int_target); if (zombieClass == ZC_JOCKEY) { e_pos[2] += -30.0; } else if (zombieClass == ZC_HUNTER) { - if ((GetClientButtons(new_target) & IN_DUCK) || HasValidEnt(new_target, "m_pounceVictim")) e_pos[2] += -25.0; + if ((GetClientButtons(int_target) & IN_DUCK) || HasValidEnt(int_target, "m_pounceVictim")) e_pos[2] += -25.0; } MakeVectorFromPoints(c_pos, e_pos, lookat); GetVectorAngles(lookat, angles); - if (c_bDebug_Enabled) PrintToChatAll("\x01[%.2f] \x05%N \x01new target Incapacitated: \x04%N", GetGameTime(), client, new_target); + if (c_bDebug_Enabled) PrintToChatAll("\x01[%.2f] \x05%N \x01int target Incapacitated: \x04%N", GetGameTime(), client, int_target); TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); @@ -1827,14 +1829,14 @@ stock Action:onSBRunCmd_Incapacitated(client, &buttons, Float:vel[3], Float:angl *= Events *= ================================================================================================ */ -public Action:Event_PlayerIncapacitated(Handle:event, const char[] name, bool:dontBroadcast) +public Action Event_PlayerIncapacitated(Handle event, const char[] name, bool dontBroadcast) { if (!g_hEnabled) return Plugin_Handled; - new victim = GetClientOfUserId(GetEventInt(event, "userid")); - new attackerentid = GetEventInt(event, "attackerentid"); + int victim = GetClientOfUserId(GetEventInt(event, "userid")); + int attackerentid = GetEventInt(event, "attackerentid"); - // new type = GetEventInt(event, "type"); + // int type = GetEventInt(event, "type"); // PrintToChatAll("\x04PlayerIncapacitated"); // PrintToChatAll("type %i", type); @@ -1843,22 +1845,22 @@ public Action:Event_PlayerIncapacitated(Handle:event, const char[] name, bool:do g_iWitch_Process[attackerentid] = WITCH_INCAPACITATED; // PrintToChatAll("attackerentid %i attacked %N", attackerentid, victim); - // new health = GetEventInt(event, "health"); - // new dmg_health = GetEventInt(event, "dmg_health"); + // int health = GetEventInt(event, "health"); + // int dmg_health = GetEventInt(event, "dmg_health"); // PrintToChatAll("health: %i, damage: %i", health, dmg_health); } return Plugin_Handled; } -public Action:Event_PlayerDeath(Handle:event, const char[] name, bool:dontBroadcast) +public Action Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast) { if (!g_hEnabled) return Plugin_Handled; - new victim = GetClientOfUserId(GetEventInt(event, "userid")); - new attackerentid = GetEventInt(event, "attackerentid"); + int victim = GetClientOfUserId(GetEventInt(event, "userid")); + int attackerentid = GetEventInt(event, "attackerentid"); - // new type = GetEventInt(event, "type"); + // int type = GetEventInt(event, "type"); // PrintToChatAll("\x04PlayerDeath"); // PrintToChatAll("type %i", type); @@ -1867,8 +1869,8 @@ public Action:Event_PlayerDeath(Handle:event, const char[] name, bool:dontBroadc g_iWitch_Process[attackerentid] = WITCH_KILLED; // PrintToChatAll("attackerentid %i attacked %N", attackerentid, victim); - // new health = GetEventInt(event, "health"); - // new dmg_health = GetEventInt(event, "dmg_health"); + // int health = GetEventInt(event, "health"); + // int dmg_health = GetEventInt(event, "dmg_health"); // PrintToChatAll("health: %i, damage: %i", health, dmg_health); } @@ -1878,9 +1880,9 @@ public Action:Event_PlayerDeath(Handle:event, const char[] name, bool:dontBroadc return Plugin_Handled; } -public Action:Event_WitchRage(Handle:event, const char[] name, bool:dontBroadcast) +public Action Event_WitchRage(Handle event, const char[] name, bool dontBroadcast) { - new attacker = GetClientOfUserId(GetEventInt(event, "userid")); + int attacker = GetClientOfUserId(GetEventInt(event, "userid")); if (isSurvivor(attacker)) { // CallBotstoWitch(attacker); @@ -1888,7 +1890,7 @@ public Action:Event_WitchRage(Handle:event, const char[] name, bool:dontBroadcas } } -public OnEntityCreated(entity, const char[] classname) +public void OnEntityCreated(int entity, const char[] classname) { if (entity >= MaxClients && g_hEnabled && strcmp(classname, "witch") == 0) { @@ -1896,15 +1898,15 @@ public OnEntityCreated(entity, const char[] classname) } } -public OnEntityDestroyed(entity) { +public void OnEntityDestroyed(int entity) { if(entity == -1) return; static char classname[32]; GetEntityClassname(entity, classname, sizeof(classname)); if (StrEqual(classname, "witch", false)) { if (g_bWitchActive) { - new iWitch_Count = 0; - for (new iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) + int iWitch_Count = 0; + for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) { if (IsWitch(iEntity) && GetEntProp(iEntity, Prop_Data, "m_iHealth") > 0 && IsWitchRage(iEntity)) { @@ -1925,18 +1927,18 @@ public OnEntityDestroyed(entity) { *= Stock any *= ================================================================================================ */ -stock ScriptCommand(client, const char[] command, const char[] arguments, any:...) +stock void ScriptCommand(int client, const char[] command, const char[] arguments, any ...) { static char vscript[PLATFORM_MAX_PATH]; VFormat(vscript, sizeof(vscript), arguments, 4); - new flags = GetCommandFlags(command); + int flags = GetCommandFlags(command); SetCommandFlags(command, flags & ~FCVAR_CHEAT); FakeClientCommand(client, "%s %s", command, vscript); SetCommandFlags(command, flags); } -stock L4D2_RunScript(const char[] sCode, any:...) +stock void L4D2_RunScript(const char[] sCode, any ...) { static iScriptLogic = INVALID_ENT_REFERENCE; if(iScriptLogic == INVALID_ENT_REFERENCE || !IsValidEntity(iScriptLogic)) { @@ -1960,7 +1962,7 @@ stock L4D2_RunScript(const char[] sCode, any:...) * Bool * */ -stock bool:NeedsTeammateHelp(client) +stock bool NeedsTeammateHelp(int client) { if (HasValidEnt(client, "m_tongueOwner") || HasValidEnt(client, "m_pounceAttacker") @@ -1974,7 +1976,7 @@ stock bool:NeedsTeammateHelp(client) return false; } -stock bool:NeedsTeammateHelp_ExceptSmoker(client) +stock bool NeedsTeammateHelp_ExceptSmoker(int client) { if (HasValidEnt(client, "m_pounceAttacker") || HasValidEnt(client, "m_jockeyAttacker") @@ -1987,7 +1989,7 @@ stock bool:NeedsTeammateHelp_ExceptSmoker(client) return false; } -stock bool:CappingSuvivor(client) +stock bool CappingSuvivor(int client) { if (HasValidEnt(client, "m_tongueVictim") || HasValidEnt(client, "m_pounceVictim") @@ -2001,20 +2003,20 @@ stock bool:CappingSuvivor(client) return false; } -stock bool:HasValidEnt(client, const char[] entprop) +stock bool HasValidEnt(int client, const char[] entprop) { - new ent = GetEntPropEnt(client, Prop_Send, entprop); + int ent = GetEntPropEnt(client, Prop_Send, entprop); return (ent > 0 && IsClientInGame(ent)); } -stock bool:IsWitchRage(id) { +stock bool IsWitchRage(int id) { if (GetEntPropFloat(id, Prop_Send, "m_rage") >= 1.0) return true; return false; } -stock bool:IsCommonInfected(iEntity) +stock bool IsCommonInfected(int iEntity) { if (iEntity && IsValidEntity(iEntity)) { @@ -2027,7 +2029,7 @@ stock bool:IsCommonInfected(iEntity) return false; } -stock bool:IsWitch(iEntity) +stock bool IsWitch(int iEntity) { if (iEntity && IsValidEntity(iEntity)) { @@ -2039,7 +2041,7 @@ stock bool:IsWitch(iEntity) return false; } -stock bool:IsTankRock(iEntity) +stock bool IsTankRock(int iEntity) { if (iEntity && IsValidEntity(iEntity)) { @@ -2051,53 +2053,53 @@ stock bool:IsTankRock(iEntity) return false; } -stock bool:isGhost(i) +stock bool isGhost(int i) { - return bool:GetEntProp(i, Prop_Send, "m_isGhost"); + return GetEntProp(i, Prop_Send, "m_isGhost") != 0; } -stock bool:isSpecialInfectedBot(i) +stock bool isSpecialInfectedBot(int i) { return i > 0 && i <= MaxClients && IsClientInGame(i) && IsFakeClient(i) && GetClientTeam(i) == 3; } -stock bool:isSurvivorBot(i) +stock bool isSurvivorBot(int i) { return isSurvivor(i) && IsFakeClient(i); } -stock bool:isInfected(i) +stock bool isInfected(int i) { return i > 0 && i <= MaxClients && IsClientInGame(i) && GetClientTeam(i) == 3 && !isGhost(i); } -stock bool:isSurvivor(i) +stock bool isSurvivor(int i) { return i > 0 && i <= MaxClients && IsClientInGame(i) && GetClientTeam(i) == 2; } -stock any:getZombieClass(client) +stock any getZombieClass(int client) { return GetEntProp(client, Prop_Send, "m_zombieClass"); } -stock bool:isIncapacitated(client) +stock bool isIncapacitated(int client) { return GetEntProp(client, Prop_Send, "m_isIncapacitated", 1) == 1; } -stock bool:isReloading(client) +stock bool isReloading(int client) { - new slot0 = GetPlayerWeaponSlot(client, 0); + int slot0 = GetPlayerWeaponSlot(client, 0); if (slot0 > -1) { return GetEntProp(slot0, Prop_Data, "m_bInReload") > 0; } return false; } -stock bool:isStagger(client) // Client Only +stock bool isStagger(int client) // Client Only { - new Float:staggerPos[3]; + float staggerPos[3]; GetEntPropVector(client, Prop_Send, "m_staggerStart", staggerPos); if (staggerPos[0] != 0.0 && staggerPos[1] != 0.0 && staggerPos[2] != 0.0) return true; @@ -2105,27 +2107,27 @@ stock bool:isStagger(client) // Client Only return false; } -stock bool:isJockeyLeaping(client) +stock bool isJockeyLeaping(int client) { - new Float:jockeyVelocity[3]; + float jockeyVelocity[3]; GetEntDataVector(client, g_Velo, jockeyVelocity); if (jockeyVelocity[2] != 0.0) return true; return false; } -stock bool:isHaveItem(const char[] FItem, const char[] SItem) +stock bool isHaveItem(const char[] FItem, const char[] SItem) { if (StrContains(FItem, SItem, false) > -1) return true; return false; } -stock UseItem(client, const char[] FItem) +stock void UseItem(int client, const char[] FItem) { FakeClientCommand(client, "use %s", FItem); } -stock any:PrimaryExtraAmmoCheck(client, weapon_index) +stock any PrimaryExtraAmmoCheck(int client, int weapon_index) { // Offset: // 12: Rifle ALL (Other than M60) @@ -2148,7 +2150,7 @@ stock any:PrimaryExtraAmmoCheck(client, weapon_index) else if (isHaveItem(sWeaponName, "weapon_sniper")) offset = 40; else if (isHaveItem(sWeaponName, "weapon_grenade_launcher")) offset = 68; - new extra_ammo = GetEntData(client, (g_iAmmoOffset + offset)); + int extra_ammo = GetEntData(client, (g_iAmmoOffset + offset)); //PrintToChatAll("%N Gun Name: %s, Offset: %i, ExtraAmmo: %i:", client, sWeaponName, offset, extra_ammo); return extra_ammo; @@ -2158,30 +2160,30 @@ stock any:PrimaryExtraAmmoCheck(client, weapon_index) --------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ -public bool:traceFilter(entity, mask, any:self) +public bool traceFilter(int entity, int mask, any self) { return entity != self; } -public bool:TraceRayDontHitPlayers(entity, mask) +public bool TraceRayDontHitPlayers(int entity, int mask) { // Check if the beam hit a player and tell it to keep tracing if it did return (entity <= 0 || entity > MaxClients); } // Determine if the head of the target can be seen from the client -stock bool:isVisibleTo(client, target) +stock bool isVisibleTo(int client, int target) { - new bool:ret = false; - new Float:aim_angles[3]; - new Float:self_pos[3]; + bool ret = false; + float aim_angles[3]; + float self_pos[3]; GetClientEyePosition(client, self_pos); computeAimAngles(client, target, aim_angles); - new Handle:trace = TR_TraceRayFilterEx(self_pos, aim_angles, MASK_VISIBLE, RayType_Infinite, traceFilter, client); + Handle trace = TR_TraceRayFilterEx(self_pos, aim_angles, MASK_VISIBLE, RayType_Infinite, traceFilter, client); if (TR_DidHit(trace)) { - new hit = TR_GetEntityIndex(trace); + int hit = TR_GetEntityIndex(trace); if (hit == target) { ret = true; } @@ -2191,12 +2193,12 @@ stock bool:isVisibleTo(client, target) } /* Determine if the head of the entity can be seen from the client */ -stock bool:isVisibleToEntity(target, client) +stock bool isVisibleToEntity(int target, int client) { - new bool:ret = false; - new Float:aim_angles[3]; - new Float:self_pos[3], Float:target_pos[3]; - new Float:lookat[3]; + bool ret = false; + float aim_angles[3]; + float self_pos[3], target_pos[3]; + float lookat[3]; GetEntPropVector(target, Prop_Data, "m_vecAbsOrigin", target_pos); GetClientEyePosition(client, self_pos); @@ -2204,29 +2206,29 @@ stock bool:isVisibleToEntity(target, client) MakeVectorFromPoints(target_pos, self_pos, lookat); GetVectorAngles(lookat, aim_angles); - new Handle:trace = TR_TraceRayFilterEx(target_pos, aim_angles, MASK_VISIBLE, RayType_Infinite, traceFilter, target); + Handle trace = TR_TraceRayFilterEx(target_pos, aim_angles, MASK_VISIBLE, RayType_Infinite, traceFilter, target); if (TR_DidHit(trace)) { - new hit = TR_GetEntityIndex(trace); + int hit = TR_GetEntityIndex(trace); if (hit == client) { ret = true; } } - CloseHandle(trace); + delete trace; return ret; } /* From the client to the target's head, whether it is blocked by mesh */ -stock bool:isInterruptTo(client, target) +stock bool isInterruptTo(int client, int target) { - new bool:ret = false; - new Float:aim_angles[3]; - new Float:self_pos[3]; + bool ret = false; + float aim_angles[3]; + float self_pos[3]; GetClientEyePosition(client, self_pos); computeAimAngles(client, target, aim_angles); - new Handle:trace = TR_TraceRayFilterEx(self_pos, aim_angles, MASK_SOLID, RayType_Infinite, traceFilter, client); + int Handle trace = TR_TraceRayFilterEx(self_pos, aim_angles, MASK_SOLID, RayType_Infinite, traceFilter, client); if (TR_DidHit(trace)) { - new hit = TR_GetEntityIndex(trace); + int hit = TR_GetEntityIndex(trace); if (hit == target) { ret = true; } @@ -2236,11 +2238,11 @@ stock bool:isInterruptTo(client, target) } // Calculate the angles from client to target -stock computeAimAngles(client, target, Float:angles[3], type = 1) +stock void computeAimAngles(int client, int target, float angles[3], int type = 1) { - new Float:target_pos[3]; - new Float:self_pos[3]; - new Float:lookat[3]; + float target_pos[3]; + float self_pos[3]; + float lookat[3]; GetClientEyePosition(client, self_pos); switch (type) { diff --git a/scripting/l4d2_tank_priority.sp b/scripting/l4d2_tank_priority.sp new file mode 100644 index 0000000..8a636a0 --- /dev/null +++ b/scripting/l4d2_tank_priority.sp @@ -0,0 +1,107 @@ +#pragma semicolon 1 +#pragma newdecls required + +//#define DEBUG + +#define PLUGIN_VERSION "1.0" + +#include +#include +//#include + +public Plugin myinfo = +{ + name = "L4D2 Tank Priority", + author = "jackzmc", + description = "", + version = PLUGIN_VERSION, + url = "" +}; + +#define TANK_CLASS_ID 8 + +static int tankChooseVictimTicks[MAXPLAYERS+1]; //Per tank +static int totalTankDamage[MAXPLAYERS+1]; //Per survivor +static ArrayList clients; + +public void OnPluginStart() { + EngineVersion g_Game = GetEngineVersion(); + if(g_Game != Engine_Left4Dead && g_Game != Engine_Left4Dead2) { + SetFailState("This plugin is for L4D/L4D2 only."); + } + + clients = new ArrayList(2); + + HookEvent("player_hurt", Event_PlayerHurt); + HookEvent("tank_spawn", Event_TankSpawn); +} + + +public Action L4D2_OnChooseVictim(int attacker, int &curTarget) { + int class = GetEntProp(attacker, Prop_Send, "m_zombieClass"); + if(class != TANK_CLASS_ID) return Plugin_Continue; + + //Find a new victim + if(++tankChooseVictimTicks[attacker] >= 200) { + tankChooseVictimTicks[attacker] = 0; + clients.Clear(); + float tankPos[3], clientPos[3]; + GetClientAbsOrigin(attacker, tankPos); + + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { + //If a player does less than 50 damage, and has green health add them to list + if(totalTankDamage[i] < 100 && GetClientHealth(i) > 40) { + GetClientAbsOrigin(i, clientPos); + float dist = GetVectorDistance(clientPos, tankPos); + // Only add targets who are far enough away from tank + if(dist > 5000.0) { + PrintToConsoleAll("Adding player %N to possible victim list. Dist=%f, Dmg=%d", i, dist, totalTankDamage[i]); + int index = clients.Push(i); + clients.Set(index, dist, 1); + } + } + } + } + + if(clients.Length == 0) return Plugin_Continue; + + clients.SortCustom(Sort_TankTargetter); + /*curTarget = clients.Get(0);*/ + PrintToConsoleAll("[TankPriority] Player Selected to target: %N", curTarget); + //TODO: Possibly clear totalTankDamage + //return Plugin_Changed; + } + return Plugin_Continue; +} + +int Sort_TankTargetter(int index1, int index2, Handle array, Handle hndl) { + int client1 = GetArrayCell(array, index1); + int client2 = GetArrayCell(array, index2); + float distance1 = GetArrayCell(array, index2, 0); + float distance2 = GetArrayCell(array, index2, 1); + /*500 units away, 0 damage vs 600 units away, 0 damage + -> target closest 500 + 500 units away, 10 damage, vs 600 units away 0 damage + 500 - 10 = 450 vs 600 + */ + return (totalTankDamage[client1] + RoundFloat(distance1)) - (totalTankDamage[client2] + RoundFloat(distance2)); +} + +public void Event_PlayerHurt(Event event, const char[] name, bool dontBroadcast) { + int victim = GetClientOfUserId(event.GetInt("userid")); + int attacker = GetClientOfUserId(event.GetInt("attacker")); + int dmg = event.GetInt("dmg_health"); + if(dmg > 0 && attacker > 0 && victim > 0 && IsFakeClient(victim) && GetEntProp(victim, Prop_Send, "m_zombieClass") == TANK_CLASS_ID) { + if(GetClientTeam(victim) == 3 && GetClientTeam(attacker) == 2) { + totalTankDamage[victim] += dmg; + } + } +} + +public void Event_TankSpawn(Event event, const char[] name, bool dontBroadcast) { + int tank = GetClientOfUserId(GetEventInt(event, "userid")); + if(tank > 0 && IsFakeClient(tank)) { + tankChooseVictimTicks[tank] = -20; + } +} \ No newline at end of file diff --git a/scripting/sm_player_notes.sp b/scripting/sm_player_notes.sp new file mode 100644 index 0000000..cd835d2 --- /dev/null +++ b/scripting/sm_player_notes.sp @@ -0,0 +1,291 @@ +#pragma semicolon 1 +#pragma newdecls required + +//#define DEBUG + +#define PLUGIN_VERSION "1.0" +#define MAX_PLAYER_HISTORY 25 + +#include +#include +//#include + +public Plugin myinfo = +{ + name = "Noob DB", + author = "jackzmc", + description = "", + version = PLUGIN_VERSION, + url = "" +}; + +static Database DB; +static char query[1024]; +static char reason[256]; +static int WaitingForNotePlayer; +static char menuNoteTarget[32]; + +enum struct PlayerData { + char id[32]; + char name[32]; +} + +static ArrayList lastPlayers; + +public void OnPluginStart() { + if(!SQL_CheckConfig("stats")) { + SetFailState("No database entry for 'stats'; no database to connect to."); + } + if(!ConnectDB()) { + SetFailState("Failed to connect to database."); + } + + lastPlayers = new ArrayList(sizeof(PlayerData)); + + HookEvent("player_disconnect", Event_PlayerDisconnect); + HookEvent("player_first_spawn", Event_FirstSpawn); + + RegAdminCmd("sm_note", Command_AddNote, ADMFLAG_KICK, "Add a note to a player"); + RegAdminCmd("sm_notes", Command_ListNotes, ADMFLAG_KICK, "List notes for a player"); + RegAdminCmd("sm_notedisconnected", Command_AddNoteDisconnected, ADMFLAG_KICK, "Add a note to any disconnected players"); +} + +public Action Command_AddNoteDisconnected(int client, int args) { + if(lastPlayers.Length == 0) { + ReplyToCommand(client, "No disconnected players recorded."); + return Plugin_Handled; + } + Menu menu = new Menu(Menu_Disconnected); + menu.SetTitle("Add Note For Disconnected"); + for(int i = lastPlayers.Length + 1; i >= 0; i--) { + PlayerData data; + lastPlayers.GetArray(i, data, sizeof(data)); + menu.AddItem(data.id, data.name); + } + menu.Display(client, 0); + return Plugin_Handled; +} + +public int Menu_Disconnected(Menu menu, MenuAction action, int client, int item) { + if (action == MenuAction_Select) { + menu.GetItem(item, menuNoteTarget, sizeof(menuNoteTarget)); + PrintToChat(client, "Enter a note for %s:", menuNoteTarget); + WaitingForNotePlayer = client; + } else if (action == MenuAction_End) + delete menu; +} + +public Action OnClientSayCommand(int client, const char[] command, const char[] sArgs) { + if(WaitingForNotePlayer == client) { + WaitingForNotePlayer = 0; + static char buffer[32]; + GetClientAuthId(client, AuthId_Steam2, buffer, sizeof(buffer)); + DB.Format(query, sizeof(query), "INSERT INTO `notes` (steamid, markedBy, content) VALUES ('%s', '%s', '%s')", menuNoteTarget, buffer, sArgs); + DB.Query(DB_AddNote, query); + LogAction(client, -1, "\"%L\" added note for \"%s\": \"%s\"", client, menuNoteTarget, sArgs); + Format(buffer, sizeof(buffer), "%N: ", client); + ShowActivity2(client, buffer, "added a note for %s: \"%s\"", menuNoteTarget, sArgs); + return Plugin_Stop; + } + return Plugin_Continue; +} + +public Action Command_AddNote(int client, int args) { + if(args < 2) { + ReplyToCommand(client, "Syntax: sm_note "); + } else { + static char target_name[MAX_TARGET_LENGTH]; + GetCmdArg(1, target_name, sizeof(target_name)); + GetCmdArg(2, reason, sizeof(reason)); + + int target_list[MAXPLAYERS], target_count; + bool tn_is_ml; + if ((target_count = ProcessTargetString( + target_name, + client, + target_list, + 1, + COMMAND_FILTER_NO_MULTI, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0 + ) { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + static char auth[32]; + GetClientAuthId(target_list[0], AuthId_Steam2, auth, sizeof(auth)); + static char authMarker[32]; + if(client > 0) + GetClientAuthId(client, AuthId_Steam2, authMarker, sizeof(authMarker)); + DB.Format(query, sizeof(query), "INSERT INTO `notes` (steamid, markedBy, content) VALUES ('%s', '%s', '%s')", auth, authMarker, reason); + DB.Query(DB_AddNote, query); + LogAction(client, target_list[0], "\"%L\" added note for \"%L\": \"%s\"", client, target_list[0], reason); + ShowActivity(client, "added a note for \"%N\": \"%s\"", target_list[0], reason); + } + return Plugin_Handled; +} + +public Action Command_ListNotes(int client, int args) { + if(args < 1) { + ReplyToCommand(client, "Syntax: sm_notes "); + } else { + static char target_name[MAX_TARGET_LENGTH]; + GetCmdArg(1, target_name, sizeof(target_name)); + GetCmdArg(2, reason, sizeof(reason)); + + int target_list[MAXPLAYERS], target_count; + bool tn_is_ml; + if ((target_count = ProcessTargetString( + target_name, + client, + target_list, + 1, + COMMAND_FILTER_NO_MULTI, + target_name, + sizeof(target_name), + tn_is_ml)) <= 0 + ) { + ReplyToTargetError(client, target_count); + return Plugin_Handled; + } + static char auth[32]; + GetClientAuthId(target_list[0], AuthId_Steam2, auth, sizeof(auth)); + + DB.Format(query, sizeof(query), "SELECT notes.content, stats_users.last_alias FROM `notes` JOIN stats_users ON markedBy = stats_users.steamid WHERE notes.`steamid` = '%s'", auth); + ReplyToCommand(client, "Fetching notes..."); + DataPack pack = new DataPack(); + pack.WriteCell(GetClientUserId(client)); + pack.WriteCell(GetClientUserId(target_list[0])); + pack.WriteString(auth); + DB.Query(DB_ListNotesForPlayer, query, pack); + } + return Plugin_Handled; +} + +bool ConnectDB() { + static char error[255]; + DB = SQL_Connect("stats", true, error, sizeof(error)); + if (DB== null) { + LogError("Database error %s", error); + delete DB; + return false; + } else { + PrintToServer("Connected to database stats"); + SQL_LockDatabase(DB); + SQL_FastQuery(DB, "SET NAMES \"UTF8mb4\""); + SQL_UnlockDatabase(DB); + DB.SetCharset("utf8mb4"); + return true; + } +} + +public Action Event_FirstSpawn(Event event, const char[] name, bool dontBroadcast) { + int client = GetClientUserId(event.GetInt("userid")); + if(client > 0 && client <= MaxClients && !IsFakeClient(client)) { + static char auth[32]; + GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); + DB.Format(query, sizeof(query), "SELECT notes.content, stats_users.last_alias FROM `notes` JOIN stats_users ON markedBy = stats_users.steamid WHERE notes.`steamid` = '%s'", auth); + DB.Query(DB_FindNotes, query, GetClientUserId(client)); + } +} + +public Action Event_PlayerDisconnect(Event event, const char[] name, bool dontBroadcast) { + if(!event.GetBool("bot")) { + PlayerData data; + event.GetString("networkid", data.id, sizeof(data.id)); + if(!StrEqual(data.id, "BOT")) { + if(!IsPlayerInHistory(data.id)) { + event.GetString("name", data.name, sizeof(data.name)); + lastPlayers.PushArray(data); + if(lastPlayers.Length > MAX_PLAYER_HISTORY) { + lastPlayers.Erase(0); + } + } + } + } +} + +bool IsPlayerInHistory(const char[] id) { + static PlayerData data; + for(int i = 0; i < lastPlayers.Length; i++) { + lastPlayers.GetArray(i, data, sizeof(data)); + if(StrEqual(data.id, id)) + return true; + } + return false; +} + +public void DB_FindNotes(Database db, DBResultSet results, const char[] error, any data) { + if(db == null || results == null) { + LogError("DB_FindNotes returned error: %s", error); + return; + } + //initialize variables + int client = GetClientOfUserId(data); + if(client && results.RowCount > 0) { + static char noteCreator[32]; + PrintChatToAdmins("Notes for %s", client); + while(results.FetchRow()) { + results.FetchString(0, reason, sizeof(reason)); + results.FetchString(1, noteCreator, sizeof(noteCreator)); + PrintChatToAdmins("%s: %s", noteCreator, reason); + } + } +} + + +public void DB_ListNotesForPlayer(Database db, DBResultSet results, const char[] error, DataPack pack) { + if(db == null || results == null) { + LogError("DB_ListNotesForPlayer returned error: %s", error); + return; + } + //initialize variables + static char auth[32]; + pack.Reset(); + int client = GetClientOfUserId(pack.ReadCell()); + int target = GetClientOfUserId(pack.ReadCell()); + pack.ReadString(auth, sizeof(auth)); + delete pack; + if(client > 0) { + if(results.RowCount > 0) { + if(target > 0) { + PrintToChat(client, "Notes for %N:", target); + } else { + PrintToChat(client, "Notes for %s:", auth); + } + char noteCreator[32]; + while(results.FetchRow()) { + results.FetchString(0, reason, sizeof(reason)); + results.FetchString(1, noteCreator, sizeof(noteCreator)); + PrintToChat(client, "%s: %s", noteCreator, reason); + } + } else { + if(target > 0) + PrintToChat(client, "No notes found for %N", target); + else + PrintToChat(client, "No notes found for %s", auth); + } + } +} + +public void DB_AddNote(Database db, DBResultSet results, const char[] error, any data) { + if(db == null || results == null) { + LogError("DB_AddNote returned error: %s", error); + return; + } +} + +stock void PrintChatToAdmins(const char[] format, any ...) { + char buffer[254]; + VFormat(buffer, sizeof(buffer), format, 2); + for(int i = 1; i < MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i)) { + AdminId admin = GetUserAdmin(i); + if(admin != INVALID_ADMIN_ID) { + PrintToChat(i, "%s", buffer); + } + } + } + PrintToServer("%s", buffer); +}