From 388711e96955f48779ef42a321b8f2ec3a02386f Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 28 Aug 2006 11:08:18 +0000 Subject: [PATCH] Synced bcompat tree additions and fixes found so far --- amxmodx/CLang.cpp | 9 +++-- amxmodx/CLang.h | 6 ++-- amxmodx/JIT/amxjitsn.o | Bin 27168 -> 41184 bytes amxmodx/JIT/amxjitsn.obj | Bin 40204 -> 40212 bytes amxmodx/amx.cpp | 1 + amxmodx/amx.h | 1 + amxmodx/amxjitsn.asm | 4 ++- amxmodx/amxmodx.cpp | 36 ++++++++++++++++++++ amxmodx/amxxfile.h | 1 + amxmodx/messages.h | 2 ++ amxmodx/modules.cpp | 29 ++++++++++++++++ amxmodx/natives.cpp | 68 ++++++++++++++++++++++++++++++++++++- dlls/engine/engine.h | 11 ++++++ dlls/engine/entity.cpp | 28 +++++++-------- plugins/include/lang.inc | 12 ++++++- plugins/include/string.inc | 9 +++++ 16 files changed, 196 insertions(+), 21 deletions(-) diff --git a/amxmodx/CLang.cpp b/amxmodx/CLang.cpp index ee041185..2a7263fb 100755 --- a/amxmodx/CLang.cpp +++ b/amxmodx/CLang.cpp @@ -256,9 +256,9 @@ int CLangMngr::GetKeyEntry(const char *key) return val.index; } -int CLangMngr::AddKeyEntry(String &key) +int CLangMngr::AddKeyEntry(const char *key) { - keytbl_val val; + keytbl_val val; val.index = static_cast(KeyList.size()); String *pString = new String(key); @@ -269,6 +269,11 @@ int CLangMngr::AddKeyEntry(String &key) return val.index; } +int CLangMngr::AddKeyEntry(String &key) +{ + return AddKeyEntry(key.c_str()); +} + int CLangMngr::GetKeyEntry(String &key) { keytbl_val &val = KeyTable[key]; diff --git a/amxmodx/CLang.h b/amxmodx/CLang.h index bb58e2ba..a6aea58e 100755 --- a/amxmodx/CLang.h +++ b/amxmodx/CLang.h @@ -127,9 +127,11 @@ class CLangMngr public: void AddEntry(int key, const char *definition); }; - +public: // Merge definitions into a language void MergeDefinitions(const char *lang, CQueue &tmpVec); + +private: // strip lowercase; make lower if needed static size_t strip(char *str, char *newstr, bool makelower = false); @@ -160,11 +162,11 @@ public: // Get index int GetKeyEntry(String &key); int GetKeyEntry(const char *key); - int GetKeyIndex(const char *key); // Get key from index const char *GetKey(int key); // Add key int AddKeyEntry(String &key); + int AddKeyEntry(const char *key); // Get the number of languages int GetLangsNum(); diff --git a/amxmodx/JIT/amxjitsn.o b/amxmodx/JIT/amxjitsn.o index d93eedbd25155eedc6df4aa7c10a94456f3b7db5..4b48453124d28e161a199b2a8e920c6d8f682a03 100755 GIT binary patch literal 41184 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 literal 27168 zcmb823w#yD-TqHV&|tx!f`Z~J3aC*;plCs;5|Tgyxj+&wLF5>c0|as-C*h*_iU!o< zA%&_~tyWa<)z(X~Z(FIC(;zBZZ>g6S)KcVc<>I9vT2RsRf1cgvw^<2Ec+aPkXTHDr z&Ft*%?Ck8!V6V^28Jm!h5U^iDATiKFfxu`b40H7SK$k$0x&EJ&WilM6TpIvg5?hMs zuITYl`ce67!r|^c(~a}59laak^t0d9=L7<089*)VRK$IU2`qzO#!>wG!q&-WZ-!rY z9GCUog2H%Q*71AN@GgG%m!rfC}8QG25 zQX2XoV>Ic6=+YCC8a5?2Y)Og+QV&JO9d^@eKT53Z8cpw$up8#B7p8ZOr1yzl+c)(; z(Fy%izn&cppU~x%l;u60GDfyIC5=otn7V(_CmUI60s@qcaPbF>+Ozi4{Wx>RWFJpB0+?|Nip!{+1z>qnl+cAe5N8m4%^ z=*^3#3_F?5Q^2tz{AtJe7v{|S5xb#%=LU1$K<6jgcfOs@vA5~Oo4~pz9a-0S&*U@s zyd96~Mw3?X5nR^;_a$}${``qo<*29VWgB1>N@J!gn8}XS)^%}?wQd3ZtK0W?FHMir zcqt#C|JwHb-K*o4|5y6I*}lJXfue5t>;PkN`m-?~^`tl2xelc7h4|C9@6+ZxjlNUq z%V)LiauXAHmN(IRMZ4Zk$%!Y?`w#T~UwXIM79(C;+)3vh?K^vIF$G;htQ-EcQ?l0< zN74DR_MP3f7^IW6kE683u4s#qB;N0aLkTG>`2LIC?$6VzO~rdM&n-!(H5^JxS?)ZX zFEGOiZCz|P!)zQS_SrF%?AB)8S?IT7XX1}n`&KoH{+72ql5{ceOg{Z{kHx=-<9|K< zuWR4`QD6DLrT^o{;@{)q*t_)WsteNUsy8Ox=snH1rYAjk0@{Bp8GqV-`Zw)3IicCh z6uX4ZxRyunVNgDcEn%@idLkVCIdF<~-Vhh!68@YSR=1ns5?&E6!}H9ri5c2_8gBSP zkEQbxIR_PqeZdS?`PMfzt%uVR&!+2{DECizfR0}K$f1Tqol;gfg^r_VJB6ZoC#I|z zz(Q;3+Gd6E=89(aXWL%UkKXsw8@IEKD(p)|B|4|9aH{(necP;VG$HcSFX0h8KsQ{3 zqZes?Udy@lLqFE`xkb`&Zm6wu8S>h7Z5%e-sjPDume3V7IeIN3nCeH`QC~9fR}VFaM>xP7 zpLdwU?Q;gjdZ8X|Uy$f=7%j#|weNE(e0byvxW(qum!CLCt!w0q8(!k6rG69d*`31^ zWP6C&*0!51Iw|Rfv?OMX_w0deu{Y?>k2fCWXtyz%8W|KB5;>4MBKA$YzRt)PClKLi zGj=ZCE?#48Rc?GhU)K2|j-^oZNYVw3H#@JRj0=()oNuG#*j$#-W`l6TsTOy!i*m9G4LB9dH}VX!9xGqlV-b(3sIHnYI4El<>ntC;1OugsT4uE$!&{ zx=T~aa-L;71+3|)fE67S@V9mg7}4Be4Nk+`v+Ywr0Ugy~T1N%k*ug2>-BAHIbx^>2 z9TjkM2L+sg2dUj_(9l5vGde0@Wd{ZPs-psa)E3d{O?K*U6j(ygy!;t3Ki6@~J_R?r|(g(NpZWJ_`IeW#thHht48 z_MHEat!~$dW@mCT<&LJ<$H(NjrYV+!$!71Y+br?6rr7Xfa=f!CR&q>^zi5ixdQ6VD zH^u(lnIihXcQj`uaiI`=r1vtHX28+1&LziMKmxEj8(AT!`4bo8OnPuXbgCNa-1 znCEupvC&_v$0D`qhHsdSxAi%Cw)s^vI`)rt)5q|L$7AL^)){}i7TM~Eac@Rx7@dc< z@9ebm*i<^%o2gYhiYFZ(TSAXE>z)<6yWRBhtovrT#5U2-o~G7yUuC_>K01HizH^k$ zu~V=>(oWsGa^`g16>y6El%8$gUH2<5-t&CCP@IpvF!L-praS{J&%?~~&@ts1Y)Q1)iMUpJU*ZgGVtvBoQ4w4z@N6;;d4%op2L(Qk2!MN&Ed=}#Cr}$j#vRb z?XIOxf+;IoDHta}@Y}&B;z;7ZW zW21Vhj##(~Ct=zj3nkGL)AZeP+@sO4{M5tWhL@5fOYy1qV)CQe^&dx^@4$G!c+U*? z+BDAC+!d1;^H^M)V-IKj1z&cN<089bYmUwJ)W}}mtXJS2d)c3*)nnk?ti)87KPYy9 zu6z?6^&^=jp3xg6o{m3l-~MOZ+dm4Y=zP&1d0X)L{XK_F5tq5VutZSkTy{6N_Wu=VkJdrY{ za~5PH%bXc3zH0O8)vFQx!7mPq^N*wP_+99zpFmiQumWKQo}IQg6KLGduc%Luy> zx?*%W7$JnP24M@r*9d1~o+u4rF~V;V-bXkdlPd!e79!k_upQwHys~E?{0d<^!dZCM zuSR$PVJAXAwEZ%KhY&tSI1is>IS307?nG!p*o)8u-zb+Olpx%M@EF3I2;U%_hXH&R zLOH@pgvSxyK=?PpDHz!fLzs+k1HuM`zao5r&=2FkB7`Lf_aSUS*oV*?ZEXy~e1tm? zooLRlDdvZ0hVe`uQCFDbBJPmF6yY{h@#AZohDU`{P-N z^c4kA|6IiT`?vt{^L<>5_&^_*B0kE;m5Ar~xDN4&K3;}+k&jm(KF!CsB0j^%YY@NM z$M+*%=Ho{ZpX=kN5U=p@^N82@_;oMN$o}}>kKliR{n!5^F#ApSw?F;`BIr8w+wXL8 z{`-@RTaK>5OFs$hzh9?<{rBq(u>XFY1NPsqRIvYk4F>nM;!*z*VE_FZ1NPsqT(JLs zO#u(~<(~l_=Hofw;XYmnZu#wxH-KAA`{Szt=$7@{ALsIYq9N+XeOdnN`DZY?W6z&! z`2Op=6YRgf2f+U8n}~y$^=u>X3cg8k<^k~e2`Oa2MuWi7k_oMDJNeLZ-Ik5_^DjJm&sz&&6-qsEVd zpEE@M82Bw8zXERgbqc%-KF>3B3hV&0k8^*W0-u6g`ioA1gW&0wj4RO@Cx3&FPX^!Y zF9vhFit%M&=Nrs1bP9|G@9?Eh0&`qv{@gymO)16| zV2=5WuK{x(it)|h(LUyu0&YRE^k0HGHZ)!j=5`a~4d8oy90PNAiKYJq{DzO;1#?r0 zrGE(Kc+~haFgKAH9|Ci%YMg}5j+;h|Q@|X@8gl~zH;EWu0OlCicsQ7wLX0!PY!k-0 zU~UF6E&_8*Y&;Xpogc0pXSi<0kO0ef%1j->8=U4w!o)jNb?I`_*_SnEN1% zcZ2zDYrGH4y${9*!Tjzuj)S?g!T30owZO;S!Td(H^wYuI++f@f%o zS}<4ojT^xH<~NRlxsY#s8<_I}#`l1^PH(&p%((*NN5Nc%H~t-%^9aVzg1O3W{34ih z492|oTtqki8<_JC#yh}VBRAdy=G=tw7ho=d8?&u&-oiKm_l9fV#%w#B(=a{}%w=!m z9$?OQ8215l#oM?am~$b zZOm;uoO>}|1?D2Q@tt7K%NXAW<_fm)LtxI?7(WT-;4w!4w#sy%`a~T(dxgKpC z1al6|xE##oXyaNi=f{k%1#=bJxB<+$Gvh`uSDuaU1an@^_(3q2oQ)p`bI#3}^XFV~ zHhuxj`8ea(z+7lHejCiWI^%zUxvp&dF_`ms#$SNBoNW9Zm~(u_UC@_sCE2(KnDc+e zr-QkOY|OrmbA!g`g1L5VJP^!zL*rp!E*Tq-1anT&cnp{;#l~4+&NmuQ1apDdcq*84 zk;XH@To*Pj19P6zxDw3eVB>l)=P-@019KJFcsZE!o5qb`F8&&?0dwxt_*Y=A`5LbW zb6(VV1DH#^#?OE`XKK6!%;j9;x4@iFHU0;fi@3(Sz?^F}{sPQJT;s!F&chlfqOa!S zt#KDH=V*;j26MgE_;fJmZ;kmb;Zm*fg<#I@8eauE`pQ!JJDrUJB-NtnqR%=b4RHg1HE5d^?zP(8l+Gx!`L2Aei&h z#=ik`an<-qFz2p~xn9MERO2S_9v?R!!S8`N?`{4cfw_!o{27?@;l^KsxoB#fgm)L0 zMvc3HIfrh12AFf{#{IyYS2w;8%sF=BOTe6OH@*VQxp(6UV6KZAPXTjY-uP

D~lY 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 diff --git a/amxmodx/JIT/amxjitsn.obj b/amxmodx/JIT/amxjitsn.obj index 09f89a78ebd7008838a0e2cd937720bda34f2533..24682e0009dcb7981401fd089f48988f6f5bdd99 100755 GIT binary patch delta 819 zcmb`^KS%;m90&0CP8$w`tOf}Uf`+Cvm!QZXh!AQDa;UIG8zhYWNC*Y4fi=h#L@%<1Jqq?ZLspP2 zWS9~%gztCc2C?G03GpCaWE|N>u91xFYRK3Bafy-6t`=I9HzzblT*ii2m*~^n!yMS- z=`uSOh`DifS{D2uX>{1*|8zoMoorcH=NujODtzTEeJCB7@3@5kJxVL*wA6q<99Ve*etoYA^jBlbLs%G!{E{j2^ho&VF$uHA;_9R<{<3A pcqaj2$H!$AlA)yM7wv#<4W$Ffi$P8xg>Mn?-h^B-k%LRSRiCoXmQMfx delta 811 zcmb`^KS%;m90&0C&TBZ7{?OoHMd6(0Vgwch5<$_H1d${eLQzCXBn1wQ86;QHYD6JH z%b|!v%S8>fR3tStHH3x@8W@CJ-`AC|n@jkj_wjr0-TmHnR)}QddslSnGng*w8#*A{lBwtYnRpk%rrZL$mI^}?H^k3^KPVv&#o5DU9$PTiPj8Q_y z@%@fGAQoKPksid0gpdSshvby*_HyeVmk9OschQoPoYz{SC)g0{5`Butm;rk{U6!W< zD=u7}*91SvDLU-&e>%ah&V5Z-=NcXMDtzTf$g@H6khiFT${;ocewzki^Wb8(=+n_< zYHnePJ)+ytv7*DK$M3R3*etoYAR`p}bMk=LVQ?9OOc=xmVF$uHLCCH_Rw3-bcxMB` lj*rV8BuB}>FFFK08A>Tg(I97#^0x?hZ$fUFD6^Z%hELgSkj4N2 diff --git a/amxmodx/amx.cpp b/amxmodx/amx.cpp index a1392b6f..aed8616f 100755 --- a/amxmodx/amx.cpp +++ b/amxmodx/amx.cpp @@ -990,6 +990,7 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code) amx->cip = hdr->cip; amx->hea = hdr->hea; amx->stp = hdr->stp - sizeof(cell); + amx->hlw = hdr->hea; /* also put a sentinel for strings at the top the stack */ *(cell *)((char*)native_code + hdr->dat + hdr->stp - sizeof(cell)) = 0; amx->stk = amx->stp; diff --git a/amxmodx/amx.h b/amxmodx/amx.h index 5b1de9ce..fea1be8d 100755 --- a/amxmodx/amx.h +++ b/amxmodx/amx.h @@ -322,6 +322,7 @@ enum { #define AMX_FLAG_COMPACT 0x04 /* compact encoding */ #define AMX_FLAG_BYTEOPC 0x08 /* opcode is a byte (not a cell) */ #define AMX_FLAG_NOCHECKS 0x10 /* no array bounds checking; no STMT opcode */ +#define AMX_FLAG_OLDFILE 0x20 /* Old AMX Mod plugin */ #define AMX_FLAG_PRENIT 0x100 /* pre-initialized, do not check natives */ #define AMX_FLAG_NTVREG 0x1000 /* all native functions are registered */ #define AMX_FLAG_JITC 0x2000 /* abstract machine is JIT compiled */ diff --git a/amxmodx/amxjitsn.asm b/amxmodx/amxjitsn.asm index d9844cc2..ec0e2fe8 100755 --- a/amxmodx/amxjitsn.asm +++ b/amxmodx/amxjitsn.asm @@ -2122,7 +2122,9 @@ err_heaplow: _CHKMARGIN_HEAP: cmp esi,stp jg err_stacklow - cmp dword hea,0 + mov ebp,amx + mov ebp,[ebp+_hlw] + cmp dword hea,ebp jl err_heaplow ret diff --git a/amxmodx/amxmodx.cpp b/amxmodx/amxmodx.cpp index 52fc2b55..7e556844 100755 --- a/amxmodx/amxmodx.cpp +++ b/amxmodx/amxmodx.cpp @@ -4076,6 +4076,40 @@ static cell AMX_NATIVE_CALL amxx_setpl_curweap(AMX *amx, cell *params) return 1; } +static cell AMX_NATIVE_CALL CreateLangKey(AMX *amx, cell *params) +{ + int len; + const char *key = get_amxstring(amx, params[1], 0, len); + int suki = g_langMngr.GetKeyEntry(key); + + if (suki != -1) + { + return suki; + } + + return g_langMngr.AddKeyEntry(key); +} + +static cell AMX_NATIVE_CALL AddTranslation(AMX *amx, cell *params) +{ + int len; + const char *lang = get_amxstring(amx, params[1], 0, len); + int suki = params[2]; + const char *phrase = get_amxstring(amx, params[3], 1, len); + + CQueue queue; + sKeyDef def; + + def.definition = new String(phrase); + def.key = suki; + + queue.push(def); + + g_langMngr.MergeDefinitions(lang, queue); + + return 1; +} + AMX_NATIVE_INFO amxmodx_Natives[] = { {"abort", amx_abort}, @@ -4255,8 +4289,10 @@ AMX_NATIVE_INFO amxmodx_Natives[] = {"user_kill", user_kill}, {"user_slap", user_slap}, {"xvar_exists", xvar_exists}, + {"AddTranslation", AddTranslation}, {"ClearSyncHud", ClearSyncHud}, {"CreateHudSyncObj", CreateHudSyncObj}, + {"CreateLangKey", CreateLangKey}, {"CreateMultiForward", CreateMultiForward}, {"CreateOneForward", CreateOneForward}, {"DestroyForward", DestroyForward}, diff --git a/amxmodx/amxxfile.h b/amxmodx/amxxfile.h index 9e2c7833..e03e34dd 100755 --- a/amxmodx/amxxfile.h +++ b/amxmodx/amxxfile.h @@ -92,6 +92,7 @@ public: Error GetStatus(); // Get the current status size_t GetBufferSize(); // Get the size for the buffer Error GetSection(void *buffer); // Copy the currently selected section to the buffer + inline bool IsOldFile() const { return m_OldFile; } }; #endif // __AMXXFILE_H__ diff --git a/amxmodx/messages.h b/amxmodx/messages.h index 8a781b2b..19f5c2fd 100755 --- a/amxmodx/messages.h +++ b/amxmodx/messages.h @@ -9,6 +9,8 @@ #define MAX_MESSAGES 255 +#define MSGBLOCK_SET 0 +#define MSGBLOCK_GET 1 #define BLOCK_NOT 0 #define BLOCK_ONCE 1 #define BLOCK_SET 2 diff --git a/amxmodx/modules.cpp b/amxmodx/modules.cpp index c44a9699..e220ecf2 100755 --- a/amxmodx/modules.cpp +++ b/amxmodx/modules.cpp @@ -1742,6 +1742,33 @@ const char *MNF_GetLocalInfo(char *name, const char *def) return get_localinfo(name, def); } +void MNF_MessageBlock(int mode, int msg, int *opt) +{ + switch (mode) + { + case MSGBLOCK_SET: + { + if (msg < 0 || msg > MAX_MESSAGES || opt == NULL) + { + return; + } + int _opt = msgBlocks[msg]; + msgBlocks[msg] = *opt; + *opt = _opt; + break; + } + case MSGBLOCK_GET: + { + if (msg < 0 || msg > MAX_MESSAGES || opt == NULL) + { + return; + } + *opt = msgBlocks[msg]; + break; + } + } +} + void *MNF_PlayerPropAddr(int id, int prop) { if (id < 1 || id > gpGlobals->maxClients) @@ -1891,6 +1918,8 @@ void Module_CacheFunctions() REGISTER_FUNC("OverrideNatives", MNF_OverrideNatives); REGISTER_FUNC("GetLocalInfo", MNF_GetLocalInfo); + REGISTER_FUNC("MessageBlock", MNF_MessageBlock); + #ifdef MEMORY_TEST REGISTER_FUNC("Allocator", m_allocator) REGISTER_FUNC("Deallocator", m_deallocator) diff --git a/amxmodx/natives.cpp b/amxmodx/natives.cpp index bf165335..a5d22542 100755 --- a/amxmodx/natives.cpp +++ b/amxmodx/natives.cpp @@ -33,6 +33,7 @@ #include "natives.h" #include "debugger.h" #include "libraries.h" +#include "format.h" #ifdef __linux__ #include @@ -98,7 +99,7 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params) { amx_Push(pNative->amx, numParams); amx_Push(pNative->amx, pPlugin->getId()); - for (int i=numParams; i>=1; i--) + for (int i=numParams; i>=0; i--) pNative->params[i] = params[i]; } else if (pNative->style == 1) { //use dJeyL's system .. very clever! @@ -328,6 +329,70 @@ static cell AMX_NATIVE_CALL set_array(AMX *amx, cell *params) return 1; } +static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params) +{ + if (!g_NativeStack.size()) + { + LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native"); + return 0; + } + + regnative *pNative = g_NativeStack.front(); + + if (pNative->style) + { + LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native"); + return 0; + } + + int vargPos = static_cast(params[4]); + int fargPos = static_cast(params[3]); + + /** get the parent parameter array */ + cell *local_params = pNative->params; + + cell max = local_params[0] / sizeof(cell); + if (vargPos > (int)max + 1) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid vararg parameter passed: %d", vargPos); + return 0; + } + if (fargPos > (int)max + 1) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid fmtarg parameter passed: %d", fargPos); + return 0; + } + + /* get destination info */ + cell *fmt; + if (fargPos == 0) + { + if (params[0] / sizeof(cell) != 5) + { + LogError(amx, AMX_ERR_NATIVE, "Expected fmtarg as fifth parameter, found none"); + return 0; + } + fmt = get_amxaddr(amx, params[5]); + } else { + fmt = get_amxaddr(pNative->caller, pNative->params[fargPos]); + } + cell *realdest = get_amxaddr(amx, params[1]); + size_t maxlen = static_cast(params[2]); + cell *dest = realdest; + + /* if this is necessary... */ + static cell cpbuf[4096]; + dest = cpbuf; + + /* perform format */ + size_t total = atcprintf(dest, maxlen, fmt, pNative->caller, local_params, &vargPos); + + /* copy back */ + memcpy(realdest, dest, (total+1) * sizeof(cell)); + + return total; +} + //This is basically right from dJeyL's lib_convert function //This awesome hack modifies the stack frame to have an address offset // that will align to the other plugin's memory. @@ -444,6 +509,7 @@ AMX_NATIVE_INFO g_NativeNatives[] = { {"set_float_byref", set_param_byref}, {"get_array_f", get_array}, {"set_array_f", set_array}, + {"vdformat", vdformat}, {"param_convert", param_convert}, ////////////////////////// {NULL, NULL}, diff --git a/dlls/engine/engine.h b/dlls/engine/engine.h index 89d5f53c..94a601b8 100755 --- a/dlls/engine/engine.h +++ b/dlls/engine/engine.h @@ -174,6 +174,17 @@ void pfnTouch(edict_t *pToucher, edict_t *pTouched); void Think(edict_t *pent); void StartFrame_Post(); +#define CHECK_ENTITY_SIMPLE(x) \ + if (x < 0 || x > gpGlobals->maxEntities) { \ + MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \ + return 0; \ + } else { \ + if (x != 0 && FNullEnt(INDEXENT(x))) { \ + MF_LogError(amx, AMX_ERR_NATIVE, "Invalid entity %d", x); \ + return 0; \ + } \ + } + #define CHECK_ENTITY(x) \ if (x < 0 || x > gpGlobals->maxEntities) { \ MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \ diff --git a/dlls/engine/entity.cpp b/dlls/engine/entity.cpp index 7c8dffe7..7b7402e2 100755 --- a/dlls/engine/entity.cpp +++ b/dlls/engine/entity.cpp @@ -338,7 +338,7 @@ static cell AMX_NATIVE_CALL entity_set_float(AMX *amx, cell *params) int idx = params[2]; REAL fVal = amx_ctof(params[3]); - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -469,7 +469,7 @@ static cell AMX_NATIVE_CALL entity_get_int(AMX *amx, cell *params) int idx = params[2]; int iRetValue = 0; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -601,7 +601,7 @@ static cell AMX_NATIVE_CALL entity_set_int(AMX *amx, cell *params) int idx = params[2]; int iNewValue = params[3]; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -733,7 +733,7 @@ static cell AMX_NATIVE_CALL entity_get_vector(AMX *amx, cell *params) cell *vRet = MF_GetAmxAddr(amx, params[3]); Vector vRetValue = Vector(0, 0, 0); - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -826,7 +826,7 @@ static cell AMX_NATIVE_CALL entity_set_vector(AMX *amx, cell *params) int idx = params[2]; cell *vAmx = MF_GetAmxAddr(amx, params[3]); - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); REAL fX = amx_ctof(vAmx[0]); REAL fY = amx_ctof(vAmx[1]); @@ -920,7 +920,7 @@ static cell AMX_NATIVE_CALL entity_get_string(AMX *amx, cell *params) int iszString = 0; const char *szRet = NULL; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -982,7 +982,7 @@ static cell AMX_NATIVE_CALL entity_set_string(AMX *amx, cell *params) int iLen; int iszString = AmxStringToEngine(amx, params[3], iLen); - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -1041,7 +1041,7 @@ static cell AMX_NATIVE_CALL entity_get_edict(AMX *amx, cell *params) int idx = params[2]; edict_t *pRet; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -1097,7 +1097,7 @@ static cell AMX_NATIVE_CALL entity_set_edict(AMX *amx, cell *params) int idx = params[2]; int iSetEnt = params[3]; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); edict_t *pSetEnt = INDEXENT2(iSetEnt); @@ -1151,7 +1151,7 @@ static cell AMX_NATIVE_CALL entity_get_byte(AMX *amx, cell *params) int idx = params[2]; int iRetValue = 0; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); @@ -1189,7 +1189,7 @@ static cell AMX_NATIVE_CALL entity_set_byte(AMX *amx, cell *params) int idx = params[2]; int iNewValue = params[3]; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); if(iNewValue > 255) iNewValue = 255; @@ -1230,7 +1230,7 @@ static cell AMX_NATIVE_CALL entity_set_origin(AMX *amx, cell *params) { int iEnt = params[1]; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); cell *vVector = MF_GetAmxAddr(amx, params[2]); @@ -1249,7 +1249,7 @@ static cell AMX_NATIVE_CALL entity_set_model(AMX *amx, cell *params) { int iEnt = params[1]; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); int iLen; @@ -1265,7 +1265,7 @@ static cell AMX_NATIVE_CALL entity_set_size(AMX *amx, cell *params) { int iEnt = params[1]; - CHECK_ENTITY(iEnt); + CHECK_ENTITY_SIMPLE(iEnt); edict_t *pEnt = INDEXENT2(iEnt); diff --git a/plugins/include/lang.inc b/plugins/include/lang.inc index e52bd4b3..e7e3725b 100755 --- a/plugins/include/lang.inc +++ b/plugins/include/lang.inc @@ -23,4 +23,14 @@ native get_lang(id, name[3]); native register_dictionary(const filename[]); //returns 1 if the language is loaded, 0 otherwise. -native lang_exists(const name[]); \ No newline at end of file +native lang_exists(const name[]); + +/** + * Adds or finds a translation key. + */ +native TransKey:CreateLangKey(const key[]); + +/** + * Adds a translation. + */ +native AddTranslation(const lang[3], TransKey:key, const phrase[]); diff --git a/plugins/include/string.inc b/plugins/include/string.inc index b056e5c8..20863d06 100755 --- a/plugins/include/string.inc +++ b/plugins/include/string.inc @@ -58,6 +58,15 @@ native formatex(output[] ,len ,const format[] , {Float,Sql,Result,_}:...); */ native vformat(buffer[], len, const fmt[], vararg); +/* + * Same as vformat(), except works in normal style dynamic natives. + * Instead of passing the format arg string, you can only pass the + * actual format argument number itself. + * If you pass 0, it will read the format string from an optional + * fifth parameter. + */ +native vdformat(buffer[], len, fmt_arg, vararg, ...); + /* Gets parameters from function as formated string. */ native format_args(output[] ,len ,pos = 0);