Compare commits
559 Commits
amxmodx-1.
...
amxmodx-1.
Author | SHA1 | Date | |
---|---|---|---|
3db718799f | |||
146d77f819 | |||
06a9241bcf | |||
ce4b23b41a | |||
3184d1466e | |||
8793d8f8d5 | |||
a26a98cb98 | |||
5e69db511c | |||
468aaba79e | |||
a3aa086375 | |||
82ad133d91 | |||
250cb89479 | |||
121dc75451 | |||
69c06545ce | |||
9e5b5683af | |||
f01357aa7a | |||
7f13ae3e4f | |||
e5b990b8e0 | |||
99411af951 | |||
b318509687 | |||
37f7975416 | |||
40c1fee55a | |||
b0fe6c83e2 | |||
59fc122986 | |||
3ec6bbc2ce | |||
a431cb420b | |||
5a6c4ea408 | |||
7d9376a64b | |||
6e4f09366e | |||
6c22cb171d | |||
77e900585a | |||
86bfeec554 | |||
45343e6e27 | |||
944f608f09 | |||
ad960a64e2 | |||
e2a687d96d | |||
53e43b8f31 | |||
da2eb8ea66 | |||
088f109a64 | |||
9d65198786 | |||
49e3b748c3 | |||
5324c7c620 | |||
26d2a4f877 | |||
76d407b45a | |||
e783c4bfcb | |||
afc663a51a | |||
cb500636cc | |||
e6f4dfbfe2 | |||
1bfdda7e71 | |||
330fd1c2ae | |||
56b676eafb | |||
73e3e52057 | |||
56b53584d1 | |||
f43fcd6670 | |||
5984f0d442 | |||
1b75b0ba92 | |||
52f5723f4e | |||
eb6ab857fc | |||
24bfff9cf1 | |||
1d3f91be43 | |||
824d9953d9 | |||
b706108ed6 | |||
adab9c93a0 | |||
0f8c61c1e1 | |||
0b4f28fecf | |||
d97ab913cf | |||
2249f1e70c | |||
0f4ee9d91d | |||
5cc5ea4006 | |||
2145823971 | |||
cdf3807955 | |||
10ff8c11fd | |||
81af863496 | |||
3e8c921b9f | |||
f201592ddb | |||
72bebf9af8 | |||
73ea754640 | |||
ce9728af93 | |||
6486c56a15 | |||
1d95fb3dcd | |||
c07d8f3d93 | |||
adaf207b58 | |||
0dc6a4a5dd | |||
626bfe5240 | |||
e4a3647b88 | |||
f942a857d0 | |||
633a81f864 | |||
1b5dc0d567 | |||
21b8f905ae | |||
36a15919ca | |||
24ff7c3a01 | |||
7beef260f2 | |||
36db059672 | |||
01f3d729de | |||
0a38ef831f | |||
55d18da46c | |||
a7d6352a22 | |||
240c92e20f | |||
f410ea743d | |||
9100ec753c | |||
1d7cbd4203 | |||
4049a0c3be | |||
86ea50dfdd | |||
6a4318f4d1 | |||
6d03b29963 | |||
44e078c7c0 | |||
e1dd514f15 | |||
c52943b03c | |||
b33d2f559b | |||
53ed817183 | |||
683f453b6f | |||
145ff45876 | |||
e3e64233ec | |||
313044fe89 | |||
074fd60f3c | |||
b608305c79 | |||
bbf7593e43 | |||
e373ee1165 | |||
375d6aa0da | |||
4c4fde8bf3 | |||
5e9e119c76 | |||
2a383feef6 | |||
a726b796db | |||
9348f9931e | |||
4c79232f17 | |||
16720a2f70 | |||
69a8a86ff6 | |||
b0286c9c4d | |||
660e97c764 | |||
df522ebe6f | |||
be35cc9912 | |||
9801c4166f | |||
80db0ed0b3 | |||
b9d98ede39 | |||
e6c8afa5de | |||
60b3f30ab3 | |||
cfd2011e80 | |||
5ed4c27732 | |||
afd1072583 | |||
64ad54aa51 | |||
3df060cad6 | |||
1497d58e41 | |||
fd028ca1e7 | |||
a1d812398b | |||
df96a81a75 | |||
656d30be83 | |||
6e8a164e67 | |||
521288dae0 | |||
4c464390ac | |||
408e69c41c | |||
cc99d6d1fb | |||
3030302952 | |||
f281a24274 | |||
efbba0a909 | |||
3750788893 | |||
993b6e6c74 | |||
7f51048438 | |||
212697b950 | |||
6a567f3c77 | |||
36241e2905 | |||
b630ffe28f | |||
f6276db4d0 | |||
a2e3f8682f | |||
dbf6143747 | |||
4aafcc50a0 | |||
a86b1c5097 | |||
2d737970d0 | |||
b7f8503655 | |||
ca3d15c27e | |||
468e6fb9dd | |||
50bbefa3ba | |||
c635638fd1 | |||
b2b2c1d961 | |||
748d000c02 | |||
c1791361da | |||
6a483cfcae | |||
fcdd17480c | |||
21ad8ba71b | |||
dd55716f15 | |||
bd3b7fc70c | |||
26f1c8dec7 | |||
a749aad1b4 | |||
58c7239b48 | |||
e616bd523e | |||
d163ead2ac | |||
00838065ae | |||
8298158f08 | |||
824ed30872 | |||
2b15c30ad1 | |||
643ddc18be | |||
639db5846e | |||
0bb430b3eb | |||
550dbae0c7 | |||
f0ee52f892 | |||
84b146d74a | |||
3f1226e504 | |||
186519dc92 | |||
51ce96ac3c | |||
16f6048d74 | |||
e2c1bad224 | |||
e6663991a7 | |||
62c41fbd03 | |||
0b581b1506 | |||
76a7cafe50 | |||
12ab387be5 | |||
cfc9c1dd02 | |||
544d2dedef | |||
1721383237 | |||
68961a91e2 | |||
435766b2ef | |||
750247e8a6 | |||
a81d6f3271 | |||
cb62613501 | |||
2efc82ea59 | |||
a95658bd2d | |||
5f10cc1ebc | |||
226d188d19 | |||
9e0f3f01a7 | |||
06b461acd7 | |||
ffb8fc683b | |||
aa2cac0f0c | |||
2bc6d965f6 | |||
c5e36a4e3c | |||
bbc6af247b | |||
164780363b | |||
807e6a0f9a | |||
605bef0482 | |||
2e3c652996 | |||
a8652dd91b | |||
2379aa3108 | |||
ed3f5dfd4b | |||
747d326ed5 | |||
b4ff754e29 | |||
67ac030c56 | |||
15b62648c9 | |||
b09bf4c532 | |||
e045e2fdb6 | |||
36dc8da47c | |||
25d95f1115 | |||
e254ef6b15 | |||
7038305812 | |||
c77176a4ce | |||
c604eefde0 | |||
48022d3c5c | |||
cf36abf7e6 | |||
ed84900ab6 | |||
83c82387e3 | |||
9ce9b142e7 | |||
ced56c79b6 | |||
d836aeb716 | |||
7c642fbf6e | |||
a28a80e45f | |||
2cbf7fca08 | |||
4b02ffa920 | |||
8316318c31 | |||
7b6d4ce699 | |||
6f590c85f6 | |||
f86dad801f | |||
ee5dccfc0f | |||
16c17cff63 | |||
ce526ac432 | |||
a3342213b5 | |||
ef41393bc3 | |||
a45d98efea | |||
e23f3747ba | |||
3f268e5f2e | |||
b3e61b1d75 | |||
6865b984e0 | |||
7c4dccac8c | |||
6c0300801f | |||
069c293aba | |||
7690f1a099 | |||
add02dc55e | |||
961114c260 | |||
ff3def3d00 | |||
39f759368f | |||
4cdd43b29b | |||
0c82e09df1 | |||
1129f09660 | |||
079606c143 | |||
66feed1d2b | |||
65748001f0 | |||
4504875df9 | |||
cd023c30d9 | |||
7bb562182f | |||
77ca104a8d | |||
b660df8df6 | |||
b1a086ee93 | |||
504ddb4c2f | |||
d38d2f56e1 | |||
9b0ed67c9c | |||
1081e84981 | |||
ee64440fef | |||
0c56e2803e | |||
5fc89085d6 | |||
f747acdc7c | |||
4e2493759e | |||
1f1ecfa590 | |||
bd2ad31f5e | |||
fb5e7dbfdb | |||
0ac5ce46a7 | |||
1073a42409 | |||
66d7d39bee | |||
46bd9127fb | |||
5309189602 | |||
006396bc92 | |||
dc4c9f0258 | |||
3b737ab87b | |||
6170cbc95a | |||
78f18de61a | |||
e34120803d | |||
fdb094045e | |||
8c45216cfd | |||
897ed0cb10 | |||
fd8489d088 | |||
710cd548a9 | |||
525eb65e1c | |||
580e52bd2c | |||
2f6bfca68e | |||
0377715cdc | |||
e3240214a3 | |||
fc2b220c38 | |||
74c6290dc0 | |||
a93ef02efa | |||
68d2b03e48 | |||
d682375d7d | |||
3b80342a02 | |||
8f49cddd7d | |||
d679885985 | |||
82c3807bd5 | |||
58ad23186b | |||
c957a9db0f | |||
359b7e25dd | |||
5d6d0282b0 | |||
33e01af955 | |||
0d5531a090 | |||
2659c906fb | |||
d563ecb060 | |||
bfe1ff6e15 | |||
adfc2ab451 | |||
ea912f794c | |||
8e1f54465d | |||
2c2259ea15 | |||
be4fdb1776 | |||
76158b031d | |||
599029b68e | |||
201d65749e | |||
17d8197e72 | |||
1ed1d0005c | |||
51f8d7f84e | |||
1ec4d9cc7d | |||
b90bc3a3e4 | |||
de530e2ca3 | |||
5d4669d52e | |||
8dc310f1bb | |||
9cca961024 | |||
7b4283bf4a | |||
1f423dc39f | |||
ab6fea5767 | |||
3328b570d4 | |||
63427b2ad0 | |||
61052c41a1 | |||
5c68df7ac7 | |||
8872d98dd6 | |||
03bae80ed2 | |||
1161b5ee7e | |||
b49bf1b13c | |||
81994ecf58 | |||
4682cec1cb | |||
b9a0ffacc4 | |||
ae46e3f6ab | |||
68beb4b1a3 | |||
118b002ee8 | |||
a004e906dd | |||
eaa4122c5a | |||
e326ab1593 | |||
5252e06c2a | |||
e61809496d | |||
edaf960407 | |||
e3217964c4 | |||
397479cd77 | |||
d151ee0b58 | |||
ce88004900 | |||
1e8d0e10e6 | |||
bb641688ee | |||
ab53914351 | |||
54186736c8 | |||
b66fea0fbc | |||
bf2c9620f3 | |||
af96229d5d | |||
be323039d1 | |||
c71be87a3a | |||
e4b01bc066 | |||
3ac076e098 | |||
e6120fdcd6 | |||
4dc4616933 | |||
46a3929365 | |||
4597868d30 | |||
cf716c4049 | |||
cc6b9d3d81 | |||
a34279b971 | |||
5cac87c99f | |||
309bc2dcaa | |||
7124f8bd2c | |||
c9b19c76a5 | |||
8939c3076a | |||
71065a65dd | |||
7adc49c541 | |||
baba221dd9 | |||
829485ef2a | |||
b793b80360 | |||
ea34c2c78a | |||
722e97fef2 | |||
bd412d7204 | |||
39e6d958bf | |||
bb54b37399 | |||
88dd3b021e | |||
ef4d19378d | |||
7f1ea1490d | |||
041fb4e37f | |||
193e59df90 | |||
d4703f045d | |||
109b1e45b5 | |||
1f1edef98d | |||
83631e95aa | |||
6eb1242600 | |||
77e7ea161b | |||
09f271e5d0 | |||
e35a8326d5 | |||
09d46aa025 | |||
615e097c68 | |||
ade56b62e9 | |||
b3d7f04b5e | |||
4f81c50a3e | |||
d45c3aeb96 | |||
fff603635a | |||
06f01ea7dc | |||
2395abcf7e | |||
d33f9ba2d4 | |||
aec28542ac | |||
73219c45dd | |||
39d6cb7840 | |||
bfd4e345dd | |||
aded0f9c1c | |||
811265e28b | |||
0caffa2b82 | |||
4dfb01bb1d | |||
862ed243be | |||
39f1fa6045 | |||
f26939e2cc | |||
9d53451933 | |||
4ae54eeb2a | |||
d62ae07b75 | |||
0f22a7fa06 | |||
7f3c2d00ac | |||
b324e8ed9d | |||
8420823713 | |||
1d1b50ce0c | |||
35fcca8a66 | |||
7a01503478 | |||
dd8f138892 | |||
8341e41f04 | |||
a682ec6b7a | |||
451b648c7f | |||
2d1c43c937 | |||
17adb214f2 | |||
3a2839c6c9 | |||
f96f95c4ff | |||
609fdae508 | |||
580305ce92 | |||
cbfd12e0f1 | |||
c5ccf7d2c8 | |||
d1c42751cd | |||
68f1ce7a52 | |||
e5b0ed3af1 | |||
49e70063fa | |||
7aa4cf70be | |||
b661873426 | |||
8e290cdf31 | |||
42f23a832a | |||
13e619bf97 | |||
4332d6c271 | |||
627b3f0f98 | |||
b7b55d060a | |||
b110021f4f | |||
96c49f4ff9 | |||
f53c877670 | |||
b237317e50 | |||
73b2ceb855 | |||
b64fb4678d | |||
d6ed1a8d8a | |||
b762174c30 | |||
86838bead1 | |||
e6c15d9f05 | |||
266ed797c5 | |||
93cb2060dd | |||
0cd1782d01 | |||
75a5dadd4d | |||
f03449acbd | |||
34f127b9aa | |||
0c345ceebc | |||
c5dc780635 | |||
fe0e461c76 | |||
935da9f0de | |||
36e9f29d55 | |||
c66c076a03 | |||
4eaea443e1 | |||
299f1b5f62 | |||
4e7bf7e348 | |||
d048996b50 | |||
a34c8daf34 | |||
6cd5a51c8e | |||
5cabf748ca | |||
1905ea7295 | |||
89158f9342 | |||
db7dc509e0 | |||
c15a23a2a7 | |||
3e0866e57a | |||
551e5298cc | |||
dfea3e8a13 | |||
e8a30e7187 | |||
8a93673276 | |||
ece4db4f43 | |||
8b8cc3dd6b | |||
b33e76d9c4 | |||
6fb6d7d399 | |||
5649a17502 | |||
5cfc2df359 | |||
1ac390b54c | |||
102c2b219f | |||
4e1d420495 | |||
e93e75fa39 | |||
90c213bc6d | |||
6c3e7e7ee0 | |||
8a2528108d | |||
a65d65bee4 | |||
483403aa3a | |||
2a1dbf5247 | |||
7aa687eb69 | |||
699cb2a6d6 | |||
7b82bc7b76 | |||
ed43b8a5ac | |||
d2ebca38a1 | |||
d542015214 | |||
d84c3a3798 | |||
405d9ff48e | |||
a63c728471 | |||
a60e9d205b | |||
553a950b98 | |||
955e827b19 | |||
00380cfe4c | |||
12ecf026db | |||
3fa6cd3227 | |||
fe1ebfe7bb | |||
f3057efd7d | |||
39d5ea94fb | |||
90f11b52bc | |||
9740f6469d | |||
461e7de151 |
24
.hgignore
Normal file
24
.hgignore
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Binaries
|
||||||
|
\.dll$
|
||||||
|
\.exe$
|
||||||
|
\.so$
|
||||||
|
|
||||||
|
# Files generated by Visual Studio
|
||||||
|
\.aps$
|
||||||
|
\.ncb$
|
||||||
|
\.sdf$
|
||||||
|
\.suo$
|
||||||
|
\.user$
|
||||||
|
|
||||||
|
# Build directories
|
||||||
|
/Debug.*
|
||||||
|
/Release.*
|
||||||
|
/JITDebug.*
|
||||||
|
/JITRelease.*
|
||||||
|
|
||||||
|
# Files generated by Mac OS X Finder
|
||||||
|
(^|/)\.DS_Store$
|
||||||
|
|
||||||
|
# Files generated by Windows Explorer
|
||||||
|
(^|/)Desktop\.ini$
|
||||||
|
(^|/)Thumbs\.db$
|
@ -124,8 +124,6 @@ CmdMngr::Command* CmdMngr::getCmd(long int id, int type, int access)
|
|||||||
|
|
||||||
int CmdMngr::getCmdNum(int type, int access)
|
int CmdMngr::getCmdNum(int type, int access)
|
||||||
{
|
{
|
||||||
if ((access == buf_access) && (type == buf_type))
|
|
||||||
return buf_num; // once calculated don't have to be done again
|
|
||||||
|
|
||||||
buf_access = access;
|
buf_access = access;
|
||||||
buf_type = type;
|
buf_type = type;
|
||||||
@ -155,7 +153,7 @@ void CmdMngr::setCmdLink(CmdLink** a, Command* c, bool sorted)
|
|||||||
{
|
{
|
||||||
int i = strcmp(c->getCommand(), (*a)->cmd->getCommand());
|
int i = strcmp(c->getCommand(), (*a)->cmd->getCommand());
|
||||||
|
|
||||||
if ((i < 0) || (i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0))
|
if ((i < 0) || ((i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
a = &(*a)->next;
|
a = &(*a)->next;
|
||||||
|
@ -78,7 +78,7 @@ public:
|
|||||||
inline bool matchCommandLine(const char* cmd, const char* arg) { return (!stricmp(command.c_str() + prefix, cmd + prefix) && (argument.empty() || !stricmp(argument.c_str(), arg))); }
|
inline bool matchCommandLine(const char* cmd, const char* arg) { return (!stricmp(command.c_str() + prefix, cmd + prefix) && (argument.empty() || !stricmp(argument.c_str(), arg))); }
|
||||||
inline bool matchCommand(const char* cmd) { return (!strcmp(command.c_str(), cmd)); }
|
inline bool matchCommand(const char* cmd) { return (!strcmp(command.c_str(), cmd)); }
|
||||||
inline int getFunction() const { return function; }
|
inline int getFunction() const { return function; }
|
||||||
inline bool gotAccess(int f) const { return (!flags || ((flags & f) == flags)); }
|
inline bool gotAccess(int f) const { return (!flags || ((flags & f) != 0)); }
|
||||||
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
||||||
inline bool isViewable() const { return listable; }
|
inline bool isViewable() const { return listable; }
|
||||||
inline int getFlags() const { return flags; }
|
inline int getFlags() const { return flags; }
|
||||||
|
418
amxmodx/CFlagManager.cpp
Normal file
418
amxmodx/CFlagManager.cpp
Normal file
@ -0,0 +1,418 @@
|
|||||||
|
#include <time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include "sh_list.h"
|
||||||
|
#include "CString.h"
|
||||||
|
|
||||||
|
#include "amxmodx.h"
|
||||||
|
|
||||||
|
#include "CFlagManager.h"
|
||||||
|
|
||||||
|
void CFlagManager::SetFile(const char *Filename)
|
||||||
|
{
|
||||||
|
|
||||||
|
m_strConfigFile.assign(g_mod_name.c_str());
|
||||||
|
m_strConfigFile.append("/");
|
||||||
|
m_strConfigFile.append(get_localinfo("amxx_configsdir","addons/amxmodx/configs"));
|
||||||
|
m_strConfigFile.append("/");
|
||||||
|
m_strConfigFile.append(Filename);
|
||||||
|
|
||||||
|
|
||||||
|
CreateIfNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
|
const int CFlagManager::LoadFile(const int force)
|
||||||
|
{
|
||||||
|
CheckIfDisabled();
|
||||||
|
// If we're disabled get the hell out. now.
|
||||||
|
if (m_iDisabled)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// if we're not forcing this, and NeedToLoad says we dont have to
|
||||||
|
// then just stop
|
||||||
|
if (!force && !NeedToLoad())
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
this->Clear();
|
||||||
|
|
||||||
|
|
||||||
|
// We need to load the file
|
||||||
|
|
||||||
|
FILE *File;
|
||||||
|
|
||||||
|
File=fopen(m_strConfigFile.c_str(),"r");
|
||||||
|
|
||||||
|
if (!File)
|
||||||
|
{
|
||||||
|
AMXXLOG_Log("[AMXX] FlagManager: Cannot open file \"%s\" (FILE pointer null!)",m_strConfigFile.c_str());
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Trying to copy this almost exactly as other configs are read...
|
||||||
|
String Line;
|
||||||
|
|
||||||
|
char Command[256];
|
||||||
|
char Flags[256];
|
||||||
|
|
||||||
|
String TempLine;
|
||||||
|
while (!feof(File))
|
||||||
|
{
|
||||||
|
|
||||||
|
Line._fread(File);
|
||||||
|
|
||||||
|
char *nonconst=const_cast<char *>(Line.c_str());
|
||||||
|
|
||||||
|
|
||||||
|
// Strip out comments
|
||||||
|
while (*nonconst)
|
||||||
|
{
|
||||||
|
if (*nonconst==';') // End the line at comments
|
||||||
|
{
|
||||||
|
*nonconst='\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nonconst++;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command[0]='\0';
|
||||||
|
Flags[0]='\0';
|
||||||
|
|
||||||
|
// Extract the command
|
||||||
|
TempLine.assign(Line.c_str());
|
||||||
|
|
||||||
|
nonconst=const_cast<char *>(TempLine.c_str());
|
||||||
|
|
||||||
|
char *start=NULL;
|
||||||
|
char *end=NULL;
|
||||||
|
|
||||||
|
// move up line until the first ", mark this down as the start
|
||||||
|
// then find the second " and mark it down as the end
|
||||||
|
while (*nonconst!='\0')
|
||||||
|
{
|
||||||
|
if (*nonconst=='"')
|
||||||
|
{
|
||||||
|
if (start==NULL)
|
||||||
|
{
|
||||||
|
start=nonconst+1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
end=nonconst;
|
||||||
|
goto done_with_command;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nonconst++;
|
||||||
|
}
|
||||||
|
done_with_command:
|
||||||
|
|
||||||
|
// invalid line?
|
||||||
|
if (start==NULL || end==NULL)
|
||||||
|
{
|
||||||
|
// TODO: maybe warn for an invalid non-commented line?
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*end='\0';
|
||||||
|
|
||||||
|
strncpy(Command,start,sizeof(Command)-1);
|
||||||
|
|
||||||
|
|
||||||
|
// Now do the same thing for the flags
|
||||||
|
nonconst=++end;
|
||||||
|
|
||||||
|
start=NULL;
|
||||||
|
end=NULL;
|
||||||
|
|
||||||
|
// move up line until the first ", mark this down as the start
|
||||||
|
// then find the second " and mark it down as the end
|
||||||
|
while (*nonconst!='\0')
|
||||||
|
{
|
||||||
|
if (*nonconst=='"')
|
||||||
|
{
|
||||||
|
if (start==NULL)
|
||||||
|
{
|
||||||
|
start=nonconst+1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
end=nonconst;
|
||||||
|
goto done_with_flags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nonconst++;
|
||||||
|
}
|
||||||
|
done_with_flags:
|
||||||
|
// invalid line?
|
||||||
|
if (start==NULL || end==NULL)
|
||||||
|
{
|
||||||
|
// TODO: maybe warn for an invalid non-commented line?
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*end='\0';
|
||||||
|
|
||||||
|
strncpy(Flags,start,sizeof(Flags)-1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//if (!isalnum(*Command))
|
||||||
|
if (*Command == '"' ||
|
||||||
|
*Command == '\0')
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Done sucking the command and flags out of the line
|
||||||
|
// now insert this command into the linked list
|
||||||
|
|
||||||
|
AddFromFile(const_cast<const char*>(&Command[0]),&Flags[0]);
|
||||||
|
|
||||||
|
nonconst=const_cast<char *>(Line.c_str());
|
||||||
|
*nonconst='\0';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
fclose(File);
|
||||||
|
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This gets called from LoadFile
|
||||||
|
* Do NOT flag the entries as NeedToWrite
|
||||||
|
* No comment is passed from the file because
|
||||||
|
* this should never get written
|
||||||
|
*/
|
||||||
|
void CFlagManager::AddFromFile(const char *Command, const char *Flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
CFlagEntry *Entry=new CFlagEntry;
|
||||||
|
|
||||||
|
Entry->SetName(Command);
|
||||||
|
Entry->SetFlags(Flags);
|
||||||
|
|
||||||
|
// Link it
|
||||||
|
m_FlagList.push_back(Entry);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void CFlagManager::LookupOrAdd(const char *Command, int &Flags, AMX *Plugin)
|
||||||
|
{
|
||||||
|
if (m_iDisabled) // if disabled in core.ini stop
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int TempFlags=Flags;
|
||||||
|
if (TempFlags==-1)
|
||||||
|
{
|
||||||
|
TempFlags=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<CFlagEntry *>::iterator iter;
|
||||||
|
List<CFlagEntry *>::iterator end;
|
||||||
|
|
||||||
|
iter=m_FlagList.begin();
|
||||||
|
end=m_FlagList.end();
|
||||||
|
|
||||||
|
while (iter!=end)
|
||||||
|
{
|
||||||
|
if (strcmp((*iter)->GetName()->c_str(),Command)==0)
|
||||||
|
{
|
||||||
|
CFlagEntry *Entry=(*iter);
|
||||||
|
|
||||||
|
if (Entry->IsHidden()) // "!" flag, exclude this function
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Found, byref the new flags
|
||||||
|
Flags=Entry->Flags();
|
||||||
|
|
||||||
|
// Move it to the back of the list for faster lookup for the rest
|
||||||
|
m_FlagList.erase(iter);
|
||||||
|
|
||||||
|
m_FlagList.push_back(Entry);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// was not found, add it
|
||||||
|
|
||||||
|
CFlagEntry *Entry=new CFlagEntry;
|
||||||
|
|
||||||
|
Entry->SetName(Command);
|
||||||
|
Entry->SetFlags(TempFlags);
|
||||||
|
|
||||||
|
if (Plugin)
|
||||||
|
{
|
||||||
|
CPluginMngr::CPlugin* a = g_plugins.findPluginFast(Plugin);
|
||||||
|
|
||||||
|
if (a)
|
||||||
|
{
|
||||||
|
Entry->SetComment(a->getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This entry was added from a register_* native
|
||||||
|
// it needs to be written during map change
|
||||||
|
Entry->SetNeedWritten(1);
|
||||||
|
|
||||||
|
// Link it
|
||||||
|
m_FlagList.push_back(Entry);
|
||||||
|
|
||||||
|
}
|
||||||
|
void CFlagManager::WriteCommands(void)
|
||||||
|
{
|
||||||
|
List<CFlagEntry *>::iterator iter;
|
||||||
|
List<CFlagEntry *>::iterator end;
|
||||||
|
FILE *File;
|
||||||
|
int NeedToRead=0;
|
||||||
|
|
||||||
|
// First off check the modified time of this file
|
||||||
|
// if it matches the stored modified time, then update
|
||||||
|
// after we write so we do not re-read next map
|
||||||
|
struct stat TempStat;
|
||||||
|
|
||||||
|
stat(m_strConfigFile.c_str(),&TempStat);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (TempStat.st_mtime != m_Stat.st_mtime)
|
||||||
|
{
|
||||||
|
NeedToRead=1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
File=fopen(m_strConfigFile.c_str(),"a");
|
||||||
|
|
||||||
|
if (!File)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
iter=m_FlagList.begin();
|
||||||
|
end=m_FlagList.end();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
while (iter!=end)
|
||||||
|
{
|
||||||
|
if ((*iter)->NeedWritten())
|
||||||
|
{
|
||||||
|
if ((*iter)->GetComment()->size())
|
||||||
|
{
|
||||||
|
fprintf(File,"\"%s\" \t\"%s\" ; %s\n",(*iter)->GetName()->c_str(),(*iter)->GetFlags()->c_str(),(*iter)->GetComment()->c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(File,"\"%s\" \t\"%s\"\n",(*iter)->GetName()->c_str(),(*iter)->GetFlags()->c_str());
|
||||||
|
}
|
||||||
|
(*iter)->SetNeedWritten(0);
|
||||||
|
}
|
||||||
|
++iter;
|
||||||
|
};
|
||||||
|
|
||||||
|
fclose(File);
|
||||||
|
|
||||||
|
|
||||||
|
// If NeedToRead was 0, then update the timestamp
|
||||||
|
// that was saved so we do not re-read this file
|
||||||
|
// next map
|
||||||
|
if (!NeedToRead)
|
||||||
|
{
|
||||||
|
stat(m_strConfigFile.c_str(),&TempStat);
|
||||||
|
|
||||||
|
m_Stat.st_mtime=TempStat.st_mtime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int CFlagManager::ShouldIAddThisCommand(const AMX *amx, const cell *params, const char *cmdname) const
|
||||||
|
{
|
||||||
|
|
||||||
|
// If flagmanager is disabled then ignore this
|
||||||
|
if (m_iDisabled)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// If 5th param exists it was compiled after this change was made
|
||||||
|
// if it does not exist, try our logic at the end of this function
|
||||||
|
// 5th param being > 0 means explicit yes
|
||||||
|
// < 0 means auto detect (default is -1), treat it like there was no 5th param
|
||||||
|
// 0 means explicit no
|
||||||
|
|
||||||
|
if ((params[0] / sizeof(cell)) >= 5)
|
||||||
|
{
|
||||||
|
if (params[5]>0) // This command was explicitly told to be included
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (params[5]==0) // this command was explicitly told to NOT be used
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// auto detect if we should use this command
|
||||||
|
|
||||||
|
// if command access is -1 (default, not set to ADMIN_ALL or any other access), then no
|
||||||
|
if (params[3]==-1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// if command is (or starts with) "say", then no
|
||||||
|
if (strncmp(cmdname,"say",3)==0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// else use it
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void CFlagManager::Clear(void)
|
||||||
|
{
|
||||||
|
List<CFlagEntry *>::iterator iter;
|
||||||
|
List<CFlagEntry *>::iterator end;
|
||||||
|
|
||||||
|
iter=m_FlagList.begin();
|
||||||
|
end=m_FlagList.end();
|
||||||
|
|
||||||
|
while (iter!=end)
|
||||||
|
{
|
||||||
|
delete (*iter);
|
||||||
|
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_FlagList.clear();
|
||||||
|
};
|
||||||
|
|
||||||
|
void CFlagManager::CheckIfDisabled(void)
|
||||||
|
{
|
||||||
|
if (atoi(get_localinfo("disableflagman","0"))==0)
|
||||||
|
{
|
||||||
|
m_iDisabled=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_iDisabled=1;
|
||||||
|
}
|
||||||
|
};
|
218
amxmodx/CFlagManager.h
Normal file
218
amxmodx/CFlagManager.h
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
#ifndef CFLAGMANAGER_H
|
||||||
|
#define CFLAGMANAGER_H
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include "sh_list.h"
|
||||||
|
#include "CString.h"
|
||||||
|
|
||||||
|
#include "amxmodx.h"
|
||||||
|
|
||||||
|
class CFlagEntry
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
String m_strName; // command name ("amx_slap")
|
||||||
|
String m_strFlags; // string flags ("a","b")
|
||||||
|
String m_strComment; // comment to write ("; admincmd.amxx")
|
||||||
|
int m_iFlags; // bitmask flags
|
||||||
|
int m_iNeedWritten; // write this command on map change?
|
||||||
|
int m_iHidden; // set to 1 when the command is set to "!" access in
|
||||||
|
// the .ini file: this means do not process this command
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CFlagEntry()
|
||||||
|
{
|
||||||
|
m_iNeedWritten=0;
|
||||||
|
m_iFlags=0;
|
||||||
|
m_iHidden=0;
|
||||||
|
};
|
||||||
|
const int NeedWritten(void) const
|
||||||
|
{
|
||||||
|
return m_iNeedWritten;
|
||||||
|
};
|
||||||
|
|
||||||
|
void SetNeedWritten(const int i=1)
|
||||||
|
{
|
||||||
|
m_iNeedWritten=i;
|
||||||
|
};
|
||||||
|
|
||||||
|
const String *GetName(void) const
|
||||||
|
{
|
||||||
|
return &m_strName;
|
||||||
|
};
|
||||||
|
|
||||||
|
const String *GetFlags(void) const
|
||||||
|
{
|
||||||
|
return &m_strFlags;
|
||||||
|
};
|
||||||
|
const String *GetComment(void) const
|
||||||
|
{
|
||||||
|
return &m_strComment;
|
||||||
|
};
|
||||||
|
|
||||||
|
const int Flags(void) const
|
||||||
|
{
|
||||||
|
return m_iFlags;
|
||||||
|
};
|
||||||
|
|
||||||
|
void SetName(const char *data)
|
||||||
|
{
|
||||||
|
m_strName.assign(data);
|
||||||
|
};
|
||||||
|
void SetFlags(const char *flags)
|
||||||
|
{
|
||||||
|
// If this is a "!" entry then stop
|
||||||
|
if (flags && flags[0]=='!')
|
||||||
|
{
|
||||||
|
SetHidden(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_strFlags.assign(flags);
|
||||||
|
m_iFlags=UTIL_ReadFlags(flags);
|
||||||
|
};
|
||||||
|
void SetFlags(const int flags)
|
||||||
|
{
|
||||||
|
m_iFlags=flags;
|
||||||
|
|
||||||
|
char FlagsString[32];
|
||||||
|
UTIL_GetFlags(FlagsString, flags);
|
||||||
|
|
||||||
|
m_strFlags.assign(FlagsString);
|
||||||
|
};
|
||||||
|
void SetComment(const char *comment)
|
||||||
|
{
|
||||||
|
m_strComment.assign(comment);
|
||||||
|
};
|
||||||
|
void SetHidden(int i=1)
|
||||||
|
{
|
||||||
|
m_iHidden=i;
|
||||||
|
};
|
||||||
|
int IsHidden(void) const
|
||||||
|
{
|
||||||
|
return m_iHidden;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class CFlagManager
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
List<CFlagEntry *> m_FlagList;
|
||||||
|
String m_strConfigFile;
|
||||||
|
struct stat m_Stat;
|
||||||
|
int m_iForceRead;
|
||||||
|
int m_iDisabled;
|
||||||
|
|
||||||
|
|
||||||
|
void CreateIfNotExist(void) const
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
fp=fopen(m_strConfigFile.c_str(),"r");
|
||||||
|
|
||||||
|
if (!fp)
|
||||||
|
{
|
||||||
|
// File does not exist, create the header
|
||||||
|
fp=fopen(m_strConfigFile.c_str(),"a");
|
||||||
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
|
fprintf(fp,"; This file will store the commands used by plugins, and their access level\n");
|
||||||
|
fprintf(fp,"; To change the access of a command, edit the flags beside it and then\n");
|
||||||
|
fprintf(fp,"; change the server's map.\n;\n");
|
||||||
|
fprintf(fp,"; Example: If I wanted to change the amx_slap access to require\n");
|
||||||
|
fprintf(fp,"; RCON access (flag \"l\") I would change this:\n");
|
||||||
|
fprintf(fp,"; \"amx_slap\" \"e\" ; admincmd.amxx\n");
|
||||||
|
fprintf(fp,"; To this:\n");
|
||||||
|
fprintf(fp,"; \"amx_slap\" \"l\" ; admincmd.amxx\n;\n");
|
||||||
|
fprintf(fp,"; To disable a specific command from being used with the command manager\n");
|
||||||
|
fprintf(fp,"; and to only use the plugin-specified access set the flag to \"!\"\n;\n");
|
||||||
|
fprintf(fp,"; NOTE: The plugin name at the end is just for reference to what plugin\n");
|
||||||
|
fprintf(fp,"; uses what commands. It is ignored.\n\n");
|
||||||
|
fclose(fp);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Returns 1 if the timestamp for the file is different than the one we have loaded
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
inline int NeedToLoad(void)
|
||||||
|
{
|
||||||
|
struct stat TempStat;
|
||||||
|
|
||||||
|
stat(m_strConfigFile.c_str(),&TempStat);
|
||||||
|
|
||||||
|
// If the modified timestamp does not match the stored
|
||||||
|
// timestamp than we need to re-read this file.
|
||||||
|
// Otherwise, ignore the file.
|
||||||
|
if (TempStat.st_mtime != m_Stat.st_mtime)
|
||||||
|
{
|
||||||
|
// Save down the modified timestamp
|
||||||
|
m_Stat.st_mtime=TempStat.st_mtime;
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
|
||||||
|
CFlagManager()
|
||||||
|
{
|
||||||
|
memset(&m_Stat,0x0,sizeof(struct stat));
|
||||||
|
m_iDisabled=0;
|
||||||
|
m_iForceRead=0;
|
||||||
|
};
|
||||||
|
~CFlagManager()
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the filename in relation to amxmodx/configs
|
||||||
|
*/
|
||||||
|
void SetFile(const char *Filename="cmdaccess.ini");
|
||||||
|
|
||||||
|
const char *GetFile(void) const { return m_strConfigFile.c_str(); };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the file, and load all entries
|
||||||
|
* Returns 1 on success, 0 on refusal (no need to), and -1 on error
|
||||||
|
*/
|
||||||
|
const int LoadFile(const int force=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the command exists in the list
|
||||||
|
* If it does, it byrefs the flags for it
|
||||||
|
* If it does not, it adds it to the list
|
||||||
|
* These are added from register_*cmd calls
|
||||||
|
*/
|
||||||
|
void LookupOrAdd(const char *Command, int &Flags, AMX *Plugin);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write the commands back to the file
|
||||||
|
*/
|
||||||
|
void WriteCommands(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add this straight from the cmdaccess.ini file
|
||||||
|
*/
|
||||||
|
void AddFromFile(const char *Command, const char *Flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if this command should be added to flagman or not
|
||||||
|
* This is only checked when adding commands from the register_* natives
|
||||||
|
* If an admin manually adds a command to cmdaccess.ini it will be used
|
||||||
|
* regardless of whatever this function would say should be done with it
|
||||||
|
*/
|
||||||
|
int ShouldIAddThisCommand(const AMX *amx, const cell *params, const char *cmdname) const;
|
||||||
|
|
||||||
|
void Clear(void);
|
||||||
|
|
||||||
|
void CheckIfDisabled(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CFLAGMANAGER_H
|
@ -33,7 +33,7 @@
|
|||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "binlog.h"
|
#include "binlog.h"
|
||||||
|
|
||||||
CForward::CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam *paramTypes)
|
CForward::CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam *paramTypes, int fwd_type)
|
||||||
{
|
{
|
||||||
m_FuncName = name;
|
m_FuncName = name;
|
||||||
m_ExecType = et;
|
m_ExecType = et;
|
||||||
@ -47,6 +47,13 @@ CForward::CForward(const char *name, ForwardExecType et, int numParams, const Fo
|
|||||||
|
|
||||||
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
||||||
{
|
{
|
||||||
|
if ((fwd_type != FORWARD_ALL) &&
|
||||||
|
((fwd_type == FORWARD_ONLY_NEW && ((*iter).getAMX()->flags & AMX_FLAG_OLDFILE))
|
||||||
|
|| (fwd_type == FORWARD_ONLY_OLD && !((*iter).getAMX()->flags & AMX_FLAG_OLDFILE))
|
||||||
|
))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ((*iter).isValid() && amx_FindPublic((*iter).getAMX(), name, &func) == AMX_ERR_NONE)
|
if ((*iter).isValid() && amx_FindPublic((*iter).getAMX(), name, &func) == AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
AMXForward tmp;
|
AMXForward tmp;
|
||||||
@ -123,7 +130,7 @@ cell CForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// exec
|
// exec
|
||||||
cell retVal;
|
cell retVal = 0;
|
||||||
#if defined BINLOG_ENABLED
|
#if defined BINLOG_ENABLED
|
||||||
g_BinLog.WriteOp(BinLog_CallPubFunc, (*iter).pPlugin->getId(), iter->func);
|
g_BinLog.WriteOp(BinLog_CallPubFunc, (*iter).pPlugin->getId(), iter->func);
|
||||||
#endif
|
#endif
|
||||||
@ -219,6 +226,8 @@ void CSPForward::Set(int func, AMX *amx, int numParams, const ForwardParam *para
|
|||||||
name[0] = '\0';
|
name[0] = '\0';
|
||||||
amx_GetPublic(amx, func, name);
|
amx_GetPublic(amx, func, name);
|
||||||
m_Name.assign(name);
|
m_Name.assign(name);
|
||||||
|
m_ToDelete = false;
|
||||||
|
m_InExec = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const ForwardParam *paramTypes)
|
void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const ForwardParam *paramTypes)
|
||||||
@ -229,6 +238,8 @@ void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const Forwar
|
|||||||
m_HasFunc = (amx_FindPublic(amx, funcName, &m_Func) == AMX_ERR_NONE);
|
m_HasFunc = (amx_FindPublic(amx, funcName, &m_Func) == AMX_ERR_NONE);
|
||||||
isFree = false;
|
isFree = false;
|
||||||
m_Name.assign(funcName);
|
m_Name.assign(funcName);
|
||||||
|
m_ToDelete = false;
|
||||||
|
m_InExec = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
|
cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
|
||||||
@ -241,13 +252,15 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
|
|||||||
cell realParams[FORWARD_MAX_PARAMS];
|
cell realParams[FORWARD_MAX_PARAMS];
|
||||||
cell *physAddrs[FORWARD_MAX_PARAMS];
|
cell *physAddrs[FORWARD_MAX_PARAMS];
|
||||||
|
|
||||||
if (!m_HasFunc)
|
if (!m_HasFunc || m_ToDelete)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(m_Amx);
|
CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(m_Amx);
|
||||||
if (!pPlugin->isExecutable(m_Func))
|
if (!pPlugin->isExecutable(m_Func))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
m_InExec = true;
|
||||||
|
|
||||||
Debugger *pDebugger = (Debugger *)m_Amx->userdata[UD_DEBUGGER];
|
Debugger *pDebugger = (Debugger *)m_Amx->userdata[UD_DEBUGGER];
|
||||||
if (pDebugger)
|
if (pDebugger)
|
||||||
pDebugger->BeginExec();
|
pDebugger->BeginExec();
|
||||||
@ -349,16 +362,20 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_InExec = false;
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CForwardMngr::registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam * paramTypes)
|
int CForwardMngr::registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam * paramTypes, int fwd_type)
|
||||||
{
|
{
|
||||||
int retVal = m_Forwards.size() << 1;
|
int retVal = m_Forwards.size() << 1;
|
||||||
CForward *tmp = new CForward(funcName, et, numParams, paramTypes);
|
CForward *tmp = new CForward(funcName, et, numParams, paramTypes, fwd_type);
|
||||||
|
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
|
{
|
||||||
return -1; // should be invalid
|
return -1; // should be invalid
|
||||||
|
}
|
||||||
|
|
||||||
m_Forwards.push_back(tmp);
|
m_Forwards.push_back(tmp);
|
||||||
|
|
||||||
@ -443,7 +460,20 @@ bool CForwardMngr::isIdValid(int id) const
|
|||||||
|
|
||||||
cell CForwardMngr::executeForwards(int id, cell *params)
|
cell CForwardMngr::executeForwards(int id, cell *params)
|
||||||
{
|
{
|
||||||
int retVal = (id & 1) ? m_SPForwards[id >> 1]->execute(params, m_TmpArrays) : m_Forwards[id >> 1]->execute(params, m_TmpArrays);
|
int retVal;
|
||||||
|
if (id & 1)
|
||||||
|
{
|
||||||
|
CSPForward *fwd = m_SPForwards[id >> 1];
|
||||||
|
retVal = fwd->execute(params, m_TmpArrays);
|
||||||
|
if (fwd->m_ToDelete)
|
||||||
|
{
|
||||||
|
fwd->m_ToDelete = false;
|
||||||
|
unregisterSPForward(id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
retVal = m_Forwards[id >> 1]->execute(params, m_TmpArrays);
|
||||||
|
}
|
||||||
|
|
||||||
m_TmpArraysNum = 0;
|
m_TmpArraysNum = 0;
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
@ -513,20 +543,63 @@ void CForwardMngr::unregisterSPForward(int id)
|
|||||||
{
|
{
|
||||||
//make sure the id is valid
|
//make sure the id is valid
|
||||||
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
|
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_SPForwards.at(id >> 1)->isFree = true;
|
CSPForward *fwd = m_SPForwards.at(id >> 1);
|
||||||
m_FreeSPForwards.push(id);
|
|
||||||
|
if (fwd->m_InExec)
|
||||||
|
{
|
||||||
|
fwd->m_ToDelete = true;
|
||||||
|
} else {
|
||||||
|
fwd->isFree = true;
|
||||||
|
m_FreeSPForwards.push(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num)
|
int CForwardMngr::duplicateSPForward(int id)
|
||||||
|
{
|
||||||
|
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSPForward *fwd = m_SPForwards.at(id >> 1);
|
||||||
|
|
||||||
|
return registerSPForward(fwd->m_Func, fwd->m_Amx, fwd->m_NumParams, fwd->m_ParamTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CForwardMngr::isSameSPForward(int id1, int id2)
|
||||||
|
{
|
||||||
|
if (!isIdValid(id1) || !isIdValid(id2))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSPForward *fwd1 = m_SPForwards.at(id1 >> 1);
|
||||||
|
CSPForward *fwd2 = m_SPForwards.at(id2 >> 1);
|
||||||
|
|
||||||
|
if (fwd1->isFree || fwd2->isFree)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((fwd1->m_Amx == fwd2->m_Amx)
|
||||||
|
&& (fwd1->m_Func == fwd2->m_Func)
|
||||||
|
&& (fwd1->m_NumParams == fwd2->m_NumParams));
|
||||||
|
}
|
||||||
|
|
||||||
|
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num, int fwd_type)
|
||||||
{
|
{
|
||||||
ForwardParam params[FORWARD_MAX_PARAMS];
|
ForwardParam params[FORWARD_MAX_PARAMS];
|
||||||
|
|
||||||
for (size_t i=0; i<num; i++)
|
for (size_t i=0; i<num; i++)
|
||||||
|
{
|
||||||
params[i] = static_cast<ForwardParam>(list[i]);
|
params[i] = static_cast<ForwardParam>(list[i]);
|
||||||
|
}
|
||||||
|
|
||||||
return g_forwards.registerForward(funcName, et, num, params);
|
return g_forwards.registerForward(funcName, et, num, params, fwd_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
int registerForward(const char *funcName, ForwardExecType et, ...)
|
int registerForward(const char *funcName, ForwardExecType et, ...)
|
||||||
|
@ -51,6 +51,10 @@
|
|||||||
|
|
||||||
const int FORWARD_MAX_PARAMS = 32;
|
const int FORWARD_MAX_PARAMS = 32;
|
||||||
|
|
||||||
|
#define FORWARD_ONLY_OLD 1
|
||||||
|
#define FORWARD_ONLY_NEW 2
|
||||||
|
#define FORWARD_ALL 3
|
||||||
|
|
||||||
enum ForwardExecType
|
enum ForwardExecType
|
||||||
{
|
{
|
||||||
ET_IGNORE = 0, // Ignore return vaue
|
ET_IGNORE = 0, // Ignore return vaue
|
||||||
@ -107,7 +111,7 @@ class CForward
|
|||||||
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam * paramTypes);
|
CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam * paramTypes, int fwd_type=FORWARD_ALL);
|
||||||
CForward() {} // leaves everything unitialized'
|
CForward() {} // leaves everything unitialized'
|
||||||
|
|
||||||
cell execute(cell *params, ForwardPreparedArray *preparedArrays);
|
cell execute(cell *params, ForwardPreparedArray *preparedArrays);
|
||||||
@ -139,7 +143,7 @@ public:
|
|||||||
// Single plugin forward
|
// Single plugin forward
|
||||||
class CSPForward
|
class CSPForward
|
||||||
{
|
{
|
||||||
const char *m_FuncName;
|
friend class CForwardMngr;
|
||||||
int m_NumParams;
|
int m_NumParams;
|
||||||
|
|
||||||
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
||||||
@ -148,6 +152,8 @@ class CSPForward
|
|||||||
int m_Func;
|
int m_Func;
|
||||||
bool m_HasFunc;
|
bool m_HasFunc;
|
||||||
String m_Name;
|
String m_Name;
|
||||||
|
bool m_InExec;
|
||||||
|
bool m_ToDelete;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool isFree;
|
bool isFree;
|
||||||
@ -203,13 +209,15 @@ public:
|
|||||||
|
|
||||||
// Interface
|
// Interface
|
||||||
// Register normal forward
|
// Register normal forward
|
||||||
int registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam *paramTypes);
|
int registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam *paramTypes, int fwd_type=FORWARD_ALL);
|
||||||
// Register single plugin forward
|
// Register single plugin forward
|
||||||
int registerSPForward(const char *funcName, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
int registerSPForward(const char *funcName, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
||||||
int registerSPForward(int func, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
int registerSPForward(int func, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
||||||
|
|
||||||
// Unregister single plugin forward
|
// Unregister single plugin forward
|
||||||
void unregisterSPForward(int id);
|
void unregisterSPForward(int id);
|
||||||
|
int duplicateSPForward(int id);
|
||||||
|
int isSameSPForward(int id1, int id2);
|
||||||
|
|
||||||
// execute forward
|
// execute forward
|
||||||
cell executeForwards(int id, cell *params);
|
cell executeForwards(int id, cell *params);
|
||||||
@ -227,7 +235,7 @@ public:
|
|||||||
|
|
||||||
// (un)register forward
|
// (un)register forward
|
||||||
int registerForward(const char *funcName, ForwardExecType et, ...);
|
int registerForward(const char *funcName, ForwardExecType et, ...);
|
||||||
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num);
|
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num, int fwd_type=FORWARD_ALL);
|
||||||
int registerSPForwardByName(AMX *amx, const char *funcName, ...);
|
int registerSPForwardByName(AMX *amx, const char *funcName, ...);
|
||||||
int registerSPForwardByNameC(AMX *amx, const char *funcName, cell *list, size_t num);
|
int registerSPForwardByNameC(AMX *amx, const char *funcName, cell *list, size_t num);
|
||||||
int registerSPForward(AMX *amx, int func, ...);
|
int registerSPForward(AMX *amx, int func, ...);
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "format.h"
|
#include "format.h"
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#define _snprintf snprintf
|
#define _snprintf snprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ size_t CLangMngr::strip(char *str, char *newstr, bool makelower)
|
|||||||
int flag = 0;
|
int flag = 0;
|
||||||
size_t strln = strlen(str);
|
size_t strln = strlen(str);
|
||||||
|
|
||||||
for (i = strln - 1; i >= 0; i--)
|
for (i = strln - 1; i < strln; i--)
|
||||||
{
|
{
|
||||||
if (str[i] == '\n' || str[i] == ' ' || str[i] == '\t')
|
if (str[i] == '\n' || str[i] == ' ' || str[i] == '\t')
|
||||||
{
|
{
|
||||||
|
@ -111,7 +111,7 @@ void LogEventsMngr::CLogEvent::registerFilter(char* filter)
|
|||||||
filters = new LogCond(cmp->pos, aa, filters);
|
filters = new LogCond(cmp->pos, aa, filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogEventsMngr::setLogString(char* frmt, va_list& vaptr)
|
void LogEventsMngr::setLogString(const char* frmt, va_list& vaptr)
|
||||||
{
|
{
|
||||||
++logCounter;
|
++logCounter;
|
||||||
int len = vsnprintf(logString, 255, frmt, vaptr);
|
int len = vsnprintf(logString, 255, frmt, vaptr);
|
||||||
@ -128,7 +128,7 @@ void LogEventsMngr::setLogString(char* frmt, va_list& vaptr)
|
|||||||
logArgc = 0;
|
logArgc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogEventsMngr::setLogString(char* frmt, ...)
|
void LogEventsMngr::setLogString(const char* frmt, ...)
|
||||||
{
|
{
|
||||||
++logCounter;
|
++logCounter;
|
||||||
va_list logArgPtr;
|
va_list logArgPtr;
|
||||||
|
@ -141,8 +141,8 @@ public:
|
|||||||
CLogEvent* registerLogEvent(CPluginMngr::CPlugin* plugin, int func, int pos);
|
CLogEvent* registerLogEvent(CPluginMngr::CPlugin* plugin, int func, int pos);
|
||||||
inline bool logEventsExist() { return arelogevents; }
|
inline bool logEventsExist() { return arelogevents; }
|
||||||
|
|
||||||
void setLogString(char* frmt, va_list& vaptr);
|
void setLogString(const char* frmt, va_list& vaptr);
|
||||||
void setLogString(char* frmt, ...);
|
void setLogString(const char* frmt, ...);
|
||||||
void parseLogString();
|
void parseLogString();
|
||||||
void executeLogEvents();
|
void executeLogEvents();
|
||||||
|
|
||||||
|
@ -35,13 +35,15 @@
|
|||||||
// *****************************************************
|
// *****************************************************
|
||||||
// class MenuMngr
|
// class MenuMngr
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
MenuMngr::MenuCommand::MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f)
|
MenuMngr::MenuCommand::MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f, bool new_menu)
|
||||||
{
|
{
|
||||||
plugin = a;
|
plugin = a;
|
||||||
keys = k;
|
keys = k;
|
||||||
menuid = mi;
|
menuid = mi;
|
||||||
function = f;
|
|
||||||
next = 0;
|
next = 0;
|
||||||
|
is_new_menu = new_menu;
|
||||||
|
|
||||||
|
function = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuMngr::~MenuMngr()
|
MenuMngr::~MenuMngr()
|
||||||
@ -61,66 +63,47 @@ int MenuMngr::findMenuId(const char* name, AMX* amx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuMngr::removeMenuId(int id)
|
|
||||||
{
|
|
||||||
MenuIdEle *n = headid;
|
|
||||||
MenuIdEle *l = NULL;
|
|
||||||
while (n)
|
|
||||||
{
|
|
||||||
if (n->id == id)
|
|
||||||
{
|
|
||||||
if (l)
|
|
||||||
l->next = n->next;
|
|
||||||
else
|
|
||||||
headid = n->next;
|
|
||||||
delete n;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
l = n;
|
|
||||||
n = n->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
MenuCommand *c = headcmd;
|
|
||||||
MenuCommand *lc = NULL;
|
|
||||||
MenuCommand *tmp;
|
|
||||||
while (c)
|
|
||||||
{
|
|
||||||
if (c->menuid == id)
|
|
||||||
{
|
|
||||||
if (lc)
|
|
||||||
lc->next = c->next;
|
|
||||||
else
|
|
||||||
headcmd = c->next;
|
|
||||||
tmp = c->next;
|
|
||||||
delete c;
|
|
||||||
c = tmp;
|
|
||||||
} else {
|
|
||||||
lc = c;
|
|
||||||
c = c->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int MenuMngr::registerMenuId(const char* n, AMX* a)
|
int MenuMngr::registerMenuId(const char* n, AMX* a)
|
||||||
{
|
{
|
||||||
int id = findMenuId(n, a);
|
int id = findMenuId(n, a);
|
||||||
|
|
||||||
if (id)
|
if (id)
|
||||||
|
{
|
||||||
return id;
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
headid = new MenuIdEle(n, a, headid);
|
headid = new MenuIdEle(n, a, headid);
|
||||||
|
|
||||||
if (!headid)
|
|
||||||
return 0; // :TODO: Better error report
|
|
||||||
|
|
||||||
return headid->id;
|
return headid->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuMngr::registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f)
|
void MenuMngr::registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f, bool from_new_menu)
|
||||||
{
|
{
|
||||||
MenuCommand** temp = &headcmd;
|
MenuCommand **temp = &headcmd;
|
||||||
while (*temp) temp = &(*temp)->next;
|
if (from_new_menu)
|
||||||
*temp = new MenuCommand(a, mi, k, f);
|
{
|
||||||
|
MenuCommand *ptr;
|
||||||
|
while (*temp)
|
||||||
|
{
|
||||||
|
ptr = *temp;
|
||||||
|
if (ptr->is_new_menu
|
||||||
|
&& ptr->plugin == a
|
||||||
|
&& ptr->menuid == mi)
|
||||||
|
{
|
||||||
|
if (g_forwards.isSameSPForward(ptr->function, f))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
temp = &(*temp)->next;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (*temp)
|
||||||
|
{
|
||||||
|
temp = &(*temp)->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*temp = new MenuCommand(a, mi, k, f, from_new_menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuMngr::clear()
|
void MenuMngr::clear()
|
||||||
@ -140,4 +123,13 @@ void MenuMngr::clear()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MenuMngr::iterator MenuMngr::SetWatchIter(MenuMngr::iterator iter)
|
||||||
|
{
|
||||||
|
MenuMngr::iterator old = m_watch_iter;
|
||||||
|
|
||||||
|
m_watch_iter = iter;
|
||||||
|
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
int MenuMngr::MenuIdEle::uniqueid = 0;
|
int MenuMngr::MenuIdEle::uniqueid = 0;
|
||||||
|
@ -66,29 +66,34 @@ private:
|
|||||||
int menuid;
|
int menuid;
|
||||||
int keys;
|
int keys;
|
||||||
int function;
|
int function;
|
||||||
|
int is_new_menu;
|
||||||
|
|
||||||
MenuCommand* next;
|
MenuCommand* next;
|
||||||
MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f);
|
MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f, bool new_menu=false);
|
||||||
public:
|
public:
|
||||||
inline int getFunction() { return function; }
|
inline int getFunction() { return function; }
|
||||||
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
||||||
inline bool matchCommand(int m, int k) { return ((m == menuid) && (keys & k)); }
|
inline bool matchCommand(int m, int k)
|
||||||
|
{
|
||||||
|
return ((m == menuid) && (keys & k));
|
||||||
|
}
|
||||||
} *headcmd;
|
} *headcmd;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MenuMngr() { headid = 0; headcmd = 0; }
|
MenuMngr() : m_watch_iter(end())
|
||||||
|
{ headid = NULL; headcmd = NULL; }
|
||||||
~MenuMngr();
|
~MenuMngr();
|
||||||
|
|
||||||
// Interface
|
// Interface
|
||||||
|
|
||||||
int findMenuId(const char* name, AMX* a = 0);
|
int findMenuId(const char* name, AMX* a = 0);
|
||||||
int registerMenuId(const char* n, AMX* a);
|
int registerMenuId(const char* n, AMX* a);
|
||||||
void removeMenuId(int id);
|
void registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f, bool from_new_menu=false);
|
||||||
void registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f);
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
class iterator
|
class iterator
|
||||||
{
|
{
|
||||||
|
friend class MenuMngr;
|
||||||
MenuCommand* a;
|
MenuCommand* a;
|
||||||
public:
|
public:
|
||||||
iterator(MenuCommand*aa) : a(aa) {}
|
iterator(MenuCommand*aa) : a(aa) {}
|
||||||
@ -101,6 +106,13 @@ public:
|
|||||||
|
|
||||||
inline iterator begin() const { return iterator(headcmd); }
|
inline iterator begin() const { return iterator(headcmd); }
|
||||||
inline iterator end() const { return iterator(0); }
|
inline iterator end() const { return iterator(0); }
|
||||||
|
|
||||||
|
MenuMngr::iterator SetWatchIter(MenuMngr::iterator iter);
|
||||||
|
inline MenuMngr::iterator GetWatchIter() { return m_watch_iter; }
|
||||||
|
private:
|
||||||
|
MenuMngr::iterator m_watch_iter;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern MenuMngr g_menucmds;
|
||||||
|
|
||||||
#endif //MENUS_H
|
#endif //MENUS_H
|
||||||
|
@ -40,8 +40,6 @@ void CPlayer::Init(edict_t* e, int i)
|
|||||||
pEdict = e;
|
pEdict = e;
|
||||||
initialized = false;
|
initialized = false;
|
||||||
ingame = false;
|
ingame = false;
|
||||||
bot_value = false;
|
|
||||||
bot_cached = false;
|
|
||||||
authorized = false;
|
authorized = false;
|
||||||
|
|
||||||
current = 0;
|
current = 0;
|
||||||
@ -89,8 +87,6 @@ void CPlayer::Disconnect()
|
|||||||
}
|
}
|
||||||
queries.clear();
|
queries.clear();
|
||||||
|
|
||||||
bot_value = false;
|
|
||||||
bot_cached = false;
|
|
||||||
menu = 0;
|
menu = 0;
|
||||||
newmenu = -1;
|
newmenu = -1;
|
||||||
}
|
}
|
||||||
@ -116,8 +112,6 @@ int CPlayer::NextHUDChannel()
|
|||||||
|
|
||||||
bool CPlayer::Connect(const char* connectname, const char* ipaddress)
|
bool CPlayer::Connect(const char* connectname, const char* ipaddress)
|
||||||
{
|
{
|
||||||
bot_value = false;
|
|
||||||
bot_cached = false;
|
|
||||||
name.assign(connectname);
|
name.assign(connectname);
|
||||||
ip.assign(ipaddress);
|
ip.assign(ipaddress);
|
||||||
time = gpGlobals->time;
|
time = gpGlobals->time;
|
||||||
|
112
amxmodx/CMisc.h
112
amxmodx/CMisc.h
@ -84,8 +84,6 @@ public:
|
|||||||
|
|
||||||
bool initialized;
|
bool initialized;
|
||||||
bool ingame;
|
bool ingame;
|
||||||
bool bot_cached;
|
|
||||||
bool bot_value;
|
|
||||||
bool authorized;
|
bool authorized;
|
||||||
bool vgui;
|
bool vgui;
|
||||||
|
|
||||||
@ -120,7 +118,6 @@ public:
|
|||||||
cell hudmap[5];
|
cell hudmap[5];
|
||||||
|
|
||||||
Vector lastTrace;
|
Vector lastTrace;
|
||||||
Vector thisTrace;
|
|
||||||
Vector lastHit;
|
Vector lastHit;
|
||||||
|
|
||||||
List<ClientCvarQuery_Info *> queries;
|
List<ClientCvarQuery_Info *> queries;
|
||||||
@ -133,24 +130,18 @@ public:
|
|||||||
|
|
||||||
inline bool IsBot()
|
inline bool IsBot()
|
||||||
{
|
{
|
||||||
if (!bot_cached)
|
if ((pEdict->v.flags & FL_FAKECLIENT) == FL_FAKECLIENT)
|
||||||
{
|
{
|
||||||
bot_value = false;
|
return true;
|
||||||
if (pEdict->v.flags & FL_FAKECLIENT)
|
|
||||||
{
|
|
||||||
bot_value = true;
|
|
||||||
bot_cached = true;
|
|
||||||
} else {
|
|
||||||
const char *auth = GETPLAYERAUTHID(pEdict);
|
|
||||||
if (auth && (strcmp(auth, "BOT") == 0))
|
|
||||||
{
|
|
||||||
bot_value = true;
|
|
||||||
bot_cached = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return bot_value;
|
const char *auth = GETPLAYERAUTHID(pEdict);
|
||||||
|
if (auth && (strcmp(auth, "BOT") == 0))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool IsAlive()
|
inline bool IsAlive()
|
||||||
@ -305,4 +296,87 @@ public:
|
|||||||
inline bool isNewTeam() { return newTeam ? true : false; }
|
inline bool isNewTeam() { return newTeam ? true : false; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CAdminData
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
cell m_AuthData[44];
|
||||||
|
cell m_Password[32];
|
||||||
|
cell m_Flags;
|
||||||
|
cell m_Access;
|
||||||
|
public:
|
||||||
|
|
||||||
|
CAdminData()
|
||||||
|
{
|
||||||
|
m_AuthData[0]=0;
|
||||||
|
m_Password[0]=0;
|
||||||
|
m_Flags=0;
|
||||||
|
m_Access=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
void SetAccess(cell Access)
|
||||||
|
{
|
||||||
|
m_Access=Access;
|
||||||
|
};
|
||||||
|
cell GetAccess(void) const
|
||||||
|
{
|
||||||
|
return m_Access;
|
||||||
|
};
|
||||||
|
|
||||||
|
void SetFlags(cell Flags)
|
||||||
|
{
|
||||||
|
m_Flags=Flags;
|
||||||
|
};
|
||||||
|
cell GetFlags(void) const
|
||||||
|
{
|
||||||
|
return m_Flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
void SetAuthID(const cell *Input)
|
||||||
|
{
|
||||||
|
unsigned int i=0;
|
||||||
|
while (i<sizeof(m_AuthData)-1)
|
||||||
|
{
|
||||||
|
if ((m_AuthData[i++]=*Input++)==0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_AuthData[arraysize(m_AuthData)-1]=0;
|
||||||
|
|
||||||
|
};
|
||||||
|
const cell *GetAuthID(void) const
|
||||||
|
{
|
||||||
|
return &m_AuthData[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
void SetPass(const cell *Input)
|
||||||
|
{
|
||||||
|
unsigned int i=0;
|
||||||
|
while (i<sizeof(m_Password)-1)
|
||||||
|
{
|
||||||
|
if ((m_Password[i++]=*Input++)==0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Password[arraysize(m_Password)-1]=0;
|
||||||
|
|
||||||
|
};
|
||||||
|
const cell *GetPass(void) const
|
||||||
|
{
|
||||||
|
return &m_Password[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
CAdminData & operator = (const CAdminData &src)
|
||||||
|
{
|
||||||
|
this->SetAccess(src.GetAccess());
|
||||||
|
this->SetFlags(src.GetFlags());
|
||||||
|
this->SetAuthID(src.GetAuthID());
|
||||||
|
this->SetPass(src.GetPass());
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
#endif //CMISC_H
|
#endif //CMISC_H
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
// New
|
// New
|
||||||
typedef void* (*PFN_REQ_FNPTR)(const char * /*name*/);
|
typedef void* (*PFN_REQ_FNPTR)(const char * /*name*/);
|
||||||
typedef int (FAR *QUERYMOD_NEW)(int * /*ifvers*/, amxx_module_info_s * /*modInfo*/);
|
typedef int (FAR *QUERYMOD_NEW)(int * /*ifvers*/, amxx_module_info_s * /*modInfo*/);
|
||||||
|
typedef int (FAR *CHECKGAME_NEW)(const char *);
|
||||||
typedef int (FAR *ATTACHMOD_NEW)(PFN_REQ_FNPTR /*reqFnptrFunc*/);
|
typedef int (FAR *ATTACHMOD_NEW)(PFN_REQ_FNPTR /*reqFnptrFunc*/);
|
||||||
typedef int (FAR *DETACHMOD_NEW)(void);
|
typedef int (FAR *DETACHMOD_NEW)(void);
|
||||||
typedef void (FAR *PLUGINSLOADED_NEW)(void);
|
typedef void (FAR *PLUGINSLOADED_NEW)(void);
|
||||||
@ -219,6 +220,9 @@ bool CModule::queryModule()
|
|||||||
m_Handle = DLLOAD(m_Filename.c_str()); // load file
|
m_Handle = DLLOAD(m_Filename.c_str()); // load file
|
||||||
if (!m_Handle)
|
if (!m_Handle)
|
||||||
{
|
{
|
||||||
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
|
AMXXLOG_Log("[AMXX] Module \"%s\" failed to load (%s)", m_Filename.c_str(), dlerror());
|
||||||
|
#endif
|
||||||
m_Status = MODULE_BADLOAD;
|
m_Status = MODULE_BADLOAD;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -293,6 +297,33 @@ bool CModule::queryModule()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Lastly, check to see if this module is able to load on this game mod
|
||||||
|
CHECKGAME_NEW checkGame_New = (CHECKGAME_NEW)DLPROC(m_Handle, "AMXX_CheckGame");
|
||||||
|
|
||||||
|
if (checkGame_New)
|
||||||
|
{
|
||||||
|
// This is an optional check; do not fail modules that do not have it
|
||||||
|
int ret = checkGame_New(g_mod_name.c_str());
|
||||||
|
|
||||||
|
if (ret != AMXX_GAME_OK)
|
||||||
|
{
|
||||||
|
switch (ret)
|
||||||
|
{
|
||||||
|
case AMXX_GAME_BAD:
|
||||||
|
AMXXLOG_Log("[AMXX] Module \"%s\" (version \"%s\") reported that it cannot load on game \"%s\"", m_Filename.c_str(), getVersion(), g_mod_name.c_str());
|
||||||
|
m_Status = MODULE_BADGAME;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AMXXLOG_Log("[AMXX] Module \"%s\" (version \"%s\") returned an unknown CheckGame code (value: %d)", m_Filename.c_str(), getVersion(), ret);
|
||||||
|
m_Status = MODULE_BADLOAD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_Status = MODULE_QUERY;
|
m_Status = MODULE_QUERY;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -400,6 +431,7 @@ const char* CModule::getStatus() const
|
|||||||
case MODULE_NEWER: return "newer";
|
case MODULE_NEWER: return "newer";
|
||||||
case MODULE_INTERROR: return "internal err";
|
case MODULE_INTERROR: return "internal err";
|
||||||
case MODULE_NOT64BIT: return "not 64bit";
|
case MODULE_NOT64BIT: return "not 64bit";
|
||||||
|
case MODULE_BADGAME: return "bad game";
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,8 @@ enum MODULE_STATUS
|
|||||||
MODULE_NEWER, // newer interface
|
MODULE_NEWER, // newer interface
|
||||||
MODULE_INTERROR, // Internal error
|
MODULE_INTERROR, // Internal error
|
||||||
MODULE_FUNCNOTPRESENT, // Function not present
|
MODULE_FUNCNOTPRESENT, // Function not present
|
||||||
MODULE_NOT64BIT // Not 64 bit compatible
|
MODULE_NOT64BIT, // Not 64 bit compatible
|
||||||
|
MODULE_BADGAME, // Module cannot load on the current game mod
|
||||||
};
|
};
|
||||||
|
|
||||||
struct amxx_module_info_s
|
struct amxx_module_info_s
|
||||||
@ -68,6 +69,9 @@ struct amxx_module_info_s
|
|||||||
#define AMXX_PARAM 2 /* Invalid parameter */
|
#define AMXX_PARAM 2 /* Invalid parameter */
|
||||||
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
||||||
|
|
||||||
|
#define AMXX_GAME_OK 0 /* Module can load on this game. */
|
||||||
|
#define AMXX_GAME_BAD 1 /* Module cannot load on this game. */
|
||||||
|
|
||||||
#define AMXX_INTERFACE_VERSION 4
|
#define AMXX_INTERFACE_VERSION 4
|
||||||
|
|
||||||
class CModule
|
class CModule
|
||||||
|
@ -90,7 +90,7 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
|
|||||||
{
|
{
|
||||||
if (warn)
|
if (warn)
|
||||||
{
|
{
|
||||||
AMXXLOG_Log("[AMXX] Plugins list not found (file \"%s\")", filename);
|
AMXXLOG_Error("[AMXX] Plugins list not found (file \"%s\")", filename);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -153,6 +153,11 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (findPlugin(pluginName) != NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag);
|
CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag);
|
||||||
|
|
||||||
if (plugin->getStatusCode() == ps_bad_load)
|
if (plugin->getStatusCode() == ps_bad_load)
|
||||||
@ -160,7 +165,7 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
|
|||||||
char errorMsg[255];
|
char errorMsg[255];
|
||||||
sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName);
|
sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName);
|
||||||
plugin->setError(errorMsg);
|
plugin->setError(errorMsg);
|
||||||
AMXXLOG_Log("[AMXX] %s", plugin->getError());
|
AMXXLOG_Error("[AMXX] %s", plugin->getError());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,7 +217,7 @@ CPluginMngr::CPlugin* CPluginMngr::findPlugin(int index)
|
|||||||
|
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPluginMngr::CPlugin* CPluginMngr::findPlugin(const char* name)
|
CPluginMngr::CPlugin* CPluginMngr::findPlugin(const char* name)
|
||||||
{
|
{
|
||||||
if (!name)
|
if (!name)
|
||||||
@ -231,6 +236,17 @@ CPluginMngr::CPlugin* CPluginMngr::findPlugin(const char* name)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPluginMngr::CPlugin::AddToFailCounter(unsigned int i)
|
||||||
|
{
|
||||||
|
failcounter += i;
|
||||||
|
if ((failcounter >= 3)
|
||||||
|
&& (status ))
|
||||||
|
{
|
||||||
|
errorMsg.assign("This plugin is non-GPL which violates AMX Mod X's license.");
|
||||||
|
status = ps_bad_load;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const char* CPluginMngr::CPlugin::getStatus() const
|
const char* CPluginMngr::CPlugin::getStatus() const
|
||||||
{
|
{
|
||||||
switch (status)
|
switch (status)
|
||||||
@ -258,6 +274,7 @@ CPluginMngr::CPlugin::CPlugin(int i, const char* p, const char* n, char* e, int
|
|||||||
{
|
{
|
||||||
const char* unk = "unknown";
|
const char* unk = "unknown";
|
||||||
|
|
||||||
|
failcounter = 0;
|
||||||
title.assign(unk);
|
title.assign(unk);
|
||||||
author.assign(unk);
|
author.assign(unk);
|
||||||
version.assign(unk);
|
version.assign(unk);
|
||||||
@ -417,14 +434,16 @@ void CPluginMngr::CPlugin::pausePlugin()
|
|||||||
// Unpause a plugin
|
// Unpause a plugin
|
||||||
void CPluginMngr::CPlugin::unpausePlugin()
|
void CPluginMngr::CPlugin::unpausePlugin()
|
||||||
{
|
{
|
||||||
if (isValid())
|
if (isValid() && (getStatusCode() != ps_stopped))
|
||||||
{
|
{
|
||||||
// set status first so the function will be marked executable
|
// set status first so the function will be marked executable
|
||||||
setStatus(ps_running);
|
setStatus(ps_running);
|
||||||
|
|
||||||
// call plugin_unpause if provided
|
// call plugin_unpause if provided
|
||||||
if (m_UnpauseFwd != -1)
|
if (m_UnpauseFwd != -1)
|
||||||
|
{
|
||||||
executeForwards(m_UnpauseFwd);
|
executeForwards(m_UnpauseFwd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +71,7 @@ public:
|
|||||||
String author;
|
String author;
|
||||||
String errorMsg;
|
String errorMsg;
|
||||||
|
|
||||||
|
unsigned int failcounter;
|
||||||
int m_PauseFwd;
|
int m_PauseFwd;
|
||||||
int m_UnpauseFwd;
|
int m_UnpauseFwd;
|
||||||
int paused_fun;
|
int paused_fun;
|
||||||
@ -98,9 +99,11 @@ public:
|
|||||||
inline void setError(const char* n) { errorMsg.assign(n); }
|
inline void setError(const char* n) { errorMsg.assign(n); }
|
||||||
inline bool isValid() const { return (status >= ps_paused); }
|
inline bool isValid() const { return (status >= ps_paused); }
|
||||||
inline bool isPaused() const { return ((status == ps_paused) || (status == ps_stopped)); }
|
inline bool isPaused() const { return ((status == ps_paused) || (status == ps_stopped)); }
|
||||||
|
inline bool isStopped() const { return (status == ps_stopped); }
|
||||||
inline bool isExecutable(int id) const { return (isValid() && !isPaused()); }
|
inline bool isExecutable(int id) const { return (isValid() && !isPaused()); }
|
||||||
|
|
||||||
void Finalize();
|
void Finalize();
|
||||||
|
void AddToFailCounter(unsigned int i);
|
||||||
void pausePlugin();
|
void pausePlugin();
|
||||||
void unpausePlugin();
|
void unpausePlugin();
|
||||||
void pauseFunction(int id);
|
void pauseFunction(int id);
|
||||||
|
@ -129,7 +129,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Added this for amxx inclusion
|
//Added this for amxx inclusion
|
||||||
bool empty()
|
bool empty() const
|
||||||
{
|
{
|
||||||
if (!v)
|
if (!v)
|
||||||
return true;
|
return true;
|
||||||
@ -140,7 +140,7 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size()
|
size_t size() const
|
||||||
{
|
{
|
||||||
if (v)
|
if (v)
|
||||||
return strlen(v);
|
return strlen(v);
|
||||||
@ -244,7 +244,7 @@ public:
|
|||||||
|
|
||||||
if (is_space(v[len-1]))
|
if (is_space(v[len-1]))
|
||||||
{
|
{
|
||||||
for (i=len-1; i>=0; i--)
|
for (i=len-1; i<len; i--)
|
||||||
{
|
{
|
||||||
if (!is_space(v[i])
|
if (!is_space(v[i])
|
||||||
|| (is_space(v[i]) && i==0))
|
|| (is_space(v[i]) && i==0))
|
||||||
|
@ -37,12 +37,20 @@
|
|||||||
// Vector
|
// Vector
|
||||||
template <class T> class CVector
|
template <class T> class CVector
|
||||||
{
|
{
|
||||||
bool Grow()
|
bool Grow(size_t amount)
|
||||||
{
|
{
|
||||||
// automatic grow
|
// automatic grow
|
||||||
size_t newSize = m_Size * 2;
|
size_t newSize = m_Size * 2;
|
||||||
|
|
||||||
if (newSize == 0)
|
if (newSize == 0)
|
||||||
newSize = 8; // a good init value
|
{
|
||||||
|
newSize = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (m_CurrentUsedSize + amount > newSize)
|
||||||
|
{
|
||||||
|
newSize *= 2;
|
||||||
|
}
|
||||||
T *newData = new T[newSize];
|
T *newData = new T[newSize];
|
||||||
if (!newData)
|
if (!newData)
|
||||||
return false;
|
return false;
|
||||||
@ -57,12 +65,16 @@ template <class T> class CVector
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GrowIfNeeded()
|
bool GrowIfNeeded(size_t amount)
|
||||||
{
|
{
|
||||||
if (m_CurrentUsedSize >= m_Size)
|
if (m_CurrentUsedSize + amount >= m_Size)
|
||||||
return Grow();
|
{
|
||||||
|
return Grow(amount);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChangeSize(size_t size)
|
bool ChangeSize(size_t size)
|
||||||
@ -329,14 +341,13 @@ public:
|
|||||||
|
|
||||||
bool push_back(const T & elem)
|
bool push_back(const T & elem)
|
||||||
{
|
{
|
||||||
++m_CurrentUsedSize;
|
if (!GrowIfNeeded(1))
|
||||||
if (!GrowIfNeeded())
|
|
||||||
{
|
{
|
||||||
--m_CurrentUsedSize;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Data[m_CurrentUsedSize - 1] = elem;
|
m_Data[m_CurrentUsedSize++] = elem;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,13 +445,13 @@ public:
|
|||||||
|
|
||||||
size_t ofs = where - begin();
|
size_t ofs = where - begin();
|
||||||
|
|
||||||
++m_CurrentUsedSize;
|
if (!GrowIfNeeded(1))
|
||||||
if (!GrowIfNeeded())
|
|
||||||
{
|
{
|
||||||
--m_CurrentUsedSize;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++m_CurrentUsedSize;
|
||||||
|
|
||||||
where = begin() + ofs;
|
where = begin() + ofs;
|
||||||
|
|
||||||
// Move subsequent entries
|
// Move subsequent entries
|
||||||
|
BIN
amxmodx/JIT/amxexecn-darwin.o
Normal file
BIN
amxmodx/JIT/amxexecn-darwin.o
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
amxmodx/JIT/amxjitsn-darwin.o
Normal file
BIN
amxmodx/JIT/amxjitsn-darwin.o
Normal file
Binary file not shown.
Binary file not shown.
BIN
amxmodx/JIT/helpers-darwin-x86.o
Normal file
BIN
amxmodx/JIT/helpers-darwin-x86.o
Normal file
Binary file not shown.
Binary file not shown.
BIN
amxmodx/JIT/natives-darwin-x86.o
Normal file
BIN
amxmodx/JIT/natives-darwin-x86.o
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
179
amxmodx/Makefile
179
amxmodx/Makefile
@ -1,118 +1,147 @@
|
|||||||
#(C)2004-2005 AMX Mod X Development Team
|
# (C)2004-2013 AMX Mod X Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
HLSDK = ../../hlsdk
|
###########################################
|
||||||
MM_ROOT = ../metamod/metamod
|
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
|
||||||
|
###########################################
|
||||||
|
|
||||||
|
HLSDK = ../../hlsdk/multiplayer
|
||||||
|
MM_ROOT = ../../metamod/metamod
|
||||||
|
|
||||||
|
#####################################
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
|
#####################################
|
||||||
|
|
||||||
OPT_FLAGS = -O2 -fno-strict-aliasing -funroll-loops -s -fomit-frame-pointer -pipe
|
PROJECT = amxmodx
|
||||||
DEBUG_FLAGS = -g -ggdb3
|
|
||||||
CPP = gcc-4.1
|
|
||||||
NAME = amxmodx
|
|
||||||
|
|
||||||
BIN_SUFFIX_32 = mm_i386.so
|
|
||||||
BIN_SUFFIX_64 = mm_amd64.so
|
|
||||||
|
|
||||||
OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules.cpp \
|
OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules.cpp \
|
||||||
CMisc.cpp CTask.cpp string.cpp amxmodx.cpp CEvent.cpp CCmd.cpp CLogEvent.cpp \
|
CMisc.cpp CTask.cpp string.cpp amxmodx.cpp CEvent.cpp CCmd.cpp CLogEvent.cpp \
|
||||||
srvcmd.cpp strptime.cpp amxcore.cpp amxtime.cpp power.cpp amxxlog.cpp fakemeta.cpp \
|
srvcmd.cpp strptime.cpp amxcore.cpp amxtime.cpp power.cpp amxxlog.cpp fakemeta.cpp \
|
||||||
amxxfile.cpp CLang.cpp md5.cpp emsg.cpp CForward.cpp CPlugin.cpp CModule.cpp \
|
amxxfile.cpp CLang.cpp md5.cpp emsg.cpp CForward.cpp CPlugin.cpp CModule.cpp \
|
||||||
CMenu.cpp util.cpp amx.cpp amxdbg.cpp natives.cpp newmenus.cpp debugger.cpp \
|
CMenu.cpp util.cpp amx.cpp amxdbg.cpp natives.cpp newmenus.cpp debugger.cpp \
|
||||||
optimizer.cpp format.cpp messages.cpp libraries.cpp vector.cpp sorting.cpp \
|
optimizer.cpp format.cpp messages.cpp libraries.cpp vector.cpp sorting.cpp \
|
||||||
amxmod_compat.cpp
|
amxmod_compat.cpp nongpl_matches.cpp CFlagManager.cpp datastructs.cpp \
|
||||||
|
trie_natives.cpp
|
||||||
|
|
||||||
LINK = -lgcc -static-libgcc
|
##############################################
|
||||||
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
|
##############################################
|
||||||
|
|
||||||
INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
|
C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
|
||||||
-I$(MM_ROOT) -Lzlib -I$(HLSDK)/common
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
|
CPP = gcc
|
||||||
|
CPP_OSX = clang
|
||||||
|
|
||||||
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
LINK = -Lzlib
|
||||||
|
|
||||||
ifeq "$(GCC_VERSION)" "4"
|
INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
|
||||||
OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
|
-I$(MM_ROOT)
|
||||||
|
|
||||||
|
################################################
|
||||||
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
|
################################################
|
||||||
|
|
||||||
|
OS := $(shell uname -s)
|
||||||
|
|
||||||
|
ifeq "$(OS)" "Darwin"
|
||||||
|
OBJECTS += JIT/amxexecn-darwin.o JIT/amxjitsn-darwin.o JIT/natives-darwin-x86.o \
|
||||||
|
JIT/helpers-darwin-x86.o
|
||||||
|
|
||||||
|
CPP = $(CPP_OSX)
|
||||||
|
LIB_EXT = dylib
|
||||||
|
LIB_SUFFIX = _mm
|
||||||
|
CFLAGS += -DOSX
|
||||||
|
LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 -Wl,-read_only_relocs,suppress -lz-darwin
|
||||||
|
else
|
||||||
|
OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o JIT/helpers-x86.o
|
||||||
|
|
||||||
|
LIB_EXT = so
|
||||||
|
LIB_SUFFIX = _mm_i386
|
||||||
|
CFLAGS += -DLINUX
|
||||||
|
LINK += -shared -lz
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
LINK += -m32 -lm -ldl
|
||||||
|
|
||||||
|
CFLAGS += -DAMX_NOPROPLIST -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing \
|
||||||
|
-m32 -Wall -Werror
|
||||||
|
CPPFLAGS += -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
|
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
ifeq "$(DEBUG)" "true"
|
||||||
BIN_DIR = Debug
|
BIN_DIR = Debug
|
||||||
CFLAGS = $(DEBUG_FLAGS)
|
CFLAGS += $(C_DEBUG_FLAGS)
|
||||||
else
|
else
|
||||||
BIN_DIR = Release
|
BIN_DIR = Release
|
||||||
CFLAGS = $(OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
|
LINK += -s
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq "$(BINLOG)" "true"
|
ifeq "$(BINLOG)" "true"
|
||||||
NAME := $(NAME)_bl
|
LIB_SUFFIX := _bl$(LIB_SUFFIX)
|
||||||
BIN_DIR := $(BIN_DIR)BinLog
|
BIN_DIR := $(BIN_DIR)BinLog
|
||||||
OBJECTS += binlog.cpp
|
OBJECTS += binlog.cpp
|
||||||
CFLAGS += -DBINLOG_ENABLED
|
CFLAGS += -DBINLOG_ENABLED
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS += -DLINUX -DNDEBUG -DAMX_NOPROPLIST -fPIC -Wall -Werror -DHAVE_STDINT_H -static-libgcc -fno-rtti -fno-exceptions
|
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
|
||||||
|
|
||||||
ifeq "$(AMD64)" "true"
|
ifeq "$(IS_CLANG)" "1"
|
||||||
BINARY = $(NAME)_$(BIN_SUFFIX_64)
|
CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
|
||||||
CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -DAMD64 -m64
|
CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
|
||||||
LINK += -lz64
|
|
||||||
OBJECTS += JIT/natives-amd64.o
|
|
||||||
else
|
else
|
||||||
BINARY = $(NAME)_$(BIN_SUFFIX_32)
|
CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o
|
CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
|
||||||
OBJECTS += JIT/helpers-x86.o
|
|
||||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
|
|
||||||
LINK += -lz
|
|
||||||
OPT_FLAGS += -march=i586
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
# Clang || GCC >= 4
|
||||||
|
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Clang >= 3 || GCC >= 4.7
|
||||||
|
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
|
||||||
|
CFLAGS += -Wno-delete-non-virtual-dtor
|
||||||
|
endif
|
||||||
|
|
||||||
|
# OS is Linux and not using clang
|
||||||
|
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
|
||||||
|
LINK += -static-libgcc
|
||||||
|
endif
|
||||||
|
|
||||||
|
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
||||||
|
|
||||||
|
# This will break if we include other Makefiles, but is fine for now. It allows
|
||||||
|
# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
|
||||||
|
# or other changes without mucking up the original.
|
||||||
|
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
||||||
|
|
||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p $(BIN_DIR)
|
mkdir -p $(BIN_DIR)
|
||||||
$(MAKE) amxmodx
|
$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
|
||||||
|
|
||||||
amd64:
|
|
||||||
rm -f zlib/libz.a
|
|
||||||
$(MAKE) all AMD64=true
|
|
||||||
|
|
||||||
amd64_debug:
|
|
||||||
rm -f zlib/libz.a
|
|
||||||
$(MAKE) all AMD64=true DEBUG=true
|
|
||||||
|
|
||||||
amd64_binlog:
|
|
||||||
rm -f zlib/libz.a
|
|
||||||
$(MAKE) all AMD64=true BINLOG=true
|
|
||||||
|
|
||||||
amd64_binlog_debug:
|
|
||||||
rm -f zlib/libz.a
|
|
||||||
$(MAKE) all AMD64=true BINLOG=true DEBUG=true
|
|
||||||
|
|
||||||
binlog:
|
binlog:
|
||||||
$(MAKE) all BINLOG=true
|
$(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true
|
||||||
|
|
||||||
binlog_debug:
|
binlog_debug:
|
||||||
$(MAKE) all BINLOG=true DEBUG=true
|
$(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true DEBUG=true
|
||||||
|
|
||||||
amxmodx: $(OBJ_LINUX)
|
$(PROJECT): $(OBJ_BIN)
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
$(MAKE) all DEBUG=true
|
$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf Release/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
|
rm -f $(BIN_DIR)/$(BINARY)
|
||||||
rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
|
|
||||||
rm -rf ReleaseBinLog/*.o
|
|
||||||
rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_32)
|
|
||||||
rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_64)
|
|
||||||
rm -rf Debug/*.o
|
|
||||||
rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
|
|
||||||
rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
|
|
||||||
rm -rf DebugBinLog/*.o
|
|
||||||
rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_32)
|
|
||||||
rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_64)
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amx.cpp 3707 2008-04-14 19:56:31Z sawce $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define AMX_NODYNALOAD
|
#define AMX_NODYNALOAD
|
||||||
@ -48,7 +48,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "osdefs.h"
|
#include "osdefs.h"
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -436,7 +436,7 @@ int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params)
|
|||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
assert(hdr->natives<=hdr->libraries);
|
assert(hdr->natives<=hdr->libraries);
|
||||||
#if defined AMX_NATIVETABLE
|
#if defined AMX_NATIVETABLE
|
||||||
if (index<NULL) {
|
if (index<0) {
|
||||||
assert(-(index+1)<(sizeof(AMX_NATIVETABLE)/sizeof(AMX_NATIVETABLE)[0]));
|
assert(-(index+1)<(sizeof(AMX_NATIVETABLE)/sizeof(AMX_NATIVETABLE)[0]));
|
||||||
f=(AMX_NATIVETABLE)[-(index+1)];
|
f=(AMX_NATIVETABLE)[-(index+1)];
|
||||||
} else {
|
} else {
|
||||||
@ -803,7 +803,7 @@ static void expand(unsigned char *code, long codesize, long memsize)
|
|||||||
do {
|
do {
|
||||||
codesize--;
|
codesize--;
|
||||||
/* no input byte should be shifted out completely */
|
/* no input byte should be shifted out completely */
|
||||||
assert(shift<8*sizeof(cell));
|
assert(shift<static_cast<int>(8*sizeof(cell)));
|
||||||
/* we work from the end of a sequence backwards; the final code in
|
/* we work from the end of a sequence backwards; the final code in
|
||||||
* a sequence may not have the continuation bit set */
|
* a sequence may not have the continuation bit set */
|
||||||
assert(shift>0 || (code[(size_t)codesize] & 0x80)==0);
|
assert(shift>0 || (code[(size_t)codesize] & 0x80)==0);
|
||||||
@ -932,7 +932,7 @@ int AMXAPI amx_Init(AMX *amx, void *program)
|
|||||||
|
|
||||||
#define ALIGN(addr) (addr)
|
#define ALIGN(addr) (addr)
|
||||||
|
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
|
|
||||||
/* Linux already has mprotect() */
|
/* Linux already has mprotect() */
|
||||||
/* But wants the address aligned! */
|
/* But wants the address aligned! */
|
||||||
@ -973,27 +973,25 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code)
|
|||||||
memcpy(native_code, amx->base, ((AMX_HEADER *)(amx->base))->cod);
|
memcpy(native_code, amx->base, ((AMX_HEADER *)(amx->base))->cod);
|
||||||
hdr = (AMX_HEADER *)native_code;
|
hdr = (AMX_HEADER *)native_code;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* JIT rulz! (TM) */
|
/* JIT rulz! (TM) */
|
||||||
/* MP: added check for correct compilation */
|
/* MP: added check for correct compilation */
|
||||||
//Fixed bug (thanks T(+)rget)
|
//Fixed bug (thanks T(+)rget)
|
||||||
if ((res = asm_runJIT(amx->base, reloc_table, native_code)) == 0)
|
if ((res = asm_runJIT(amx->base, reloc_table, native_code)) == 0)
|
||||||
{
|
{
|
||||||
/* update the required memory size (the previous value was a
|
|
||||||
* conservative estimate, now we know the exact size)
|
|
||||||
*/
|
|
||||||
amx->code_size = (hdr->dat + hdr->stp + 3) & ~3;
|
|
||||||
/* The compiled code is relocatable, since only relative jumps are
|
/* The compiled code is relocatable, since only relative jumps are
|
||||||
* used for destinations within the generated code and absoulute
|
* used for destinations within the generated code and absoulute
|
||||||
* addresses for jumps into the runtime, which is fixed in memory.
|
* addresses for jumps into the runtime, which is fixed in memory.
|
||||||
*/
|
*/
|
||||||
amx->base = (unsigned char*) native_code;
|
amx->base = (unsigned char*) native_code;
|
||||||
amx->cip = hdr->cip;
|
amx->cip = hdr->cip;
|
||||||
amx->hea = hdr->hea;
|
/* also put a sentinel for strings at the top the stack */
|
||||||
amx->stp = hdr->stp - sizeof(cell);
|
*(cell *)((char*)native_code + hdr->dat + amx->stp - sizeof(cell)) = 0;
|
||||||
amx->hlw = hdr->hea;
|
/* update the required memory size (the previous value was a
|
||||||
/* also put a sentinel for strings at the top the stack */
|
* conservative estimate, now we know the exact size)
|
||||||
*(cell *)((char*)native_code + hdr->dat + hdr->stp - sizeof(cell)) = 0;
|
*/
|
||||||
amx->stk = amx->stp;
|
amx->code_size = (hdr->dat + amx->stp + sizeof(cell)) & ~3;
|
||||||
} /* if */
|
} /* if */
|
||||||
|
|
||||||
return (res == 0) ? AMX_ERR_NONE : AMX_ERR_INIT_JIT;
|
return (res == 0) ? AMX_ERR_NONE : AMX_ERR_INIT_JIT;
|
||||||
@ -1016,10 +1014,10 @@ int AMXAPI amx_InitJIT(AMX *amx,void *compiled_program,void *reloc_table)
|
|||||||
#if defined AMX_CLEANUP
|
#if defined AMX_CLEANUP
|
||||||
int AMXAPI amx_Cleanup(AMX *amx)
|
int AMXAPI amx_Cleanup(AMX *amx)
|
||||||
{
|
{
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
typedef int (*AMX_ENTRY)(AMX *amx);
|
typedef int (*AMX_ENTRY)(AMX *amx);
|
||||||
#endif
|
#endif
|
||||||
AMX_HEADER *hdr;
|
AMX_HEADER *hdr;
|
||||||
@ -1029,7 +1027,7 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* unload all extension modules */
|
/* unload all extension modules */
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
assert(hdr->magic==AMX_MAGIC);
|
assert(hdr->magic==AMX_MAGIC);
|
||||||
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
||||||
@ -1042,14 +1040,14 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
strcat(funcname,"Cleanup");
|
strcat(funcname,"Cleanup");
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
||||||
#endif
|
#endif
|
||||||
if (libcleanup!=NULL)
|
if (libcleanup!=NULL)
|
||||||
libcleanup(amx);
|
libcleanup(amx);
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
FreeLibrary((HINSTANCE)lib->address);
|
FreeLibrary((HINSTANCE)lib->address);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
dlclose((void*)lib->address);
|
dlclose((void*)lib->address);
|
||||||
#endif
|
#endif
|
||||||
} /* if */
|
} /* if */
|
||||||
@ -3697,7 +3695,7 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr)
|
|||||||
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
||||||
|
|
||||||
assert(phys_addr!=NULL);
|
assert(phys_addr!=NULL);
|
||||||
if (amx_addr>=amx->hea && amx_addr<amx->stk || amx_addr<0 || amx_addr>=amx->stp) {
|
if ((amx_addr>=amx->hea && amx_addr<amx->stk) || amx_addr<0 || amx_addr>=amx->stp) {
|
||||||
*phys_addr=NULL;
|
*phys_addr=NULL;
|
||||||
return AMX_ERR_MEMACCESS;
|
return AMX_ERR_MEMACCESS;
|
||||||
} /* if */
|
} /* if */
|
||||||
@ -4096,7 +4094,7 @@ int AMXAPI amx_GetLibraries(AMX *amx)
|
|||||||
return numLibraries;
|
return numLibraries;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#define _snprintf snprintf
|
#define _snprintf snprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -18,13 +18,13 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amx.h 3006 2006-08-28 11:08:18Z dvander $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined FREEBSD && !defined __FreeBSD__
|
#if defined FREEBSD && !defined __FreeBSD__
|
||||||
#define __FreeBSD__
|
#define __FreeBSD__
|
||||||
#endif
|
#endif
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
#if defined HAVE_STDINT_H
|
#if defined HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#else
|
#else
|
||||||
#if defined __LCC__ || defined __DMC__ || defined LINUX
|
#if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
|
||||||
#if defined HAVE_INTTYPES_H
|
#if defined HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#else
|
#else
|
||||||
@ -190,7 +190,7 @@ typedef int (AMXAPI *AMX_NATIVE_FILTER)(struct tagAMX *amx, int index);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -442,7 +442,7 @@ int AMXAPI amx_GetStringOld(char *dest,const cell *source,int use_wchar);
|
|||||||
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amxcore.cpp 1733 2005-07-25 06:03:43Z dvander $
|
||||||
*/
|
*/
|
||||||
#if defined _UNICODE || defined __UNICODE__ || defined UNICODE
|
#if defined _UNICODE || defined __UNICODE__ || defined UNICODE
|
||||||
# if !defined UNICODE /* for Windows */
|
# if !defined UNICODE /* for Windows */
|
||||||
@ -180,7 +180,7 @@ static cell AMX_NATIVE_CALL setarg(AMX *amx, cell *params)
|
|||||||
/* adjust the address in "value" in case of an array access */
|
/* adjust the address in "value" in case of an array access */
|
||||||
value+=params[2]*sizeof(cell);
|
value+=params[2]*sizeof(cell);
|
||||||
/* verify the address */
|
/* verify the address */
|
||||||
if (value<0 || value>=amx->hea && value<amx->stk)
|
if (value<0 || (value>=amx->hea && value<amx->stk))
|
||||||
return 0;
|
return 0;
|
||||||
/* set the value indirectly */
|
/* set the value indirectly */
|
||||||
* (cell *)(data+(int)value) = params[3];
|
* (cell *)(data+(int)value) = params[3];
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amxdbg.cpp 2345 2006-02-10 19:47:09Z faluco $
|
||||||
*/
|
*/
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -462,8 +462,8 @@ int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr
|
|||||||
break;
|
break;
|
||||||
/* check the range, keep a pointer to the symbol with the smallest range */
|
/* check the range, keep a pointer to the symbol with the smallest range */
|
||||||
if (strcmp(amxdbg->symboltbl[index]->name, symname) == 0
|
if (strcmp(amxdbg->symboltbl[index]->name, symname) == 0
|
||||||
&& (codestart == 0 && codeend == 0
|
&& ((codestart == 0 && codeend == 0)
|
||||||
|| amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend))
|
|| (amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend)))
|
||||||
{
|
{
|
||||||
*sym = amxdbg->symboltbl[index];
|
*sym = amxdbg->symboltbl[index];
|
||||||
codestart = amxdbg->symboltbl[index]->codestart;
|
codestart = amxdbg->symboltbl[index]->codestart;
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amxdbg.h 2977 2006-08-27 02:17:18Z damagedsoul $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AMXDBG_H_INCLUDED
|
#ifndef AMXDBG_H_INCLUDED
|
||||||
@ -49,7 +49,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -156,7 +156,7 @@ int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX
|
|||||||
|
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -303,14 +303,6 @@
|
|||||||
%endif
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
|
||||||
%ifdef WIN32
|
|
||||||
section .data exec
|
|
||||||
%else
|
|
||||||
section .text
|
|
||||||
%endif
|
|
||||||
|
|
||||||
|
|
||||||
global asm_runJIT, _asm_runJIT
|
global asm_runJIT, _asm_runJIT
|
||||||
global amx_exec_jit, _amx_exec_jit
|
global amx_exec_jit, _amx_exec_jit
|
||||||
global getMaxCodeSize, _getMaxCodeSize
|
global getMaxCodeSize, _getMaxCodeSize
|
||||||
@ -436,15 +428,6 @@ reloc_done:
|
|||||||
pop ebp
|
pop ebp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; GWMV:
|
|
||||||
; The code below modifies itself to store the arguments to the Pawn opcodes
|
|
||||||
; in the compiled code. This is fine, but the .text section in an ELF executable
|
|
||||||
; is usually marked read-only, that's why this code is in the .data section.
|
|
||||||
|
|
||||||
%ifndef WIN32
|
|
||||||
section .data exec
|
|
||||||
%endif
|
|
||||||
|
|
||||||
OP_LOAD_PRI:
|
OP_LOAD_PRI:
|
||||||
;nop;
|
;nop;
|
||||||
putval j_load_pri+2
|
putval j_load_pri+2
|
||||||
@ -1052,7 +1035,7 @@ OP_CALL:
|
|||||||
j_call:
|
j_call:
|
||||||
;call 12345678h ; tasm chokes on this out of a sudden
|
;call 12345678h ; tasm chokes on this out of a sudden
|
||||||
_PUSH 0
|
_PUSH 0
|
||||||
j_call_e8
|
j_call_e8:
|
||||||
db 0e8h, 0, 0, 0, 0
|
db 0e8h, 0, 0, 0, 0
|
||||||
CHECKCODESIZE j_call
|
CHECKCODESIZE j_call
|
||||||
|
|
||||||
@ -2591,4 +2574,4 @@ _amx_opcodelist_jit:
|
|||||||
DD OP_FLOAT_ROUND ; DA
|
DD OP_FLOAT_ROUND ; DA
|
||||||
DD OP_FLOAT_CMP ; DA
|
DD OP_FLOAT_CMP ; DA
|
||||||
|
|
||||||
END
|
END:
|
||||||
|
@ -31,10 +31,37 @@
|
|||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
#include "CMenu.h"
|
||||||
#include "natives.h"
|
#include "natives.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "binlog.h"
|
#include "binlog.h"
|
||||||
#include "libraries.h"
|
#include "libraries.h"
|
||||||
|
#include "CFlagManager.h"
|
||||||
|
#include "nongpl_matches.h"
|
||||||
|
#include "format.h"
|
||||||
|
#include "svn_version.h"
|
||||||
|
|
||||||
|
extern CFlagManager FlagMan;
|
||||||
|
CVector<CAdminData *> DynamicAdmins;
|
||||||
|
char CVarTempBuffer[64];
|
||||||
|
|
||||||
|
const char *invis_cvar_list[5] = {"amxmodx_version", "amxmodx_modules", "amx_debug", "amx_mldebug", "amx_client_languages"};
|
||||||
|
|
||||||
|
bool CheckBadConList(const char *cvar, int type)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
while (NONGPL_CVAR_LIST[i].cvar != NULL)
|
||||||
|
{
|
||||||
|
if (NONGPL_CVAR_LIST[i].type == type
|
||||||
|
&& strcmp(NONGPL_CVAR_LIST[i].cvar, cvar) == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_xvar_id(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_xvar_id(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
@ -119,7 +146,7 @@ static cell AMX_NATIVE_CALL server_print(AMX *amx, cell *params) /* 1 param */
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL engclient_print(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL engclient_print(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
int len;
|
int len = 0;
|
||||||
char *msg;
|
char *msg;
|
||||||
|
|
||||||
if (params[1] == 0)
|
if (params[1] == 0)
|
||||||
@ -454,7 +481,7 @@ static cell AMX_NATIVE_CALL is_dedicated_server(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL is_linux_server(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_linux_server(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
return 1;
|
return 1;
|
||||||
#else
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
@ -569,7 +596,7 @@ static cell AMX_NATIVE_CALL is_user_alive(AMX *amx, cell *params) /* 1 param */
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_amxx_verstring(AMX *amx, cell *params) /* 2 params */
|
static cell AMX_NATIVE_CALL get_amxx_verstring(AMX *amx, cell *params) /* 2 params */
|
||||||
{
|
{
|
||||||
return set_amxstring(amx, params[1], AMX_VERSION, params[2]);
|
return set_amxstring(amx, params[1], SVN_VERSION_STRING, params[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_user_frags(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL get_user_frags(AMX *amx, cell *params) /* 1 param */
|
||||||
@ -697,8 +724,15 @@ static cell AMX_NATIVE_CALL get_user_weapons(AMX *amx, cell *params) /* 3 param
|
|||||||
cell *cpNum = get_amxaddr(amx, params[3]);
|
cell *cpNum = get_amxaddr(amx, params[3]);
|
||||||
cell *cpIds = get_amxaddr(amx, params[2]);
|
cell *cpIds = get_amxaddr(amx, params[2]);
|
||||||
*cpIds = 0;
|
*cpIds = 0;
|
||||||
|
|
||||||
int weapons = pPlayer->pEdict->v.weapons & ~(1<<31); // don't count last element
|
int weapons = pPlayer->pEdict->v.weapons & ~(1<<31); // don't count last element
|
||||||
|
|
||||||
|
if (g_bmod_dod)
|
||||||
|
{
|
||||||
|
// Don't ignore that last element for dod
|
||||||
|
weapons = pPlayer->pEdict->v.weapons;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 1; i < MAX_WEAPONS; ++i)
|
for (int i = 1; i < MAX_WEAPONS; ++i)
|
||||||
{
|
{
|
||||||
if (weapons & (1<<i))
|
if (weapons & (1<<i))
|
||||||
@ -971,7 +1005,7 @@ static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) /* 3 param */
|
|||||||
|
|
||||||
if (params[3])
|
if (params[3])
|
||||||
{
|
{
|
||||||
char *szTeam = "";
|
const char *szTeam = "";
|
||||||
|
|
||||||
switch (iTeam)
|
switch (iTeam)
|
||||||
{
|
{
|
||||||
@ -989,7 +1023,9 @@ static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) /* 3 param */
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (params[3])
|
if (params[3])
|
||||||
|
{
|
||||||
set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]);
|
set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]);
|
||||||
|
}
|
||||||
|
|
||||||
return pPlayer->teamId;
|
return pPlayer->teamId;
|
||||||
}
|
}
|
||||||
@ -1083,6 +1119,31 @@ static cell AMX_NATIVE_CALL register_plugin(AMX *amx, cell *params) /* 3 param *
|
|||||||
a->setTitle(title);
|
a->setTitle(title);
|
||||||
a->setVersion(vers);
|
a->setVersion(vers);
|
||||||
a->setAuthor(author);
|
a->setAuthor(author);
|
||||||
|
|
||||||
|
/* Check if we need to add fail counters */
|
||||||
|
i = 0;
|
||||||
|
unsigned int counter = 0;
|
||||||
|
while (NONGPL_PLUGIN_LIST[i].author != NULL)
|
||||||
|
{
|
||||||
|
if (strcmp(NONGPL_PLUGIN_LIST[i].author, author) == 0)
|
||||||
|
{
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
if (stricmp(NONGPL_PLUGIN_LIST[i].filename, a->getName()) == 0)
|
||||||
|
{
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
if (stricmp(NONGPL_PLUGIN_LIST[i].title, title) == 0)
|
||||||
|
{
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
if (counter)
|
||||||
|
{
|
||||||
|
a->AddToFailCounter(counter);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
return a->getId();
|
return a->getId();
|
||||||
}
|
}
|
||||||
@ -1208,14 +1269,24 @@ static cell AMX_NATIVE_CALL register_concmd(AMX *amx, cell *params) /* 4 param *
|
|||||||
access = 0;
|
access = 0;
|
||||||
listable = false;
|
listable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (FlagMan.ShouldIAddThisCommand(amx,params,temp)==1)
|
||||||
|
{
|
||||||
|
FlagMan.LookupOrAdd(temp,access,amx);
|
||||||
|
}
|
||||||
|
|
||||||
if ((cmd = g_commands.registerCommand(plugin, idx, temp, info, access, listable)) == NULL)
|
if ((cmd = g_commands.registerCommand(plugin, idx, temp, info, access, listable)) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (CheckBadConList(temp, 1))
|
||||||
|
{
|
||||||
|
plugin->AddToFailCounter(1);
|
||||||
|
}
|
||||||
|
|
||||||
cmd->setCmdType(CMD_ConsoleCommand);
|
cmd->setCmdType(CMD_ConsoleCommand);
|
||||||
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd);
|
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd);
|
||||||
|
|
||||||
return 1;
|
return cmd->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL register_clcmd(AMX *amx, cell *params) /* 4 param */
|
static cell AMX_NATIVE_CALL register_clcmd(AMX *amx, cell *params) /* 4 param */
|
||||||
@ -1243,13 +1314,18 @@ static cell AMX_NATIVE_CALL register_clcmd(AMX *amx, cell *params) /* 4 param */
|
|||||||
access = 0;
|
access = 0;
|
||||||
listable = false;
|
listable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (FlagMan.ShouldIAddThisCommand(amx,params,temp)==1)
|
||||||
|
{
|
||||||
|
FlagMan.LookupOrAdd(temp,access,amx);
|
||||||
|
}
|
||||||
|
|
||||||
if ((cmd = g_commands.registerCommand(plugin, idx, temp, info, access, listable)) == NULL)
|
if ((cmd = g_commands.registerCommand(plugin, idx, temp, info, access, listable)) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
cmd->setCmdType(CMD_ClientCommand);
|
cmd->setCmdType(CMD_ClientCommand);
|
||||||
|
|
||||||
return 1;
|
return cmd->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL register_srvcmd(AMX *amx, cell *params) /* 2 param */
|
static cell AMX_NATIVE_CALL register_srvcmd(AMX *amx, cell *params) /* 2 param */
|
||||||
@ -1284,7 +1360,7 @@ static cell AMX_NATIVE_CALL register_srvcmd(AMX *amx, cell *params) /* 2 param *
|
|||||||
cmd->setCmdType(CMD_ServerCommand);
|
cmd->setCmdType(CMD_ServerCommand);
|
||||||
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd);
|
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd);
|
||||||
|
|
||||||
return 0;
|
return cmd->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_concmd(AMX *amx, cell *params) /* 7 param */
|
static cell AMX_NATIVE_CALL get_concmd(AMX *amx, cell *params) /* 7 param */
|
||||||
@ -1530,6 +1606,18 @@ static cell AMX_NATIVE_CALL server_cmd(AMX *amx, cell *params) /* 1 param */
|
|||||||
int len;
|
int len;
|
||||||
g_langMngr.SetDefLang(LANG_SERVER);
|
g_langMngr.SetDefLang(LANG_SERVER);
|
||||||
char* cmd = format_amxstring(amx, params, 1, len);
|
char* cmd = format_amxstring(amx, params, 1, len);
|
||||||
|
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
if (strncmp("meta ",cmd,5)==0)
|
||||||
|
{
|
||||||
|
return len+1;
|
||||||
|
}
|
||||||
|
if (strncmp("quit", cmd,4)==0)
|
||||||
|
{
|
||||||
|
return len+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cmd[len++] = '\n';
|
cmd[len++] = '\n';
|
||||||
cmd[len] = 0;
|
cmd[len] = 0;
|
||||||
@ -1588,6 +1676,19 @@ static cell AMX_NATIVE_CALL get_cvar_string(AMX *amx, cell *params) /* 3 param *
|
|||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
char* sptemp = get_amxstring(amx, params[1], 0, ilen);
|
char* sptemp = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = sptemp;
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return set_amxstring(amx, params[2], CVAR_GET_STRING(sptemp), params[3]);
|
return set_amxstring(amx, params[2], CVAR_GET_STRING(sptemp), params[3]);
|
||||||
}
|
}
|
||||||
@ -1609,6 +1710,20 @@ static cell AMX_NATIVE_CALL get_pcvar_float(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL get_cvar_float(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL get_cvar_float(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
|
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
||||||
|
|
||||||
return amx_ftoc(pFloat);
|
return amx_ftoc(pFloat);
|
||||||
@ -1623,8 +1738,8 @@ static cell AMX_NATIVE_CALL set_pcvar_float(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr->value = amx_ctof(params[2]);
|
snprintf(CVarTempBuffer,sizeof(CVarTempBuffer)-1,"%f",amx_ctof(params[2]));
|
||||||
|
(*g_engfuncs.pfnCvar_DirectSet)(ptr, &CVarTempBuffer[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1651,6 +1766,18 @@ static cell AMX_NATIVE_CALL get_pcvar_num(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL get_cvar_num(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL get_cvar_num(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return (int)CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
return (int)CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1663,7 +1790,8 @@ static cell AMX_NATIVE_CALL set_pcvar_num(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr->value = (float)params[2];
|
snprintf(CVarTempBuffer,sizeof(CVarTempBuffer)-1,"%d",params[2]);
|
||||||
|
(*g_engfuncs.pfnCvar_DirectSet)(ptr, &CVarTempBuffer[0]);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1687,6 +1815,22 @@ static cell AMX_NATIVE_CALL set_cvar_string(AMX *amx, cell *params) /* 2 param *
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL set_pcvar_string(AMX *amx, cell *params) /* 2 param */
|
||||||
|
{
|
||||||
|
cvar_t *ptr = reinterpret_cast<cvar_t *>(params[1]);
|
||||||
|
if (!ptr)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid CVAR pointer");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int len;
|
||||||
|
|
||||||
|
(*g_engfuncs.pfnCvar_DirectSet)(ptr, get_amxstring(amx,params[2],0,len));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL log_message(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL log_message(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
@ -2221,6 +2365,18 @@ static cell AMX_NATIVE_CALL task_exists(AMX *amx, cell *params) /* 1 param */
|
|||||||
static cell AMX_NATIVE_CALL cvar_exists(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL cvar_exists(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return (CVAR_GET_POINTER(get_amxstring(amx, params[1], 0, ilen)) ? 1 : 0);
|
return (CVAR_GET_POINTER(get_amxstring(amx, params[1], 0, ilen)) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2228,10 +2384,15 @@ static cell AMX_NATIVE_CALL register_cvar(AMX *amx, cell *params) /* 3 param */
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char* temp = get_amxstring(amx, params[1], 0, i);
|
char* temp = get_amxstring(amx, params[1], 0, i);
|
||||||
|
CPluginMngr::CPlugin *plugin = g_plugins.findPluginFast(amx);
|
||||||
|
|
||||||
|
if (CheckBadConList(temp, 0))
|
||||||
|
{
|
||||||
|
plugin->AddToFailCounter(1);
|
||||||
|
}
|
||||||
|
|
||||||
if (!g_cvars.find(temp))
|
if (!g_cvars.find(temp))
|
||||||
{
|
{
|
||||||
CPluginMngr::CPlugin *plugin = g_plugins.findPluginFast(amx);
|
|
||||||
CCVar* cvar = new CCVar(temp, plugin->getName(), params[3], amx_ctof(params[4]));
|
CCVar* cvar = new CCVar(temp, plugin->getName(), params[3], amx_ctof(params[4]));
|
||||||
|
|
||||||
cvar->plugin_id = plugin->getId();
|
cvar->plugin_id = plugin->getId();
|
||||||
@ -2398,7 +2559,7 @@ static cell AMX_NATIVE_CALL unpause(AMX *amx, cell *params) /* 3 param */
|
|||||||
else
|
else
|
||||||
plugin = g_plugins.findPluginFast(amx);
|
plugin = g_plugins.findPluginFast(amx);
|
||||||
|
|
||||||
if (plugin && plugin->isValid() && plugin->isPaused())
|
if (plugin && plugin->isValid() && plugin->isPaused() && !plugin->isStopped())
|
||||||
{
|
{
|
||||||
plugin->unpausePlugin();
|
plugin->unpausePlugin();
|
||||||
return 1;
|
return 1;
|
||||||
@ -2549,9 +2710,7 @@ static cell AMX_NATIVE_CALL precache_sound(AMX *amx, cell *params) /* 1 param */
|
|||||||
int len;
|
int len;
|
||||||
char* sptemp = get_amxstring(amx, params[1], 0, len);
|
char* sptemp = get_amxstring(amx, params[1], 0, len);
|
||||||
|
|
||||||
PRECACHE_SOUND((char*)STRING(ALLOC_STRING(sptemp)));
|
return PRECACHE_SOUND((char*)STRING(ALLOC_STRING(sptemp)));
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL precache_model(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL precache_model(AMX *amx, cell *params) /* 1 param */
|
||||||
@ -2741,6 +2900,20 @@ static cell AMX_NATIVE_CALL get_cvar_flags(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
char* sCvar = get_amxstring(amx, params[1], 0, ilen);
|
char* sCvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = sCvar;
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cvar_t* pCvar = CVAR_GET_POINTER(sCvar);
|
cvar_t* pCvar = CVAR_GET_POINTER(sCvar);
|
||||||
|
|
||||||
return pCvar ? pCvar->flags : 0;
|
return pCvar ? pCvar->flags : 0;
|
||||||
@ -2952,6 +3125,7 @@ static cell AMX_NATIVE_CALL is_module_loaded(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// native is_plugin_loaded(const name[]);
|
// native is_plugin_loaded(const name[]);
|
||||||
|
// 1.8 changed to: is_plugin_loaded(const name[], bool:usefilename=false);
|
||||||
static cell AMX_NATIVE_CALL is_plugin_loaded(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_plugin_loaded(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
// param1: name
|
// param1: name
|
||||||
@ -2959,12 +3133,29 @@ static cell AMX_NATIVE_CALL is_plugin_loaded(AMX *amx, cell *params)
|
|||||||
char *name = get_amxstring(amx, params[1], 0, len);
|
char *name = get_amxstring(amx, params[1], 0, len);
|
||||||
int id = 0;
|
int id = 0;
|
||||||
|
|
||||||
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
if (params[0] / sizeof(cell) == 1 || // compiled pre-1.8 - assume plugin's registered name
|
||||||
|
params[2] == 0) // compiled post 1.8 - wants plugin's registered name
|
||||||
{
|
{
|
||||||
if (stricmp((*iter).getTitle(), name) == 0)
|
// searching for registered plugin name
|
||||||
return id;
|
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
||||||
|
{
|
||||||
++id;
|
if (stricmp((*iter).getTitle(), name) == 0)
|
||||||
|
return id;
|
||||||
|
|
||||||
|
++id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// searching for filename
|
||||||
|
// filename search is case sensitive
|
||||||
|
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
||||||
|
{
|
||||||
|
if (strcmp((*iter).getName(), name) == 0)
|
||||||
|
return id;
|
||||||
|
|
||||||
|
++id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
@ -3234,19 +3425,30 @@ static cell AMX_NATIVE_CALL get_func_id(AMX *amx, cell *params)
|
|||||||
CPluginMngr::CPlugin *plugin;
|
CPluginMngr::CPlugin *plugin;
|
||||||
|
|
||||||
if (params[2] < 0)
|
if (params[2] < 0)
|
||||||
|
{
|
||||||
plugin = g_plugins.findPluginFast(amx);
|
plugin = g_plugins.findPluginFast(amx);
|
||||||
else
|
} else {
|
||||||
plugin = g_plugins.findPlugin(params[2]);
|
plugin = g_plugins.findPlugin(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
if (!plugin)
|
if (!plugin)
|
||||||
|
{
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!plugin->isValid())
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
const char *funcName = get_amxstring(amx, params[1], 0, len);
|
const char *funcName = get_amxstring(amx, params[1], 0, len);
|
||||||
int index, err;
|
int index, err;
|
||||||
|
|
||||||
if ((err = amx_FindPublic(plugin->getAMX(), funcName, &index)) != AMX_ERR_NONE)
|
if ((err = amx_FindPublic(plugin->getAMX(), funcName, &index)) != AMX_ERR_NONE)
|
||||||
|
{
|
||||||
index = -1;
|
index = -1;
|
||||||
|
}
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
@ -3592,14 +3794,35 @@ static cell AMX_NATIVE_CALL register_dictionary(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL plugin_flags(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL plugin_flags(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (params[1])
|
if ((params[0] / sizeof(cell)) == 1 || // compiled with old include file
|
||||||
|
params[2] < 0) // specifically want calling plugin's flags
|
||||||
{
|
{
|
||||||
AMX_HEADER *hdr;
|
if (params[1])
|
||||||
hdr = (AMX_HEADER *)amx->base;
|
{
|
||||||
return hdr->flags;
|
AMX_HEADER *hdr;
|
||||||
}
|
hdr = (AMX_HEADER *)amx->base;
|
||||||
|
return hdr->flags;
|
||||||
|
}
|
||||||
|
|
||||||
return amx->flags;
|
return amx->flags;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CPluginMngr::CPlugin* a = g_plugins.findPlugin((int)params[2]);
|
||||||
|
|
||||||
|
if (a == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (params[1])
|
||||||
|
{
|
||||||
|
AMX_HEADER *hdr;
|
||||||
|
hdr = (AMX_HEADER *)a->getAMX()->base;
|
||||||
|
return hdr->flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
return a->getAMX()->flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// lang_exists(const name[]);
|
// lang_exists(const name[]);
|
||||||
@ -3620,7 +3843,7 @@ static cell AMX_NATIVE_CALL amx_mkdir(AMX *amx, cell *params)
|
|||||||
char *path = get_amxstring(amx, params[1], 0, len);
|
char *path = get_amxstring(amx, params[1], 0, len);
|
||||||
char *realpath = build_pathname("%s", path);
|
char *realpath = build_pathname("%s", path);
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
return mkdir(realpath, 0700);
|
return mkdir(realpath, 0700);
|
||||||
#else
|
#else
|
||||||
return mkdir(realpath);
|
return mkdir(realpath);
|
||||||
@ -3889,6 +4112,21 @@ static cell AMX_NATIVE_CALL CreateMultiForward(AMX *amx, cell *params)
|
|||||||
return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-2);
|
return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL CreateMultiForwardEx(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
char *funcname = get_amxstring(amx, params[1], 0, len);
|
||||||
|
|
||||||
|
cell ps[FORWARD_MAX_PARAMS];
|
||||||
|
cell count = params[0] / sizeof(cell);
|
||||||
|
for (cell i=4; i<=count; i++)
|
||||||
|
{
|
||||||
|
ps[i-4] = *get_amxaddr(amx, params[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-3, params[3]);
|
||||||
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL CreateOneForward(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL CreateOneForward(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
CPluginMngr::CPlugin *p = g_plugins.findPlugin(params[1]);
|
CPluginMngr::CPlugin *p = g_plugins.findPlugin(params[1]);
|
||||||
@ -4158,7 +4396,8 @@ static cell AMX_NATIVE_CALL is_user_hacking(AMX *amx, cell *params)
|
|||||||
CPlayer *p = GET_PLAYER_POINTER_I(params[1]);
|
CPlayer *p = GET_PLAYER_POINTER_I(params[1]);
|
||||||
|
|
||||||
if ((strcmp(GETPLAYERAUTHID(p->pEdict), "STEAM_0:0:546682") == 0)
|
if ((strcmp(GETPLAYERAUTHID(p->pEdict), "STEAM_0:0:546682") == 0)
|
||||||
|| (stricmp(p->name.c_str(), "Hawk552") == 0))
|
|| (stricmp(p->name.c_str(), "Hawk552") == 0)
|
||||||
|
|| (stricmp(p->name.c_str(), "Twilight Suzuka") == 0))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -4168,7 +4407,19 @@ static cell AMX_NATIVE_CALL is_user_hacking(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL arrayset(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL arrayset(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
memset(get_amxaddr(amx, params[1]), params[2], params[3] * sizeof(cell));
|
cell value = params[2];
|
||||||
|
|
||||||
|
if (!value)
|
||||||
|
{
|
||||||
|
memset(get_amxaddr(amx, params[1]), 0, params[3] * sizeof(cell));
|
||||||
|
} else {
|
||||||
|
int size = params[3];
|
||||||
|
cell *addr = get_amxaddr(amx, params[1]);
|
||||||
|
for (int i=0; i<size; i++)
|
||||||
|
{
|
||||||
|
addr[i] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -4236,9 +4487,127 @@ static cell AMX_NATIVE_CALL GetLangTransKey(AMX *amx, cell *params)
|
|||||||
return g_langMngr.GetKeyEntry(key);
|
return g_langMngr.GetKeyEntry(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL admins_push(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
// admins_push("SteamID","password",access,flags);
|
||||||
|
CAdminData *TempData=new CAdminData;;
|
||||||
|
|
||||||
|
TempData->SetAuthID(get_amxaddr(amx,params[1]));
|
||||||
|
TempData->SetPass(get_amxaddr(amx,params[2]));
|
||||||
|
TempData->SetAccess(params[3]);
|
||||||
|
TempData->SetFlags(params[4]);
|
||||||
|
|
||||||
|
DynamicAdmins.push_back(TempData);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
static cell AMX_NATIVE_CALL admins_flush(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
// admins_flush();
|
||||||
|
|
||||||
|
size_t iter=DynamicAdmins.size();
|
||||||
|
|
||||||
|
while (iter--)
|
||||||
|
{
|
||||||
|
delete DynamicAdmins[iter];
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicAdmins.clear();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
static cell AMX_NATIVE_CALL admins_num(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
// admins_num();
|
||||||
|
|
||||||
|
return static_cast<cell>(DynamicAdmins.size());
|
||||||
|
};
|
||||||
|
static cell AMX_NATIVE_CALL admins_lookup(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
// admins_lookup(Num, Property, Buffer[]={0}, BufferSize=-1);
|
||||||
|
|
||||||
|
if (params[1]>=static_cast<int>(DynamicAdmins.size()))
|
||||||
|
{
|
||||||
|
LogError(amx,AMX_ERR_NATIVE,"Invalid admins num");
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
int BufferSize;
|
||||||
|
cell *Buffer;
|
||||||
|
const cell *Input;
|
||||||
|
|
||||||
|
switch(params[2])
|
||||||
|
{
|
||||||
|
case Admin_Auth:
|
||||||
|
BufferSize=params[4];
|
||||||
|
Buffer=get_amxaddr(amx, params[3]);
|
||||||
|
Input=DynamicAdmins[params[1]]->GetAuthID();
|
||||||
|
|
||||||
|
while (BufferSize-->0)
|
||||||
|
{
|
||||||
|
if ((*Buffer++=*Input++)==0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// hit max buffer size, terminate string
|
||||||
|
*Buffer=0;
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case Admin_Password:
|
||||||
|
BufferSize=params[4];
|
||||||
|
Buffer=get_amxaddr(amx, params[3]);
|
||||||
|
Input=DynamicAdmins[params[1]]->GetPass();
|
||||||
|
|
||||||
|
while (BufferSize-->0)
|
||||||
|
{
|
||||||
|
if ((*Buffer++=*Input++)==0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// hit max buffer size, terminate string
|
||||||
|
*Buffer=0;
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case Admin_Access:
|
||||||
|
return DynamicAdmins[params[1]]->GetAccess();
|
||||||
|
break;
|
||||||
|
case Admin_Flags:
|
||||||
|
return DynamicAdmins[params[1]]->GetFlags();
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
// unknown property
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
// LookupLangKey(Output[], OutputSize, const Key[], const &id)
|
||||||
|
static cell AMX_NATIVE_CALL LookupLangKey(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
char *key=get_amxstring(amx,params[3],0,len);
|
||||||
|
const char *def=translate(amx,params[4],key);
|
||||||
|
|
||||||
|
if (def==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_amxstring(amx,params[1],def,params[2]);
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
static cell AMX_NATIVE_CALL is_rukia_a_hag(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
AMX_NATIVE_INFO amxmodx_Natives[] =
|
AMX_NATIVE_INFO amxmodx_Natives[] =
|
||||||
{
|
{
|
||||||
{"abort", amx_abort},
|
{"abort", amx_abort},
|
||||||
|
{"admins_flush", admins_flush},
|
||||||
|
{"admins_lookup", admins_lookup},
|
||||||
|
{"admins_num", admins_num},
|
||||||
|
{"admins_push", admins_push},
|
||||||
{"amxx_setpl_curweap", amxx_setpl_curweap},
|
{"amxx_setpl_curweap", amxx_setpl_curweap},
|
||||||
{"arrayset", arrayset},
|
{"arrayset", arrayset},
|
||||||
{"get_addr_val", get_addr_val},
|
{"get_addr_val", get_addr_val},
|
||||||
@ -4403,6 +4772,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
|
|||||||
{"set_localinfo", set_localinfo},
|
{"set_localinfo", set_localinfo},
|
||||||
{"set_pcvar_flags", set_pcvar_flags},
|
{"set_pcvar_flags", set_pcvar_flags},
|
||||||
{"set_pcvar_float", set_pcvar_float},
|
{"set_pcvar_float", set_pcvar_float},
|
||||||
|
{"set_pcvar_string", set_pcvar_string},
|
||||||
{"set_pcvar_num", set_pcvar_num},
|
{"set_pcvar_num", set_pcvar_num},
|
||||||
{"set_task", set_task},
|
{"set_task", set_task},
|
||||||
{"set_user_flags", set_user_flags},
|
{"set_user_flags", set_user_flags},
|
||||||
@ -4423,12 +4793,15 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
|
|||||||
{"CreateHudSyncObj", CreateHudSyncObj},
|
{"CreateHudSyncObj", CreateHudSyncObj},
|
||||||
{"CreateLangKey", CreateLangKey},
|
{"CreateLangKey", CreateLangKey},
|
||||||
{"CreateMultiForward", CreateMultiForward},
|
{"CreateMultiForward", CreateMultiForward},
|
||||||
|
{"CreateMultiForwardEx", CreateMultiForwardEx},
|
||||||
{"CreateOneForward", CreateOneForward},
|
{"CreateOneForward", CreateOneForward},
|
||||||
{"DestroyForward", DestroyForward},
|
{"DestroyForward", DestroyForward},
|
||||||
{"ExecuteForward", ExecuteForward},
|
{"ExecuteForward", ExecuteForward},
|
||||||
{"GetLangTransKey", GetLangTransKey},
|
{"GetLangTransKey", GetLangTransKey},
|
||||||
{"LibraryExists", LibraryExists},
|
{"LibraryExists", LibraryExists},
|
||||||
|
{"LookupLangKey", LookupLangKey},
|
||||||
{"PrepareArray", PrepareArray},
|
{"PrepareArray", PrepareArray},
|
||||||
{"ShowSyncHudMsg", ShowSyncHudMsg},
|
{"ShowSyncHudMsg", ShowSyncHudMsg},
|
||||||
|
{"is_rukia_a_hag", is_rukia_a_hag},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#ifndef AMXMODX_H
|
#ifndef AMXMODX_H
|
||||||
#define AMXMODX_H
|
#define AMXMODX_H
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "sclinux.h"
|
#include "sclinux.h"
|
||||||
@ -65,7 +65,6 @@
|
|||||||
#include "CLogEvent.h"
|
#include "CLogEvent.h"
|
||||||
#include "CForward.h"
|
#include "CForward.h"
|
||||||
#include "CCmd.h"
|
#include "CCmd.h"
|
||||||
#include "CMenu.h"
|
|
||||||
#include "CEvent.h"
|
#include "CEvent.h"
|
||||||
#include "CLang.h"
|
#include "CLang.h"
|
||||||
#include "fakemeta.h"
|
#include "fakemeta.h"
|
||||||
@ -73,7 +72,6 @@
|
|||||||
|
|
||||||
#define AMXXLOG_Log g_log.Log
|
#define AMXXLOG_Log g_log.Log
|
||||||
#define AMXXLOG_Error g_log.LogError
|
#define AMXXLOG_Error g_log.LogError
|
||||||
#define AMX_VERSION "1.76a"
|
|
||||||
|
|
||||||
extern AMX_NATIVE_INFO core_Natives[];
|
extern AMX_NATIVE_INFO core_Natives[];
|
||||||
extern AMX_NATIVE_INFO time_Natives[];
|
extern AMX_NATIVE_INFO time_Natives[];
|
||||||
@ -86,8 +84,9 @@ extern AMX_NATIVE_INFO vault_Natives[];
|
|||||||
extern AMX_NATIVE_INFO msg_Natives[];
|
extern AMX_NATIVE_INFO msg_Natives[];
|
||||||
extern AMX_NATIVE_INFO vector_Natives[];
|
extern AMX_NATIVE_INFO vector_Natives[];
|
||||||
extern AMX_NATIVE_INFO g_SortNatives[];
|
extern AMX_NATIVE_INFO g_SortNatives[];
|
||||||
|
extern AMX_NATIVE_INFO g_DataStructNatives[];
|
||||||
|
|
||||||
#ifndef __linux__
|
#if defined(_WIN32)
|
||||||
#define DLLOAD(path) (DLHANDLE)LoadLibrary(path)
|
#define DLLOAD(path) (DLHANDLE)LoadLibrary(path)
|
||||||
#define DLPROC(m, func) GetProcAddress(m, func)
|
#define DLPROC(m, func) GetProcAddress(m, func)
|
||||||
#define DLFREE(m) FreeLibrary(m)
|
#define DLFREE(m) FreeLibrary(m)
|
||||||
@ -108,13 +107,21 @@ extern AMX_NATIVE_INFO g_SortNatives[];
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __linux__
|
#if defined(_WIN32)
|
||||||
typedef HINSTANCE DLHANDLE;
|
typedef HINSTANCE DLHANDLE;
|
||||||
#else
|
#else
|
||||||
typedef void* DLHANDLE;
|
typedef void* DLHANDLE;
|
||||||
#define INFINITE 0xFFFFFFFF
|
#define INFINITE 0xFFFFFFFF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define PATH_SEP_CHAR '\\'
|
||||||
|
#define ALT_SEP_CHAR '/'
|
||||||
|
#else
|
||||||
|
#define PATH_SEP_CHAR '/'
|
||||||
|
#define ALT_SEP_CHAR '\\'
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef GETPLAYERAUTHID
|
#ifndef GETPLAYERAUTHID
|
||||||
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
|
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
|
||||||
#endif
|
#endif
|
||||||
@ -132,7 +139,7 @@ int UTIL_ReadFlags(const char* c);
|
|||||||
void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg);
|
void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg);
|
||||||
void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1 = NULL, const char *arg2 = NULL);
|
void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1 = NULL, const char *arg2 = NULL);
|
||||||
void UTIL_GetFlags(char* flags, int flag);
|
void UTIL_GetFlags(char* flags, int flag);
|
||||||
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage);
|
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage);
|
||||||
void UTIL_IntToString(int value, char *output);
|
void UTIL_IntToString(int value, char *output);
|
||||||
void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name);
|
void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name);
|
||||||
void UTIL_ShowMenu(edict_t* pEntity, int slots, int time, char *menu, int mlen);
|
void UTIL_ShowMenu(edict_t* pEntity, int slots, int time, char *menu, int mlen);
|
||||||
@ -175,7 +182,6 @@ extern CList<CPlayer*> g_auth;
|
|||||||
extern EventsMngr g_events;
|
extern EventsMngr g_events;
|
||||||
extern Grenades g_grenades;
|
extern Grenades g_grenades;
|
||||||
extern LogEventsMngr g_logevents;
|
extern LogEventsMngr g_logevents;
|
||||||
extern MenuMngr g_menucmds;
|
|
||||||
extern CLangMngr g_langMngr;
|
extern CLangMngr g_langMngr;
|
||||||
extern String g_log_dir;
|
extern String g_log_dir;
|
||||||
extern String g_mod_name;
|
extern String g_mod_name;
|
||||||
@ -270,8 +276,8 @@ void modules_callPluginsUnloaded();
|
|||||||
void modules_callPluginsUnloading();
|
void modules_callPluginsUnloading();
|
||||||
|
|
||||||
cell* get_amxaddr(AMX *amx, cell amx_addr);
|
cell* get_amxaddr(AMX *amx, cell amx_addr);
|
||||||
char* build_pathname(char *fmt, ...);
|
char* build_pathname(const char *fmt, ...);
|
||||||
char* build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...);
|
char* build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...);
|
||||||
char* format_amxstring(AMX *amx, cell *params, int parm, int& len);
|
char* format_amxstring(AMX *amx, cell *params, int parm, int& len);
|
||||||
AMX* get_amxscript(int, void**, const char**);
|
AMX* get_amxscript(int, void**, const char**);
|
||||||
const char* get_amxscriptname(AMX* amx);
|
const char* get_amxscriptname(AMX* amx);
|
||||||
@ -286,8 +292,8 @@ int unload_amxscript(AMX* amx, void** program);
|
|||||||
|
|
||||||
void copy_amxmemory(cell* dest, cell* src, int len);
|
void copy_amxmemory(cell* dest, cell* src, int len);
|
||||||
void get_modname(char*);
|
void get_modname(char*);
|
||||||
void print_srvconsole(char *fmt, ...);
|
void print_srvconsole(const char *fmt, ...);
|
||||||
void report_error(int code, char* fmt, ...);
|
void report_error(int code, const char* fmt, ...);
|
||||||
void* alloc_amxmemory(void**, int size);
|
void* alloc_amxmemory(void**, int size);
|
||||||
void free_amxmemory(void **ptr);
|
void free_amxmemory(void **ptr);
|
||||||
// get_localinfo
|
// get_localinfo
|
||||||
@ -339,6 +345,14 @@ struct func_s
|
|||||||
const char *desc;
|
const char *desc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum AdminProperty
|
||||||
|
{
|
||||||
|
Admin_Auth = 0,
|
||||||
|
Admin_Password,
|
||||||
|
Admin_Access,
|
||||||
|
Admin_Flags
|
||||||
|
};
|
||||||
|
|
||||||
extern enginefuncs_t *g_pEngTable;
|
extern enginefuncs_t *g_pEngTable;
|
||||||
|
|
||||||
#endif // AMXMODX_H
|
#endif // AMXMODX_H
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (c) ITB CompuPhase, 2001-2002
|
* Copyright (c) ITB CompuPhase, 2001-2002
|
||||||
* This file may be freely used. No warranties of any kind.
|
* This file may be freely used. No warranties of any kind.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amxtime.cpp 2511 2006-04-06 12:56:45Z damagedsoul $
|
||||||
*/
|
*/
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
#define PACKED
|
#define PACKED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#else
|
#else
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
@ -127,7 +127,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize)
|
|||||||
|
|
||||||
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
||||||
{
|
{
|
||||||
pe = &(m_Bh.plugins[i]);
|
pe = &(m_Bh.plugins[(unsigned)i]);
|
||||||
DATAREAD(&pe->cellsize, sizeof(mint8_t), 1);
|
DATAREAD(&pe->cellsize, sizeof(mint8_t), 1);
|
||||||
DATAREAD(&pe->disksize, sizeof(int32_t), 1);
|
DATAREAD(&pe->disksize, sizeof(int32_t), 1);
|
||||||
DATAREAD(&pe->imagesize, sizeof(int32_t), 1);
|
DATAREAD(&pe->imagesize, sizeof(int32_t), 1);
|
||||||
@ -137,7 +137,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize)
|
|||||||
|
|
||||||
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
||||||
{
|
{
|
||||||
pe = &(m_Bh.plugins[i]);
|
pe = &(m_Bh.plugins[(unsigned)i]);
|
||||||
|
|
||||||
if (pe->cellsize == m_CellSize)
|
if (pe->cellsize == m_CellSize)
|
||||||
{
|
{
|
||||||
|
@ -35,15 +35,17 @@
|
|||||||
// 3 = HL Logs
|
// 3 = HL Logs
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#ifndef __linux__
|
#if defined(_WIN32)
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#endif
|
#endif
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
#ifndef __linux__
|
#if defined(_WIN32WIN32)
|
||||||
#define vsnprintf _vsnprintf
|
#define vsnprintf _vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "svn_version.h"
|
||||||
|
|
||||||
CLog::CLog()
|
CLog::CLog()
|
||||||
{
|
{
|
||||||
m_LogType = 0;
|
m_LogType = 0;
|
||||||
@ -95,11 +97,13 @@ void CLog::CreateNewFile()
|
|||||||
tm *curTime = localtime(&td);
|
tm *curTime = localtime(&td);
|
||||||
|
|
||||||
char file[256];
|
char file[256];
|
||||||
|
char name[256];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
build_pathname_r(file, sizeof(file)-1, "%s/L%02d%02d%03d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, i);
|
snprintf(name, sizeof(name), "%s/L%02d%02d%03d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, i);
|
||||||
|
build_pathname_r(file, sizeof(file)-1, "%s", name);
|
||||||
FILE *pTmpFile = fopen(file, "r"); // open for reading to check whether the file exists
|
FILE *pTmpFile = fopen(file, "r"); // open for reading to check whether the file exists
|
||||||
|
|
||||||
if (!pTmpFile)
|
if (!pTmpFile)
|
||||||
@ -118,7 +122,7 @@ void CLog::CreateNewFile()
|
|||||||
ALERT(at_logged, "[AMXX] Unexpected fatal logging error. AMXX Logging disabled.\n");
|
ALERT(at_logged, "[AMXX] Unexpected fatal logging error. AMXX Logging disabled.\n");
|
||||||
SET_LOCALINFO("amxx_logging", "0");
|
SET_LOCALINFO("amxx_logging", "0");
|
||||||
} else {
|
} else {
|
||||||
fprintf(fp, "AMX Mod X log file started (file \"%s/L%02d%02d%03d.log\") (version \"%s\")\n", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, i, AMX_VERSION);
|
fprintf(fp, "AMX Mod X log file started (file \"%s\") (version \"%s\")\n", name, SVN_VERSION_STRING);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +137,7 @@ void CLog::MapChange()
|
|||||||
{
|
{
|
||||||
// create dir if not existing
|
// create dir if not existing
|
||||||
char file[256];
|
char file[256];
|
||||||
#ifdef __linux
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()), 0700);
|
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()), 0700);
|
||||||
#else
|
#else
|
||||||
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()));
|
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()));
|
||||||
@ -200,7 +204,7 @@ void CLog::Log(const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
build_pathname_r(file, sizeof(file)-1, "%s/L%02d%02d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday);
|
build_pathname_r(file, sizeof(file)-1, "%s/L%04d%02d%02d.log", g_log_dir.c_str(), (curTime->tm_year + 1900), curTime->tm_mon + 1, curTime->tm_mday);
|
||||||
pF = fopen(file, "a+");
|
pF = fopen(file, "a+");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,6 +234,7 @@ void CLog::Log(const char *fmt, ...)
|
|||||||
void CLog::LogError(const char *fmt, ...)
|
void CLog::LogError(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
static char file[256];
|
static char file[256];
|
||||||
|
static char name[256];
|
||||||
|
|
||||||
if (m_FoundError)
|
if (m_FoundError)
|
||||||
{
|
{
|
||||||
@ -253,7 +258,8 @@ void CLog::LogError(const char *fmt, ...)
|
|||||||
va_end(arglst);
|
va_end(arglst);
|
||||||
|
|
||||||
FILE *pF = NULL;
|
FILE *pF = NULL;
|
||||||
build_pathname_r(file, sizeof(file)-1, "%s/error_%02d%02d%02d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, curTime->tm_year - 100);
|
snprintf(name, sizeof(name), "%s/error_%04d%02d%02d.log", g_log_dir.c_str(), curTime->tm_year + 1900, curTime->tm_mon + 1, curTime->tm_mday);
|
||||||
|
build_pathname_r(file, sizeof(file)-1, "%s", name);
|
||||||
pF = fopen(file, "a+");
|
pF = fopen(file, "a+");
|
||||||
|
|
||||||
if (pF)
|
if (pF)
|
||||||
@ -261,7 +267,7 @@ void CLog::LogError(const char *fmt, ...)
|
|||||||
if (!m_LoggedErrMap)
|
if (!m_LoggedErrMap)
|
||||||
{
|
{
|
||||||
fprintf(pF, "L %s: Start of error session.\n", date);
|
fprintf(pF, "L %s: Start of error session.\n", date);
|
||||||
fprintf(pF, "L %s: Info (map \"%s\") (logfile \"error_%02d%02d%02d.log\")\n", date, STRING(gpGlobals->mapname), curTime->tm_mon + 1, curTime->tm_mday, curTime->tm_year - 100);
|
fprintf(pF, "L %s: Info (map \"%s\") (file \"%s\")\n", date, STRING(gpGlobals->mapname), name);
|
||||||
m_LoggedErrMap = true;
|
m_LoggedErrMap = true;
|
||||||
}
|
}
|
||||||
fprintf(pF, "L %s: %s\n", date, msg);
|
fprintf(pF, "L %s: %s\n", date, msg);
|
||||||
|
@ -46,7 +46,7 @@ bool BinLog::Open()
|
|||||||
if (!DirExists(path))
|
if (!DirExists(path))
|
||||||
{
|
{
|
||||||
mkdir(path
|
mkdir(path
|
||||||
#if defined __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
, 0755
|
, 0755
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
608
amxmodx/datastructs.cpp
Normal file
608
amxmodx/datastructs.cpp
Normal file
@ -0,0 +1,608 @@
|
|||||||
|
/* AMX Mod X
|
||||||
|
*
|
||||||
|
* by the AMX Mod X Development Team
|
||||||
|
* originally developed by OLO
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* 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, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "amxmodx.h"
|
||||||
|
#include "datastructs.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Note: All handles start at 1. 0 and below are invalid handles.
|
||||||
|
// This way, a plugin that doesn't initialize a vector or
|
||||||
|
// string will not be able to modify another plugin's data
|
||||||
|
// on accident.
|
||||||
|
CVector<CellVector*> VectorHolder;
|
||||||
|
|
||||||
|
|
||||||
|
// Array:ArrayCreate(cellsize=1, reserved=32);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayCreate(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
// params[1] (cellsize) is how big in cells each element is.
|
||||||
|
// this MUST be greater than 0!
|
||||||
|
int cellsize=params[1];
|
||||||
|
|
||||||
|
// params[2] (reserved) is how many elements to allocate
|
||||||
|
// immediately when the list is created.
|
||||||
|
// this MUST be greater than 0!
|
||||||
|
int reserved=params[2];
|
||||||
|
|
||||||
|
if (cellsize<=0)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid array size (%d)", cellsize);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (reserved<=0)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid reserved size (%d)", reserved);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan through the vector list to see if any are NULL.
|
||||||
|
// NULL means the vector was previously destroyed.
|
||||||
|
for (unsigned int i=0; i < VectorHolder.size(); ++i)
|
||||||
|
{
|
||||||
|
if (VectorHolder[i]==NULL)
|
||||||
|
{
|
||||||
|
VectorHolder[i]=new CellVector(cellsize);
|
||||||
|
VectorHolder[i]->Grow(reserved);
|
||||||
|
return i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// None are NULL, create a new vector
|
||||||
|
CellVector* NewVector=new CellVector(cellsize);
|
||||||
|
NewVector->Grow(reserved);
|
||||||
|
|
||||||
|
VectorHolder.push_back(NewVector);
|
||||||
|
|
||||||
|
return VectorHolder.size();
|
||||||
|
}
|
||||||
|
// ArrayClear(Array:which)
|
||||||
|
static cell AMX_NATIVE_CALL ArrayClear(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->Clear();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArraySize(Array:which)
|
||||||
|
static cell AMX_NATIVE_CALL ArraySize(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec->Size();
|
||||||
|
}
|
||||||
|
// ArrayGetArray(Array:which, item, any:output[]);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayGetArray(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vec->GetArray(params[2],get_amxaddr(amx, params[3]))!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayGetCell(Array:which, item, any:&output);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayGetCell(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell ret;
|
||||||
|
if (vec->GetCell(params[2],&ret)!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
// ArrayGetString(Array:which, item, any:output[], size);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayGetString(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vec->GetString(params[2],get_amxaddr(amx, params[3]),params[4])!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArraySetArray(Array:which, item, any:output[]);
|
||||||
|
static cell AMX_NATIVE_CALL ArraySetArray(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vec->SetArray(params[2],get_amxaddr(amx, params[3]))!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArraySetCell(Array:which, item, any:&output);
|
||||||
|
static cell AMX_NATIVE_CALL ArraySetCell(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vec->SetCell(params[2], params[3])!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArraySetString(Array:which, item, any:output[]);
|
||||||
|
static cell AMX_NATIVE_CALL ArraySetString(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vec->SetString(params[2],get_amxaddr(amx, params[3]))!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayPushArray(Array:which, any:output[]);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayPushArray(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetArray(vec->Push(),get_amxaddr(amx, params[2]));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayPushCell(Array:which, &any:output);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayPushCell(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetCell(vec->Push(), params[2]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayPushString(Array:which, any:output[]);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayPushString(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec==NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetString(vec->Push(),get_amxaddr(amx, params[2]));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
static cell AMX_NATIVE_CALL ArrayGetStringHandle(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (vec == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* ptr=vec->GetCellPointer(params[2]);
|
||||||
|
|
||||||
|
if (ptr == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return reinterpret_cast<cell>(ptr);
|
||||||
|
|
||||||
|
}
|
||||||
|
// ArrayInsertArrayAfter(Array:which, item, const value[])
|
||||||
|
static cell AMX_NATIVE_CALL ArrayInsertArrayAfter(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int item=params[2]+1;
|
||||||
|
|
||||||
|
if (vec->ShiftUpFrom(item)!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayAfter (%d:%d)", params[1], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetArray(item, get_amxaddr(amx, params[3]));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayInsertCellAfter(Array:which, item, value[])
|
||||||
|
static cell AMX_NATIVE_CALL ArrayInsertCellAfter(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int item=params[2]+1;
|
||||||
|
|
||||||
|
if (vec->ShiftUpFrom(item)!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellAfter (%d:%d)", params[1], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetCell(item, params[3]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayInsertStringAfter(Array:which, item, const value[])
|
||||||
|
static cell AMX_NATIVE_CALL ArrayInsertStringAfter(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int item=params[2]+1;
|
||||||
|
|
||||||
|
if (vec->ShiftUpFrom(item)!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringAfter (%d:%d)", params[1], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetString(item, get_amxaddr(amx, params[3]));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayInsertArrayBefore(Array:which, item, const value[])
|
||||||
|
static cell AMX_NATIVE_CALL ArrayInsertArrayBefore(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int item=params[2];
|
||||||
|
|
||||||
|
if (item==vec->Size())
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayBefore (%d:%d)", params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (vec->ShiftUpFrom(item)!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayBefore (%d:%d)", params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetArray(item, get_amxaddr(amx, params[3]));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayInsertCellBefore(Array:which, item, const value)
|
||||||
|
static cell AMX_NATIVE_CALL ArrayInsertCellBefore(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int item=params[2];
|
||||||
|
|
||||||
|
if (item==vec->Size())
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellBefore (%d:%d)", params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (vec->ShiftUpFrom(item)!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellBefore (%d:%d)", params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetCell(item, params[3]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// ArrayInsertStringBefore(Array:which, item, const value[])
|
||||||
|
static cell AMX_NATIVE_CALL ArrayInsertStringBefore(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int item=params[2];
|
||||||
|
|
||||||
|
if (item==vec->Size())
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringBefore (%d:%d)", params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (vec->ShiftUpFrom(item)!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringBefore (%d:%d)", params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec->SetString(item, get_amxaddr(amx, params[3]));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ArraySwap(Array:which, item1, item2)
|
||||||
|
static cell AMX_NATIVE_CALL ArraySwap(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (vec->Swap(params[2], params[3])!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArraySwap (%d , %d:%d)",params[2], params[3], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ArrayDeleteItem(Array:which, item);
|
||||||
|
static cell AMX_NATIVE_CALL ArrayDeleteItem(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
CellVector* vec=HandleToVector(amx, params[1]);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vec->Delete(params[2])!=1)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayDeleteItem (%d:%d)", params[2], vec->Size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ArrayDestroy(Array:&which)
|
||||||
|
static cell AMX_NATIVE_CALL ArrayDestroy(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
// byref the handle here so we can zero it out after destroying
|
||||||
|
// this way they cannot accidentally reuse it
|
||||||
|
cell* handle=get_amxaddr(amx,params[1]);
|
||||||
|
CellVector* vec=HandleToVector(amx, *handle);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete vec;
|
||||||
|
|
||||||
|
VectorHolder[*handle-1]=NULL;
|
||||||
|
|
||||||
|
*handle=0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct ArraySort_s
|
||||||
|
{
|
||||||
|
int handle;
|
||||||
|
int forward;
|
||||||
|
cell data;
|
||||||
|
cell size;
|
||||||
|
|
||||||
|
} ArraySort_t;
|
||||||
|
|
||||||
|
static CStack<ArraySort_t *> ArraySortStack;
|
||||||
|
|
||||||
|
int SortArrayList(const void *itema, const void *itemb)
|
||||||
|
{
|
||||||
|
ArraySort_t *Info = ArraySortStack.front();
|
||||||
|
|
||||||
|
return executeForwards(Info->forward, Info->handle, *((int *)itema), *((int *)itemb), Info->data, Info->size);
|
||||||
|
|
||||||
|
}
|
||||||
|
// native ArraySort(Array:array, const comparefunc[], data[]="", data_size=0);
|
||||||
|
static cell AMX_NATIVE_CALL ArraySort(AMX* amx, cell* params)
|
||||||
|
{
|
||||||
|
int handle=params[1];
|
||||||
|
CellVector* vec=HandleToVector(amx, handle);
|
||||||
|
|
||||||
|
if (!vec)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is kind of a cheating way to go about this but...
|
||||||
|
// Create an array of integers as big as however many elements are in the vector.
|
||||||
|
// Pass that array to qsort
|
||||||
|
// After the array is sorted out, then create a NEW cellvector
|
||||||
|
// and copy in the old data in the order of what was sorted
|
||||||
|
int len;
|
||||||
|
char* FuncName=get_amxstring(amx, params[2], 0, len);
|
||||||
|
// MySortFunc(Array:array, item1, item2, const data[], data_size)
|
||||||
|
int Forward = registerSPForwardByName(amx, FuncName, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
|
||||||
|
if (Forward < 0)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "The public function \"%s\" was not found.", FuncName);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int *IntList=new int[vec->Size()];
|
||||||
|
|
||||||
|
for (int i=0; i< vec->Size(); i++)
|
||||||
|
{
|
||||||
|
IntList[i]=i;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArraySort_t *Info=new ArraySort_t;
|
||||||
|
|
||||||
|
Info->handle=handle;
|
||||||
|
Info->forward=Forward;
|
||||||
|
Info->data=params[3];
|
||||||
|
Info->size=params[4];
|
||||||
|
|
||||||
|
ArraySortStack.push(Info);
|
||||||
|
qsort(IntList, vec->Size(), sizeof(int), SortArrayList);
|
||||||
|
ArraySortStack.pop();
|
||||||
|
|
||||||
|
CellVector* newvec=new CellVector(vec->GetCellCount());
|
||||||
|
|
||||||
|
// Set the new vector's values
|
||||||
|
for (int i=0; i< vec->Size(); i++)
|
||||||
|
{
|
||||||
|
if (newvec->SetArray(newvec->Push(), vec->GetCellPointer(IntList[i]))!=1)
|
||||||
|
{
|
||||||
|
// This should never happen..
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Failed to SetArray in ArraySort (i=%d, IntList=%d)",i,IntList[i]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete the old vector
|
||||||
|
delete vec;
|
||||||
|
|
||||||
|
// Now save the new vector in its handle location
|
||||||
|
VectorHolder[handle-1]=newvec;
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
delete Info;
|
||||||
|
delete IntList;
|
||||||
|
|
||||||
|
unregisterSPForward(Forward);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AMX_NATIVE_INFO g_DataStructNatives[] =
|
||||||
|
{
|
||||||
|
{ "ArrayCreate", ArrayCreate },
|
||||||
|
{ "ArrayClear", ArrayClear },
|
||||||
|
{ "ArraySize", ArraySize },
|
||||||
|
{ "ArrayGetArray", ArrayGetArray },
|
||||||
|
{ "ArrayGetCell", ArrayGetCell },
|
||||||
|
{ "ArrayGetString", ArrayGetString },
|
||||||
|
{ "ArraySetArray", ArraySetArray },
|
||||||
|
{ "ArraySetCell", ArraySetCell },
|
||||||
|
{ "ArraySetString", ArraySetString },
|
||||||
|
{ "ArrayPushArray", ArrayPushArray },
|
||||||
|
{ "ArrayPushCell", ArrayPushCell },
|
||||||
|
{ "ArrayPushString", ArrayPushString },
|
||||||
|
{ "ArrayInsertArrayAfter", ArrayInsertArrayAfter },
|
||||||
|
{ "ArrayInsertCellAfter", ArrayInsertCellAfter },
|
||||||
|
{ "ArrayInsertStringAfter", ArrayInsertStringAfter },
|
||||||
|
{ "ArrayInsertArrayBefore", ArrayInsertArrayBefore },
|
||||||
|
{ "ArrayInsertCellBefore", ArrayInsertCellBefore },
|
||||||
|
{ "ArrayInsertStringBefore", ArrayInsertStringBefore },
|
||||||
|
{ "ArraySwap", ArraySwap },
|
||||||
|
{ "ArrayDeleteItem", ArrayDeleteItem },
|
||||||
|
{ "ArrayGetStringHandle", ArrayGetStringHandle },
|
||||||
|
{ "ArrayDestroy", ArrayDestroy },
|
||||||
|
{ "ArraySort", ArraySort },
|
||||||
|
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
321
amxmodx/datastructs.h
Normal file
321
amxmodx/datastructs.h
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
/* AMX Mod X
|
||||||
|
*
|
||||||
|
* by the AMX Mod X Development Team
|
||||||
|
* originally developed by OLO
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* 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, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DATASTRUCTS_H
|
||||||
|
#define DATASTRUCTS_H
|
||||||
|
|
||||||
|
class CellVector
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
cell* data; // allocated with malloc
|
||||||
|
size_t cellcount; // how many cells per element
|
||||||
|
size_t cursize; // current size of the vector (maximum elements)
|
||||||
|
size_t count; // how many units of the vector are in use
|
||||||
|
|
||||||
|
public:
|
||||||
|
CellVector(): data(NULL), cellcount(0), cursize(0), count(0)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
CellVector(int cellsize): data(NULL), cellcount(cellsize), cursize(0), count(0)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
~CellVector()
|
||||||
|
{
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
size_t GetCellCount()
|
||||||
|
{
|
||||||
|
return cellcount;
|
||||||
|
};
|
||||||
|
void Grow(size_t howmany)
|
||||||
|
{
|
||||||
|
cursize+=howmany;
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
data=(cell*)realloc(data, (sizeof(cell) * cellcount) * cursize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data=(cell*)malloc((sizeof(cell) * cellcount) * cursize);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
void FreeUnused(void)
|
||||||
|
{
|
||||||
|
if (cursize != count &&
|
||||||
|
data != NULL)
|
||||||
|
{
|
||||||
|
cursize=count;
|
||||||
|
data=(cell*)realloc(data, cursize * (sizeof(cell) * cellcount));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// Returns 1 on success
|
||||||
|
// 0 on out of bounds.
|
||||||
|
int GetArray(size_t which, cell* output)
|
||||||
|
{
|
||||||
|
// make sure it is in bounds.
|
||||||
|
if (which >= count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// align output data
|
||||||
|
cell* out=data + (cellcount * which);
|
||||||
|
|
||||||
|
memcpy(output, out, sizeof(cell) * cellcount);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
// Returns 1 on success
|
||||||
|
// 0 on out of bounds
|
||||||
|
int GetCell(size_t which, cell* output)
|
||||||
|
{
|
||||||
|
// check bounds
|
||||||
|
if (which >= count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*output=*(data + (cellcount * which));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// Returns 1 on success
|
||||||
|
// 0 on out of bounds
|
||||||
|
int GetString(size_t which, cell* output, size_t size)
|
||||||
|
{
|
||||||
|
// check bounds
|
||||||
|
if (which >= count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cell* out=data + (cellcount * which);
|
||||||
|
|
||||||
|
size_t count=cellcount;
|
||||||
|
|
||||||
|
while (size-- &&
|
||||||
|
count-- &&
|
||||||
|
(*output++=*out++)!='\0')
|
||||||
|
/* do nothing */ ;
|
||||||
|
|
||||||
|
// If size is zero here, then the string was never null terminated.
|
||||||
|
if (size==0)
|
||||||
|
{
|
||||||
|
*out='\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// Returns 1 on success
|
||||||
|
// 0 on out of bounds
|
||||||
|
int SetArray(size_t which, cell* output)
|
||||||
|
{
|
||||||
|
if (which >= count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// align output
|
||||||
|
cell* out=data + (cellcount * which);
|
||||||
|
|
||||||
|
memcpy(out, output, sizeof(cell) * cellcount);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
// Returns 1 on success
|
||||||
|
// 0 on out of bounds
|
||||||
|
int SetCell(size_t which, cell output)
|
||||||
|
{
|
||||||
|
if (which >= count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// align output
|
||||||
|
*(data + (cellcount * which))=output;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
// Returns 1 on success
|
||||||
|
// 0 on out of bounds
|
||||||
|
int SetString(size_t which, cell* output)
|
||||||
|
{
|
||||||
|
if (which >= count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// align output
|
||||||
|
cell* out=data + (cellcount * which);
|
||||||
|
|
||||||
|
memcpy(out, output, sizeof(cell) * cellcount);
|
||||||
|
|
||||||
|
// now force a null terminator on the last entry.
|
||||||
|
out+=(cellcount - 1);
|
||||||
|
*out='\0';
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
int Push()
|
||||||
|
{
|
||||||
|
if (count >= cursize)
|
||||||
|
{
|
||||||
|
// Grow in 8s to cause less reallocation
|
||||||
|
this->Grow(8);
|
||||||
|
};
|
||||||
|
|
||||||
|
this->count++;
|
||||||
|
|
||||||
|
return this->count-1;
|
||||||
|
};
|
||||||
|
int Size()
|
||||||
|
{
|
||||||
|
return this->count;
|
||||||
|
};
|
||||||
|
void Clear()
|
||||||
|
{
|
||||||
|
free(data);
|
||||||
|
data=(cell*)malloc(sizeof(cell) * cellcount);
|
||||||
|
cursize=1;
|
||||||
|
count=0;
|
||||||
|
};
|
||||||
|
cell* GetCellPointer(size_t which)
|
||||||
|
{
|
||||||
|
if (which >= count)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return data + (which * cellcount);
|
||||||
|
};
|
||||||
|
// Shifts all items from this item, and including this item up 1.
|
||||||
|
int ShiftUpFrom(size_t which)
|
||||||
|
{
|
||||||
|
// No point shifting this.
|
||||||
|
if (which > this->count)
|
||||||
|
{
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// First make a new item.
|
||||||
|
this->Push();
|
||||||
|
|
||||||
|
// If we got an InsertAfter(lastitem), then which will equal this->count - 1
|
||||||
|
// all we needed to do was Push()
|
||||||
|
if (which == this->count ||
|
||||||
|
which == this->count - 1)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate a temporary buffer to store data in
|
||||||
|
size_t tempbuffsize=(sizeof(cell) * cellcount) * (this->count - which);
|
||||||
|
|
||||||
|
cell* temp=(cell*)malloc(tempbuffsize);
|
||||||
|
|
||||||
|
// Copy old data to temp buffer
|
||||||
|
memcpy(temp, GetCellPointer(which), tempbuffsize);
|
||||||
|
|
||||||
|
// Now copy temp buffer to adjusted location
|
||||||
|
memcpy(GetCellPointer(which+1), temp, tempbuffsize);
|
||||||
|
|
||||||
|
// cleanup
|
||||||
|
free(temp);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
};
|
||||||
|
// Shifts all items from this item, and including this item down 1.
|
||||||
|
// This deletes the item specified.
|
||||||
|
int Delete(size_t which)
|
||||||
|
{
|
||||||
|
// No point shifting this.
|
||||||
|
if (which >= this->count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (size_t i=which; i<this->count - 1; i++)
|
||||||
|
{
|
||||||
|
memcpy(GetCellPointer(i), GetCellPointer(i + 1), sizeof(cell) * cellcount);
|
||||||
|
}
|
||||||
|
this->count--;
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
int Swap(size_t item1, size_t item2)
|
||||||
|
{
|
||||||
|
if (item1 >= this->count ||
|
||||||
|
item2 >= this->count)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make a temp buffer to store item2
|
||||||
|
cell* temp=(cell*)malloc(sizeof(cell) * cellcount);
|
||||||
|
memcpy(temp, GetCellPointer(item2), sizeof(cell) * cellcount);
|
||||||
|
|
||||||
|
// copy item1 to item2
|
||||||
|
memcpy(GetCellPointer(item2), GetCellPointer(item1), sizeof(cell) * cellcount);
|
||||||
|
|
||||||
|
// copy item2 to item1
|
||||||
|
memcpy(GetCellPointer(item1), temp, sizeof(cell) * cellcount);
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
free(temp);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
extern CVector<CellVector*> VectorHolder;
|
||||||
|
|
||||||
|
|
||||||
|
inline CellVector* HandleToVector(AMX* amx, int handle)
|
||||||
|
{
|
||||||
|
if (handle <= 0 ||
|
||||||
|
handle > (int)VectorHolder.size())
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", handle);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CellVector* ret=VectorHolder[handle-1];
|
||||||
|
|
||||||
|
if (ret == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", handle);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -289,7 +289,7 @@ void Debugger::BeginExec()
|
|||||||
{
|
{
|
||||||
Tracer *pTracer = new Tracer();
|
Tracer *pTracer = new Tracer();
|
||||||
m_pCalls.push_back(pTracer);
|
m_pCalls.push_back(pTracer);
|
||||||
assert(m_Top == (m_pCalls.size() - 1));
|
assert(m_Top == static_cast<int>(m_pCalls.size() - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pCalls[m_Top]->Reset();
|
m_pCalls[m_Top]->Reset();
|
||||||
@ -614,9 +614,9 @@ void Debugger::FmtGenericMsg(AMX *amx, int error, char buffer[], size_t maxLengt
|
|||||||
if (a)
|
if (a)
|
||||||
filename = (*a).getName();
|
filename = (*a).getName();
|
||||||
size_t len = strlen(filename);
|
size_t len = strlen(filename);
|
||||||
for (size_t i=len-1; i>=0; i--)
|
for (size_t i=len-1; i<len; i--)
|
||||||
{
|
{
|
||||||
if (filename[i] == '/' || filename[i] == '\\' && i != len - 1)
|
if ((filename[i] == '/' || filename[i] == '\\') && i != len - 1)
|
||||||
{
|
{
|
||||||
filename = &(filename[i+1]);
|
filename = &(filename[i+1]);
|
||||||
break;
|
break;
|
||||||
|
@ -176,7 +176,7 @@ public:
|
|||||||
trace_info_t *GetTrace() const { return m_pTrace; }
|
trace_info_t *GetTrace() const { return m_pTrace; }
|
||||||
const char *GetFmtCache() { return m_FmtCache.c_str(); }
|
const char *GetFmtCache() { return m_FmtCache.c_str(); }
|
||||||
|
|
||||||
bool IsNativeFiltering() { return (m_iNatFunc > 0); }
|
bool IsNativeFiltering() { return (m_iNatFunc > -1); }
|
||||||
bool InNativeFilter() { return m_InNativeFilter; }
|
bool InNativeFilter() { return m_InNativeFilter; }
|
||||||
private:
|
private:
|
||||||
AMX *m_pAmx;
|
AMX *m_pAmx;
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
#include "CMenu.h"
|
||||||
|
|
||||||
int gmsgAmmoPickup;
|
int gmsgAmmoPickup;
|
||||||
int gmsgAmmoX;
|
int gmsgAmmoX;
|
||||||
@ -92,9 +93,10 @@ void Client_ShowMenu(void* mValue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern bool g_bmod_tfc;
|
||||||
void Client_TeamInfo(void* mValue)
|
void Client_TeamInfo(void* mValue)
|
||||||
{
|
{
|
||||||
if (mPlayer) return;
|
if (mPlayer && !g_bmod_tfc) return;
|
||||||
static int index;
|
static int index;
|
||||||
|
|
||||||
switch (mState++)
|
switch (mState++)
|
||||||
@ -107,6 +109,8 @@ void Client_TeamInfo(void* mValue)
|
|||||||
char* msg = (char*)mValue;
|
char* msg = (char*)mValue;
|
||||||
g_players[index].team.assign(msg);
|
g_players[index].team.assign(msg);
|
||||||
g_teamsIds.registerTeam(msg, -1);
|
g_teamsIds.registerTeam(msg, -1);
|
||||||
|
g_players[index].teamId = g_teamsIds.findTeamId(msg);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,9 +213,15 @@ void Client_CurWeapon(void* mValue)
|
|||||||
case 2:
|
case 2:
|
||||||
if (!mPlayer) return;
|
if (!mPlayer) return;
|
||||||
if (!iState || (iId < 1 || iId >= MAX_WEAPONS)) break;
|
if (!iState || (iId < 1 || iId >= MAX_WEAPONS)) break;
|
||||||
mPlayer->weapons[iId].clip = *(int*)mValue;
|
|
||||||
mPlayer->current = iId;
|
mPlayer->current = iId;
|
||||||
mPlayer->lastHit = mPlayer->lastTrace;
|
|
||||||
|
|
||||||
|
if (*(int*)mValue < mPlayer->weapons[iId].clip && // Only update the lastHit vector if the clip size is decreasing
|
||||||
|
*(int*)mValue != -1) // But not if it's a melee weapon
|
||||||
|
{
|
||||||
|
mPlayer->lastHit = mPlayer->lastTrace;
|
||||||
|
}
|
||||||
|
mPlayer->weapons[iId].clip = *(int*)mValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// header file for unlink()
|
// header file for unlink()
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#else
|
#else
|
||||||
#define WINDOWS_LEAN_AND_MEAN
|
#define WINDOWS_LEAN_AND_MEAN
|
||||||
@ -383,8 +383,9 @@ static cell AMX_NATIVE_CALL amx_fwrite_blocks(AMX *amx, cell *params)
|
|||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
char *a = new char[blocks];
|
char *a = new char[blocks];
|
||||||
|
char *ptr = a;
|
||||||
while (btmp--)
|
while (btmp--)
|
||||||
*a++ = static_cast<char>(*addr++);
|
*ptr++ = static_cast<char>(*addr++);
|
||||||
size_t res = fwrite(a, sizeof(char), blocks, fp);
|
size_t res = fwrite(a, sizeof(char), blocks, fp);
|
||||||
delete [] a;
|
delete [] a;
|
||||||
return res;
|
return res;
|
||||||
@ -392,8 +393,9 @@ static cell AMX_NATIVE_CALL amx_fwrite_blocks(AMX *amx, cell *params)
|
|||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
short *a = new short[blocks];
|
short *a = new short[blocks];
|
||||||
|
short *ptr = a;
|
||||||
while (btmp--)
|
while (btmp--)
|
||||||
*a++ = static_cast<short>(*addr++);
|
*ptr++ = static_cast<short>(*addr++);
|
||||||
size_t res = fwrite(a, sizeof(short), blocks, fp);
|
size_t res = fwrite(a, sizeof(short), blocks, fp);
|
||||||
delete [] a;
|
delete [] a;
|
||||||
return res;
|
return res;
|
||||||
@ -401,8 +403,9 @@ static cell AMX_NATIVE_CALL amx_fwrite_blocks(AMX *amx, cell *params)
|
|||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
int *a = new int[blocks];
|
int *a = new int[blocks];
|
||||||
|
int *ptr = a;
|
||||||
while (btmp--)
|
while (btmp--)
|
||||||
*a++ = static_cast<int>(*addr++);
|
*ptr++ = static_cast<int>(*addr++);
|
||||||
size_t res = fwrite(a, sizeof(int), blocks, fp);
|
size_t res = fwrite(a, sizeof(int), blocks, fp);
|
||||||
delete [] a;
|
delete [] a;
|
||||||
return res;
|
return res;
|
||||||
@ -435,7 +438,7 @@ static cell AMX_NATIVE_CALL amx_fwrite(AMX *amx, cell *params)
|
|||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
int c = static_cast<int>(params[2]);
|
int c = static_cast<int>(params[2]);
|
||||||
return fwrite(&c, sizeof(short), 1, fp);
|
return fwrite(&c, sizeof(int), 1, fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -513,7 +516,7 @@ static cell AMX_NATIVE_CALL amx_fread_blocks(AMX *amx, cell *params)
|
|||||||
|
|
||||||
cell *addr = get_amxaddr(amx, params[2]);
|
cell *addr = get_amxaddr(amx, params[2]);
|
||||||
size_t blocks = params[3];
|
size_t blocks = params[3];
|
||||||
switch (params[3])
|
switch (params[4])
|
||||||
{
|
{
|
||||||
case 1: //char
|
case 1: //char
|
||||||
{
|
{
|
||||||
@ -781,7 +784,7 @@ static cell AMX_NATIVE_CALL amx_ungetc(AMX *amx, cell *params)
|
|||||||
return ungetc(static_cast<int>(params[2]), fp);
|
return ungetc(static_cast<int>(params[2]), fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#define _rmdir rmdir
|
#define _rmdir rmdir
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -799,16 +802,66 @@ static cell AMX_NATIVE_CALL amx_rmdir(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL amx_rename(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_rename(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
char f_old_r[260];
|
||||||
|
char f_new_r[260];
|
||||||
|
|
||||||
char *fold = get_amxstring(amx, params[1], 0, len);
|
char *fold = get_amxstring(amx, params[1], 0, len);
|
||||||
char *fnew = get_amxstring(amx, params[2], 1, len);
|
char *fnew = get_amxstring(amx, params[2], 1, len);
|
||||||
|
|
||||||
#if defined __linux__
|
if (params[0] / sizeof(cell) == 3 && params[3])
|
||||||
return (rename(fold, fnew) == 0);
|
{
|
||||||
|
build_pathname_r(f_old_r, sizeof(f_old_r)-1, "%s", fold);
|
||||||
|
build_pathname_r(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
|
||||||
|
} else {
|
||||||
|
snprintf(f_old_r, sizeof(f_old_r)-1, "%s", fold);
|
||||||
|
snprintf(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
|
return (rename(f_old_r, f_new_r) == 0);
|
||||||
#elif defined WIN32
|
#elif defined WIN32
|
||||||
return MoveFileA(fold, fnew);
|
return MoveFileA(f_old_r, f_new_r);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell LoadFileForMe(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
char *file = get_amxstring(amx, params[1], 0, len);
|
||||||
|
char path[256];
|
||||||
|
|
||||||
|
build_pathname_r(path, sizeof(path), "%s", file);
|
||||||
|
|
||||||
|
byte *addr = LOAD_FILE_FOR_ME(path, &len);
|
||||||
|
if (addr == NULL)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell *buffer = get_amxaddr(amx, params[2]);
|
||||||
|
cell maxlength = params[3];
|
||||||
|
cell *bytes_avail = get_amxaddr(amx, params[4]);
|
||||||
|
|
||||||
|
*bytes_avail = len;
|
||||||
|
|
||||||
|
cell count;
|
||||||
|
for (count = 0; count < len && count < maxlength; count++)
|
||||||
|
{
|
||||||
|
buffer[count] = addr[count];
|
||||||
|
}
|
||||||
|
|
||||||
|
FREE_FILE(addr);
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL amx_fflush(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
FILE *fp = (FILE *)params[1];
|
||||||
|
|
||||||
|
return fflush(fp);
|
||||||
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO file_Natives[] =
|
AMX_NATIVE_INFO file_Natives[] =
|
||||||
{
|
{
|
||||||
{"delete_file", delete_file},
|
{"delete_file", delete_file},
|
||||||
@ -844,5 +897,7 @@ AMX_NATIVE_INFO file_Natives[] =
|
|||||||
{"rmdir", amx_rmdir},
|
{"rmdir", amx_rmdir},
|
||||||
{"fputs", amx_fputs},
|
{"fputs", amx_fputs},
|
||||||
{"rename_file", amx_rename},
|
{"rename_file", amx_rename},
|
||||||
|
{"LoadFileForMe", LoadFileForMe},
|
||||||
|
{"fflush", amx_fflush},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
|
#include "datastructs.h"
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
|
|
||||||
//Adapted from Quake3's vsprintf
|
//Adapted from Quake3's vsprintf
|
||||||
@ -18,6 +19,7 @@
|
|||||||
#define SHORTINT 0x00000040 /* short integer */
|
#define SHORTINT 0x00000040 /* short integer */
|
||||||
#define ZEROPAD 0x00000080 /* zero (as opposed to blank) pad */
|
#define ZEROPAD 0x00000080 /* zero (as opposed to blank) pad */
|
||||||
#define FPT 0x00000100 /* floating point number */
|
#define FPT 0x00000100 /* floating point number */
|
||||||
|
#define UPPERDIGITS 0x00000200 /* make alpha digits uppercase */
|
||||||
#define to_digit(c) ((c) - '0')
|
#define to_digit(c) ((c) - '0')
|
||||||
#define is_digit(c) ((unsigned)to_digit(c) <= 9)
|
#define is_digit(c) ((unsigned)to_digit(c) <= 9)
|
||||||
#define to_char(n) ((n) + '0')
|
#define to_char(n) ((n) + '0')
|
||||||
@ -27,6 +29,11 @@
|
|||||||
return 0; \
|
return 0; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template size_t atcprintf<cell, cell>(cell *, size_t, const cell *, AMX *, cell *, int *);
|
||||||
|
template size_t atcprintf<char, cell>(char *, size_t, const cell *, AMX *, cell *, int *);
|
||||||
|
template size_t atcprintf<cell, char>(cell *, size_t, const char *, AMX *, cell *, int *);
|
||||||
|
template size_t atcprintf<char, char>(char *, size_t, const char *, AMX *, cell *, int *);
|
||||||
|
|
||||||
THash<String, lang_err> BadLang_Table;
|
THash<String, lang_err> BadLang_Table;
|
||||||
|
|
||||||
static cvar_t *amx_mldebug = NULL;
|
static cvar_t *amx_mldebug = NULL;
|
||||||
@ -158,71 +165,125 @@ void AddString(U **buf_p, size_t &maxlen, const cell *string, int width, int pre
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename U>
|
template <typename U>
|
||||||
void AddFloat(U **buf_p, size_t &maxlen, double fval, int width, int prec)
|
void AddFloat(U **buf_p, size_t &maxlen, double fval, int width, int prec, int flags)
|
||||||
{
|
{
|
||||||
U text[32];
|
int digits; // non-fraction part digits
|
||||||
int digits;
|
double tmp; // temporary
|
||||||
double signedVal;
|
U *buf = *buf_p; // output buffer pointer
|
||||||
U *buf;
|
int val; // temporary
|
||||||
int val;
|
int sign = 0; // 0: positive, 1: negative
|
||||||
|
int fieldlength; // for padding
|
||||||
|
int significant_digits = 0; // number of significant digits written
|
||||||
|
const int MAX_SIGNIFICANT_DIGITS = 16;
|
||||||
|
|
||||||
|
// default precision
|
||||||
|
if (prec < 0)
|
||||||
|
{
|
||||||
|
prec = 6;
|
||||||
|
}
|
||||||
|
|
||||||
// get the sign
|
// get the sign
|
||||||
signedVal = fval;
|
|
||||||
if (fval < 0)
|
if (fval < 0)
|
||||||
|
{
|
||||||
fval = -fval;
|
fval = -fval;
|
||||||
|
sign = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// write the float number
|
// compute whole-part digits count
|
||||||
digits = 0;
|
digits = (int)log10(fval) + 1;
|
||||||
val = (int)fval;
|
|
||||||
do {
|
|
||||||
text[digits++] = '0' + val % 10;
|
|
||||||
val /= 10;
|
|
||||||
} while (val);
|
|
||||||
|
|
||||||
if (signedVal < 0)
|
// Only print 0.something if 0 < fval < 1
|
||||||
text[digits++] = '-';
|
if (digits < 1)
|
||||||
|
|
||||||
buf = *buf_p;
|
|
||||||
|
|
||||||
while (digits < width && maxlen)
|
|
||||||
{
|
{
|
||||||
*buf++ = ' ';
|
digits = 1;
|
||||||
width--;
|
}
|
||||||
|
|
||||||
|
// compute the field length
|
||||||
|
fieldlength = digits + prec + ((prec > 0) ? 1 : 0) + sign;
|
||||||
|
|
||||||
|
// minus sign BEFORE left padding if padding with zeros
|
||||||
|
if (sign && maxlen && (flags & ZEROPAD))
|
||||||
|
{
|
||||||
|
*buf++ = '-';
|
||||||
maxlen--;
|
maxlen--;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (digits-- && maxlen)
|
// right justify if required
|
||||||
|
if ((flags & LADJUST) == 0)
|
||||||
{
|
{
|
||||||
*buf++ = text[digits];
|
while ((fieldlength < width) && maxlen)
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
*buf_p = buf;
|
|
||||||
|
|
||||||
if (prec < 0)
|
|
||||||
prec = 6;
|
|
||||||
// write the fraction
|
|
||||||
digits = 0;
|
|
||||||
while (digits < prec)
|
|
||||||
{
|
|
||||||
fval -= (int) fval;
|
|
||||||
fval *= 10.0;
|
|
||||||
val = (int) fval;
|
|
||||||
text[digits++] = '0' + val % 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (digits > 0 && maxlen)
|
|
||||||
{
|
|
||||||
buf = *buf_p;
|
|
||||||
*buf++ = '.';
|
|
||||||
maxlen--;
|
|
||||||
for (prec = 0; maxlen && prec < digits; prec++)
|
|
||||||
{
|
{
|
||||||
*buf++ = text[prec];
|
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
||||||
|
width--;
|
||||||
maxlen--;
|
maxlen--;
|
||||||
}
|
}
|
||||||
*buf_p = buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minus sign AFTER left padding if padding with spaces
|
||||||
|
if (sign && maxlen && !(flags & ZEROPAD))
|
||||||
|
{
|
||||||
|
*buf++ = '-';
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// write the whole part
|
||||||
|
tmp = pow(10.0, digits-1);
|
||||||
|
while ((digits--) && maxlen)
|
||||||
|
{
|
||||||
|
if (++significant_digits > MAX_SIGNIFICANT_DIGITS)
|
||||||
|
{
|
||||||
|
*buf++ = '0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
val = (int)(fval / tmp);
|
||||||
|
*buf++ = '0' + val;
|
||||||
|
fval -= val * tmp;
|
||||||
|
tmp *= 0.1;
|
||||||
|
}
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// write the fraction part
|
||||||
|
if (maxlen && prec)
|
||||||
|
{
|
||||||
|
*buf++ = '.';
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = pow(10.0, prec);
|
||||||
|
|
||||||
|
fval *= tmp;
|
||||||
|
while (prec-- && maxlen)
|
||||||
|
{
|
||||||
|
if (++significant_digits > MAX_SIGNIFICANT_DIGITS)
|
||||||
|
{
|
||||||
|
*buf++ = '0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmp *= 0.1;
|
||||||
|
val = (int)(fval / tmp);
|
||||||
|
*buf++ = '0' + val;
|
||||||
|
fval -= val * tmp;
|
||||||
|
}
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// left justify if required
|
||||||
|
if (flags & LADJUST)
|
||||||
|
{
|
||||||
|
while ((fieldlength < width) && maxlen)
|
||||||
|
{
|
||||||
|
// right-padding only with spaces, ZEROPAD is ignored
|
||||||
|
*buf++ = ' ';
|
||||||
|
width--;
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// update parent's buffer pointer
|
||||||
|
*buf_p = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename U>
|
template <typename U>
|
||||||
@ -326,6 +387,66 @@ void AddInt(U **buf_p, size_t &maxlen, int val, int width, int flags)
|
|||||||
*buf_p = buf;
|
*buf_p = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename U>
|
||||||
|
void AddHex(U **buf_p, size_t &maxlen, unsigned int val, int width, int flags)
|
||||||
|
{
|
||||||
|
U text[32];
|
||||||
|
int digits;
|
||||||
|
U *buf;
|
||||||
|
U digit;
|
||||||
|
int hexadjust;
|
||||||
|
|
||||||
|
if (flags & UPPERDIGITS)
|
||||||
|
{
|
||||||
|
hexadjust = 'A' - '9' - 1;
|
||||||
|
} else {
|
||||||
|
hexadjust = 'a' - '9' - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
digits = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
digit = ('0' + val % 16);
|
||||||
|
if (digit > '9')
|
||||||
|
{
|
||||||
|
digit += hexadjust;
|
||||||
|
}
|
||||||
|
|
||||||
|
text[digits++] = digit;
|
||||||
|
val /= 16;
|
||||||
|
} while (val);
|
||||||
|
|
||||||
|
buf = *buf_p;
|
||||||
|
|
||||||
|
if( !(flags & LADJUST) )
|
||||||
|
{
|
||||||
|
while (digits < width && maxlen)
|
||||||
|
{
|
||||||
|
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
||||||
|
width--;
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (digits-- && maxlen)
|
||||||
|
{
|
||||||
|
*buf++ = text[digits];
|
||||||
|
width--;
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & LADJUST)
|
||||||
|
{
|
||||||
|
while (width-- && maxlen)
|
||||||
|
{
|
||||||
|
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*buf_p = buf;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename D, typename S>
|
template <typename D, typename S>
|
||||||
size_t atcprintf(D *buffer, size_t maxlen, const S *format, AMX *amx, cell *params, int *param)
|
size_t atcprintf(D *buffer, size_t maxlen, const S *format, AMX *amx, cell *params, int *param)
|
||||||
{
|
{
|
||||||
@ -403,6 +524,7 @@ reswitch:
|
|||||||
case 'c':
|
case 'c':
|
||||||
CHECK_ARGS(0);
|
CHECK_ARGS(0);
|
||||||
*buf_p++ = static_cast<D>(*get_amxaddr(amx, params[arg]));
|
*buf_p++ = static_cast<D>(*get_amxaddr(amx, params[arg]));
|
||||||
|
llen--;
|
||||||
arg++;
|
arg++;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
@ -418,9 +540,35 @@ reswitch:
|
|||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
CHECK_ARGS(0);
|
CHECK_ARGS(0);
|
||||||
AddFloat(&buf_p, llen, amx_ctof(*get_amxaddr(amx, params[arg])), width, prec);
|
AddFloat(&buf_p, llen, amx_ctof(*get_amxaddr(amx, params[arg])), width, prec, flags);
|
||||||
arg++;
|
arg++;
|
||||||
break;
|
break;
|
||||||
|
case 'X':
|
||||||
|
CHECK_ARGS(0);
|
||||||
|
flags |= UPPERDIGITS;
|
||||||
|
AddHex(&buf_p, llen, static_cast<unsigned int>(*get_amxaddr(amx, params[arg])), width, flags);
|
||||||
|
arg++;
|
||||||
|
break;
|
||||||
|
case 'x':
|
||||||
|
CHECK_ARGS(0);
|
||||||
|
AddHex(&buf_p, llen, static_cast<unsigned int>(*get_amxaddr(amx, params[arg])), width, flags);
|
||||||
|
arg++;
|
||||||
|
break;
|
||||||
|
case 'a':
|
||||||
|
{
|
||||||
|
CHECK_ARGS(0);
|
||||||
|
// %a is passed a pointer directly to a cell string.
|
||||||
|
cell* ptr=reinterpret_cast<cell*>(*get_amxaddr(amx, params[arg]));
|
||||||
|
if (!ptr)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid vector string handle provided (%d)", *get_amxaddr(amx, params[arg]));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddString(&buf_p, llen, ptr, width, prec);
|
||||||
|
arg++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 's':
|
case 's':
|
||||||
CHECK_ARGS(0);
|
CHECK_ARGS(0);
|
||||||
if (amx->flags & AMX_FLAG_OLDFILE)
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
@ -43,7 +43,7 @@ _amxx_CpuSupport:
|
|||||||
.fail:
|
.fail:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
|
|
||||||
.end
|
.end:
|
||||||
|
|
||||||
pop ebx
|
pop ebx
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ unsigned char *MD5::raw_digest(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *MD5::hex_digest(){
|
const char *MD5::hex_digest(){
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
char *s= new char[33];
|
char *s= new char[33];
|
||||||
@ -205,7 +205,7 @@ char *MD5::hex_digest(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *MD5::hex_digest(char buffer[33]){
|
const char *MD5::hex_digest(char buffer[33]){
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -59,8 +59,8 @@ public:
|
|||||||
|
|
||||||
// methods to acquire finalized result
|
// methods to acquire finalized result
|
||||||
unsigned char *raw_digest (); // digest as a 16-byte binary array
|
unsigned char *raw_digest (); // digest as a 16-byte binary array
|
||||||
char * hex_digest (); // digest as a 33-byte ascii-hex string
|
const char *hex_digest (); // digest as a 33-byte ascii-hex string
|
||||||
char * hex_digest (char buffer[33]); //same as above, passing buffer
|
const char *hex_digest (char buffer[33]); //same as above, passing buffer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
Message Msg;
|
Message Msg;
|
||||||
CVector<int> msgHooks[256];
|
//CVector<int> msgHooks[256];
|
||||||
|
RegisteredMessage msgHooks[256];
|
||||||
int msgBlocks[256] = {BLOCK_NOT};
|
int msgBlocks[256] = {BLOCK_NOT};
|
||||||
int msgDest;
|
int msgDest;
|
||||||
int msgType;
|
int msgType;
|
||||||
@ -16,7 +17,7 @@ void ClearMessages()
|
|||||||
{
|
{
|
||||||
for (size_t i=0; i<MAX_MESSAGES; i++)
|
for (size_t i=0; i<MAX_MESSAGES; i++)
|
||||||
{
|
{
|
||||||
msgHooks[i].clear();
|
msgHooks[i].Clear();
|
||||||
msgBlocks[i] = BLOCK_NOT;
|
msgBlocks[i] = BLOCK_NOT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -200,7 +201,7 @@ void C_MessageBegin(int msg_dest, int msg_type, const float *pOrigin, edict_t *e
|
|||||||
inblock = true;
|
inblock = true;
|
||||||
msgType = msg_type;
|
msgType = msg_type;
|
||||||
RETURN_META(MRES_SUPERCEDE);
|
RETURN_META(MRES_SUPERCEDE);
|
||||||
} else if (msgHooks[msg_type].size()) {
|
} else if (msgHooks[msg_type].Hooked()) {
|
||||||
inhook = true;
|
inhook = true;
|
||||||
msgDest = msg_dest;
|
msgDest = msg_dest;
|
||||||
msgType = msg_type;
|
msgType = msg_type;
|
||||||
@ -318,8 +319,8 @@ void C_WriteEntity(int iValue)
|
|||||||
|
|
||||||
void C_MessageEnd(void)
|
void C_MessageEnd(void)
|
||||||
{
|
{
|
||||||
int mres = 0, mresB = 0;
|
int mres = 0;
|
||||||
unsigned int i = 0;
|
|
||||||
if (inblock)
|
if (inblock)
|
||||||
{
|
{
|
||||||
inblock = false;
|
inblock = false;
|
||||||
@ -329,12 +330,17 @@ void C_MessageEnd(void)
|
|||||||
}
|
}
|
||||||
RETURN_META(MRES_SUPERCEDE);
|
RETURN_META(MRES_SUPERCEDE);
|
||||||
} else if (inhook) {
|
} else if (inhook) {
|
||||||
|
|
||||||
|
mres = msgHooks[msgType].Execute((cell)msgType, (cell)msgDest, (cell)ENTINDEX(msgpEntity));
|
||||||
|
|
||||||
|
/*
|
||||||
for (i=0; i<msgHooks[msgType].size(); i++)
|
for (i=0; i<msgHooks[msgType].size(); i++)
|
||||||
{
|
{
|
||||||
mresB = executeForwards(msgHooks[msgType].at(i), (cell)msgType, (cell)msgDest, (cell)ENTINDEX(msgpEntity));
|
mresB = executeForwards(msgHooks[msgType].at(i), (cell)msgType, (cell)msgDest, (cell)ENTINDEX(msgpEntity));
|
||||||
if (mresB > mres)
|
if (mresB > mres)
|
||||||
mres = mresB;
|
mres = mresB;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
inhook = false;
|
inhook = false;
|
||||||
if (mres & 1)
|
if (mres & 1)
|
||||||
{
|
{
|
||||||
@ -477,7 +483,7 @@ static cell AMX_NATIVE_CALL register_message(AMX *amx, cell *params)
|
|||||||
int id = registerSPForwardByName(amx, name, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
|
int id = registerSPForwardByName(amx, name, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
|
||||||
if (id != -1)
|
if (id != -1)
|
||||||
{
|
{
|
||||||
msgHooks[params[1]].push_back(id);
|
msgHooks[params[1]].AddHook(id);
|
||||||
return id;
|
return id;
|
||||||
} else {
|
} else {
|
||||||
LogError(amx, AMX_ERR_NOTFOUND, "Could not find function \"%s\"", name);
|
LogError(amx, AMX_ERR_NOTFOUND, "Could not find function \"%s\"", name);
|
||||||
@ -488,6 +494,29 @@ static cell AMX_NATIVE_CALL register_message(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unregister_message(msgid, msghandle)
|
||||||
|
static cell AMX_NATIVE_CALL unregister_message(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
if (!Msg.Ready())
|
||||||
|
Msg.Init();
|
||||||
|
|
||||||
|
if (params[1]>0 && params[1] < 256)
|
||||||
|
{
|
||||||
|
int id = params[2];
|
||||||
|
if (id != -1)
|
||||||
|
{
|
||||||
|
msgHooks[params[1]].RemoveHook(id);
|
||||||
|
return id;
|
||||||
|
} else {
|
||||||
|
LogError(amx, AMX_ERR_NOTFOUND, "Invalid registered message handle");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL set_msg_block(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_msg_block(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int msgid = params[1];
|
int msgid = params[1];
|
||||||
@ -775,6 +804,7 @@ AMX_NATIVE_INFO msg_Natives[] =
|
|||||||
{"write_string", write_string},
|
{"write_string", write_string},
|
||||||
|
|
||||||
{"register_message", register_message},
|
{"register_message", register_message},
|
||||||
|
{"unregister_message", unregister_message},
|
||||||
|
|
||||||
{"set_msg_block", set_msg_block},
|
{"set_msg_block", set_msg_block},
|
||||||
{"get_msg_block", get_msg_block},
|
{"get_msg_block", get_msg_block},
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "amx.h"
|
#include "amx.h"
|
||||||
#include "CVector.h"
|
#include "CVector.h"
|
||||||
#include "CString.h"
|
#include "CString.h"
|
||||||
|
#include "sh_stack.h"
|
||||||
|
|
||||||
#define MAX_MESSAGES 255
|
#define MAX_MESSAGES 255
|
||||||
|
|
||||||
@ -15,6 +16,136 @@
|
|||||||
#define BLOCK_ONCE 1
|
#define BLOCK_ONCE 1
|
||||||
#define BLOCK_SET 2
|
#define BLOCK_SET 2
|
||||||
|
|
||||||
|
class RegisteredMessage
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
CVector<int> m_Forwards;
|
||||||
|
CStack<int> m_InExecution;
|
||||||
|
bool m_Cleanup;
|
||||||
|
|
||||||
|
public:
|
||||||
|
RegisteredMessage() : m_Cleanup(false) { }
|
||||||
|
~RegisteredMessage() { this->Clear(); }
|
||||||
|
|
||||||
|
void AddHook(int fwd)
|
||||||
|
{
|
||||||
|
m_Forwards.push_back(fwd);
|
||||||
|
}
|
||||||
|
bool RemoveHook(int fwd)
|
||||||
|
{
|
||||||
|
// Don't erase a forward if we're in the middle of execution; this
|
||||||
|
// could throw off the iterator that is going through the forwards
|
||||||
|
// and executing them. Instead, unregister the forward and set it
|
||||||
|
// to -1 from within the vector.
|
||||||
|
if (m_InExecution.size())
|
||||||
|
{
|
||||||
|
this->m_Cleanup = true;
|
||||||
|
|
||||||
|
CVector<int>::iterator iter = m_Forwards.begin();
|
||||||
|
CVector<int>::iterator end = m_Forwards.end();
|
||||||
|
while (iter != end)
|
||||||
|
{
|
||||||
|
if (*iter == fwd)
|
||||||
|
{
|
||||||
|
if (*iter != -1)
|
||||||
|
{
|
||||||
|
unregisterSPForward(*iter);
|
||||||
|
}
|
||||||
|
*iter = -1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CVector<int>::iterator iter = m_Forwards.begin();
|
||||||
|
CVector<int>::iterator end = m_Forwards.end();
|
||||||
|
while (iter != end)
|
||||||
|
{
|
||||||
|
if (*iter == fwd)
|
||||||
|
{
|
||||||
|
if (fwd != -1)
|
||||||
|
{
|
||||||
|
unregisterSPForward(fwd);
|
||||||
|
|
||||||
|
m_Forwards.erase(iter);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// -1 could be in here more than once
|
||||||
|
m_Forwards.erase(iter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Clear()
|
||||||
|
{
|
||||||
|
while (m_InExecution.size())
|
||||||
|
{
|
||||||
|
m_InExecution.pop();
|
||||||
|
}
|
||||||
|
for (size_t i = 0; i < m_Forwards.size(); i++)
|
||||||
|
{
|
||||||
|
int fwd = m_Forwards[i];
|
||||||
|
|
||||||
|
if (fwd != -1)
|
||||||
|
{
|
||||||
|
unregisterSPForward(m_Forwards[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Forwards.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
cell Execute(cell type, cell dest, cell entity)
|
||||||
|
{
|
||||||
|
m_InExecution.push(1);
|
||||||
|
cell res = 0;
|
||||||
|
cell thisres = 0;
|
||||||
|
for (size_t i = 0; i < m_Forwards.size(); i++)
|
||||||
|
{
|
||||||
|
int fwd = m_Forwards[i];
|
||||||
|
|
||||||
|
if (fwd != -1)
|
||||||
|
{
|
||||||
|
thisres = executeForwards(fwd, type, dest, entity);
|
||||||
|
if (thisres > res)
|
||||||
|
{
|
||||||
|
res = thisres;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_InExecution.pop();
|
||||||
|
|
||||||
|
if (m_InExecution.size() == 0 && m_Cleanup)
|
||||||
|
{
|
||||||
|
this->RemoveHook(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
bool Hooked() const
|
||||||
|
{
|
||||||
|
return m_Forwards.size() != 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
enum msgtype
|
enum msgtype
|
||||||
{
|
{
|
||||||
arg_byte = 1,
|
arg_byte = 1,
|
||||||
@ -76,7 +207,7 @@ void C_WriteString(const char *sz);
|
|||||||
void C_WriteEntity(int iValue);
|
void C_WriteEntity(int iValue);
|
||||||
void C_MessageEnd(void);
|
void C_MessageEnd(void);
|
||||||
|
|
||||||
extern CVector<int> msgHooks[256];
|
extern RegisteredMessage msgHooks[256];
|
||||||
extern int msgBlocks[256];
|
extern int msgBlocks[256];
|
||||||
|
|
||||||
void ClearMessages();
|
void ClearMessages();
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "fakemeta.h"
|
#include "fakemeta.h"
|
||||||
|
#include "CMenu.h"
|
||||||
#include "newmenus.h"
|
#include "newmenus.h"
|
||||||
#include "natives.h"
|
#include "natives.h"
|
||||||
#include "binlog.h"
|
#include "binlog.h"
|
||||||
@ -47,16 +48,21 @@
|
|||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
|
|
||||||
|
#include "datastructs.h"
|
||||||
|
#include "CFlagManager.h"
|
||||||
|
#include "svn_version.h"
|
||||||
|
#include "trie_natives.h"
|
||||||
|
|
||||||
plugin_info_t Plugin_info =
|
plugin_info_t Plugin_info =
|
||||||
{
|
{
|
||||||
META_INTERFACE_VERSION, // ifvers
|
META_INTERFACE_VERSION, // ifvers
|
||||||
"AMX Mod X", // name
|
"AMX Mod X", // name
|
||||||
AMX_VERSION, // version
|
SVN_VERSION_STRING, // version
|
||||||
__DATE__, // date
|
__DATE__, // date
|
||||||
"AMX Mod X Dev Team", // author
|
"AMX Mod X Dev Team", // author
|
||||||
"http://www.amxmodx.org", // url
|
"http://www.amxmodx.org", // url
|
||||||
"AMXX", // logtag
|
"AMXX", // logtag
|
||||||
PT_ANYTIME, // (when) loadable
|
PT_STARTUP, // (when) loadable
|
||||||
PT_ANYTIME, // (when) unloadable
|
PT_ANYTIME, // (when) unloadable
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,6 +79,7 @@ void (*function)(void*);
|
|||||||
void (*endfunction)(void*);
|
void (*endfunction)(void*);
|
||||||
|
|
||||||
extern List<AUTHORIZEFUNC> g_auth_funcs;
|
extern List<AUTHORIZEFUNC> g_auth_funcs;
|
||||||
|
extern CVector<CAdminData *> DynamicAdmins;
|
||||||
|
|
||||||
CLog g_log;
|
CLog g_log;
|
||||||
CForwardMngr g_forwards;
|
CForwardMngr g_forwards;
|
||||||
@ -86,7 +93,7 @@ CPlayer* mPlayer;
|
|||||||
CPluginMngr g_plugins;
|
CPluginMngr g_plugins;
|
||||||
CTaskMngr g_tasksMngr;
|
CTaskMngr g_tasksMngr;
|
||||||
CmdMngr g_commands;
|
CmdMngr g_commands;
|
||||||
|
CFlagManager FlagMan;
|
||||||
EventsMngr g_events;
|
EventsMngr g_events;
|
||||||
Grenades g_grenades;
|
Grenades g_grenades;
|
||||||
LogEventsMngr g_logevents;
|
LogEventsMngr g_logevents;
|
||||||
@ -191,7 +198,7 @@ void BuildPluginFileList(const char *initialdir, CStack<String *> & files)
|
|||||||
}
|
}
|
||||||
|
|
||||||
_findclose(handle);
|
_findclose(handle);
|
||||||
#elif defined __linux__
|
#elif defined(__linux__) || defined(__APPLE__)
|
||||||
build_pathname_r(path, sizeof(path)-1, "%s/", initialdir);
|
build_pathname_r(path, sizeof(path)-1, "%s/", initialdir);
|
||||||
struct dirent *ep;
|
struct dirent *ep;
|
||||||
DIR *dp;
|
DIR *dp;
|
||||||
@ -247,7 +254,7 @@ void LoadExtraPluginsFromDir(const char *initialdir)
|
|||||||
|
|
||||||
// Precache stuff from force consistency calls
|
// Precache stuff from force consistency calls
|
||||||
// or check for pointed files won't be done
|
// or check for pointed files won't be done
|
||||||
int C_PrecacheModel(char *s)
|
int C_PrecacheModel(const char *s)
|
||||||
{
|
{
|
||||||
if (!g_forcedmodules)
|
if (!g_forcedmodules)
|
||||||
{
|
{
|
||||||
@ -262,7 +269,7 @@ int C_PrecacheModel(char *s)
|
|||||||
RETURN_META_VALUE(MRES_IGNORED, 0);
|
RETURN_META_VALUE(MRES_IGNORED, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int C_PrecacheSound(char *s)
|
int C_PrecacheSound(const char *s)
|
||||||
{
|
{
|
||||||
if (!g_forcedsounds)
|
if (!g_forcedsounds)
|
||||||
{
|
{
|
||||||
@ -351,6 +358,22 @@ int C_Spawn(edict_t *pent)
|
|||||||
hostname = CVAR_GET_POINTER("hostname");
|
hostname = CVAR_GET_POINTER("hostname");
|
||||||
mp_timelimit = CVAR_GET_POINTER("mp_timelimit");
|
mp_timelimit = CVAR_GET_POINTER("mp_timelimit");
|
||||||
|
|
||||||
|
// Fix for crashing on mods that do not have mp_timelimit
|
||||||
|
if (mp_timelimit == NULL)
|
||||||
|
{
|
||||||
|
static cvar_t timelimit_holder;
|
||||||
|
|
||||||
|
timelimit_holder.name = "mp_timelimit";
|
||||||
|
timelimit_holder.string = "0";
|
||||||
|
timelimit_holder.flags = 0;
|
||||||
|
timelimit_holder.value = 0.0;
|
||||||
|
|
||||||
|
CVAR_REGISTER(&timelimit_holder);
|
||||||
|
|
||||||
|
mp_timelimit = &timelimit_holder;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
g_forwards.clear();
|
g_forwards.clear();
|
||||||
|
|
||||||
g_log.MapChange();
|
g_log.MapChange();
|
||||||
@ -381,7 +404,17 @@ int C_Spawn(edict_t *pent)
|
|||||||
get_localinfo("amx_pluginsdir", "addons/amxmodx/plugins");
|
get_localinfo("amx_pluginsdir", "addons/amxmodx/plugins");
|
||||||
get_localinfo("amx_logdir", "addons/amxmodx/logs");
|
get_localinfo("amx_logdir", "addons/amxmodx/logs");
|
||||||
|
|
||||||
|
FlagMan.LoadFile();
|
||||||
|
|
||||||
|
for (unsigned int i=0; i<VectorHolder.size(); i++)
|
||||||
|
{
|
||||||
|
delete VectorHolder[i];
|
||||||
|
};
|
||||||
|
VectorHolder.clear();
|
||||||
|
|
||||||
|
g_TrieHandles.clear();
|
||||||
char map_pluginsfile_path[256];
|
char map_pluginsfile_path[256];
|
||||||
|
char prefixed_map_pluginsfile[256];
|
||||||
char configs_dir[256];
|
char configs_dir[256];
|
||||||
|
|
||||||
// ###### Load modules
|
// ###### Load modules
|
||||||
@ -390,16 +423,35 @@ int C_Spawn(edict_t *pent)
|
|||||||
get_localinfo_r("amxx_configsdir", "addons/amxmodx/configs", configs_dir, sizeof(configs_dir)-1);
|
get_localinfo_r("amxx_configsdir", "addons/amxmodx/configs", configs_dir, sizeof(configs_dir)-1);
|
||||||
g_plugins.CALMFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
g_plugins.CALMFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
||||||
LoadExtraPluginsToPCALM(configs_dir);
|
LoadExtraPluginsToPCALM(configs_dir);
|
||||||
snprintf(map_pluginsfile_path, sizeof(map_pluginsfile_path)-1,
|
char temporaryMap[64], *tmap_ptr;
|
||||||
"%s/maps/plugins-%s.ini",
|
|
||||||
configs_dir,
|
snprintf(temporaryMap, sizeof(temporaryMap), "%s", STRING(gpGlobals->mapname));
|
||||||
STRING(gpGlobals->mapname));
|
|
||||||
|
prefixed_map_pluginsfile[0] = '\0';
|
||||||
|
if ((tmap_ptr = strchr(temporaryMap, '_')) != NULL)
|
||||||
|
{
|
||||||
|
// this map has a prefix
|
||||||
|
|
||||||
|
*tmap_ptr = '\0';
|
||||||
|
snprintf(prefixed_map_pluginsfile,
|
||||||
|
sizeof(prefixed_map_pluginsfile),
|
||||||
|
"%s/maps/plugins-%s.ini",
|
||||||
|
configs_dir,
|
||||||
|
temporaryMap);
|
||||||
|
g_plugins.CALMFromFile(prefixed_map_pluginsfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(map_pluginsfile_path,
|
||||||
|
sizeof(map_pluginsfile_path),
|
||||||
|
"%s/maps/plugins-%s.ini",
|
||||||
|
configs_dir,
|
||||||
|
STRING(gpGlobals->mapname));
|
||||||
g_plugins.CALMFromFile(map_pluginsfile_path);
|
g_plugins.CALMFromFile(map_pluginsfile_path);
|
||||||
|
|
||||||
int loaded = countModules(CountModules_Running); // Call after attachModules so all modules don't have pending stat
|
int loaded = countModules(CountModules_Running); // Call after attachModules so all modules don't have pending stat
|
||||||
|
|
||||||
// Set some info about amx version and modules
|
// Set some info about amx version and modules
|
||||||
CVAR_SET_STRING(init_amxmodx_version.name, AMX_VERSION);
|
CVAR_SET_STRING(init_amxmodx_version.name, SVN_VERSION_STRING);
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
sprintf(buffer, "%d", loaded);
|
sprintf(buffer, "%d", loaded);
|
||||||
CVAR_SET_STRING(init_amxmodx_modules.name, buffer);
|
CVAR_SET_STRING(init_amxmodx_modules.name, buffer);
|
||||||
@ -435,6 +487,11 @@ int C_Spawn(edict_t *pent)
|
|||||||
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
||||||
LoadExtraPluginsFromDir(configs_dir);
|
LoadExtraPluginsFromDir(configs_dir);
|
||||||
g_plugins.loadPluginsFromFile(map_pluginsfile_path, false);
|
g_plugins.loadPluginsFromFile(map_pluginsfile_path, false);
|
||||||
|
if (prefixed_map_pluginsfile[0] != '\0')
|
||||||
|
{
|
||||||
|
g_plugins.loadPluginsFromFile(prefixed_map_pluginsfile, false);
|
||||||
|
}
|
||||||
|
|
||||||
g_plugins.Finalize();
|
g_plugins.Finalize();
|
||||||
g_plugins.InvalidateCache();
|
g_plugins.InvalidateCache();
|
||||||
|
|
||||||
@ -650,10 +707,19 @@ void C_ServerDeactivate_Post()
|
|||||||
|
|
||||||
ClearMessages();
|
ClearMessages();
|
||||||
|
|
||||||
|
// Flush the dynamic admins list
|
||||||
|
for (size_t iter=DynamicAdmins.size();iter--; )
|
||||||
|
{
|
||||||
|
delete DynamicAdmins[iter];
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicAdmins.clear();
|
||||||
for (unsigned int i=0; i<g_hudsync.size(); i++)
|
for (unsigned int i=0; i<g_hudsync.size(); i++)
|
||||||
delete [] g_hudsync[i];
|
delete [] g_hudsync[i];
|
||||||
g_hudsync.clear();
|
g_hudsync.clear();
|
||||||
|
|
||||||
|
FlagMan.WriteCommands();
|
||||||
|
|
||||||
// last memreport
|
// last memreport
|
||||||
#ifdef MEMORY_TEST
|
#ifdef MEMORY_TEST
|
||||||
if (g_memreport_enabled)
|
if (g_memreport_enabled)
|
||||||
@ -665,7 +731,7 @@ void C_ServerDeactivate_Post()
|
|||||||
time(&td);
|
time(&td);
|
||||||
tm *curTime = localtime(&td);
|
tm *curTime = localtime(&td);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
||||||
#else
|
#else
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
||||||
@ -674,7 +740,7 @@ void C_ServerDeactivate_Post()
|
|||||||
{
|
{
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
||||||
if (mkdir(build_pathname(buffer), 0700) < 0)
|
if (mkdir(build_pathname(buffer), 0700) < 0)
|
||||||
#else
|
#else
|
||||||
@ -900,47 +966,63 @@ void C_ClientCommand(edict_t *pEntity)
|
|||||||
int menuid = pPlayer->menu;
|
int menuid = pPlayer->menu;
|
||||||
pPlayer->menu = 0;
|
pPlayer->menu = 0;
|
||||||
|
|
||||||
|
/* First, do new menus */
|
||||||
|
int func_was_executed = -1;
|
||||||
|
if (pPlayer->newmenu != -1)
|
||||||
|
{
|
||||||
|
int menu = pPlayer->newmenu;
|
||||||
|
pPlayer->newmenu = -1;
|
||||||
|
|
||||||
|
if (menu >= 0 && menu < (int)g_NewMenus.size() && g_NewMenus[menu])
|
||||||
|
{
|
||||||
|
Menu *pMenu = g_NewMenus[menu];
|
||||||
|
int item = pMenu->PagekeyToItem(pPlayer->page, pressed_key+1);
|
||||||
|
if (item == MENU_BACK)
|
||||||
|
{
|
||||||
|
pMenu->Display(pPlayer->index, pPlayer->page - 1);
|
||||||
|
} else if (item == MENU_MORE) {
|
||||||
|
pMenu->Display(pPlayer->index, pPlayer->page + 1);
|
||||||
|
} else {
|
||||||
|
ret = executeForwards(pMenu->func, static_cast<cell>(pPlayer->index), static_cast<cell>(menu), static_cast<cell>(item));
|
||||||
|
if (ret & 2)
|
||||||
|
{
|
||||||
|
result = MRES_SUPERCEDE;
|
||||||
|
} else if (ret & 1) {
|
||||||
|
RETURN_META(MRES_SUPERCEDE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* No matter what we marked it as executed, since the callback styles are
|
||||||
|
* entirely different. After all, this is a backwards compat shim.
|
||||||
|
*/
|
||||||
|
func_was_executed = pMenu->func;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now, do old menus */
|
||||||
MenuMngr::iterator a = g_menucmds.begin();
|
MenuMngr::iterator a = g_menucmds.begin();
|
||||||
|
|
||||||
while (a)
|
while (a)
|
||||||
{
|
{
|
||||||
if ((*a).matchCommand(menuid, bit_key) && (*a).getPlugin()->isExecutable((*a).getFunction()))
|
g_menucmds.SetWatchIter(a);
|
||||||
|
if ((*a).matchCommand(menuid, bit_key)
|
||||||
|
&& (*a).getPlugin()->isExecutable((*a).getFunction())
|
||||||
|
&& (func_was_executed == -1
|
||||||
|
|| !g_forwards.isSameSPForward(func_was_executed, (*a).getFunction()))
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (pPlayer->newmenu != -1)
|
ret = executeForwards((*a).getFunction(), static_cast<cell>(pPlayer->index),
|
||||||
{
|
static_cast<cell>(pressed_key), 0);
|
||||||
int menu = pPlayer->newmenu;
|
|
||||||
pPlayer->newmenu = -1;
|
if (ret & 2) result = MRES_SUPERCEDE;
|
||||||
|
if (ret & 1) RETURN_META(MRES_SUPERCEDE);
|
||||||
if (menu >= 0 && menu < (int)g_NewMenus.size())
|
}
|
||||||
{
|
if (g_menucmds.GetWatchIter() != a)
|
||||||
Menu *pMenu = g_NewMenus[menu];
|
{
|
||||||
int item = pMenu->PagekeyToItem(pPlayer->page, pressed_key+1);
|
a = g_menucmds.GetWatchIter();
|
||||||
|
} else {
|
||||||
if (item == MENU_BACK)
|
++a;
|
||||||
{
|
|
||||||
pMenu->Display(pPlayer->index, pPlayer->page - 1);
|
|
||||||
} else if (item == MENU_MORE) {
|
|
||||||
pMenu->Display(pPlayer->index, pPlayer->page + 1);
|
|
||||||
} else {
|
|
||||||
ret = executeForwards((*a).getFunction(), static_cast<cell>(pPlayer->index), static_cast<cell>(menu), static_cast<cell>(item));
|
|
||||||
|
|
||||||
if (ret & 2)
|
|
||||||
result = MRES_SUPERCEDE;
|
|
||||||
else if (ret & 1)
|
|
||||||
RETURN_META(MRES_SUPERCEDE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pPlayer->newmenu != -1)
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
ret = executeForwards((*a).getFunction(), static_cast<cell>(pPlayer->index),
|
|
||||||
static_cast<cell>(pressed_key), 0);
|
|
||||||
|
|
||||||
if (ret & 2) result = MRES_SUPERCEDE;
|
|
||||||
if (ret & 1) RETURN_META(MRES_SUPERCEDE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
++a;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1001,7 +1083,7 @@ void C_StartFrame_Post(void)
|
|||||||
tm *curTime = localtime(&td);
|
tm *curTime = localtime(&td);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
||||||
#else
|
#else
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
||||||
@ -1010,7 +1092,7 @@ void C_StartFrame_Post(void)
|
|||||||
{
|
{
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
||||||
if (mkdir(build_pathname(buffer), 0700) < 0)
|
if (mkdir(build_pathname(buffer), 0700) < 0)
|
||||||
#else
|
#else
|
||||||
@ -1056,20 +1138,6 @@ void C_MessageBegin_Post(int msg_dest, int msg_type, const float *pOrigin, edict
|
|||||||
{
|
{
|
||||||
if (ed)
|
if (ed)
|
||||||
{
|
{
|
||||||
if (gmsgBattery == msg_type && g_bmod_cstrike)
|
|
||||||
{
|
|
||||||
void* ptr = GET_PRIVATE(ed);
|
|
||||||
#ifdef __linux__
|
|
||||||
int *z = (int*)ptr + 0x171;
|
|
||||||
#else
|
|
||||||
int *z = (int*)ptr + 0x16C;
|
|
||||||
#endif
|
|
||||||
int stop = (int)ed->v.armorvalue;
|
|
||||||
|
|
||||||
*z = stop;
|
|
||||||
ed->v.armorvalue = (float)stop;
|
|
||||||
}
|
|
||||||
|
|
||||||
mPlayerIndex = ENTINDEX(ed);
|
mPlayerIndex = ENTINDEX(ed);
|
||||||
mPlayer = GET_PLAYER_POINTER_I(mPlayerIndex);
|
mPlayer = GET_PLAYER_POINTER_I(mPlayerIndex);
|
||||||
} else {
|
} else {
|
||||||
@ -1211,14 +1279,13 @@ void C_TraceLine_Post(const float *v1, const float *v2, int fNoMonsters, edict_t
|
|||||||
if (ptr->pHit && (ptr->pHit->v.flags & (FL_CLIENT | FL_FAKECLIENT)))
|
if (ptr->pHit && (ptr->pHit->v.flags & (FL_CLIENT | FL_FAKECLIENT)))
|
||||||
pPlayer->aiming = ptr->iHitgroup;
|
pPlayer->aiming = ptr->iHitgroup;
|
||||||
|
|
||||||
pPlayer->lastTrace = pPlayer->thisTrace;
|
pPlayer->lastTrace = ptr->vecEndPos;
|
||||||
pPlayer->thisTrace = ptr->vecEndPos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void C_AlertMessage(ALERT_TYPE atype, char *szFmt, ...)
|
void C_AlertMessage(ALERT_TYPE atype, const char *szFmt, ...)
|
||||||
{
|
{
|
||||||
if (atype != at_logged)
|
if (atype != at_logged)
|
||||||
{
|
{
|
||||||
@ -1262,7 +1329,7 @@ void C_AlertMessage(ALERT_TYPE atype, char *szFmt, ...)
|
|||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void C_ChangeLevel(char *map, char *what)
|
void C_ChangeLevel(const char *map, const char *what)
|
||||||
{
|
{
|
||||||
int ret = executeForwards(FF_ChangeLevel, map);
|
int ret = executeForwards(FF_ChangeLevel, map);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -1304,7 +1371,7 @@ void C_CvarValue2(const edict_t *pEdict, int requestId, const char *cvar, const
|
|||||||
RETURN_META(MRES_HANDLED);
|
RETURN_META(MRES_HANDLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
||||||
{
|
{
|
||||||
gpMetaUtilFuncs = pMetaUtilFuncs;
|
gpMetaUtilFuncs = pMetaUtilFuncs;
|
||||||
*pPlugInfo = &Plugin_info;
|
*pPlugInfo = &Plugin_info;
|
||||||
@ -1390,7 +1457,7 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
|||||||
|
|
||||||
// ###### Print short GPL
|
// ###### Print short GPL
|
||||||
print_srvconsole("\n AMX Mod X version %s Copyright (c) 2004-2006 AMX Mod X Development Team \n"
|
print_srvconsole("\n AMX Mod X version %s Copyright (c) 2004-2006 AMX Mod X Development Team \n"
|
||||||
" AMX Mod X comes with ABSOLUTELY NO WARRANTY; for details type `amxx gpl'.\n", AMX_VERSION);
|
" AMX Mod X comes with ABSOLUTELY NO WARRANTY; for details type `amxx gpl'.\n", SVN_VERSION_STRING);
|
||||||
print_srvconsole(" This is free software and you are welcome to redistribute it under \n"
|
print_srvconsole(" This is free software and you are welcome to redistribute it under \n"
|
||||||
" certain conditions; type 'amxx gpl' for details.\n \n");
|
" certain conditions; type 'amxx gpl' for details.\n \n");
|
||||||
|
|
||||||
@ -1419,6 +1486,8 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
|||||||
|
|
||||||
GET_HOOK_TABLES(PLID, &g_pEngTable, NULL, NULL);
|
GET_HOOK_TABLES(PLID, &g_pEngTable, NULL, NULL);
|
||||||
|
|
||||||
|
FlagMan.SetFile("cmdaccess.ini");
|
||||||
|
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1466,7 +1535,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
|
|||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
// linux prototype
|
// linux prototype
|
||||||
C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
|
C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
|
||||||
{
|
{
|
||||||
|
@ -29,8 +29,11 @@
|
|||||||
* version.
|
* version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
|
#if defined(__linux__)
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include "sclinux.h"
|
#include "sclinux.h"
|
||||||
@ -49,6 +52,7 @@
|
|||||||
#include "libraries.h"
|
#include "libraries.h"
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
|
#include "trie_natives.h"
|
||||||
|
|
||||||
CList<CModule, const char*> g_modules;
|
CList<CModule, const char*> g_modules;
|
||||||
CList<CScript, AMX*> g_loadedscripts;
|
CList<CScript, AMX*> g_loadedscripts;
|
||||||
@ -85,7 +89,7 @@ bool DirExists(const char *dir)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void report_error(int code, char* fmt, ...)
|
void report_error(int code, const char* fmt, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
char string[256];
|
char string[256];
|
||||||
@ -105,7 +109,7 @@ void report_error(int code, char* fmt, ...)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_srvconsole(char *fmt, ...)
|
void print_srvconsole(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
static char string[384];
|
static char string[384];
|
||||||
@ -339,11 +343,14 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
|
|||||||
if ((err = amx_InitJIT(amx, (void *)rt, (void *)np)) == AMX_ERR_NONE)
|
if ((err = amx_InitJIT(amx, (void *)rt, (void *)np)) == AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
//amx->base = (unsigned char FAR *)realloc(np, amx->code_size);
|
//amx->base = (unsigned char FAR *)realloc(np, amx->code_size);
|
||||||
#ifndef __linux__
|
#if defined(_WIN32)
|
||||||
amx->base = (unsigned char *)VirtualAlloc(NULL, amx->code_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
amx->base = (unsigned char *)VirtualAlloc(NULL, amx->code_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||||
#else
|
#elif defined(__GNUC__)
|
||||||
//posix_memalign((void **)&(amx->base), sysconf(_SC_PAGESIZE), amx->code_size);
|
# if defined(__APPLE__)
|
||||||
|
amx->base = (unsigned char *)valloc(amx->code_size);
|
||||||
|
# else
|
||||||
amx->base = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size);
|
amx->base = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size);
|
||||||
|
# endif
|
||||||
mprotect((void *)amx->base, amx->code_size, PROT_READ|PROT_WRITE|PROT_EXEC);
|
mprotect((void *)amx->base, amx->code_size, PROT_READ|PROT_WRITE|PROT_EXEC);
|
||||||
#endif
|
#endif
|
||||||
if (amx->base)
|
if (amx->base)
|
||||||
@ -578,6 +585,8 @@ int set_amxnatives(AMX* amx, char error[128])
|
|||||||
amx_Register(amx, msg_Natives, -1);
|
amx_Register(amx, msg_Natives, -1);
|
||||||
amx_Register(amx, vector_Natives, -1);
|
amx_Register(amx, vector_Natives, -1);
|
||||||
amx_Register(amx, g_SortNatives, -1);
|
amx_Register(amx, g_SortNatives, -1);
|
||||||
|
amx_Register(amx, g_DataStructNatives, -1);
|
||||||
|
amx_Register(amx, trie_Natives, -1);
|
||||||
|
|
||||||
if (amx->flags & AMX_FLAG_OLDFILE)
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
{
|
{
|
||||||
@ -598,7 +607,7 @@ int set_amxnatives(AMX* amx, char error[128])
|
|||||||
if ((err = amx_Exec(amx, &retval, idx)) != AMX_ERR_NONE)
|
if ((err = amx_Exec(amx, &retval, idx)) != AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
Debugger::GenericMessage(amx, err);
|
Debugger::GenericMessage(amx, err);
|
||||||
AMXXLOG_Log("An error occurred in plugins_native. This is dangerous!");
|
AMXXLOG_Log("An error occurred in plugin_natives. This is dangerous!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -638,7 +647,7 @@ int unload_amxscript(AMX* amx, void** program)
|
|||||||
return AMX_ERR_NONE;
|
return AMX_ERR_NONE;
|
||||||
|
|
||||||
#if defined JIT
|
#if defined JIT
|
||||||
#if defined __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
if ((flags & AMX_FLAG_JITC) != AMX_FLAG_JITC)
|
if ((flags & AMX_FLAG_JITC) != AMX_FLAG_JITC)
|
||||||
{
|
{
|
||||||
delete [] prg;
|
delete [] prg;
|
||||||
@ -717,17 +726,11 @@ void get_modname(char* buffer)
|
|||||||
strcpy(buffer, g_mod_name.c_str());
|
strcpy(buffer, g_mod_name.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
char* build_pathname(char *fmt, ...)
|
char* build_pathname(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
static char string[256];
|
static char string[256];
|
||||||
int b;
|
int b;
|
||||||
int a = b = snprintf(string, 255,
|
int a = b = snprintf(string, 255, "%s%c", g_mod_name.c_str(), PATH_SEP_CHAR);
|
||||||
#ifndef __linux__
|
|
||||||
"%s\\",
|
|
||||||
#else
|
|
||||||
"%s/",
|
|
||||||
#endif
|
|
||||||
g_mod_name.c_str());
|
|
||||||
|
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
va_start(argptr, fmt);
|
va_start(argptr, fmt);
|
||||||
@ -739,26 +742,19 @@ char* build_pathname(char *fmt, ...)
|
|||||||
|
|
||||||
while (*path)
|
while (*path)
|
||||||
{
|
{
|
||||||
#ifndef __linux__
|
if (*path == ALT_SEP_CHAR)
|
||||||
if (*path == '/') *path = '\\';
|
{
|
||||||
#else
|
*path = PATH_SEP_CHAR;
|
||||||
if (*path == '\\') *path = '/';
|
}
|
||||||
#endif
|
|
||||||
++path;
|
++path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...)
|
char *build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
snprintf(buffer, maxlen,
|
snprintf(buffer, maxlen, "%s%c", g_mod_name.c_str(), PATH_SEP_CHAR);
|
||||||
#ifdef __linux__
|
|
||||||
"%s/",
|
|
||||||
#else
|
|
||||||
"%s\\",
|
|
||||||
#endif
|
|
||||||
g_mod_name.c_str());
|
|
||||||
|
|
||||||
size_t len = strlen(buffer);
|
size_t len = strlen(buffer);
|
||||||
char *ptr = buffer + len;
|
char *ptr = buffer + len;
|
||||||
@ -770,11 +766,10 @@ char *build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...)
|
|||||||
|
|
||||||
while (*ptr)
|
while (*ptr)
|
||||||
{
|
{
|
||||||
#ifndef __linux__
|
if (*ptr == ALT_SEP_CHAR)
|
||||||
if (*ptr == '/') *ptr = '\\';
|
{
|
||||||
#else
|
*ptr = PATH_SEP_CHAR;
|
||||||
if (*ptr == '\\') *ptr = '/';
|
}
|
||||||
#endif
|
|
||||||
++ptr;
|
++ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -782,7 +777,7 @@ char *build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// build pathname based on addons dir
|
// build pathname based on addons dir
|
||||||
char* build_pathname_addons(char *fmt, ...)
|
char* build_pathname_addons(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
static char string[256];
|
static char string[256];
|
||||||
|
|
||||||
@ -795,23 +790,16 @@ char* build_pathname_addons(char *fmt, ...)
|
|||||||
|
|
||||||
while (*path)
|
while (*path)
|
||||||
{
|
{
|
||||||
#ifndef __linux__
|
if (*path == ALT_SEP_CHAR)
|
||||||
if (*path == '/') *path = '\\';
|
{
|
||||||
#else
|
*path = PATH_SEP_CHAR;
|
||||||
if (*path == '\\') *path = '/';
|
}
|
||||||
#endif
|
|
||||||
++path;
|
++path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined WIN32
|
|
||||||
#define SEPCHAR '\\'
|
|
||||||
#elif defined __linux__
|
|
||||||
#define SEPCHAR '/'
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool ConvertModuleName(const char *pathString, String &path)
|
bool ConvertModuleName(const char *pathString, String &path)
|
||||||
{
|
{
|
||||||
String local;
|
String local;
|
||||||
@ -829,7 +817,7 @@ bool ConvertModuleName(const char *pathString, String &path)
|
|||||||
/* run to filename instead of dir */
|
/* run to filename instead of dir */
|
||||||
char *ptr = tmpname;
|
char *ptr = tmpname;
|
||||||
ptr = tmpname + len - 1;
|
ptr = tmpname + len - 1;
|
||||||
while (ptr >= tmpname && *ptr != SEPCHAR)
|
while (ptr >= tmpname && *ptr != PATH_SEP_CHAR)
|
||||||
ptr--;
|
ptr--;
|
||||||
if (ptr >= tmpname)
|
if (ptr >= tmpname)
|
||||||
{
|
{
|
||||||
@ -890,10 +878,10 @@ bool ConvertModuleName(const char *pathString, String &path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
path.assign(orig_path);
|
path.assign(orig_path);
|
||||||
path.append(SEPCHAR);
|
path.append(PATH_SEP_CHAR);
|
||||||
path.append(tmpname);
|
path.append(tmpname);
|
||||||
path.append("_amxx");
|
path.append("_amxx");
|
||||||
#if defined __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#if defined AMD64 || PAWN_CELL_SIZE==64
|
#if defined AMD64 || PAWN_CELL_SIZE==64
|
||||||
path.append("_amd64");
|
path.append("_amd64");
|
||||||
#else
|
#else
|
||||||
@ -906,6 +894,8 @@ bool ConvertModuleName(const char *pathString, String &path)
|
|||||||
path.append(".dll");
|
path.append(".dll");
|
||||||
#elif defined __linux__
|
#elif defined __linux__
|
||||||
path.append(".so");
|
path.append(".so");
|
||||||
|
#elif defined __APPLE__
|
||||||
|
path.append(".dylib");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -976,6 +966,9 @@ bool LoadModule(const char *shortname, PLUG_LOADTIME now, bool simplify, bool no
|
|||||||
case MODULE_NOT64BIT:
|
case MODULE_NOT64BIT:
|
||||||
report_error(1, "[AMXX] Module \"%s\" is not 64 bit compatible.", path.c_str());
|
report_error(1, "[AMXX] Module \"%s\" is not 64 bit compatible.", path.c_str());
|
||||||
break;
|
break;
|
||||||
|
case MODULE_BADGAME:
|
||||||
|
report_error(1, "[AMXX] Module \"%s\" cannot load on game \"%s\"", path.c_str(), g_mod_name.c_str());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
error = false;
|
error = false;
|
||||||
break;
|
break;
|
||||||
@ -1194,8 +1187,6 @@ void modules_callPluginsUnloading()
|
|||||||
// new functions
|
// new functions
|
||||||
int MNF_AddNatives(AMX_NATIVE_INFO* natives)
|
int MNF_AddNatives(AMX_NATIVE_INFO* natives)
|
||||||
{
|
{
|
||||||
CList<CModule, const char *>::iterator a = g_modules.begin();
|
|
||||||
|
|
||||||
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
||||||
return FALSE; // may only be called from attach
|
return FALSE; // may only be called from attach
|
||||||
|
|
||||||
@ -1206,8 +1197,6 @@ int MNF_AddNatives(AMX_NATIVE_INFO* natives)
|
|||||||
|
|
||||||
int MNF_AddNewNatives(AMX_NATIVE_INFO *natives)
|
int MNF_AddNewNatives(AMX_NATIVE_INFO *natives)
|
||||||
{
|
{
|
||||||
CList<CModule, const char *>::iterator a = g_modules.begin();
|
|
||||||
|
|
||||||
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
||||||
return FALSE; // may only be called from attach
|
return FALSE; // may only be called from attach
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "amx.h"
|
#include "amx.h"
|
||||||
|
|
||||||
#undef DLLEXPORT
|
#undef DLLEXPORT
|
||||||
#ifndef __linux__
|
#if defined(_WIN32)
|
||||||
#define DLLEXPORT __declspec(dllexport)
|
#define DLLEXPORT __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define DLLEXPORT __attribute__((visibility("default")))
|
#define DLLEXPORT __attribute__((visibility("default")))
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
amxmodx.sln
|
|
||||||
amxmodx.suo
|
|
||||||
amxmodx.aps
|
|
||||||
amxmodx.ncb
|
|
||||||
Debug
|
|
||||||
JITDebug
|
|
||||||
JITMemtestRelease
|
|
||||||
JITRelease
|
|
||||||
MaximalSpeed
|
|
||||||
MemtestDebug
|
|
||||||
MemtestRelease
|
|
||||||
Release
|
|
@ -1,292 +0,0 @@
|
|||||||
# Microsoft Developer Studio Project File - Name="amxmodx_mm" - Package Owner=<4>
|
|
||||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
|
||||||
# ** DO NOT EDIT **
|
|
||||||
|
|
||||||
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
|
||||||
|
|
||||||
CFG=amxmodx_mm - Win32 Debug
|
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
|
||||||
!MESSAGE use the Export Makefile command and run
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "amxmodx_mm.mak".
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "amxmodx_mm.mak" CFG="amxmodx_mm - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "amxmodx_mm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
|
|
||||||
!MESSAGE "amxmodx_mm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
|
||||||
!MESSAGE
|
|
||||||
|
|
||||||
# Begin Project
|
|
||||||
# PROP AllowPerConfigDependencies 0
|
|
||||||
# PROP Scc_ProjName ""
|
|
||||||
# PROP Scc_LocalPath ""
|
|
||||||
CPP=cl.exe
|
|
||||||
MTL=midl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "amxmodx_mm - Win32 Release"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
|
||||||
# PROP BASE Output_Dir "Release"
|
|
||||||
# PROP BASE Intermediate_Dir "Release"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 0
|
|
||||||
# PROP Output_Dir "release"
|
|
||||||
# PROP Intermediate_Dir "release"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /c
|
|
||||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\metamod\metamod" /I "..\..\hlsdk\sourcecode\common" /I "..\..\hlsdk\sourcecode\engine" /I "..\..\hlsdk\sourcecode\dlls" /I "..\..\hlsdk\sourcecode\pm_shared" /I "..\extra\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /c
|
|
||||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
|
||||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
|
||||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /def:".\amxmodx_mm.def" /out:"release/amxx_mm.dll" /libpath:"..\extra\lib_win32"
|
|
||||||
# Begin Custom Build
|
|
||||||
TargetPath=.\release\amxx_mm.dll
|
|
||||||
TargetName=amxx_mm
|
|
||||||
InputPath=.\release\amxx_mm.dll
|
|
||||||
SOURCE="$(InputPath)"
|
|
||||||
|
|
||||||
"$(TargetName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
|
||||||
copy $(TargetPath) D:\SIERRA\Half-Life\cstrike\addons\amx\dlls
|
|
||||||
|
|
||||||
# End Custom Build
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "amxmodx_mm - Win32 Debug"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
|
||||||
# PROP BASE Output_Dir "Debug"
|
|
||||||
# PROP BASE Intermediate_Dir "Debug"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 1
|
|
||||||
# PROP Output_Dir "debug"
|
|
||||||
# PROP Intermediate_Dir "debug"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /GZ /c
|
|
||||||
# ADD CPP /nologo /Zp4 /MTd /W3 /Gm /GX /ZI /Od /I "..\..\metamod\metamod" /I "..\...\hlsdk\sourcecode\common" /I "..\...\hlsdk\sourcecode\engine" /I "..\...\hlsdk\sourcecode\dlls" /I "..\...\hlsdk\sourcecode\pm_shared" /I "..\extra\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /GZ /c
|
|
||||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
|
||||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
|
||||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /def:".\amxmodx_mm.def" /out:"debug/amxx_mm.dll" /pdbtype:sept /libpath:"..\extra\lib_win32"
|
|
||||||
# SUBTRACT LINK32 /incremental:no /nodefaultlib
|
|
||||||
# Begin Custom Build
|
|
||||||
TargetPath=.\debug\amxx_mm.dll
|
|
||||||
TargetName=amxx_mm
|
|
||||||
InputPath=.\debug\amxx_mm.dll
|
|
||||||
SOURCE="$(InputPath)"
|
|
||||||
|
|
||||||
"$(TargetName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
|
||||||
copy $(TargetPath) D:\SIERRA\Half-Life\cstrike\addons\amx\dlls
|
|
||||||
|
|
||||||
# End Custom Build
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# Begin Target
|
|
||||||
|
|
||||||
# Name "amxmodx_mm - Win32 Release"
|
|
||||||
# Name "amxmodx_mm - Win32 Debug"
|
|
||||||
# Begin Group "Source Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\amx.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\amxcore.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\amxmodx.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\amxtime.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\amxxlog.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CCmd.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CEvent.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CFile.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CForward.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CLogEvent.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CMenu.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CMisc.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CModule.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CPlugin.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CString.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CTask.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CVault.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\emsg.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\file.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\float.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\meta_api.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\modules.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\power.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\srvcmd.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\string.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\strptime.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\util.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\vault.cpp
|
|
||||||
# End Source File
|
|
||||||
# End Group
|
|
||||||
# Begin Group "Header Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\amxmodx.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CCmd.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CEvent.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CFile.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CForward.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CList.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CLogEvent.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CMenu.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CMisc.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CModule.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CPlugin.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CString.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CTask.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\CVault.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\modules.h
|
|
||||||
# End Source File
|
|
||||||
# End Group
|
|
||||||
# End Target
|
|
||||||
# End Project
|
|
@ -1,29 +0,0 @@
|
|||||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
|
||||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Project: "amxmodx_mm"=.\amxmodx_mm.dsp - Package Owner=<4>
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<4>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Global:
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<3>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 8.00
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amxmodx", "amxmodx_mm.vcproj", "{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfiguration) = preSolution
|
|
||||||
JITDebug = JITDebug
|
|
||||||
JITDebugBinLog = JITDebugBinLog
|
|
||||||
JITRelease = JITRelease
|
|
||||||
JITReleaseBinLog = JITReleaseBinLog
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfiguration) = postSolution
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug.ActiveCfg = JITDebug|Win32
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug.Build.0 = JITDebug|Win32
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog.ActiveCfg = JITDebugBinLog|Win32
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog.Build.0 = JITDebugBinLog|Win32
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease.ActiveCfg = JITRelease|Win32
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease.Build.0 = JITRelease|Win32
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog.ActiveCfg = JITReleaseBinLog|Win32
|
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog.Build.0 = JITReleaseBinLog|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityAddIns) = postSolution
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
@ -1,682 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
|
||||||
<VisualStudioProject
|
|
||||||
ProjectType="Visual C++"
|
|
||||||
Version="7.10"
|
|
||||||
Name="amxmodx"
|
|
||||||
ProjectGUID="{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
|
||||||
RootNamespace="amxmodx"
|
|
||||||
SccProjectName=""
|
|
||||||
SccLocalPath="">
|
|
||||||
<Platforms>
|
|
||||||
<Platform
|
|
||||||
Name="Win32"/>
|
|
||||||
</Platforms>
|
|
||||||
<Configurations>
|
|
||||||
<Configuration
|
|
||||||
Name="JITDebug|Win32"
|
|
||||||
OutputDirectory="JITDebug"
|
|
||||||
IntermediateDirectory="JITDebug"
|
|
||||||
ConfigurationType="2"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="5"
|
|
||||||
StructMemberAlignment="3"
|
|
||||||
UsePrecompiledHeader="2"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitdebug/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitdebug/"
|
|
||||||
ObjectFile=".\jitdebug/"
|
|
||||||
ProgramDataBaseFileName=".\jitdebug/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
CompileAs="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitdebug/amxmodx_mm.dll"
|
|
||||||
Version="0.1"
|
|
||||||
LinkIncremental="2"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
ProgramDatabaseFile=".\jitdebug/amxmodx_mm.pdb"
|
|
||||||
ImportLibrary=".\jitdebug/amxmodx_mm.lib"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\debug/amxmodx.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
Culture="1033"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
OutputDirectory="JITRelease"
|
|
||||||
IntermediateDirectory="JITRelease"
|
|
||||||
ConfigurationType="2"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
GlobalOptimizations="TRUE"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
EnableIntrinsicFunctions="TRUE"
|
|
||||||
FavorSizeOrSpeed="1"
|
|
||||||
OmitFramePointers="TRUE"
|
|
||||||
OptimizeForProcessor="0"
|
|
||||||
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32"
|
|
||||||
IgnoreStandardIncludePath="FALSE"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
RuntimeLibrary="4"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
UsePrecompiledHeader="2"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitrelease/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitrelease/"
|
|
||||||
ObjectFile=".\jitrelease/"
|
|
||||||
ProgramDataBaseFileName=".\jitrelease/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
CompileAs="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitrelease/amxmodx_mm.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
ProgramDatabaseFile=".\jitrelease/amxmodx_mm.pdb"
|
|
||||||
GenerateMapFile="TRUE"
|
|
||||||
ImportLibrary=".\jitrelease/amxmodx_mm.lib"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\release/amxmodx.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
Culture="1033"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="JITDebugBinLog|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;BINLOG_ENABLED"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="5"
|
|
||||||
StructMemberAlignment="3"
|
|
||||||
UsePrecompiledHeader="2"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitdebugbinlog/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitdebugbinlog/"
|
|
||||||
ObjectFile=".\jitdebugbinlog/"
|
|
||||||
ProgramDataBaseFileName=".\jitdebugbinlog/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
CompileAs="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitdebugbinlog/amxmodx_bl_mm.dll"
|
|
||||||
Version="0.1"
|
|
||||||
LinkIncremental="2"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
ProgramDatabaseFile=".\jitdebugbinlog/amxmodx_bl_mm.pdb"
|
|
||||||
ImportLibrary=".\jitdebugbinlog/amxmodx_bl_mm.lib"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\debug/amxmodx.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
Culture="1033"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="JITReleaseBinLog|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
GlobalOptimizations="TRUE"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
EnableIntrinsicFunctions="TRUE"
|
|
||||||
FavorSizeOrSpeed="1"
|
|
||||||
OmitFramePointers="TRUE"
|
|
||||||
OptimizeForProcessor="0"
|
|
||||||
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;BINLOG_ENABLED"
|
|
||||||
IgnoreStandardIncludePath="FALSE"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
RuntimeLibrary="4"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
UsePrecompiledHeader="2"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitreleasebinlog/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitreleasebinlog/"
|
|
||||||
ObjectFile=".\jitreleasebinlog/"
|
|
||||||
ProgramDataBaseFileName=".\jitreleasebinlog/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
CompileAs="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitreleasebinlog/amxmodx_bl_mm.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
ProgramDatabaseFile=".\jitreleasebinlog/amxmodx_bl_mm.pdb"
|
|
||||||
GenerateMapFile="TRUE"
|
|
||||||
ImportLibrary=".\jitreleasebinlog/amxmodx_bl_mm.lib"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\release/amxmodx.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
Culture="1033"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
|
||||||
<References>
|
|
||||||
</References>
|
|
||||||
<Files>
|
|
||||||
<Filter
|
|
||||||
Name="Source Files"
|
|
||||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
|
|
||||||
<File
|
|
||||||
RelativePath="..\amx.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxcore.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxdbg.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmod_compat.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmodx.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxtime.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxfile.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxlog.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\binlog.cpp">
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITDebug|Win32"
|
|
||||||
ExcludedFromBuild="TRUE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
ExcludedFromBuild="TRUE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CCmd.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CEvent.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CFile.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CForward.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLang.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLogEvent.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMenu.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMisc.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CModule.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CPlugin.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CTask.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CVault.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\debugger.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\emsg.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\fakemeta.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\file.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\float.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\format.cpp">
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="4"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITReleaseBinLog|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="4"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\libraries.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\md5.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\messages.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\meta_api.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\modules.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\newmenus.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\optimizer.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\power.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sorting.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\srvcmd.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\string.cpp">
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="2"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITReleaseBinLog|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="2"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\strptime.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\util.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\vault.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\vector.cpp">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Header Files"
|
|
||||||
Filter="h;hpp;hxx;hm;inl">
|
|
||||||
<File
|
|
||||||
RelativePath="..\amx.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxdbg.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmod_compat.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmodx.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxfile.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxlog.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\binlog.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CCmd.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CEvent.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CFile.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CForward.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLang.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CList.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLogEvent.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMenu.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMisc.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CModule.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CPlugin.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CQueue.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CString.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CTask.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CVault.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CVector.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\debugger.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\fakemeta.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\format.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\libraries.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\md5.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\menus.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\messages.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\modules.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\newmenus.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\optimizer.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\resource.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sh_list.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sh_stack.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sh_tinyhash.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\zlib\zconf.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\zlib\zlib.h">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Resource Files"
|
|
||||||
Filter="rc">
|
|
||||||
<File
|
|
||||||
RelativePath="..\version.rc">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Assembly"
|
|
||||||
Filter="">
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxdefn.asm">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxexecn.asm">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxjitsn.asm">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\helpers-x86.asm">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives-amd64.asm">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives-x86.asm">
|
|
||||||
</File>
|
|
||||||
<Filter
|
|
||||||
Name="Builds"
|
|
||||||
Filter="">
|
|
||||||
<File
|
|
||||||
RelativePath="..\Jit\helpers-x86.obj">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="SDK"
|
|
||||||
Filter="">
|
|
||||||
<File
|
|
||||||
RelativePath="..\sdk\amxxmodule.cpp">
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITDebug|Win32"
|
|
||||||
ExcludedFromBuild="TRUE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
ExcludedFromBuild="TRUE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITDebugBinLog|Win32"
|
|
||||||
ExcludedFromBuild="TRUE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITReleaseBinLog|Win32"
|
|
||||||
ExcludedFromBuild="TRUE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sdk\amxxmodule.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sdk\moduleconfig.h">
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
</Files>
|
|
||||||
<Globals>
|
|
||||||
</Globals>
|
|
||||||
</VisualStudioProject>
|
|
@ -1,26 +1,26 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||||
# Visual Studio 2005
|
# Visual Studio 2010
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amxmodx_mm", "amxmodx_mm.vcproj", "{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amxmodx_mm", "amxmodx_mm.vcxproj", "{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
JITDebug|Win32 = JITDebug|Win32
|
JITDebug|Win32 = JITDebug|Win32
|
||||||
JITDebugBinLog|Win32 = JITDebugBinLog|Win32
|
JITDebugBinLog|Win32 = JITDebugBinLog|Win32
|
||||||
JITRelease|Win32 = JITRelease|Win32
|
JITRelease|Win32 = JITRelease|Win32
|
||||||
JITReleaseBinLog|Win32 = JITReleaseBinLog|Win32
|
JITReleaseBinLog|Win32 = JITReleaseBinLog|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug|Win32.ActiveCfg = JITDebug|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug|Win32.ActiveCfg = JITDebug|Win32
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug|Win32.Build.0 = JITDebug|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug|Win32.Build.0 = JITDebug|Win32
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog|Win32.ActiveCfg = JITDebugBinLog|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog|Win32.ActiveCfg = JITDebugBinLog|Win32
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog|Win32.Build.0 = JITDebugBinLog|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog|Win32.Build.0 = JITDebugBinLog|Win32
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease|Win32.ActiveCfg = JITRelease|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease|Win32.ActiveCfg = JITRelease|Win32
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease|Win32.Build.0 = JITRelease|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease|Win32.Build.0 = JITRelease|Win32
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog|Win32.ActiveCfg = JITReleaseBinLog|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog|Win32.ActiveCfg = JITReleaseBinLog|Win32
|
||||||
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog|Win32.Build.0 = JITReleaseBinLog|Win32
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog|Win32.Build.0 = JITReleaseBinLog|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
439
amxmodx/msvc10/amxmodx_mm.vcxproj
Normal file
439
amxmodx/msvc10/amxmodx_mm.vcxproj
Normal file
@ -0,0 +1,439 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="JITDebugBinLog|Win32">
|
||||||
|
<Configuration>JITDebugBinLog</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="JITDebug|Win32">
|
||||||
|
<Configuration>JITDebug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="JITReleaseBinLog|Win32">
|
||||||
|
<Configuration>JITReleaseBinLog</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="JITRelease|Win32">
|
||||||
|
<Configuration>JITRelease</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}</ProjectGuid>
|
||||||
|
<RootNamespace>amxmodx</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">true</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">true</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">false</LinkIncremental>
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" />
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<TypeLibraryName>.\debug/amxmodx.tlb</TypeLibraryName>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<StructMemberAlignment>4Bytes</StructMemberAlignment>
|
||||||
|
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||||
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile>.\jitdebug/amxmodx.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<AssemblerListingLocation>.\jitdebug/</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>.\jitdebug/</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>.\jitdebug/</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<Version>0.1</Version>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<ModuleDefinitionFile>
|
||||||
|
</ModuleDefinitionFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>.\jitdebug/amxx_mm.pdb</ProgramDatabaseFile>
|
||||||
|
<ImportLibrary>.\jitdebug/amxmodx_mm.lib</ImportLibrary>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<TypeLibraryName>.\release/amxmodx.tlb</TypeLibraryName>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
|
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||||
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile>.\jitrelease/amxmodx.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<AssemblerListingLocation>.\jitrelease/</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>.\jitrelease/</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>.\jitrelease/</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<ShowIncludes>false</ShowIncludes>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<ModuleDefinitionFile>
|
||||||
|
</ModuleDefinitionFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>.\jitrelease/amxmodx_mm.pdb</ProgramDatabaseFile>
|
||||||
|
<GenerateMapFile>true</GenerateMapFile>
|
||||||
|
<ImportLibrary>.\jitrelease/amxmodx_mm.lib</ImportLibrary>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<TypeLibraryName>.\debug/amxmodx.tlb</TypeLibraryName>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<StructMemberAlignment>4Bytes</StructMemberAlignment>
|
||||||
|
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||||
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile>.\jitdebugbinlog/amxmodx.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<AssemblerListingLocation>.\jitdebugbinlog/</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>.\jitdebugbinlog/</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>.\jitdebugbinlog/</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<Version>0.1</Version>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<ModuleDefinitionFile>
|
||||||
|
</ModuleDefinitionFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>.\jitdebugbinlog/amxmodx_bl_mm.pdb</ProgramDatabaseFile>
|
||||||
|
<ImportLibrary>.\jitdebugbinlog/amxmodx_bl_mm.lib</ImportLibrary>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">
|
||||||
|
<Midl>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<TargetEnvironment>Win32</TargetEnvironment>
|
||||||
|
<TypeLibraryName>.\release/amxmodx.tlb</TypeLibraryName>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
|
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||||
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile>.\jitreleasebinlog/amxmodx.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<AssemblerListingLocation>.\jitreleasebinlog/</AssemblerListingLocation>
|
||||||
|
<ObjectFileName>.\jitreleasebinlog/</ObjectFileName>
|
||||||
|
<ProgramDataBaseFileName>.\jitreleasebinlog/</ProgramDataBaseFileName>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
<ModuleDefinitionFile>
|
||||||
|
</ModuleDefinitionFile>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<ProgramDatabaseFile>.\jitreleasebinlog/amxmodx_bl_mm.pdb</ProgramDatabaseFile>
|
||||||
|
<GenerateMapFile>true</GenerateMapFile>
|
||||||
|
<ImportLibrary>.\jitreleasebinlog/amxmodx_bl_mm.lib</ImportLibrary>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\amx.cpp" />
|
||||||
|
<ClCompile Include="..\amxcore.cpp" />
|
||||||
|
<ClCompile Include="..\amxdbg.cpp" />
|
||||||
|
<ClCompile Include="..\amxmod_compat.cpp" />
|
||||||
|
<ClCompile Include="..\amxmodx.cpp" />
|
||||||
|
<ClCompile Include="..\amxtime.cpp" />
|
||||||
|
<ClCompile Include="..\amxxfile.cpp" />
|
||||||
|
<ClCompile Include="..\amxxlog.cpp" />
|
||||||
|
<ClCompile Include="..\binlog.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CCmd.cpp" />
|
||||||
|
<ClCompile Include="..\CEvent.cpp" />
|
||||||
|
<ClCompile Include="..\CFile.cpp" />
|
||||||
|
<ClCompile Include="..\CFlagManager.cpp" />
|
||||||
|
<ClCompile Include="..\CForward.cpp" />
|
||||||
|
<ClCompile Include="..\CLang.cpp" />
|
||||||
|
<ClCompile Include="..\CLogEvent.cpp" />
|
||||||
|
<ClCompile Include="..\CMenu.cpp" />
|
||||||
|
<ClCompile Include="..\CMisc.cpp" />
|
||||||
|
<ClCompile Include="..\CModule.cpp" />
|
||||||
|
<ClCompile Include="..\CPlugin.cpp" />
|
||||||
|
<ClCompile Include="..\CTask.cpp" />
|
||||||
|
<ClCompile Include="..\CVault.cpp" />
|
||||||
|
<ClCompile Include="..\debugger.cpp" />
|
||||||
|
<ClCompile Include="..\emsg.cpp" />
|
||||||
|
<ClCompile Include="..\fakemeta.cpp" />
|
||||||
|
<ClCompile Include="..\file.cpp" />
|
||||||
|
<ClCompile Include="..\float.cpp" />
|
||||||
|
<ClCompile Include="..\format.cpp">
|
||||||
|
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">AssemblyAndSourceCode</AssemblerOutput>
|
||||||
|
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">AssemblyAndSourceCode</AssemblerOutput>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libraries.cpp" />
|
||||||
|
<ClCompile Include="..\md5.cpp" />
|
||||||
|
<ClCompile Include="..\messages.cpp" />
|
||||||
|
<ClCompile Include="..\meta_api.cpp" />
|
||||||
|
<ClCompile Include="..\modules.cpp" />
|
||||||
|
<ClCompile Include="..\natives.cpp" />
|
||||||
|
<ClCompile Include="..\newmenus.cpp" />
|
||||||
|
<ClCompile Include="..\nongpl_matches.cpp" />
|
||||||
|
<ClCompile Include="..\optimizer.cpp" />
|
||||||
|
<ClCompile Include="..\power.cpp" />
|
||||||
|
<ClCompile Include="..\sorting.cpp" />
|
||||||
|
<ClCompile Include="..\srvcmd.cpp" />
|
||||||
|
<ClCompile Include="..\string.cpp">
|
||||||
|
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">All</AssemblerOutput>
|
||||||
|
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">All</AssemblerOutput>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\strptime.cpp" />
|
||||||
|
<ClCompile Include="..\trie_natives.cpp" />
|
||||||
|
<ClCompile Include="..\util.cpp" />
|
||||||
|
<ClCompile Include="..\vault.cpp" />
|
||||||
|
<ClCompile Include="..\vector.cpp" />
|
||||||
|
<ClCompile Include="..\datastructs.cpp" />
|
||||||
|
<ClCompile Include="..\sdk\amxxmodule.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\amx.h" />
|
||||||
|
<ClInclude Include="..\amxdbg.h" />
|
||||||
|
<ClInclude Include="..\amxmod_compat.h" />
|
||||||
|
<ClInclude Include="..\amxmodx.h" />
|
||||||
|
<ClInclude Include="..\amxxfile.h" />
|
||||||
|
<ClInclude Include="..\amxxlog.h" />
|
||||||
|
<ClInclude Include="..\binlog.h" />
|
||||||
|
<ClInclude Include="..\CCmd.h" />
|
||||||
|
<ClInclude Include="..\CEvent.h" />
|
||||||
|
<ClInclude Include="..\CFile.h" />
|
||||||
|
<ClInclude Include="..\CFlagManager.h" />
|
||||||
|
<ClInclude Include="..\CForward.h" />
|
||||||
|
<ClInclude Include="..\CLang.h" />
|
||||||
|
<ClInclude Include="..\CList.h" />
|
||||||
|
<ClInclude Include="..\CLogEvent.h" />
|
||||||
|
<ClInclude Include="..\CMenu.h" />
|
||||||
|
<ClInclude Include="..\CMisc.h" />
|
||||||
|
<ClInclude Include="..\CModule.h" />
|
||||||
|
<ClInclude Include="..\CPlugin.h" />
|
||||||
|
<ClInclude Include="..\CQueue.h" />
|
||||||
|
<ClInclude Include="..\CString.h" />
|
||||||
|
<ClInclude Include="..\CTask.h" />
|
||||||
|
<ClInclude Include="..\CVault.h" />
|
||||||
|
<ClInclude Include="..\CVector.h" />
|
||||||
|
<ClInclude Include="..\datastructs.h" />
|
||||||
|
<ClInclude Include="..\debugger.h" />
|
||||||
|
<ClInclude Include="..\fakemeta.h" />
|
||||||
|
<ClInclude Include="..\format.h" />
|
||||||
|
<ClInclude Include="..\libraries.h" />
|
||||||
|
<ClInclude Include="..\md5.h" />
|
||||||
|
<ClInclude Include="..\messages.h" />
|
||||||
|
<ClInclude Include="..\modules.h" />
|
||||||
|
<ClInclude Include="..\natives.h" />
|
||||||
|
<ClInclude Include="..\newmenus.h" />
|
||||||
|
<ClInclude Include="..\nongpl_matches.h" />
|
||||||
|
<ClInclude Include="..\optimizer.h" />
|
||||||
|
<ClInclude Include="..\resource.h" />
|
||||||
|
<ClInclude Include="..\sh_list.h" />
|
||||||
|
<ClInclude Include="..\sh_stack.h" />
|
||||||
|
<ClInclude Include="..\sh_tinyhash.h" />
|
||||||
|
<ClInclude Include="..\svn_version.h" />
|
||||||
|
<ClInclude Include="..\trie_natives.h" />
|
||||||
|
<ClInclude Include="..\zlib\zconf.h" />
|
||||||
|
<ClInclude Include="..\zlib\zlib.h" />
|
||||||
|
<ClInclude Include="..\sdk\amxxmodule.h" />
|
||||||
|
<ClInclude Include="..\sdk\moduleconfig.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\version.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\amxdefn.asm" />
|
||||||
|
<None Include="..\amxexecn.asm" />
|
||||||
|
<None Include="..\amxjitsn.asm" />
|
||||||
|
<None Include="..\helpers-x86.asm" />
|
||||||
|
<None Include="..\natives-amd64.asm" />
|
||||||
|
<None Include="..\natives-x86.asm" />
|
||||||
|
<None Include="..\..\plugins\include\amxconst.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmisc.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmodx.inc" />
|
||||||
|
<None Include="..\..\plugins\include\core.inc" />
|
||||||
|
<None Include="..\..\plugins\include\file.inc" />
|
||||||
|
<None Include="..\..\plugins\include\float.inc" />
|
||||||
|
<None Include="..\..\plugins\include\lang.inc" />
|
||||||
|
<None Include="..\..\plugins\include\message_const.inc" />
|
||||||
|
<None Include="..\..\plugins\include\message_stocks.inc" />
|
||||||
|
<None Include="..\..\plugins\include\messages.inc" />
|
||||||
|
<None Include="..\..\plugins\include\sorting.inc" />
|
||||||
|
<None Include="..\..\plugins\include\string.inc" />
|
||||||
|
<None Include="..\..\plugins\include\svn_version.inc" />
|
||||||
|
<None Include="..\..\plugins\include\time.inc" />
|
||||||
|
<None Include="..\..\plugins\include\vault.inc" />
|
||||||
|
<None Include="..\..\plugins\include\vector.inc" />
|
||||||
|
<None Include="..\..\plugins\include\xs.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\amxmod.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\maths.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\mysql.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\translator.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\Vexd_Utilities.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\VexdUM.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_const.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_stock.inc" />
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\xtrafun.inc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Object Include="..\Jit\helpers-x86.obj" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
426
amxmodx/msvc10/amxmodx_mm.vcxproj.filters
Normal file
426
amxmodx/msvc10/amxmodx_mm.vcxproj.filters
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{0d31fe96-c452-4d62-8c7c-0f0f8d69efa8}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{6e1c49c6-6432-4873-bb9a-9d30996955b2}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{721333c3-98b9-4888-a3ec-637a2bd46091}</UniqueIdentifier>
|
||||||
|
<Extensions>rc</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Assembly">
|
||||||
|
<UniqueIdentifier>{e347f4b5-ec94-43d6-b45b-85ab3f146a45}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Assembly\Builds">
|
||||||
|
<UniqueIdentifier>{1cec296a-ddcc-44da-97c4-2a4d0f4d6fc7}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="SDK">
|
||||||
|
<UniqueIdentifier>{bbfaec3e-7d17-45ea-8b84-093fa5714022}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Pawn Includes">
|
||||||
|
<UniqueIdentifier>{4022451d-eb5f-4f14-b8d8-2ce23fec6e59}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Pawn Includes\AMX Mod Compat">
|
||||||
|
<UniqueIdentifier>{d4419052-0ddd-415e-bb16-4393b99751be}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\amx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\amxcore.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\amxdbg.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\amxmod_compat.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\amxmodx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\amxtime.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\amxxfile.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\amxxlog.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\binlog.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CCmd.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CEvent.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CFile.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CFlagManager.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CForward.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CLang.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CLogEvent.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CMenu.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CMisc.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CModule.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CPlugin.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CTask.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CVault.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\debugger.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\emsg.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\fakemeta.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\file.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\float.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\format.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\libraries.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\md5.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\messages.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\meta_api.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\modules.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\natives.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\newmenus.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\nongpl_matches.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\optimizer.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\power.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\sorting.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\srvcmd.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\string.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\strptime.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\trie_natives.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\util.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\vault.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\vector.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\datastructs.cpp">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\sdk\amxxmodule.cpp">
|
||||||
|
<Filter>SDK</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\amx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\amxdbg.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\amxmod_compat.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\amxmodx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\amxxfile.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\amxxlog.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\binlog.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CCmd.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CEvent.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CFile.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CFlagManager.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CForward.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CLang.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CList.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CLogEvent.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CMenu.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CMisc.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CModule.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CPlugin.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CQueue.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CString.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CTask.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CVault.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\CVector.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\datastructs.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\debugger.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\fakemeta.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\format.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\libraries.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\md5.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\messages.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\modules.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\natives.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\newmenus.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\nongpl_matches.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\optimizer.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\resource.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\sh_list.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\sh_stack.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\sh_tinyhash.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\svn_version.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\trie_natives.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\zlib\zconf.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\zlib\zlib.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\sdk\amxxmodule.h">
|
||||||
|
<Filter>SDK</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\sdk\moduleconfig.h">
|
||||||
|
<Filter>SDK</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\version.rc">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\amxdefn.asm">
|
||||||
|
<Filter>Assembly</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\amxexecn.asm">
|
||||||
|
<Filter>Assembly</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\amxjitsn.asm">
|
||||||
|
<Filter>Assembly</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\helpers-x86.asm">
|
||||||
|
<Filter>Assembly</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\natives-amd64.asm">
|
||||||
|
<Filter>Assembly</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\natives-x86.asm">
|
||||||
|
<Filter>Assembly</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxconst.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmisc.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmodx.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\core.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\file.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\float.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\lang.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\message_const.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\message_stocks.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\messages.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\sorting.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\string.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\svn_version.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\time.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\vault.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\vector.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\xs.inc">
|
||||||
|
<Filter>Pawn Includes</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\amxmod.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\maths.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\mysql.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\translator.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\Vexd_Utilities.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\VexdUM.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_const.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_stock.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\plugins\include\amxmod_compat\xtrafun.inc">
|
||||||
|
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Object Include="..\Jit\helpers-x86.obj">
|
||||||
|
<Filter>Assembly\Builds</Filter>
|
||||||
|
</Object>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -1,926 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
|
||||||
<VisualStudioProject
|
|
||||||
ProjectType="Visual C++"
|
|
||||||
Version="8.00"
|
|
||||||
Name="amxmodx_mm"
|
|
||||||
ProjectGUID="{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
|
||||||
RootNamespace="amxmodx"
|
|
||||||
>
|
|
||||||
<Platforms>
|
|
||||||
<Platform
|
|
||||||
Name="Win32"
|
|
||||||
/>
|
|
||||||
</Platforms>
|
|
||||||
<ToolFiles>
|
|
||||||
</ToolFiles>
|
|
||||||
<Configurations>
|
|
||||||
<Configuration
|
|
||||||
Name="JITDebug|Win32"
|
|
||||||
OutputDirectory="JITDebug"
|
|
||||||
IntermediateDirectory="JITDebug"
|
|
||||||
ConfigurationType="2"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
MkTypLibCompatible="true"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\debug/amxmodx.tlb"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;_CRT_SECURE_NO_DEPRECATE"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
StructMemberAlignment="3"
|
|
||||||
TreatWChar_tAsBuiltInType="true"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitdebug/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitdebug/"
|
|
||||||
ObjectFile=".\jitdebug/"
|
|
||||||
ProgramDataBaseFileName=".\jitdebug/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
CompileAs="0"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitdebug/amxmodx_mm.dll"
|
|
||||||
Version="0.1"
|
|
||||||
LinkIncremental="2"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile=".\jitdebug/amxx_mm.pdb"
|
|
||||||
ImportLibrary=".\jitdebug/amxmodx_mm.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
OutputDirectory="JITRelease"
|
|
||||||
IntermediateDirectory="JITRelease"
|
|
||||||
ConfigurationType="2"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
MkTypLibCompatible="true"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\release/amxmodx.tlb"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
EnableIntrinsicFunctions="true"
|
|
||||||
FavorSizeOrSpeed="1"
|
|
||||||
OmitFramePointers="true"
|
|
||||||
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;_CRT_SECURE_NO_DEPRECATE"
|
|
||||||
IgnoreStandardIncludePath="false"
|
|
||||||
StringPooling="true"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
TreatWChar_tAsBuiltInType="true"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitrelease/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitrelease/"
|
|
||||||
ObjectFile=".\jitrelease/"
|
|
||||||
ProgramDataBaseFileName=".\jitrelease/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
CompileAs="0"
|
|
||||||
ShowIncludes="false"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitrelease/amxmodx_mm.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile=".\jitrelease/amxmodx_mm.pdb"
|
|
||||||
GenerateMapFile="true"
|
|
||||||
ImportLibrary=".\jitrelease/amxmodx_mm.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="JITDebugBinLog|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
MkTypLibCompatible="true"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\debug/amxmodx.tlb"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
StructMemberAlignment="3"
|
|
||||||
TreatWChar_tAsBuiltInType="true"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitdebugbinlog/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitdebugbinlog/"
|
|
||||||
ObjectFile=".\jitdebugbinlog/"
|
|
||||||
ProgramDataBaseFileName=".\jitdebugbinlog/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
CompileAs="0"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitdebugbinlog/amxmodx_bl_mm.dll"
|
|
||||||
Version="0.1"
|
|
||||||
LinkIncremental="2"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile=".\jitdebugbinlog/amxmodx_bl_mm.pdb"
|
|
||||||
ImportLibrary=".\jitdebugbinlog/amxmodx_bl_mm.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="JITReleaseBinLog|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
MkTypLibCompatible="true"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName=".\release/amxmodx.tlb"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
EnableIntrinsicFunctions="true"
|
|
||||||
FavorSizeOrSpeed="1"
|
|
||||||
OmitFramePointers="true"
|
|
||||||
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE"
|
|
||||||
IgnoreStandardIncludePath="false"
|
|
||||||
StringPooling="true"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
TreatWChar_tAsBuiltInType="true"
|
|
||||||
RuntimeTypeInfo="false"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderThrough="amxmodx.h"
|
|
||||||
PrecompiledHeaderFile=".\jitreleasebinlog/amxmodx.pch"
|
|
||||||
AssemblerListingLocation=".\jitreleasebinlog/"
|
|
||||||
ObjectFile=".\jitreleasebinlog/"
|
|
||||||
ProgramDataBaseFileName=".\jitreleasebinlog/"
|
|
||||||
WarningLevel="3"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
CompileAs="0"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
Culture="1033"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
|
||||||
OutputFile="jitreleasebinlog/amxmodx_bl_mm.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
SuppressStartupBanner="true"
|
|
||||||
AdditionalLibraryDirectories="..\extra\lib_win32"
|
|
||||||
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
|
||||||
ModuleDefinitionFile=""
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
ProgramDatabaseFile=".\jitreleasebinlog/amxmodx_bl_mm.pdb"
|
|
||||||
GenerateMapFile="true"
|
|
||||||
ImportLibrary=".\jitreleasebinlog/amxmodx_bl_mm.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
|
||||||
<References>
|
|
||||||
</References>
|
|
||||||
<Files>
|
|
||||||
<Filter
|
|
||||||
Name="Source Files"
|
|
||||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amx.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxcore.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxdbg.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmod_compat.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmodx.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxtime.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxfile.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxlog.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\binlog.cpp"
|
|
||||||
>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITDebug|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CCmd.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CEvent.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CFile.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CForward.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLang.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLogEvent.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMenu.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMisc.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CModule.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CPlugin.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CTask.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CVault.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\debugger.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\emsg.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\fakemeta.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\file.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\float.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\format.cpp"
|
|
||||||
>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="4"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITReleaseBinLog|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="4"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\libraries.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\md5.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\messages.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\meta_api.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\modules.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\newmenus.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\optimizer.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\power.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sorting.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\srvcmd.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\string.cpp"
|
|
||||||
>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="2"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITReleaseBinLog|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AssemblerOutput="2"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\strptime.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\util.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\vault.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\vector.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Header Files"
|
|
||||||
Filter="h;hpp;hxx;hm;inl"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amx.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxdbg.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmod_compat.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxmodx.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxfile.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxxlog.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\binlog.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CCmd.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CEvent.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CFile.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CForward.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLang.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CList.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CLogEvent.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMenu.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CMisc.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CModule.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CPlugin.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CQueue.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CString.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CTask.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CVault.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\CVector.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\debugger.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\fakemeta.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\format.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\libraries.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\md5.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\menus.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\messages.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\modules.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\newmenus.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\optimizer.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\resource.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sh_list.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sh_stack.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sh_tinyhash.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\zlib\zconf.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\zlib\zlib.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Resource Files"
|
|
||||||
Filter="rc"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\version.rc"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Assembly"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxdefn.asm"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxexecn.asm"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\amxjitsn.asm"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\helpers-x86.asm"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives-amd64.asm"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\natives-x86.asm"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<Filter
|
|
||||||
Name="Builds"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\Jit\helpers-x86.obj"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="SDK"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sdk\amxxmodule.cpp"
|
|
||||||
>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITDebug|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITRelease|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITDebugBinLog|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="JITReleaseBinLog|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sdk\amxxmodule.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\sdk\moduleconfig.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
</Files>
|
|
||||||
<Globals>
|
|
||||||
</Globals>
|
|
||||||
</VisualStudioProject>
|
|
@ -35,8 +35,11 @@
|
|||||||
#include "libraries.h"
|
#include "libraries.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
|
#if defined(__linux__)
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include "sclinux.h"
|
#include "sclinux.h"
|
||||||
@ -46,12 +49,16 @@
|
|||||||
//With the exception for param_convert, which was written by
|
//With the exception for param_convert, which was written by
|
||||||
// Julien "dJeyL" Laurent
|
// Julien "dJeyL" Laurent
|
||||||
|
|
||||||
CStack<int> g_ErrorStk;
|
|
||||||
CVector<regnative *> g_RegNatives;
|
CVector<regnative *> g_RegNatives;
|
||||||
CStack<regnative *> g_NativeStack;
|
|
||||||
static char g_errorStr[512] = {0};
|
static char g_errorStr[512] = {0};
|
||||||
bool g_Initialized = false;
|
bool g_Initialized = false;
|
||||||
|
|
||||||
|
/* Stack stuff */
|
||||||
|
regnative *g_pCurNative = NULL;
|
||||||
|
AMX *g_pCaller = NULL;
|
||||||
|
cell g_Params[CALLFUNC_MAXPARAMS];
|
||||||
|
int g_CurError = AMX_ERR_NONE;
|
||||||
|
|
||||||
int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (idx < 0 || idx >= (int)g_RegNatives.size())
|
if (idx < 0 || idx >= (int)g_RegNatives.size())
|
||||||
@ -79,37 +86,55 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pNative->caller)
|
/* Save old values on ZE STACK */
|
||||||
|
AMX *pSaveCaller = g_pCaller;
|
||||||
|
cell saveParams[CALLFUNC_MAXPARAMS];
|
||||||
|
regnative *pSaveNative = g_pCurNative;
|
||||||
|
int saveError = g_CurError;
|
||||||
|
|
||||||
|
if (pSaveNative)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Bug caught! Please contact the AMX Mod X Dev Team.");
|
for (ucell i = 0; i <= g_Params[0] / sizeof(cell); i++)
|
||||||
return 0;
|
{
|
||||||
|
saveParams[i] = g_Params[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//parameter stack
|
/* Save current info */
|
||||||
//NOTE: it is possible that recursive register native calling
|
g_CurError = AMX_ERR_NONE;
|
||||||
// could potentially be somehow damaged here.
|
g_pCaller = amx;
|
||||||
//so, a :TODO: - make the stack unique, rather than a known ptr
|
g_pCurNative = pNative;
|
||||||
pNative->caller = amx;
|
|
||||||
|
|
||||||
int err = 0;
|
int err = 0;
|
||||||
cell ret = 0;
|
cell ret = 0;
|
||||||
g_ErrorStk.push(0);
|
|
||||||
g_NativeStack.push(pNative);
|
|
||||||
if (pNative->style == 0)
|
if (pNative->style == 0)
|
||||||
{
|
{
|
||||||
amx_Push(pNative->amx, numParams);
|
amx_Push(pNative->amx, numParams);
|
||||||
amx_Push(pNative->amx, pPlugin->getId());
|
amx_Push(pNative->amx, pPlugin->getId());
|
||||||
for (int i=numParams; i>=0; i--)
|
for (int i=numParams; i>=0; i--)
|
||||||
pNative->params[i] = params[i];
|
{
|
||||||
|
g_Params[i] = params[i];
|
||||||
|
}
|
||||||
} else if (pNative->style == 1) {
|
} else if (pNative->style == 1) {
|
||||||
//use dJeyL's system .. very clever!
|
/**
|
||||||
|
* use dJeyL's system .. very clever!
|
||||||
|
* NOTE: clever, but doesn't work at all since the JIT does bounds checking
|
||||||
|
* this should REALLY be deprecated
|
||||||
|
*/
|
||||||
for (int i=numParams; i>=1; i--)
|
for (int i=numParams; i>=1; i--)
|
||||||
|
{
|
||||||
amx_Push(pNative->amx, params[i]);
|
amx_Push(pNative->amx, params[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Debugger *pDebugger = (Debugger *)pNative->amx->userdata[UD_DEBUGGER];
|
Debugger *pDebugger = (Debugger *)pNative->amx->userdata[UD_DEBUGGER];
|
||||||
if (pDebugger)
|
if (pDebugger)
|
||||||
|
{
|
||||||
pDebugger->BeginExec();
|
pDebugger->BeginExec();
|
||||||
|
}
|
||||||
|
|
||||||
err=amx_Exec(pNative->amx, &ret, pNative->func);
|
err=amx_Exec(pNative->amx, &ret, pNative->func);
|
||||||
|
|
||||||
if (err != AMX_ERR_NONE)
|
if (err != AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
if (pDebugger && pDebugger->ErrorExists())
|
if (pDebugger && pDebugger->ErrorExists())
|
||||||
@ -122,15 +147,26 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
|||||||
pNative->amx->error = AMX_ERR_NONE;
|
pNative->amx->error = AMX_ERR_NONE;
|
||||||
//furthermore, log an error in the parent plugin.
|
//furthermore, log an error in the parent plugin.
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Unhandled dynamic native error");
|
LogError(amx, AMX_ERR_NATIVE, "Unhandled dynamic native error");
|
||||||
} else if (g_ErrorStk.front()) {
|
} else if (g_CurError != AMX_ERR_NONE) {
|
||||||
LogError(amx, g_ErrorStk.front(), g_errorStr);
|
LogError(amx, g_CurError, g_errorStr);
|
||||||
}
|
}
|
||||||
if (pDebugger)
|
|
||||||
pDebugger->EndExec();
|
|
||||||
g_NativeStack.pop();
|
|
||||||
g_ErrorStk.pop();
|
|
||||||
|
|
||||||
pNative->caller = NULL;
|
if (pDebugger)
|
||||||
|
{
|
||||||
|
pDebugger->EndExec();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Restore everything */
|
||||||
|
g_pCurNative = pSaveNative;
|
||||||
|
g_CurError = saveError;
|
||||||
|
g_pCaller = pSaveCaller;
|
||||||
|
if (pSaveNative)
|
||||||
|
{
|
||||||
|
for (ucell i = 0; i <= saveParams[0] / sizeof(cell); i++)
|
||||||
|
{
|
||||||
|
g_Params[i] = saveParams[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -138,7 +174,9 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
|||||||
AMX_NATIVE_INFO *BuildNativeTable()
|
AMX_NATIVE_INFO *BuildNativeTable()
|
||||||
{
|
{
|
||||||
if (g_RegNatives.size() < 1)
|
if (g_RegNatives.size() < 1)
|
||||||
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO *pNatives = new AMX_NATIVE_INFO[g_RegNatives.size() + 1];
|
AMX_NATIVE_INFO *pNatives = new AMX_NATIVE_INFO[g_RegNatives.size() + 1];
|
||||||
|
|
||||||
@ -164,8 +202,7 @@ static cell AMX_NATIVE_CALL log_error(AMX *amx, cell *params)
|
|||||||
char *err = format_amxstring(amx, params, 2, len);
|
char *err = format_amxstring(amx, params, 2, len);
|
||||||
|
|
||||||
_snprintf(g_errorStr, sizeof(g_errorStr), "%s", err);
|
_snprintf(g_errorStr, sizeof(g_errorStr), "%s", err);
|
||||||
g_ErrorStk.pop();
|
g_CurError = params[1];
|
||||||
g_ErrorStk.push(params[1]);
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -173,13 +210,12 @@ static cell AMX_NATIVE_CALL log_error(AMX *amx, cell *params)
|
|||||||
//get_string(param, dest[], len)
|
//get_string(param, dest[], len)
|
||||||
static cell AMX_NATIVE_CALL get_string(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_string(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
@ -187,20 +223,19 @@ static cell AMX_NATIVE_CALL get_string(AMX *amx, cell *params)
|
|||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
char *str = get_amxstring(pNative->caller, pNative->params[p], 0, len);
|
char *str = get_amxstring(g_pCaller, g_Params[p], 0, len);
|
||||||
return set_amxstring(amx, params[2], str, params[3]);
|
return set_amxstring(amx, params[2], str, params[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//set_string(param, source[], maxlen)
|
//set_string(param, source[], maxlen)
|
||||||
static cell AMX_NATIVE_CALL set_string(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_string(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
@ -210,46 +245,44 @@ static cell AMX_NATIVE_CALL set_string(AMX *amx, cell *params)
|
|||||||
int len;
|
int len;
|
||||||
char *str = get_amxstring(amx, params[2], 0, len);
|
char *str = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
return set_amxstring(pNative->caller, pNative->params[p], str, params[3]);
|
return set_amxstring(g_pCaller, g_Params[p], str, params[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//get a byvalue parameter
|
//get a byvalue parameter
|
||||||
//get_param(num)
|
//get_param(num)
|
||||||
static cell AMX_NATIVE_CALL get_param(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_param(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
return pNative->params[p];
|
return g_Params[p];
|
||||||
}
|
}
|
||||||
|
|
||||||
//get_param_byref(num)
|
//get_param_byref(num)
|
||||||
static cell AMX_NATIVE_CALL get_param_byref(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_param_byref(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *addr = get_amxaddr(pNative->caller, pNative->params[p]);
|
cell *addr = get_amxaddr(g_pCaller, g_Params[p]);
|
||||||
|
|
||||||
return addr[0];
|
return addr[0];
|
||||||
}
|
}
|
||||||
@ -257,20 +290,19 @@ static cell AMX_NATIVE_CALL get_param_byref(AMX *amx, cell *params)
|
|||||||
//set_param_byref(num, val)
|
//set_param_byref(num, val)
|
||||||
static cell AMX_NATIVE_CALL set_param_byref(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_param_byref(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *addr = get_amxaddr(pNative->caller, pNative->params[p]);
|
cell *addr = get_amxaddr(g_pCaller, g_Params[p]);
|
||||||
|
|
||||||
addr[0] = params[2];
|
addr[0] = params[2];
|
||||||
|
|
||||||
@ -280,20 +312,19 @@ static cell AMX_NATIVE_CALL set_param_byref(AMX *amx, cell *params)
|
|||||||
//get_array(param, dest[], size)
|
//get_array(param, dest[], size)
|
||||||
static cell AMX_NATIVE_CALL get_array(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_array(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *source = get_amxaddr(pNative->caller, pNative->params[p]);
|
cell *source = get_amxaddr(g_pCaller, g_Params[p]);
|
||||||
cell *dest = get_amxaddr(amx, params[2]);
|
cell *dest = get_amxaddr(amx, params[2]);
|
||||||
|
|
||||||
int size = params[3];
|
int size = params[3];
|
||||||
@ -306,20 +337,19 @@ static cell AMX_NATIVE_CALL get_array(AMX *amx, cell *params)
|
|||||||
//set_array(param, source[], size)
|
//set_array(param, source[], size)
|
||||||
static cell AMX_NATIVE_CALL set_array(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_array(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *dest = get_amxaddr(pNative->caller, pNative->params[p]);
|
cell *dest = get_amxaddr(g_pCaller, g_Params[p]);
|
||||||
cell *source = get_amxaddr(amx, params[2]);
|
cell *source = get_amxaddr(amx, params[2]);
|
||||||
|
|
||||||
int size = params[3];
|
int size = params[3];
|
||||||
@ -331,15 +361,13 @@ static cell AMX_NATIVE_CALL set_array(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style)
|
||||||
|
|
||||||
if (pNative->style)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
@ -348,10 +376,7 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
int vargPos = static_cast<int>(params[4]);
|
int vargPos = static_cast<int>(params[4]);
|
||||||
int fargPos = static_cast<int>(params[3]);
|
int fargPos = static_cast<int>(params[3]);
|
||||||
|
|
||||||
/** get the parent parameter array */
|
cell max = g_Params[0] / sizeof(cell);
|
||||||
cell *local_params = pNative->params;
|
|
||||||
|
|
||||||
cell max = local_params[0] / sizeof(cell);
|
|
||||||
if (vargPos > (int)max + 1)
|
if (vargPos > (int)max + 1)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid vararg parameter passed: %d", vargPos);
|
LogError(amx, AMX_ERR_NATIVE, "Invalid vararg parameter passed: %d", vargPos);
|
||||||
@ -374,7 +399,7 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
fmt = get_amxaddr(amx, params[5]);
|
fmt = get_amxaddr(amx, params[5]);
|
||||||
} else {
|
} else {
|
||||||
fmt = get_amxaddr(pNative->caller, pNative->params[fargPos]);
|
fmt = get_amxaddr(g_pCaller, g_Params[fargPos]);
|
||||||
}
|
}
|
||||||
cell *realdest = get_amxaddr(amx, params[1]);
|
cell *realdest = get_amxaddr(amx, params[1]);
|
||||||
size_t maxlen = static_cast<size_t>(params[2]);
|
size_t maxlen = static_cast<size_t>(params[2]);
|
||||||
@ -385,7 +410,7 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
dest = cpbuf;
|
dest = cpbuf;
|
||||||
|
|
||||||
/* perform format */
|
/* perform format */
|
||||||
size_t total = atcprintf(dest, maxlen, fmt, pNative->caller, local_params, &vargPos);
|
size_t total = atcprintf(dest, maxlen, fmt, g_pCaller, g_Params, &vargPos);
|
||||||
|
|
||||||
/* copy back */
|
/* copy back */
|
||||||
memcpy(realdest, dest, (total+1) * sizeof(cell));
|
memcpy(realdest, dest, (total+1) * sizeof(cell));
|
||||||
@ -399,20 +424,19 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
//I've no idea how he thought of this, but it's great. No idea how well it works.
|
//I've no idea how he thought of this, but it's great. No idea how well it works.
|
||||||
static cell AMX_NATIVE_CALL param_convert(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL param_convert(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_NativeStack.size())
|
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
regnative *pNative = g_NativeStack.front();
|
if (g_pCurNative->style != 1)
|
||||||
if (pNative->style != 1)
|
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
cell p = params[1];
|
cell p = params[1];
|
||||||
|
|
||||||
AMX *caller = pNative->caller;
|
AMX *caller = g_pCaller;
|
||||||
|
|
||||||
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
||||||
unsigned char *realdata = caller->base+(int)((AMX_HEADER *)caller->base)->dat;
|
unsigned char *realdata = caller->base+(int)((AMX_HEADER *)caller->base)->dat;
|
||||||
@ -454,17 +478,20 @@ static cell AMX_NATIVE_CALL register_native(AMX *amx, cell *params)
|
|||||||
regnative *pNative = new regnative;
|
regnative *pNative = new regnative;
|
||||||
pNative->amx = amx;
|
pNative->amx = amx;
|
||||||
pNative->func = idx;
|
pNative->func = idx;
|
||||||
pNative->caller = NULL;
|
|
||||||
|
|
||||||
//we'll apply a safety buffer too
|
//we'll apply a safety buffer too
|
||||||
//make our function
|
//make our function
|
||||||
int size = amxx_DynaCodesize();
|
int size = amxx_DynaCodesize();
|
||||||
#ifndef __linux__
|
#if defined(_WIN32)
|
||||||
DWORD temp;
|
DWORD temp;
|
||||||
pNative->pfn = new char[size + 10];
|
pNative->pfn = new char[size + 10];
|
||||||
VirtualProtect(pNative->pfn, size+10, PAGE_EXECUTE_READWRITE, &temp);
|
VirtualProtect(pNative->pfn, size+10, PAGE_EXECUTE_READWRITE, &temp);
|
||||||
#else
|
#elif defined(__GNUC__)
|
||||||
|
# if defined(__APPLE__)
|
||||||
|
pNative->pfn = (char *)valloc(size+10);
|
||||||
|
# else
|
||||||
pNative->pfn = (char *)memalign(sysconf(_SC_PAGESIZE), size+10);
|
pNative->pfn = (char *)memalign(sysconf(_SC_PAGESIZE), size+10);
|
||||||
|
# endif
|
||||||
mprotect((void *)pNative->pfn, size+10, PROT_READ|PROT_WRITE|PROT_EXEC);
|
mprotect((void *)pNative->pfn, size+10, PROT_READ|PROT_WRITE|PROT_EXEC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -50,9 +50,7 @@ struct regnative
|
|||||||
String name;
|
String name;
|
||||||
char *pfn;
|
char *pfn;
|
||||||
int func;
|
int func;
|
||||||
AMX *caller;
|
|
||||||
int style;
|
int style;
|
||||||
cell params[CALLFUNC_MAXPARAMS];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" void amxx_DynaInit(void *ptr);
|
extern "C" void amxx_DynaInit(void *ptr);
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
#include "CMenu.h"
|
||||||
#include "newmenus.h"
|
#include "newmenus.h"
|
||||||
|
|
||||||
CVector<Menu *> g_NewMenus;
|
CVector<Menu *> g_NewMenus;
|
||||||
@ -37,11 +38,15 @@ CStack<int> g_MenuFreeStack;
|
|||||||
void ClearMenus()
|
void ClearMenus()
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < g_NewMenus.size(); i++)
|
for (size_t i = 0; i < g_NewMenus.size(); i++)
|
||||||
|
{
|
||||||
delete g_NewMenus[i];
|
delete g_NewMenus[i];
|
||||||
|
}
|
||||||
|
|
||||||
g_NewMenus.clear();
|
g_NewMenus.clear();
|
||||||
while (!g_MenuFreeStack.empty())
|
while (!g_MenuFreeStack.empty())
|
||||||
|
{
|
||||||
g_MenuFreeStack.pop();
|
g_MenuFreeStack.pop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void validate_menu_text(char *str)
|
void validate_menu_text(char *str)
|
||||||
@ -56,7 +61,7 @@ void validate_menu_text(char *str)
|
|||||||
str++;
|
str++;
|
||||||
char c = tolower(*str);
|
char c = tolower(*str);
|
||||||
if (c == 'r' || c == 'w'
|
if (c == 'r' || c == 'w'
|
||||||
|| c== 'w' || c == 'd')
|
|| c== 'y' || c == 'd')
|
||||||
{
|
{
|
||||||
str++;
|
str++;
|
||||||
offs += 2;
|
offs += 2;
|
||||||
@ -64,42 +69,51 @@ void validate_menu_text(char *str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (offs)
|
if (offs)
|
||||||
|
{
|
||||||
*(str-offs) = *str;
|
*(str-offs) = *str;
|
||||||
|
}
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
if (offs)
|
if (offs)
|
||||||
|
{
|
||||||
*(str-offs) = '\0';
|
*(str-offs) = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu::Menu(const char *title, int mid, int tid)
|
Menu::Menu(const char *title, AMX *amx, int fid) : m_Title(title), m_ItemColor("\\r"),
|
||||||
|
m_NeverExit(false), m_AutoColors(g_coloredmenus), thisId(0), func(fid),
|
||||||
|
isDestroying(false), items_per_page(7)
|
||||||
{
|
{
|
||||||
m_Title.assign(title);
|
CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(amx);
|
||||||
menuId = mid;
|
menuId = g_menucmds.registerMenuId(title, amx);
|
||||||
thisId = tid;
|
|
||||||
|
if (strcmp(pPlugin->getName(), "war3ft.amxx") == 0)
|
||||||
|
{
|
||||||
|
const char *version = pPlugin->getVersion();
|
||||||
|
if (strncmp(pPlugin->getVersion(), "3.0 RC", 6) == 0
|
||||||
|
&& atoi(&version[6]) <= 8)
|
||||||
|
{
|
||||||
|
g_menucmds.registerMenuCmd(
|
||||||
|
g_plugins.findPluginFast(amx),
|
||||||
|
menuId,
|
||||||
|
-1,
|
||||||
|
g_forwards.duplicateSPForward(fid),
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_OptNames[abs(MENU_BACK)].assign("Back");
|
m_OptNames[abs(MENU_BACK)].assign("Back");
|
||||||
m_OptNames[abs(MENU_MORE)].assign("More");
|
m_OptNames[abs(MENU_MORE)].assign("More");
|
||||||
m_OptNames[abs(MENU_EXIT)].assign("Exit");
|
m_OptNames[abs(MENU_EXIT)].assign("Exit");
|
||||||
|
|
||||||
m_OptOrders[0] = MENU_BACK;
|
|
||||||
m_OptOrders[1] = MENU_MORE;
|
|
||||||
m_OptOrders[2] = MENU_EXIT;
|
|
||||||
|
|
||||||
m_AlwaysExit = false;
|
|
||||||
m_NeverExit = false;
|
|
||||||
m_AutoColors = g_coloredmenus;
|
|
||||||
|
|
||||||
items_per_page = 7;
|
|
||||||
func = 0;
|
|
||||||
padding = 0;
|
|
||||||
isDestroying = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu::~Menu()
|
Menu::~Menu()
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < m_Items.size(); i++)
|
for (size_t i = 0; i < m_Items.size(); i++)
|
||||||
|
{
|
||||||
delete m_Items[i];
|
delete m_Items[i];
|
||||||
|
}
|
||||||
|
|
||||||
unregisterSPForward(this->func);
|
unregisterSPForward(this->func);
|
||||||
|
|
||||||
@ -139,7 +153,9 @@ size_t Menu::GetPageCount()
|
|||||||
{
|
{
|
||||||
size_t items = GetItemCount();
|
size_t items = GetItemCount();
|
||||||
if (items_per_page == 0)
|
if (items_per_page == 0)
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return ((items/items_per_page) + ((items % items_per_page) ? 1 : 0));
|
return ((items/items_per_page) + ((items % items_per_page) ? 1 : 0));
|
||||||
}
|
}
|
||||||
@ -152,34 +168,123 @@ int Menu::PagekeyToItem(page_t page, item_t key)
|
|||||||
if (num_pages == 1 || !items_per_page)
|
if (num_pages == 1 || !items_per_page)
|
||||||
{
|
{
|
||||||
if (key > m_Items.size())
|
if (key > m_Items.size())
|
||||||
|
{
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
else
|
} else {
|
||||||
return key-1;
|
return key-1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//first page
|
//first page
|
||||||
if (page == 0)
|
if (page == 0)
|
||||||
{
|
{
|
||||||
if (key == items_per_page + 1)
|
/* The algorithm for spaces here is same as a middle page. */
|
||||||
return MENU_MORE;
|
item_t new_key = key;
|
||||||
else if (key == items_per_page + 2)
|
for (size_t i=start; i<(start+key-1) && i<m_Items.size(); i++)
|
||||||
return MENU_EXIT;
|
|
||||||
else
|
|
||||||
return (start + key - 1);
|
|
||||||
} else if (page == num_pages - 1) {
|
|
||||||
//last page
|
|
||||||
size_t remaining = m_Items.size() - start;
|
|
||||||
if (key == remaining + 1)
|
|
||||||
{
|
{
|
||||||
return MENU_BACK;
|
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
||||||
} else if (key == remaining + 2) {
|
{
|
||||||
|
if (m_Items[i]->blanks[j].EatNumber())
|
||||||
|
{
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
new_key--;
|
||||||
|
}
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
key = new_key;
|
||||||
|
if (key == items_per_page + 2)
|
||||||
|
{
|
||||||
|
return MENU_MORE;
|
||||||
|
} else if (key == items_per_page + 3) {
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
} else {
|
} else {
|
||||||
return (start + key - 1);
|
return (start + key - 1);
|
||||||
}
|
}
|
||||||
|
} else if (page == num_pages - 1) {
|
||||||
|
//last page
|
||||||
|
item_t item_tracker = 0; // tracks how many valid items we have passed so far.
|
||||||
|
size_t remaining = m_Items.size() - start;
|
||||||
|
item_t new_key = key;
|
||||||
|
|
||||||
|
// For every item that takes up a slot (item or padded blank)
|
||||||
|
// we subtract one from new key.
|
||||||
|
// For every item (not blanks), we increase item_tracker.
|
||||||
|
// When new_key equals 0, item_tracker will then be set to
|
||||||
|
// whatever valid item was selected.
|
||||||
|
for (size_t i=m_Items.size() - remaining; i<m_Items.size(); i++)
|
||||||
|
{
|
||||||
|
item_tracker++;
|
||||||
|
|
||||||
|
if (new_key<=1) // If new_key is 0, or will be 0 after the next decrease
|
||||||
|
{
|
||||||
|
new_key=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_key--;
|
||||||
|
|
||||||
|
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
||||||
|
{
|
||||||
|
if (m_Items[i]->blanks[j].EatNumber())
|
||||||
|
{
|
||||||
|
new_key--;
|
||||||
|
}
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If new_key doesn't equal zero, then a back/exit button was pressed.
|
||||||
|
if (new_key!=0)
|
||||||
|
{
|
||||||
|
if (key == items_per_page + 1)
|
||||||
|
{
|
||||||
|
return MENU_BACK;
|
||||||
|
}
|
||||||
|
else if (key == items_per_page + 3)
|
||||||
|
{
|
||||||
|
return MENU_EXIT;
|
||||||
|
}
|
||||||
|
// MENU_MORE should never happen here.
|
||||||
|
}
|
||||||
|
// otherwise our item is now start + item_tracker - 1
|
||||||
|
return (start + item_tracker - 1);
|
||||||
} else {
|
} else {
|
||||||
|
/* The algorithm for spaces here is a bit harder. We have to subtract
|
||||||
|
* one from the key for each space we find along the way.
|
||||||
|
*/
|
||||||
|
item_t new_key = key;
|
||||||
|
for (size_t i=start; i<(start+items_per_page-1) && i<m_Items.size(); i++)
|
||||||
|
{
|
||||||
|
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
||||||
|
{
|
||||||
|
if (m_Items[i]->blanks[j].EatNumber())
|
||||||
|
{
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
new_key--;
|
||||||
|
}
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
key = new_key;
|
||||||
if (key > items_per_page && (key-items_per_page<=3))
|
if (key > items_per_page && (key-items_per_page<=3))
|
||||||
{
|
{
|
||||||
return m_OptOrders[key-items_per_page-1];
|
unsigned int num = key - items_per_page - 1;
|
||||||
|
static int map[] = {MENU_BACK, MENU_MORE, MENU_EXIT};
|
||||||
|
return map[num];
|
||||||
} else {
|
} else {
|
||||||
return (start + key - 1);
|
return (start + key - 1);
|
||||||
}
|
}
|
||||||
@ -240,10 +345,10 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
{
|
{
|
||||||
Display_Back = (1<<0),
|
Display_Back = (1<<0),
|
||||||
Display_Next = (1<<1),
|
Display_Next = (1<<1),
|
||||||
Display_Exit = (1<<2),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int flags = Display_Back|Display_Next;
|
int flags = Display_Back|Display_Next;
|
||||||
|
|
||||||
item_t start = page * items_per_page;
|
item_t start = page * items_per_page;
|
||||||
item_t end = 0;
|
item_t end = 0;
|
||||||
if (items_per_page)
|
if (items_per_page)
|
||||||
@ -255,17 +360,18 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
} else {
|
} else {
|
||||||
end = start + items_per_page - 1;
|
end = start + items_per_page - 1;
|
||||||
}
|
}
|
||||||
if (!m_NeverExit && (m_AlwaysExit || (page == 0 || page == pages-1)))
|
|
||||||
flags |= Display_Exit;
|
|
||||||
} else {
|
} else {
|
||||||
end = numItems - 1;
|
end = numItems - 1;
|
||||||
if (end > 10)
|
if (end > 10)
|
||||||
|
{
|
||||||
end = 10;
|
end = 10;
|
||||||
flags = 0;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page == 0)
|
if (page == 0)
|
||||||
|
{
|
||||||
flags &= ~Display_Back;
|
flags &= ~Display_Back;
|
||||||
|
}
|
||||||
|
|
||||||
menuitem *pItem = NULL;
|
menuitem *pItem = NULL;
|
||||||
|
|
||||||
@ -274,46 +380,66 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int slots = 0;
|
int slots = 0;
|
||||||
|
int option_display = 0;
|
||||||
|
|
||||||
for (item_t i = start; i <= end; i++)
|
for (item_t i = start; i <= end; i++)
|
||||||
{
|
{
|
||||||
|
// reset enabled
|
||||||
|
enabled = true;
|
||||||
pItem = m_Items[i];
|
pItem = m_Items[i];
|
||||||
|
|
||||||
if (pItem->access && !(pItem->access & g_players[player].flags[0]))
|
if (pItem->access && !(pItem->access & g_players[player].flags[0]))
|
||||||
|
{
|
||||||
enabled = false;
|
enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (pItem->handler != -1)
|
if (pItem->handler != -1)
|
||||||
{
|
{
|
||||||
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
|
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
|
||||||
if (ret == ITEM_ENABLED)
|
if (ret == ITEM_ENABLED)
|
||||||
|
{
|
||||||
enabled = true;
|
enabled = true;
|
||||||
else if (ret == ITEM_DISABLED)
|
} else if (ret == ITEM_DISABLED) {
|
||||||
enabled = false;
|
enabled = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pItem->pfn)
|
if (pItem->pfn)
|
||||||
{
|
{
|
||||||
ret = (pItem->pfn)(player, thisId, i);
|
ret = (pItem->pfn)(player, thisId, i);
|
||||||
if (ret == ITEM_ENABLED)
|
if (ret == ITEM_ENABLED)
|
||||||
|
{
|
||||||
enabled = true;
|
enabled = true;
|
||||||
else if (ret == ITEM_DISABLED)
|
} else if (ret == ITEM_DISABLED) {
|
||||||
enabled = false;
|
enabled = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
{
|
{
|
||||||
keys |= (1<<option);
|
keys |= (1<<option);
|
||||||
|
}
|
||||||
|
|
||||||
|
option_display = ++option;
|
||||||
|
if (option_display == 10)
|
||||||
|
{
|
||||||
|
option_display = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enabled)
|
||||||
|
{
|
||||||
if (m_AutoColors)
|
if (m_AutoColors)
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "\\r%d.\\w %s\n", ++option, pItem->name.c_str());
|
{
|
||||||
else
|
_snprintf(buffer, sizeof(buffer)-1, "%s%d.\\w %s\n", m_ItemColor.c_str(),option_display, pItem->name.c_str());
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", ++option, pItem->name.c_str());
|
} else {
|
||||||
|
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", option_display, pItem->name.c_str());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_AutoColors)
|
if (m_AutoColors)
|
||||||
{
|
{
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "\\d%d. %s\n\\w", ++option, pItem->name.c_str());
|
_snprintf(buffer, sizeof(buffer)-1, "\\d%d. %s\n\\w", option_display, pItem->name.c_str());
|
||||||
} else {
|
} else {
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", pItem->name.c_str());
|
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", pItem->name.c_str());
|
||||||
option++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
slots++;
|
slots++;
|
||||||
@ -325,79 +451,120 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
{
|
{
|
||||||
for (size_t j=0; j<pItem->blanks.size(); j++)
|
for (size_t j=0; j<pItem->blanks.size(); j++)
|
||||||
{
|
{
|
||||||
if (pItem->blanks[j] == 1)
|
if (pItem->blanks[j].EatNumber())
|
||||||
|
{
|
||||||
option++;
|
option++;
|
||||||
|
}
|
||||||
|
m_Text.append(pItem->blanks[j].GetDisplay());
|
||||||
m_Text.append("\n");
|
m_Text.append("\n");
|
||||||
slots++;
|
slots++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (padding == 1 && items_per_page)
|
if (items_per_page)
|
||||||
{
|
{
|
||||||
int pad = items_per_page;
|
/* Pad spaces until we reach the end of the max possible items */
|
||||||
if (flags & Display_Back)
|
for (unsigned int i=(unsigned)slots; i<items_per_page; i++)
|
||||||
pad--;
|
|
||||||
if (flags & Display_Next)
|
|
||||||
pad--;
|
|
||||||
if (flags & Display_Exit)
|
|
||||||
pad--;
|
|
||||||
for (int i=slots+1; i<=pad; i++)
|
|
||||||
{
|
{
|
||||||
m_Text.append("\n");
|
m_Text.append("\n");
|
||||||
option++;
|
option++;
|
||||||
}
|
}
|
||||||
}
|
/* Make sure there is at least one visual pad */
|
||||||
|
m_Text.append("\n");
|
||||||
|
|
||||||
for (int i=0; i<3; i++)
|
/* Don't bother if there is only one page */
|
||||||
{
|
if (pages > 1)
|
||||||
switch (m_OptOrders[i])
|
|
||||||
{
|
{
|
||||||
case MENU_BACK:
|
if (flags & Display_Back)
|
||||||
{
|
{
|
||||||
if (flags & Display_Back)
|
keys |= (1<<option++);
|
||||||
|
if (m_AutoColors)
|
||||||
{
|
{
|
||||||
keys |= (1<<option++);
|
|
||||||
_snprintf(buffer,
|
_snprintf(buffer,
|
||||||
sizeof(buffer)-1,
|
sizeof(buffer)-1,
|
||||||
m_AutoColors ? "\\r%d. \\w%s\n" : "%d. %s\n",
|
"%s%d. \\w%s\n",
|
||||||
option,
|
m_ItemColor.c_str(),
|
||||||
m_OptNames[abs(MENU_BACK)].c_str()
|
option == 10 ? 0 : option,
|
||||||
);
|
m_OptNames[abs(MENU_BACK)].c_str());
|
||||||
m_Text.append(buffer);
|
} else {
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MENU_MORE:
|
|
||||||
{
|
|
||||||
if (flags & Display_Next)
|
|
||||||
{
|
|
||||||
keys |= (1<<option++);
|
|
||||||
_snprintf(buffer,
|
_snprintf(buffer,
|
||||||
sizeof(buffer)-1,
|
sizeof(buffer)-1,
|
||||||
m_AutoColors ? "\\r%d. \\w%s\n" : "%d. %s\n",
|
"%d. %s\n",
|
||||||
option,
|
option == 10 ? 0 : option,
|
||||||
m_OptNames[abs(MENU_MORE)].c_str()
|
m_OptNames[abs(MENU_BACK)].c_str());
|
||||||
);
|
|
||||||
m_Text.append(buffer);
|
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
}
|
option++;
|
||||||
case MENU_EXIT:
|
if (m_AutoColors)
|
||||||
{
|
{
|
||||||
if (flags & Display_Exit)
|
_snprintf(buffer,
|
||||||
|
sizeof(buffer)-1,
|
||||||
|
"\\d%d. %s\n\\w",
|
||||||
|
option == 10 ? 0 : option,
|
||||||
|
m_OptNames[abs(MENU_BACK)].c_str());
|
||||||
|
} else {
|
||||||
|
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", m_OptNames[abs(MENU_BACK)].c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_Text.append(buffer);
|
||||||
|
|
||||||
|
if (flags & Display_Next)
|
||||||
|
{
|
||||||
|
keys |= (1<<option++);
|
||||||
|
if (m_AutoColors)
|
||||||
{
|
{
|
||||||
keys |= (1<<option++);
|
|
||||||
_snprintf(buffer,
|
_snprintf(buffer,
|
||||||
sizeof(buffer)-1,
|
sizeof(buffer)-1,
|
||||||
m_AutoColors ? "\\r%d. \\w%s\n" : "%d. %s\n",
|
"%s%d. \\w%s\n",
|
||||||
option,
|
m_ItemColor.c_str(),
|
||||||
m_OptNames[abs(MENU_EXIT)].c_str()
|
option == 10 ? 0 : option,
|
||||||
);
|
m_OptNames[abs(MENU_MORE)].c_str());
|
||||||
m_Text.append(buffer);
|
} else {
|
||||||
|
_snprintf(buffer,
|
||||||
|
sizeof(buffer)-1,
|
||||||
|
"%d. %s\n",
|
||||||
|
option == 10 ? 0 : option,
|
||||||
|
m_OptNames[abs(MENU_MORE)].c_str());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
option++;
|
||||||
|
if (m_AutoColors)
|
||||||
|
{
|
||||||
|
_snprintf(buffer,
|
||||||
|
sizeof(buffer)-1,
|
||||||
|
"\\d%d. %s\n\\w",
|
||||||
|
option == 10 ? 0 : option,
|
||||||
|
m_OptNames[abs(MENU_MORE)].c_str());
|
||||||
|
} else {
|
||||||
|
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", m_OptNames[abs(MENU_MORE)].c_str());
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
m_Text.append(buffer);
|
||||||
|
} else {
|
||||||
|
/* Keep padding */
|
||||||
|
option += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_NeverExit)
|
||||||
|
{
|
||||||
|
keys |= (1<<option++);
|
||||||
|
if (m_AutoColors)
|
||||||
|
{
|
||||||
|
_snprintf(buffer,
|
||||||
|
sizeof(buffer)-1,
|
||||||
|
"%s%d. \\w%s\n",
|
||||||
|
m_ItemColor.c_str(),
|
||||||
|
option == 10 ? 0 : option,
|
||||||
|
m_OptNames[abs(MENU_EXIT)].c_str());
|
||||||
|
} else {
|
||||||
|
_snprintf(buffer,
|
||||||
|
sizeof(buffer)-1,
|
||||||
|
"%d. %s\n",
|
||||||
|
option == 10 ? 0 : option,
|
||||||
|
m_OptNames[abs(MENU_EXIT)].c_str());
|
||||||
|
}
|
||||||
|
m_Text.append(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -426,27 +593,21 @@ static cell AMX_NATIVE_CALL menu_create(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int id = g_menucmds.registerMenuId(title, amx);
|
Menu *pMenu = new Menu(title, amx, func);
|
||||||
g_menucmds.registerMenuCmd(g_plugins.findPluginFast(amx), id, 1023, func);
|
|
||||||
|
|
||||||
Menu *pMenu = new Menu(title, id, 0);
|
|
||||||
|
|
||||||
pMenu->func = func;
|
|
||||||
|
|
||||||
if (g_MenuFreeStack.empty())
|
if (g_MenuFreeStack.empty())
|
||||||
{
|
{
|
||||||
g_NewMenus.push_back(pMenu);
|
g_NewMenus.push_back(pMenu);
|
||||||
pMenu->thisId = (int)g_NewMenus.size() - 1;
|
pMenu->thisId = (int)g_NewMenus.size() - 1;
|
||||||
return (int)g_NewMenus.size() - 1;
|
|
||||||
} else {
|
} else {
|
||||||
int pos = g_MenuFreeStack.front();
|
int pos = g_MenuFreeStack.front();
|
||||||
g_MenuFreeStack.pop();
|
g_MenuFreeStack.pop();
|
||||||
g_NewMenus[pos] = pMenu;
|
g_NewMenus[pos] = pMenu;
|
||||||
pMenu->thisId = pos;
|
pMenu->thisId = pos;
|
||||||
return pos;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
return pMenu->thisId;
|
||||||
|
}
|
||||||
static cell AMX_NATIVE_CALL menu_addblank(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL menu_addblank(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
GETMENU(params[1]);
|
GETMENU(params[1]);
|
||||||
@ -464,7 +625,51 @@ static cell AMX_NATIVE_CALL menu_addblank(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
menuitem *item = pMenu->m_Items[pMenu->m_Items.size() - 1];
|
menuitem *item = pMenu->m_Items[pMenu->m_Items.size() - 1];
|
||||||
item->blanks.push_back(params[2]);
|
|
||||||
|
BlankItem a;
|
||||||
|
|
||||||
|
a.SetBlank();
|
||||||
|
|
||||||
|
if (params[2] == 1)
|
||||||
|
a.SetEatNumber(true);
|
||||||
|
|
||||||
|
else
|
||||||
|
a.SetEatNumber(false);
|
||||||
|
|
||||||
|
item->blanks.push_back(a);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
static cell AMX_NATIVE_CALL menu_addtext(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
GETMENU(params[1]);
|
||||||
|
|
||||||
|
if (params[2] && (!pMenu->items_per_page && pMenu->GetItemCount() >= 10))
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Non-paginated menus are limited to 10 items.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pMenu->m_Items.size())
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Blanks can only be added after items.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
menuitem *item = pMenu->m_Items[pMenu->m_Items.size() - 1];
|
||||||
|
|
||||||
|
BlankItem a;
|
||||||
|
|
||||||
|
int len;
|
||||||
|
a.SetText(get_amxstring(amx, params[2], 0, len));
|
||||||
|
|
||||||
|
if (params[3] == 1)
|
||||||
|
a.SetEatNumber(true);
|
||||||
|
|
||||||
|
else
|
||||||
|
a.SetEatNumber(false);
|
||||||
|
|
||||||
|
item->blanks.push_back(a);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -524,6 +729,36 @@ static cell AMX_NATIVE_CALL menu_display(AMX *amx, cell *params)
|
|||||||
int page = params[3];
|
int page = params[3];
|
||||||
CPlayer* pPlayer = GET_PLAYER_POINTER_I(player);
|
CPlayer* pPlayer = GET_PLAYER_POINTER_I(player);
|
||||||
|
|
||||||
|
/* If the stupid handler keeps drawing menus,
|
||||||
|
* We need to keep cancelling them. But we put in a quick infinite loop
|
||||||
|
* counter to prevent this from going nuts.
|
||||||
|
*/
|
||||||
|
int menu;
|
||||||
|
int loops = 0;
|
||||||
|
while ((menu = pPlayer->newmenu) >= 0)
|
||||||
|
{
|
||||||
|
if ((size_t)menu >= g_NewMenus.size() || !g_NewMenus[menu])
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Menu *pOther = g_NewMenus[menu];
|
||||||
|
|
||||||
|
pPlayer->newmenu = -1;
|
||||||
|
pPlayer->menu = 0;
|
||||||
|
executeForwards(pOther->func,
|
||||||
|
static_cast<cell>(player),
|
||||||
|
static_cast<cell>(pOther->thisId),
|
||||||
|
static_cast<cell>(MENU_EXIT));
|
||||||
|
|
||||||
|
/* Infinite loop counter */
|
||||||
|
if (++loops >= 10)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Plugin called menu_display when item=MENU_EXIT");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This will set the expire time of the menu to infinite
|
// This will set the expire time of the menu to infinite
|
||||||
pPlayer->menuexpire = INFINITE;
|
pPlayer->menuexpire = INFINITE;
|
||||||
|
|
||||||
@ -652,6 +887,13 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
|
|||||||
|
|
||||||
switch (params[2])
|
switch (params[2])
|
||||||
{
|
{
|
||||||
|
case MPROP_SET_NUMBER_COLOR:
|
||||||
|
{
|
||||||
|
char *str = get_amxstring(amx, params[3], 0, len);
|
||||||
|
validate_menu_text(str);
|
||||||
|
pMenu->m_ItemColor.assign(str);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case MPROP_PERPAGE:
|
case MPROP_PERPAGE:
|
||||||
{
|
{
|
||||||
cell count = *get_amxaddr(amx, params[3]);
|
cell count = *get_amxaddr(amx, params[3]);
|
||||||
@ -687,51 +929,23 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
|
|||||||
case MPROP_TITLE:
|
case MPROP_TITLE:
|
||||||
{
|
{
|
||||||
char *str = get_amxstring(amx, params[3], 0, len);
|
char *str = get_amxstring(amx, params[3], 0, len);
|
||||||
int old = pMenu->menuId;
|
|
||||||
g_menucmds.removeMenuId(old);
|
|
||||||
pMenu->m_Title.assign(str);
|
pMenu->m_Title.assign(str);
|
||||||
pMenu->menuId = g_menucmds.registerMenuId(str, amx);
|
|
||||||
g_menucmds.registerMenuCmd(
|
|
||||||
g_plugins.findPluginFast(amx),
|
|
||||||
pMenu->menuId,
|
|
||||||
1023,
|
|
||||||
pMenu->func);
|
|
||||||
CPlayer *pl;
|
|
||||||
/**
|
|
||||||
* NOTE - this is actually bogus
|
|
||||||
* the client's screen won't actually match the cmd here
|
|
||||||
* I think, this scenario needs to be tested.
|
|
||||||
*/
|
|
||||||
for (int i=1; i<=gpGlobals->maxClients; i++)
|
|
||||||
{
|
|
||||||
pl = GET_PLAYER_POINTER_I(i);
|
|
||||||
if (pl->menu == old)
|
|
||||||
pl->menu = pMenu->menuId;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MPROP_EXITALL:
|
case MPROP_EXITALL:
|
||||||
{
|
{
|
||||||
cell ans = *get_amxaddr(amx, params[3]);
|
cell ans = *get_amxaddr(amx, params[3]);
|
||||||
if (ans == 1)
|
if (ans == 1 || ans == 0)
|
||||||
{
|
{
|
||||||
pMenu->m_AlwaysExit = true;
|
|
||||||
pMenu->m_NeverExit = false;
|
|
||||||
} else if (ans == 0) {
|
|
||||||
pMenu->m_AlwaysExit = false;
|
|
||||||
pMenu->m_NeverExit = false;
|
pMenu->m_NeverExit = false;
|
||||||
} else if (ans == -1) {
|
} else if (ans == -1) {
|
||||||
pMenu->m_NeverExit = true;
|
pMenu->m_NeverExit = true;
|
||||||
pMenu->m_AlwaysExit = false;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MPROP_ORDER:
|
case MPROP_ORDER:
|
||||||
{
|
{
|
||||||
cell *addr = get_amxaddr(amx, params[3]);
|
/* Ignored as of 1.8.0 */
|
||||||
pMenu->m_OptOrders[0] = addr[0];
|
|
||||||
pMenu->m_OptOrders[1] = addr[1];
|
|
||||||
pMenu->m_OptOrders[2] = addr[2];
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MPROP_NOCOLORS:
|
case MPROP_NOCOLORS:
|
||||||
@ -741,7 +955,7 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
case MPROP_PADMENU:
|
case MPROP_PADMENU:
|
||||||
{
|
{
|
||||||
pMenu->padding = *get_amxaddr(amx, params[3]);
|
/* Ignored as of 1.8.0 */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -797,10 +1011,12 @@ static cell AMX_NATIVE_CALL menu_destroy(AMX *amx, cell *params)
|
|||||||
GETMENU_R(params[1]);
|
GETMENU_R(params[1]);
|
||||||
|
|
||||||
if (pMenu->isDestroying)
|
if (pMenu->isDestroying)
|
||||||
|
{
|
||||||
return 0; //prevent infinite recursion
|
return 0; //prevent infinite recursion
|
||||||
|
}
|
||||||
|
|
||||||
pMenu->isDestroying = true;
|
pMenu->isDestroying = true;
|
||||||
g_menucmds.removeMenuId(pMenu->menuId);
|
|
||||||
CPlayer *player;
|
CPlayer *player;
|
||||||
for (int i=1; i<=gpGlobals->maxClients; i++)
|
for (int i=1; i<=gpGlobals->maxClients; i++)
|
||||||
{
|
{
|
||||||
@ -843,8 +1059,16 @@ static cell AMX_NATIVE_CALL player_menu_info(AMX *amx, cell *params)
|
|||||||
*m = player->menu;
|
*m = player->menu;
|
||||||
*n = player->newmenu;
|
*n = player->newmenu;
|
||||||
|
|
||||||
|
if (params[0] / sizeof(cell) == 4)
|
||||||
|
{
|
||||||
|
cell *addr = get_amxaddr(amx, params[4]);
|
||||||
|
*addr = player->page;
|
||||||
|
}
|
||||||
|
|
||||||
if ( (*m != 0 && *m != -1) || (*n != -1))
|
if ( (*m != 0 && *m != -1) || (*n != -1))
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -854,6 +1078,7 @@ AMX_NATIVE_INFO g_NewMenuNatives[] =
|
|||||||
{"menu_create", menu_create},
|
{"menu_create", menu_create},
|
||||||
{"menu_additem", menu_additem},
|
{"menu_additem", menu_additem},
|
||||||
{"menu_addblank", menu_addblank},
|
{"menu_addblank", menu_addblank},
|
||||||
|
{"menu_addtext", menu_addtext},
|
||||||
{"menu_pages", menu_pages},
|
{"menu_pages", menu_pages},
|
||||||
{"menu_items", menu_items},
|
{"menu_items", menu_items},
|
||||||
{"menu_display", menu_display},
|
{"menu_display", menu_display},
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#define ITEM_ENABLED 1
|
#define ITEM_ENABLED 1
|
||||||
#define ITEM_DISABLED 2
|
#define ITEM_DISABLED 2
|
||||||
|
|
||||||
|
#define MAX_MENU_ITEMS 10
|
||||||
|
|
||||||
#define MPROP_PERPAGE 1
|
#define MPROP_PERPAGE 1
|
||||||
#define MPROP_BACKNAME 2
|
#define MPROP_BACKNAME 2
|
||||||
@ -49,9 +50,50 @@
|
|||||||
#define MPROP_ORDER 7
|
#define MPROP_ORDER 7
|
||||||
#define MPROP_NOCOLORS 8
|
#define MPROP_NOCOLORS 8
|
||||||
#define MPROP_PADMENU 9
|
#define MPROP_PADMENU 9
|
||||||
|
#define MPROP_SET_NUMBER_COLOR 10
|
||||||
|
|
||||||
typedef int (*MENUITEM_CALLBACK)(int, int, int);
|
typedef int (*MENUITEM_CALLBACK)(int, int, int);
|
||||||
|
|
||||||
|
class BlankItem
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
char *m_text;
|
||||||
|
bool m_num;
|
||||||
|
public:
|
||||||
|
BlankItem() : m_text(NULL), m_num(false) { }
|
||||||
|
BlankItem(BlankItem &src) { this->copyFrom(src); }
|
||||||
|
~BlankItem() { free(m_text); }
|
||||||
|
|
||||||
|
void copyFrom(BlankItem &src)
|
||||||
|
{
|
||||||
|
m_text = src.m_text;
|
||||||
|
m_num = src.m_num;
|
||||||
|
src.m_text = NULL; // stop the src from freeing the buffer
|
||||||
|
}
|
||||||
|
BlankItem &operator = (const BlankItem &src) { this->copyFrom(const_cast<BlankItem&>(src)); return *this; }
|
||||||
|
|
||||||
|
/* is this text instead of a blank */
|
||||||
|
bool IsText() { return m_text != NULL; }
|
||||||
|
|
||||||
|
/* is this a blank instead of text */
|
||||||
|
bool IsBlank() { return m_text == NULL; }
|
||||||
|
|
||||||
|
/* does this item take up a number */
|
||||||
|
bool EatNumber() { return m_num; }
|
||||||
|
|
||||||
|
/* the text this item is to display */
|
||||||
|
const char *GetDisplay() { return m_text == NULL ? "" : m_text; }
|
||||||
|
|
||||||
|
/* sets this item to use a blank */
|
||||||
|
void SetBlank() { free(m_text); m_text = NULL; }
|
||||||
|
|
||||||
|
/* sets this item to display text */
|
||||||
|
void SetText(const char *text) { free(m_text); m_text = strdup(text); }
|
||||||
|
|
||||||
|
/* sets whether or not this item takes up a line */
|
||||||
|
void SetEatNumber(bool val) { m_num = val; }
|
||||||
|
|
||||||
|
};
|
||||||
struct menuitem
|
struct menuitem
|
||||||
{
|
{
|
||||||
String name;
|
String name;
|
||||||
@ -63,7 +105,7 @@ struct menuitem
|
|||||||
MENUITEM_CALLBACK pfn;
|
MENUITEM_CALLBACK pfn;
|
||||||
size_t id;
|
size_t id;
|
||||||
|
|
||||||
CVector<int> blanks;
|
CVector<BlankItem> blanks;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef unsigned int menu_t;
|
typedef unsigned int menu_t;
|
||||||
@ -73,7 +115,7 @@ typedef unsigned int page_t;
|
|||||||
class Menu
|
class Menu
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Menu(const char *title, int menuId, int thisId);
|
Menu(const char *title, AMX *amx, int fid);
|
||||||
~Menu();
|
~Menu();
|
||||||
|
|
||||||
menuitem *GetMenuItem(item_t item);
|
menuitem *GetMenuItem(item_t item);
|
||||||
@ -92,16 +134,14 @@ public:
|
|||||||
String m_Text;
|
String m_Text;
|
||||||
|
|
||||||
String m_OptNames[4];
|
String m_OptNames[4];
|
||||||
int m_OptOrders[3];
|
|
||||||
|
|
||||||
bool m_AlwaysExit;
|
String m_ItemColor;
|
||||||
bool m_NeverExit;
|
bool m_NeverExit;
|
||||||
bool m_AutoColors;
|
bool m_AutoColors;
|
||||||
|
|
||||||
int menuId;
|
int menuId;
|
||||||
int thisId;
|
int thisId;
|
||||||
int func;
|
int func;
|
||||||
int padding;
|
|
||||||
bool isDestroying;
|
bool isDestroying;
|
||||||
public:
|
public:
|
||||||
unsigned int items_per_page;
|
unsigned int items_per_page;
|
||||||
|
23
amxmodx/nongpl_matches.cpp
Normal file
23
amxmodx/nongpl_matches.cpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include <string.h>
|
||||||
|
#include "nongpl_matches.h"
|
||||||
|
|
||||||
|
NONGPL_PLUGIN_T NONGPL_PLUGIN_LIST[] =
|
||||||
|
{
|
||||||
|
{"Live", "CZ Gun Game", "czgungame.amxx"},
|
||||||
|
{"Live", "AMXX Gun Game", "czgungame.amxx"},
|
||||||
|
{NULL, NULL, NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
NONGPL_CVAR_T NONGPL_CVAR_LIST[] =
|
||||||
|
{
|
||||||
|
{"gg_mode", 0},
|
||||||
|
{"gg_warmuptimer", 0},
|
||||||
|
{"gg_ff", 0},
|
||||||
|
{"gg_fflevel", 0},
|
||||||
|
{"gg_stats", 0},
|
||||||
|
{"gg_dm", 0},
|
||||||
|
{"gg_turbo", 0},
|
||||||
|
{"amx_ggreset", 1},
|
||||||
|
{"amx_gg", 1},
|
||||||
|
{NULL, 0},
|
||||||
|
};
|
51
amxmodx/nongpl_matches.h
Normal file
51
amxmodx/nongpl_matches.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/* AMX Mod X
|
||||||
|
*
|
||||||
|
* by the AMX Mod X Development Team
|
||||||
|
* originally developed by OLO
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* 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, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_AMXMODX_NONGPL_MATCHES_H_
|
||||||
|
#define _INCLUDE_AMXMODX_NONGPL_MATCHES_H_
|
||||||
|
|
||||||
|
struct NONGPL_PLUGIN_T
|
||||||
|
{
|
||||||
|
const char *author;
|
||||||
|
const char *title;
|
||||||
|
const char *filename;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NONGPL_CVAR_T
|
||||||
|
{
|
||||||
|
const char *cvar;
|
||||||
|
int type;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern NONGPL_PLUGIN_T NONGPL_PLUGIN_LIST[];
|
||||||
|
extern NONGPL_CVAR_T NONGPL_CVAR_LIST[];
|
||||||
|
|
||||||
|
#endif //_INCLUDE_AMXMODX_NONGPL_MATCHES_H_
|
@ -39,6 +39,10 @@
|
|||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined __APPLE__
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Linux NOW has these */
|
/* Linux NOW has these */
|
||||||
#if !defined BIG_ENDIAN
|
#if !defined BIG_ENDIAN
|
||||||
#define BIG_ENDIAN 4321
|
#define BIG_ENDIAN 4321
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
#define stricmp(a,b) strcasecmp(a,b)
|
#define stricmp(a,b) strcasecmp(a,b)
|
||||||
#define strnicmp(a,b,c) strncasecmp(a,b,c)
|
#define strnicmp(a,b,c) strncasecmp(a,b,c)
|
||||||
|
|
||||||
#if defined __linux__ && !defined _snprintf
|
#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _snprintf
|
||||||
#define _snprintf snprintf
|
#define _snprintf snprintf
|
||||||
#endif
|
#endif
|
||||||
#if defined __linux__ && !defined _vsnprintf
|
#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf
|
||||||
//#define _vsnprintf vsnprintf
|
//#define _vsnprintf vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -40,6 +40,10 @@
|
|||||||
*/
|
*/
|
||||||
#if !defined __BYTE_ORDER
|
#if !defined __BYTE_ORDER
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
|
# if defined __APPLE__
|
||||||
|
# include <sys/types.h>
|
||||||
|
# define __BYTE_ORDER BYTE_ORDER
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined __OpenBSD__
|
#if defined __OpenBSD__
|
||||||
|
@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table =
|
|||||||
GetEngineFunctions_Post
|
GetEngineFunctions_Post
|
||||||
};
|
};
|
||||||
|
|
||||||
C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
||||||
{
|
{
|
||||||
if ((int) CVAR_GET_FLOAT("developer") != 0)
|
if ((int) CVAR_GET_FLOAT("developer") != 0)
|
||||||
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
|
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
|
||||||
@ -2284,7 +2284,7 @@ C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FN_META_QUERY
|
#ifdef FN_META_QUERY
|
||||||
return FN_META_QUERY();
|
FN_META_QUERY();
|
||||||
#endif // FN_META_QUERY
|
#endif // FN_META_QUERY
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -2327,14 +2327,14 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FN_META_DETACH
|
#ifdef FN_META_DETACH
|
||||||
return FN_META_DETACH();
|
FN_META_DETACH();
|
||||||
#endif // FN_META_DETACH
|
#endif // FN_META_DETACH
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
// linux prototype
|
// linux prototype
|
||||||
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
|
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
|
||||||
|
|
||||||
@ -2374,7 +2374,7 @@ C_DLLEXPORT void __stdcall GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine,
|
|||||||
gpGlobals = pGlobals;
|
gpGlobals = pGlobals;
|
||||||
// NOTE! Have to call logging function _after_ copying into g_engfuncs, so
|
// NOTE! Have to call logging function _after_ copying into g_engfuncs, so
|
||||||
// that g_engfuncs.pfnAlertMessage() can be resolved properly, heh. :)
|
// that g_engfuncs.pfnAlertMessage() can be resolved properly, heh. :)
|
||||||
UTIL_LogPrintf("[%s] dev: called: GiveFnptrsToDll\n", Plugin_info.logtag);
|
// UTIL_LogPrintf("[%s] dev: called: GiveFnptrsToDll\n", Plugin_info.logtag);
|
||||||
// --> ** Function core
|
// --> ** Function core
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
@ -2548,6 +2548,14 @@ C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo
|
|||||||
// request optional function
|
// request optional function
|
||||||
#define REQFUNC_OPT(name, fptr, type) fptr = (type)reqFnptrFunc(name)
|
#define REQFUNC_OPT(name, fptr, type) fptr = (type)reqFnptrFunc(name)
|
||||||
|
|
||||||
|
C_DLLEXPORT int AMXX_CheckGame(const char *game)
|
||||||
|
{
|
||||||
|
#ifdef FN_AMXX_CHECKGAME
|
||||||
|
return FN_AMXX_CHECKGAME(game);
|
||||||
|
#else
|
||||||
|
return AMXX_GAME_OK;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
|
C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
|
||||||
{
|
{
|
||||||
// Check pointer
|
// Check pointer
|
||||||
@ -3042,7 +3050,7 @@ char* UTIL_VarArgs( char *format, ... )
|
|||||||
// UTIL_LogPrintf - Prints a logged message to console.
|
// UTIL_LogPrintf - Prints a logged message to console.
|
||||||
// Preceded by LOG: ( timestamp ) < message >
|
// Preceded by LOG: ( timestamp ) < message >
|
||||||
//=========================================================
|
//=========================================================
|
||||||
void UTIL_LogPrintf( char *fmt, ... )
|
void UTIL_LogPrintf( const char *fmt, ... )
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
static char string[1024];
|
static char string[1024];
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
// config
|
// config
|
||||||
#include "moduleconfig.h"
|
#include "moduleconfig.h"
|
||||||
|
|
||||||
|
#include <stddef.h> // size_t
|
||||||
// metamod include files
|
// metamod include files
|
||||||
#ifdef USE_METAMOD
|
#ifdef USE_METAMOD
|
||||||
#include <extdll.h>
|
#include <extdll.h>
|
||||||
@ -19,11 +20,16 @@
|
|||||||
|
|
||||||
// DLL Export
|
// DLL Export
|
||||||
#undef DLLEXPORT
|
#undef DLLEXPORT
|
||||||
#ifndef __linux__
|
#if defined(_WIN32)
|
||||||
#define DLLEXPORT __declspec(dllexport)
|
#define DLLEXPORT __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define DLLEXPORT __attribute__((visibility("default")))
|
#define DLLEXPORT __attribute__((visibility("default")))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__) && !defined(LINUX)
|
||||||
#define LINUX
|
#define LINUX
|
||||||
|
#elif defined(__APPLE__) && !defined(OSX)
|
||||||
|
#define OSX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef C_DLLEXPORT
|
#undef C_DLLEXPORT
|
||||||
@ -55,6 +61,9 @@ struct amxx_module_info_s
|
|||||||
#define AMXX_PARAM 2 /* Invalid parameter */
|
#define AMXX_PARAM 2 /* Invalid parameter */
|
||||||
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
||||||
|
|
||||||
|
#define AMXX_GAME_OK 0 /* This module can load on the current game mod. */
|
||||||
|
#define AMXX_GAME_BAD 1 /* This module can not load on the current game mod. */
|
||||||
|
|
||||||
// *** Small stuff ***
|
// *** Small stuff ***
|
||||||
// The next section is copied from the amx.h file
|
// The next section is copied from the amx.h file
|
||||||
// Copyright (c) ITB CompuPhase, 1997-2005
|
// Copyright (c) ITB CompuPhase, 1997-2005
|
||||||
@ -62,7 +71,7 @@ struct amxx_module_info_s
|
|||||||
#if defined HAVE_STDINT_H
|
#if defined HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#else
|
#else
|
||||||
#if defined __LCC__ || defined __DMC__ || defined LINUX
|
#if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
|
||||||
#if defined HAVE_INTTYPES_H
|
#if defined HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#else
|
#else
|
||||||
@ -304,7 +313,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -391,7 +400,7 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#else
|
#else
|
||||||
#pragma pack(pop) /* reset previous packing */
|
#pragma pack(pop) /* reset previous packing */
|
||||||
@ -402,7 +411,7 @@ enum {
|
|||||||
// ***** declare functions *****
|
// ***** declare functions *****
|
||||||
|
|
||||||
#ifdef USE_METAMOD
|
#ifdef USE_METAMOD
|
||||||
void UTIL_LogPrintf( char *fmt, ... );
|
void UTIL_LogPrintf( const char *fmt, ... );
|
||||||
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
|
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
|
||||||
short FixedSigned16( float value, float scale );
|
short FixedSigned16( float value, float scale );
|
||||||
unsigned short FixedUnsigned16( float value, float scale );
|
unsigned short FixedUnsigned16( float value, float scale );
|
||||||
@ -829,11 +838,11 @@ int FN_AllowLagCompensation_Post(void);
|
|||||||
|
|
||||||
|
|
||||||
#ifdef FN_PrecacheModel
|
#ifdef FN_PrecacheModel
|
||||||
int FN_PrecacheModel(char *s);
|
int FN_PrecacheModel(const char *s);
|
||||||
#endif // FN_PrecacheModel
|
#endif // FN_PrecacheModel
|
||||||
|
|
||||||
#ifdef FN_PrecacheSound
|
#ifdef FN_PrecacheSound
|
||||||
int FN_PrecacheSound(char *s);
|
int FN_PrecacheSound(const char *s);
|
||||||
#endif // FN_PrecacheSound
|
#endif // FN_PrecacheSound
|
||||||
|
|
||||||
#ifdef FN_SetModel
|
#ifdef FN_SetModel
|
||||||
@ -853,7 +862,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
|
|||||||
#endif // FN_SetSize
|
#endif // FN_SetSize
|
||||||
|
|
||||||
#ifdef FN_ChangeLevel
|
#ifdef FN_ChangeLevel
|
||||||
void FN_ChangeLevel(char *s1, char *s2);
|
void FN_ChangeLevel(const char *s1, const char *s2);
|
||||||
#endif // FN_ChangeLevel
|
#endif // FN_ChangeLevel
|
||||||
|
|
||||||
#ifdef FN_GetSpawnParms
|
#ifdef FN_GetSpawnParms
|
||||||
@ -1077,7 +1086,7 @@ void FN_AlertMessage(ALERT_TYPE atype, char *szFmt, ...);
|
|||||||
#endif // FN_AlertMessage
|
#endif // FN_AlertMessage
|
||||||
|
|
||||||
#ifdef FN_EngineFprintf
|
#ifdef FN_EngineFprintf
|
||||||
void FN_EngineFprintf(FILE *pfile, char *szFmt, ...);
|
void FN_EngineFprintf(void *pfile, char *szFmt, ...);
|
||||||
#endif // FN_EngineFprintf
|
#endif // FN_EngineFprintf
|
||||||
|
|
||||||
#ifdef FN_PvAllocEntPrivateData
|
#ifdef FN_PvAllocEntPrivateData
|
||||||
@ -1141,11 +1150,11 @@ void FN_GetBonePosition(const edict_t *pEdict, int iBone, float *rgflOrigin, flo
|
|||||||
#endif // FN_GetBonePosition
|
#endif // FN_GetBonePosition
|
||||||
|
|
||||||
#ifdef FN_FunctionFromName
|
#ifdef FN_FunctionFromName
|
||||||
unsigned long FN_FunctionFromName(const char *pName);
|
uint32 FN_FunctionFromName(const char *pName);
|
||||||
#endif // FN_FunctionFromName
|
#endif // FN_FunctionFromName
|
||||||
|
|
||||||
#ifdef FN_NameForFunction
|
#ifdef FN_NameForFunction
|
||||||
const char *FN_NameForFunction(unsigned long function);
|
const char *FN_NameForFunction(uint32);
|
||||||
#endif // FN_NameForFunction
|
#endif // FN_NameForFunction
|
||||||
|
|
||||||
#ifdef FN_ClientPrintf
|
#ifdef FN_ClientPrintf
|
||||||
@ -1189,7 +1198,7 @@ CRC32_t FN_CRC32_Final(CRC32_t pulCRC);
|
|||||||
#endif // FN_CRC32_Final
|
#endif // FN_CRC32_Final
|
||||||
|
|
||||||
#ifdef FN_RandomLong
|
#ifdef FN_RandomLong
|
||||||
long FN_RandomLong(long lLow, long lHigh);
|
int32 FN_RandomLong(int32 lLow, int32 lHigh);
|
||||||
#endif // FN_RandomLong
|
#endif // FN_RandomLong
|
||||||
|
|
||||||
#ifdef FN_RandomFloat
|
#ifdef FN_RandomFloat
|
||||||
@ -1257,19 +1266,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e);
|
|||||||
#endif // FN_GetInfoKeyBuffer
|
#endif // FN_GetInfoKeyBuffer
|
||||||
|
|
||||||
#ifdef FN_InfoKeyValue
|
#ifdef FN_InfoKeyValue
|
||||||
char *FN_InfoKeyValue(char *infobuffer, char *key);
|
char *FN_InfoKeyValue(char *infobuffer, const char *key);
|
||||||
#endif // FN_InfoKeyValue
|
#endif // FN_InfoKeyValue
|
||||||
|
|
||||||
#ifdef FN_SetKeyValue
|
#ifdef FN_SetKeyValue
|
||||||
void FN_SetKeyValue(char *infobuffer, char *key, char *value);
|
void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
|
||||||
#endif // FN_SetKeyValue
|
#endif // FN_SetKeyValue
|
||||||
|
|
||||||
#ifdef FN_SetClientKeyValue
|
#ifdef FN_SetClientKeyValue
|
||||||
void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
|
void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
|
||||||
#endif // FN_SetClientKeyValue
|
#endif // FN_SetClientKeyValue
|
||||||
|
|
||||||
#ifdef FN_IsMapValid
|
#ifdef FN_IsMapValid
|
||||||
int FN_IsMapValid(char *filename);
|
int FN_IsMapValid(const char *filename);
|
||||||
#endif // FN_IsMapValid
|
#endif // FN_IsMapValid
|
||||||
|
|
||||||
#ifdef FN_StaticDecal
|
#ifdef FN_StaticDecal
|
||||||
@ -1277,7 +1286,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo
|
|||||||
#endif // FN_StaticDecal
|
#endif // FN_StaticDecal
|
||||||
|
|
||||||
#ifdef FN_PrecacheGeneric
|
#ifdef FN_PrecacheGeneric
|
||||||
int FN_PrecacheGeneric(char *s);
|
int FN_PrecacheGeneric(const char *s);
|
||||||
#endif // FN_PrecacheGeneric
|
#endif // FN_PrecacheGeneric
|
||||||
|
|
||||||
#ifdef FN_GetPlayerUserId
|
#ifdef FN_GetPlayerUserId
|
||||||
@ -1410,11 +1419,11 @@ const char *FN_GetPlayerAuthId(edict_t *e);
|
|||||||
|
|
||||||
|
|
||||||
#ifdef FN_PrecacheModel_Post
|
#ifdef FN_PrecacheModel_Post
|
||||||
int FN_PrecacheModel_Post(char *s);
|
int FN_PrecacheModel_Post(const char *s);
|
||||||
#endif // FN_PrecacheModel_Post
|
#endif // FN_PrecacheModel_Post
|
||||||
|
|
||||||
#ifdef FN_PrecacheSound_Post
|
#ifdef FN_PrecacheSound_Post
|
||||||
int FN_PrecacheSound_Post(char *s);
|
int FN_PrecacheSound_Post(const char *s);
|
||||||
#endif // FN_PrecacheSound_Post
|
#endif // FN_PrecacheSound_Post
|
||||||
|
|
||||||
#ifdef FN_SetModel_Post
|
#ifdef FN_SetModel_Post
|
||||||
@ -1434,7 +1443,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
|
|||||||
#endif // FN_SetSize_Post
|
#endif // FN_SetSize_Post
|
||||||
|
|
||||||
#ifdef FN_ChangeLevel_Post
|
#ifdef FN_ChangeLevel_Post
|
||||||
void FN_ChangeLevel_Post(char *s1, char *s2);
|
void FN_ChangeLevel_Post(const char *s1, const char *s2);
|
||||||
#endif // FN_ChangeLevel_Post
|
#endif // FN_ChangeLevel_Post
|
||||||
|
|
||||||
#ifdef FN_GetSpawnParms_Post
|
#ifdef FN_GetSpawnParms_Post
|
||||||
@ -1658,11 +1667,11 @@ void FN_AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...);
|
|||||||
#endif // FN_AlertMessage_Post
|
#endif // FN_AlertMessage_Post
|
||||||
|
|
||||||
#ifdef FN_EngineFprintf_Post
|
#ifdef FN_EngineFprintf_Post
|
||||||
void FN_EngineFprintf_Post(FILE *pfile, char *szFmt, ...);
|
void FN_EngineFprintf_Post(void *pfile, char *szFmt, ...);
|
||||||
#endif // FN_EngineFprintf_Post
|
#endif // FN_EngineFprintf_Post
|
||||||
|
|
||||||
#ifdef FN_PvAllocEntPrivateData_Post
|
#ifdef FN_PvAllocEntPrivateData_Post
|
||||||
void *FN_PvAllocEntPrivateData_Post(edict_t *pEdict, long cb);
|
void *FN_PvAllocEntPrivateData_Post(edict_t *pEdict, int32 cb);
|
||||||
#endif // FN_PvAllocEntPrivateData_Post
|
#endif // FN_PvAllocEntPrivateData_Post
|
||||||
|
|
||||||
#ifdef FN_PvEntPrivateData_Post
|
#ifdef FN_PvEntPrivateData_Post
|
||||||
@ -1722,11 +1731,11 @@ void FN_GetBonePosition_Post(const edict_t *pEdict, int iBone, float *rgflOrigin
|
|||||||
#endif // FN_GetBonePosition_Post
|
#endif // FN_GetBonePosition_Post
|
||||||
|
|
||||||
#ifdef FN_FunctionFromName_Post
|
#ifdef FN_FunctionFromName_Post
|
||||||
unsigned long FN_FunctionFromName_Post(const char *pName);
|
uint32 FN_FunctionFromName_Post(const char *pName);
|
||||||
#endif // FN_FunctionFromName_Post
|
#endif // FN_FunctionFromName_Post
|
||||||
|
|
||||||
#ifdef FN_NameForFunction_Post
|
#ifdef FN_NameForFunction_Post
|
||||||
const char *FN_NameForFunction_Post(unsigned long function);
|
const char *FN_NameForFunction_Post(uint32);
|
||||||
#endif // FN_NameForFunction_Post
|
#endif // FN_NameForFunction_Post
|
||||||
|
|
||||||
#ifdef FN_ClientPrintf_Post
|
#ifdef FN_ClientPrintf_Post
|
||||||
@ -1770,7 +1779,7 @@ CRC32_t FN_CRC32_Final_Post(CRC32_t pulCRC);
|
|||||||
#endif // FN_CRC32_Final_Post
|
#endif // FN_CRC32_Final_Post
|
||||||
|
|
||||||
#ifdef FN_RandomLong_Post
|
#ifdef FN_RandomLong_Post
|
||||||
long FN_RandomLong_Post(long lLow, long lHigh);
|
int32 FN_RandomLong_Post(int32 lLow, int32 lHigh);
|
||||||
#endif // FN_RandomLong_Post
|
#endif // FN_RandomLong_Post
|
||||||
|
|
||||||
#ifdef FN_RandomFloat_Post
|
#ifdef FN_RandomFloat_Post
|
||||||
@ -1838,19 +1847,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e);
|
|||||||
#endif // FN_GetInfoKeyBuffer_Post
|
#endif // FN_GetInfoKeyBuffer_Post
|
||||||
|
|
||||||
#ifdef FN_InfoKeyValue_Post
|
#ifdef FN_InfoKeyValue_Post
|
||||||
char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
|
char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
|
||||||
#endif // FN_InfoKeyValue_Post
|
#endif // FN_InfoKeyValue_Post
|
||||||
|
|
||||||
#ifdef FN_SetKeyValue_Post
|
#ifdef FN_SetKeyValue_Post
|
||||||
void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
|
void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
|
||||||
#endif // FN_SetKeyValue_Post
|
#endif // FN_SetKeyValue_Post
|
||||||
|
|
||||||
#ifdef FN_SetClientKeyValue_Post
|
#ifdef FN_SetClientKeyValue_Post
|
||||||
void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
|
void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
|
||||||
#endif // FN_SetClientKeyValue_Post
|
#endif // FN_SetClientKeyValue_Post
|
||||||
|
|
||||||
#ifdef FN_IsMapValid_Post
|
#ifdef FN_IsMapValid_Post
|
||||||
int FN_IsMapValid_Post(char *filename);
|
int FN_IsMapValid_Post(const char *filename);
|
||||||
#endif // FN_IsMapValid_Post
|
#endif // FN_IsMapValid_Post
|
||||||
|
|
||||||
#ifdef FN_StaticDecal_Post
|
#ifdef FN_StaticDecal_Post
|
||||||
@ -1858,7 +1867,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i
|
|||||||
#endif // FN_StaticDecal_Post
|
#endif // FN_StaticDecal_Post
|
||||||
|
|
||||||
#ifdef FN_PrecacheGeneric_Post
|
#ifdef FN_PrecacheGeneric_Post
|
||||||
int FN_PrecacheGeneric_Post(char *s);
|
int FN_PrecacheGeneric_Post(const char *s);
|
||||||
#endif // FN_PrecacheGeneric_Post
|
#endif // FN_PrecacheGeneric_Post
|
||||||
|
|
||||||
#ifdef FN_GetPlayerUserId_Post
|
#ifdef FN_GetPlayerUserId_Post
|
||||||
@ -2023,6 +2032,10 @@ int FN_ShouldCollide_Post(edict_t *pentTouched, edict_t *pentOther);
|
|||||||
void FN_AMXX_QUERY(void);
|
void FN_AMXX_QUERY(void);
|
||||||
#endif // FN_AMXX_QUERY
|
#endif // FN_AMXX_QUERY
|
||||||
|
|
||||||
|
#ifdef FN_AMXX_CHECKGAME
|
||||||
|
int FN_AMXX_CHECKGAME(const char *);
|
||||||
|
#endif // FN_AMXX_CHECKGAME
|
||||||
|
|
||||||
#ifdef FN_AMXX_ATTACH
|
#ifdef FN_AMXX_ATTACH
|
||||||
void FN_AMXX_ATTACH(void);
|
void FN_AMXX_ATTACH(void);
|
||||||
#endif // FN_AMXX_ATTACH
|
#endif // FN_AMXX_ATTACH
|
||||||
@ -2108,7 +2121,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
|
|||||||
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
|
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
|
||||||
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
|
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
|
||||||
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
|
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
|
||||||
typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
|
typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
|
||||||
typedef const char * (*PFN_GET_MODNAME) (void);
|
typedef const char * (*PFN_GET_MODNAME) (void);
|
||||||
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
|
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
|
||||||
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
|
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
|
||||||
@ -2167,8 +2180,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i
|
|||||||
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
|
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
|
||||||
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
|
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
|
||||||
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
|
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
|
||||||
typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
|
typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
|
||||||
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
|
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
|
||||||
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
|
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
|
||||||
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
|
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
|
||||||
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
|
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
|
||||||
|
@ -54,6 +54,12 @@
|
|||||||
/** AMXX query */
|
/** AMXX query */
|
||||||
//#define FN_AMXX_QUERY OnAmxxQuery
|
//#define FN_AMXX_QUERY OnAmxxQuery
|
||||||
|
|
||||||
|
/** AMXX Check Game - module API is NOT available here.
|
||||||
|
* Return AMXX_GAME_OK if this module can load on the game, AMXX_GAME_BAD if it cannot.
|
||||||
|
* syntax: int AmxxCheckGame(const char *game)
|
||||||
|
*/
|
||||||
|
//#define FN_AMXX_CHECKGAME AmxxCheckGame
|
||||||
|
|
||||||
/** AMXX attach
|
/** AMXX attach
|
||||||
* Do native functions init here (MF_AddNatives)
|
* Do native functions init here (MF_AddNatives)
|
||||||
*/
|
*/
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
#include <malloc.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
//namespace SourceHook
|
//namespace SourceHook
|
||||||
//{
|
//{
|
||||||
|
@ -54,12 +54,12 @@
|
|||||||
typedef List<THashNode *> * NodePtr;
|
typedef List<THashNode *> * NodePtr;
|
||||||
public:
|
public:
|
||||||
class const_iterator;
|
class const_iterator;
|
||||||
THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f), m_items(0)
|
THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f)
|
||||||
{
|
{
|
||||||
_Refactor();
|
_Refactor();
|
||||||
}
|
}
|
||||||
THash(const THash &other) : m_Buckets(new NodePtr[other.m_numBuckets]),
|
THash(const THash &other) : m_Buckets(new NodePtr[other.m_numBuckets]),
|
||||||
m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed), m_items(0)
|
m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed)
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<m_numBuckets; i++)
|
for (size_t i=0; i<m_numBuckets; i++)
|
||||||
m_Buckets[i] = NULL;
|
m_Buckets[i] = NULL;
|
||||||
@ -82,10 +82,6 @@
|
|||||||
_Clear();
|
_Clear();
|
||||||
_Refactor();
|
_Refactor();
|
||||||
}
|
}
|
||||||
size_t size()
|
|
||||||
{
|
|
||||||
return m_items;
|
|
||||||
}
|
|
||||||
size_t GetBuckets()
|
size_t GetBuckets()
|
||||||
{
|
{
|
||||||
return m_numBuckets;
|
return m_numBuckets;
|
||||||
@ -122,7 +118,6 @@
|
|||||||
delete [] m_Buckets;
|
delete [] m_Buckets;
|
||||||
m_Buckets = NULL;
|
m_Buckets = NULL;
|
||||||
m_numBuckets = 0;
|
m_numBuckets = 0;
|
||||||
m_items = 0;
|
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
template <typename U>
|
template <typename U>
|
||||||
@ -229,8 +224,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
friend class iterator;
|
|
||||||
friend class const_iterator;
|
|
||||||
class iterator
|
class iterator
|
||||||
{
|
{
|
||||||
friend class THash;
|
friend class THash;
|
||||||
@ -304,8 +297,6 @@
|
|||||||
*this = tmp;
|
*this = tmp;
|
||||||
|
|
||||||
// :TODO: Maybe refactor to a lower size if required
|
// :TODO: Maybe refactor to a lower size if required
|
||||||
|
|
||||||
m_items--;
|
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
void _Inc()
|
void _Inc()
|
||||||
@ -454,6 +445,8 @@
|
|||||||
const THash *hash;
|
const THash *hash;
|
||||||
bool end;
|
bool end;
|
||||||
};
|
};
|
||||||
|
friend class iterator;
|
||||||
|
friend class const_iterator;
|
||||||
public:
|
public:
|
||||||
iterator begin()
|
iterator begin()
|
||||||
{
|
{
|
||||||
|
1102
amxmodx/sm_trie_tpl.h
Normal file
1102
amxmodx/sm_trie_tpl.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -265,6 +265,7 @@ static cell AMX_NATIVE_CALL SortCustom1D(AMX *amx, cell *params)
|
|||||||
qsort(array, array_size, sizeof(cell), sort1d_amx_custom);
|
qsort(array, array_size, sizeof(cell), sort1d_amx_custom);
|
||||||
g_AMXSortStack.pop();
|
g_AMXSortStack.pop();
|
||||||
|
|
||||||
|
unregisterSPForward(pfn);
|
||||||
delete pInfo;
|
delete pInfo;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
#include "svn_version.h"
|
||||||
|
|
||||||
void amx_command()
|
void amx_command()
|
||||||
{
|
{
|
||||||
@ -39,7 +40,7 @@ void amx_command()
|
|||||||
{
|
{
|
||||||
|
|
||||||
print_srvconsole("Currently loaded plugins:\n");
|
print_srvconsole("Currently loaded plugins:\n");
|
||||||
print_srvconsole(" %-23.22s %-8.7s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status");
|
print_srvconsole(" %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status");
|
||||||
|
|
||||||
int plugins = 0;
|
int plugins = 0;
|
||||||
int running = 0;
|
int running = 0;
|
||||||
@ -52,7 +53,7 @@ void amx_command()
|
|||||||
if ((*a).isValid() && !(*a).isPaused())
|
if ((*a).isValid() && !(*a).isPaused())
|
||||||
++running;
|
++running;
|
||||||
|
|
||||||
print_srvconsole(" [%3d] %-23.22s %-8.7s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus());
|
print_srvconsole(" [%3d] %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus());
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,11 +84,27 @@ void amx_command()
|
|||||||
|
|
||||||
if (plugin && plugin->isValid())
|
if (plugin && plugin->isValid())
|
||||||
{
|
{
|
||||||
plugin->pausePlugin();
|
if (plugin->isPaused())
|
||||||
print_srvconsole("Paused plugin \"%s\"\n", plugin->getName());
|
{
|
||||||
|
if (plugin->isStopped())
|
||||||
|
{
|
||||||
|
print_srvconsole("Plugin \"%s\" is stopped and may not be paused.\n",plugin->getName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print_srvconsole("Plugin \"%s\" is already paused.\n",plugin->getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
plugin->pausePlugin();
|
||||||
|
print_srvconsole("Paused plugin \"%s\"\n", plugin->getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
|
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd, "unpause") && CMD_ARGC() > 2)
|
else if (!strcmp(cmd, "unpause") && CMD_ARGC() > 2)
|
||||||
{
|
{
|
||||||
@ -97,14 +114,21 @@ void amx_command()
|
|||||||
|
|
||||||
if (plugin && plugin->isValid() && plugin->isPaused())
|
if (plugin && plugin->isValid() && plugin->isPaused())
|
||||||
{
|
{
|
||||||
plugin->unpausePlugin();
|
if (plugin->isStopped())
|
||||||
print_srvconsole("Unpaused plugin \"%s\"\n", plugin->getName());
|
{
|
||||||
|
print_srvconsole("Plugin \"%s\" is stopped and may not be unpaused.\n", plugin->getName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
plugin->unpausePlugin();
|
||||||
|
print_srvconsole("Unpaused plugin \"%s\"\n", plugin->getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (!plugin)
|
else if (!plugin)
|
||||||
{
|
{
|
||||||
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
|
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
|
||||||
} else {
|
} else {
|
||||||
print_srvconsole("Plugin %s can't be unpaused right now.", sPlugin);
|
print_srvconsole("Plugin %s can't be unpaused right now.\n", sPlugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd, "cvars"))
|
else if (!strcmp(cmd, "cvars"))
|
||||||
@ -114,9 +138,24 @@ void amx_command()
|
|||||||
|
|
||||||
int ammount = 0;
|
int ammount = 0;
|
||||||
|
|
||||||
for (CList<CCVar>::iterator a = g_cvars.begin(); a; ++a)
|
if (CMD_ARGC() > 2) // Searching for cvars registered to a plugin
|
||||||
{
|
{
|
||||||
print_srvconsole(" [%3d] %-24.23s %-24.23s %-16.15s\n", ++ammount, (*a).getName(), CVAR_GET_STRING((*a).getName()), (*a).getPluginName());
|
const char* targetname = CMD_ARGV(2);
|
||||||
|
size_t len = strlen(targetname);
|
||||||
|
for (CList<CCVar>::iterator a = g_cvars.begin(); a; ++a)
|
||||||
|
{
|
||||||
|
if (strncmp((*a).getPluginName(), targetname, len) == 0)
|
||||||
|
{
|
||||||
|
print_srvconsole(" [%3d] %-24.23s %-24.23s %-16.15s\n", ++ammount, (*a).getName(), CVAR_GET_STRING((*a).getName()), (*a).getPluginName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // No search
|
||||||
|
{
|
||||||
|
for (CList<CCVar>::iterator a = g_cvars.begin(); a; ++a)
|
||||||
|
{
|
||||||
|
print_srvconsole(" [%3d] %-24.23s %-24.23s %-16.15s\n", ++ammount, (*a).getName(), CVAR_GET_STRING((*a).getName()), (*a).getPluginName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print_srvconsole("%d cvars\n", ammount);
|
print_srvconsole("%d cvars\n", ammount);
|
||||||
@ -131,13 +170,29 @@ void amx_command()
|
|||||||
|
|
||||||
CmdMngr::iterator a = g_commands.begin(CMD_ConsoleCommand);
|
CmdMngr::iterator a = g_commands.begin(CMD_ConsoleCommand);
|
||||||
|
|
||||||
while (a)
|
if (CMD_ARGC() > 2) // Searching for commands registered to a plugin
|
||||||
{
|
{
|
||||||
UTIL_GetFlags(access, (*a).getFlags());
|
const char* targetname = CMD_ARGV(2);
|
||||||
print_srvconsole(" [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n", ++ammount, (*a).getCmdLine(), access, (*a).getCmdType(), (*a).getPlugin()->getName());
|
size_t len = strlen(targetname);
|
||||||
++a;
|
while (a)
|
||||||
|
{
|
||||||
|
if (strncmp((*a).getPlugin()->getName(), targetname, len) == 0)
|
||||||
|
{
|
||||||
|
UTIL_GetFlags(access, (*a).getFlags());
|
||||||
|
print_srvconsole(" [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n", ++ammount, (*a).getCmdLine(), access, (*a).getCmdType(), (*a).getPlugin()->getName());
|
||||||
|
}
|
||||||
|
++a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // No search
|
||||||
|
{
|
||||||
|
while (a)
|
||||||
|
{
|
||||||
|
UTIL_GetFlags(access, (*a).getFlags());
|
||||||
|
print_srvconsole(" [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n", ++ammount, (*a).getCmdLine(), access, (*a).getCmdType(), (*a).getPlugin()->getName());
|
||||||
|
++a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print_srvconsole("%d commands\n",ammount);
|
print_srvconsole("%d commands\n",ammount);
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd, "version"))
|
else if (!strcmp(cmd, "version"))
|
||||||
@ -146,8 +201,9 @@ void amx_command()
|
|||||||
print_srvconsole("Authors:\n\tDavid \"BAILOPAN\" Anderson, Pavol \"PM OnoTo\" Marko\n");
|
print_srvconsole("Authors:\n\tDavid \"BAILOPAN\" Anderson, Pavol \"PM OnoTo\" Marko\n");
|
||||||
print_srvconsole("\tFelix \"SniperBeamer\" Geyer, Jonny \"Got His Gun\" Bergstrom\n");
|
print_srvconsole("\tFelix \"SniperBeamer\" Geyer, Jonny \"Got His Gun\" Bergstrom\n");
|
||||||
print_srvconsole("\tLukasz \"SidLuke\" Wlasinski, Christian \"Basic-Master\" Hammacher\n");
|
print_srvconsole("\tLukasz \"SidLuke\" Wlasinski, Christian \"Basic-Master\" Hammacher\n");
|
||||||
print_srvconsole("\tBorja \"faluco\" Ferrer, Scott \"Damaged Soul\" Ehlert\n");
|
print_srvconsole("\tBorja \"faluco\" Ferrer, Scott \"DS\" Ehlert\n");
|
||||||
print_srvconsole("Compiled: %s\n", __DATE__ ", " __TIME__);
|
print_srvconsole("Compiled: %s\n", __DATE__ ", " __TIME__);
|
||||||
|
print_srvconsole("Build ID: %s\n", SVN_BUILD_ID);
|
||||||
#if defined JIT && !defined ASM32
|
#if defined JIT && !defined ASM32
|
||||||
print_srvconsole("Core mode: JIT Only\n");
|
print_srvconsole("Core mode: JIT Only\n");
|
||||||
#elif !defined JIT && defined ASM32
|
#elif !defined JIT && defined ASM32
|
||||||
@ -161,7 +217,7 @@ void amx_command()
|
|||||||
else if (!strcmp(cmd, "modules"))
|
else if (!strcmp(cmd, "modules"))
|
||||||
{
|
{
|
||||||
print_srvconsole("Currently loaded modules:\n");
|
print_srvconsole("Currently loaded modules:\n");
|
||||||
print_srvconsole(" %-23.22s %-8.7s %-20.19s %-11.10s\n", "name", "version", "author", "status");
|
print_srvconsole(" %-23.22s %-11.10s %-20.19s %-11.10s\n", "name", "version", "author", "status");
|
||||||
|
|
||||||
int running = 0;
|
int running = 0;
|
||||||
int modules = 0;
|
int modules = 0;
|
||||||
@ -174,7 +230,7 @@ void amx_command()
|
|||||||
++running;
|
++running;
|
||||||
++modules;
|
++modules;
|
||||||
|
|
||||||
print_srvconsole(" [%2d] %-23.22s %-8.7s %-20.19s %-11.10s\n", modules, (*a).getName(), (*a).getVersion(), (*a).getAuthor(), (*a).getStatus());
|
print_srvconsole(" [%2d] %-23.22s %-11.10s %-20.19s %-11.10s\n", modules, (*a).getName(), (*a).getVersion(), (*a).getAuthor(), (*a).getStatus());
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,8 +300,8 @@ void amx_command()
|
|||||||
print_srvconsole(" gpl - print the license\n");
|
print_srvconsole(" gpl - print the license\n");
|
||||||
print_srvconsole(" plugins - list plugins currently loaded\n");
|
print_srvconsole(" plugins - list plugins currently loaded\n");
|
||||||
print_srvconsole(" modules - list modules currently loaded\n");
|
print_srvconsole(" modules - list modules currently loaded\n");
|
||||||
print_srvconsole(" cvars - list cvars registered by plugins\n");
|
print_srvconsole(" cvars [ plugin ] - list cvars registered by plugins\n");
|
||||||
print_srvconsole(" cmds - list commands registered by plugins\n");
|
print_srvconsole(" cmds [ plugin ] - list commands registered by plugins\n");
|
||||||
print_srvconsole(" pause < plugin > - pause a running plugin\n");
|
print_srvconsole(" pause < plugin > - pause a running plugin\n");
|
||||||
print_srvconsole(" unpause < plugin > - unpause a previously paused plugin\n");
|
print_srvconsole(" unpause < plugin > - unpause a previously paused plugin\n");
|
||||||
}
|
}
|
||||||
|
@ -1035,7 +1035,7 @@ static cell AMX_NATIVE_CALL n_strfind(AMX *amx, cell *params)
|
|||||||
if (params[4] > len)
|
if (params[4] > len)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
char *find = strstr(str, sub);
|
char *find = strstr(str + params[4], sub);
|
||||||
|
|
||||||
if (!find)
|
if (!find)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
#define strnicmp strncasecmp
|
#define strnicmp strncasecmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -336,8 +336,10 @@ char *strptime(const char *buf, const char *fmt, struct tm *tm, short addthem)
|
|||||||
if (0 <= ti.qS) (*defoper) ( &tm->tm_sec , ti.qS );
|
if (0 <= ti.qS) (*defoper) ( &tm->tm_sec , ti.qS );
|
||||||
if (0 <= ti.qM) (*defoper) ( &tm->tm_min , ti.qM ); //tm->tm_min = ti.qM;
|
if (0 <= ti.qM) (*defoper) ( &tm->tm_min , ti.qM ); //tm->tm_min = ti.qM;
|
||||||
if (0 <= ti.qI)
|
if (0 <= ti.qI)
|
||||||
|
{
|
||||||
if (0 <= ti.qp) ti.qH = ti.qI % 12 + ti.qp * 12;
|
if (0 <= ti.qp) ti.qH = ti.qI % 12 + ti.qp * 12;
|
||||||
else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI;
|
else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI;
|
||||||
|
}
|
||||||
if (0 <= ti.qH) (*defoper) ( &tm->tm_hour , ti.qH ); //tm->tm_hour = ti.qH;
|
if (0 <= ti.qH) (*defoper) ( &tm->tm_hour , ti.qH ); //tm->tm_hour = ti.qH;
|
||||||
if (0 <= ti.qZ) (*defoper) ( &tm->tm_isdst , ti.qZ - 1 ); //tm->tm_isdst = ti.qZ - 1;
|
if (0 <= ti.qZ) (*defoper) ( &tm->tm_isdst , ti.qZ - 1 ); //tm->tm_isdst = ti.qZ - 1;
|
||||||
if (0 <= ti.qy) ti.qY = ti.qy;
|
if (0 <= ti.qy) ti.qY = ti.qy;
|
||||||
|
9
amxmodx/svn_version.h
Normal file
9
amxmodx/svn_version.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef _INCLUDE_SVN_VERSION_H_
|
||||||
|
#define _INCLUDE_SVN_VERSION_H_
|
||||||
|
|
||||||
|
#define SVN_VERSION_STRING "1.8.2-dev"
|
||||||
|
#define SVN_VERSION_DWORD 1,8,2,0
|
||||||
|
#define SVN_VERSION_PRODUCT "1.8.2"
|
||||||
|
#define SVN_BUILD_ID SVN_VERSION_STRING " 9:7ff502465eae"
|
||||||
|
|
||||||
|
#endif //_INCLUDE_SVN_VERSION_H_
|
9
amxmodx/svn_version.tpl
Normal file
9
amxmodx/svn_version.tpl
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef _INCLUDE_SVN_VERSION_H_
|
||||||
|
#define _INCLUDE_SVN_VERSION_H_
|
||||||
|
|
||||||
|
#define SVN_VERSION_STRING "$PMAJOR$.$PMINOR$.$PREVISION$$BUILD_STRING$"
|
||||||
|
#define SVN_VERSION_DWORD $PMAJOR$,$PMINOR$,$PREVISION$,0
|
||||||
|
#define SVN_VERSION_PRODUCT "$PMAJOR$.$PMINOR$.$PREVISION$"
|
||||||
|
#define SVN_BUILD_ID SVN_VERSION_STRING " $BUILD_ID$"
|
||||||
|
|
||||||
|
#endif //_INCLUDE_SVN_VERSION_H_
|
316
amxmodx/trie_natives.cpp
Normal file
316
amxmodx/trie_natives.cpp
Normal file
@ -0,0 +1,316 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "amxmodx.h"
|
||||||
|
#include "sm_trie_tpl.h"
|
||||||
|
#include "trie_natives.h"
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
size_t trie_free_count = 0;
|
||||||
|
size_t trie_malloc_count = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TrieHandles g_TrieHandles;
|
||||||
|
typedef KTrie<TrieData> celltrie;
|
||||||
|
|
||||||
|
void triedata_dtor(TrieData *ptr)
|
||||||
|
{
|
||||||
|
ptr->freeCells();
|
||||||
|
}
|
||||||
|
// native Trie:TrieCreate();
|
||||||
|
static cell AMX_NATIVE_CALL TrieCreate(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return static_cast<cell>(g_TrieHandles.create());
|
||||||
|
}
|
||||||
|
|
||||||
|
// native Trie::TrieClear(Trie:handle);
|
||||||
|
static cell AMX_NATIVE_CALL TrieClear(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
t->run_destructor(triedata_dtor);
|
||||||
|
t->clear();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// native TrieSetCell(Trie:handle, const key[], any:value);
|
||||||
|
static cell AMX_NATIVE_CALL TrieSetCell(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TrieData *td = NULL;
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
|
if ((td = t->retrieve(key)) == NULL)
|
||||||
|
{
|
||||||
|
TrieData dummy;
|
||||||
|
t->insert(key, dummy);
|
||||||
|
|
||||||
|
td = t->retrieve(key);
|
||||||
|
|
||||||
|
// should never, ever happen
|
||||||
|
if (td == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Couldn't KTrie::retrieve(), handle: %d", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
td->setCell(params[3]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// native TrieSetString(Trie:handle, const key[], const data[]);
|
||||||
|
static cell AMX_NATIVE_CALL TrieSetString(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TrieData *td = NULL;
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
|
if ((td = t->retrieve(key)) == NULL)
|
||||||
|
{
|
||||||
|
TrieData dummy;
|
||||||
|
t->insert(key, dummy);
|
||||||
|
td = t->retrieve(key);
|
||||||
|
|
||||||
|
// should never, ever happen
|
||||||
|
if (td == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Couldn't KTrie::retrieve(), handle: %d", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
td->setString(get_amxaddr(amx, params[3]));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// native TrieSetArray(Trie:handle, const key[], const any:buffer[], buffsize)
|
||||||
|
static cell AMX_NATIVE_CALL TrieSetArray(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TrieData *td = NULL;
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
|
if ((td = t->retrieve(key)) == NULL)
|
||||||
|
{
|
||||||
|
TrieData dummy;
|
||||||
|
t->insert(key, dummy);
|
||||||
|
td = t->retrieve(key);
|
||||||
|
|
||||||
|
// should never, ever happen
|
||||||
|
if (td == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Couldn't KTrie::retrieve(), handle: %d", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
td->setArray(get_amxaddr(amx, params[3]), params[4]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// native bool:TrieGetCell(Trie:handle, const key[], &any:value);
|
||||||
|
static cell AMX_NATIVE_CALL TrieGetCell(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TrieData *td = NULL;
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
|
if ((td = t->retrieve(key)) == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cell *ptr = get_amxaddr(amx, params[3]);
|
||||||
|
if (!td->getCell(ptr))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// native bool:TrieGetString(Trie:handle, const key[], buff[], len);
|
||||||
|
static cell AMX_NATIVE_CALL TrieGetString(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TrieData *td = NULL;
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
|
if ((td = t->retrieve(key)) == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cell *ptr = get_amxaddr(amx, params[3]);
|
||||||
|
if (!td->getString(ptr, params[4]))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// native bool:TrieGetArray(Trie:handle, const key[], any:buff[], len);
|
||||||
|
static cell AMX_NATIVE_CALL TrieGetArray(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TrieData *td = NULL;
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
|
if ((td = t->retrieve(key)) == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cell *ptr = get_amxaddr(amx, params[3]);
|
||||||
|
if (!td->getArray(ptr, params[4]))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// native bool:TrieKeyExists(Trie:handle, const key[]);
|
||||||
|
static cell AMX_NATIVE_CALL TrieKeyExists(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
return t->retrieve(key) != NULL ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// native bool:TrieDeleteKey(Trie:handle, const key[]);
|
||||||
|
static cell AMX_NATIVE_CALL TrieDeleteKey(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
celltrie *t = g_TrieHandles.lookup(params[1]);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int len;
|
||||||
|
const char *key = get_amxstring(amx, params[2], 0, len);
|
||||||
|
TrieData *td = t->retrieve(key);
|
||||||
|
|
||||||
|
if (td != NULL)
|
||||||
|
{
|
||||||
|
td->freeCells();
|
||||||
|
}
|
||||||
|
return t->remove(key) ? 1 : 0;
|
||||||
|
}
|
||||||
|
//native TrieDestroy(&Trie:handle)
|
||||||
|
static cell AMX_NATIVE_CALL TrieDestroy(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
cell *ptr = get_amxaddr(amx, params[1]);
|
||||||
|
|
||||||
|
celltrie *t = g_TrieHandles.lookup(*ptr);
|
||||||
|
|
||||||
|
if (t == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
t->run_destructor(triedata_dtor);
|
||||||
|
if (g_TrieHandles.destroy(*ptr))
|
||||||
|
{
|
||||||
|
*ptr = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
#ifndef NDEBUG
|
||||||
|
static cell AMX_NATIVE_CALL TrieMallocCount(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return trie_malloc_count;
|
||||||
|
}
|
||||||
|
static cell AMX_NATIVE_CALL TrieFreeCount(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return trie_free_count;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
AMX_NATIVE_INFO trie_Natives[] =
|
||||||
|
{
|
||||||
|
{ "TrieCreate", TrieCreate },
|
||||||
|
{ "TrieClear", TrieClear },
|
||||||
|
|
||||||
|
{ "TrieSetCell", TrieSetCell },
|
||||||
|
{ "TrieSetString", TrieSetString },
|
||||||
|
{ "TrieSetArray", TrieSetArray },
|
||||||
|
|
||||||
|
{ "TrieGetCell", TrieGetCell },
|
||||||
|
{ "TrieGetString", TrieGetString },
|
||||||
|
{ "TrieGetArray", TrieGetArray },
|
||||||
|
|
||||||
|
{ "TrieDeleteKey", TrieDeleteKey },
|
||||||
|
{ "TrieKeyExists", TrieKeyExists },
|
||||||
|
{ "TrieDestroy", TrieDestroy },
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
{ "TrieMallocCount", TrieMallocCount },
|
||||||
|
{ "TrieFreeCount", TrieFreeCount },
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
211
amxmodx/trie_natives.h
Normal file
211
amxmodx/trie_natives.h
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
#ifndef _TRIE_NATIVES_H_
|
||||||
|
#define _TRIE_NATIVES_H_
|
||||||
|
|
||||||
|
#include "amxmodx.h"
|
||||||
|
#include "sm_trie_tpl.h"
|
||||||
|
#include "CVector.h"
|
||||||
|
|
||||||
|
#define TRIE_DATA_UNSET 0
|
||||||
|
#define TRIE_DATA_CELL 1
|
||||||
|
#define TRIE_DATA_STRING 2
|
||||||
|
#define TRIE_DATA_ARRAY 3
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
extern size_t trie_malloc_count;
|
||||||
|
extern size_t trie_free_count;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class TrieData
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
cell *m_data;
|
||||||
|
cell m_cell;
|
||||||
|
cell m_cellcount;
|
||||||
|
int m_type;
|
||||||
|
|
||||||
|
void needCells(cell cellcount)
|
||||||
|
{
|
||||||
|
if (m_cellcount < cellcount)
|
||||||
|
{
|
||||||
|
if (m_data != NULL)
|
||||||
|
{
|
||||||
|
free(m_data);
|
||||||
|
#ifndef NDEBUG
|
||||||
|
trie_free_count++;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
size_t neededbytes = cellcount * sizeof(cell);
|
||||||
|
m_data = static_cast<cell *>(malloc(neededbytes));
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
trie_malloc_count++;
|
||||||
|
#endif
|
||||||
|
m_cellcount = cellcount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
void freeCells()
|
||||||
|
{
|
||||||
|
if (m_data)
|
||||||
|
{
|
||||||
|
#ifndef NDEBUG
|
||||||
|
trie_free_count++;
|
||||||
|
#endif
|
||||||
|
free(m_data);
|
||||||
|
m_data = NULL;
|
||||||
|
}
|
||||||
|
m_cellcount = 0;
|
||||||
|
}
|
||||||
|
TrieData() : m_data(NULL), m_cell(0), m_cellcount(0), m_type(TRIE_DATA_UNSET) { }
|
||||||
|
TrieData(const TrieData &src) : m_data(src.m_data),
|
||||||
|
m_cell(src.m_cell),
|
||||||
|
m_cellcount(src.m_cellcount),
|
||||||
|
m_type(src.m_type) { }
|
||||||
|
~TrieData() { }
|
||||||
|
|
||||||
|
int getType() { return m_type; }
|
||||||
|
|
||||||
|
void setCell(cell value)
|
||||||
|
{
|
||||||
|
freeCells();
|
||||||
|
|
||||||
|
m_cell = value;
|
||||||
|
m_type = TRIE_DATA_CELL;
|
||||||
|
}
|
||||||
|
void setString(cell *value)
|
||||||
|
{
|
||||||
|
cell len = 0;
|
||||||
|
|
||||||
|
cell *p = value;
|
||||||
|
|
||||||
|
while (*p++ != 0)
|
||||||
|
{
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
len += 1; // zero terminator
|
||||||
|
needCells(len);
|
||||||
|
memcpy(m_data, value, sizeof(cell) * len);
|
||||||
|
|
||||||
|
m_type = TRIE_DATA_STRING;
|
||||||
|
}
|
||||||
|
void setArray(cell *value, cell size)
|
||||||
|
{
|
||||||
|
if (size <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
needCells(size);
|
||||||
|
memcpy(m_data, value, sizeof(cell) * size);
|
||||||
|
|
||||||
|
m_type = TRIE_DATA_ARRAY;
|
||||||
|
}
|
||||||
|
bool getCell(cell *out)
|
||||||
|
{
|
||||||
|
if (m_type == TRIE_DATA_CELL)
|
||||||
|
{
|
||||||
|
*out = m_cell;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool getString(cell *out, cell max)
|
||||||
|
{
|
||||||
|
if (m_type == TRIE_DATA_STRING && max >= 0)
|
||||||
|
{
|
||||||
|
memcpy(out, m_data, (max > m_cellcount ? m_cellcount : max) * sizeof(cell));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool getArray(cell *out, cell max)
|
||||||
|
{
|
||||||
|
if (m_type == TRIE_DATA_ARRAY && max >= 0)
|
||||||
|
{
|
||||||
|
memcpy(out, m_data, (max > m_cellcount ? m_cellcount : max) * sizeof(cell));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
freeCells();
|
||||||
|
m_type = TRIE_DATA_UNSET;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TrieHandles
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
CVector< KTrie< TrieData > *> m_tries;
|
||||||
|
|
||||||
|
public:
|
||||||
|
TrieHandles() { }
|
||||||
|
~TrieHandles()
|
||||||
|
{
|
||||||
|
this->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < m_tries.size(); i++)
|
||||||
|
{
|
||||||
|
if (m_tries[i] != NULL)
|
||||||
|
{
|
||||||
|
delete m_tries[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_tries.clear();
|
||||||
|
}
|
||||||
|
KTrie<TrieData> *lookup(int handle)
|
||||||
|
{
|
||||||
|
handle--;
|
||||||
|
|
||||||
|
if (handle < 0 || handle >= static_cast<int>(m_tries.size()))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_tries[handle];
|
||||||
|
}
|
||||||
|
int create()
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < m_tries.size(); i++)
|
||||||
|
{
|
||||||
|
if (m_tries[i] == NULL)
|
||||||
|
{
|
||||||
|
// reuse handle
|
||||||
|
m_tries[i] = new KTrie<TrieData>;
|
||||||
|
|
||||||
|
return static_cast<int>(i) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_tries.push_back(new KTrie<TrieData>);
|
||||||
|
return m_tries.size();
|
||||||
|
}
|
||||||
|
bool destroy(int handle)
|
||||||
|
{
|
||||||
|
handle--;
|
||||||
|
|
||||||
|
if (handle < 0 || handle >= static_cast<int>(m_tries.size()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_tries[handle] == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
delete m_tries[handle];
|
||||||
|
m_tries[handle] = NULL;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
extern TrieHandles g_TrieHandles;
|
||||||
|
extern AMX_NATIVE_INFO trie_Natives[];
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -32,7 +32,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
#if defined __linux__ && !defined _vsnprintf
|
#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf
|
||||||
#define _vsnprintf vsnprintf
|
#define _vsnprintf vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -157,8 +157,8 @@ void UTIL_IntToString(int value, char *output)
|
|||||||
|
|
||||||
if (tho)
|
if (tho)
|
||||||
{
|
{
|
||||||
aaa += sprintf(&output[aaa], words[tho]);
|
aaa += sprintf(&output[aaa], "%s", words[tho]);
|
||||||
aaa += sprintf(&output[aaa], words[29]);
|
aaa += sprintf(&output[aaa], "%s", words[29]);
|
||||||
value = value % 1000;
|
value = value % 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,8 +166,8 @@ void UTIL_IntToString(int value, char *output)
|
|||||||
|
|
||||||
if (hun)
|
if (hun)
|
||||||
{
|
{
|
||||||
aaa += sprintf(&output[aaa], words[hun]);
|
aaa += sprintf(&output[aaa], "%s", words[hun]);
|
||||||
aaa += sprintf(&output[aaa], words[28]);
|
aaa += sprintf(&output[aaa], "%s", words[28]);
|
||||||
value = value % 100;
|
value = value % 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,10 +175,10 @@ void UTIL_IntToString(int value, char *output)
|
|||||||
int unit = value % 10;
|
int unit = value % 10;
|
||||||
|
|
||||||
if (ten)
|
if (ten)
|
||||||
aaa += sprintf(&output[aaa], words[(ten > 1) ? (ten + 18) : (unit + 10)]);
|
aaa += sprintf(&output[aaa], "%s", words[(ten > 1) ? (ten + 18) : (unit + 10)]);
|
||||||
|
|
||||||
if (ten != 1 && (unit || (!value && !hun && !tho)))
|
if (ten != 1 && (unit || (!value && !hun && !tho)))
|
||||||
sprintf(&output[aaa], words[unit]);
|
sprintf(&output[aaa], "%s", words[unit]);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* UTIL_SplitHudMessage(const char *src)
|
char* UTIL_SplitHudMessage(const char *src)
|
||||||
@ -242,7 +242,7 @@ short FixedSigned16(float value, float scale)
|
|||||||
return (short)output;
|
return (short)output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage)
|
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage)
|
||||||
{
|
{
|
||||||
if (pEntity)
|
if (pEntity)
|
||||||
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity);
|
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity);
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
// Microsoft Visual C++ generated resource script.
|
// Microsoft Visual C++ generated resource script.
|
||||||
//
|
//
|
||||||
#include "resource.h"
|
|
||||||
|
|
||||||
#define APSTUDIO_READONLY_SYMBOLS
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
//
|
//
|
||||||
#include "winres.h"
|
#include "winres.h"
|
||||||
|
#include "svn_version.h"
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
@ -27,8 +26,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,7,6,1
|
FILEVERSION SVN_VERSION_DWORD
|
||||||
PRODUCTVERSION 1,7,6,1
|
PRODUCTVERSION SVN_VERSION_DWORD
|
||||||
FILEFLAGSMASK 0x17L
|
FILEFLAGSMASK 0x17L
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@ -45,12 +44,12 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "Comments", "AMX Mod X"
|
VALUE "Comments", "AMX Mod X"
|
||||||
VALUE "FileDescription", "AMX Mod X"
|
VALUE "FileDescription", "AMX Mod X"
|
||||||
VALUE "FileVersion", "1.76a"
|
VALUE "FileVersion", SVN_VERSION_STRING
|
||||||
VALUE "InternalName", "amxmodx"
|
VALUE "InternalName", "amxmodx"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2006, AMX Mod X Dev Team"
|
VALUE "LegalCopyright", "Copyright (c) 2004-2007, AMX Mod X Dev Team"
|
||||||
VALUE "OriginalFilename", "amxmodx_mm.dll"
|
VALUE "OriginalFilename", "amxmodx_mm.dll"
|
||||||
VALUE "ProductName", "AMX Mod X"
|
VALUE "ProductName", "AMX Mod X"
|
||||||
VALUE "ProductVersion", "1.76a"
|
VALUE "ProductVersion", SVN_VERSION_PRODUCT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
BIN
amxmodx/zlib/libz-darwin.a
Normal file
BIN
amxmodx/zlib/libz-darwin.a
Normal file
Binary file not shown.
@ -1,9 +1,9 @@
|
|||||||
/* zconf.h -- configuration of the zlib compression library
|
/* zconf.h -- configuration of the zlib compression library
|
||||||
* Copyright (C) 1995-2003 Jean-loup Gailly.
|
* Copyright (C) 1995-2005 Jean-loup Gailly.
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* @(#) $Id$ */
|
/* @(#) $Id: zconf.h 3734 2008-08-16 09:48:39Z damagedsoul $ */
|
||||||
|
|
||||||
#ifndef ZCONF_H
|
#ifndef ZCONF_H
|
||||||
#define ZCONF_H
|
#define ZCONF_H
|
||||||
@ -13,43 +13,50 @@
|
|||||||
* compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
|
* compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
|
||||||
*/
|
*/
|
||||||
#ifdef Z_PREFIX
|
#ifdef Z_PREFIX
|
||||||
# define deflateInit_ z_deflateInit_
|
# define deflateInit_ z_deflateInit_
|
||||||
# define deflate z_deflate
|
# define deflate z_deflate
|
||||||
# define deflateEnd z_deflateEnd
|
# define deflateEnd z_deflateEnd
|
||||||
# define inflateInit_ z_inflateInit_
|
# define inflateInit_ z_inflateInit_
|
||||||
# define inflate z_inflate
|
# define inflate z_inflate
|
||||||
# define inflateEnd z_inflateEnd
|
# define inflateEnd z_inflateEnd
|
||||||
# define deflateInit2_ z_deflateInit2_
|
# define deflateInit2_ z_deflateInit2_
|
||||||
# define deflateSetDictionary z_deflateSetDictionary
|
# define deflateSetDictionary z_deflateSetDictionary
|
||||||
# define deflateCopy z_deflateCopy
|
# define deflateCopy z_deflateCopy
|
||||||
# define deflateReset z_deflateReset
|
# define deflateReset z_deflateReset
|
||||||
# define deflatePrime z_deflatePrime
|
# define deflateParams z_deflateParams
|
||||||
# define deflateParams z_deflateParams
|
# define deflateBound z_deflateBound
|
||||||
# define deflateBound z_deflateBound
|
# define deflatePrime z_deflatePrime
|
||||||
# define inflateInit2_ z_inflateInit2_
|
# define inflateInit2_ z_inflateInit2_
|
||||||
# define inflateSetDictionary z_inflateSetDictionary
|
# define inflateSetDictionary z_inflateSetDictionary
|
||||||
# define inflateSync z_inflateSync
|
# define inflateSync z_inflateSync
|
||||||
# define inflateSyncPoint z_inflateSyncPoint
|
# define inflateSyncPoint z_inflateSyncPoint
|
||||||
# define inflateCopy z_inflateCopy
|
# define inflateCopy z_inflateCopy
|
||||||
# define inflateReset z_inflateReset
|
# define inflateReset z_inflateReset
|
||||||
# define compress z_compress
|
# define inflateBack z_inflateBack
|
||||||
# define compress2 z_compress2
|
# define inflateBackEnd z_inflateBackEnd
|
||||||
# define compressBound z_compressBound
|
# define compress z_compress
|
||||||
# define uncompress z_uncompress
|
# define compress2 z_compress2
|
||||||
# define adler32 z_adler32
|
# define compressBound z_compressBound
|
||||||
# define crc32 z_crc32
|
# define uncompress z_uncompress
|
||||||
# define get_crc_table z_get_crc_table
|
# define adler32 z_adler32
|
||||||
|
# define crc32 z_crc32
|
||||||
|
# define get_crc_table z_get_crc_table
|
||||||
|
# define zError z_zError
|
||||||
|
|
||||||
# define Byte z_Byte
|
# define alloc_func z_alloc_func
|
||||||
# define uInt z_uInt
|
# define free_func z_free_func
|
||||||
# define uLong z_uLong
|
# define in_func z_in_func
|
||||||
# define Bytef z_Bytef
|
# define out_func z_out_func
|
||||||
# define charf z_charf
|
# define Byte z_Byte
|
||||||
# define intf z_intf
|
# define uInt z_uInt
|
||||||
# define uIntf z_uIntf
|
# define uLong z_uLong
|
||||||
# define uLongf z_uLongf
|
# define Bytef z_Bytef
|
||||||
# define voidpf z_voidpf
|
# define charf z_charf
|
||||||
# define voidp z_voidp
|
# define intf z_intf
|
||||||
|
# define uIntf z_uIntf
|
||||||
|
# define uLongf z_uLongf
|
||||||
|
# define voidpf z_voidpf
|
||||||
|
# define voidp z_voidp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__MSDOS__) && !defined(MSDOS)
|
#if defined(__MSDOS__) && !defined(MSDOS)
|
||||||
@ -61,8 +68,10 @@
|
|||||||
#if defined(_WINDOWS) && !defined(WINDOWS)
|
#if defined(_WINDOWS) && !defined(WINDOWS)
|
||||||
# define WINDOWS
|
# define WINDOWS
|
||||||
#endif
|
#endif
|
||||||
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
|
#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
|
||||||
# define WIN32
|
# ifndef WIN32
|
||||||
|
# define WIN32
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
|
#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
|
||||||
# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
|
# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
|
||||||
@ -281,7 +290,7 @@ typedef uLong FAR uLongf;
|
|||||||
# ifdef VMS
|
# ifdef VMS
|
||||||
# include <unixio.h> /* for off_t */
|
# include <unixio.h> /* for off_t */
|
||||||
# endif
|
# endif
|
||||||
# define z_off_t off_t
|
# define z_off_t off_t
|
||||||
#endif
|
#endif
|
||||||
#ifndef SEEK_SET
|
#ifndef SEEK_SET
|
||||||
# define SEEK_SET 0 /* Seek from beginning of file. */
|
# define SEEK_SET 0 /* Seek from beginning of file. */
|
||||||
@ -289,11 +298,11 @@ typedef uLong FAR uLongf;
|
|||||||
# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
|
# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
|
||||||
#endif
|
#endif
|
||||||
#ifndef z_off_t
|
#ifndef z_off_t
|
||||||
# define z_off_t long
|
# define z_off_t long
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__OS400__)
|
#if defined(__OS400__)
|
||||||
#define NO_vsnprintf
|
# define NO_vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__MVS__)
|
#if defined(__MVS__)
|
||||||
|
Binary file not shown.
@ -1,46 +1,107 @@
|
|||||||
#(C)2004-2005 AMX Mod X Development Team
|
# (C)2004-2013 AMX Mod X Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
|
#####################################
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
|
#####################################
|
||||||
|
|
||||||
OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
PROJECT = amxxpc
|
||||||
DEBUG_FLAGS = -g -ggdb3
|
|
||||||
CPP = gcc-4.1
|
|
||||||
BINARY = amxxpc
|
|
||||||
|
|
||||||
OBJECTS = amx.cpp amxxpc.cpp Binary.cpp
|
OBJECTS = amx.cpp amxxpc.cpp Binary.cpp
|
||||||
|
|
||||||
LINK = -lz /lib/libstdc++.a
|
##############################################
|
||||||
|
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
||||||
|
##############################################
|
||||||
|
|
||||||
INCLUDE = -I. -L.
|
C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
|
||||||
|
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
||||||
|
C_GCC4_FLAGS = -fvisibility=hidden
|
||||||
|
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
||||||
|
CPP = gcc
|
||||||
|
CPP_OSX = clang
|
||||||
|
|
||||||
|
LINK =
|
||||||
|
|
||||||
|
INCLUDE = -I.
|
||||||
|
|
||||||
|
################################################
|
||||||
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
|
################################################
|
||||||
|
|
||||||
|
OS := $(shell uname -s)
|
||||||
|
|
||||||
|
ifeq "$(OS)" "Darwin"
|
||||||
|
CPP = $(CPP_OSX)
|
||||||
|
LIB_SUFFIX = _osx
|
||||||
|
CFLAGS += -DOSX
|
||||||
|
LINK += -lstdc++ -mmacosx-version-min=10.5 -lz-darwin
|
||||||
|
else
|
||||||
|
LIB_SUFFIX =
|
||||||
|
CFLAGS += -DLINUX
|
||||||
|
LINK += -lz /lib32/libstdc++.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
LINK += -m32 -lm -ldl -L.
|
||||||
|
|
||||||
|
CFLAGS += -DAMX_ANSIONLY -DHAVE_STDINT_H -fno-strict-aliasing \
|
||||||
|
-m32 -Wall -Werror
|
||||||
|
CPPFLAGS += -fexceptions -fno-rtti
|
||||||
|
|
||||||
|
BINARY = $(PROJECT)$(LIB_SUFFIX)
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
ifeq "$(DEBUG)" "true"
|
||||||
BIN_DIR = Debug
|
BIN_DIR = Debug
|
||||||
CFLAGS = $(DEBUG_FLAGS)
|
CFLAGS += $(C_DEBUG_FLAGS)
|
||||||
else
|
else
|
||||||
BIN_DIR = Release
|
BIN_DIR = Release
|
||||||
CFLAGS = $(OPT_FLAGS)
|
CFLAGS += $(C_OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS += -DLINUX -DNDEBUG -Wno-deprecated -fexceptions -DHAVE_STDINT_H -DAMX_ANSIONLY -fno-rtti -static-libgcc
|
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
|
||||||
|
|
||||||
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
ifeq "$(IS_CLANG)" "1"
|
||||||
|
CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
|
||||||
|
CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
|
||||||
|
else
|
||||||
|
CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
|
CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Clang || GCC >= 4
|
||||||
|
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
|
||||||
|
CFLAGS += $(C_GCC4_FLAGS)
|
||||||
|
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Clang >= 3 || GCC >= 4.7
|
||||||
|
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
|
||||||
|
CFLAGS += -Wno-delete-non-virtual-dtor
|
||||||
|
endif
|
||||||
|
|
||||||
|
# OS is Linux and not using clang
|
||||||
|
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
|
||||||
|
LINK += -static-libgcc
|
||||||
|
endif
|
||||||
|
|
||||||
|
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
||||||
|
|
||||||
|
# This will break if we include other Makefiles, but is fine for now. It allows
|
||||||
|
# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
|
||||||
|
# or other changes without mucking up the original.
|
||||||
|
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
||||||
|
|
||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p $(BIN_DIR)
|
mkdir -p $(BIN_DIR)
|
||||||
$(MAKE) amxxpc
|
$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
|
||||||
|
|
||||||
amxxpc: $(OBJ_LINUX)
|
$(PROJECT): $(OBJ_BIN)
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf Release/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf Release/$(BINARY)
|
rm -f $(BIN_DIR)/$(BINARY)
|
||||||
rm -rf Debug/*.o
|
|
||||||
rm -rf Debug/$(BINARY)
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amx.cpp 1728 2005-07-25 00:01:54Z dvander $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if BUILD_PLATFORM == WINDOWS && BUILD_TYPE == RELEASE && BUILD_COMPILER == MSVC && PAWN_CELL_SIZE == 64
|
#if BUILD_PLATFORM == WINDOWS && BUILD_TYPE == RELEASE && BUILD_COMPILER == MSVC && PAWN_CELL_SIZE == 64
|
||||||
@ -42,7 +42,7 @@
|
|||||||
#include <stddef.h> /* for wchar_t */
|
#include <stddef.h> /* for wchar_t */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "osdefs.h"
|
#include "osdefs.h"
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#if !defined AMX_NODYNALOAD
|
#if !defined AMX_NODYNALOAD
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
@ -815,12 +815,12 @@ static void expand(unsigned char *code, long codesize, long memsize)
|
|||||||
int AMXAPI amx_Init(AMX *amx,void *program)
|
int AMXAPI amx_Init(AMX *amx,void *program)
|
||||||
{
|
{
|
||||||
AMX_HEADER *hdr;
|
AMX_HEADER *hdr;
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
||||||
char libname[sNAMEMAX+8]; /* +1 for '\0', +3 for 'amx' prefix, +4 for extension */
|
char libname[sNAMEMAX+8]; /* +1 for '\0', +3 for 'amx' prefix, +4 for extension */
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
typedef int (FAR WINAPI *AMX_ENTRY)(AMX _FAR *amx);
|
typedef int (FAR WINAPI *AMX_ENTRY)(AMX _FAR *amx);
|
||||||
HINSTANCE hlib;
|
HINSTANCE hlib;
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
typedef int (*AMX_ENTRY)(AMX *amx);
|
typedef int (*AMX_ENTRY)(AMX *amx);
|
||||||
void *hlib;
|
void *hlib;
|
||||||
#endif
|
#endif
|
||||||
@ -965,7 +965,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
amx_BrowseRelocate(amx);
|
amx_BrowseRelocate(amx);
|
||||||
|
|
||||||
/* load any extension modules that the AMX refers to */
|
/* load any extension modules that the AMX refers to */
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
||||||
for (i=0; i<numlibraries; i++) {
|
for (i=0; i<numlibraries; i++) {
|
||||||
@ -981,7 +981,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
if (hlib<=HINSTANCE_ERROR)
|
if (hlib<=HINSTANCE_ERROR)
|
||||||
hlib=NULL;
|
hlib=NULL;
|
||||||
#endif
|
#endif
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
strcat(libname,".so");
|
strcat(libname,".so");
|
||||||
hlib=dlopen(libname,RTLD_NOW);
|
hlib=dlopen(libname,RTLD_NOW);
|
||||||
#endif
|
#endif
|
||||||
@ -995,7 +995,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
strcat(funcname,"Init");
|
strcat(funcname,"Init");
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
libinit=(AMX_ENTRY)GetProcAddress(hlib,funcname);
|
libinit=(AMX_ENTRY)GetProcAddress(hlib,funcname);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
libinit=(AMX_ENTRY)dlsym(hlib,funcname);
|
libinit=(AMX_ENTRY)dlsym(hlib,funcname);
|
||||||
#endif
|
#endif
|
||||||
if (libinit!=NULL)
|
if (libinit!=NULL)
|
||||||
@ -1029,7 +1029,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
return !VirtualProtect(addr, len, p, &prev);
|
return !VirtualProtect(addr, len, p, &prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
|
|
||||||
/* Linux already has mprotect() */
|
/* Linux already has mprotect() */
|
||||||
|
|
||||||
@ -1104,10 +1104,10 @@ int AMXAPI amx_InitJIT(AMX *amx,void *compiled_program,void *reloc_table)
|
|||||||
#if defined AMX_CLEANUP
|
#if defined AMX_CLEANUP
|
||||||
int AMXAPI amx_Cleanup(AMX *amx)
|
int AMXAPI amx_Cleanup(AMX *amx)
|
||||||
{
|
{
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
typedef int (*AMX_ENTRY)(AMX *amx);
|
typedef int (*AMX_ENTRY)(AMX *amx);
|
||||||
#endif
|
#endif
|
||||||
AMX_HEADER *hdr;
|
AMX_HEADER *hdr;
|
||||||
@ -1117,7 +1117,7 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* unload all extension modules */
|
/* unload all extension modules */
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
assert(hdr->magic==AMX_MAGIC);
|
assert(hdr->magic==AMX_MAGIC);
|
||||||
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
||||||
@ -1130,14 +1130,14 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
strcat(funcname,"Cleanup");
|
strcat(funcname,"Cleanup");
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
||||||
#endif
|
#endif
|
||||||
if (libcleanup!=NULL)
|
if (libcleanup!=NULL)
|
||||||
libcleanup(amx);
|
libcleanup(amx);
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
FreeLibrary((HINSTANCE)lib->address);
|
FreeLibrary((HINSTANCE)lib->address);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
dlclose((void*)lib->address);
|
dlclose((void*)lib->address);
|
||||||
#endif
|
#endif
|
||||||
} /* if */
|
} /* if */
|
||||||
@ -1666,7 +1666,7 @@ int AMXAPI amx_PushString(AMX *amx, cell *amx_addr, cell **phys_addr, const char
|
|||||||
* fast "indirect threaded" interpreter.
|
* fast "indirect threaded" interpreter.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NEXT(cip) goto **cip++
|
#define NEXT(cip) goto *(const void *)*cip++
|
||||||
|
|
||||||
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index)
|
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index)
|
||||||
{
|
{
|
||||||
@ -1846,14 +1846,14 @@ static const void * const amx_opcodelist[] = {
|
|||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_load_i:
|
op_load_i:
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri= * (cell *)(data+(int)pri);
|
pri= * (cell *)(data+(int)pri);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_lodb_i:
|
op_lodb_i:
|
||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
switch (offs) {
|
switch (offs) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -1919,14 +1919,14 @@ static const void * const amx_opcodelist[] = {
|
|||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_stor_i:
|
op_stor_i:
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
*(cell *)(data+(int)alt)=pri;
|
*(cell *)(data+(int)alt)=pri;
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_strb_i:
|
op_strb_i:
|
||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
switch (offs) {
|
switch (offs) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -1943,7 +1943,7 @@ static const void * const amx_opcodelist[] = {
|
|||||||
op_lidx:
|
op_lidx:
|
||||||
offs=pri*sizeof(cell)+alt;
|
offs=pri*sizeof(cell)+alt;
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if (offs>=hea && offs<stk || (ucell)offs>=(ucell)amx->stp)
|
if ((offs>=hea && offs<stk) || (ucell)offs>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri= * (cell *)(data+(int)offs);
|
pri= * (cell *)(data+(int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
@ -1951,7 +1951,7 @@ static const void * const amx_opcodelist[] = {
|
|||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
offs=(pri << (int)offs)+alt;
|
offs=(pri << (int)offs)+alt;
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if (offs>=hea && offs<stk || (ucell)offs>=(ucell)amx->stp)
|
if ((offs>=hea && offs<stk) || (ucell)offs>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri= * (cell *)(data+(int)offs);
|
pri= * (cell *)(data+(int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
@ -2388,13 +2388,13 @@ static const void * const amx_opcodelist[] = {
|
|||||||
/* verify top & bottom memory addresses, for both source and destination
|
/* verify top & bottom memory addresses, for both source and destination
|
||||||
* addresses
|
* addresses
|
||||||
*/
|
*/
|
||||||
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if ((pri+offs)>hea && (pri+offs)<stk || (ucell)(pri+offs)>(ucell)amx->stp)
|
if (((pri+offs)>hea && (pri+offs)<stk) || (ucell)(pri+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
|
if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
memcpy(data+(int)alt, data+(int)pri, (int)offs);
|
memcpy(data+(int)alt, data+(int)pri, (int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
@ -2403,22 +2403,22 @@ static const void * const amx_opcodelist[] = {
|
|||||||
/* verify top & bottom memory addresses, for both source and destination
|
/* verify top & bottom memory addresses, for both source and destination
|
||||||
* addresses
|
* addresses
|
||||||
*/
|
*/
|
||||||
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if ((pri+offs)>hea && (pri+offs)<stk || (ucell)(pri+offs)>(ucell)amx->stp)
|
if (((pri+offs)>hea && (pri+offs)<stk) || (ucell)(pri+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
|
if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri=memcmp(data+(int)alt, data+(int)pri, (int)offs);
|
pri=memcmp(data+(int)alt, data+(int)pri, (int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_fill:
|
op_fill:
|
||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
/* verify top & bottom memory addresses */
|
/* verify top & bottom memory addresses */
|
||||||
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
|
if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
for (i=(int)alt; offs>=(int)sizeof(cell); i+=sizeof(cell), offs-=sizeof(cell))
|
for (i=(int)alt; offs>=(int)sizeof(cell); i+=sizeof(cell), offs-=sizeof(cell))
|
||||||
*(cell *)(data+i) = pri;
|
*(cell *)(data+i) = pri;
|
||||||
@ -3592,7 +3592,7 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr)
|
|||||||
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
||||||
|
|
||||||
assert(phys_addr!=NULL);
|
assert(phys_addr!=NULL);
|
||||||
if (amx_addr>=amx->hea && amx_addr<amx->stk || amx_addr<0 || amx_addr>=amx->stp) {
|
if ((amx_addr>=amx->hea && amx_addr<amx->stk) || amx_addr<0 || amx_addr>=amx->stp) {
|
||||||
*phys_addr=NULL;
|
*phys_addr=NULL;
|
||||||
return AMX_ERR_MEMACCESS;
|
return AMX_ERR_MEMACCESS;
|
||||||
} /* if */
|
} /* if */
|
||||||
|
@ -18,13 +18,13 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amx.h 3736 2008-08-16 20:13:12Z damagedsoul $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined FREEBSD && !defined __FreeBSD__
|
#if defined FREEBSD && !defined __FreeBSD__
|
||||||
#define __FreeBSD__
|
#define __FreeBSD__
|
||||||
#endif
|
#endif
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
#if defined HAVE_STDINT_H
|
#if defined HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#else
|
#else
|
||||||
#if defined __LCC__ || defined __DMC__ || defined LINUX
|
#if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
|
||||||
#if defined HAVE_INTTYPES_H
|
#if defined HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#else
|
#else
|
||||||
@ -188,7 +188,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -212,7 +212,7 @@ typedef struct tagAMX_NATIVE_INFO {
|
|||||||
|
|
||||||
typedef struct tagAMX_FUNCSTUB {
|
typedef struct tagAMX_FUNCSTUB {
|
||||||
ucell address PACKED;
|
ucell address PACKED;
|
||||||
char name[sEXPMAX+1] PACKED;
|
char name[sEXPMAX+1];
|
||||||
} PACKED AMX_FUNCSTUB;
|
} PACKED AMX_FUNCSTUB;
|
||||||
|
|
||||||
typedef struct tagFUNCSTUBNT {
|
typedef struct tagFUNCSTUBNT {
|
||||||
@ -260,8 +260,8 @@ typedef struct tagAMX {
|
|||||||
typedef struct tagAMX_HEADER {
|
typedef struct tagAMX_HEADER {
|
||||||
int32_t size PACKED; /* size of the "file" */
|
int32_t size PACKED; /* size of the "file" */
|
||||||
uint16_t magic PACKED; /* signature */
|
uint16_t magic PACKED; /* signature */
|
||||||
char file_version PACKED; /* file format version */
|
char file_version; /* file format version */
|
||||||
char amx_version PACKED; /* required version of the AMX */
|
char amx_version; /* required version of the AMX */
|
||||||
int16_t flags PACKED;
|
int16_t flags PACKED;
|
||||||
int16_t defsize PACKED; /* size of a definition record */
|
int16_t defsize PACKED; /* size of a definition record */
|
||||||
int32_t cod PACKED; /* initial value of COD - code block */
|
int32_t cod PACKED; /* initial value of COD - code block */
|
||||||
@ -416,7 +416,7 @@ int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value);
|
|||||||
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id$
|
* Version: $Id: amxdbg.h 3736 2008-08-16 20:13:12Z damagedsoul $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AMXDBG_H_INCLUDED
|
#ifndef AMXDBG_H_INCLUDED
|
||||||
@ -49,7 +49,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -65,8 +65,8 @@ extern "C" {
|
|||||||
typedef struct tagAMX_DBG_HDR {
|
typedef struct tagAMX_DBG_HDR {
|
||||||
int32_t size PACKED; /* size of the debug information chunk */
|
int32_t size PACKED; /* size of the debug information chunk */
|
||||||
uint16_t magic PACKED; /* signature, must be 0xf1ef */
|
uint16_t magic PACKED; /* signature, must be 0xf1ef */
|
||||||
char file_version PACKED; /* file format version */
|
char file_version; /* file format version */
|
||||||
char amx_version PACKED; /* required version of the AMX */
|
char amx_version; /* required version of the AMX */
|
||||||
int16_t flags PACKED; /* currently unused */
|
int16_t flags PACKED; /* currently unused */
|
||||||
int16_t files PACKED; /* number of entries in the "file" table */
|
int16_t files PACKED; /* number of entries in the "file" table */
|
||||||
int16_t lines PACKED; /* number of entries in the "line" table */
|
int16_t lines PACKED; /* number of entries in the "line" table */
|
||||||
@ -74,51 +74,51 @@ typedef struct tagAMX_DBG_HDR {
|
|||||||
int16_t tags PACKED; /* number of entries in the "tag" table */
|
int16_t tags PACKED; /* number of entries in the "tag" table */
|
||||||
int16_t automatons PACKED; /* number of entries in the "automaton" table */
|
int16_t automatons PACKED; /* number of entries in the "automaton" table */
|
||||||
int16_t states PACKED; /* number of entries in the "state" table */
|
int16_t states PACKED; /* number of entries in the "state" table */
|
||||||
} AMX_DBG_HDR PACKED;
|
} AMX_DBG_HDR;
|
||||||
#define AMX_DBG_MAGIC 0xf1ef
|
#define AMX_DBG_MAGIC 0xf1ef
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_FILE {
|
typedef struct tagAMX_DBG_FILE {
|
||||||
ucell address PACKED; /* address in the code segment where generated code (for this file) starts */
|
ucell address PACKED; /* address in the code segment where generated code (for this file) starts */
|
||||||
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
const char name[1]; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_FILE PACKED;
|
} AMX_DBG_FILE;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_LINE {
|
typedef struct tagAMX_DBG_LINE {
|
||||||
ucell address PACKED; /* address in the code segment where generated code (for this line) starts */
|
ucell address PACKED; /* address in the code segment where generated code (for this line) starts */
|
||||||
int32_t line PACKED; /* line number */
|
int32_t line PACKED; /* line number */
|
||||||
} AMX_DBG_LINE PACKED;
|
} AMX_DBG_LINE;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_SYMBOL {
|
typedef struct tagAMX_DBG_SYMBOL {
|
||||||
ucell address PACKED; /* address in the data segment or relative to the frame */
|
ucell address PACKED; /* address in the data segment or relative to the frame */
|
||||||
int16_t tag PACKED; /* tag for the symbol */
|
int16_t tag PACKED; /* tag for the symbol */
|
||||||
ucell codestart PACKED; /* address in the code segment from which this symbol is valid (in scope) */
|
ucell codestart PACKED; /* address in the code segment from which this symbol is valid (in scope) */
|
||||||
ucell codeend PACKED; /* address in the code segment until which this symbol is valid (in scope) */
|
ucell codeend PACKED; /* address in the code segment until which this symbol is valid (in scope) */
|
||||||
char ident PACKED; /* kind of symbol (function/variable) */
|
char ident; /* kind of symbol (function/variable) */
|
||||||
char vclass PACKED; /* class of symbol (global/local) */
|
char vclass; /* class of symbol (global/local) */
|
||||||
int16_t dim PACKED; /* number of dimensions */
|
int16_t dim PACKED; /* number of dimensions */
|
||||||
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
const char name[1]; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_SYMBOL PACKED;
|
} AMX_DBG_SYMBOL;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_SYMDIM {
|
typedef struct tagAMX_DBG_SYMDIM {
|
||||||
int16_t tag PACKED; /* tag for the array dimension */
|
int16_t tag PACKED; /* tag for the array dimension */
|
||||||
ucell size PACKED; /* size of the array dimension */
|
ucell size PACKED; /* size of the array dimension */
|
||||||
} AMX_DBG_SYMDIM PACKED;
|
} AMX_DBG_SYMDIM;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_TAG {
|
typedef struct tagAMX_DBG_TAG {
|
||||||
int16_t tag PACKED; /* tag id */
|
int16_t tag PACKED; /* tag id */
|
||||||
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
const char name[1]; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_TAG PACKED;
|
} AMX_DBG_TAG;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_MACHINE {
|
typedef struct tagAMX_DBG_MACHINE {
|
||||||
int16_t automaton PACKED; /* automaton id */
|
int16_t automaton PACKED; /* automaton id */
|
||||||
ucell address PACKED; /* address of state variable */
|
ucell address PACKED; /* address of state variable */
|
||||||
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
const char name[1]; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_MACHINE PACKED;
|
} AMX_DBG_MACHINE;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_STATE {
|
typedef struct tagAMX_DBG_STATE {
|
||||||
int16_t state PACKED; /* state id */
|
int16_t state PACKED; /* state id */
|
||||||
int16_t automaton PACKED; /* automaton id */
|
int16_t automaton PACKED; /* automaton id */
|
||||||
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
const char name[1]; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_STATE PACKED;
|
} AMX_DBG_STATE;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG {
|
typedef struct tagAMX_DBG {
|
||||||
AMX_DBG_HDR _FAR *hdr PACKED; /* points to the AMX_DBG header */
|
AMX_DBG_HDR _FAR *hdr PACKED; /* points to the AMX_DBG header */
|
||||||
@ -128,7 +128,7 @@ typedef struct tagAMX_DBG {
|
|||||||
AMX_DBG_TAG _FAR **tagtbl PACKED;
|
AMX_DBG_TAG _FAR **tagtbl PACKED;
|
||||||
AMX_DBG_MACHINE _FAR **automatontbl PACKED;
|
AMX_DBG_MACHINE _FAR **automatontbl PACKED;
|
||||||
AMX_DBG_STATE _FAR **statetbl PACKED;
|
AMX_DBG_STATE _FAR **statetbl PACKED;
|
||||||
} AMX_DBG PACKED;
|
} AMX_DBG;
|
||||||
|
|
||||||
#if !defined iVARIABLE
|
#if !defined iVARIABLE
|
||||||
#define iVARIABLE 1 /* cell that has an address and that can be fetched directly (lvalue) */
|
#define iVARIABLE 1 /* cell that has an address and that can be fetched directly (lvalue) */
|
||||||
@ -156,7 +156,7 @@ int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX
|
|||||||
|
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#ifdef __linux__
|
#if defined(__linux__) | defined (__APPLE__)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#else
|
#else
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -12,6 +12,13 @@
|
|||||||
#include "amxxpc.h"
|
#include "amxxpc.h"
|
||||||
#include "Binary.h"
|
#include "Binary.h"
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
// MSVC8 - replace POSIX functions with ISO C++ conformant ones as they are deprecated
|
||||||
|
#if _MSC_VER >= 1400
|
||||||
|
#define unlink _unlink
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
static PRINTF pc_printf = NULL;
|
static PRINTF pc_printf = NULL;
|
||||||
|
|
||||||
void ReadFileIntoPl(abl *pl, FILE *fp);
|
void ReadFileIntoPl(abl *pl, FILE *fp);
|
||||||
@ -22,28 +29,29 @@ void WriteBh(BinaryWriter *bw, BinPlugin *bh);
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct abl pl32;
|
struct abl pl32;
|
||||||
struct abl pl64;
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
printf("debug clamp\n");
|
printf("debug clamp\n");
|
||||||
getchar();
|
getchar();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__)
|
||||||
HINSTANCE lib = NULL;
|
HINSTANCE lib = NULL;
|
||||||
if (FileExists("./amxxpc32.so"))
|
if (FileExists("./amxxpc32.so"))
|
||||||
lib = dlmount("./amxxpc32.so");
|
lib = dlmount("./amxxpc32.so");
|
||||||
else
|
else
|
||||||
lib = dlmount("amxxpc32.so");
|
lib = dlmount("amxxpc32.so");
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
HINSTANCE lib = dlmount("amxxpc32.dylib");
|
||||||
#else
|
#else
|
||||||
HINSTANCE lib = dlmount("amxxpc32.dll");
|
HINSTANCE lib = dlmount("amxxpc32.dll");
|
||||||
#endif
|
#endif
|
||||||
if (!lib)
|
if (!lib)
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
printf("32bit compiler failed to instantiate: %s\n", dlerror());
|
printf("compiler failed to instantiate: %s\n", dlerror());
|
||||||
#else
|
#else
|
||||||
printf("32bit compiler failed to instantiate: %d\n", GetLastError());
|
printf("compiler failed to instantiate: %d\n", GetLastError());
|
||||||
#endif
|
#endif
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
@ -53,16 +61,16 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (!sc32 || !pc_printf)
|
if (!sc32 || !pc_printf)
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
printf("32bit compiler failed to link: %p.\n",sc32);
|
printf("compiler failed to link: %p.\n",sc32);
|
||||||
#else
|
#else
|
||||||
printf("32bit compiler failed to link: %d.\n", GetLastError());
|
printf("compiler failed to link: %d.\n", GetLastError());
|
||||||
#endif
|
#endif
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
pc_printf("Welcome to the AMX Mod X %s Compiler.\n", VERSION_STRING);
|
pc_printf("Welcome to the AMX Mod X %s Compiler.\n", VERSION_STRING);
|
||||||
pc_printf("Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team\n\n");
|
pc_printf("Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team\n\n");
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
{
|
{
|
||||||
@ -105,61 +113,12 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
unlink(file);
|
unlink(file);
|
||||||
|
|
||||||
HINSTANCE lib64 = NULL;
|
|
||||||
#ifdef __linux__
|
|
||||||
if (FileExists("./amxxpc64.so"))
|
|
||||||
lib64 = dlmount("./amxxpc64.so");
|
|
||||||
else
|
|
||||||
lib64 = dlmount("amxxpc64.so");
|
|
||||||
#else
|
|
||||||
lib64 = dlmount("amxxpc64.dll");
|
|
||||||
#endif
|
|
||||||
if (!lib64)
|
|
||||||
{
|
|
||||||
pc_printf("64bit compiler failed to instantiate.\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
COMPILER sc64 = (COMPILER)dlsym(lib64, "Compile64");
|
|
||||||
|
|
||||||
if (!sc64)
|
|
||||||
{
|
|
||||||
#ifdef __linux__
|
|
||||||
pc_printf("64bit compiler failed to link: %s.\n", dlerror());
|
|
||||||
#else
|
|
||||||
pc_printf("64bit compiler failed to link: %d.\n", GetLastError());
|
|
||||||
#endif
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
sc64(argc, argv);
|
|
||||||
|
|
||||||
dlclose(lib64);
|
|
||||||
|
|
||||||
if (file == NULL)
|
|
||||||
{
|
|
||||||
pc_printf("Could not locate the output file on second pass.\n");
|
|
||||||
exit(0);
|
|
||||||
} else {
|
|
||||||
FILE *fp = fopen(file, "rb");
|
|
||||||
if (fp == NULL)
|
|
||||||
{
|
|
||||||
pc_printf("Could not locate output file on second pass (compile failed).\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
ReadFileIntoPl(&pl64, fp);
|
|
||||||
pl64.cellsize = 8;
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
// COMPRSSION
|
// COMPRSSION
|
||||||
/////////////
|
/////////////
|
||||||
|
|
||||||
CompressPl(&pl32);
|
CompressPl(&pl32);
|
||||||
|
|
||||||
CompressPl(&pl64);
|
|
||||||
|
|
||||||
char *newfile = new char[strlen(file)+3];
|
char *newfile = new char[strlen(file)+3];
|
||||||
strcpy(newfile, file);
|
strcpy(newfile, file);
|
||||||
if (!strstr(file, ".amxx") && !strstr(file, ".AMXX"))
|
if (!strstr(file, ".amxx") && !strstr(file, ".AMXX"))
|
||||||
@ -172,34 +131,33 @@ int main(int argc, char **argv)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
BinPlugin bh32, bh64;
|
BinPlugin bh32;
|
||||||
|
|
||||||
Pl2Bh(&pl32, &bh32);
|
Pl2Bh(&pl32, &bh32);
|
||||||
Pl2Bh(&pl64, &bh64);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
|
static const int kEntries = 1;
|
||||||
|
|
||||||
|
//entry is 4 ints and a byte
|
||||||
|
static const int kEntrySize = (sizeof(int32_t) * 4) + sizeof(int8_t);
|
||||||
|
|
||||||
BinaryWriter bw(fp);
|
BinaryWriter bw(fp);
|
||||||
|
|
||||||
bw.WriteUInt32(MAGIC_HEADER2);
|
bw.WriteUInt32(MAGIC_HEADER2);
|
||||||
bw.WriteUInt16(MAGIC_VERSION);
|
bw.WriteUInt16(MAGIC_VERSION);
|
||||||
bw.WriteUInt8(2);
|
bw.WriteUInt8(kEntries);
|
||||||
|
|
||||||
//base header
|
//base header
|
||||||
int baseaddr = sizeof(int32_t) + sizeof(int16_t) + sizeof(int8_t);
|
int baseaddr = sizeof(int32_t) + sizeof(int16_t) + sizeof(int8_t);
|
||||||
//entry is 4 ints and a byte
|
//extend this by the entries we have
|
||||||
int entrysize = (sizeof(int32_t) * 4) + sizeof(int8_t);
|
baseaddr += kEntrySize * kEntries;
|
||||||
//extend this by the two entries we have
|
|
||||||
baseaddr += entrysize * 2;
|
|
||||||
|
|
||||||
bh32.offs = baseaddr;
|
bh32.offs = baseaddr;
|
||||||
bh64.offs = bh32.offs + bh32.disksize;
|
|
||||||
|
|
||||||
WriteBh(&bw, &bh32);
|
WriteBh(&bw, &bh32);
|
||||||
WriteBh(&bw, &bh64);
|
|
||||||
bw.WriteChars(pl32.cmp, pl32.cmpsize);
|
bw.WriteChars(pl32.cmp, pl32.cmpsize);
|
||||||
bw.WriteChars(pl64.cmp, pl64.cmpsize);
|
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
unlink(file);
|
unlink(file);
|
||||||
@ -286,7 +244,7 @@ char *swiext(const char *file, const char *ext, int isO)
|
|||||||
int i = 0, pos = -1, j = 0;
|
int i = 0, pos = -1, j = 0;
|
||||||
int fileLen = strlen(file);
|
int fileLen = strlen(file);
|
||||||
int extLen = strlen(ext);
|
int extLen = strlen(ext);
|
||||||
int max = 0, odirFlag = -1;
|
int odirFlag = -1;
|
||||||
|
|
||||||
for (i=fileLen-1; i>=0; i--)
|
for (i=fileLen-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
@ -382,7 +340,7 @@ void show_help()
|
|||||||
printf("\t-r[name] write cross reference report to console or to specified file\n");
|
printf("\t-r[name] write cross reference report to console or to specified file\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
bool FileExists(const char *file)
|
bool FileExists(const char *file)
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(file, "rb");
|
FILE *fp = fopen(file, "rb");
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#ifndef _AMXXSC_INCLUDE_H
|
#ifndef _AMXXSC_INCLUDE_H
|
||||||
#define _AMXXSC_INCLUDE_H
|
#define _AMXXSC_INCLUDE_H
|
||||||
|
|
||||||
#define VERSION_STRING "1.76-300"
|
#define VERSION_STRING "1.8.1-300"
|
||||||
#define MAGIC_HEADER2 0x414D5858
|
#define MAGIC_HEADER2 0x414D5858
|
||||||
#define MAGIC_VERSION 0x0300
|
#define MAGIC_VERSION 0x0300
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
# include <dlfcn.h>
|
# include <dlfcn.h>
|
||||||
#else
|
#else
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
# define dlmount(x) dlopen(x, RTLD_NOW|RTLD_GLOBAL)
|
# define dlmount(x) dlopen(x, RTLD_NOW|RTLD_GLOBAL)
|
||||||
typedef void* HINSTANCE;
|
typedef void* HINSTANCE;
|
||||||
#else
|
#else
|
||||||
@ -65,7 +65,7 @@ struct BinPlugin
|
|||||||
int32_t offs; //file offset
|
int32_t offs; //file offset
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
bool FileExists(const char *file);
|
bool FileExists(const char *file);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user