From f6b51ee495f744b5afaddb70ccbe785fae2a5570 Mon Sep 17 00:00:00 2001 From: Jackz Date: Sat, 18 Jun 2022 17:56:53 -0500 Subject: [PATCH] Update hide and seek --- plugins/l4d2_hideandseek.smx | Bin 38954 -> 42932 bytes scripting/include/hideandseek/hscmds.inc | 48 ++++++--- scripting/include/hideandseek/hscore.inc | 55 ++++++++-- scripting/include/hideandseek/hsgame.inc | 71 +++++++------ scripting/l4d2_hideandseek.sp | 127 +++++++++++++++++++---- 5 files changed, 222 insertions(+), 79 deletions(-) diff --git a/plugins/l4d2_hideandseek.smx b/plugins/l4d2_hideandseek.smx index 29face1d788a7a8712744a4b83baafcc628bfd5c..0bd8f474145bda3fefed514d4ec3ea0d5a2d955a 100644 GIT binary patch literal 42932 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 Dw@J|u literal 38954 zcmb5Tc~sKf*Y|Ium8FfAXy~J4OC|{YSN?L`3#(d$uzoBL8gL!EMgy*dg+Fd+x+GM|ABFxxcNl z+t#to_S@r1|M7cwh@4jz5mDdf8>}577JEcQu5EKNZ-+?lHs9W6ryV;*FuO%W9&Yo= zy*owxx7T*w<`~hPA~M_Rw{3`R*4kF^whe7_)V99aHmiL*Mas7|ZQFR;e0f`owoPUK zPLa`V#cbQI13N{kx3zQI>bCi>iipVIHmBPwY?Rr?- zEDhKxQh9E>e)k{`PZ4zww=g#m_2BTQ{yy%&e<8vxbQ=QQ!h9k;|Al~U2@MPL`LEc2 zDZn%AS&+wn5C2c-zcZeJ;Q{|W9tIBf^ziihzdWF4*nfNO{%%0v|4w@Oc>4cOx_>i- zg@(KTPwf8=xc+yXy2n#*buSptDx^U-**kE9~m&>8ca$=X^ir=@8B8)K+M#2t?*bd6}yWOtdb_rv~{pcpC zC$jr5C-2Ep+Sx0*vsYyY#d~LO=dNDY{g)93F2mKnN9laudK%5S5zToT4L157#kANl zcj8Il-YnCdz3w|Gal3l2?x2+H`uCYbml69f<4!$s5xa~#{bVw{4##O0VcdxZ8-9;E z`yF%i3GBl6t;f-vvK^G|hk*YUL*JbxUB>St?9JLv1rq&F9siXOzbDITZx%x0KRFTG z36K9Lt?Plyx|1_OlV_f^ocnHg^ht}scSG4HuxtOxZ+P+vO#ge7>c2~PL~}SIjBF9c z_I?>VDBIij+d=W0l)mq>gM!^bSrcI>?4Y!ZFt*n^wu3_5)$6^hS7T2W?%0zS3UtSE za5VV*_b7NY*fkog{yj?T-<*%4IsVa{sAx{Q2qQ9@lT#TDGyaaz{kMYi|Jfek$P>Vs zCjh#;;3Y<~^XlhvqeyO_Jn86zM{!X^e@Xq64cdhT@?M`7lN_?@awTv3IUZ?szhBcCP?s5)ujG<2M zj|uhJa?9Ky<-Y5J%_6_Y6wf=UH1=Jb@gY8d?SBNxB!S2$1pHSRz$Fzyg5xGTel-Zy zxBl6RKZT}Gs^aBwRfiXn_vb6j{?T(|zcf!?buW3wfG!2C)f?;jgj;V3&KYXVTp*H_ z8Qj}_#M7woCO+1p*!d@acw)J}($>di4iTr)l{|KzwsjHq5e)MHtj_c#gA6$}COyf7 z8_RQXA9|dpWu*uc9$WH&^{BcL*#kIZ*}o<42V5oBSFIby%sv|{wwO7uL~!_#QoezN z4|n|neeeMqD-HDvIxo=Aa|06^d+HZhsw@5V3lRrEsR7N{Xf(m8kT*@{GV~CA9~Upf;=V{7C*TfoAR9#Xa6gmg&#sZncKI z`4HazF%!9r&0(CMBOiT%hWHTVS?tk2k?e8EVC8dQ(TINSrFD7KNC8`P&`-Dv`b7KkXEoG?D5SU$u-quhK44jbf zeQtpjvEYJNN@r{Q(yI92?N;J(Ym*dSW-acvklaXBLSjheMb|mQs)sTvA!W;WE1!Uj zN!xHU9+|SbtA?8O%*j3oR5FV%!q&f6eY+-EOy&eSTre5q-np#@jrLEw9kMSEPuMQ11yPK z)1Sz77wPe+MpI^jbUg-!J7_J$UWAJ-w1ggHUBT7dL+gWo6;dN-X43UeR7GqErKNC{ z7uIM8-nbHyufUu4OWN@%zjv1*2g#|Wi>H6iq+vC`U=`Q&gk`7wB($L|& z*F|qNNy9D_ZkKw+Lk0fGc)mhOdoi0gZfamqR2B zpT~?JSQ%)8Sp-$ zb^8+=F&Vk(=A+)4m+DpuiP^&bdA%FD`$~JCDqy{>~qd+R299E{G*x8DNpdzA6z_NqM!*E!U%*wIlev zhgU(UXVAx5q6^|Jy%v48UuXa93j31d0 z01Er`h?0jJ0Id7a4jO1&kmpR!dL2IA*dFAfaDL{p2A%&>wF)$s!udFXL!@)_*4t<; z<3F+FYxW3q%gtQ0Bo5y1jX^m`pDf+5BKlC*7SMTNl_MPyDHq&w98ZN?A*N2EBz_5$ zev$G4(Avq9{uvZ*V+2;`_3zFxkdG%D^NuX02@hkG?O3syz&*H%bI3{9(#L(ef*bMW z6s_A^kx2z>NpEQv@IcWyKzWm~%FxFp9Z1L1QrDnPgkm28qGdqO>X!Dd!rtK_o=tr- zY_ZGLUF|`fb+8S^wVOuRNEhMb{F^4e@m#>ryWE=YRDx5HYcmALy7bKQab{;OlC$yP z`JH$1y4np2&K83TgEfKHg>d;HxJ!eEpDw4wx;`%DLWCZoapPCx(%=$*-Kza|WA5l| z;I0^AWeTuec~T6paFj+D@5b!o5H&n3NVs!LNjx33mDUxVfEFW}hM{vS6LNw1mD+=k zW3^=uXVeb0>6gT6lf3MUB{TN@s?um~9I(u-{?q1!9ovs55?!8OQNuhc~k1x9XS0Y7Yn6 z7h2le?P`4(5osT;R*rO~m`XAqy#J?$=c^sgr^E>=|egXA?8GwSn;~avN5ti!h)|MSz z9GF|I#o51UY~#MM?TpP==VdA+Er9}p{?t@~XD>ImJSY+8q|GQ_n)r+ne#*GOZ~FV} zpHqGiqUXf|;7TUibJT(AiQu{v5 zkTFs=>{uzG`+5x7dYM3qzDyu~yo|Ox>~-;MZ@5bDMEa{H*524Lk<&Ps{a%2mOb;t`{!OPl$V z3oFLVMml*|e?^RNgq>attWa7RV4IzR+65D1YmXmi4{NRrd__Ck1=eb+`W+0zT?LJU zZ~-vKT$Q8C!8U$0i8m0#0KqFfH?z7y@&-P6@lY??;-TPn0hT+INQ>V}9L${oII#eWfQ|UYpK|!)Uzh;%qoEPHOH-ok8Uuzitc6{v$|Lx!%Zp8UKZaUnM zKf?7-Ux5gv=Td*gWQ!90E}7=eU*pz2#5LXE>pe&0`JwGPYO;CAZX;bSpqv)vxx?&^ zM5g}Gz%eSUttR1Vi{kec5y}-gg9jSEpiv*2=B;s3#Ml8~)r#s;7^w+@(y=8i3k~P0 z7g%&}BvZ=;Wt!6ny`6(o3BPX)g$PZTLg7$UVWAlNh!x=Nmcyh@0r&til8RL>2WVRlOv;EcH3LE&EM=BIy>GOGOan4x>vDNqiZwSOjqI= z-US<4QlhXCJo9|{M>N>mFOi(zAe3Xa#3{|G34&Mien{%EtY_XT>Q(OJ^eVhFUaI$` z|BB=$dCQ(V0i3QZkYmmR4JFXa&4v+`97Nn14&bPt46b7RRh?50`L-JTByw%N?XwX# zD@thJJ@P>Yq;U_Po)ju5S*nhOFja3Gy2D%`drOF{$(6?8p;c~Yz22`Z#^a9FR~o$? z^svD%BkEt7-?@yuZ;~PRr@pR_O@j-*C1*2XOTBF?F!L&nPZySv>V7k5Y3kjL5SmW_ zaWTEBC`-ZBrUF5jqam?LQ8v(7mAcLV!d#8DUvFtG_Jmg@2WMmn&L>ZdA`lZZKWpS? z>{Hg6E)H-72#Eu{fyY(?5$Om4l2`28R>}ffxRP5Ac%5pcTCD@>7pSsxT6&l@cqv z+V#j1St_d;r6~P`nT|gq8zNglpFfAzqM<|MfysVOWb~BTD^3i5##1SU#{qrd>kW z0Q~m%1IDlQTQkGJR&UY7wQ=eIC(PMcCMb_?JIC*LUeODtJ8piw*0P=@WE6gkP(Bg# z*nm>uK5(dEYk1e9J;}QBWr5iqBZT8SgY__*?jf6GLr+kb_F~Ro~vO=*k5X!7C}l1=$CH+GH(WBf7kK=eX9eoWl$z*&u+D*30YN zt3)4eY_Hn>Pl*c~-bhicrh`Tc!h*D5 z_NxrhNp=KrA(0-C?qZ{k-;KFiI}b)J`hG{-a3h&}5FmBQU6b+6~Y z{JMNBhupWd-o5rTS|(^MuzdHb}*(T9JV zH~?4GRbplA+*!iT$)#*1 zM<8g`FlGKKUiJ^=^LTI>_cu_K1bwzteXQ~heldA8ME@(&da`~v=SxL#Mdxa<1;Vd+ z6-##BX2&GeSkYm?T74 zSar`sQR@Ks{k)a*NanZ|r)SA)!PI_I_>$OmoecR>9Lo&*zLkMQ6>yEljb`fQK5vzC_}(%c_#TN) zU2Omm$&w=-CuU$uIp-!xji>&a23S{PzFj+$F=HB{)|VoIzIt&KckFOR zh!xK*mcAyT!Vt5xM~571>NGCr2fRYwZIL@Z+drXUK^}T+Qp}4%NFm7dN$VS#h1n2C zwi)UkXi{6!_fYg#0(~nFD_-v;U83eo|4PFP(+eJu>F>nIDem(Y0J;IzmBvHwTsOUF z(YNmH|DEbEhFvalZX6mC+{MeD@lAYH(9ptPVMkTe3}6M3NtN!AL&&1r&Bbx2hfXx1 zz!Qhjgoqht8T)GkWp45>>%mWu?GUuMXyq7V2%efGfVeE;sM>tpKevR=CGAQV7@>~a z14RPq1E)mI{oJ&rMQ05cw!Yx6ebiVOF?L_nBfU3pRoTJea-YobZcZ8+(z|Xti{Hio z6t~+?kX$Amw~v!I7&DSNzrc^$!Mv0JsFDWG0MBBQi54D*CAQBU&}M0?hsZX9tH3{+p@T+*jViQ<4jGKR4rM z?Z%cp>CEg3H3|eU^T)VoCPFHahoUoodPe#2n)$JkA&py70UB<1%QmAh@s{A4+s{iF zi2*3blgGQsqtrvnmYEGYh_c?ob%kql6+2O_B38qQmdUYfEb4c%-Mn5#I2Z)}L<3SRZY^^GU zpO}C)9tNEq?~Gw9NL!3DJ#T);QjZDN^oQhKyaCe0zzrCy1D{LNpK3H!+E|%^+D>#% zpe_4}En}enMYiy14 zhLnhqqyr$f8E}|_(3=WmC|PP%N)ZS^eBLu`3o^2n!`p#XiXlrJj!?EJE6U{+HTemv zQu~{Q(|6gZV+Dkb18Xl|$Yu!Cd7NVcX5kn_y0ot@Z2F9)>+{)xzj`HC5kRuaBDeXB zfQH62x0fRV*KT$Sm~!_>Pi=stX{20pc!GlkYE+@`m20!*h3WZWH80rwyyWzm$}$^M z)58(V^ZP_?n>@|>2vtUNzeYABmW`s@9X3^_u|nVqz@|v(wXl+APLA_U^mMGvTrsckCiAuMZF>HBc zive-9=n5rVLaCN%O0s1}j}Ud=)K-tba1FzieH<5ClO4xo7()%l{iwD%E_77E*1AhJ zsvAN#{J9<}w`2<1jS~{eD@K@&AS0ml_9@0wYlXyCcNi_>3kx`LQcER{joEDi=7qow zXyffX_34OPxnfawb1vocepxm4oiv2W4Q!3DLEp4PO12#RhpLJsVc#@uAXXPaa=Kf% zF-F$NWDA2sArlxdf>nDDed08Xyla3r#})TJv&MVZQM2ZlUcfs|=0x^;o z%bJc5|4{j4&b43!55~_=*0_s`qXS18-XhCgKX|uoW<$qo?fjO1mB~enDz6!6B{r$yWWuw%7dq(7kfu?eoyUJICT4J3Pfs6e39>5Cx zhj$btR~4w;5AIBj<2#PqoFcS<`Jol8OSzn4r+)ryWWJSCO@B#+J?Kn8iokL+$IMcC z=)`K0-PXfk=t)n6{wznlm3NxG;~`o7IQUb~yKo`&2b%{?wuI`|(7~YG@Ps7-6Xd(M zzNtCh)xjYT3mLvdQk>7Noiv&r=Tkm_k}+OBU-KLsPGiVN)>r&cAGDnDy3epYIUO^n zX-;}cUllCO*?WAP&#GWX@i^%{xC3UHLfUfMMr0wY_QVwI&Pd{9<~YwKU7$Yai13D0 zv`iIGYW$(o8DRXXq=g3g$tE1niHJB5 z9|t;Z_d!Fn<0bA`!{9X(L-3`*s!o{R8kipBOh^gxcJUV!(C^JmB40+83GEI{XpqB5 z{Z*ATIxwOPjLtkw5731*7kuIgdk>vra~GzWnK`s+?&i6WZ%wjB(NI@0-P=pnYQ%SL zt^v~~3$JEg*AeOvEhOKd>)S`}yAGp5Ce{bvGAmS5pg(`I?mq)MOQsfDH59r#;>Wc} z>qZ@kQgvWlyZSnW`!LuMii0xzDmsHQR~a`FLS25sKE>v02R$LQCXUwhM71qn7<;Wwi!xjbX4XWd2MMo)DrhiMiue1DmIE(n)J@@GP(t|IkODtv=VvnDp91xEe=Nc*za4GLKPve?CvSw>o z(wmEDx&SkP=g!@B_?--~)U(Rm{%_tE1&Ajtw&T1=5Q?1vDouxMZ~ zt@n2dXo>yGi_(y1-bOi_K#Zesoq?$=qRE%5%A~K8? zrEGy17?(zh|Lx8VWOH+pUxU8F>OyceVy?ARy>>`5#1MXV)vxdc?WZ8bPcmMM|El;x7m>b#4Z4lq;+?!nxN26Wy#_Hqtd zE%fZiakrZdZLMu{oUEYjd!0-c7nasmfP7$0j+i{D<-tqU&EwB%Sm;N%Nl8o9Rl z9{A_^()t&OVZ#c09KQ>RtNB!M><{^*Mr226CG&%^f0QvO9pl>0smm!?hQ`?utI%rT z$tfF_vbrZ;|4ESj2{m{I4Bwx-NZ0duxMFgUEtpz_vPMfy#s=vIZdxlh%Q{M$(W#CO z1-#S_qhIZ#f!qlJ<7g(71tvXdWF!BCyV^7iM|6r3$?j9A*;T6)2i+f_; zw#@~JmcUsO6RC&jkk==T=u+H7T@a)rH@98@MU}_c8HO0lkqpc!LxEOsuL`(NXjM83 zwZu{2!wB}>Kq0lh=~jra8MPGpn@-@(A%pgi=~z>_U2(z`oV22@S86byrDzO|n+UK; zn8`rdX5hT*ArP`}0j>s>2Qt&>UMG^yTcsH|yTBiGXH~lTZ^k@f&t2dl9y97e_vGH; z=8_88{1*)PUzq9E=P20ah&Y_na3ziFk0<-%2`)v&ziB9R@DUI*lSmPCdQSYToh=GT*t6ms2@8+D)6U)Bv`(r z&}K(quZXTMKK~nPi)KcU)2qEqx+VF_09xSQC+9SLW zW(b5$(Hr>#o>SHM=2N)p?YpRkh5cwytXqP@;(i*vi-&){Xqmw@ zHFhM=sL`Bef%RfT%fl6;puoqZx5Bz~f*RfElMa1=Hu3^a`BPygTr#b48bMo=eWGk9 zOI=9RE>K~-kjsl1(akOnGRNR2qo3npC2JF@72MHWPwe4Z6c>S}4I*_GKQz0NZyGc4 z(rqK`$j84~kx?#!2Fkj+E=;<8VzLi1ZV)t4L>cOZPmwQtgUZWiR#h1hp?c5dCfY1I z`ilVsf_z|24}sv)VRu+J9Is|FgL1w#Y9qy>I?boSAnk1a-BscX7(OJx(kk<=w(D2I zNv8SJ7<``D&pN?vGU~euo!gwV3$Q-2WN_puKtqu71jLnnhdWQZ|9d={-34;6uF_+o zF3wzC1iRMeH)TxB$z;N;z9vFOx*@MP8a=$g%sDzcQS?CzN%(L=^t)0&_w*kabF({+&Y+;D;PET?_=!xB3 z;|+BT_|7?yn82JTm_Rh)n4^|01W!jZO}r!2Ps?zqQ7%S+T{$^Sue5Oj-?f0|uf7(tU4v2rD%Wq)ja@G1(Z4H? z>91FvCW8q$rBCD4)1dqy@8>hqb|cD(ll1fT3W(1z%!&iG-XUi{$i2X@iaYxWfr-TJ zP)cHu!>i<)om&WB(M=agn0X)S&k)65E0A&BuOq&|p8!gkhwFATN?o3*a}*X+%#Tmf zL$oH87Q!oV5K>)%Iy)#2U^5EFaa1Zn@TwZuh(0sY6b_z^Fkgc6O;h8ga5&FQ@Y-Xmx#`zhm@6x@9WOlA~ zYjV87tjjgwNC1VM7d|a66tLvbt=VC*Ky(D6k$OVPWtrUEx77+!Jd1%p+YLu=Ml1t{ z8{RYsy6vRd=k-^IM<7R?1-=ZU_+s2?j8aPVPtWm^T`Z2uf2K8|o~GbkMDbpOoP| ze(&S5`pcWIkssx-nu0G93q)65h=6%chu4vSI2RW?jcaqrjm#tg#m@4|5>CFSNS*!i zm{;Yxu*XEWq4za5+EB-1;!^i?Efrlw%Oqq7dRq<^=*_zhjTFAQT(#xt-lVoWEtf0a zJgoaTn8uid(tmQ}cERU1@}XqV27u`tZRg?q5F9dBmA{2iCRC^!Q%AP$fwvAcgE-PO z__Cbo16eykx0L&S^dg%?);J7{6E=q%6fcf39HpQ78mIPECc;%d1z^aZxGv5#^(7LsZdbnx6;_M zG}hBKK2+<44zRxps|m?#=`N%%jf@;CYjMH4mrVb5_7f!KzcoF7R+e(xJMh!FLcnB#`UE&)!pl^VT)GgRxu_GM;voi#Xf{o|wKpP4^a-@kj z+_OpM&j-AA#b7<3BxVa6z!RT(e)z!&j^bV|0~r4V@;-H^s(kXb9@>9y7mcyDS+w>0 zoYx8xL*!?~pf&aeCmThY;x~`znDg_|0nb?P9>Oyp%@>Nc_)L&WnYmopnFj$f#q68Y z0DjZw&59DWH4CKxI}N?{_Z$ay%bmUrTR+SB0QRJqUlgnK`Q3h}Qjl*4bVF{69R%g{ zNK|EbP1ejp4Bflrrk1EAn{TAeS?r>7qaItv08GzfN?t$6?&GfOM#B zRV$Q0HJIU!_o!u()(rW(P%ZU%MiSBy9gK^p0%?4#k=vxR!x4{D%h|M8e9Cn z8#~;beKQDTrm!LH1C~Js_Ds&Dr}5dR*`6mm2PKFzH=xM|M@mR!hEP1cg;4f8{T*Et z&4BHyY$1DN`(Q%;mrDM3Y=$Yq32x$7l9M=N3CA(7S@wo#Nq1%=|Ayod`h#Ss|2AwI z2i`aEz!pdPn*5yV$^;?%|I`Ei8p|6C2aG6enDA#Ax*>-gzTBzgNptLT9YJlG3XS?V zT8cKI!YiH{Y_Ca3>M%WkJ|?>mzp*slR7iNUG%nc$pGf*8t_kjBiK0wpmq?W?S4|J& zu>dVu-T}oLEaJ*V{8J%%R}SBOp}TOw!}CiT;L+517r(3G#l{97)QXDq_yNkus>_CX zy(QuvJ?UWp=c9qI#gqmQb#zRADlr?o7a8>Fy;BRo=584cn(cAdS+4u|z3CI@n7oA> zmx?M8GEy!&a4ow#i!0(b_r|uaP}vHcdkvx89IO&tHFJbWSJ{`GPe$C67&qysD~T0N zdGxPtK4^f+nJZb_hWXx)IF%{!B~ICr8=3cTJ;$L7m^;=LmfJN5%pU8C*k({}*U@mE zw|88RxmSFTc}ArHOxalLs#5OhUK<}>u2TkhwC?ddH^?a|6K>|7Ri&9-c$SgWE_VK6lRm)!|2)BwJUesGzA{($0$iL`6!crnG=0|Gf_D^-*ad{Pf z(YdDZiEGc}`pP16CxYgI5#$*RR1MhQobkhtApZ_=le!Uenk7GjrTJW~|aB zIs0C2VDaGB+;8=ZUdnyV+4sY)&%Zprl3d*9 zp$=(XKmQ$Y+Z+=yR-3I6+@0I`q0MJ`(u$I53iPRacv&UGj709ZmY%uHQe?E=H;Ml_TKgfsenl*6a4_0HiS5QIx4dr}@A>y9hGI`CT@+0gmd4!alvGfloz**MZ z(b*UmC+-n9IK367W7Bo#>Wyl6DAv0%tH;*lVFu(J=<}zOJU68xVSD{OSHXaXGW2Y| zu@^Y(nNUewVbHd=``gTk5K?NTBN)11+xC^TXlU0SfVqFIlIZml8LF~Z+%FJFbOcvZ zpK-oDWZCOzz>QP-GSf-Nx_ljyR4nx96Dr}*GJZ{u{5fSw>dkwu6mGC4d@DF&_4#-| zZwWT5@6I#GEAJTU%1c*LN5A$zNx|&zK z;mXdIg|(MZ9RDlMi*o()V_k!n+GwUtS*j{^pZvc)Ua<1A=6BYeP!n&{YD;h3uax+F z3|@aZ>JiY|+$;8Wf9dYQCHq>#tX{vsd$CV75t5qq{x~`>HG#4c+tA04;$ILjkD=j#$hk}f{R}@!kYW7q6Qn;26?DOTk zil_??p;Yhn=XAbf&U!?KMrXx)vkxcJ-##18i!w*3rX@*acuXktnZE73_tWWTwXxX? zinT-8ovo#z;ir}NGx*VFD_;?v>#WV2sVP&_mdP?{$;-s1w$)$P*F6SSbJ9h{6i%?Q zZD{!%;pZ@}D6lJ47Ch%N@#m6~zL?L&z9h+C8p-JO;Hl>^4p*GMJzwFQzj#ean;->0 z472koQXRTuV7-go${UdD`S^VIa6{=utzukOA$zVT8`y1n;XXhd~+PvW_& zIK+dY>KxNXc?Y!#B&pWOV3&394oSB}|2pxTd-{L)Rg0K?b}l>zvB9TIrVM-A45}$c^=0p)dk@``nXr7=x!}|@u_QB9{%ZLdK3MtWtjWH~U)0)+ zW3CW%%Km!0L+--hAn@)7{*oETdzaB43|_WbCprVrSi4Bc<8+T>kcuNgi~WJV%U`wo zlt2nZWn8&QQ#O17KWI|?>`U%Xi^iIXfQbju(gPU@#fFzHTMzYB4cBXQ-mRaV6X4&? zCI{6?bMAPcdoPkKbv8#6n(B`xJr4Z&?r})g2t0R4?4r^`bx*Bw*%!aQ7JR(hjLnas zIN#^y0X~Ca&D=!EIba$94d17@`TUr1zIgE!dU;ZD7xweano9CqQcN-GbV%*hvjvvM z9@;UV=|0LDN$fys-=e8LxcoN1+MxO$sXzMlw&4hI^=pF2ID#r54Bk9S{H>5FTe?xK zigd-TT#~S>h*R_fJfjIbyA>^(#5IeLJHF+imJQ!c%!_7{dobbY$l*KtioJ|qu2GvFDous*>aznVt${`=Pja^~k`3`NYj`gmDEcz&o%tI$_4QP`95RkF;*e!`O2ZMHWt8#l{=m@1 z9UJ2#TeVw0$AA8H5M0ZtOaJlao$2G(MrYZcmEG8z9dnRN)=w?c*U0#Dv(s_woWudW z421W$n$TO_&&*T%0L(xSy5NkLVeY+LP;T6yk6F;x!Rd{rsp~vF@8lwRX=^zXiB|+S zadlW@YNt?bHY%M3i=@uW2s%B?Uub5^blJdEm(7$AcCa^}o)xPecWAq&9-eN_d1l$W zSJ<;WB1&^CySe;e8#1rrCl=zv=`i@Jif=ro60i<9jGYS&@TE4299F$~ROVruw(> z=k6`Udpt1Isr}6OVgy&eQ1ih?$tt<4=_37nnx=8V$vT=!S7%)BT)mN_@;Hz2rLfif6`9Ol(wlWWXeGKB>3MsuP$bjsP;~`XKPG8FZRd6wlC8_NBvLel7kN}iJ*5?JP zt-hAKLU@(Ty(EgW?CS-#H@7&T8nq_f{>ad*SW5*!BbQr;MLflI>lBUQ3)9 ziW&Q4P3iJibPw!Fiw|li_95bY>{)qtynrL_k5(=kKYPvC(_?+2z4Z=2aa^v-fTkB* z+WBQC(p(Odm2N&RleTtj%9?p=sT^|mO?o?}>kI!Y;Xrso_L=Dhe+NSmOG;mT`Z0yM z`t;WyR}a)`dh=#|gG5g5Ba^`Kr-8Nde$Jzy(D;4+twDZL^B=#W0L!`WcReU! z{B-~Ftk~*{S&8yf#eb~a$1WQ6xBvzW@h?5f&KN&lpGsv1w9o9N$}y{_37m(iy6F~f zilwq|_oI}|#)y|}fcYzf2NU$s1HSV9!l*xo$^>Hk@9Trj=I%B{9%3<_E|?gRV#@5zfwYE-Z`2>c7_!1NYp& zre*ed?VLh|96E$u{Y%wYc!t_@J-)s^21v-sL3*Q^}$=e*9k@FO^Y zU6zx)LNPY6EiuBOIlM6_a()AF1i-*w&q97LlDV#VSkUyfidX)i&Jg`_5P|(%XjiF%>53%Wb~}yo_p1- z2e8oSwCSmAHSgqym>ZK7@;XR^HxPA$s6P+2bR7K*SV@nRwKOONDfis`YSPp*1Eh}_ z_|>l-$C_Nqz1Q<5*NG`*ZLR)A!zsSn^Cz()$Ay zdA7r+H=%397z)6Fel;Sv`>Q5^Vdf1`3SU-ngbSfz4FoX4KcF-4}+>UQ!sJp~gWD&d#fhMKydV zB7OU%Z8+VYhHYhC?yHK5_$X&8HtbfTX_ePrigANv7hLhz7`VE${y~s?u;JCt#u{(l zdse5WHi9&I?8x4AJa7dGGt86UkD6K`v2j~;8NSP-l^}q zuA6oE^}bu@_J-W~NABQ1d*9xVeQ+u!BrE!E)=QtP7YkSr;g5H!2h+x`HvEN&+fYYwe{k=AJ@#kpEv)Z z)%#tw_lKeCKZhjU_AiDi%>BP?xZSG_bnJigqn$9g8=JpHcfEfh|H$ol#}kfPaorMDuk?`!_?>hi6#2d=!ixs&@uMDzYD<#(;8-nH#EZ#{0_ zcCfcqrnhb9pY4A?AJrwNU;iK0-aD$PVC@%{CZZGtrAP@Ny%*_CM5K2Ckt$V?j&zcM z2uPRSiAq&KB=j1Jlu#9rE;aNL2qg(5@a5dQ)_2dk?>X;zUF-hwOJ-)z?AbF5A7BpP^h=d0LF2Qg|oF$xngDoL?hequDY3?tQ_zmRp8X& zY#Q^gmDv$dI^)0Z*(bw`;!gj!(mxWfAgEY0+mSy{cg+7WE6&N7IH8rEf1{UI)n0`D zS2p}_v}}#)obq4sNSN#^m49wYyw{!o*4mAOEcb3kd=dT)E6T3S0cO;M&-2W?{NdG&nL0$uQ{pT^+f3zr(zYYG1sqMnz z{*{jTch-dbsO!gHjmY}%U;G^fB6cMIisdj{%VmG1ijE>yUH+|L|?(|4lZZ2T9uep?l9;CRG$uD;x>)xMG3~ zX}rg3&4?Q4%e@5<#7G1Ii zuV*e57Hqm3<7^IVDPgE`%~@}b4Ehw0)I#G=uNc3$TPzrka+yS>IqlN*3WV*oN4)6B zW%iMI&d8>}d35v)?B*DRNq>J8@puJOs7+XW$qm_dX8J9xb_{h4hG3HMv0U#zOz>88G-oncPjj-P@JoTO#Ie zjGEP!wwCTe)Ha3IGAZW@QnHnKvn>Qorm|ji)7twq&x(y>>G1!11!6(e+VZ6$=A>@as7bBeskxaWMDFk(mKkXkBKeD*EG?p)ObD_KPE)mFp zY2e4xct8(fDp|wkxnPpDt5PE8sZ{mOr${Mr=iyj?%kyPGI%u->idD&|3bPkY1n z%`++wTJj-vX4R#iZ*buC0Y{THL$Rxx>(`|O2EpAzqG(9(V`yZNH-7Ry=8_dc~x5R#>z<$Cd?$C56>L2_au#YSlfV&Si~#b zo?ZCDwpWmj_~6sprBb5EERd3RDdpHS15W5rdtYJ1c5p>W!2nB4_EU}G%YoF03`VWI z;ebe|xDHwOC7I;%(Q$mTT7FGKp`SM|;UuX>;x+VpV#|h;M*UrUgEYH@24-$z!r@i0 zY_`@$a*2s$CF%3VbVEN!+RXKt0I%J9FI#FH`GxZl6Oo+R!km5OhEZ%L*M*2xD>Sp9 zZ(h$Eeuiee3APlm(9cRLP3uwOjTVd+cAFo3ux>AJtM7$m5?OS~$mtK`v-rlRFt;D( zmUmTf88G?>D$HqS_M-8F+yc9V!5auOWO7chU(ZKfE1*7wdj+V{lK6697y5IVa()QJ zJ$2nea=~_(nhn4&prH8W`MK2xz{tVTxk|PUua4PqUfoIGotvtBt#EB_SE-LIKC6lE z^M^N(Pmua~oUGi>h&Wu<**@_O>Pi^Udw*_~iBdF%KATJ#kKLm{tvk}5?rG&SP4*@1 zPoC+#<5q-k_?k`SV&Bx;zu>n_GOti81_leIjFxyPL9O^XMz<{f*V;$#_%Nlzje21V zQ;)s}Yks#bf+pmiO*$0u1>~+x#!nP| zL?L0cb7(f`r&(&cs8zS~SR_k$zJS-`IlmJ<|GT%p-@|JXG{tLrI^Ciud%peA64$;> z>#$z!5x_3zEA*fmEhv6Vajt55e-h2?W1w(3yYA!71!3T}hZngG3nug?#RmkwS0#K1 z6TujpDuqjNE=lq2<4<-6y-(G&OsyPtS86omJDq=#xRs)u!*G*w-9$D(mro$mc70Dw z?Z8SR14fqOnuRLRBH>$J(!b`GnploF|6X| zQuFMk^M$Rqa(Ew_dQ&hT`ND%ygH4?V(Wc?UpW(OKvo^2XJ0Xmj#0Xmp~HsZZ3m;|Eq~^XL5@49O_D?3k}IIzIY{ep4KT z41v6?yyPD5Ztg?!kN!e4_u2XshAxU-29CPea(Y_-*fghF%aR+*mr9tH)3D)5mIYub zP>1y00FA(9MKp8tQMK&m=*zKYbU;tgrP*BA=vC@*)RI)f)sI;mum_{H`kZRkhxH4q)B~AtPdoYI7o>9XE}1J43tRq`Jht~i?K-Euor z>A50m^tm$V8tXEf5ynLl@pX&#Ff0omY8;k%6D@`h9ZKUw4P)l{jv-N@%SDH>VfUj~ zj>V{}I{}@LF57Ny4CEs<5_=on?HR<9)aml^rf7H8vZ*YMZDep0<&~gSm_mpz_>ePU<<0lJ~Xq70E-vLv@S;Mi4`db7|V99=s*p zrLn@#_)Z`{YAG5_bwxzK%!*O@w7W^UX7j#_Xe)*#jM^rGACq+`g}FYt0-XF^@6GET zliW=Q-|4WLy1%ZBg_Dq<)37RIFlouN(~uCyrIj-3`*?i0+MC6ax;CM*B$u0HEs%9c z#$yg%5WOG1dGT3ahX76KvFmwuSKar=yfrPCD<*H$$%T&WkpVL z<0F-t75E;^)B^iQF9J^$CAeCkm-rF{y#0+@=&j$8pD$>4dRDsGTCy^!Q4e|qehqrH z*vM-IvtL3 zr|s|Vy&BqHV`mr0S_j{3j+9TMTgMMxxFeCkPSh;a#AU@?-O3Io>4uGn_J2Ms`6{ai zl~81@AZ(DH7~ra|^VLDN4JI@GU|0u#QOO}aN{K`&MNW~L=W{&Z%)Ha64w(71ChPr8 zK!U9)_Gtt1JJdRXficuk*x)`TbjTtPFwBv;^W{+u`zpge_eZs_@3TZ5J!fa*E37qt ztU2irfB0CYJx(WA_hZEPdyY+>c8RnX?$bO8c+a;b zvH&ye?Y&DT(nx2as3R7wDv)3C8F+u#(T{(qK==klw9`duPfXP&-P1_bsgG=CsTX?_ zHWzgolUhaPh zEkEY^xz-NLC|(QMq!uPDV|KA`H}4ZcfxG&VS5cqKsnF^HPeKD0>BLF9U&WjTwtnZJ zQfPcxJMy}=ogwef%%11>S$_c4O|^dQ^Aucc``Pdwhd5E51aU&unXdEW7xX1cPJ+;T z@xW)HT&EqZj$@Z6H9b+0@bsFnmr{w{W_1h!w<#`~-|fZ#p=|s+L~}&&oR@bBm15oX zB-eORs*EwW-Z=}|mfuDeG0diE18?St7#7s&@W=9wM=JaPq=>gG4AhpPB<@cY>7qqB z^f`(7#k(8hg=1Y3R{i8|eibw3PcjTg@9+J&w_n3X#KWjF=lZY>=CqRz3HV%Bxe%=4 zBzUZ$I6Wz1`KLwanc6%av?~`2+7FdPpNtFW1fEG2l1!~V0X#4jnetQJrzra4RWRca z_>Q+Q6^I44{?sqj1@tg098*oxNC0He8t)99Z@h*mnYcB9X6`3vrvy*7e5Or)A5%Y1 zC0Em86?)JL;MhwsAfoagz2E$1kz+d#G|=0>zX+=FI@YDDws4wmbu_Z8HVE5!*K z3w77uujRFMa)IGkex&Lvcv+(aH{GIa>}7KMC(0``IvXUJV=4wU)J8fBcALe zWJ}32w5_(?wk5Cs9#q&e0^sQSjMPtuVh2}<+l|!gYzrY4za44rY4>QMDr8XC$iQO4 zrH0$BXGp1&*S}&j=X^3JcqXvfrbwNcS^xSa&dKv9*Q;Z9#WY9(UW zt3vYNUT%5@z$b;5Z@Xb}*I_bSuYIzwy-Z*m7+vP4qpNt} zj(69=M>hV9+x~zDZstrrM&qp}&q(S>_$@yxTcWld-hIxgJ)P>x_xK$0rC|P-92?W9 z8Fg&4_-E(P#aGbE^;;%7u1x%;m1o(~B9_LF6Ib(}u$Q2F-J?nmpKxf9rJqVu#)G@p_!(a8mt*tcS=z6V452lSHGMxu09l@u3%L_ny`X3 z{26xo##@s?`R=#u@3kw0_+C%c8IMcnmVf_HC+AA1mp74LtS3BBxy7R?T>Fvl?PsBf z?{B{4+~TPmD5n^zoR_btnr{)FU)*h}zEIp8%~`sbf9<6LISVP=RUE@FTooc=o0p5i zhq{-u6lsteka`er{!?JQQEr2n^ZH_W8b%-&b2B$;q5{K_w|N$q%M@^;KNN+^PBi}( zCLQwUCLG~c(Jq3ndaEG2Qa8cza)i5&{J#GLpR>j9!FcSLI<9PTk*&hwdXM)uahsqx zYdE~ZP3)a&zClHz8S`WE(_4y`qvuLb6E+`5>5Cz~u_rBC0uaCFMS&z^Qe0fJR|VIK zervvd*dAu)u3U89Q9OaE8!h>>is!jCl@)eijXRxa^VReItz`2STxycH|7SYpi265UEJ}w)(ML)Jj`rkgNlw9yVIGUDkkQHBA;2S@>;6ehvJi_%Fj>-rO zr?*tL@tAegP3=shw6%LNTEb*4O43L%YTnO;%}f$gO&?mA>ZSolXGems7hY9kC6Zm= z(@&Wu354|Bq%*2ndb8fJ5@iIlVAWvqP-|XrG z|DpS+9r3uI6H{&FFH(ZOUAUHBe_Z?3S8G9~>rI)$?W-yDm2sib`>Pe!W7%&X!cKB8 zBL(A6?;V3XGHqvvHbqP{Mk_6@`<2a*0%XPMbNn18$E-`yFI)15zYc5-Ji=|_aHUnv+s-g`|G%^)((pub1Cl{ zwYQWUVfx?bO6j#Q(u`yo3A%XD378rx%6H8=IFLzoxMd}Y8ayM)PlgGQ#d5a%B$;|Hd-mHLZ)Sr*Zw8re%Bo=6lc!%ho>-`!?5?VwT{FBY5T)-F!P+G>~E z8d`9-JDQSg07;mo<|*WdZ46aDf31Rn(~0 zW*-%t=|>C9jBTD9+lbKj(c_~AON^E(vz_-Uot&v17)QTUS>6a_sFiS56FhbqBn@DR z{YCG$P?-n|g_>@ccRQ@SS^0G5S|QojkDsxo(QM8?X*U;wcDVfy?$sR(S9W(rS$($G z%f;}kwDu+INfw06=#))&eNYv|CN~#1`Ft9C!8CRL*iz8ru&Sx1l$NlitqKYiaH~RE z^f~04*Ryy3Dux@h+S~m8oZ7;)r|ve2ss8#daH>i7NNrTC-tnR7Bx8kh1fP&tnlUX~#9bah%;I7_O*Q5`1fwlR{(T z4?gf^)a&EdoMci|iV~uhKY*z=EjY|7%JnpZdyh7^WpRbeq@?7|mYW|Jhx_OKqeq>j z!ESVXakRzQ#g|d>KWLv>TUX`iGYm@#_-Ez-`E+dF&0`z()i)mGXZRfzO0R7UYf}2i zEy~hWWyPl~9GkV=<&DoHT@ef)kDlo=`5hUMlq4T}Ye!C!y*v%FqE&ax{f1C=X%}hv z(}KKY&8Ig6waxP16b6Z|L0htwYdk`%XrH8uA# zKrvTd-0G_t9FRUv;)?tD^ZN*k^(YJ9_hN}16rUyCkG8KFK{~9f3wp;X(y#g<`ZR_TO|nKFZnzFTko)QoAGo|dR^gb$m)HO*Nsa_w2dKwheuNv zcVsi_Nb72BDD@q6;@&@E6>bm(*f?H3z2alhv5k&04%G+%6 z5RIp6R^KZ_PNamgyh3qQ@-d}J=y(q}Y@r{Z_TF*Z$~zlL1D7LSE1ztlP+ zD|w#X>TU*4D1D`;1dH!#G9{s<)pWWGF$xgjnOt|m`e*PsvkD4IGf~~;cd98_ryJtk zAPg#Zis4RYYqm@ts}!H7kna@~E&BdpdfvzJ zEaA@cxcG#Cc;KwDV?B6Vq%QvHpq}O#Otd%QJ;leq%iZo}jijYK9uu4SnP=28KrN^DX zaK5hXo!JGkVs)@XU8#v@=sdVmaXT()<^Ce=6Fm5#?C#1qhPN!+3x0FgZPx^8b^J+0 zI&MP7b>TBNTTQQ3GVO7W`c`k-42x=SFD==HoBi?YSMoy6ooW%ZY(Dq!Z9$Ip5xed2 z!@gepJs3Bag4uFX70CKnw%k6k>{0JT*}c*CSGQ^KLDM<1^!*?1&@2s-)ujF)*_ak~ z+R!7tmq!xmwj!|TVFvy&sqK|<{RSvjH-FUPw(ad@8Uf;}#=S0d2_`!-rUfBG0?3?TBrN0WT zWVcfw53)y{3;Z(MSaN{_)|F3H=M#xAiACb@ME8 zt!ty)lH>(tl9pe&-Tyr(K{udvUNRG!-9Imo6Py+1vzj$%By~9Y>Y|UfjC+I5+Is!% zoQ3+aEO>?SSx-UIOwDqZlr8W#>Z!v(Sl9ht3`#xWovsdx>5$w;k=?K(de>lm3wr z5%`5RpOd}&6-E;0V2pa(wgmM4`NiV}U)+$<9ltz3m!HDUlmcV%CgX;}Q<84g)K8+i z_;&7|?EU~e*O%Yhl-prEDbrn0aZ>S1c75|%6z2-EX|X+tS0EdES)pcRxKTsruoC-H zdI2z~1HXka@?=j=e!sDQuUgCI>ld{`SRoDNstaC%C%4f+d$B{FVnvS5fseCOc~ni^ z_-BOc)}#7-^>@!brsSFyCY2IGQDqt zDjaYPEMP_t?VhC?7Ia(ZbArR+1eoh(`nec|%9Xf=YnRs7kVlM#j?OwaV2F$EYUA)zl%5S=8q*BxwUy=^f_lhwN7~J&vO5p&1)zCSX)T+?y8ESj#Nf&wmqmC zz1!@}8PeYO#ojhP9ZIxOKtD9?X-IILflg zvh0IHa-J2kU(AyHmpk5{_aJ~_=KhxAT;?MA?1ZtQ-KHP%fP=nKx$%eIG3lF45E;L#U%{hA)jr^+fB9Jg6U=I@?b zp3UV<_cdF$cggE}tf}tTRiw3amm6W0nKkcKFPGpY8|8L3+$>9Mo4eS7$66TSOe0Mc z4>y;RwRNGZ$$n?re>VS4h{r)Zbg#nU&2Vw$(|pKly1MNA-lZaGqj;?sx;(8zJnrHa z@tffKSWDeGw?3>Ezq~Wb>{fp#kFPk>wt}p!2VF}xyFcrwS52(7Zu;tT|5?)N$Dx-k zdMEb2(}}W64s;#a2!F{@m%Wmu?7d#pR}W&wwDzer9Dm-8J}$A#%R;>y4yoocqb4T) z!fD+$cE(O$lX6(j?vKK}=z6oc`i^Bhx*5}YLD9#+vnlbkUgchFNoa*TPb@I$7&-Gq zf+q#fw27DglmK^J7wgn_&38` z^{%qW28!3ZW_hv4+ZVgpTCcNK+eUc4i}RP?+!UREBF$4%0~?cj)UWGo8MjpZJ=R0l zZ7nSLCr^`jbK<7g{1X}HH&UzT>ECG=vq}4w#wY}j5|Of-w(WZ14zzOuFxq8VbarJx zy=|CRcws3coN)Y8k@n`Pb$aLTXia^niT7+8?uH4O216f@>K+n@r;VY6E}79 z*Sruxpj5r$HA&A?!IUHlf8Doh7YlZDyV+0rkC{E*vhH>sYq)=A-3@EBjSXnabTVec z|K?e&(JhobO7a+kZl<|&vZd{_oeADa_UG2X{&Ju@mQbF;O6Ps-mp=-N(VKKgEliOi z-_1rJh9&7OH~_5e>Co9({ek&ouyG!gcyM)p^%LbJ?*2nE80|TR*-3)n8Jz;eVv@w` zBsbLB%d_P}EuobRO^FS`gSdCwSIoQFQnW(7&NG_&{dkc0$!b#NQ6`?F8m}C}$uQN9 z9k%BgKQ$ELoOBnUO>^HRTfFw6g6u~wl|gNubJqKYP{3~QJJ@h|>ZSfoz9VFMc{g?A8EPds&lwznVx;- zx`>6R3dK;QGC&v`$`zvFW1ZgpF5E4Jk6bu4g>Msv5>- zzzC1xYi>x98TwWmiqkNR&8*YNc5n95q{u?#ya_hcjLlk8)9z4IEG8XxP}A;K6fb@< zEcsZwkI=&dLO1yNk8vMpB}J+E<@|g!DRT39b;sL;il2;>aB#owd#pXvCS6=Sf{aOT z3U<+i=Ow>O?}VcxwDR-Rv=PNhb)%eg@+y@4U()cyKSmAIv=0=$6KECXE_G45fTAY` zHvNtUNdP+K+CIMRV}y9Bb)6cA=Wtu#)pziMN(@hd%z@N-o9oiAP4XBG2v}hoN8_LY z0RWe`j(hqOl|^;s3GT@Nia{sXz3K#l)2ND~v5B-%w4D11!R=Vl*d}j5AglN}uCF># z*)~V&T=5(4%t*}IT>ogqFjQ-i-f5bSjUwx za0WnTe9{F(rUS#L;{^T%`MP$xCwgAH9;C#JrD+Bd-sz^g(t65paZbS+L+wR8$nstV z?S&diLC{I?6f7$XQ-6TLRLAZ<_l=SZS;Jub=i7=PvqcXrm)Plc&_?*2=P-9$ta<1$ zi_?M2g#<{cZ1af?SR2yJJIz*`@2W@*vOj>hCdB|R{F3Hg%Svs`I(SO^NqH=XDP4qw z>e?bVfc{jQKUgomTC^<{$@*w&%Ub}RYGu+_5VLiu%!G+uex z083AbSer-+?myo}jw6XX$XSS~&+ED<@Qq^Ek-!E(Q^7ttXyA+lJbFf=Vt)~#=B{$+ z&;YL-+SxQKwc zT!{Mw*5Dlw<{QLUoo6Ihgc}Fe;yYFTk>(XZbk%)k00@;O2%ZS}zxfcD(;aWfDl(XboKav|PO`d&I=-PoE^Zh0okEhEW zCk*IR$WY>oGmr~smb&ZDPKr2I!J~~{UC7Vod(H(5d~H(=#Rr7`k-hO&^11Eu-Ar;TY9XS&@TyJ# z<{mGG!<(_Ga9_`4&;2H1L3@;$J+Rq>%w{zB7LI;XffQ|haw{TGl8vm5T$Zve>zL6u zCC^k(?h&+RM)Jd<5zJ}euYqj+9irAbauLmV+8J;Jn-)YmpfMMxZ z5SpcB6IAgNI8<+-$sR#_S4zikvs5I;w?-^*xZQX@dQRNzcfiIjV=<^`cvR2H9!S{P zYnV6SE^FAa(m?VXpgeFYcx|@R>ljFS$qFrF#?UO^IMi<-_XR)bXTaPb;DH^<_jo*Y zSm*f~jd36epwue7Fz6jp^n3g%k#gVpHGm5++-3DLv9p#xFJj3qxbsWrhtn^T5y72d z%Wv#RvuUiT@`?5opBxnmclrfgainf@%tX|N&vyDnICUP+R4=%b&)mx2&l*#RISy)b z-+#E=TKB78XDZ{`61ns>m1_+ojU*TSLp%T?5UCYatM83$En8~YpmN0inHslCAgh3! z!hslk7T3dtzDb?dR-vqma_@PW>Y_lMrZ}XPh5M?Rg>%!%!tEGj;ZUq1*o@F7g!zd# zyrQdzyE*_M5^Ngu4q>`^C)Hd@L(|4X>9McC@#|ER5!BP;qRHX!Nz|7HLXE&Zf*!x+;Ar4O&VWC$bE$CYg9?*+w)>d`T)x zhGAZQwybYQiedWBgbB41Jfuk=Be^0-$0ZY^{EIxV65>XZGGZ0dr{OB((j+R^1Bg|K zJjpIO)fBolNqxVMVeU(hP++n4Lhvw>x3Pei08kjh9uLzRdWHGu18PJE`q% z%=qQo_e6F++aYFr6-sg(;o9k6_a(x*P9wtg`*xo%oy4-No#dgN-TcwGdL6doCJRw1 ziH?3}y0be|cGqr%22mqX^2TYWLxhRJ6S^R!LsC1L!zXqs-o*Ya?>6C`{GD2z0n7ZI zRGkyAiXfy)BrN2LBs13(>6)$wNkd3**LTVCsaa?^6q&QB^M_Co>YZ^EQ0%m~iMBGi zEPx&Cs2a6PE1~ez|cS?oR!k z2g|^^vT){da$hd6$$n`_4qXYLHk`(=S~p#I{#w|3U!ta{bC=KVbNO1|6(Z_8(XPqY zRF*G5arPLhl5M;M7Ue)a^5sUO4j0|`pYVO)e%?4Z4oL*qJzznh&2xtHPAw#Btplj zfM4b7i7wWV%4IOnL*670S`Xp3E!x$^hFeCQtV@(WvKcSS;{+7D#)WkUu&YtAn%tF{ zeN__}hp+&6E1sh6!s`n<)#RvMRBe25qY|Iz%x@NZJ-?3Fj4bcXtgVw<*r`R71rR5H zVg+Y*TzO)`%-L7@`b!`Fd|zjt z``}4BFmha5wxhySPF4uV-cZat8-M0kQT_UBSTzw&GV%D<6{1EZVq%u&QA<CYx;}Q*M4onowwwc z%7z#g$lBiHU&2iEN2bxgp<&p*dst{PC-$6r_9kNVz#2Q}Sj{}JuNI1OlA$6Nb+|$d zf$SY#kw-gkDL9=`&PJ+Bo)lD&4p{3mI}dcYk$kg*4S>s;G(o>|%nd1P*`rQ%@Jf z-S1aA7I<$HuG{-a(0M1+k+doIm?ns7_f}gb-apB{BgGGK(LiiD>($BpYN?XacO%1-*k>Mbp8~cztZN&)GNObug4H0bpezz%hE$~~%kQ51I z`NI1f4nws$n2b~~2ely;vHPEn5sg`eys&mGA+kG`wzTM1csft`FSObkCn#}E*Rz@Ttf&j%Ry}2jj!+Y^0i6V`u0t90zIj`T*9&> zf&KKrDYY>tOLLLlhBMd_7>n>={-AIhZN;hL&-{V;FxiSzEBKhADE$|PxB9C>FCD@aFy|zYw9zY zYU)>i`2b!p;Rya?`6;OD>?RORCHw(5YQ>H%fIULB0wWOUOfpm%uV^}ps3o7AO}n9Q z*vMn}(Nt9G+C05>Qp``SrFCG&3tMAr{@{*MV^mwCF)EC4#`#i%9DXXajFwY*kc#~E z9uZ>s#J636v$;c<0A9`u$qH>$Te&tWpIO>_b()Pq>Ws7z@>r|)M_B=}yMk$&CnspE_G7E8bt2)v3uR0kvtXk~}bu01e z6EzK!4g9j&W35vHKF<NKu0GE@vESksRz&r30fP4c}l$Gdj{ z-^xwGno9JKR;c{rXwcJI1ov`ji}$|}ULxKL6wcF`Dh7&u#q4W7JDP_N-D|XNxAKYi zT(*^~&YW-B_w5yj?%r$ks5WnFXtg<-+dqx-N|+SvFuG%s-yl;eyZRJx z4r?c%(INy~ZgFX{b8q}Y&Ri48K!kQrSwvo^>$B>p4>M1X2Mu2eJrB-D=p zb3%Auc>LIPDH8-a_t-v7T*_1)>zK=ic8ph)^ecSJygY!tI1jz}J-+0+bSEH8V>kP{ zkaT6H&C;uyllxd5*69J2otCE|VY^b}^CZ)nUdZOBA)&bX@%iRyZLcgF!S+9Is(#PY zOID{{+V~Zmpu>B+rN-BQuZ#OlV1ib7>+NHur3_^VPHFq70jXu%2sStm8A2CV#|Rx@ z3r_<2PRHl5(>h+}wxaESLfTIP(1Zk%X&nQv*2QmQZuLj|X4{)mRpUdumL*xCmL)M4 zFG^z2b=ow^t*Y6;$P=GmRO9_rox8ITnSrI9_O5eF8BG;ro9cNmE^&M;%`07bwEfq) zg^V_!ae)uG;8V2vxt$Q9`NIbme3OQ&+RLj1b!eRjkLZn$0cGGz_gl0=f9LVWX1 z{3H)Sgj0c6A6t8%8e8UzA&re%D#>+PDlXqLKq3}`_yy?H&Sw4inB_F#j+Gh8iw$Py zLEcp-hXXIRm*6rwSM(NEezhlu%Om4GzmPgK)mI&OJZDAoL!3E}$CMU|5E0_)>tHe<9C}z91k*fg4$S zkk*#Gz#9y^REA%8ptTlb4zk+D+H8H5uRw6@;sy7T3E+d(Sn#9E`CRh5=oeSvxcUxq zMA?4WBb1UyB(DDO`fjy{A&XF88T^3MbO)Sn{RwJEk)nCldz4WTB4JHNK8$V5- zN3~Ch?q%4_PY41t&nj{43oa$ooMYP6^-6;6Qx}ydb4f1u8g+sC=fY^Y?Z)oS;-$}H zS}>0w{qw4SBz)RLs3d`HLPRctx0?r!U(ifmwBg_dV>)9_Xji;}E9B(Qj`DWvHv;y7 zC|(oW4=OpAZ>`Bs-r@$gZjA?0iE1v@cd!E+*U7NS+oC%P!GweE83b+8VKdmzxL#J# zK?9*MEzs(D76RZIrggcJLqUob_d+c$R}Y6! z3{1Ko!P%E_tF>vizs~c!&Fe(U&hPcQPPcvbmn*0q@Y)Mi2dy0nq8LnUGho@LUvWJP z=Ia2$sfGSB1=VhUMh+`psH9C)pWaKms0Wpn*n$w}AZ!W={)LzLxF}cxFNIAru}M?0 zILbZcwM|=^!RAhx?gi=X3f#2K0$7~1Oqo7}iGZQU{@Ap6n=BQkZpXr*%TP6t(*ZL| zP-pRjEfY`;w4N)2Fb^OWwYymQ0G1;aa*_*T60ygJub;pg-9{GOmWj{%JEN>*P8<^M z43UeJf+;JVS*|_rIi>C#dcJ7D?j@%ZULPhRHn@5DWH%u?{B$o%CSxg$$f|3T#2mUH zQ*ZWtMQ{DM?i#E&7*je$?m=YJ)zqE$g7=xi$16mo$D`e-knkmE7W+rL(E(Ji{up9} ztC$6@*$nMQR1L$37dy{Myd1%5j0-=`JF3D8iR=_E@E$-kEAe7?$mO%$qN!^NjLFv) zM|Z<_85zQFH%IQiZg6ckkUSIt+0K-<75b;i?FmXSiT0i6&8=2xES1KBIm$S6Kc#tJ~&kB zFb8afhR&0pFLoS|0KJg-M@#eQu#d?7+4)l-a4-O9>qQLG#nxFb&4xDaDqIxq50(r> zn;Z+;Tz%?jl>wF`4+=V$3`MSiht6?U&1%h^W3ovq(}CDT!VkuyQ^nX5Sd2U}Q5i>L z#*3jrz<9AUY58b3K{Y6v?sM6JDP^ z)M2p=ckw)P`6qd=j(>WESn1g4CIH`BI{=~9f_ku6>6`e{EDylM(@#q$E&H#}Cr|Q} zzXSD|BM3LTcCH7R7yoFW4U28b2GRM8uQ^Wko= zdy5KB;c>do!*-AFJfH*2|3*eXsb$tYc%wDLac62B-Om@8jd*_h4z=##3~4h9B53rp zPrqA-|n73DdC168$Bv5nd*IJkw*O)=b&ydumH`SEX z7gH&f0f2Wo3#z`Rw9U~7|02(;nQ2{=bCzPs7{VSq#jDgFfk;jr;Dfucrd9__Ep?fv zzW7m}(Ls|oAdw2wX=zVKsH6?hre3hh_{jLkN2VTmA72D~cTj$ymyie4mA_ zOO{eQ{`=}6`^zlNCAXO2W--JrS1{hENTE0iQPn@&W~L*dLEuXt?Pyb_M$CQ9j^KQ# zY}+Llc9#p9iGZ+-zmb3gp|pku z!Y_{g$I|X4pq!j1nIGCZIkK|0z_=4B*6K#<2Ie>#O^@j|L5a7?ASL8N4u|B~khZ?DAAprQmdr;ziRy3M+>z zCu=}f+|3I9$Uu2Z^JhOMD&<)vtXzj2?IZy&ocf=X>3&7K>kz(xMzgD&_BO)Gzi%sd z;aO>`EOnJ=SvEfa%?7R~Yqk{NZ!0QqYkzHCF6K&Y5zo$hV*Kg)n6^OLA4Wyq*kV4a zQ5{Zxnzv3`TrMHrHS?cMd~Hgc?pS3$$<hpGpS!qrIFy$TdJI> z+Z%7&;BvhxRr~(}$O||0Y3JlRSJDU`K1~ZSy(?)6H-l(D-MNzHaDJ|qVtOQP;te3S zoMD9wNgBo@sN+_UYeQ1N!EMftCcKhbJNUjsa)`}j7;?zI_+5Ga3Gw zM4HJ!+tVe@WY{|}x=b?}4oV`;WH=&;G?O7Ki8Pbp6o=#(naOZQ5@{yGHHE%*ZwIerT6+lgU)fY$xs&7(ARErs zT2zv|NM?X6u^ZRWDu|Mt2C@t0Vpg6t07%XN*)&Z{PraFZ4#;g&weHlLw6j2VgKVXR z85}=kD$fl0HcMvMOxs|wvrUfIAq!0}sFkOk`O@H~ z%v+tUb$B~d6avo#wFY%hzM46O|J@@bG=a}wmB zk;x#d9dbL#S9vAMixjEr%-g{Pn0ALWz4SK7CWkbYf7jXe$gBMONu;@QpOnOgNZyqP zd=Yt;vsIFJ`%-7WByZds95Nw8oSl^V;)W5PeC8HS7IBda9n;K?U0^KK0b*wPd~}M z-DaT&=QvwInH1%pqDn1$Y0U`NWq4J(hDoJ%lPJ%SXmxgu@^r_|Nu;Ugtx2S*=N&GI z_uW+KUWd$>Y`d<{*^;U+-u6$NeW|=z_v=xlZTn|Qq?yTwz~-ECEnb=LIWzfC<~3cD zAWe&oa5lX1o}THD-c+2BM4G3c>X7Vt)1Q?fJM5-e-Vk5r?4*^j!IDVxpn8Y&Mzbl2 zG!MEH8~mF*-HrO7rwH9g;&V)$>K<5@%yFqdQooHiq)n z;vs7t@p}u%p0)&Op1$7M$BZp9Pk$(hG!J^*Aw4a_H0joxQG<5pL2vJ^09(Y8MepK; zeRppydLc=_J52KZy|p4nN ze)k~A%l6S4lQ^lj!`Tcj93SEpNu+6Ja}sH8zr)!(&b$3#myGvPR}wk$PgMSAOsgXq zwp(AA7lAo@%*{51Weu6zKXEptEj zF9kXNAuWR7?Z%K;2(tPytsvl)#%5T=%0DQwB5pIh2D0NGOOCTWKj3V*=XD)_>O^NW zjdi*%0CF|Rma$IP?VXm`pU)ePTxXL$@71nxcIxxQZ#0QC<9@HRho5)*BMuq-PKlStD`Q<6y2OVb_F8;*06t~9-L9mwp1eZF-E>sBWB z2DsY+Gx14!V|25#Wg^Qo{rRf1Z(>EfKY#3y^vX?t{?s8o5BkHT+f9G&NV?MW=jTbJ z>Ce9;k)}UKlFBswnX>!FUtQVO!v zALVl^KcAvhDalA zwu2mYNF%{M2D#lKjR^Xbn~yrA@nv>^Y;#B>mwp4X!6A)Y+6i)sLk^i3AlvSc!zBL+ za%*~mG(DdJ$=&XdCMK{y$cRIln7~&+PIgE$Mi~bv>Q2(@&&&f7+kATF>xrXCI~gV= zk>=%^2XZ%vwj-ShR^n_G>P@hV95NjAYm64U;er_81$n6Mxd0+^ zp|0#Axf^5_$n1r(E;g8W2*@@Ng_XL}-0p`St_9g$sVmLX$54e^G8`{+e{M1p!BAA` zN<$t5vI9hPk;oj@bNpDP!gVcDJ$k8XMo&cNj9_9MD{>#wIt1hHj>4(LEVpPHtfNwdQ4SOwmH;FXj;;$Ud=TYwS&inp%XK!N9=L#J-nlxqZ=aBpe zXnd~YL2h^*t=g(Ghd)9+a}Ly6GLo#kdHSim@-@_8t7|VgJ0W`#>|B?OKYgx4W~{cF zYca^2En1l836>g=TVH~->35=V^&q<((rB3#Y>_2BFOr)qZFmtcY`@cW*MN*Tq^W$X zvu(3i`P*DFUirHml9e}QJ_Rx#ttt4iQ|5Ed*3Vviwm0DtyycX+ z!`VLCEA!7T887qi4(XM7Agt7ZA8S>eSLQfp3u>>-qg*mx=5Y?mGR>7UogJ$aCb2_$ zJ---a$CGI4Q%)p*sk6a#B39|_a$ONOB<=y3foaqJnq$J<@9cl=J*W@lx)n+S^qTpi zvop5$cJwEaa@icxyzeaY6PEe379vwc_81!sWY;qo`(Bae%Fhnco`{9E?M5>E31k6U zQ_?HRVCLsRs95?Fxb;cBhNki-f*jXv$#y%FFXMJ!KZVBHCd*3SJLrVH4e9-kW00?O zHt=SPjCpW%5~(@wkQvq*2!7uoz2Ugcy|U9jy&Gi5TUzPpUHPQ5T{t_$RQ?T+YldKM ze(a3V0G*|ev;fV!{cUG=ao%poPn|8sy)t*RO7CbLBIlA(6MqA_>pi^l?>qMAzqnxL zU9AZ8B!i#ZWxlJe$-OG=2XeLDyPTcT@iF%#K3IzF`_29(T=d7nG za|XzEyZ^b@%tB{VbnnUvkZq91MK3y6E_Aj_=aptO?{xM^Cn=}iA;YIEw!s{S^vc|n zL>jgGF~~i3e^9OjF#Wj$cIQ>Fb5No?qz zvBg&D5SPrfPd^ppcDvQPFaGp1Kz3U)9A6_b9b~H|z0oWH8F5JS^tsOV@!r!*T{8ZW TZl$xayw`QBlgR%A+90o{Nb?|~ diff --git a/scripting/include/hideandseek/hscmds.inc b/scripting/include/hideandseek/hscmds.inc index bc42d77..6e7fe8d 100644 --- a/scripting/include/hideandseek/hscmds.inc +++ b/scripting/include/hideandseek/hscmds.inc @@ -41,7 +41,7 @@ public Action Command_HideAndSeek(int client, int args) { } Cleanup(); SetupEntities(isNavBlockersEnabled, isPropsEnabled, isPortalsEnabled); - ReplyToCommand(client, "Set the current set to \"%s\"", currentSet); + PrintToChatAll("[H&S] Map set has been changed to \"%s\"", currentSet); return Plugin_Handled; } } @@ -216,9 +216,19 @@ public Action Command_HideAndSeek(int client, int args) { } if(IsBotsEnabled()) ReplyToCommand(client, "Bots are enabled"); else ReplyToCommand(client, "Bots are disabled"); - } else if(StrEqual(subcmd, "peek")) { - SetPeekCamTarget(client); - SetPeekCamActive(client, !IsPeekCamActive(client)); + } else if(StrEqual(subcmd, "peekfix")) { + if(seekerCam == INVALID_ENT_REFERENCE) { + SetPeekCamTarget(client); + } + + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i)) { + SetPeekCamActive(client, false); + SetPeekCamActive(client, false); + } + } + AcceptEntityInput(seekerCam, "Kill"); + ReplyToCommand(client, "Killing active camera"); } else if(StrEqual(subcmd, "seeker")) { if(args == 2) { char arg1[32]; @@ -240,8 +250,7 @@ public Action Command_HideAndSeek(int client, int args) { ReplyToTargetError(client, target_count); return Plugin_Handled; } - - SetSlasher(target_list[0]); + SetSlasher(target_list[0], true); ReplyToCommand(client, "Set the current seeker to %N", target_list[0]); } else { ReplyToCommand(client, "The current seeker is: %N", GetSlasher()); @@ -264,17 +273,24 @@ public Action Command_HideAndSeek(int client, int args) { } return Plugin_Handled; } - ReplyToCommand(client, " - Hide & Seek Commands -"); - ReplyToCommand(client, "toggle : Toggles all specified"); - ReplyToCommand(client, "set [new set]: Change the prop set or view current"); - ReplyToCommand(client, "clear : Clear all specified"); - ReplyToCommand(client, "settime [seconds]: Sets the time override for the map"); - ReplyToCommand(client, "settick [tick]: Sets the current tick timer value"); - ReplyToCommand(client, "setspawn: Sets the temporary spawnpoint for the map"); + ReplyToCommand(client, " === [ Hide & Seek Commands ] ==="); + if(GetUserAdmin(client) != INVALID_ADMIN_ID) { + ReplyToCommand(client, "- Dev Commands -"); + ReplyToCommand(client, "r/reload [force]: Reloads map config from file"); + ReplyToCommand(client, "toggle : Toggles all specified entities"); + ReplyToCommand(client, "clear : Clear all specified"); + ReplyToCommand(client, "settime [seconds]: Sets the time override for the map"); + ReplyToCommand(client, "settick [tick]: Sets the current tick timer value"); + ReplyToCommand(client, "- Admin Commands -"); + ReplyToCommand(client, "set [new set]: Change the prop set or view current"); + ReplyToCommand(client, "setspawn: Sets the temporary spawnpoint for the map"); + ReplyToCommand(client, "bots [toggle, [value]]: View if bots are enabled, or turn them on"); + ReplyToCommand(client, "peekfix - Clear peek camera from all players"); + ReplyToCommand(client, "seeker [new seeker]: Get the active seeker, or set a new one."); + ReplyToCommand(client, "sm_cvar hs_peekcam <0/2> - Turn the peek camera on or off"); + ReplyToCommand(client, "- User Commands -"); + } ReplyToCommand(client, "stuck: Teleports you to spawn to unstuck yourself"); - ReplyToCommand(client, "bots [toggle, [value]]: View if bots are enabled, or turn them on"); - ReplyToCommand(client, "seeker [new seeker]: Get the active seeker, or set a new one."); - ReplyToCommand(client, "peek - debug cmd"); return Plugin_Handled; } diff --git a/scripting/include/hideandseek/hscore.inc b/scripting/include/hideandseek/hscore.inc index 5d51238..72c1d22 100644 --- a/scripting/include/hideandseek/hscore.inc +++ b/scripting/include/hideandseek/hscore.inc @@ -33,18 +33,22 @@ bool ReloadMapDB() { } - bool LoadConfigForMap(const char[] map) { kv.Rewind(); if (kv.JumpToKey(map)) { - PrintToServer("[H&S] Loading config data for set %s on %s", currentSet, map); MapConfig config; config.entities = new ArrayList(sizeof(EntityConfig)); config.inputs = new ArrayList(ByteCountToCells(64)); validSets.Clear(); + + static char buffer[64]; + if(StrEqual(currentSet, "default") && kv.GetString("defaultset", buffer, sizeof(buffer))) { + strcopy(currentSet, sizeof(currentSet), buffer); + } + PrintToServer("[H&S] Loading config data for set %s on %s", currentSet, map); + if(kv.JumpToKey("ents")) { kv.GotoFirstSubKey(); - char entSet[16]; do { EntityConfig entCfg; kv.GetVector("origin", entCfg.origin, NULL_VECTOR); @@ -55,17 +59,16 @@ bool LoadConfigForMap(const char[] map) { Format(entCfg.model, sizeof(entCfg.model), "models/%s", entCfg.model); kv.GetVector("scale", entCfg.scale, DEFAULT_SCALE); kv.GetVector("offset", entCfg.offset, NULL_VECTOR); - kv.GetString("set", entSet, sizeof(entSet), "default"); - if(validSets.FindString(entSet) == -1) { - validSets.PushString(entSet); + kv.GetString("set", buffer, sizeof(buffer), "default"); + if(validSets.FindString(buffer) == -1) { + validSets.PushString(buffer); } - char debug_str[64]; - if(StrEqual(entSet, "default") || StrEqual(currentSet, entSet, false)) { + if(StrEqual(buffer, "default") || StrEqual(currentSet, buffer, false)) { config.entities.PushArray(entCfg); } else { - kv.GetSectionName(debug_str, sizeof(debug_str)); - PrintToServer("Skipping %s", debug_str); + kv.GetSectionName(buffer, sizeof(buffer)); + PrintToServer("Skipping %s", buffer); } } while (kv.GotoNextKey()); // JumpToKey and GotoFirstSubKey both traverse, i guess, go back @@ -74,7 +77,6 @@ bool LoadConfigForMap(const char[] map) { } if(kv.JumpToKey("inputs")) { kv.GotoFirstSubKey(false); - static char buffer[64]; do { kv.GetSectionName(buffer, sizeof(buffer)); config.inputs.PushString(buffer); @@ -110,6 +112,18 @@ bool LoadConfigForMap(const char[] map) { kv.GetString("buttons", buf, sizeof(buf)); config.pressButtons = !StrEqual(buf, "no"); mapTime = kv.GetNum("maptime", 0); + if(kv.JumpToKey("inputs")) { + kv.GotoFirstSubKey(false); + do { + kv.GetSectionName(buffer, sizeof(buffer)); + config.inputs.PushString(buffer); + + kv.GetString(NULL_STRING, buffer, sizeof(buffer)); + config.inputs.PushString(buffer); + } while (kv.GotoNextKey(false)); + kv.GoBack(); + kv.GoBack(); + } break; } @@ -164,4 +178,23 @@ bool LoadConfigForMap(const char[] map) { PrintToServer("[H&S] No map config exists for %s", map); return false; } +} + +int COLOR_GREY[4] = { 194, 197, 204, 255 }; +int COLOR_GREEN[4] = { 0, 128, 0, 255 }; + +void ShowBeacon(int target, float radius = 100.0) { + float vec[3]; + GetClientAbsOrigin(target, vec); + vec[2] += 10; + + if (g_BeamSprite > -1 && g_HaloSprite > -1) { + TE_SetupBeamRingPoint(vec, 10.0, radius, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, COLOR_GREY, 10, 0); + TE_SendToAll(); + TE_SetupBeamRingPoint(vec, 10.0, radius, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, COLOR_GREEN, 10, 0); + TE_SendToAll(); + } + + GetClientEyePosition(target, vec); + EmitAmbientSound("buttons/button17.wav", vec, target, SNDLEVEL_RAIDSIREN); } \ No newline at end of file diff --git a/scripting/include/hideandseek/hsgame.inc b/scripting/include/hideandseek/hsgame.inc index 0f8f906..0b3b658 100644 --- a/scripting/include/hideandseek/hsgame.inc +++ b/scripting/include/hideandseek/hsgame.inc @@ -60,7 +60,10 @@ int FindSlasher() { return -1; } -void SetSlasher(int client) { +void SetSlasher(int client, bool ignoreBalance = false) { + if(ignoreBalance) { + ignoreSeekerBalance = true; + } GameState state = GetState(); char buf[128]; for(int i = 1; i <= MaxClients; i++) { @@ -198,7 +201,21 @@ void SetParent(int child, int parent) { AcceptEntityInput(child, "SetParent", parent); } -void SetPeekCamTarget(int target, int src = 0) { +void SetParentAttachment(int child, const char[] attachment, bool withOffset = false) { + SetVariantString(attachment); + if(withOffset) + AcceptEntityInput(child, "SetParentAttachmentMaintainOffset"); + else + AcceptEntityInput(child, "SetParentAttachment"); +} + +void ClearParent(int child) { + AcceptEntityInput(child, "ClearParent"); +} + +static float EMPTY_ANG[3] = { 0.0, 0.0, 0.0 }; + +void SetPeekCamTarget(int target, bool showFPOV = false) { if(seekerCam == INVALID_ENT_REFERENCE || !IsValidEntity(seekerCam)) { seekerCam = CreateEntityByName("point_viewcontrol_survivor"); DispatchKeyValue(seekerCam, "targetname", "hscam"); @@ -206,24 +223,19 @@ void SetPeekCamTarget(int target, int src = 0) { for(int i = 0; i <= MaxClients; i++) { isViewingCam[i] = false; } - PrintToServer("created new peek cam %d", seekerCam); } AcceptEntityInput(seekerCam, "ClearParent"); + AcceptEntityInput(seekerCam, "Disable"); float pos[3], endPos[3], ang[3]; GetClientEyePosition(target, pos); GetClientEyeAngles(target, ang); - if(src) { - pos[2] += 20.0; + if(showFPOV) { TeleportEntity(seekerCam, pos, ang, NULL_VECTOR); - // SetParent(seekerCam, src); + SetParent(seekerCam, target); + SetParentAttachment(seekerCam, "primary", false); } else { - /*GetHorizontalPositionFromClient(target, -20.0, endPos); - endPos[2] += 80.0; - TeleportEntity(seekerCam, endPos, ang, NULL_VECTOR); - SetParent(seekerCam, target);*/ - TR_TraceRayFilter(pos, ang, CONTENTS_PLAYERCLIP | MASK_SOLID | MASK_VISIBLE, RayType_Infinite, Filter_IgnoreAll); if(TR_DidHit()) { TR_GetEndPosition(endPos); @@ -237,13 +249,27 @@ void SetPeekCamTarget(int target, int src = 0) { ang[0] = RadToDeg(ArcTangent(deltaC / GetVectorDistance(endPos, pos, false) )); ang[1] = RadToDeg(ArcTangent2(deltaA, deltaB)); - // pos[2] += 50.0; - // GetAnglesLookAt(seekerCam, target, ang); TeleportEntity(seekerCam, endPos, ang, NULL_VECTOR); - // SetParent(seekerCam, target);*/ } } +bool IsPeekCamActive(int client) { + return isViewingCam[client]; +} + +// int GetClientsInRange(const float origin[3], ClientRangeType rangeType, int[] clients, int size) +void SetPeekCamActive(int client, bool active) { + if(seekerCam != INVALID_ENT_REFERENCE) { + AcceptEntityInput(seekerCam, "Enable", client); // Need to always activate before deactivating to fix a semi-common bug + if(!active) + AcceptEntityInput(seekerCam, "Disable", client); + } else { + PrintToServer("WARN: SetPeekCamActive(%d, %b) when seekerCam invalid", client, active); + } + isViewingCam[client] = active; +} + + stock void GetAnglesLookAt(int iClient, int iTarget, float fFinalPos[3]) { static float fTargetPos[3]; static float fTargetAngles[3]; @@ -279,21 +305,4 @@ stock void GetViewVector(float fVecAngle[3], float fOutPut[3]) bool Filter_IgnoreAll(int entity, int mask) { return false; -} - -bool IsPeekCamActive(int client) { - return isViewingCam[client]; -} - -// int GetClientsInRange(const float origin[3], ClientRangeType rangeType, int[] clients, int size) -void SetPeekCamActive(int client, bool active) { - if(seekerCam != INVALID_ENT_REFERENCE) { - if(active) - AcceptEntityInput(seekerCam, "Enable", client); - else - AcceptEntityInput(seekerCam, "Disable", client); - } else { - PrintToServer("warn: SetPeekCamActive(%d, %b) when seekerCam invalid", client, active); - } - isViewingCam[client] = active; } \ No newline at end of file diff --git a/scripting/l4d2_hideandseek.sp b/scripting/l4d2_hideandseek.sp index c64aab3..3d4a437 100644 --- a/scripting/l4d2_hideandseek.sp +++ b/scripting/l4d2_hideandseek.sp @@ -26,6 +26,11 @@ public Plugin myinfo = url = "" }; +/*TODO: +2. Seeker helping +3. flare on hunted +*/ + /* script g_ModeScript.DeepPrintTable(g_ModeScript.MutationState) { @@ -44,6 +49,7 @@ script g_ModeScript.DeepPrintTable(g_ModeScript.MutationState) #define SOUND_SUSPENSE_1 "custom/suspense1.mp3" #define SOUND_SUSPENSE_1_FAST "custom/suspense1fast.mp3" +#define SOUND_SHAKE "doors/gate_move1.wav" enum GameState { State_Unknown = -1, @@ -74,6 +80,9 @@ char nextRoundMap[64]; int seekerCam = INVALID_ENT_REFERENCE; bool isViewingCam[MAXPLAYERS+1]; +int g_BeamSprite; +int g_HaloSprite; + enum struct EntityConfig { float origin[3]; float rotation[3]; @@ -97,6 +106,12 @@ MapConfig mapConfig; ArrayList validMaps; ArrayList validSets; +bool hasBeenSeeker[MAXPLAYERS+1]; +bool ignoreSeekerBalance; + +ConVar cvar_peekCam; +ConVar cvar_seekerBalance; + #include public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) { @@ -118,8 +133,10 @@ public void OnPluginStart() { SetFailState("Could not load entity config from data/hideandseek.cfg"); } + cvar_peekCam = CreateConVar("hs_peekcam", "3", "Controls the peek camera on events. Set bits\n0 = OFF, 1 = On Game End, 2 = Any death", FCVAR_NONE, true, 0.0, true, 3.0); + cvar_seekerBalance = CreateConVar("hs_seekerbalance", "1", "Enable or disable ensuring every player has played as seeker", FCVAR_NONE, true, 0.0, true, 1.0); + ConVar hGamemode = FindConVar("mp_gamemode"); - hGamemode.GetString(gamemode, sizeof(gamemode)); hGamemode.AddChangeHook(Event_GamemodeChange); Event_GamemodeChange(hGamemode, gamemode, gamemode); @@ -133,6 +150,7 @@ public void OnPluginEnd() { } public void OnClientConnected(int client) { + hasBeenSeeker[client] = false; if(!IsFakeClient(client)) { currentPlayers++; if(isEnabled) { @@ -186,24 +204,29 @@ public void OnMapStart() { #endif PrecacheSound(SOUND_SUSPENSE_1); PrecacheSound(SOUND_SUSPENSE_1_FAST); + PrecacheSound(SOUND_SHAKE); AddFileToDownloadsTable("sound/custom/suspense1.mp3"); AddFileToDownloadsTable("sound/custom/suspense1fast.mp3"); + g_BeamSprite = PrecacheModel("sprites/laser.vmt"); + g_HaloSprite = PrecacheModel("sprites/halo01.vmt"); + PrecacheSound("buttons/button17.wav", true); + if(lateLoaded) { - lateLoaded = false; SetupEntities(); int seeker = GetSlasher(); if(seeker > -1) { currentSeeker = seeker; + SetPeekCamTarget(currentSeeker); PrintToServer("[H&S] Late load, found seeker %N", currentSeeker); } - SetPeekCamTarget(currentSeeker); if(IsGameSoloOrPlayersLoading()) { Handle timer = CreateTimer(10.0, Timer_KeepWaiting, _, TIMER_REPEAT); TriggerTimer(timer); PrintToServer("[H&S] Late load, player(s) are connecting, or solo. Waiting..."); SetState(State_Startup); } + lateLoaded = false; } } @@ -225,13 +248,17 @@ public void Event_GamemodeChange(ConVar cvar, const char[] oldValue, const char[ isEnabled = StrEqual(gamemode, "hideandseek", false); #endif if(isEnabled) { + PrintToChatAll("[H&S] Hide and seek gamemode activated, starting"); HookEvent("round_end", Event_RoundEnd); HookEvent("round_start", Event_RoundStart); HookEvent("player_spawn", Event_PlayerSpawn); HookEvent("item_pickup", Event_ItemPickup); HookEvent("player_death", Event_PlayerDeath); - SetupEntities(); - CreateTimer(12.0, Timer_RoundStart); + // OnMapStart(); // Don't use, need to track OnMapStart + if(lateLoaded) + CreateTimer(2.0, Timer_RoundStart); + else + CreateTimer(10.0, Timer_RoundStart); if(suspenseTimer != null) delete suspenseTimer; suspenseTimer = CreateTimer(20.0, Timer_Music, _, TIMER_REPEAT); @@ -240,8 +267,9 @@ public void Event_GamemodeChange(ConVar cvar, const char[] oldValue, const char[ thirdPersonTimer = CreateTimer(1.0, Timer_CheckPlayers, _, TIMER_REPEAT); if(!lateLoaded) { for(int i = 1; i <= MaxClients; i++) { - if(IsClientConnected(i) && IsClientInGame(i)) + if(IsClientConnected(i) && IsClientInGame(i)) { ForcePlayerSuicide(i); + } } } } else if(!lateLoaded && suspenseTimer != null) { @@ -258,7 +286,6 @@ public void Event_GamemodeChange(ConVar cvar, const char[] oldValue, const char[ const float DEATH_CAM_MIN_DIST = 150.0; public Action Timer_StopPeekCam(Handle h) { - PrintToServer("clearing cam"); for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i)) { SetPeekCamActive(i, false); @@ -271,37 +298,42 @@ public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast int attacker = GetClientOfUserId(event.GetInt("attacker")); if(!gameOver && client && GetClientTeam(client) == 2) { - SetPeekCamTarget(attacker > 0 ? attacker : client, client); + SetPeekCamTarget(attacker > 0 ? attacker : client, true); int alive = 0; float pos[3], checkPos[3]; + if(attacker <= 0) attacker = client; GetClientAbsOrigin(attacker, pos); SetPeekCamActive(attacker, true); for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { if(attacker > 0 && attacker != client) { - GetClientAbsOrigin(i, checkPos); - if(GetVectorDistance(checkPos, pos) > DEATH_CAM_MIN_DIST) { - SetPeekCamActive(i, true); + if(cvar_peekCam.IntValue & 2) { + GetClientAbsOrigin(i, checkPos); + if(GetVectorDistance(checkPos, pos) > DEATH_CAM_MIN_DIST) { + SetPeekCamActive(i, true); + } } alive++; } } } - if(client == currentSeeker) { + + if(client == currentSeeker && alive == 1) { PrintToChatAll("Hiders win!"); gameOver = true; } else { if(alive == 2) { PrintToChatAll("One hider remains."); - } else if(alive == 1) { + } else if(alive <= 0) { // Player died and not seeker, therefore seeker killed em if(client != currentSeeker) { PrintToChatAll("Seeker %N won!", currentSeeker); } else { - SetPeekCamTarget(client); PrintToChatAll("Hiders win! The last survivor was %N!", client); - + } + if(cvar_peekCam.IntValue & 1) { + SetPeekCamTarget(client, false); } gameOver = true; return; @@ -343,6 +375,33 @@ public void Event_ItemPickup(Event event, const char[] name, bool dontBroadcast) PrintToChatAll("[H&S] Seeker does not equal axe-receiver. Possible seeker: %N", client); } SetPeekCamTarget(currentSeeker); + if(!ignoreSeekerBalance && cvar_seekerBalance.BoolValue) { + if(hasBeenSeeker[currentSeeker]) { + ArrayList notPlayedSeekers = new ArrayList(1); + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && !hasBeenSeeker[i]) { + notPlayedSeekers.Push(i); + } + } + if(notPlayedSeekers.Length > 0) { + int newSlasher = notPlayedSeekers.Get(GetURandomInt() % notPlayedSeekers.Length); + PrintToServer("[H&S] Switching seeker to a new random seeker: %N", newSlasher); + SetSlasher(newSlasher); + return; + } else { + PrintToServer("[H&S] All players have played as seeker, resetting"); + PrintToChatAll("[H&S] Everyone has played as a seeker once"); + for(int i = 1; i <= MaxClients; i++) { + hasBeenSeeker[i] = false; + } + hasBeenSeeker[currentSeeker] = true; + } + delete notPlayedSeekers; + } else { + hasBeenSeeker[currentSeeker] = true; + } + } + ignoreSeekerBalance = false; PrintToChatAll("%N is the seeker", currentSeeker); } } @@ -367,6 +426,7 @@ public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast) } } EntFire("relay_intro_start", "Kill"); + EntFire("outro", "Kill"); SetupEntities(); CreateTimer(15.0, Timer_RoundStart); } @@ -433,6 +493,7 @@ public Action Timer_Music(Handle h) { if(state == State_Hunting) { if(prevState == State_Hiding) { changedToHunting = true; + ShowBeacon(currentSeeker); SetPeekCamTarget(currentSeeker); } EmitSoundToClient(currentSeeker, SOUND_SUSPENSE_1, currentSeeker, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_CHANGEPITCH, 0.2, 90, currentSeeker, seekerLoc, seekerLoc, true); @@ -478,10 +539,6 @@ public Action Timer_RoundStart(Handle h) { } } entity = INVALID_ENT_REFERENCE; - while ((entity = FindEntityByClassname(entity, "func_brush")) != INVALID_ENT_REFERENCE) { - AcceptEntityInput(entity, "Kill"); - } - entity = INVALID_ENT_REFERENCE; while ((entity = FindEntityByClassname(entity, "infected")) != INVALID_ENT_REFERENCE) { AcceptEntityInput(entity, "Kill"); } @@ -493,9 +550,14 @@ public Action Timer_RoundStart(Handle h) { } if(mapConfig.canClimb) { while ((entity = FindEntityByClassname(entity, "func_simpleladder")) != INVALID_ENT_REFERENCE) { + SDKHook(entity, SDKHook_TraceAttackPost, Hook_OnAttackPost); SetEntProp(entity, Prop_Send, "m_iTeamNum", 0); } } + while ((entity = FindEntityByClassname(entity, "env_soundscape")) != INVALID_ENT_REFERENCE) { + AcceptEntityInput(entity, "Disable"); + AcceptEntityInput(entity, "Kill"); + } if(mapConfig.mapTime > 0) { SetMapTime(mapConfig.mapTime); } @@ -503,6 +565,30 @@ public Action Timer_RoundStart(Handle h) { PrintToServer("[H&S] Map time is %d seconds", GetMapTime()); return Plugin_Continue; } +static float SHAKE_SIZE[3] = { 40.0, 40.0, 20.0 }; + +static float lastShakeTime; +public void Hook_OnAttackPost(int entity, int attacker, int inflictor, float damage, int damagetype, int ammotype, int hitbox, int hitgroup) { + if(attacker == currentSeeker && attacker > 0 && GetGameTime() - lastShakeTime > 2.0) { + lastShakeTime = GetGameTime(); + float min[3], max[3], origin[3], top[3]; + GetEntPropVector(entity, Prop_Send, "m_vecOrigin", origin); + GetEntPropVector(entity, Prop_Send, "m_vecMins", min); + GetEntPropVector(entity, Prop_Send, "m_vecMaxs", max); + PrintHintTextToAll("Shaking ladder"); + top = origin; + top[2] = max[2]; + origin[2] = min[2]; + TR_EnumerateEntitiesHull(origin, top, min, max, PARTITION_SOLID_EDICTS, Ray_Enumerator, attacker); + EmitAmbientSound(SOUND_SHAKE, top, SOUND_FROM_WORLD, SNDLEVEL_SCREAMING, SND_NOFLAGS, SNDVOL_NORMAL, SNDPITCH_NORMAL); + } +} +bool Ray_Enumerator(int entity, int attacker) { + if(entity > 0 && entity <= MaxClients && entity != attacker) { + L4D_StaggerPlayer(entity, attacker, NULL_VECTOR); + } + return true; +} public Action Timer_CheckWeapons(Handle h) { for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { @@ -515,5 +601,4 @@ public Action Timer_CheckWeapons(Handle h) { } } return Plugin_Continue; -} - +} \ No newline at end of file