From 5ec369453563cb38de59907be34ab4d31d96761e Mon Sep 17 00:00:00 2001 From: Richard Helgeby Date: Sat, 21 Mar 2015 15:43:24 +0100 Subject: [PATCH] Update compiler and includes to version 1.7.0. --- Makefile | 4 +- compile.bat | 2 +- env/darwin/bin/spcomp-1.7.0 | Bin 0 -> 332016 bytes env/include/admin.inc | 2 +- env/include/adminmenu.inc | 6 +- env/include/adt_array.inc | 212 +++++++++-- env/include/adt_stack.inc | 106 +++++- env/include/adt_trie.inc | 183 +++++++++- env/include/bitbuffer.inc | 240 ++++++++++--- env/include/clientprefs.inc | 13 +- env/include/clients.inc | 55 ++- env/include/commandfilters.inc | 2 +- env/include/commandline.inc | 87 +++++ env/include/console.inc | 339 +----------------- env/include/convars.inc | 493 ++++++++++++++++++++++++++ env/include/core.inc | 104 ++++-- env/include/datapack.inc | 62 +++- env/include/dbi.inc | 552 +++++++++++++++++++++-------- env/include/entity.inc | 9 +- env/include/events.inc | 176 ++++++--- env/include/files.inc | 310 +++++++++++++--- env/include/float.inc | 4 + env/include/functions.inc | 13 +- env/include/halflife.inc | 45 ++- env/include/handles.inc | 16 +- env/include/helpers.inc | 53 +-- env/include/keyvalues.inc | 366 ++++++++++++++++--- env/include/lang.inc | 1 - env/include/logging.inc | 2 +- env/include/mapchooser.inc | 4 +- env/include/menus.inc | 465 +++++++++++++++++++----- env/include/profiler.inc | 23 ++ env/include/protobuf.inc | 308 +++++++++++++--- env/include/regex.inc | 29 +- env/include/sdkhooks-2.2.inc | 345 ------------------ env/include/sdkhooks.inc | 63 ++-- env/include/sdktools_entoutput.inc | 3 +- env/include/sdktools_functions.inc | 4 +- env/include/sdktools_sound.inc | 249 ++++++++++++- env/include/sdktools_tempents.inc | 4 +- env/include/sdktools_trace.inc | 8 +- env/include/sorting.inc | 12 +- env/include/sourcemod.inc | 50 ++- env/include/string.inc | 23 +- env/include/textparse.inc | 197 ++++++---- env/include/tf2.inc | 60 +++- env/include/tf2_stocks.inc | 61 +++- env/include/timers.inc | 10 +- env/include/topmenus.inc | 225 +++++++++--- env/include/usermessages.inc | 74 +++- env/include/version.inc | 4 +- env/include/version_auto.inc | 8 +- env/linux/bin/spcomp-1.7.0 | Bin 0 -> 313663 bytes env/win32/bin/spcomp-1.7.0.exe | Bin 0 -> 378368 bytes 54 files changed, 4087 insertions(+), 1599 deletions(-) create mode 100755 env/darwin/bin/spcomp-1.7.0 create mode 100644 env/include/commandline.inc create mode 100644 env/include/convars.inc delete mode 100644 env/include/sdkhooks-2.2.inc create mode 100755 env/linux/bin/spcomp-1.7.0 create mode 100644 env/win32/bin/spcomp-1.7.0.exe diff --git a/Makefile b/Makefile index e13ca5b..7e292f1 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ SOURCEDIR=src SMINCLUDES=env/include BUILDDIR=build -SPCOMP_LINUX=env/linux/bin/spcomp-1.6.0 -SPCOMP_DARWIN=env/darwin/bin/spcomp-1.6.0 +SPCOMP_LINUX=env/linux/bin/spcomp-1.7.0 +SPCOMP_DARWIN=env/darwin/bin/spcomp-1.7.0 DOS2UNIX_LINUX=dos2unix -p DOS2UNIX_DARWIN=env/darwin/bin/dos2unix -p VERSIONDUMP=./updateversion.sh diff --git a/compile.bat b/compile.bat index fecb379..d80a6bb 100644 --- a/compile.bat +++ b/compile.bat @@ -3,7 +3,7 @@ set SOURCEDIR=src set SMINCLUDES=env\include set BUILDDIR=build -set SPCOMP=env\win32\bin\spcomp-1.6.0.exe +set SPCOMP=env\win32\bin\spcomp-1.7.0.exe set VERSIONDUMP=updateversion.bat :: Dump version and revision information first. diff --git a/env/darwin/bin/spcomp-1.7.0 b/env/darwin/bin/spcomp-1.7.0 new file mode 100755 index 0000000000000000000000000000000000000000..2dd729dc0b01761584d9bad43182f6be9dc1903b GIT binary patch literal 332016 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

ytg;qhIGe%+`0bv2Gi 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%0D7gZvHbrnTQ3J-Mj*A95iLN{Y%Rq)~AB0B> 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

8$9P@D5 zfFn|A-v#Dds)>D@zfy zVL(x^jG|$oICj(}@D}nAd0}oo>0anX)ZwF0mN*B`peFdnr{5pt+SFj01gK*remfc!>^%hvF3oR@>0Mq~4C$1||Z1ZUVTEwhB0^ay@H=5Ordhk+%~%}sD`q0w$|g=C9oQhJzCxVI29C<@IOnBv7+yUZc7naD)QVDq&Pc z)Fsq)1#eOgaRrRMCFJWu9|4m2p~A0PVxyR5^BDj9(_3g}+bRr=d%>;vLpeAT{vv|K zCsbf}bQa@`>C%e(7sj3A_eGxmb)0+a!MqATX>zB;YJlUSr{j7)Mvs*;tO0;ulZWR; z&$tHFIM#f@X6~gv^KZw)sxiQCdZ1@~bzIVA`zf5M;M$9|R=7Oj_%?_I7vml0H6C8| zg`2RO$XT=b6(V6qw+}xhlj#O0nJM8GMMEdgNyaf&|HbIpL!*b&&UnWCG>;xzsN06s zkVbRe%n65wl3FJMLz=i>@s6Iuut_GB9mTSbQ;eS`7(d0n<7cOfYu8VcKbgdY&%pS7 z`ICG4WtdD`#N$Y&e9~CqCtib+QE69k`3J-zaEfJBFvL8-*x!NGf?~A8Jy*1S8<|vH zl}EqVZ05C(pgmidHI&BflvhJE^XZT*7=7f$Ctgq?&uy$a#opEUQ`77N9;On?=Z@CTxc9Oa z78!++35$%plA%~Ty&X{RGI%r?4@ggx>MZ)(RYHA_q7>`g4b8N{_iCIka-n5!E^#mO zp=ly#VO1)=;^G(OH_=x(1F)P1z28YXLX}(V+;tnS?cB|0eM*L@b^Cwl+<#p9RZ)7y zOTg|~pF*$Qtaqe!(++N|IgJjd#;KoolV48LfE+p6e!Mou&=+;1*ElDaxZrIRrhHjpjucd=( zus_9= zRsQz-oK?4QX3g|Md~3vo$%;NmH;5}LAL4}iikf<6UNZ2q`5p7smXRpbXFXlS-wI|T zwH+Mj&MVlxtHyi&zD#4yT6pgUv@ClMs;zT3J|rXTDJYNM^Sfl_om?5=Kl0o#l6J7P z5R4u9;#0d`ey-Wk#Baaxh#yU}*fm-&_Hf_+j$b_?`)HeHgV?>sBEOkbAblxLKJVwb zVc3w0lB6TMuS{zO#?meqj&z9HfkC~kyccn6Dzny(rYLoMN>JCNZ_Je2KufNV|n zsbo3DyPhHwv5B#y=ffgUD{c|u79(!dxk%7c-1>{#FmW3#ZWF{UL)@~&Er)LO{dsgG zwUO{tSy5H3=qn0-;ZcWg9Q9;0|AmDj>VonG_}GK!3sv7heE74sB<~1_Bly5Q4tvLr z6C7IWxLlHSjSEexq?-r(V`bm*%@_#IE`C!Q2!BU+&j31@=o)`jtG+v_(p8TRYidbH z&T@SsYUM32gWfa$QOMu56aKJq{#JZ!E5Nxs!iRp?KfW29!#z2Hbn44bXdaVEv)FwL zH9H=vMISf}kLZJFN+FT0Hy#-4>5mWK`D=Rb#i30zLI%3_Hb3NPR^skh0yC2}+>_`h z+yB0X)3_rf&K6*A?Ap`(xTo25cgO2JG5E626PA+8JYd2Yw`d}f`$1p|o0@{an#tL| zKkBaR9hga21U_W{ezpEB{{O8%H1{^BzAVpCYeM3@jnMcsBL6R(DN+ZM7o?8B>Yjns zR9o@kFLgkA>x(l=aZGSM^t+=$_0#Zi4-iL;4-c3{XP{}sY5rI+q&0wecke)Fb>k^* z;RSqSXSqK%WjyJsJY0s2M%LbhF5*-xQF0zOli(1}DF8Vl;@>>{tKa^(LsOd0LblZ! zTb3uFhms_dlh~WP8^qnfR>tJZ6&^ju^ zG7YYP5?2+W>+1OpwJAhBUYUqM9L*hs{dbsvFhLXcn&uMf{ zKu+EG!~jPU{Ea+4$tdtdb!sd;n);nIjr%1|N22kE_Psx5*(e(Da>P$KJ3& zcUB1YCLTsC92!2dOpI?=Wec44+-#3KU{60(O*mKj_?#>BFV2e_i*-%#{%Y{2vi%J~ z2l%|ACeMXFS3);XXbEi%C_t#kIW`5)$@7?g`2((jRg^fMR`%d_5B^0y_Z+qsN%2ii zdx|G{p{jrH38*Jw$(^>XmTi$EBx*J%Ef1G2(?@JqLcq*_9!2qo0XuqgJ4qF(Rl;DA zf#YLho8M!0bE9UQCSWEezOoLKhAaOI^^o%mEuJx0J7r_3tHmhav_bKYA7>jd|Fj+NGNIDb?N6r+&5k-Ozw&L@v9;`FfnasT^VtNZmqC z{SzV(n#oc{X!w@nQjEs{(f3eLvE8utl~WAbV6Vx;b^vUo#ziXMg9~~e^I<(PO;a8} zAv(@2{uuA*@fbgHEKMF6vP4Wa>QX@)@E*9Tm`)ELdL!FSCDb;lB8_q(yE#Re;}hZO z63L$;^ri?;$Px5D5!#eUAPA`09;w;FS zB%!jO>21CpA;eZD;R$%uz+oLBu%(|X-+Og!SKV2VP7fMOp7DpWG!O)7$Dwo&DH1YSU05t9fp zlB!K!sIC&68#jlfYa)naxNA1yxWq_J{$9X)>P!8AW=f&OW0{$orpfz+-XSr1%Pj}J zh9Hn`j6%BgK)TpOzHuC?SY|*ZoB(NU0ncbWd&UL+<<6&eE0u4`xj5?J!`GhtdGrEE zk3k^ZVbIO30O2qg54GAc((^){xRY?-$Aj%z9`=a*7MXAQ%JaGVEs9wYs>pld+096# z{PqSCuCSjvj|OP@1H>5)h}RXg37PZ8N`FiaPT|3Z2C5K7vB$$zBl#{AO`|egd&;gN zGj~2c?CBHZkNOu-IQW%2pSqKq2t+-K3K~l4#pH;%6oI%A4nC$xXu-c~=aYBWe2#Fm z33wOBC1p2@%cq#4`tE!}Fg~6$Clq1kYWm4O>BI20X8OXrrx)^zT!rMoSU8V}FZqHa$b*J?@TY_b3?~SBU==eb zk465LA#rD?1Zp#u6O_!d}Wo`HsUs+VoGNAkn91j%8Diwc_box=JX@pgb07)Ns*dKUg7W0Dj2kk zXAEj7q843`Q3MKXLQn}o!BmsV3esj!%Ld|8u;uR}lrYQRg{2Ns3xCuX$Zrb8HAZZtegH>uVaBYCcHA$kOcg^EASu7v^L8vaqbBJb^~-luZi%O# zKVc?{9vl}@WBPcMEIx!I5N<8qqv_yS$3^UyLjORuMMAr?aTgcHR5@dz>y{jmaiv(g{$ zi=IQz+@Lw_&i+`4WJD47>JPR2s&U@(*J7nXl>a_KT>fjwUzFd{r~GiW{M@^j-}s-F zKSPv1fshrgmLIN`|A;8Rr^mT!lu!Ewrl|dxSfQSPUO!geqm%Mg{GG&mScYoTYZkKo zNBB8A){CD7#GrY+#F77 zzzitLU;3OEKluWasL4s1A@3|d>z|f?c8pK^p$N_4@?nZnQUPOzJAZw^L#Di>qWj^ z=Ib@SR`T^Wt{K!_>a_A90;aAj? zfT?54>j_vwA>}udIR5~Ge;05d!9NN(gy7=>ZcOlg0f!R2L%w98T7q8} za7%*c3pj${*#d4y@Du^Z5Ij-99SMFxz+DJ_R=^1a_Z4tYg1ZX155Z9a?oV)-fCmxW zM8Lxc4i@kTf~)#)+eZ_8MZn_-z98TU1fLRc8o^%+ID_C~0hw zL-1k&Pa}AafM*gsRls=!n+04zaEgHE5&WEh7ZN;Bz)J}3F5u+^w-@l61h*3KN`fC1 z@G62E33xTZ{sR7l;JdMitpYwnutC7z6Ff%1=LsGn;4*@H3HTzxodtZE;5GujM)2bT zt|a(=0pBLL9$>xIYOzWNon2?r3OHM5H5<+8Qn)Q5JWU%JsSQtSt?jA}w`s#;I;3^g ziWfD5tSM5qU5e7#GNmY6W{wnPve~8RDLQMkJu@phI!l*rjvCE>QVWC8q}PT?VZl<1 zEUPX(Q>RU}TTQ7MI;%D&Cp@NoPOuW5rAwWJa@A*>KGT?LFc()jTX^CYt++dO`}l#mtOUD8VFdb?!9FN%ODf&kd{RtltBs>N&r z8dB}()ik{d&OooxKfXzpEWK5S7}UkKuB{Q+wRTX==XM+|Q)e_wXq+`yO6ZZ3Y0^&7 zTWv;*xm#FlR7{vwZ%(zOfpWTq4H!N&vP+jvagniMJ-P>r$dNXCu1Rmp(Ch8m46EMI zEsO}EYjkvUxGfr)F_ENMQloNgrZBBNH%s3w%&yO|N7FOsf|pv+t=+=HZDGhbC_!ff zQKXo1y9WmaC75-Y`tISjglGnWgA$^>uO&P-2QjDX&1ky`bj|7IM@mjHqSa^0JQG=? zg@{PGQ)<20kx8gSqiu2)N;EAM+AVBES5!?qMQ3v0A>5S4)kJE$E}bH%Z){=FQ~|sZ zrO3&9-#z(%NFS8IXG1$tu&TNNe5cKdrR+D zRV67#zEPKg?!J4{zSK&&UOKzoYD{t1^>W3s94RJaDpyX)&EPPn{s)u~W}Mk_&30W5 zQAUK+PAj$2WoE^L-p3|OQBhG+>w6VvMrTgZE4WCgT^pu$^{tJ#z`f9|bJ#7J7**z) z7>>}HE#}-zi^JBMyE{#vr8lQxtmM{=N2HLYv+6SCVANWvvv079I61b_Y_NbYyeMh8 z#nRaDv}8$}fYF4k_+_xfutelXH3$liYQtTQKIb<~-%9@zwI@VlsNvqqWRI6xrPGD5 zDFsWBGCzux(k*t2)D^guOcqO)7F^f_)~j@sq_bLexi;cw`g9B-iN>>J&oJ7g6pO{w zRT|$_iV4q=+P0M2m|xbcqz+D+{m6Q33et$3L1%& zB8@<#-DoiCt&vhI!TY30d8kE7I&-enSFVyY#bQj8EGZN9sdmZiFqy`S8&w%#($L}3 zfFaK%4jRyBeBY5ndXE?|bcmFyHWPustiyV3?A!a;?Vn47)ZWwY4@jF7Bzw_AxP?wF5@<;)sr6 z89JN3c05Gsh)-TLz_VCml>sYtOA1OlC@(kSv=U1k=sxKb`6%4Ia3>%m;ff&U8~iZjOk{Y>$FC* zm_@Y~gVvs**QW7Ys!!*aI&&Ha^4RgsM<-`#aoDpQcCE~+ff}m2Z^Tr=*g2fq!~;ZY z0Vi`1e~#Dcqtc_avF$sx*BTHy%4klrWCI@<+2+Vt-< z2!X&&Yu}U^a%F89mTa^))#OOir-@WqI(r5>(~BUZTnfG58p-iFdX1PSIZ>)ruLA=# z8ErU|07YvfvaEVgeX8DO(^|}?+!}SU__QJg1fn)2Vpt^MuC-Q1DP`qbv7vI$Q3q!l zr}8wWHR-45P1=Ywy+P+N*}Fv!g}CRFh-w%^7qdm{o32)r_7uf{VO1kijmBpARGX(l zP)iuvX)xx5ajSi@jI@rWD9PGvs}YDvwOW7(p25I4^?6M7lJ}ZC(V_Y<{FoNjS-vg$^=fN;6n3nM~3~GZAiWEZgN2 zBNBTddty*5GHN5JEU*V%D&#b6mc?e|Vb)HopuSegQ{;RgWTjB#T+vnW+L&%kr|q<{ z-OLtn8&f-N`)(o@DCZuzWy`sx8EwR>wGeg%vQo9Oz>hJk1+$Y!l`ry=sB`gWCo)x{ z+c09q;HlBeqvdiSmD{PQ+Du()2GAyOU;^EF`Gs#8qx*=2ccdd`63yNA-?A7dYN>T# zNIW_2NgjH7TdFP#1f<}-MqOX4=U|CW8-^QHCAp^H-bl$0|1~96>w;ze zEi%-}S!U{Td6ZhrI+H0EO&}=%ql{R$C{(3z8u1WlOsrc3OI$DLYpjDsgmn!AtFdZz zW-SySw8n-BK^qa)Ev$8vc0>k9#b|5Cxr%IT+OWv9n6P$q>lTAX(bNFAD|82)6(kAn zK^he5fI$OoC<Gr$vW94>dBpf7ftGfWyNu=k`e)kpxv~ z{P+w)Z90{$rVL&p8NvthKWl2#qZ%RWfc1)Rq zeM1!Cp-!4`u+*lT6x~epMv#25Ot>L$I=O`3-P)1+3d@Qz;LCw1*A z=~7umlyo-yN3nLPO^QAp5=08d)+8y#VKiaZl2Uc{)C^pq$l_uj4_S-Zl*J%{R1gDt zZkj&TgbTB6x`U3=a7SO^ody3PNb4m%DZ_0*nNZvunUX%oXvZZBA~pb|Arg=8fxi84Z##Q_cYZII)B(L)7a+m)Op9?a-dCojcN1Z#C#r^#qwE z)K1FO+cPX_nYt_%No~;b^?*nWm(2QX7S7OVB%=|hLXRoBD1@2RNi5V@K_qATD*xJ_|x5%1Xt}k~&GUfuzxBh>UpO1|z^M z*)yz`Y?u;qS!e}f`Ht5l!;-@7Kufyt6>X&lG?s2?E#1tL!;C>AIcy}oLKC8&5qgv~ z#i-97kDi}mwAwLVAd;F;6?9T|246Air4}+-v=BWiwcrlqEAZX|9jV-C^5Fnms@0f9 zAe(a7z9O}tShCz9wV-)Rv9?Gp&@}ap0~3@%iiadEBz3_6AXy6~7lWEP0s_z(dK2zo z>u47M;&zzAY5I$lOqixgtrp`m;>EELZc$a@9taf@m5?{YIMZe3@LV7PfTAKPCLjxekX56*6d^yimJ%T8DEe!6DIPSIPFfj_9L(Cl6V&Aloyo3^fq)zw z?+xb(M^%BesTf)$i73)Sw$%a_!c&8igA@}Kul4GUQV{f>w5TkrQ7hqv6r+`bhmUxA z_<%7G*C+H6fhj zOO!~M*LFlW&p}btFewO}86h_Hoq#$a%w$PRiK6)P;_Tw zkfWv|g7QGs$kr*51!F=OO#=256N)E@BITmdlcOka9!ngDTLGpAhoB(ba80pbY*P~_ zIx@4gQW{@H3ei-&Vtb|(M1tBRJ^BU}L}3()4Af9+AD5P4ib|!nXxrnpji1mS`N`_@ z4xK1cWICwgwlw1ux#f660ge>;IVUwEU1UaATL$&LxLOFz;j4Z!Kr>$%LjsB5<~Gd4 zLAcXc8t%B#dkUpHh2oCu zL^E~UM9_#<(n-NWr5DUimx9?)pB5!SOiQttv?PE)3WDSeGXpU-(o(|HYRIEjJ+pe| zmBdhaY+$;GhU9FuXd`^GY8{N(k#t^)r?aNR7)j>2Gz+v6vxQ`BOlDedb}$EsdY}qs z=y_I>jbXy4YWcpyoCDDfwNpeyyO7@Qk_fd0U7>oYXBvbfrMBRYVBE+D;v!0;0Tc}G ztVD*5-G0x=Fpx!x1TquW$}0fDs?Z@MSWMGe6aqb!8=_6olhoqV;C94=Q%O{Vib!&u zPY&D{(BB;}`U~+uX)Y{e&@YXo7Lo1%+{$Q^^EaB&Ihap`#;l-EPLr#}bdSjs6Djb= zh@@Uo^Q`e6Mx$&a6~P90;0kLNXj7)q#$D%=NT&^B)RJfnQ<~b_P`_+ir97o7KDdX) zh*WjG!2rPs@j@+Sl7(aqe6Vd^OX8G;r5u4?7Wb8jRZ(>unP!YS zlLgb8I!y{Xw`D;1g5iaTNSJ@M&;fMFR-dY;g#n?!29x}$kO~(;C;)4lAf9+H;cltu{9o715mf=qoPs%_-D;vH#o-ek12l%~&t zeCDOL+GT@mNUmqaRj@M*CLyrMjLZxZk1)k^Ks%x|EVr2=Q!s&mp^)0E+7(0=UonB2{{;K@d7^ zy2+B_L#8Ur<7g-;q>y=x#FI2CnW(_vfG&h#@gx@Uo}_djD8$sKlVlF4ftehl-+qy@1 z2Pmq9WVKU)ibSGtqG=3qVj49I09O$!eoS&Izx$76p~B!+I&^EQ&P?+esdGYrCM`qZ zcJfPM8U%KH-?9F|%mmA**-8rJ>o6FMsYY-SEmp-W)?6A8P;HFNvuO#DdrB-Y5P=ej zFelMljj3ve?c`xb%nXJl9h7L~B-9%qTxeqIP$cAIF~FFK!7EA?Caego3kr)l&}+9? z5Xqb?8=^BYheE|AvoHRWP1p>~5;I}bH?-y~DxBKPQ@(-3Ja1#j=B%_@Xp+Nu{;}aeUC`jevwUnkkit=+ryXlJZIH zndV=a%%NDZz)aEst>Fu0RvUrmTHMa&QyaCb<2g5CW^6JEmcoD>S~3U&#voHD7$TxK zfvbp6HNKZ-2$?W)VWL6vI0q7FVEN>HK`ZEWVa-y+FfkU@$xh55yvU?X>;g|T0%7UF zu;q5Mpr8x}1w*oA#|sc5UpYhv9afi?OLfAKQ-x%uSthoF5Vp)%WDz6)G|9r5D)y;p zurY1Qv?gS)Fjm&XsP9R(V=EqO2Qnp47#tpaC>fd<%T2KPVDVmFc~GS^YNrtSi6ex; z)KfK(tf*Iw6Bg^m2jADQcaLM z!E3Q-!*YpgI)V^l*NGX-&diS7jfe)=I)j;>CQ6JO1=T`~sWEo65jEz2wO5p`<0L5j zF42SrG=Qwx3~zPpBNks?3p? z{jrS93Zk&Dp%EYjEBK(gazQhKG8@P&NG4rb<`=Y|<{;B731WixVla}tjK))27`e(= zz`~a?%SJ|eLB`CfARiD#F#5f9=mbsDtl%viJ~ zS(5CxG)Nf*tn4TjLRDOXP(})X&>6&<0FBi&(gB1(g~HT1Q(=L=Y+fN9pElj4=Sioc z_LBC@4Q2(b9Ss0-n^M{;G67DgNGNG0*fT^}M9q|5RIz1F9^Z^G?<>ZH_fZ{S?N|Z} z8>>wQcaY~HmH;w!6RAQ*Fc4Bx&~)aVk!lD;IIfP2HcVQy2#bY0MP;R#QE*9O5{fk9 zwIZlFA#aD7kpN`VaHaSuunb`UgiQ|vLGnPQ-dC}nVgbV>6^_QE8cJMC4^xb&Si4$N zJ&B(X>J&Xf8BI2yc~_o}?&vj#8LZg|7cwlfc~wYRNtcB%!j{T1ykkKrCSGd;6{+Mx z(r^~ZNifW08&kn$?x+}W<||Ir<_)!3k2<%7vCTfrTOFIK&JwHEf>&#WIUg)rL^c|H zqRV0wOY3*!<*VZ|!H}s>H3J!7sU|k7kdjZUWa|lQ+y*s*5ULb@DW*kP48pjk(Tnk@ zOv*~GAeg%&i)BTblga`kl~;?6-aRd`9um0K}vFYWNjR);)E*T$ka}Dst6T@atjp8g|}Zp-b%B;xWkkLVX|a(_bw#30pl6_TVl0StzpR5!C z@hmo|gP!@c(lVu0;2^}F!KA4(Fr-J0=o{HZwHk05(!3p6q%aGuku)MTJ&=k)N>mdj z41_Sgfn?+dZ30iB-C4pS5zq)_6?%YdOB8l9;EHCJRy?aSjJ7B4fH0AY2i0MEUAuS=+{QS1J=MSuDY-oSCd6K8%kg z86ZoiMxgPijv@9bARQ612K6c#Efj6hyTDbeeVivD!2pQ`=3&xzF}+Y%i{jW=A&;n< zS{piv6!x0ts#@7YI+n8`?*e6L5x!(}3r45(j<=dM!$mDAjAfYG(d5ZW!GyqNP3`us zsI1*Hq8M*B3idG)eJ1nTscLI(YNsg{ZuY~hok|B`F5Ll_RFwkbg_%Y%!h&xoE338B zV&;|Y1+u+W3td!p!t@zSWO|f6rIoD6U}c;PArzFXns|7gP|H&37HDL)pjw~3Z^#-# zHhdaFkO$Jpv_eZF+(V>qvirMixA5s{@BApwO)Tt?lq0NHEY5Q#@*)8+ujGmKX4#tM zqmg4Y!2TsirrL;nVXc+@D|}gl4{B5euC@dz#+yhg)w3}FFHS>|n5fuqjAhAxW zaE)Y4Wxnq@iZ@%YW>R~CA*-N*Ayxe6<_OhS>3eFuS}mH8W$hCS2s*NC%Oy|~z2lS# zqvl|hQK5`7F;l98i1jU={5dI=L&)USDw*MtzVB5$XhcKRiX_)J;dIK#7c4_4j5HOt z(`GZf0yn9#3QX}xG*F3(?XP5Dmig_Q0ZiR-_ zkt??*(5oFr7j;nBccdTelh-0GUAaPrDkaDZ10Rg>Hc#XTGE4; z76eA0csziJLTEHFxhN~RgaQ^CnPK=0KCnYM158mm;1woN+NpqLRTIdI{2Z7dks87Z z%_cr;J2V@UKN~mKiweT9kDi432%4rEQ7qysJUkUcjjH9=nnAeH4OWu}|1y4llp+a`qZ!`cO7i`Hn6Hf=L^rbzv{P%B`)v&&JzwRTC5Rqq0I^ zo|H!4Whq*fB=$+&8QZC|&oU*j3{{%eKPTyPvn^I$y^%+oGP+px1V+^{77PbmGETx- zKnR{HaWGSdm?>NYBuneqWNprqka^TfgQ+Oa65P8q&hFU+*|GAD zM$~AWPo0>Dq+=+~_)30KMg@sh zVu?=PHlt)I^G~2cUiY`9LQ=g;)^a+fxw1cn;CDPV)oLV3S2d7{Dv-XdTJ7a-WFkQE zsvXA5MQUqN7#r}Q;e~rP7;vZYN;_Hc%ug!5To&vPBPVU<1zJJ$|E=|;Ny6^(f3x*I z!~aQAC!VC$OkR}46oA=H71!=2#P}rk5lLk;Jj;JRav^!<&^!q&q{Ecs$Yjq4NT4KJ z)f~ZczHBFvU1l&|$VPybe>-_NgK}V=gK;08LZB>pLT0qftQk5gi`hhZPhvQ%>tv17Y@lvr6>j%Twd*k%xvtZ=q*m=9x^tS?By8~Ye;CmS7A|QNW>F# zN0Wyc$}-d7o!!qgEW}DAp*aE!Qs`+y(qkclWJ`gxni+9Dd7?vNOxSQ)0G~7JxQn>z z5wx<6Xi!awLCURQw;ECy!8pNN=#G^DNL{p@P?1UnveY#4Y~`D#-96KcWHT=1O^Pad z3$hOT<734wSn7*r@^T8M7>Wb(Ria^4Cn{J<6zqUk*I%v?bmR!_(7xKi zNrQ(z`#dDlv^4rfrP7t1v;_b+B#Hg&$%|KpILw@e4ZK*t$Cg<%nJ?sE3jpFo3IZ~- z@QUisG{ngT#IcC3qHGd36QUOM!&Ht!cOyShGsQfJqVCuwFmm?-a%Z|_Z{T-9pv{N`F%(AeMk9yNBMmxe&0!b-${Po3GX2W z(+^vRX!C-3XpQa~IIYlX;z01lyk7NlTAvqBX&>E7-;qkC!W%2F z_u$QQn?9CqZaUZeW2x|Fb0y%$ig!5V(6>s+;q@ZUVKwBC9HL}%l(RYN&E}}Y*&sy8 z=BUKkAVkULsKnVIGMiVFh@Y!JB|?tU#4Tg+E3asQIC9 zKb8*The#hw^l*CF?n3GG75v@+u#cYh;b|W|mC{owp7xX$O212c_7zIEr9Gz$rN5=J zrF+guWk52352UiabU%*({1)@8#qY z!U(9Mkgrb^{~%&s{|-^b6C&g3+KDyqY^8U9U0)+zl^?3;0l6dZBX6ys%%v)Zt|5p+ z5I}d%nPP2JGNy?1!1*HbMkQM$Ah>eDZ_+!cQ>F9{WpHrmJ6k#A`fP>~x)I>DuR(ra zqu_UtpR@#9txmm4vwmd9=5Ned^Qy(Vc=^X7_~aTHP~P9F@m3pyJ|kM(b6O%&+_O(2 zO59T_tpcg;xh1Xo(YQ(40|czXBVuip{@#jMTcz8$m2Q=O$L%zR?<>;ZxHiWtez+|j zO8Mb;ekgro_o|E1$=N3tNdPadl1?rf%6e~1!40k3>1OD`4kf%$DEH)iaCEa zV(t?$5w>i@r_%hzvp>a91AzM*xSz!R)+*f5xKACtkw?{GmUXs4WBs^Q1 zcu6uNz$~6jzc$Cq^h=V7BBfVYXG`f7D*&1_E+WEO!(4fN zlzHK7>EzjWe|~q(+IPQO`>wN7b7_93cYk`nm>~6qG`}OlzLNu_`5oT+(G`?DNp{B~8f`$q(kEmkGpdv3bY)M&246eYaFf zIW_aDnF6X3^aZ6HCB;2LsVxTDIYe?1#+>{P}Ea-rNwAMI^T?)_gjfd1yr`S$0k|8Zd zr!&NXTAzxFk^1UWwAzkZ99Yyz8{4sKht6GNV7QI`*X?d;V%rbqT_n92;ZkhOfZ>@r@&m;m(teUYHU?qC z$$QyiPO6oOc>k>40FyDCzS9N_89u&7{G^&GIDSXuHwXh$&U3(!_O`6p4z{fEL@nc? zzmK;i$?4Siy|4pHi9f}gsrvqo{5n#8Fe!*kl??wue6lsD6;R{*me2K7^Cv6CKaEfA zBQEeiiBCi2&iHq<_bCN`Si*pf*Cvvv_5Y9YVORX;@nu7cS|z4`f6zr8`~vX9VdWAI zP?vBbvQ&+;Zhe1TpZ4hgA+Y+4Adf*oAIoCuXSdTe`hD9oL9acsJG1_RYZJ3Ny`NhC z-qN(U+ZUW}v}((l+{eqm{l4JjkyqOe+7$G~w9jVLkKFRhqQ|~mnAUjnV^_56Cib7a z_3GKg9eLA_oqDw5{CAnpY&>?YB>$-Mx#gw@idIibn|dSV?~D8NbBB)e3q5J7mzvs5 zbMw!Jfu6lubNma9jf2i7PWaY3IsM(k=j$Z&I~MTt-}w!XOxhUy{>{}JJDHZR?{$3N z_R~FY6n^rPskFUg+_|K08XiCMe7D2@`XuILtFF@7XJ$TgVs8`Op)WUH+t9ql?$4il zZRxgeH1B`0>V<31Oqzt(&qc`k9Sg?NZ@;KgMi7miYd;fhU%h zcFWv-c-5_I$B#}dH}<}L(%i9cLHehMwoEu>iwx-V^J8^7j2{&I@xEydze|{0ci6{? z{!cb;++fEXZOFdxjTxgp&$noUjv2PDIIsJ<(T%e&EZ=vsb=dMl>o%-DQSwl?&!3;w za6?r5xGy$;YT8z$b#D1>)8}8l9`fU+I;CJbkb6aoRxU^$_?;V>T`gZ=h31#mc zKR)A?!|&`aF75K{m2*S?NZ)=qeN^EG-__gLGIoc2bmE2$UXd~c#7_?1lm zkLm@z*`sr#iv0BY)(1vOb!QL!a%t$)EkCYl``L?Knr;etWB!rF4R?I|^X5xurZqoz zy1}s{N9XkV@z@`gpMRHOcAk3T-%WPR8ry2?Uq588vt;+%{P2Y_fdyF;HP!p$>lwy1 z@Vl@2ZT$k{nv}|;)su8d-+hu51-I5fDQalq+p zbN7K053e~h=J-iNgL6GE$Co}ed`;m;U%kEk>`ULQ?^j;EF{as-FTR*tylsEXE1wVl z;Jpnk>vlf0?Ui~b{@r@i*%4o+pKK8|)$sY2fx6xPO*4|0w6(N(YDa?&@5~R`)%0B5 zF`i5Q^u-t{F}CR=vr{^^-!(k4ZNOKiw4`g<)8~9R=DCt(i9-YDp4>ZNd-379WtVOq zIC<@-kf9qt89Zan#`%%Xx4&t&{N-ovFCN&q#mV7Ev##YVPQ0WWd16ge=!K0>o!Gd% z*|I!m-RGA#o&E4f(i^95My`APKez#@b(w`n&F;Clf z{fD~jk9K_UL)jm{9J*T8(s_25e*IUcK3G`s(5=f3CG*H7Lvc|_K4G5Sf@u3v4leN%DlyN*T8Tpd@|UwEr<#Y5XXd5v<< zeiYv2()xtz+^e=7{mUj!Z~9eYLYuRr>kiGm+-F8g`OA?*i}y4eaoTV0gG+jDZ{%^7 zwfLa;WS1`+ezmg8pljQkFZgg-@Yl;c4+KdE$Mugrk>pOfY2H8lhwKr_+qXSvTKV4b z9-e|%8!cNjZ25_^_kDD*&6f&ihxG)(6e`SIhqUetmHGq1Jt8+{(z-|M*vKkLb<)TXwcL4SK9ooBIQ<6b^s- zb5H+gv(D;sV=v8^P<8dfFJBh_T{Ugdp>MmbJaF)4=ef@9^%uRKGotXbIQ@sKpI+{a z5B_L**uI+^g9;9;X*@Lf()dQEYkmLS<7DQ%M#c8t_m8>i-y-qXomr-xGZV8*`<>|g zYP}1Q^S|0Cy`PuYwD8fniIc}}ACs}XEW7u~lcq6`4~=|q{EW^aZ$>tK^1EhI_xq*g zTZhLwS1wFh<32omw&$o4!B%(D|%kW&N*SN*z%)B20gE@XuG*`>!hgsA>A5yqH!iSG3-; z=Bx8JR-FC2>%ptXU;Ml5o5D#S&HQ`J`q#P#tyuq3m%M+iYuT*b9}m{=)V^<<$8FiM z^*8*G)&I{!lb-49>^n7keRArM6E_cNF8pxh;KqYDJb5R+A9(+=wGCQ$Hto$?`Iakj zdtTq<7Io^Ix;(nO$Ahu?jT%MtT0S(r&PO9=6y3}nIqN{mpeMfSGV6tFEtbFaVWZE_ zEPL?drqYO?$HWf3{aQ-OiPGV@Uq3YThXK#cxH)WT*1LFh#tWYo>-(7(^*2SY9PTLVe1F%E>Ib!$IHF}>TYZoF&gXu(?EU_Q3k*#c zt$MP}+%LW_JaFY5&!LKxvws)0xOCy<7e5q+-ahnU!yeALt!AuW)MIPQLs^v%9x%rD zz0hlF_TOVSPST&bHfF|GPX!JCeM*=9*FRemwB_=O``_tsu*Y2M-z{IE@&DAsVn6e- zygJYC=<9!Gbx{3^;sf>8PxA!iHyK)Y%QFu&S`dF&b3FgmhCf^y8IpG6(V*e4lm-Sz zz8&1H-?#=@@3m^yZ{PXH9?yRFiPn!zc>I$F(M{jb{q|__xqm(U=SJfrd#`l5zk2!g z2R>-^*?o%!*&2tANqDeDOjYRA`CFO{K0o!L@B0q!a-!XWxcQ6s#c!=_&^6)rK0O-b z&FTJZ*P;adF#m3&A9|s)W%`>>b>4NVlix=Vcg*{8RP5*9E{*wh($V(c`Q6uH;m?y= zez@SH@T%BLPwpEV*=o?>lol^OxiT#5wF}w@ueNL+u_33;6KA)z?K|Oi>&e00Bd#@@ z9Jy=C=j~qK`)Aar?>-e>F!k^KdtO`@RcLy-&y38oH@jHM7v40R z=4_la_G0!#|7T+}I(4~f418&AN{x zK7HE%JJB{;)3eQm0lglZ=k7f$4Y;{SaJ^%Z2Z@+s{cWuIN=YNbYJ6iBt`P|O` zs`z4@@z={+9{9WD$l=>>n_jK@sNTrxc8wps*>q~@tzNs|zTsFiuCjl*boC`?@s(EH z@-E*us_!355`(V2*Y?1lHMuPFym4bbM3krDLj zoPR%hwCJ12t^Qy4T()*m_U+7tQN7wOek7v&l{dS8u|GKd6lswv>eeXsMr?>Z_O7va zjlFBE*hRO!#@_W@E4kyIz2E2g?{m)k;e0p_Uf#cZ&6+i<&17b>W@SN6k)U~tGQZ6C zOWK-S#4%%b+uis<&TaV z7da>MDN)#@wn^imm9Vg?lCJoJHT?g-p#PM3Oj@H=D(`E z<;aANE`LPk?@bbo73J;Nf2HlMs{`KD&bX7`T^iAIVUH5ZFY;xNi!PLY8Te^!v*V^A zch;>q7Tw$>Ijv&S*)!VV>t=d+d)D~6eQDDLX790;9-k}OEIVcKTG>(KiPnQ%nrsL# z^f^Aoduw#V0%kULQ*4m3mRs2KS@$fxMvtBKpz-;!V>Dax8{F#MG5cK8%C$4bNbf)W zGoxo`_p2`yG5b4xTJ))!5_47J|&GeMhwr3 zu0M6qg=+80CQf(wSg~Q0eoof7rnRQN=sCSgS5=EG{?4D=?yPKIX4kpb%b(ww_GA2x znysRX&+RJKR(ifW#4_-9tJ);xT~-k_%19JXNpX{q@Sb zeHA~ucBqj1_(RILiR+8Ks#oljVx(k#r6zm)%0BT89@K62hP?cVCyjk;H{90iMgQ{; zx*3NlTVF2m{Aavx!*JJDW3NAY5^#LvlquRv3tm*-__>olto!|u4g7mH$a2kI@i4J= zS(gK2+!K~J*t+ztV()=5-yCaIX;ZvyhxZ%ark4xI@mw%r(7tN9rLWDBwL9@{P|fur zCX?vVF8{!>L|l8-u)OzE&WAsGw(WLU=P9lS>pj^z z_*yF#v&VOj`KkY%aoOD?f$x0Lvrb#Rn9K+ z95ZBl>fK|7&RmmDTe)v-)mEM*g36~a)1^fny($$AR{dCiE_v>Wl#}INFYVDf$NSZ) z`s==*?(f;s>1F%$i1Dw_POjME=HuW`k)1MYeXdhxdhqp)6}#-eGUwToqn|fVTGX;& zxQC^Lb8P6MeVyhux)E4uRNdLra+E)6)||bwYsGK3A1^38u-~MNVt4DDtr@s#O`8dx zEgv>@kd4UNojx`H&mtfC_W9oHNt@gz-Cp}Tjf`)hZgOe$*@;Kbt*SRHD0ujleiaWT zZXTaL^vcVVhm)?9?p0vpqPzFY6n#4)b7i}{*i%I|d1S2VyXfG~`bUR}bU#+jdobI} zuVA1dFtL-*loiFI#vB}Yy-D@kN!8ozyg0)$LgG5};f{?%+PE(%Q*&dfkR}(J*XWh_ z_0WeKPnJ)O?o@V_@$}%cZmBcWJELAZIo{^Se}=O>=cR|b`fS%uyPOjam(UJ)m;EGS zS=|MZGnaVW7#EOvbH~#B%TLP8x^Qir>$cEp!!{1x`)EfEXZ`-tQ%i4`Mh-B_-n`v8 zFl5xe;M*myU-~2A*8OMiE^Y0Ub#e5uBJsK1BjZ+@zK4GvJVA5fc~Mc{juB4r*S-{L z95LC&{e8nk+40a=Y5&Wr;QNcC2PQXixPQK#@|Jm|R-?W=o+|R8!-?&%BYx1?7ZnFl*^E&DFo7Kg9x4hfhee>b+=XTAU zy<_jPLY2ik7KAyDb2;jEZPUhrPyA{n4ISGvCe-tQy7ZcDQ8gN;-wf7^ZVYtFy&&83 z>aw)zz>TBFJ8j!qcH#c}%O3BzRC|!~iN%H3=Q=sAE2rG`$n_pRzhXDv5(v?<**ko^X?m z=@GNFf-GtD=ABWOT+gcSFYJH&vqzO{CvuJE+;YeAR&MFFxpDEDTii!%-`lsLX;=KZ z7dx_KbM|lE=CJLaTk6IObDmyqU4QcPVu@4V@J zes}ci<$HQWH{I%VD`Zn(yQ}Wiu5Tz%Dm2ic?T28=VAUPft3xZJ?{xD|obsww?7qxX z>dlk(L}it%kaWS&Ip$vAX}64-y9>5-+pV%mTu^TY|$3(RwMTJ_8$uxYY$^k_%cqsYwt zZAaeQF}UcEjn&q>Z7UTt?ZT9~4=(R>AA0lE_JTL=_>Q@F;nM3%_nO7r+We{P^{m7Z z`-+|Uu(M*HBxA;1@9nKK#<}!<__NReZIn~Plb)i2eX}(SetrsHAFGc0d9hghxt4|k z_Xg#;UwGL;lGU}o!{&o4qARM+s$w78#I|nVBr)U0`tt+YUc1u!rs7V)sCri$T2}2@ z-{to11xH$MIyYRt_2-kld*Aq++;wn5m(A1Vep{9--(?PTJd@`%z3c5BRmxwB-oH6& zaLvQ&wmbU8loD4>sy1Uw!F}}(xlLKr+wo4R8sb-z`SD+(lz(tQVED*tHM$&%j6Wjz zBja7m?!8xx=@^`I?D(|_F6R&KZu8~U;|YJhyLM{r){bsl*AHvIAgjidvAI6y+8!+2 zsmrzU(n0UE7uBzVr`24a*R9^xhedsIx8^x!jmjBWD!12Mw#wUB!Cm2BUt4E5{Bcb7kYYkqX-c9!4uBbzk+`mJBx zqSeA@NpYtur)$5**7uKFFRR-7RY7Oh>V@BzWun^ z|KPUqK2y{5&W1Y07w-A$F>3Oz3af5sHrn(mDCKSD&jF7^_5~j)^+(U!RU26{J32lI zAJ*bv#~NdAboDtp!)txwg#n z4@vwIJ~88Nmy^48_v^aE5brf^a?>kQb3A6<&dXIEJH5*D`Q0xU-hVkYJvltDZ(QcX z(u%HIZ};jrYGE;t!aWOll`r8Jq`ls_eDGY&_qY{9@c^L5Dc1@e%t4W&sq2?`Pgr=b z_KMTKRrh>Xt@FFPVM|l<%Y}urYK(E+6n`SbZ;iQ&*VC`VT2;BH$%v`dH1k8CU&!{- zuBB2Xg{#(W*JaO}&LNXGXKHS1Rl{ESKYIA~$B*v^_g^+o9eVndp>fuPz%O&AI`7`N zr|Y1VD>U^RX63dkm%FNf>((zPr0Y+O3wzbCW2<-Z9tqc)o=H9EG3jmZ!p)xsmlq$1 z*B-c<5v-dPnAdtrjfYOl*w!O^N{t#dFnB`AnBKelG|zaP+dKZ+HLn^S%eVy&3#(MB z#=IuX=hn_#R@ji`-(}+ZaQ(EcUC!Tnccj?iSMPefI=EuShif^P*E{cdvfXF$%6a~` z<3{5Fz{$AG7ZT+3R(gs;vT? z{WDTRw0F03iZj0-+$t+DqTi;BQ(y8rT)6wN&}TdV$j=)!c|%U&w%aC`FF4hH2lMQE?3*!?O0s-Wmxwic{OH+pZ2*_WAcO|b#iuhF1!2jR42nV zbN^v)pSRW=To)fQH8HJ=p;m*!fsf0(IpH-*sis=aip=}jdqS2iomwht?}VzA z-kjQ#|I9pjk?H&G@M{lWl`p#I?q2s5=5G}zWHoI%b<;4d*>7j;DX&k>9=2-O=X=KB zo0_<-M~3x&_p*y?y^kS5={sE4Z(LM(p=CnT)3vAjeNX1czv$qAdJdy5C5l_^>*ega z@}|?NgU=+Bhi-E0SZuUMkxn}boo|@!K5O(9w{EZQx|aML>2h^?mjVlF6e!rYbz`53 zOSGl$pJ-inaYmUks?t?T)hf8QZ@r zi}$QI?~kOq*AE5O@m?kJ@3DWBeCFlN0T<(**7g+L@{4<*udph6MWt8%KPuMfbE15B z`_OWRN<(B1XP5K!d+Swo(3Z;8cHJ&p<(sNi-dMeOR=Hn!hJJ! zsY?enD>Hqt#Bg%R(Uaff_tZ2d3~MnqDd@}X#4q|Maa+g456F1lC&s_CIQDH&-S7>= zT_O^^nyRaY384&BLnACr&Ee^>vK0 zTWxW4kF-5ax^KVY+U1jJQs)M%cPob$z1L~qu*<#g)qmVa*5yvGs25{;E*-nE-?OQ8 z`d0bs&_AhV@33{X67JS5rOW>~aQnTD=U)Dqvh3Q!Mw|OS`f)Ap!H(#F`-9ybUsY@y z^zy!}(DTI$y1!7pQ$MbC@BWh)<1Rj16FA{%Y~Q`#i|nv`JAdKWk6G~xes*(O^`)e= z`q!(2OMPB&xY?(^>(kz{Cn0YRW(~KDYFzPks~(>3T!Ux4KUHnX$H_CleCYV|%(X%N zR9AP^>v8?tc#j)R{;Yp{;QKvyHZPob>%H%VoAuf~$cuBkdSzAAt4pu0Zo6D#(+G3; zQptJ4+1eK$Y6o2KE7|Wz{~yxB^JY{!dcEqfW8R832YYlseQ0K*uLmxUTx{}uJo8lh z4J%J(A6a<(#E_#W3VOai-NHHb%$S7c=S&w%o)zz`F?BRB6IzBx1IC${2!CY z*OgCd7v?<0{civ4a}#4H=;lA4*zDtt@sc(p#~m%dHET}fxRE_Q_Upz@r8x}i$pcI%SX7GAsVXoVH8 zM|dx<{jAo~v~KCkwl@tne5!JIQG@1hmkj;Bdhxzl^S2&OF>i4y@o1Z3#lGz$&y3%6 z=7!tmLK_=yY*Q%QI8oDWcV4-eU0xw!JGy*u+BtQe|DM|uw(RxE&)VO+|Mh*jbzbn} zf5)C^&1%=<6AN$M@G?7mR*!nOEddqc!fwvb3)*>POXXL8xOAM5v^PI84-Wv^UfI9n z&48=7^6zBS?inHNt}M}G;p1iUFJGh!i#A*PY2ck9rsL7aR;)`)c4>a*Y*NLU>xOG< zczSy^UAq12Sa0)!lII>*TAY&I%y?9`)@5+(6NZ2dO}wWZ?^B>*^wv#dnYorSD0bHK zFt^dYEcY5em^D^2X6*S}4f3~~%kJ1aqju${Pwz{|bncn)r{cv`_fMVn$5^U;S`;#C z;o;up52>wdjnDUY3%+HZ4IR9#MDj3w(w=MArRVbIj+iDln4toYF(YmPo@ zYOSW@s!Z?sVoM8ESGP~j{$<*)ytDlExm`b|-Fe=s=8o}Q=N6BCUP&t+XbIVUBDB`+ z8=rOZh?bAK#Wgj|yO?$C^MSya;+Yc)CExE??^NHr%Jm(({#1N;oLgc2#BnLb>b)u^ z8L9ZRr%9#xzE8^f&F(fRcw&CuhT46NCtvj1*09@y^Zi>ZhZ%o9FL61%p>O>4v8`N> z2RwPCoib%)_v@uB;e11?(|EKk_0xVzNx+n58z z+f=Ew;eCg;0p-%)PFUcXlUr@yAla;Ir3bw`(asdIzUGDRBGZ82sAV5>`ulXOT0gVj z!kk$T%D;ZoKCXo0`@CVQN8#tEgx%iu?4awE&V#o;sTadqT{GhWz_>g9PvsHav&&ui zte!Jqfy5aP0QQRxTwS*%G0@A!wM*&b4s({Bt@3mGkTITxj@?b2CcSp1>e_uPgGzX| z(k)9bfAwfonrg5}ntX2kkCQ1U=Jr_ny4)-8oYvph)nC=pv;XPz_Ai~zz8)WOvqi

rRHeWhIn!p> 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 Njqwd{LK%Dc=YPsg--`eM literal 0 HcmV?d00001 diff --git a/env/include/admin.inc b/env/include/admin.inc index 40c5907..fa354f0 100644 --- a/env/include/admin.inc +++ b/env/include/admin.inc @@ -356,7 +356,7 @@ native GetAdminUsername(AdminId:id, String:name[], maxlength); * @param auth Auth method to use, predefined or from RegisterAuthIdentType(). * @param ident String containing the arbitrary, unique identity. * @return True on success, false if the auth method was not found, - * or ident was already taken. + * ident was already taken, or ident invalid for auth method. */ native bool:BindAdminIdentity(AdminId:id, const String:auth[], const String:ident[]); diff --git a/env/include/adminmenu.inc b/env/include/adminmenu.inc index f96eb2a..42d00b9 100644 --- a/env/include/adminmenu.inc +++ b/env/include/adminmenu.inc @@ -65,7 +65,7 @@ * @param topmenu Handle to the admin menu's TopMenu. * @noreturn */ -forward OnAdminMenuCreated(Handle:topmenu); +forward OnAdminMenuCreated(Handle topmenu); /** * Called when the admin menu is ready to have items added. @@ -73,7 +73,7 @@ forward OnAdminMenuCreated(Handle:topmenu); * @param topmenu Handle to the admin menu's TopMenu. * @noreturn */ -forward OnAdminMenuReady(Handle:topmenu); +forward OnAdminMenuReady(Handle topmenu); /** * Retrieves the Handle to the admin top menu. @@ -81,7 +81,7 @@ forward OnAdminMenuReady(Handle:topmenu); * @return Handle to the admin menu's TopMenu, * or INVALID_HANDLE if not created yet. */ -native Handle:GetAdminTopMenu(); +native TopMenu GetAdminTopMenu(); /** * Adds targets to an admin menu. diff --git a/env/include/adt_array.inc b/env/include/adt_array.inc index 798ae55..6c44ad8 100644 --- a/env/include/adt_array.inc +++ b/env/include/adt_array.inc @@ -1,7 +1,7 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -45,13 +45,172 @@ stock ByteCountToCells(size) { if (!size) - { return 1; - } - return (size + 3) / 4; } +methodmap ArrayList < Handle { + // Creates a dynamic global cell array. While slower than a normal array, + // it can be used globally AND dynamically, which is otherwise impossible. + // + // The contents of the array are uniform; i.e. storing a string at index X + // and then retrieving it as an integer is NOT the same as StringToInt()! + // The "blocksize" determines how many cells each array slot has; it cannot + // be changed after creation. + // + // @param blocksize The number of cells each member of the array can + // hold. For example, 32 cells is equivalent to: + // new Array[X][32] + // @param startsize Initial size of the array. Note that data will + // NOT be auto-intialized. + // @return New Handle to the array object. + public native ArrayList(int blocksize=1, int startsize=0); + + // Clears an array of all entries. This is the same as Resize(0). + public native void Clear(); + + // Clones an array, returning a new handle with the same size and data. + // This should NOT be confused with CloneHandle. This is a completely new + // handle with the same data but no relation to the original. It should + // closed when no longer needed. + // + // @return New handle to the cloned array object + public native ArrayList Clone(); + + // Resizes an array. If the size is smaller than the current size, the + // array is truncated. + // + // @param newsize New size. + public native void Resize(int newsize); + + // Pushes a value onto the end of an array, adding a new index. + // + // This may safely be used even if the array has a blocksize greater + // than 1. + // + // @param value Value to push. + // @return Index of the new entry. + // @error Invalid Handle or out of memory. + // + public native int Push(any value); + + // Pushes a string onto the end of an array, truncating it if it is too big. + // + // @param value String to push. + // @return Index of the new entry. + public native int PushString(const char[] value); + + // Pushes an array of cells onto the end of an array. The cells + // are pushed as a block (i.e. the entire array sits at the index), + // rather than pushing each cell individually. + // + // @param values Block of values to copy. + // @param size If not set, the number of elements copied from the array + // will be equal to the blocksize. If set higher than the + // blocksize, the operation will be truncated. + // @return Index of the new entry. + public native int PushArray(const any[] values, int size=-1); + + // Retrieves a cell value from an array. + // + // @param index Index in the array. + // @param block Optionally specify which block to read from + // (useful if the blocksize > 0). + // @param asChar Optionally read as a byte instead of a cell. + // @return Value read. + // @error Invalid index. + public native any Get(int index, int block=0, bool asChar=false); + + // Retrieves a string value from an array. + // + // @param index Index in the array. + // @param buffer Buffer to copy to. + // @param maxlength Maximum size of the buffer. + // @return Number of characters copied. + // @error Invalid index. + public native int GetString(int index, char[] buffer, maxlength); + + // Retrieves an array of cells from an array. + // + // @param index Index in the array. + // @param buffer Buffer to store the array in. + // @param size If not set, assumes the buffer size is equal to the + // blocksize. Otherwise, the size passed is used. + // @return Number of cells copied. + // @error Invalid index. + public native int GetArray(int index, any[] buffer, int size=-1); + + // Sets a cell value in an array. + // + // @param index Index in the array. + // @param value Cell value to set. + // @param block Optionally specify which block to write to + // (useful if the blocksize > 0). + // @param asChar Optionally set as a byte instead of a cell. + // @error Invalid index, or invalid block. + public native void Set(int index, any value, int block=0, bool asChar=false); + + // Sets a string value in an array. + // + // @param index Index in the array. + // @param value String value to set. + // @return Number of characters copied. + // @error Invalid index. + public native void SetString(int index, const char[] value); + + // Sets an array of cells in an array. + // + // @param index Index in the array. + // @param values Array to copy. + // @param size If not set, assumes the buffer size is equal to the + // blocksize. Otherwise, the size passed is used. + // @return Number of cells copied. + // @error Invalid index. + public native void SetArray(int index, const any[] values, int size=-1); + + // Shifts an array up. All array contents after and including the given + // index are shifted up by one, and the given index is then "free." + // After shifting, the contents of the given index is undefined. + // + // @param index Index in the array to shift up from. + // @error Invalid index. + public native void ShiftUp(int index); + + // Removes an array index, shifting the entire array down from that position + // on. For example, if item 8 of 10 is removed, the last 3 items will then be + // (6,7,8) instead of (7,8,9), and all indexes before 8 will remain unchanged. + // + // @param index Index in the array to remove at. + // @error Invalid index. + public native void Erase(int index); + + // Swaps two items in the array. + // + // @param index1 First index. + // @param index2 Second index. + // @error Invalid index. + public native void SwapAt(int index1, int index2); + + // Returns the index for the first occurance of the provided string. If + // the string cannot be located, -1 will be returned. + // + // @param item String to search for + // @return Array index, or -1 on failure + public native int FindString(const char[] item); + + // Returns the index for the first occurance of the provided value. If the + // value cannot be located, -1 will be returned. + // + // @param item Value to search for + // @return Array index, or -1 on failure + public native int FindValue(any item); + + // Retrieve the size of the array. + property int Length { + public native get(); + } +}; + /** * Creates a dynamic global cell array. While slower than a normal array, * it can be used globally AND dynamically, which is otherwise impossible. @@ -68,16 +227,15 @@ stock ByteCountToCells(size) * NOT be auto-intialized. * @return New Handle to the array object. */ -native Handle:CreateArray(blocksize=1, startsize=0); +native ArrayList CreateArray(int blocksize=1, int startsize=0); /** * Clears an array of all entries. This is the same as ResizeArray(0). * * @param array Array Handle. - * @noreturn * @error Invalid Handle. */ -native ClearArray(Handle:array); +native void ClearArray(Handle array); /** * Clones an array, returning a new handle with the same size and data. This should NOT @@ -88,7 +246,7 @@ native ClearArray(Handle:array); * @return New handle to the cloned array object * @error Invalid Handle */ -native Handle:CloneArray(Handle:array); +native Handle CloneArray(Handle array); /** * Resizes an array. If the size is smaller than the current size, @@ -99,7 +257,7 @@ native Handle:CloneArray(Handle:array); * @noreturn * @error Invalid Handle or out of memory. */ -native bool:ResizeArray(Handle:array, newsize); +native bool ResizeArray(Handle array, int newsize); /** * Returns the array size. @@ -108,7 +266,7 @@ native bool:ResizeArray(Handle:array, newsize); * @return Number of elements in the array. * @error Invalid Handle. */ -native GetArraySize(Handle:array); +native int GetArraySize(Handle array); /** * Pushes a value onto the end of an array, adding a new index. @@ -121,7 +279,7 @@ native GetArraySize(Handle:array); * @return Index of the new entry. * @error Invalid Handle or out of memory. */ -native PushArrayCell(Handle:array, any:value); +native int PushArrayCell(Handle array, any value); /** * Pushes a string onto the end of an array, truncating it @@ -132,7 +290,7 @@ native PushArrayCell(Handle:array, any:value); * @return Index of the new entry. * @error Invalid Handle or out of memory. */ -native PushArrayString(Handle:array, const String:value[]); +native int PushArrayString(Handle array, const char[] value); /** * Pushes an array of cells onto the end of an array. The cells @@ -147,7 +305,7 @@ native PushArrayString(Handle:array, const String:value[]); * @return Index of the new entry. * @error Invalid Handle or out of memory. */ -native PushArrayArray(Handle:array, const any:values[], size=-1); +native int PushArrayArray(Handle array, const any[] values, int size=-1); /** * Retrieves a cell value from an array. @@ -160,7 +318,7 @@ native PushArrayArray(Handle:array, const any:values[], size=-1); * @return Value read. * @error Invalid Handle, invalid index, or invalid block. */ -native any:GetArrayCell(Handle:array, index, block=0, bool:asChar=false); +native any GetArrayCell(Handle array, int index, int block=0, bool asChar=false); /** * Retrieves a string value from an array. @@ -172,7 +330,7 @@ native any:GetArrayCell(Handle:array, index, block=0, bool:asChar=false); * @return Number of characters copied. * @error Invalid Handle or invalid index. */ -native GetArrayString(Handle:array, index, String:buffer[], maxlength); +native int GetArrayString(Handle array, int index, char[] buffer, maxlength); /** * Retrieves an array of cells from an array. @@ -185,7 +343,7 @@ native GetArrayString(Handle:array, index, String:buffer[], maxlength); * @return Number of cells copied. * @error Invalid Handle or invalid index. */ -native GetArrayArray(Handle:array, index, any:buffer[], size=-1); +native int GetArrayArray(Handle array, int index, any[] buffer, int size=-1); /** * Sets a cell value in an array. @@ -196,10 +354,9 @@ native GetArrayArray(Handle:array, index, any:buffer[], size=-1); * @param block Optionally specify which block to write to * (useful if the blocksize > 0). * @param asChar Optionally set as a byte instead of a cell. - * @noreturn * @error Invalid Handle, invalid index, or invalid block. */ -native SetArrayCell(Handle:array, index, any:value, block=0, bool:asChar=false); +native void SetArrayCell(Handle array, int index, any value, int block=0, bool asChar=false); /** * Sets a string value in an array. @@ -210,7 +367,7 @@ native SetArrayCell(Handle:array, index, any:value, block=0, bool:asChar=false); * @return Number of characters copied. * @error Invalid Handle or invalid index. */ -native SetArrayString(Handle:array, index, const String:value[]); +native int SetArrayString(Handle array, int index, const char[] value); /** * Sets an array of cells in an array. @@ -223,7 +380,7 @@ native SetArrayString(Handle:array, index, const String:value[]); * @return Number of cells copied. * @error Invalid Handle or invalid index. */ -native SetArrayArray(Handle:array, index, const any:values[], size=-1); +native int SetArrayArray(Handle array, int index, const any[] values, int size=-1); /** * Shifts an array up. All array contents after and including the given @@ -232,10 +389,9 @@ native SetArrayArray(Handle:array, index, const any:values[], size=-1); * * @param array Array Handle. * @param index Index in the array to shift up from. - * @noreturn * @error Invalid Handle or invalid index. */ -native ShiftArrayUp(Handle:array, index); +native void ShiftArrayUp(Handle array, int index); /** * Removes an array index, shifting the entire array down from that position @@ -244,10 +400,9 @@ native ShiftArrayUp(Handle:array, index); * * @param array Array Handle. * @param index Index in the array to remove at. - * @noreturn * @error Invalid Handle or invalid index. */ -native RemoveFromArray(Handle:array, index); +native void RemoveFromArray(Handle array, int index); /** * Swaps two items in the array. @@ -255,10 +410,9 @@ native RemoveFromArray(Handle:array, index); * @param array Array Handle. * @param index1 First index. * @param index2 Second index. - * @noreturn * @error Invalid Handle or invalid index. */ -native SwapArrayItems(Handle:array, index1, index2); +native void SwapArrayItems(Handle array, int index1, int index2); /** * Returns the index for the first occurance of the provided string. If the string @@ -269,7 +423,7 @@ native SwapArrayItems(Handle:array, index1, index2); * @return Array index, or -1 on failure * @error Invalid Handle */ -native FindStringInArray(Handle:array, const String:item[]); +native int FindStringInArray(Handle array, const char[] item); /** * Returns the index for the first occurance of the provided value. If the value @@ -280,4 +434,4 @@ native FindStringInArray(Handle:array, const String:item[]); * @return Array index, or -1 on failure * @error Invalid Handle */ -native FindValueInArray(Handle:array, any:item); +native int FindValueInArray(Handle array, any item); diff --git a/env/include/adt_stack.inc b/env/include/adt_stack.inc index 54029c3..b7d6f75 100644 --- a/env/include/adt_stack.inc +++ b/env/include/adt_stack.inc @@ -1,7 +1,7 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -35,6 +35,82 @@ #endif #define _adt_stack_included +methodmap ArrayStack < Handle +{ + // Creates a stack structure. A stack is a LIFO (last in, first out) + // vector (array) of items. It has O(1) insertion and O(1) removal. + // + // Stacks have two operations: Push (adding an item) and Pop (removes + // items in reverse-push order). + // + // The contents of the stack are uniform; i.e. storing a string and then + // retrieving it as an integer is NOT the same as StringToInt()! + // + // The "blocksize" determines how many cells each slot has; it cannot + // be changed after creation. + // + // @param blocksize The number of cells each entry in the stack can + // hold. For example, 32 cells is equivalent to: + // new Array[X][32] + public native ArrayStack(int blocksize=1); + + // Pushes a value onto the end of the stack, adding a new index. + // + // This may safely be used even if the stack has a blocksize + // greater than 1. + // + // @param value Value to push. + public native void Push(any value); + + // Pushes a copy of a string onto the end of a stack, truncating it if it + // is too big. + // + // @param value String to push. + public native void PushString(const char[] value); + + // Pushes a copy of an array of cells onto the end of a stack. The cells + // are pushed as a block (i.e. the entire array takes up one stack slot), + // rather than pushing each cell individually. + // + // @param stack Stack Handle. + // @param values Block of values to copy. + // @param size If not set, the number of elements copied from the array + // will be equal to the blocksize. If set higher than the + // blocksize, the operation will be truncated. + public native void PushArray(const any[] values, int size=-1); + + // Pops a cell value from a stack. + // + // @param block Optionally specify which block to read from + // (useful if the blocksize > 0). + // @param asChar Optionally read as a byte instead of a cell. + // @return True on success, false if the stack is empty. + // @error The stack is empty. + public native any Pop(int block=0, bool asChar=false); + + // Pops a string value from a stack. + // + // @param buffer Buffer to store string. + // @param maxlength Maximum size of the buffer. + // @oaram written Number of characters written to buffer, not including + // the null terminator. + // @error The stack is empty. + public native void PopString(char[] buffer, int maxlength, int &written = 0); + + // Pops an array of cells from a stack. + // + // @param buffer Buffer to store the array in. + // @param size If not set, assumes the buffer size is equal to the + // blocksize. Otherwise, the size passed is used. + // @error The stack is empty. + public native void PopArray(any[] buffer, int size=-1); + + // Returns true if the stack is empty, false otherwise. + property bool Empty { + public native get(); + } +}; + /** * Creates a stack structure. A stack is a LIFO (last in, first out) * vector (array) of items. It has O(1) insertion and O(1) removal. @@ -53,7 +129,7 @@ * new Array[X][32] * @return New stack Handle. */ -native Handle:CreateStack(blocksize=1); +native ArrayStack CreateStack(int blocksize=1); /** * Pushes a value onto the end of the stack, adding a new index. @@ -63,24 +139,22 @@ native Handle:CreateStack(blocksize=1); * * @param stack Stack Handle. * @param value Value to push. - * @noreturn * @error Invalid Handle or out of memory. */ -native PushStackCell(Handle:stack, any:value); +native void PushStackCell(Handle stack, any value); /** - * Pushes a string onto the end of a stack, truncating it if it is + * Pushes a copy of a string onto the end of a stack, truncating it if it is * too big. * * @param stack Stack Handle. * @param value String to push. - * @noreturn * @error Invalid Handle or out of memory. */ -native PushStackString(Handle:stack, const String:value[]); +native void PushStackString(Handle stack, const char[] value); /** - * Pushes an array of cells onto the end of a stack. The cells + * Pushes a copy of an array of cells onto the end of a stack. The cells * are pushed as a block (i.e. the entire array takes up one stack slot), * rather than pushing each cell individually. * @@ -89,10 +163,9 @@ native PushStackString(Handle:stack, const String:value[]); * @param size If not set, the number of elements copied from the array * will be equal to the blocksize. If set higher than the * blocksize, the operation will be truncated. - * @noreturn * @error Invalid Handle or out of memory. */ -native PushStackArray(Handle:stack, const any:values[], size=-1); +native void PushStackArray(Handle stack, const any[] values, int size=-1); /** * Pops a cell value from a stack. @@ -105,7 +178,7 @@ native PushStackArray(Handle:stack, const any:values[], size=-1); * @return True on success, false if the stack is empty. * @error Invalid Handle. */ -native bool:PopStackCell(Handle:stack, &any:value, block=0, bool:asChar=false); +native bool PopStackCell(Handle stack, any &value, int block=0, bool asChar=false); /** * Pops a string value from a stack. @@ -116,7 +189,7 @@ native bool:PopStackCell(Handle:stack, &any:value, block=0, bool:asChar=false); * @return True on success, false if the stack is empty. * @error Invalid Handle. */ -native bool:PopStackString(Handle:stack, String:buffer[], maxlength, &written=0); +native bool PopStackString(Handle stack, char[] buffer, int maxlength, int &written=0); /** * Pops an array of cells from a stack. @@ -128,7 +201,7 @@ native bool:PopStackString(Handle:stack, String:buffer[], maxlength, &written=0) * @return True on success, false if the stack is empty. * @error Invalid Handle. */ -native bool:PopStackArray(Handle:stack, any:buffer[], size=-1); +native bool PopStackArray(Handle stack, any[] buffer, int size=-1); /** * Checks if a stack is empty. @@ -137,7 +210,7 @@ native bool:PopStackArray(Handle:stack, any:buffer[], size=-1); * @return True if empty, false if not empty. * @error Invalid Handle. */ -native bool:IsStackEmpty(Handle:stack); +native bool IsStackEmpty(Handle stack); /** * Pops a value off a stack, ignoring it completely. @@ -146,9 +219,8 @@ native bool:IsStackEmpty(Handle:stack); * @return True if something was popped, false otherwise. * @error Invalid Handle. */ -stock PopStack(Handle:stack) +stock bool PopStack(Handle stack) { new value; - return PopStackCell(stack, value); } diff --git a/env/include/adt_trie.inc b/env/include/adt_trie.inc index 4e9f120..e6e9895 100644 --- a/env/include/adt_trie.inc +++ b/env/include/adt_trie.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -35,6 +35,123 @@ #endif #define _adt_trie_included +/* Object-oriented wrapper for maps. */ +methodmap StringMap < Handle +{ + // Creates a hash map. A hash map is a container that can map strings (called + // "keys") to arbitrary values (cells, arrays, or strings). Keys in a hash map + // are unique. That is, there is at most one entry in the map for a given key. + // + // Insertion, deletion, and lookup in a hash map are all considered to be fast + // operations, amortized to O(1), or constant time. + // + // The word "Trie" in this API is historical. As of SourceMod 1.6, tries have + // been internally replaced with hash tables, which have O(1) insertion time + // instead of O(n). + // + // The StringMap must be freed via delete or CloseHandle(). + public native StringMap(); + + // Sets a value in a hash map, either inserting a new entry or replacing an old one. + // + // @param key Key string. + // @param value Value to store at this key. + // @param replace If false, operation will fail if the key is already set. + // @return True on success, false on failure. + public native bool SetValue(const char[] key, any value, bool replace=true); + + // Sets an array value in a Map, either inserting a new entry or replacing an old one. + // + // @param key Key string. + // @param array Array to store. + // @param num_items Number of items in the array. + // @param replace If false, operation will fail if the key is already set. + // @return True on success, false on failure. + public native bool SetArray(const char[] key, const any[] array, int num_items, bool replace=true); + + // Sets a string value in a Map, either inserting a new entry or replacing an old one. + // + // @param key Key string. + // @param value String to store. + // @param replace If false, operation will fail if the key is already set. + // @return True on success, false on failure. + public native bool SetString(const char[] key, const char[] value, bool replace=true); + + // Retrieves a value in a Map. + // + // @param key Key string. + // @param value Variable to store value. + // @return True on success. False if the key is not set, or the key is set + // as an array or string (not a value). + public native bool GetValue(const char[] key, any &value); + + // Retrieves an array in a Map. + // + // @param map Map Handle. + // @param key Key string. + // @param array Buffer to store array. + // @param max_size Maximum size of array buffer. + // @param size Optional parameter to store the number of elements written to the buffer. + // @return True on success. False if the key is not set, or the key is set + // as a value or string (not an array). + public native bool GetArray(const char[] key, any[] array, int max_size, int &size=0); + + // Retrieves a string in a Map. + // + // @param key Key string. + // @param value Buffer to store value. + // @param max_size Maximum size of string buffer. + // @param size Optional parameter to store the number of bytes written to the buffer. + // @return True on success. False if the key is not set, or the key is set + // as a value or array (not a string). + public native bool GetString(const char[] key, char[] value, int max_size, int &size=0); + + // Removes a key entry from a Map. + // + // @param key Key string. + // @return True on success, false if the value was never set. + public native bool Remove(const char[] key); + + // Clears all entries from a Map. + public native void Clear(); + + // Create a snapshot of the map's keys. See StringMapSnapshot. + public native StringMapSnapshot Snapshot(); + + // Retrieves the number of elements in a map. + property int Size { + public native get(); + } +}; + +// A StringMapSnapshot is created via StringMap.Snapshot(). It captures the +// keys on a map so they can be read. Snapshots must be freed with delete or +// CloseHandle(). +methodmap StringMapSnapshot < Handle +{ + // Returns the number of keys in the map snapshot. + property int Length { + public native get(); + } + + // Returns the buffer size required to store a given key. That is, it + // returns the length of the key plus one. + // + // @param index Key index (starting from 0). + // @return Buffer size required to store the key string. + // @error Index out of range. + public native int KeyBufferSize(int index); + + // Retrieves the key string of a given key in a map snapshot. + // + // @param index Key index (starting from 0). + // @param buffer String buffer. + // @param maxlength Maximum buffer length. + // @return Number of bytes written to the buffer. + // @error Index out of range. + public native int GetKey(int index, char[] buffer, int maxlength); +}; + /** * Creates a hash map. A hash map is a container that can map strings (called * "keys") to arbitrary values (cells, arrays, or strings). Keys in a hash map @@ -49,7 +166,7 @@ * * @return New Map Handle, which must be freed via CloseHandle(). */ -native Handle:CreateTrie(); +native StringMap:CreateTrie(); /** * Sets a value in a hash map, either inserting a new entry or replacing an old one. @@ -61,7 +178,7 @@ native Handle:CreateTrie(); * @return True on success, false on failure. * @error Invalid Handle. */ -native bool:SetTrieValue(Handle:map, const String:key[], any:value, bool:replace=true); +native bool SetTrieValue(Handle map, const char[] key, any value, bool replace=true); /** * Sets an array value in a Map, either inserting a new entry or replacing an old one. @@ -74,7 +191,7 @@ native bool:SetTrieValue(Handle:map, const String:key[], any:value, bool:replace * @return True on success, false on failure. * @error Invalid Handle. */ -native bool:SetTrieArray(Handle:map, const String:key[], const any:array[], num_items, bool:replace=true); +native bool SetTrieArray(Handle map, const char[] key, const any[] array, int num_items, bool replace=true); /** * Sets a string value in a Map, either inserting a new entry or replacing an old one. @@ -86,7 +203,7 @@ native bool:SetTrieArray(Handle:map, const String:key[], const any:array[], num_ * @return True on success, false on failure. * @error Invalid Handle. */ -native bool:SetTrieString(Handle:map, const String:key[], const String:value[], bool:replace=true); +native bool SetTrieString(Handle map, const char[] key, const char[] value, bool replace=true); /** * Retrieves a value in a Map. @@ -98,7 +215,7 @@ native bool:SetTrieString(Handle:map, const String:key[], const String:value[], * as an array or string (not a value). * @error Invalid Handle. */ -native bool:GetTrieValue(Handle:map, const String:key[], &any:value); +native bool GetTrieValue(Handle map, const char[] key, any &value); /** * Retrieves an array in a Map. @@ -112,7 +229,7 @@ native bool:GetTrieValue(Handle:map, const String:key[], &any:value); * as a value or string (not an array). * @error Invalid Handle. */ -native bool:GetTrieArray(Handle:map, const String:key[], any:array[], max_size, &size=0); +native bool GetTrieArray(Handle map, const char[] key, any[] array, int max_size, int &size=0); /** * Retrieves a string in a Map. @@ -126,7 +243,7 @@ native bool:GetTrieArray(Handle:map, const String:key[], any:array[], max_size, * as a value or array (not a string). * @error Invalid Handle. */ -native bool:GetTrieString(Handle:map, const String:key[], String:value[], max_size, &size=0); +native bool GetTrieString(Handle map, const char[] key, char[] value, int max_size, int &size=0); /** * Removes a key entry from a Map. @@ -136,7 +253,7 @@ native bool:GetTrieString(Handle:map, const String:key[], String:value[], max_si * @return True on success, false if the value was never set. * @error Invalid Handle. */ -native RemoveFromTrie(Handle:map, const String:key[]); +native RemoveFromTrie(Handle map, const char[] key); /** * Clears all entries from a Map. @@ -144,7 +261,7 @@ native RemoveFromTrie(Handle:map, const String:key[]); * @param map Map Handle. * @error Invalid Handle. */ -native ClearTrie(Handle:map); +native ClearTrie(Handle map); /** * Retrieves the number of elements in a map. @@ -153,4 +270,48 @@ native ClearTrie(Handle:map); * @return Number of elements in the trie. * @error Invalid Handle. */ -native GetTrieSize(Handle:map); +native GetTrieSize(Handle map); + +/** + * Creates a snapshot of all keys in the map. If the map is changed after this + * call, the changes are not reflected in the snapshot. Keys are not sorted. + * + * @param map Map Handle. + * @return New Map Snapshot Handle, which must be closed via CloseHandle(). + * @error Invalid Handle. + */ +native Handle CreateTrieSnapshot(Handle map); + +/** + * Returns the number of keys in a map snapshot. Note that this may be + * different from the size of the map, since the map can change after the + * snapshot of its keys was taken. + * + * @param snapshot Map snapshot. + * @return Number of keys. + * @error Invalid Handle. + */ +native TrieSnapshotLength(Handle snapshot); + +/** + * Returns the buffer size required to store a given key. That is, it returns + * the length of the key plus one. + * + * @param snapshot Map snapshot. + * @param index Key index (starting from 0). + * @return Buffer size required to store the key string. + * @error Invalid Handle or index out of range. + */ +native TrieSnapshotKeyBufferSize(Handle snapshot, int index); + +/** + * Retrieves the key string of a given key in a map snapshot. + * + * @param snapshot Map snapshot. + * @param index Key index (starting from 0). + * @param buffer String buffer. + * @param maxlength Maximum buffer length. + * @return Number of bytes written to the buffer. + * @error Invalid Handle or index out of range. + */ +native GetTrieSnapshotKey(Handle snapshot, int index, char[] buffer, int maxlength); diff --git a/env/include/bitbuffer.inc b/env/include/bitbuffer.inc index fd1c18e..cbf71b7 100644 --- a/env/include/bitbuffer.inc +++ b/env/include/bitbuffer.inc @@ -1,7 +1,7 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -35,85 +35,239 @@ #endif #define _bitbuffer_included +methodmap BfWrite < Handle +{ + // Writes a single bit to a writable bitbuffer (bf_write). + // + // @param bit Bit to write (true for 1, false for 0). + public native void WriteBool(bool bit); + + // Writes a byte to a writable bitbuffer (bf_write). + // + // @param byte Byte to write (value will be written as 8bit). + public native void WriteByte(int byte); + + // Writes a byte to a writable bitbuffer (bf_write). + // + // @param chr Character to write. + public native void WriteChar(int chr); + + // Writes a 16bit integer to a writable bitbuffer (bf_write). + // + // @param num Integer to write (value will be written as 16bit). + public native void WriteShort(int num); + + // Writes a 16bit unsigned integer to a writable bitbuffer (bf_write). + // + // @param num Integer to write (value will be written as 16bit). + public native void WriteWord(int num); + + // Writes a normal integer to a writable bitbuffer (bf_write). + // + // @param num Integer to write (value will be written as 32bit). + public native void WriteNum(int num); + + // Writes a floating point number to a writable bitbuffer (bf_write). + // + // @param num Number to write. + public native void WriteFloat(float num); + + // Writes a string to a writable bitbuffer (bf_write). + // + // @param string Text string to write. + public native void WriteString(const char[] string); + + // Writes an entity to a writable bitbuffer (bf_write). + // + // @param ent Entity index to write. + public native void WriteEntity(int ent); + + // Writes a bit angle to a writable bitbuffer (bf_write). + // + // @param angle Angle to write. + // @param numBits Optional number of bits to use. + public native void WriteAngle(float angle, int numBits=8); + + // Writes a coordinate to a writable bitbuffer (bf_write). + // + // @param coord Coordinate to write. + public native void WriteCoord(float coord); + + // Writes a 3D vector of coordinates to a writable bitbuffer (bf_write). + // + // @param coord Coordinate array to write. + public native void WriteVecCoord(float coord[3]); + + // Writes a 3D normal vector to a writable bitbuffer (bf_write). + // + // @param vec Vector to write. + public native void WriteVecNormal(float vec[3]); + + // Writes a 3D angle vector to a writable bitbuffer (bf_write). + // + // @param angles Angle vector to write. + public native void WriteAngles(float angles[3]); +}; + +methodmap BfRead < Handle +{ + // Reads a single bit from a readable bitbuffer (bf_read). + // + // @return Bit value read. + public native bool ReadBool(); + + // Reads a byte from a readable bitbuffer (bf_read). + // + // @return Byte value read (read as 8bit). + public native int ReadByte(); + + // Reads a character from a readable bitbuffer (bf_read). + // + // @return Character value read. + public native int ReadChar(); + + // Reads a 16bit integer from a readable bitbuffer (bf_read). + // + // @param bf bf_read handle to read from. + // @return Integer value read (read as 16bit). + public native int ReadShort(); + + // Reads a 16bit unsigned integer from a readable bitbuffer (bf_read). + // + // @param bf bf_read handle to read from. + // @return Integer value read (read as 16bit). + public native int ReadWord(); + + // Reads a normal integer to a readable bitbuffer (bf_read). + // + // @return Integer value read (read as 32bit). + public native int ReadNum(); + + // Reads a floating point number from a readable bitbuffer (bf_read). + // + // @return Floating point value read. + public native float ReadFloat(); + + // Reads a string from a readable bitbuffer (bf_read). + // + // @param buffer Destination string buffer. + // @param maxlength Maximum length of output string buffer. + // @param line If true the buffer will be copied until it reaches a '\n' or a null terminator. + // @return Number of bytes written to the buffer. If the bitbuffer stream overflowed, + // that is, had no terminator before the end of the stream, then a negative + // number will be returned equal to the number of characters written to the + // buffer minus 1. The buffer will be null terminated regardless of the + // return value. + public native int ReadString(char[] buffer, int maxlength, bool line=false); + + // Reads an entity from a readable bitbuffer (bf_read). + // + // @return Entity index read. + public native int ReadEntity(); + + // Reads a bit angle from a readable bitbuffer (bf_read). + // + // @param numBits Optional number of bits to use. + // @return Angle read. + public native float ReadAngle(int numBits=8); + + // Reads a coordinate from a readable bitbuffer (bf_read). + // + // @return Coordinate read. + public native float ReadCoord(); + + // Reads a 3D vector of coordinates from a readable bitbuffer (bf_read). + // + // @param coord Destination coordinate array. + public native void ReadVecCoord(float coord[3]); + + // Reads a 3D normal vector from a readable bitbuffer (bf_read). + // + // @param vec Destination vector array. + public native void ReadVecNormal(float vec[3]); + + // Reads a 3D angle vector from a readable bitbuffer (bf_read). + // + // @param angles Destination angle vector. + public native void ReadAngles(float angles[3]); + + // Returns the number of bytes left in a readable bitbuffer (bf_read). + property int BytesLeft { + public native get(); + } +}; + /** * Writes a single bit to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param bit Bit to write (true for 1, false for 0). - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteBool(Handle:bf, bool:bit); +native void BfWriteBool(Handle bf, bool bit); /** * Writes a byte to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param byte Byte to write (value will be written as 8bit). - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteByte(Handle:bf, byte); +native void BfWriteByte(Handle bf, int byte); /** * Writes a byte to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param chr Character to write. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteChar(Handle:bf, chr); +native void BfWriteChar(Handle bf, int chr); /** * Writes a 16bit integer to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param num Integer to write (value will be written as 16bit). - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteShort(Handle:bf, num); +native void BfWriteShort(Handle bf, int num); /** * Writes a 16bit unsigned integer to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param num Integer to write (value will be written as 16bit). - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteWord(Handle:bf, num); +native void BfWriteWord(Handle bf, int num); /** * Writes a normal integer to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param num Integer to write (value will be written as 32bit). - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteNum(Handle:bf, num); +native void BfWriteNum(Handle bf, int num); /** * Writes a floating point number to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param num Number to write. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteFloat(Handle:bf, Float:num); +native void BfWriteFloat(Handle bf, float num); /** * Writes a string to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param string Text string to write. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteString(Handle:bf, const String:string[]); +native void BfWriteString(Handle bf, const char[] string); /** * Writes an entity to a writable bitbuffer (bf_write). @@ -121,10 +275,9 @@ native BfWriteString(Handle:bf, const String:string[]); * * @param bf bf_write handle to write to. * @param ent Entity index to write. - * @noreturn * @error Invalid or incorrect Handle, or invalid entity. */ -native BfWriteEntity(Handle:bf, ent); +native void BfWriteEntity(Handle bf, int ent); /** * Writes a bit angle to a writable bitbuffer (bf_write). @@ -132,30 +285,27 @@ native BfWriteEntity(Handle:bf, ent); * @param bf bf_write handle to write to. * @param angle Angle to write. * @param numBits Optional number of bits to use. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteAngle(Handle:bf, Float:angle, numBits=8); +native void BfWriteAngle(Handle bf, float angle, int numBits=8); /** * Writes a coordinate to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param coord Coordinate to write. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteCoord(Handle:bf, Float:coord); +native void BfWriteCoord(Handle bf, float coord); /** * Writes a 3D vector of coordinates to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param coord Coordinate array to write. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteVecCoord(Handle:bf, Float:coord[3]); +native void BfWriteVecCoord(Handle bf, float coord[3]); /** * Writes a 3D normal vector to a writable bitbuffer (bf_write). @@ -165,17 +315,16 @@ native BfWriteVecCoord(Handle:bf, Float:coord[3]); * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteVecNormal(Handle:bf, Float:vec[3]); +native void BfWriteVecNormal(Handle bf, float vec[3]); /** * Writes a 3D angle vector to a writable bitbuffer (bf_write). * * @param bf bf_write handle to write to. * @param angles Angle vector to write. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfWriteAngles(Handle:bf, Float:angles[3]); +native void BfWriteAngles(Handle bf, float angles[3]); /** * Reads a single bit from a readable bitbuffer (bf_read). @@ -184,7 +333,7 @@ native BfWriteAngles(Handle:bf, Float:angles[3]); * @return Bit value read. * @error Invalid or incorrect Handle. */ -native bool:BfReadBool(Handle:bf); +native bool BfReadBool(Handle bf); /** * Reads a byte from a readable bitbuffer (bf_read). @@ -193,7 +342,7 @@ native bool:BfReadBool(Handle:bf); * @return Byte value read (read as 8bit). * @error Invalid or incorrect Handle. */ -native BfReadByte(Handle:bf); +native int BfReadByte(Handle bf); /** * Reads a character from a readable bitbuffer (bf_read). @@ -202,7 +351,7 @@ native BfReadByte(Handle:bf); * @return Character value read. * @error Invalid or incorrect Handle. */ -native BfReadChar(Handle:bf); +native int BfReadChar(Handle bf); /** * Reads a 16bit integer from a readable bitbuffer (bf_read). @@ -211,7 +360,7 @@ native BfReadChar(Handle:bf); * @return Integer value read (read as 16bit). * @error Invalid or incorrect Handle. */ -native BfReadShort(Handle:bf); +native int BfReadShort(Handle bf); /** * Reads a 16bit unsigned integer from a readable bitbuffer (bf_read). @@ -220,7 +369,7 @@ native BfReadShort(Handle:bf); * @return Integer value read (read as 16bit). * @error Invalid or incorrect Handle. */ -native BfReadWord(Handle:bf); +native int BfReadWord(Handle bf); /** * Reads a normal integer to a readable bitbuffer (bf_read). @@ -229,7 +378,7 @@ native BfReadWord(Handle:bf); * @return Integer value read (read as 32bit). * @error Invalid or incorrect Handle. */ -native BfReadNum(Handle:bf); +native int BfReadNum(Handle bf); /** * Reads a floating point number from a readable bitbuffer (bf_read). @@ -238,7 +387,7 @@ native BfReadNum(Handle:bf); * @return Floating point value read. * @error Invalid or incorrect Handle. */ -native Float:BfReadFloat(Handle:bf); +native float BfReadFloat(Handle bf); /** * Reads a string from a readable bitbuffer (bf_read). @@ -254,7 +403,7 @@ native Float:BfReadFloat(Handle:bf); * return value. * @error Invalid or incorrect Handle. */ -native BfReadString(Handle:bf, String:buffer[], maxlength, bool:line=false); +native int BfReadString(Handle bf, char[] buffer, int maxlength, bool line=false); /** * Reads an entity from a readable bitbuffer (bf_read). @@ -264,7 +413,7 @@ native BfReadString(Handle:bf, String:buffer[], maxlength, bool:line=false); * @return Entity index read. * @error Invalid or incorrect Handle. */ -native BfReadEntity(Handle:bf); +native int BfReadEntity(Handle bf); /** * Reads a bit angle from a readable bitbuffer (bf_read). @@ -274,7 +423,7 @@ native BfReadEntity(Handle:bf); * @return Angle read. * @error Invalid or incorrect Handle. */ -native Float:BfReadAngle(Handle:bf, numBits=8); +native float BfReadAngle(Handle bf, int numBits=8); /** * Reads a coordinate from a readable bitbuffer (bf_read). @@ -283,37 +432,34 @@ native Float:BfReadAngle(Handle:bf, numBits=8); * @return Coordinate read. * @error Invalid or incorrect Handle. */ -native Float:BfReadCoord(Handle:bf); +native float BfReadCoord(Handle bf); /** * Reads a 3D vector of coordinates from a readable bitbuffer (bf_read). * * @param bf bf_read handle to read from. * @param coord Destination coordinate array. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfReadVecCoord(Handle:bf, Float:coord[3]); +native void BfReadVecCoord(Handle bf, float coord[3]); /** * Reads a 3D normal vector from a readable bitbuffer (bf_read). * * @param bf bf_read handle to read from. * @param vec Destination vector array. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfReadVecNormal(Handle:bf, Float:vec[3]); +native void BfReadVecNormal(Handle bf, float vec[3]); /** * Reads a 3D angle vector from a readable bitbuffer (bf_read). * * @param bf bf_read handle to read from. * @param angles Destination angle vector. - * @noreturn * @error Invalid or incorrect Handle. */ -native BfReadAngles(Handle:bf, Float:angles[3]); +native void BfReadAngles(Handle bf, float angles[3]); /** * Returns the number of bytes left in a readable bitbuffer (bf_read). @@ -322,4 +468,4 @@ native BfReadAngles(Handle:bf, Float:angles[3]); * @return Number of bytes left unread. * @error Invalid or incorrect Handle. */ -native BfGetNumBytesLeft(Handle:bf); +native int BfGetNumBytesLeft(Handle bf); diff --git a/env/include/clientprefs.inc b/env/include/clientprefs.inc index c6ac023..d708e40 100644 --- a/env/include/clientprefs.inc +++ b/env/include/clientprefs.inc @@ -165,9 +165,16 @@ forward OnClientCookiesCached(client); * @param action CookieMenuAction being performed. * @param info Info data passed. * @param buffer Outbut buffer. - * @param maxlen Max length of the output buffer. + * @param maxlen Max length of the output buffer. + * @noreturn */ -functag public CookieMenuHandler(client, CookieMenuAction:action, any:info, String:buffer[], maxlen); +typedef CookieMenuHandler = function void ( + int client, + CookieMenuAction action, + any info, + char[] buffer, + int maxlen +); /** * Add a new prefab item to the client cookie settings menu. @@ -182,7 +189,7 @@ functag public CookieMenuHandler(client, CookieMenuAction:action, any:info, Stri * @noreturn * @error Invalid cookie handle. */ -native SetCookiePrefabMenu(Handle:cookie, CookieMenu:type, const String:display[], CookieMenuHandler:handler=CookieMenuHandler:-1, info=0); +native SetCookiePrefabMenu(Handle:cookie, CookieMenu:type, const String:display[], CookieMenuHandler:handler=INVALID_FUNCTION, info=0); /** * Adds a new item to the client cookie settings menu. diff --git a/env/include/clients.inc b/env/include/clients.inc index 13381c3..991d120 100644 --- a/env/include/clients.inc +++ b/env/include/clients.inc @@ -45,6 +45,25 @@ enum NetFlow NetFlow_Both, /**< Both values added together */ }; +/** + * Auth string types. + * + * Note that for the Steam2 and Steam3 types, the following ids are + * also valid values: + * "STEAM_ID_PENDING" - Authentication is pending. + * "STEAM_ID_LAN" - Authentication is disabled because of being on a LAN server. + * "BOT" - The client is a bot. + */ +enum AuthIdType +{ + AuthId_Engine = 0, /**< The game-specific auth string as returned from the engine */ + + // The following are only available on games that support Steam authentication. + AuthId_Steam2, /**< Steam2 rendered format, ex "STEAM_1:1:4153990" */ + AuthId_Steam3, /**< Steam3 rendered format, ex "[U:1:8307981]" */ + AuthId_SteamID64, /**< A SteamID64 (uint64) as a String, ex "76561197968573709" */ +}; + /** * MAXPLAYERS is not the same as MaxClients. * MAXPLAYERS is a hardcoded value as an upper limit. MaxClients changes based on the server. @@ -80,7 +99,7 @@ forward bool:OnClientConnect(client, String:rejectmsg[], maxlen); * @param client Client index. * @noreturn */ -forward OnClientConnected(client); +forward void OnClientConnected(client); /** * Called when a client is entering the game. @@ -96,7 +115,7 @@ forward OnClientConnected(client); * @param client Client index. * @noreturn */ -forward OnClientPutInServer(client); +forward void OnClientPutInServer(client); /** * Called when a client is disconnecting from the server. @@ -104,7 +123,7 @@ forward OnClientPutInServer(client); * @param client Client index. * @noreturn */ -forward OnClientDisconnect(client); +forward void OnClientDisconnect(client); /** * Called when a client is disconnected from the server. @@ -112,7 +131,7 @@ forward OnClientDisconnect(client); * @param client Client index. * @noreturn */ -forward OnClientDisconnect_Post(client); +forward void OnClientDisconnect_Post(client); /** * Called when a client is sending a command. @@ -132,20 +151,20 @@ forward Action:OnClientCommand(client, args); * @param client Client index. * @noreturn */ -forward OnClientSettingsChanged(client); +forward void OnClientSettingsChanged(client); /** - * Called when a client receives a Steam ID. The state of a client's + * Called when a client receives an auth ID. The state of a client's * authorization as an admin is not guaranteed here. Use * OnClientPostAdminCheck() if you need a client's admin status. * * This is called by bots, but the ID will be "BOT". * * @param client Client index. - * @param auth Client auth string. + * @param auth Client Steam2 id, if available, else engine auth id. * @noreturn */ -forward OnClientAuthorized(client, const String:auth[]); +forward void OnClientAuthorized(client, const String:auth[]); /** * Called once a client is authorized and fully in-game, but @@ -180,7 +199,7 @@ forward Action:OnClientPreAdminCheck(client); * @param client Client index. * @noreturn */ -forward OnClientPostAdminFilter(client); +forward void OnClientPostAdminFilter(client); /** * Called once a client is authorized and fully in-game, and @@ -192,7 +211,7 @@ forward OnClientPostAdminFilter(client); * @param client Client index. * @noreturn */ -forward OnClientPostAdminCheck(client); +forward void OnClientPostAdminCheck(client); /** * This function will be deprecated in a future release. Use the MaxClients variable instead. @@ -267,8 +286,24 @@ native bool:GetClientIP(client, String:ip[], maxlen, bool:remport=true); * @return True on success, false otherwise. * @error If the client is not connected or the index is invalid. */ +#pragma deprecated Use GetClientAuthId native bool:GetClientAuthString(client, String:auth[], maxlen, bool:validate=true); +/** + * Retrieves a client's authentication string (SteamID). + * + * @param client Player index. + * @param authType Auth id type and format to use. + * @param auth Buffer to store the client's auth id. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @param validate Check backend validation status. + * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, + * You WILL KNOW if you need to use this, MOST WILL NOT. + * @return True on success, false otherwise. + * @error If the client is not connected or the index is invalid. + */ +native bool:GetClientAuthId(client, AuthIdType:authType, String:auth[], maxlen, bool:validate=true); + /** * Returns the client's Steam account ID. * diff --git a/env/include/commandfilters.inc b/env/include/commandfilters.inc index 6ea447c..2ddd5a5 100644 --- a/env/include/commandfilters.inc +++ b/env/include/commandfilters.inc @@ -140,7 +140,7 @@ stock ReplyToTargetError(client, reason) * @param clients Array to fill with unique, valid client indexes. * @return True if pattern was recognized, false otherwise. */ -functag public bool:MultiTargetFilter(const String:pattern[], Handle:clients); +typedef MultiTargetFilter = function bool (const char[] pattern, Handle clients); /** * Adds a multi-target filter function for ProcessTargetString(). diff --git a/env/include/commandline.inc b/env/include/commandline.inc new file mode 100644 index 0000000..291a8b6 --- /dev/null +++ b/env/include/commandline.inc @@ -0,0 +1,87 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ + */ + +#if defined _commandline_included_ + #endinput +#endif +#define _commandline_included_ + +/** + * Gets the full command line the server was launched with. + * + * @param commandLine Buffer to store the command line in. + * @param maxlen Maximum length of the command line buffer. + * @return True if the command line is valid; otherwise, false. + * @error No command line available, or no mod support. + */ +native bool:GetCommandLine(String:commandLine[], maxlen); + +/** + * Gets the value of a command line parameter the server was launched with. + * + * @param param The command line parameter to get the value of. + * @param value Buffer to store the parameter value in. + * @param maxlen Maximum length of the value buffer. + * @param defValue The default value to return if the parameter wasn't specified. + * @return True if the command line is valid; otherwise, false. + * @error No command line available, or no mod support. + */ +native GetCommandLineParam(const String:param[], String:value[], maxlen, const String:defValue[]=""); + +/** + * Gets the value of a command line parameter the server was launched with. + * + * @param param The command line parameter to get the value of. + * @param defValue The default value to return if the parameter wasn't specified. + * @return The integer value of the command line parameter value. + * @error No command line available, or no mod support. + */ +native GetCommandLineParamInt(const String:param[], defValue=0); + +/** + * Gets the value of a command line parameter the server was launched with. + * + * @param param The command line parameter to get the value of. + * @param defValue The default value to return if the parameter wasn't specified. + * @return The floating point value of the command line parameter value. + * @error No command line available, or no mod support. + */ +native Float:GetCommandLineParamFloat(const String:param[], Float:defValue=0.0); + +/** + * Determines if a specific command line parameter is present. + * + * @param param The command line parameter to test. + * @return True if the command line parameter is specified; otherwise, false. + * @error No command line available, or no mod support. + */ +native bool:FindCommandLineParam(const String:param[]); diff --git a/env/include/console.inc b/env/include/console.inc index d89bcbc..3275041 100644 --- a/env/include/console.inc +++ b/env/include/console.inc @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _console_included #endinput #endif @@ -37,15 +37,6 @@ #define INVALID_FCVAR_FLAGS (-1) -/** - * Console variable bound values used with Get/SetConVarBounds() - */ -enum ConVarBounds -{ - ConVarBound_Upper = 0, - ConVarBound_Lower -}; - /** * Console variable query helper values. */ @@ -63,17 +54,6 @@ enum ReplySource SM_REPLY_TO_CHAT = 1, }; -/** - * Console variable query result values. - */ -enum ConVarQueryResult -{ - ConVarQuery_Okay = 0, /**< Retrieval of client convar value was successful. */ - ConVarQuery_NotFound, /**< Client convar was not found. */ - ConVarQuery_NotValid, /**< A console command with the same name was found, but there is no convar. */ - ConVarQuery_Protected /**< Client convar was found, but it is protected. The server cannot retrieve its value. */ -}; - /** * @section Flags for console commands and console variables. The descriptions * for each constant come directly from the Source SDK. @@ -328,7 +308,7 @@ native FormatActivitySource(client, target, const String:namebuf[], maxlength); * @return An Action value. Not handling the command * means that Source will report it as "not found." */ -functag public Action:SrvCmd(args); +typedef SrvCmd = function Action (int args); /** * Creates a server-only console command, or hooks an already existing one. @@ -352,7 +332,7 @@ native RegServerCmd(const String:cmd[], SrvCmd:callback, const String:descriptio * @return An Action value. Not handling the command * means that Source will report it as "not found." */ -functag public Action:ConCmd(client, args); +typedef ConCmd = function Action (int client, int args); /** * Creates a console command, or hooks an already existing one. @@ -424,293 +404,6 @@ native GetCmdArg(argnum, String:buffer[], maxlength); */ native GetCmdArgString(String:buffer[], maxlength); -/** - * Creates a new console variable. - * - * @param name Name of new convar. - * @param defaultValue String containing the default value of new convar. - * @param description Optional description of the convar. - * @param flags Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details. - * @param hasMin Optional boolean that determines if the convar has a minimum value. - * @param min Minimum floating point value that the convar can have if hasMin is true. - * @param hasMax Optional boolean that determines if the convar has a maximum value. - * @param max Maximum floating point value that the convar can have if hasMax is true. - * @return A handle to the newly created convar. If the convar already exists, a handle to it will still be returned. - * @error Convar name is blank or is the same as an existing console command. - */ -native Handle:CreateConVar(const String:name[], const String:defaultValue[], const String:description[]="", flags=0, bool:hasMin=false, Float:min=0.0, bool:hasMax=false, Float:max=0.0); - -/** - * Searches for a console variable. - * - * @param name Name of convar to find. - * @return A handle to the convar if it is found. INVALID_HANDLE otherwise. - */ -native Handle:FindConVar(const String:name[]); - -/** - * Called when a console variable's value is changed. - * - * @param convar Handle to the convar that was changed. - * @param oldValue String containing the value of the convar before it was changed. - * @param newValue String containing the new value of the convar. - * @noreturn - */ -functag public ConVarChanged(Handle:convar, const String:oldValue[], const String:newValue[]); - -/** - * Creates a hook for when a console variable's value is changed. - * - * @param convar Handle to the convar. - * @param callback An OnConVarChanged function pointer. - * @noreturn - * @error Invalid or corrupt Handle or invalid callback function. - */ -native HookConVarChange(Handle:convar, ConVarChanged:callback); - -/** - * Removes a hook for when a console variable's value is changed. - * - * @param convar Handle to the convar. - * @param callback An OnConVarChanged function pointer. - * @noreturn - * @error Invalid or corrupt Handle, invalid callback function, or no active hook on convar. - */ -native UnhookConVarChange(Handle:convar, ConVarChanged:callback); - -/** - * Returns the boolean value of a console variable. - * - * @param convar Handle to the convar. - * @return The boolean value of the convar. - * @error Invalid or corrupt Handle. - */ -native bool:GetConVarBool(Handle:convar); - -/** - * Sets the boolean value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New boolean value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarBool(Handle:convar, bool:value, bool:replicate=false, bool:notify=false); - -/** - * Returns the integer value of a console variable. - * - * @param convar Handle to the convar. - * @return The integer value of the convar. - * @error Invalid or corrupt Handle. - */ -native GetConVarInt(Handle:convar); - -/** - * Sets the integer value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New integer value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarInt(Handle:convar, value, bool:replicate=false, bool:notify=false); - -/** - * Returns the floating point value of a console variable. - * - * @param convar Handle to the convar. - * @return The floating point value of the convar. - * @error Invalid or corrupt Handle. - */ -native Float:GetConVarFloat(Handle:convar); - -/** - * Sets the floating point value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New floating point value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarFloat(Handle:convar, Float:value, bool:replicate=false, bool:notify=false); - -/** - * Retrieves the string value of a console variable. - * - * @param convar Handle to the convar. - * @param value Buffer to store the value of the convar. - * @param maxlength Maximum length of string buffer. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native GetConVarString(Handle:convar, String:value[], maxlength); - -/** - * Sets the string value of a console variable. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param value New string value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarString(Handle:convar, const String:value[], bool:replicate=false, bool:notify=false); - -/** - * Resets the console variable to its default value. - * - * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and - * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. - * - * @param convar Handle to the convar. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native ResetConVar(Handle:convar, bool:replicate=false, bool:notify=false); - -/** - * Retrieves the default string value of a console variable. - * - * @param convar Handle to the convar. - * @param value Buffer to store the default value of the convar. - * @param maxlength Maximum length of string buffer. - * @return Number of bytes written to the buffer (UTF-8 safe). - * @error Invalid or corrupt Handle. - */ -native GetConVarDefault(Handle:convar, String:value[], maxlength); - -/** - * Returns the bitstring of flags on a console variable. - * - * @param convar Handle to the convar. - * @return A bitstring containing the FCVAR_* flags that are enabled. - * @error Invalid or corrupt Handle. - */ -native GetConVarFlags(Handle:convar); - -/** - * Sets the bitstring of flags on a console variable. - * - * @param convar Handle to the convar. - * @param flags A bitstring containing the FCVAR_* flags to enable. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarFlags(Handle:convar, flags); - -/** - * Retrieves the specified bound of a console variable. - * - * @param convar Handle to the convar. - * @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. - * @param value By-reference cell to store the specified floating point bound value. - * @return True if the convar has the specified bound set, false otherwise. - * @error Invalid or corrupt Handle. - */ -native bool:GetConVarBounds(Handle:convar, ConVarBounds:type, &Float:value); - -/** - * Sets the specified bound of a console variable. - * - * @param convar Handle to the convar. - * @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper - * @param set If set to true, convar will use specified bound. If false, bound will be removed. - * @param value Floating point value to use as the specified bound. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SetConVarBounds(Handle:convar, ConVarBounds:type, bool:set, Float:value=0.0); - -/** - * Retrieves the name of a console variable. - * - * @param convar Handle to the convar. - * @param name Buffer to store the name of the convar. - * @param maxlength Maximum length of string buffer. - * @noreturn - * @error Invalid or corrupt Handle. - */ -native GetConVarName(Handle:convar, String:name[], maxlength); - -funcenum ConVarQueryFinished -{ - /** - * Called when a query to retrieve a client's console variable has finished. - * - * @param cookie Unique identifier of query. - * @param client Player index. - * @param result Result of query that tells one whether or not query was successful. - * See ConVarQueryResult enum for more details. - * @param convarName Name of client convar that was queried. - * @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. - * @param value Value that was passed when query was started. - * @noreturn - */ - public(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:value), - - /** - * Called when a query to retrieve a client's console variable has finished. - * - * @param cookie Unique identifier of query. - * @param client Player index. - * @param result Result of query that tells one whether or not query was successful. - * See ConVarQueryResult enum for more details. - * @param convarName Name of client convar that was queried. - * @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. - * @noreturn - */ - public(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[]) -}; - -/** - * Starts a query to retrieve the value of a client's console variable. - * - * @param client Player index. - * @param cvarName Name of client convar to query. - * @param callback A function to use as a callback when the query has finished. - * @param value Optional value to pass to the callback function. - * @return A cookie that uniquely identifies the query. - * Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot. - */ -native QueryCookie:QueryClientConVar(client, const String:cvarName[], ConVarQueryFinished:callback, any:value=0); - /** * Gets a command iterator. Must be freed with CloseHandle(). * @@ -781,17 +474,6 @@ native bool:CheckAccess(AdminId:id, flags, bool:override_only=false); -/** - * Returns true if the supplied character is valid in a ConVar name. - * - * @param c Character to validate. - * @return True is valid for ConVars, false otherwise - */ -stock bool:IsValidConVarChar(c) -{ - return (c == '_' || IsCharAlpha(c) || IsCharNumeric(c)); -} - /** * Returns the bitstring of flags of a command. * @@ -850,17 +532,6 @@ native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &f */ native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:isCommand, &flags=0, String:description[]="", descrmax_size=0); -/** - * Replicates a convar value to a specific client. This does not change the actual convar value. - * - * @param client Client index - * @param convar ConVar handle - * @param value String value to send - * @return True on success, false on failure - * @error Invalid client index, client not in game, or client is fake - */ -native bool:SendConVarValue(client, Handle:convar, const String:value[]); - /** * Adds an informational string to the server's public "tags". * This string should be a short, unique identifier. @@ -905,7 +576,7 @@ native RemoveServerTag(const String:tag[]); * @param argc Argument count. * @return Action to take (see extended notes above). */ -functag public Action:CommandListener(client, const String:command[], argc); +typedef CommandListener = function Action (int client, const char[] command, int argc); #define FEATURECAP_COMMANDLISTENER "command listener" @@ -968,4 +639,4 @@ forward Action:OnClientSayCommand(client, const String:command[], const String:s * @param sArgs Chat argument string. * */ -forward OnClientSayCommand_Post(client, const String:command[], const String:sArgs[]); +forward void OnClientSayCommand_Post(int client, const char[] command, const char[] sArgs); diff --git a/env/include/convars.inc b/env/include/convars.inc new file mode 100644 index 0000000..bc7c345 --- /dev/null +++ b/env/include/convars.inc @@ -0,0 +1,493 @@ +/** + * vim: set ts=4 sw=4 tw=99 noet : + * ============================================================================= + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ + */ + +/** + * Console variable bound values used with Get/SetConVarBounds() + */ +enum ConVarBounds +{ + ConVarBound_Upper = 0, + ConVarBound_Lower +}; + +/** + * Console variable query result values. + */ +enum ConVarQueryResult +{ + ConVarQuery_Okay = 0, //< Retrieval of client convar value was successful. */ + ConVarQuery_NotFound, //< Client convar was not found. */ + ConVarQuery_NotValid, //< A console command with the same name was found, but there is no convar. */ + ConVarQuery_Protected //< Client convar was found, but it is protected. The server cannot retrieve its value. */ +}; + +// Called when a console variable's value is changed. +// +// @param convar Handle to the convar that was changed. +// @param oldValue String containing the value of the convar before it was changed. +// @param newValue String containing the new value of the convar. +typedef ConVarChanged = function void (ConVar convar, const char[] oldValue, const char[] newValue); + +// Creates a new console variable. +// +// @param name Name of new convar. +// @param defaultValue String containing the default value of new convar. +// @param description Optional description of the convar. +// @param flags Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details. +// @param hasMin Optional boolean that determines if the convar has a minimum value. +// @param min Minimum floating point value that the convar can have if hasMin is true. +// @param hasMax Optional boolean that determines if the convar has a maximum value. +// @param max Maximum floating point value that the convar can have if hasMax is true. +// @return A handle to the newly created convar. If the convar already exists, a handle to it will still be returned. +// @error Convar name is blank or is the same as an existing console command. +native ConVar CreateConVar( + const char[] name, + const char[] defaultValue, + const char[] description="", + int flags=0, + bool hasMin=false, float min=0.0, + bool hasMax=false, float max=0.0); + +// Searches for a console variable. +// +// @param name Name of convar to find. +// @return A ConVar object if found; null otherwise. +native ConVar FindConVar(const char[] name); + +// A ConVar is a configurable, named setting in the srcds console. +methodmap ConVar < Handle +{ + // Retrieves or sets a boolean value for the convar. + property bool BoolValue { + public native get(); + public native set(bool b); + } + + // Retrieves or sets an integer value for the convar. + property int IntValue { + public native get(); + public native set(int value); + } + + // Retrieves or sets a float value for the convar. + property float FloatValue { + public native get(); + public native set(float value); + } + + // Gets or sets the flag bits (FCVAR_*) on the convar. + property int Flags { + public native get(); + public native set(int flags); + } + + // Sets the boolean value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New boolean value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetBool(bool value, bool replicate=false, bool notify=false); + + // Sets the integer value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New integer value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetInt(int value, bool replicate=false, bool notify=false); + + // Sets the floating point value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New floating point value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetFloat(float value, bool replicate=false, bool notify=false); + + // Retrieves the string value of a console variable. + // + // @param convar Handle to the convar. + // @param value Buffer to store the value of the convar. + // @param maxlength Maximum length of string buffer. + public native void GetString(char[] value, int maxlength); + + // Sets the string value of a console variable. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param value New string value. + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void SetString(const char[] value, bool replicate=false, bool notify=false); + + // Resets the console variable to its default value. + // + // Note: The replicate and notify params are only relevant for the + // original, Dark Messiah, and Episode 1 engines. Newer engines + // automatically do these things when the convar value is changed. + // + // @param replicate If set to true, the new convar value will be set on all clients. + // This will only work if the convar has the FCVAR_REPLICATED flag + // and actually exists on clients. + // @param notify If set to true, clients will be notified that the convar has changed. + // This will only work if the convar has the FCVAR_NOTIFY flag. + public native void RestoreDefault(bool replicate=false, bool notify=false); + + // Retrieves the default string value of a console variable. + // + // @param value Buffer to store the default value of the convar. + // @param maxlength Maximum length of string buffer. + // @return Number of bytes written to the buffer (UTF-8 safe). + public native int GetDefault(char[] value, int maxlength); + + // Retrieves the specified bound of a console variable. + // + // @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. + // @param value By-reference cell to store the specified floating point bound value. + // @return True if the convar has the specified bound set, false otherwise. + public native bool GetBounds(ConVarBounds type, float &value); + + // Sets the specified bound of a console variable. + // + // @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper + // @param set If set to true, convar will use specified bound. If false, bound will be removed. + // @param value Floating point value to use as the specified bound. + public native void SetBounds(ConVarBounds type, bool set, float value=0.0); + + // Retrieves the name of a console variable. + // + // @param name Buffer to store the name of the convar. + // @param maxlength Maximum length of string buffer. + public native void GetName(char[] name, maxlength); + + // Replicates a convar value to a specific client. This does not change the actual convar value. + // + // @param client Client index + // @param value String value to send + // @return True on success, false on failure + // @error Invalid client index, client not in game, or client is fake + public native bool ReplicateToClient(int client, const char[] value); + + // Creates a hook for when a console variable's value is changed. + // + // @param callback An OnConVarChanged function pointer. + public native void AddChangeHook(ConVarChanged callback); + + // Removes a hook for when a console variable's value is changed. + // + // @param convar Handle to the convar. + // @param callback An OnConVarChanged function pointer. + // @error No active hook on convar. + public native void RemoveChangeHook(ConVarChanged callback); +} + +/** + * Creates a hook for when a console variable's value is changed. + * + * @param convar Handle to the convar. + * @param callback An OnConVarChanged function pointer. + * @error Invalid or corrupt Handle or invalid callback function. + */ +native void HookConVarChange(Handle convar, ConVarChanged callback); + +/** + * Removes a hook for when a console variable's value is changed. + * + * @param convar Handle to the convar. + * @param callback An OnConVarChanged function pointer. + * @error Invalid or corrupt Handle, invalid callback function, or no active hook on convar. + */ +native void UnhookConVarChange(Handle convar, ConVarChanged callback); + +/** + * Returns the boolean value of a console variable. + * + * @param convar Handle to the convar. + * @return The boolean value of the convar. + * @error Invalid or corrupt Handle. + */ +native bool GetConVarBool(Handle convar); + +/** + * Sets the boolean value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New boolean value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarBool(Handle convar, bool value, bool replicate=false, bool notify=false); + +/** + * Returns the integer value of a console variable. + * + * @param convar Handle to the convar. + * @return The integer value of the convar. + * @error Invalid or corrupt Handle. + */ +native int GetConVarInt(Handle convar); + +/** + * Sets the integer value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New integer value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarInt(Handle convar, int value, bool replicate=false, bool notify=false); + +/** + * Returns the floating point value of a console variable. + * + * @param convar Handle to the convar. + * @return The floating point value of the convar. + * @error Invalid or corrupt Handle. + */ +native float GetConVarFloat(Handle convar); + +/** + * Sets the floating point value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New floating point value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarFloat(Handle convar, float value, bool replicate=false, bool notify=false); + +/** + * Retrieves the string value of a console variable. + * + * @param convar Handle to the convar. + * @param value Buffer to store the value of the convar. + * @param maxlength Maximum length of string buffer. + * @error Invalid or corrupt Handle. + */ +native void GetConVarString(Handle convar, char[] value, int maxlength); + +/** + * Sets the string value of a console variable. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param value New string value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void SetConVarString(Handle convar, const char[] value, bool replicate=false, bool notify=false); + +/** + * Resets the console variable to its default value. + * + * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and + * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. + * + * @param convar Handle to the convar. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. + */ +native void ResetConVar(Handle convar, bool replicate=false, bool notify=false); + +/** + * Retrieves the default string value of a console variable. + * + * @param convar Handle to the convar. + * @param value Buffer to store the default value of the convar. + * @param maxlength Maximum length of string buffer. + * @return Number of bytes written to the buffer (UTF-8 safe). + * @error Invalid or corrupt Handle. + */ +native int GetConVarDefault(Handle convar, char[] value, int maxlength); + +/** + * Returns the bitstring of flags on a console variable. + * + * @param convar Handle to the convar. + * @return A bitstring containing the FCVAR_* flags that are enabled. + * @error Invalid or corrupt Handle. + */ +native int GetConVarFlags(Handle convar); + +/** + * Sets the bitstring of flags on a console variable. + * + * @param convar Handle to the convar. + * @param flags A bitstring containing the FCVAR_* flags to enable. + * @error Invalid or corrupt Handle. + */ +native void SetConVarFlags(Handle convar, flags); + +/** + * Retrieves the specified bound of a console variable. + * + * @param convar Handle to the convar. + * @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. + * @param value By-reference cell to store the specified floating point bound value. + * @return True if the convar has the specified bound set, false otherwise. + * @error Invalid or corrupt Handle. + */ +native bool GetConVarBounds(Handle convar, ConVarBounds type, float &value); + +/** + * Sets the specified bound of a console variable. + * + * @param convar Handle to the convar. + * @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper + * @param set If set to true, convar will use specified bound. If false, bound will be removed. + * @param value Floating point value to use as the specified bound. + * @error Invalid or corrupt Handle. + */ +native void SetConVarBounds(Handle convar, ConVarBounds type, bool set, float value=0.0); + +/** + * Retrieves the name of a console variable. + * + * @param convar Handle to the convar. + * @param name Buffer to store the name of the convar. + * @param maxlength Maximum length of string buffer. + * @error Invalid or corrupt Handle. + */ +native void GetConVarName(Handle convar, char[] name, maxlength); + +/** + * Replicates a convar value to a specific client. This does not change the actual convar value. + * + * @param client Client index + * @param convar ConVar handle + * @param value String value to send + * @return True on success, false on failure + * @error Invalid client index, client not in game, or client is fake + */ +native bool SendConVarValue(int client, Handle convar, const char[] value); + +typeset ConVarQueryFinished +{ + // Called when a query to retrieve a client's console variable has finished. + // + // @param cookie Unique identifier of query. + // @param client Player index. + // @param result Result of query that tells one whether or not query was successful. + // See ConVarQueryResult enum for more details. + // @param convarName Name of client convar that was queried. + // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. + // @param value Value that was passed when query was started. + function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue, any value); + + // Called when a query to retrieve a client's console variable has finished. + // + // @param cookie Unique identifier of query. + // @param client Player index. + // @param result Result of query that tells one whether or not query was successful. + // See ConVarQueryResult enum for more details. + // @param convarName Name of client convar that was queried. + // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. + function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue); +}; + +/** + * Starts a query to retrieve the value of a client's console variable. + * + * @param client Player index. + * @param cvarName Name of client convar to query. + * @param callback A function to use as a callback when the query has finished. + * @param value Optional value to pass to the callback function. + * @return A cookie that uniquely identifies the query. + * Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot. + */ +native QueryCookie QueryClientConVar(int client, const char[] cvarName, ConVarQueryFinished callback, any value=0); + +/** + * Returns true if the supplied character is valid in a ConVar name. + * + * @param c Character to validate. + * @return True is valid for ConVars, false otherwise + */ +stock bool IsValidConVarChar(int c) +{ + return (c == '_' || IsCharAlpha(c) || IsCharNumeric(c)); +} diff --git a/env/include/core.inc b/env/include/core.inc index 262e186..7eeee7c 100644 --- a/env/include/core.inc +++ b/env/include/core.inc @@ -42,18 +42,10 @@ struct PlVers { - version, - String:filevers[], - String:date[], - String:time[] -}; - -/** - * Function helper values. - */ -enum Function -{ - INVALID_FUNCTION = -1, + public int version; + public const char[] filevers; + public const char[] date; + public const char[] time; }; /** @@ -103,7 +95,19 @@ enum PluginStatus }; /** - * Plugin information properties. + * Plugin information properties. Plugins can declare a global variable with + * their info. Example, + * + * public Plugin:myinfo = { + * name = "Admin Help", + * author = "AlliedModders LLC", + * description = "Display command information", + * version = "1.0", + * url = "http://www.sourcemod.net/" + * }; + * + * SourceMod will display this information when a user inspects plugins in the + * console. */ enum PluginInfo { @@ -119,10 +123,10 @@ enum PluginInfo */ struct Extension { - const String:name[], /**< Short name */ - const String:file[], /**< Default file name */ - bool:autoload, /**< Whether or not to auto-load */ - bool:required, /**< Whether or not to require */ + public const char[] name; /**< Short name */ + public const char[] file; /**< Default file name */ + public bool autoload; /**< Whether or not to auto-load */ + public bool required; /**< Whether or not to require */ }; /** @@ -130,9 +134,9 @@ struct Extension */ struct SharedPlugin { - const String:name[], /**< Short name */ - const String:file[], /**< File name */ - bool:required, /**< Whether or not to require */ + public const char[] name; /**< Short name */ + public const char[] file; /**< File name */ + public bool required; /**< Whether or not to require */ }; public Float:NULL_VECTOR[3]; /**< Pass this into certain functions to act as a C++ NULL */ @@ -197,6 +201,36 @@ public __ext_core_SetNTVOptional() MarkNativeAsOptional("BfReadVecNormal"); MarkNativeAsOptional("BfReadAngles"); MarkNativeAsOptional("BfGetNumBytesLeft"); + + MarkNativeAsOptional("BfWrite.WriteBool"); + MarkNativeAsOptional("BfWrite.WriteByte"); + MarkNativeAsOptional("BfWrite.WriteChar"); + MarkNativeAsOptional("BfWrite.WriteShort"); + MarkNativeAsOptional("BfWrite.WriteWord"); + MarkNativeAsOptional("BfWrite.WriteNum"); + MarkNativeAsOptional("BfWrite.WriteFloat"); + MarkNativeAsOptional("BfWrite.WriteString"); + MarkNativeAsOptional("BfWrite.WriteEntity"); + MarkNativeAsOptional("BfWrite.WriteAngle"); + MarkNativeAsOptional("BfWrite.WriteCoord"); + MarkNativeAsOptional("BfWrite.WriteVecCoord"); + MarkNativeAsOptional("BfWrite.WriteVecNormal"); + MarkNativeAsOptional("BfWrite.WriteAngles"); + MarkNativeAsOptional("BfRead.ReadBool"); + MarkNativeAsOptional("BfRead.ReadByte"); + MarkNativeAsOptional("BfRead.ReadChar"); + MarkNativeAsOptional("BfRead.ReadShort"); + MarkNativeAsOptional("BfRead.ReadWord"); + MarkNativeAsOptional("BfRead.ReadNum"); + MarkNativeAsOptional("BfRead.ReadFloat"); + MarkNativeAsOptional("BfRead.ReadString"); + MarkNativeAsOptional("BfRead.ReadEntity"); + MarkNativeAsOptional("BfRead.ReadAngle"); + MarkNativeAsOptional("BfRead.ReadCoord"); + MarkNativeAsOptional("BfRead.ReadVecCoord"); + MarkNativeAsOptional("BfRead.ReadVecNormal"); + MarkNativeAsOptional("BfRead.ReadAngles"); + MarkNativeAsOptional("BfRead.GetNumBytesLeft"); MarkNativeAsOptional("PbReadInt"); MarkNativeAsOptional("PbReadFloat"); @@ -227,6 +261,36 @@ public __ext_core_SetNTVOptional() MarkNativeAsOptional("PbReadMessage"); MarkNativeAsOptional("PbReadRepeatedMessage"); MarkNativeAsOptional("PbAddMessage"); + + MarkNativeAsOptional("Protobuf.ReadInt"); + MarkNativeAsOptional("Protobuf.ReadFloat"); + MarkNativeAsOptional("Protobuf.ReadBool"); + MarkNativeAsOptional("Protobuf.ReadString"); + MarkNativeAsOptional("Protobuf.ReadColor"); + MarkNativeAsOptional("Protobuf.ReadAngle"); + MarkNativeAsOptional("Protobuf.ReadVector"); + MarkNativeAsOptional("Protobuf.ReadVector2D"); + MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount"); + MarkNativeAsOptional("Protobuf.SetInt"); + MarkNativeAsOptional("Protobuf.SetFloat"); + MarkNativeAsOptional("Protobuf.SetBool"); + MarkNativeAsOptional("Protobuf.SetString"); + MarkNativeAsOptional("Protobuf.SetColor"); + MarkNativeAsOptional("Protobuf.SetAngle"); + MarkNativeAsOptional("Protobuf.SetVector"); + MarkNativeAsOptional("Protobuf.SetVector2D"); + MarkNativeAsOptional("Protobuf.AddInt"); + MarkNativeAsOptional("Protobuf.AddFloat"); + MarkNativeAsOptional("Protobuf.AddBool"); + MarkNativeAsOptional("Protobuf.AddString"); + MarkNativeAsOptional("Protobuf.AddColor"); + MarkNativeAsOptional("Protobuf.AddAngle"); + MarkNativeAsOptional("Protobuf.AddVector"); + MarkNativeAsOptional("Protobuf.AddVector2D"); + MarkNativeAsOptional("Protobuf.RemoveRepeatedFieldValue"); + MarkNativeAsOptional("Protobuf.ReadMessage"); + MarkNativeAsOptional("Protobuf.ReadRepeatedMessage"); + MarkNativeAsOptional("Protobuf.AddMessage"); VerifyCoreVersion(); } diff --git a/env/include/datapack.inc b/env/include/datapack.inc index ce3d8b7..c8fc2cd 100644 --- a/env/include/datapack.inc +++ b/env/include/datapack.inc @@ -40,7 +40,7 @@ * * @return A Handle to the data pack. Must be closed with CloseHandle(). */ -native Handle:CreateDataPack(); +native DataPack CreateDataPack(); /** * Packs a normal cell into a data pack. @@ -50,7 +50,7 @@ native Handle:CreateDataPack(); * @noreturn * @error Invalid handle. */ -native WritePackCell(Handle:pack, any:cell); +native void WritePackCell(Handle pack, any cell); /** * Packs a float into a data pack. @@ -60,7 +60,7 @@ native WritePackCell(Handle:pack, any:cell); * @noreturn * @error Invalid handle. */ -native WritePackFloat(Handle:pack, Float:val); +native void WritePackFloat(Handle pack, float val); /** * Packs a string into a data pack. @@ -70,7 +70,17 @@ native WritePackFloat(Handle:pack, Float:val); * @noreturn * @error Invalid handle. */ -native WritePackString(Handle:pack, const String:str[]); +native void WritePackString(Handle pack, const char[] str); + +/** + * Packs a function pointer into a data pack. + * + * @param pack Handle to the data pack. + * @param fktptr Function pointer to add. + * @noreturn + * @error Invalid handle. + */ +native void WritePackFunction(Handle pack, Function fktptr); /** * Reads a cell from a data pack. @@ -79,7 +89,7 @@ native WritePackString(Handle:pack, const String:str[]); * @return Cell value. * @error Invalid handle, or bounds error. */ -native any:ReadPackCell(Handle:pack); +native any ReadPackCell(Handle pack); /** * Reads a float from a data pack. @@ -88,7 +98,7 @@ native any:ReadPackCell(Handle:pack); * @return Float value. * @error Invalid handle, or bounds error. */ -native Float:ReadPackFloat(Handle:pack); +native float ReadPackFloat(Handle pack); /** * Reads a string from a data pack. @@ -99,7 +109,16 @@ native Float:ReadPackFloat(Handle:pack); * @noreturn * @error Invalid handle, or bounds error. */ -native ReadPackString(Handle:pack, String:buffer[], maxlen); +native void ReadPackString(Handle pack, char[] buffer, maxlen); + +/** + * Reads a function pointer from a data pack. + * + * @param pack Handle to the data pack. + * @return Function pointer. + * @error Invalid handle, or bounds error. + */ +native Function ReadPackFunction(Handle pack); /** * Resets the position in a data pack. @@ -109,7 +128,7 @@ native ReadPackString(Handle:pack, String:buffer[], maxlen); * @noreturn * @error Invalid handle. */ -native ResetPack(Handle:pack, bool:clear=false); +native void ResetPack(Handle pack, bool clear=false); /** * Returns the read or write position in a data pack. @@ -118,7 +137,7 @@ native ResetPack(Handle:pack, bool:clear=false); * @return Numerical position in the data pack. * @error Invalid handle. */ -native GetPackPosition(Handle:pack); +native int GetPackPosition(Handle pack); /** * Sets the read/write position in a data pack. @@ -128,7 +147,7 @@ native GetPackPosition(Handle:pack); * @noreturn * @error Invalid handle, or position is beyond the pack bounds. */ -native SetPackPosition(Handle:pack, position); +native void SetPackPosition(Handle pack, int position); /** * Returns whether or not a specified number of bytes from the data pack @@ -139,4 +158,25 @@ native SetPackPosition(Handle:pack, position); * @return True if can be read, false otherwise. * @error Invalid handle. */ -native bool:IsPackReadable(Handle:pack, bytes); +native bool IsPackReadable(Handle pack, int bytes); + +methodmap DataPack < Handle +{ + public DataPack() = CreateDataPack; + public WriteCell() = WritePackCell; + public WriteFloat() = WritePackFloat; + public WriteString() = WritePackString; + public WriteFunction() = WritePackFunction; + public ReadCell() = ReadPackCell; + public ReadFloat() = ReadPackFloat; + public ReadString() = ReadPackString; + public ReadFunction() = ReadPackFunction; + public Reset() = ResetPack; + public IsReadable() = IsPackReadable; + + property int Position { + public get() = GetPackPosition; + public set() = SetPackPosition; + } +}; + diff --git a/env/include/dbi.inc b/env/include/dbi.inc index bbb1d6e..ee95533 100644 --- a/env/include/dbi.inc +++ b/env/include/dbi.inc @@ -1,7 +1,7 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -35,35 +35,6 @@ #endif #define _dbi_included -/** - * @handle Driver - * - * Contains information about an SQL driver. - */ - -/** - * @handle Database - * - * Contains information about a database connection. - */ - -/** - * @handle Query - * - * Contains information about an active query and its - * result sets. - */ - -/** - * @handle Statement : Query - * - * Extends a Query Handle and can be used as a Query Handle. - * Statement Handles are for prepared queries and contain - * their own function for binding parameters. Statement - * Handles can be used instead of database Handles in a few - * select functions. - */ - /** * Describes a database field fetch status. */ @@ -95,6 +66,345 @@ enum DBPriority DBPrio_Low = 2, /**< Low priority. */ }; +// A Driver represents a database backend, currently MySQL or SQLite. +// +// Driver handles cannot be closed. +methodmap DBDriver < Handle +{ + // Finds the driver associated with a name. + // + // Supported driver strings: + // mysql + // sqlite + // + // @param name Driver identification string, or an empty string + // to return the default driver. + // @return Driver handle, or null on failure. + public static native DBDriver Find(const char[] name = ""); + + // Retrieves a driver's identification string. + // + // Example: "mysql", "sqlite" + // + // @param ident Identification string buffer. + // @param maxlength Maximum length of the buffer. + public native void GetIdentifier(char[] ident, int maxlength); + + // Retrieves a driver's product string. + // + // Example: "MySQL", "SQLite" + // + // @param product Product string buffer. + // @param maxlength Maximum length of the buffer. + public native void GetProduct(char[] product, int maxlength); +}; + +// Represents a set of results returned from executing a query. +methodmap DBResultSet < Handle +{ + // Advances to the next set of results. + // + // In some SQL implementations, multiple result sets can exist on one query. + // This is possible in MySQL with simple queries when executing a CALL + // query. If this is the case, all result sets must be processed before + // another query is made. + // + // @return True if there was another result set, false otherwise. + public native bool FetchMoreResults(); + + // Returns whether or not a result set exists. This will + // return true even if 0 results were returned, but false + // on queries like UPDATE, INSERT, or DELETE. + property bool HasResults { + public native get(); + } + + // Retrieves the number of rows in the last result set. + // + // @param query A query (or statement) Handle. + // @return Number of rows in the current result set. + property int RowCount { + public native get(); + } + + // Retrieves the number of fields in the last result set. + property int FieldCount { + public native get(); + } + + // Returns the number of affected rows from the query that generated this + // result set. + property int AffectedRows { + public native get(); + } + + // Returns the insert id from the query that generated this result set. + property int InsertId { + public native get(); + } + + // Retrieves the name of a field by index. + // + // @param field Field number (starting from 0). + // @param name Name buffer. + // @param maxlength Maximum length of the name buffer. + // @error Invalid field index, or no current result set. + public native void FieldNumToName(int field, char[] name, int maxlength); + + // Retrieves a field index by name. + // + // @param name Name of the field (case sensitive). + // @param field Variable to store field index in. + // @return True if found, false if not found. + // @error No current result set. + public native bool FieldNameToNum(const char[] name, int &field); + + // Fetches a row from the current result set. This must be + // successfully called before any results are fetched. + // + // If this function fails, _MoreResults can be used to + // tell if there was an error or the result set is finished. + // + // @return True if a row was fetched, false otherwise. + public native bool FetchRow(); + + // Returns if there are more rows. + // + // @return True if there are more rows, false otherwise. + property bool MoreRows { + public native get(); + } + + // Rewinds a result set back to the first result. + // + // @return True on success, false otherwise. + // @error No current result set. + public native bool Rewind(); + + // Fetches a string from a field in the current row of a result set. + // If the result is NULL, an empty string will be returned. A NULL + // check can be done with the result parameter, or SQL_IsFieldNull(). + // + // @param field The field index (starting from 0). + // @param buffer String buffer. + // @param maxlength Maximum size of the string buffer. + // @param result Optional variable to store the status of the return value. + // @return Number of bytes written. + // @error Invalid field index, invalid type conversion requested + // from the database, or no current result set. + public native int FetchString(int field, char[] buffer, int maxlength, + DBResult &result=DBVal_Error); + + // Fetches a float from a field in the current row of a result set. + // If the result is NULL, a value of 0.0 will be returned. A NULL + // check can be done with the result parameter, or SQL_IsFieldNull(). + // + // @param field The field index (starting from 0). + // @param result Optional variable to store the status of the return value. + // @return A float value. + // @error Invalid field index, invalid type conversion requested + // from the database, or no current result set. + public native float FetchFloat(int field, DBResult &result=DBVal_Error); + + // Fetches an integer from a field in the current row of a result set. + // If the result is NULL, a value of 0 will be returned. A NULL + // check can be done with the result parameter, or SQL_IsFieldNull(). + // + // @param field The field index (starting from 0). + // @param result Optional variable to store the status of the return value. + // @return An integer value. + // @error Invalid field index, invalid type conversion requested + // from the database, or no current result set. + public native int FetchInt(int field, DBResult &result=DBVal_Error); + + // Returns whether a field's data in the current row of a result set is + // NULL or not. NULL is an SQL type which means "no data." + // + // @param field The field index (starting from 0). + // @return True if data is NULL, false otherwise. + // @error Invalid field index, or no current result set. + public native bool IsFieldNull(Handle query, int field); + + // Returns the length of a field's data in the current row of a result + // set. This only needs to be called for strings to determine how many + // bytes to use. Note that the return value does not include the null + // terminator. + // + // @param field The field index (starting from 0). + // @return Number of bytes for the field's data size. + // @error Invalid field index or no current result set. + public native int FetchSize(int field); +}; + +// Callback for a successful transaction. +// +// @param db Database handle. +// @param data Data value passed to SQL_ExecuteTransaction(). +// @param numQueries Number of queries executed in the transaction. +// @param results An array of Query handle results, one for each of numQueries. They are closed automatically. +// @param queryData An array of each data value passed to SQL_AddQuery(). +typedef SQLTxnSuccess = function void (Database db, any data, int numQueries, Handle[] results, any[] queryData); + +// Callback for a failed transaction. +// +// @param db Database handle. +// @param data Data value passed to SQL_ExecuteTransaction(). +// @param numQueries Number of queries executed in the transaction. +// @param error Error message. +// @param failIndex Index of the query that failed, or -1 if something else. +// @param queryData An array of each data value passed to SQL_AddQuery(). +typedef SQLTxnFailure = function void (Database db, any data, int numQueries, const char[] error, int failIndex, any[] queryData); + +// A Transaction is a collection of SQL statements that must all execute +// successfully or not at all. +methodmap Transaction < Handle +{ + // Create a new transaction. + public native Transaction(); + + // Adds a query to the transaction. + // + // @param query Query string. + // @param data Extra data value to pass to the final callback. + // @return The index of the query in the transaction's query list. + public native int AddQuery(const char[] query, any data=0); +}; + +// A DBStatement is a pre-compiled SQL query that may be executed multiple +// times with different parameters. A DBStatement holds a reference to the +// Database that prepared it. +methodmap DBStatement < Handle +{ + // Binds a parameter in a prepared statement to a given integer value. + // + // @param param The parameter index (starting from 0). + // @param number The number to bind. + // @param signed True to bind the number as signed, false to + // bind it as unsigned. + // @error Invalid parameter index, or SQL error. + public native void BindInt(int param, int number, bool signed=true); + + // Binds a parameter in a prepared statement to a given float value. + // + // @param param The parameter index (starting from 0). + // @param value The float number to bind. + // @error Invalid parameter index, or SQL error. + public native void BindFloat(int param, float value); + + // Binds a parameter in a prepared statement to a given string value. + // + // @param param The parameter index (starting from 0). + // @param value The string to bind. + // @param copy Whether or not SourceMod should copy the value + // locally if necessary. If the string contents + // won't change before calling SQL_Execute(), this + // can be set to false for optimization. + // @error Invalid parameter index, or SQL error. + public native void BindString(int param, const char[] value, bool copy); +}; + +// Callback for receiving asynchronous database connections. +// +// @param db Handle to the database connection. +// @param error Error string if there was an error. The error could be +// empty even if an error condition exists, so it is important +// to check the actual Handle value instead. +// @param data Data passed in via the original threaded invocation. +typedef SQLConnectCallback = function void (Database db, const char[] error, any data); + +// Callback for receiving asynchronous database query results. +// +// @param db Cloned handle to the database connection. +// @param results Result object, or null on failure. +// @param error Error string if there was an error. The error could be +// empty even if an error condition exists, so it is important +// to check the actual results value instead. +// @param data Data passed in via the original threaded invocation. +typedef SQLQueryCallback = function void (Database db, DBResultSet results, const char[] error, any data); + +// A Database represents a live connection to a database, either over the +// wire, through a unix domain socket, or over an open file. +methodmap Database < Handle +{ + // Connects to a database asynchronously, so the game thread is not blocked. + // + // @param callback Callback. If no driver was found, the owner is null. + // @param name Database configuration name. + // @param data Extra data value to pass to the callback. + public static native void Connect(SQLConnectCallback callback, const char[] name="default", any data=0); + + // Returns the driver for this database connection. + property DBDriver Driver { + public native get(); + } + + // Sets the character set of the connection. + // Like SET NAMES .. in mysql, but stays after connection problems. + // + // Example: "utf8", "latin1" + // + // @param characterset The character set string to change to. + // @return True, if character set was changed, false otherwise. + public native bool SetCharset(const char[] charset); + + // Escapes a database string for literal insertion. This is not needed + // for binding strings in prepared statements. + // + // Generally, database strings are inserted into queries enclosed in + // single quotes ('). If user input has a single quote in it, the + // quote needs to be escaped. This function ensures that any unsafe + // characters are safely escaped according to the database engine and + // the database's character set. + // + // NOTE: SourceMod only guarantees properly escaped strings when the query + // encloses the string in ''. While drivers tend to allow " instead, the string + // may be not be escaped (for example, on SQLite)! + // + // @param string String to quote. + // @param buffer Buffer to store quoted string in. + // @param maxlength Maximum length of the buffer. + // @param written Optionally returns the number of bytes written. + // @return True on success, false if buffer is not big enough. + // The buffer must be at least 2*strlen(string)+1. + public native bool Escape(const char[] string, char[] buffer, int maxlength, int &written=0); + + // Returns whether a database is the same connection as another database. + public native bool IsSameConnection(Database other); + + // Executes a query via a thread. The result handle is passed through the + // callback. + // + // The database handle returned through the callback is always a new Handle, + // and if necessary, IsSameConnection() should be used to test against other + // conenctions. + // + // The result handle returned through the callback is temporary and destroyed + // at the end of the callback. + // + // @param callback Callback. + // @param query Query string. + // @param data Extra data value to pass to the callback. + // @param prio Priority queue to use. + public native void Query(SQLQueryCallback callback, const char[] query, + any data = 0, + DBPriority prio = DBPrio_Normal); + + // Sends a transaction to the database thread. The transaction handle is + // automatically closed. When the transaction completes, the optional + // callback is invoked. + // + // @param txn A transaction handle. + // @param onSuccess An optional callback to receive a successful transaction. + // @param onError An optional callback to receive an error message. + // @param data An optional value to pass to callbacks. + // @param prio Priority queue to use. + public native void Execute(Transaction txn, + SQLTxnSuccess:onSuccess = INVALID_FUNCTION, + SQLTxnFailure:onError = INVALID_FUNCTION, + any data = 0, + DBPriority priority = DBPrio_Normal); +}; + /** * Creates an SQL connection from a named configuration. * @@ -105,7 +415,7 @@ enum DBPriority * @param maxlength Maximum length of the error buffer. * @return A database connection Handle, or INVALID_HANDLE on failure. */ -native Handle:SQL_Connect(const String:confname[], bool:persistent, String:error[], maxlength); +native Database SQL_Connect(const char[] confname, bool persistent, char[] error, int maxlength); /** * Creates a default SQL connection. @@ -117,7 +427,7 @@ native Handle:SQL_Connect(const String:confname[], bool:persistent, String:error * @return A database connection Handle, or INVALID_HANDLE on failure. * On failure the error buffer will be filled with a message. */ -stock Handle:SQL_DefConnect(String:error[], maxlength, bool:persistent=true) +stock Database SQL_DefConnect(char[] error, int maxlength, bool persistent=true) { return SQL_Connect("default", persistent, error, maxlength); } @@ -143,10 +453,10 @@ stock Handle:SQL_DefConnect(String:error[], maxlength, bool:persistent=true) * On failure the error buffer will be filled with a message. * @error Invalid KeyValues handle. */ -native Handle:SQL_ConnectCustom(Handle:keyvalues, - String:error[], - maxlength, - bool:persistent); +native Database SQL_ConnectCustom(Handle keyvalues, + char[] error, + maxlength, + bool persistent); /** * Grabs a handle to an SQLite database, creating one if it does not exist. @@ -163,11 +473,11 @@ native Handle:SQL_ConnectCustom(Handle:keyvalues, * @return A database connection Handle, or INVALID_HANDLE on failure. * On failure the error buffer will be filled with a message. */ -stock Handle:SQLite_UseDatabase(const String:database[], - String:error[], - maxlength) +stock Database SQLite_UseDatabase(const char[] database, + char[] error, + maxlength) { - new Handle:kv, Handle:db; + Handle kv, db; kv = CreateKeyValues(""); KvSetString(kv, "driver", "sqlite"); @@ -184,14 +494,14 @@ stock Handle:SQLite_UseDatabase(const String:database[], * This function is deprecated. Use SQL_ConnectCustom or SQLite_UseDatabase instead. */ #pragma deprecated Use SQL_ConnectCustom instead. -native Handle:SQL_ConnectEx(Handle:driver, +native Handle SQL_ConnectEx(Handle driver, const String:host[], const String:user[], const String:pass[], const String:database[], - String:error[], + char[] error, maxlength, - bool:persistent=true, + bool persistent=true, port=0, maxTimeout=0); @@ -201,7 +511,7 @@ native Handle:SQL_ConnectEx(Handle:driver, * @param name Configuration name. * @return True if it exists, false otherwise. */ -native bool:SQL_CheckConfig(const String:name[]); +native bool SQL_CheckConfig(const char[] name); /** * Returns a driver Handle from a name string. @@ -213,7 +523,7 @@ native bool:SQL_CheckConfig(const String:name[]); * string to return the default driver. * @return Driver Handle, or INVALID_HANDLE on failure. */ -native Handle:SQL_GetDriver(const String:name[]=""); +native Handle SQL_GetDriver(const char[] name=""); /** * Reads the driver of an opened database. @@ -223,7 +533,7 @@ native Handle:SQL_GetDriver(const String:name[]=""); * @param ident_length Maximum length of the buffer. * @return Driver Handle. */ -native Handle:SQL_ReadDriver(Handle:database, String:ident[]="", ident_length=0); +native Handle SQL_ReadDriver(Handle database, char[] ident="", ident_length=0); /** * Retrieves a driver's identification string. @@ -236,7 +546,7 @@ native Handle:SQL_ReadDriver(Handle:database, String:ident[]="", ident_length=0) * @noreturn * @error Invalid Handle other than INVALID_HANDLE. */ -native SQL_GetDriverIdent(Handle:driver, String:ident[], maxlength); +native void SQL_GetDriverIdent(Handle driver, char[] ident, int maxlength); /** * Retrieves a driver's product string. @@ -249,7 +559,7 @@ native SQL_GetDriverIdent(Handle:driver, String:ident[], maxlength); * @noreturn * @error Invalid Handle other than INVALID_HANDLE. */ -native SQL_GetDriverProduct(Handle:driver, String:product[], maxlength); +native void SQL_GetDriverProduct(Handle driver, char[] product, int maxlength); /** * Sets the character set of the current connection. @@ -261,7 +571,7 @@ native SQL_GetDriverProduct(Handle:driver, String:product[], maxlength); * @param characterset The character set string to change to. * @return True, if character set was changed, false otherwise. */ -native bool:SQL_SetCharset(Handle:database, const String:charset[]); +native bool SQL_SetCharset(Handle database, const char[] charset); /** * Returns the number of affected rows from the last query. @@ -270,7 +580,7 @@ native bool:SQL_SetCharset(Handle:database, const String:charset[]); * @return Number of rows affected by the last query. * @error Invalid database or statement Handle. */ -native SQL_GetAffectedRows(Handle:hndl); +native int SQL_GetAffectedRows(Handle hndl); /** * Returns the last query's insertion id. @@ -279,7 +589,7 @@ native SQL_GetAffectedRows(Handle:hndl); * @return Last query's insertion id. * @error Invalid database, query, or statement Handle. */ -native SQL_GetInsertId(Handle:hndl); +native int SQL_GetInsertId(Handle hndl); /** * Returns the error reported by the last query. @@ -290,7 +600,7 @@ native SQL_GetInsertId(Handle:hndl); * @return True if there was an error, false otherwise. * @error Invalid database, query, or statement Handle. */ -native bool:SQL_GetError(Handle:hndl, String:error[], maxlength); +native bool SQL_GetError(Handle hndl, char[] error, int maxlength); /** * Escapes a database string for literal insertion. This is not needed @@ -315,19 +625,19 @@ native bool:SQL_GetError(Handle:hndl, String:error[], maxlength); * The buffer must be at least 2*strlen(string)+1. * @error Invalid database or statement Handle. */ -native bool:SQL_EscapeString(Handle:database, - const String:string[], - String:buffer[], - maxlength, - &written=0); +native bool SQL_EscapeString(Handle database, + const char[] string, + char[] buffer, + int maxlength, + int &written=0); /** * This is a backwards compatibility stock. You should use SQL_EscapeString() * instead, as this function will probably be deprecated in SourceMod 1.1. */ -stock bool:SQL_QuoteString(Handle:database, - const String:string[], - String:buffer[], +stock bool SQL_QuoteString(Handle database, + const char[] string, + char[] buffer, maxlength, &written=0) { @@ -346,7 +656,7 @@ stock bool:SQL_QuoteString(Handle:database, * SQL_GetError to find the last error. * @error Invalid database Handle. */ -native bool:SQL_FastQuery(Handle:database, const String:query[], len=-1); +native bool SQL_FastQuery(Handle database, const char[] query, int len=-1); /** * Executes a simple query and returns a new query Handle for @@ -361,7 +671,7 @@ native bool:SQL_FastQuery(Handle:database, const String:query[], len=-1); * otherwise. The Handle must be freed with CloseHandle(). * @error Invalid database Handle. */ -native Handle:SQL_Query(Handle:database, const String:query[], len=-1); +native DBResultSet SQL_Query(Handle database, const char[] query, int len=-1); /** * Creates a new prepared statement query. Prepared statements can @@ -379,7 +689,7 @@ native Handle:SQL_Query(Handle:database, const String:query[], len=-1); * otherwise. The Handle must be freed with CloseHandle(). * @error Invalid database Handle. */ -native Handle:SQL_PrepareQuery(Handle:database, const String:query[], String:error[], maxlength); +native DBStatement SQL_PrepareQuery(Handle database, const char[] query, char[] error, int maxlength); /** * Advances to the next set of results. @@ -393,7 +703,7 @@ native Handle:SQL_PrepareQuery(Handle:database, const String:query[], String:err * @return True if there was another result set, false otherwise. * @error Invalid query Handle. */ -native bool:SQL_FetchMoreResults(Handle:query); +native bool SQL_FetchMoreResults(Handle query); /** * Returns whether or not a result set exists. This will @@ -404,7 +714,7 @@ native bool:SQL_FetchMoreResults(Handle:query); * @return True if there is a result set, false otherwise. * @error Invalid query Handle. */ -native bool:SQL_HasResultSet(Handle:query); +native bool SQL_HasResultSet(Handle query); /** * Retrieves the number of rows in the last result set. @@ -413,7 +723,7 @@ native bool:SQL_HasResultSet(Handle:query); * @return Number of rows in the current result set. * @error Invalid query Handle. */ -native SQL_GetRowCount(Handle:query); +native int SQL_GetRowCount(Handle query); /** * Retrieves the number of fields in the last result set. @@ -422,7 +732,7 @@ native SQL_GetRowCount(Handle:query); * @return Number of fields in the current result set. * @error Invalid query Handle. */ -native SQL_GetFieldCount(Handle:query); +native int SQL_GetFieldCount(Handle query); /** * Retrieves the name of a field by index. @@ -431,11 +741,10 @@ native SQL_GetFieldCount(Handle:query); * @param field Field number (starting from 0). * @param name Name buffer. * @param maxlength Maximum length of the name buffer. - * @noreturn * @error Invalid query Handle, invalid field index, or * no current result set. */ -native SQL_FieldNumToName(Handle:query, field, String:name[], maxlength); +native void SQL_FieldNumToName(Handle query, int field, String:name[], int maxlength); /** * Retrieves a field index by name. @@ -446,7 +755,7 @@ native SQL_FieldNumToName(Handle:query, field, String:name[], maxlength); * @return True if found, false if not found. * @error Invalid query Handle or no current result set. */ -native bool:SQL_FieldNameToNum(Handle:query, const String:name[], &field); +native bool SQL_FieldNameToNum(Handle query, const char[] name, &field); /** * Fetches a row from the current result set. This must be @@ -459,7 +768,7 @@ native bool:SQL_FieldNameToNum(Handle:query, const String:name[], &field); * @return True if a row was fetched, false otherwise. * @error Invalid query Handle. */ -native bool:SQL_FetchRow(Handle:query); +native bool SQL_FetchRow(Handle query); /** * Returns if there are more rows. @@ -468,7 +777,7 @@ native bool:SQL_FetchRow(Handle:query); * @return True if there are more rows, false otherwise. * @error Invalid query Handle. */ -native bool:SQL_MoreRows(Handle:query); +native bool SQL_MoreRows(Handle query); /** * Rewinds a result set back to the first result. @@ -477,7 +786,7 @@ native bool:SQL_MoreRows(Handle:query); * @return True on success, false otherwise. * @error Invalid query Handle or no current result set. */ -native bool:SQL_Rewind(Handle:query); +native bool SQL_Rewind(Handle query); /** * Fetches a string from a field in the current row of a result set. @@ -494,7 +803,7 @@ native bool:SQL_Rewind(Handle:query); * type conversion requested from the database, * or no current result set. */ -native SQL_FetchString(Handle:query, field, String:buffer[], maxlength, &DBResult:result=DBVal_Error); +native int SQL_FetchString(Handle query, int field, char[] buffer, int maxlength, DBResult &result=DBVal_Error); /** * Fetches a float from a field in the current row of a result set. @@ -509,7 +818,7 @@ native SQL_FetchString(Handle:query, field, String:buffer[], maxlength, &DBResul * type conversion requested from the database, * or no current result set. */ -native Float:SQL_FetchFloat(Handle:query, field, &DBResult:result=DBVal_Error); +native float SQL_FetchFloat(Handle query, int field, DBResult &result=DBVal_Error); /** * Fetches an integer from a field in the current row of a result set. @@ -524,7 +833,7 @@ native Float:SQL_FetchFloat(Handle:query, field, &DBResult:result=DBVal_Error); * type conversion requested from the database, * or no current result set. */ -native SQL_FetchInt(Handle:query, field, &DBResult:result=DBVal_Error); +native int SQL_FetchInt(Handle query, int field, DBResult &result=DBVal_Error); /** * Returns whether a field's data in the current row of a result set is @@ -536,7 +845,7 @@ native SQL_FetchInt(Handle:query, field, &DBResult:result=DBVal_Error); * @error Invalid query Handle or field index, or no * current result set. */ -native bool:SQL_IsFieldNull(Handle:query, field); +native bool SQL_IsFieldNull(Handle query, int field); /** * Returns the length of a field's data in the current row of a result @@ -550,7 +859,7 @@ native bool:SQL_IsFieldNull(Handle:query, field); * @error Invalid query Handle or field index or no * current result set. */ -native SQL_FetchSize(Handle:query, field); +native int SQL_FetchSize(Handle query, int field); /** * Binds a parameter in a prepared statement to a given integer value. @@ -560,11 +869,10 @@ native SQL_FetchSize(Handle:query, field); * @param number The number to bind. * @param signed True to bind the number as signed, false to * bind it as unsigned. - * @noreturn * @error Invalid statement Handle or parameter index, or * SQL error. */ -native SQL_BindParamInt(Handle:statement, param, number, bool:signed=true); +native void SQL_BindParamInt(Handle statement, int param, int number, bool signed=true); /** * Binds a parameter in a prepared statement to a given float value. @@ -572,11 +880,10 @@ native SQL_BindParamInt(Handle:statement, param, number, bool:signed=true); * @param statement A statement (prepared query) Handle. * @param param The parameter index (starting from 0). * @param value The float number to bind. - * @noreturn * @error Invalid statement Handle or parameter index, or * SQL error. */ -native SQL_BindParamFloat(Handle:statement, param, Float:value); +native void SQL_BindParamFloat(Handle statement, int param, float value); /** * Binds a parameter in a prepared statement to a given string value. @@ -588,11 +895,10 @@ native SQL_BindParamFloat(Handle:statement, param, Float:value); * locally if necessary. If the string contents * won't change before calling SQL_Execute(), this * can be set to false for optimization. - * @noreturn * @error Invalid statement Handle or parameter index, or * SQL error. */ -native SQL_BindParamString(Handle:statement, param, const String:value[], bool:copy); +native void SQL_BindParamString(Handle statement, int param, const char[] value, bool copy); /** * Executes a prepared statement. All parameters must be bound beforehand. @@ -601,7 +907,7 @@ native SQL_BindParamString(Handle:statement, param, const String:value[], bool:c * @return True on success, false on failure. * @error Invalid statement Handle. */ -native bool:SQL_Execute(Handle:statement); +native bool SQL_Execute(Handle statement); /** * Locks a database so threading operations will not interrupt. @@ -618,32 +924,27 @@ native bool:SQL_Execute(Handle:statement); * threaded operation has concluded. * * @param database A database Handle. - * @noreturn * @error Invalid database Handle. */ -native SQL_LockDatabase(Handle:database); +native void SQL_LockDatabase(Handle database); /** * Unlocks a database so threading operations may continue. * * @param database A database Handle. - * @noreturn * @error Invalid database Handle. */ -native SQL_UnlockDatabase(Handle:database); +native void SQL_UnlockDatabase(Handle database); -/** - * General callback for threaded SQL stuff. - * - * @param owner Parent object of the Handle (or INVALID_HANDLE if none). - * @param hndl Handle to the child object (or INVALID_HANDLE if none). - * @param error Error string if there was an error. The error could be - * empty even if an error condition exists, so it is important - * to check the actual Handle value instead. - * @param data Data passed in via the original threaded invocation. - * @param - */ -functag public SQLTCallback(Handle:owner, Handle:hndl, const String:error[], any:data); +// General callback for threaded SQL stuff. +// +// @param owner Parent object of the Handle (or INVALID_HANDLE if none). +// @param hndl Handle to the child object (or INVALID_HANDLE if none). +// @param error Error string if there was an error. The error could be +// empty even if an error condition exists, so it is important +// to check the actual Handle value instead. +// @param data Data passed in via the original threaded invocation. +typedef SQLTCallback = function void (Handle owner, Handle hndl, const char[] error, any data); /** * Tells whether two database handles both point to the same database @@ -655,7 +956,7 @@ functag public SQLTCallback(Handle:owner, Handle:hndl, const String:error[], any * connection, false otherwise. * @error Invalid Handle. */ -native bool:SQL_IsSameConnection(Handle:hndl1, Handle:hndl2); +native bool SQL_IsSameConnection(Handle hndl1, Handle hndl2); /** * Connects to a database via a thread. This can be used instead of @@ -669,9 +970,8 @@ native bool:SQL_IsSameConnection(Handle:hndl1, Handle:hndl2); * If no driver was found, the owner is INVALID_HANDLE. * @param name Database name. * @param data Extra data value to pass to the callback. - * @noreturn */ -native SQL_TConnect(SQLTCallback:callback, const String:name[]="default", any:data=0); +native void SQL_TConnect(SQLTCallback callback, const char[] name="default", any data=0); /** * Executes a simple query via a thread. The query Handle is passed through @@ -690,10 +990,9 @@ native SQL_TConnect(SQLTCallback:callback, const String:name[]="default", any:da * @param query Query string. * @param data Extra data value to pass to the callback. * @param prio Priority queue to use. - * @noreturn * @error Invalid database Handle. */ -native SQL_TQuery(Handle:database, SQLTCallback:callback, const String:query[], any:data=0, DBPriority:prio=DBPrio_Normal); +native void SQL_TQuery(Handle database, SQLTCallback callback, const char[] query, any data=0, DBPriority prio=DBPrio_Normal); /** * Creates a new transaction object. A transaction object is a list of queries @@ -701,7 +1000,7 @@ native SQL_TQuery(Handle:database, SQLTCallback:callback, const String:query[], * * @return A transaction handle. */ -native Handle:SQL_CreateTransaction(); +native Transaction SQL_CreateTransaction(); /** * Adds a query to a transaction object. @@ -712,32 +1011,7 @@ native Handle:SQL_CreateTransaction(); * @return The index of the query in the transaction's query list. * @error Invalid transaction handle. */ -native SQL_AddQuery(Handle:txn, const String:query[], any:data=0); - -/** - * Callback for a successful transaction. - * - * @param db Database handle. - * @param data Data value passed to SQL_ExecuteTransaction(). - * @param numQueries Number of queries executed in the transaction. - * @param results An array of Query handle results, one for each of numQueries. They are closed automatically. - * @param queryData An array of each data value passed to SQL_AddQuery(). - * @noreturn - */ -functag public SQLTxnSuccess(Handle:db, any:data, numQueries, Handle:results[], any:queryData[]); - -/** - * Callback for a failed transaction. - * - * @param db Database handle. - * @param data Data value passed to SQL_ExecuteTransaction(). - * @param numQueries Number of queries executed in the transaction. - * @param error Error message. - * @param failIndex Index of the query that failed, or -1 if something else. - * @param queryData An array of each data value passed to SQL_AddQuery(). - * @noreturn - */ -functag public SQLTxnFailure(Handle:db, any:data, numQueries, const String:error[], failIndex, any:queryData[]); +native int SQL_AddQuery(Transaction txn, const char[] query, any data=0); /** * Sends a transaction to the database thread. The transaction handle is @@ -754,9 +1028,9 @@ functag public SQLTxnFailure(Handle:db, any:data, numQueries, const String:error * @error An invalid handle. */ native SQL_ExecuteTransaction( - Handle:db, - Handle:txn, - SQLTxnSuccess:onSuccess=SQLTxnSuccess:-1, - SQLTxnFailure:onError=SQLTxnFailure:-1, - any:data=0, + Handle db, + Transaction:txn, + SQLTxnSuccess:onSuccess = INVALID_FUNCTION, + SQLTxnFailure:onError = INVALID_FUNCTION, + any data=0, DBPriority:priority=DBPrio_Normal); diff --git a/env/include/entity.inc b/env/include/entity.inc index d33a3b8..765bb85 100644 --- a/env/include/entity.inc +++ b/env/include/entity.inc @@ -682,15 +682,12 @@ native GetEntPropArraySize(entity, PropType:type, const String:prop[]); * @param array Array to read into. * @param arraySize Number of values to read. * @param dataSize Size of each value in bytes (1, 2, or 4). - * @noreturn * @error Invalid entity or offset out of reasonable bounds. */ -stock GetEntDataArray(entity, offset, array[], arraySize, dataSize=4) +stock void GetEntDataArray(int entity, int offset, int[] array, int arraySize, int dataSize=4) { - for (new i=0; i max_size. + public native int ReadString(char[] buffer, int max_size, int read_count=-1); + + // Writes binary data to a file. + // + // @param items Array of items to write. The data is read directly. + // That is, in 1 or 2-byte mode, the lower byte(s) in + // each cell are used directly, rather than performing + // any casts from a 4-byte number to a smaller number. + // @param num_items Number of items in the array. + // @param size Size of each item in the array in bytes. + // Valid sizes are 1, 2, or 4. + // @return True on success, false on error. + public native bool Write(const int[] items, int num_items, int size); + + // Writes a binary string to a file. + // + // @param buffer String to write. + // @param term True to append NUL terminator, false otherwise. + // @return True on success, false on error. + public native bool WriteString(const char[] buffer, bool term); + + // Writes a line of text to a text file. A newline is automatically appended. + // + // @param hndl Handle to the file. + // @param format Formatting rules. + // @param ... Variable number of format parameters. + // @return True on success, false otherwise. + public native bool WriteLine(const char[] format, any:...); + + // Reads a single int8 (byte) from a file. The returned value is sign- + // extended to an int32. + // + // @param data Variable to store the data read. + // @return True on success, false on failure. + public native bool ReadInt8(int &data); + + // Reads a single uint8 (unsigned byte) from a file. The returned value is + // zero-extended to an int32. + // + // @param data Variable to store the data read. + // @return True on success, false on failure. + public native bool ReadUint8(int &data); + + // Reads a single int16 (short) from a file. The value is sign-extended to + // an int32. + // + // @param data Variable to store the data read. + // @return True on success, false on failure. + public native bool ReadInt16(int &data); + + // Reads a single unt16 (unsigned short) from a file. The value is zero- + // extended to an int32. + // + // @param data Variable to store the data read. + // @return True on success, false on failure. + public native bool ReadUint16(int &data); + + // Reads a single int32 (int/cell) from a file. + // + // @param data Variable to store the data read. + // @return True on success, false on failure. + public native bool ReadInt32(int &data); + + // Writes a single int8 (byte) to a file. + // + // @param data Data to write (truncated to an int8). + // @return True on success, false on failure. + public native bool WriteInt8(int data); + + // Writes a single int16 (short) to a file. + // + // @param data Data to write (truncated to an int16). + // @return True on success, false on failure. + public native bool WriteInt16(int data); + + // Writes a single int32 (int/cell) to a file. + // + // @param data Data to write. + // @return True on success, false on failure. + public native bool WriteInt32(int data); + + // Tests if the end of file has been reached. + // + // @return True if end of file has been reached, false otherwise. + public native bool EndOfFile(); + + // Sets the file position indicator. + // + // @param position Position relative to what is specified in whence. + // @param where SEEK_ constant value of where to see from. + // @return True on success, false otherwise. + public native bool Seek(int position, int where); + + // Get the current position in the file; returns -1 on failure. + property int Position { + public native get(); + } +} + /** * Builds a path relative to the SourceMod folder. This should be used instead of * directly referencing addons/sourcemod, in case users change the name of their @@ -98,19 +251,24 @@ enum PathType * @param ... Format arguments. * @return Number of bytes written to buffer (not including null terminator). */ -native BuildPath(PathType:type, String:buffer[], maxlength, const String:fmt[], any:...); +native int BuildPath(PathType type, char[] buffer, int maxlength, const char[] fmt, any:...); /** * Opens a directory/folder for contents enumeration. * - * @note Directories are closed with CloseHandle(). + * @note Directories are closed with CloseHandle() or delete. * @note Directories Handles can be cloned. * @note OpenDirectory() supports the "file://" notation. * * @param path Path to open. - * @return A Handle to the directory, INVALID_HANDLE on open error. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to find files existing in any of + * the Valve search paths, rather than solely files + * existing directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return A Handle to the directory, null on error. */ -native Handle:OpenDirectory(const String:path[]); +native DirectoryListing OpenDirectory(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Reads the current directory entry as a local filename, then moves to the next file. @@ -125,28 +283,56 @@ native Handle:OpenDirectory(const String:path[]); * @return True on success, false if there are no more files to read. * @error Invalid or corrupt Handle. */ -native bool:ReadDirEntry(Handle:dir, String:buffer[], maxlength, &FileType:type=FileType_Unknown); +native bool ReadDirEntry(Handle dir, char[] buffer, int maxlength, FileType &type=FileType_Unknown); /** - * Opens a file. + * Opens or creates a file, returning a File handle on success. File handles + * should be closed with delete or CloseHandle(). * - * @note Files are closed with CloseHandle(). - * @note File Handles can be cloned. - * @note OpenFile() supports the "file://" notation. + * The open mode may be one of the following strings: + * "r": Open an existing file for reading. + * "w": Create a file for writing, or truncate (delete the contents of) an + * existing file and then open it for writing. + * "a": Create a file for writing, or open an existing file such that writes + * will be appended to the end. + * "r+": Open an existing file for both reading and writing. + * "w+": Create a file for reading and writing, or truncate an existing file + * and then open it for reading and writing. + * "a+": Create a file for both reading and writing, or open an existing file + * such that writes will be appended to the end. + * + * The open mode may also contain an additional character after "r", "w", or "a", + * but before any "+" sign. This character may be "b" (indicating binary mode) or + * "t" (indicating text mode). By default, "text" mode is implied. On Linux and + * Mac, this has no distinction from binary mode. On Windows, it causes the '\n' + * character (0xA) to be written as "\r\n" (0xD, 0xA). + * + * Example: "rb" opens a binary file for writing; "at" opens a text file for + * appending. * * @param file File to open. * @param mode Open mode. - * @return A Handle to the file, INVALID_HANDLE on open error. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to find files existing in valve + * search paths, rather than solely files existing directly + * in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return A File handle, or null if the file could not be opened. */ -native Handle:OpenFile(const String:file[], const String:mode[]); +native File OpenFile(const char[] file, const char[] mode, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Deletes a file. * * @param path Path of the file to delete. - * @return True on success, false otherwise. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to delete files existing in the Valve + * search path, rather than solely files existing directly + * in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return True on success, false on failure or if file not immediately removed. */ -native bool:DeleteFile(const String:path[]); +native bool DeleteFile(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="DEFAULT_WRITE_PATH"); /** * Reads a line from a text file. @@ -156,7 +342,7 @@ native bool:DeleteFile(const String:path[]); * @param maxlength Maximum size of string buffer. * @return True on success, false otherwise. */ -native bool:ReadFileLine(Handle:hndl, String:buffer[], maxlength); +native bool ReadFileLine(Handle hndl, char[] buffer, int maxlength); /** * Reads binary data from a file. @@ -168,7 +354,7 @@ native bool:ReadFileLine(Handle:hndl, String:buffer[], maxlength); * Valid sizes are 1, 2, or 4. * @return Number of elements read, or -1 on error. */ -native ReadFile(Handle:hndl, items[], num_items, size); +native int ReadFile(Handle hndl, int[] items, int num_items, int size); /** * Reads a UTF8 or ANSI string from a file. @@ -185,7 +371,7 @@ native ReadFile(Handle:hndl, items[], num_items, size); * if an error was encountered. * @error Invalid Handle, or read_count > max_size. */ -native ReadFileString(Handle:hndl, String:buffer[], max_size, read_count=-1); +native int ReadFileString(Handle hndl, char[] buffer, int max_size, int read_count=-1); /** * Writes binary data to a file. @@ -201,7 +387,7 @@ native ReadFileString(Handle:hndl, String:buffer[], max_size, read_count=-1); * @return True on success, false on error. * @error Invalid Handle. */ -native bool:WriteFile(Handle:hndl, const items[], num_items, size); +native bool WriteFile(Handle hndl, const int[] items, int num_items, int size); /** * Writes a binary string to a file. @@ -212,7 +398,7 @@ native bool:WriteFile(Handle:hndl, const items[], num_items, size); * @return True on success, false on error. * @error Invalid Handle. */ -native bool:WriteFileString(Handle:hndl, const String:buffer[], bool:term); +native bool WriteFileString(Handle hndl, const char[] buffer, bool term); /** * Writes a line of text to a text file. A newline is automatically appended. @@ -223,7 +409,7 @@ native bool:WriteFileString(Handle:hndl, const String:buffer[], bool:term); * @return True on success, false otherwise. * @error Invalid Handle. */ -native bool:WriteFileLine(Handle:hndl, const String:format[], any:...); +native bool WriteFileLine(Handle hndl, const char[] format, any:...); /** * Reads a single binary cell from a file. @@ -235,14 +421,13 @@ native bool:WriteFileLine(Handle:hndl, const String:format[], any:...); * @return Number of elements read (max 1), or -1 on error. * @error Invalid Handle. */ -stock ReadFileCell(Handle:hndl, &data, size) +stock int ReadFileCell(Handle hndl, int &data, int size) { - new array[1], ret; + int ret; + int array[1]; if ((ret = ReadFile(hndl, array, 1, size)) == 1) - { data = array[0]; - } return ret; } @@ -260,12 +445,11 @@ stock ReadFileCell(Handle:hndl, &data, size) * @return True on success, false on error. * @error Invalid Handle. */ -stock bool:WriteFileCell(Handle:hndl, data, size) +stock bool WriteFileCell(Handle hndl, int data, int size) { - new array[1]; + int array[1]; array[0] = data; - return WriteFile(hndl, array, 1, size); } @@ -276,7 +460,7 @@ stock bool:WriteFileCell(Handle:hndl, data, size) * @return True if end of file has been reached, false otherwise. * @error Invalid Handle. */ -native bool:IsEndOfFile(Handle:file); +native bool IsEndOfFile(Handle file); /** * Sets the file position indicator. @@ -287,7 +471,7 @@ native bool:IsEndOfFile(Handle:file); * @return True on success, false otherwise. * @error Invalid Handle. */ -native bool:FileSeek(Handle:file, position, where); +native bool FileSeek(Handle file, int position, int where); /** * Get current position in the file. @@ -296,7 +480,7 @@ native bool:FileSeek(Handle:file, position, where); * @return Value for the file position indicator. * @error Invalid Handle. */ -native FilePosition(Handle:file); +native int FilePosition(Handle file); /** * Checks if a file exists. @@ -304,28 +488,38 @@ native FilePosition(Handle:file); * @param path Path to the file. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to find files existing in any of - * the GAME search paths, rather than solely files + * the Valve search paths, rather than solely files * existing directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. * @return True if the file exists, false otherwise. */ -native bool:FileExists(const String:path[], bool:use_valve_fs=false); +native bool FileExists(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Renames a file. * * @param newpath New path to the file. * @param oldpath Path to the existing file. - * @return True on success, false otherwise. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to rename files in the game's + * Valve search paths, rather than directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return True on success or use_valve_fs specified, false otherwise. */ -native bool:RenameFile(const String:newpath[], const String:oldpath[]); +native bool RenameFile(const char[] newpath, const char[] oldpath, bool use_valve_fs=false, const char[] valve_path_id="DEFAULT_WRITE_PATH"); /** * Checks if a directory exists. * * @param path Path to the directory. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to find files existing in any of + * the Valve search paths, rather than solely files + * existing directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. * @return True if the directory exists, false otherwise. */ -native bool:DirExists(const String:path[]); +native bool DirExists(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Get the file size in bytes. @@ -333,20 +527,22 @@ native bool:DirExists(const String:path[]); * @param path Path to the file. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to find files existing in any of - * the GAME search paths, rather than solely files + * the Valve search paths, rather than solely files * existing directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. * @return File size in bytes, -1 if file not found. */ -native FileSize(const String:path[], bool:use_valve_fs=false); +native int FileSize(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Flushes a file's buffered output; any buffered output * is immediately written to the file. * * @param file Handle to the file. - * @return True on success, false on failure. + * @return True on success or use_valve_fs specified with OpenFile, + * otherwise false on failure. */ -native FlushFile(Handle:file); +native bool FlushFile(Handle file); /** * Removes a directory. @@ -355,7 +551,7 @@ native FlushFile(Handle:file); * @param path Path to the directory. * @return True on success, false otherwise. */ -native bool:RemoveDir(const String:path[]); +native bool RemoveDir(const char[] path); #define FPERM_U_READ 0x0100 /* User can read. */ #define FPERM_U_WRITE 0x0080 /* User can write. */ @@ -373,8 +569,22 @@ native bool:RemoveDir(const String:path[]); * @param path Path to create. * @param mode Permissions (default is o=rx,g=rx,u=rwx). Note that folders must have * the execute bit set on Linux. On Windows, the mode is ignored. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to create folders in the game's + * Valve search paths, rather than directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for default. + * In this case, mode is ignored. */ -native bool:CreateDirectory(const String:path[], mode); +native bool CreateDirectory(const char[] path, int mode, bool use_valve_fs=false, const char[] valve_path_id="DEFAULT_WRITE_PATH"); + +/** + * Changes a file or directories permissions. + * + * @param path Path to the file. + * @param mode Permissions to set. + * @return True on success, false otherwise. + */ +native bool SetFilePermissions(const String:path[], int mode); /** * Returns a file timestamp as a unix timestamp. @@ -383,7 +593,7 @@ native bool:CreateDirectory(const String:path[], mode); * @param tmode Time mode. * @return Time value, or -1 on failure. */ -native GetFileTime(const String:file[], FileTimeMode:tmode); +native GetFileTime(const char[] file, FileTimeMode tmode); /** * Same as LogToFile(), except uses an open file Handle. The file must @@ -392,10 +602,9 @@ native GetFileTime(const String:file[], FileTimeMode:tmode); * @param hndl Handle to the file. * @param message Message format. * @param ... Message format parameters. - * @noreturn * @error Invalid Handle. */ -native LogToOpenFile(Handle:hndl, const String:message[], any:...); +native void LogToOpenFile(Handle hndl, const char[] message, any:...); /** * Same as LogToFileEx(), except uses an open file Handle. The file must @@ -404,8 +613,7 @@ native LogToOpenFile(Handle:hndl, const String:message[], any:...); * @param hndl Handle to the file. * @param message Message format. * @param ... Message format parameters. - * @noreturn * @error Invalid Handle. */ -native LogToOpenFileEx(Handle:hndl, const String:message[], any:...); +native void LogToOpenFileEx(Handle hndl, const char[] message, any:...); diff --git a/env/include/float.inc b/env/include/float.inc index 1282158..4c46c3d 100644 --- a/env/include/float.inc +++ b/env/include/float.inc @@ -35,6 +35,7 @@ #endif #define _float_included +#if !defined __sourcepawn2__ /** * Converts an integer into a floating point value. * @@ -42,6 +43,7 @@ * @return Floating point value. */ native Float:float(value); +#endif /** * Multiplies two floats together. @@ -244,6 +246,7 @@ stock RoundFloat(Float:value) * User defined operators. * */ +#if !defined __sourcepawn2__ #pragma rational Float native bool:__FLOAT_GT__(Float:a, Float:b); @@ -368,6 +371,7 @@ stock bool:operator<=(oper1, Float:oper2) forward operator%(Float:oper1, Float:oper2); forward operator%(Float:oper1, oper2); forward operator%(oper1, Float:oper2); +#endif // __sourcepawn2__ #define FLOAT_PI 3.1415926535897932384626433832795 diff --git a/env/include/functions.inc b/env/include/functions.inc index 105f1d2..9308b94 100644 --- a/env/include/functions.inc +++ b/env/include/functions.inc @@ -357,7 +357,7 @@ native Call_Cancel(); * @param numParams Number of parameters passed to the native. * @return Value for the native call to return. */ -functag public NativeCall(Handle:plugin, numParams); +typedef NativeCall = function int (Handle plugin, int numParams); /** * Creates a dynamic native. This should only be called in AskPluginLoad(), or @@ -428,6 +428,15 @@ native SetNativeString(param, const String:source[], maxlength, bool:utf8=true, */ native any:GetNativeCell(param); +/** + * Gets a function pointer from a native parameter. + * + * @param param Parameter number, starting from 1. + * @return Function pointer at the given parameter number. + * @error Invalid parameter number, or calling from a non-native function. + */ +native Function GetNativeFunction(param); + /** * Gets a cell from a native parameter, by reference. * @@ -499,7 +508,7 @@ native FormatNativeString(out_param, * @param data Data passed to the RequestFrame native. * @noreturn */ -functag public RequestFrameCallback(any:data); +typedef RequestFrameCallback = function void (any data); /** * Creates a single use Next Frame hook. diff --git a/env/include/halflife.inc b/env/include/halflife.inc index c734e90..f0dcbc9 100644 --- a/env/include/halflife.inc +++ b/env/include/halflife.inc @@ -568,15 +568,15 @@ native ShowHudText(client, channel, const String:message[], any:...); */ stock ShowMOTDPanel(client, const String:title[], const String:msg[], type=MOTDPANEL_TYPE_INDEX) { - decl String:num[3]; - new Handle:Kv = CreateKeyValues("data"); + char num[3]; IntToString(type, num, sizeof(num)); - KvSetString(Kv, "title", title); - KvSetString(Kv, "type", num); - KvSetString(Kv, "msg", msg); - ShowVGUIPanel(client, "info", Kv); - CloseHandle(Kv); + KeyValues kv = new KeyValues("data"); + kv.SetString("title", title); + kv.SetString("type", num); + kv.SetString("msg", msg); + ShowVGUIPanel(client, "info", kv); + delete kv; } /** @@ -590,13 +590,14 @@ stock ShowMOTDPanel(client, const String:title[], const String:msg[], type=MOTDP */ stock DisplayAskConnectBox(client, Float:time, const String:ip[], const String:password[] = "") { - decl String:destination[288]; + char destination[288]; FormatEx(destination, sizeof(destination), "%s/%s", ip, password); - new Handle:Kv = CreateKeyValues("data"); - KvSetFloat(Kv, "time", time); - KvSetString(Kv, "title", destination); - CreateDialog(client, Kv, DialogType_AskConnect); - CloseHandle(Kv); + + KeyValues kv = new KeyValues("data"); + kv.SetFloat("time", time); + kv.SetString("title", destination); + CreateDialog(client, kv, DialogType_AskConnect); + delete kv; } /** @@ -623,3 +624,21 @@ native EntRefToEntIndex(ref); */ native MakeCompatEntRef(ref); + +enum ClientRangeType +{ + RangeType_Visibility = 0, + RangeType_Audibility, +} + +/** + * Find clients that are potentially in range of a position. + * + * @param origin Coordinates from which to test range. + * @param rangeType Range type to use for filtering clients. + * @param clients Array to which found client indexes will be written. + * @param size Maximum size of clients array. + * @return Number of client indexes written to clients array. + */ +native int GetClientsInRange(float origin[3], ClientRangeType rangeType, int[] clients, int size); + diff --git a/env/include/handles.inc b/env/include/handles.inc index 053ad6f..3294e73 100644 --- a/env/include/handles.inc +++ b/env/include/handles.inc @@ -36,9 +36,9 @@ #define _handles_included /** - * Handle helper macros. + * Preset Handle values. */ -enum Handle +enum Handle: // Tag disables introducing "Handle" as a symbol. { INVALID_HANDLE = 0, }; @@ -52,10 +52,9 @@ enum Handle * sure you read the documentation on whatever provided the Handle. * * @param hndl Handle to close. - * @return True if successful, false if not closeable. * @error Invalid handles will cause a run time error. */ -native bool:CloseHandle(Handle:hndl); +native CloseHandle(Handle:hndl); /** * Clones a Handle. When passing handles in between plugins, caching handles @@ -76,6 +75,15 @@ native bool:CloseHandle(Handle:hndl); */ native Handle:CloneHandle(Handle:hndl, Handle:plugin=INVALID_HANDLE); +/** + * Helper for object-oriented syntax. + */ +methodmap Handle __nullable__ +{ + public Close() = CloseHandle; + public ~Handle() = CloseHandle; +} + /** * Do not use this function. Returns if a Handle and its contents * are readable, whereas INVALID_HANDLE only checks for the absence diff --git a/env/include/helpers.inc b/env/include/helpers.inc index 3b70165..e5e848a 100644 --- a/env/include/helpers.inc +++ b/env/include/helpers.inc @@ -97,59 +97,45 @@ stock Handle:FindPluginByFile(const String:filename[]) * @deprecated Use FindTarget() or ProcessTargetString(). */ #pragma deprecated Use FindTarget() or ProcessTargetString() -stock SearchForClients(const String:pattern[], clients[], maxClients) +stock int SearchForClients(const char[] pattern, int[] clients, int maxClients) { - new total = 0; + int total = 0; if (maxClients == 0) - { return 0; - } - if (pattern[0] == '#') - { - new input = StringToInt(pattern[1]); - if (!input) - { - decl String:name[65] - for (new i=1; i<=MaxClients; i++) - { + if (pattern[0] == '#') { + int input = StringToInt(pattern[1]); + if (!input) { + char name[65]; + for (int i=1; i<=MaxClients; i++) { if (!IsClientInGame(i)) - { continue; - } GetClientName(i, name, sizeof(name)); - if (strcmp(name, pattern, false) == 0) - { + if (strcmp(name, pattern, false) == 0) { clients[0] = i; return 1; } } } else { - new client = GetClientOfUserId(input); - if (client) - { + int client = GetClientOfUserId(input); + if (client) { clients[0] = client; return 1; } } } - decl String:name[65] - for (new i=1; i<=MaxClients; i++) + char name[65]; + for (int i=1; i<=MaxClients; i++) { if (!IsClientInGame(i)) - { continue; - } GetClientName(i, name, sizeof(name)); - if (StrContains(name, pattern, false) != -1) - { + if (StrContains(name, pattern, false) != -1) { clients[total++] = i; if (total >= maxClients) - { break; - } } } @@ -255,18 +241,17 @@ stock FindTarget(client, const String:target[], bool:nobots = false, bool:immuni ClearArray(array); - new Handle:file = OpenFile(mapPath, "rt"); - if (file == INVALID_HANDLE) - { + File file = OpenFile(mapPath, "rt"); + if (!file) { LogError("Could not open file: %s", mapPath); - return 0; } LogMessage("Loading maps from file: %s", mapPath); - decl String:buffer[64], len; - while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer))) + int len; + char buffer[64]; + while (!file.EndOfFile() && file.ReadLine(buffer, sizeof(buffer))) { TrimString(buffer); @@ -288,6 +273,6 @@ stock FindTarget(client, const String:target[], bool:nobots = false, bool:immuni PushArrayString(array, buffer); } - CloseHandle(file); + file.Close(); return GetArraySize(array); } diff --git a/env/include/keyvalues.inc b/env/include/keyvalues.inc index 51f6580..9b49f8d 100644 --- a/env/include/keyvalues.inc +++ b/env/include/keyvalues.inc @@ -1,7 +1,7 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -52,6 +52,275 @@ enum KvDataTypes KvData_NUMTYPES, }; +methodmap KeyValues < Handle +{ + // Creates a new KeyValues structure. The Handle must be closed with + // CloseHandle() or delete. + // + // @param name Name of the root section. + // @param firstKey If non-empty, specifies the first key value. + // @param firstValue If firstKey is non-empty, specifies the first key's value. + public native KeyValues(const char[] name, const char[] firstKey="", const char[] firstValue=""); + + // Exports a KeyValues tree to a file. The tree is dumped from the current position. + // + // @param file File to dump write to. + // @return True on success, false otherwise. + public native bool ExportToFile(const char[] file); + + // Imports a file in KeyValues format. The file is read into the current + // position of the tree. + // + // @param file File to read from. + // @return True on success, false otherwise. + public native bool ImportFromFile(const char[] file); + + // Converts a given string to a KeyValues tree. The string is read into + // the current postion of the tree. + // + // @param buffer String buffer to load into the KeyValues. + // @param resourceName The resource name of the KeyValues, used for error tracking purposes. + // @return True on success, false otherwise. + public native bool ImportFromString(const char[] buffer, const char[] resourceName="StringToKeyValues"); + + // Imports subkeys in the given KeyValues, at the current position in that + // KeyValues, into the current position in this KeyValues. Note that this + // copies keys; it does not embed a reference to them. + // + // @param other Origin KeyValues Handle. + public native void Import(KeyValues other); + + // Sets a string value of a KeyValues key. + // + // @param kv KeyValues Handle. + // @param key Name of the key, or NULL_STRING. + // @param value String value. + public native void SetString(const char[] key, const char[] value); + + // Sets an integer value of a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param value Value number. + public native void SetNum(const char[] key, int value); + + // Sets a large integer value of a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param value Large integer value (0=High bits, 1=Low bits) + public native void SetUInt64(const char[] key, const value[2]); + + // Sets a floating point value of a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param value Floating point value. + public native void SetFloat(const char[] key, float value); + + // Sets a set of color values of a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param r Red value. + // @param g Green value. + // @param b Blue value. + // @param a Alpha value. + public native void SetColor(const char[] key, int r, int g, int b, int a=0); + + // Sets a set of color values of a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param color Red, green, blue and alpha channels. + public void SetColor4(const char[] key, const int color[4]) { + this.SetColor(key, color[0], color[1], color[2], color[3]); + } + + // Sets a vector value of a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param vec Vector value. + public native void SetVector(const char[] key, const float vec[3]); + + // Retrieves a string value from a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param value Buffer to store key value in. + // @param maxlength Maximum length of the value buffer. + // @param defvalue Optional default value to use if the key is not found. + public native void GetString(const char[] key, char[] value, int maxlength, const char[] defvalue=""); + + // Retrieves an integer value from a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param defvalue Optional default value to use if the key is not found. + // @return Integer value of the key. + public native int GetNum(const char[] key, int defvalue=0); + + // Retrieves a floating point value from a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param defvalue Optional default value to use if the key is not found. + // @return Floating point value of the key. + public native float GetFloat(const char[] key, float defvalue=0.0); + + // Retrieves a set of color values from a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param r Red value, set by reference. + // @param g Green value, set by reference. + // @param b Blue value, set by reference. + // @param a Alpha value, set by reference. + public native void GetColor(const char[] key, &r, &g, &b, &a); + + // Retrives a set of color values from a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param color Red, green, blue, and alpha channels. + public void GetColor4(const char[] key, int color[4]) { + int r, g, b, a; + this.GetColor(key, r, g, b, a); + color[0] = r; + color[1] = g; + color[2] = b; + color[3] = a; + } + + // Retrieves a large integer value from a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param value Array to represent the large integer. + // @param defvalue Optional default value to use if the key is not found. + public native void GetUInt64(const char[] key, int value[2], int defvalue[2]={0,0}); + + // Retrieves a vector value from a KeyValues key. + // + // @param key Name of the key, or NULL_STRING. + // @param vec Destination vector to store the value in. + // @param defvalue Optional default value to use if the key is not found. + public native void GetVector(const char[] key, float vec[3], const float defvalue[3]={0.0, 0.0, 0.0}); + + // Sets the current position in the KeyValues tree to the given key. + // + // @param key Name of the key. + // @param create If true, and the key does not exist, it will be created. + // @return True if the key exists, false if it does not and was not created. + public native bool JumpToKey(const char[] key, bool create=false); + + // Sets the current position in the KeyValues tree to the given key. + // + // @param id KeyValues id. + // @return True if the key exists, false if it does not. + public native bool JumpToKeySymbol(int id); + + // Sets the current position in the KeyValues tree to the first sub key. + // This native adds to the internal traversal stack. + // + // @param keyOnly If false, non-keys will be traversed (values). + // @return True on success, false if there was no first sub key. + public native bool GotoFirstSubKey(bool keyOnly=true); + + // Sets the current position in the KeyValues tree to the next sub key. + // This native does NOT add to the internal traversal stack, and thus + // GoBack() is not needed for each successive call to this function. + // + // @param keyOnly If false, non-keys will be traversed (values). + // @return True on success, false if there was no next sub key. + public native bool GotoNextKey(bool keyOnly=true); + + // Saves the current position in the traversal stack onto the traversal + // stack. This can be useful if you wish to use KvGotoNextKey() and + // have the previous key saved for backwards traversal. + // + // @param kv KeyValues Handle. + public native void SavePosition(); + + // Jumps back to the previous position. Returns false if there are no + // previous positions (i.e., at the root node). This should be called + // once for each successful Jump call, in order to return to the top node. + // This function pops one node off the internal traversal stack. + // + // @return True on success, false if there is no higher node. + public native bool GoBack(); + + // Removes the given key from the current position. + // + // @param key Name of the key. + // @return True on success, false if key did not exist. + public native bool DeleteKey(const char[] key); + + // Removes the current sub-key and attempts to set the position + // to the sub-key after the removed one. If no such sub-key exists, + // the position will be the parent key in the traversal stack. + // Given the sub-key having position "N" in the traversal stack, the + // removal will always take place from position "N-1." + // + // @param kv KeyValues Handle. + // @return 1 if removal succeeded and there was another key. + // 0 if the current node was not contained in the + // previous node, or no previous node exists. + // -1 if removal succeeded and there were no more keys, + // thus the state is as if KvGoBack() was called. + public native int DeleteThis(); + + // Sets the position back to the top node, emptying the entire node + // traversal history. This can be used instead of looping KvGoBack() + // if recursive iteration is not important. + // + // @param kv KeyValues Handle. + public native void Rewind(); + + // Retrieves the current section name. + // + // @param section Buffer to store the section name. + // @param maxlength Maximum length of the name buffer. + // @return True on success, false on failure. + public native bool GetSectionName(char[] section, int maxlength); + + // Sets the current section name. + // + // @param section Section name. + public native void SetSectionName(const char[] section); + + // Returns the data type at a key. + // + // @param key Key name. + // @return KvDataType value of the key. + public native KvDataTypes GetDataType(const char[] key); + + // Sets whether or not the KeyValues parser will read escape sequences. + // For example, \n would be read as a literal newline. This defaults + // to false for new KeyValues structures. + // + // @param useEscapes Whether or not to read escape sequences. + public native void SetEscapeSequences(bool useEscapes); + + // Returns the position in the jump stack; I.e. the number of calls + // required for KvGoBack to return to the root node. If at the root node, + // 0 is returned. + // + // @return Number of non-root nodes in the jump stack. + public native int NodesInStack(); + + // Finds a KeyValues name by id. + // + // @param id KeyValues id. + // @param name Buffer to store the name. + // @param maxlength Maximum length of the value buffer. + // @return True on success, false if id not found. + public native bool FindKeyById(int id, char[] name, int maxlength); + + // Finds a KeyValues id inside a KeyValues tree. + // + // @param key Key name. + // @param id Id of the found KeyValue. + // @return True on success, false if key not found. + public native bool GetNameSymbol(const char[] key, int &id); + + // Retrieves the current section id. + // + // @param kv KeyValues Handle. + // @param id Id of the current section. + // @return True on success, false on failure. + public native bool GetSectionSymbol(int &id); +}; + /** * Creates a new KeyValues structure. The Handle must always be closed. * @@ -60,7 +329,7 @@ enum KvDataTypes * @param firstValue If firstKey is non-empty, specifies the first key's value. * @return A Handle to a new KeyValues structure. */ -native Handle:CreateKeyValues(const String:name[], const String:firstKey[]="", const String:firstValue[]=""); +native KeyValues CreateKeyValues(const char[] name, const char[] firstKey="", const char[] firstValue=""); /** * Sets a string value of a KeyValues key. @@ -68,10 +337,9 @@ native Handle:CreateKeyValues(const String:name[], const String:firstKey[]="", c * @param kv KeyValues Handle. * @param key Name of the key, or NULL_STRING. * @param value String value. - * @noreturn * @error Invalid Handle. */ -native KvSetString(Handle:kv, const String:key[], const String:value[]); +native void KvSetString(Handle kv, const char[] key, const char[] value); /** * Sets an integer value of a KeyValues key. @@ -79,10 +347,9 @@ native KvSetString(Handle:kv, const String:key[], const String:value[]); * @param kv KeyValues Handle. * @param key Name of the key, or NULL_STRING. * @param value Value number. - * @noreturn * @error Invalid Handle. */ -native KvSetNum(Handle:kv, const String:key[], value); +native void KvSetNum(Handle kv, const char[] key, int value); /** * Sets a large integer value of a KeyValues key. @@ -90,10 +357,9 @@ native KvSetNum(Handle:kv, const String:key[], value); * @param kv KeyValues Handle. * @param key Name of the key, or NULL_STRING. * @param value Large integer value (0=High bits, 1=Low bits) - * @noreturn * @error Invalid Handle. */ -native KvSetUInt64(Handle:kv, const String:key[], const value[2]); +native void KvSetUInt64(Handle kv, const char[] key, const value[2]); /** * Sets a floating point value of a KeyValues key. @@ -101,10 +367,9 @@ native KvSetUInt64(Handle:kv, const String:key[], const value[2]); * @param kv KeyValues Handle. * @param key Name of the key, or NULL_STRING. * @param value Floating point value. - * @noreturn * @error Invalid Handle. */ -native KvSetFloat(Handle:kv, const String:key[], Float:value); +native void KvSetFloat(Handle kv, const char[] key, float value); /** * Sets a set of color values of a KeyValues key. @@ -115,10 +380,9 @@ native KvSetFloat(Handle:kv, const String:key[], Float:value); * @param g Green value. * @param b Blue value. * @param a Alpha value. - * @noreturn * @error Invalid Handle. */ -native KvSetColor(Handle:kv, const String:key[], r, g, b, a=0); +native void KvSetColor(Handle kv, const char[] key, int r, int g, int b, int a=0); /** * Sets a vector value of a KeyValues key. @@ -126,10 +390,9 @@ native KvSetColor(Handle:kv, const String:key[], r, g, b, a=0); * @param kv KeyValues Handle. * @param key Name of the key, or NULL_STRING. * @param vec Vector value. - * @noreturn * @error Invalid Handle. */ -native KvSetVector(Handle:kv, const String:key[], const Float:vec[3]); +native void KvSetVector(Handle kv, const char[] key, const float vec[3]); /** * Retrieves a string value from a KeyValues key. @@ -139,10 +402,9 @@ native KvSetVector(Handle:kv, const String:key[], const Float:vec[3]); * @param value Buffer to store key value in. * @param maxlength Maximum length of the value buffer. * @param defvalue Optional default value to use if the key is not found. - * @noreturn * @error Invalid Handle. */ -native KvGetString(Handle:kv, const String:key[], String:value[], maxlength, const String:defvalue[]=""); +native void KvGetString(Handle kv, const char[] key, char[] value, int maxlength, const char[] defvalue=""); /** * Retrieves an integer value from a KeyValues key. @@ -153,7 +415,7 @@ native KvGetString(Handle:kv, const String:key[], String:value[], maxlength, con * @return Integer value of the key. * @error Invalid Handle. */ -native KvGetNum(Handle:kv, const String:key[], defvalue=0); +native int KvGetNum(Handle kv, const char[] key, int defvalue=0); /** * Retrieves a floating point value from a KeyValues key. @@ -164,7 +426,7 @@ native KvGetNum(Handle:kv, const String:key[], defvalue=0); * @return Floating point value of the key. * @error Invalid Handle. */ -native Float:KvGetFloat(Handle:kv, const String:key[], Float:defvalue=0.0); +native float KvGetFloat(Handle kv, const char[] key, float defvalue=0.0); /** * Retrieves a set of color values from a KeyValues key. @@ -175,10 +437,9 @@ native Float:KvGetFloat(Handle:kv, const String:key[], Float:defvalue=0.0); * @param g Green value, set by reference. * @param b Blue value, set by reference. * @param a Alpha value, set by reference. - * @noreturn * @error Invalid Handle. */ -native KvGetColor(Handle:kv, const String:key[], &r, &g, &b, &a); +native void KvGetColor(Handle kv, const char[] key, int &r, int &g, int &b, int &a); /** * Retrieves a large integer value from a KeyValues key. @@ -187,10 +448,9 @@ native KvGetColor(Handle:kv, const String:key[], &r, &g, &b, &a); * @param key Name of the key, or NULL_STRING. * @param value Array to represent the large integer. * @param defvalue Optional default value to use if the key is not found. - * @noreturn * @error Invalid Handle. */ -native KvGetUInt64(Handle:kv, const String:key[], value[2], defvalue[2]={0,0}); +native void KvGetUInt64(Handle kv, const char[] key, int value[2], int defvalue[2]={0,0}); /** * Retrieves a vector value from a KeyValues key. @@ -199,10 +459,9 @@ native KvGetUInt64(Handle:kv, const String:key[], value[2], defvalue[2]={0,0}); * @param key Name of the key, or NULL_STRING. * @param vec Destination vector to store the value in. * @param defvalue Optional default value to use if the key is not found. - * @noreturn * @error Invalid Handle. */ -native KvGetVector(Handle:kv, const String:key[], Float:vec[3], const Float:defvalue[3]={0.0, 0.0, 0.0}); +native void KvGetVector(Handle kv, const char[] key, float vec[3], const float defvalue[3]={0.0, 0.0, 0.0}); /** * Sets the current position in the KeyValues tree to the given key. @@ -212,7 +471,7 @@ native KvGetVector(Handle:kv, const String:key[], Float:vec[3], const Float:defv * @param create If true, and the key does not exist, it will be created. * @return True if the key exists, false if it does not and was not created. */ -native bool:KvJumpToKey(Handle:kv, const String:key[], bool:create=false); +native bool KvJumpToKey(Handle kv, const char[] key, bool create=false); /** * Sets the current position in the KeyValues tree to the given key. @@ -221,7 +480,7 @@ native bool:KvJumpToKey(Handle:kv, const String:key[], bool:create=false); * @param id KeyValues id. * @return True if the key exists, false if it does not. */ -native bool:KvJumpToKeySymbol(Handle:kv, id); +native bool KvJumpToKeySymbol(Handle kv, int id); /** * Sets the current position in the KeyValues tree to the first sub key. @@ -232,7 +491,7 @@ native bool:KvJumpToKeySymbol(Handle:kv, id); * @return True on success, false if there was no first sub key. * @error Invalid Handle. */ -native bool:KvGotoFirstSubKey(Handle:kv, bool:keyOnly=true); +native bool KvGotoFirstSubKey(Handle kv, bool keyOnly=true); /** * Sets the current position in the KeyValues tree to the next sub key. @@ -244,7 +503,7 @@ native bool:KvGotoFirstSubKey(Handle:kv, bool:keyOnly=true); * @return True on success, false if there was no next sub key. * @error Invalid Handle. */ -native bool:KvGotoNextKey(Handle:kv, bool:keyOnly=true); +native bool KvGotoNextKey(Handle kv, bool keyOnly=true); /** * Saves the current position in the traversal stack onto the traversal @@ -252,10 +511,9 @@ native bool:KvGotoNextKey(Handle:kv, bool:keyOnly=true); * have the previous key saved for backwards traversal. * * @param kv KeyValues Handle. - * @noreturn * @error Invalid Handle. */ -native KvSavePosition(Handle:kv); +native void KvSavePosition(Handle kv); /** * Removes the given key from the current position. @@ -265,7 +523,7 @@ native KvSavePosition(Handle:kv); * @return True on success, false if key did not exist. * @error Invalid Handle. */ -native bool:KvDeleteKey(Handle:kv, const String:key[]); +native bool KvDeleteKey(Handle kv, const char[] key); /** * Removes the current sub-key and attempts to set the position @@ -282,7 +540,7 @@ native bool:KvDeleteKey(Handle:kv, const String:key[]); * thus the state is as if KvGoBack() was called. * @error Invalid Handle. */ -native KvDeleteThis(Handle:kv); +native int KvDeleteThis(Handle kv); /** * Jumps back to the previous position. Returns false if there are no @@ -294,7 +552,7 @@ native KvDeleteThis(Handle:kv); * @return True on success, false if there is no higher node. * @error Invalid Handle. */ -native bool:KvGoBack(Handle:kv); +native bool KvGoBack(Handle kv); /** * Sets the position back to the top node, emptying the entire node @@ -302,10 +560,9 @@ native bool:KvGoBack(Handle:kv); * if recursive iteration is not important. * * @param kv KeyValues Handle. - * @noreturn * @error Invalid Handle. */ -native KvRewind(Handle:kv); +native void KvRewind(Handle kv); /** * Retrieves the current section name. @@ -316,17 +573,16 @@ native KvRewind(Handle:kv); * @return True on success, false on failure. * @error Invalid Handle. */ -native bool:KvGetSectionName(Handle:kv, String:section[], maxlength); +native bool KvGetSectionName(Handle kv, char[] section, int maxlength); /** * Sets the current section name. * * @param kv KeyValues Handle. * @param section Section name. - * @noreturn * @error Invalid Handle. */ -native KvSetSectionName(Handle:kv, const String:section[]); +native void KvSetSectionName(Handle kv, const char[] section); /** * Returns the data type at a key. @@ -336,7 +592,7 @@ native KvSetSectionName(Handle:kv, const String:section[]); * @return KvDataType value of the key. * @error Invalid Handle. */ -native KvDataTypes:KvGetDataType(Handle:kv, const String:key[]); +native KvDataTypes KvGetDataType(Handle kv, const char[] key); /** * Converts a KeyValues tree to a file. The tree is dumped @@ -347,7 +603,7 @@ native KvDataTypes:KvGetDataType(Handle:kv, const String:key[]); * @return True on success, false otherwise. * @error Invalid Handle. */ -native bool:KeyValuesToFile(Handle:kv, const String:file[]); +native bool KeyValuesToFile(Handle kv, const char[] file); /** * Converts a file to a KeyValues tree. The file is read into @@ -358,7 +614,19 @@ native bool:KeyValuesToFile(Handle:kv, const String:file[]); * @return True on success, false otherwise. * @error Invalid Handle. */ -native bool:FileToKeyValues(Handle:kv, const String:file[]); +native bool FileToKeyValues(Handle kv, const char[] file); + +/** + * Converts a given string to a KeyValues tree. The string is read into + * the current postion of the tree. + * + * @param kv KeyValues Handle. + * @param buffer String buffer to load into the KeyValues. + * @param resourceName The resource name of the KeyValues, used for error tracking purposes. + * @return True on success, false otherwise. + * @error Invalid Handle. + */ +native bool StringToKeyValues(Handle kv, const char[] buffer, const char[] resourceName="StringToKeyValues"); /** * Sets whether or not the KeyValues parser will read escape sequences. @@ -367,10 +635,9 @@ native bool:FileToKeyValues(Handle:kv, const String:file[]); * * @param kv KeyValues Handle. * @param useEscapes Whether or not to read escape sequences. - * @noreturn * @error Invalid Handle. */ -native KvSetEscapeSequences(Handle:kv, bool:useEscapes); +native void KvSetEscapeSequences(Handle kv, bool useEscapes); /** * Returns the position in the jump stack; I.e. the number of calls @@ -381,7 +648,7 @@ native KvSetEscapeSequences(Handle:kv, bool:useEscapes); * @return Number of non-root nodes in the jump stack. * @error Invalid Handle. */ -native KvNodesInStack(Handle:kv); +native int KvNodesInStack(Handle kv); /** * Makes a new copy of all subkeys in the origin KeyValues to @@ -390,10 +657,9 @@ native KvNodesInStack(Handle:kv); * * @param origin Origin KeyValues Handle. * @param dest Destination KeyValues Handle. - * @noreturn * @error Invalid Handle. */ -native KvCopySubkeys(Handle:origin, Handle:dest); +native void KvCopySubkeys(Handle origin, Handle dest); /** * Finds a KeyValues name by id. @@ -405,7 +671,7 @@ native KvCopySubkeys(Handle:origin, Handle:dest); * @return True on success, false if id not found. * @error Invalid Handle. */ -native bool:KvFindKeyById(Handle:kv, id, String:name[], maxlength); +native bool KvFindKeyById(Handle kv, int id, char[] name, int maxlength); /** * Finds a KeyValues id inside a KeyValues tree. @@ -416,7 +682,7 @@ native bool:KvFindKeyById(Handle:kv, id, String:name[], maxlength); * @return True on success, false if key not found. * @error Invalid Handle. */ -native bool:KvGetNameSymbol(Handle:kv, const String:key[], &id); +native bool KvGetNameSymbol(Handle kv, const char[] key, int &id); /** * Retrieves the current section id. @@ -426,4 +692,4 @@ native bool:KvGetNameSymbol(Handle:kv, const String:key[], &id); * @return True on success, false on failure. * @error Invalid Handle. */ -native bool:KvGetSectionSymbol(Handle:kv, &id); +native bool KvGetSectionSymbol(Handle kv, int &id); diff --git a/env/include/lang.inc b/env/include/lang.inc index 6ff4464..6e05a2b 100644 --- a/env/include/lang.inc +++ b/env/include/lang.inc @@ -59,7 +59,6 @@ native SetGlobalTransTarget(client); /** * Retrieves the language number of a client. - * Currently this simply returns the server language index. * * @param client Client index. * @return Language number client is using. diff --git a/env/include/logging.inc b/env/include/logging.inc index 4269b22..b5c42a3 100644 --- a/env/include/logging.inc +++ b/env/include/logging.inc @@ -123,7 +123,7 @@ forward Action:OnLogAction(Handle:source, * @return Plugin_Handled or Plugin_Stop will prevent the message * from being written to the log file. */ -functag public Action:GameLogHook(const String:message[]); +typedef GameLogHook = function Action (const char[] message); /** * Adds a game log hook. diff --git a/env/include/mapchooser.inc b/env/include/mapchooser.inc index 0e9e73c..fd218e6 100644 --- a/env/include/mapchooser.inc +++ b/env/include/mapchooser.inc @@ -98,12 +98,12 @@ native bool:EndOfMapVoteEnabled(); * Called when mapchooser removes a nomination from its list. * Nominations cleared on map start will not trigger this forward */ -forward OnNominationRemoved(const String:map[], owner); +forward void OnNominationRemoved(const char[] map, int owner); /** * Called when mapchooser starts a Map Vote. */ -forward OnMapVoteStarted(); +forward void OnMapVoteStarted(); public SharedPlugin:__pl_mapchooser = diff --git a/env/include/menus.inc b/env/include/menus.inc index fa6cbac..a4acd40 100644 --- a/env/include/menus.inc +++ b/env/include/menus.inc @@ -1,7 +1,7 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -150,9 +150,296 @@ enum MenuSource * @param action The action of the menu. * @param param1 First action parameter (usually the client). * @param param2 Second action parameter (usually the item). - * @noreturn */ -functag public MenuHandler(Handle:menu, MenuAction:action, param1, param2); +typedef MenuHandler = function int (Menu menu, MenuAction action, int param1, int param2); + +// Panels are used for drawing raw menus without any extra helper functions. +// Handles must be closed via delete or CloseHandle(). +methodmap Panel < Handle +{ + // Constructor for a new Panel. + // + // @param hStyle MenuStyle Handle, or null to use the default style. + public native Panel(Handle hStyle = null); + + // Sets the panel's title. + // + // @param text Text to set as the title. + // @param onlyIfEmpty If true, the title will only be set if no title is set. + public native void SetTitle(const char[] text, bool onlyIfEmpty=false); + + // Draws an item on a panel. If the item takes up a slot, the position + // is returned. + // + // @param text Display text to use. If not a raw line, + // the style may automatically add color markup. + // No numbering or newlines are needed. + // @param style ITEMDRAW style flags. + // @return A slot position, or 0 if item was a rawline or could not be drawn. + public native void DrawItem(const char[] text, style=ITEMDRAW_DEFAULT); + + // Draws a raw line of text on a panel, without any markup other than a + // newline. + // + // @param text Display text to use. + // @return True on success, false if raw lines are not supported. + public native bool DrawText(const char[] text); + + // Returns whether or not the given drawing flags are supported by + // the menu style. + // + // @param style ITEMDRAW style flags. + // @return True if item is drawable, false otherwise. + public native bool CanDrawFlags(int style); + + // Sets the selectable key map of a panel. This is not supported by + // all styles (only by Radio, as of this writing). + // + // @param keys An integer where each bit N allows key + // N+1 to be selected. If no keys are selectable, + // then key 0 (bit 9) is automatically set. + // @return True if supported, false otherwise. + public native bool SetKeys(int keys); + + // Sends a panel to a client. Unlike full menus, the handler + // function will only receive the following actions, both of + // which will have null for a menu, and the client as param1. + // + // MenuAction_Select (param2 will be the key pressed) + // MenuAction_Cancel (param2 will be the reason) + // + // Also, if the menu fails to display, no callbacks will be called. + // + // @param client A client to draw to. + // @param handler The MenuHandler function to catch actions with. + // @param time Time to hold the menu for. + // @return True on success, false on failure. + public native bool Send(int client, MenuHandler handler, int time); + + // Returns the amount of text the menu can still hold. If this is + // limit is reached or overflowed, the text is silently truncated. + // + // Radio menus: Currently 511 characters (512 bytes). + // Valve menus: Currently -1 (no meaning). + property int TextRemaining { + public native get(); + } + + // Returns or sets the current key position, starting at 1. This cannot be + // used to traverse backwards. + property int CurrentKey { + public native get(); + public native set(int key); + } + + // Returns the panel's style. Style handles are global and cannot be closed. + property Handle Style { + public native get(); + } +}; + +// A menu is a helper object for managing in-game menus. +methodmap Menu < Handle +{ + // Creates a new, empty menu using the default style. + // + // @param handler Function which will receive menu actions. + // @param actions Optionally set which actions to receive. Select, + // Cancel, and End will always be received regardless + // of whether they are set or not. They are also + // the only default actions. + public native Menu(MenuHandler handler, MenuAction actions=MENU_ACTIONS_DEFAULT); + + // Displays a menu to a client. + // + // @param client Client index. + // @param time Maximum time to leave menu on the screen. + // @return True on success, false on failure. + // @error Client not in game. + public native bool Display(int client, int time); + + // Displays a menu to a client, starting from the given item. + // + // @param client Client index. + // @param first_item First item to begin drawing from. + // @param time Maximum time to leave menu on the screen. + // @return True on success, false on failure. + // @error Client not in game. + /// + public native bool DisplayAt(int client, int first_item, int time); + + // Appends a new item to the end of a menu. + // + // @param info Item information string. + // @param display Default item display string. + // @param style Drawing style flags. Anything other than DEFAULT or + // DISABLED will be completely ignored when paginating. + // @return True on success, false on failure. + // @error Item limit reached. + public native bool AddItem(const char[] info, const char[] display, int style=ITEMDRAW_DEFAULT); + + // Inserts an item into the menu before a certain position; the new item will + // be at the given position and all next items pushed forward. + // + // @param position Position, starting from 0. + // @param info Item information string. + // @param display Default item display string. + // @param style Drawing style flags. Anything other than DEFAULT or + // DISABLED will be completely ignored when paginating. + // @return True on success, false on failure. + // @error Invalid menu position. + public native bool InsertItem(int position, const char[] info, + const char[] display, int style=ITEMDRAW_DEFAULT); + + // Removes an item from the menu. + // + // @param position Position, starting from 0. + // @return True on success, false on failure. + // @error Invalid menu position. + public native bool RemoveItem(int position); + + // Removes all items from a menu. + public native void RemoveAllItems(); + + // Retrieves information about a menu item. + // + // @param position Position, starting from 0. + // @param infoBuf Info buffer. + // @param infoBufLen Maximum length of the info buffer. + // @param style By-reference variable to store drawing flags. + // @param dispBuf Display buffer. + // @param dispBufLen Maximum length of the display buffer. + // @return True on success, false if position is invalid. + public native bool GetItem(int position, char[] infoBuf, int infoBufLen, + int &style=0, char[] dispBuf="", int dispBufLen=0); + + // Sets the menu's default title/instruction message. + // + // @param fmt Message string format + // @param ... Message string arguments. + public native void SetTitle(const char[] fmt, any ...); + + // Returns the text of a menu's title. + // + // @param menu Menu Handle. + // @param buffer Buffer to store title. + // @param maxlength Maximum length of the buffer. + // @return Number of bytes written. + public native void GetTitle(char[] buffer, int maxlength); + + // Creates a raw MenuPanel based off the menu's style. + // The Handle must be freed with CloseHandle(). + // + // @param menu Menu Handle. + // @return A new MenuPanel Handle. + public native Panel ToPanel(); + + // Cancels a menu from displaying on all clients. While the + // cancellation is in progress, this menu cannot be re-displayed + // to any clients. + // + // The menu may still exist on the client's screen after this command. + // This simply verifies that the menu is not being used anywhere. + // + // If any vote is in progress on a menu, it will be cancelled. + public native void Cancel(); + + // Broadcasts a menu to a list of clients. The most selected item will be + // returned through MenuAction_End. On a tie, a random item will be returned + // from a list of the tied items. + // + // Note that MenuAction_VoteEnd and MenuAction_VoteStart are both + // default callbacks and do not need to be enabled. + // + // @param clients Array of clients to broadcast to. + // @param numClients Number of clients in the array. + // @param time Maximum time to leave menu on the screen. + // @param flags Optional voting flags. + // @return True on success, false if this menu already has a + // vote session in progress. + // @error A vote is already in progress. + public native bool DisplayVote(int[] clients, int numClients, int time, int flags=0); + + // Sends a vote menu to all clients. See VoteMenu() for more information. + // + // @param time Maximum time to leave menu on the screen. + // @param flags Optional voting flags. + // @return True on success, false if this menu already has a + // vote session in progress. + public bool DisplayVoteToAll(int time, int flags=0) { + int total = 0; + int[] players = new int[MaxClients]; + for (int i = 1; i <= MaxClients; i++) { + if (!IsClientInGame(i) || IsFakeClient(i)) + continue; + players[total++] = i; + } + return this.DisplayVote(players, total, time, flags); + } + + // Get or set the menu's pagination. + // + // If pgination is MENU_NO_PAGINATION, and the exit button flag is set, + // then the exit button flag is removed. It can be re-applied if desired. + property int Pagination { + public native get(); + public native set(int value); + } + + // Get or set the menu's option flags. + // + // If a certain bit is not supported, it will be stripped before being set. + property int OptionFlags { + public native get(); + public native set(int value); + } + + // Returns whether or not the menu has an exit button. By default, menus + // have an exit button. + property bool ExitButton { + public native get(); + public native set(bool value); + } + + // Controls whether or not the menu has an "exit back" button. By default, + // menus do not have an exit back button. + // + // Exit Back buttons appear as "Back" on page 1 of paginated menus and have + // functionality defined by the user in MenuEnd_ExitBack. + property bool ExitBackButton { + public native get(); + public native set(bool value); + } + + // Sets whether or not the menu has a "no vote" button in slot 1. + // By default, menus do not have a no vote button. + property bool NoVoteButton { + public native set(bool value); + } + + // Sets an advanced vote handling callback. If this callback is set, + // MenuAction_VoteEnd will not be called. + property VoteHandler VoteResultCallback { + public native set(VoteHandler handler); + } + + // Returns the number of items in a menu. + property int ItemCount { + public native get(); + } + + // Returns the menu style. The Handle is global and cannot be closed. + property Handle Style { + public native get(); + } + + // Returns the first item on the page of a currently selected menu. + // + // This is only valid inside a MenuAction_Select callback. + property int Selection { + public native get(); + } +} /** * Creates a new, empty menu using the default style. @@ -164,7 +451,7 @@ functag public MenuHandler(Handle:menu, MenuAction:action, param1, param2); * the only default actions. * @return A new menu Handle. */ -native Handle:CreateMenu(MenuHandler:handler, MenuAction:actions=MENU_ACTIONS_DEFAULT); +native Menu CreateMenu(MenuHandler handler, MenuAction actions=MENU_ACTIONS_DEFAULT); /** * Displays a menu to a client. @@ -175,7 +462,7 @@ native Handle:CreateMenu(MenuHandler:handler, MenuAction:actions=MENU_ACTIONS_DE * @return True on success, false on failure. * @error Invalid Handle or client not in game. */ -native bool:DisplayMenu(Handle:menu, client, time); +native bool DisplayMenu(Handle menu, int client, int time); /** * Displays a menu to a client, starting from the given item. @@ -187,7 +474,7 @@ native bool:DisplayMenu(Handle:menu, client, time); * @return True on success, false on failure. * @error Invalid Handle or client not in game. */ -native bool:DisplayMenuAtItem(Handle:menu, client, first_item, time); +native bool DisplayMenuAtItem(Handle menu, int client, int first_item, int time); /** * Appends a new item to the end of a menu. @@ -200,10 +487,10 @@ native bool:DisplayMenuAtItem(Handle:menu, client, first_item, time); * @return True on success, false on failure. * @error Invalid Handle or item limit reached. */ -native AddMenuItem(Handle:menu, - const String:info[], - const String:display[], - style=ITEMDRAW_DEFAULT); +native bool AddMenuItem(Handle menu, + const char[] info, + const char[] display, + int style=ITEMDRAW_DEFAULT); /** * Inserts an item into the menu before a certain position; the new item will @@ -218,11 +505,11 @@ native AddMenuItem(Handle:menu, * @return True on success, false on failure. * @error Invalid Handle or menu position. */ -native bool:InsertMenuItem(Handle:menu, +native bool InsertMenuItem(Handle menu, position, - const String:info[], - const String:display[], - style=ITEMDRAW_DEFAULT); + const char[] info, + const char[] display, + int style=ITEMDRAW_DEFAULT); /** * Removes an item from the menu. @@ -232,16 +519,15 @@ native bool:InsertMenuItem(Handle:menu, * @return True on success, false on failure. * @error Invalid Handle or menu position. */ -native bool:RemoveMenuItem(Handle:menu, position); +native bool RemoveMenuItem(Handle menu, int position); /** * Removes all items from a menu. * * @param menu Menu Handle. - * @noreturn * @error Invalid Handle or menu position. */ -native RemoveAllMenuItems(Handle:menu); +native void RemoveAllMenuItems(Handle menu); /** * Retrieves information about a menu item. @@ -256,13 +542,13 @@ native RemoveAllMenuItems(Handle:menu); * @return True on success, false if position is invalid. * @error Invalid Handle. */ -native bool:GetMenuItem(Handle:menu, - position, - String:infoBuf[], - infoBufLen, - &style=0, - String:dispBuf[]="", - dispBufLen=0); +native bool GetMenuItem(Handle menu, + int position, + char[] infoBuf, + int infoBufLen, + int &style=0, + char[] dispBuf="", + int dispBufLen=0); /** * Returns the first item on the page of a currently selected menu. @@ -275,7 +561,7 @@ native bool:GetMenuItem(Handle:menu, * position. * @error Not called from inside a MenuAction_Select callback. */ -native GetMenuSelectionPosition(); +native int GetMenuSelectionPosition(); /** * Returns the number of items in a menu. @@ -284,7 +570,7 @@ native GetMenuSelectionPosition(); * @return Number of items in the menu. * @error Invalid Handle. */ -native GetMenuItemCount(Handle:menu); +native int GetMenuItemCount(Handle menu); /** * Sets whether the menu should be paginated or not. @@ -298,7 +584,7 @@ native GetMenuItemCount(Handle:menu); * low. * @error Invalid Handle. */ -native bool:SetMenuPagination(Handle:menu, itemsPerPage); +native bool SetMenuPagination(Handle menu, int itemsPerPage); /** * Returns a menu's pagination setting. @@ -307,7 +593,7 @@ native bool:SetMenuPagination(Handle:menu, itemsPerPage); * @return Pagination setting. * @error Invalid Handle. */ -native GetMenuPagination(Handle:menu); +native int GetMenuPagination(Handle menu); /** * Returns a menu's MenuStyle Handle. The Handle @@ -317,7 +603,7 @@ native GetMenuPagination(Handle:menu); * @return Handle to the menu's draw style. * @error Invalid Handle. */ -native Handle:GetMenuStyle(Handle:menu); +native Handle GetMenuStyle(Handle menu); /** * Sets the menu's default title/instruction message. @@ -325,10 +611,9 @@ native Handle:GetMenuStyle(Handle:menu); * @param menu Menu Handle. * @param fmt Message string format * @param ... Message string arguments. - * @noreturn * @error Invalid Handle. */ -native SetMenuTitle(Handle:menu, const String:fmt[], any:...); +native void SetMenuTitle(Handle menu, const char[] fmt, any ...); /** * Returns the text of a menu's title. @@ -339,7 +624,7 @@ native SetMenuTitle(Handle:menu, const String:fmt[], any:...); * @return Number of bytes written. * @error Invalid Handle/ */ -native GetMenuTitle(Handle:menu, String:buffer[], maxlength); +native int GetMenuTitle(Handle menu, char[] buffer, int maxlength); /** * Creates a raw MenuPanel based off the menu's style. @@ -349,7 +634,7 @@ native GetMenuTitle(Handle:menu, String:buffer[], maxlength); * @return A new MenuPanel Handle. * @error Invalid Handle. */ -native Handle:CreatePanelFromMenu(Handle:menu); +native Panel CreatePanelFromMenu(Handle menu); /** * Returns whether or not the menu has an exit button. @@ -359,7 +644,7 @@ native Handle:CreatePanelFromMenu(Handle:menu); * @return True if the menu has an exit button; false otherwise. * @error Invalid Handle. */ -native bool:GetMenuExitButton(Handle:menu); +native bool GetMenuExitButton(Handle menu); /** * Sets whether or not the menu has an exit button. By default, paginated menus @@ -377,7 +662,7 @@ native bool:GetMenuExitButton(Handle:menu); * @return True if allowed; false on failure. * @error Invalid Handle. */ -native bool:SetMenuExitButton(Handle:menu, bool:button); +native bool SetMenuExitButton(Handle menu, bool button); /** * Returns whether or not the menu has an "exit back" button. By default, @@ -390,7 +675,7 @@ native bool:SetMenuExitButton(Handle:menu, bool:button); * @return True if the menu has an exit back button; false otherwise. * @error Invalid Handle. */ -native bool:GetMenuExitBackButton(Handle:menu); +native bool GetMenuExitBackButton(Handle menu); /** * Sets whether or not the menu has an "exit back" button. By default, menus @@ -403,7 +688,7 @@ native bool:GetMenuExitBackButton(Handle:menu); * @param button True to enable the button, false to remove it. * @error Invalid Handle. */ -native SetMenuExitBackButton(Handle:menu, bool:button); +native void SetMenuExitBackButton(Handle menu, bool button); /** * Sets whether or not the menu has a "no vote" button in slot 1. @@ -414,7 +699,7 @@ native SetMenuExitBackButton(Handle:menu, bool:button); * @return True if allowed; false on failure. * @error Invalid Handle. */ -native bool:SetMenuNoVoteButton(Handle:menu, bool:button); +native bool SetMenuNoVoteButton(Handle menu, bool button); /** * Cancels a menu from displaying on all clients. While the @@ -427,10 +712,9 @@ native bool:SetMenuNoVoteButton(Handle:menu, bool:button); * If any vote is in progress on a menu, it will be cancelled. * * @param menu Menu Handle. - * @noreturn * @error Invalid Handle. */ -native CancelMenu(Handle:menu); +native void CancelMenu(Handle menu); /** * Retrieves a menu's option flags. @@ -439,7 +723,7 @@ native CancelMenu(Handle:menu); * @return A bitstring of MENUFLAG bits. * @error Invalid Handle. */ -native GetMenuOptionFlags(Handle:menu); +native int GetMenuOptionFlags(Handle menu); /** * Sets a menu's option flags. @@ -450,10 +734,9 @@ native GetMenuOptionFlags(Handle:menu); * * @param menu Menu Handle. * @param flags A new bitstring of MENUFLAG bits. - * @noreturn * @error Invalid Handle. */ -native SetMenuOptionFlags(Handle:menu, flags); +native void SetMenuOptionFlags(Handle menu, int flags); /** * Returns whether a vote is in progress. @@ -461,15 +744,14 @@ native SetMenuOptionFlags(Handle:menu, flags); * @param menu Deprecated; no longer used. * @return True if a vote is in progress, false otherwise. */ -native bool:IsVoteInProgress(Handle:menu=INVALID_HANDLE); +native bool IsVoteInProgress(Handle menu=INVALID_HANDLE); /** * Cancels the vote in progress. * - * @noreturn * @error If no vote is in progress. */ -native CancelVote(); +native void CancelVote(); /** * Broadcasts a menu to a list of clients. The most selected item will be @@ -488,7 +770,7 @@ native CancelVote(); * in progress. * @error Invalid Handle, or a vote is already in progress. */ -native bool:VoteMenu(Handle:menu, clients[], numClients, time, flags=0); +native bool VoteMenu(Handle menu, int[] clients, int numClients, int time, int flags=0); /** * Sends a vote menu to all clients. See VoteMenu() for more information. @@ -500,7 +782,7 @@ native bool:VoteMenu(Handle:menu, clients[], numClients, time, flags=0); * in progress. * @error Invalid Handle. */ -stock bool:VoteMenuToAll(Handle:menu, time, flags=0) +stock bool VoteMenuToAll(Handle menu, int time, int flags=0) { new total; decl players[MaxClients]; @@ -516,6 +798,7 @@ stock bool:VoteMenuToAll(Handle:menu, time, flags=0) return VoteMenu(menu, players, total, time, flags); } + /** * Callback for when a vote has ended and results are available. * @@ -526,14 +809,29 @@ stock bool:VoteMenuToAll(Handle:menu, time, flags=0) * @param num_items Number of unique items that were selected. * @param item_info Array of items, sorted by count. Use VOTEINFO_ITEM * defines. - * @noreturn */ -functag public VoteHandler(Handle:menu, - num_votes, - num_clients, - const client_info[][2], - num_items, - const item_info[][2]); +typeset VoteHandler +{ + // old style + function void( + Menu menu, + int num_votes, + int num_clients, + const int client_info[][2], + int num_items, + const int item_info[][2] + ); + + // new style + function void( + Menu menu, + int num_votes, + int num_clients, + const int[][] client_info, + int num_items, + const int[][] item_info + ); +}; /** * Sets an advanced vote handling callback. If this callback is set, @@ -541,10 +839,9 @@ functag public VoteHandler(Handle:menu, * * @param menu Menu Handle. * @param callback Callback function. - * @noreturn * @error Invalid Handle or callback. */ -native SetVoteResultCallback(Handle:menu, VoteHandler:callback); +native void SetVoteResultCallback(Handle menu, VoteHandler callback); /** * Returns the number of seconds you should "wait" before displaying @@ -553,7 +850,7 @@ native SetVoteResultCallback(Handle:menu, VoteHandler:callback); * * @return Number of seconds to wait, or 0 for none. */ -native CheckVoteDelay(); +native int CheckVoteDelay(); /** * Returns whether a client is in the pool of clients allowed @@ -564,7 +861,7 @@ native CheckVoteDelay(); * @return True if client is allowed to vote, false otherwise. * @error If no vote is in progress or client index is invalid. */ -native bool:IsClientInVotePool(client); +native bool IsClientInVotePool(int client); /** * Redraws the current vote menu to a client in the voting pool. @@ -573,10 +870,10 @@ native bool:IsClientInVotePool(client); * @param revotes True to allow revotes, false otherwise. * @return True on success, false if the client is in the vote pool * but cannot vote again. - * @error No vote in progress, client is not in the voting pool, + * @error No vote in progress, int client is not in the voting pool, * or client index is invalid. */ -native bool:RedrawClientVoteMenu(client, bool:revotes=true); +native bool RedrawClientVoteMenu(int client, bool revotes=true); /** * Returns a style's global Handle. @@ -584,7 +881,7 @@ native bool:RedrawClientVoteMenu(client, bool:revotes=true); * @param style Menu Style. * @return A Handle, or INVALID_HANDLE if not found or unusable. */ -native Handle:GetMenuStyleHandle(MenuStyle:style); +native Handle GetMenuStyleHandle(MenuStyle style); /** * Creates a MenuPanel from a MenuStyle. Panels are used for drawing raw @@ -595,7 +892,7 @@ native Handle:GetMenuStyleHandle(MenuStyle:style); * @return A new MenuPanel Handle. * @error Invalid Handle other than INVALID_HANDLE. */ -native Handle:CreatePanel(Handle:hStyle=INVALID_HANDLE); +native Panel CreatePanel(Handle hStyle=INVALID_HANDLE); /** * Creates a Menu from a MenuStyle. The Handle must be closed with @@ -610,7 +907,7 @@ native Handle:CreatePanel(Handle:hStyle=INVALID_HANDLE); * @return A new menu Handle. * @error Invalid Handle other than INVALID_HANDLE. */ -native Handle:CreateMenuEx(Handle:hStyle=INVALID_HANDLE, MenuHandler:handler, MenuAction:actions=MENU_ACTIONS_DEFAULT); +native Menu CreateMenuEx(Handle hStyle=INVALID_HANDLE, MenuHandler handler, MenuAction actions=MENU_ACTIONS_DEFAULT); /** * Returns whether a client is viewing a menu. @@ -618,9 +915,9 @@ native Handle:CreateMenuEx(Handle:hStyle=INVALID_HANDLE, MenuHandler:handler, Me * @param client Client index. * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. * @return A MenuSource value. - * @error Invalid Handle other than INVALID_HANDLE. + * @error Invalid Handle other than null. */ -native MenuSource:GetClientMenu(client, Handle:hStyle=INVALID_HANDLE); +native MenuSource GetClientMenu(int client, Handle hStyle=null); /** * Cancels a menu on a client. This will only affect non-external menus. @@ -631,7 +928,7 @@ native MenuSource:GetClientMenu(client, Handle:hStyle=INVALID_HANDLE); * the cancellation process. * @return True if a menu was cancelled, false otherwise. */ -native bool:CancelClientMenu(client, bool:autoIgnore=false, Handle:hStyle=INVALID_HANDLE); +native bool CancelClientMenu(int client, bool autoIgnore=false, Handle hStyle=INVALID_HANDLE); /** * Returns a style's maximum items per page. @@ -640,7 +937,7 @@ native bool:CancelClientMenu(client, bool:autoIgnore=false, Handle:hStyle=INVALI * @return Maximum items per page. * @error Invalid Handle other than INVALID_HANDLE. */ -native GetMaxPageItems(Handle:hStyle=INVALID_HANDLE); +native int GetMaxPageItems(Handle hStyle=INVALID_HANDLE); /** * Returns a MenuPanel's parent style. @@ -649,7 +946,7 @@ native GetMaxPageItems(Handle:hStyle=INVALID_HANDLE); * @return The MenuStyle Handle that created the panel. * @error Invalid Handle. */ -native Handle:GetPanelStyle(Handle:panel); +native Handle GetPanelStyle(Handle panel); /** * Sets the panel's title. @@ -657,10 +954,9 @@ native Handle:GetPanelStyle(Handle:panel); * @param panel A MenuPanel Handle. * @param text Text to set as the title. * @param onlyIfEmpty If true, the title will only be set if no title is set. - * @noreturn * @error Invalid Handle. */ -native Handle:SetPanelTitle(Handle:panel, const String:text[], bool:onlyIfEmpty=false); +native void SetPanelTitle(Handle panel, const char[] text, bool onlyIfEmpty=false); /** * Draws an item on a panel. If the item takes up a slot, the position @@ -674,7 +970,7 @@ native Handle:SetPanelTitle(Handle:panel, const String:text[], bool:onlyIfEmpty= * @return A slot position, or 0 if item was a rawline or could not be drawn. * @error Invalid Handle. */ -native DrawPanelItem(Handle:panel, const String:text[], style=ITEMDRAW_DEFAULT); +native int DrawPanelItem(Handle panel, const char[] text, style=ITEMDRAW_DEFAULT); /** * Draws a raw line of text on a panel, without any markup other than a newline. @@ -685,7 +981,7 @@ native DrawPanelItem(Handle:panel, const String:text[], style=ITEMDRAW_DEFAULT); * @return True on success, false if raw lines are not supported. * @error Invalid Handle. */ -native DrawPanelText(Handle:panel, const String:text[]); +native bool DrawPanelText(Handle panel, const char[] text); /** * Returns whether or not the given drawing flags are supported by @@ -696,7 +992,7 @@ native DrawPanelText(Handle:panel, const String:text[]); * @return True if item is drawable, false otherwise. * @error Invalid Handle. */ -native CanPanelDrawFlags(Handle:panel, style); +native bool CanPanelDrawFlags(Handle panel, style); /** * Sets the selectable key map of a panel. This is not supported by @@ -708,7 +1004,7 @@ native CanPanelDrawFlags(Handle:panel, style); * then key 0 (bit 9) is automatically set. * @return True if supported, false otherwise. */ -native bool:SetPanelKeys(Handle:panel, keys); +native bool SetPanelKeys(Handle panel, int keys); /** * Sends a panel to a client. Unlike full menus, the handler @@ -728,7 +1024,7 @@ native bool:SetPanelKeys(Handle:panel, keys); * @return True on success, false on failure. * @error Invalid Handle. */ -native bool:SendPanelToClient(Handle:panel, client, MenuHandler:handler, time); +native bool SendPanelToClient(Handle panel, int client, MenuHandler handler, int time); /** * @brief Returns the amount of text the menu can still hold. If this is @@ -742,7 +1038,7 @@ native bool:SendPanelToClient(Handle:panel, client, MenuHandler:handler, time); * or -1 if there is no known limit. * @error Invalid Handle. */ -native GetPanelTextRemaining(Handle:panel); +native int GetPanelTextRemaining(Handle panel); /** * @brief Returns the current key position. @@ -751,7 +1047,7 @@ native GetPanelTextRemaining(Handle:panel); * @return Current key position starting at 1. * @error Invalid Handle. */ -native GetPanelCurrentKey(Handle:panel); +native int GetPanelCurrentKey(Handle panel); /** * @brief Sets the next key position. This cannot be used @@ -763,7 +1059,7 @@ native GetPanelCurrentKey(Handle:panel); * @return True on success, false otherwise. * @error Invalid Handle. */ -native bool:SetPanelCurrentKey(Handle:panel, key); +native bool SetPanelCurrentKey(Handle panel, int key); /** * @brief Redraws menu text from inside a MenuAction_DisplayItem callback. @@ -771,7 +1067,7 @@ native bool:SetPanelCurrentKey(Handle:panel, key); * @param text Menu text to draw. * @return Item position; must be returned via the callback. */ -native RedrawMenuItem(const String:text[]); +native int RedrawMenuItem(const char[] text); /** * This function is provided for legacy code only. Some older plugins may use @@ -791,7 +1087,7 @@ native RedrawMenuItem(const String:text[]); * @return True on success, false on failure. * @error Invalid client index, or radio menus not supported. */ -native bool:InternalShowMenu(client, const String:str[], time, keys=-1, MenuHandler:handler=MenuHandler:-1); +native bool InternalShowMenu(int client, const char[] str, int time, int keys=-1, MenuHandler handler=INVALID_FUNCTION); /** * Retrieves voting information from MenuAction_VoteEnd. @@ -799,9 +1095,8 @@ native bool:InternalShowMenu(client, const String:str[], time, keys=-1, MenuHand * @param param2 Second parameter of MenuAction_VoteEnd. * @param winningVotes Number of votes received by the winning option. * @param totalVotes Number of total votes received. - * @noreturn */ -stock GetMenuVoteInfo(param2, &winningVotes, &totalVotes) +stock void GetMenuVoteInfo(param2, &winningVotes, &totalVotes) { winningVotes = param2 & 0xFFFF; totalVotes = param2 >> 16; @@ -815,7 +1110,7 @@ stock GetMenuVoteInfo(param2, &winningVotes, &totalVotes) * @return True if voting is allowed, false if voting is in progress * or the cooldown is active. */ -stock bool:IsNewVoteAllowed() +stock bool IsNewVoteAllowed() { if (IsVoteInProgress() || CheckVoteDelay() != 0) { diff --git a/env/include/profiler.inc b/env/include/profiler.inc index 68f1ca7..e1f5ea5 100644 --- a/env/include/profiler.inc +++ b/env/include/profiler.inc @@ -75,3 +75,26 @@ native StopProfiling(Handle:prof); * @error Invalid Handle. */ native Float:GetProfilerTime(Handle:prof); + +/** + * Mark the start of a profiling event. + * + * @param group Budget group. This can be "all" for a default, or a short + * description like "Timers" or "Events". + * @param name A name to attribute to this profiling event. + * @noreturn + */ +native EnterProfilingEvent(const String:group[], const String:name[]); + +/** + * Mark the end of the last profiling event. This must be called in the same + * stack frame as StartProfilingEvent(). Not doing so, or throwing errors, + * will make the resulting profile very wrong. + */ +native LeaveProfilingEvent(); + +/** + * Returns true if the global profiler is enabled; false otherwise. It is + * not necessary to call this before Enter/LeaveProfilingEvent. + */ +native bool:IsProfilingActive(); diff --git a/env/include/protobuf.inc b/env/include/protobuf.inc index 56f0bd9..0cd5dd0 100644 --- a/env/include/protobuf.inc +++ b/env/include/protobuf.inc @@ -1,5 +1,5 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= * SourceMod (C)2013 AlliedModders LLC. All rights reserved. * ============================================================================= @@ -37,6 +37,232 @@ #define PB_FIELD_NOT_REPEATED -1 +methodmap Protobuf < Handle +{ + // Reads an int32, uint32, sint32, fixed32, sfixed32, or enum value from a protobuf message. + // + // @param field Field name. + // @param index Index into repeated field. + // @return Integer value read. + // @error Non-existent field, or incorrect field type. + public native int ReadInt(const char[] field, int index = PB_FIELD_NOT_REPEATED); + + // Reads a float or downcasted double from a protobuf message. + // + // @param field Field name. + // @param index Index into repeated field. + // @return Float value read. + // @error Non-existent field, or incorrect field type. + public native float ReadFloat(const char[] field, int index = PB_FIELD_NOT_REPEATED); + + // Reads a bool from a protobuf message. + // + // @param field Field name. + // @param index Index into repeated field. + // @return Boolean value read. + // @error Non-existent field, or incorrect field type. + public native bool ReadBool(const char[] field, int index = PB_FIELD_NOT_REPEATED); + + // Reads a string from a protobuf message. + // + // @param field Field name. + // @param buffer Destination string buffer. + // @param maxlength Maximum length of output string buffer. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void ReadString(const char[] field, char[] buffer, int maxlength, int index = PB_FIELD_NOT_REPEATED); + + // Reads an RGBA color value from a protobuf message. + // + // @param field Field name. + // @param buffer Destination color buffer. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void ReadColor(const char[] field, int buffer[4], int index = PB_FIELD_NOT_REPEATED); + + // Reads an XYZ angle value from a protobuf message. + // + // @param field Field name. + // @param buffer Destination angle buffer. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void ReadAngle(const char[] field, float buffer[3], int index = PB_FIELD_NOT_REPEATED); + + // Reads an XYZ vector value from a protobuf message. + // + // @param pb protobuf handle. + // @param field Field name. + // @param buffer Destination vector buffer. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void ReadVector(const char[] field, float buffer[3], int index = PB_FIELD_NOT_REPEATED); + + // Reads an XY vector value from a protobuf message. + // + // @param field Field name. + // @param buffer Destination vector buffer. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void ReadVector2D(const char[] field, float buffer[2], int index = PB_FIELD_NOT_REPEATED); + + // Gets the number of elements in a repeated field of a protobuf message. + // + // @param field Field name. + // @return Number of elements in the field. + // @error Non-existent field, or incorrect field type. + public native int GetRepeatedFieldCount(const char[] field); + + // Sets an int32, uint32, sint32, fixed32, sfixed32, or enum value on a protobuf message. + // + // @param field Field name. + // @param value Integer value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native int SetInt(const char[] field, int value, int index = PB_FIELD_NOT_REPEATED); + + // Sets a float or double on a protobuf message. + // + // @param field Field name. + // @param value Float value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetFloat(const char[] field, float value, int index = PB_FIELD_NOT_REPEATED); + + // Sets a bool on a protobuf message. + // + // @param field Field name. + // @param value Boolean value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetBool(const char[] field, bool value, int index = PB_FIELD_NOT_REPEATED); + + // Sets a string on a protobuf message. + // + // @param field Field name. + // @param value String value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetString(const char[] field, const char[] value, int index = PB_FIELD_NOT_REPEATED); + + // Sets an RGBA color on a protobuf message. + // + // @param field Field name. + // @param color Color value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetColor(const char[] field, const int color[4], int index = PB_FIELD_NOT_REPEATED); + + // Sets an XYZ angle on a protobuf message. + // + // @param field Field name. + // @param angle Angle value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetAngle(const char[] field, const float angle[3], int index = PB_FIELD_NOT_REPEATED); + + // Sets an XYZ vector on a protobuf message. + // + // @param field Field name. + // @param vec Vector value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetVector(const char[] field, const float vec[3], int index = PB_FIELD_NOT_REPEATED); + + // Sets an XY vector on a protobuf message. + // + // @param field Field name. + // @param vec Vector value to set. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetVector2D(const char[] field, const float vec[2], int index = PB_FIELD_NOT_REPEATED); + + // Add an int32, uint32, sint32, fixed32, sfixed32, or enum value to a protobuf message repeated field. + // + // @param field Field name. + // @param value Integer value to add. + // @error Non-existent field, or incorrect field type. + public native void AddInt(const char[] field, int value); + + // Add a float or double to a protobuf message repeated field. + // + // @param field Field name. + // @param value Float value to add. + // @error Non-existent field, or incorrect field type. + public native void AddFloat(const char[] field, float value); + + // Add a bool to a protobuf message repeated field. + // + // @param field Field name. + // @param value Boolean value to add. + // @error Non-existent field, or incorrect field type. + public native void AddBool(const char[] field, bool value); + + // Add a string to a protobuf message repeated field. + // + // @param field Field name. + // @param value String value to add. + // @error Non-existent field, or incorrect field type. + public native void AddString(const char[] field, const char[] value); + + // Add an RGBA color to a protobuf message repeated field. + // + // @param field Field name. + // @param color Color value to add. + // @error Non-existent field, or incorrect field type. + public native void AddColor(const char[] field, const int color[4]); + + // Add an XYZ angle to a protobuf message repeated field. + // + // @param field Field name. + // @param angle Angle value to add. + // @error Non-existent field, or incorrect field type. + public native void AddAngle(const char[] field, const float angle[3]); + + // Add an XYZ vector to a protobuf message repeated field. + // + // @param field Field name. + // @param vec Vector value to add. + // @error Non-existent field, or incorrect field type. + public native void AddVector(const char[] field, const float vec[3]); + + // Add an XY vector to a protobuf message repeated field. + // + // @param field Field name. + // @param vec Vector value to add. + // @error Non-existent field, or incorrect field type. + public native void AddVector2D(const char[] field, const float vec[2]); + + // Removes a value by index from a protobuf message repeated field. + // + // @param field Field name. + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void RemoveRepeatedFieldValue(const char[] field, int index); + + // Retrieve a handle to an embedded protobuf message in a protobuf message. + // + // @param field Field name. + // @return Protobuf handle to embedded message. + // @error Non-existent field, or incorrect field type. + public native Protobuf ReadMessage(const char[] field); + + // Retrieve a handle to an embedded protobuf message in a protobuf message + // repeated field. + // + // @param field Field name. + // @param index Index in the repeated field. + // @return Protobuf handle to embedded message. + // @error Non-existent field, or incorrect field type. + public native Protobuf ReadRepeatedMessage(const char[] field, int index); + + // Adds an embedded protobuf message to a protobuf message repeated field. + // + // @param field Field name. + // @return Protobuf handle to added, embedded message. + // @error Non-existent field, or incorrect field type. + public native Protobuf AddMessage(const char[] field); +}; + /** * Reads an int32, uint32, sint32, fixed32, sfixed32, or enum value from a protobuf message. * @@ -46,7 +272,7 @@ * @return Integer value read. * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbReadInt(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED); +native int PbReadInt(Handle pb, const char[] field, int index = PB_FIELD_NOT_REPEATED); /** * Reads a float or downcasted double from a protobuf message. @@ -57,7 +283,7 @@ native PbReadInt(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED); * @return Float value read. * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native Float:PbReadFloat(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED); +native float PbReadFloat(Handle pb, const char[] field, int index = PB_FIELD_NOT_REPEATED); /** * Reads a bool from a protobuf message. @@ -68,7 +294,7 @@ native Float:PbReadFloat(Handle:pb, const String:field[], index=PB_FIELD_NOT_REP * @return Boolean value read. * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native bool:PbReadBool(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED); +native bool PbReadBool(Handle pb, const char[] field, int index = PB_FIELD_NOT_REPEATED); /** * Reads a string from a protobuf message. @@ -78,10 +304,9 @@ native bool:PbReadBool(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEA * @param buffer Destination string buffer. * @param maxlength Maximum length of output string buffer. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbReadString(Handle:pb, const String:field[], String:buffer[], maxlength, index=PB_FIELD_NOT_REPEATED); +native void PbReadString(Handle pb, const char[] field, String:buffer[], maxlength, int index = PB_FIELD_NOT_REPEATED); /** * Reads an RGBA color value from a protobuf message. @@ -90,10 +315,9 @@ native PbReadString(Handle:pb, const String:field[], String:buffer[], maxlength, * @param field Field name. * @param buffer Destination color buffer. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbReadColor(Handle:pb, const String:field[], buffer[4], index=PB_FIELD_NOT_REPEATED); +native void PbReadColor(Handle pb, const char[] field, buffer[4], int index = PB_FIELD_NOT_REPEATED); /** * Reads an XYZ angle value from a protobuf message. @@ -102,10 +326,9 @@ native PbReadColor(Handle:pb, const String:field[], buffer[4], index=PB_FIELD_NO * @param field Field name. * @param buffer Destination angle buffer. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbReadAngle(Handle:pb, const String:field[], Float:buffer[3], index=PB_FIELD_NOT_REPEATED); +native void PbReadAngle(Handle pb, const char[] field, float buffer[3], int index = PB_FIELD_NOT_REPEATED); /** * Reads an XYZ vector value from a protobuf message. @@ -114,10 +337,9 @@ native PbReadAngle(Handle:pb, const String:field[], Float:buffer[3], index=PB_FI * @param field Field name. * @param buffer Destination vector buffer. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbReadVector(Handle:pb, const String:field[], Float:buffer[3], index=PB_FIELD_NOT_REPEATED); +native void PbReadVector(Handle pb, const char[] field, float buffer[3], int index = PB_FIELD_NOT_REPEATED); /** * Reads an XY vector value from a protobuf message. @@ -126,10 +348,9 @@ native PbReadVector(Handle:pb, const String:field[], Float:buffer[3], index=PB_F * @param field Field name. * @param buffer Destination vector buffer. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbReadVector2D(Handle:pb, const String:field[], Float:buffer[2], index=PB_FIELD_NOT_REPEATED); +native void PbReadVector2D(Handle pb, const char[] field, float buffer[2], int index = PB_FIELD_NOT_REPEATED); /** * Gets the number of elements in a repeated field of a protobuf message. @@ -139,7 +360,7 @@ native PbReadVector2D(Handle:pb, const String:field[], Float:buffer[2], index=PB * @return Number of elements in the field. * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbGetRepeatedFieldCount(Handle:pb, const String:field[]); +native int PbGetRepeatedFieldCount(Handle pb, const char[] field); /** * Sets an int32, uint32, sint32, fixed32, sfixed32, or enum value on a protobuf message. @@ -148,10 +369,9 @@ native PbGetRepeatedFieldCount(Handle:pb, const String:field[]); * @param field Field name. * @param value Integer value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetInt(Handle:pb, const String:field[], value, index=PB_FIELD_NOT_REPEATED); +native void PbSetInt(Handle pb, const char[] field, int value, int index = PB_FIELD_NOT_REPEATED); /** * Sets a float or double on a protobuf message. @@ -160,10 +380,9 @@ native PbSetInt(Handle:pb, const String:field[], value, index=PB_FIELD_NOT_REPEA * @param field Field name. * @param value Float value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetFloat(Handle:pb, const String:field[], Float:value, index=PB_FIELD_NOT_REPEATED); +native void PbSetFloat(Handle pb, const char[] field, float value, int index = PB_FIELD_NOT_REPEATED); /** * Sets a bool on a protobuf message. @@ -172,10 +391,9 @@ native PbSetFloat(Handle:pb, const String:field[], Float:value, index=PB_FIELD_N * @param field Field name. * @param value Boolean value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetBool(Handle:pb, const String:field[], bool:value, index=PB_FIELD_NOT_REPEATED); +native void PbSetBool(Handle pb, const char[] field, bool value, int index = PB_FIELD_NOT_REPEATED); /** * Sets a string on a protobuf message. @@ -184,10 +402,9 @@ native PbSetBool(Handle:pb, const String:field[], bool:value, index=PB_FIELD_NOT * @param field Field name. * @param value String value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetString(Handle:pb, const String:field[], const String:value[], index=PB_FIELD_NOT_REPEATED); +native void PbSetString(Handle pb, const char[] field, const char[] value, int index = PB_FIELD_NOT_REPEATED); /** * Sets an RGBA color on a protobuf message. @@ -196,10 +413,9 @@ native PbSetString(Handle:pb, const String:field[], const String:value[], index= * @param field Field name. * @param color Color value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetColor(Handle:pb, const String:field[], const color[4], index=PB_FIELD_NOT_REPEATED); +native void PbSetColor(Handle pb, const char[] field, const int color[4], int index = PB_FIELD_NOT_REPEATED); /** * Sets an XYZ angle on a protobuf message. @@ -208,10 +424,9 @@ native PbSetColor(Handle:pb, const String:field[], const color[4], index=PB_FIEL * @param field Field name. * @param angle Angle value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetAngle(Handle:pb, const String:field[], const Float:angle[3], index=PB_FIELD_NOT_REPEATED); +native void PbSetAngle(Handle pb, const char[] field, const float angle[3], int index = PB_FIELD_NOT_REPEATED); /** * Sets an XYZ vector on a protobuf message. @@ -220,10 +435,9 @@ native PbSetAngle(Handle:pb, const String:field[], const Float:angle[3], index=P * @param field Field name. * @param vec Vector value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetVector(Handle:pb, const String:field[], const Float:vec[3], index=PB_FIELD_NOT_REPEATED); +native void PbSetVector(Handle pb, const char[] field, const float vec[3], int index = PB_FIELD_NOT_REPEATED); /** * Sets an XY vector on a protobuf message. @@ -232,10 +446,9 @@ native PbSetVector(Handle:pb, const String:field[], const Float:vec[3], index=PB * @param field Field name. * @param vec Vector value to set. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbSetVector2D(Handle:pb, const String:field[], const Float:vec[2], index=PB_FIELD_NOT_REPEATED); +native void PbSetVector2D(Handle pb, const char[] field, const float vec[2], int index = PB_FIELD_NOT_REPEATED); /** * Add an int32, uint32, sint32, fixed32, sfixed32, or enum value to a protobuf message repeated field. @@ -243,10 +456,9 @@ native PbSetVector2D(Handle:pb, const String:field[], const Float:vec[2], index= * @param pb protobuf handle. * @param field Field name. * @param value Integer value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddInt(Handle:pb, const String:field[], value); +native void PbAddInt(Handle pb, const char[] field, int value); /** * Add a float or double to a protobuf message repeated field. @@ -254,10 +466,9 @@ native PbAddInt(Handle:pb, const String:field[], value); * @param pb protobuf handle. * @param field Field name. * @param value Float value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddFloat(Handle:pb, const String:field[], Float:value); +native void PbAddFloat(Handle pb, const char[] field, float value); /** * Add a bool to a protobuf message repeated field. @@ -265,10 +476,9 @@ native PbAddFloat(Handle:pb, const String:field[], Float:value); * @param pb protobuf handle. * @param field Field name. * @param value Boolean value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddBool(Handle:pb, const String:field[], bool:value); +native void PbAddBool(Handle pb, const char[] field, bool value); /** * Add a string to a protobuf message repeated field. @@ -276,10 +486,9 @@ native PbAddBool(Handle:pb, const String:field[], bool:value); * @param pb protobuf handle. * @param field Field name. * @param value String value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddString(Handle:pb, const String:field[], const String:value[]); +native void PbAddString(Handle pb, const char[] field, const char[] value); /** * Add an RGBA color to a protobuf message repeated field. @@ -287,10 +496,9 @@ native PbAddString(Handle:pb, const String:field[], const String:value[]); * @param pb protobuf handle. * @param field Field name. * @param color Color value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddColor(Handle:pb, const String:field[], const color[4]); +native void PbAddColor(Handle pb, const char[] field, const int color[4]); /** * Add an XYZ angle to a protobuf message repeated field. @@ -298,10 +506,9 @@ native PbAddColor(Handle:pb, const String:field[], const color[4]); * @param pb protobuf handle. * @param field Field name. * @param angle Angle value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddAngle(Handle:pb, const String:field[], const Float:angle[3]); +native void PbAddAngle(Handle pb, const char[] field, const float angle[3]); /** * Add an XYZ vector to a protobuf message repeated field. @@ -309,10 +516,9 @@ native PbAddAngle(Handle:pb, const String:field[], const Float:angle[3]); * @param pb protobuf handle. * @param field Field name. * @param vec Vector value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddVector(Handle:pb, const String:field[], const Float:vec[3]); +native void PbAddVector(Handle pb, const char[] field, const float vec[3]); /** * Add an XY vector to a protobuf message repeated field. @@ -320,10 +526,9 @@ native PbAddVector(Handle:pb, const String:field[], const Float:vec[3]); * @param pb protobuf handle. * @param field Field name. * @param vec Vector value to add. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbAddVector2D(Handle:pb, const String:field[], const Float:vec[2]); +native void PbAddVector2D(Handle pb, const char[] field, const float vec[2]); /** * Removes a value by index from a protobuf message repeated field. @@ -331,10 +536,9 @@ native PbAddVector2D(Handle:pb, const String:field[], const Float:vec[2]); * @param pb protobuf handle. * @param field Field name. * @param index Index into repeated field. - * @noreturn * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native PbRemoveRepeatedFieldValue(Handle:pb, const String:field[], index); +native void PbRemoveRepeatedFieldValue(Handle pb, const char[] field, int index); /** * Retrieve a handle to an embedded protobuf message in a protobuf message. @@ -344,7 +548,7 @@ native PbRemoveRepeatedFieldValue(Handle:pb, const String:field[], index); * @return protobuf handle to embedded message. * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native Handle:PbReadMessage(Handle:pb, const String:field[]); +native Handle PbReadMessage(Handle pb, const char[] field); /** * Retrieve a handle to an embedded protobuf message in a protobuf message repeated field. @@ -355,7 +559,7 @@ native Handle:PbReadMessage(Handle:pb, const String:field[]); * @return protobuf handle to embedded message. * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native Handle:PbReadRepeatedMessage(Handle:pb, const String:field[], index); +native Handle PbReadRepeatedMessage(Handle pb, const char[] field, int index); /** * Adds an embedded protobuf message to a protobuf message repeated field. @@ -365,4 +569,4 @@ native Handle:PbReadRepeatedMessage(Handle:pb, const String:field[], index); * @return protobuf handle to added, embedded message. * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ -native Handle:PbAddMessage(Handle:pb, const String:field[]); +native Handle PbAddMessage(Handle pb, const char[] field); diff --git a/env/include/regex.inc b/env/include/regex.inc index 555c4a3..9992c80 100644 --- a/env/include/regex.inc +++ b/env/include/regex.inc @@ -104,7 +104,7 @@ enum RegexError * @param errcode Regex type error code encountered, if applicable. * @return Valid regex handle on success, INVALID_HANDLE on failure. */ -native Handle:CompileRegex(const String:pattern[], flags = 0, String:error[]="", maxLen = 0, &RegexError:errcode = REGEX_ERROR_NONE); +native Regex CompileRegex(const char[] pattern, int flags = 0, char[] error="", int maxLen = 0, RegexError &errcode = REGEX_ERROR_NONE); /** * Matches a string against a pre-compiled regular expression pattern. @@ -117,7 +117,7 @@ native Handle:CompileRegex(const String:pattern[], flags = 0, String:error[]="", * @note Use the regex handle passed to this function to extract * matches with GetRegexSubString(). */ -native MatchRegex(Handle:regex, const String:str[], &RegexError:ret = REGEX_ERROR_NONE); +native int MatchRegex(Handle regex, const char[] str, RegexError &ret = REGEX_ERROR_NONE); /** * Returns a matched substring from a regex handle. @@ -130,7 +130,14 @@ native MatchRegex(Handle:regex, const String:str[], &RegexError:ret = REGEX_ERRO * @param maxlen The maximum string length of the buffer. * @return True if a substring was found, False on fail/error */ -native bool:GetRegexSubString(Handle:regex, str_id, String:buffer[], maxlen); +native bool GetRegexSubString(Handle regex, int str_id, char[] buffer, int maxlen); + +methodmap Regex < Handle +{ + public Regex() = CompileRegex; + public Match() = MatchRegex; + public GetSubString() = GetRegexSubString; +}; /** * Matches a string against a regular expression pattern. @@ -146,19 +153,15 @@ native bool:GetRegexSubString(Handle:regex, str_id, String:buffer[], maxlen); * @param maxLen Maximum length of the error buffer. * @return Number of substrings found or -1 on failure. */ -stock SimpleRegexMatch(const String:str[], const String:pattern[], flags = 0, String:error[]="", maxLen = 0) +stock int SimpleRegexMatch(const char[] str, const char[] pattern, int flags = 0, char[] error="", int maxLen = 0) { - new Handle:regex = CompileRegex(pattern, flags, error, maxLen); - - if (regex == INVALID_HANDLE) - { + Regex regex = new Regex(pattern, flags, error, maxLen); + if (!regex) return -1; - } - - new substrings = MatchRegex(regex, str); - - CloseHandle(regex); + int substrings = regex.Match(str); + delete regex; + return substrings; } diff --git a/env/include/sdkhooks-2.2.inc b/env/include/sdkhooks-2.2.inc deleted file mode 100644 index d09c17f..0000000 --- a/env/include/sdkhooks-2.2.inc +++ /dev/null @@ -1,345 +0,0 @@ -#if defined _sdkhooks_included - #endinput -#endif -#define _sdkhooks_included - -// this is obviously _not_ a robust check, but it will solve most conflict and is clean -#if !defined DMG_GENERIC -#define DMG_GENERIC 0 // generic damage was done -#define DMG_CRUSH (1 << 0) // crushed by falling or moving object. - // NOTE: It's assumed crush damage is occurring as a result of physics collision, so no extra physics force is generated by crush damage. - // DON'T use DMG_CRUSH when damaging entities unless it's the result of a physics collision. You probably want DMG_CLUB instead. -#define DMG_BULLET (1 << 1) // shot -#define DMG_SLASH (1 << 2) // cut, clawed, stabbed -#define DMG_BURN (1 << 3) // heat burned -#define DMG_VEHICLE (1 << 4) // hit by a vehicle -#define DMG_FALL (1 << 5) // fell too far -#define DMG_BLAST (1 << 6) // explosive blast damage -#define DMG_CLUB (1 << 7) // crowbar, punch, headbutt -#define DMG_SHOCK (1 << 8) // electric shock -#define DMG_SONIC (1 << 9) // sound pulse shockwave -#define DMG_ENERGYBEAM (1 << 10) // laser or other high energy beam -#define DMG_PREVENT_PHYSICS_FORCE (1 << 11) // Prevent a physics force -#define DMG_NEVERGIB (1 << 12) // with this bit OR'd in, no damage type will be able to gib victims upon death -#define DMG_ALWAYSGIB (1 << 13) // with this bit OR'd in, any damage type can be made to gib victims upon death. -#define DMG_DROWN (1 << 14) // Drowning -#define DMG_PARALYZE (1 << 15) // slows affected creature down -#define DMG_NERVEGAS (1 << 16) // nerve toxins, very bad -#define DMG_POISON (1 << 17) // blood poisoning - heals over time like drowning damage -#define DMG_RADIATION (1 << 18) // radiation exposure -#define DMG_DROWNRECOVER (1 << 19) // drowning recovery -#define DMG_ACID (1 << 20) // toxic chemicals or acid burns -#define DMG_SLOWBURN (1 << 21) // in an oven -#define DMG_REMOVENORAGDOLL (1 << 22) // with this bit OR'd in, no ragdoll will be created, and the target will be quietly removed. - // use this to kill an entity that you've already got a server-side ragdoll for -#define DMG_PHYSGUN (1 << 23) // Hit by manipulator. Usually doesn't do any damage. -#define DMG_PLASMA (1 << 24) // Shot by Cremator -#define DMG_AIRBOAT (1 << 25) // Hit by the airboat's gun -#define DMG_DISSOLVE (1 << 26) // Dissolving! -#define DMG_BLAST_SURFACE (1 << 27) // A blast on the surface of water that cannot harm things underwater -#define DMG_DIRECT (1 << 28) -#define DMG_BUCKSHOT (1 << 29) // not quite a bullet. Little, rounder, different. -#endif - -#if !defined DMG_CRIT - // TF2 crits and minicrits - #define DMG_CRIT DMG_ACID -#endif - -enum SDKHookType -{ - SDKHook_EndTouch, - SDKHook_FireBulletsPost, - SDKHook_OnTakeDamage, - SDKHook_OnTakeDamagePost, - SDKHook_PreThink, - SDKHook_PostThink, - SDKHook_SetTransmit, - SDKHook_Spawn, - SDKHook_StartTouch, - SDKHook_Think, - SDKHook_Touch, - SDKHook_TraceAttack, - SDKHook_TraceAttackPost, - SDKHook_WeaponCanSwitchTo, - SDKHook_WeaponCanUse, - SDKHook_WeaponDrop, - SDKHook_WeaponEquip, - SDKHook_WeaponSwitch, - SDKHook_ShouldCollide, - SDKHook_PreThinkPost, - SDKHook_PostThinkPost, - SDKHook_ThinkPost, - SDKHook_EndTouchPost, - SDKHook_GroundEntChangedPost, - SDKHook_SpawnPost, - SDKHook_StartTouchPost, - SDKHook_TouchPost, - SDKHook_VPhysicsUpdate, - SDKHook_VPhysicsUpdatePost, - SDKHook_WeaponCanSwitchToPost, - SDKHook_WeaponCanUsePost, - SDKHook_WeaponDropPost, - SDKHook_WeaponEquipPost, - SDKHook_WeaponSwitchPost, - SDKHook_Use, - SDKHook_UsePost -}; - -/* - Alphabetized for easy readability - - SDKHook_EndTouch, - SDKHook_EndTouchPost, - - SDKHook_FireBulletsPost, - - SDKHook_GroundEntChangedPost, - - SDKHook_OnTakeDamage, - SDKHook_OnTakeDamagePost, - - SDKHook_PreThink, - SDKHook_PreThinkPost, - - SDKHook_PostThink, - SDKHook_PostThinkPost, - - SDKHook_SetTransmit, - - SDKHook_ShouldCollide, - - SDKHook_Spawn, - SDKHook_SpawnPost, - - SDKHook_StartTouch, - SDKHook_StartTouchPost, - - SDKHook_Think, - SDKHook_ThinkPost, - - SDKHook_Touch, - SDKHook_TouchPost, - - SDKHook_TraceAttack, - SDKHook_TraceAttackPost, - - SDKHook_Use, - SDKHook_UsePost, - - SDKHook_VPhysicsUpdate, - SDKHook_VPhysicsUpdatePost, - - SDKHook_WeaponCanSwitchTo, - SDKHook_WeaponCanSwitchToPost, - - SDKHook_WeaponCanUse, - SDKHook_WeaponCanUsePost, - - SDKHook_WeaponDrop, - SDKHook_WeaponDropPost, - - SDKHook_WeaponEquip, - SDKHook_WeaponEquipPost, - - SDKHook_WeaponSwitch, - SDKHook_WeaponSwitchPost -*/ - -enum UseType -{ - Use_Off, - Use_On, - Use_Set, - Use_Toggle -}; - -funcenum SDKHookCB -{ - // PreThink/Post - // PostThink/Post - public(client), - - // GroundEntChanged - // Spawn/Post - // Think/Post - // VPhysicsUpdate/Post - public(entity), - - // EndTouch - // StartTouch - // Touch - Action:public(entity, other), - - // EndTouchPost - // StartTouchPost - // TouchPost - public(entity, other), - - // SetTransmit - Action:public(entity, client), - - // WeaponCanSwitchTo - // WeaponCanUse - // WeaponDrop - // WeaponEquip - // WeaponSwitch - Action:public(client, weapon), - - // WeaponCanSwitchToPost - // WeaponCanUsePost - // WeaponDropPost - // WeaponEquipPost - // WeaponSwitchPost - public(client, weapon), - - // OnTakeDamage - // Note: Force application is dependent on game and damage type(s) - Action:public(victim, &attacker, &inflictor, &Float:damage, &damagetype), - Action:public(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3]), - - // OnTakeDamagePost - public(victim, attacker, inflictor, Float:damage, damagetype), - public(victim, attacker, inflictor, Float:damage, damagetype, weapon, const Float:damageForce[3], const Float:damagePosition[3]), - - // FireBulletsPost - public(client, shots, const String:weaponname[]), - - // TraceAttack - Action:public(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup), - - // TraceAttackPost - public(victim, attacker, inflictor, Float:damage, damagetype, ammotype, hitbox, hitgroup), - - // ShouldCollide - bool:public(entity, collisiongroup, contentsmask, bool:originalResult), - - // Use - Action:public(entity, activator, caller, UseType:type, Float:value), - - // UsePost - public(entity, activator, caller, UseType:type, Float:value) -}; - - -/** - * @brief When an entity is created - * - * @param entity Entity index - * @param classname Class name - * @noreturn - */ -forward OnEntityCreated(entity, const String:classname[]); - -/** - * @brief When an entity is destroyed - * - * @param entity Entity index - * @noreturn - */ -forward OnEntityDestroyed(entity); - -/** - * @brief When the game description is retrieved - * - * @param gameDesc Game description - * @noreturn - */ -forward Action:OnGetGameDescription(String:gameDesc[64]); - -/** - * @brief When the level is initialized - * - * @param mapName Name of the map - * @param mapEntities Entities of the map - * @noreturn - */ -forward Action:OnLevelInit(const String:mapName[], String:mapEntities[2097152]); - -/** - * @brief Hooks an entity - * - * @param entity Entity index - * @param type Type of function to hook - * @param callback Function to call when hook is called - * @noreturn - */ -native SDKHook(entity, SDKHookType:type, SDKHookCB:callback); - -/** - * @brief Hooks an entity - * - * @param entity Entity index - * @param type Type of function to hook - * @param callback Function to call when hook is called - * @return bool Hook Successful - */ -native bool:SDKHookEx(entity, SDKHookType:type, SDKHookCB:callback); - -/** - * @brief Unhooks an entity - * - * @param entity Entity index - * @param type Type of function to unhook - * @param callback Callback function to unhook - * @noreturn - */ -native SDKUnhook(entity, SDKHookType:type, SDKHookCB:callback); - -/** - * @brief Applies damage to an entity - * - * @note Force application is dependent on game and damage type(s) - * - * @param entity Entity index taking damage - * @param inflictor Inflictor entity index - * @param attacker Attacker entity index - * @param damage Amount of damage - * @param damageType Bitfield of damage types - * @param weapon Weapon index (orangebox and later) or -1 for unspecified - * @param damageForce Velocity of damage force - * @param damagePosition Origin of damage - * @noreturn - */ -native SDKHooks_TakeDamage(entity, inflictor, attacker, Float:damage, damageType=DMG_GENERIC, weapon=-1, const Float:damageForce[3]=NULL_VECTOR, const Float:damagePosition[3]=NULL_VECTOR); - -/** - * @brief Forces a client to drop the specified weapon - * - * @param client Client index. - * @param weapon Weapon entity index. - * @param vecTarget Location to toss weapon to, or NULL_VECTOR for default. - * @param vecVelocity Velocity at which to toss weapon, or NULL_VECTOR for default. - * @noreturn - * @error Invalid client or weapon entity, weapon not owned by client. - */ -native SDKHooks_DropWeapon(client, weapon, const Float:vecTarget[3]=NULL_VECTOR, const Float:vecVelocity[3]=NULL_VECTOR); - -/** Do Not Edit Below This Line **/ - -public Extension:__ext_sdkhooks = -{ - name = "sdkhooks", - file = "sdkhooks.ext", -#if defined AUTOLOAD_EXTENSIONS - autoload = 1, -#else - autoload = 0, -#endif -#if defined REQUIRE_EXTENSIONS - required = 1, -#else - required = 0, -#endif -}; - -#if !defined REQUIRE_EXTENSIONS -public __ext_sdkhooks_SetNTVOptional() -{ - MarkNativeAsOptional("SDKHook"); - MarkNativeAsOptional("SDKHookEx"); - MarkNativeAsOptional("SDKUnhook"); - MarkNativeAsOptional("SDKHooks_TakeDamage"); - MarkNativeAsOptional("SDKHooks_DropWeapon"); -} -#endif diff --git a/env/include/sdkhooks.inc b/env/include/sdkhooks.inc index 2b25504..44a448a 100644 --- a/env/include/sdkhooks.inc +++ b/env/include/sdkhooks.inc @@ -117,10 +117,17 @@ enum SDKHookType SDKHook_Reload, SDKHook_ReloadPost, SDKHook_GetMaxHealth, /**< ep2v and later */ + SDKHook_Blocked, + SDKHook_BlockedPost, + SDKHook_OnTakeDamageAlive, + SDKHook_OnTakeDamageAlivePost, }; /* Alphabetized for easy readability + + SDKHook_Blocked, + SDKHook_BlockedPost, SDKHook_EndTouch, SDKHook_EndTouchPost, @@ -134,6 +141,9 @@ enum SDKHookType SDKHook_OnTakeDamage, SDKHook_OnTakeDamagePost, + SDKHook_OnTakeDamageAlive, + SDKHook_OnTakeDamageAlivePost, + SDKHook_PreThink, SDKHook_PreThinkPost, @@ -192,90 +202,95 @@ enum UseType Use_Toggle }; -funcenum SDKHookCB +typeset SDKHookCB { // PreThink/Post // PostThink/Post - public(client), + function void (int client); // Spawn - Action:public(entity), + function Action (int entity); // GroundEntChanged // SpawnPost // Think/Post // VPhysicsUpdate/Post - public(entity), + function void (int entity); // EndTouch // StartTouch // Touch - Action:public(entity, other), + // Blocked + function Action (int entity, int other); // EndTouchPost // StartTouchPost // TouchPost - public(entity, other), + function void (int entity, int other); // SetTransmit - Action:public(entity, client), + function Action (int entity, int client); // WeaponCanSwitchTo // WeaponCanUse // WeaponDrop // WeaponEquip // WeaponSwitch - Action:public(client, weapon), + function Action (int client, int weapon); // WeaponCanSwitchToPost // WeaponCanUsePost // WeaponDropPost // WeaponEquipPost // WeaponSwitchPost - public(client, weapon), + function void (int client, int weapon); // GetMaxHealth (ep2v and later) - Action:public(entity, &maxhealth), + function Action (int entity, int &maxhealth); // OnTakeDamage + // OnTakeDamageAlive // Note: The weapon parameter is not used by all games and damage sources. // Note: Force application is dependent on game and damage type(s) // SDKHooks 1.0+ - Action:public(victim, &attacker, &inflictor, &Float:damage, &damagetype), + function Action (int victim, int &attacker, int &inflictor, float &damage, int &damagetype); // SDKHooks 2.0+ - Action:public(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3]), + function Action (int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3]); // SDKHooks 2.1+ (can check for support at runtime using GetFeatureStatus on SDKHook_DmgCustomInOTD capability. // DON'T attempt to access 'damagecustom' var if feature status != available - Action:public(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, - Float:damageForce[3], Float:damagePosition[3], damagecustom), + function Action (int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, + float damageForce[3], float damagePosition[3], int damagecustom); // OnTakeDamagePost - public(victim, attacker, inflictor, Float:damage, damagetype), - public(victim, attacker, inflictor, Float:damage, damagetype, weapon, const Float:damageForce[3], const Float:damagePosition[3]), + // OnTakeDamageAlivePost + function void (int victim, int attacker, int inflictor, float damage, int damagetype); + function void (int victim, int attacker, int inflictor, float damage, int damagetype, int weapon, const float damageForce[3], const float damagePosition[3]); + function void (int victim, int attacker, int inflictor, float damage, int damagetype, int weapon, + const float damageForce[3], const float damagePosition[3], int damagecustom); // FireBulletsPost - public(client, shots, const String:weaponname[]), + function void (int client, int shots, const char[] weaponname); // TraceAttack - Action:public(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup), + function Action (int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &ammotype, int hitbox, int hitgroup); // TraceAttackPost - public(victim, attacker, inflictor, Float:damage, damagetype, ammotype, hitbox, hitgroup), + function void (int victim, int attacker, int inflictor, float damage, int damagetype, int ammotype, int hitbox, int hitgroup); // ShouldCollide - bool:public(entity, collisiongroup, contentsmask, bool:originalResult), + function bool (int entity, int collisiongroup, int contentsmask, bool originalResult); // Use - Action:public(entity, activator, caller, UseType:type, Float:value), + function Action (int entity, int activator, int caller, UseType type, float value); // UsePost - public(entity, activator, caller, UseType:type, Float:value), + function void (int entity, int activator, int caller, UseType type, float value); // Reload - Action:public(weapon), + function Action (int weapon); // Reload post - public(weapon, bool:bSuccessful) + function void (int weapon, bool bSuccessful); }; diff --git a/env/include/sdktools_entoutput.inc b/env/include/sdktools_entoutput.inc index b7aeaaa..4f404fa 100644 --- a/env/include/sdktools_entoutput.inc +++ b/env/include/sdktools_entoutput.inc @@ -42,8 +42,9 @@ * @param caller Entity index of the caller. * @param activator Entity index of the activator. * @param delay Delay in seconds? before the event gets fired. + * @noreturn */ -functag public EntityOutput(const String:output[], caller, activator, Float:delay); +typedef EntityOutput = function void (const char[] output, int caller, int activator, float delay); /** * Add an entity output hook on a entity classname diff --git a/env/include/sdktools_functions.inc b/env/include/sdktools_functions.inc index 16b3e47..c156192 100644 --- a/env/include/sdktools_functions.inc +++ b/env/include/sdktools_functions.inc @@ -298,7 +298,7 @@ native bool:GetPlayerJingleFile(client, String:hex[], maxlength); * @param out Buffer to store the output traffic velocity. * @noreturn */ -native GetServerNetStats(&Float:in, &Float:out); +native GetServerNetStats(&Float:inAmount, &Float:outAmout); /** * Equip's a player's weapon. @@ -343,4 +343,4 @@ native SetClientInfo(client, const String:key[], const String:value[]); * * @return Amount of ammo actually given. */ -native GivePlayerAmmo(client, amount, ammotype, bool:suppressSound=false); \ No newline at end of file +native GivePlayerAmmo(client, amount, ammotype, bool:suppressSound=false); diff --git a/env/include/sdktools_sound.inc b/env/include/sdktools_sound.inc index bfb4e3f..d888d2e 100644 --- a/env/include/sdktools_sound.inc +++ b/env/include/sdktools_sound.inc @@ -283,7 +283,16 @@ native Float:GetDistGainFromSoundLevel(soundlevel, Float:distance); * @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, * Plugin_Changed when any parameter has been modified. */ -functag public Action:AmbientSHook(String:sample[PLATFORM_MAX_PATH], &entity, &Float:volume, &level, &pitch, Float:pos[3], &flags, &Float:delay); +typedef AmbientSHook = function Action ( + char sample[PLATFORM_MAX_PATH], + int &entity, + float &volume, + int &level, + int &pitch, + float pos[3], + int &flags, + float &delay +); /** * Called when a sound is going to be emitted to one or more clients. @@ -301,7 +310,17 @@ functag public Action:AmbientSHook(String:sample[PLATFORM_MAX_PATH], &entity, &F * @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, * Plugin_Changed when any parameter has been modified. */ -functag public Action:NormalSHook(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags); +typedef NormalSHook = function Action ( + int clients[64], + int &numClients, + char sample[PLATFORM_MAX_PATH], + int &entity, + int &channel, + float &volume, + int &level, + int &pitch, + int &flags +); /** * Hooks all played ambient sounds. @@ -448,3 +467,229 @@ stock ATTN_TO_SNDLEVEL(Float:attn) } return 0; } + +/** + * Retrieves the parameters for a game sound. + * + * Game sounds are found in a game's scripts/game_sound.txt or other files + * referenced from it + * + * Note that if a game sound has a rndwave section, one of them will be returned + * at random. + * + * @param gameSound Name of game sound. + * @param channel Channel to emit with. + * @param level Sound level. + * @param volume Sound volume. + * @param pitch Sound pitch. + * @param sample Sound file name relative to the "sounds" folder. + * @param maxlength Maximum length of sample string buffer. + * @param entity Entity the sound is being emitted from. + * @return True if the sound was successfully retrieved, false if it + * was not found + */ +native bool:GetGameSoundParams(const String:gameSound[], + &channel, + &soundLevel, + &Float:volume, + &pitch, + String:sample[], + maxlength, + entity=SOUND_FROM_PLAYER); + +/** + * Emits a game sound to a list of clients. + * + * Game sounds are found in a game's scripts/game_sound.txt or other files + * referenced from it + * + * Note that if a game sound has a rndwave section, one of them will be returned + * at random. + * + * @param clients Array of client indexes. + * @param numClients Number of clients in the array. + * @param gameSound Name of game sound. + * @param entity Entity to emit from. + * @param flags Sound flags. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @return True if the sound was played successfully, false if it failed + * @error Invalid client index. + */ +stock bool:EmitGameSound(const clients[], + numClients, + const String:gameSound[], + entity = SOUND_FROM_PLAYER, + flags = SND_NOFLAGS, + speakerentity = -1, + const Float:origin[3] = NULL_VECTOR, + const Float:dir[3] = NULL_VECTOR, + bool:updatePos = true, + Float:soundtime = 0.0) +{ + new channel; + new level; + new Float:volume; + new pitch; + new String:sample[PLATFORM_MAX_PATH]; + + if (GetGameSoundParams(gameSound, channel, level, volume, pitch, sample, sizeof(sample), entity)) + { + EmitSound(clients, numClients, sample, entity, channel, level, flags, volume, pitch, speakerentity, origin, dir, updatePos, soundtime); + return true; + } + else + { + return false; + } +} + +/** + * Emits an ambient game sound. + * + * Game sounds are found in a game's scripts/game_sound.txt or other files + * referenced from it + * + * Note that if a game sound has a rndwave section, one of them will be returned + * at random. + * + * @param gameSound Name of game sound. + * @param pos Origin of sound. + * @param entity Entity index to associate sound with. + * @param flags Sound flags. + * @param delay Play delay. + * @noreturn + */ +stock bool:EmitAmbientGameSound(const String:gameSound[], + const Float:pos[3], + entity = SOUND_FROM_WORLD, + flags = SND_NOFLAGS, + Float:delay = 0.0) +{ + new channel; // This is never actually used for Ambients, but it's a mandatory field to GetGameSoundParams + new level; + new Float:volume; + new pitch; + new String:sample[PLATFORM_MAX_PATH]; + + if (GetGameSoundParams(gameSound, channel, level, volume, pitch, sample, sizeof(sample), entity)) + { + EmitAmbientSound(sample, pos, entity, level, flags, volume, pitch, delay); + return true; + } + else + { + return false; + } +} + +/** + * Wrapper to emit a game sound to one client. + * + * Game sounds are found in a game's scripts/game_sound.txt or other files + * referenced from it + * + * Note that if a game sound has a rndwave section, one of them will be returned + * at random. + * + * @param client Client index. + * @param gameSound Name of game sound. + * @param entity Entity to emit from. + * @param flags Sound flags. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @noreturn + * @error Invalid client index. + */ +stock bool:EmitGameSoundToClient(client, + const String:gameSound[], + entity = SOUND_FROM_PLAYER, + flags = SND_NOFLAGS, + speakerentity = -1, + const Float:origin[3] = NULL_VECTOR, + const Float:dir[3] = NULL_VECTOR, + bool:updatePos = true, + Float:soundtime = 0.0) +{ + new clients[1]; + clients[0] = client; + /* Save some work for SDKTools and remove SOUND_FROM_PLAYER references */ + entity = (entity == SOUND_FROM_PLAYER) ? client : entity; + return EmitGameSound(clients, 1, gameSound, entity, flags, + speakerentity, origin, dir, updatePos, soundtime); +} + +/** + * Wrapper to emit game sound to all clients. + * + * Game sounds are found in a game's scripts/game_sound.txt or other files + * referenced from it + * + * Note that if a game sound has a rndwave section, one of them will be returned + * at random. + * + * @param gameSound Name of game sound. + * @param entity Entity to emit from. + * @param flags Sound flags. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @noreturn + * @error Invalid client index. + */ +stock bool:EmitGameSoundToAll(const String:gameSound[], + entity = SOUND_FROM_PLAYER, + flags = SND_NOFLAGS, + speakerentity = -1, + const Float:origin[3] = NULL_VECTOR, + const Float:dir[3] = NULL_VECTOR, + bool:updatePos = true, + Float:soundtime = 0.0) +{ + new clients[MaxClients]; + new total = 0; + + for (new i=1; i<=MaxClients; i++) + { + if (IsClientInGame(i)) + { + clients[total++] = i; + } + } + + if (!total) + { + return false; + } + + return EmitGameSound(clients, total, gameSound, entity, flags, + speakerentity, origin, dir, updatePos, soundtime); +} + +/** + * Precache a game sound. + * + * Most games will precache all game sounds on map start, but this is not guaranteed... + * Team Fortress 2 is known to not pre-cache MvM game mode sounds on non-MvM maps. + * + * Due to the above, this native should be called before any calls to GetGameSoundParams, + * EmitGameSound*, or EmitAmbientGameSound. + * + * It should be safe to pass already precached game sounds to this function. + * + * Note: It precaches all files for a game sound. + * + * @param soundname Game sound to precache + * + * @return True if the game sound was found, false if sound did not exist + * or had no files + */ +native bool:PrecacheScriptSound(const String:soundname[]); diff --git a/env/include/sdktools_tempents.inc b/env/include/sdktools_tempents.inc index 9b980c2..1aaf3b0 100644 --- a/env/include/sdktools_tempents.inc +++ b/env/include/sdktools_tempents.inc @@ -44,7 +44,7 @@ * @param delay Delay in seconds to send the TE. * @return Plugin_Continue to allow the transmission of the TE, Plugin_Stop to block it. */ -functag public Action:TEHook(const String:te_name[], const Players[], numClients, Float:delay); +typedef TEHook = function Action (const char[] te_name, const int[] Players, int numClients, float delay); /** * Hooks a temp entity. @@ -171,7 +171,7 @@ native TE_WriteFloatArray(const String:prop[], const Float:array[], arraySize); * @noreturn * @error Invalid client index or client not in game. */ -native TE_Send(clients[], numClients, Float:delay=0.0); +native TE_Send(const clients[], numClients, Float:delay=0.0); /** * Sets an encoded entity index in the current temp entity. diff --git a/env/include/sdktools_trace.inc b/env/include/sdktools_trace.inc index 845a566..1dfe106 100644 --- a/env/include/sdktools_trace.inc +++ b/env/include/sdktools_trace.inc @@ -110,7 +110,7 @@ enum RayType RayType_Infinite /**< The trace ray will go from the start position to infinity using a direction vector. */ }; -funcenum TraceEntityFilter +typeset TraceEntityFilter { /** * Called on entity filtering. @@ -119,7 +119,7 @@ funcenum TraceEntityFilter * @param contentsMask Contents Mask. * @return True to allow the current entity to be hit, otherwise false. */ - bool:public(entity, contentsMask), + function bool (int entity, int contentsMask); /** * Called on entity filtering. @@ -129,7 +129,7 @@ funcenum TraceEntityFilter * @param data Data value, if used. * @return True to allow the current entity to be hit, otherwise false. */ - bool:public(entity, contentsMask, any:data), + function bool (int entity, int contentsMask, any data); }; /** @@ -371,4 +371,4 @@ native TR_GetPlaneNormal(Handle:hndl, Float:normal[3]); * @param pos Vector buffer to store data in. * @return True if outside world, otherwise false. */ -native TR_PointOutsideWorld(Float:pos[3]); \ No newline at end of file +native TR_PointOutsideWorld(Float:pos[3]); diff --git a/env/include/sorting.inc b/env/include/sorting.inc index 50ac310..297f1ad 100644 --- a/env/include/sorting.inc +++ b/env/include/sorting.inc @@ -98,7 +98,7 @@ native SortStrings(String:array[][], array_size, SortOrder:order = Sort_Ascendin * 0 if first is equal to second * 1 if first should go after second */ -functag public SortFunc1D(elem1, elem2, const array[], Handle:hndl); +typedef SortFunc1D = function int (int elem1, int elem2, const int[] array, Handle hndl); /** * Sorts a custom 1D array. You must pass in a comparison function. @@ -123,10 +123,10 @@ native SortCustom1D(array[], array_size, SortFunc1D:sortfunc, Handle:hndl=INVALI * 0 if first is equal to second * 1 if first should go after second */ -funcenum SortFunc2D +typeset SortFunc2D { - public(elem1[], elem2[], const array[][], Handle:hndl), - public(String:elem1[], String:elem2[], const String:array[][], Handle:hndl), + function int (int[] elem1, int[] elem2, const int[][] array, Handle hndl); + function int (char[] elem1, char[] elem2, const char[][] array, Handle hndl); }; /** @@ -163,7 +163,7 @@ native SortADTArray(Handle:array, SortOrder:order, SortType:type); * 0 if first is equal to second * 1 if first should go after second */ -functag public SortFuncADTArray(index1, index2, Handle:array, Handle:hndl); +typedef SortFuncADTArray = function int (int index1, int index2, Handle array, Handle hndl); /** * Custom sorts an ADT Array. You must pass in a comparison function. @@ -173,4 +173,4 @@ functag public SortFuncADTArray(index1, index2, Handle:array, Handle:hndl); * @param hndl Optional Handle to pass through the comparison calls. * @noreturn */ -native SortADTArrayCustom(Handle:array, SortFuncADTArray:sortfunc, Handle:hndl=INVALID_HANDLE); \ No newline at end of file +native SortADTArrayCustom(Handle:array, SortFuncADTArray:sortfunc, Handle:hndl=INVALID_HANDLE); diff --git a/env/include/sourcemod.inc b/env/include/sourcemod.inc index dec146d..0274e37 100644 --- a/env/include/sourcemod.inc +++ b/env/include/sourcemod.inc @@ -40,11 +40,11 @@ */ struct Plugin { - const String:name[], /**< Plugin Name */ - const String:description[], /**< Plugin Description */ - const String:author[], /**< Plugin Author */ - const String:version[], /**< Plugin Version */ - const String:url[], /**< Plugin URL */ + public const char[] name; /**< Plugin Name */ + public const char[] description; /**< Plugin Description */ + public const char[] author; /**< Plugin Author */ + public const char[] version; /**< Plugin Version */ + public const char[] url; /**< Plugin URL */ }; #include @@ -64,6 +64,7 @@ struct Plugin #include #include #include +#include #include #include #include @@ -74,6 +75,7 @@ struct Plugin #include #include #include +#include enum APLRes { @@ -82,18 +84,6 @@ enum APLRes APLRes_SilentFailure /**< Plugin shouldn't load but do so silently */ }; -/** - * Declare this as a struct in your plugin to expose its information. - * Example: - * - * public Plugin:myinfo = - * { - * name = "My Plugin", - * //etc - * }; - */ -public Plugin:myinfo; - /** * Called when the plugin is fully initialized and all known external references * are resolved. This is only called once in the lifetime of the plugin, and is @@ -108,7 +98,7 @@ public Plugin:myinfo; * * @noreturn */ -forward OnPluginStart(); +forward void OnPluginStart(); /** * @deprecated Use AskPluginLoad2() instead. @@ -144,7 +134,7 @@ forward APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) * * @noreturn */ -forward OnPluginEnd(); +forward void OnPluginEnd(); /** * Called when the plugin's pause status is changing. @@ -152,14 +142,14 @@ forward OnPluginEnd(); * @param pause True if the plugin is being paused, false otherwise. * @noreturn */ -forward OnPluginPauseChange(bool:pause); +forward void OnPluginPauseChange(bool:pause); /** * Called before every server frame. Note that you should avoid * doing expensive computations here, and you should declare large * local arrays using 'decl' instead of 'new'. */ -forward OnGameFrame(); +forward void OnGameFrame(); /** * Called when the map is loaded. @@ -167,12 +157,12 @@ forward OnGameFrame(); * @note This used to be OnServerLoad(), which is now deprecated. * Plugins still using the old forward will work. */ -forward OnMapStart(); +forward void OnMapStart(); /** * Called right before a map ends. */ -forward OnMapEnd(); +forward void OnMapEnd(); /** * Called when the map has loaded, servercfgfile (server.cfg) has been @@ -184,7 +174,7 @@ forward OnMapEnd(); * * @noreturn */ -forward OnConfigsExecuted(); +forward void OnConfigsExecuted(); /** * This is called once, right after OnMapStart() but any time before @@ -201,20 +191,20 @@ forward OnConfigsExecuted(); * * @noreturn */ -forward OnAutoConfigsBuffered(); +forward void OnAutoConfigsBuffered(); /** * @deprecated Use OnConfigsExecuted() instead. */ #pragma deprecated Use OnConfigsExecuted() instead -forward OnServerCfg(); +forward void OnServerCfg(); /** * Called after all plugins have been loaded. This is called once for * every plugin. If a plugin late loads, it will be called immediately * after OnPluginStart(). */ -forward OnAllPluginsLoaded(); +forward void OnAllPluginsLoaded(); /** * Returns the calling plugin's Handle. @@ -461,7 +451,7 @@ native GetExtensionFileStatus(const String:name[], String:error[]="", maxlength= * * @param name Library name. */ -forward OnLibraryAdded(const String:name[]); +forward void OnLibraryAdded(const String:name[]); /** * Called right before a library is removed that the current plugin references @@ -470,7 +460,7 @@ forward OnLibraryAdded(const String:name[]); * * @param name Library name. */ -forward OnLibraryRemoved(const String:name[]); +forward void OnLibraryRemoved(const String:name[]); #define MAPLIST_FLAG_MAPSFOLDER (1<<0) /**< On failure, use all maps in the maps folder. */ #define MAPLIST_FLAG_CLEARARRAY (1<<1) /**< If an input array is specified, clear it before adding. */ @@ -564,7 +554,7 @@ forward bool:OnClientFloodCheck(client); * @param blocked True if client flooded last "say", false otherwise. * @noreturn */ -forward OnClientFloodResult(client, bool:blocked); +forward void OnClientFloodResult(client, bool:blocked); /** * Feature types. diff --git a/env/include/string.inc b/env/include/string.inc index a06b924..92d0a5b 100644 --- a/env/include/string.inc +++ b/env/include/string.inc @@ -433,30 +433,19 @@ stock CharToLower(chr) * @return The index of the first occurrence of the character * in the string, or -1 if the character was not found. */ -stock FindCharInString(const String:str[], c, bool:reverse = false) +stock int FindCharInString(const char[] str, char c, bool reverse = false) { - new i, len - - len = strlen(str); + int len = strlen(str); - if (!reverse) - { - for (i = 0; i < len; i++) - { + if (!reverse) { + for (int i = 0; i < len; i++) { if (str[i] == c) - { return i; - } } - } - else - { - for (i = len - 1; i >= 0; i--) - { + } else { + for (int i = len - 1; i >= 0; i--) { if (str[i] == c) - { return i; - } } } diff --git a/env/include/textparse.inc b/env/include/textparse.inc index 85ef687..880e4d7 100644 --- a/env/include/textparse.inc +++ b/env/include/textparse.inc @@ -1,7 +1,7 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2014 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _textparse_included #endinput #endif @@ -45,7 +45,7 @@ /** * Parse result directive. */ -enum SMCResult +enum SMCResult: { SMCParse_Continue, /**< Continue parsing */ SMCParse_Halt, /**< Stop parsing here */ @@ -55,7 +55,7 @@ enum SMCResult /** * Parse error codes. */ -enum SMCError +enum SMCError: { SMCError_Okay = 0, /**< No error */ SMCError_StreamOpen, /**< Stream failed to open */ @@ -71,12 +71,117 @@ enum SMCError SMCError_InvalidProperty1, /**< A property was declared outside of any section */ }; +// Called when parsing is started. +// +// @param smc The SMC Parse Handle. +typedef SMC_ParseStart = function void (SMCParser smc); + +// Called when the parser is entering a new section or sub-section. +// +// Note: Enclosing quotes are always stripped. +// +// @param smc The SMC Parser. +// @param name String containing section name. +// @param opt_quotes True if the section name was quote-enclosed in the file. +// @return An SMCResult action to take. +typedef SMC_NewSection = function SMCResult (SMCParser smc, const char[] name, bool opt_quotes); + +// Called when the parser finds a new key/value pair. +// +// Note: Enclosing quotes are always stripped. +// +// @param smc The SMCParser. +// @param key String containing key name. +// @param value String containing value name. +// @param key_quotes Whether or not the key was enclosed in quotes. +// @param value_quotes Whether or not the value was enclosed in quotes. +// @return An SMCResult action to take. +typedef SMC_KeyValue = function SMCResult (SMCParser smc, const char[] key, const char[] value, bool key_quotes, bool value_quotes); + +// Called when the parser finds the end of the current section. +// +// @param smc The SMCParser. +// @return An SMCResult action to take. +typedef SMC_EndSection = function SMCResult (SMCParser smc); + +// Called when parsing is halted. +// +// @param smc The SMCParser. +// @param halted True if abnormally halted, false otherwise. +// @param failed True if parsing failed, false otherwise. +// @noreturn +typedef SMC_ParseEnd = function void (SMCParser smc, bool halted, bool failed); + +// Callback for whenever a new line of text is about to be parsed. +// +// @param smc The SMCParser. +// @param line A string containing the raw line from the file. +// @param lineno The line number it occurs on. +// @return An SMCResult action to take. +typedef SMC_RawLine = function SMCResult (SMCParser smc, const char[] line, int lineno); + +// An SMCParser is a callback-driven parser for SourceMod configuration files. +// SMC files are similar to Valve KeyValues format, with two key differences: +// (1) SMC cannot handle single-item entries (that is, a key with no value). +// (2) SMC files can have multi-line comment blocks, whereas KeyValues cannot. +methodmap SMCParser < Handle +{ + // Create a new SMC file format parser. + public native SMCParser(); + + // Parses an SMC file. + // + // @param file A string containing the file path. + // @param line An optional variable to store the last line number read. + // @param col An optional variable to store the last column number read. + // @return An SMCParseError result. + public native SMCError ParseFile(const char[] file, int &line = 0, int &col = 0); + + // Sets the callback for receiving SMC_ParseStart events. + property SMC_ParseStart OnStart { + public native set(SMC_ParseStart func); + } + + // Sets the callback for receiving SMC_ParseEnd events. + property SMC_ParseEnd OnEnd { + public native set(SMC_ParseEnd func); + } + + // Sets the callback for receiving SMC_NewSection events. + property SMC_NewSection OnEnterSection { + public native set(SMC_NewSection func); + } + + // Sets the callback for receiving SMC_EndSection events. + property SMC_EndSection OnLeaveSection { + public native set(SMC_EndSection func); + } + + // Sets the callback for receiving SMC_KeyValue events. + property SMC_KeyValue OnKeyValue { + public native set(SMC_KeyValue func); + } + + // Sets the callback for receiving SMC_RawLine events. + property SMC_RawLine OnRawLine { + public native set(SMC_RawLine func); + } + + // Gets an error string for an SMCError code. + // + // @param error The SMCParseError code. + // @param buffer A string buffer for the error (contents undefined on failure). + // @param buf_max The maximum size of the buffer. + // @return The number of characters written to buffer. + public native void GetErrorString(SMCError error, char[] buffer, int buf_max); +}; + /** * Creates a new SMC file format parser. This is used to set parse hooks. * * @return A new Handle to an SMC Parse structure. */ -native Handle:SMC_CreateParser(); +native SMCParser SMC_CreateParser(); /** * Parses an SMC file. @@ -86,9 +191,9 @@ native Handle:SMC_CreateParser(); * @param line An optional by reference cell to store the last line number read. * @param col An optional by reference cell to store the last column number read. * @return An SMCParseError result. - * @error Invalid or corrupt Handle. + * @error Invalid or corrupt Handle. */ -native SMCError:SMC_ParseFile(Handle:smc, const String:file[], &line=0, &col=0); +native SMCError SMC_ParseFile(Handle smc, const char[] file, int &line=0, int &col=0); /** * Gets an error string for an SMCError code. @@ -100,15 +205,7 @@ native SMCError:SMC_ParseFile(Handle:smc, const String:file[], &line=0, &col=0); * @param buf_max The maximum size of the buffer. * @return True on success, false otherwise. */ -native bool:SMC_GetErrorString(SMCError:error, String:buffer[], buf_max); - -/** - * Called when parsing is started. - * - * @param smc The SMC Parse Handle. - * @noreturn - */ -functag public SMC_ParseStart(Handle:smc); +native bool SMC_GetErrorString(SMCError error, char[] buffer, int buf_max); /** * Sets the SMC_ParseStart function of a parse Handle. @@ -116,19 +213,9 @@ functag public SMC_ParseStart(Handle:smc); * @param smc Handle to an SMC Parse. * @param func SMC_ParseStart function. * @noreturn - * @error Invalid or corrupt Handle. + * @error Invalid or corrupt Handle. */ -native SMC_SetParseStart(Handle:smc, SMC_ParseStart:func); - -/** - * Called when parsing is halted. - * - * @param smc The SMC Parse Handle. - * @param halted True if abnormally halted, false otherwise. - * @param failed True if parsing failed, false otherwise. - * @noreturn - */ -functag public SMC_ParseEnd(Handle:smc, bool:halted, bool:failed); +native SMC_SetParseStart(Handle smc, SMC_ParseStart func); /** * Sets the SMC_ParseEnd of a parse handle. @@ -136,41 +223,9 @@ functag public SMC_ParseEnd(Handle:smc, bool:halted, bool:failed); * @param smc Handle to an SMC Parse. * @param func SMC_ParseEnd function. * @noreturn - * @error Invalid or corrupt Handle. + * @error Invalid or corrupt Handle. */ -native SMC_SetParseEnd(Handle:smc, SMC_ParseEnd:func); - -/** - * Called when the parser is entering a new section or sub-section. - * @note Enclosing quotes are always stripped. - * - * @param smc The SMC Parse Handle. - * @param name String containing section name. - * @param opt_quotes True if the section name was quote-enclosed in the file. - * @return An SMCResult action to take. - */ -functag public SMCResult:SMC_NewSection(Handle:smc, const String:name[], bool:opt_quotes); - -/** - * Called when the parser finds a new key/value pair. - * @note Enclosing quotes are always stripped. - * - * @param smc The SMC Parse Handle. - * @param key String containing key name. - * @param value String containing value name. - * @param key_quotes Whether or not the key was enclosed in quotes. - * @param value_quotes Whether or not the value was enclosed in quotes. - * @return An SMCResult action to take. - */ -functag public SMCResult:SMC_KeyValue(Handle:smc, const String:key[], const String:value[], bool:key_quotes, bool:value_quotes); - -/** - * Called when the parser finds the end of the current section. - * - * @param smc The SMC Parse Handle. - * @return An SMCResult action to take. - */ -functag public SMCResult:SMC_EndSection(Handle:smc); +native SMC_SetParseEnd(Handle smc, SMC_ParseEnd func); /** * Sets the three main reader functions. @@ -179,25 +234,13 @@ functag public SMCResult:SMC_EndSection(Handle:smc); * @param ns An SMC_NewSection function pointer. * @param kv An SMC_KeyValue function pointer. * @param es An SMC_EndSection function pointer. - * @noreturn */ -native SMC_SetReaders(Handle:smc, SMC_NewSection:ns, SMC_KeyValue:kv, SMC_EndSection:es); - -/** - * Called whenever a raw line is read. - * - * @param smc The SMC Parse Handle. - * @param line A string containing the raw line from the file. - * @param lineno The line number it occurs on. - * @return An SMCResult action to take. - */ -functag public SMCResult:SMC_RawLine(Handle:smc, const String:line[], lineno); +native void SMC_SetReaders(Handle smc, SMC_NewSection ns, SMC_KeyValue kv, SMC_EndSection es); /** * Sets a raw line reader on an SMC parser Handle. * * @param smc Handle to an SMC Parse. * @param func SMC_RawLine function. - * @noreturn */ -native SMC_SetRawLine(Handle:smc, SMC_RawLine:func); +native void SMC_SetRawLine(Handle smc, SMC_RawLine func); diff --git a/env/include/tf2.inc b/env/include/tf2.inc index 789463d..de40428 100644 --- a/env/include/tf2.inc +++ b/env/include/tf2.inc @@ -107,7 +107,7 @@ enum TFCond TFCond_RegenBuffed, TFCond_MarkedForDeath, TFCond_NoHealingDamageBuff, - TFCond_SpeedBuffAlly, //32 + TFCond_SpeedBuffAlly, // 32 TFCond_HalloweenCritCandy, TFCond_CritCanteen, TFCond_CritDemoCharge, @@ -153,23 +153,47 @@ enum TFCond TFCond_HalloweenTiny, TFCond_HalloweenInHell, TFCond_HalloweenGhostMode, + + TFCond_DodgeChance = 79, + TFCond_Parachute, + TFCond_BlastJumping, + TFCond_HalloweenKart, + TFCond_HalloweenKartDash, + TFCond_BalloonHead, + TFCond_MeleeOnly, + TFCond_SwimmingCurse, + TFCond_HalloweenKartNoTurn, + TFCond_HalloweenKartCage, + TFCond_HasRune, + TFCond_RuneStrength, + TFCond_RuneHaste, + TFCond_RuneRegen, + TFCond_RuneResist, + TFCond_RuneVampire, + TFCond_RuneWarlock, + TFCond_RunePrecision, // 96 + TFCond_RuneAgility, }; const Float:TFCondDuration_Infinite = -1.0; enum TFHoliday { - TFHoliday_Birthday = 1, - TFHoliday_Halloween, - TFHoliday_Christmas, - TFHoliday_ValentinesDay, - TFHoliday_MeetThePyro, - TFHoliday_FullMoon, - TFHoliday_HalloweenOrFullMoon, - TFHoliday_HalloweenOrFullMoonOrValentines, - TFHoliday_AprilFools, + TFHoliday_Invalid = -1 }; +public const TFHoliday:TFHoliday_Birthday; +public const TFHoliday:TFHoliday_Halloween; +public const TFHoliday:TFHoliday_Christmas; +public const TFHoliday:TFHoliday_EndOfTheLine; +public const TFHoliday:TFHoliday_ValentinesDay; +public const TFHoliday:TFHoliday_MeetThePyro; +public const TFHoliday:TFHoliday_SpyVsEngyWar; +public const TFHoliday:TFHoliday_FullMoon; +public const TFHoliday:TFHoliday_HalloweenOrFullMoon; +public const TFHoliday:TFHoliday_HalloweenOrFullMoonOrValentines; +public const TFHoliday:TFHoliday_AprilFools; + enum TFObjectType { TFObject_CartDispenser = 0, @@ -254,12 +278,12 @@ native TF2_SetPlayerPowerPlay(client, bool:enabled); * * @param client Player's index. * @param team Team to disguise the player as (only TFTeam_Red and TFTeam_Blue have an effect) - * @param class TFClassType class to disguise the player as + * @param classType TFClassType class to disguise the player as * @param target Specific target player to disguise as (0 for any) * @noreturn * @error Invalid client index, client not in game, or no mod support. */ -native TF2_DisguisePlayer(client, TFTeam:team, TFClassType:class, target=0); +native TF2_DisguisePlayer(client, TFTeam:team, TFClassType:classType, target=0); /** * Removes the current disguise from a client. Only has an effect on spies. @@ -359,6 +383,17 @@ native bool:TF2_IsHolidayActive(TFHoliday:holiday); */ native bool:TF2_IsPlayerInDuel(client); +/** + * Removes an econ wearable (hat, misc, etc) from a player. + * This also deletes the wearable entity. + * + * @param client Client index. + * @param wearable Index of the wearable entity. + * @noreturn + * @error Invalid client index, client not in game, invalid wearable entity, or no mod support. +*/ +native TF2_RemoveWearable(client, wearable); + /** * Called after a condition is added to a player * @@ -436,5 +471,6 @@ public __ext_tf2_SetNTVOptional() MarkNativeAsOptional("TF2_GetClass"); MarkNativeAsOptional("TF2_IsPlayerInDuel"); MarkNativeAsOptional("TF2_IsHolidayActive"); + MarkNativeAsOptional("TF2_RemoveWearable"); } #endif diff --git a/env/include/tf2_stocks.inc b/env/include/tf2_stocks.inc index 10fff4b..550b540 100644 --- a/env/include/tf2_stocks.inc +++ b/env/include/tf2_stocks.inc @@ -249,6 +249,7 @@ enum { TF_WEAPON_SPELLBOOK, TF_WEAPON_SPELLBOOK_PROJECTILE, TF_WEAPON_SNIPERRIFLE_CLASSIC, + TF_WEAPON_PARACHUTE, }; // TF2 Weapon Loadout Slots @@ -318,7 +319,19 @@ static const String:TFResourceNames[TFResourceType][] = }; /** - * Get's a Clients current class. + * Gets a client's current team. + * + * @param client Client index. + * @return Current TFTeam of client. + * @error Invalid client index. + */ +stock TFTeam:TF2_GetClientTeam(client) +{ + return TFTeam:GetClientTeam(client); +} + +/** + * Gets a client's current class. * * @param client Player's index. * @return Current TFClassType of player. @@ -330,24 +343,24 @@ stock TFClassType:TF2_GetPlayerClass(client) } /** - * Set's a Clients class. + * Sets a client's class. * * Note: If setting player class in a player spawn hook weapons should be set to false. * * @param client Player's index. - * @param class TFClassType class symbol. - * @param weapons This paramater is ignored. - * @param persistent If true changes the players desired class so the change stays after death. + * @param classType TFClassType class symbol. + * @param weapons This parameter is ignored. + * @param persistent If true, changes the player's desired class so the change stays after death. * @noreturn * @error Invalid client index. */ -stock TF2_SetPlayerClass(client, TFClassType:class, bool:weapons=true, bool:persistent=true) +stock TF2_SetPlayerClass(client, TFClassType:classType, bool:weapons=true, bool:persistent=true) { - SetEntProp(client, Prop_Send, "m_iClass", _:class); + SetEntProp(client, Prop_Send, "m_iClass", _:classType); if (persistent) { - SetEntProp(client, Prop_Send, "m_iDesiredPlayerClass", _:class); + SetEntProp(client, Prop_Send, "m_iDesiredPlayerClass", _:classType); } } @@ -368,12 +381,12 @@ stock TF2_GetPlayerResourceData(client, TFResourceType:type) } new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]); - + if (offset < 1) { return -1; } - + new entity = TF2_GetResourceEntity(); if (entity == -1) @@ -404,12 +417,12 @@ stock bool:TF2_SetPlayerResourceData(client, TFResourceType:type, any:value) } new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]); - + if (offset < 1) { return false; } - + new entity = TF2_GetResourceEntity(); if (entity == -1) @@ -435,6 +448,20 @@ stock TF2_RemoveWeaponSlot(client, slot) new weaponIndex; while ((weaponIndex = GetPlayerWeaponSlot(client, slot)) != -1) { + // bug #6206 + // papering over a valve bug where a weapon's extra wearables aren't properly removed from the weapon's owner + new extraWearable = GetEntPropEnt(weaponIndex, Prop_Send, "m_hExtraWearable"); + if (extraWearable != -1) + { + TF2_RemoveWearable(client, extraWearable); + } + + extraWearable = GetEntPropEnt(weaponIndex, Prop_Send, "m_hExtraWearableViewModel"); + if (extraWearable != -1) + { + TF2_RemoveWearable(client, extraWearable); + } + RemovePlayerItem(client, weaponIndex); AcceptEntityInput(weaponIndex, "Kill"); } @@ -497,7 +524,7 @@ stock bool:TF2_IsPlayerInCondition(client, TFCond:cond) return true; } } - else + else if (_:cond < 96) { new bit = (1 << (_:cond - 64)); if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx2") & bit) == bit) @@ -505,6 +532,14 @@ stock bool:TF2_IsPlayerInCondition(client, TFCond:cond) return true; } } + else + { + new bit = (1 << (_:cond - 96)); + if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx3") & bit) == bit) + { + return true; + } + } return false; } diff --git a/env/include/timers.inc b/env/include/timers.inc index dbaeb14..1f6382a 100644 --- a/env/include/timers.inc +++ b/env/include/timers.inc @@ -45,7 +45,7 @@ /** * Any of the following prototypes will work for a timed function. */ -funcenum Timer +typeset Timer { /** * Called when the timer interval has elapsed. @@ -55,7 +55,7 @@ funcenum Timer * @return Plugin_Stop to stop a repeating timer, any other value for * default behavior. */ - Action:public(Handle:timer, Handle:hndl), + function Action(Handle timer, Handle hndl); /** * Called when the timer interval has elapsed. @@ -65,7 +65,7 @@ funcenum Timer * @return Plugin_Stop to stop a repeating timer, any other value for * default behavior. */ - Action:public(Handle:timer, any:data), + function Action(Handle timer, any data); /** * Called when the timer interval has elapsed. @@ -74,7 +74,7 @@ funcenum Timer * @return Plugin_Stop to stop a repeating timer, any other value for * default behavior. */ - Action:public(Handle:timer), + function Action(Handle timer); }; /** @@ -177,7 +177,7 @@ native Float:GetTickInterval(); * the map yet), then this will be called once the server begins ticking, even * if there is no time limit set. */ -forward OnMapTimeLeftChanged(); +forward void OnMapTimeLeftChanged(); /** * Returns whether or not the server is processing frames or not. diff --git a/env/include/topmenus.inc b/env/include/topmenus.inc index 9bc4d7f..902b4ff 100644 --- a/env/include/topmenus.inc +++ b/env/include/topmenus.inc @@ -1,5 +1,5 @@ /** - * vim: set ts=4 : + * vim: set ts=4 sw=4 tw=99 noet: * ============================================================================= * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. * ============================================================================= @@ -38,25 +38,25 @@ #include /** - * Actions a top menu will take on an object. + * Actions a top menu will take on an topobj. */ -enum TopMenuAction +enum TopMenuAction: { /** * An option is being drawn for a menu (or for sorting purposes). * - * INPUT : TopMenu Handle, object ID, client index. + * INPUT : TopMenu Handle, topobj ID, client index. * OUTPUT: Buffer for rendering, maxlength of buffer. */ TopMenuAction_DisplayOption = 0, /** - * The title of a menu is being drawn for a given object. + * The title of a menu is being drawn for a given topobj. * * Note: The Object ID will be INVALID_TOPMENUOBJECT if drawing the * root title. Otherwise, the Object ID is a category. * - * INPUT : TopMenu Handle, object ID, client index. + * INPUT : TopMenu Handle, topobj ID, client index. * OUTPUT: Buffer for rendering, maxlength of buffer. */ TopMenuAction_DisplayTitle = 1, @@ -66,14 +66,14 @@ enum TopMenuAction * * The Object ID will always be an item (not a category). * - * INPUT : TopMenu Handle, object ID, client index. + * INPUT : TopMenu Handle, topobj ID, client index. */ TopMenuAction_SelectOption = 2, /** * A menu option is being drawn and its flags can be overridden. * - * INPUT : TopMenu Handle, object ID, client index. + * INPUT : TopMenu Handle, topobj ID, client index. * OUTPUT: The first byte of the 'buffer' string should be set * to the desired flags. By default, it will contain * ITEMDRAW_DEFAULT. @@ -81,18 +81,18 @@ enum TopMenuAction TopMenuAction_DrawOption = 3, /** - * Called when an object is being removed from the menu. + * Called when an topobj is being removed from the menu. * This can be used to clean up data stored in the info string. * - * INPUT : TopMenu Handle, object ID. + * INPUT : TopMenu Handle, topobj ID. */ TopMenuAction_RemoveObject = 4, }; /** - * Top menu object types. + * Top menu topobj types. */ -enum TopMenuObjectType +enum TopMenuObjectType: { TopMenuObject_Category = 0, /**< Category (sub-menu branching from root) */ TopMenuObject_Item = 1 /**< Item on a sub-menu */ @@ -101,7 +101,7 @@ enum TopMenuObjectType /** * Top menu starting positions for display. */ -enum TopMenuPosition +enum TopMenuPosition: { TopMenuPosition_Start = 0, /**< Start/root of the menu */ TopMenuPosition_LastRoot = 1, /**< Last position in the root menu */ @@ -109,9 +109,9 @@ enum TopMenuPosition }; /** - * Top menu object tag for type checking. + * Top menu topobj tag for type checking. */ -enum TopMenuObject +enum TopMenuObject: { INVALID_TOPMENUOBJECT = 0, }; @@ -121,18 +121,138 @@ enum TopMenuObject * * @param topmenu Handle to the TopMenu. * @param action TopMenuAction being performed. - * @param object_id The object ID (if used). + * @param topobj_id The topobj ID (if used). * @param param Extra parameter (if used). * @param buffer Output buffer (if used). * @param maxlength Output buffer (if used). * @noreturn */ -functag public TopMenuHandler(Handle:topmenu, - TopMenuAction:action, - TopMenuObject:object_id, - param, - String:buffer[], - maxlength); +typedef TopMenuHandler = function void ( + Handle topmenu, + TopMenuAction action, + TopMenuObject topobj_id, + int param, + char[] buffer, + int maxlength +); + +// TopMenu objects are used for constructing multi-layer menus. Currently, they +// support at most two levels. The first level of items are called "categories". +methodmap TopMenu < Handle +{ + // Creates a new TopMenu. + // + // @param handler Handler to use for drawing the root title. + // @return A new TopMenu. + public native TopMenu(TopMenuHandler handler); + + // Returns a TopMenu handle from a generic handle. If the given handle is + // a TopMenu, the handle is simply casted back. Otherwise, an error is + // raised. + public static native TopMenu FromHandle(Handle handle); + + // Re-sorts the items in a TopMenu via a configuration file. + // + // The format of the configuration file should be a Valve Key-Values + // formatted file that SourceMod can parse. There should be one root + // section, and one sub-section for each category. Each sub-section's + // name should match the category name. + // + // Each sub-section may only contain key/value pairs in the form of: + // key: "item" + // value: Name of the item as passed to AddToTopMenu(). + // + // The TopMenu will draw items in the order declared in the configuration + // file. If items do not appear in the configuration file, they are sorted + // per-player based on how the handler function renders for that player. + // These items appear after the configuration sorted items. + // + // @param topmenu TopMenu Handle. + // @param file File path. + // @param error Error buffer. + // @param maxlength Maximum size of the error buffer. Error buffer + // will be filled with a zero-terminated string if + // false is returned. + // @return True on success, false on failure. + public native bool LoadConfig(const char[] file, char[] error, int maxlength); + + // Adds a category to a TopMenu. + // + // @param name Object name (MUST be unique). + // @param handler Handler for topobj. + // @param cmdname Command name (for access overrides). + // @param flags Default access flags. + // @param info_string Arbitrary storage (max 255 bytes). + // @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on failure. + public native TopMenuObject AddCategory(const char[] name, TopMenuHandler handler, + const char[] cmdname = "", int flags = 0, + const char[] info_string = ""); + + // Adds an item to a TopMenu category. + // + // @param name Object name (MUST be unique). + // @param handler Handler for topobj. + // @param category The object of the parent category for the item. + // @param cmdname Command name (for access overrides). + // @param flags Default access flags. + // @param info_string Arbitrary storage (max 255 bytes). + // @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on failure. + public native TopMenuObject AddItem(const char[] name, TopMenuHandler handler, + TopMenuObject parent, const char[] cmdname = "", + int flags = 0, const char[] info_string = ""); + + // Retrieves the info string of a top menu item. + // + // @param parent TopMenuObject ID. + // @param buffer Buffer to store info string. + // @param maxlength Maximum size of info string. + // @return Number of bytes written, not including the null terminator. + public native int GetInfoString(TopMenuObject parent, char[] buffer, int maxlength); + + // Retrieves the name string of a top menu item. + // + // @param topobj TopMenuObject ID. + // @param buffer Buffer to store info string. + // @param maxlength Maximum size of info string. + // @return Number of bytes written, not including the null terminator. + public native int GetObjName(TopMenuObject topobj, char[] buffer, int maxlength); + + // Removes an topobj from a TopMenu. + // + // Plugins' topobjs are automatically removed all TopMenus when the given + // plugin unloads or pauses. In the case of unpausing, all items are restored. + // + // @param topobj TopMenuObject ID. + public native void Remove(TopMenuObject topobj); + + // Displays a TopMenu to a client. + // + // @param client Client index. + // @param position Position to display from. + // @return True on success, false on failure. + public native bool Display(int client, TopMenuPosition position); + + // Displays a TopMenu category to a client. + // + // @param category Category topobj id. + // @param client Client index. + // @return True on success, false on failure. + public native bool DisplayCategory(TopMenuObject category, int client); + + // Finds a category's topobj ID in a TopMenu. + // + // @param name Object's unique name. + // @return TopMenuObject ID on success, or + // INVALID_TOPMENUOBJECT on failure. + public native TopMenuObject FindCategory(const char[] name); + + // Set the menu title caching behaviour of the TopMenu. By default titles + // are cached to reduce overhead. If you need dynamic menu titles which + // change each time the menu is displayed to a user, set this to false. + property bool CacheTitles { + public native set(bool value); + } +}; /** * Creates a TopMenu. @@ -140,7 +260,7 @@ functag public TopMenuHandler(Handle:topmenu, * @param handler Handler to use for drawing the root title. * @return A new TopMenu Handle, or INVALID_HANDLE on failure. */ -native Handle:CreateTopMenu(TopMenuHandler:handler); +native TopMenu CreateTopMenu(TopMenuHandler handler); /** * Re-sorts the items in a TopMenu via a configuration file. @@ -169,16 +289,16 @@ native Handle:CreateTopMenu(TopMenuHandler:handler); * @return True on success, false on failure. * @error Invalid TopMenu Handle. */ -native bool:LoadTopMenuConfig(Handle:topmenu, const String:file[], String:error[], maxlength); +native bool LoadTopMenuConfig(Handle topmenu, const char[] file, char[] error, int maxlength); /** - * Adds an object to a TopMenu. + * Adds an topobj to a TopMenu. * * @param topmenu TopMenu Handle. * @param name Object name (MUST be unique). * @param type Object type. - * @param handler Handler for object. - * @param parent Parent object ID, or INVALID_TOPMENUOBJECT for none. + * @param handler Handler for topobj. + * @param parent Parent topobj ID, or INVALID_TOPMENUOBJECT for none. * Items must have a category parent. * Categories must not have a parent. * @param cmdname Command name (for access overrides). @@ -188,14 +308,14 @@ native bool:LoadTopMenuConfig(Handle:topmenu, const String:file[], String:error[ * failure. * @error Invalid TopMenu Handle. */ -native TopMenuObject:AddToTopMenu(Handle:topmenu, - const String:name[], - TopMenuObjectType:type, - TopMenuHandler:handler, - TopMenuObject:parent, - const String:cmdname[]="", - flags=0, - const String:info_string[]=""); +native TopMenuObject AddToTopMenu(Handle topmenu, + const char[] name, + TopMenuObjectType type, + TopMenuHandler handler, + TopMenuObject parent, + const char[] cmdname="", + int flags=0, + const char[] info_string=""); /** * Retrieves the info string of a top menu item. @@ -208,33 +328,33 @@ native TopMenuObject:AddToTopMenu(Handle:topmenu, * null terminator. * @error Invalid TopMenu Handle or TopMenuObject ID. */ -native GetTopMenuInfoString(Handle:topmenu, TopMenuObject:parent, String:buffer[], maxlength); +native int GetTopMenuInfoString(Handle topmenu, TopMenuObject parent, char[] buffer, int maxlength); /** * Retrieves the name string of a top menu item. * * @param topmenu TopMenu Handle. - * @param object TopMenuObject ID. + * @param topobj TopMenuObject ID. * @param buffer Buffer to store info string. * @param maxlength Maximum size of info string. * @return Number of bytes written, not including the * null terminator. * @error Invalid TopMenu Handle or TopMenuObject ID. */ -native GetTopMenuObjName(Handle:topmenu, TopMenuObject:object, String:buffer[], maxlength); +native int GetTopMenuObjName(Handle topmenu, TopMenuObject topobj, char[] buffer, int maxlength); /** - * Removes an object from a TopMenu. + * Removes an topobj from a TopMenu. * - * Plugins' objects are automatically removed all TopMenus when the given + * Plugins' topobjs are automatically removed all TopMenus when the given * plugin unloads or pauses. In the case of unpausing, all items are restored. * * @param topmenu TopMenu Handle. - * @param object TopMenuObject ID. + * @param topobj TopMenuObject ID. * @noreturn * @error Invalid TopMenu Handle. */ -native RemoveFromTopMenu(Handle:topmenu, TopMenuObject:object); +native void RemoveFromTopMenu(Handle topmenu, TopMenuObject topobj); /** * Displays a TopMenu to a client. @@ -245,21 +365,21 @@ native RemoveFromTopMenu(Handle:topmenu, TopMenuObject:object); * @return True on success, false on failure. * @error Invalid TopMenu Handle or client not in game. */ -native bool:DisplayTopMenu(Handle:topmenu, client, TopMenuPosition:position); +native bool DisplayTopMenu(Handle topmenu, int client, TopMenuPosition position); /** * Displays a TopMenu category to a client. * * @param topmenu TopMenu Handle. - * @param category Category object id. + * @param category Category topobj id. * @param client Client index. * @return True on success, false on failure. * @error Invalid TopMenu Handle or client not in game. */ -native bool:DisplayTopMenuCategory(Handle:topmenu, TopMenuObject:category, client); +native bool DisplayTopMenuCategory(Handle topmenu, TopMenuObject category, int client); /** - * Finds a category's object ID in a TopMenu. + * Finds a category's topobj ID in a TopMenu. * * @param topmenu TopMenu Handle. * @param name Object's unique name. @@ -267,18 +387,21 @@ native bool:DisplayTopMenuCategory(Handle:topmenu, TopMenuObject:category, clien * INVALID_TOPMENUOBJECT on failure. * @error Invalid TopMenu Handle. */ -native TopMenuObject:FindTopMenuCategory(Handle:topmenu, const String:name[]); +native TopMenuObject FindTopMenuCategory(Handle topmenu, const char[] name); /** - * Change the menu title caching behaviour of the TopMenu. By default the titles are cached to reduce overhead. - * If you need dynamic menu titles, which can change everytime the menu is displayed to a user, set this to false. + * Change the menu title caching behaviour of the TopMenu. By default the + * titles are cached to reduce overhead. If you need dynamic menu titles, which + * can change everytime the menu is displayed to a user, set this to false. * * @param topmenu TopMenu Handle. - * @param cache_titles Cache the menu titles and don't call the handler with TopMenuAction_DisplayTitle everytime the menu is drawn? + * @param cache_titles Cache the menu titles and don't call the handler with + * TopMenuAction_DisplayTitle everytime the menu is drawn? * @noreturn * @error Invalid TopMenu Handle */ -native SetTopMenuTitleCaching(Handle:topmenu, bool:cache_titles); +native void SetTopMenuTitleCaching(Handle topmenu, bool cache_titles); + /** * Do not edit below this line! diff --git a/env/include/usermessages.inc b/env/include/usermessages.inc index 5a9538d..7d7c9e2 100644 --- a/env/include/usermessages.inc +++ b/env/include/usermessages.inc @@ -70,6 +70,29 @@ enum UserMessageType */ native UserMessageType:GetUserMessageType(); +stock Protobuf UserMessageToProtobuf(Handle msg) +{ + if (GetUserMessageType() != UM_Protobuf) + return null; + return Protobuf:msg; +} + +// Make sure to only call this on writable buffers (eg from StartMessage). +stock BfWrite UserMessageToBfWrite(Handle msg) +{ + if (GetUserMessageType() == UM_Protobuf) + return null; + return BfWrite:msg; +} + +// Make sure to only call this on readable buffers (eg from a message hook). +stock BfWrite UserMessageToBfRead(Handle msg) +{ + if (GetUserMessageType() == UM_Protobuf) + return null; + return BfRead:msg; +} + /** * Returns the ID of a given message, or -1 on failure. * @@ -128,27 +151,48 @@ native Handle:StartMessageEx(UserMsg:msg, clients[], numClients, flags=0); native EndMessage(); /** - * Called when a message is hooked - * - * @param msg_id Message index. - * @param msg Handle to the input bit buffer or protobuf. - * @param players Array containing player indexes. - * @param playersNum Number of players in the array. - * @param reliable True if message is reliable, false otherwise. - * @param init True if message is an initmsg, false otherwise. - * @return Ignored for normal hooks. For intercept hooks, Plugin_Handled - * blocks the message from being sent, and Plugin_Continue - * resumes normal functionality. - */ -functag public Action:MsgHook(UserMsg:msg_id, Handle:msg, const players[], playersNum, bool:reliable, bool:init); + * Hook function types for user messages. +*/ +typeset MsgHook +{ + /** + * Called when a bit buffer based usermessage is hooked + * + * @param msg_id Message index. + * @param msg Handle to the input bit buffer. + * @param players Array containing player indexes. + * @param playersNum Number of players in the array. + * @param reliable True if message is reliable, false otherwise. + * @param init True if message is an initmsg, false otherwise. + * @return Ignored for normal hooks. For intercept hooks, Plugin_Handled + * blocks the message from being sent, and Plugin_Continue + * resumes normal functionality. + */ + function Action (UserMsg msg_id, BfRead msg, const int[] players, int playersNum, bool reliable, bool init); + /** + * Called when a protobuf based usermessage is hooked + * + * @param msg_id Message index. + * @param msg Handle to the input protobuf. + * @param players Array containing player indexes. + * @param playersNum Number of players in the array. + * @param reliable True if message is reliable, false otherwise. + * @param init True if message is an initmsg, false otherwise. + * @return Ignored for normal hooks. For intercept hooks, Plugin_Handled + * blocks the message from being sent, and Plugin_Continue + * resumes normal functionality. + */ + function Action (UserMsg msg_id, Protobuf msg, const int[] players, int playersNum, bool reliable, bool init); +}; /** * Called when a message hook has completed. * * @param msg_id Message index. * @param sent True if message was sent, false if blocked. + * @noreturn */ -functag public MsgPostHook(UserMsg:msg_id, bool:sent); +typedef MsgPostHook = function void (UserMsg msg_id, bool sent); /** * Hooks a user message. @@ -162,7 +206,7 @@ functag public MsgPostHook(UserMsg:msg_id, bool:sent); * @noreturn * @error Invalid message index. */ -native HookUserMessage(UserMsg:msg_id, MsgHook:hook, bool:intercept=false, MsgPostHook:post=MsgPostHook:-1); +native HookUserMessage(UserMsg:msg_id, MsgHook:hook, bool:intercept=false, MsgPostHook:post=INVALID_FUNCTION); /** * Removes one usermessage hook. diff --git a/env/include/version.inc b/env/include/version.inc index b69d5c7..3982558 100644 --- a/env/include/version.inc +++ b/env/include/version.inc @@ -42,8 +42,8 @@ #define SOURCEMOD_V_REV 0 #define SOURCEMOD_V_CSET "0" #define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */ -#define SOURCEMOD_V_MINOR 6 /**< SourceMod Minor version */ +#define SOURCEMOD_V_MINOR 7 /**< SourceMod Minor version */ #define SOURCEMOD_V_RELEASE 0 /**< SourceMod Release version */ -#define SOURCEMOD_VERSION "1.6.0-manual" /**< SourceMod version string (major.minor.release-tag) */ +#define SOURCEMOD_VERSION "1.7.0-manual" /**< SourceMod version string (major.minor.release-tag) */ #endif diff --git a/env/include/version_auto.inc b/env/include/version_auto.inc index 16dd8d2..2e88c33 100644 --- a/env/include/version_auto.inc +++ b/env/include/version_auto.inc @@ -5,11 +5,11 @@ #define _auto_version_included #define SOURCEMOD_V_TAG "" -#define SOURCEMOD_V_CSET "95ab81f" +#define SOURCEMOD_V_CSET "fd0aaf9" #define SOURCEMOD_V_MAJOR 1 -#define SOURCEMOD_V_MINOR 6 +#define SOURCEMOD_V_MINOR 7 #define SOURCEMOD_V_RELEASE 0 -#define SOURCEMOD_V_REV 4525 +#define SOURCEMOD_V_REV 5150 -#define SOURCEMOD_VERSION "1.6.0" +#define SOURCEMOD_VERSION "1.7.0" \ No newline at end of file diff --git a/env/linux/bin/spcomp-1.7.0 b/env/linux/bin/spcomp-1.7.0 new file mode 100755 index 0000000000000000000000000000000000000000..3f519d11ea7bbdc670db3a507e89d0c65741ccd7 GIT binary patch literal 313663 zcmeEveSB2K)&JeFfdzs$Xw-;70xlZl#Y90#AsS%w0z^c`h>9dgh)@GWau-lTNZeiJ za#^I+`q`#iQm-#6`OGADd^7yfdk}uZ5Pbn%YMcw@P0P|z#P5w};T8;WvKkV`FlYu;b z?EEW`5Ab_`HvRK!=G=IGP1VqvIrIFBht5b2+RwnglJU*rP zoQ6+7e9p%w8y~2cG7%sCosAFFTj&yD{+%oX@hx-=G4=!dwQ-D+?U|9DLY-l~{M*sg zWA_6y|NiWtzALiUPkg_50y}aALn?qki^<{g;hMc~X7BB>46udZ8rv^CbK~CBc)D;NK^~Taw`BB>Lwk z<#Wv1f7yuKla#+Asr-9M@WV-Pg-r}0>Ge#aSDys$NrKNzqIWbYKO-ssv84R|N$@*K z@PkS4uae-ClVI9$`;YqeaT2^RiJy^4a8?pLCkfu01UDzqUz7xoOTs@d37(Jydy?Q4 zN%Sg{^4BE6c}ehpY`HB_apUjckO|98kgkWgO1 zTs@a_^hHWV#Z7bP&#S1@W-QPuDwK)|3oEXib<>FeZbik+#fxX$IA>wr z1&G(pshG*CDzsZ`XI0FZS3SQ-srVjZUPZ;ix&I7i-o+rFOb^`8v>Cq~t*x3fufkt9 zt4gV^uJPB+R_e3`Giz^E>S`CvnWt4N)$?m-&12%cnR9CyE|@ucfikCVMosPP8IT!L zs{FM|wKl7!Mxvqcf>|?aYUa;WX52V`fu_uzHJ4?y`8D$w&00XDYHiNkS<2j-AzKig zQ&(3zW9BSoX!CEDL5)&9Yd&hfX_huqeAg*6B~4(}fFlsCo23yM|G~$s1q*RSWCpS?#JoX{JB`^ZlAqUF&B>_^uQDq7l_I zYv$L@QWjbT<~r4*3f4PwM%^sRWWlVt^B2xSEBv*!Y+l{W8S|=1mlZ=2Rqz9ER;m{* zn4`^7s+pk7(B{tpPiT=41c^aF)m1{)x71N+6%~u2i9&dS{EV41XVuk-dIi^P)_gXc z{b?!f+!=Gwa+$HP+U~#wvt}tJW#h+=tGHlTo-%Ig)G=enSL6-5&`G5KnDV`UNc>)! z#A13Ek!NE_$WHw}t^ZC+Dtuu#sJrlS^)}=+@e(FW6O>(m%c51Bj&&Q zmz&}4x|J`S{1oM|m5;zG-$j&XnRG!fMfujkPkYqk=?W*2HYXJh5p72*94p$KR5)I= z9jS0+X>(HHjAa488yL)H2pV37aIkV1!srZP2##_Y!r2y^0|m``HZPIMy(PvslXzj=9DV z4(VcsaE|I3!trio2*)(Y5Q~dt4B=p|V3@5as~GlIlzSNtP?Y-_!qI$yAspG&4B@0d z#PA$NS;z2PMOn`<2TL`EgA`>W!}AnnGsD4(@)ScD_hyDzbZlpcNni&-UF~q{9ogo$*-!kMP z=`n;@T(}ux5#?csg;5&ALg)#@F<7H99E&v$LpWzy41MT-hDGRqhQ*3C>$2zUtLY{IJroJ%-|@G1chCk%-y(MAD}Bn$~D(OLnI zCR|9kQox0TO9@XFu#fO$!i54ZB|MdIu7Jx3R}#(^@MOYlP&8e@QwY}*Rs=ki@M6M; zjw4~oG##d2_GV? z2>5=&?Sv0~$M!!!Sb<529uV+q!XCoA1pE-;bi&O7UPm~S@CE^|C!9@qwSYGe&LO-? zz#9qY5^famX2K&0*9!P4!i9t@1>8)SZgzCCfVUH#Ot?_MI|xrDoGaiL2v-u$7Vs{@ zvk9jQ_%*_{gcSkrA-tIIA&!rMZxL=Jd_cel2rnbNOTZrxUPZWBz$W4Q32zYar-WA% zUM=85gx3*XCE%|JZy?+#;C8~B3D*kvTf)tRD+Nr;Fnb5#$pWT@n7xZ|p@3;AX73@K zD_~lT*#`(`3z(K;wn;c$z_cK<4-r-bOiMDmo$#S!Y(Fi^Y|MRVzkq33W^X>+075QJ?4H?@YSkLf14*_0vlS2uRwd( zMJZoyqvk82X6$VH;X5o#P1u(A^crjBd{!;{bk6Di(jhx`V`ch=8d4q>wp+L69^eVNC!e&z@d!{kCegALf;-MT2ULr@W0|HjJiI(E4bv z`Sa>7N?sdU8R8zwW(6kYY@au~Kq*9{f@dQQSY+`va`6yI>yc208tm@mh_xp%Kv^*_ zpa|Q6Z~zc1Xkn3O1K%O(MVSO#4`PZ_=J+>One|pGJP!q0fGQNTKQi@gp?zv_B|v?M zU`FJ0W6n4?x_vmLmZsN;P9$}aeLo}?Xm|NfH^#a3aUR#R`ps!%Xf=zy6PsvsLCN!s ziEiU6&!FcZ56avvJ48|_2kS-`Dn<>;kPM=|Sv<>Yc4r83S1>#j*j@u^->^;X*9a~Z zXip||Av@Hj`HZfjo=I+_{0Hj!jMTf5xSO$JQP0Cisf(G@qpPjRw(9C(YCr0tqKNKH zrvMX0)z%JHBIwNy?FQ&dHYgJ1AMCkLKtG0Ljq`TZ-!`ZIZul1;#`h?3}%gzcM>!IbUoAw2c_45D2xYjf3+O)bHb<^O$cRl>s zjw{cCn>x)4x`m3w*pRen!zx~R=@U$D0{8#G^nfuy+JxyAHiX-r^pj0S3 z_;RYP}98TYpBGv2yKSd5FD952cha!kcHbA;~6~04H5Yi z1=4UErS2}YHKm?yt0e3hRhp*W+pKPCM&I(!>EGz>ccfq??ZB430#}(7b7-gEgU&TW zz(UQ@xiaKn4+{OT@PWhOz$7XHL$k%k?Nr~sK&Semg8?U4e9^yCyjkEoGqhW8(Jp~@ zXXyX9T
?_l++pR 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

N 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 A`Tzg` literal 0 HcmV?d00001 diff --git a/env/win32/bin/spcomp-1.7.0.exe b/env/win32/bin/spcomp-1.7.0.exe new file mode 100644 index 0000000000000000000000000000000000000000..782925ceb86ee47b1680dcc0abb85408cd7c7461 GIT binary patch literal 378368 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